diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 000000000000..a740b9f13797 --- /dev/null +++ b/.github/README.md @@ -0,0 +1,222 @@ +[![official JetBrains project](http://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) + +# Welcome to JetBrains Runtime! + +JetBrains Runtime is a fork of [OpenJDK](https://github.com/openjdk/jdk) available for Windows, Mac OS X, and Linux. +It supports enhanced class redefinition ([DCEVM](https://ssw.jku.at/dcevm/)), +features optional [JCEF](https://github.com/JetBrains/jcef), a framework for embedding Chromium-based browsers, +includes a number of improvements in font rendering, keyboards support, +windowing/focus subsystems, HiDPI, accessibility, and performance, provides better desktop integration +and bugfixes not yet present in OpenJDK. + +> **_NOTE_**: This is a **development** branch that is periodically synchronized with +> the [OpenJDK master](https://github.com/openjdk/jdk/tree/master) branch. +> + Release builds are based on these branches: + * [jbr11](https://github.com/JetBrains/JetBrainsRuntime/tree/jbr11) (JDK 11) + * [jbr17](https://github.com/JetBrains/JetBrainsRuntime/tree/jbr17) (JDK 17) + * [jbr21](https://github.com/JetBrains/JetBrainsRuntime/tree/jbr21) (JDK 21) + +Download the latest releases of JetBrains Runtime to use with JetBrains IDEs. The full list +can be found on the [releases page](https://github.com/JetBrains/JetBrainsRuntime/releases). + +## Releases based on JDK 21 + +| IDE Version | Latest JBR | Date Released | +|-------------|---------------------------------------------------------------------------------------------------------|---------------| +| 2024.1 | [21.0.2-b346.3](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-21.0.2b346.3) | 30-Jan-2024 | + +## Releases based on JDK 17 + +| IDE Version | Latest JBR | Date Released | +|-------------|--------------------------------------------------------------------------------------------------------|---------------| +| 2024.1 | [17.0.10-b1207.14](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.10b1207.14)| 09-Apr-2024 | +| 2023.3 | [17.0.10-b1087.23](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.10b1087.23) | 20-Mar-2024| +| 2023.2 | [17.0.10-b1000.50](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.10b1000.50) | 20-Mar-2024| +| 2023.1 | [17.0.10-b829.27](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.10b829.27) | 21-Mar-2024 | +| 2022.3 | [17.0.6-b653.34](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.6b653.34) | 28-Feb-2023 | +| 2022.2 | [17.0.6-b469.82](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.6b469.82) | 06-Mar-2023 | + +## Releases based on JDK 11 + +| IDE Version | Latest JBR | Date Released | +|-------------|-------------------------------------------------------------------------------------------------------|---------------| +| 2022.1 | [11_0_16-b2043.64](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr11_0_16b2043.64) | 10-Nov-2022 | +| 2021.3 | [11_0_14_1-b1751.46](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr11_0_14_1b1751.46) | 21-Feb-2022 | +| 2021.2 | [11_0_13-b1504.49](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jb11_0_13-b1504.49) | 15-Nov-2021 | +| 2021.1 | [11.0.11+9-b1341.60](https://github.com/JetBrains/JetBrainsRuntime/issues/171#issuecomment-1248891540)| 15-Jun-2021 | +| 2020.3 | [11_0_10-b1145.115](https://github.com/JetBrains/JetBrainsRuntime/issues/171#issuecomment-1249243977) | 21-Jun-2021 | + +## Contents +- [Welcome to JetBrains Runtime](#welcome-to-jetbrains-runtime) + - [Why Use JetBrains Runtime?](#why-use-jetbrains-runtime) + - [Products Built on JetBrains Runtime](#products-built-on-jetbrains-runtime) + - [Getting Sources](#getting-sources) + - [macOS, Linux](#macos-linux) + - [Windows](#sources-windows) + - [Configuring the Build Environment](#configuring-the-build-environment) + - [Linux (Docker)](#linux-docker) + - [Ubuntu Linux](#ubuntu-linux) + - [Windows](#build-windows) + - [macOS](#macos) + - [Developing](#developing) + - [Contributing](#contributing) + - [Resources](#resources) + +## Why Use JetBrains Runtime? +* **Embedded browser**: JetBrains Runtime includes the Java Chromium Embedded Framework ([JCEF](https://github.com/JetBrains/jcef)), which + enables you to embed a Chromium-based browsers in your JVM-based application. + To use it, [download a build with JCEF](https://github.com/JetBrains/JetBrainsRuntime/releases). +* **Enhanced class re-definition** with the [DCEVM](https://ssw.jku.at/dcevm/) technology that makes it easier to reload + changed code without restarting JVM; this feature needs to be explicitly enabled with `-XX:+AllowEnhancedClassRedefinition`. +* **Better FPS performance** for graphics-intensive applications. +* **Improved font rendering**, **keyboard input** (such as shortcuts and multinational keyboards), + **HiDPI** and **accessibility** support. +* **Robust desktop experience**: GUI-related fixes often reach JetBrains Runtime much earlier than the corresponding version of OpenJDK. + +## Products Built on JetBrains Runtime +* [Android Studio](https://developer.android.com/studio). The official IDE for Google's Android operating system. +* [CLion](https://www.jetbrains.com/clion/). A cross-platform IDE for C and C++ from JetBrains. +* [DataGrip](https://www.jetbrains.com/datagrip/). The IDE for Databases and SQL from JetBrains. +* [GoLand](https://www.jetbrains.com/go/). The cross-platform Go IDE from JetBrains. +* [IntelliJ IDEA](https://www.jetbrains.com/idea/). The IDE for JVM from JetBrains. +* [JProfiler](https://www.ej-technologies.com/products/jprofiler/overview.html). The Java profiler. +* [PhpStorm](https://www.jetbrains.com/phpstorm/). The PHP IDE from JetBrains. +* [PyCharm](https://www.jetbrains.com/pycharm/). The Python IDE from JetBrains. +* [Rider](https://www.jetbrains.com/rider/). The cross-platform .NET IDE from JetBrains. +* [RubyMine](https://www.jetbrains.com/ruby/). The Ruby and Rails IDE from JetBrains. +* [Toolbox App](https://www.jetbrains.com/toolbox-app/). JetBrains IDE manager. +* [WebStorm](https://www.jetbrains.com/webstorm/). The JavaScript IDE from JetBrains. +* [YourKit](https://www.yourkit.com/). Java and .NET profilers. + +## Getting Sources +### macOS, Linux +``` +git config --global core.autocrlf input +git clone git@github.com:JetBrains/JetBrainsRuntime.git +``` + +### Windows + +``` +git config --global core.autocrlf false +git clone git@github.com:JetBrains/JetBrainsRuntime.git +``` + +## Configuring the Build Environment +Here are quick per-platform instructions for those who can't wait to get started. +Please refer to [OpenJDK build docs](https://openjdk.java.net/groups/build/doc/building.html) for in-depth +coverage of all the details. + +> **_TIP:_** To get a preliminary report of what's missing, run `./configure` and check its output. +> It would usually have meaningful advice on how to solve the problem. + +### Linux (Docker) +Create a container: +``` +$ cd jb/project/docker +$ docker build . +... +Successfully built 942ea9900054 +``` +Run these commands in the new container: +``` +$ docker run -v `pwd`../../../../:/JetBrainsRuntime -it 942ea9900054 +# cd /JetBrainsRuntime +# sh ./configure +# make images CONF=linux-x86_64-normal-server-release +``` + +### Ubuntu Linux +Install the necessary tools, libraries, and headers with: +``` +$ sudo apt-get install autoconf make build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev \ + libxt-dev libxrandr-dev libcups2-dev libfontconfig1-dev libasound2-dev +``` +Get Java 21 (for instance, [Azul Zulu Builds of OpenJDK 21](https://www.azul.com/downloads/?version=java-21-lts&os=linux&package=jdk#zulu)). + +Then run the following: +``` +$ cd JetBrainsRuntime +$ git checkout main +$ sh ./configure +$ make images +``` +This will build the release configuration under `./build/linux-x86_64-server-release/`. + +### Windows + +Install the following: +* [Cygwin x64](http://www.cygwin.com/). + Required packages: `autoconf`, `binutils`, `cpio`, `diffutils`, `file`, `gawk`, `gcc-core`, `make`, `m4`, `unzip`, `zip`. + Install those together with Cygwin. +* [Visual Studio compiler toolset](https://visualstudio.microsoft.com/downloads/). + Install with the desktop development kit, which includes Windows SDK and compilers. + Visual Studio 2019 is supported by default. +* Java 21 (for instance, [Azul Zulu Builds of OpenJDK 21](https://www.azul.com/downloads/?version=java-21-lts&os=windows&package=jdk#zulu)). + If you have problems while configuring, read [Java tips on Cygwin](http://horstmann.com/articles/cygwin-tips.html). + +From the command line: +``` +"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64 +"c:\Program_Files\cygwin64\bin\mintty.exe" /bin/bash -l +``` +The first command sets up environment variables, the second starts a Cygwin shell with the proper environment. + +In the Cygwin shell: +``` +$ cd JetBrainsRuntime +$ git checkout main +$ bash configure --with-toolchain-version=2019 +$ make images +``` +This will build the release configuration under `./build/windows-x86_64-server-release/`. + +### macOS +Install the following: +* Xcode command line developer tools and `autoconf` via [Homebrew](https://brew.sh/). +* Java 21 (for instance, [Azul Zulu Builds of OpenJDK 21](https://www.azul.com/downloads/?version=java-21-lts&os=macos&package=jdk#zulu)). + +From the command line: +``` +$ cd JetBrainsRuntime +$ git checkout main +$ sh ./configure +$ make images +``` +This will build the release configuration under `./build/macosx-x86_64-server-release/`. + +## Developing +You can use [CLion](https://www.jetbrains.com/clion/) to develop native parts of the JetBrains Runtime and +[IntelliJ IDEA](https://www.jetbrains.com/idea/) for the parts written in Java. +Both require projects to be created. + +### CLion +Run +``` +$ make compile-commands +``` +in the git root and open the resulting `build/.../compile_commands.json` file as a project. +Then use `Tools | Compilation Database | Change Project Root` to point to git root of this repository. + +See also this detailed step-by-step tutorial for all platforms: +[How to develop OpenJDK with CLion](https://blog.jetbrains.com/clion/2020/03/openjdk-with-clion/). + +### IDEA +Run +``` +$ sh ./bin/idea.sh +``` +in the git root to generate project files (add `--help` for options). If you have multiple +configurations (for example, `release` and `fastdebug`), supply the `--conf ` argument. +Then open the git root directory as a project in IDEA. + +## Contributing +We are happy to receive your pull requests! +Before you submit one, please sign our [Contributor License Agreement (CLA)](https://www.jetbrains.com/agreements/cla/). + +## Resources +* [JetBrains Runtime on GitHub](https://github.com/JetBrains/JetBrainsRuntime). +* [OpenJDK build instructions](https://openjdk.java.net/groups/build/doc/building.html). +* [OpenJDK test instructions](https://htmlpreview.github.io/?https://raw.githubusercontent.com/openjdk/jdk/master/doc/building.html#running-tests). +* [How to develop OpenJDK with CLion](https://blog.jetbrains.com/clion/2020/03/openjdk-with-clion/). diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index df53a2cd310e..91ac98e106e8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,6 +31,7 @@ on: - master - pr/* - jdk* + - main workflow_dispatch: inputs: platforms: @@ -60,7 +61,8 @@ jobs: outputs: linux-x64: ${{ steps.include.outputs.linux-x64 }} linux-x86: ${{ steps.include.outputs.linux-x86 }} - linux-x64-variants: ${{ steps.include.outputs.linux-x64-variants }} + # additional build options for linux-x64 are disabled + # linux-x64-variants: ${{ steps.include.outputs.linux-x64-variants }} linux-cross-compile: ${{ steps.include.outputs.linux-cross-compile }} macos-x64: ${{ steps.include.outputs.macos-x64 }} macos-aarch64: ${{ steps.include.outputs.macos-aarch64 }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 000000000000..33697b7a9799 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,270 @@ +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +name: 'Build OpenJDK on pull request' + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ### + ### Determine platforms to include + ### + select: + name: 'Select platforms' + runs-on: ubuntu-22.04 + outputs: + linux-x64: ${{ steps.include.outputs.linux-x64 }} + linux-x86: ${{ steps.include.outputs.linux-x86 }} + linux-cross-compile: ${{ steps.include.outputs.linux-cross-compile }} + macos-x64: ${{ steps.include.outputs.macos-x64 }} + macos-aarch64: ${{ steps.include.outputs.macos-aarch64 }} + windows-x64: ${{ steps.include.outputs.windows-x64 }} + windows-aarch64: ${{ steps.include.outputs.windows-aarch64 }} + windows-x86: ${{ steps.include.outputs.windows-x86 }} + + steps: + # This function must be inlined in main.yml, or we'd be forced to checkout the repo + - name: 'Check what jobs to run' + id: include + run: | + # Determine which platform jobs to run + + # Returns 'true' if the input platform list matches any of the platform monikers given as argument, + # 'false' otherwise. + # arg $1: platform name or names to look for + function check_platform() { + if [[ $GITHUB_EVENT_NAME == workflow_dispatch ]]; then + input='${{ github.event.inputs.platforms }}' + elif [[ $GITHUB_EVENT_NAME == push ]]; then + if [[ '${{ !secrets.JDK_SUBMIT_FILTER || startsWith(github.ref, 'refs/heads/submit/') }}' == 'false' ]]; then + # If JDK_SUBMIT_FILTER is set, and this is not a "submit/" branch, don't run anything + >&2 echo 'JDK_SUBMIT_FILTER is set and not a "submit/" branch' + echo 'false' + return + else + input='${{ secrets.JDK_SUBMIT_PLATFORMS }}' + fi + fi + + normalized_input="$(echo ,$input, | tr -d ' ')" + if [[ "$normalized_input" == ",," ]]; then + # For an empty input, assume all platforms should run + echo 'true' + return + else + # Check for all acceptable platform names + for part in $* ; do + if echo "$normalized_input" | grep -q -e ",$part," ; then + echo 'true' + return + fi + done + fi + + echo 'false' + } + + echo "linux-x64=$(check_platform linux-x64 linux x64)" >> $GITHUB_OUTPUT + echo "linux-x86=$(check_platform linux-x86 linux x86)" >> $GITHUB_OUTPUT + echo "linux-x64-variants=$(check_platform linux-x64-variants variants)" >> $GITHUB_OUTPUT + echo "linux-cross-compile=$(check_platform linux-cross-compile cross-compile)" >> $GITHUB_OUTPUT + echo "macos-x64=$(check_platform macos-x64 macos x64)" >> $GITHUB_OUTPUT + echo "macos-aarch64=$(check_platform macos-aarch64 macos aarch64)" >> $GITHUB_OUTPUT + echo "windows-x64=$(check_platform windows-x64 windows x64)" >> $GITHUB_OUTPUT + echo "windows-x86=$(check_platform windows-x86 windows x86)" >> $GITHUB_OUTPUT + echo "windows-aarch64=$(check_platform windows-aarch64 windows aarch64)" >> $GITHUB_OUTPUT + echo "docs=$(check_platform docs)" >> $GITHUB_OUTPUT + + ### + ### Build jobs + ### + + build-linux-x64: + name: linux-x64 + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + gcc-major-version: '10' + apt-gcc-version: '10.4.0-4ubuntu1~22.04' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + # The linux-x64 jdk bundle is used as buildjdk for the cross-compile job + if: needs.select.outputs.linux-x64 == 'true' || needs.select.outputs.linux-cross-compile == 'true' + + build-linux-x86: + name: linux-x86 + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x86 + gcc-major-version: '10' + gcc-package-suffix: '-multilib' + apt-gcc-version: '10.4.0-4ubuntu1~22.04' + apt-architecture: 'i386' + # Some multilib libraries do not have proper inter-dependencies, so we have to + # install their dependencies manually. + apt-extra-packages: 'libfreetype6-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libc6-i386' + extra-conf-options: '--with-target-bits=32' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.linux-x86 == 'true' + + build-linux-cross-compile: + name: linux-cross-compile + needs: + - select + - build-linux-x64 + uses: ./.github/workflows/build-cross-compile.yml + with: + gcc-major-version: '10' + apt-gcc-version: '10.4.0-4ubuntu1~22.04' + apt-gcc-cross-version: '10.4.0-4ubuntu1~22.04cross1' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.linux-cross-compile == 'true' + + build-macos-x64: + name: macos-x64 + needs: select + uses: ./.github/workflows/build-macos.yml + with: + platform: macos-x64 + xcode-toolset-version: '12.5.1' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.macos-x64 == 'true' + + build-macos-aarch64: + name: macos-aarch64 + needs: select + uses: ./.github/workflows/build-macos.yml + with: + platform: macos-aarch64 + xcode-toolset-version: '12.5.1' + extra-conf-options: '--openjdk-target=aarch64-apple-darwin' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.macos-aarch64 == 'true' + + build-windows-x64: + name: windows-x64 + needs: select + uses: ./.github/workflows/build-windows.yml + with: + platform: windows-x64 + msvc-toolset-version: '14.29' + msvc-toolset-architecture: 'x86.x64' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.windows-x64 == 'true' + + build-windows-x86: + name: windows-x86 + needs: select + uses: ./.github/workflows/build-windows.yml + with: + platform: windows-x86 + msvc-toolset-version: '14.29' + msvc-toolset-architecture: 'x86' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.windows-x86 == 'true' + + build-windows-aarch64: + name: windows-aarch64 + needs: select + uses: ./.github/workflows/build-windows.yml + with: + platform: windows-aarch64 + msvc-toolset-version: '14.29' + msvc-toolset-architecture: 'arm64' + make-target: 'hotspot' + extra-conf-options: '--openjdk-target=aarch64-unknown-cygwin' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.windows-aarch64 == 'true' + + build-docs: + name: docs + needs: select + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + debug-levels: '[ "debug" ]' + make-target: 'docs-jdk-bundles' + # Make sure we never try to make full docs, since that would require a + # build JDK, and we do not need the additional testing of the graphs. + extra-conf-options: '--disable-full-docs' + gcc-major-version: '10' + apt-gcc-version: '10.4.0-4ubuntu1~22.04' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + if: needs.select.outputs.docs == 'true' + + # Remove bundles so they are not misconstrued as binary distributions from the JDK project + remove-bundles: + name: 'Remove bundle artifacts' + runs-on: ubuntu-22.04 + if: always() + needs: + - build-linux-x64 + - build-linux-x86 + - build-linux-cross-compile + - build-macos-x64 + - build-macos-aarch64 + - build-windows-x64 + - build-windows-aarch64 + - build-windows-x86 + + steps: + # Hack to get hold of the api environment variables that are only defined for actions + - name: 'Get API configuration' + id: api + uses: actions/github-script@v6 + with: + script: 'return { url: process.env["ACTIONS_RUNTIME_URL"], token: process.env["ACTIONS_RUNTIME_TOKEN"] }' + + - name: 'Remove bundle artifacts' + run: | + # Find and remove all bundle artifacts + ALL_ARTIFACT_URLS="$(curl -s \ + -H 'Accept: application/json;api-version=6.0-preview' \ + -H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \ + '${{ fromJson(steps.api.outputs.result).url }}_apis/pipelines/workflows/${{ github.run_id }}/artifacts?api-version=6.0-preview')" + BUNDLE_ARTIFACT_URLS="$(echo "$ALL_ARTIFACT_URLS" | jq -r -c '.value | map(select(.name|startswith("bundles-"))) | .[].url')" + for url in $BUNDLE_ARTIFACT_URLS; do + echo "Removing $url" + curl -s \ + -H 'Accept: application/json;api-version=6.0-preview' \ + -H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \ + -X DELETE "$url" \ + || echo "Failed to remove bundle" + done diff --git a/README.md b/README.md index b3f30676b3cf..bbe063c24bb6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![official JetBrains project](http://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) + # Welcome to the JDK! For build instructions please see the diff --git a/bin/idea.sh b/bin/idea.sh index c85ae294454e..11c727dd936b 100644 --- a/bin/idea.sh +++ b/bin/idea.sh @@ -25,7 +25,26 @@ # Shell script for generating an IDEA project from a given list of modules usage() { - echo "usage: $0 [-h|--help] [-v|--verbose] [-o|--output ] [-c|--conf ] [modules]+" + echo "Usage: $0 [-h|--help] [-q|--quiet] [-a|--absolute-paths] [-r|--root ] [-o|--output ] [-c|--conf ] [modules...]" + echo " -h | --help" + echo " -q | --quiet + No stdout output" + echo " -a | --absolute-paths + Use absolute paths to this jdk, so that generated .idea + project files can be moved independently of jdk sources" + echo " -r | --root + Project content root + Default: $TOPLEVEL_DIR" + echo " -o | --output + Where .idea directory with project files will be generated + (e.g. using '-o .' will place project files in './.idea') + Default: same as --root" + echo " -c | --conf + make configuration (release, slowdebug etc)" + echo " [modules...] + Generate project modules for specific java modules + (e.g. 'java.base java.desktop') + Default: all existing modules (java.* and jdk.*)" exit 1 } @@ -33,10 +52,13 @@ SCRIPT_DIR=`dirname $0` #assume TOP is the dir from which the script has been called TOP=`pwd` cd $SCRIPT_DIR; SCRIPT_DIR=`pwd` +if [ "x$TOPLEVEL_DIR" = "x" ] ; then + cd .. ; TOPLEVEL_DIR=`pwd` +fi cd $TOP; -IDEA_OUTPUT=$TOP/.idea -VERBOSE="false" +VERBOSE=true +ABSOLUTE_PATHS=false CONF_ARG= while [ $# -gt 0 ] do @@ -45,14 +67,24 @@ do usage ;; - -v | --vebose ) - VERBOSE="true" + -q | --quiet ) + VERBOSE=false + ;; + + -a | --absolute-paths ) + ABSOLUTE_PATHS=true + ;; + + -r | --root ) + TOPLEVEL_DIR="$2" + shift ;; -o | --output ) - IDEA_OUTPUT=$2/.idea + IDEA_OUTPUT="$2/.idea" shift ;; + -c | --conf ) CONF_ARG="CONF_NAME=$2" shift @@ -69,20 +101,17 @@ do shift done -if [ -e $IDEA_OUTPUT ] ; then - rm -r $IDEA_OUTPUT +if [ "x$IDEA_OUTPUT" = "x" ] ; then + IDEA_OUTPUT="$TOPLEVEL_DIR/.idea" fi -mkdir -p $IDEA_OUTPUT || exit 1 -cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd` -if [ "x$TOPLEVEL_DIR" = "x" ] ; then - cd $SCRIPT_DIR/.. - TOPLEVEL_DIR=`pwd` - cd $IDEA_OUTPUT -fi +mkdir -p $IDEA_OUTPUT || exit 1 +cd "$TOP" ; cd $TOPLEVEL_DIR; TOPLEVEL_DIR=`pwd` +cd "$TOP" ; cd $IDEA_OUTPUT; IDEA_OUTPUT=`pwd` +cd ..; IDEA_OUTPUT_PARENT=`pwd` +cd "$SCRIPT_DIR/.." ; OPENJDK_DIR=`pwd` -MAKE_DIR="$SCRIPT_DIR/../make" -IDEA_MAKE="$MAKE_DIR/ide/idea/jdk" +IDEA_MAKE="$OPENJDK_DIR/make/ide/idea/jdk" IDEA_TEMPLATE="$IDEA_MAKE/template" cp -r "$IDEA_TEMPLATE"/* "$IDEA_OUTPUT" @@ -94,31 +123,31 @@ if [ -d "$TEMPLATES_OVERRIDE" ] ; then done fi -if [ "$VERBOSE" = "true" ] ; then - echo "output dir: $IDEA_OUTPUT" - echo "idea template dir: $IDEA_TEMPLATE" +if [ "$VERBOSE" = true ] ; then + echo "Will generate IDEA project files in \"$IDEA_OUTPUT\" for project \"$TOPLEVEL_DIR\"" fi -cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I $MAKE_DIR/.. idea MAKEOVERRIDES= OUT=$IDEA_OUTPUT/env.cfg MODULES="$*" $CONF_ARG || exit 1 +cd $TOP ; make -f "$IDEA_MAKE/idea.gmk" -I "$OPENJDK_DIR" idea TOPLEVEL_DIR="$TOPLEVEL_DIR" \ + MAKEOVERRIDES= IDEA_OUTPUT_PARENT="$IDEA_OUTPUT_PARENT" OUT="$IDEA_OUTPUT/env.cfg" MODULES="$*" $CONF_ARG || exit 1 cd $SCRIPT_DIR . $IDEA_OUTPUT/env.cfg -# Expect MODULE_ROOTS, MODULE_NAMES, BOOT_JDK & SPEC to be set -if [ "x$MODULE_ROOTS" = "x" ] ; then - echo "FATAL: MODULE_ROOTS is empty" >&2; exit 1 +# Expect MODULES, MODULE_NAMES, RELATIVE_PROJECT_DIR, RELATIVE_BUILD_DIR to be set +if [ "xMODULES" = "x" ] ; then + echo "FATAL: MODULES is empty" >&2; exit 1 fi if [ "x$MODULE_NAMES" = "x" ] ; then echo "FATAL: MODULE_NAMES is empty" >&2; exit 1 fi -if [ "x$BOOT_JDK" = "x" ] ; then - echo "FATAL: BOOT_JDK is empty" >&2; exit 1 +if [ "x$RELATIVE_PROJECT_DIR" = "x" ] ; then + echo "FATAL: RELATIVE_PROJECT_DIR is empty" >&2; exit 1 fi -if [ "x$SPEC" = "x" ] ; then - echo "FATAL: SPEC is empty" >&2; exit 1 +if [ "x$RELATIVE_BUILD_DIR" = "x" ] ; then + echo "FATAL: RELATIVE_BUILD_DIR is empty" >&2; exit 1 fi if [ -d "$TOPLEVEL_DIR/.hg" ] ; then @@ -129,6 +158,43 @@ if [ -d "$TOPLEVEL_DIR/.git" ] ; then VCS_TYPE="Git" fi +if [ "$ABSOLUTE_PATHS" = true ] ; then + if [ "x$PATHTOOL" != "x" ]; then + PROJECT_DIR="`$PATHTOOL -am $OPENJDK_DIR`" + TOPLEVEL_PROJECT_DIR="`$PATHTOOL -am $TOPLEVEL_DIR`" + else + PROJECT_DIR="$OPENJDK_DIR" + TOPLEVEL_PROJECT_DIR="$TOPLEVEL_DIR" + fi + MODULE_DIR="$PROJECT_DIR" + TOPLEVEL_MODULE_DIR="$TOPLEVEL_PROJECT_DIR" + cd "$IDEA_OUTPUT_PARENT" && cd "$RELATIVE_BUILD_DIR" && BUILD_DIR="`pwd`" + CLION_SCRIPT_TOPDIR="$OPENJDK_DIR" + CLION_PROJECT_DIR="$PROJECT_DIR" +else + if [ "$RELATIVE_PROJECT_DIR" = "." ] ; then + PROJECT_DIR="" + else + PROJECT_DIR="/$RELATIVE_PROJECT_DIR" + fi + if [ "$RELATIVE_TOPLEVEL_PROJECT_DIR" = "." ] ; then + TOPLEVEL_PROJECT_DIR="" + else + TOPLEVEL_PROJECT_DIR="/$RELATIVE_TOPLEVEL_PROJECT_DIR" + fi + MODULE_DIR="\$MODULE_DIR\$$PROJECT_DIR" + PROJECT_DIR="\$PROJECT_DIR\$$PROJECT_DIR" + TOPLEVEL_MODULE_DIR="\$MODULE_DIR\$$TOPLEVEL_PROJECT_DIR" + TOPLEVEL_PROJECT_DIR="\$PROJECT_DIR\$$TOPLEVEL_PROJECT_DIR" + BUILD_DIR="\$PROJECT_DIR\$/$RELATIVE_BUILD_DIR" + CLION_SCRIPT_TOPDIR="$CLION_RELATIVE_PROJECT_DIR" + CLION_PROJECT_DIR="\$PROJECT_DIR\$/$CLION_SCRIPT_TOPDIR" +fi +if [ "$VERBOSE" = true ] ; then + echo "Project root: $PROJECT_DIR" + echo "Generating IDEA project files..." +fi + ### Replace template variables NUM_REPLACEMENTS=0 @@ -152,116 +218,106 @@ add_replacement() { eval TO$NUM_REPLACEMENTS='$2' } +add_replacement "###PATHTOOL###" "$PATHTOOL" +add_replacement "###CLION_SCRIPT_TOPDIR###" "$CLION_SCRIPT_TOPDIR" +add_replacement "###CLION_PROJECT_DIR###" "$CLION_PROJECT_DIR" +add_replacement "###PROJECT_DIR###" "$PROJECT_DIR" +add_replacement "###MODULE_DIR###" "$MODULE_DIR" +add_replacement "###TOPLEVEL_PROJECT_DIR###" "$TOPLEVEL_PROJECT_DIR" +add_replacement "###TOPLEVEL_MODULE_DIR###" "$TOPLEVEL_MODULE_DIR" add_replacement "###MODULE_NAMES###" "$MODULE_NAMES" add_replacement "###VCS_TYPE###" "$VCS_TYPE" -SPEC_DIR=`dirname $SPEC` -if [ "x$CYGPATH" != "x" ]; then - add_replacement "###BUILD_DIR###" "`$CYGPATH -am $SPEC_DIR`" - add_replacement "###IMAGES_DIR###" "`$CYGPATH -am $SPEC_DIR`/images/jdk" - add_replacement "###ROOT_DIR###" "`$CYGPATH -am $TOPLEVEL_DIR`" - add_replacement "###IDEA_DIR###" "`$CYGPATH -am $IDEA_OUTPUT`" - if [ "x$JT_HOME" = "x" ]; then - add_replacement "###JTREG_HOME###" "" - else - add_replacement "###JTREG_HOME###" "`$CYGPATH -am $JT_HOME`" - fi -elif [ "x$WSL_DISTRO_NAME" != "x" ]; then - add_replacement "###BUILD_DIR###" "`wslpath -am $SPEC_DIR`" - add_replacement "###IMAGES_DIR###" "`wslpath -am $SPEC_DIR`/images/jdk" - add_replacement "###ROOT_DIR###" "`wslpath -am $TOPLEVEL_DIR`" - add_replacement "###IDEA_DIR###" "`wslpath -am $IDEA_OUTPUT`" +add_replacement "###BUILD_DIR###" "$BUILD_DIR" +add_replacement "###RELATIVE_BUILD_DIR###" "$RELATIVE_BUILD_DIR" +if [ "x$PATHTOOL" != "x" ]; then + add_replacement "###BASH_RUNNER_PREFIX###" "\$PROJECT_DIR\$/.idea/bash.bat" +else + add_replacement "###BASH_RUNNER_PREFIX###" "" +fi +if [ "x$PATHTOOL" != "x" ]; then if [ "x$JT_HOME" = "x" ]; then add_replacement "###JTREG_HOME###" "" else - add_replacement "###JTREG_HOME###" "`wslpath -am $JT_HOME`" + add_replacement "###JTREG_HOME###" "`$PATHTOOL -am $JT_HOME`" fi else - add_replacement "###BUILD_DIR###" "$SPEC_DIR" add_replacement "###JTREG_HOME###" "$JT_HOME" - add_replacement "###IMAGES_DIR###" "$SPEC_DIR/images/jdk" - add_replacement "###ROOT_DIR###" "$TOPLEVEL_DIR" - add_replacement "###IDEA_DIR###" "$IDEA_OUTPUT" fi -SOURCE_PREFIX="" - -for root in $MODULE_ROOTS; do - if [ "x$CYGPATH" != "x" ]; then - root=`$CYGPATH -am $root` - elif [ "x$WSL_DISTRO_NAME" != "x" ]; then - root=`wslpath -am $root` - fi - - SOURCES=$SOURCES" $SOURCE_PREFIX""$root""$SOURCE_POSTFIX" +MODULE_IMLS="" +TEST_MODULE_DEPENDENCIES="" +for module in $MODULE_NAMES; do + MODULE_IMLS="$MODULE_IMLS " + TEST_MODULE_DEPENDENCIES="$TEST_MODULE_DEPENDENCIES " done - -add_replacement "###SOURCE_ROOTS###" "$SOURCES" +add_replacement "###MODULE_IMLS###" "$MODULE_IMLS" +add_replacement "###TEST_MODULE_DEPENDENCIES###" "$TEST_MODULE_DEPENDENCIES" replace_template_dir "$IDEA_OUTPUT" -### Compile the custom Logger - -CLASSES=$IDEA_OUTPUT/classes +### Generate module project files -if [ "x$ANT_HOME" = "x" ] ; then - # try some common locations - if [ -f "/usr/share/ant/lib/ant.jar" ] ; then - ANT_HOME="/usr/share/ant" - else - try_ant=$(ls /opt/homebrew/Cellar/ant/*/libexec/lib/ant.jar 2> /dev/null | sort -r | head -n 1) - if [ "x$try_ant" != "x" ] ; then - ANT_HOME=$(cd $(dirname $try_ant)/.. && pwd) - else - try_ant=$(ls /usr/local/Cellar/ant/*/libexec/lib/ant.jar 2> /dev/null | sort -r | head -n 1) - if [ "x$try_ant" != "x" ] ; then - ANT_HOME=$(cd $(dirname $try_ant)/.. && pwd) - fi - fi +if [ "$VERBOSE" = true ] ; then + echo "Generating project modules:" fi -else - if [ ! -f "$ANT_HOME/lib/ant.jar" ] ; then - echo "FATAL: ANT_HOME is incorrect. Try removing it and use autodetection, or fix the value" >&2; exit 1 +( +DEFAULT_IFS="$IFS" +IFS='#' +for value in $MODULES; do + ( + eval "$value" + if [ "$VERBOSE" = true ] ; then + echo " $module" fi -fi + MAIN_SOURCE_DIRS="" + CONTENT_ROOTS="" + IFS=' ' + for dir in $moduleSrcDirs; do + case $dir in + "src/"*) MAIN_SOURCE_DIRS="$MAIN_SOURCE_DIRS " ;; + *"/support/gensrc/$module") ;; # Exclude generated sources to avoid module-info conflicts, see https://youtrack.jetbrains.com/issue/IDEA-185108 + *) CONTENT_ROOTS="$CONTENT_ROOTS \ + " ;; + esac + done + if [ "x$MAIN_SOURCE_DIRS" != "x" ] ; then + CONTENT_ROOTS="$MAIN_SOURCE_DIRS$CONTENT_ROOTS" + fi + add_replacement "###MODULE_CONTENT_ROOTS###" "$CONTENT_ROOTS" + DEPENDENCIES="" + for dep in $moduleDependencies; do + case $MODULE_NAMES in # Exclude skipped modules from dependencies + *"$dep"*) DEPENDENCIES="$DEPENDENCIES " + esac + done + add_replacement "###DEPENDENCIES###" "$DEPENDENCIES" + cp "$IDEA_OUTPUT/module.iml" "$IDEA_OUTPUT/$module.iml" + IFS="$DEFAULT_IFS" + replace_template_file "$IDEA_OUTPUT/$module.iml" + ) +done +) +rm "$IDEA_OUTPUT/module.iml" -if [ "x$ANT_HOME" = "x" ] ; then - echo "FATAL: cannot find ant. Try setting ANT_HOME." >&2; exit 1 -fi -CP=$ANT_HOME/lib/ant.jar -rm -rf $CLASSES; mkdir $CLASSES +### Create shell script runner for Windows -# If we have a Windows boot JDK, we need a .exe suffix -if [ -e "$BOOT_JDK/bin/java.exe" ] ; then - JAVAC=javac.exe -else - JAVAC=javac +if [ "x$PATHTOOL" != "x" ]; then + echo "@echo off" > "$IDEA_OUTPUT/bash.bat" + if [ "x$WSL_DISTRO_NAME" != "x" ] ; then + echo "wsl -d $WSL_DISTRO_NAME --cd \"%cd%\" -e %*" >> "$IDEA_OUTPUT/bash.bat" + else + echo "$WINENV_ROOT\bin\bash.exe -l -c \"cd %CD:\=/%/ && %*\"" >> "$IDEA_OUTPUT/bash.bat" + fi fi -# If we are on WSL, the boot JDK might be either Windows or Linux, -# and we need to use realpath instead of CYGPATH to make javac work on both. -# We need to handle this case first since CYGPATH might be set on WSL. -if [ "x$WSL_DISTRO_NAME" != "x" ]; then - JAVAC_SOURCE_FILE=`realpath --relative-to=./ $IDEA_OUTPUT/src/idea/IdeaLoggerWrapper.java` - JAVAC_SOURCE_PATH=`realpath --relative-to=./ $IDEA_OUTPUT/src` - JAVAC_CLASSES=`realpath --relative-to=./ $CLASSES` - ANT_TEMP=`mktemp -d -p ./` - cp $ANT_HOME/lib/ant.jar $ANT_TEMP/ant.jar - JAVAC_CP=$ANT_TEMP/ant.jar -elif [ "x$CYGPATH" != "x" ] ; then ## CYGPATH may be set in env.cfg - JAVAC_SOURCE_FILE=`$CYGPATH -am $IDEA_OUTPUT/src/idea/IdeaLoggerWrapper.java` - JAVAC_SOURCE_PATH=`$CYGPATH -am $IDEA_OUTPUT/src` - JAVAC_CLASSES=`$CYGPATH -am $CLASSES` - JAVAC_CP=`$CYGPATH -am $CP` -else - JAVAC_SOURCE_FILE=$IDEA_OUTPUT/src/idea/IdeaLoggerWrapper.java - JAVAC_SOURCE_PATH=$IDEA_OUTPUT/src - JAVAC_CLASSES=$CLASSES - JAVAC_CP=$CP -fi -$BOOT_JDK/bin/$JAVAC -d $JAVAC_CLASSES -sourcepath $JAVAC_SOURCE_PATH -cp $JAVAC_CP $JAVAC_SOURCE_FILE -if [ "x$WSL_DISTRO_NAME" != "x" ]; then - rm -rf $ANT_TEMP -fi +if [ "$VERBOSE" = true ] ; then + IDEA_PROJECT_DIR="`dirname $IDEA_OUTPUT`" + if [ "x$PATHTOOL" != "x" ]; then + IDEA_PROJECT_DIR="`$PATHTOOL -am $IDEA_PROJECT_DIR`" + fi + echo " +Now you can open \"$IDEA_PROJECT_DIR\" as IDEA project +You can also run 'bash \"$IDEA_OUTPUT/jdk-clion/update-project.sh\"' to generate Clion project" +fi \ No newline at end of file diff --git a/configure b/configure old mode 100644 new mode 100755 diff --git a/jb/branchdiff.py b/jb/branchdiff.py new file mode 100755 index 000000000000..81d48de0cd68 --- /dev/null +++ b/jb/branchdiff.py @@ -0,0 +1,274 @@ +#!/usr/bin/env python3 + +import argparse +import os.path +import sys +import subprocess + +errors_count = 0 + + +def fatal(msg): + sys.stderr.write(f"[fatal] {msg}\n") + sys.exit(1) + + +def error(msg): + global errors_count + errors_count += 1 + sys.stderr.write(f"[error] {msg}\n") + + +def verbose(options, *msg): + if options.verbose: + sys.stderr.write(f"[verbose] ") + sys.stderr.write(*msg) + sys.stderr.write('\n') + + +def first_line(str): + return "" if not str else str.splitlines()[0] + + +class Options: + def __init__(self): + ap = argparse.ArgumentParser(description="Show commit differences between branches of JBR git repos", + epilog="Example: %(prog)s --from origin/jbr17 --to jbr17.b469 --path " + "src/hotspot --limit 200") + ap.add_argument('--jbr', dest='jbrpath', help='path to JBR git root', required=True) + ap.add_argument('--from', dest='frombranch', help='branch to take commits from', required=True) + ap.add_argument('--to', dest='tobranch', help='branch to apply new commits to', required=True) + ap.add_argument('--path', dest='path', help='limit to changes in this path (relative to git root)') + ap.add_argument('--limit', dest='limit', help='limit to this many log entries in --jdk repo', type=int, + default=-1) + ap.add_argument('--html', dest="ishtml", help="print out HTML rather than plain text", action='store_true') + ap.add_argument('-o', dest="output", help="print the list of missing commits to this file" + " to be used as exclude list later") + ap.add_argument('--exclude', dest='exclude', help='exclude commits listed in the given file ' + '(can use edited -o output file as input here)') + ap.add_argument('-v', dest='verbose', help="verbose output", default=False, action='store_true') + args = ap.parse_args() + + if not os.path.isdir(args.jbrpath): + fatal(f"{args.jbrpath} not a directory") + + if not git_is_available(): + fatal("can't run git commands; make sure git is in PATH") + + self.frombranch = args.frombranch + self.tobranch = args.tobranch + self.jbrpath = args.jbrpath + self.path = args.path + self.limit = args.limit + self.exclude = args.exclude + self.output = args.output + self.ishtml = args.ishtml + self.verbose = args.verbose + + +class GitRepo: + def __init__(self, rootpath): + self.rootpath = rootpath + + def run_git_cmd(self, git_args): + args = ["git", "-C", self.rootpath] + args.extend(git_args) + # print(f"Runnig git cmd '{' '.join(args)}'") + p = subprocess.run(args, capture_output=True, text=True) + if p.returncode != 0: + fatal(f"git returned non-zero code in {self.rootpath} ({first_line(p.stderr)})") + return p.stdout + + def save_git_cmd(self, fname, git_args): + args = ["git", "-C", self.rootpath] + args.extend(git_args) + # print(f"Runnig git cmd '{' '.join(args)}'") + with open(fname, "w") as stdout_file: + p = subprocess.run(args, stdout=stdout_file) + if p.returncode != 0: + fatal(f"git returned non-zero code in {self.rootpath} ({first_line(p.stderr)})") + + def current_branch(self): + branch_name = self.run_git_cmd(["branch", "--show-current"]).strip() + return branch_name + + def log(self, branch, path=None, limit=None): + cmds = ["log", "--no-decorate", branch] + if limit: + cmds.extend(["-n", str(limit)]) + if path: + cmds.append(path) + full_log = self.run_git_cmd(cmds) + return full_log + + +class Commit: + def __init__(self, lines): + self.sha = lines[0].split()[1] + self.message = "" + self.fullmessage = "" + self.bugid = "" + + # Commit message starts after one blank line + read_message = False + for l in lines: + if read_message: + self.fullmessage += l.strip() + "\n" + if not read_message and l == "": + read_message = True + + if len(self.fullmessage) > 0: + self.message = first_line(self.fullmessage).strip() + t = self.message.split(' ') + if len(t) > 1: + bugid = t[0] + if bugid.startswith("fixup"): + bugid = t[1] + bugid = bugid.strip(":") + if bugid.startswith("JBR-") or bugid.isnumeric(): + self.bugid = bugid + + +class History: + def __init__(self, log): + log_itr = iter(log.splitlines()) + self.commits = [] + self.unique_fullmessages = set() + self.duplicates = set() + commit_lines = [] + for line in log_itr: + if line.startswith("commit ") and len(commit_lines) > 0: + commit = Commit(commit_lines) + self.add_commit(commit) + commit_lines = [] + commit_lines.append(line) + + if len(commit_lines) > 0: + commit = Commit(commit_lines) + self.add_commit(commit) + + def add_commit(self, commit): + self.commits.append(commit) + if commit.fullmessage in self.unique_fullmessages: + self.duplicates.add(commit.fullmessage) + else: + self.unique_fullmessages.add(commit.fullmessage) + + def appears_more_than_once(self, commit): + return commit.fullmessage in self.duplicates + + def contains(self, commit): + return commit.fullmessage in self.unique_fullmessages + + def size(self): + return len(self.commits) + + +def print_explanation(options, jbr): + verbose(options, f"Reading history from '{jbr.rootpath}'") + if options.path: + verbose(options, f"\t(only under '{options.path}')") + if options.limit > 0: + verbose(options, f"\t(up to '{options.limit}' commits)") + verbose(options, f"Searching for missing fixes in '{options.tobranch}' compared with '{options.frombranch}'") + + +def git_is_available(): + p = None + try: + p = subprocess.run(["git", "--help"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except: + pass + return p is not None and p.returncode == 0 + + +def main(): + check_python_min_requirements() + options = Options() + jbr = GitRepo(options.jbrpath) + print_explanation(options, jbr) + + commits_to_save = [] + try: + log_from = jbr.log(options.frombranch, options.path, options.limit) + log_to = jbr.log(options.tobranch, options.path, options.limit) + history_from = History(log_from) + history_to = History(log_to) + + verbose(options, + f"Read {history_from.size()} commits from '{options.frombranch}', {history_to.size()} from {options.tobranch}") + + exclude_list = [] + if options.exclude: + with open(options.exclude, "r") as exclude_file: + l = exclude_file.read().split('\n') + exclude_list = list(filter(lambda line: not line.startswith("#"), l)) + + warned = set() + for c in history_from.commits: + if c.message: + verbose(options, f"Looking for commit '{c.message}'") + if c.message in exclude_list: + verbose(options, "...nope, in exclude list") + continue + + if not history_to.contains(c): + commits_to_save.append(c) + else: + if history_from.appears_more_than_once(c) and c.fullmessage not in warned: + # Not sure which of those seemingly identical commits are present in the target branch + error(f"Commit '{c.message}' appears more than once in branch '{options.frombranch}'. ") + warned.add(c.fullmessage) + except KeyboardInterrupt: + fatal("Interrupted") + + print_out_commits(options, commits_to_save) + save_commits_to_file(commits_to_save, options) + if errors_count > 0: + error(f"{errors_count} error(s) generated to stderr. MANUAL CHECK OF COMMITS IS REQUIRED.") + + +def save_commits_to_file(commits_to_save, options): + if len(commits_to_save) > 0 and options.output: + print() + with open(options.output, "w") as out: + for i, c in enumerate(reversed(commits_to_save)): + print(f"# {c.sha}", file=out) + print(c.message, file=out) + + +def print_out_commits(options, commits_to_save): + if options.ishtml: + print("") + print(f"

Commits on {options.frombranch}" + f" missing from {options.tobranch}

") + if len(commits_to_save) > 0: + for c in sorted(commits_to_save, key=lambda commit: commit.bugid): + if options.ishtml: + msg = c.message + bugurl = "" + if c.bugid: + if c.bugid.isnumeric(): + bugurl = f"https://bugs.openjdk.org/browse/JDK-{c.bugid}" + elif c.bugid.startswith("JBR-"): + bugurl = f"https://youtrack.jetbrains.com/issue/{c.bugid}" + + if len(bugurl) > 0: + msg = msg.replace(c.bugid, f"{c.bugid}") + + sha = f"" \ + f"{c.sha[0:8]}" + print(f"
  • {msg} ({sha})
  • ") + else: + print(f"{c.message} ({c.sha[0:8]})") + if options.ishtml: + print("") + + +def check_python_min_requirements(): + if sys.version_info < (3, 6): + fatal("Minimum version 3.6 is required to run this script") + + +if __name__ == '__main__': + main() diff --git a/jb/jdkdiff.py b/jb/jdkdiff.py new file mode 100755 index 000000000000..2d9f10b68607 --- /dev/null +++ b/jb/jdkdiff.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 + +import argparse +import math +import os.path +import sys +import subprocess + + +def fatal(msg): + sys.stderr.write(f"[fatal] {msg}\n") + sys.exit(1) + + +def verbose(options, *msg): + if options.verbose: + sys.stdout.write(f"[verbose] ") + sys.stdout.write(*msg) + sys.stdout.write('\n') + + +def first_line(str): + return "" if not str else str.splitlines()[0] + + +class Options: + def __init__(self): + ap = argparse.ArgumentParser(description="Show bugfixes differences between JBR and OpenJDK git repos", + epilog="Example: %(prog)s --jdk ./jdk11u/ --jbr ./JetBrainsRuntime/ --path src/hotspot --limit 200") + ap.add_argument('--jdk', dest='jdkpath', help='path to OpenJDK git repo', required=True) + ap.add_argument('--jbr', dest='jbrpath', help='path to JBR git repo', required=True) + ap.add_argument('--path', dest='path', help='limit to changes in this path (relative to git root)') + ap.add_argument('--limit', dest='limit', help='limit to this many log entries in --jdk repo', type=int, default=-1) + ap.add_argument('-o', dest="output_dir", help="save patches to this directory (created if necessary)") + ap.add_argument('-v', dest='verbose', help="verbose output", default=False, action='store_true') + args = ap.parse_args() + + if not os.path.isdir(args.jdkpath): + fatal(f"{args.jdkpath} not a directory") + + if not os.path.isdir(args.jbrpath): + fatal(f"{args.jbrpath} not a directory") + + if not git_is_available(): + fatal("can't run git commands; make sure git is in PATH") + + self.jdkpath = args.jdkpath + self.jbrpath = args.jbrpath + self.path = args.path + self.limit = args.limit + self.output_dir = args.output_dir + self.verbose = args.verbose + + +class GitRepo: + def __init__(self, rootpath): + self.rootpath = rootpath + + def run_git_cmd(self, git_args): + args = ["git", "-C", self.rootpath] + args.extend(git_args) + # print(f"Runnig git cmd '{' '.join(args)}'") + p = subprocess.run(args, capture_output=True, text=True) + if p.returncode != 0: + fatal(f"git returned non-zero code in {self.rootpath} ({first_line(p.stderr)})") + return p.stdout + + def save_git_cmd(self, fname, git_args): + args = ["git", "-C", self.rootpath] + args.extend(git_args) + # print(f"Runnig git cmd '{' '.join(args)}'") + with open(fname, "w") as stdout_file: + p = subprocess.run(args, stdout=stdout_file) + if p.returncode != 0: + fatal(f"git returned non-zero code in {self.rootpath} ({first_line(p.stderr)})") + + def current_branch(self): + branch_name = self.run_git_cmd(["branch", "--show-current"]).strip() + return branch_name + + def log(self, path=None, limit=None): + cmds = ["log", "--no-decorate"] + if limit: + cmds.extend(["-n", str(limit)]) + if path: + cmds.append(path) + full_log = self.run_git_cmd(cmds) + return full_log + + +class Commit: + def __init__(self, lines): + self.sha = lines[0].split()[1] + self.message = "" + self.bugid = None + + # Commit message starts after one blank line + read_message = False + for l in lines: + if read_message: + self.message += l + "\n" + if not read_message and l == "": + read_message = True + + if self.message and self.message != "" and ":" in self.message: + maybe_bugid = self.message.split(":")[0].strip() + if 10 >= len(maybe_bugid) >= 4: + self.bugid = maybe_bugid + + +class History: + def __init__(self, log): + log_itr = iter(log.splitlines()) + self.commits = [] + commit_lines = [] + for line in log_itr: + if line.startswith("commit ") and len(commit_lines) > 0: + commit = Commit(commit_lines) + self.commits.append(commit) + commit_lines = [] + commit_lines.append(line) + + if len(commit_lines) > 0: + commit = Commit(commit_lines) + self.commits.append(commit) + + def contains(self, str): + return any(str in commit.message for commit in self.commits) + + def size(self): + return len(self.commits) + + +def print_explanation(options, jdk, jbr): + verbose(options, f"Reading history from '{jdk.rootpath}' on branch '{jdk.current_branch()}'") + if options.path: + verbose(options, f"\t(only under '{options.path}')") + verbose(options, f"Searching for same fixes in '{jbr.rootpath}' on branch '{jbr.current_branch()}'") + + +def git_is_available(): + p = None + try: + p = subprocess.run(["git", "--help"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except: + pass + return p is not None and p.returncode == 0 + + +def main(): + check_python_min_requirements() + + options = Options() + + jdk = GitRepo(options.jdkpath) + jbr = GitRepo(options.jbrpath) + + print_explanation(options, jdk, jbr) + + commits_to_save = [] + try: + jdk_log = jdk.log(options.path, options.limit) + jdk_history = History(jdk_log) + + jbr_log = jbr.log(options.path) + jbr_history = History(jbr_log) + + verbose(options, f"Read {jdk_history.size()} commits in JDK, {jbr_history.size()} in JBR") + + for c in jdk_history.commits: + if c.bugid: + verbose(options, f"Looking for bugfix for {c.bugid}") + if not jbr_history.contains(c.bugid): + commits_to_save.append(c) + print(f"[note] Fix for {c.bugid} not found in JBR ({jbr.rootpath})") + print(f" commit {c.sha}") + print(f" {first_line(c.message).strip()}") + except KeyboardInterrupt: + fatal("Interrupted") + + if len(commits_to_save) > 0 and options.output_dir: + print() + if not os.path.exists(options.output_dir): + verbose(options, f"Creating output directory {options.output_dir}") + os.makedirs(options.output_dir) + nzeroes = len(str(len(commits_to_save))) + for i, c in enumerate(reversed(commits_to_save)): + fname = os.path.join(options.output_dir, f"{str(i).zfill(nzeroes)}-{c.bugid}.patch") + print(f"[note] {c.bugid} saved as {fname}") + fname = os.path.abspath(fname) + jdk.save_git_cmd(fname, ["format-patch", "-1", c.sha, "--stdout"]) + + script_fname = os.path.join(options.output_dir, "apply.sh") + with open(script_fname, "w") as script_file: + print(apply_script_code.format(os.path.abspath(jbr.rootpath), os.path.abspath(options.output_dir)), + file=script_file) + print(f"[note] Execute 'bash {script_fname}' to apply patches to {jbr.rootpath}") + + +def check_python_min_requirements(): + if sys.version_info < (3, 6): + fatal("Minimum version 3.6 is required to run this script") + + +apply_script_code = """ +#!/bin/bash + +GITROOT={0} +PATCHROOT={1} + +cd $PATCHROOT || exit 1 +PATCHES=$(find $PATCHROOT -name '*.patch' | sort -n) + +for P in $PATCHES; do + git -C $GITROOT am $P + if [ $? != 0 ]; then + mv "$P" "$P.failed" + echo "[ERROR] Patch $P did not apply cleanly. Try applying it manually." + echo "[NOTE] Execute this script to apply the remaining patches." + exit 1 + else + mv "$P" "$P.done" + fi +done + +echo "[NOTE] Done applying patches; check $PATCHROOT for .patch and .patch.failed to see if all have been applied." +""" + +if __name__ == '__main__': + main() diff --git a/jb/project/docker/Dockerfile-jbrTest b/jb/project/docker/Dockerfile-jbrTest new file mode 100644 index 000000000000..8d8a284c4770 --- /dev/null +++ b/jb/project/docker/Dockerfile-jbrTest @@ -0,0 +1,57 @@ +# NOTE: This Dockerfile is meant to be used from the mkdocker_jbrtest.sh script. + +# Pull a concrete version of Linux that does NOT recieve updates after it's +# been created. This is so that the image is as stable as possible to make +# image creation reproducible. +# NB: this also means there may be no security-related fixes there, need to +# move the version to the next manually. + +ARG ARCH_FROM +ARG ARCH=i386 +ARG OS_NAME +ARG OS_VERSION + +# jetbrains/runtime:jbrTest_${os_name}${os_version}-$arch +FROM ${ARCH_FROM}/${OS_NAME}:${OS_VERSION} + +COPY jbr-11_0_16-linux-x86-b2043.64.tar.gz /jbr/ +ARG ARCH +RUN \ + if [ "$ARCH" = "i386" ]; then \ + # Set up boot JDK for building + cd /jbr && \ + tar --strip-components=1 -xzf jbr-11_0_16-linux-x86-b2043.64.tar.gz && \ + rm jbr-11_0_16-linux-x86-b2043.64.tar.gz; \ + echo Installing packages required for i386 only; \ + dpkg --add-architecture i386; \ + apt-get update -y; \ + apt-get install -y \ + libc6:i386 \ + libncurses5 libncurses5:i386 \ + libstdc++6:i386 \ + zlib1g:i386; \ + else \ + echo Skipping the step installing packages specific for the platform; \ + fi; \ + apt-get update -y; \ + apt-get install -y \ + binutils:${ARCH} \ + libcanberra-gtk-module:${ARCH} \ + libgtk2.0-0:${ARCH} \ + libxext6:${ARCH} \ + libxi6:${ARCH} \ + libxrender-dev:${ARCH} \ + libxtst6:${ARCH} \ + libxrandr2:${ARCH} \ + libfreetype6:${ARCH} \ + fontconfig:${ARCH} \ + libnss3:${ARCH} \ + libatk-bridge2.0-0:${ARCH} \ + libgbm1:${ARCH} \ + libxkbcommon0:${ARCH} \ + libasound2:${ARCH};\ + apt-get clean all + +ENV JAVA_HOME=/jbr +ENV DISPLAY=:0 + diff --git a/jb/project/docker/Dockerfile-jbrTest.musl b/jb/project/docker/Dockerfile-jbrTest.musl new file mode 100644 index 000000000000..28fb05114816 --- /dev/null +++ b/jb/project/docker/Dockerfile-jbrTest.musl @@ -0,0 +1,35 @@ +# NOTE: This Dockerfile is meant to be used from the mkdocker_jbrtest.sh script. + +# Pull a concrete version of Linux that does NOT recieve updates after it's +# been created. This is so that the image is as stable as possible to make +# image creation reproducible. +# NB: this also means there may be no security-related fixes there, need to +# move the version to the next manually. + +ARG ARCH_FROM +ARG ARCH=i386 +ARG OS_NAME +ARG OS_VERSION + +# jetbrains/runtime:jbrTest_${os_name}${os_version}-$arch +FROM ${ARCH_FROM}/${OS_NAME}:${OS_VERSION} +#FROM arm64v8/alpine:3.12 + +ARG ARCH +RUN \ + apk --no-cache add --update \ + binutils=2.34-r2 \ + libcanberra-gtk2=0.30-r5 \ + gtk+2.0=2.24.32-r1 \ + libxext=1.3.4-r0 \ + libxrender-dev=0.9.10-r3 \ + libxtst=1.2.3-r3 \ + freetype=2.10.4-r2 \ + fontconfig=2.13.1-r2 \ + font-xfree86-type1=1.0.4-r0 + +COPY jbrsdk_17.tar.gz /jdk17/ +RUN cd /jdk17 && tar --strip-components=1 -xzf jbrsdk_17.tar.gz && rm /jdk17/jbrsdk_17.tar.gz + +ENV JAVA_HOME=/jdk17 +ENV DISPLAY=:0 diff --git a/jb/project/docker/Dockerfile.aarch64 b/jb/project/docker/Dockerfile.aarch64 new file mode 100644 index 000000000000..db05aa28ce03 --- /dev/null +++ b/jb/project/docker/Dockerfile.aarch64 @@ -0,0 +1,46 @@ +# NOTE: This Dockerfile is meant to be used from the mkdocker_aarch64.sh script. + +# Pull a concrete version of Linux that does NOT recieve updates after it's +# been created. This is so that the image is as stable as possible to make +# image creation reproducible. +# NB: this also means there may be no security-related fixes there, need to +# move the version to the next manually. + +# jetbrains/runtime:jbr17env_aarch64 +FROM arm64v8/centos:7 + +# Install the necessary build tools +RUN yum -y update; \ + yum -y install centos-release-scl; \ + yum -y install devtoolset-10-10.1-0.el7; \ + yum -y install \ + alsa-lib-devel-1.1.8-1.el7.aarch64 \ + autoconf-2.69-11.el7.noarch \ + automake-1.13.4-3.el7.noarch \ + bzip2-1.0.6-13.el7.aarch64 \ + cups-devel-1.6.3-51.el7.aarch64 \ + file-5.11-37.el7.aarch64 \ + fontconfig-devel-2.13.0-4.3.el7.aarch64 \ + freetype-devel-2.8-14.el7_9.1.aarch64 \ + giflib-devel-4.1.6-9.el7.aarch64 \ + git-1.8.3.1-24.el7_9.aarch64 \ + libtool-2.4.2-22.el7_3.aarch64 \ + libXi-devel-1.7.9-1.el7.aarch64 \ + libXrandr-devel-1.5.1-2.el7.aarch64 \ + libXrender-devel-0.9.10-1.el7.aarch64 \ + libXt-devel-1.1.5-3.el7.aarch64 \ + libXtst-devel-1.2.3-1.el7.aarch64 \ + make-3.82-24.el7.aarch64 \ + rsync-3.1.2-12.el7_9.aarch64 \ + tar-1.26-35.el7.aarch64 \ + unzip-6.0-24.el7_9.aarch64 \ + wayland-devel-1.15.0-1.el7 \ + zip-3.0-11.el7.aarch64; \ + yum -y clean all + +ENV PATH="/opt/rh/devtoolset-10/root/usr/bin:${PATH}" +ENV LD_LIBRARY_PATH="/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst:/opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib" +ENV PKG_CONFIG_PATH="/opt/rh/devtoolset-10/root/usr/lib64/pkgconfig" + +RUN git config --global user.email "teamcity@jetbrains.com" && \ + git config --global user.name "builduser" diff --git a/jb/project/docker/Dockerfile.musl_aarch64 b/jb/project/docker/Dockerfile.musl_aarch64 new file mode 100644 index 000000000000..0a803fe91a8d --- /dev/null +++ b/jb/project/docker/Dockerfile.musl_aarch64 @@ -0,0 +1,22 @@ +# NOTE: This Dockerfile is meant to be used from the mkdocker_musl_aarch64.sh script. + +# Pull a concrete version of Linux that does NOT recieve updates after it's +# been created. This is so that the image is as stable as possible to make +# image creation reproducible. +# NB: this also means there may be no security-related fixes there, need to +# move the version to the next manually. +FROM arm64v8/alpine:3.12 + +# Install the necessary build tools +RUN apk --no-cache add --update bash grep tar zip bzip2 rsync fontconfig build-base \ + git libx11-dev libxext-dev libxrandr-dev libxrender-dev libxt-dev \ + libxtst-dev autoconf freetype-dev cups-dev alsa-lib-dev file \ + fontconfig fontconfig-dev linux-headers + +# Set up boot JDK for building +COPY boot_jdk_musl_aarch64.tar.gz /jdk17/ +RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk_musl_aarch64.tar.gz && rm /jdk17/boot_jdk_musl_aarch64.tar.gz +ENV BOOT_JDK=/jdk17 + +RUN git config --global user.email "teamcity@jetbrains.com" && \ + git config --global user.name "builduser" diff --git a/jb/project/docker/Dockerfile.musl_x64 b/jb/project/docker/Dockerfile.musl_x64 new file mode 100644 index 000000000000..64af9ec73247 --- /dev/null +++ b/jb/project/docker/Dockerfile.musl_x64 @@ -0,0 +1,22 @@ +# NOTE: This Dockerfile is meant to be used from the mkdocker_musl_x64.sh script. + +# Pull a concrete version of Linux that does NOT recieve updates after it's +# been created. This is so that the image is as stable as possible to make +# image creation reproducible. +# NB: this also means there may be no security-related fixes there, need to +# move the version to the next manually. +FROM alpine:3.14 + +# Install the necessary build tools +RUN apk --no-cache add --update bash grep tar zip bzip2 rsync fontconfig build-base \ + git libx11-dev libxext-dev libxrandr-dev libxrender-dev libxt-dev \ + libxtst-dev autoconf freetype-dev cups-dev alsa-lib-dev file \ + fontconfig fontconfig-dev linux-headers + +# Set up boot JDK for building +COPY boot_jdk_musl_amd64.tar.gz /jdk17/ +RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk_musl_amd64.tar.gz && rm /jdk17/boot_jdk_musl_amd64.tar.gz +ENV BOOT_JDK=/jdk17 + +RUN git config --global user.email "teamcity@jetbrains.com" && \ + git config --global user.name "builduser" diff --git a/jb/project/docker/Dockerfile.x86 b/jb/project/docker/Dockerfile.x86 new file mode 100644 index 000000000000..d5111ac4dcd5 --- /dev/null +++ b/jb/project/docker/Dockerfile.x86 @@ -0,0 +1,55 @@ +# NOTE: This Dockerfile is meant to be used from the mkdocker_x86.sh script. + +# Pull a concrete version of Linux that does NOT receive updates after it's +# been created. This is so that the image is as stable as possible to make +# image creation reproducible. +# NB: this also means there may be no security-related fixes there, need to +# move the version to the next manually. +#FROM i386/ubuntu:xenial +#FROM i386/ubuntu:bionic +FROM i386/ubuntu:focal + +RUN linux32 \ + apt-get update && apt-get install -y --no-install-recommends apt-utils +RUN export DEBIAN_FRONTEND=noninteractive \ + export DEBCONF_NONINTERACTIVE_SEEN=true && \ + echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \ + echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \ + linux32 \ + apt-get -y install \ + autoconf \ + build-essential \ + curl \ + file \ + git \ + libx11-dev \ + libxext-dev \ + libxrender-dev \ + libxrandr-dev \ + libxtst-dev \ + libxt-dev \ + libcups2-dev \ + libasound2-data \ +# libpng12-0 \ + libasound2 \ + libfreetype6 \ + libfontconfig1-dev \ + libasound2-dev \ + rsync \ + unzip \ + zip +RUN linux32 \ + apt-get -y install \ + g++-10 \ + gcc-10 && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 && \ + apt-get clean -qy && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Set up boot JDK for building +COPY boot_jdk_x86.tar.gz /jdk17/ +RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk_x86.tar.gz && rm /jdk17/boot_jdk_x86.tar.gz +ENV BOOT_JDK=/jdk17 + +RUN git config --global user.email "teamcity@jetbrains.com" && \ + git config --global user.name "builduser" diff --git a/jb/project/docker/Dockerfile.x86_64 b/jb/project/docker/Dockerfile.x86_64 new file mode 100644 index 000000000000..e61c59f00373 --- /dev/null +++ b/jb/project/docker/Dockerfile.x86_64 @@ -0,0 +1,36 @@ +# jetbrains/runtime:jbr17env_x86_64 +FROM centos:7 +RUN yum -y install centos-release-scl; \ + yum -y install devtoolset-10-10.1-0.el7; \ + yum -y install \ + alsa-lib-devel-1.1.8-1.el7 \ + autoconf-2.69-11.el7 \ + automake-1.13.4-3.el7 \ + bzip2-1.0.6-13.el7 \ + cups-devel-1.6.3-51.el7 \ + file-5.11-37.el7 \ + fontconfig-devel-2.13.0-4.3.el7 \ + freetype-devel-2.8-14.el7_9.1 \ + giflib-devel-4.1.6-9.el7 \ + git-1.8.3.1-24.el7_9 \ + libtool-2.4.2-22.el7_3 \ + libXi-devel-1.7.9-1.el7 \ + libXrandr-devel-1.5.1-2.el7 \ + libXrender-devel-0.9.10-1.el7 \ + libXt-devel-1.1.5-3.el7 \ + libXtst-devel-1.2.3-1.el7 \ + make-3.82-24.el7 \ + tar-1.26-35.el7 \ + unzip-6.0-24.el7_9 \ + wayland-devel-1.15.0-1.el7 \ + wget-1.14-18.el7_6.1 \ + which-2.20-7.el7 \ + zip-3.0-11.el7 + +RUN mkdir .git && \ + git config user.email "teamcity@jetbrains.com" && \ + git config user.name "builduser" + +ENV LD_LIBRARY_PATH="/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst:/opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib" +ENV PATH="/opt/rh/devtoolset-10/root/usr/bin::${PATH}" +ENV PKG_CONFIG_PATH="/opt/rh/devtoolset-10/root/usr/lib64/pkgconfig" \ No newline at end of file diff --git a/jb/project/docker/mkdocker_aarch64.sh b/jb/project/docker/mkdocker_aarch64.sh new file mode 100755 index 000000000000..9299b27425de --- /dev/null +++ b/jb/project/docker/mkdocker_aarch64.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# This script creates a Docker image suitable for building AArch64 variant +# of the JetBrains Runtime "dev" version. + +BOOT_JDK_REMOTE_FILE=zulu17.30.15-ca-jdk17.0.1-linux_aarch64.tar.gz +BOOT_JDK_SHA=4d9c9116eb0cdd2d7fb220d6d27059f4bf1b7e95cc93d5512bd8ce3791af86c7 +BOOT_JDK_LOCAL_FILE=boot_jdk.tar.gz + +if [ ! -f $BOOT_JDK_LOCAL_FILE ]; then + # Obtain "boot JDK" from outside of the container. + wget -nc https://cdn.azul.com/zulu/bin/${BOOT_JDK_REMOTE_FILE} -O $BOOT_JDK_LOCAL_FILE +else + echo "boot JDK \"$BOOT_JDK_LOCAL_FILE\" present, skipping download" +fi + +# Verify that what we've downloaded can be trusted. +sha256sum -c - < + + + + + + + + diff --git a/jb/project/idea-project-files/jetbrains.api.iml b/jb/project/idea-project-files/jetbrains.api.iml new file mode 100644 index 000000000000..eb800fa994a6 --- /dev/null +++ b/jb/project/idea-project-files/jetbrains.api.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jb/project/idea-project-files/modules.xml b/jb/project/idea-project-files/modules.xml new file mode 100644 index 000000000000..b0e4703bf7af --- /dev/null +++ b/jb/project/idea-project-files/modules.xml @@ -0,0 +1,12 @@ + + + + + + ###MODULE_IMLS### + + + + + + diff --git a/jb/project/idea-project-files/vcs.xml b/jb/project/idea-project-files/vcs.xml new file mode 100644 index 000000000000..c2220951e2dd --- /dev/null +++ b/jb/project/idea-project-files/vcs.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/jb/project/java-gradle/build.gradle b/jb/project/java-gradle/build.gradle new file mode 100644 index 000000000000..c5d18ab682ef --- /dev/null +++ b/jb/project/java-gradle/build.gradle @@ -0,0 +1,135 @@ +apply plugin: 'java' +import org.gradle.internal.os.OperatingSystem + +repositories { + mavenCentral() +} + +def test_jvm = { + if (project.hasProperty('jbsdkhome')) { + file(jbsdkhome + (OperatingSystem.current().isWindows()?"/bin/java.exe" : "/bin/java")).absolutePath + } else { + if (OperatingSystem.current().isMacOsX()) { + file('../../../build/macosx-x86_64-normal-server-release/images/jdk-bundle/jdk-11.0.4.jdk/Contents/Home/bin/java').absolutePath + } else if (OperatingSystem.current().isLinux()) { + file('../../../build/linux-x86_64-normal-server-release/images/jdk/bin/java').absolutePath + } else { + file('../../../build/windows-x86_64-normal-server-release/images/jdk/bin/java.exe').absolutePath + } + } +} + +dependencies { + testCompile('junit:junit:4.12'){ + exclude group: 'org.hamcrest' + } + testCompile 'org.hamcrest:hamcrest-library:1.3' + testCompile 'net.java.dev.jna:jna:4.4.0' + testCompile 'com.twelvemonkeys.imageio:imageio-tiff:3.3.2' + testCompile 'org.apache.commons:commons-lang3:3.0' +} + +def jdk_modules = ["java.base", "java.logging", "java.prefs", + "java.se.ee", "java.sql", "java.datatransfer", + "java.management", "java.rmi", "java.security.jgss", + "java.sql.rowset", "java.desktop", "java.management.rmi", + "java.scripting", "java.security.sasl", "java.transaction", + "java.instrument", "java.naming", "java.se", + "java.smartcardio", "java.xml.crypto"] + +def jdk_class_dirs = [] + +jdk_modules.collect(jdk_class_dirs) { + new File("../../../src/" + it + "/share/classes") +} + +if (OperatingSystem.current().isMacOsX()) + jdk_modules.collect(jdk_class_dirs) { + "../../../src/" + it + "/macosx/classes" + } +else if (OperatingSystem.current().isLinux()) { + jdk_modules.collect(jdk_class_dirs) { + "../../../src/" + it + "/solaris/classes" + } + jdk_modules.collect(jdk_class_dirs) { + "../../../src/" + it + "/unix/classes" + } +} else + jdk_modules.collect(jdk_class_dirs) { + "../../../src/" + it + "/windows/classes" + } + +sourceSets.main.java.srcDirs = jdk_class_dirs + +sourceSets { + test { + java { + srcDir "../../../test/jdk/jbu" + } + } +} + +test.dependsOn.clear() + +test.dependsOn tasks.compileTestJava + +test { + systemProperty "jb.java2d.metal", "true" + systemProperty "testdata", file('../../../test/jdk/jbu/testdata').absolutePath + +// Generate golden images for DroidFontTest and MixedTextTest +// systemProperty "gentestdata", "" + +// Enable Java2D logging (https://confluence.jetbrains.com/display/JRE/Java2D+Rendering+Logging) +// systemProperty "sun.java2d.trace", "log" +// systemProperty "sun.java2d.trace", "log,pimpl" + + outputs.upToDateWhen { false } + executable = test_jvm() + +// Enable async/dtrace profiler + jvmArgs "-XX:+PreserveFramePointer" +// Enable native J2D logging (only in debug build) +// Can be turned on for J2D by adding "#define DEBUG 1" into jdk/src/share/native/sun/java2d/Trace.h + +// environment 'J2D_TRACE_LEVEL', '4' +} + +def buildDir = project.buildscript.sourceFile.parentFile.parentFile.parentFile.parentFile + +def make_cmd = "make" +if (OperatingSystem.current().isWindows()) { + def cyg_make_cmd = new File("c:/cygwin64/bin/make.exe") + if (cyg_make_cmd.exists()) make_cmd = cyg_make_cmd.absolutePath +} +def test_run = false +task make_images { + doLast { + if (!test_run) { + def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "images") + def proc = pb.redirectErrorStream(true).start() + proc.inputStream.eachLine { println it } + assert proc.waitFor() == 0 + } + } +} + +task make_clean { + doLast { + def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "clean") + def proc = pb.redirectErrorStream(true).start() + proc.inputStream.eachLine { println it } + assert proc.waitFor() == 0 + } +} + +task run_test { + doLast { + test_run = true + } +} + +tasks.cleanTest.dependsOn tasks.run_test +classes.dependsOn.clear() +classes.dependsOn tasks.make_images +tasks.cleanClasses.dependsOn tasks.make_clean diff --git a/jb/project/tools/common/modules.list b/jb/project/tools/common/modules.list new file mode 100644 index 000000000000..522acb7cb43b --- /dev/null +++ b/jb/project/tools/common/modules.list @@ -0,0 +1,54 @@ +java.base, +java.compiler, +java.datatransfer, +java.desktop, +java.instrument, +java.logging, +java.management, +java.management.rmi, +java.naming, +java.net.http, +java.prefs, +java.rmi, +java.scripting, +java.se, +java.security.jgss, +java.security.sasl, +java.smartcardio, +java.sql, +java.sql.rowset, +java.transaction.xa, +java.xml, +java.xml.crypto, +jdk.accessibility, +jdk.attach, +jdk.charsets, +jdk.compiler, +jdk.crypto.cryptoki, +jdk.crypto.ec, +jdk.dynalink, +jdk.httpserver, +jdk.internal.ed, +jdk.internal.le, +jdk.internal.vm.ci, +jdk.javadoc, +jdk.jdi, +jdk.jdwp.agent, +jdk.jfr, +jdk.jsobject, +jdk.localedata, +jdk.management, +jdk.management.agent, +jdk.management.jfr, +jdk.naming.dns, +jdk.naming.rmi, +jdk.net, +jdk.sctp, +jdk.security.auth, +jdk.security.jgss, +jdk.unsupported, +jdk.unsupported.desktop, +jdk.xml.dom, +jdk.zipfs, +jdk.hotspot.agent, +jdk.jcmd diff --git a/jb/project/tools/common/scripts/build-jbr-api.sh b/jb/project/tools/common/scripts/build-jbr-api.sh new file mode 100644 index 000000000000..48aee8225592 --- /dev/null +++ b/jb/project/tools/common/scripts/build-jbr-api.sh @@ -0,0 +1,18 @@ +#!/bin//bash + +set -euo pipefail + +# $1 - Boot JDK +# $2 - JBR part of API version + +cd "`dirname "$0"`/../../../../.." +PWD="`pwd`" +CONF="$PWD/build/jbr-api.conf" +./configure --with-debug-level=release --with-boot-jdk=$1 || exit $? +make jbr-api CONF=release MAKEOVERRIDES= "JBR_API_CONF_FILE=$CONF" JBR_API_JBR_VERSION=$2 || exit $? +. $CONF || exit $? +echo "##teamcity[buildNumber '$VERSION']" +cp "$JAR" ./jbr-api-${VERSION}.jar || exit $? +cp "$SOURCES_JAR" ./jbr-api-${VERSION}-sources.jar || exit $? +echo "##teamcity[publishArtifacts '$PWD/jbr-api-${VERSION}.jar']" +echo "##teamcity[publishArtifacts '$PWD/jbr-api-${VERSION}-sources.jar']" \ No newline at end of file diff --git a/jb/project/tools/common/scripts/common.sh b/jb/project/tools/common/scripts/common.sh new file mode 100644 index 000000000000..852f8d1a4317 --- /dev/null +++ b/jb/project/tools/common/scripts/common.sh @@ -0,0 +1,188 @@ +#!/bin/bash + +set -euo pipefail +set -x + +function check_bundle_type_maketest() { + # check whether last char is 't', if so remove it + if [ "${bundle_type: -1}" == "t" ] && [ "${bundle_type: -2}" != "ft" ]; then + bundle_type="${bundle_type%?}" + do_maketest=1 + else + do_maketest=0 + fi +} + +function getVersionProp() { + grep "^${1}" make/conf/version-numbers.conf | cut -d'=' -f2 +} + +DISABLE_WARNINGS_AS_ERRORS="" +while getopts ":iw?" o; do + case "${o}" in + i) INC_BUILD=1 ;; + w) DISABLE_WARNINGS_AS_ERRORS="--disable-warnings-as-errors" ;; + esac +done +shift $((OPTIND-1)) + +if [[ $# -lt 2 ]]; then + echo "Required at least two arguments: build_number bundle_type" + exit 1 +fi + +build_number=$1 +bundle_type=$2 +# shellcheck disable=SC2034 +architecture=${3:-x64} # aarch64 or x64 + +check_bundle_type_maketest + +tag_prefix="jdk-" +VERSION_FEATURE=$(getVersionProp "DEFAULT_VERSION_FEATURE") +VERSION_INTERIM=$(getVersionProp "DEFAULT_VERSION_INTERIM") +VERSION_UPDATE=$(getVersionProp "DEFAULT_VERSION_UPDATE") +VERSION_PATCH=$(getVersionProp "DEFAULT_VERSION_PATCH") +[[ $VERSION_UPDATE = 0 ]] && JBSDK_VERSION="$VERSION_FEATURE" || JBSDK_VERSION="${VERSION_FEATURE}.${VERSION_INTERIM}.${VERSION_UPDATE}" +[[ $VERSION_PATCH = 0 ]] || JBSDK_VERSION="${VERSION_FEATURE}.${VERSION_INTERIM}.${VERSION_UPDATE}.${VERSION_PATCH}" +echo "##teamcity[setParameter name='env.JBSDK_VERSION' value='${JBSDK_VERSION}']" +OPENJDK_TAG=$(git tag -l | grep "$tag_prefix$JBSDK_VERSION" | grep -v ga | sort -t "-" -k 2 -g | tail -n 1) +JDK_BUILD_NUMBER=${JDK_BUILD_NUMBER:=$(echo $OPENJDK_TAG | awk -F "-|[+]" '{print $3}')} +[ -z $JDK_BUILD_NUMBER ] && JDK_BUILD_NUMBER=1 +re='^[0-9]+$' +if ! [[ $JDK_BUILD_NUMBER =~ $re ]] ; then + echo "error: JDK_BUILD_NUMBER Not a number: $JDK_BUILD_NUMBER" + JDK_BUILD_NUMBER=1 +fi +echo "##teamcity[setParameter name='env.JDK_UPDATE_NUMBER' value='${JDK_BUILD_NUMBER}']" + +VENDOR_NAME="JetBrains s.r.o." +VENDOR_VERSION_STRING="JBR-${JBSDK_VERSION}+${JDK_BUILD_NUMBER}-${build_number}" +[ -z "$bundle_type" ] || VENDOR_VERSION_STRING="${VENDOR_VERSION_STRING}-${bundle_type}" + +do_reset_changes=0 +do_reset_dcevm=0 +HEAD_REVISION=0 + +STATIC_CONF_ARGS="" +common_conf_props_file="jb/project/tools/common/static_conf_args.txt" +if [[ -f "$common_conf_props_file" ]]; then + STATIC_CONF_ARGS=$(<$common_conf_props_file) +fi +OS_NAME=$(uname -s) +# Enable reproducible builds +TZ=UTC +export TZ +SOURCE_DATE_EPOCH="$(git log -1 --pretty=%ct)" +export SOURCE_DATE_EPOCH + +COPYRIGHT_YEAR="" +BUILD_TIME="" +TOUCH_TIME="" +REPRODUCIBLE_TAR_OPTS="" +case "$OS_NAME" in + Linux) + COPYRIGHT_YEAR="$(date --utc --date=@$SOURCE_DATE_EPOCH +%Y)" + BUILD_TIME="$(date --utc --date=@$SOURCE_DATE_EPOCH +%F)" + REPRODUCIBLE_TAR_OPTS="--mtime=@$SOURCE_DATE_EPOCH --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime" + ;; + CYGWIN*) + COPYRIGHT_YEAR="$(date --utc --date=@$SOURCE_DATE_EPOCH +%Y)" + BUILD_TIME="$(date --utc --date=@$SOURCE_DATE_EPOCH +%F)" + REPRODUCIBLE_TAR_OPTS="--mtime=@$SOURCE_DATE_EPOCH --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime" + ;; + Darwin) + COPYRIGHT_YEAR="$(date -u -r $SOURCE_DATE_EPOCH +%Y)" + BUILD_TIME="$(date -u -r $SOURCE_DATE_EPOCH +%F)" + TOUCH_TIME="$(date -u -r $SOURCE_DATE_EPOCH +%Y%m%d%H%M.%S)" + REPRODUCIBLE_TAR_OPTS="--uid 0 --gid 0 --numeric-owner" + ;; +esac + +WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS="--with-native-debug-symbols=zipped" + +if [ "$bundle_type" == "nomodft" ]; then + WITH_BUNDLED_FREETYPE="--with-freetype=bundled" +else + WITH_BUNDLED_FREETYPE="" +fi + +REPRODUCIBLE_BUILD_OPTS="--with-source-date=$SOURCE_DATE_EPOCH + --with-hotspot-build-time=$BUILD_TIME + --with-copyright-year=$COPYRIGHT_YEAR + --disable-absolute-paths-in-output + --with-build-user=builduser" + +function zip_native_debug_symbols() { + image_bundle_path=$(echo $1 | cut -d"/" -f-4) + jdk_name=$(echo $1 | cut -d"/" -f5) + jbr_diz_name=$2 + + [ -d "dizfiles" ] && rm -rf dizfiles + mkdir dizfiles + + rsync_target="../../../../dizfiles" + [ -z "$jdk_name" ] && rsync_target=$rsync_target"/"$jbr_diz_name + (cd $image_bundle_path && find . -name '*.diz' -exec rsync -R {} $rsync_target \;) + [ ! -z "$jdk_name" ] && mv dizfiles/$jdk_name dizfiles/$jbr_diz_name + + (cd dizfiles && find $jbr_diz_name -print0 | COPYFILE_DISABLE=1 \ + tar --no-recursion --null -T - -czf ../"$jbr_diz_name".tar.gz) || do_exit $? +} + +function do_exit() { + exit_code=$1 + [ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java + if [ $do_reset_dcevm -eq 1 ]; then + [ ! -z $HEAD_REVISION ] && git reset --hard $HEAD_REVISION + fi + exit "$exit_code" +} + +function update_jsdk_mods() { + __jsdk=$1 + __jcef_mods=$2 + __orig_jsdk_mods=$3 + __updated_jsdk_mods=$4 + + # re-create java.desktop.jmod with updated module-info.class + tmp=.java.desktop.$$.tmp + mkdir "$tmp" || exit $? + "$__jsdk"/bin/jmod extract --dir "$tmp" "$__orig_jsdk_mods"/java.desktop.jmod || exit $? + "$__jsdk"/bin/javac \ + --patch-module java.desktop="$__orig_jsdk_mods"/java.desktop.jmod \ + --module-path "$__jcef_mods" -d "$tmp"/classes src/java.desktop/share/classes/module-info.java || exit $? + "$__jsdk"/bin/jmod \ + create --class-path "$tmp"/classes --config "$tmp"/conf --header-files "$tmp"/include --legal-notice "$tmp"/legal --libs "$tmp"/lib \ + java.desktop.jmod || exit $? + mv java.desktop.jmod "$__updated_jsdk_mods" || exit $? + rm -rf "$tmp" + + # re-create java.base.jmod with updated hashes + tmp=.java.base.$$.tmp + mkdir "$tmp" || exit $? + hash_modules=$("$__jsdk"/bin/jmod describe "$__orig_jsdk_mods"/java.base.jmod | grep hashes | awk '{print $2}' | tr '\n' '|' | sed s/\|$//) || exit $? + "$__jsdk"/bin/jmod extract --dir "$tmp" "$__orig_jsdk_mods"/java.base.jmod || exit $? + rm "$__updated_jsdk_mods"/java.base.jmod || exit $? # temp exclude from path + "$__jsdk"/bin/jmod \ + create --module-path "$__updated_jsdk_mods" --hash-modules "$hash_modules" \ + --class-path "$tmp"/classes --cmds "$tmp"/bin --config "$tmp"/conf --header-files "$tmp"/include --legal-notice "$tmp"/legal --libs "$tmp"/lib \ + java.base.jmod || exit $? + mv java.base.jmod "$__updated_jsdk_mods" || exit $? + rm -rf "$tmp" +} + +function get_mods_list() { + __mods=$1 + echo $(ls $__mods) | sed s/\.jmod/,/g | sed s/,$//g | sed s/' '//g +} + +function copy_jmods() { + __mods_list=$1 + __jmods_from=$2 + __jmods_to=$3 + + mkdir -p $__jmods_to + + echo "${__mods_list}," | while read -d, mod; do cp $__jmods_from/$mod.jmod $__jmods_to/; done +} diff --git a/jb/project/tools/common/static_conf_args.txt b/jb/project/tools/common/static_conf_args.txt new file mode 100644 index 000000000000..4bf644481990 --- /dev/null +++ b/jb/project/tools/common/static_conf_args.txt @@ -0,0 +1,4 @@ +--with-vendor-url=https://www.jetbrains.com/ +--with-vendor-bug-url=https://youtrack.jetbrains.com/issues/JBR +--with-vendor-vm-bug-url=https://youtrack.jetbrains.com/issues/JBR + diff --git a/jb/project/tools/linux/scripts/mkimages_aarch64.sh b/jb/project/tools/linux/scripts/mkimages_aarch64.sh new file mode 100755 index 000000000000..125b8d915032 --- /dev/null +++ b/jb/project/tools/linux/scripts/mkimages_aarch64.sh @@ -0,0 +1,171 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script makes test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# +# Environment variables: +# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument +# to configure +# By default JDK_BUILD_NUMBER is set zero +# JCEF_PATH - specifies the path to the directory with JCEF binaries. +# By default JCEF binaries should be located in ./jcef_linux_aarch64 + +source jb/project/tools/common/scripts/common.sh + +JCEF_PATH=${JCEF_PATH:=./jcef_linux_aarch64} + +function do_configure { + sh configure \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build="$JDK_BUILD_NUMBER" \ + --with-version-opt=b"$build_number" \ + --with-boot-jdk="$BOOT_JDK" \ + --enable-cds=yes \ + $DISABLE_WARNINGS_AS_ERRORS \ + $STATIC_CONF_ARGS \ + $REPRODUCIBLE_BUILD_OPTS \ + $WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ + $WITH_BUNDLED_FREETYPE \ + || do_exit $? +} + +function is_musl { + libc=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1) + if [ -z $libc ]; then + # This is not Musl, return 1 == false + return 1 + fi + return 0 +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + libc_type_suffix='' + fastdebug_infix='' + __cds_opt='' + + if is_musl; then libc_type_suffix='musl-' ; fi + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then __cds_opt="--generate-cds-archive"; fi + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}aarch64-${fastdebug_infix}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}aarch64-${fastdebug_infix:-}b${build_number} + + echo Running jlink.... + [ -d "$IMAGES_DIR"/"$__root_dir" ] && rm -rf "${IMAGES_DIR:?}"/"$__root_dir" + $JSDK/bin/jlink \ + --module-path "$__modules_path" --no-man-pages --compress=2 \ + $__cds_opt --add-modules "$__modules" --output "$IMAGES_DIR"/"$__root_dir" + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__root_dir"/release + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release + mv release "$IMAGES_DIR"/"$__root_dir"/release + cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib + copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods + zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz" + fi + + # jmod does not preserve file permissions (JDK-8173610) + [ -f "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper + + echo Creating "$JBR".tar.gz ... + + (cd "$IMAGES_DIR" && + find "$__root_dir" -print0 | LC_ALL=C sort -z | \ + tar $REPRODUCIBLE_TAR_OPTS \ + --no-recursion --null -T - -cf "$JBR".tar) || do_exit $? + mv "$IMAGES_DIR"/"$JBR".tar ./"$JBR".tar + [ -f "$JBR".tar.gz ] && rm "$JBR.tar.gz" + touch -c -d "@$SOURCE_DATE_EPOCH" "$JBR".tar + gzip "$JBR".tar || do_exit $? + rm -rf "${IMAGES_DIR:?}"/"$__root_dir" +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +RELEASE_NAME=linux-aarch64-server-release + +jbr_name_postfix="" + +case "$bundle_type" in + "jcef") + do_reset_changes=1 + jbr_name_postfix="_${bundle_type}" + do_maketest=1 + ;; + "nomod" | "") + bundle_type="" + ;; + "nomodft" | "") + jbr_name_postfix="_ft" + ;; + "fd") + do_reset_changes=1 + jbr_name_postfix="_${bundle_type}" + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=linux-aarch64-server-fastdebug + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + make clean CONF=$RELEASE_NAME || do_exit $? +fi +make images CONF=$RELEASE_NAME || do_exit $? + +IMAGES_DIR=build/$RELEASE_NAME/images +JSDK=$IMAGES_DIR/jdk +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +echo Fixing permissions +chmod -R a+r $JSDK + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $? + update_jsdk_mods $JSDK $JCEF_PATH/jmods $JSDK/jmods $JSDK_MODS_DIR || do_exit $? + cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed + cat $JCEF_PATH/jcef.version >> $JSDK/release +fi + +# create runtime image bundle +modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $? +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $? +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then + modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods) +fi +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $? + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-${libc_type_suffix}test-aarch64-b${build_number} + echo Creating "$JBRSDK_TEST" ... + [ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java + make test-image jbr-api CONF=$RELEASE_NAME JBR_API_JBR_VERSION=TEST || do_exit $? + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" + tar -pcf "$JBRSDK_TEST".tar -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? + [ -f "$JBRSDK_TEST.tar.gz" ] && rm "$JBRSDK_TEST.tar.gz" + gzip "$JBRSDK_TEST".tar || do_exit $? +fi + +do_exit 0 diff --git a/jb/project/tools/linux/scripts/mkimages_x64.sh b/jb/project/tools/linux/scripts/mkimages_x64.sh new file mode 100755 index 000000000000..fdf8db3f18f5 --- /dev/null +++ b/jb/project/tools/linux/scripts/mkimages_x64.sh @@ -0,0 +1,188 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script makes test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# +# Environment variables: +# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument +# to configure +# By default JDK_BUILD_NUMBER is set zero +# JCEF_PATH - specifies the path to the directory with JCEF binaries. +# By default JCEF binaries should be located in ./jcef_linux_x64 + +source jb/project/tools/common/scripts/common.sh + +JCEF_PATH=${JCEF_PATH:=./jcef_linux_x64} + +function do_configure { + if is_musl; then + LINUX_TARGET="" + else + LINUX_TARGET="\ + --build=x86_64-unknown-linux-gnu \ + --openjdk-target=x86_64-unknown-linux-gnu" + fi + sh configure \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build="$JDK_BUILD_NUMBER" \ + --with-version-opt=b"$build_number" \ + --with-boot-jdk="$BOOT_JDK" \ + --enable-cds=yes \ + $LINUX_TARGET \ + $DISABLE_WARNINGS_AS_ERRORS \ + $STATIC_CONF_ARGS \ + $REPRODUCIBLE_BUILD_OPTS \ + $WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ + $WITH_BUNDLED_FREETYPE \ + || do_exit $? +} + +function is_musl { + libc=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1) + if [ -z $libc ]; then + # This is not Musl, return 1 == false + return 1 + fi + return 0 +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + libc_type_suffix='' + fastdebug_infix='' + __cds_opt='' + + if is_musl; then + libc_type_suffix='musl-' + else + LINUX_TARGET="\ + --build=x86_64-unknown-linux-gnu \ + --openjdk-target=x86_64-unknown-linux-gnu" + fi + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then __cds_opt="--generate-cds-archive"; fi + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}x64-${fastdebug_infix}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}x64-${fastdebug_infix:-}b${build_number} + + echo Running jlink.... + [ -d "$IMAGES_DIR"/"$__root_dir" ] && rm -rf "${IMAGES_DIR:?}"/"$__root_dir" + $JSDK/bin/jlink \ + --module-path "$__modules_path" --no-man-pages --compress=2 \ + $__cds_opt --add-modules "$__modules" --output "$IMAGES_DIR"/"$__root_dir" + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__root_dir"/release + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release + mv release "$IMAGES_DIR"/"$__root_dir"/release + cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib + copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods + zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz" + fi + + # jmod does not preserve file permissions (JDK-8173610) + [ -f "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper + + echo Creating "$JBR".tar.gz ... + + (cd "$IMAGES_DIR" && + find "$__root_dir" -print0 | LC_ALL=C sort -z | \ + tar $REPRODUCIBLE_TAR_OPTS \ + --no-recursion --null -T - -cf "$JBR".tar) || do_exit $? + mv "$IMAGES_DIR"/"$JBR".tar ./"$JBR".tar + [ -f "$JBR".tar.gz ] && rm "$JBR.tar.gz" + touch -c -d "@$SOURCE_DATE_EPOCH" "$JBR".tar + gzip "$JBR".tar || do_exit $? + rm -rf "${IMAGES_DIR:?}"/"$__root_dir" +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +RELEASE_NAME=linux-x86_64-server-release + +jbr_name_postfix="" + +case "$bundle_type" in + "jcef") + do_reset_changes=1 + jbr_name_postfix="_${bundle_type}" + jbrsdk_name_postfix="_${bundle_type}" + do_maketest=1 + ;; + "nomod" | "") + bundle_type="" + jbrsdk_name_postfix="_${bundle_type}" + ;; + "nomodft" | "") + jbr_name_postfix="_ft" + jbrsdk_name_postfix="_ft" + ;; + "fd") + do_reset_changes=1 + jbr_name_postfix="_${bundle_type}" + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=linux-x86_64-server-fastdebug + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + make clean CONF=$RELEASE_NAME || do_exit $? +fi +make images CONF=$RELEASE_NAME || do_exit $? + +IMAGES_DIR=build/$RELEASE_NAME/images +JSDK=$IMAGES_DIR/jdk +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +echo Fixing permissions +chmod -R a+r $JSDK + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $? + update_jsdk_mods $JSDK $JCEF_PATH/jmods $JSDK/jmods $JSDK_MODS_DIR || do_exit $? + cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed + cat $JCEF_PATH/jcef.version >> $JSDK/release +fi + +# create runtime image bundle +modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $? +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $? +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then + modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods) +fi +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $? + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-${libc_type_suffix}test-x64-b${build_number} + echo Creating "$JBRSDK_TEST" ... + [ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java + make test-image jbr-api CONF=$RELEASE_NAME JBR_API_JBR_VERSION=TEST || do_exit $? + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" + tar -pcf "$JBRSDK_TEST".tar -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? + [ -f "$JBRSDK_TEST.tar.gz" ] && rm "$JBRSDK_TEST.tar.gz" + gzip "$JBRSDK_TEST".tar || do_exit $? +fi + +do_exit 0 diff --git a/jb/project/tools/linux/scripts/mkimages_x86.sh b/jb/project/tools/linux/scripts/mkimages_x86.sh new file mode 100755 index 000000000000..e8e330f81f9a --- /dev/null +++ b/jb/project/tools/linux/scripts/mkimages_x86.sh @@ -0,0 +1,147 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# + +source jb/project/tools/common/scripts/common.sh + +function do_configure { + linux32 bash configure \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build="$JDK_BUILD_NUMBER" \ + --with-version-opt=b"$build_number" \ + --with-boot-jdk="$BOOT_JDK" \ + $STATIC_CONF_ARGS \ + --enable-cds=yes \ + $DISABLE_WARNINGS_AS_ERRORS \ + $REPRODUCIBLE_BUILD_OPTS \ + $WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ + || do_exit $? +} + +function is_musl { + libc=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1) + if [ -z $libc ]; then + # This is not Musl, return 1 == false + return 1 + fi + return 0 +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + libc_type_suffix='' + fastdebug_infix='' + __cds_opt='' + + if is_musl; then libc_type_suffix='musl-' ; fi + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then __cds_opt="--generate-cds-archive"; fi + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}x86-${fastdebug_infix}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}x86-${fastdebug_infix:-}b${build_number} + + echo Running jlink.... + [ -d "$IMAGES_DIR"/"$__root_dir" ] && rm -rf "${IMAGES_DIR:?}"/"$__root_dir" + $JSDK/bin/jlink \ + --module-path "$__modules_path" --no-man-pages --compress=2 \ + $__cds_opt --add-modules "$__modules" --output "$IMAGES_DIR"/"$__root_dir" + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__root_dir"/release + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release + mv release "$IMAGES_DIR"/"$__root_dir"/release + cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib + copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods + zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz" + fi + + # jmod does not preserve file permissions (JDK-8173610) + [ -f "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper + + echo Creating "$JBR".tar.gz ... + + (cd "$IMAGES_DIR" && + find "$__root_dir" -print0 | LC_ALL=C sort -z | \ + tar $REPRODUCIBLE_TAR_OPTS \ + --no-recursion --null -T - -cf "$JBR".tar) || do_exit $? + mv "$IMAGES_DIR"/"$JBR".tar ./"$JBR".tar + [ -f "$JBR".tar.gz ] && rm "$JBR.tar.gz" + touch -c -d "@$SOURCE_DATE_EPOCH" "$JBR".tar + gzip "$JBR".tar || do_exit $? + rm -rf "${IMAGES_DIR:?}"/"$__root_dir" +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +RELEASE_NAME=linux-x86-server-release + +case "$bundle_type" in + "jcef") + echo "not implemented" && do_exit 1 + ;; + "nomod" | "") + bundle_type="" + ;; + "fd") + do_reset_changes=1 + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=linux-x86-server-fastdebug + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + make clean CONF=$RELEASE_NAME || do_exit $? +fi +make images CONF=$RELEASE_NAME || do_exit $? + +IMAGES_DIR=build/$RELEASE_NAME/images +JSDK=$IMAGES_DIR/jdk +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +echo Fixing permissions +chmod -R a+r $JSDK + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + jbr_name_postfix="_${bundle_type}" +else + jbr_name_postfix="" +fi + +# create runtime image bundle +modules=$(grep -v "jdk.internal.vm" jb/project/tools/common/modules.list | xargs | sed s/" "//g) || do_exit $? +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $? +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $? + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-${libc_type_suffix}test-x86-b${build_number} + echo Creating "$JBRSDK_TEST" ... + [ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java + make test-image jbr-api CONF=$RELEASE_NAME JBR_API_JBR_VERSION=TEST || do_exit $? + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" + tar -pcf "$JBRSDK_TEST".tar -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? + [ -f "$JBRSDK_TEST.tar.gz" ] && rm "$JBRSDK_TEST.tar.gz" + gzip "$JBRSDK_TEST".tar || do_exit $? +fi + +do_exit 0 diff --git a/jb/project/tools/mac/scripts/codesign.sh b/jb/project/tools/mac/scripts/codesign.sh new file mode 100755 index 000000000000..ae5c7400441d --- /dev/null +++ b/jb/project/tools/mac/scripts/codesign.sh @@ -0,0 +1,47 @@ +#!/bin/bash +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" + +source "$SCRIPT_DIR/jetsign-common.sh" || exit 1 + +function isMacOsBinary() { + file "$1" | grep -q 'Mach-O' +} + +function isSigned() { + codesign --verify "$1" >/dev/null 2>&1 && ! grep -q Signature=adhoc < <(codesign --display --verbose "$1" 2>&1) +} + +# last argument is a path to be signed +pathToBeSigned="$(pwd)/${*: -1}" +jetSignArgs=("${@:1:$#-1}") +if [[ ! -f "$pathToBeSigned" ]]; then + echo "$pathToBeSigned is missing or not a file" + exit 1 +elif isSigned "$pathToBeSigned" && ! isForced "${jetSignArgs[@]}" ; then + echo "Already signed: $pathToBeSigned" +elif [[ "$JETSIGN_CLIENT" == "null" ]]; then + echo "JetSign client is missing, cannot proceed with signing" + exit 1 +elif ! isMacOsBinary "$pathToBeSigned" && [[ "$pathToBeSigned" != *.sit ]] && [[ "$pathToBeSigned" != *.tar.gz ]]; then + echo "$pathToBeSigned won't be signed, assumed not to be a macOS executable" +else + if isMacOsBinary "$pathToBeSigned" && ! isSigned "$pathToBeSigned" ; then + echo "Unsigned macOS binary: $pathToBeSigned" + fi + workDir=$(dirname "$pathToBeSigned") + pathSigned="$workDir/signed/${pathToBeSigned##*/}" + jetSignExtensions=$(jetSignExtensions "${jetSignArgs[@]}") + contentType=$(jetSignContentType "$pathToBeSigned") + ( + cd "$workDir" || exit 1 + "$JETSIGN_CLIENT" -log-format text -denoted-content-type "$contentType" -extensions "$jetSignExtensions" "$pathToBeSigned" + # SRE-1223 (Codesign removes execute bits in executable files) workaround + chmod "$(stat -f %A "$pathToBeSigned")" "$pathSigned" + if isMacOsBinary "$pathSigned"; then + isSigned "$pathSigned" + fi + rm "$pathToBeSigned" + mv "$pathSigned" "$pathToBeSigned" + rm -rf "$workDir/signed" + ) +fi diff --git a/jb/project/tools/mac/scripts/entitlements.xml b/jb/project/tools/mac/scripts/entitlements.xml new file mode 100644 index 000000000000..9d4904529342 --- /dev/null +++ b/jb/project/tools/mac/scripts/entitlements.xml @@ -0,0 +1,16 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.disable-executable-page-protection + + + \ No newline at end of file diff --git a/jb/project/tools/mac/scripts/jetsign-common.sh b/jb/project/tools/mac/scripts/jetsign-common.sh new file mode 100755 index 000000000000..4153ba80dfd3 --- /dev/null +++ b/jb/project/tools/mac/scripts/jetsign-common.sh @@ -0,0 +1,63 @@ +#!/bin/bash +set -euo pipefail + +function isForced() { + for arg in "$@"; do + if [[ "$arg" == --force ]]; then + return 0 + fi + done + return 1 +} + +function jetSignExtensions() { + args=("$@") + ((lastElementIndex=${#args[@]}-1)) + for index in "${!args[@]}"; do + arg=${args[$index]} + case "$arg" in + --sign | -s) + echo -n 'mac_codesign_identity=' + continue + ;; + --entitlements) + echo -n 'mac_codesign_entitlements=' + continue + ;; + --options=runtime) + echo -n 'mac_codesign_options=runtime' + ;; + --force) + echo -n 'mac_codesign_force=true' + ;; + --timestamp | --verbose | -v) + continue + ;; + *) + echo -n "$arg" + ;; + esac + if [[ $index != "$lastElementIndex" ]]; then + echo -n "," + fi + done +} + +# See jetbrains.sign.util.FileUtil.contentType +function jetSignContentType() { + case "${1##*/}" in + *.sit) + echo -n 'application/x-mac-app-zip' + ;; + *.tar.gz) + echo -n 'application/x-mac-app-targz' + ;; + *.pkg) + echo -n 'application/x-mac-pkg' + ;; + *) + echo -n 'application/x-mac-app-bin' + ;; + esac +} + diff --git a/jb/project/tools/mac/scripts/mkimages.sh b/jb/project/tools/mac/scripts/mkimages.sh new file mode 100755 index 000000000000..5b8f10524bb6 --- /dev/null +++ b/jb/project/tools/mac/scripts/mkimages.sh @@ -0,0 +1,171 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script makes test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# +# Environment variables: +# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument +# to configure +# By default JDK_BUILD_NUMBER is set zero +# JCEF_PATH - specifies the path to the directory with JCEF binaries. +# By default JCEF binaries should be located in ./jcef_mac + +source jb/project/tools/common/scripts/common.sh + +JCEF_PATH=${JCEF_PATH:=./jcef_mac} +BOOT_JDK=${BOOT_JDK:=$(/usr/libexec/java_home -v 17)} + +function do_configure { + sh configure \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-macosx-bundle-name-base=${VENDOR_VERSION_STRING} \ + --with-macosx-bundle-id-base="com.jetbrains.jbr" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build="$JDK_BUILD_NUMBER" \ + --with-version-opt=b"$build_number" \ + --with-boot-jdk="$BOOT_JDK" \ + --enable-cds=yes \ + $DISABLE_WARNINGS_AS_ERRORS \ + $STATIC_CONF_ARGS \ + $REPRODUCIBLE_BUILD_OPTS \ + $WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ + || do_exit $? +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + fastdebug_infix='' + __cds_opt='' + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then __cds_opt="--generate-cds-archive"; fi + + tmp=.bundle.$$.tmp + mkdir "$tmp" || do_exit $? + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-osx-${architecture}-${fastdebug_infix:-}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-osx-${architecture}-${fastdebug_infix:-}b${build_number} + + JRE_CONTENTS=$tmp/$__root_dir/Contents + mkdir -p "$JRE_CONTENTS" || do_exit $? + + echo Running jlink... + "$JSDK"/bin/jlink \ + --module-path "$__modules_path" --no-man-pages --compress=2 \ + $__cds_opt --add-modules "$__modules" --output "$JRE_CONTENTS/Home" || do_exit $? + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$JRE_CONTENTS/Home/release" + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' $JRE_CONTENTS/Home/release > release + mv release $JRE_CONTENTS/Home/release + cp $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home/lib/src.zip $JRE_CONTENTS/Home/lib + copy_jmods "$__modules" "$__modules_path" "$JRE_CONTENTS"/Home/jmods + zip_native_debug_symbols $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk "${JBR}_diz" + fi + + if [ "$bundle_type" == "jcef" ]; then + cat $JCEF_PATH/jcef.version >> "$JRE_CONTENTS/Home/release" + fi + + cp -R "$JSDK"/../MacOS "$JRE_CONTENTS" + cp "$JSDK"/../Info.plist "$JRE_CONTENTS" + + [ -n "$bundle_type" ] && (cp -a $JCEF_PATH/Frameworks "$JRE_CONTENTS" || do_exit $?) + + echo Creating "$JBR".tar.gz ... + # Normalize timestamp + find "$tmp"/"$__root_dir" -print0 | xargs -0 touch -c -h -t "$TOUCH_TIME" + + (cd "$tmp" && + find "$__root_dir" -print0 | LC_ALL=C sort -z | \ + COPYFILE_DISABLE=1 tar $REPRODUCIBLE_TAR_OPTS --no-recursion --null -T - \ + -czf "$JBR".tar.gz --exclude='*.dSYM' --exclude='man') || do_exit $? + mv "$tmp"/"$JBR".tar.gz "$JBR".tar.gz + rm -rf "$tmp" +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +CONF_ARCHITECTURE=x86_64 +if [[ "${architecture}" == *aarch64* ]]; then + CONF_ARCHITECTURE=aarch64 +fi +RELEASE_NAME=macosx-${CONF_ARCHITECTURE}-server-release + +case "$bundle_type" in + "jcef") + do_reset_changes=1 + do_maketest=1 + ;; + "nomod" | "") + bundle_type="" + ;; + "fd") + do_reset_changes=1 + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=macosx-${CONF_ARCHITECTURE}-server-fastdebug + JBSDK=macosx-${architecture}-server-release + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + make clean CONF=$RELEASE_NAME || do_exit $? +fi +make images CONF=$RELEASE_NAME || do_exit $? + +IMAGES_DIR=build/$RELEASE_NAME/images + +JSDK=$IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +# test/jdk/jb/java/awt/Focus/FullScreenFocusStealing.java test/jdk/java/awt/color/ICC_ColorSpace/MTTransformReplacedProfile.java test/jdk/java/awt/datatransfer/DataFlavor/DataFlavorRemoteTest.java test/jdk/java/awt/Robot/NonEmptyErrorStream.java + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $? + update_jsdk_mods "$JSDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $? + cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed + + jbr_name_postfix="_${bundle_type}" +else + jbr_name_postfix="" +fi + +# create runtime image bundle +modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $? +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat "$JSDK"/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $? +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then + modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods) +fi +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" "$JBRSDK_BUNDLE" "$JSDK_MODS_DIR" "$modules" || do_exit $? + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-osx-test-${architecture}-b${build_number} + echo Creating "$JBRSDK_TEST" ... + [ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java + make test-image jbr-api CONF=$RELEASE_NAME JBR_API_JBR_VERSION=TEST || do_exit $? + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" + [ -f "$JBRSDK_TEST.tar.gz" ] && rm "$JBRSDK_TEST.tar.gz" + COPYFILE_DISABLE=1 tar -pczf "$JBRSDK_TEST".tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? +fi + +do_exit 0 diff --git a/jb/project/tools/mac/scripts/notarize.sh b/jb/project/tools/mac/scripts/notarize.sh new file mode 100755 index 000000000000..3bd05cfd63cf --- /dev/null +++ b/jb/project/tools/mac/scripts/notarize.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +#immediately exit script with an error if a command fails +set -euo pipefail +[[ "${SCRIPT_VERBOSE:-}" == "1" ]] && set -x + +APP_PATH=$1 + +if [[ -z "$APP_PATH" ]]; then + echo "Usage: $0 AppPath" + exit 1 +fi +if [[ ! -f "$APP_PATH" ]]; then + echo "AppName '$APP_PATH' does not exist or not a file" + exit 1 +fi + +function log() { + echo "$(date '+[%H:%M:%S]') $*" +} + + +# check required parameters +: "${APPLE_ISSUER_ID}" +: "${APPLE_KEY_ID}" +: "${APPLE_PRIVATE_KEY}" + +# shellcheck disable=SC2064 +trap "rm -f \"$PWD/tmp_key\"" INT EXIT RETURN +echo -n "${APPLE_PRIVATE_KEY}" > tmp_key + +log "Notarizing $APP_PATH..." +xcrun notarytool submit --key tmp_key --key-id "${APPLE_KEY_ID}" --issuer "${APPLE_ISSUER_ID}" "$APP_PATH" 2>&1 | tee "notarytool.submit.out" +REQUEST_ID="$(grep -e " id: " "notarytool.submit.out" | grep -oE '([0-9a-f-]{36})'| head -n1)" + +xcrun notarytool wait "$REQUEST_ID" --key tmp_key --key-id "${APPLE_KEY_ID}" --issuer "${APPLE_ISSUER_ID}" --timeout 6h ||: +xcrun notarytool log "$REQUEST_ID" --key tmp_key --key-id "${APPLE_KEY_ID}" --issuer "${APPLE_ISSUER_ID}" developer_log.json ||: +xcrun notarytool info "$REQUEST_ID" --key tmp_key --key-id "${APPLE_KEY_ID}" --issuer "${APPLE_ISSUER_ID}" + +log "Notarizing finished" diff --git a/jb/project/tools/mac/scripts/productsign.sh b/jb/project/tools/mac/scripts/productsign.sh new file mode 100755 index 000000000000..790a05081b0b --- /dev/null +++ b/jb/project/tools/mac/scripts/productsign.sh @@ -0,0 +1,41 @@ +#!/bin/bash +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" + +source "$SCRIPT_DIR/jetsign-common.sh" || exit 1 + +function isSigned() { + pkgutil --check-signature "$1" >/dev/null 2>&1 && grep -q "signed by a developer certificate" < <(pkgutil --check-signature "$1" 2>&1) +} + +# second last argument is a path to be signed +pathToBeSigned="$(pwd)/${*:(-2):1}" +# last argument is a path to signed file +pathOut="$(pwd)/${*:(-1)}" +jetSignArgs=("${@:1:$#-2}") +if [[ ! -f "$pathToBeSigned" ]]; then + echo "$pathToBeSigned is missing or not a file" + exit 1 +elif isSigned "$pathToBeSigned" && ! isForced "${jetSignArgs[@]}" ; then + echo "Already signed: $pathToBeSigned" +elif [[ "$JETSIGN_CLIENT" == "null" ]]; then + echo "JetSign client is missing, cannot proceed with signing" + exit 1 +elif [[ "$pathToBeSigned" != *.pkg ]]; then + echo "$pathToBeSigned won't be signed, assumed not to be a macOS package" +else + if ! isSigned "$pathToBeSigned" ; then + echo "Unsigned macOS package: $pathToBeSigned" + fi + workDir=$(dirname "$pathToBeSigned") + pathSigned="$workDir/signed/${pathToBeSigned##*/}" + jetSignExtensions=$(jetSignExtensions "${jetSignArgs[@]}") + contentType=$(jetSignContentType "$pathToBeSigned") + ( + cd "$workDir" || exit 1 + "$JETSIGN_CLIENT" -log-format text -denoted-content-type "$contentType" -extensions "$jetSignExtensions" "$pathToBeSigned" + isSigned "$pathSigned" + rm -f "$pathOut" + mv "$pathSigned" "$pathOut" + rm -rf "$workDir/signed" + ) +fi diff --git a/jb/project/tools/mac/scripts/sign.sh b/jb/project/tools/mac/scripts/sign.sh new file mode 100755 index 000000000000..8328ecc2c53a --- /dev/null +++ b/jb/project/tools/mac/scripts/sign.sh @@ -0,0 +1,162 @@ +#!/bin/bash + +#immediately exit script with an error if a command fails +set -euo pipefail +[[ "${SCRIPT_VERBOSE:-}" == "1" ]] && set -x + +if [[ $# -lt 5 ]]; then + echo "Usage: $0 AppDirectory AppName BundleId CertificateID InstallerCertificateID" + exit 1 +fi + +APPLICATION_PATH=$1 +PKG_NAME=$2 +BUNDLE_ID=$3 +JB_DEVELOPER_CERT=$4 +JB_INSTALLER_CERT=$5 + +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" + +# Use JetBrains sign utility if it's available +if [[ "${JETSIGN_CLIENT:=}" == "null" ]] || [[ "$JETSIGN_CLIENT" == "" ]]; then + JB_SIGN=false + SIGN_UTILITY="codesign" + PRODUCTSIGN_UTILITY="productsign" +else + JB_SIGN=true + SIGN_UTILITY="$SCRIPT_DIR/codesign.sh" + PRODUCTSIGN_UTILITY="$SCRIPT_DIR/productsign.sh" +fi + +if [[ ! -d "$APPLICATION_PATH" ]]; then + echo "AppDirectory '$APPLICATION_PATH' does not exist or not a directory" + exit 1 +fi + +function log() { + echo "$(date '+[%H:%M:%S]') $*" +} + +# Cleanup files left from previous sign attempt (if any) +find "$APPLICATION_PATH" -name '*.cstemp' -exec rm '{}' \; + +log "Signing libraries and executables..." +# -perm +111 searches for executables +for f in \ + "Contents/Home/lib" "Contents/MacOS" \ + "Contents/Home/Frameworks" \ + "Contents/Frameworks"; do + if [ -d "$APPLICATION_PATH/$f" ]; then + find "$APPLICATION_PATH/$f" \ + -type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "*.tbd" -o -name "*.node" -o -perm +111 \) \ + -exec "$SIGN_UTILITY" --timestamp \ + -v -s "$JB_DEVELOPER_CERT" --options=runtime --force \ + --entitlements "$SCRIPT_DIR/entitlements.xml" {} \; + fi +done + +log "Signing libraries in jars in $APPLICATION_PATH" + +# todo: add set -euo pipefail; into the inner sh -c +# `-e` prevents `grep -q && printf` loginc +# with `-o pipefail` there's no input for 'while' loop +find "$APPLICATION_PATH" -name '*.jar' \ + -exec sh -c "set -u; unzip -l \"\$0\" | grep -q -e '\.dylib\$' -e '\.jnilib\$' -e '\.so\$' -e '\.tbd\$' -e '^jattach\$' && printf \"\$0\0\" " {} \; | + while IFS= read -r -d $'\0' file; do + log "Processing libraries in $file" + + rm -rf jarfolder jar.jar + mkdir jarfolder + filename="${file##*/}" + log "Filename: $filename" + cp "$file" jarfolder && (cd jarfolder && jar xf "$filename" && rm "$filename") + + find jarfolder \ + -type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "*.tbd" -o -name "jattach" \) \ + -exec "$SIGN_UTILITY" --timestamp \ + --force \ + -v -s "$JB_DEVELOPER_CERT" --options=runtime \ + --entitlements "$SCRIPT_DIR/entitlements.xml" {} \; + + (cd jarfolder; zip -q -r -o -0 ../jar.jar .) + mv jar.jar "$file" + done + +rm -rf jarfolder jar.jar + +log "Signing other files..." +# shellcheck disable=SC2043 +for f in \ + "Contents/Home/bin"; do + if [ -d "$APPLICATION_PATH/$f" ]; then + find "$APPLICATION_PATH/$f" \ + -type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "*.tbd" -o -perm +111 \) \ + -exec "$SIGN_UTILITY" --timestamp \ + -v -s "$JB_DEVELOPER_CERT" --options=runtime --force \ + --entitlements "$SCRIPT_DIR/entitlements.xml" {} \; + fi +done + +log "Signing whole frameworks..." +# shellcheck disable=SC2043 +if [ "$JB_SIGN" = true ]; then for f in \ + "Contents/Frameworks/cef_server.app/Contents/Frameworks" "Contents/Home/Frameworks" "Contents/Frameworks"; do + if [ -d "$APPLICATION_PATH/$f" ]; then + find "$APPLICATION_PATH/$f" \( -name '*.framework' -o -name '*.app' \) -maxdepth 1 | while read -r line + do + log "Signing '$line':" + tar -pczf tmp-to-sign.tar.gz -C "$(dirname "$line")" "$(basename "$line")" + "$SIGN_UTILITY" --timestamp \ + -v -s "$JB_DEVELOPER_CERT" --options=runtime \ + --force \ + --entitlements "$SCRIPT_DIR/entitlements.xml" tmp-to-sign.tar.gz + rm -rf "$line" + tar -xzf tmp-to-sign.tar.gz --directory "$(dirname "$line")" + rm -f tmp-to-sign.tar.gz + done + fi +done; fi + +log "Checking framework signatures..." +for f in \ + "Contents/Home/Frameworks" "Contents/Frameworks"; do + if [ -d "$APPLICATION_PATH/$f" ]; then + find "$APPLICATION_PATH/$f" -name '*.framework' -maxdepth 1 | while read -r line + do + log "Checking '$line':" + codesign --verify --deep --strict --verbose=4 "$line" + done + fi +done + +log "Signing whole app..." +if [ "$JB_SIGN" = true ]; then + tar -pczf tmp-to-sign.tar.gz --exclude='man' -C "$(dirname "$APPLICATION_PATH")" "$(basename "$APPLICATION_PATH")" + "$SIGN_UTILITY" --timestamp \ + -v -s "$JB_DEVELOPER_CERT" --options=runtime \ + --force \ + --entitlements "$SCRIPT_DIR/entitlements.xml" tmp-to-sign.tar.gz + rm -rf "$APPLICATION_PATH" + tar -xzf tmp-to-sign.tar.gz --directory "$(dirname "$APPLICATION_PATH")" + rm -f tmp-to-sign.tar.gz +else + "$SIGN_UTILITY" --timestamp \ + -v -s "$JB_DEVELOPER_CERT" --options=runtime \ + --force \ + --entitlements "$SCRIPT_DIR/entitlements.xml" "$APPLICATION_PATH" +fi + +BUILD_NAME="$(basename "$APPLICATION_PATH")" + +log "Creating $PKG_NAME..." +rm -rf "$PKG_NAME" + +mkdir -p unsigned +pkgbuild --identifier $BUNDLE_ID --root $APPLICATION_PATH \ + --install-location /Library/Java/JavaVirtualMachines/${BUILD_NAME} unsigned/${PKG_NAME} +log "Signing $PKG_NAME..." +"$PRODUCTSIGN_UTILITY" --timestamp --sign "$JB_INSTALLER_CERT" unsigned/${PKG_NAME} ${PKG_NAME} + +log "Verifying java is not broken" +find "$APPLICATION_PATH" \ + -type f -name 'java' -perm +111 -exec {} -version \; diff --git a/jb/project/tools/mac/scripts/signapp.sh b/jb/project/tools/mac/scripts/signapp.sh new file mode 100755 index 000000000000..a763881a0fbb --- /dev/null +++ b/jb/project/tools/mac/scripts/signapp.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +#immediately exit script with an error if a command fails +set -euo pipefail +[[ "${SCRIPT_VERBOSE:-}" == "1" ]] && set -x + +export COPY_EXTENDED_ATTRIBUTES_DISABLE=true +export COPYFILE_DISABLE=true + +INPUT_FILE=$1 +EXPLODED=$2.exploded +BACKUP_JMODS=$2.backup +USERNAME=$3 +PASSWORD=$4 +CODESIGN_STRING=$5 +JB_INSTALLER_CERT=$6 +NOTARIZE=$7 +BUNDLE_ID=$8 + +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" + +function log() { + echo "$(date '+[%H:%M:%S]') $*" +} + +log "Deleting $EXPLODED ..." +if test -d "$EXPLODED"; then + find "$EXPLODED" -mindepth 1 -maxdepth 1 -exec chmod -R u+wx '{}' \; +fi +rm -rf "$EXPLODED" +mkdir "$EXPLODED" +rm -rf "$BACKUP_JMODS" +mkdir "$BACKUP_JMODS" + +log "Unzipping $INPUT_FILE to $EXPLODED ..." +tar -xzvf "$INPUT_FILE" --directory $EXPLODED +BUILD_NAME="$(ls "$EXPLODED")" +#sed -i '' s/BNDL/APPL/ $EXPLODED/$BUILD_NAME/Contents/Info.plist +rm -f $EXPLODED/$BUILD_NAME/Contents/CodeResources +rm "$INPUT_FILE" +if test -d $EXPLODED/$BUILD_NAME/Contents/Home/jmods; then + mv $EXPLODED/$BUILD_NAME/Contents/Home/jmods $BACKUP_JMODS +fi + +log "$INPUT_FILE extracted and removed" + +APP_NAME=$(basename "$INPUT_FILE" | awk -F".tar" '{ print $1 }') +PKG_NAME="$APP_NAME.pkg" +APPLICATION_PATH=$EXPLODED/$(ls $EXPLODED) + +find "$APPLICATION_PATH/Contents/Home/bin" \ + -maxdepth 1 -type f -name '*.jnilib' -print0 | + while IFS= read -r -d $'\0' file; do + if [ -f "$file" ]; then + log "Linking $file" + b="$(basename "$file" .jnilib)" + ln -sf "$b.jnilib" "$(dirname "$file")/$b.dylib" + fi + done + +find "$APPLICATION_PATH/Contents/" \ + -maxdepth 1 -type f -name '*.txt' -print0 | + while IFS= read -r -d $'\0' file; do + if [ -f "$file" ]; then + log "Moving $file" + mv "$file" "$APPLICATION_PATH/Contents/Resources" + fi + done + +non_plist=$(find "$APPLICATION_PATH/Contents/" -maxdepth 1 -type f -and -not -name 'Info.plist' | wc -l) +if [[ $non_plist -gt 0 ]]; then + log "Only Info.plist file is allowed in Contents directory but found $non_plist file(s):" + log "$(find "$APPLICATION_PATH/Contents/" -maxdepth 1 -type f -and -not -name 'Info.plist')" + exit 1 +fi + +if [[ "${JETSIGN_CLIENT:=}" == "null" ]] || [[ "$JETSIGN_CLIENT" == "" ]]; then + log "Unlocking keychain..." + # Make sure *.p12 is imported into local KeyChain + security unlock-keychain -p "$PASSWORD" "/Users/$USERNAME/Library/Keychains/login.keychain" +fi + +attempt=1 +limit=3 +set +e +while [[ $attempt -le $limit ]]; do + log "Signing (attempt $attempt) $APPLICATION_PATH ..." + "$SCRIPT_DIR/sign.sh" "$APPLICATION_PATH" "$PKG_NAME" "$BUNDLE_ID" "$CODESIGN_STRING" "$JB_INSTALLER_CERT" + ec=$? + if [[ $ec -ne 0 ]]; then + ((attempt += 1)) + if [ $attempt -eq $limit ]; then + set -e + fi + log "Signing failed, wait for 30 sec and try to sign again" + sleep 30 + else + log "Signing done" + codesign -v "$APPLICATION_PATH" -vvvvv + log "Check sign done" + spctl -a -v $APPLICATION_PATH + ((attempt += limit)) + fi +done + +set -e + +if [ "$NOTARIZE" = "yes" ]; then + log "Notarizing..." + "$SCRIPT_DIR/notarize.sh" "$PKG_NAME" + log "Stapling..." + xcrun stapler staple "$APPLICATION_PATH" ||: + xcrun stapler staple "$PKG_NAME" ||: +else + log "Notarization disabled" + log "Stapling disabled" +fi + +log "Zipping $BUILD_NAME to $INPUT_FILE ..." +( + #cd "$EXPLODED" + #ditto -c -k --sequesterRsrc --keepParent "$BUILD_NAME" "../$INPUT_FILE" + if test -d $BACKUP_JMODS/jmods; then + mv $BACKUP_JMODS/jmods $APPLICATION_PATH/Contents/Home + fi + if [[ "$APPLICATION_PATH" != "$EXPLODED/$BUILD_NAME" ]]; then + mv $APPLICATION_PATH $EXPLODED/$BUILD_NAME + else + echo "No move, source == destination: $APPLICATION_PATH" + fi + + tar -pczvf $INPUT_FILE --exclude='man' -C $EXPLODED $BUILD_NAME + log "Finished zipping" +) +rm -rf "$EXPLODED" +log "Done" \ No newline at end of file diff --git a/jb/project/tools/patches/add_jcef_module.patch b/jb/project/tools/patches/add_jcef_module.patch new file mode 100644 index 000000000000..6a4aed824f6a --- /dev/null +++ b/jb/project/tools/patches/add_jcef_module.patch @@ -0,0 +1,30 @@ +diff --git jb/project/tools/common/modules.list jb/project/tools/common/modules.list +index 522acb7cb43..c40e689d5de 100644 +--- jb/project/tools/common/modules.list ++++ jb/project/tools/common/modules.list +@@ -51,4 +51,7 @@ jdk.unsupported.desktop, + jdk.xml.dom, + jdk.zipfs, + jdk.hotspot.agent, +-jdk.jcmd ++jdk.jcmd, ++jcef, ++gluegen.rt, ++jogl.all +diff --git src/java.desktop/share/classes/module-info.java src/java.desktop/share/classes/module-info.java +index 897647ee368..781d1809493 100644 +--- src/java.desktop/share/classes/module-info.java ++++ src/java.desktop/share/classes/module-info.java +@@ -116,7 +116,11 @@ module java.desktop { + // see make/GensrcModuleInfo.gmk + exports sun.awt to + jdk.accessibility, +- jdk.unsupported.desktop; ++ jdk.unsupported.desktop, ++ jcef, ++ jogl.all; ++ ++ exports java.awt.peer to jcef; + + exports java.awt.dnd.peer to jdk.unsupported.desktop; + exports sun.awt.dnd to jdk.unsupported.desktop; diff --git a/jb/project/tools/patches/add_jcef_module_aarch64.patch b/jb/project/tools/patches/add_jcef_module_aarch64.patch new file mode 100644 index 000000000000..2752dc95f3b9 --- /dev/null +++ b/jb/project/tools/patches/add_jcef_module_aarch64.patch @@ -0,0 +1,30 @@ +diff --git jb/project/tools/common/modules.list jb/project/tools/common/modules.list +index 522acb7..c40e689 100644 +--- jb/project/tools/common/modules.list ++++ jb/project/tools/common/modules.list +@@ -51,4 +51,7 @@ jdk.unsupported.desktop, + jdk.xml.dom, + jdk.zipfs, + jdk.hotspot.agent, +-jdk.jcmd ++jdk.jcmd, ++jcef, ++gluegen.rt, ++jogl.all +diff --git src/java.desktop/share/classes/module-info.java src/java.desktop/share/classes/module-info.java +index 897647e..781d180 100644 +--- src/java.desktop/share/classes/module-info.java ++++ src/java.desktop/share/classes/module-info.java +@@ -116,7 +116,11 @@ module java.desktop { + // see make/GensrcModuleInfo.gmk + exports sun.awt to + jdk.accessibility, +- jdk.unsupported.desktop; ++ jdk.unsupported.desktop, ++ jcef, ++ jogl.all; ++ ++ exports java.awt.peer to jcef; + + exports java.awt.dnd.peer to jdk.unsupported.desktop; + exports sun.awt.dnd to jdk.unsupported.desktop; diff --git a/jb/project/tools/perf/j2dbopts_poly250-AA-rand_col.txt b/jb/project/tools/perf/j2dbopts_poly250-AA-rand_col.txt new file mode 100644 index 000000000000..9e94d063b1ff --- /dev/null +++ b/jb/project/tools/perf/j2dbopts_poly250-AA-rand_col.txt @@ -0,0 +1,267 @@ +prog.verbose=disabled +prog.printresults=enabled +global.env.outputwidth=640 +global.env.outputheight=480 +global.env.runcount=5 +global.env.repcount=0 +global.env.testtime=2500 +global.results.workunits=units +global.results.timeunits=sec +global.results.ratio=unitspersec +global.dest.offscreen=disabled +global.dest.frame.defaultframe=enabled +global.dest.frame.transframe=disabled +global.dest.frame.shapedframe=disabled +global.dest.frame.shapedtransframe=disabled +global.dest.compatimg.compatimg=disabled +global.dest.compatimg.opqcompatimg=disabled +global.dest.compatimg.bmcompatimg=disabled +global.dest.compatimg.transcompatimg=disabled +global.dest.volimg.volimg=disabled +global.dest.volimg.opqvolimg=disabled +global.dest.volimg.bmvolimg=disabled +global.dest.volimg.transvolimg=disabled +global.dest.bufimg.IntXrgb=disabled +global.dest.bufimg.IntArgb=disabled +global.dest.bufimg.IntArgbPre=disabled +global.dest.bufimg.3ByteBgr=disabled +global.dest.bufimg.ByteIndexed=disabled +global.dest.bufimg.ByteGray=disabled +global.dest.bufimg.4ByteAbgr=disabled +global.dest.bufimg.4ByteAbgrPre=disabled +global.dest.bufimg.custom=disabled +graphics.opts.anim=2 +graphics.opts.sizes=250 +graphics.opts.alpharule=SrcOver +graphics.opts.transform=ident +graphics.opts.extraalpha=Off +graphics.opts.xormode=Off +graphics.opts.clip=Off +graphics.opts.renderhint=Default +graphics.render.opts.paint=random +graphics.render.opts.alphacolor=Off +graphics.render.opts.antialias=On +graphics.render.opts.stroke=width1 +graphics.render.tests.drawLine=disabled +graphics.render.tests.drawLineHoriz=disabled +graphics.render.tests.drawLineVert=disabled +graphics.render.tests.fillRect=disabled +graphics.render.tests.drawRect=disabled +graphics.render.tests.fillOval=disabled +graphics.render.tests.drawOval=disabled +graphics.render.tests.fillPoly=disabled +graphics.render.tests.drawPoly=enabled +graphics.render.tests.shape.fillCubic=disabled +graphics.render.tests.shape.drawCubic=disabled +graphics.render.tests.shape.fillEllipse2D=disabled +graphics.render.tests.shape.drawEllipse2D=disabled +graphics.imaging.src.offscr.opaque=disabled +graphics.imaging.src.offscr.bitmask=disabled +graphics.imaging.src.offscr.translucent=disabled +graphics.imaging.src.opqcompatimg.opaque=disabled +graphics.imaging.src.opqcompatimg.bitmask=disabled +graphics.imaging.src.opqcompatimg.translucent=disabled +graphics.imaging.src.bmcompatimg.opaque=disabled +graphics.imaging.src.bmcompatimg.bitmask=disabled +graphics.imaging.src.bmcompatimg.translucent=disabled +graphics.imaging.src.transcompatimg.opaque=disabled +graphics.imaging.src.transcompatimg.bitmask=disabled +graphics.imaging.src.transcompatimg.translucent=disabled +graphics.imaging.src.opqvolimg.opaque=disabled +graphics.imaging.src.opqvolimg.bitmask=disabled +graphics.imaging.src.opqvolimg.translucent=disabled +graphics.imaging.src.bmvolimg.opaque=disabled +graphics.imaging.src.bmvolimg.bitmask=disabled +graphics.imaging.src.bmvolimg.translucent=disabled +graphics.imaging.src.transvolimg.opaque=disabled +graphics.imaging.src.transvolimg.bitmask=disabled +graphics.imaging.src.transvolimg.translucent=disabled +graphics.imaging.src.bufimg.IntXrgb.opaque=disabled +graphics.imaging.src.bufimg.IntXrgb.bitmask=disabled +graphics.imaging.src.bufimg.IntXrgb.translucent=disabled +graphics.imaging.src.bufimg.IntArgb.opaque=disabled +graphics.imaging.src.bufimg.IntArgb.bitmask=disabled +graphics.imaging.src.bufimg.IntArgb.translucent=disabled +graphics.imaging.src.bufimg.IntArgbPre.opaque=disabled +graphics.imaging.src.bufimg.IntArgbPre.bitmask=disabled +graphics.imaging.src.bufimg.IntArgbPre.translucent=disabled +graphics.imaging.src.bufimg.ByteGray.opaque=disabled +graphics.imaging.src.bufimg.ByteGray.bitmask=disabled +graphics.imaging.src.bufimg.ByteGray.translucent=disabled +graphics.imaging.src.bufimg.3ByteBgr.opaque=disabled +graphics.imaging.src.bufimg.3ByteBgr.bitmask=disabled +graphics.imaging.src.bufimg.3ByteBgr.translucent=disabled +graphics.imaging.src.bufimg.4ByteAbgr.opaque=disabled +graphics.imaging.src.bufimg.4ByteAbgr.bitmask=disabled +graphics.imaging.src.bufimg.4ByteAbgr.translucent=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.opaque=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.bitmask=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.translucent=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.opaque=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.bitmask=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.translucent=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.opaque=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.bitmask=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.translucent=disabled +graphics.imaging.benchmarks.opts.interpolation=Nearest neighbor +graphics.imaging.benchmarks.opts.touchsrc=Off +graphics.imaging.benchmarks.tests.drawimage=disabled +graphics.imaging.benchmarks.tests.drawimagebg=disabled +graphics.imaging.benchmarks.tests.drawimagescaleup=disabled +graphics.imaging.benchmarks.tests.drawimagescaledown=disabled +graphics.imaging.benchmarks.tests.drawimagescalesplit=disabled +graphics.imaging.benchmarks.tests.drawimagetxform=disabled +graphics.imaging.imageops.opts.op=convolve3x3zero +graphics.imaging.imageops.tests.graphics2d.drawimageop=disabled +graphics.imaging.imageops.tests.bufimgop.filternull=disabled +graphics.imaging.imageops.tests.bufimgop.filtercached=disabled +graphics.imaging.imageops.tests.rasterop.filternull=disabled +graphics.imaging.imageops.tests.rasterop.filtercached=disabled +graphics.misc.copytests.copyAreaVert=disabled +graphics.misc.copytests.copyAreaHoriz=disabled +graphics.misc.copytests.copyAreaDiag=disabled +pixel.opts.renderto=Off +pixel.opts.renderfrom=Off +pixel.src.1BitBinary=disabled +pixel.src.2BitBinary=disabled +pixel.src.4BitBinary=disabled +pixel.src.ByteIndexed=disabled +pixel.src.ByteGray=disabled +pixel.src.Short555=disabled +pixel.src.Short565=disabled +pixel.src.ShortGray=disabled +pixel.src.3ByteBgr=disabled +pixel.src.4ByteAbgr=disabled +pixel.src.IntXrgb=disabled +pixel.src.IntXbgr=disabled +pixel.src.IntArgb=disabled +pixel.bimgtests.getrgb=disabled +pixel.bimgtests.setrgb=disabled +pixel.rastests.getdataelem=disabled +pixel.rastests.setdataelem=disabled +pixel.rastests.getpixel=disabled +pixel.rastests.setpixel=disabled +pixel.dbtests.getelem=disabled +pixel.dbtests.setelem=disabled +text.opts.data.tlength=16 +text.opts.data.tscript=english +text.opts.font.fname=serif,physical +text.opts.font.fstyle=0 +text.opts.font.fsize=13.0 +text.opts.font.ftx=Identity +text.opts.graphics.textaa=Off +text.opts.graphics.tfm=Off +text.opts.graphics.gaa=Off +text.opts.graphics.gtx=Identity +text.opts.advopts.gvstyle=0 +text.opts.advopts.tlruns=1 +text.opts.advopts.maptype=FONT +text.Rendering.tests.drawString=disabled +text.Rendering.tests.drawChars=disabled +text.Rendering.tests.drawBytes=disabled +text.Rendering.tests.drawGlyphVectors=disabled +text.Rendering.tests.drawTextLayout=disabled +text.Measuring.tests.stringWidth=disabled +text.Measuring.tests.stringBounds=disabled +text.Measuring.tests.charsWidth=disabled +text.Measuring.tests.charsBounds=disabled +text.Measuring.tests.fontcandisplay=disabled +text.Measuring.tests.gvWidth=disabled +text.Measuring.tests.gvLogicalBounds=disabled +text.Measuring.tests.gvVisualBounds=disabled +text.Measuring.tests.gvPixelBounds=disabled +text.Measuring.tests.gvOutline=disabled +text.Measuring.tests.gvGlyphLogicalBounds=disabled +text.Measuring.tests.gvGlyphVisualBounds=disabled +text.Measuring.tests.gvGlyphPixelBounds=disabled +text.Measuring.tests.gvGlyphOutline=disabled +text.Measuring.tests.gvGlyphTransform=disabled +text.Measuring.tests.gvGlyphMetrics=disabled +text.Measuring.tests.tlAdvance=disabled +text.Measuring.tests.tlAscent=disabled +text.Measuring.tests.tlBounds=disabled +text.Measuring.tests.tlGetCaretInfo=disabled +text.Measuring.tests.tlGetNextHit=disabled +text.Measuring.tests.tlGetCaretShape=disabled +text.Measuring.tests.tlGetLogicalHighlightShape=disabled +text.Measuring.tests.tlHitTest=disabled +text.Measuring.tests.tlOutline=disabled +text.construction.tests.gvfromfontstring=disabled +text.construction.tests.gvfromfontchars=disabled +text.construction.tests.gvfromfontci=disabled +text.construction.tests.gvfromfontglyphs=disabled +text.construction.tests.gvfromfontlayout=disabled +text.construction.tests.tlfromfont=disabled +text.construction.tests.tlfrommap=disabled +imageio.opts.size=250 +imageio.opts.content=photo +imageio.input.opts.general.source.file=disabled +imageio.input.opts.general.source.url=disabled +imageio.input.opts.general.source.byteArray=disabled +imageio.input.opts.imageio.useCache=Off +imageio.input.image.toolkit.opts.format= +imageio.input.image.toolkit.tests.createImage=disabled +imageio.input.image.imageio.opts.format= +imageio.input.image.imageio.tests.imageioRead=disabled +imageio.input.image.imageio.reader.opts.seekForwardOnly=On +imageio.input.image.imageio.reader.opts.ignoreMetadata=On +imageio.input.image.imageio.reader.opts.installListener=Off +imageio.input.image.imageio.reader.tests.read=disabled +imageio.input.image.imageio.reader.tests.getImageMetadata=disabled +imageio.input.stream.tests.construct=disabled +imageio.input.stream.tests.read=disabled +imageio.input.stream.tests.readByteArray=disabled +imageio.input.stream.tests.readFullyByteArray=disabled +imageio.input.stream.tests.readBit=disabled +imageio.input.stream.tests.readByte=disabled +imageio.input.stream.tests.readUnsignedByte=disabled +imageio.input.stream.tests.readShort=disabled +imageio.input.stream.tests.readUnsignedShort=disabled +imageio.input.stream.tests.readInt=disabled +imageio.input.stream.tests.readUnsignedInt=disabled +imageio.input.stream.tests.readFloat=disabled +imageio.input.stream.tests.readLong=disabled +imageio.input.stream.tests.readDouble=disabled +imageio.input.stream.tests.skipBytes=disabled +imageio.output.opts.general.dest.file=disabled +imageio.output.opts.general.dest.byteArray=disabled +imageio.output.opts.imageio.useCache=Off +imageio.output.image.imageio.opts.format= +imageio.output.image.imageio.tests.imageioWrite=disabled +imageio.output.image.imageio.writer.opts.installListener=Off +imageio.output.image.imageio.writer.tests.write=disabled +imageio.output.stream.tests.construct=disabled +imageio.output.stream.tests.write=disabled +imageio.output.stream.tests.writeByteArray=disabled +imageio.output.stream.tests.writeBit=disabled +imageio.output.stream.tests.writeByte=disabled +imageio.output.stream.tests.writeShort=disabled +imageio.output.stream.tests.writeInt=disabled +imageio.output.stream.tests.writeFloat=disabled +imageio.output.stream.tests.writeLong=disabled +imageio.output.stream.tests.writeDouble=disabled +cmm.opts.profiles=1001 +cmm.colorconv.data.fromRGB=disabled +cmm.colorconv.data.toRGB=disabled +cmm.colorconv.data.fromCIEXYZ=disabled +cmm.colorconv.data.toCIEXYZ=disabled +cmm.colorconv.ccop.ccopOptions.size=250 +cmm.colorconv.ccop.ccopOptions.content=photo +cmm.colorconv.ccop.ccopOptions.srcType=INT_RGB +cmm.colorconv.ccop.ccopOptions.dstType=INT_RGB +cmm.colorconv.ccop.op_img=disabled +cmm.colorconv.ccop.op_rst=disabled +cmm.colorconv.ccop.op_draw=disabled +cmm.colorconv.embed.embedOptions.Images=512x512 +cmm.colorconv.embed.embd_img_read=disabled +cmm.profiles.getHeader=disabled +cmm.profiles.getNumComponents=disabled diff --git a/jb/project/tools/perf/j2dbopts_poly250-rand_col.txt b/jb/project/tools/perf/j2dbopts_poly250-rand_col.txt new file mode 100644 index 000000000000..bf32c80daf64 --- /dev/null +++ b/jb/project/tools/perf/j2dbopts_poly250-rand_col.txt @@ -0,0 +1,267 @@ +prog.verbose=disabled +prog.printresults=enabled +global.env.outputwidth=640 +global.env.outputheight=480 +global.env.runcount=5 +global.env.repcount=0 +global.env.testtime=2500 +global.results.workunits=units +global.results.timeunits=sec +global.results.ratio=unitspersec +global.dest.offscreen=disabled +global.dest.frame.defaultframe=enabled +global.dest.frame.transframe=disabled +global.dest.frame.shapedframe=disabled +global.dest.frame.shapedtransframe=disabled +global.dest.compatimg.compatimg=disabled +global.dest.compatimg.opqcompatimg=disabled +global.dest.compatimg.bmcompatimg=disabled +global.dest.compatimg.transcompatimg=disabled +global.dest.volimg.volimg=disabled +global.dest.volimg.opqvolimg=disabled +global.dest.volimg.bmvolimg=disabled +global.dest.volimg.transvolimg=disabled +global.dest.bufimg.IntXrgb=disabled +global.dest.bufimg.IntArgb=disabled +global.dest.bufimg.IntArgbPre=disabled +global.dest.bufimg.3ByteBgr=disabled +global.dest.bufimg.ByteIndexed=disabled +global.dest.bufimg.ByteGray=disabled +global.dest.bufimg.4ByteAbgr=disabled +global.dest.bufimg.4ByteAbgrPre=disabled +global.dest.bufimg.custom=disabled +graphics.opts.anim=2 +graphics.opts.sizes=250 +graphics.opts.alpharule=SrcOver +graphics.opts.transform=ident +graphics.opts.extraalpha=Off +graphics.opts.xormode=Off +graphics.opts.clip=Off +graphics.opts.renderhint=Default +graphics.render.opts.paint=random +graphics.render.opts.alphacolor=Off +graphics.render.opts.antialias=Off +graphics.render.opts.stroke=width1 +graphics.render.tests.drawLine=disabled +graphics.render.tests.drawLineHoriz=disabled +graphics.render.tests.drawLineVert=disabled +graphics.render.tests.fillRect=disabled +graphics.render.tests.drawRect=disabled +graphics.render.tests.fillOval=disabled +graphics.render.tests.drawOval=disabled +graphics.render.tests.fillPoly=disabled +graphics.render.tests.drawPoly=enabled +graphics.render.tests.shape.fillCubic=disabled +graphics.render.tests.shape.drawCubic=disabled +graphics.render.tests.shape.fillEllipse2D=disabled +graphics.render.tests.shape.drawEllipse2D=disabled +graphics.imaging.src.offscr.opaque=disabled +graphics.imaging.src.offscr.bitmask=disabled +graphics.imaging.src.offscr.translucent=disabled +graphics.imaging.src.opqcompatimg.opaque=disabled +graphics.imaging.src.opqcompatimg.bitmask=disabled +graphics.imaging.src.opqcompatimg.translucent=disabled +graphics.imaging.src.bmcompatimg.opaque=disabled +graphics.imaging.src.bmcompatimg.bitmask=disabled +graphics.imaging.src.bmcompatimg.translucent=disabled +graphics.imaging.src.transcompatimg.opaque=disabled +graphics.imaging.src.transcompatimg.bitmask=disabled +graphics.imaging.src.transcompatimg.translucent=disabled +graphics.imaging.src.opqvolimg.opaque=disabled +graphics.imaging.src.opqvolimg.bitmask=disabled +graphics.imaging.src.opqvolimg.translucent=disabled +graphics.imaging.src.bmvolimg.opaque=disabled +graphics.imaging.src.bmvolimg.bitmask=disabled +graphics.imaging.src.bmvolimg.translucent=disabled +graphics.imaging.src.transvolimg.opaque=disabled +graphics.imaging.src.transvolimg.bitmask=disabled +graphics.imaging.src.transvolimg.translucent=disabled +graphics.imaging.src.bufimg.IntXrgb.opaque=disabled +graphics.imaging.src.bufimg.IntXrgb.bitmask=disabled +graphics.imaging.src.bufimg.IntXrgb.translucent=disabled +graphics.imaging.src.bufimg.IntArgb.opaque=disabled +graphics.imaging.src.bufimg.IntArgb.bitmask=disabled +graphics.imaging.src.bufimg.IntArgb.translucent=disabled +graphics.imaging.src.bufimg.IntArgbPre.opaque=disabled +graphics.imaging.src.bufimg.IntArgbPre.bitmask=disabled +graphics.imaging.src.bufimg.IntArgbPre.translucent=disabled +graphics.imaging.src.bufimg.ByteGray.opaque=disabled +graphics.imaging.src.bufimg.ByteGray.bitmask=disabled +graphics.imaging.src.bufimg.ByteGray.translucent=disabled +graphics.imaging.src.bufimg.3ByteBgr.opaque=disabled +graphics.imaging.src.bufimg.3ByteBgr.bitmask=disabled +graphics.imaging.src.bufimg.3ByteBgr.translucent=disabled +graphics.imaging.src.bufimg.4ByteAbgr.opaque=disabled +graphics.imaging.src.bufimg.4ByteAbgr.bitmask=disabled +graphics.imaging.src.bufimg.4ByteAbgr.translucent=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.opaque=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.bitmask=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.translucent=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.opaque=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.bitmask=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.translucent=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.opaque=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.bitmask=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.translucent=disabled +graphics.imaging.benchmarks.opts.interpolation=Nearest neighbor +graphics.imaging.benchmarks.opts.touchsrc=Off +graphics.imaging.benchmarks.tests.drawimage=disabled +graphics.imaging.benchmarks.tests.drawimagebg=disabled +graphics.imaging.benchmarks.tests.drawimagescaleup=disabled +graphics.imaging.benchmarks.tests.drawimagescaledown=disabled +graphics.imaging.benchmarks.tests.drawimagescalesplit=disabled +graphics.imaging.benchmarks.tests.drawimagetxform=disabled +graphics.imaging.imageops.opts.op=convolve3x3zero +graphics.imaging.imageops.tests.graphics2d.drawimageop=disabled +graphics.imaging.imageops.tests.bufimgop.filternull=disabled +graphics.imaging.imageops.tests.bufimgop.filtercached=disabled +graphics.imaging.imageops.tests.rasterop.filternull=disabled +graphics.imaging.imageops.tests.rasterop.filtercached=disabled +graphics.misc.copytests.copyAreaVert=disabled +graphics.misc.copytests.copyAreaHoriz=disabled +graphics.misc.copytests.copyAreaDiag=disabled +pixel.opts.renderto=Off +pixel.opts.renderfrom=Off +pixel.src.1BitBinary=disabled +pixel.src.2BitBinary=disabled +pixel.src.4BitBinary=disabled +pixel.src.ByteIndexed=disabled +pixel.src.ByteGray=disabled +pixel.src.Short555=disabled +pixel.src.Short565=disabled +pixel.src.ShortGray=disabled +pixel.src.3ByteBgr=disabled +pixel.src.4ByteAbgr=disabled +pixel.src.IntXrgb=disabled +pixel.src.IntXbgr=disabled +pixel.src.IntArgb=disabled +pixel.bimgtests.getrgb=disabled +pixel.bimgtests.setrgb=disabled +pixel.rastests.getdataelem=disabled +pixel.rastests.setdataelem=disabled +pixel.rastests.getpixel=disabled +pixel.rastests.setpixel=disabled +pixel.dbtests.getelem=disabled +pixel.dbtests.setelem=disabled +text.opts.data.tlength=16 +text.opts.data.tscript=english +text.opts.font.fname=serif,physical +text.opts.font.fstyle=0 +text.opts.font.fsize=13.0 +text.opts.font.ftx=Identity +text.opts.graphics.textaa=Off +text.opts.graphics.tfm=Off +text.opts.graphics.gaa=Off +text.opts.graphics.gtx=Identity +text.opts.advopts.gvstyle=0 +text.opts.advopts.tlruns=1 +text.opts.advopts.maptype=FONT +text.Rendering.tests.drawString=disabled +text.Rendering.tests.drawChars=disabled +text.Rendering.tests.drawBytes=disabled +text.Rendering.tests.drawGlyphVectors=disabled +text.Rendering.tests.drawTextLayout=disabled +text.Measuring.tests.stringWidth=disabled +text.Measuring.tests.stringBounds=disabled +text.Measuring.tests.charsWidth=disabled +text.Measuring.tests.charsBounds=disabled +text.Measuring.tests.fontcandisplay=disabled +text.Measuring.tests.gvWidth=disabled +text.Measuring.tests.gvLogicalBounds=disabled +text.Measuring.tests.gvVisualBounds=disabled +text.Measuring.tests.gvPixelBounds=disabled +text.Measuring.tests.gvOutline=disabled +text.Measuring.tests.gvGlyphLogicalBounds=disabled +text.Measuring.tests.gvGlyphVisualBounds=disabled +text.Measuring.tests.gvGlyphPixelBounds=disabled +text.Measuring.tests.gvGlyphOutline=disabled +text.Measuring.tests.gvGlyphTransform=disabled +text.Measuring.tests.gvGlyphMetrics=disabled +text.Measuring.tests.tlAdvance=disabled +text.Measuring.tests.tlAscent=disabled +text.Measuring.tests.tlBounds=disabled +text.Measuring.tests.tlGetCaretInfo=disabled +text.Measuring.tests.tlGetNextHit=disabled +text.Measuring.tests.tlGetCaretShape=disabled +text.Measuring.tests.tlGetLogicalHighlightShape=disabled +text.Measuring.tests.tlHitTest=disabled +text.Measuring.tests.tlOutline=disabled +text.construction.tests.gvfromfontstring=disabled +text.construction.tests.gvfromfontchars=disabled +text.construction.tests.gvfromfontci=disabled +text.construction.tests.gvfromfontglyphs=disabled +text.construction.tests.gvfromfontlayout=disabled +text.construction.tests.tlfromfont=disabled +text.construction.tests.tlfrommap=disabled +imageio.opts.size=250 +imageio.opts.content=photo +imageio.input.opts.general.source.file=disabled +imageio.input.opts.general.source.url=disabled +imageio.input.opts.general.source.byteArray=disabled +imageio.input.opts.imageio.useCache=Off +imageio.input.image.toolkit.opts.format= +imageio.input.image.toolkit.tests.createImage=disabled +imageio.input.image.imageio.opts.format= +imageio.input.image.imageio.tests.imageioRead=disabled +imageio.input.image.imageio.reader.opts.seekForwardOnly=On +imageio.input.image.imageio.reader.opts.ignoreMetadata=On +imageio.input.image.imageio.reader.opts.installListener=Off +imageio.input.image.imageio.reader.tests.read=disabled +imageio.input.image.imageio.reader.tests.getImageMetadata=disabled +imageio.input.stream.tests.construct=disabled +imageio.input.stream.tests.read=disabled +imageio.input.stream.tests.readByteArray=disabled +imageio.input.stream.tests.readFullyByteArray=disabled +imageio.input.stream.tests.readBit=disabled +imageio.input.stream.tests.readByte=disabled +imageio.input.stream.tests.readUnsignedByte=disabled +imageio.input.stream.tests.readShort=disabled +imageio.input.stream.tests.readUnsignedShort=disabled +imageio.input.stream.tests.readInt=disabled +imageio.input.stream.tests.readUnsignedInt=disabled +imageio.input.stream.tests.readFloat=disabled +imageio.input.stream.tests.readLong=disabled +imageio.input.stream.tests.readDouble=disabled +imageio.input.stream.tests.skipBytes=disabled +imageio.output.opts.general.dest.file=disabled +imageio.output.opts.general.dest.byteArray=disabled +imageio.output.opts.imageio.useCache=Off +imageio.output.image.imageio.opts.format= +imageio.output.image.imageio.tests.imageioWrite=disabled +imageio.output.image.imageio.writer.opts.installListener=Off +imageio.output.image.imageio.writer.tests.write=disabled +imageio.output.stream.tests.construct=disabled +imageio.output.stream.tests.write=disabled +imageio.output.stream.tests.writeByteArray=disabled +imageio.output.stream.tests.writeBit=disabled +imageio.output.stream.tests.writeByte=disabled +imageio.output.stream.tests.writeShort=disabled +imageio.output.stream.tests.writeInt=disabled +imageio.output.stream.tests.writeFloat=disabled +imageio.output.stream.tests.writeLong=disabled +imageio.output.stream.tests.writeDouble=disabled +cmm.opts.profiles=1001 +cmm.colorconv.data.fromRGB=disabled +cmm.colorconv.data.toRGB=disabled +cmm.colorconv.data.fromCIEXYZ=disabled +cmm.colorconv.data.toCIEXYZ=disabled +cmm.colorconv.ccop.ccopOptions.size=250 +cmm.colorconv.ccop.ccopOptions.content=photo +cmm.colorconv.ccop.ccopOptions.srcType=INT_RGB +cmm.colorconv.ccop.ccopOptions.dstType=INT_RGB +cmm.colorconv.ccop.op_img=disabled +cmm.colorconv.ccop.op_rst=disabled +cmm.colorconv.ccop.op_draw=disabled +cmm.colorconv.embed.embedOptions.Images=512x512 +cmm.colorconv.embed.embd_img_read=disabled +cmm.profiles.getHeader=disabled +cmm.profiles.getNumComponents=disabled diff --git a/jb/project/tools/perf/j2dbopts_poly250.txt b/jb/project/tools/perf/j2dbopts_poly250.txt new file mode 100644 index 000000000000..6cd894100d75 --- /dev/null +++ b/jb/project/tools/perf/j2dbopts_poly250.txt @@ -0,0 +1,267 @@ +prog.verbose=disabled +prog.printresults=enabled +global.env.outputwidth=640 +global.env.outputheight=480 +global.env.runcount=5 +global.env.repcount=0 +global.env.testtime=2500 +global.results.workunits=units +global.results.timeunits=sec +global.results.ratio=unitspersec +global.dest.offscreen=disabled +global.dest.frame.defaultframe=enabled +global.dest.frame.transframe=disabled +global.dest.frame.shapedframe=disabled +global.dest.frame.shapedtransframe=disabled +global.dest.compatimg.compatimg=disabled +global.dest.compatimg.opqcompatimg=disabled +global.dest.compatimg.bmcompatimg=disabled +global.dest.compatimg.transcompatimg=disabled +global.dest.volimg.volimg=disabled +global.dest.volimg.opqvolimg=disabled +global.dest.volimg.bmvolimg=disabled +global.dest.volimg.transvolimg=disabled +global.dest.bufimg.IntXrgb=disabled +global.dest.bufimg.IntArgb=disabled +global.dest.bufimg.IntArgbPre=disabled +global.dest.bufimg.3ByteBgr=disabled +global.dest.bufimg.ByteIndexed=disabled +global.dest.bufimg.ByteGray=disabled +global.dest.bufimg.4ByteAbgr=disabled +global.dest.bufimg.4ByteAbgrPre=disabled +global.dest.bufimg.custom=disabled +graphics.opts.anim=2 +graphics.opts.sizes=250 +graphics.opts.alpharule=SrcOver +graphics.opts.transform=ident +graphics.opts.extraalpha=Off +graphics.opts.xormode=Off +graphics.opts.clip=Off +graphics.opts.renderhint=Default +graphics.render.opts.paint=single +graphics.render.opts.alphacolor=Off +graphics.render.opts.antialias=Off +graphics.render.opts.stroke=width1 +graphics.render.tests.drawLine=disabled +graphics.render.tests.drawLineHoriz=disabled +graphics.render.tests.drawLineVert=disabled +graphics.render.tests.fillRect=disabled +graphics.render.tests.drawRect=disabled +graphics.render.tests.fillOval=disabled +graphics.render.tests.drawOval=disabled +graphics.render.tests.fillPoly=disabled +graphics.render.tests.drawPoly=enabled +graphics.render.tests.shape.fillCubic=disabled +graphics.render.tests.shape.drawCubic=disabled +graphics.render.tests.shape.fillEllipse2D=disabled +graphics.render.tests.shape.drawEllipse2D=disabled +graphics.imaging.src.offscr.opaque=disabled +graphics.imaging.src.offscr.bitmask=disabled +graphics.imaging.src.offscr.translucent=disabled +graphics.imaging.src.opqcompatimg.opaque=disabled +graphics.imaging.src.opqcompatimg.bitmask=disabled +graphics.imaging.src.opqcompatimg.translucent=disabled +graphics.imaging.src.bmcompatimg.opaque=disabled +graphics.imaging.src.bmcompatimg.bitmask=disabled +graphics.imaging.src.bmcompatimg.translucent=disabled +graphics.imaging.src.transcompatimg.opaque=disabled +graphics.imaging.src.transcompatimg.bitmask=disabled +graphics.imaging.src.transcompatimg.translucent=disabled +graphics.imaging.src.opqvolimg.opaque=disabled +graphics.imaging.src.opqvolimg.bitmask=disabled +graphics.imaging.src.opqvolimg.translucent=disabled +graphics.imaging.src.bmvolimg.opaque=disabled +graphics.imaging.src.bmvolimg.bitmask=disabled +graphics.imaging.src.bmvolimg.translucent=disabled +graphics.imaging.src.transvolimg.opaque=disabled +graphics.imaging.src.transvolimg.bitmask=disabled +graphics.imaging.src.transvolimg.translucent=disabled +graphics.imaging.src.bufimg.IntXrgb.opaque=disabled +graphics.imaging.src.bufimg.IntXrgb.bitmask=disabled +graphics.imaging.src.bufimg.IntXrgb.translucent=disabled +graphics.imaging.src.bufimg.IntArgb.opaque=disabled +graphics.imaging.src.bufimg.IntArgb.bitmask=disabled +graphics.imaging.src.bufimg.IntArgb.translucent=disabled +graphics.imaging.src.bufimg.IntArgbPre.opaque=disabled +graphics.imaging.src.bufimg.IntArgbPre.bitmask=disabled +graphics.imaging.src.bufimg.IntArgbPre.translucent=disabled +graphics.imaging.src.bufimg.ByteGray.opaque=disabled +graphics.imaging.src.bufimg.ByteGray.bitmask=disabled +graphics.imaging.src.bufimg.ByteGray.translucent=disabled +graphics.imaging.src.bufimg.3ByteBgr.opaque=disabled +graphics.imaging.src.bufimg.3ByteBgr.bitmask=disabled +graphics.imaging.src.bufimg.3ByteBgr.translucent=disabled +graphics.imaging.src.bufimg.4ByteAbgr.opaque=disabled +graphics.imaging.src.bufimg.4ByteAbgr.bitmask=disabled +graphics.imaging.src.bufimg.4ByteAbgr.translucent=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.opaque=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.bitmask=disabled +graphics.imaging.src.bufimg.4ByteAbgrPre.translucent=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.opaque=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.bitmask=disabled +graphics.imaging.src.bufimg.ByteIndexedBm.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntXrgb.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntArgb.translucent=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.opaque=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.bitmask=disabled +graphics.imaging.src.bufimg.unmanagedIntArgbPre.translucent=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.opaque=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.bitmask=disabled +graphics.imaging.src.bufimg.unmanaged3ByteBgr.translucent=disabled +graphics.imaging.benchmarks.opts.interpolation=Nearest neighbor +graphics.imaging.benchmarks.opts.touchsrc=Off +graphics.imaging.benchmarks.tests.drawimage=disabled +graphics.imaging.benchmarks.tests.drawimagebg=disabled +graphics.imaging.benchmarks.tests.drawimagescaleup=disabled +graphics.imaging.benchmarks.tests.drawimagescaledown=disabled +graphics.imaging.benchmarks.tests.drawimagescalesplit=disabled +graphics.imaging.benchmarks.tests.drawimagetxform=disabled +graphics.imaging.imageops.opts.op=convolve3x3zero +graphics.imaging.imageops.tests.graphics2d.drawimageop=disabled +graphics.imaging.imageops.tests.bufimgop.filternull=disabled +graphics.imaging.imageops.tests.bufimgop.filtercached=disabled +graphics.imaging.imageops.tests.rasterop.filternull=disabled +graphics.imaging.imageops.tests.rasterop.filtercached=disabled +graphics.misc.copytests.copyAreaVert=disabled +graphics.misc.copytests.copyAreaHoriz=disabled +graphics.misc.copytests.copyAreaDiag=disabled +pixel.opts.renderto=Off +pixel.opts.renderfrom=Off +pixel.src.1BitBinary=disabled +pixel.src.2BitBinary=disabled +pixel.src.4BitBinary=disabled +pixel.src.ByteIndexed=disabled +pixel.src.ByteGray=disabled +pixel.src.Short555=disabled +pixel.src.Short565=disabled +pixel.src.ShortGray=disabled +pixel.src.3ByteBgr=disabled +pixel.src.4ByteAbgr=disabled +pixel.src.IntXrgb=disabled +pixel.src.IntXbgr=disabled +pixel.src.IntArgb=disabled +pixel.bimgtests.getrgb=disabled +pixel.bimgtests.setrgb=disabled +pixel.rastests.getdataelem=disabled +pixel.rastests.setdataelem=disabled +pixel.rastests.getpixel=disabled +pixel.rastests.setpixel=disabled +pixel.dbtests.getelem=disabled +pixel.dbtests.setelem=disabled +text.opts.data.tlength=16 +text.opts.data.tscript=english +text.opts.font.fname=serif,physical +text.opts.font.fstyle=0 +text.opts.font.fsize=13.0 +text.opts.font.ftx=Identity +text.opts.graphics.textaa=Off +text.opts.graphics.tfm=Off +text.opts.graphics.gaa=Off +text.opts.graphics.gtx=Identity +text.opts.advopts.gvstyle=0 +text.opts.advopts.tlruns=1 +text.opts.advopts.maptype=FONT +text.Rendering.tests.drawString=disabled +text.Rendering.tests.drawChars=disabled +text.Rendering.tests.drawBytes=disabled +text.Rendering.tests.drawGlyphVectors=disabled +text.Rendering.tests.drawTextLayout=disabled +text.Measuring.tests.stringWidth=disabled +text.Measuring.tests.stringBounds=disabled +text.Measuring.tests.charsWidth=disabled +text.Measuring.tests.charsBounds=disabled +text.Measuring.tests.fontcandisplay=disabled +text.Measuring.tests.gvWidth=disabled +text.Measuring.tests.gvLogicalBounds=disabled +text.Measuring.tests.gvVisualBounds=disabled +text.Measuring.tests.gvPixelBounds=disabled +text.Measuring.tests.gvOutline=disabled +text.Measuring.tests.gvGlyphLogicalBounds=disabled +text.Measuring.tests.gvGlyphVisualBounds=disabled +text.Measuring.tests.gvGlyphPixelBounds=disabled +text.Measuring.tests.gvGlyphOutline=disabled +text.Measuring.tests.gvGlyphTransform=disabled +text.Measuring.tests.gvGlyphMetrics=disabled +text.Measuring.tests.tlAdvance=disabled +text.Measuring.tests.tlAscent=disabled +text.Measuring.tests.tlBounds=disabled +text.Measuring.tests.tlGetCaretInfo=disabled +text.Measuring.tests.tlGetNextHit=disabled +text.Measuring.tests.tlGetCaretShape=disabled +text.Measuring.tests.tlGetLogicalHighlightShape=disabled +text.Measuring.tests.tlHitTest=disabled +text.Measuring.tests.tlOutline=disabled +text.construction.tests.gvfromfontstring=disabled +text.construction.tests.gvfromfontchars=disabled +text.construction.tests.gvfromfontci=disabled +text.construction.tests.gvfromfontglyphs=disabled +text.construction.tests.gvfromfontlayout=disabled +text.construction.tests.tlfromfont=disabled +text.construction.tests.tlfrommap=disabled +imageio.opts.size=250 +imageio.opts.content=photo +imageio.input.opts.general.source.file=disabled +imageio.input.opts.general.source.url=disabled +imageio.input.opts.general.source.byteArray=disabled +imageio.input.opts.imageio.useCache=Off +imageio.input.image.toolkit.opts.format= +imageio.input.image.toolkit.tests.createImage=disabled +imageio.input.image.imageio.opts.format= +imageio.input.image.imageio.tests.imageioRead=disabled +imageio.input.image.imageio.reader.opts.seekForwardOnly=On +imageio.input.image.imageio.reader.opts.ignoreMetadata=On +imageio.input.image.imageio.reader.opts.installListener=Off +imageio.input.image.imageio.reader.tests.read=disabled +imageio.input.image.imageio.reader.tests.getImageMetadata=disabled +imageio.input.stream.tests.construct=disabled +imageio.input.stream.tests.read=disabled +imageio.input.stream.tests.readByteArray=disabled +imageio.input.stream.tests.readFullyByteArray=disabled +imageio.input.stream.tests.readBit=disabled +imageio.input.stream.tests.readByte=disabled +imageio.input.stream.tests.readUnsignedByte=disabled +imageio.input.stream.tests.readShort=disabled +imageio.input.stream.tests.readUnsignedShort=disabled +imageio.input.stream.tests.readInt=disabled +imageio.input.stream.tests.readUnsignedInt=disabled +imageio.input.stream.tests.readFloat=disabled +imageio.input.stream.tests.readLong=disabled +imageio.input.stream.tests.readDouble=disabled +imageio.input.stream.tests.skipBytes=disabled +imageio.output.opts.general.dest.file=disabled +imageio.output.opts.general.dest.byteArray=disabled +imageio.output.opts.imageio.useCache=Off +imageio.output.image.imageio.opts.format= +imageio.output.image.imageio.tests.imageioWrite=disabled +imageio.output.image.imageio.writer.opts.installListener=Off +imageio.output.image.imageio.writer.tests.write=disabled +imageio.output.stream.tests.construct=disabled +imageio.output.stream.tests.write=disabled +imageio.output.stream.tests.writeByteArray=disabled +imageio.output.stream.tests.writeBit=disabled +imageio.output.stream.tests.writeByte=disabled +imageio.output.stream.tests.writeShort=disabled +imageio.output.stream.tests.writeInt=disabled +imageio.output.stream.tests.writeFloat=disabled +imageio.output.stream.tests.writeLong=disabled +imageio.output.stream.tests.writeDouble=disabled +cmm.opts.profiles=1001 +cmm.colorconv.data.fromRGB=disabled +cmm.colorconv.data.toRGB=disabled +cmm.colorconv.data.fromCIEXYZ=disabled +cmm.colorconv.data.toCIEXYZ=disabled +cmm.colorconv.ccop.ccopOptions.size=250 +cmm.colorconv.ccop.ccopOptions.content=photo +cmm.colorconv.ccop.ccopOptions.srcType=INT_RGB +cmm.colorconv.ccop.ccopOptions.dstType=INT_RGB +cmm.colorconv.ccop.op_img=disabled +cmm.colorconv.ccop.op_rst=disabled +cmm.colorconv.ccop.op_draw=disabled +cmm.colorconv.embed.embedOptions.Images=512x512 +cmm.colorconv.embed.embd_img_read=disabled +cmm.profiles.getHeader=disabled +cmm.profiles.getNumComponents=disabled diff --git a/jb/project/tools/perf/run_inc.sh b/jb/project/tools/perf/run_inc.sh new file mode 100644 index 000000000000..109119fa7877 --- /dev/null +++ b/jb/project/tools/perf/run_inc.sh @@ -0,0 +1,98 @@ +ST=1 # sleep between iterations + +# number of iterations (jvm spawned) +N=5 +# number of repeats (within jvm) +R=3 + +type datamash 2>&1 > /dev/null ; ec=$? +if [ $ec -ne 0 ] ; then + echo "Missing datamash utility" + exit 1 +fi + +DATAMASH_CMD="datamash --format=%.2f -H count x min x q1 x median x q3 x max x mad x" + +J2D_OPTS="" +OS="" +case "$OSTYPE" in + linux*) echo "Linux" + ;; + darwin*) echo "OSX" + ;; + *) echo "unknown: $OSTYPE" + exit 1 + ;; +esac + +read -r -d '' RENDER_OPS_DOC << EOM +rendering_options: + -opengl # OpenGL pipeline (windows, linux, macOS) + -metal # Metal pipeline (macOS) + -tk tk_name # AWT toolkit (linux: WLToolkit|XToolkit) + -scale # UI scale +EOM + +while [ $# -ge 1 ] ; do + case "$1" in + -opengl) J2D_OPTS=$J2D_OPTS" -Dsun.java2d.opengl=true" + shift + ;; + -metal) J2D_OPTS=$J2D_OPTS" -Dsun.java2d.metal=true" + shift + ;; + -tk) shift + if [ $# -ge 1 ] ; then + J2D_OPTS=$J2D_OPTS" -Dawt.toolkit.name="$1 + shift + else + echo "Invalid parameters for -tk option. Use: -tk tkname" + exit 1 + fi + ;; + -scale) shift + if [ $# -ge 1 ] ; then + J2D_OPTS=$J2D_OPTS" -Dsun.java2d.uiScale="$1 + shift + else + echo "Invalid parameters for -scale option. Use: -scale scale" + exit 1 + fi + ;; + -dSync) shift + if [ $# -ge 1 ] ; then + J2D_OPTS=$J2D_OPTS" -Dsun.java2d.metal.displaySync="$1 + shift + else + echo "Invalid parameters for -dSync option. Use: -dSync [true|false]" + exit 1 + fi + ;; + -jdk) shift + if [ $# -ge 1 ] ; then + JAVA=$1/bin/java + shift + else + echo "Invalid parameters for -jdk option" + exit 1 + fi + ;; + *) break + ;; + esac +done +if [ -z "$JAVA" ] ; then + BUILD_DIR=`find $BASE_DIR/../../../../build -name '*-release' -type d | head -n 1` + JAVA=`find $BUILD_DIR/images/jdk -name java -type f | head -n 1` +fi + +JAVA_HOME=`dirname $JAVA`/../ +"$JAVA" -version + +LANG=C + +WS_ROOT=$BASE_DIR/../../../.. + +echo "N: $N" +echo "R: $R" +echo "J2D_OPTS: $J2D_OPTS" diff --git a/jb/project/tools/perf/run_j2b.sh b/jb/project/tools/perf/run_j2b.sh new file mode 100755 index 000000000000..b20d53921053 --- /dev/null +++ b/jb/project/tools/perf/run_j2b.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +BASE_DIR=$(dirname "$0") +source $BASE_DIR/run_inc.sh + +J2DBENCH_DIR=$WS_ROOT/src/demo/share/java2d/J2DBench + +if [ -z "$J2DBENCH" ]; then + if [ ! -f "$J2DBENCH_DIR/dist/J2DBench.jar" ]; then + PATH=$JAVA_HOME/bin:$PATH make -C $J2DBENCH_DIR + fi + if [ ! -f "$J2DBENCH_DIR/dist/J2DBench.jar" ]; then + echo "Cannot build J2DBench. You may use J2DBench env variable instead pointing to the J2DBench.jar." + exit 1 + fi + J2DBENCH=$J2DBENCH_DIR/dist/J2DBench.jar +fi + +if [ $# -ne 1 ] ; then + echo "Usage: run_j2b.sh [rendering_options] bench_name" + echo + echo "bench_name: poly250 poly250-rand_col poly250-AA-rand_col" + echo "" + echo "$RENDER_OPS_DOC" + exit 2 +fi + +if [ ! -f "$BASE_DIR/j2dbopts_$1.txt" ]; then + echo "Unknown test: $1" + exit 1 +fi + + + +OPTS="j2dbopts_$1.txt" +#OPTS=j2dbopts_poly250.txt +#OPTS=j2dbopts_poly250-rand_col.txt +#OPTS=j2dbopts_poly250-AA-rand_col.txt + +echo "OPTS: $OPTS" + +for i in `seq $N`; do + if [ $i -eq 1 ]; then + echo x + fi + echo `$JAVA $J2D_OPTS -jar $J2DBENCH \ + -batch -loadopts $BASE_DIR/$OPTS -saveres pl.res \ + -title pl -desc pl | awk '/averaged/{print $3}' | head -n1` + + if [ $i -ne $N ]; then + sleep $ST + fi +done | $DATAMASH_CMD | expand -t12 diff --git a/jb/project/tools/perf/run_rp.sh b/jb/project/tools/perf/run_rp.sh new file mode 100755 index 000000000000..103c12768acb --- /dev/null +++ b/jb/project/tools/perf/run_rp.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +BASE_DIR=$(dirname "$0") +source $BASE_DIR/run_inc.sh + +RENDERPERFTEST_DIR=$WS_ROOT/test/jdk/performance/client/RenderPerfTest + +if [ -z "$RENDERPERFTEST" ]; then + if [ ! -f "$RENDERPERFTEST_DIR/dist/RenderPerfTest.jar" ]; then + PATH=$JAVA_HOME/bin:$PATH make -C $RENDERPERFTEST_DIR + fi + if [ ! -f "$RENDERPERFTEST_DIR/dist/RenderPerfTest.jar" ]; then + echo "Cannot build RenderPerfTest. You may use RENDERPERFTEST env variable instead pointing to the RenderPerfTest.jar." + exit 1 + fi + RENDERPERFTEST=$RENDERPERFTEST_DIR/dist/RenderPerfTest.jar +fi + + +TRACE=false + +#MODE=Robot +#MODE=Buffer +MODE=Volatile + +while [ $# -ge 1 ] ; do + case "$1" in + -onscreen) MODE="Robot" + shift + ;; + -volatile) MODE="Volatile" + shift + ;; + -buffer) MODE="Buffer" + shift + ;; + *) break + ;; + esac +done + +if [[ ($# -eq 1 && "$1" == "-help") || ($# -eq 0) ]] ; then + echo "Usage: run_rp.sh [rp_rendering_mode] [rendering_options] bench_name" + echo + echo "bench_name: ArgbSurfaceBlitImage ArgbSwBlitImage BgrSurfaceBlitImage BgrSwBlitImage" + echo " Image ImageAA Image_XOR VolImage VolImageAA" + echo " ClipFlatBox ClipFlatBoxAA ClipFlatOval ClipFlatOvalAA" + echo " FlatBox FlatBoxAA FlatOval FlatOvalAA FlatOval_XOR FlatQuad FlatQuadAA" + echo " RotatedBox RotatedBoxAA RotatedBox_XOR RotatedOval RotatedOvalAA" + echo " WiredBox WiredBoxAA WiredBubbles WiredBubblesAA WiredQuad WiredQuadAA" + echo " Lines LinesAA Lines_XOR" + echo " TextGray TextLCD TextLCD_XOR TextNoAA TextNoAA_XOR" + echo " LargeTextGray LargeTextLCD LargeTextNoAA WhiteTextGray WhiteTextLCD WhiteTextNoAA" + echo " LinGrad3RotatedOval LinGrad3RotatedOvalAA LinGradRotatedOval LinGradRotatedOvalAA" + echo " RadGrad3RotatedOval RadGrad3RotatedOvalAA" + echo "" + echo "rp_rendering_mode: " + echo " -onscreen : rendering to the window and check it using Robot" + echo " -volatile : rendering to volatile image (default)" + echo " -buffer : rendering to buffered image" + echo "$RENDER_OPS_DOC" + exit 2 +fi + +# use time + repeat +OPTS="$OPTS -r$R -t -e$MODE $1" + +echo "OPTS: $OPTS" + +echo "Unit: Milliseconds (not FPS), lower is better" + +for i in `seq $N` ; do + if [ $i -eq 1 ]; then + echo x + fi + + $JAVA $J2D_OPTS -DTRACE=$TRACE \ + -jar $RENDERPERFTEST $OPTS 2>&1 | tail -n +2 | \ + awk '/'$1'/{print $3 }' + if [ $i -ne $N ]; then + sleep $ST + fi +done | $DATAMASH_CMD | expand -t12 diff --git a/jb/project/tools/perf/run_sm.sh b/jb/project/tools/perf/run_sm.sh new file mode 100755 index 000000000000..1d758dacd28e --- /dev/null +++ b/jb/project/tools/perf/run_sm.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +BASE_DIR=$(dirname "$0") +source $BASE_DIR/run_inc.sh + +SWINGMARK_DIR=$WS_ROOT/test/jdk/performance/client/SwingMark + +if [ -z "$SWINGMARK" ]; then + if [ ! -f "$SWINGMARK_DIR/dist/SwingMark.jar" ]; then + PATH=$JAVA_HOME/bin:$PATH make -C $SWINGMARK_DIR + fi + if [ ! -f "$SWINGMARK_DIR/dist/SwingMark.jar" ]; then + echo "Cannot build SwingMark. You may use SWINGMARK env variable instead pointing to the SwingMark.jar." + exit 1 + fi + SWINGMARK=$SWINGMARK_DIR/dist/SwingMark.jar +fi + +if [ $# -eq 1 -a "$1" == "--help" ] ; then + shift + echo "Usage: run_sm [rendering_options]" + echo "" + echo "$RENDER_OPS_DOC" + exit 0 +fi + +for i in `seq $N` ; do + if [ $i -eq 1 ]; then + echo x + fi + + # SwingMark gives 1 global 'Score: ' + echo `$JAVA $J2D_OPTS -jar $BASE_DIR/../../../../test/jdk/performance/client/SwingMark/dist/SwingMark.jar \ + -r $R -q -lf javax.swing.plaf.metal.MetalLookAndFeel | awk '/Score/{print $2}'` + + if [ $i -ne $N ]; then + sleep $ST + fi +done | $DATAMASH_CMD | expand -t12 diff --git a/jb/project/tools/test/check_jbr_size.sh b/jb/project/tools/test/check_jbr_size.sh new file mode 100644 index 000000000000..3a9ef2f5a7ad --- /dev/null +++ b/jb/project/tools/test/check_jbr_size.sh @@ -0,0 +1,162 @@ +#!/bin/bash + +set -euo pipefail + +TC_PRINT=0 +# Always print TeamCity service messages if running under TeamCity +[[ -n "${TEAMCITY_VERSION:-}" ]] && TC_PRINT=1 + +while getopts ":t" o; do + case "${o}" in + t) TC_PRINT=1 ;; + *);; + esac +done +shift $((OPTIND-1)) + +NEWFILEPATH="$1" +CONFIGID="$2" +BUILDID="$3" +TOKEN="$4" + +if [ ! -f "$NEWFILEPATH" ]; then + echo "File not found: $NEWFILEPATH" + exit 1 +fi +# +# Get the size of new artifact +# + +unameOut="$(uname -s)" +case "${unameOut}" in + Linux*) + NEWFILESIZE=$(stat -c%s "$NEWFILEPATH") + ;; + Darwin*) + NEWFILESIZE=$(stat -f%z "$NEWFILEPATH") + ;; + CYGWIN*) + NEWFILESIZE=$(stat -c%s "$NEWFILEPATH") + ;; + MINGW*) + NEWFILESIZE=$(stat -c%s "$NEWFILEPATH") + ;; + *) + echo "Unknown machine: ${unameOut}" + exit 1 +esac +FILENAME=$(basename "${NEWFILEPATH}") + +# +# Get pattern of artifact name +# Base filename pattern: ----b.tar.gz: jbr_dcevm-17.0.2-osx-x64-b1234.tar.gz +# BUNDLE_TYPE: jbr, jbrsdk, jbr_dcevm, jbrsdk_jcef etc. +# OS_ARCH_PATTERN - : osx-x64, linux-aarch64, linux-musl-x64, windows-x64 etc. + +BUNDLE_TYPE=jbrsdk +OS_ARCH_PATTERN="" +FILE_EXTENSION=tar.gz + +re='(jbr[a-z_]*).*-[0-9_\.]+-(.+)-b[0-9]+(.+)' +if [[ $FILENAME =~ $re ]]; then + BUNDLE_TYPE=${BASH_REMATCH[1]} + OS_ARCH_PATTERN=${BASH_REMATCH[2]} + FILE_EXTENSION=${BASH_REMATCH[3]} +else + echo "File name $FILENAME does not match regex $re" + exit 1 +fi + +function test_started_msg() { + if [ $TC_PRINT -eq 1 ]; then + echo "##teamcity[testStarted name='$1']" + fi +} + +function test_failed_msg() { + if [ $TC_PRINT -eq 1 ]; then + echo "##teamcity[testFailed name='$1' message='$2']" + fi +} + +function test_finished_msg() { + if [ $TC_PRINT -eq 1 ]; then + echo "##teamcity[testFinished name='$1']" + fi +} + +test_name="${BUNDLE_TYPE}_${OS_ARCH_PATTERN//\-/_}${FILE_EXTENSION//\./_}" +test_started_msg "$test_name" + +echo "BUNDLE_TYPE: $BUNDLE_TYPE" +echo "OS_ARCH_PATTERN: $OS_ARCH_PATTERN" +echo "FILE_EXTENSION: $FILE_EXTENSION" +echo "Size of $FILENAME is $NEWFILESIZE bytes" + +# +# Get previous successful build ID +# Example: +# CONFIGID=IntellijCustomJdk_Jdk17_Master_LinuxX64jcef +# BUILDID=12345678 +# +# expected return value +# id="123".number="567" +# +CURL_RESPONSE=$(curl -sSL --header "Authorization: Bearer $TOKEN" "https://buildserver.labs.intellij.net/app/rest/builds/?locator=buildType:(id:$CONFIGID),status:success,count:1,finishDate:(build:$BUILDID,condition:before)") +re='id=\"([0-9]+)\".+number=\"([0-9\.]+)\"' + +# ID: Previous successful build id +ID=0 +if [[ $CURL_RESPONSE =~ $re ]]; then + ID=${BASH_REMATCH[1]} + echo "Previous build ID: $ID" + echo "Previous build number: ${BASH_REMATCH[2]}" +else + msg="ERROR: cannot find previous build" + echo "$msg" + echo "$CURL_RESPONSE" + test_failed_msg "$test_name" "$msg" + test_finished_msg "$test_name" + exit 1 +fi + +# +# Get artifacts from previous successful build +# +# expected return value +# name="jbrsdk_jcef*.tar.gz size="123' +# +CURL_RESPONSE=$(curl -sSL --header "Authorization: Bearer $TOKEN" "https://buildserver.labs.intellij.net/app/rest/builds/$ID?fields=id,number,artifacts(file(name,size))") +echo "Artifacts of the previous build:" +echo "$CURL_RESPONSE" + +# Find binary size (in response) with reg exp +re="name=\"(${BUNDLE_TYPE}[^\"]+${OS_ARCH_PATTERN}[^\"]+${FILE_EXTENSION})\" size=\"([0-9]+)\"" + +if [[ $CURL_RESPONSE =~ $re ]]; then + prevFileName=${BASH_REMATCH[1]} + echo "Previous artifact name: $prevFileName" + prevFileSize=${BASH_REMATCH[2]} + echo "Previous artifact size: $prevFileSize" + + ((allowedSize=prevFileSize+prevFileSize/20)) # use 5% threshold + echo "Allowed size: $allowedSize" + if [[ "$NEWFILESIZE" -gt "$allowedSize" ]]; then + msg="ERROR: new size is significantly greater than previous size (need to investigate)" + echo "$msg" + test_failed_msg "$test_name" "$msg" + test_finished_msg "$test_name" + exit 1 + else + echo "PASSED" + test_finished_msg "$test_name" + fi +else + msg="ERROR: cannot find string with size in xml response:" + echo "Regex: $re" + echo "$msg" + echo "$CURL_RESPONSE" + test_failed_msg "$test_name" "$msg" + test_finished_msg "$test_name" + exit 1 +fi diff --git a/jb/project/tools/test/perfcmp.sh b/jb/project/tools/test/perfcmp.sh new file mode 100755 index 000000000000..f8c0970c6b3e --- /dev/null +++ b/jb/project/tools/test/perfcmp.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +set -euo pipefail +set -x + +usage () +{ +echo "Usage: perfcmp.sh [options] " +echo "Options:" +echo -e " -h, --help\tdisplay this help" +echo -e " -tc\tprint teacmity statistic" +echo -e "test_results_cur - the file with metrics values for the current measuring" +echo -e "test_results_ref - the file with metrics values for the reference measuring" +echo -e "results - results of comaprison" +echo -e "test_prefix - specifys measuring type, makes sense for enabled -tc, by default no prefixes" +echo -e "noHeaders - by default 1-st line contains headers" +echo -e "" +echo -e "test_results_* files content should be in csv format with header and tab separator:" +echo -e "The 1-st column is the test name" +echo -e "The 2-st column is the test value" +echo -e "" +echo -e "Example:" +echo -e "Test Value" +echo -e "Testname 51.54" +} + +while [ -n "$1" ] +do +case "$1" in +-h | --help) usage +exit 1 ;; +-tc) tc=1 + shift + break ;; +*) break;; +esac +done + +if [[ "$#" < "3" ]]; then + echo "Error: Invalid arguments" + usage + exit 1 +fi + +curFile=$1 +refFile=$2 +resFile=$3 +testNamePrefix=$4 +noHeaders=$5 +echo $curFile +echo $refFile +echo $resFile + +curValues=`cat "$curFile" | cut -f 2 | tr -d '\t'` +if [ -z $noHeaders ]; then + curValuesHeader=`echo "$curValues" | head -n +1`_cur + header=`cat "$refFile" | head -n +1 | awk -F'\t' -v x=$curValuesHeader '{print " "$1"\t"$2"_ref\t"x"\tratio"}'` + testContent=`paste -d '\t' $refFile <(echo "$curValues") | tail -n +2` +else + testContent=`paste -d '\t' $refFile <(echo "$curValues") | tail -n +1` +fi + +testContent=`echo "$testContent" | tr "," "." | awk -F'\t' '{ + if ($3>$2+$2*0.1) { + print "* "$1"\t"$2"\t"$3"\t"(($2>0)?$3/$2:"-") + } else { + print " "$1"\t"$2"\t"$3"\t"(($2>0)?$3/$2:"-") + } +}'` +if [ -z $noHeaders ]; then + echo "$header" > $resFile +fi +echo "$testContent" >> $resFile +cat "$resFile" | tr '\t' ';' | column -t -s ';' | tee $resFile + +if [ -z $tc ]; then +exit 0 +fi + +failed=0 +echo "$testContent" 2>&1 | ( + while read -r s; do + testname=`echo "$s" | cut -f 1 | tr -d "[:space:]" | tr -d "*"` + duration=`echo "$s" | cut -f 3` + echo "$s" | cut -c1 | grep -c "*" && failed=1 + echo \#\#teamcity[testStarted name=\'$testNamePrefix$testname\'] + echo "===>$s" + echo \#\#teamcity[buildStatisticValue key=\'$testNamePrefix$testname\' value=\'$duration\'] + [ $failed -eq 1 ] && echo \#\#teamcity[testFailed name=\'$testNamePrefix$testname\' message=\'$s\'] + echo \#\#teamcity[testFinished name=\'$testNamePrefix$testname\' duration=\'$duration\'] + failed=0 + done +) \ No newline at end of file diff --git a/jb/project/tools/windows/scripts/mkimages_aarch64.sh b/jb/project/tools/windows/scripts/mkimages_aarch64.sh new file mode 100644 index 000000000000..38e5be1864eb --- /dev/null +++ b/jb/project/tools/windows/scripts/mkimages_aarch64.sh @@ -0,0 +1,152 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script makes test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# +# Environment variables: +# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument +# to configure +# By default JDK_BUILD_NUMBER is set zero +# JCEF_PATH - specifies the path to the directory with JCEF binaries. +# By default JCEF binaries should be located in ./jcef_win_aarch64 + +if [ -z "$BUILD_JDK" ]; then + echo "BUILD_JDK environment variable must be specified and point to a JDK built from the current sources" \ + " and is able to run on the build system. See OpenJDK documentation for --with-build-jdk for more info." + exit 1 +fi + +source jb/project/tools/common/scripts/common.sh + +WORK_DIR=$(pwd) +JCEF_PATH=${JCEF_PATH:=$WORK_DIR/jcef_win_aarch64} +NVDA_PATH=${NVDA_PATH:=$WORK_DIR/nvda_controllerClient} + +function do_configure { + sh ./configure \ + --enable-option-checking=fatal \ + --openjdk-target=aarch64-unknown-cygwin \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build=$JDK_BUILD_NUMBER \ + --with-version-opt=b${build_number} \ + --with-toolchain-version=$TOOLCHAIN_VERSION \ + --with-boot-jdk=$BOOT_JDK \ + --with-build-jdk=$BUILD_JDK \ + --with-nvdacontrollerclient=$NVDA_PATH \ + --disable-ccache \ + --enable-cds=yes \ + $DISABLE_WARNINGS_AS_ERRORS \ + $STATIC_CONF_ARGS \ + $REPRODUCIBLE_BUILD_OPTS \ + || do_exit $? +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + fastdebug_infix='' + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + __root_dir=${__bundle_name}-${JBSDK_VERSION}-windows-aarch64-${fastdebug_infix}b${build_number} + + echo Running jlink ... + ${BUILD_JDK}/bin/jlink \ + --module-path $__modules_path --no-man-pages --compress=2 \ + --add-modules $__modules --output $__root_dir || do_exit $? + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' $__root_dir/release > release + mv release $__root_dir/release + cp $IMAGES_DIR/jdk/lib/src.zip $__root_dir/lib + for dir in $(ls -d $IMAGES_DIR/jdk/*); do + rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir + done + copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods + fi +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +RELEASE_NAME=windows-aarch64-server-release + +case "$bundle_type" in + "jcef") + do_reset_changes=0 + do_maketest=1 + ;; + "nomod" | "") + bundle_type="" + ;; + "fd") + do_reset_changes=0 + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=windows-aarch64-server-fastdebug + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + if [ $do_maketest -eq 1 ]; then + make LOG=info CONF=$RELEASE_NAME clean images test-image jbr-api JBR_API_JBR_VERSION=TEST || do_exit $? + else + make LOG=info CONF=$RELEASE_NAME clean images || do_exit $? + fi +else + if [ $do_maketest -eq 1 ]; then + make LOG=info CONF=$RELEASE_NAME images test-image jbr-api JBR_API_JBR_VERSION=TEST || do_exit $? + else + make LOG=info CONF=$RELEASE_NAME images || do_exit $? + fi +fi + +IMAGES_DIR=build/$RELEASE_NAME/images +JSDK=$IMAGES_DIR/jdk +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +where cygpath +if [ $? -eq 0 ]; then + JCEF_PATH="$(cygpath -w $JCEF_PATH | sed 's/\\/\//g')" +fi + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $? + update_jsdk_mods "$BUILD_JDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $? + cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not unchanged + + jbr_name_postfix="_${bundle_type}" + cat $JCEF_PATH/jcef.version >> $JSDK/release +else + jbr_name_postfix="" +fi + +# create runtime image bundle +modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $? +modules+=",jdk.crypto.mscapi" +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat ${JSDK}/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\r//g | sed s/\\n//g) || do_exit $? +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then + modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods) +fi +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" "$JBRSDK_BUNDLE" "$JSDK_MODS_DIR" "$modules" || do_exit $? + +do_exit 0 diff --git a/jb/project/tools/windows/scripts/mkimages_x64.sh b/jb/project/tools/windows/scripts/mkimages_x64.sh new file mode 100755 index 000000000000..8130086c3516 --- /dev/null +++ b/jb/project/tools/windows/scripts/mkimages_x64.sh @@ -0,0 +1,145 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script makes test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# +# Environment variables: +# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument +# to configure +# By default JDK_BUILD_NUMBER is set zero +# JCEF_PATH - specifies the path to the directory with JCEF binaries. +# By default JCEF binaries should be located in ./jcef_win_x64 + +source jb/project/tools/common/scripts/common.sh + +WORK_DIR=$(pwd) +JCEF_PATH=${JCEF_PATH:=$WORK_DIR/jcef_win_x64} +NVDA_PATH=${NVDA_PATH:=$WORK_DIR/nvda_controllerClient} + +function do_configure { + sh ./configure \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build=$JDK_BUILD_NUMBER \ + --with-version-opt=b${build_number} \ + --with-toolchain-version=$TOOLCHAIN_VERSION \ + --with-boot-jdk=$BOOT_JDK \ + --with-nvdacontrollerclient=$NVDA_PATH \ + --disable-ccache \ + --enable-cds=yes \ + $DISABLE_WARNINGS_AS_ERRORS \ + $STATIC_CONF_ARGS \ + $REPRODUCIBLE_BUILD_OPTS \ + || do_exit $? +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + fastdebug_infix='' + __cds_opt='' + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then __cds_opt="--generate-cds-archive"; fi + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + __root_dir=${__bundle_name}-${JBSDK_VERSION}-windows-x64-${fastdebug_infix}b${build_number} + + echo Running jlink ... + ${JSDK}/bin/jlink \ + --module-path $__modules_path --no-man-pages --compress=2 \ + $__cds_opt --add-modules $__modules --output $__root_dir || do_exit $? + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' $__root_dir/release > release + mv release $__root_dir/release + cp $IMAGES_DIR/jdk/lib/src.zip $__root_dir/lib + for dir in $(ls -d $IMAGES_DIR/jdk/*); do + rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir + done + copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods + fi +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +RELEASE_NAME=windows-x86_64-server-release + +case "$bundle_type" in + "jcef") + do_reset_changes=0 + do_maketest=1 + ;; + "nomod" | "") + bundle_type="" + ;; + "fd") + do_reset_changes=0 + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=windows-x86_64-server-fastdebug + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + if [ $do_maketest -eq 1 ]; then + make LOG=info CONF=$RELEASE_NAME clean images test-image jbr-api JBR_API_JBR_VERSION=TEST || do_exit $? + else + make LOG=info CONF=$RELEASE_NAME clean images || do_exit $? + fi +else + if [ $do_maketest -eq 1 ]; then + make LOG=info CONF=$RELEASE_NAME images test-image jbr-api JBR_API_JBR_VERSION=TEST || do_exit $? + else + make LOG=info CONF=$RELEASE_NAME images || do_exit $? + fi +fi + +IMAGES_DIR=build/$RELEASE_NAME/images +JSDK=$IMAGES_DIR/jdk +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +where cygpath +if [ $? -eq 0 ]; then + JCEF_PATH="$(cygpath -w $JCEF_PATH | sed 's/\\/\//g')" +fi + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $? + update_jsdk_mods "$JSDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $? + cp $JCEF_PATH/jmods/* ${JSDK_MODS_DIR} # $JSDK/jmods is not unchanged + + jbr_name_postfix="_${bundle_type}" + cat $JCEF_PATH/jcef.version >> $JSDK/release +else + jbr_name_postfix="" +fi + +# create runtime image bundle +modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $? +modules+=",jdk.crypto.mscapi" +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat ${JSDK}/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\r//g | sed s/\\n//g) +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then + modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods) +fi +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" "$JBRSDK_BUNDLE" "$JSDK_MODS_DIR" "$modules" || do_exit $? + +do_exit 0 diff --git a/jb/project/tools/windows/scripts/mkimages_x86.sh b/jb/project/tools/windows/scripts/mkimages_x86.sh new file mode 100755 index 000000000000..03a9bc81efdc --- /dev/null +++ b/jb/project/tools/windows/scripts/mkimages_x86.sh @@ -0,0 +1,134 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# $ ./java --version +# openjdk 11.0.6 2020-01-14 +# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}) +# OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode) +# + +source jb/project/tools/common/scripts/common.sh + +WORK_DIR=$(pwd) +NVDA_PATH=${NVDA_PATH:=$WORK_DIR/nvda_controllerClient} + + +function do_configure { + sh ./configure \ + $WITH_DEBUG_LEVEL \ + --with-vendor-name="$VENDOR_NAME" \ + --with-vendor-version-string="$VENDOR_VERSION_STRING" \ + --with-jvm-features=shenandoahgc \ + --with-version-pre= \ + --with-version-build=$JDK_BUILD_NUMBER \ + --with-version-opt=b${build_number} \ + --with-toolchain-version=$TOOLCHAIN_VERSION \ + --with-boot-jdk=$BOOT_JDK \ + --with-nvdacontrollerclient=$NVDA_PATH \ + --disable-ccache \ + --enable-cds=yes \ + $DISABLE_WARNINGS_AS_ERRORS \ + $STATIC_CONF_ARGS \ + $REPRODUCIBLE_BUILD_OPTS \ + || do_exit $? +} + +function create_image_bundle { + __bundle_name=$1 + __arch_name=$2 + __modules_path=$3 + __modules=$4 + + fastdebug_infix='' + __cds_opt='' + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then __cds_opt="--generate-cds-archive"; fi + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + __root_dir=${__bundle_name}-${JBSDK_VERSION}-windows-x86-${fastdebug_infix}b${build_number} + + echo Running jlink ... + ${JSDK}/bin/jlink \ + --module-path $__modules_path --no-man-pages --compress=2 \ + $__cds_opt --add-modules $__modules --output $__root_dir || do_exit $? + + grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release + if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then + sed 's/JBR/JBRSDK/g' $__root_dir/release > release + mv release $__root_dir/release + cp $IMAGES_DIR/jdk/lib/src.zip $__root_dir/lib + for dir in $(ls -d $IMAGES_DIR/jdk/*); do + rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir + done + copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods + fi +} + +WITH_DEBUG_LEVEL="--with-debug-level=release" +RELEASE_NAME=windows-x86_64-server-release + +case "$bundle_type" in + "jcef") + echo "not implemented" && do_exit 1 + ;; + "nomod" | "") + bundle_type="" + ;; + "fd") + do_reset_changes=0 + WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" + RELEASE_NAME=windows-x86_64-server-fastdebug + ;; +esac + +if [ -z "${INC_BUILD:-}" ]; then + do_configure || do_exit $? + if [ $do_maketest -eq 1 ]; then + make LOG=info CONF=$RELEASE_NAME clean images test-image jbr-api JBR_API_JBR_VERSION=TEST || do_exit $? + else + make LOG=info CONF=$RELEASE_NAME clean images || do_exit $? + fi +else + if [ $do_maketest -eq 1 ]; then + make LOG=info CONF=$RELEASE_NAME images test-image jbr-api JBR_API_JBR_VERSION=TEST || do_exit $? + else + make LOG=info CONF=$RELEASE_NAME images || do_exit $? + fi +fi + +IMAGES_DIR=build/$RELEASE_NAME/images +JSDK=$IMAGES_DIR/jdk +JSDK_MODS_DIR=$IMAGES_DIR/jmods +JBRSDK_BUNDLE=jbrsdk + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then + git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $? + update_jsdk_mods "$JSDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $? + cp $JCEF_PATH/jmods/* ${JSDK_MODS_DIR} # $JSDK/jmods is not unchanged + + jbr_name_postfix="_${bundle_type}" +else + jbr_name_postfix="" +fi + +# create runtime image bundle +modules=$(grep -v "jdk.internal.vm" jb/project/tools/common/modules.list | xargs | sed s/" "//g) || do_exit $? +modules+=",jdk.crypto.mscapi" +create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $? + +# create sdk image bundle +modules=$(cat ${JSDK}/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\r//g | sed s/\\n//g) +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then + modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods) +fi +create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" "$JBRSDK_BUNDLE" "$JSDK_MODS_DIR" "$modules" || do_exit $? + +do_exit 0 diff --git a/jb/project/tools/windows/scripts/pack_aarch64.sh b/jb/project/tools/windows/scripts/pack_aarch64.sh new file mode 100644 index 000000000000..4c7d86bf753e --- /dev/null +++ b/jb/project/tools/windows/scripts/pack_aarch64.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script packs test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# + +source jb/project/tools/common/scripts/common.sh + +[ "$bundle_type" == "jcef" ] && do_maketest=1 + +function pack_jbr { + __bundle_name=$1 + __arch_name=$2 + + fastdebug_infix='' + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-windows-aarch64-${fastdebug_infix}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-windows-aarch64-${fastdebug_infix}b${build_number} + + echo Creating $JBR.tar.gz ... + + /usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__root_dir || do_exit $? +} + +[ "$bundle_type" == "nomod" ] && bundle_type="" + +JBRSDK_BUNDLE=jbrsdk +RELEASE_NAME=windows-aarch64-server-release +IMAGES_DIR=build/$RELEASE_NAME/images +BASE_DIR=. + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then + jbr_name_postfix="_${bundle_type}" +else + jbr_name_postfix="" +fi + +pack_jbr jbr${jbr_name_postfix} jbr +pack_jbr jbrsdk${jbr_name_postfix} jbrsdk + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=$JBRSDK_BUNDLE-$JBSDK_VERSION-windows-test-aarch64-b$build_number + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" || do_exit $? + echo Creating $JBRSDK_TEST.tar.gz ... + /usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? +fi \ No newline at end of file diff --git a/jb/project/tools/windows/scripts/pack_x64.sh b/jb/project/tools/windows/scripts/pack_x64.sh new file mode 100755 index 000000000000..1a98a2ead7a8 --- /dev/null +++ b/jb/project/tools/windows/scripts/pack_x64.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# jcef - the release bundles with jcef +# fd - the fastdebug bundles which also include the jcef module +# +# This script packs test-image along with JDK images when bundle_type is set to "jcef". +# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images. +# + +source jb/project/tools/common/scripts/common.sh + +[ "$bundle_type" == "jcef" ] && do_maketest=1 + +function pack_jbr { + __bundle_name=$1 + __arch_name=$2 + + fastdebug_infix='' + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-windows-x64-${fastdebug_infix}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-windows-x64-${fastdebug_infix}b${build_number} + + echo Creating $JBR.tar.gz ... + chmod -R ug+rwx,o+rx ${BASE_DIR}/$__root_dir + /usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__root_dir || do_exit $? +} + +[ "$bundle_type" == "nomod" ] && bundle_type="" + +JBRSDK_BUNDLE=jbrsdk +RELEASE_NAME=windows-x86_64-server-release +IMAGES_DIR=build/$RELEASE_NAME/images +BASE_DIR=. + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then + jbr_name_postfix="_${bundle_type}" +else + jbr_name_postfix="" +fi + +pack_jbr jbr${jbr_name_postfix} jbr +pack_jbr jbrsdk${jbr_name_postfix} jbrsdk + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=$JBRSDK_BUNDLE-$JBSDK_VERSION-windows-test-x64-b$build_number + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" || do_exit $? + echo Creating $JBRSDK_TEST.tar.gz ... + /usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? +fi \ No newline at end of file diff --git a/jb/project/tools/windows/scripts/pack_x86.sh b/jb/project/tools/windows/scripts/pack_x86.sh new file mode 100755 index 000000000000..20db6e2cbebe --- /dev/null +++ b/jb/project/tools/windows/scripts/pack_x86.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +set -euo pipefail +set -x + +# The following parameters must be specified: +# build_number - specifies the number of JetBrainsRuntime build +# bundle_type - specifies bundle to be built;possible values: +# or nomod - the release bundles without any additional modules (jcef) +# fd - the fastdebug bundles which also include the jcef module +# + +source jb/project/tools/common/scripts/common.sh + +[ "$bundle_type" == "jcef" ] && echo "not implemented" && do_exit 1 + +function pack_jbr { + __bundle_name=$1 + __arch_name=$2 + + fastdebug_infix='' + + [ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-" + JBR=${__bundle_name}-${JBSDK_VERSION}-windows-x86-${fastdebug_infix}b${build_number} + __root_dir=${__bundle_name}-${JBSDK_VERSION}-windows-x86-${fastdebug_infix}b${build_number} + + echo Creating $JBR.tar.gz ... + chmod -R ug+rwx,o+rx ${BASE_DIR}/$__root_dir + /usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__root_dir || do_exit $? +} + +[ "$bundle_type" == "nomod" ] && bundle_type="" + +JBRSDK_BUNDLE=jbrsdk +RELEASE_NAME=windows-x86_64-server-release +IMAGES_DIR=build/$RELEASE_NAME/images +BASE_DIR=. + +if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then + jbr_name_postfix="_${bundle_type}" +else + jbr_name_postfix="" +fi + +pack_jbr jbr${jbr_name_postfix} jbr +pack_jbr jbrsdk${jbr_name_postfix} jbrsdk + +if [ $do_maketest -eq 1 ]; then + JBRSDK_TEST=$JBRSDK_BUNDLE-$JBSDK_VERSION-windows-test-x86-b$build_number + cp "build/${RELEASE_NAME}/jbr-api/jbr-api.jar" "${IMAGES_DIR}/test" || do_exit $? + echo Creating $JBRSDK_TEST.tar.gz ... + /usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $BASE_DIR --exclude='test/jdk/demos' test || do_exit $? +fi \ No newline at end of file diff --git a/make/JBRApi.gmk b/make/JBRApi.gmk new file mode 100644 index 000000000000..056b7641b831 --- /dev/null +++ b/make/JBRApi.gmk @@ -0,0 +1,93 @@ +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +JBR_API_ROOT_DIR := $(TOPDIR)/src/jetbrains.api +JBR_API_TOOLS_DIR := $(JBR_API_ROOT_DIR)/tools +JBR_API_SRC_DIR := $(JBR_API_ROOT_DIR)/src +JBR_API_OUTPUT_DIR := $(OUTPUTDIR)/jbr-api +JBR_API_GENSRC_DIR := $(JBR_API_OUTPUT_DIR)/gensrc +JBR_API_BIN_DIR := $(JBR_API_OUTPUT_DIR)/bin +JBR_API_VERSION_PROPERTIES := $(JBR_API_ROOT_DIR)/version.properties +JBR_API_VERSION_GENSRC := $(JBR_API_OUTPUT_DIR)/jbr-api.version +JBR_API_GENSRC_BATCH := $(JBR_API_VERSION_GENSRC) + +JBR_API_SRC_FILES := $(call FindFiles, $(JBR_API_SRC_DIR)) +JBR_API_GENSRC_FILES := $(foreach f, $(call FindFiles, $(JBR_API_SRC_DIR)), \ + $(JBR_API_GENSRC_DIR)/$(call RelativePath, $f, $(JBR_API_SRC_DIR))) + +ifeq ($(JBR_API_JBR_VERSION),) + JBR_API_JBR_VERSION := DEVELOPMENT + JBR_API_FAIL_ON_HASH_MISMATCH := false +else + .PHONY: $(JBR_API_VERSION_PROPERTIES) + JBR_API_FAIL_ON_HASH_MISMATCH := true +endif + +ARCHIVE_BUILD_JBR_API_BIN := $(JBR_API_BIN_DIR) +$(eval $(call SetupJavaCompilation, BUILD_JBR_API, \ + SMALL_JAVA := true, \ + COMPILER := bootjdk, \ + SRC := $(JBR_API_GENSRC_DIR), \ + EXTRA_FILES := $(JBR_API_GENSRC_FILES), \ + BIN := $(JBR_API_BIN_DIR), \ + JAR := $(JBR_API_OUTPUT_DIR)/jbr-api.jar, \ +)) + +$(eval $(call SetupJarArchive, BUILD_JBR_API_SOURCES_JAR, \ + DEPENDENCIES := $(JBR_API_GENSRC_FILES), \ + SRCS := $(JBR_API_GENSRC_DIR), \ + JAR := $(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar, \ + SUFFIXES := .java, \ + BIN := $(JBR_API_BIN_DIR), \ +)) + +# Grouped targets may not be supported, so hack dependencies: sources -> version file -> generated sources +$(JBR_API_VERSION_GENSRC): $(JBR_API_SRC_FILES) $(JBR_API_VERSION_PROPERTIES) $(JBR_API_TOOLS_DIR)/Gensrc.java + $(ECHO) Generating sources for JBR API + $(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_TOOLS_DIR)/Gensrc.java" \ + "$(TOPDIR)/src" "$(JBR_API_OUTPUT_DIR)" "$(JBR_API_JBR_VERSION)" +$(JBR_API_GENSRC_FILES): $(JBR_API_VERSION_GENSRC) + $(TOUCH) $@ + +jbr-api-check-version: $(JBR_API_GENSRC_FILES) $(JBR_API_VERSION_PROPERTIES) + $(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_TOOLS_DIR)/CheckVersion.java" \ + "$(JBR_API_ROOT_DIR)" "$(JBR_API_GENSRC_DIR)" "$(JBR_API_FAIL_ON_HASH_MISMATCH)" + +jbr-api: $(BUILD_JBR_API) $(BUILD_JBR_API_SOURCES_JAR) jbr-api-check-version + +.PHONY: jbr-api jbr-api-check-version + +ifneq ($(JBR_API_CONF_FILE),) + $(JBR_API_CONF_FILE): $(JBR_API_GENSRC_FILES) + $(ECHO) "VERSION=`$(CAT) $(JBR_API_VERSION_GENSRC)`" > $(JBR_API_CONF_FILE) + $(ECHO) "JAR=$(JBR_API_OUTPUT_DIR)/jbr-api.jar" >> $(JBR_API_CONF_FILE) + $(ECHO) "SOURCES_JAR=$(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar" >> $(JBR_API_CONF_FILE) + jbr-api: $(JBR_API_CONF_FILE) + .PHONY: $(JBR_API_CONF_FILE) +endif diff --git a/make/Main.gmk b/make/Main.gmk index ca9e501a2b18..5beb52bc0fa1 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -1453,6 +1453,14 @@ create-main-targets-include: @$(ECHO) ALL_MAIN_TARGETS := $(sort $(ALL_TARGETS)) > \ $(MAKESUPPORT_OUTPUTDIR)/main-targets.gmk +################################################################################ +# JBR API + +$(eval $(call SetupTarget, jbr-api, \ + MAKEFILE := JBRApi, \ + TARGET := jbr-api \ +)) + ################################################################################ # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, Main-post.gmk)) diff --git a/make/autoconf/basic_windows.m4 b/make/autoconf/basic_windows.m4 index fb6fc526bfa2..c7fb88976d60 100644 --- a/make/autoconf/basic_windows.m4 +++ b/make/autoconf/basic_windows.m4 @@ -89,8 +89,8 @@ AC_DEFUN([BASIC_SETUP_PATHS_WINDOWS], WINENV_TEMP_DIR=$($PATHTOOL -u $($CMD /q /c echo %TEMP% 2> /dev/null) | $TR -d '\r\n') AC_MSG_RESULT([$WINENV_TEMP_DIR]) - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then - # Don't trust the current directory for WSL2, but change to an OK temp dir + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl1" || test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then + # Don't trust the current directory for WSL, but change to an OK temp dir cd "$WINENV_TEMP_DIR" # Bring along confdefs.h or autoconf gets all confused cp "$CONFIGURE_START_DIR/confdefs.h" "$WINENV_TEMP_DIR" @@ -228,7 +228,7 @@ AC_DEFUN([BASIC_WINDOWS_FINALIZE_FIXPATH], # Platform-specific finalization AC_DEFUN([BASIC_WINDOWS_FINALIZE], [ - if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl1" || test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then # Change back from temp dir cd $CONFIGURE_START_DIR fi diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4 index 8c91a2ccd33e..87838a22120c 100644 --- a/make/autoconf/jdk-options.m4 +++ b/make/autoconf/jdk-options.m4 @@ -234,6 +234,31 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS], fi AC_SUBST(HOTSPOT_OVERRIDE_LIBPATH) + # Should we build the client for the JAWS screen reader? + if test "x$OPENJDK_TARGET_OS" = xwindows; then + AC_MSG_CHECKING([if JAWS client support is enabled]) + + A11Y_JAWS_ANNOUNCING_ENABLED=true + AC_ARG_ENABLE( + [jaws-client], + [AS_HELP_STRING([--disable-jaws-client], [Set to disable to exclude the client for the JAWS screen reader from the build])], + [ + if test "x$ENABLE_HEADLESS_ONLY" = xtrue; then + AC_MSG_WARN([--[enable|disable]-jaws-client[=*] flags are ignored for headless builds]) + elif test "x$enableval" != xyes; then + A11Y_JAWS_ANNOUNCING_ENABLED=false + fi + ] + ) + if test "x$ENABLE_HEADLESS_ONLY" = xtrue; then + A11Y_JAWS_ANNOUNCING_ENABLED=false + fi + + AC_MSG_RESULT([$A11Y_JAWS_ANNOUNCING_ENABLED]) + else + A11Y_JAWS_ANNOUNCING_ENABLED=false + fi + AC_SUBST(A11Y_JAWS_ANNOUNCING_ENABLED) ]) ############################################################################### diff --git a/make/autoconf/lib-dbus.m4 b/make/autoconf/lib-dbus.m4 new file mode 100644 index 000000000000..be6332da3a00 --- /dev/null +++ b/make/autoconf/lib-dbus.m4 @@ -0,0 +1,55 @@ +# +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2024, JetBrains s.r.o.. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +################################################################################ +# Check if a potential dbus library match is correct and usable +################################################################################ +AC_DEFUN_ONCE([LIB_SETUP_DBUS], +[ + AC_ARG_WITH(dbus-includes, [AS_HELP_STRING([--with-dbus-includes], + [specify include directories for the dbus files as list separated by space])]) + + if test "x$NEEDS_LIB_DBUS" = xfalse; then + DBUS_CFLAGS= + DBUS_FOUND=false + else + if test "x${with_dbus_includes}" != x; then + DBUS_FOUND=true + DBUS_CFLAGS="" + for include in $with_dbus_includes; do + DBUS_CFLAGS="${DBUS_CFLAGS}-I${include} " + done + else + PKG_CHECK_MODULES(DBUS, dbus-1, [DBUS_FOUND=true], [ + DBUS_FOUND=false + AC_MSG_NOTICE([Can't find dbus-1 library. This library is needed to use some features. You can install dbus-1 library or specify include directories manually by giving --with-dbus-includes option.]) + ]) + fi + fi + + AC_SUBST(DBUS_CFLAGS) + AC_SUBST(DBUS_FOUND) +]) \ No newline at end of file diff --git a/make/autoconf/lib-nvdacontrollerclient.m4 b/make/autoconf/lib-nvdacontrollerclient.m4 new file mode 100644 index 000000000000..08bf245596ac --- /dev/null +++ b/make/autoconf/lib-nvdacontrollerclient.m4 @@ -0,0 +1,121 @@ +# +# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +################################################################################ +# Setup nvdacontrollerclient (The library for communication with +# NVDA - a screen reader for Microsoft Windows) +################################################################################ +AC_DEFUN_ONCE([LIB_SETUP_NVDACONTROLLERCLIENT], [ + # To enable NVDA, user specifies neither --with-nvdacontrollerclient or + # a pair (--with-nvdacontrollerclient-include, --with-nvdacontrollerclient-lib) + AC_ARG_WITH(nvdacontrollerclient, [AS_HELP_STRING([--with-nvdacontrollerclient], + [specify prefix directory for the NVDA Controller Client library package + (expecting headers and libs under PATH//)])]) + AC_ARG_WITH(nvdacontrollerclient-include, [AS_HELP_STRING([--with-nvdacontrollerclient-include], + [specify directory for the NVDA Controller Client include files])]) + AC_ARG_WITH(nvdacontrollerclient-lib, [AS_HELP_STRING([--with-nvdacontrollerclient-lib], + [specify directory for the NVDA Controller Client library])]) + + NVDACONTROLLERCLIENT_FOUND=no + NVDACONTROLLERCLIENT_LIB= + NVDACONTROLLERCLIENT_DLL= + NVDACONTROLLERCLIENT_CFLAGS= + + if test "x${NEEDS_LIB_NVDACONTROLLERCLIENT}" = "xtrue" ; then + if (test "x${with_nvdacontrollerclient_include}" = "x" && test "x${with_nvdacontrollerclient_lib}" != "x") || \ + (test "x${with_nvdacontrollerclient_include}" != "x" && test "x${with_nvdacontrollerclient_lib}" = "x") ; then + AC_MSG_ERROR([Must specify both or neither of --with-nvdacontrollerclient-include and --with-nvdacontrollerclient-lib]) + elif (test "x${with_nvdacontrollerclient}" != "x" && test "x${with_nvdacontrollerclient_include}" != "x") ; then + AC_MSG_ERROR([Must specify either --with-nvdacontrollerclient or a pair (--with-nvdacontrollerclient-include, --with-nvdacontrollerclient-lib)]) + fi + + if (test "x${with_nvdacontrollerclient}" != "x") || \ + (test "x${with_nvdacontrollerclient_include}" != "x" && test "x${with_nvdacontrollerclient_lib}" != "x") ; then + + AC_MSG_CHECKING([for nvdacontrollerclient]) + + if test "x${OPENJDK_TARGET_OS}" != "xwindows" ; then + AC_MSG_ERROR([--with-nvdacontrollerclient[-*] flags are applicable only to Windows builds]) + fi + + if test "x${OPENJDK_TARGET_CPU_ARCH}" = "xaarch64" ; then + NVDACONTROLLERCLIENT_BIN_BASENAME="nvdaControllerClient32" + NVDACONTROLLERCLIENT_ARCHDIR="arm64" + elif test "x${OPENJDK_TARGET_CPU_ARCH}" = "xx86" && test "x${OPENJDK_TARGET_CPU_BITS}" = "x64" ; then + NVDACONTROLLERCLIENT_BIN_BASENAME="nvdaControllerClient64" + NVDACONTROLLERCLIENT_ARCHDIR="x64" + elif test "x${OPENJDK_TARGET_CPU_ARCH}" = "xx86" && test "x${OPENJDK_TARGET_CPU_BITS}" = "x32" ; then + NVDACONTROLLERCLIENT_BIN_BASENAME="nvdaControllerClient32" + NVDACONTROLLERCLIENT_ARCHDIR="x86" + else + AC_MSG_ERROR([The nvdacontrollerclient library exists only for x86_32, x86_64, AArch64 architectures]) + fi + + if test "x${with_nvdacontrollerclient}" != "x" ; then + # NVDACONTROLLERCLIENT_ARCHDIR is used only here + NVDACONTROLLERCLIENT_INC_PATH="${with_nvdacontrollerclient}/${NVDACONTROLLERCLIENT_ARCHDIR}" + NVDACONTROLLERCLIENT_BIN_PATH="${with_nvdacontrollerclient}/${NVDACONTROLLERCLIENT_ARCHDIR}" + else + NVDACONTROLLERCLIENT_INC_PATH="${with_nvdacontrollerclient_include}" + NVDACONTROLLERCLIENT_BIN_PATH="${with_nvdacontrollerclient_lib}" + fi + + POTENTIAL_NVDACONTROLLERCLIENT_DLL="${NVDACONTROLLERCLIENT_BIN_PATH}/${NVDACONTROLLERCLIENT_BIN_BASENAME}.dll" + POTENTIAL_NVDACONTROLLERCLIENT_LIB="${NVDACONTROLLERCLIENT_BIN_PATH}/${NVDACONTROLLERCLIENT_BIN_BASENAME}.lib" + POTENTIAL_NVDACONTROLLERCLIENT_EXP="${NVDACONTROLLERCLIENT_BIN_PATH}/${NVDACONTROLLERCLIENT_BIN_BASENAME}.exp" + + if ! test -s "${POTENTIAL_NVDACONTROLLERCLIENT_DLL}" || \ + ! test -s "${POTENTIAL_NVDACONTROLLERCLIENT_LIB}" || \ + ! test -s "${POTENTIAL_NVDACONTROLLERCLIENT_EXP}" ; then + AC_MSG_ERROR([Could not find ${NVDACONTROLLERCLIENT_BIN_BASENAME}.dll and/or ${NVDACONTROLLERCLIENT_BIN_BASENAME}.lib and/or ${NVDACONTROLLERCLIENT_BIN_BASENAME}.exp inside ${NVDACONTROLLERCLIENT_BIN_PATH}]) + fi + if ! test -s "${NVDACONTROLLERCLIENT_INC_PATH}/nvdaController.h" ; then + AC_MSG_ERROR([Could not find the header file nvdaController.h inside ${NVDACONTROLLERCLIENT_INC_PATH}]) + fi + + NVDACONTROLLERCLIENT_CFLAGS="-I${NVDACONTROLLERCLIENT_INC_PATH}" + NVDACONTROLLERCLIENT_DLL="${POTENTIAL_NVDACONTROLLERCLIENT_DLL}" + NVDACONTROLLERCLIENT_LIB="${POTENTIAL_NVDACONTROLLERCLIENT_LIB}" + NVDACONTROLLERCLIENT_FOUND=yes + + AC_MSG_RESULT([includes at ${NVDACONTROLLERCLIENT_INC_PATH} ; binaries at ${NVDACONTROLLERCLIENT_BIN_PATH}]) + fi + elif test "x${with_nvdacontrollerclient}" != "x" || \ + test "x${with_nvdacontrollerclient_include}" != "x" || test "x${with_nvdacontrollerclient_lib}" != "x" ; then + AC_MSG_WARN([[nvdacontrollerclient is not used, so --with-nvdacontrollerclient[-*] is ignored]]) + fi + + if test "x${NVDACONTROLLERCLIENT_FOUND}" = "xyes" ; then + A11Y_NVDA_ANNOUNCING_ENABLED=true + else + A11Y_NVDA_ANNOUNCING_ENABLED=false + fi + + AC_SUBST(A11Y_NVDA_ANNOUNCING_ENABLED) + AC_SUBST(NVDACONTROLLERCLIENT_CFLAGS) + AC_SUBST(NVDACONTROLLERCLIENT_DLL) + AC_SUBST(NVDACONTROLLERCLIENT_LIB) +]) \ No newline at end of file diff --git a/make/autoconf/lib-speechd.m4 b/make/autoconf/lib-speechd.m4 new file mode 100644 index 000000000000..0be30dc7db6d --- /dev/null +++ b/make/autoconf/lib-speechd.m4 @@ -0,0 +1,92 @@ +# +# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +################################################################################ +# Setup speechd +################################################################################ +AC_DEFUN_ONCE([LIB_SETUP_SPEECHD], +[ + AC_ARG_WITH(speechd, [AS_HELP_STRING([--with-speechd], + [specify prefix directory for the libspeechd package + (expecting the headers under PATH/include); required for AccessibleAnnouncer to work])]) + AC_ARG_WITH(speechd-include, [AS_HELP_STRING([--with-speechd-include], + [specify directory for the speechd include files])]) + + if test "x$NEEDS_LIB_SPEECHD" = xfalse || test "x${with_speechd}" = xno || \ + test "x${with_speechd_include}" = xno; then + if (test "x${with_speechd}" != x && test "x${with_speechd}" != xno) || \ + (test "x${with_speechd_include}" != x && test "x${with_speechd_include}" != xno); then + AC_MSG_WARN([[speechd not used, so --with-speechd[-*] is ignored]]) + fi + A11Y_SPEECHD_ANNOUNCING_ENABLED=false + SPEECHD_CFLAGS= + SPEECHD_LIBS= + else + SPEECHD_FOUND=no + + if test "x${with_speechd}" != x && test "x${with_speechd}" != xyes; then + AC_MSG_CHECKING([for speechd header and library]) + if test -s "${with_speechd}/include/libspeechd.h"; then + SPEECHD_CFLAGS="-I${with_speechd}/include" + SPEECHD_LIBS="-L${with_speechd}/lib -lspeechd" + SPEECHD_FOUND=yes + AC_MSG_RESULT([$SPEECHD_FOUND]) + else + AC_MSG_ERROR([Can't find 'include/libspeechd.h' under ${with_speechd} given with the --with-speechd option.]) + fi + fi + if test "x${with_speechd_include}" != x; then + AC_MSG_CHECKING([for speechd headers]) + if test -s "${with_speechd_include}/libspeechd.h"; then + SPEECHD_CFLAGS="-I${with_speechd_include}" + SPEECHD_FOUND=yes + AC_MSG_RESULT([$SPEECHD_FOUND]) + else + AC_MSG_ERROR([Can't find 'include/libspeechd.h' under ${with_speechd} given with the --with-speechd-include option.]) + fi + fi + if test "x$SPEECHD_FOUND" = xno; then + # Are the libspeechd headers installed in the default /usr/include location? + AC_CHECK_HEADERS([libspeechd.h], + [ SPEECHD_FOUND=yes ], + [ SPEECHD_FOUND=no; break ] + ) + if test "x$SPEECHD_FOUND" = xyes; then + SPEECHD_CFLAGS= + SPEECHD_LIBS="-lspeechd" + fi + fi + if test "x$SPEECHD_FOUND" = xno; then + A11Y_SPEECHD_ANNOUNCING_ENABLED=false + else + A11Y_SPEECHD_ANNOUNCING_ENABLED=true + fi + fi + + AC_SUBST(A11Y_SPEECHD_ANNOUNCING_ENABLED) + AC_SUBST(SPEECHD_CFLAGS) + AC_SUBST(SPEECHD_LIBS) +]) diff --git a/make/autoconf/libraries.m4 b/make/autoconf/libraries.m4 index e29ef2221a62..5e12f0c6de64 100644 --- a/make/autoconf/libraries.m4 +++ b/make/autoconf/libraries.m4 @@ -33,7 +33,10 @@ m4_include([lib-freetype.m4]) m4_include([lib-hsdis.m4]) m4_include([lib-std.m4]) m4_include([lib-x11.m4]) - +m4_include([lib-fontconfig.m4]) +m4_include([lib-speechd.m4]) +m4_include([lib-nvdacontrollerclient.m4]) +m4_include([lib-dbus.m4]) m4_include([lib-tests.m4]) ################################################################################ @@ -45,10 +48,16 @@ AC_DEFUN_ONCE([LIB_DETERMINE_DEPENDENCIES], if test "x$OPENJDK_TARGET_OS" = xwindows || test "x$OPENJDK_TARGET_OS" = xmacosx; then # No X11 support on windows or macosx NEEDS_LIB_X11=false + NEEDS_LIB_SPEECHD=false + elif test "x$ENABLE_HEADLESS_ONLY" = xtrue; then + # No X11 support needed when building headless only + NEEDS_LIB_X11=false + NEEDS_LIB_SPEECHD=false else # All other instances need X11, even if building headless only, libawt still # needs X11 headers. NEEDS_LIB_X11=true + NEEDS_LIB_SPEECHD=true fi # Check if fontconfig is needed @@ -74,11 +83,13 @@ AC_DEFUN_ONCE([LIB_DETERMINE_DEPENDENCIES], NEEDS_LIB_FREETYPE=true fi - # Check if alsa is needed + # Check if alsa and dbus is needed if test "x$OPENJDK_TARGET_OS" = xlinux; then NEEDS_LIB_ALSA=true + NEEDS_LIB_DBUS=true else NEEDS_LIB_ALSA=false + NEEDS_LIB_DBUS=false fi # Check if ffi is needed @@ -87,6 +98,13 @@ AC_DEFUN_ONCE([LIB_DETERMINE_DEPENDENCIES], else NEEDS_LIB_FFI=false fi + + # Check if nvdacontrollerclient is needed + if test "x$OPENJDK_TARGET_OS" = xwindows && test "x$ENABLE_HEADLESS_ONLY" != xtrue; then + NEEDS_LIB_NVDACONTROLLERCLIENT=true + else + NEEDS_LIB_NVDACONTROLLERCLIENT=false + fi ]) ################################################################################ @@ -126,7 +144,9 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES], LIB_SETUP_LIBFFI LIB_SETUP_MISC_LIBS LIB_SETUP_X11 - + LIB_SETUP_SPEECHD + LIB_SETUP_NVDACONTROLLERCLIENT + LIB_SETUP_DBUS LIB_TESTS_SETUP_GTEST # Math library diff --git a/make/autoconf/spec.gmk.template b/make/autoconf/spec.gmk.template index 616999f27368..3fc6d221f177 100644 --- a/make/autoconf/spec.gmk.template +++ b/make/autoconf/spec.gmk.template @@ -468,6 +468,24 @@ UBSAN_LDFLAGS := @UBSAN_LDFLAGS@ X_CFLAGS := @X_CFLAGS@ X_LIBS := @X_LIBS@ +# Necessary additional compiler flags to compile dbus +DBUS_CFLAGS := @DBUS_CFLAGS@ +DBUS_FOUND := @DBUS_FOUND@ + +# Linux speechd a11y announcer +A11Y_SPEECHD_ANNOUNCING_ENABLED:=@A11Y_SPEECHD_ANNOUNCING_ENABLED@ +SPEECHD_CFLAGS:=@SPEECHD_CFLAGS@ +SPEECHD_LIBS:=@SPEECHD_LIBS@ + +# Windows NVDA a11y announcer +A11Y_NVDA_ANNOUNCING_ENABLED:=@A11Y_NVDA_ANNOUNCING_ENABLED@ +NVDACONTROLLERCLIENT_CFLAGS:=@NVDACONTROLLERCLIENT_CFLAGS@ +NVDACONTROLLERCLIENT_DLL:=@NVDACONTROLLERCLIENT_DLL@ +NVDACONTROLLERCLIENT_LIB:=@NVDACONTROLLERCLIENT_LIB@ + +# Windows the client for the JAWS screen reader +A11Y_JAWS_ANNOUNCING_ENABLED:=@A11Y_JAWS_ANNOUNCING_ENABLED@ + # The lowest required version of macosx MACOSX_VERSION_MIN := @MACOSX_VERSION_MIN@ # The highest allowed version of macosx diff --git a/make/ide/idea/jdk/build.xml b/make/ide/idea/jdk/build.xml deleted file mode 100644 index 0292f0f5d359..000000000000 --- a/make/ide/idea/jdk/build.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/make/ide/idea/jdk/idea.gmk b/make/ide/idea/jdk/idea.gmk index 310b582591c9..f231da5291fa 100644 --- a/make/ide/idea/jdk/idea.gmk +++ b/make/ide/idea/jdk/idea.gmk @@ -46,13 +46,18 @@ else #with SPEC endif idea: - $(ECHO) "SUPPORT=$(SUPPORT_OUTPUTDIR)" >> $(OUT) - $(ECHO) "MODULE_ROOTS=\"$(foreach mod, $(SEL_MODULES), $(call FindModuleSrcDirs,$(mod)))\"" >> $(OUT) + $(ECHO) "MODULES=\"$(foreach mod, $(SEL_MODULES), \ + module='$(mod)' \ + moduleSrcDirs='$(foreach m,$(call FindModuleSrcDirs,$(mod)),$(call RelativePath,$m,$(topdir)))' \ + moduleDependencies='$(call FindTransitiveDepsForModule,$(mod))' \ + #)\"" > $(OUT) $(ECHO) "MODULE_NAMES=\"$(strip $(foreach mod, $(SEL_MODULES), $(mod)))\"" >> $(OUT) - $(ECHO) "SEL_MODULES=\"$(SEL_MODULES)\"" >> $(OUT) - $(ECHO) "BOOT_JDK=\"$(BOOT_JDK)\"" >> $(OUT) - $(ECHO) "CYGPATH=\"$(PATHTOOL)\"" >> $(OUT) - $(ECHO) "SPEC=\"$(SPEC)\"" >> $(OUT) + $(ECHO) "RELATIVE_TOPLEVEL_PROJECT_DIR=\"$(call RelativePath,$(TOPLEVEL_DIR),$(IDEA_OUTPUT_PARENT))\"" >> $(OUT) + $(ECHO) "RELATIVE_PROJECT_DIR=\"$(call RelativePath,$(topdir),$(IDEA_OUTPUT_PARENT))\"" >> $(OUT) + $(ECHO) "RELATIVE_BUILD_DIR=\"$(call RelativePath,$(OUTPUTDIR),$(IDEA_OUTPUT_PARENT))\"" >> $(OUT) + $(ECHO) "CLION_RELATIVE_PROJECT_DIR=\"$(call RelativePath,$(topdir),$(IDEA_OUTPUT_PARENT)/.idea/jdk-clion)\"" >> $(OUT) + $(ECHO) "PATHTOOL=\"$(PATHTOOL)\"" >> $(OUT) $(ECHO) "JT_HOME=\"$(JT_HOME)\"" >> $(OUT) + $(ECHO) "WINENV_ROOT=\"$(WINENV_ROOT)\"" >> $(OUT) endif diff --git a/make/ide/idea/jdk/template/ant.xml b/make/ide/idea/jdk/template/ant.xml deleted file mode 100644 index 9cb90246ea04..000000000000 --- a/make/ide/idea/jdk/template/ant.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/make/ide/idea/jdk/template/compiler.xml b/make/ide/idea/jdk/template/compiler.xml index eef129e7b871..9281fa10db72 100644 --- a/make/ide/idea/jdk/template/compiler.xml +++ b/make/ide/idea/jdk/template/compiler.xml @@ -3,10 +3,10 @@ \ No newline at end of file diff --git a/make/ide/idea/jdk/template/.name b/make/ide/idea/jdk/template/jdk-clion/.idea/.name similarity index 100% rename from make/ide/idea/jdk/template/.name rename to make/ide/idea/jdk/template/jdk-clion/.idea/.name diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/JetBrains.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/JetBrains.xml new file mode 100644 index 000000000000..d4b6973ca964 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/JetBrains.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/JetBrainsCE.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/JetBrainsCE.xml new file mode 100644 index 000000000000..abd9a37522ac --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/JetBrainsCE.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/profiles_settings.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000000..641bfc1076d2 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/copyright/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/misc.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/misc.xml new file mode 100644 index 000000000000..787e31971f49 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/misc.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/scopes/TestFiles.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/scopes/TestFiles.xml new file mode 100644 index 000000000000..6b6961cf7074 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/scopes/TestFiles.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/scopes/scope_settings.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000000..db1b8ba4462a --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/vcs.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/vcs.xml new file mode 100644 index 000000000000..726bb30b95c9 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/vcs.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/workspace.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/workspace.xml new file mode 100644 index 000000000000..221cc601bdf0 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/.idea/workspace.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/jdk-clion/update-project.sh b/make/ide/idea/jdk/template/jdk-clion/update-project.sh new file mode 100644 index 000000000000..571145aabdf9 --- /dev/null +++ b/make/ide/idea/jdk/template/jdk-clion/update-project.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +TOPDIR="###CLION_SCRIPT_TOPDIR###" +BUILD_DIR="###RELATIVE_BUILD_DIR###" +PATHTOOL="###PATHTOOL###" + + + +cd "`dirname $0`" +SCRIPT_DIR="`pwd`" +cd "$TOPDIR" + +echo "Updating Clion project files in \"$SCRIPT_DIR\" for project \"`pwd`\"" + +set -o pipefail +make compile-commands SPEC="$BUILD_DIR/spec.gmk" | sed 's/^/ /' || exit 1 + +if [ "x$PATHTOOL" != "x" ]; then + CLION_PROJECT_DIR="`$PATHTOOL -am $SCRIPT_DIR`" + sed "s/\\\\\\\\\\\\\\\\/\\\\\\\\/g" "$BUILD_DIR/compile_commands.json" > "$SCRIPT_DIR/compile_commands.json" +else + CLION_PROJECT_DIR="$SCRIPT_DIR" + cp "$BUILD_DIR/compile_commands.json" "$SCRIPT_DIR" +fi + +echo " +Now you can open \"$CLION_PROJECT_DIR\" as Clion project +If Clion complains about missing files when loading a project, building it may help: + cd \"`pwd`\" && make SPEC=\"$BUILD_DIR/spec.gmk\"" diff --git a/make/ide/idea/jdk/template/jdk.iml b/make/ide/idea/jdk/template/jdk.iml index c7482e6212e0..3586d58c0aaa 100644 --- a/make/ide/idea/jdk/template/jdk.iml +++ b/make/ide/idea/jdk/template/jdk.iml @@ -2,10 +2,9 @@ - - ###SOURCE_ROOTS### - - + + + diff --git a/make/ide/idea/jdk/template/misc.xml b/make/ide/idea/jdk/template/misc.xml index 486001253483..acf28bc820e7 100644 --- a/make/ide/idea/jdk/template/misc.xml +++ b/make/ide/idea/jdk/template/misc.xml @@ -6,11 +6,8 @@ ###JTREG_HOME### ###BUILD_DIR### - + - - - diff --git a/make/ide/idea/jdk/template/module.iml b/make/ide/idea/jdk/template/module.iml new file mode 100644 index 000000000000..bd0e65301c72 --- /dev/null +++ b/make/ide/idea/jdk/template/module.iml @@ -0,0 +1,11 @@ + + + + + ###MODULE_CONTENT_ROOTS### + + ###DEPENDENCIES### + + + + diff --git a/make/ide/idea/jdk/template/modules.xml b/make/ide/idea/jdk/template/modules.xml index 2d8401d0398a..a87145139038 100644 --- a/make/ide/idea/jdk/template/modules.xml +++ b/make/ide/idea/jdk/template/modules.xml @@ -3,6 +3,8 @@ + ###MODULE_IMLS### + diff --git a/make/ide/idea/jdk/template/scopes/TestFiles.xml b/make/ide/idea/jdk/template/scopes/TestFiles.xml new file mode 100644 index 000000000000..6b6961cf7074 --- /dev/null +++ b/make/ide/idea/jdk/template/scopes/TestFiles.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/make/ide/idea/jdk/template/src/idea/IdeaLoggerWrapper.java b/make/ide/idea/jdk/template/src/idea/IdeaLoggerWrapper.java deleted file mode 100644 index 0071669815a5..000000000000 --- a/make/ide/idea/jdk/template/src/idea/IdeaLoggerWrapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package idea; - -import org.apache.tools.ant.Task; - -/** - * This class implements a custom Ant task which replaces the standard Intellij IDEA Ant logger - * with a custom one which generates tighter output. - */ -public class IdeaLoggerWrapper extends Task { - public void execute() { - new JdkIdeaAntLogger(getProject()); - } -} diff --git a/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java b/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java deleted file mode 100644 index dd640bd95a09..000000000000 --- a/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package idea; - -import org.apache.tools.ant.BuildEvent; -import org.apache.tools.ant.BuildListener; -import org.apache.tools.ant.DefaultLogger; -import org.apache.tools.ant.Project; - -import java.util.EnumSet; -import java.util.Stack; - -import static org.apache.tools.ant.Project.*; - -/** - * This class is used to wrap the IntelliJ ant logger in order to provide more meaningful - * output when building langtools. The basic ant output in IntelliJ can be quite cumbersome to - * work with, as it provides two separate views: (i) a tree view, which is good to display build task - * in a hierarchical fashion as they are processed; and a (ii) plain text view, which gives you - * the full ant output. The main problem is that javac-related messages are buried into the - * ant output (which is made very verbose by IntelliJ in order to support the tree view). It is - * not easy to figure out which node to expand in order to see the error message; switching - * to plain text doesn't help either, as now the output is totally flat. - * - * This logger class removes a lot of verbosity from the IntelliJ ant logger by not propagating - * all the events to the IntelliJ's logger. In addition, certain events are handled in a custom - * fashion, to generate better output during the build. - */ -public final class JdkIdeaAntLogger extends DefaultLogger { - - /** - * This is just a way to pass in customized binary string predicates; - * - * TODO: replace with {@code BiPredicate} and method reference when moving to 8 - */ - enum StringBinaryPredicate { - CONTAINS() { - @Override - boolean apply(String s1, String s2) { - return s1.contains(s2); - } - }, - STARTS_WITH { - @Override - boolean apply(String s1, String s2) { - return s1.startsWith(s2); - } - }, - MATCHES { - @Override - boolean apply(String s1, String s2) { - return s1.matches(s2); - } - }; - - abstract boolean apply(String s1, String s2); - } - - /** - * Various kinds of ant messages that we shall intercept - */ - enum MessageKind { - - /** a make error */ - MAKE_ERROR(StringBinaryPredicate.CONTAINS, MSG_ERR, "error:", "compiler.err"), - /** a make warning */ - MAKE_WARNING(StringBinaryPredicate.CONTAINS, MSG_WARN, "warning:", "compiler.warn"), - /** a make note */ - MAKE_NOTE(StringBinaryPredicate.CONTAINS, MSG_INFO, "note:", "compiler.note"), - /** std make output */ - MAKE_OTHER(StringBinaryPredicate.MATCHES, MSG_INFO, ".*"), - /** a javac crash */ - JAVAC_CRASH(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "An exception has occurred in the compiler"), - /** jtreg test success */ - JTREG_TEST_PASSED(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Passed: "), - /** jtreg test failure */ - JTREG_TEST_FAILED(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "FAILED: "), - /** jtreg test error */ - JTREG_TEST_ERROR(StringBinaryPredicate.STARTS_WITH, MSG_ERR, "Error: "), - /** jtreg report */ - JTREG_TEST_REPORT(StringBinaryPredicate.STARTS_WITH, MSG_INFO, "Report written"); - - StringBinaryPredicate sbp; - int priority; - String[] keys; - - MessageKind(StringBinaryPredicate sbp, int priority, String... keys) { - this.sbp = sbp; - this.priority = priority; - this.keys = keys; - } - - /** - * Does a given message string matches this kind? - */ - boolean matches(String s) { - for (String key : keys) { - if (sbp.apply(s, key)) { - return true; - } - } - return false; - } - } - - /** - * This enum is used to represent the list of tasks we need to keep track of during logging. - */ - enum Task { - /** javac task - invoked during compilation */ - MAKE("exec", MessageKind.MAKE_ERROR, MessageKind.MAKE_WARNING, MessageKind.MAKE_NOTE, - MessageKind.MAKE_OTHER, MessageKind.JAVAC_CRASH), - /** jtreg task - invoked during test execution */ - JTREG("jtreg", MessageKind.JTREG_TEST_PASSED, MessageKind.JTREG_TEST_FAILED, MessageKind.JTREG_TEST_ERROR, MessageKind.JTREG_TEST_REPORT), - /** initial synthetic task when the logger is created */ - ROOT("") { - @Override - boolean matches(String s) { - return false; - } - }, - /** synthetic task catching any other tasks not in this list */ - ANY("") { - @Override - boolean matches(String s) { - return true; - } - }; - - String taskName; - MessageKind[] msgs; - - Task(String taskName, MessageKind... msgs) { - this.taskName = taskName; - this.msgs = msgs; - } - - boolean matches(String s) { - return s.equals(taskName); - } - } - - /** - * This enum is used to represent the list of targets we need to keep track of during logging. - * A regular expression is used to match a given target name. - */ - enum Target { - /** jtreg target - executed when launching tests */ - JTREG("jtreg") { - @Override - String getDisplayMessage(BuildEvent e) { - return "Running jtreg tests: " + e.getProject().getProperty("jtreg.tests"); - } - }, - /** build selected modules */ - BUILD_MODULE("build-module") { - @Override - String getDisplayMessage(BuildEvent e) { - return "Building modules: " + e.getProject().getProperty("module.name") + "..."; - } - }, - /** build images */ - BUILD_IMAGES("images") { - @Override - String getDisplayMessage(BuildEvent e) { - return "Building images..."; - } - }, - /** build images */ - CONFIGURE("-do-configure") { - @Override - String getDisplayMessage(BuildEvent e) { - return "Configuring build..."; - } - }, - /** synthetic target catching any other target not in this list */ - ANY("") { - @Override - String getDisplayMessage(BuildEvent e) { - return "Executing Ant target(s): " + e.getProject().getProperty("ant.project.invoked-targets"); - } - @Override - boolean matches(String msg) { - return true; - } - }; - - String targetRegex; - - Target(String targetRegex) { - this.targetRegex = targetRegex; - } - - boolean matches(String msg) { - return msg.matches(targetRegex); - } - - abstract String getDisplayMessage(BuildEvent e); - } - - /** - * A custom build event used to represent status changes which should be notified inside - * Intellij - */ - static class StatusEvent extends BuildEvent { - - /** the target to which the status update refers */ - Target target; - - StatusEvent(BuildEvent e, Target target) { - super(new StatusTask(e, target.getDisplayMessage(e))); - this.target = target; - setMessage(getTask().getTaskName(), 2); - } - - /** - * A custom task used to channel info regarding a status change - */ - static class StatusTask extends org.apache.tools.ant.Task { - StatusTask(BuildEvent event, String msg) { - setProject(event.getProject()); - setOwningTarget(event.getTarget()); - setTaskName(msg); - } - } - } - - /** wrapped ant logger (IntelliJ's own logger) */ - DefaultLogger logger; - - /** flag - is this the first target we encounter? */ - boolean firstTarget = true; - - /** flag - should subsequent failures be suppressed ? */ - boolean suppressTaskFailures = false; - - /** flag - have we ran into a javac crash ? */ - boolean crashFound = false; - - /** stack of status changes associated with pending targets */ - Stack statusEvents = new Stack<>(); - - /** stack of pending tasks */ - Stack tasks = new Stack<>(); - - public JdkIdeaAntLogger(Project project) { - for (Object o : project.getBuildListeners()) { - if (o instanceof DefaultLogger) { - this.logger = (DefaultLogger)o; - project.removeBuildListener((BuildListener)o); - project.addBuildListener(this); - } - } - tasks.push(Task.ROOT); - } - - @Override - public void buildStarted(BuildEvent event) { - //do nothing - } - - @Override - public void buildFinished(BuildEvent event) { - //do nothing - } - - @Override - public void targetStarted(BuildEvent event) { - EnumSet statusKinds = firstTarget ? - EnumSet.allOf(Target.class) : - EnumSet.complementOf(EnumSet.of(Target.ANY)); - - String targetName = event.getTarget().getName(); - - for (Target statusKind : statusKinds) { - if (statusKind.matches(targetName)) { - StatusEvent statusEvent = new StatusEvent(event, statusKind); - statusEvents.push(statusEvent); - logger.taskStarted(statusEvent); - firstTarget = false; - return; - } - } - } - - @Override - public void targetFinished(BuildEvent event) { - if (!statusEvents.isEmpty()) { - StatusEvent lastEvent = statusEvents.pop(); - if (lastEvent.target.matches(event.getTarget().getName())) { - logger.taskFinished(lastEvent); - } - } - } - - @Override - public void taskStarted(BuildEvent event) { - String taskName = event.getTask().getTaskName(); - System.err.println("task started " + taskName); - for (Task task : Task.values()) { - if (task.matches(taskName)) { - tasks.push(task); - return; - } - } - } - - @Override - public void taskFinished(BuildEvent event) { - if (tasks.peek() == Task.ROOT) { - //we need to 'close' the root task to get nicer output - logger.taskFinished(event); - } else if (!suppressTaskFailures && event.getException() != null) { - //the first (innermost) task failure should always be logged - event.setMessage(event.getException().toString(), 0); - event.setException(null); - //note: we turn this into a plain message to avoid stack trace being logged by Idea - logger.messageLogged(event); - suppressTaskFailures = true; - } - tasks.pop(); - } - - @Override - public void messageLogged(BuildEvent event) { - String msg = event.getMessage(); - - boolean processed = false; - - if (!tasks.isEmpty()) { - Task task = tasks.peek(); - for (MessageKind messageKind : task.msgs) { - if (messageKind.matches(msg)) { - event.setMessage(msg, messageKind.priority); - processed = true; - if (messageKind == MessageKind.JAVAC_CRASH) { - crashFound = true; - } - break; - } - } - } - - if (event.getPriority() == MSG_ERR || crashFound) { - //we log errors regardless of owning task - logger.messageLogged(event); - suppressTaskFailures = true; - } else if (processed) { - logger.messageLogged(event); - } - } -} diff --git a/make/ide/idea/jdk/template/test.iml b/make/ide/idea/jdk/template/test.iml new file mode 100644 index 000000000000..a72758f3edca --- /dev/null +++ b/make/ide/idea/jdk/template/test.iml @@ -0,0 +1,10 @@ + + + + + + + ###TEST_MODULE_DEPENDENCIES### + + + diff --git a/make/ide/idea/jdk/template/vcs.xml b/make/ide/idea/jdk/template/vcs.xml index 3fddb2616b9b..31bda57fe54a 100644 --- a/make/ide/idea/jdk/template/vcs.xml +++ b/make/ide/idea/jdk/template/vcs.xml @@ -4,13 +4,13 @@ - + diff --git a/make/ide/idea/jdk/template/workspace.xml b/make/ide/idea/jdk/template/workspace.xml index f1270d4fb5d2..54f29e47608f 100644 --- a/make/ide/idea/jdk/template/workspace.xml +++ b/make/ide/idea/jdk/template/workspace.xml @@ -2,63 +2,62 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/make/jdk/src/classes/build/tools/x11wrappergen/WrapperGenerator.java b/make/jdk/src/classes/build/tools/x11wrappergen/WrapperGenerator.java index 6e39adc0fb3c..0191cf1e7856 100644 --- a/make/jdk/src/classes/build/tools/x11wrappergen/WrapperGenerator.java +++ b/make/jdk/src/classes/build/tools/x11wrappergen/WrapperGenerator.java @@ -1142,6 +1142,8 @@ public void writeNativeSizer(String file) pw.println("/* This file is an automatically generated file, please do not edit this file, modify the XlibParser.java file instead !*/\n" ); pw.println("#include \n#include \n#include \n#include \n#include \n"); pw.println("#include "); + pw.println("#include "); + pw.println("#include "); pw.println("#include "); pw.println("#include \"awt_p.h\""); pw.println("#include \"color.h\""); diff --git a/make/modules/java.desktop/Copy.gmk b/make/modules/java.desktop/Copy.gmk index 4232e62552c8..4c4c92a56609 100644 --- a/make/modules/java.desktop/Copy.gmk +++ b/make/modules/java.desktop/Copy.gmk @@ -82,3 +82,13 @@ $(eval $(call SetupCopyLegalFiles, COPY_LEGAL, \ TARGETS += $(COPY_LEGAL) ################################################################################ + +FONTFILE_SRC_DIR := $(TOPDIR)/src/java.desktop/share +FONTFILE_SRCS := $(wildcard $(FONTFILE_SRC_DIR)/fonts/*.ttf) $(wildcard $(FONTFILE_SRC_DIR)/fonts/*.otf) $(FONTFILE_SRC_DIR)/fonts/fonts.dir $(FONTFILE_SRC_DIR)/fonts/font.conf +FONTFILE_TARGET_FILES := $(subst $(FONTFILE_SRC_DIR),$(LIB_DST_DIR),$(FONTFILE_SRCS)) + +$(LIB_DST_DIR)/fonts/%: $(FONTFILE_SRC_DIR)/fonts/% + $(call install-file) + + +TARGETS += $(FONTFILE_TARGET_FILES) diff --git a/make/modules/java.desktop/lib/AwtLibraries.gmk b/make/modules/java.desktop/lib/AwtLibraries.gmk index 11f92585bd91..52e6e33f1d8b 100644 --- a/make/modules/java.desktop/lib/AwtLibraries.gmk +++ b/make/modules/java.desktop/lib/AwtLibraries.gmk @@ -54,9 +54,14 @@ ifeq ($(call isTargetOs, windows), true) $(TOPDIR)/src/$(MODULE)/share/native/common/font \ $(TOPDIR)/src/$(MODULE)/share/native/common/java2d/opengl \ $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt/systemscale \ + $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/launcher \ # endif +ifeq ($(DBUS_FOUND), false) + LIBAWT_EXCLUDE_FILES += dbus_interface.c dbus_interface.h +endif + ifeq ($(call isTargetOs, linux macosx aix), true) LIBAWT_EXCLUDE_FILES += awt_Font.c CUPSfuncs.c fontpath.c X11Color.c endif @@ -84,6 +89,10 @@ LIBAWT_EXTRA_HEADER_DIRS := \ LIBAWT_CFLAGS := -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES -DMLIB_NO_LIBSUNMATH +ifeq ($(DBUS_FOUND), true) + LIBAWT_CFLAGS += -DDBUS_FOUND +endif + ifeq ($(call isTargetOs, windows), true) LIBAWT_CFLAGS += -EHsc -DUNICODE -D_UNICODE ifeq ($(call isTargetCpuBits, 64), true) @@ -95,6 +104,36 @@ ifeq ($(call isTargetOs, windows), true) $(TOPDIR)/src/$(MODULE)/windows/native/libawt/windows/awt.rc endif +# Setup NVDA a11y announcer +ifeq ($(call isTargetOs, windows), true) + A11Y_NVDA_ANNOUNCING_CFLAGS := -DNO_A11Y_NVDA_ANNOUNCING + A11Y_NVDA_ANNOUNCING_LIBS := + A11Y_NVDA_ANNOUNCING_DEPENDENCIES := + + ifeq ($(ENABLE_HEADLESS_ONLY), false) + ifeq ($(A11Y_NVDA_ANNOUNCING_ENABLED), true) + A11Y_NVDA_ANNOUNCING_CFLAGS := $(NVDACONTROLLERCLIENT_CFLAGS) + A11Y_NVDA_ANNOUNCING_LIBS := $(NVDACONTROLLERCLIENT_LIB) + A11Y_NVDA_ANNOUNCING_DEPENDENCIES := $(NVDACONTROLLERCLIENT_DLL) + endif + endif + + LIBAWT_CFLAGS += $(A11Y_NVDA_ANNOUNCING_CFLAGS) +endif + +# Setup the client for the JAWS screen reader +ifeq ($(call isTargetOs, windows), true) + A11Y_JAWS_ANNOUNCING_CFLAGS := -DNO_A11Y_JAWS_ANNOUNCING + + ifeq ($(ENABLE_HEADLESS_ONLY), false) + ifeq ($(A11Y_JAWS_ANNOUNCING_ENABLED), true) + A11Y_JAWS_ANNOUNCING_CFLAGS := + endif + endif + + LIBAWT_CFLAGS += $(A11Y_JAWS_ANNOUNCING_CFLAGS) +endif + # -fgcse-after-reload improves performance of MaskFill in Java2D by 20% for # some gcc $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \ @@ -102,7 +141,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \ EXTRA_SRC := $(LIBAWT_EXTRA_SRC), \ EXCLUDE_FILES := $(LIBAWT_EXCLUDE_FILES), \ OPTIMIZATION := HIGHEST, \ - CFLAGS := $(LIBAWT_CFLAGS) $(X_CFLAGS), \ + CFLAGS := $(LIBAWT_CFLAGS) $(X_CFLAGS) $(DBUS_CFLAGS), \ CXXFLAGS := $(LIBAWT_CFLAGS) $(X_CFLAGS), \ CFLAGS_gcc := -fgcse-after-reload, \ EXTRA_HEADER_DIRS := $(LIBAWT_EXTRA_HEADER_DIRS), \ @@ -116,10 +155,11 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \ DISABLED_WARNINGS_clang_debug_trace.c := format-nonliteral, \ DISABLED_WARNINGS_clang_Trace.c := format-nonliteral, \ DISABLED_WARNINGS_clang_TransformHelper.c := sign-compare, \ + DISABLED_WARNINGS_clang_system_properties.c := format-nonliteral, \ DISABLED_WARNINGS_microsoft := 4244 4996, \ DISABLED_WARNINGS_microsoft_awt_Toolkit.cpp := 4267, \ LDFLAGS_windows := -delayload:comctl32.dll -delayload:comdlg32.dll \ - -delayload:gdi32.dll -delayload:imm32.dll -delayload:ole32.dll \ + -delayload:gdi32.dll -delayload:gdiplus.dll -delayload:imm32.dll -delayload:ole32.dll \ -delayload:shell32.dll -delayload:shlwapi.dll -delayload:user32.dll \ -delayload:winmm.dll -delayload:winspool.drv, \ JDK_LIBS := java.base:libjava java.base:libjvm, \ @@ -134,12 +174,24 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \ -framework Metal \ -framework OpenGL, \ LIBS_windows := advapi32.lib comctl32.lib comdlg32.lib delayimp.lib \ - gdi32.lib imm32.lib kernel32.lib ole32.lib shell32.lib shlwapi.lib \ - user32.lib uuid.lib winmm.lib winspool.lib, \ + gdi32.lib gdiplus.lib imm32.lib kernel32.lib ole32.lib shell32.lib shlwapi.lib \ + user32.lib uuid.lib winmm.lib winspool.lib dwmapi.lib $(A11Y_NVDA_ANNOUNCING_LIBS), \ VERSIONINFO_RESOURCE := $(LIBAWT_VERSIONINFO_RESOURCE), \ EXTRA_RCFLAGS := $(LIBAWT_RCFLAGS), \ )) +ifeq ($(call isTargetOs, windows)+$(ENABLE_HEADLESS_ONLY)+$(A11Y_NVDA_ANNOUNCING_ENABLED), true+false+true) + $(eval $(call SetupCopyFiles, COPY_NVDA_DEPENDENCIES, \ + FILES := $(A11Y_NVDA_ANNOUNCING_DEPENDENCIES), \ + DEST := $(BUILD_LIBAWT_OUTPUT_DIR), \ + )) + + $(COPY_NVDA_DEPENDENCIES): $(A11Y_NVDA_ANNOUNCING_DEPENDENCIES) + $(BUILD_LIBAWT): $(COPY_NVDA_DEPENDENCIES) + + TARGETS += $(COPY_NVDA_DEPENDENCIES) +endif + TARGETS += $(BUILD_LIBAWT) # Mac and Windows only use the native AWT lib, do not build libawt_headless @@ -176,7 +228,7 @@ ifeq ($(call isTargetOs, windows macosx), false) EXCLUDES := medialib, \ OPTIMIZATION := LOW, \ CFLAGS := -DHEADLESS=true $(CUPS_CFLAGS) $(FONTCONFIG_CFLAGS) \ - $(X_CFLAGS), \ + $(X_CFLAGS) $(DBUS_CFLAGS), \ EXTRA_HEADER_DIRS := $(LIBAWT_HEADLESS_EXTRA_HEADER_DIRS), \ DISABLED_WARNINGS_gcc_X11Renderer.c := unused-function, \ DISABLED_WARNINGS_gcc_X11SurfaceData.c := unused-function, \ @@ -199,6 +251,20 @@ ifeq ($(call isTargetOs, windows macosx)+$(ENABLE_HEADLESS_ONLY), false+false) common/font \ # + ifeq ($(A11Y_SPEECHD_ANNOUNCING_ENABLED), true) + A11Y_SPEECHD_ANNOUNCING_CFLAGS := + else + A11Y_SPEECHD_ANNOUNCING_CFLAGS := -DNO_A11Y_SPEECHD_ANNOUNCING + endif + + ifeq ($(call isTargetOs, linux), true) + LIBAWT_XAWT_EXTRA_SRC += \ + $(TOPDIR)/src/$(MODULE)/linux/native/libawt_xawt \ + # + endif + + LIBAWT_XAWT_CFLAGS += $(SPEECHD_CFLAGS) $(A11Y_SPEECHD_ANNOUNCING_CFLAGS) + LIBAWT_XAWT_EXTRA_HEADER_DIRS := \ $(LIBAWT_DEFAULT_HEADER_DIRS) \ libawt_xawt/awt \ @@ -232,7 +298,7 @@ ifeq ($(call isTargetOs, windows macosx)+$(ENABLE_HEADLESS_ONLY), false+false) EXTRA_HEADER_DIRS := $(LIBAWT_XAWT_EXTRA_HEADER_DIRS), \ EXCLUDES := medialib debug, \ OPTIMIZATION := LOW, \ - CFLAGS := -DXAWT -DXAWT_HACK $(LIBAWT_XAWT_CFLAGS) \ + CFLAGS := -DXAWT -DXAWT_HACK $(LIBAWT_XAWT_CFLAGS) $(DBUS_CFLAGS) \ $(FONTCONFIG_CFLAGS) $(CUPS_CFLAGS) $(X_CFLAGS), \ DISABLED_WARNINGS_gcc := int-to-pointer-cast, \ DISABLED_WARNINGS_gcc_awt_Taskbar.c := parentheses, \ @@ -240,6 +306,7 @@ ifeq ($(call isTargetOs, windows macosx)+$(ENABLE_HEADLESS_ONLY), false+false) DISABLED_WARNINGS_gcc_gtk2_interface.c := parentheses type-limits, \ DISABLED_WARNINGS_gcc_gtk3_interface.c := parentheses type-limits \ unused-function, \ + DISABLED_WARNINGS_gcc_keycode_cache.c := unused-function, \ DISABLED_WARNINGS_gcc_OGLBufImgOps.c := format-nonliteral, \ DISABLED_WARNINGS_gcc_OGLPaints.c := format-nonliteral, \ DISABLED_WARNINGS_gcc_screencast_pipewire.c := undef, \ @@ -270,7 +337,7 @@ ifeq ($(call isTargetOs, windows macosx)+$(ENABLE_HEADLESS_ONLY), false+false) parentheses, \ DISABLED_WARNINGS_clang_aix_awt_InputMethod.c := sign-compare, \ JDK_LIBS := libawt java.base:libjava, \ - LIBS_unix := $(LIBDL) $(LIBM) $(X_LIBS) -lX11 -lXext -lXi -lXrender \ + LIBS_unix := $(LIBDL) $(LIBM) $(SPEECHD_LIBS) $(X_LIBS) -lX11 -lXext -lXi -lXrender \ -lXtst, \ LIBS_linux := -lpthread, \ STATIC_LIB_EXCLUDE_OBJS := $(LIBAWT_XAWT_STATIC_EXCLUDE_OBJS), \ @@ -329,6 +396,8 @@ ifeq ($(call isTargetOs, macosx), true) DISABLED_WARNINGS_clang_OGLBufImgOps.c := format-nonliteral, \ DISABLED_WARNINGS_clang_OGLPaints.c := format-nonliteral, \ DISABLED_WARNINGS_clang_PrinterView.m := enum-conversion, \ + DISABLED_WARNINGS_clang_SystemHotkey.m := format-nonliteral, \ + DISABLED_WARNINGS_clang_system_properties.c := format-nonliteral, \ JDK_LIBS := libawt java.base:libjava libosxapp, \ LIBS_macosx := $(LIBM) \ -framework Accelerate \ @@ -336,6 +405,7 @@ ifeq ($(call isTargetOs, macosx), true) -framework AudioToolbox \ -framework Carbon \ -framework Cocoa \ + -framework IOKit \ -framework ExceptionHandling \ -framework JavaRuntimeSupport \ -framework Metal \ diff --git a/make/modules/java.desktop/lib/ClientLibraries.gmk b/make/modules/java.desktop/lib/ClientLibraries.gmk index 6f3616608cce..2bc794dd047a 100644 --- a/make/modules/java.desktop/lib/ClientLibraries.gmk +++ b/make/modules/java.desktop/lib/ClientLibraries.gmk @@ -325,6 +325,7 @@ else endif LIBFONTMANAGER_EXTRA_HEADER_DIRS := \ + java.base:libjvm \ common/awt \ common/awt/utility \ common/font \ @@ -356,9 +357,9 @@ ifeq ($(call isTargetOs, windows), true) LIBFONTMANAGER_OPTIMIZATION := HIGHEST else ifeq ($(call isTargetOs, macosx), true) LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c X11TextRenderer.c \ - fontpath.c lcdglyph.c + lcdglyph.c lcdglyphDW.cpp else - LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c lcdglyph.c + LIBFONTMANAGER_EXCLUDE_FILES += lcdglyph.c lcdglyphDW.cpp endif LIBFONTMANAGER_CFLAGS += $(X_CFLAGS) -DLE_STANDALONE -DHEADLESS diff --git a/make/test/JtregNativeJdk.gmk b/make/test/JtregNativeJdk.gmk index 46eeb7684b67..3b773d2cac2e 100644 --- a/make/test/JtregNativeJdk.gmk +++ b/make/test/JtregNativeJdk.gmk @@ -109,6 +109,17 @@ else BUILD_JDK_JTREG_EXCLUDE += exeLibraryCache.c endif +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_JDK_JTREG_LIBRARIES_LIBS_libwindows_touch_robot := user32.lib + BUILD_JDK_JTREG_EXCLUDE += libtouchscreen_device.c +else + ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_JDK_JTREG_EXCLUDE += libwindows_touch_robot.c + else + BUILD_JDK_JTREG_EXCLUDE += libtouchscreen_device.c libwindows_touch_robot.c + endif +endif + ifeq ($(call isTargetOs, linux), true) # Unconditionally compile with debug symbols and don't ever perform # stripping during the test libraries' build. diff --git a/src/demo/share/java2d/J2DBench/src/j2dbench/report/TCChartReporter.java b/src/demo/share/java2d/J2DBench/src/j2dbench/report/TCChartReporter.java new file mode 100644 index 000000000000..b293ac475ea4 --- /dev/null +++ b/src/demo/share/java2d/J2DBench/src/j2dbench/report/TCChartReporter.java @@ -0,0 +1,320 @@ +package j2dbench.report; + +import java.io.IOException; +import java.nio.file.DirectoryIteratorException; +import java.nio.file.DirectoryStream; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +/** + * The class reads J2DBench scores and reports them into output stream in format applicable for TeamCity charts. + * The directory, where J2DBench result files placed, is specified via command line parameter like follows: + *

    + * -basexml | -b + *

    + * This directory must contain one file with pattern *{openjdk}*.{res} which is considered as a container + * of reference scores and several *{jbsdk}*.{res}. + *

    + *

    Names of these files have several mandatory fields separated by "_" and look like + * osName_jdkName_renderName_*.res + *

    + *

    + * If any of score is less than corresponding reference value by 5% then exit code 1 is returned otherwise + * exit code 0 is returned. + *

    + * Standard output will contain scores in format required for TeamCity charts. + *

    + * Created by vprovodin on 13/02/2017. + */ +public class TCChartReporter { + + private static boolean printTCValues = false; + private static boolean printValues = false; + + private static final DecimalFormat decimalFormat = + new DecimalFormat("0.00"); + + private static FileSystem defaultFileSystem = FileSystems.getDefault(); + + private static double getMeasurementError(String testCaseName, String osName) { + if (testCaseName.contains("text.Rendering.tests.drawString") && osName.toLowerCase().contains("lin") ) + return 0.18; + return 0.1; + } + + /** + * Level at which tests are grouped to be displayed in summary + */ + private static final int LEVEL = 2; + + /** + * Holds the groups and corresponding group-display-names + */ + private static List groups = new ArrayList<>(); + private static Map referenceValues = new HashMap<>(); + private static boolean testFailed = false; + + private static void printUsage() { + String usage = + "\njava TCChartReporter [options] " + + " \n\n" + + "where options include: " + + " \n" + + " -basexml | -b " + + "path to base-build result"; + System.out.println(usage); + System.exit(0); + } + + /** + * String = getTestResultsTableForSummary() + */ + private static double generateTestCaseReport( + Object key, + Map testCaseResult, + Map testCaseResultCount) { + + Integer curTestCountObj = testCaseResultCount.get(key.toString()); + int curTestCount = 0; + if (curTestCountObj != null) { + curTestCount = curTestCountObj; + } + + double totalScore = 0; + + for (int i = 0; i < curTestCount; i++) { + J2DAnalyzer.ResultHolder resultTCR = testCaseResult.get(key.toString() + "_" + i); + totalScore = totalScore + resultTCR.getScore(); + } + + return totalScore; + } + + /** + * Generate Testcase Summary Report for TC - *.out + */ + private static void generateTestCaseSummaryReport( + String OJRname, + Map consoleResult, + Map testCaseResult, + Map testCaseResultCount, + boolean rememberReference) { + + String curGroupName, curTestName; + + Object[] groupNameArray = groups.toArray(); + + Object[] testCaseList = consoleResult.keySet().toArray(); + Arrays.sort(testCaseList); + + for (Object aGroupNameArray : groupNameArray) { + + double value; + curGroupName = aGroupNameArray.toString(); + + for (Object aTestCaseList : testCaseList) { + + curTestName = aTestCaseList.toString(); + + if (curTestName.contains(curGroupName)) { + + value = generateTestCaseReport(curTestName, testCaseResult, testCaseResultCount); + + if (printTCValues) + System.out.println("##teamcity[buildStatisticValue key='" + (OJRname.isEmpty() ? "" : OJRname + ".") + curTestName + + "' value='" + decimalFormat.format(value) + "']"); + if (printValues) + System.out.println((OJRname.isEmpty() ? "" : OJRname + ".") + curTestName + "," + decimalFormat.format(value)); + if (rememberReference) { + referenceValues.put(curTestName, value); + } else { + double refValue = referenceValues.getOrDefault(curTestName, 0.); + if (Math.abs(value/refValue - 1) >= getMeasurementError(curTestName, OJRname)) { + System.err.println(OJRname); + System.err.println(curTestName); + System.err.println("\treferenceValue=" + refValue); + System.err.println("\t actualValue=" + value); + System.err.println("\t diff:" + ((value / refValue - 1) * 100)); + testFailed = (value < refValue); + } + } + } + } + } + } + + /** + * main + */ + public static void main(String args[]) { + + String baseXML = null; + int group = 2; + + /* ---- Analysis Mode ---- + BEST = 1; + WORST = 2; + AVERAGE = 3; + MIDAVG = 4; + ------------------------ */ + int analyzerMode = 4; + + try { + + for (int i = 0; i < args.length; i++) { + + if (args[i].startsWith("-basexml") || + args[i].startsWith("-b")) { + i++; + baseXML = args[i]; + } else if (args[i].startsWith("-tc")) { + printTCValues = true; + } else if (args[i].startsWith("-v")) + printValues = true; + } + } catch (Exception e) { + printUsage(); + } + + XMLHTMLReporter.setGroupLevel(group); + J2DAnalyzer.setMode(analyzerMode); + if (baseXML != null) { + generateComparisonReport(defaultFileSystem.getPath(baseXML)); + } else { + printUsage(); + } + + if (testFailed) + System.exit(1); + } + + /** + * Add Test Group to the list + */ + private static void addGroup(String testName) { + + String testNameSplit[] = testName.replace('.', '_').split("_"); + StringBuilder group = new StringBuilder(testNameSplit[0]); + for (int i = 1; i < LEVEL; i++) { + group.append(".").append(testNameSplit[i]); + } + + if (!groups.contains(group.toString())) + groups.add(group.toString()); + } + + private static List listResFiles(Path dir, String pattern) throws IOException { + List result = new ArrayList<>(); + try (DirectoryStream stream = Files.newDirectoryStream(dir, pattern)) { + for (Path entry : stream) { + result.add(entry); + } + } catch (DirectoryIteratorException ex) { + throw ex.getCause(); + } + return result; + } + + /** + * Generate the reports from the base & target result XML + */ + private static void generateComparisonReport(Path directoryToResFiles) { + + if (directoryToResFiles.toFile().isDirectory()) { + List jbsdkFiles, openjdkFiles; + + try { + jbsdkFiles = listResFiles(directoryToResFiles, "*{jbsdk,jbre}*.{res}"); + openjdkFiles = listResFiles(directoryToResFiles, "*{openjdk}*.{res}"); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + readScores(openjdkFiles.get(0), true); + + for (Path file : jbsdkFiles) { + readScores(file, false); + } + } else { + readScores(directoryToResFiles, true); + } + } + + private static void readScores(Path file, boolean rememberReference) { + String fileName = file.getName(file.getNameCount() - 1).toString(); + String osName="", jdkName="", renderName=""; + if (fileName.contains("win") || fileName.contains("linux") || fileName.contains("osx")) { + String[] fileNameComponents = fileName.split("_"); + if (fileNameComponents.length > 0) + osName = fileNameComponents[0]; + if (fileNameComponents.length > 1) + jdkName = fileNameComponents[1]; + if (fileNameComponents.length > 2) + renderName = fileNameComponents[2]; + } + + String resultXMLFileName = file.toString(); + + J2DAnalyzer.results = new Vector(); + J2DAnalyzer.readResults(resultXMLFileName); + J2DAnalyzer.SingleResultSetHolder baseSRSH = + (J2DAnalyzer.SingleResultSetHolder) J2DAnalyzer.results.elementAt(0); + Enumeration baseEnum_ = baseSRSH.getKeyEnumeration(); + Vector baseKeyvector = new Vector<>(); + while (baseEnum_.hasMoreElements()) { + baseKeyvector.add((String) baseEnum_.nextElement()); + } + String baseKeys[] = new String[baseKeyvector.size()]; + baseKeyvector.copyInto(baseKeys); + J2DAnalyzer.sort(baseKeys); + + Map consoleBaseRes = new HashMap<>(); + + Map testCaseBaseResult = new HashMap<>(); + Map testCaseResultCount = new HashMap<>(); + + for (String baseKey : baseKeys) { + + J2DAnalyzer.ResultHolder baseTCR = + baseSRSH.getResultByKey(baseKey); + + Integer curTestCountObj = testCaseResultCount.get(baseTCR.getName()); + int curTestCount = 0; + if (curTestCountObj != null) { + curTestCount = curTestCountObj; + } + curTestCount++; + testCaseBaseResult.put(baseTCR.getName() + "_" + (curTestCount - 1), baseTCR); + testCaseResultCount.put(baseTCR.getName(), curTestCount); + + addGroup(baseTCR.getName()); + + Double curTotalScoreObj = consoleBaseRes.get(baseTCR.getName()); + double curTotalScore = 0; + if (curTotalScoreObj != null) { + curTotalScore = curTotalScoreObj; + } + curTotalScore = curTotalScore + baseTCR.getScore(); + consoleBaseRes.put(baseTCR.getName(), curTotalScore); + } + + String OJRname = osName + "." + jdkName + "." + renderName; + generateTestCaseSummaryReport((OJRname.length() == 2? "": OJRname), + consoleBaseRes, + testCaseBaseResult, + testCaseResultCount, + rememberReference); + + } +} diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp index f0a984d3d1fe..b9db6285179c 100644 --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -1057,6 +1057,10 @@ void *os::dll_load(const char *filename, char *ebuf, int ebuflen) { return result; } +void * os::dll_load_utf8(const char *filename, char *ebuf, int ebuflen) { + return os::dll_load(filename, ebuf, ebuflen); +} + void os::print_dll_info(outputStream *st) { st->print_cr("Dynamic libraries:"); LoadedLibraries::print(st); diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index e5b6c74ce2f1..77dcf218a068 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -1257,6 +1257,10 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { } #endif // !__APPLE__ +void * os::dll_load_utf8(const char *filename, char *ebuf, int ebuflen) { + return os::dll_load(filename, ebuf, ebuflen); +} + static int _print_dll_info_cb(const char * name, address base_address, address top_address, void * param) { outputStream * out = (outputStream *) param; diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 20d3c99cd3ea..48f5efff6f98 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -1864,6 +1864,10 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { return nullptr; } +void * os::dll_load_utf8(const char *filename, char *ebuf, int ebuflen) { + return os::dll_load(filename, ebuf, ebuflen); +} + void * os::Linux::dlopen_helper(const char *filename, char *ebuf, int ebuflen) { #ifndef IA32 bool ieee_handling = IEEE_subnormal_handling_OK(); diff --git a/src/hotspot/os/posix/signals_posix.cpp b/src/hotspot/os/posix/signals_posix.cpp index a9d3bb9284c4..b09f558c36af 100644 --- a/src/hotspot/os/posix/signals_posix.cpp +++ b/src/hotspot/os/posix/signals_posix.cpp @@ -552,6 +552,12 @@ int JVM_HANDLE_XXX_SIGNAL(int sig, siginfo_t* info, { assert(info != nullptr && ucVoid != nullptr, "sanity"); + if (sig == SIGABRT) { + // Re-set the handler so that we don't recurse if/when abort() is called + // from here. + PosixSignals::install_generic_signal_handler(SIGABRT, (void*)SIG_DFL); + } + // Note: it's not uncommon that JNI code uses signal/sigset to install, // then restore certain signal handler (e.g. to temporarily block SIGPIPE, // or have a SIGILL handler when detecting CPU type). When that happens, @@ -1333,6 +1339,10 @@ static void install_signal_handlers() { assert(ret == 0, "check"); } + if (CatchSIGABRT) { + set_signal_handler(SIGABRT); + } + #if defined(__APPLE__) // lldb (gdb) installs both standard BSD signal handlers, and mach exception // handlers. By replacing the existing task exception handler, we disable lldb's mach diff --git a/src/hotspot/os/windows/globals_windows.hpp b/src/hotspot/os/windows/globals_windows.hpp index df284910cccf..5704c23ccf71 100644 --- a/src/hotspot/os/windows/globals_windows.hpp +++ b/src/hotspot/os/windows/globals_windows.hpp @@ -36,7 +36,10 @@ constraint) \ \ product(bool, UseOSErrorReporting, false, \ - "Let VM fatal error propagate to the OS (ie. WER on Windows)") + "Let VM fatal error propagate to the OS (ie. WER on Windows)") \ + \ +product(bool, UseCriticalSection, true, EXPERIMENTAL, \ + "Use the critical section API instead of WaitForSingleObject") // end of RUNTIME_OS_FLAGS diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 20422e83cb77..dc82c19a1765 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -1550,9 +1550,221 @@ static int _print_module(const char* fname, address base_address, return 0; } +static errno_t convert_to_UTF16(char const* source_str, UINT source_encoding, LPWSTR* dest_utf16_str) { + const int len_estimated = MultiByteToWideChar(source_encoding, + MB_ERR_INVALID_CHARS, + source_str, + -1, // source is null-terminated + NULL, + 0); // estimate characters count + if (len_estimated == 0) { + // Probably source_str contains characters that cannot be represented in the source_encoding given. + *dest_utf16_str = NULL; + return EINVAL; + } + + *dest_utf16_str = NEW_C_HEAP_ARRAY(WCHAR, len_estimated, mtInternal); + + const int len_real = MultiByteToWideChar(source_encoding, + MB_ERR_INVALID_CHARS, + source_str, + -1, // source is null-terminated + *dest_utf16_str, len_estimated); + assert(len_real == len_estimated, "length already checked above"); + + return ERROR_SUCCESS; +} + +// Converts a string in the "platform" encoding to UTF16. +static errno_t convert_to_UTF16(char const* platform_str, LPWSTR* utf16_str) { + return convert_to_UTF16(platform_str, CP_ACP, utf16_str); +} + +static errno_t convert_UTF8_to_UTF16(char const* utf8_str, LPWSTR* utf16_str) { + return convert_to_UTF16(utf8_str, CP_UTF8, utf16_str); +} + +// Converts a wide-character string in UTF-16 encoding to the 8-bit "platform" encoding. +// Unless the platform encoding is UTF-8, not all characters in the source string can be represented in the dest string. +// The function succeeds in this case anyway and just replaces these with a certain character. +static errno_t convert_UTF16_to_platform(LPWSTR source_utf16_str, char*& dest_str) { + const int len_estimated = WideCharToMultiByte(CP_ACP, + 0, + source_utf16_str, + -1, // source is null-terminated + NULL, + 0, // estimate characters count + NULL, NULL); + if (len_estimated == 0) { + dest_str = NULL; + return EINVAL; + } + + dest_str = NEW_C_HEAP_ARRAY(CHAR, len_estimated, mtInternal); + + const int len_real = WideCharToMultiByte(CP_ACP, + 0, + source_utf16_str, + -1, // source is null-terminated + dest_str, len_estimated, NULL, NULL); + assert(len_real == len_estimated, "length already checked above"); + + return ERROR_SUCCESS; +} + +class MemoryReleaserW : public StackObj { +private: + WCHAR* _object_ptr; + +public: + MemoryReleaserW(WCHAR * object_ptr) : _object_ptr(object_ptr) {} + ~MemoryReleaserW() { if (_object_ptr != NULL) FREE_C_HEAP_ARRAY(WCHAR, _object_ptr); } +}; + +class MemoryReleaser : public StackObj { +private: + CHAR* _object_ptr; + +public: + MemoryReleaser(CHAR * object_ptr) : _object_ptr(object_ptr) {} + ~MemoryReleaser() { if (_object_ptr != NULL) FREE_C_HEAP_ARRAY(CHAR, _object_ptr); } +}; + // Loads .dll/.so and // in case of error it checks if .dll/.so was built for the // same architecture as Hotspot is running on +void * os::dll_load_utf8(const char *utf8_name, char *ebuf, int ebuflen) { + LPWSTR utf16_name = NULL; + errno_t err = convert_UTF8_to_UTF16(utf8_name, &utf16_name); + MemoryReleaserW release_utf16_name(utf16_name); + if (err != ERROR_SUCCESS) { + errno = err; + return NULL; + } + + char* platform_name = NULL; // name of the library converted to the "platform" encoding for use in log messages + errno_t ignored_err = convert_UTF16_to_platform(utf16_name, platform_name); + MemoryReleaser release_platform_name(platform_name); + + log_info(os)("attempting shared library load of %s", platform_name); + + void * result = LoadLibraryW(utf16_name); + + if (result != NULL) { + Events::log(NULL, "Loaded shared library %s", platform_name); + // Recalculate pdb search path if a DLL was loaded successfully. + SymbolEngine::recalc_search_path(); + log_info(os)("shared library load of %s was successful", platform_name); + return result; + } + DWORD errcode = GetLastError(); + // Read system error message into ebuf + // It may or may not be overwritten below (in the for loop and just above) + lasterror(ebuf, (size_t) ebuflen); + ebuf[ebuflen - 1] = '\0'; + Events::log(NULL, "Loading shared library %s failed, error code %lu", platform_name, errcode); + log_info(os)("shared library load of %s failed, error code %lu", platform_name, errcode); + + if (errcode == ERROR_MOD_NOT_FOUND) { + strncpy(ebuf, "Can't find dependent libraries", ebuflen - 1); + ebuf[ebuflen - 1] = '\0'; + return NULL; + } + + // Parsing dll below + // If we can read dll-info and find that dll was built + // for an architecture other than Hotspot is running in + // - then print to buffer "DLL was built for a different architecture" + // else call os::lasterror to obtain system error message + int fd = ::wopen(utf16_name, O_RDONLY | O_BINARY, 0); + if (fd < 0) { + return NULL; + } + + uint32_t signature_offset; + uint16_t lib_arch = 0; + bool failed_to_get_lib_arch = + ( // Go to position 3c in the dll + (os::seek_to_file_offset(fd, IMAGE_FILE_PTR_TO_SIGNATURE) < 0) + || + // Read location of signature + (sizeof(signature_offset) != + (::read(fd, (void*)&signature_offset, sizeof(signature_offset)))) + || + // Go to COFF File Header in dll + // that is located after "signature" (4 bytes long) + (os::seek_to_file_offset(fd, + signature_offset + IMAGE_FILE_SIGNATURE_LENGTH) < 0) + || + // Read field that contains code of architecture + // that dll was built for + (sizeof(lib_arch) != (::read(fd, (void*)&lib_arch, sizeof(lib_arch)))) + ); + + ::close(fd); + if (failed_to_get_lib_arch) { + // file i/o error - report os::lasterror(...) msg + return NULL; + } + + typedef struct { + uint16_t arch_code; + char* arch_name; + } arch_t; + + static const arch_t arch_array[] = { + {IMAGE_FILE_MACHINE_I386, (char*)"IA 32"}, + {IMAGE_FILE_MACHINE_AMD64, (char*)"AMD 64"}, + {IMAGE_FILE_MACHINE_ARM64, (char*)"ARM 64"} + }; +#if (defined _M_ARM64) + static const uint16_t running_arch = IMAGE_FILE_MACHINE_ARM64; +#elif (defined _M_AMD64) + static const uint16_t running_arch = IMAGE_FILE_MACHINE_AMD64; +#elif (defined _M_IX86) + static const uint16_t running_arch = IMAGE_FILE_MACHINE_I386; +#else + #error Method os::dll_load requires that one of following \ + is defined :_M_AMD64 or _M_IX86 or _M_ARM64 +#endif + + + // Obtain a string for printf operation + // lib_arch_str shall contain string what platform this .dll was built for + // running_arch_str shall string contain what platform Hotspot was built for + char *running_arch_str = NULL, *lib_arch_str = NULL; + for (unsigned int i = 0; i < ARRAY_SIZE(arch_array); i++) { + if (lib_arch == arch_array[i].arch_code) { + lib_arch_str = arch_array[i].arch_name; + } + if (running_arch == arch_array[i].arch_code) { + running_arch_str = arch_array[i].arch_name; + } + } + + assert(running_arch_str, + "Didn't find running architecture code in arch_array"); + + // If the architecture is right + // but some other error took place - report os::lasterror(...) msg + if (lib_arch == running_arch) { + return NULL; + } + + if (lib_arch_str != NULL) { + ::_snprintf(ebuf, ebuflen - 1, + "Can't load %s-bit .dll on a %s-bit platform", + lib_arch_str, running_arch_str); + } else { + // don't know what architecture this dll was build for + ::_snprintf(ebuf, ebuflen - 1, + "Can't load this .dll (machine code=0x%x) on a %s-bit platform", + lib_arch, running_arch_str); + } + + return NULL; +} + void * os::dll_load(const char *name, char *ebuf, int ebuflen) { log_info(os)("attempting shared library load of %s", name); void* result; @@ -4569,7 +4781,7 @@ static wchar_t* wide_abs_unc_path(char const* path, errno_t & err, int additiona set_path_prefix(buf, &prefix, &prefix_off, &needs_fullpath); LPWSTR unicode_path = nullptr; - err = convert_to_unicode(buf, &unicode_path); + err = convert_to_UTF16(buf, &unicode_path); FREE_C_HEAP_ARRAY(char, buf); if (err != ERROR_SUCCESS) { return nullptr; diff --git a/src/hotspot/os/windows/threadCritical_windows.cpp b/src/hotspot/os/windows/threadCritical_windows.cpp index c85143f80930..63f80ff0b115 100644 --- a/src/hotspot/os/windows/threadCritical_windows.cpp +++ b/src/hotspot/os/windows/threadCritical_windows.cpp @@ -39,6 +39,8 @@ static INIT_ONCE initialized = INIT_ONCE_STATIC_INIT; static int lock_count = 0; static HANDLE lock_event; static DWORD lock_owner = 0; +static CRITICAL_SECTION critical_section; + // // Note that Microsoft's critical region code contains a race @@ -52,8 +54,13 @@ static DWORD lock_owner = 0; // static BOOL WINAPI initialize(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) { - lock_event = CreateEvent(nullptr, false, true, nullptr); - assert(lock_event != nullptr, "unexpected return value from CreateEvent"); + if (UseCriticalSection) { + bool success = InitializeCriticalSectionAndSpinCount(&critical_section, 0x00000400); + assert(success, "unexpected return value from InitializeCriticalSectionAndSpinCount"); + } else { + lock_event = CreateEvent(nullptr, false, true, nullptr); + assert(lock_event != nullptr, "unexpected return value from CreateEvent"); + } return true; } @@ -62,10 +69,14 @@ ThreadCritical::ThreadCritical() { DWORD current_thread = GetCurrentThreadId(); if (lock_owner != current_thread) { - // Grab the lock before doing anything. - DWORD ret = WaitForSingleObject(lock_event, INFINITE); - assert(ret != WAIT_FAILED, "WaitForSingleObject failed with error code: %lu", GetLastError()); - assert(ret == WAIT_OBJECT_0, "WaitForSingleObject failed with return value: %lu", ret); + if (UseCriticalSection) { + EnterCriticalSection(&critical_section); + } else { + // Grab the lock before doing anything. + DWORD ret = WaitForSingleObject(lock_event, INFINITE); + assert(ret != WAIT_FAILED, "WaitForSingleObject failed with error code: %lu", GetLastError()); + assert(ret == WAIT_OBJECT_0, "WaitForSingleObject failed with return value: %lu", ret); + } lock_owner = current_thread; } // Atomicity isn't required. Bump the recursion count. @@ -80,8 +91,12 @@ ThreadCritical::~ThreadCritical() { if (lock_count == 0) { // We're going to unlock lock_owner = 0; - // No lost wakeups, lock_event stays signaled until reset. - DWORD ret = SetEvent(lock_event); - assert(ret != 0, "unexpected return value from SetEvent"); + if (UseCriticalSection) { + LeaveCriticalSection(&critical_section); + } else { + // No lost wakeups, lock_event stays signaled until reset. + DWORD ret = SetEvent(lock_event); + assert(ret != 0, "unexpected return value from SetEvent"); + } } } diff --git a/src/hotspot/share/c1/c1_Instruction.cpp b/src/hotspot/share/c1/c1_Instruction.cpp index 431bcea42cb5..b3ccf70ff56d 100644 --- a/src/hotspot/share/c1/c1_Instruction.cpp +++ b/src/hotspot/share/c1/c1_Instruction.cpp @@ -810,6 +810,19 @@ bool BlockBegin::try_merge(ValueStack* new_state, bool has_irreducible_loops) { } } + for_each_stack_value(existing_state, index, existing_value) { + if ( !(existing_value->as_Phi() != NULL && existing_value->as_Phi()->block() == this)) { + TRACE_PHI(tty->print_cr("Re-entered loop head without existing phi for stack - bailout")); + return false; + } + } + for_each_local_value(existing_state, index, existing_value) { + if (!(existing_value == new_state->local_at(index) || (existing_value->as_Phi() != NULL && existing_value->as_Phi()->as_Phi()->block() == this))) { + TRACE_PHI(tty->print_cr("Re-entered loop head without existing phi for modified local - bailout")); + return false; + } + } + #ifdef ASSERT // check that all necessary phi functions are present for_each_stack_value(existing_state, index, existing_value) { diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.cpp b/src/hotspot/share/classfile/classLoaderDataGraph.cpp index 2046286651ea..653586704b32 100644 --- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp +++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp @@ -47,6 +47,7 @@ #include "utilities/growableArray.hpp" #include "utilities/macros.hpp" #include "utilities/ostream.hpp" +#include "utilities/vmError.hpp" volatile size_t ClassLoaderDataGraph::_num_array_classes = 0; volatile size_t ClassLoaderDataGraph::_num_instance_classes = 0; @@ -186,7 +187,8 @@ ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool has_class_mirror_ inline void assert_is_safepoint_or_gc() { assert(SafepointSynchronize::is_at_safepoint() || Thread::current()->is_ConcurrentGC_thread() || - Thread::current()->is_Worker_thread(), + Thread::current()->is_Worker_thread() || + VMError::is_error_reported(), // don't crash here again if we have already crashed "Must be called by safepoint or GC"); } diff --git a/src/hotspot/share/jfr/periodic/jfrNetworkUtilization.cpp b/src/hotspot/share/jfr/periodic/jfrNetworkUtilization.cpp index 9d57cddb4480..cedf6b756982 100644 --- a/src/hotspot/share/jfr/periodic/jfrNetworkUtilization.cpp +++ b/src/hotspot/share/jfr/periodic/jfrNetworkUtilization.cpp @@ -113,10 +113,12 @@ class JfrNetworkInterfaceName : public JfrSerializer { void serialize(JfrCheckpointWriter& writer) {} // we write each constant lazily void on_rotation() { - for (int i = 0; i < _interfaces->length(); ++i) { - const InterfaceEntry& entry = _interfaces->at(i); - if (entry.written) { - entry.written = false; + if (_interfaces != NULL) { + for (int i = 0; i < _interfaces->length(); ++i) { + const InterfaceEntry &entry = _interfaces->at(i); + if (entry.written) { + entry.written = false; + } } } } diff --git a/src/hotspot/share/memory/metaspace/runningCounters.cpp b/src/hotspot/share/memory/metaspace/runningCounters.cpp index 08dffc5c64c5..892f7ed5d27a 100644 --- a/src/hotspot/share/memory/metaspace/runningCounters.cpp +++ b/src/hotspot/share/memory/metaspace/runningCounters.cpp @@ -45,7 +45,8 @@ size_t RunningCounters::reserved_words_class() { } size_t RunningCounters::reserved_words_nonclass() { - return VirtualSpaceList::vslist_nonclass()->reserved_words(); + VirtualSpaceList* vs = VirtualSpaceList::vslist_nonclass(); + return vs != NULL ? vs->reserved_words() : 0; } // Return total committed size, in words, for Metaspace @@ -59,7 +60,8 @@ size_t RunningCounters::committed_words_class() { } size_t RunningCounters::committed_words_nonclass() { - return VirtualSpaceList::vslist_nonclass()->committed_words(); + VirtualSpaceList* vs = VirtualSpaceList::vslist_nonclass(); + return vs != NULL ? vs->vslist_nonclass()->committed_words() : 0; } // ---- used chunks ----- diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp index 4a16b3d89a87..38101fb08373 100644 --- a/src/hotspot/share/memory/universe.cpp +++ b/src/hotspot/share/memory/universe.cpp @@ -86,6 +86,7 @@ #include "utilities/macros.hpp" #include "utilities/ostream.hpp" #include "utilities/preserveException.hpp" +#include "utilities/vmError.hpp" // A helper class for caching a Method* when the user of the cache // only cares about the latest version of the Method*. This cache safely @@ -896,6 +897,8 @@ jint universe_init() { ResolvedMethodTable::create_table(); + VMError::init(); + return JNI_OK; } diff --git a/src/hotspot/share/opto/loopPredicate.cpp b/src/hotspot/share/opto/loopPredicate.cpp index 9fcfbaf5e646..c13bb90815a2 100644 --- a/src/hotspot/share/opto/loopPredicate.cpp +++ b/src/hotspot/share/opto/loopPredicate.cpp @@ -1198,7 +1198,7 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod Node* idx = cmp->in(1); assert(!invar.is_invariant(idx), "index is variant"); Node* rng = cmp->in(2); - assert(rng->Opcode() == Op_LoadRange || iff->is_RangeCheck() || _igvn.type(rng)->is_int()->_lo >= 0, "must be"); + // [tav: crash] assert(rng->Opcode() == Op_LoadRange || iff->is_RangeCheck() || _igvn.type(rng)->is_int()->_lo >= 0, "must be"); assert(invar.is_invariant(rng), "range must be invariant"); int scale = 1; Node* offset = zero; diff --git a/src/hotspot/share/prims/jni.cpp b/src/hotspot/share/prims/jni.cpp index b6a4443a8c76..e1d07a2c5400 100644 --- a/src/hotspot/share/prims/jni.cpp +++ b/src/hotspot/share/prims/jni.cpp @@ -3519,6 +3519,19 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args_) { return ret; } +#ifdef LINUX +static void unsetLdPreload() { + // Workaround for: JBR-2253 Preload libjsig.so to fix JNA crashes + // NOTE: Probably it still can affect child processes, see + // https://stackoverflow.com/questions/3275015/ld-preload-affects-new-child-even-after-unsetenvld-preload + char * envUnset = ::getenv("UNSET_LD_PRELOAD"); + if (envUnset != NULL && strlen(envUnset) > 3 && strncmp("true", envUnset, 4) == 0) { + unsetenv("LD_PRELOAD"); + fprintf(stdout, "LD_PRELOAD was unset\n"); + } +} +#endif //LINUX + DT_RETURN_MARK_DECL(CreateJavaVM, jint , HOTSPOT_JNI_CREATEJAVAVM_RETURN(_ret_ref)); @@ -3625,6 +3638,10 @@ static jint JNI_CreateJavaVM_inner(JavaVM **vm, void **penv, void *args) { // Since this is not a JVM_ENTRY we have to set the thread state manually before leaving. ThreadStateTransition::transition_from_vm(thread, _thread_in_native); MACOS_AARCH64_ONLY(thread->enable_wx(WXExec)); + +#ifdef LINUX + unsetLdPreload(); +#endif //LINUX } else { // If create_vm exits because of a pending exception, exit with that // exception. In the future when we figure out how to reclaim memory, diff --git a/src/hotspot/share/prims/jvm.cpp b/src/hotspot/share/prims/jvm.cpp index 500036febab7..84336f427ce6 100644 --- a/src/hotspot/share/prims/jvm.cpp +++ b/src/hotspot/share/prims/jvm.cpp @@ -3417,34 +3417,30 @@ JVM_LEAF(void*, JVM_LoadZipLibrary()) return ZipLibrary::handle(); JVM_END -JVM_ENTRY_NO_ENV(void*, JVM_LoadLibrary(const char* name, jboolean throwException)) +JVM_ENTRY_NO_ENV(void*, JVM_LoadLibrary(const char* utf8_name, jboolean throwException)) //%note jvm_ct char ebuf[1024]; void *load_result; { ThreadToNativeFromVM ttnfvm(thread); - load_result = os::dll_load(name, ebuf, sizeof ebuf); + load_result = os::dll_load_utf8(utf8_name, ebuf, sizeof ebuf); } if (load_result == nullptr) { if (throwException) { char msg[1024]; - jio_snprintf(msg, sizeof msg, "%s: %s", name, ebuf); - // Since 'ebuf' may contain a string encoded using - // platform encoding scheme, we need to pass - // Exceptions::unsafe_to_utf8 to the new_exception method - // as the last argument. See bug 6367357. + jio_snprintf(msg, sizeof msg, "%s: %s", utf8_name, ebuf); Handle h_exception = Exceptions::new_exception(thread, vmSymbols::java_lang_UnsatisfiedLinkError(), - msg, Exceptions::unsafe_to_utf8); + msg); THROW_HANDLE_0(h_exception); } else { - log_info(library)("Failed to load library %s", name); + log_info(library)("Failed to load library %s", utf8_name); return load_result; } } - log_info(library)("Loaded library %s, handle " INTPTR_FORMAT, name, p2i(load_result)); + log_info(library)("Loaded library %s, handle " INTPTR_FORMAT, utf8_name, p2i(load_result)); return load_result; JVM_END diff --git a/src/hotspot/share/runtime/abstract_vm_version.cpp b/src/hotspot/share/runtime/abstract_vm_version.cpp index 69a96747aa37..bb987ab96362 100644 --- a/src/hotspot/share/runtime/abstract_vm_version.cpp +++ b/src/hotspot/share/runtime/abstract_vm_version.cpp @@ -123,7 +123,7 @@ const char* Abstract_VM_Version::vm_name() { # define VENDOR_PADDING 64 #endif #ifndef VENDOR -# define VENDOR "Oracle Corporation" +# define VENDOR "JetBrains s.r.o." #endif static const char vm_vendor_string[sizeof(VENDOR) < VENDOR_PADDING ? VENDOR_PADDING : sizeof(VENDOR)] = VENDOR; diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index ee8c7b24541b..d61f62339c42 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -37,6 +37,7 @@ #include "gc/shared/stringdedup/stringDedup.hpp" #include "gc/shared/tlab_globals.hpp" #include "jvm.h" +#include "jfr/periodic/jfrOSInterface.hpp" #include "logging/log.hpp" #include "logging/logConfiguration.hpp" #include "logging/logStream.hpp" @@ -396,6 +397,30 @@ void Arguments::init_system_properties() { os::init_system_properties_values(); } +static const char * get_virtualization_type() { + VirtualizationType vrt = VM_Version::get_detected_virtualization(); + if (vrt == XenHVM || vrt == XenPVHVM) { + return "Xen"; + } else if (vrt == KVM) { + return "KVM"; + } else if (vrt == VMWare) { + return "VMWare"; + } else if (vrt == HyperV) { + return "HyperV"; + } else if (vrt == HyperVRole) { + // Enables users to create and manage virtual machines (VMs) on a physical host machine, + // but doesn't mean we are running in virtual. + return "none"; + } + + return "none"; +} + +void Arguments::post_init_system_properties() { + const char *virtualization_type = get_virtualization_type(); + PropertyList_add(&_system_properties, new SystemProperty("intellij.os.virtualization", virtualization_type, false)); +} + // Update/Initialize System properties after JDK version number is known void Arguments::init_version_specific_system_properties() { enum { bufsz = 16 }; @@ -1308,6 +1333,8 @@ bool Arguments::add_property(const char* prop, PropertyWriteable writeable, Prop if (old_java_vendor_url_bug != nullptr) { os::free((void *)old_java_vendor_url_bug); } + } else if (strcmp(key, "jbr.catch.SIGABRT") == 0) { + CatchSIGABRT = (strcmp(value, "true") == 0); } // Create new property and add at the end of the list @@ -3926,3 +3953,10 @@ bool Arguments::copy_expand_pid(const char* src, size_t srclen, *b = '\0'; return (p == src_end); // return false if not all of the source was copied } + +void Arguments::add_virtualization_information_property() +{ + const char *virt_name = "undetected"; + JFR_ONLY(virt_name = JfrOSInterface::virtualization_name();) + PropertyList_add(&_system_properties, new SystemProperty("jbr.virtualization.information", virt_name, false)); +} diff --git a/src/hotspot/share/runtime/arguments.hpp b/src/hotspot/share/runtime/arguments.hpp index 8251db3d0d59..4941d4cf8018 100644 --- a/src/hotspot/share/runtime/arguments.hpp +++ b/src/hotspot/share/runtime/arguments.hpp @@ -439,6 +439,8 @@ class Arguments : AllStatic { // System properties static void init_system_properties(); + static void post_init_system_properties(); + // Update/Initialize System properties after JDK version number is known static void init_version_specific_system_properties(); @@ -447,6 +449,8 @@ class Arguments : AllStatic { _vm_info->set_value(vm_info); } + static void add_virtualization_information_property(); + // Property List manipulation static void PropertyList_add(SystemProperty *element); static void PropertyList_add(SystemProperty** plist, SystemProperty *element); diff --git a/src/hotspot/share/runtime/globals.cpp b/src/hotspot/share/runtime/globals.cpp index aa456c29047c..b593778cc7f4 100644 --- a/src/hotspot/share/runtime/globals.cpp +++ b/src/hotspot/share/runtime/globals.cpp @@ -42,3 +42,5 @@ ALL_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PD_PRODUCT_FLAG, IGNORE_RANGE, IGNORE_CONSTRAINT) + +MATERIALIZE_PRODUCT_FLAG(bool, CatchSIGABRT, false); diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 3995a8714746..e89195536f34 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -2005,4 +2005,6 @@ DECLARE_ARCH_FLAGS(ARCH_FLAGS) DECLARE_FLAGS(RUNTIME_FLAGS) DECLARE_FLAGS(RUNTIME_OS_FLAGS) +DECLARE_PRODUCT_FLAG(bool, CatchSIGABRT, false); + #endif // SHARE_RUNTIME_GLOBALS_HPP diff --git a/src/hotspot/share/runtime/init.cpp b/src/hotspot/share/runtime/init.cpp index d37ae99b4188..00a38e74bd72 100644 --- a/src/hotspot/share/runtime/init.cpp +++ b/src/hotspot/share/runtime/init.cpp @@ -35,6 +35,7 @@ #include "prims/downcallLinker.hpp" #include "prims/jvmtiExport.hpp" #include "prims/methodHandles.hpp" +#include "runtime/arguments.hpp" #include "runtime/atomic.hpp" #include "runtime/continuation.hpp" #include "runtime/flags/jvmFlag.hpp" @@ -130,6 +131,8 @@ jint init_globals() { if (status != JNI_OK) return status; + Arguments::post_init_system_properties(); + #ifdef LEAK_SANITIZER { // Register the Java heap with LSan. diff --git a/src/hotspot/share/runtime/jniHandles.cpp b/src/hotspot/share/runtime/jniHandles.cpp index a74b56063dce..a17441130bdd 100644 --- a/src/hotspot/share/runtime/jniHandles.cpp +++ b/src/hotspot/share/runtime/jniHandles.cpp @@ -258,6 +258,23 @@ void JNIHandles::print_on(outputStream* st) { st->flush(); } +// Called while generating crash log, possibly not at safepoint +void JNIHandles::print_on_unsafe(outputStream* st) { + st->print_cr("JNI global refs: " SIZE_FORMAT ", weak refs: " SIZE_FORMAT, + global_handles() != NULL ? global_handles()->allocation_count() : 0, + weak_global_handles() != NULL ? weak_global_handles()->allocation_count() : 0); + st->cr(); + st->flush(); +} + +void JNIHandles::print_memory_usage_on(outputStream *st) { + st->print_cr("JNI global refs memory usage: " SIZE_FORMAT ", weak refs: " SIZE_FORMAT, + global_handles() != NULL ? global_handles()->total_memory_usage() : 0, + global_handles() != NULL ? weak_global_handles()->total_memory_usage() : 0); + st->cr(); + st->flush(); +} + void JNIHandles::print() { print_on(tty); } class VerifyJNIHandles: public OopClosure { diff --git a/src/hotspot/share/runtime/jniHandles.hpp b/src/hotspot/share/runtime/jniHandles.hpp index 230a3f5ca428..66e440cb8f19 100644 --- a/src/hotspot/share/runtime/jniHandles.hpp +++ b/src/hotspot/share/runtime/jniHandles.hpp @@ -110,6 +110,8 @@ class JNIHandles : AllStatic { // Debugging static void print_on(outputStream* st); + static void print_on_unsafe(outputStream* st); + static void print_memory_usage_on(outputStream* st); static void print(); static void verify(); // The category predicates all require handle != nullptr. diff --git a/src/hotspot/share/runtime/mutexLocker.cpp b/src/hotspot/share/runtime/mutexLocker.cpp index dec40136336f..532165e27091 100644 --- a/src/hotspot/share/runtime/mutexLocker.cpp +++ b/src/hotspot/share/runtime/mutexLocker.cpp @@ -154,6 +154,8 @@ Monitor* JVMCI_lock = nullptr; Monitor* JVMCIRuntime_lock = nullptr; #endif +Mutex* OOMEStacks_lock = nullptr; + // Only one RecursiveMutex RecursiveMutex* MultiArray_lock = nullptr; @@ -355,6 +357,7 @@ void mutex_init() { // JVMCIRuntime_lock must be acquired before JVMCI_lock to avoid deadlock MUTEX_DEFL(JVMCI_lock , PaddedMonitor, JVMCIRuntime_lock); #endif + MUTEX_DEFN(OOMEStacks_lock , PaddedMutex , safepoint-1); // Allocate RecursiveMutex MultiArray_lock = new RecursiveMutex(); diff --git a/src/hotspot/share/runtime/mutexLocker.hpp b/src/hotspot/share/runtime/mutexLocker.hpp index 91310364b8f0..99b15c7384dd 100644 --- a/src/hotspot/share/runtime/mutexLocker.hpp +++ b/src/hotspot/share/runtime/mutexLocker.hpp @@ -153,6 +153,8 @@ extern Mutex* Bootclasspath_lock; extern Mutex* tty_lock; // lock to synchronize output. +extern Mutex* OOMEStacks_lock; + // A MutexLocker provides mutual exclusion with respect to a given mutex // for the scope which contains the locker. The lock is an OS lock, not // an object lock, and the two do not interoperate. Do not use Mutex-based diff --git a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp index 53c438cd2089..5b0cc3df63ed 100644 --- a/src/hotspot/share/runtime/os.cpp +++ b/src/hotspot/share/runtime/os.cpp @@ -991,6 +991,7 @@ static void print_hex_location(outputStream* st, address p, int unitsize) { } } +ATTRIBUTE_NO_SANITIZE_ADDRESS("Memory is read raw here without any regard for objects' boundaries") void os::print_hex_dump(outputStream* st, address start, address end, int unitsize, int bytes_per_line, address logical_start) { assert(unitsize == 1 || unitsize == 2 || unitsize == 4 || unitsize == 8, "just checking"); diff --git a/src/hotspot/share/runtime/os.hpp b/src/hotspot/share/runtime/os.hpp index 4bfcd9c2da56..87abb7dabc32 100644 --- a/src/hotspot/share/runtime/os.hpp +++ b/src/hotspot/share/runtime/os.hpp @@ -743,6 +743,7 @@ class os: AllStatic { // same architecture as HotSpot is running on // in case of an error null is returned and an error message is stored in ebuf static void* dll_load(const char *name, char *ebuf, int ebuflen); + static void* dll_load_utf8(const char *name, char *ebuf, int ebuflen); // lookup symbol in a shared library static void* dll_lookup(void* handle, const char* name); diff --git a/src/hotspot/share/runtime/threads.cpp b/src/hotspot/share/runtime/threads.cpp index b92e5a90c558..33cb5d8e64c8 100644 --- a/src/hotspot/share/runtime/threads.cpp +++ b/src/hotspot/share/runtime/threads.cpp @@ -584,6 +584,8 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { JFR_ONLY(Jfr::on_create_vm_1();) + Arguments::add_virtualization_information_property(); + // Should be done after the heap is fully created main_thread->cache_global_variables(); diff --git a/src/hotspot/share/runtime/vmOperations.cpp b/src/hotspot/share/runtime/vmOperations.cpp index af9911e0fdc7..1feda075f7ce 100644 --- a/src/hotspot/share/runtime/vmOperations.cpp +++ b/src/hotspot/share/runtime/vmOperations.cpp @@ -27,6 +27,7 @@ #include "classfile/stringTable.hpp" #include "classfile/symbolTable.hpp" #include "classfile/vmSymbols.hpp" +#include "classfile/symbolTable.hpp" #include "code/codeCache.hpp" #include "compiler/compileBroker.hpp" #include "gc/shared/collectedHeap.hpp" @@ -39,6 +40,7 @@ #include "memory/resourceArea.hpp" #include "memory/universe.hpp" #include "oops/symbol.hpp" +#include "oops/symbolHandle.hpp" #include "runtime/arguments.hpp" #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" @@ -52,7 +54,7 @@ #include "runtime/threadSMR.inline.hpp" #include "runtime/vmOperations.hpp" #include "services/threadService.hpp" -#include "utilities/ticks.hpp" +#include "javaCalls.hpp" #define VM_OP_NAME_INITIALIZE(name) #name, @@ -170,6 +172,37 @@ void VM_ZombieAll::doit() { #endif // !PRODUCT + +// Prints out additional information supplied by the application +// through the use of JBR API. The data in the form of a String +// are obtained from Throwable.$$jb$getAdditionalInfoForJstack() +// and, not not null, are included into the output. +void VM_PrintThreads::print_additional_info() { + JavaThread *THREAD = JavaThread::current(); + HandleMark hm(THREAD); + ResourceMark rm; + + InstanceKlass *klass = vmClasses::Throwable_klass(); + if (klass != NULL) { + TempNewSymbol method_name = SymbolTable::new_symbol("$$jb$getAdditionalInfoForJstack"); + Symbol *signature = vmSymbols::void_string_signature(); + Method *method = klass->find_method(method_name, signature); + if (method != NULL) { + JavaValue result(T_OBJECT); + JavaCalls::call_static(&result, klass, + method_name, signature, THREAD); + oop dump_oop = result.get_oop(); + if (dump_oop != NULL) { + // convert Java String to utf8 string + char *s = java_lang_String::as_utf8_string(dump_oop); + _out->cr(); + _out->print_raw_cr(s); + _out->cr(); + } + } + } +} + bool VM_PrintThreads::doit_prologue() { // Get Heap_lock if concurrent locks will be dumped if (_print_concurrent_locks) { @@ -182,6 +215,7 @@ void VM_PrintThreads::doit() { Threads::print_on(_out, true, false, _print_concurrent_locks, _print_extended_info); if (_print_jni_handle_info) { JNIHandles::print_on(_out); + JNIHandles::print_memory_usage_on(_out); } } @@ -190,6 +224,13 @@ void VM_PrintThreads::doit_epilogue() { // Release Heap_lock Heap_lock->unlock(); } + + // We should be on the "signal handler" thread, which is a JavaThread + if (Thread::current()->is_Java_thread()) { + // .. but best play it safe as we're going to need to make + // Java calls on the current thread. + print_additional_info(); + } } void VM_PrintMetadata::doit() { diff --git a/src/hotspot/share/runtime/vmOperations.hpp b/src/hotspot/share/runtime/vmOperations.hpp index 5ccf689eaf3d..0f71d428e07e 100644 --- a/src/hotspot/share/runtime/vmOperations.hpp +++ b/src/hotspot/share/runtime/vmOperations.hpp @@ -163,6 +163,9 @@ class VM_PrintThreads: public VM_Operation { void doit(); bool doit_prologue(); void doit_epilogue(); + +private: + void print_additional_info(); }; class VM_PrintMetadata : public VM_Operation { diff --git a/src/hotspot/share/utilities/compilerWarnings.hpp b/src/hotspot/share/utilities/compilerWarnings.hpp index 28954843dc32..a0ca28ae117b 100644 --- a/src/hotspot/share/utilities/compilerWarnings.hpp +++ b/src/hotspot/share/utilities/compilerWarnings.hpp @@ -103,4 +103,10 @@ #define ALLOW_C_FUNCTION(name, ...) __VA_ARGS__ #endif +#if defined(__clang__) || defined (__GNUC__) +# define ATTRIBUTE_NO_SANITIZE_ADDRESS(reason_for_exclusion) __attribute__((no_sanitize_address)) +#else +# define ATTRIBUTE_NO_SANITIZE_ADDRESS(reason_for_exclusion) +#endif + #endif // SHARE_UTILITIES_COMPILERWARNINGS_HPP diff --git a/src/hotspot/share/utilities/debug.cpp b/src/hotspot/share/utilities/debug.cpp index 9f839fc1a136..69218a904f38 100644 --- a/src/hotspot/share/utilities/debug.cpp +++ b/src/hotspot/share/utilities/debug.cpp @@ -253,6 +253,8 @@ void report_untested(const char* file, int line, const char* message) { void report_java_out_of_memory(const char* message) { static int out_of_memory_reported = 0; + VMError::record_oome_stack(message); + // A number of threads may attempt to report OutOfMemoryError at around the // same time. To avoid dumping the heap or executing the data collection // commands multiple times we just do it once when the first threads reports diff --git a/src/hotspot/share/utilities/globalDefinitions_visCPP.hpp b/src/hotspot/share/utilities/globalDefinitions_visCPP.hpp index 3b28328d7dd4..538acd028929 100644 --- a/src/hotspot/share/utilities/globalDefinitions_visCPP.hpp +++ b/src/hotspot/share/utilities/globalDefinitions_visCPP.hpp @@ -101,6 +101,11 @@ inline int g_isnan(jdouble f) { return _isnan(f); } inline int g_isfinite(jfloat f) { return _finite(f); } inline int g_isfinite(jdouble f) { return _finite(f); } +// Miscellaneous + +// Visual Studio 2005 deprecates POSIX names - use ISO C++ names instead +#define wopen _wopen + // Formatting. #define FORMAT64_MODIFIER "ll" diff --git a/src/hotspot/share/utilities/vmError.cpp b/src/hotspot/share/utilities/vmError.cpp index 156a0fd2ec67..2ba40fec8211 100644 --- a/src/hotspot/share/utilities/vmError.cpp +++ b/src/hotspot/share/utilities/vmError.cpp @@ -26,6 +26,7 @@ #include "precompiled.hpp" #include "cds/metaspaceShared.hpp" +#include "classfile/classLoaderDataGraph.hpp" #include "code/codeCache.hpp" #include "compiler/compilationFailureInfo.hpp" #include "compiler/compileBroker.hpp" @@ -48,6 +49,7 @@ #include "runtime/frame.inline.hpp" #include "runtime/init.hpp" #include "runtime/javaThread.inline.hpp" +#include "runtime/jniHandles.hpp" #include "runtime/os.inline.hpp" #include "runtime/osThread.hpp" #include "runtime/safefetch.hpp" @@ -79,6 +81,18 @@ #include #endif // PRODUCT +#ifdef LINUX +#include "os_linux.hpp" +#endif + +#ifdef _WINDOWS +#include +#endif + +#ifdef __APPLE__ +#include +#endif + bool VMError::coredump_status; char VMError::coredump_message[O_BUFLEN]; int VMError::_current_step; @@ -660,6 +674,7 @@ void VMError::clear_step_start_time() { // could be nested report_and_die() calls on stack (see above). Only one // thread can report error, so large buffers are statically allocated in data // segment. +ATTRIBUTE_NO_SANITIZE_ADDRESS("Memory is read raw here without any regard for objects' boundaries") void VMError::report(outputStream* st, bool _verbose) { // Used by reattempt step logic static int continuation = 0; @@ -1320,6 +1335,25 @@ void VMError::report(outputStream* st, bool _verbose) { NativeHeapTrimmer::print_state(st); st->cr(); + STEP("JNI global references") + st->print_cr("JNI global refs:"); + JNIHandles::print_on_unsafe(st); + JNIHandles::print_memory_usage_on(st); + + STEP_IF("Process memory usage", _verbose) + print_process_memory_usage(st); + + STEP("OOME stack traces") + st->print_cr("OOME stack traces (most recent first):"); + print_oome_stacks(st); + + STEP("Classloader stats") + st->print_cr("Classloader memory used:"); + FREE_C_HEAP_ARRAY(void*, _ballast_memory); + _ballast_memory = nullptr; + print_classloaders_stats(st); + print_dup_classes(st); // do it separately in case we're low on memory + STEP_IF("printing system", _verbose) st->print_cr("--------------- S Y S T E M ---------------"); st->cr(); @@ -1495,6 +1529,7 @@ void VMError::print_vm_info(outputStream* st) { NativeHeapTrimmer::print_state(st); st->cr(); + print_process_memory_usage(st); // STEP("printing system") st->print_cr("--------------- S Y S T E M ---------------"); @@ -2165,3 +2200,246 @@ VMErrorCallbackMark::~VMErrorCallbackMark() { assert(_thread->_vm_error_callbacks != nullptr, "Popped too far"); _thread->_vm_error_callbacks = _thread->_vm_error_callbacks->_next; } + +char VMError::_oome_stacktrace[OOME_STACKTRACE_COUNT][OOME_STACKTRACE_BUFSIZE]; +int VMError::_oome_free_index; +void * VMError::_ballast_memory; + +void VMError::init() { + _oome_free_index = 0; + // This will be released before dumping classes statistics as the latter + // may need to allocate some memory in an OOME situation. + _ballast_memory = NEW_C_HEAP_ARRAY(void*, 36000*4, mtStatistics); +} + +void VMError::record_oome_stack(const char *message) { + Thread * thread = Thread::current(); + if (!thread->is_Java_thread()) { + // The following code can't work in non-Java thread. + // Besides, it's not a true OOM *exception* if there's no Java on the stack. + return; + } + + { + MutexLocker ml(OOMEStacks_lock); + ResourceMark rm; + + stringStream st(_oome_stacktrace[_oome_free_index], OOME_STACKTRACE_BUFSIZE); + st.print_cr("OutOfMemoryError(\"%s\") on the thread \"%s\"", message, thread->name()); + JavaThread::cast(thread)->print_stack_on(&st); + + st.cr(); + + _oome_free_index = (_oome_free_index + 1) % OOME_STACKTRACE_COUNT; + } +} + +void VMError::print_oome_stacks(outputStream *st) { + int index = _oome_free_index == 0 ? OOME_STACKTRACE_COUNT - 1 : _oome_free_index - 1; + + for (int i = 0; i < OOME_STACKTRACE_COUNT; i++) { + const char * const trace = _oome_stacktrace[index]; + if (strcmp(trace, "") != 0) st->print_raw_cr(trace); + index = index == 0 ? OOME_STACKTRACE_COUNT - 1 : index - 1; + } +} + +class CLDCounterClosure : public CLDClosure { +public: + // Loader Klass -> memory used in words + using TABLE = ResizeableResourceHashtable; + +private: + TABLE& _loaded_size; + +public: + explicit CLDCounterClosure(TABLE& loaded_size) : _loaded_size(loaded_size) {} + + void do_cld(ClassLoaderData* cld) override { + Klass * const loader = cld->class_loader_klass(); + ClassLoaderMetaspace * const ms = cld->metaspace_or_null(); + if (ms != nullptr) { + size_t used_words = 0; + ms->usage_numbers(&used_words, nullptr, nullptr); + + const size_t * const new_size_ptr = _loaded_size.get(loader); + size_t new_size = new_size_ptr == nullptr + ? used_words + : *new_size_ptr + used_words; + _loaded_size.put(loader, new_size); + } + } +}; + +static int compare_by_size(Pair* p1, Pair* p2) { + return p2->second == p1->second + ? 0 + : p2->second > p1->second ? 1 : -1; +} + +void VMError::print_classloaders_stats(outputStream *st) { + if (_thread) { + ResourceMark rm(_thread); + MutexLocker ml(_thread, ClassLoaderDataGraph_lock); + + CLDCounterClosure::TABLE sizes(10, 100); + CLDCounterClosure counter(sizes); + ClassLoaderDataGraph::cld_do(&counter); + GrowableArray> loaders_stats; + sizes.iterate_all([&] (Klass* loader_klass, size_t total_words) { + loaders_stats.push(Pair(loader_klass, total_words)); + }); + + loaders_stats.sort(compare_by_size); + + for (const auto loaders_stat : loaders_stats) { + Klass * const loader_klass = loaders_stat.first; + const size_t total_words = loaders_stat.second; + const char *name = loader_klass != nullptr + ? loader_klass->external_name() + : BOOTSTRAP_LOADER_NAME; + const size_t total_bytes = total_words * BytesPerWord; + st->print_cr("Loader %-80s: " SIZE_FORMAT "%s", + name, + byte_size_in_proper_unit(total_bytes), + proper_unit_for_byte_size(total_bytes)); + } + + st->cr(); + } else { + st->print_cr("Not available (crashed in non-Java thread)"); + } +} + +class DuplicateKlassClosure : public KlassClosure { + static bool klass_equals(Klass* const & klass1, Klass* const & klass2) { + return strcmp(klass1->external_name(), klass2->external_name()) == 0; + } + + static unsigned klass_hash(Klass* const & k) { + int h = 0; + const char* p = k->external_name(); + while (*p != '\0') { + h = 31 * h + *p; + p++; + } + return h; + } + +public: + // Klass -> number times loaded + using TABLE = ResizeableResourceHashtable; + +private: + TABLE& _classes_count; + +public: + explicit DuplicateKlassClosure(TABLE& classes_count) : _classes_count(classes_count) {} + + void do_klass(Klass* klass) override { + const size_t * const new_count_ptr = _classes_count.get(klass); + const size_t new_count = new_count_ptr != nullptr ? *new_count_ptr + 1 : 1; + _classes_count.put(klass, new_count); + } +}; + +void VMError::print_dup_classes(outputStream *st) { + if (_thread) { + ResourceMark rm(_thread); + RecursiveLocker rl(MultiArray_lock, _thread); + MutexLocker mcld(_thread, ClassLoaderDataGraph_lock); + + DuplicateKlassClosure::TABLE classes_count(100, 200); + DuplicateKlassClosure counter(classes_count); + ClassLoaderDataGraph::loaded_classes_do(&counter); + + GrowableArray> dup_classes; + classes_count.iterate_all([&] (Klass* const name, size_t count) { + if (count > 1) dup_classes.push(Pair(name, count)); + }); + + if (dup_classes.length() > 0) { + st->print_cr("Classes loaded by more than one classloader:"); + dup_classes.sort(compare_by_size); + for (const auto dup : dup_classes) { + const char * const name = dup.first->external_name(); + const size_t size = dup.first->size(); + const size_t count = dup.second; + st->print_cr("Class %-80s: loaded " SIZE_FORMAT " times (x " SIZE_FORMAT "B)", + name, count, size); + } + st->cr(); + } + } +} + +#ifdef LINUX +static void print_process_memory_usage_platform(outputStream *st) +{ + // See also os::Linux::print_process_memory_info() + os::Linux::meminfo_t info; + if (os::Linux::query_process_memory_info(&info)) { + ssize_t phys_total_kb = os::physical_memory() / K; + ssize_t phys_avail_kb = os::available_memory() / K; + int rss_percentile = (int)(info.vmrss * 100.0 / phys_total_kb); + st->print_cr("Resident Set Size: " SSIZE_FORMAT "K (%d%% of " + SSIZE_FORMAT "K total physical memory with " SSIZE_FORMAT "K free physical memory)", + info.vmrss, rss_percentile, phys_total_kb, phys_avail_kb); + } else { + st->print_cr("Could not open /proc/self/status to get process memory related information"); + } +} +#endif + +#ifdef _WINDOWS +static void print_process_memory_usage_platform(outputStream *st) +{ + // See os::jfr_report_memory_info() in os_windows.cpp + PROCESS_MEMORY_COUNTERS_EX pmex; + ZeroMemory(&pmex, sizeof(PROCESS_MEMORY_COUNTERS_EX)); + pmex.cb = sizeof(pmex); + + BOOL ret = GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmex, sizeof(pmex)); + if (ret != 0) { + ssize_t rss_kb = pmex.WorkingSetSize / K; + ssize_t phys_total_kb = os::physical_memory() / K; + ssize_t phys_avail_kb = os::available_memory() / K; + int rss_percentile = (int)(rss_kb * 100.0 / phys_total_kb); + st->print_cr("Resident Set Size: " SSIZE_FORMAT "K (%d%% of " + SSIZE_FORMAT "K total physical memory with " SSIZE_FORMAT "K free physical memory)", + rss_kb, rss_percentile, phys_total_kb, phys_avail_kb); + } else { + st->print_cr("GetProcessMemoryInfo() call did not succeed"); + } +} +#endif + +#ifdef __APPLE__ +static void print_process_memory_usage_platform(outputStream *st) +{ + // See os::jfr_report_memory_info() in os_bsd.cpp + mach_task_basic_info info; + mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT; + + kern_return_t ret = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &count); + if (ret == KERN_SUCCESS) { + ssize_t rss_kb = info.resident_size / K; + ssize_t phys_total_kb = os::physical_memory() / K; + ssize_t phys_avail_kb = os::available_memory() / K; + int rss_percentile = (int)(rss_kb * 100.0 / phys_total_kb); + st->print_cr("Resident Set Size: " SSIZE_FORMAT "K (%d%% of " + SSIZE_FORMAT "K total physical memory with " SSIZE_FORMAT "K free physical memory)", + rss_kb, rss_percentile, phys_total_kb, phys_avail_kb); + } else { + st->print_cr("task_info() call did not succeed"); + } +} +#endif + +void VMError::print_process_memory_usage(outputStream *st) +{ + st->print_cr("Process memory usage:"); + print_process_memory_usage_platform(st); + st->cr(); +} diff --git a/src/hotspot/share/utilities/vmError.hpp b/src/hotspot/share/utilities/vmError.hpp index a2a098e2cda5..9504a6f8f313 100644 --- a/src/hotspot/share/utilities/vmError.hpp +++ b/src/hotspot/share/utilities/vmError.hpp @@ -69,6 +69,12 @@ class VMError : public AllStatic { // used for reattempt step logic static const size_t _reattempt_required_stack_headroom; + static const int OOME_STACKTRACE_BUFSIZE = 16*K; + static const int OOME_STACKTRACE_COUNT = 4; + static char _oome_stacktrace[OOME_STACKTRACE_COUNT][OOME_STACKTRACE_BUFSIZE]; + static int _oome_free_index; + static void * _ballast_memory; + // Thread id of the first error. We must be able to handle native thread, // so use thread id instead of Thread* to identify thread. static volatile intptr_t _first_error_tid; @@ -225,6 +231,12 @@ class VMError : public AllStatic { // permissions. static int prepare_log_file(const char* pattern, const char* default_pattern, bool overwrite_existing, char* buf, size_t buflen); + static void init(); + static void record_oome_stack(const char *message); + static void print_oome_stacks(outputStream *st); + static void print_classloaders_stats(outputStream *st); + static void print_dup_classes(outputStream *st); + static void print_process_memory_usage(outputStream *st); }; class VMErrorCallback { diff --git a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java index 3b99a456288c..92889ba62cdf 100644 --- a/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java +++ b/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java @@ -54,8 +54,8 @@ class BsdFileSystem extends UnixFileSystem { public WatchService newWatchService() throws IOException { - // use polling implementation until we implement a BSD/kqueue one - return new PollingWatchService(); + final boolean usePollingWatchService = Boolean.getBoolean("watch.service.polling"); + return usePollingWatchService ? new PollingWatchService() : new MacOSXWatchService(); } // lazy initialization of the list of supported attribute views diff --git a/src/java.base/macosx/classes/sun/nio/fs/MacOSXWatchService.java b/src/java.base/macosx/classes/sun/nio/fs/MacOSXWatchService.java new file mode 100644 index 000000000000..1b00d07c3885 --- /dev/null +++ b/src/java.base/macosx/classes/sun/nio/fs/MacOSXWatchService.java @@ -0,0 +1,827 @@ +/* + * Copyright (c) 2021, 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import sun.util.logging.PlatformLogger; + +import jdk.internal.misc.Unsafe; + +import java.io.IOException; +import java.nio.file.ClosedWatchServiceException; +import java.nio.file.DirectoryIteratorException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.NotDirectoryException; +import java.nio.file.Path; +import java.nio.file.StandardWatchEventKinds; +import java.nio.file.WatchEvent; +import java.nio.file.WatchKey; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayDeque; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.function.Consumer; + +class MacOSXWatchService extends AbstractWatchService { + // Controls tracing in the native part of the watcher. + private static boolean tracingEnabled = false; + private static final PlatformLogger logger = PlatformLogger.getLogger("sun.nio.fs.MacOSXWatchService"); + + private final HashMap dirKeyToWatchKey = new HashMap<>(); + private final HashMap eventStreamToWatchKey = new HashMap<>(); + private final Object watchKeysLock = new Object(); + + private final CFRunLoopThread runLoopThread; + + MacOSXWatchService() throws IOException { + runLoopThread = new CFRunLoopThread(); + runLoopThread.setDaemon(true); + runLoopThread.start(); + + try { + // In order to be able to schedule any FSEventStream's, a reference to a run loop is required. + runLoopThread.waitForRunLoopRef(); + } catch (InterruptedException e) { + throw new IOException(e); + } + } + + @Override + WatchKey register(Path dir, WatchEvent.Kind[] events, WatchEvent.Modifier... modifiers) throws IOException { + checkIsOpen(); + + final UnixPath unixDir = (UnixPath)dir; + final Object dirKey = checkPath(unixDir); + final EnumSet eventSet = FSEventKind.setOf(events); + final EnumSet modifierSet = WatchModifier.setOf(modifiers); + synchronized (closeLock()) { + checkIsOpen(); + + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("register for " + dir); + + synchronized (watchKeysLock) { + MacOSXWatchKey watchKey = dirKeyToWatchKey.get(dirKey); + final boolean keyForDirAlreadyExists = (watchKey != null); + if (keyForDirAlreadyExists) { + eventStreamToWatchKey.remove(watchKey.getEventStreamRef()); + watchKey.disable(); + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("re-used existing watch key"); + } else { + watchKey = new MacOSXWatchKey(this, unixDir, dirKey); + dirKeyToWatchKey.put(dirKey, watchKey); + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("created a new watch key"); + } + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("starting to [re-]populate directory cache with data"); + watchKey.enable(runLoopThread, eventSet, modifierSet); + eventStreamToWatchKey.put(watchKey.getEventStreamRef(), watchKey); + watchKeysLock.notify(); // So that run loop gets running again if stopped due to lack of event streams + return watchKey; + } + } + } + + /** + * Invoked on the CFRunLoopThread by the native code to report directories that need to be re-scanned. + */ + private void callback(final long eventStreamRef, final String[] paths, final long eventFlagsPtr) { + synchronized (watchKeysLock) { + final MacOSXWatchKey watchKey = eventStreamToWatchKey.get(eventStreamRef); + if (watchKey != null) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("Callback fired for '" + watchKey.getRealRootPath() + "'"); + watchKey.handleEvents(paths, eventFlagsPtr); + } else { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("Callback fired for watch key that is no longer there"); + } + } + } + + void cancel(final MacOSXWatchKey watchKey) { + synchronized (watchKeysLock) { + dirKeyToWatchKey.remove(watchKey.getRootPathKey()); + eventStreamToWatchKey.remove(watchKey.getEventStreamRef()); + } + } + + void waitForEventSource() { + synchronized (watchKeysLock) { + if (isOpen() && eventStreamToWatchKey.isEmpty()) { + try { + watchKeysLock.wait(); + } catch (InterruptedException ignore) {} + } + } + } + + @Override + void implClose() { + synchronized (watchKeysLock) { + eventStreamToWatchKey.clear(); + dirKeyToWatchKey.forEach((key, watchKey) -> watchKey.invalidate()); + dirKeyToWatchKey.clear(); + watchKeysLock.notify(); // Let waitForEventSource() go if it was waiting + runLoopThread.runLoopStop(); // Force exit from CFRunLoopRun() + } + } + + private static void traceLine(final String text) { + logger.finest("NATIVE trace: " + text); + } + + private class CFRunLoopThread extends Thread { + // Native reference to the CFRunLoop object of the watch service run loop. + private long runLoopRef; + + public CFRunLoopThread() { + super("FileSystemWatcher"); + } + + synchronized void waitForRunLoopRef() throws InterruptedException { + if (runLoopRef == 0) + runLoopThread.wait(); // ...for CFRunLoopRef to become available + } + + long getRunLoopRef() { + return runLoopRef; + } + + synchronized void runLoopStop() { + if (runLoopRef != 0) { + // The run loop may have stuck in CFRunLoopRun() even though all of its input sources + // have been removed. Need to terminate it explicitly so that it can run to completion. + MacOSXWatchService.CFRunLoopStop(runLoopRef); + } + } + + @Override + public void run() { + synchronized (this) { + runLoopRef = CFRunLoopGetCurrent(); + notify(); + } + + while (isOpen()) { + CFRunLoopRun(MacOSXWatchService.this); + waitForEventSource(); + } + + synchronized (this) { + runLoopRef = 0; // CFRunLoopRef is no longer usable when the loop has been terminated + } + } + } + + private void checkIsOpen() { + if (!isOpen()) + throw new ClosedWatchServiceException(); + } + + private Object checkPath(UnixPath dir) throws IOException { + if (dir == null) + throw new NullPointerException("No path to watch"); + + UnixFileAttributes attrs; + try { + attrs = UnixFileAttributes.get(dir, true); + } catch (UnixException x) { + throw x.asIOException(dir); + } + + if (!attrs.isDirectory()) + throw new NotDirectoryException(dir.getPathForExceptionMessage()); + + final Object fileKey = attrs.fileKey(); + if (fileKey == null) + throw new AssertionError("File keys must be supported"); + + return fileKey; + } + + private enum FSEventKind { + CREATE, MODIFY, DELETE, OVERFLOW; + + public static FSEventKind of(final WatchEvent.Kind watchEventKind) { + if (StandardWatchEventKinds.ENTRY_CREATE == watchEventKind) { + return CREATE; + } else if (StandardWatchEventKinds.ENTRY_MODIFY == watchEventKind) { + return MODIFY; + } else if (StandardWatchEventKinds.ENTRY_DELETE == watchEventKind) { + return DELETE; + } else if (StandardWatchEventKinds.OVERFLOW == watchEventKind) { + return OVERFLOW; + } else { + throw new UnsupportedOperationException(watchEventKind.name()); + } + } + + public static EnumSet setOf(final WatchEvent.Kind[] events) { + final EnumSet eventSet = EnumSet.noneOf(FSEventKind.class); + for (final WatchEvent.Kind event: events) { + if (event == null) { + throw new NullPointerException("An element in event set is 'null'"); + } else if (event == StandardWatchEventKinds.OVERFLOW) { + continue; + } + + eventSet.add(FSEventKind.of(event)); + } + + if (eventSet.isEmpty()) + throw new IllegalArgumentException("No events to register"); + + return eventSet; + } + + } + + private enum WatchModifier { + FILE_TREE, SENSITIVITY_HIGH, SENSITIVITY_MEDIUM, SENSITIVITY_LOW; + + public static WatchModifier of(final WatchEvent.Modifier watchEventModifier) { + if (ExtendedOptions.FILE_TREE.matches(watchEventModifier)) { + return FILE_TREE; + } if (ExtendedOptions.SENSITIVITY_HIGH.matches(watchEventModifier)) { + return SENSITIVITY_HIGH; + } if (ExtendedOptions.SENSITIVITY_MEDIUM.matches(watchEventModifier)) { + return SENSITIVITY_MEDIUM; + } if (ExtendedOptions.SENSITIVITY_LOW.matches(watchEventModifier)) { + return SENSITIVITY_LOW; + } else { + throw new UnsupportedOperationException(watchEventModifier.name()); + } + } + + public static EnumSet setOf(final WatchEvent.Modifier[] modifiers) { + final EnumSet modifierSet = EnumSet.noneOf(WatchModifier.class); + for (final WatchEvent.Modifier modifier : modifiers) { + if (modifier == null) + throw new NullPointerException("An element in modifier set is 'null'"); + + modifierSet.add(WatchModifier.of(modifier)); + } + + return modifierSet; + } + + public static double sensitivityOf(final EnumSet modifiers) { + if (modifiers.contains(SENSITIVITY_HIGH)) { + return 0.1; + } else if (modifiers.contains(SENSITIVITY_LOW)) { + return 1; + } else { + return 0.5; // aka SENSITIVITY_MEDIUM + } + } + } + + private static class MacOSXWatchKey extends AbstractWatchKey { + private static final Unsafe unsafe = Unsafe.getUnsafe(); + + private static final long kFSEventStreamEventFlagMustScanSubDirs = 0x00000001; + private static final long kFSEventStreamEventFlagRootChanged = 0x00000020; + + private final Path relativeRootPath; + + // Full path to this key's watch root directory. + private final Path realRootPath; + private final int realRootPathLength; + private final Object rootPathKey; + + // Kinds of events to be reported. + private EnumSet eventsToWatch; + + // Should events in directories below realRootPath reported? + private boolean watchFileTree; + + // Native FSEventStreamRef as returned by FSEventStreamCreate(). + private long eventStreamRef; + private final Object eventStreamRefLock = new Object(); + + private final DirectoryTreeSnapshot directoryTreeSnapshot = new DirectoryTreeSnapshot(); + + MacOSXWatchKey(final MacOSXWatchService watchService, final UnixPath dir, final Object rootPathKey) throws IOException { + super(dir, watchService); + this.relativeRootPath = dir.getFileSystem().getPath(""); + this.realRootPath = dir.toRealPath().normalize(); + this.realRootPathLength = realRootPath.toString().length() + 1; + this.rootPathKey = rootPathKey; + } + + synchronized void enable(final CFRunLoopThread runLoopThread, + final EnumSet eventsToWatch, + final EnumSet modifierSet) throws IOException { + assert(!isValid()); + + this.eventsToWatch = eventsToWatch; + this.watchFileTree = modifierSet.contains(WatchModifier.FILE_TREE); + + directoryTreeSnapshot.build(); + + synchronized (eventStreamRefLock) { + final int kFSEventStreamCreateFlagWatchRoot = 0x00000004; + eventStreamRef = MacOSXWatchService.eventStreamCreate( + realRootPath.toString(), + WatchModifier.sensitivityOf(modifierSet), + kFSEventStreamCreateFlagWatchRoot); + + if (eventStreamRef == 0) + throw new IOException("Unable to create FSEventStream"); + + MacOSXWatchService.eventStreamSchedule(eventStreamRef, runLoopThread.getRunLoopRef()); + } + } + + synchronized void disable() { + invalidate(); + directoryTreeSnapshot.reset(); + } + + synchronized void handleEvents(final String[] paths, long eventFlagsPtr) { + if (paths == null) { + reportOverflow(null); + return; + } + + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("handleEvents(): will handle " + paths.length + " events"); + + final Set dirsToScan = new LinkedHashSet<>(paths.length); + final Set dirsToScanRecursively = new LinkedHashSet<>(); + collectDirsToScan(paths, eventFlagsPtr, dirsToScan, dirsToScanRecursively); + + for (final Path recurseDir : dirsToScanRecursively) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("handleEvents(): scanning directory recursively " + recurseDir); + dirsToScan.removeIf(dir -> dir.startsWith(recurseDir)); + assert(watchFileTree); + directoryTreeSnapshot.update(recurseDir, true); + } + + for (final Path dir : dirsToScan) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("handleEvents(): scanning directory " + dir); + directoryTreeSnapshot.update(dir, false); + } + } + + private Path toRelativePath(final String absPath) { + return (absPath.length() > realRootPathLength) + ? relativeRootPath.getFileSystem().getPath(absPath.substring(realRootPathLength)) + : relativeRootPath; + } + + private void collectDirsToScan(final String[] paths, long eventFlagsPtr, + final Set dirsToScan, + final Set dirsToScanRecursively) { + for (final String absPath : paths) { + if (absPath == null) { + reportOverflow(null); + continue; + } + + Path path = toRelativePath(absPath); + + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("handleEvents(): event path name " + path); + + if (!watchFileTree && !relativeRootPath.equals(path)) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("handleEvents(): skipping event for a nested directory"); + continue; + } + + final int flags = unsafe.getInt(eventFlagsPtr); + if ((flags & kFSEventStreamEventFlagRootChanged) != 0) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("handleEvents(): watch root changed, path=" + path); + cancel(); + signal(); + break; + } else if ((flags & kFSEventStreamEventFlagMustScanSubDirs) != 0 && watchFileTree) { + dirsToScanRecursively.add(path); + } else { + dirsToScan.add(path); + } + + final long SIZEOF_FS_EVENT_STREAM_EVENT_FLAGS = 4L; // FSEventStreamEventFlags is UInt32 + eventFlagsPtr += SIZEOF_FS_EVENT_STREAM_EVENT_FLAGS; + } + } + + /** + * Represents a snapshot of a directory tree. + * The snapshot includes subdirectories iff watchFileTree is true. + */ + private class DirectoryTreeSnapshot { + private final HashMap snapshots; + + DirectoryTreeSnapshot() { + this.snapshots = new HashMap<>(watchFileTree ? 256 : 1); + } + + void build() throws IOException { + final Queue pathToDo = new ArrayDeque<>(); + pathToDo.offer(relativeRootPath); + + while (!pathToDo.isEmpty()) { + final Path path = pathToDo.poll(); + try { + createForOneDirectory(path, watchFileTree ? pathToDo : null); + } catch (IOException e) { + final boolean exceptionForRootPath = relativeRootPath.equals(path); + if (exceptionForRootPath) + throw e; // report to the user as the watch root may have disappeared + + // Ignore for sub-directories as some may have been removed during the scan. + // That's OK, those kinds of changes in the directory hierarchy is what + // WatchService is used for. However, it's impossible to catch all changes + // at this point, so we may fail to report some events that had occurred before + // FSEventStream has been created to watch for those changes. + } + } + } + + private DirectorySnapshot createForOneDirectory( + final Path directory, + final Queue newDirectoriesFound) throws IOException { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("Creating snapshot for one directory " + directory); + + final DirectorySnapshot snapshot = DirectorySnapshot.create(getRealRootPath(), directory); + snapshots.put(directory, snapshot); + if (newDirectoriesFound != null) + snapshot.forEachDirectory(newDirectoriesFound::offer); + + return snapshot; + } + + void reset() { + snapshots.clear(); + } + + void update(final Path directory, final boolean recurse) { + if (!recurse) { + directoryTreeSnapshot.update(directory, null); + } else { + final Queue pathToDo = new ArrayDeque<>(); + pathToDo.offer(directory); + while (!pathToDo.isEmpty()) { + final Path dir = pathToDo.poll(); + directoryTreeSnapshot.update(dir, pathToDo); + } + } + } + + private void update(final Path directory, final Queue modifiedDirs) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("update for " + directory); + final DirectorySnapshot snapshot = snapshots.get(directory); + if (snapshot == null) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("no snapshot for directory " + directory); + // This means that we missed a notification about an update of our parent. + // Report overflow (who knows what else we weren't notified about?) and + // do our best to recover from this mess by queueing our parent for an update. + reportOverflow(directory); + if (modifiedDirs != null) + modifiedDirs.offer(getParentOf(directory)); + + return; + } + + // FSEvents API does not generate events for directories that got moved from/to the directory + // being watched, so we have to watch for new/deleted directories ourselves. If we still + // receive an event for, say, one of the new directories, it won't be reported again as this + // will count as refresh with no modifications detected. + final Queue createdDirs = new ArrayDeque<>(); + final Queue deletedDirs = new ArrayDeque<>(); + snapshot.update(MacOSXWatchKey.this, createdDirs, deletedDirs, modifiedDirs); + + handleNewDirectories(createdDirs); + handleDeletedDirectories(deletedDirs); + } + + private Path getParentOf(final Path directory) { + Path parent = directory.getParent(); + if (parent == null) + parent = relativeRootPath; + return parent; + } + + private void handleDeletedDirectories(final Queue deletedDirs) { + // We don't know the exact sequence in which these were deleted, + // so at least maintain a sensible order, i.e. children are deleted before the parent. + final LinkedList dirsToReportDeleted = new LinkedList<>(); + while (!deletedDirs.isEmpty()) { + final Path path = deletedDirs.poll(); + dirsToReportDeleted.addFirst(path); + final DirectorySnapshot directorySnapshot = snapshots.get(path); + if (directorySnapshot != null) // May be null if we're not watching the whole file tree. + directorySnapshot.forEachDirectory(deletedDirs::offer); + } + + for(final Path path : dirsToReportDeleted) { + final DirectorySnapshot directorySnapshot = snapshots.remove(path); + if (directorySnapshot != null) { + // This is needed in case a directory tree was moved (mv -f) out of this directory. + directorySnapshot.forEachFile(MacOSXWatchKey.this::reportDeleted); + } + reportDeleted(path); + } + } + + private void handleNewDirectories(final Queue createdDirs) { + // We don't know the exact sequence in which these were created, + // so at least maintain a sensible order, i.e. the parent created before its children. + while (!createdDirs.isEmpty()) { + final Path path = createdDirs.poll(); + reportCreated(path); + if (watchFileTree) { + if (!snapshots.containsKey(path)) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("Just noticed yet another directory: " + path); + // Happens when a directory tree gets moved (mv -f) into this directory. + DirectorySnapshot newSnapshot = null; + try { + newSnapshot = createForOneDirectory(path, createdDirs); + } catch(IOException ignore) { } + + if (newSnapshot != null) + newSnapshot.forEachFile(MacOSXWatchKey.this::reportCreated); + } + } + } + } + } + + /** + * Represents a snapshot of a directory with a millisecond precision timestamp of the last modification. + */ + private static class DirectorySnapshot { + // Path to this directory relative to the watch root. + private final Path directory; + + // Maps file names to their attributes. + private final Map files; + + // A counter to keep track of files that have disappeared since the last run. + private long currentTick; + + private DirectorySnapshot(final Path directory) { + this.directory = directory; + this.files = new HashMap<>(); + } + + static DirectorySnapshot create(final Path realRootPath, final Path directory) throws IOException { + final DirectorySnapshot snapshot = new DirectorySnapshot(directory); + try (final DirectoryStream directoryStream = Files.newDirectoryStream(realRootPath.resolve(directory))) { + for (final Path file : directoryStream) { + try { + final BasicFileAttributes attrs = Files.readAttributes(file, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS); + final Entry entry = new Entry(attrs.isDirectory(), attrs.lastModifiedTime().toMillis(), 0); + snapshot.files.put(file.getFileName(), entry); + } catch (IOException ignore) {} + } + } catch (DirectoryIteratorException e) { + throw e.getCause(); + } + + return snapshot; + } + + void forEachDirectory(final Consumer consumer) { + files.forEach((path, entry) -> { if (entry.isDirectory) consumer.accept(directory.resolve(path)); } ); + } + + void forEachFile(final Consumer consumer) { + files.forEach((path, entry) -> { if (!entry.isDirectory) consumer.accept(directory.resolve(path)); } ); + } + + void update(final MacOSXWatchKey watchKey, + final Queue createdDirs, + final Queue deletedDirs, + final Queue modifiedDirs) { + currentTick++; + + try (final DirectoryStream directoryStream = Files.newDirectoryStream(watchKey.getRealRootPath().resolve(directory))) { + for (final Path file : directoryStream) { + try { + final BasicFileAttributes attrs + = Files.readAttributes(file, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS); + final Path fileName = file.getFileName(); + final Entry entry = files.get(fileName); + final boolean isNew = (entry == null); + final long lastModified = attrs.lastModifiedTime().toMillis(); + final Path relativePath = directory.resolve(fileName); + + if (attrs.isDirectory()) { + if (isNew) { + files.put(fileName, new Entry(true, lastModified, currentTick)); + if (createdDirs != null) createdDirs.offer(relativePath); + } else { + if (!entry.isDirectory) { // Used to be a file, now a directory + if (createdDirs != null) createdDirs.offer(relativePath); + + files.put(fileName, new Entry(true, lastModified, currentTick)); + watchKey.reportDeleted(relativePath); + } else if (entry.isModified(lastModified)) { + if (modifiedDirs != null) modifiedDirs.offer(relativePath); + watchKey.reportModified(relativePath); + } + entry.update(lastModified, currentTick); + } + } else { + if (isNew) { + files.put(fileName, new Entry(false, lastModified, currentTick)); + watchKey.reportCreated(relativePath); + } else { + if (entry.isDirectory) { // Used to be a directory, now a file. + if (deletedDirs != null) deletedDirs.offer(relativePath); + + files.put(fileName, new Entry(false, lastModified, currentTick)); + watchKey.reportCreated(directory.resolve(fileName)); + } else if (entry.isModified(lastModified)) { + watchKey.reportModified(relativePath); + } + entry.update(lastModified, currentTick); + } + } + } catch (IOException ignore) { + // Simply skip the file we couldn't read; it'll get marked as deleted later. + } + } + } catch (IOException | DirectoryIteratorException ignore) { + // Most probably this directory has just been deleted; our parent will notice that. + } + + checkDeleted(watchKey, deletedDirs); + } + + private void checkDeleted(final MacOSXWatchKey watchKey, final Queue deletedDirs) { + final Iterator> it = files.entrySet().iterator(); + while (it.hasNext()) { + final Map.Entry mapEntry = it.next(); + final Entry entry = mapEntry.getValue(); + if (entry.lastTickCount != currentTick) { + final Path file = mapEntry.getKey(); + it.remove(); + + if (entry.isDirectory) { + if (deletedDirs != null) deletedDirs.offer(directory.resolve(file)); + } else { + watchKey.reportDeleted(directory.resolve(file)); + } + } + } + } + + /** + * Information about an entry in a directory. + */ + private static class Entry { + private long lastModified; + private long lastTickCount; + private final boolean isDirectory; + + Entry(final boolean isDirectory, final long lastModified, final long lastTickCount) { + this.lastModified = lastModified; + this.lastTickCount = lastTickCount; + this.isDirectory = isDirectory; + } + + boolean isModified(final long lastModified) { + return (this.lastModified != lastModified); + } + + void update(final long lastModified, final long lastTickCount) { + this.lastModified = lastModified; + this.lastTickCount = lastTickCount; + } + } + } + + private void reportCreated(final Path path) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("About to report CREATE for path " + path); + + if (eventsToWatch.contains(FSEventKind.CREATE)) + signalEvent(StandardWatchEventKinds.ENTRY_CREATE, path); + } + + private void reportDeleted(final Path path) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("About to report DELETE for path " + path); + + if (eventsToWatch.contains(FSEventKind.DELETE)) + signalEvent(StandardWatchEventKinds.ENTRY_DELETE, path); + } + + private void reportModified(final Path path) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("About to report MODIFIED for path " + path); + + if (eventsToWatch.contains(FSEventKind.MODIFY)) + signalEvent(StandardWatchEventKinds.ENTRY_MODIFY, path); + } + + private void reportOverflow(final Path path) { + if (logger.isLoggable(PlatformLogger.Level.FINEST)) + logger.finest("About to report OVERFLOW for path " + path); + + if (eventsToWatch.contains(FSEventKind.OVERFLOW)) + signalEvent(StandardWatchEventKinds.OVERFLOW, path); + } + + public Object getRootPathKey() { + return rootPathKey; + } + + public Path getRealRootPath() { + return realRootPath; + } + + @Override + public boolean isValid() { + synchronized (eventStreamRefLock) { + return eventStreamRef != 0; + } + } + + @Override + public void cancel() { + if (!isValid()) return; + + // First, must stop the corresponding run loop: + ((MacOSXWatchService) watcher()).cancel(this); + + // Next, invalidate the corresponding native FSEventStream. + invalidate(); + } + + void invalidate() { + synchronized (eventStreamRefLock) { + if (isValid()) { + eventStreamStop(eventStreamRef); + eventStreamRef = 0; + } + } + } + + long getEventStreamRef() { + synchronized (eventStreamRefLock) { + assert (isValid()); + return eventStreamRef; + } + } + } + + /* native methods */ + + private static native long eventStreamCreate(String dir, double latencyInSeconds, int flags); + private static native void eventStreamSchedule(long eventStreamRef, long runLoopRef); + private static native void eventStreamStop(long eventStreamRef); + private static native long CFRunLoopGetCurrent(); + private static native void CFRunLoopRun(final MacOSXWatchService watchService); + private static native void CFRunLoopStop(long runLoopRef); + + private static native void initIDs(); + + static { + tracingEnabled = logger.isLoggable(PlatformLogger.Level.FINEST); + System.loadLibrary("nio"); + initIDs(); + } +} diff --git a/src/java.base/macosx/native/libnio/fs/MacOSXWatchService.c b/src/java.base/macosx/native/libnio/fs/MacOSXWatchService.c new file mode 100644 index 000000000000..72c08c9608b2 --- /dev/null +++ b/src/java.base/macosx/native/libnio/fs/MacOSXWatchService.c @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2021, 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "jni.h" +#include "jni_util.h" +#include "nio_util.h" + +#include + +#include +#include + +#if defined(__GNUC__) || defined(__clang__) +# ifndef ATTRIBUTE_PRINTF +# define ATTRIBUTE_PRINTF(fmt,vargs) __attribute__((format(printf, fmt, vargs))) +# endif +#endif + +static void +traceLine(JNIEnv* env, const char* fmt, ...) ATTRIBUTE_PRINTF(2, 3); + +// Controls exception stack trace output and debug trace. +// Set by raising the logging level of sun.nio.fs.MacOSXWatchService to or above FINEST. +static jboolean tracingEnabled; + +static jmethodID callbackMID; // MacOSXWatchService.callback() +static __thread jobject watchService; // The instance of MacOSXWatchService that is associated with this thread + + +JNIEXPORT void JNICALL +Java_sun_nio_fs_MacOSXWatchService_initIDs(JNIEnv* env, __unused jclass clazz) +{ + jfieldID tracingEnabledFieldID = (*env)->GetStaticFieldID(env, clazz, "tracingEnabled", "Z"); + CHECK_NULL(tracingEnabledFieldID); + tracingEnabled = (*env)->GetStaticBooleanField(env, clazz, tracingEnabledFieldID); + if ((*env)->ExceptionCheck(env)) { + (*env)->ExceptionDescribe(env); + } + + callbackMID = (*env)->GetMethodID(env, clazz, "callback", "(J[Ljava/lang/String;J)V"); +} + +extern CFStringRef toCFString(JNIEnv *env, jstring javaString); + +static void +traceLine(JNIEnv* env, const char* fmt, ...) +{ + if (tracingEnabled) { + va_list vargs; + va_start(vargs, fmt); + char* buf = (char*)malloc(1024); + vsnprintf(buf, 1024, fmt, vargs); + const jstring text = JNU_NewStringPlatform(env, buf); + free(buf); + va_end(vargs); + + jboolean ignoreException; + JNU_CallStaticMethodByName(env, &ignoreException, "sun/nio/fs/MacOSXWatchService", "traceLine", "(Ljava/lang/String;)V", text); + } +} + +static jboolean +convertToJavaStringArray(JNIEnv* env, char **eventPaths, + const jsize numEventsToReport, jobjectArray javaEventPathsArray) +{ + for (jsize i = 0; i < numEventsToReport; i++) { + const jstring path = JNU_NewStringPlatform(env, eventPaths[i]); + CHECK_NULL_RETURN(path, FALSE); + (*env)->SetObjectArrayElement(env, javaEventPathsArray, i, path); + } + + return JNI_TRUE; +} + +static void +callJavaCallback(JNIEnv* env, jlong streamRef, jobjectArray javaEventPathsArray, jlong eventFlags) +{ + if (callbackMID != NULL && watchService != NULL) { + // We are called on the run loop thread, so it's OK to use the thread-local reference + // to the watch service. + (*env)->CallVoidMethod(env, watchService, callbackMID, streamRef, javaEventPathsArray, eventFlags); + } +} + +/** + * Callback that is invoked on the run loop thread and informs of new file-system events from an FSEventStream. + */ +static void +callback(__unused ConstFSEventStreamRef streamRef, + __unused void *clientCallBackInfo, + size_t numEventsTotal, + void *eventPaths, + const FSEventStreamEventFlags eventFlags[], + __unused const FSEventStreamEventId eventIds[]) +{ + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + if (!env) { // Shouldn't happen as run loop starts from Java code + return; + } + + // We can get more events at once than the number of Java array elements, + // so report them in chunks. + const size_t MAX_EVENTS_TO_REPORT_AT_ONCE = (INT_MAX - 2); + + jboolean success = JNI_TRUE; + for(size_t eventIndex = 0; success && (eventIndex < numEventsTotal); ) { + const size_t numEventsRemaining = (numEventsTotal - eventIndex); + const jsize numEventsToReport = (numEventsRemaining > MAX_EVENTS_TO_REPORT_AT_ONCE) + ? MAX_EVENTS_TO_REPORT_AT_ONCE + : numEventsRemaining; + + const jboolean localFramePushed = ((*env)->PushLocalFrame(env, numEventsToReport + 5) == JNI_OK); + success = localFramePushed; + + jobjectArray javaEventPathsArray = NULL; + if (success) { + javaEventPathsArray = (*env)->NewObjectArray(env, (jsize)numEventsToReport, JNU_ClassString(env), NULL); + success = (javaEventPathsArray != NULL); + } + + if (success) { + success = convertToJavaStringArray(env, &((char**)eventPaths)[eventIndex], numEventsToReport, javaEventPathsArray); + } + + callJavaCallback(env, (jlong)streamRef, javaEventPathsArray, (jlong)&eventFlags[eventIndex]); + + if ((*env)->ExceptionCheck(env)) { + if (tracingEnabled) (*env)->ExceptionDescribe(env); + } + + if (localFramePushed) { + (*env)->PopLocalFrame(env, NULL); + } + + eventIndex += numEventsToReport; + } +} + +/** + * Creates a new FSEventStream and returns FSEventStreamRef for it. + */ +JNIEXPORT jlong JNICALL +Java_sun_nio_fs_MacOSXWatchService_eventStreamCreate(JNIEnv* env, __unused jclass clazz, + jstring dir, jdouble latencyInSeconds, jint flags) +{ + const CFStringRef path = toCFString(env, dir); + CHECK_NULL_RETURN(path, 0); + const CFArrayRef pathsToWatch = CFArrayCreate(NULL, (const void **) &path, 1, NULL); + CHECK_NULL_RETURN(pathsToWatch, 0); + + const FSEventStreamRef stream = FSEventStreamCreate( + NULL, + &callback, + NULL, + pathsToWatch, + kFSEventStreamEventIdSinceNow, + (CFAbsoluteTime) latencyInSeconds, + flags + ); + + traceLine(env, "created event stream 0x%p", stream); + + return (jlong)stream; +} + + +/** + * Schedules the given FSEventStream on the run loop of the current thread. Starts the stream + * so that the run loop can receive events from the stream. + */ +JNIEXPORT void JNICALL +Java_sun_nio_fs_MacOSXWatchService_eventStreamSchedule(__unused JNIEnv* env, __unused jclass clazz, + jlong eventStreamRef, jlong runLoopRef) +{ + const FSEventStreamRef stream = (FSEventStreamRef)eventStreamRef; + const CFRunLoopRef runLoop = (CFRunLoopRef)runLoopRef; + + FSEventStreamScheduleWithRunLoop(stream, runLoop, kCFRunLoopDefaultMode); + FSEventStreamStart(stream); + + traceLine(env, "scheduled stream 0x%p on thread 0x%p", stream, CFRunLoopGetCurrent()); +} + +/** + * Performs the steps necessary to dispose of the given FSEventStreamRef. + * The stream must have been started and scheduled with a run loop. + */ +JNIEXPORT void JNICALL +Java_sun_nio_fs_MacOSXWatchService_eventStreamStop(__unused JNIEnv* env, __unused jclass clazz, jlong eventStreamRef) +{ + const FSEventStreamRef streamRef = (FSEventStreamRef)eventStreamRef; + + FSEventStreamStop(streamRef); // Unregister with the FS Events service. No more callbacks from this stream + FSEventStreamInvalidate(streamRef); // Unschedule from any runloops + FSEventStreamRelease(streamRef); // Decrement the stream's refcount +} + +/** + * Returns the CFRunLoop object for the current thread. + */ +JNIEXPORT jlong JNICALL +Java_sun_nio_fs_MacOSXWatchService_CFRunLoopGetCurrent(__unused JNIEnv* env, __unused jclass clazz) +{ + const CFRunLoopRef currentRunLoop = CFRunLoopGetCurrent(); + traceLine(env, "get current run loop: 0x%p", currentRunLoop); + return (jlong)currentRunLoop; +} + +/** + * Simply calls CFRunLoopRun() to run current thread's run loop for as long as there are event sources + * attached to it. + */ +JNIEXPORT void JNICALL +Java_sun_nio_fs_MacOSXWatchService_CFRunLoopRun(__unused JNIEnv* env, __unused jclass clazz, jlong watchServiceObject) +{ + traceLine(env, "running run loop on 0x%p", CFRunLoopGetCurrent()); + + // Thread-local pointer to the WatchService instance will be used by the callback + // on this thread. + watchService = (*env)->NewGlobalRef(env, (jobject)watchServiceObject); + CFRunLoopRun(); + (*env)->DeleteGlobalRef(env, (jobject)watchService); + watchService = NULL; + + traceLine(env, "run loop done on 0x%p", CFRunLoopGetCurrent()); +} + +JNIEXPORT void JNICALL +Java_sun_nio_fs_MacOSXWatchService_CFRunLoopStop(__unused JNIEnv* env, __unused jclass clazz, jlong runLoopRef) +{ + traceLine(env, "stopping run loop 0x%p", (void*)runLoopRef); + CFRunLoopStop((CFRunLoopRef)runLoopRef); +} diff --git a/src/java.base/macosx/native/libnio/fs/UTIFileTypeDetector.c b/src/java.base/macosx/native/libnio/fs/UTIFileTypeDetector.c index 5e9451e850c1..2820bafbce9a 100644 --- a/src/java.base/macosx/native/libnio/fs/UTIFileTypeDetector.c +++ b/src/java.base/macosx/native/libnio/fs/UTIFileTypeDetector.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ * If a memory error occurs, and OutOfMemoryError is thrown and * NULL is returned. */ -static CFStringRef toCFString(JNIEnv *env, jstring javaString) +CFStringRef toCFString(JNIEnv *env, jstring javaString) { if (javaString == NULL) { return NULL; diff --git a/src/java.base/share/classes/com/jetbrains/base/JBRApiModule.java b/src/java.base/share/classes/com/jetbrains/base/JBRApiModule.java new file mode 100644 index 000000000000..49fca1b8c81f --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/base/JBRApiModule.java @@ -0,0 +1,43 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.base; + +import com.jetbrains.internal.JBRApi; + +import java.lang.invoke.MethodHandles; + +/** + * This class contains mapping between JBR API interfaces and implementation in {@code java.base} module. + */ +public class JBRApiModule { + static { + JBRApi.registerModule(MethodHandles.lookup(), JBRApiModule.class.getModule()::addExports) + .service("com.jetbrains.JBR$ServiceApi") + .withStatic("getService", "getService", "com.jetbrains.internal.JBRApi") + .service("com.jetbrains.Jstack") + .withStatic("includeInfoFrom", "$$jb$additionalInfoForJstack", "java.lang.Throwable"); + } +} diff --git a/src/java.base/share/classes/com/jetbrains/bootstrap/JBRApiBootstrap.java b/src/java.base/share/classes/com/jetbrains/bootstrap/JBRApiBootstrap.java new file mode 100644 index 000000000000..53f893c2e31b --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/bootstrap/JBRApiBootstrap.java @@ -0,0 +1,70 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.bootstrap; + +import com.jetbrains.internal.JBRApi; +import jdk.internal.loader.ClassLoaders; + +import java.lang.invoke.MethodHandles; + +/** + * Bootstrap class, used to initialize {@linkplain JBRApi JBR API}. + */ +public class JBRApiBootstrap { + private JBRApiBootstrap() {} + + /** + * Classes that register JBR API implementation for their modules. + */ + private static final String[] MODULES = { + "com.jetbrains.base.JBRApiModule", + "com.jetbrains.desktop.JBRApiModule" + }; + + /** + * Called from static initializer of {@link com.jetbrains.JBR}. + * @param outerLookup lookup context inside {@code jetbrains.api} module + * @return implementation for {@link com.jetbrains.JBR.ServiceApi} interface + */ + public static synchronized Object bootstrap(MethodHandles.Lookup outerLookup) { + if (!System.getProperty("jetbrains.api.enabled", "true").equalsIgnoreCase("true")) return null; + try { + Class apiInterface = outerLookup.findClass("com.jetbrains.JBR$ServiceApi"); + if (!outerLookup.hasFullPrivilegeAccess() || + outerLookup.lookupClass().getPackage() != apiInterface.getPackage()) { + throw new IllegalArgumentException("Lookup must be full-privileged from the com.jetbrains package: " + + outerLookup.lookupClass().getName()); + } + JBRApi.init(outerLookup); + ClassLoader classLoader = ClassLoaders.platformClassLoader(); + for (String m : MODULES) Class.forName(m, true, classLoader); + return JBRApi.getService(apiInterface); + } catch(ClassNotFoundException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/java.base/share/classes/com/jetbrains/internal/ASMUtils.java b/src/java.base/share/classes/com/jetbrains/internal/ASMUtils.java new file mode 100644 index 000000000000..af28b5c0ac86 --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/ASMUtils.java @@ -0,0 +1,138 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import jdk.internal.org.objectweb.asm.ClassVisitor; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Type; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.ClassFileFormatVersion; +import java.lang.reflect.Method; + +import static jdk.internal.org.objectweb.asm.Opcodes.*; + +/** + * Utility class that helps with bytecode generation + */ +class ASMUtils { + + private static final MethodHandle genericSignatureGetter; + static { + try { + genericSignatureGetter = MethodHandles.privateLookupIn(Method.class, MethodHandles.lookup()) + .findVirtual(Method.class, "getGenericSignature", MethodType.methodType(String.class)); + } catch (NoSuchMethodException | IllegalAccessException e) { + throw new Error(e); + } + } + + public static final int CLASSFILE_VERSION = ClassFileFormatVersion.latest().major(); + + public static void generateUnsupportedMethod(ClassVisitor writer, Method interfaceMethod) { + InternalMethodInfo methodInfo = getInternalMethodInfo(interfaceMethod); + MethodVisitor p = writer.visitMethod(ACC_PUBLIC | ACC_FINAL, methodInfo.name(), + methodInfo.descriptor(), methodInfo.genericSignature(), methodInfo.exceptionNames()); + p.visitTypeInsn(NEW, "java/lang/UnsupportedOperationException"); + p.visitInsn(DUP); + p.visitLdcInsn("No implementation found for this method"); + p.visitMethodInsn(INVOKESPECIAL, "java/lang/UnsupportedOperationException", "", "(Ljava/lang/String;)V", false); + p.visitInsn(ATHROW); + p.visitMaxs(-1, -1); + } + + public static void logDeprecated(MethodVisitor writer, String message) { + writer.visitTypeInsn(NEW, "java/lang/Exception"); + writer.visitInsn(DUP); + writer.visitLdcInsn(message); + writer.visitMethodInsn(INVOKESPECIAL, "java/lang/Exception", "", "(Ljava/lang/String;)V", false); + writer.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V", false); + } + + protected record InternalMethodInfo(String name, String descriptor, String genericSignature, + String[] exceptionNames) {} + + public static InternalMethodInfo getInternalMethodInfo(Method method) { + try { + return new InternalMethodInfo( + method.getName(), + Type.getMethodDescriptor(method), + (String) genericSignatureGetter.invoke(method), + getExceptionNames(method)); + } catch (Throwable e) { + throw new Error(e); + } + } + + private static String[] getExceptionNames(Method method) { + Class[] exceptionTypes = method.getExceptionTypes(); + String[] exceptionNames = new String[exceptionTypes.length]; + for (int i = 0; i < exceptionTypes.length; i++) { + exceptionNames[i] = Type.getInternalName(exceptionTypes[i]); + } + return exceptionNames; + } + + public static int getParameterSize(Class c) { + if (c == Void.TYPE) { + return 0; + } else if (c == Long.TYPE || c == Double.TYPE) { + return 2; + } + return 1; + } + + public static int getLoadOpcode(Class c) { + if (c == Void.TYPE) { + throw new InternalError("Unexpected void type of load opcode"); + } + return ILOAD + getOpcodeOffset(c); + } + + public static int getReturnOpcode(Class c) { + if (c == Void.TYPE) { + return RETURN; + } + return IRETURN + getOpcodeOffset(c); + } + + public static int getOpcodeOffset(Class c) { + if (c.isPrimitive()) { + if (c == Long.TYPE) { + return 1; + } else if (c == Float.TYPE) { + return 2; + } else if (c == Double.TYPE) { + return 3; + } + return 0; + } else { + return 4; + } + } +} diff --git a/src/java.base/share/classes/com/jetbrains/internal/JBRApi.java b/src/java.base/share/classes/com/jetbrains/internal/JBRApi.java new file mode 100644 index 000000000000..dd45238c5f1d --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/JBRApi.java @@ -0,0 +1,352 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import sun.security.action.GetBooleanAction; + +import java.io.Serial; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.BiFunction; + +import static java.lang.invoke.MethodHandles.Lookup; + +/** + * JBR API is a collection of JBR-specific features that are accessed by client though + * {@link com.jetbrains.JBR jetbrains.api} module. Actual implementation is linked by + * JBR at runtime by generating {@linkplain Proxy proxy objects}. + * Mapping between interfaces and implementation code is defined in + * {@linkplain com.jetbrains.bootstrap.JBRApiBootstrap#MODULES registry classes}. + *

    + * This class has most basic methods for working with JBR API and cache of generated proxies. + *

    + *

    How to add a new service

    + *
      + *
    1. Create your service interface in module {@link com.jetbrains.JBR jetbrains.api}: + *
      {@code
      + *         package com.jetbrains;
      + *
      + *         interface StringOptimizer {
      + *             void optimize(String string);
      + *         }
      + *         }
      + *
    2. + *
    3. Create an implementation inside JBR: + *
      {@link java.lang.String java.lang.String}:{@code
      + *         private static void optimizeInternal(String string) {
      + *             string.hash = 0;
      + *             string.hashIsZero = true;
      + *         }
      + *         }
      + *
    4. + *
    5. Register your service in corresponding + * {@linkplain com.jetbrains.bootstrap.JBRApiBootstrap#MODULES module registry class}: + *
      {@link com.jetbrains.base.JBRApiModule}:{@code
      + *         .service("com.jetbrains.StringOptimizer", null)
      + *             .withStatic("optimize", "java.lang.String", "optimizeInternal")
      + *         }
      + *
    6. + *
    7. You can also bind the interface to implementation class + * (without actually implementing the interface): + *
      {@link java.lang.String java.lang.String}:{@code
      + *         private static class StringOptimizerImpl {
      + *
      + *             private void optimize(String string) {
      + *                 string.hash = 0;
      + *                 string.hashIsZero = true;
      + *             }
      + *         }
      + *         }
      + *
      {@link com.jetbrains.base.JBRApiModule}:{@code
      + *         .service("com.jetbrains.StringOptimizer", "java.lang.String$StringOptimizerImpl")
      + *         }
      + *
    8. + *
    + *

    How to add a new proxy

    + * Registering a proxy is similar to registering a service: + *
    {@code
    + * .proxy("com.jetbrains.SomeProxy", "a.b.c.SomeProxyImpl")
    + * }
    + * Note that unlike service, proxy must have a target type. + * Also, proxy expects target object as a single constructor argument + * and can only be instantiated by JBR, there's no API that would allow + * user to directly create proxy object. + */ +public class JBRApi { + @SuppressWarnings("removal") + static final boolean VERBOSE = AccessController.doPrivileged(new GetBooleanAction("jetbrains.api.verbose")); + + private static final Map registeredProxyInfoByInterfaceName = new HashMap<>(); + private static final Map registeredProxyInfoByTargetName = new HashMap<>(); + private static final ConcurrentMap, Proxy> proxyByInterface = new ConcurrentHashMap<>(); + + /** + * lookup context inside {@code jetbrains.api} module + */ + static Lookup outerLookup; + /** + * Known service and proxy interfaces extracted from {@link com.jetbrains.JBR.Metadata} + */ + static Set knownServices, knownProxies; + + public static void init(Lookup outerLookup) { + JBRApi.outerLookup = outerLookup; + try { + Class metadataClass = outerLookup.findClass("com.jetbrains.JBR$Metadata"); + Lookup lookup = MethodHandles.privateLookupIn(metadataClass, outerLookup); + knownServices = Set.of((String[]) lookup.findStaticVarHandle(metadataClass, + "KNOWN_SERVICES", String[].class).get()); + knownProxies = Set.of((String[]) lookup.findStaticVarHandle(metadataClass, + "KNOWN_PROXIES", String[].class).get()); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + knownServices = Set.of(); + knownProxies = Set.of(); + } + if (VERBOSE) { + System.out.println("JBR API init\nKNOWN_SERVICES = " + knownServices + "\nKNOWN_PROXIES = " + knownProxies); + } + } + + /** + * @return fully supported service implementation for the given interface, or null + * @apiNote this method is a part of internal {@link com.jetbrains.JBR.ServiceApi} + * service, but is not directly exposed to user. + */ + public static T getService(Class interFace) { + Proxy p = getProxy(interFace); + return p != null && p.isSupported() ? p.getInstance() : null; + } + + /** + * @return proxy for the given interface, or {@code null} + */ + @SuppressWarnings("unchecked") + static Proxy getProxy(Class interFace) { + return (Proxy) proxyByInterface.computeIfAbsent(interFace, i -> { + RegisteredProxyInfo info = registeredProxyInfoByInterfaceName.get(i.getName()); + if (info == null) return null; + ProxyInfo resolved = ProxyInfo.resolve(info); + if (resolved == null) { + if (VERBOSE) { + System.err.println("Couldn't resolve proxy info: " + i.getName()); + } + return null; + } else return new Proxy<>(resolved); + }); + } + + /** + * @return true if given class represents a proxy interface. Even if {@code jetbrains.api} + * introduces new interfaces JBR is not aware of, these interfaces would still be detected + * by this method. + */ + static boolean isKnownProxyInterface(Class clazz) { + String name = clazz.getName(); + return registeredProxyInfoByInterfaceName.containsKey(name) || + knownServices.contains(name) || knownProxies.contains(name); + } + + /** + * Reverse lookup by proxy target type name. + * @return user-side interface for given implementation target type name. + */ + static Class getProxyInterfaceByTargetName(String targetName) { + RegisteredProxyInfo info = registeredProxyInfoByTargetName.get(targetName); + if (info == null) return null; + try { + return Class.forName(info.interfaceName(), true, + (info.type().isPublicApi() ? outerLookup : info.apiModule()).lookupClass().getClassLoader()); + } catch (ClassNotFoundException e) { + if (VERBOSE) e.printStackTrace(); + return null; + } + } + + public static InternalServiceBuilder internalServiceBuilder(Lookup interFace, String... targets) { + return new InternalServiceBuilder(new RegisteredProxyInfo( + interFace, interFace.lookupClass().getName(), targets, ProxyInfo.Type.INTERNAL_SERVICE, new ArrayList<>())); + } + + public static class InternalServiceBuilder { + + private final RegisteredProxyInfo info; + + private InternalServiceBuilder(RegisteredProxyInfo info) { + this.info = info; + } + + public InternalServiceBuilder withStatic(String interfaceMethodName, String methodName, String... classes) { + info.staticMethods().add( + new RegisteredProxyInfo.StaticMethodMapping(interfaceMethodName, methodName, classes)); + return this; + } + + @SuppressWarnings("removal") + public Object build() { + return AccessController.doPrivileged((PrivilegedAction) () -> { + ProxyInfo info = ProxyInfo.resolve(this.info); + if (info == null) return null; + ProxyGenerator generator = new ProxyGenerator(info); + if (!generator.areAllMethodsImplemented()) return null; + generator.defineClasses(); + MethodHandle constructor = generator.findConstructor(); + generator.init(); + try { + return constructor.invoke(); + } catch (Throwable e) { + throw new RuntimeException(e); + } + }); + } + } + + /** + * Called by {@linkplain com.jetbrains.bootstrap.JBRApiBootstrap#MODULES registry classes} + * to register a new mapping for corresponding modules. + */ + public static ModuleRegistry registerModule(Lookup lookup, BiFunction addExports) { + addExports.apply(lookup.lookupClass().getPackageName(), outerLookup.lookupClass().getModule()); + return new ModuleRegistry(lookup); + } + + public static class ModuleRegistry { + + private final Lookup lookup; + private RegisteredProxyInfo lastProxy; + + private ModuleRegistry(Lookup lookup) { + this.lookup = lookup; + } + + private ModuleRegistry addProxy(ProxyInfo.Type type, String interfaceName, String... targets) { + lastProxy = new RegisteredProxyInfo(lookup, interfaceName, targets, type, new ArrayList<>()); + registeredProxyInfoByInterfaceName.put(interfaceName, lastProxy); + for (String target : targets) { + registeredProxyInfoByTargetName.put(target, lastProxy); + } + if (targets.length == 1) { + validate2WayMapping(lastProxy, registeredProxyInfoByInterfaceName.get(targets[0])); + validate2WayMapping(lastProxy, registeredProxyInfoByTargetName.get(interfaceName)); + } + return this; + } + private static void validate2WayMapping(RegisteredProxyInfo p, RegisteredProxyInfo reverse) { + if (reverse != null && + (!p.interfaceName().equals(reverse.targets()[0]) || !p.targets()[0].equals(reverse.interfaceName()))) { + throw new IllegalArgumentException("Invalid 2-way proxy mapping: " + + p.interfaceName() + " -> " + p.targets()[0] + " & " + + reverse.interfaceName() + " -> " + reverse.targets()[0]); + } + } + + /** + * Register new {@linkplain ProxyInfo.Type#PROXY proxy} mapping. + *

    + * When {@code target} object is passed from JBR to client through service or any other proxy, + * it's converted to corresponding {@code interFace} type by creating a proxy object + * that implements {@code interFace} and delegates method calls to {@code target}. + * @param interFace interface name in {@link com.jetbrains.JBR jetbrains.api} module. + * @param targets corresponding class/interface names in current JBR module, first found will be used. This must not be empty. + * @apiNote class name example: {@code pac.ka.ge.Outer$Inner} + */ + public ModuleRegistry proxy(String interFace, String... targets) { + if (targets.length == 0) throw new IllegalArgumentException("Proxy must have at least one target"); + return addProxy(ProxyInfo.Type.PROXY, interFace, targets); + } + + /** + * Register new {@linkplain ProxyInfo.Type#SERVICE service} mapping. + *

    + * Service is a singleton, which may be accessed by client using {@link com.jetbrains.JBR} class. + * @param interFace interface name in {@link com.jetbrains.JBR jetbrains.api} module. + * @param targets corresponding implementation class names in current JBR module, first found will be used. + * @apiNote class name example: {@code pac.ka.ge.Outer$Inner} + */ + public ModuleRegistry service(String interFace, String... targets) { + return addProxy(ProxyInfo.Type.SERVICE, interFace, targets); + } + + /** + * Register new {@linkplain ProxyInfo.Type#CLIENT_PROXY client proxy} mapping. + * This mapping type allows implementation of callbacks. + *

    + * When {@code target} object is passed from client to JBR through service or any other proxy, + * it's converted to corresponding {@code interFace} type by creating a proxy object + * that implements {@code interFace} and delegates method calls to {@code target}. + * @param interFace interface name in current JBR module. + * @param target corresponding class/interface name in {@link com.jetbrains.JBR jetbrains.api} module. + * @apiNote class name example: {@code pac.ka.ge.Outer$Inner} + */ + public ModuleRegistry clientProxy(String interFace, String target) { + Objects.requireNonNull(target); + return addProxy(ProxyInfo.Type.CLIENT_PROXY, interFace, target); + } + + /** + * Register new 2-way mapping. + * It creates both {@linkplain ProxyInfo.Type#PROXY proxy} and + * {@linkplain ProxyInfo.Type#CLIENT_PROXY client proxy} between given interfaces. + *

    + * It links together two given interfaces and allows passing such objects back and forth + * between JBR and {@link com.jetbrains.JBR jetbrains.api} module through services and other proxy methods. + * @param apiInterface interface name in {@link com.jetbrains.JBR jetbrains.api} module. + * @param jbrInterface interface name in current JBR module. + * @apiNote class name example: {@code pac.ka.ge.Outer$Inner} + */ + public ModuleRegistry twoWayProxy(String apiInterface, String jbrInterface) { + clientProxy(jbrInterface, apiInterface); + proxy(apiInterface, jbrInterface); + return this; + } + + /** + * Delegate "{@code interfaceMethodName}" method calls to first found static "{@code methodName}" in "{@code classes}". + */ + public ModuleRegistry withStatic(String interfaceMethodName, String methodName, String... classes) { + lastProxy.staticMethods().add( + new RegisteredProxyInfo.StaticMethodMapping(interfaceMethodName, methodName, classes)); + return this; + } + } + + /** + * Thrown by service implementations indicating that the service is not available for some reason + */ + public static class ServiceNotAvailableException extends RuntimeException { + @Serial + private static final long serialVersionUID = 1L; + public ServiceNotAvailableException() { super(); } + public ServiceNotAvailableException(String message) { super(message); } + public ServiceNotAvailableException(String message, Throwable cause) { super(message, cause); } + public ServiceNotAvailableException(Throwable cause) { super(cause); } + } +} diff --git a/src/java.base/share/classes/com/jetbrains/internal/Proxy.java b/src/java.base/share/classes/com/jetbrains/internal/Proxy.java new file mode 100644 index 000000000000..29195c3f5621 --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/Proxy.java @@ -0,0 +1,228 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import java.lang.invoke.MethodHandle; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Proxy is needed to dynamically link JBR API interfaces and implementation at runtime. + * It implements user-side interfaces and delegates method calls to actual implementation + * code through {@linkplain java.lang.invoke.MethodHandle method handles}. + *

    + * There are 3 type of proxy objects: + *

      + *
    1. {@linkplain ProxyInfo.Type#PROXY Proxy} - implements client-side interface from + * {@code jetbrains.api} and delegates calls to JBR-side target object and optionally static methods.
    2. + *
    3. {@linkplain ProxyInfo.Type#SERVICE Service} - singleton {@linkplain ProxyInfo.Type#PROXY proxy}, + * may delegate calls only to static methods, without target object.
    4. + *
    5. {@linkplain ProxyInfo.Type#CLIENT_PROXY Client proxy} - reverse proxy, implements JBR-side interface + * and delegates calls to client-side target object by interface defined in {@code jetbrains.api}. + * May be used to implement callbacks which are created by client and called by JBR.
    6. + *
    + *

    + * Method signatures of proxy interfaces and implementation are validated to ensure that proxy can + * properly delegate call to the target implementation code. If there's no implementation found for some + * interface methods, corresponding proxy is considered unsupported. Proxy is also considered unsupported + * if any proxy used by it is unsupported, more about it at {@link ProxyDependencyManager}. + *

    + * Mapping between interfaces and implementation code is defined in + * {@linkplain com.jetbrains.bootstrap.JBRApiBootstrap#MODULES registry classes}. + * @param interface type for this proxy. + */ +class Proxy { + private final ProxyInfo info; + + private volatile ProxyGenerator generator; + private volatile Boolean allMethodsImplemented; + + private volatile Boolean supported; + + private volatile Class proxyClass; + private volatile MethodHandle constructor; + private volatile MethodHandle targetExtractor; + + private volatile boolean instanceInitialized; + private volatile INTERFACE instance; + + Proxy(ProxyInfo info) { + this.info = info; + } + + /** + * @return {@link ProxyInfo} structure of this proxy + */ + ProxyInfo getInfo() { + return info; + } + + private synchronized void initGenerator() { + if (generator != null) return; + generator = new ProxyGenerator(info); + allMethodsImplemented = generator.areAllMethodsImplemented(); + } + + /** + * Checks if implementation is found for all abstract interface methods of this proxy. + */ + boolean areAllMethodsImplemented() { + if (allMethodsImplemented != null) return allMethodsImplemented; + synchronized (this) { + if (allMethodsImplemented == null) initGenerator(); + return allMethodsImplemented; + } + } + + /** + * Checks if all methods are {@linkplain #areAllMethodsImplemented() implemented} + * for this proxy and all proxies it {@linkplain ProxyDependencyManager uses}. + */ + boolean isSupported() { + if (supported != null) return supported; + synchronized (this) { + if (supported == null) { + Set> dependencies = ProxyDependencyManager.getProxyDependencies(info.interFace); + for (Class d : dependencies) { + Proxy p = JBRApi.getProxy(d); + if (p == null || !p.areAllMethodsImplemented()) { + supported = false; + return false; + } + } + supported = true; + } + return supported; + } + } + + private synchronized void defineClasses() { + if (constructor != null) return; + initGenerator(); + generator.defineClasses(); + proxyClass = generator.getProxyClass(); + constructor = generator.findConstructor(); + targetExtractor = generator.findTargetExtractor(); + } + + /** + * @return generated proxy class + */ + Class getProxyClass() { + if (proxyClass != null) return proxyClass; + synchronized (this) { + if (proxyClass == null) defineClasses(); + return proxyClass; + } + } + + /** + * @return method handle for the constructor of this proxy. + *

      + *
    • For {@linkplain ProxyInfo.Type#SERVICE services}, constructor is no-arg.
    • + *
    • For non-{@linkplain ProxyInfo.Type#SERVICE services}, constructor is single-arg, + * expecting target object to which it would delegate method calls.
    • + *
    + */ + MethodHandle getConstructor() { + if (constructor != null) return constructor; + synchronized (this) { + if (constructor == null) defineClasses(); + return constructor; + } + } + + /** + * @return method handle for that extracts target object of the proxy, or null. + */ + MethodHandle getTargetExtractor() { + // targetExtractor may be null, so check constructor instead + if (constructor != null) return targetExtractor; + synchronized (this) { + if (constructor == null) defineClasses(); + return targetExtractor; + } + } + + private synchronized void initClass(Set> actualUsages) { + defineClasses(); + if (generator != null) { + actualUsages.addAll(generator.getDirectProxyDependencies()); + generator.init(); + generator = null; + } + } + private synchronized void initDependencyGraph() { + defineClasses(); + if (generator == null) return; + Set> dependencyClasses = ProxyDependencyManager.getProxyDependencies(info.interFace); + Set> dependencies = new HashSet<>(); + Set> actualUsages = new HashSet<>(); + for (Class d : dependencyClasses) { + Proxy p = JBRApi.getProxy(d); + if (p != null) { + dependencies.add(p); + p.initClass(actualUsages); + } + } + actualUsages.removeAll(dependencies); + if (!actualUsages.isEmpty()) { + // Should never happen, this is a sign of broken dependency search + throw new RuntimeException("Some proxies are not in dependencies of " + info.interFace.getName() + + ", but are actually used by it: " + + actualUsages.stream().map(p -> p.info.interFace.getName()).collect(Collectors.joining(", "))); + } + } + + /** + * @return instance for this {@linkplain ProxyInfo.Type#SERVICE service}, + * returns {@code null} for other proxy types. + */ + @SuppressWarnings("unchecked") + INTERFACE getInstance() { + if (instanceInitialized) return instance; + if (info.type != ProxyInfo.Type.SERVICE) return null; + synchronized (this) { + if (instance == null) { + initDependencyGraph(); + try { + instance = (INTERFACE) getConstructor().invoke(); + } catch (JBRApi.ServiceNotAvailableException e) { + if (JBRApi.VERBOSE) { + System.err.println("Service not available: " + info.interFace.getName()); + e.printStackTrace(); + } + } catch (Throwable e) { + throw new RuntimeException(e); + } finally { + instanceInitialized = true; + } + } + return instance; + } + } +} \ No newline at end of file diff --git a/src/java.base/share/classes/com/jetbrains/internal/ProxyDependencyManager.java b/src/java.base/share/classes/com/jetbrains/internal/ProxyDependencyManager.java new file mode 100644 index 000000000000..b4ac4035b28f --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/ProxyDependencyManager.java @@ -0,0 +1,210 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import java.lang.reflect.*; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.Consumer; + +/** + * This class collects {@linkplain Proxy proxy} dependencies. + *

    + * Dependencies of a class {@code C} are other classes that are + * used by {@code C} (i.e. supertypes, classes that appear in method + * parameters, return types) and all their dependencies. Any class + * is also considered a dependency of itself. + *

    + * Dependencies allow JBR to validate whole set of interfaces for + * a particular feature instead of treating them as separate entities. + *

    Example

    + * Suppose we implemented some feature and added some API for it: + *
    {@code
    + * interface SomeFeature {
    + *     SomeOtherObject createSomeObject(int magicNumber);
    + * }
    + * interface SomeOtherObject {
    + *     int getMagicNumber();
    + * }
    + * }
    + * And then used it: + *
    {@code
    + * if (JBR.isSomeFeatureSupported()) {
    + *     SomeOtherObject object = JBR.getSomeFeature().createSomeObject(123);
    + *     int magic = object.getMagicNumber();
    + * }
    + * }
    + * Suppose JBR was able to find implementation for {@code SomeFeature.createSomeObject()}, + * but not for {@code SomeOtherObject.getMagicNumber()}. So {@code JBR.getSomeFeature()} + * would succeed and return service instance, but {@code createSomeObject()} would fail, + * because JBR wasn't able to find implementation for {@code SomeOtherObject.getMagicNumber()} + * and therefore couldn't create proxy for {@code SomeOtherObject} class. + *

    + * To avoid such issues, not only proxy interface itself, but all proxies that are accessible + * from current proxy interface must have proper implementation. + */ +class ProxyDependencyManager { + + private static final ConcurrentMap, Set>> cache = new ConcurrentHashMap<>(); + + /** + * @return all proxy interfaces that are used (directly or indirectly) by given interface, including itself. + */ + static Set> getProxyDependencies(Class interFace) { + Set> dependencies = cache.get(interFace); + if (dependencies != null) return dependencies; + step(null, interFace); + return cache.get(interFace); + } + + /** + * Collect dependencies for given class and store them into cache. + */ + private static void step(Node parent, Class clazz) { + if (!clazz.getPackageName().startsWith("com.jetbrains") && !JBRApi.isKnownProxyInterface(clazz)) return; + if (parent != null && parent.findAndMergeCycle(clazz) != null) { + return; + } + Set> cachedDependencies = cache.get(clazz); + if (cachedDependencies != null) { + if (parent != null) parent.cycle.dependencies.addAll(cachedDependencies); + return; + } + Node node = new Node(parent, clazz); + ClassUsagesFinder.visitUsages(clazz, c -> step(node, c)); + Class correspondingProxyInterface = JBRApi.getProxyInterfaceByTargetName(clazz.getName()); + if (correspondingProxyInterface != null) { + step(node, correspondingProxyInterface); + } + if (parent != null && parent.cycle != node.cycle) { + parent.cycle.dependencies.addAll(node.cycle.dependencies); + } + if (node.cycle.origin.equals(clazz)) { + // Put collected dependencies into cache only when we exit from the cycle + // Otherwise cache will contain incomplete data + for (Class c : node.cycle.members) { + cache.put(c, node.cycle.dependencies); + if (JBRApi.VERBOSE) { + System.out.println("Found dependencies for " + c.getName() + ": " + node.cycle.dependencies); + } + } + } + } + + /** + * Graph node, one per visited class + */ + private static class Node { + private final Node parent; + private final Class clazz; + private Cycle cycle; + + private Node(Node parent, Class clazz) { + this.parent = parent; + this.clazz = clazz; + cycle = new Cycle(clazz); + } + + /** + * When classes form dependency cycle, they share all their dependencies. + * If cycle was found, merge all found dependencies for nodes that form the cycle. + */ + private Cycle findAndMergeCycle(Class clazz) { + if (this.clazz.equals(clazz)) return cycle; + if (parent == null) return null; + Cycle c = parent.findAndMergeCycle(clazz); + if (c != null && c != cycle) { + c.members.addAll(cycle.members); + c.dependencies.addAll(cycle.dependencies); + cycle = c; + } + return c; + } + } + + /** + * Cycle info. For the sake of elegant code, single node + * also forms a cycle with itself as a single member and dependency. + */ + private static class Cycle { + /** + * Origin is the first visited class from that cycle. + */ + private final Class origin; + private final Set> members = new HashSet<>(); + private final Set> dependencies = new HashSet<>(); + + private Cycle(Class origin) { + this.origin = origin; + members.add(origin); + if (JBRApi.isKnownProxyInterface(origin)) { + dependencies.add(origin); + } + } + } + + /** + * Utility class that collects direct class usages using reflection + */ + private static class ClassUsagesFinder { + + private static void visitUsages(Class c, Consumer> action) { + collect(c.getGenericSuperclass(), action); + for (java.lang.reflect.Type t : c.getGenericInterfaces()) collect(t, action); + for (Field f : c.getDeclaredFields()) collect(f.getGenericType(), action); + for (Method m : c.getDeclaredMethods()) { + collect(m.getGenericParameterTypes(), action); + collect(m.getGenericReturnType(), action); + collect(m.getGenericExceptionTypes(), action); + } + } + + private static void collect(java.lang.reflect.Type type, Consumer> action) { + if (type instanceof Class c) { + while (c.isArray()) c = Objects.requireNonNull(c.getComponentType()); + if (!c.isPrimitive()) action.accept(c); + } else if (type instanceof TypeVariable v) { + collect(v.getBounds(), action); + } else if (type instanceof WildcardType w) { + collect(w.getUpperBounds(), action); + collect(w.getLowerBounds(), action); + } else if (type instanceof ParameterizedType p) { + collect(p.getActualTypeArguments(), action); + collect(p.getRawType(), action); + collect(p.getOwnerType(), action); + } else if (type instanceof GenericArrayType a) { + collect(a.getGenericComponentType(), action); + } + } + + private static void collect(java.lang.reflect.Type[] types, Consumer> action) { + for (java.lang.reflect.Type t : types) collect(t, action); + } + } +} diff --git a/src/java.base/share/classes/com/jetbrains/internal/ProxyGenerator.java b/src/java.base/share/classes/com/jetbrains/internal/ProxyGenerator.java new file mode 100644 index 000000000000..ca0b37e233f0 --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/ProxyGenerator.java @@ -0,0 +1,485 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import jdk.internal.org.objectweb.asm.*; +import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; + +import static com.jetbrains.internal.ASMUtils.*; +import static java.lang.invoke.MethodHandles.Lookup; +import static jdk.internal.org.objectweb.asm.Opcodes.*; + +/** + * This class generates {@linkplain Proxy proxy} classes. + * Each proxy is just a generated class implementing some interface and + * delegating method calls to method handles. + *

    + * There are 2 proxy dispatch modes: + *

      + *
    • interface -> proxy -> {@linkplain #generateBridge bridge} -> method handle -> implementation code
    • + *
    • interface -> proxy -> method handle -> implementation code
    • + *
    + * Generated proxy is always located in the same package with its interface and optional bridge is located in the + * same module with target implementation code. Bridge allows proxy to safely call hidden non-static implementation + * methods and is only needed for {@code jetbrains.api} -> JBR calls. For JBR -> {@code jetbrains.api} calls, proxy can + * invoke method handle directly. + */ +class ProxyGenerator { + private static final String OBJECT_DESCRIPTOR = "Ljava/lang/Object;"; + private static final String MH_NAME = "java/lang/invoke/MethodHandle"; + private static final String MH_DESCRIPTOR = "Ljava/lang/invoke/MethodHandle;"; + private static final String CONVERSION_DESCRIPTOR = "(Ljava/lang/Object;)Ljava/lang/Object;"; + /** + * Print warnings about usage of deprecated interfaces and methods to {@link System#err}. + */ + private static final boolean LOG_DEPRECATED = System.getProperty("jetbrains.api.logDeprecated", String.valueOf(JBRApi.VERBOSE)).equalsIgnoreCase("true"); + private static final boolean VERIFY_BYTECODE = Boolean.getBoolean("jetbrains.api.verifyBytecode"); + + private static final AtomicInteger nameCounter = new AtomicInteger(); + + private final ProxyInfo info; + private final boolean generateBridge; + private final String proxyName, bridgeName; + private final ClassWriter originalProxyWriter, originalBridgeWriter; + private final ClassVisitor proxyWriter, bridgeWriter; + private final List> handles = new ArrayList<>(); + private final List>> classReferences = new ArrayList<>(); + private final Set> directProxyDependencies = new HashSet<>(); + private final List exceptions = new ArrayList<>(); + private int bridgeMethodCounter; + private boolean allMethodsImplemented = true; + private Lookup generatedHandlesHolder, generatedProxy; + + /** + * Creates new proxy generator from given {@link ProxyInfo}, + * looks for abstract interface methods, corresponding implementation methods + * and generates proxy bytecode. However, it doesn't actually load generated + * classes until {@link #defineClasses()} is called. + */ + ProxyGenerator(ProxyInfo info) { + if (JBRApi.VERBOSE) { + System.out.println("Generating proxy " + info.interFace.getName()); + } + this.info = info; + generateBridge = info.type.isPublicApi(); + int nameId = nameCounter.getAndIncrement(); + proxyName = Type.getInternalName(info.interFace) + "$$JBRApiProxy$" + nameId; + bridgeName = generateBridge ? info.apiModule.lookupClass().getPackageName().replace('.', '/') + "/" + + info.interFace.getSimpleName() + "$$JBRApiBridge$" + nameId : null; + + originalProxyWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + proxyWriter = VERIFY_BYTECODE ? new CheckClassAdapter(originalProxyWriter, true) : originalProxyWriter; + originalBridgeWriter = generateBridge ? new ClassWriter(ClassWriter.COMPUTE_FRAMES) : null; + if (generateBridge) { + bridgeWriter = VERIFY_BYTECODE ? new CheckClassAdapter(originalBridgeWriter, true) : originalBridgeWriter; + } else bridgeWriter = new ClassVisitor(Opcodes.ASM9) { // Empty visitor + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + return new MethodVisitor(api) {}; + } + }; + proxyWriter.visit(CLASSFILE_VERSION, ACC_SUPER | ACC_FINAL | ACC_SYNTHETIC, proxyName, null, + "java/lang/Object", new String[] {Type.getInternalName(info.interFace)}); + bridgeWriter.visit(CLASSFILE_VERSION, ACC_SUPER | ACC_FINAL | ACC_SYNTHETIC | ACC_PUBLIC, bridgeName, null, + "java/lang/Object", null); + generateConstructor(); + generateMethods(); + proxyWriter.visitEnd(); + bridgeWriter.visitEnd(); + } + + boolean areAllMethodsImplemented() { + return allMethodsImplemented; + } + + Set> getDirectProxyDependencies() { + return directProxyDependencies; + } + + /** + * Insert all method handles and class references into static fields, so that proxy can call implementation methods. + */ + void init() { + try { + for (int i = 0; i < handles.size(); i++) { + generatedHandlesHolder + .findStaticVarHandle(generatedHandlesHolder.lookupClass(), "h" + i, MethodHandle.class) + .set(handles.get(i).get()); + } + for (int i = 0; i < classReferences.size(); i++) { + generatedHandlesHolder + .findStaticVarHandle(generatedHandlesHolder.lookupClass(), "c" + i, Class.class) + .set(classReferences.get(i).get()); + } + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + Class getProxyClass() { + return generatedProxy.lookupClass(); + } + + /** + * @return method handle to constructor of generated proxy class. + *
      + *
    • For {@linkplain ProxyInfo.Type#SERVICE services}, constructor is no-arg.
    • + *
    • For non-{@linkplain ProxyInfo.Type#SERVICE services}, constructor is single-arg, + * expecting target object to which it would delegate method calls.
    • + *
    + */ + MethodHandle findConstructor() { + try { + if (info.target == null) { + return generatedProxy.findConstructor(generatedProxy.lookupClass(), MethodType.methodType(void.class)); + } else { + MethodHandle c = generatedProxy.findConstructor(generatedProxy.lookupClass(), + MethodType.methodType(void.class, Object.class)); + if (info.type.isService()) { + try { + return MethodHandles.foldArguments(c, info.target.findConstructor(info.target.lookupClass(), + MethodType.methodType(void.class)).asType(MethodType.methodType(Object.class))); + } catch (NoSuchMethodException | IllegalAccessException e) { + throw new RuntimeException("Service implementation must have no-args constructor: " + + info.target.lookupClass(), e); + } + } + return c; + } + } catch (IllegalAccessException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + /** + * @return method handle that receives proxy and returns its target, or null + */ + MethodHandle findTargetExtractor() { + if (info.target == null) return null; + try { + return generatedProxy.findGetter(generatedProxy.lookupClass(), "target", Object.class); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + /** + * Loads generated classes. + */ + void defineClasses() { + try { + Lookup bridge = !generateBridge ? null : MethodHandles.privateLookupIn( + info.apiModule.defineClass(originalBridgeWriter.toByteArray()), info.apiModule); + generatedProxy = info.interFaceLookup.defineHiddenClass( + originalProxyWriter.toByteArray(), true, Lookup.ClassOption.STRONG, Lookup.ClassOption.NESTMATE); + generatedHandlesHolder = generateBridge ? bridge : generatedProxy; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private void generateConstructor() { + if (info.target != null) { + proxyWriter.visitField(ACC_PRIVATE | ACC_FINAL, "target", OBJECT_DESCRIPTOR, null, null); + } + MethodVisitor p = proxyWriter.visitMethod(ACC_PRIVATE, "", "(" + + (info.target == null ? "" : OBJECT_DESCRIPTOR) + ")V", null, null); + if (LOG_DEPRECATED && info.interFace.isAnnotationPresent(Deprecated.class)) { + logDeprecated(p, "Warning: using deprecated JBR API interface " + info.interFace.getName()); + } + p.visitCode(); + p.visitVarInsn(ALOAD, 0); + if (info.target != null) { + p.visitInsn(DUP); + p.visitVarInsn(ALOAD, 1); + p.visitFieldInsn(PUTFIELD, proxyName, "target", OBJECT_DESCRIPTOR); + } + p.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); + p.visitInsn(RETURN); + p.visitMaxs(0, 0); + p.visitEnd(); + } + + private void generateMethods() { + for (Method method : info.interFace.getMethods()) { + int mod = method.getModifiers(); + if (!Modifier.isAbstract(mod)) continue; + MethodMapping methodMapping = getTargetMethodMapping(method); + + Exception e1 = null; + if (info.target != null) { + try { + MethodHandle handle = info.target.findVirtual( + info.target.lookupClass(), method.getName(), methodMapping.type()); + generateMethod(method, handle, methodMapping, true); + continue; + } catch (NoSuchMethodException | IllegalAccessException e) { + e1 = e; + } + } + + Exception e2 = null; + ProxyInfo.StaticMethodMapping mapping = info.staticMethods.get(method.getName()); + if (mapping != null) { + try { + MethodHandle staticHandle = + mapping.lookup().findStatic(mapping.lookup().lookupClass(), mapping.methodName(), methodMapping.type()); + generateMethod(method, staticHandle, methodMapping, false); + continue; + } catch (NoSuchMethodException | IllegalAccessException e) { + e2 = e; + } + } + + if (e1 != null) exceptions.add(e1); + if (e2 != null) exceptions.add(e2); + generateUnsupportedMethod(proxyWriter, method); + if (JBRApi.VERBOSE) { + System.err.println("Couldn't generate method " + method.getName()); + if (e1 != null) e1.printStackTrace(); + if (e2 != null) e2.printStackTrace(); + } + allMethodsImplemented = false; + } + } + + private void generateMethod(Method interfaceMethod, MethodHandle handle, MethodMapping mapping, boolean passInstance) { + InternalMethodInfo methodInfo = getInternalMethodInfo(interfaceMethod); + String bridgeMethodDescriptor = mapping.getBridgeDescriptor(passInstance); + + ClassVisitor handleWriter = generateBridge ? bridgeWriter : proxyWriter; + String bridgeOrProxyName = generateBridge ? bridgeName : proxyName; + String handleName = addHandle(handleWriter, () -> handle); + for (TypeMapping m : mapping) { + if (m.conversion() == TypeConversion.EXTRACT_TARGET || + m.conversion() == TypeConversion.DYNAMIC_2_WAY) { + Proxy from = m.fromProxy(); + m.metadata.extractTargetHandle = addHandle(handleWriter, from::getTargetExtractor); + directProxyDependencies.add(from); + } + if (m.conversion() == TypeConversion.WRAP_INTO_PROXY || + m.conversion() == TypeConversion.DYNAMIC_2_WAY) { + Proxy to = m.toProxy(); + m.metadata.proxyConstructorHandle = addHandle(handleWriter, to::getConstructor); + directProxyDependencies.add(to); + } + if (m.conversion() == TypeConversion.DYNAMIC_2_WAY) { + String classField = "c" + classReferences.size(); + m.metadata.extractableClassField = classField; + classReferences.add(m.fromProxy()::getProxyClass); + handleWriter.visitField(ACC_PRIVATE | ACC_STATIC, classField, "Ljava/lang/Class;", null, null); + } + } + String bridgeMethodName = methodInfo.name() + "$bridge$" + bridgeMethodCounter; + bridgeMethodCounter++; + + MethodVisitor p = proxyWriter.visitMethod(ACC_PUBLIC | ACC_FINAL, methodInfo.name(), + methodInfo.descriptor(), methodInfo.genericSignature(), methodInfo.exceptionNames()); + MethodVisitor b = bridgeWriter.visitMethod(ACC_PUBLIC | ACC_STATIC, bridgeMethodName, + bridgeMethodDescriptor, null, null); + if (LOG_DEPRECATED && interfaceMethod.isAnnotationPresent(Deprecated.class)) { + logDeprecated(p, "Warning: using deprecated JBR API method " + + interfaceMethod.getDeclaringClass().getName() + "#" + interfaceMethod.getName()); + } + p.visitCode(); + b.visitCode(); + MethodVisitor bp = generateBridge ? b : p; + bp.visitFieldInsn(GETSTATIC, bridgeOrProxyName, handleName, MH_DESCRIPTOR); + if (passInstance) { + p.visitVarInsn(ALOAD, 0); + p.visitFieldInsn(GETFIELD, proxyName, "target", OBJECT_DESCRIPTOR); + b.visitVarInsn(ALOAD, 0); + } + int lvIndex = 1; + for (TypeMapping param : mapping.parameterMapping) { + int opcode = getLoadOpcode(param.from()); + p.visitVarInsn(opcode, lvIndex); + b.visitVarInsn(opcode, lvIndex - (passInstance ? 0 : 1)); + lvIndex += getParameterSize(param.from()); + convertValue(bp, bridgeOrProxyName, param); + } + if (generateBridge) { + p.visitMethodInsn(INVOKESTATIC, bridgeName, bridgeMethodName, bridgeMethodDescriptor, false); + } + bp.visitMethodInsn(INVOKEVIRTUAL, MH_NAME, "invoke", bridgeMethodDescriptor, false); + convertValue(bp, bridgeOrProxyName, mapping.returnMapping()); + int returnOpcode = getReturnOpcode(mapping.returnMapping().to()); + p.visitInsn(returnOpcode); + b.visitInsn(returnOpcode); + p.visitMaxs(0, 0); + b.visitMaxs(0, 0); + p.visitEnd(); + b.visitEnd(); + } + + private String addHandle(ClassVisitor classWriter, Supplier handleSupplier) { + String handleName = "h" + handles.size(); + handles.add(handleSupplier); + classWriter.visitField(ACC_PRIVATE | ACC_STATIC, handleName, MH_DESCRIPTOR, null, null); + return handleName; + } + + private static void convertValue(MethodVisitor m, String handlesHolderName, TypeMapping mapping) { + if (mapping.conversion() == TypeConversion.IDENTITY) return; + Label skipConvert = new Label(); + m.visitInsn(DUP); + m.visitJumpInsn(IFNULL, skipConvert); + switch (mapping.conversion()) { + case EXTRACT_TARGET -> + m.visitFieldInsn(GETSTATIC, handlesHolderName, mapping.metadata.extractTargetHandle, MH_DESCRIPTOR); + case WRAP_INTO_PROXY -> + m.visitFieldInsn(GETSTATIC, handlesHolderName, mapping.metadata.proxyConstructorHandle, MH_DESCRIPTOR); + case DYNAMIC_2_WAY -> { + m.visitInsn(DUP); + m.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;", false); + m.visitFieldInsn(GETSTATIC, handlesHolderName, mapping.metadata.extractableClassField, "Ljava/lang/Class;"); + Label elseBranch = new Label(), afterBranch = new Label(); + m.visitJumpInsn(IF_ACMPNE, elseBranch); + m.visitFieldInsn(GETSTATIC, handlesHolderName, mapping.metadata.extractTargetHandle, MH_DESCRIPTOR); + m.visitJumpInsn(GOTO, afterBranch); + m.visitLabel(elseBranch); + m.visitFieldInsn(GETSTATIC, handlesHolderName, mapping.metadata.proxyConstructorHandle, MH_DESCRIPTOR); + m.visitLabel(afterBranch); + } + } + m.visitInsn(SWAP); + m.visitMethodInsn(INVOKEVIRTUAL, MH_NAME, "invoke", CONVERSION_DESCRIPTOR, false); + m.visitLabel(skipConvert); + } + + private static MethodMapping getTargetMethodMapping(Method interfaceMethod) { + Class[] params = interfaceMethod.getParameterTypes(); + TypeMapping[] paramMappings = new TypeMapping[params.length]; + for (int i = 0; i < params.length; i++) { + paramMappings[i] = getTargetTypeMapping(params[i]); + params[i] = paramMappings[i].to(); + } + TypeMapping returnMapping = getTargetTypeMapping(interfaceMethod.getReturnType()).inverse(); + return new MethodMapping(MethodType.methodType(returnMapping.from(), params), returnMapping, paramMappings); + } + + private static TypeMapping getTargetTypeMapping(Class userType) { + TypeMappingMetadata m = new TypeMappingMetadata(); + Proxy p = JBRApi.getProxy(userType); + if (p != null && p.getInfo().target != null) { + Proxy r = JBRApi.getProxy(p.getInfo().target.lookupClass()); + if (r != null && r.getInfo().target != null) { + return new TypeMapping(userType, p.getInfo().target.lookupClass(), TypeConversion.DYNAMIC_2_WAY, p, r, m); + } + return new TypeMapping(userType, p.getInfo().target.lookupClass(), TypeConversion.EXTRACT_TARGET, p, null, m); + } + Class interFace = JBRApi.getProxyInterfaceByTargetName(userType.getName()); + if (interFace != null) { + Proxy r = JBRApi.getProxy(interFace); + if (r != null) { + return new TypeMapping(userType, interFace, TypeConversion.WRAP_INTO_PROXY, null, r, m); + } + } + return new TypeMapping(userType, userType, TypeConversion.IDENTITY, null, null, m); + } + + private record MethodMapping(MethodType type, TypeMapping returnMapping, TypeMapping[] parameterMapping) + implements Iterable { + @Override + public Iterator iterator() { + return new Iterator<>() { + private int index = -1; + @Override + public boolean hasNext() { + return index < parameterMapping.length; + } + @Override + public TypeMapping next() { + TypeMapping m = index == -1 ? returnMapping : parameterMapping[index]; + index++; + return m; + } + }; + } + + /** + * Every convertable parameter type is replaced with {@link Object} for bridge descriptor. + * Optional {@link Object} is added as first parameter for instance methods. + */ + String getBridgeDescriptor(boolean passInstance) { + StringBuilder bd = new StringBuilder("("); + if (passInstance) bd.append(OBJECT_DESCRIPTOR); + for (TypeMapping m : parameterMapping) { + bd.append(m.getBridgeDescriptor()); + } + bd.append(')'); + bd.append(returnMapping.getBridgeDescriptor()); + return bd.toString(); + } + } + + private record TypeMapping(Class from, Class to, TypeConversion conversion, + Proxy fromProxy, Proxy toProxy, TypeMappingMetadata metadata) { + TypeMapping inverse() { + return new TypeMapping(to, from, switch (conversion) { + case EXTRACT_TARGET -> TypeConversion.WRAP_INTO_PROXY; + case WRAP_INTO_PROXY -> TypeConversion.EXTRACT_TARGET; + default -> conversion; + }, toProxy, fromProxy, metadata); + } + String getBridgeDescriptor() { + if (conversion == TypeConversion.IDENTITY) return Type.getDescriptor(from); + else return "Ljava/lang/Object;"; + } + } + + private static class TypeMappingMetadata { + private String extractTargetHandle, proxyConstructorHandle, extractableClassField; + } + + private enum TypeConversion { + /** + * No conversion. + */ + IDENTITY, + /** + * Take a proxy object and extract its target implementation object. + */ + EXTRACT_TARGET, + /** + * Create new proxy targeting given implementation object. + */ + WRAP_INTO_PROXY, + /** + * Decide between {@link #EXTRACT_TARGET} and {@link #WRAP_INTO_PROXY} at runtime, depending on actual object. + */ + DYNAMIC_2_WAY + } +} diff --git a/src/java.base/share/classes/com/jetbrains/internal/ProxyInfo.java b/src/java.base/share/classes/com/jetbrains/internal/ProxyInfo.java new file mode 100644 index 000000000000..649747496da7 --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/ProxyInfo.java @@ -0,0 +1,123 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import java.lang.invoke.MethodHandles; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Stream; + +import static java.lang.invoke.MethodHandles.Lookup; + +/** + * Proxy info, like {@link RegisteredProxyInfo}, but with all classes and lookup contexts resolved. + * Contains all necessary information to create a {@linkplain Proxy proxy}. + */ +class ProxyInfo { + + final Lookup apiModule; + final Type type; + final Lookup interFaceLookup; + final Class interFace; + final Lookup target; + final Map staticMethods = new HashMap<>(); + + private ProxyInfo(RegisteredProxyInfo i) { + this.apiModule = i.apiModule(); + type = i.type(); + interFaceLookup = lookup(getInterfaceLookup(), i.interfaceName()); + interFace = interFaceLookup == null ? null : interFaceLookup.lookupClass(); + target = Stream.of(i.targets()) + .map(t -> lookup(getTargetLookup(), t)) + .filter(Objects::nonNull).findFirst().orElse(null); + for (RegisteredProxyInfo.StaticMethodMapping m : i.staticMethods()) { + Stream.of(m.classes()) + .map(t -> lookup(getTargetLookup(), t)) + .filter(Objects::nonNull).findFirst() + .ifPresent(l -> staticMethods.put(m.interfaceMethodName(), new StaticMethodMapping(l, m.methodName()))); + } + } + + /** + * Resolve all classes and lookups for given {@link RegisteredProxyInfo}. + */ + static ProxyInfo resolve(RegisteredProxyInfo i) { + ProxyInfo info = new ProxyInfo(i); + if (info.interFace == null || (info.target == null && info.staticMethods.isEmpty())) return null; + if (!info.interFace.isInterface()) { + if (info.type == Type.CLIENT_PROXY) { + throw new RuntimeException("Tried to create client proxy for non-interface: " + info.interFace); + } else { + return null; + } + } + return info; + } + + Lookup getInterfaceLookup() { + return type == Type.CLIENT_PROXY || type == Type.INTERNAL_SERVICE ? apiModule : JBRApi.outerLookup; + } + + Lookup getTargetLookup() { + return type == Type.CLIENT_PROXY ? JBRApi.outerLookup : apiModule; + } + + private Lookup lookup(Lookup lookup, String clazz) { + String[] nestedClasses = clazz.split("\\$"); + clazz = ""; + for (int i = 0; i < nestedClasses.length; i++) { + try { + if (i != 0) clazz += "$"; + clazz += nestedClasses[i]; + lookup = MethodHandles.privateLookupIn(Class.forName(clazz, false, lookup.lookupClass().getClassLoader()), lookup); + } catch (ClassNotFoundException | IllegalAccessException ignore) { + return null; + } + } + return lookup; + } + + record StaticMethodMapping(Lookup lookup, String methodName) {} + + /** + * Proxy type, see {@link Proxy} + */ + enum Type { + PROXY, + SERVICE, + CLIENT_PROXY, + INTERNAL_SERVICE; + + public boolean isPublicApi() { + return this == PROXY || this == SERVICE; + } + + public boolean isService() { + return this == SERVICE || this == INTERNAL_SERVICE; + } + } +} diff --git a/src/java.base/share/classes/com/jetbrains/internal/RegisteredProxyInfo.java b/src/java.base/share/classes/com/jetbrains/internal/RegisteredProxyInfo.java new file mode 100644 index 000000000000..ec636e82b39f --- /dev/null +++ b/src/java.base/share/classes/com/jetbrains/internal/RegisteredProxyInfo.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.internal; + +import java.lang.invoke.MethodHandles; +import java.util.List; + +/** + * Raw proxy info, as it was registered through {@link JBRApi.ModuleRegistry}. + * Contains all necessary information to create a {@linkplain Proxy proxy}. + */ +record RegisteredProxyInfo(MethodHandles.Lookup apiModule, + String interfaceName, + String[] targets, + ProxyInfo.Type type, + List staticMethods) { + + record StaticMethodMapping(String interfaceMethodName, String methodName, String[] classes) {} +} diff --git a/src/java.base/share/classes/java/lang/Throwable.java b/src/java.base/share/classes/java/lang/Throwable.java index 2e78dbc1c088..6ac08f7bcc5a 100644 --- a/src/java.base/share/classes/java/lang/Throwable.java +++ b/src/java.base/share/classes/java/lang/Throwable.java @@ -1157,4 +1157,20 @@ public final synchronized Throwable[] getSuppressed() { else return suppressedExceptions.toArray(EMPTY_THROWABLE_ARRAY); } + + private static volatile java.util.function.Supplier $$jb$additionalInfoSupplier = null; + + // JBR API internals + private static void $$jb$additionalInfoForJstack(java.util.function.Supplier supplier) { + $$jb$additionalInfoSupplier = supplier; + } + + // NB: this is invoked from the VM + private static String $$jb$getAdditionalInfoForJstack() { + final java.util.function.Supplier supplier = $$jb$additionalInfoSupplier; + if (supplier != null) { + return supplier.get(); + } + return null; + } } diff --git a/src/java.base/share/classes/java/net/UnixDomainSocketAddress.java b/src/java.base/share/classes/java/net/UnixDomainSocketAddress.java index 4940e0c4794d..da46a8399a94 100644 --- a/src/java.base/share/classes/java/net/UnixDomainSocketAddress.java +++ b/src/java.base/share/classes/java/net/UnixDomainSocketAddress.java @@ -160,13 +160,19 @@ public static UnixDomainSocketAddress of(String pathname) { * @throws NullPointerException if path is {@code null} */ public static UnixDomainSocketAddress of(Path path) { - FileSystem fs = path.getFileSystem(); - if (fs != FileSystems.getDefault()) { - throw new IllegalArgumentException(); - } - if (fs.getClass().getModule() != Object.class.getModule()) { - throw new IllegalArgumentException(); + final FileSystem fs = path.getFileSystem(); + final FileSystem defaultFS = sun.nio.fs.DefaultFileSystemProvider.theFileSystem(); + if (fs != defaultFS || fs.getClass().getModule() != Object.class.getModule()) { + try { + // Check if we'll be able to create a socket from this Path later on by + // testing for the presence of a method identical to + // AbstractFileSystemProvider.getSunPathForSocketFile() + fs.provider().getClass().getMethod("getSunPathForSocketFile", Path.class); + } catch (NoSuchMethodException | SecurityException e) { + throw new IllegalArgumentException(); + } } + return new UnixDomainSocketAddress(path); } diff --git a/src/java.base/share/classes/module-info.java b/src/java.base/share/classes/module-info.java index edbbad78c9da..7fad5e249652 100644 --- a/src/java.base/share/classes/module-info.java +++ b/src/java.base/share/classes/module-info.java @@ -136,10 +136,13 @@ exports javax.security.auth.x500; exports javax.security.cert; - // additional qualified exports may be inserted at build time // see make/gensrc/GenModuleInfo.gmk + opens com.jetbrains.bootstrap; + + exports com.jetbrains.internal to + java.desktop; exports com.sun.crypto.provider to jdk.crypto.cryptoki; exports sun.invoke.util to diff --git a/src/java.base/share/classes/sun/nio/ch/UnixDomainSockets.java b/src/java.base/share/classes/sun/nio/ch/UnixDomainSockets.java index 251e79c6ecc6..fc34f46defe6 100644 --- a/src/java.base/share/classes/sun/nio/ch/UnixDomainSockets.java +++ b/src/java.base/share/classes/sun/nio/ch/UnixDomainSockets.java @@ -99,8 +99,22 @@ static UnixDomainSocketAddress checkAddress(SocketAddress sa) { } static byte[] getPathBytes(Path path) { - FileSystemProvider provider = FileSystems.getDefault().provider(); - return ((AbstractFileSystemProvider) provider).getSunPathForSocketFile(path); + java.nio.file.FileSystem fs = path.getFileSystem(); + FileSystemProvider provider = fs.provider(); + if (fs == sun.nio.fs.DefaultFileSystemProvider.theFileSystem()) { + return ((AbstractFileSystemProvider) provider).getSunPathForSocketFile(path); + } else { + try { + java.lang.reflect.Method method = provider.getClass().getMethod("getSunPathForSocketFile", Path.class); + Object result = method.invoke(provider, path); + return (byte[]) result; + } catch (NoSuchMethodException | SecurityException e) { + // This should've been verified when UnixDomainSocketAddress was created + throw new Error("Can't find getSunPathForSocketFile(Path) in the non-default file system provider " + provider.getClass()); + } catch (java.lang.reflect.InvocationTargetException | IllegalAccessException e) { + throw new RuntimeException("Can't invoke getSunPathForSocketFile(Path) from a non-default file system provider", e); + } + } } static FileDescriptor socket() throws IOException { @@ -136,13 +150,11 @@ static UnixDomainSocketAddress generateTempName() throws IOException { int rnd = random.nextInt(Integer.MAX_VALUE); try { final Path path = Path.of(dir, "socket_" + rnd); - if (path.getFileSystem().provider() != sun.nio.fs.DefaultFileSystemProvider.instance()) { - throw new UnsupportedOperationException( - "Unix Domain Sockets not supported on non-default file system"); - } return UnixDomainSocketAddress.of(path); } catch (InvalidPathException e) { throw new BindException("Invalid temporary directory"); + } catch (IllegalArgumentException e) { + throw new UnsupportedOperationException("Unix Domain Sockets not supported on non-default file system without method getSunPathForSocketFile(Path)"); } } diff --git a/src/java.base/share/native/libjava/NativeLibraries.c b/src/java.base/share/native/libjava/NativeLibraries.c index 229863060170..fa6c3572ac99 100644 --- a/src/java.base/share/native/libjava/NativeLibraries.c +++ b/src/java.base/share/native/libjava/NativeLibraries.c @@ -115,7 +115,6 @@ Java_jdk_internal_loader_NativeLibraries_load (JNIEnv *env, jclass cls, jobject lib, jstring name, jboolean isBuiltin, jboolean throwExceptionIfFail) { - const char *cname; jint jniVersion; jthrowable cause; void * handle; @@ -124,14 +123,15 @@ Java_jdk_internal_loader_NativeLibraries_load if (!initIDs(env)) return JNI_FALSE; - cname = JNU_GetStringPlatformChars(env, name, 0); - if (cname == 0) + const char * utf8_name = GetStringUTF8Chars(env, name); + if (utf8_name == NULL) return JNI_FALSE; - handle = isBuiltin ? procHandle : JVM_LoadLibrary(cname, throwExceptionIfFail); + + handle = isBuiltin ? procHandle : JVM_LoadLibrary(utf8_name, throwExceptionIfFail); if (handle) { JNI_OnLoad_t JNI_OnLoad; JNI_OnLoad = (JNI_OnLoad_t)findJniFunction(env, handle, - isBuiltin ? cname : NULL, + isBuiltin ? utf8_name : NULL, JNI_TRUE); if (JNI_OnLoad) { JavaVM *jvm; @@ -156,7 +156,7 @@ Java_jdk_internal_loader_NativeLibraries_load char msg[256]; jio_snprintf(msg, sizeof(msg), "unsupported JNI version 0x%08X required by %s", - jniVersion, cname); + jniVersion, utf8_name); JNU_ThrowByName(env, "java/lang/UnsatisfiedLinkError", msg); if (!isBuiltin) { JVM_UnloadLibrary(handle); @@ -178,7 +178,7 @@ Java_jdk_internal_loader_NativeLibraries_load loaded = JNI_TRUE; done: - JNU_ReleaseStringPlatformChars(env, name, cname); + ReleaseStringUTF8Chars(env, name, utf8_name); return loaded; } diff --git a/src/java.base/share/native/libjava/jni_util.c b/src/java.base/share/native/libjava/jni_util.c index 3d9004d969cb..a10bc28032eb 100644 --- a/src/java.base/share/native/libjava/jni_util.c +++ b/src/java.base/share/native/libjava/jni_util.c @@ -722,6 +722,35 @@ newStringUTF8(JNIEnv *env, const char *str) return newSizedStringJava(env, str, len); } +static jobject +getUTF8Charset(JNIEnv *env) { + static jobject utf8Charset = NULL; + if (utf8Charset == NULL) { + jstring enc = (*env)->NewStringUTF(env, "UTF-8"); + if (enc == NULL) { + return NULL; + } + jboolean exc; + jvalue charset = JNU_CallStaticMethodByName( + env, &exc, + "java/nio/charset/Charset", + "forName", + "(Ljava/lang/String;)Ljava/nio/charset/Charset;", + enc); + if (exc) { + (*env)->ExceptionClear(env); + } + (*env)->DeleteLocalRef(env, enc); + + if (!exc && charset.l != NULL) { + utf8Charset = (*env)->NewGlobalRef(env, charset.l); + (*env)->DeleteLocalRef(env, charset.l); + } + } + + return utf8Charset; +} + /* Initialize the fast encoding from the encoding name. * Export InitializeEncoding so that the VM can initialize it if required. */ @@ -849,14 +878,26 @@ GetStringPlatformCharsStrict(JNIEnv *env, jstring jstr, jboolean *isCopy) return getStringPlatformChars0(env, jstr, isCopy, JNI_TRUE); } -static const char* getStringBytes(JNIEnv *env, jstring jstr, jboolean strict) { +/* Convert the given Java string into a null-terminated byte sequence according + * to the platform encoding (if needUTF8 is false) or to UTF-8 encoding (if + * needUTF8 is true). + */ +static const char* getStringBytes(JNIEnv *env, jstring jstr, jboolean strict, jboolean needUTF8) { char *result = NULL; jbyteArray hab = 0; if ((*env)->EnsureLocalCapacity(env, 2) < 0) return 0; - hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID, jnuCharset); + if (needUTF8) { + if (getUTF8Charset(env) == NULL) { + return NULL; + } + hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID, getUTF8Charset(env)); + } else { + hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID, jnuCharset); + } + if (hab != 0) { if (!(*env)->ExceptionCheck(env)) { jint len = (*env)->GetArrayLength(env, hab); @@ -882,6 +923,7 @@ static const char* getStringBytes(JNIEnv *env, jstring jstr, jboolean strict) { } (*env)->DeleteLocalRef(env, hab); } + return result; } @@ -897,7 +939,8 @@ getStringUTF8(JNIEnv *env, jstring jstr, jboolean strict) int ri; jbyte coder = (*env)->GetByteField(env, jstr, String_coder_ID); if (coder != java_lang_String_LATIN1) { - return getStringBytes(env, jstr, strict); + const jboolean forceUTF8 = (fastEncoding != FAST_UTF_8); + return getStringBytes(env, jstr, strict, forceUTF8); } if ((*env)->EnsureLocalCapacity(env, 2) < 0) { return NULL; @@ -945,6 +988,18 @@ getStringUTF8(JNIEnv *env, jstring jstr, jboolean strict) return result; } +JNIEXPORT const char * +GetStringUTF8Chars(JNIEnv *env, jstring jstr) +{ + return getStringUTF8(env, jstr, JNI_FALSE); +} + +JNIEXPORT void +ReleaseStringUTF8Chars(JNIEnv* env, jstring jstr, const char *str) +{ + free((void *)str); +} + JNIEXPORT const char * JNICALL JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy) { @@ -976,7 +1031,7 @@ getStringPlatformChars0(JNIEnv *env, jstring jstr, jboolean *isCopy, jboolean st JNU_ThrowInternalError(env, "platform encoding not initialized"); return 0; } else - return getStringBytes(env, jstr, strict); + return getStringBytes(env, jstr, strict, JNI_FALSE /* Need platform encoding */); } JNIEXPORT void JNICALL diff --git a/src/java.base/share/native/libjava/jni_util.h b/src/java.base/share/native/libjava/jni_util.h index 3c73e90d62cb..766caf4f237f 100644 --- a/src/java.base/share/native/libjava/jni_util.h +++ b/src/java.base/share/native/libjava/jni_util.h @@ -108,6 +108,13 @@ GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy); JNIEXPORT const char * GetStringPlatformCharsStrict(JNIEnv *env, jstring jstr, jboolean *isCopy); +/* Convert the Java string to UTF-8 (not "modified UTF-8") */ +JNIEXPORT const char * +GetStringUTF8Chars(JNIEnv *env, jstring jstr); + +JNIEXPORT void +ReleaseStringUTF8Chars(JNIEnv* env, jstring jstr, const char *str); + JNIEXPORT jstring JNICALL JNU_NewStringPlatform(JNIEnv *env, const char *str); diff --git a/src/java.base/share/native/libnio/nio_util.c b/src/java.base/share/native/libnio/nio_util.c index 2235f0a5998d..6bea39d9e622 100644 --- a/src/java.base/share/native/libnio/nio_util.c +++ b/src/java.base/share/native/libnio/nio_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,15 @@ #include "jni.h" #include "jvm.h" #include "jni_util.h" +#include "nio_util.h" + +JavaVM *jvm; JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; + jvm = vm; if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_2) != JNI_OK) { return JNI_EVERSION; /* JNI version not supported */ diff --git a/src/java.base/unix/native/libjli/java_md.c b/src/java.base/unix/native/libjli/java_md.c index d2c04d8c25da..c9ebeb691477 100644 --- a/src/java.base/unix/native/libjli/java_md.c +++ b/src/java.base/unix/native/libjli/java_md.c @@ -27,6 +27,7 @@ #include "jvm_md.h" #include #include +#include #include #include #include @@ -220,6 +221,39 @@ ContainsLibJVM(const char *env) { return JNI_FALSE; } +static int +HaveGLibCCompatLibrary(struct dl_phdr_info* info, size_t size, void* data) +{ + static const char * const GLIBC_COMPAT_LIBRARY_NAME = "libgcompat.so"; + + const char * const so_pathname = info->dlpi_name; + if (so_pathname != NULL && so_pathname[0] != 0) { + const char * const last_slash = JLI_StrRChr(so_pathname, '/'); + const char * const so_basename = (last_slash != NULL) ? last_slash + 1 : so_pathname; + if (JLI_StrNCmp(so_basename, GLIBC_COMPAT_LIBRARY_NAME, JLI_StrLen(GLIBC_COMPAT_LIBRARY_NAME)) == 0) { + return JNI_TRUE; + } + } + + return 0; /* also means continue to iterate */ +} + +static jboolean +UsingMusl(void) { + const jlong start = CurrentTimeMicros(); + + const int found_gcompat = dl_iterate_phdr(HaveGLibCCompatLibrary, NULL); + + if (JLI_IsTraceLauncher()) { + const jlong end = CurrentTimeMicros(); + JLI_TraceLauncher("%ld micro seconds to check for the musl compatibility layer for glibc\n", + (long)(end - start)); + } + + return (found_gcompat != 0); +} + + /* * Test whether the environment variable needs to be set, see flowchart. */ @@ -243,6 +277,10 @@ RequiresSetenv(const char *jvmpath) { return JNI_TRUE; #endif + if (UsingMusl()) { + return JNI_TRUE; + } + llp = getenv("LD_LIBRARY_PATH"); /* no environment variable is a good environment variable */ if (llp == NULL && dmllp == NULL) { diff --git a/src/java.base/unix/native/libnio/ch/nio_util.h b/src/java.base/unix/native/libnio/ch/nio_util.h index 6cd3c858a7bd..3ea52ba57371 100644 --- a/src/java.base/unix/native/libnio/ch/nio_util.h +++ b/src/java.base/unix/native/libnio/ch/nio_util.h @@ -48,6 +48,8 @@ #define MAX_UNIX_DOMAIN_PATH_LEN \ (int)(sizeof(((struct sockaddr_un *)0)->sun_path)-2) +extern JavaVM *jvm; + /* NIO utility procedures */ diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsPathParser.java b/src/java.base/windows/classes/sun/nio/fs/WindowsPathParser.java index 6198fbfd5b59..6ca7c96ccc19 100644 --- a/src/java.base/windows/classes/sun/nio/fs/WindowsPathParser.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsPathParser.java @@ -186,14 +186,9 @@ private static String normalize(StringBuilder sb, String path, int off) { int len = path.length(); off = nextNonSlash(path, off, len); int start = off; - char lastC = 0; while (off < len) { char c = path.charAt(off); if (isSlash(c)) { - if (lastC == ' ') - throw new InvalidPathException(path, - "Trailing char <" + lastC + ">", - off - 1); sb.append(path, start, off); off = nextNonSlash(path, off, len); if (off != len) //no slash at the end of normalized path @@ -204,15 +199,10 @@ private static String normalize(StringBuilder sb, String path, int off) { throw new InvalidPathException(path, "Illegal char <" + c + ">", off); - lastC = c; off++; } } if (start != off) { - if (lastC == ' ') - throw new InvalidPathException(path, - "Trailing char <" + lastC + ">", - off - 1); sb.append(path, start, off); } return sb.toString(); diff --git a/src/java.base/windows/native/launcher/icons/awt.ico b/src/java.base/windows/native/launcher/icons/awt.ico index 8d2c9571ed9e..b99c0c69965b 100644 Binary files a/src/java.base/windows/native/launcher/icons/awt.ico and b/src/java.base/windows/native/launcher/icons/awt.ico differ diff --git a/src/java.base/windows/native/launcher/java.rc b/src/java.base/windows/native/launcher/java.rc index 27c6465de210..6789a9a6091b 100644 --- a/src/java.base/windows/native/launcher/java.rc +++ b/src/java.base/windows/native/launcher/java.rc @@ -1,6 +1,5 @@ #include "version.rc" - -#define IDI_ICON 2000 +#include "java_rc.h" ///////////////////////////////////////////////////////////////////////////// // diff --git a/src/java.base/windows/native/launcher/java_rc.h b/src/java.base/windows/native/launcher/java_rc.h new file mode 100644 index 000000000000..d3a1efe7536e --- /dev/null +++ b/src/java.base/windows/native/launcher/java_rc.h @@ -0,0 +1,6 @@ +#ifndef _JAVA_RC_H_ +#define _JAVA_RC_H_ + +#define IDI_ICON 2000 + +#endif // _JAVA_RC_H_ diff --git a/src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c b/src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c index 4907200db72e..e3219fd63af8 100644 --- a/src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c +++ b/src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c @@ -374,7 +374,7 @@ setXICWindowFocus(XIC ic, Window w) #define INITIAL_LOOKUP_BUF_SIZE 512 Boolean -awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp) +awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp, Boolean /* not used */) { JNIEnv *env = GetJNIEnv(); X11InputMethodData *pX11IMData = NULL; diff --git a/src/java.desktop/linux/native/libawt/awt/dbus_interface.c b/src/java.desktop/linux/native/libawt/awt/dbus_interface.c new file mode 100644 index 000000000000..656988c28681 --- /dev/null +++ b/src/java.desktop/linux/native/libawt/awt/dbus_interface.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, JetBrains s.r.o.. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +#include "dbus_interface.h" + +#include +#include +#include +#include + +#include "jvm_md.h" + +#define DBUS_LIB JNI_LIB_NAME("dbus-1") +#define DBUS_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("dbus-1", "3") + +static bool isCurrentVersionSupported(DBusApi* dBusApi) { + int major = 0, minor = 0, micro = 0; + dBusApi->dbus_get_version(&major, &minor, µ); + return major == 1; +} + +static bool DBusApi_init(DBusApi* dBusApi, void *libhandle) { + dBusApi->dbus_get_version = dlsym(libhandle, "dbus_get_version"); + if (dBusApi->dbus_get_version == NULL || !isCurrentVersionSupported(dBusApi)) { + return false; + } + + dBusApi->dbus_error_init = dlsym(libhandle, "dbus_error_init"); + dBusApi->dbus_bus_get = dlsym(libhandle, "dbus_bus_get"); + dBusApi->dbus_error_is_set = dlsym(libhandle, "dbus_error_is_set"); + dBusApi->dbus_bus_request_name = dlsym(libhandle, "dbus_bus_request_name"); + dBusApi->dbus_connection_flush = dlsym(libhandle, "dbus_connection_flush"); + dBusApi->dbus_message_new_method_call = dlsym(libhandle, "dbus_message_new_method_call"); + dBusApi->dbus_message_set_destination = dlsym(libhandle, "dbus_message_set_destination"); + dBusApi->dbus_message_iter_init_append = dlsym(libhandle, "dbus_message_iter_init_append"); + dBusApi->dbus_message_iter_append_basic = dlsym(libhandle, "dbus_message_iter_append_basic"); + dBusApi->dbus_connection_send_with_reply_and_block = dlsym(libhandle, "dbus_connection_send_with_reply_and_block"); + dBusApi->dbus_message_iter_init = dlsym(libhandle, "dbus_message_iter_init"); + dBusApi->dbus_message_iter_get_arg_type = dlsym(libhandle, "dbus_message_iter_get_arg_type"); + dBusApi->dbus_message_iter_get_basic = dlsym(libhandle, "dbus_message_iter_get_basic"); + dBusApi->dbus_message_iter_recurse = dlsym(libhandle, "dbus_message_iter_recurse"); + dBusApi->dbus_message_iter_next = dlsym(libhandle, "dbus_message_iter_next"); + dBusApi->dbus_message_unref = dlsym(libhandle, "dbus_message_unref"); + dBusApi->dbus_error_free = dlsym(libhandle, "dbus_error_free"); + + return dBusApi->dbus_error_init != NULL && dBusApi->dbus_bus_get != NULL && dBusApi->dbus_error_is_set != NULL && + dBusApi->dbus_bus_request_name != NULL && dBusApi->dbus_connection_flush != NULL && + dBusApi->dbus_message_set_destination != NULL && dBusApi->dbus_message_iter_init_append != NULL && + dBusApi->dbus_message_iter_append_basic != NULL && dBusApi->dbus_connection_send_with_reply_and_block != NULL && + dBusApi->dbus_message_iter_init != NULL && dBusApi->dbus_message_iter_get_arg_type != NULL && + dBusApi->dbus_message_iter_get_basic != NULL && dBusApi->dbus_message_iter_recurse != NULL && + dBusApi->dbus_message_iter_next != NULL && dBusApi->dbus_message_unref != NULL && + dBusApi->dbus_message_new_method_call != NULL && dBusApi->dbus_error_free != NULL; +} + +DBusApi* DBusApi_setupDBus(void *libhandle) { + DBusApi *dBusApi = (DBusApi*)malloc(sizeof(DBusApi)); + if (dBusApi == NULL || !DBusApi_init(dBusApi, libhandle)) { + free(dBusApi); + dBusApi = NULL; + } + + return dBusApi; +} + +DBusApi* DBusApi_setupDBusDefault() { + void *dbus_libhandle = dlopen(DBUS_LIB, RTLD_LAZY | RTLD_LOCAL); + if (dbus_libhandle == NULL) { + dbus_libhandle = dlopen(DBUS_LIB_VERSIONED, RTLD_LAZY | RTLD_LOCAL); + if (dbus_libhandle == NULL) { + return NULL; + } + } + + return DBusApi_setupDBus(dbus_libhandle); +} \ No newline at end of file diff --git a/src/java.desktop/linux/native/libawt/awt/dbus_interface.h b/src/java.desktop/linux/native/libawt/awt/dbus_interface.h new file mode 100644 index 000000000000..62f9b6c3ae64 --- /dev/null +++ b/src/java.desktop/linux/native/libawt/awt/dbus_interface.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, JetBrains s.r.o.. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef JETBRAINSRUNTIME_DBUS_INTERFACE_H +#define JETBRAINSRUNTIME_DBUS_INTERFACE_H + +#include + +typedef struct DBusApi { + void (*dbus_get_version)(int *major_version_p, int *minor_version_p, int *micro_version_p); + + void (*dbus_error_init)(DBusError *error); + + DBusConnection *(*dbus_bus_get)(DBusBusType type, DBusError *error); + + dbus_bool_t (*dbus_error_is_set)(const DBusError *error); + + void (*dbus_error_free)(DBusError *error); + + int (*dbus_bus_request_name)(DBusConnection *connection, const char *name, unsigned int flags, DBusError *error); + + void (*dbus_connection_flush)(DBusConnection *connection); + + DBusMessage* (*dbus_message_new_method_call)(const char *bus_name, const char *path, + const char *iface, const char *method); + + dbus_bool_t (*dbus_message_set_destination)(DBusMessage *message, const char *destination); + + void (*dbus_message_iter_init_append)(DBusMessage *message, DBusMessageIter *iter); + + dbus_bool_t (*dbus_message_iter_append_basic)(DBusMessageIter *iter, int type, const void *value); + + DBusMessage *(*dbus_connection_send_with_reply_and_block)(DBusConnection *connection, DBusMessage *message, + int timeout_milliseconds, DBusError *error); + + dbus_bool_t (*dbus_message_iter_init)(DBusMessage *message, DBusMessageIter *iter); + + int (*dbus_message_iter_get_arg_type)(DBusMessageIter *iter); + + void (*dbus_message_iter_get_basic)(DBusMessageIter *iter, void *value); + + void (*dbus_message_iter_recurse)(DBusMessageIter *iter, DBusMessageIter *sub); + + dbus_bool_t (*dbus_message_iter_next)(DBusMessageIter *iter); + + void (*dbus_message_unref)(DBusMessage *message); +} DBusApi; + +DBusApi* DBusApi_setupDBus(void *libhandle); +DBusApi* DBusApi_setupDBusDefault(); + +#endif //JETBRAINSRUNTIME_DBUS_INTERFACE_H diff --git a/src/java.desktop/linux/native/libawt/awt/system_properties.c b/src/java.desktop/linux/native/libawt/awt/system_properties.c new file mode 100644 index 000000000000..20647caf0bc9 --- /dev/null +++ b/src/java.desktop/linux/native/libawt/awt/system_properties.c @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, JetBrains s.r.o.. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "system_properties.h" + +#ifdef DBUS_FOUND + +#include +#include +#include + +#define UNKNOWN_RESULT -1 +#define SETTING_INTERFACE "org.freedesktop.portal.Settings" +#define SETTING_INTERFACE_METHOD "Read" +#define DESKTOP_DESTINATION "org.freedesktop.portal.Desktop" +#define DESKTOP_PATH "/org/freedesktop/portal/desktop" +#define REPLY_TIMEOUT 150 + +static DBusConnection *connection = NULL; +static JNIEnv *env = NULL; +static DBusApi *dBus = NULL; +static DBusMessage *msg_freedesktop_appearance = NULL; +static DBusMessage *msg_gnome_desktop = NULL; +static bool initialized = false; +static bool logEnabled = true; +extern JavaVM *jvm; + +static void printError(const char* fmt, ...) { + if (!logEnabled) { + return; + } + + env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + char* buf = (char*)malloc(1024); + + if (env && buf) { + va_list vargs; + va_start(vargs, fmt); + vsnprintf(buf, 1024, fmt, vargs); + jstring text = JNU_NewStringPlatform(env, buf); + free(buf); + va_end(vargs); + + jboolean ignoreException; + JNU_CallStaticMethodByName(env, &ignoreException, "sun/awt/UNIXToolkit", "printError", + "(Ljava/lang/String;)V", text); + } +} + +static bool dbusCheckError(DBusError *err, const char *msg) { + bool is_error_set = dBus->dbus_error_is_set(err); + if (is_error_set) { + printError("DBus error: %s. %s\n", msg, err->message); + dBus->dbus_error_free(err); + } + return is_error_set; +} + +// current implementation of object decomposition supports only +// primitive types (including a recursive type wrapper) +static bool decomposeDBusReply(void *val, DBusMessageIter *iter, int demand_type) { + int cur_type = dBus->dbus_message_iter_get_arg_type(iter); + switch (cur_type) + { + case DBUS_TYPE_INT16: + case DBUS_TYPE_UINT16: + case DBUS_TYPE_INT32: + case DBUS_TYPE_UINT32: + case DBUS_TYPE_INT64: + case DBUS_TYPE_UINT64: + case DBUS_TYPE_STRING: + { + if (cur_type != demand_type) { + return false; + } + dBus->dbus_message_iter_get_basic(iter, val); + return true; + } + case DBUS_TYPE_VARIANT: + { + DBusMessageIter unwrap_iter; + dBus->dbus_message_iter_recurse(iter, &unwrap_iter); + bool res = decomposeDBusReply(val, &unwrap_iter, demand_type); + // current implementation doesn't support types with multiple fields + if (dBus->dbus_message_iter_next(iter)) { + return false; + } + return res; + } + case DBUS_TYPE_INVALID: + default: + return false; + } +} + +static DBusMessage *createDBusMessage(const char *messages[], int message_count) { + DBusMessage *msg = NULL; + DBusMessageIter msg_iter; + + if ((msg = dBus->dbus_message_new_method_call(NULL, DESKTOP_PATH, SETTING_INTERFACE, SETTING_INTERFACE_METHOD)) == NULL) { + printError("DBus error: cannot allocate message\n"); + goto cleanup; + } + + if (!dBus->dbus_message_set_destination(msg, DESKTOP_DESTINATION)) { + printError("DBus error: cannot set destination\n"); + goto cleanup; + } + + dBus->dbus_message_iter_init_append(msg, &msg_iter); + + for (int i = 0; i < message_count; i++) { + if (!dBus->dbus_message_iter_append_basic(&msg_iter, DBUS_TYPE_STRING, &messages[i])) { + printError("DBus error: cannot append to message\n"); + goto cleanup; + } + } + + return msg; +cleanup: + if (msg) { + dBus->dbus_message_unref(msg); + } + return NULL; +} + +static bool sendDBusMessageWithReply(DBusMessage *msg, void *val, int demand_type) { + DBusError error; + DBusMessage *msg_reply = NULL; + DBusMessageIter msg_iter; + bool res = false; + + dBus->dbus_error_init(&error); + if ((msg_reply = dBus->dbus_connection_send_with_reply_and_block(connection, msg, REPLY_TIMEOUT, &error)) == NULL) { + printError("DBus error: cannot get msg_reply or sent message. %s\n", dBus->dbus_error_is_set(&error) ? error.message : ""); + goto cleanup; + } + + if (!dBus->dbus_message_iter_init(msg_reply, &msg_iter)) { + printError("DBus error: cannot process message\n"); + goto cleanup; + } + + res = decomposeDBusReply(val, &msg_iter, demand_type); +cleanup: + if (msg_reply) { + dBus->dbus_message_unref(msg_reply); + } + return res; +} + +JNIEXPORT jint JNICALL Java_sun_awt_UNIXToolkit_isSystemDarkColorScheme() { + static int use_freedesktop_appearance = -1; + if (!initialized) { + return UNKNOWN_RESULT; + } + + if (use_freedesktop_appearance == -1) { + unsigned int res = 0; + logEnabled = false; + use_freedesktop_appearance = + sendDBusMessageWithReply(msg_freedesktop_appearance, &res, DBUS_TYPE_UINT32); + logEnabled = true; + } + + if (use_freedesktop_appearance) { + unsigned int res = 0; + if (!sendDBusMessageWithReply(msg_freedesktop_appearance, &res, DBUS_TYPE_UINT32)) { + return UNKNOWN_RESULT; + } + return res; + } else { + char *res = NULL; + if (!sendDBusMessageWithReply(msg_gnome_desktop, &res, DBUS_TYPE_STRING)) { + return UNKNOWN_RESULT; + } + return (res != NULL) ? strstr(res, "dark") != NULL : UNKNOWN_RESULT; + } +} + +jboolean SystemProperties_setup(DBusApi *dBus_, JNIEnv *env_) { + env = env_; + dBus = dBus_; + DBusError err; + int ret; + + dBus->dbus_error_init(&err); + if ((connection = dBus->dbus_bus_get(DBUS_BUS_SESSION, &err)) == NULL) { + printError("DBus error: connection is Null\n"); + return JNI_FALSE; + } + if (dbusCheckError(&err, "connection error")) { + return JNI_FALSE; + } + + ret = dBus->dbus_bus_request_name(connection, "dbus.JBR.server", DBUS_NAME_FLAG_REPLACE_EXISTING , &err); + if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER && ret != DBUS_REQUEST_NAME_REPLY_IN_QUEUE) { + printError("DBus error: Failed to acquire service name \n"); + return JNI_FALSE; + } + if (dbusCheckError(&err, "error request 'dbus.JBR.server' name on the bus")) { + return JNI_FALSE; + } + + dBus->dbus_connection_flush(connection); + + const char *freedesktop_appearance_messages[] = {"org.freedesktop.appearance", "color-scheme"}; + const char *gnome_desktop_messages[] = {"org.gnome.desktop.interface", "gtk-theme"}; + msg_freedesktop_appearance = createDBusMessage(freedesktop_appearance_messages, 2); + msg_gnome_desktop = createDBusMessage(gnome_desktop_messages, 2); + if (msg_freedesktop_appearance == NULL || msg_gnome_desktop == NULL) { + return JNI_FALSE; + } + + initialized = true; + + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL Java_sun_awt_UNIXToolkit_dbusInit() { + DBusApi *dBus = DBusApi_setupDBusDefault(); + if (dBus) { + return SystemProperties_setup(dBus, env); + } + return JNI_FALSE; +} + +#else + +JNIEXPORT jint JNICALL Java_sun_awt_UNIXToolkit_isSystemDarkColorScheme() { + return -1; +} + +JNIEXPORT jboolean JNICALL Java_sun_awt_UNIXToolkit_dbusInit() { + return JNI_FALSE; +} + +#endif \ No newline at end of file diff --git a/src/java.desktop/linux/native/libawt/awt/system_properties.h b/src/java.desktop/linux/native/libawt/awt/system_properties.h new file mode 100644 index 000000000000..6166f255c707 --- /dev/null +++ b/src/java.desktop/linux/native/libawt/awt/system_properties.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, JetBrains s.r.o.. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef JETBRAINSRUNTIME_SYSTEM_PROPERTIES_H +#define JETBRAINSRUNTIME_SYSTEM_PROPERTIES_H + +#include +#include +#include + +#ifdef DBUS_FOUND + +#include "dbus_interface.h" + +jboolean SystemProperties_setup(DBusApi *dBus_, JNIEnv *env_); +void SystemProperties_pullEvent(void); + +#endif + +#endif //JETBRAINSRUNTIME_SYSTEM_PROPERTIES_H diff --git a/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/AccessibleAnnouncer.c b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/AccessibleAnnouncer.c new file mode 100644 index 000000000000..eacb036f5971 --- /dev/null +++ b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/AccessibleAnnouncer.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "sun_swing_AccessibleAnnouncer.h" +#include "OrcaAnnouncer.h" + +/* + * Class: sun_swing_AccessibleAnnouncer + * Method: nativeAnnounce + * Signature: (Ljavax/accessibility/Accessible;Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL Java_sun_swing_AccessibleAnnouncer_nativeAnnounce +(JNIEnv *env, jclass cls, jobject accessible, jstring str, jint priority) +{ +#ifndef NO_A11Y_SPEECHD_ANNOUNCING + if (OrcaAnnounce(env, str, priority) == 0) + { + return; + } +#endif + +#ifdef DEBUG + fprintf(stderr, "Each announcer has failed or the build was made without any of them\n"); +#endif +} diff --git a/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/AccessibleAnnouncerJNIUtils.h b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/AccessibleAnnouncerJNIUtils.h new file mode 100644 index 000000000000..1c3861cf7d10 --- /dev/null +++ b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/AccessibleAnnouncerJNIUtils.h @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef ACCESSIBLEANNOUNCERJNIUTILS_H +#define ACCESSIBLEANNOUNCERJNIUTILS_H + +#ifndef NO_A11Y_SPEECHD_ANNOUNCING + +#include "jni.h" + +#define GET_AccessibleAnnouncerUtilities()\ +if (jc_AccessibleAnnouncerUtilities == NULL) {\ +jclass cls = (*env)->FindClass(env, "sun/awt/AccessibleAnnouncerUtilities");\ +if (cls == NULL) {\ +return;\ +}\ +jc_AccessibleAnnouncerUtilities = (*env)->NewGlobalRef(env, cls);\ +(*env)->DeleteLocalRef(env, cls);\ +}\ + +#define GET_AccessibleAnnouncerUtilitiesReturn(ret)\ +if (jc_AccessibleAnnouncerUtilities == NULL) {\ +jclass cls = (*env)->FindClass(env, "sun/awt/AccessibleAnnouncerUtilities");\ +if (cls == NULL) {\ +return ret;\ +}\ +jc_AccessibleAnnouncerUtilities = (*env)->NewGlobalRef(env, cls);\ +(*env)->DeleteLocalRef(env, cls);\ +}\ + +#define GET_getOrcaConf()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getOrcaConf == NULL) {\ +jsm_getOrcaConf = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getOrcaConf", "()Ljava/lang/Object;");\ +if (jsm_getOrcaConf == NULL) {\ +return;\ +}\ +}\ + +#define GET_getOrcaConfReturn(ret)\ +GET_AccessibleAnnouncerUtilitiesReturn(ret);\ +if (jsm_getOrcaConf == NULL) {\ +jsm_getOrcaConf = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getOrcaConf", "()Ljava/lang/Object;");\ +if (jsm_getOrcaConf == NULL) {\ +return ret;\ +}\ +}\ + +#define GET_getSpeechServerInfo()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getSpeechServerInfo == NULL) {\ +jsm_getSpeechServerInfo = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getSpeechServerInfo", "(Ljava/lang/Object;)Ljava/lang/String;");\ +if (jsm_getSpeechServerInfo == NULL) {\ +return;\ +}\ +}\ + +#define GET_getGain()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getGain == NULL) {\ +jsm_getGain = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getGain", "(Ljava/lang/Object;)D");\ +if (jsm_getGain == NULL) {\ +return;\ +}\ +}\ + +#define GET_getVariant()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getVariant == NULL) {\ +jsm_getVariant = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getVariant", "(Ljava/lang/Object;)Ljava/lang/String;");\ +if (jsm_getVariant == NULL) {\ +return;\ +}\ +}\ + +#define GET_getDialect()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getDialect == NULL) {\ +jsm_getDialect = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getDialect", "(Ljava/lang/Object;)Ljava/lang/String;");\ +if (jsm_getDialect == NULL) {\ +return;\ +}\ +}\ + +#define GET_getLang()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getLang == NULL) {\ +jsm_getLang = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getLang", "(Ljava/lang/Object;)Ljava/lang/String;");\ +if (jsm_getLang == NULL) {\ +return;\ +}\ +}\ + +#define GET_getName()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getName == NULL) {\ +jsm_getName = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getName", "(Ljava/lang/Object;)Ljava/lang/String;");\ +if (jsm_getName == NULL) {\ +return;\ +}\ +}\ + +#define GET_getAveragePitch()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getAveragePitch == NULL) {\ +jsm_getAveragePitch = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getAveragePitch", "(Ljava/lang/Object;)D");\ +if (jsm_getAveragePitch == NULL) {\ +return;\ +}\ +}\ + +#define GET_getRate()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getRate == NULL) {\ +jsm_getRate = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getRate", "(Ljava/lang/Object;)D");\ +if (jsm_getRate == NULL) {\ +return;\ +}\ +}\ + +#define GET_getActiveProfile()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getActiveProfile == NULL) {\ +jsm_getActiveProfile = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getActiveProfile", "(Ljava/lang/Object;)Ljava/lang/String;");\ +if (jsm_getActiveProfile == NULL) {\ +return;\ +}\ +}\ + +#define GET_getVerbalizePunctuationStyle()\ +GET_AccessibleAnnouncerUtilities();\ +if (jsm_getVerbalizePunctuationStyle == NULL) {\ +jsm_getVerbalizePunctuationStyle = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getVerbalizePunctuationStyle", "(Ljava/lang/Object;)I");\ +if (jsm_getVerbalizePunctuationStyle == NULL) {\ +return;\ +}\ +}\ + +#define GET_getEnableSpeech(ret)\ +GET_AccessibleAnnouncerUtilitiesReturn(ret);\ +if (jsm_getEnableSpeech == NULL) {\ +jsm_getEnableSpeech = (*env)->GetStaticMethodID(env, jc_AccessibleAnnouncerUtilities, "getEnableSpeech", "(Ljava/lang/Object;)Z");\ +if (jsm_getEnableSpeech == NULL) {\ +return ret;\ +}\ +}\ + +#endif // #ifndef NO_A11Y_SPEECHD_ANNOUNCING + + +#endif //ACCESSIBLEANNOUNCERJNIUTILS_H + diff --git a/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/OrcaAnnouncer.c b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/OrcaAnnouncer.c new file mode 100644 index 000000000000..acf24f40cf5b --- /dev/null +++ b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/OrcaAnnouncer.c @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef NO_A11Y_SPEECHD_ANNOUNCING + +#include "sun_swing_AccessibleAnnouncer.h" +#include "OrcaAnnouncer.h" +#include "AccessibleAnnouncerJNIUtils.h" +#include "jni_util.h" +#include "debug_assert.h" + +static jclass jc_AccessibleAnnouncerUtilities = NULL; +static jmethodID jsm_getOrcaConf = NULL; +static jmethodID jsm_getSpeechServerInfo = NULL; +static jmethodID jsm_getGain = NULL; +static jmethodID jsm_getVariant = NULL; +static jmethodID jsm_getDialect = NULL; +static jmethodID jsm_getLang = NULL; +static jmethodID jsm_getName = NULL; +static jmethodID jsm_getAveragePitch = NULL; +static jmethodID jsm_getRate = NULL; +static jmethodID jsm_getEstablished = NULL; +static jmethodID jsm_getActiveProfile = NULL; +static jmethodID jsm_getVerbalizePunctuationStyle = NULL; +static jmethodID jsm_getOnlySpeakDisplayedText = NULL; +static jmethodID jsm_getEnableSpeech = NULL; + +int OrcaAnnounce(JNIEnv *env, jstring str, jint priority) +{ + DASSERT(env != NULL); + DASSERT(str != NULL) + + jobject conf = OrcaGetConf(env); + if (conf == NULL) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read Orca configuration file\n"); +#endif + return -1; + } + + if (OrcaGetEnableSpeech(env, conf) <= 0) + { +#ifdef DEBUG + fprintf(stderr, "Speech is disable\n"); +#endif + (*env)->DeleteLocalRef(env, conf); + return -1; + } + + SPDConnection *connection = spd_open("Java announcer", NULL, NULL, SPD_MODE_SINGLE); + if (connection == NULL) + { +#ifdef DEBUG + fprintf(stderr, "Speech dispatcher connection is null\n"); +#endif + (*env)->DeleteLocalRef(env, conf); + return -1; + } + + const char *msg = JNU_GetStringPlatformChars(env, str, NULL); + if (msg == NULL) + { + if ((*env)->ExceptionCheck(env) == JNI_FALSE) + { + JNU_ThrowOutOfMemoryError(env, "OrcaAnnounce: failed to obtain chars from the announcing string"); + } + + spd_close(connection); + (*env)->DeleteLocalRef(env, conf); + return -1; + } + + OrcaSetSpeechConf(env, connection, conf); + (*env)->DeleteLocalRef(env, conf); + int p = SPD_TEXT; + if (priority == sun_swing_AccessibleAnnouncer_ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT) + { + p = SPD_MESSAGE; + } + int err = spd_say(connection, p, msg); + spd_close(connection); + JNU_ReleaseStringPlatformChars(env, str, msg); + + if (err < 0) + { +#ifdef DEBUG + fprintf(stderr, "Failed to say message\n"); +#endif + return -1; + } + + return 0; +} + +void OrcaSetSpeechConf(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + OrcaSetOutputModule(env, connection, conf); + OrcaSetSynthesisVoice(env, connection, conf); + OrcaSetLanguage(env, connection, conf); + OrcaSetPunctuation(env, connection, conf); + OrcaSetVoiceRate(env, connection, conf); + OrcaSetVoicePitch(env, connection, conf); + OrcaSetVolume(env, connection, conf); +} + +void OrcaSetVolume(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getGain(); + jdouble gain = (*env)->CallStaticDoubleMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getGain, conf); + JNU_CHECK_EXCEPTION(env); + if (gain < 0) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of gain from config\n"); +#endif + return; + } + + int volume = (int)((gain - 5) * 20); + spd_set_volume(connection, volume); +} + +void OrcaSetVoiceRate(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getRate(); + jdouble rate = (*env)->CallStaticDoubleMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getRate, conf); + JNU_CHECK_EXCEPTION(env); + if (rate < 0) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of rate from config\n"); +#endif + return; + } + + int iRate = (int)((rate - 50) * 2); + spd_set_voice_rate(connection, iRate); +} + +void OrcaSetPunctuation(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getVerbalizePunctuationStyle(); + jint punctuation = (*env)->CallStaticIntMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getVerbalizePunctuationStyle, conf); + JNU_CHECK_EXCEPTION(env); + if (punctuation < 0) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of punctuation from config\n"); +#endif + return; + } + + spd_set_punctuation(connection, punctuation); +} + +void OrcaSetVoicePitch(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getAveragePitch(); + jdouble pitch = (*env)->CallStaticDoubleMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getAveragePitch, conf); + JNU_CHECK_EXCEPTION(env); + if (pitch < 0) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of pitch from config\n"); +#endif + return; + } + + int iPitch = (int)((pitch - 5) * 20); + spd_set_voice_pitch(connection, iPitch); +} + +void OrcaSetOutputModule(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getSpeechServerInfo(); + jobject jStr = (*env)->CallStaticObjectMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getSpeechServerInfo, conf); + JNU_CHECK_EXCEPTION(env); + if (jStr == NULL) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of speech server info from config\n"); +#endif + return; + } + + const char *sintName = JNU_GetStringPlatformChars(env, jStr, NULL); + if (sintName == NULL) + { + if ((*env)->ExceptionCheck(env) == JNI_FALSE) + { + JNU_ThrowOutOfMemoryError(env, "OrcaAnnounce: failed to obtain chars from the sintName string"); + } + + (*env)->DeleteLocalRef(env, jStr); + return; + } + + spd_set_output_module(connection, sintName); + JNU_ReleaseStringPlatformChars(env, jStr, sintName); + (*env)->DeleteLocalRef(env, jStr); +} + +void OrcaSetLanguage(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getLang(); + jobject jStr = (*env)->CallStaticObjectMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getLang, conf); + JNU_CHECK_EXCEPTION(env); + if (jStr == NULL) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of lang from config\n"); +#endif + return; + } + + const char *lang = JNU_GetStringPlatformChars(env, jStr, NULL); + if (lang == NULL) + { + if ((*env)->ExceptionCheck(env) == JNI_FALSE) + { + JNU_ThrowOutOfMemoryError(env, "OrcaAnnounce: failed to obtain chars from the lang string"); + } + + (*env)->DeleteLocalRef(env, jStr); + return; + } + + spd_set_language(connection, lang); + JNU_ReleaseStringPlatformChars(env, jStr, lang); + (*env)->DeleteLocalRef(env, jStr); +} + +int OrcaGetEnableSpeech(JNIEnv *env, jobject conf) +{ + GET_getEnableSpeech(-1); + int es = (*env)->CallStaticBooleanMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getEnableSpeech, conf); + JNU_CHECK_EXCEPTION_RETURN(env, -1); + return es; +} + +void OrcaSetSynthesisVoice(JNIEnv *env, SPDConnection *connection, jobject conf) +{ + GET_getName(); + jobject jStr = (*env)->CallStaticObjectMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getName, conf); + JNU_CHECK_EXCEPTION(env); + if (jStr == NULL) + { +#ifdef DEBUG + fprintf(stderr, "Failed to read value of voice name from config\n"); +#endif + return; + } + + const char *voiceName = JNU_GetStringPlatformChars(env, jStr, NULL); + if (voiceName == NULL) + { + if ((*env)->ExceptionCheck(env) == JNI_FALSE) + { + JNU_ThrowOutOfMemoryError(env, "OrcaAnnounce: failed to obtain chars from the voiceName string"); + } + + (*env)->DeleteLocalRef(env, jStr); + return; + } + + spd_set_synthesis_voice(connection, voiceName); + JNU_ReleaseStringPlatformChars(env, jStr, voiceName); + (*env)->DeleteLocalRef(env, jStr); +} + +jobject OrcaGetConf(JNIEnv *env) +{ + GET_getOrcaConfReturn(NULL); + jobject o = (*env)->CallStaticObjectMethod(env, jc_AccessibleAnnouncerUtilities, jsm_getOrcaConf); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + return o; +} + +#endif // #ifndef NO_A11Y_SPEECHD_ANNOUNCING diff --git a/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/OrcaAnnouncer.h b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/OrcaAnnouncer.h new file mode 100644 index 000000000000..8eac261482cd --- /dev/null +++ b/src/java.desktop/linux/native/libawt_xawt/AccessibleAnnouncer/OrcaAnnouncer.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef ORCACONF_H +#define ORCACONF_H + +#ifndef NO_A11Y_SPEECHD_ANNOUNCING + +#include +#include "jni.h" + +int OrcaAnnounce(JNIEnv *env, jstring str, jint priority); +jobject OrcaGetConf(JNIEnv *env); +void OrcaSetSpeechConf(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetLanguage(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetOutputModule(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetPunctuation(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetSynthesisVoice(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetVoiceRate(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetVoicePitch(JNIEnv *env, SPDConnection *connection, jobject conf); +void OrcaSetVolume(JNIEnv *env, SPDConnection *connection, jobject conf); +int OrcaGetEnableSpeech(JNIEnv *env, jobject conf); + +#endif // #ifndef NO_A11Y_SPEECHD_ANNOUNCING + +#endif //ORCACONF_H + diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/Application.java b/src/java.desktop/macosx/classes/com/apple/eawt/Application.java index 6ed4a7c1daf1..d31e1e72a4fb 100644 --- a/src/java.desktop/macosx/classes/com/apple/eawt/Application.java +++ b/src/java.desktop/macosx/classes/com/apple/eawt/Application.java @@ -54,6 +54,7 @@ import sun.awt.AWTAccessor; import sun.lwawt.LWWindowPeer; import sun.lwawt.macosx.CPlatformWindow; +import sun.util.logging.PlatformLogger; /** * The {@code Application} class allows you to integrate your Java application with the native Mac OS X environment. @@ -74,6 +75,8 @@ * @since 1.4 */ public class Application { + private static final PlatformLogger focusRequestLog = PlatformLogger.getLogger("jb.focus.requests"); + private static native void nativeInitializeApplicationDelegate(); static Application sApplication = null; @@ -297,6 +300,9 @@ public void disableSuddenTermination() { * @since Java for Mac OS X 10.5 Update 6 - 1.6, 1.5 */ public void requestForeground(final boolean allWindows) { + if (focusRequestLog.isLoggable(PlatformLogger.Level.FINE)) { + focusRequestLog.fine("requestForeground(" + (allWindows ? "allWindows" : "") + ")", new Throwable()); + } _AppMiscHandlers.requestActivation(allWindows); } @@ -425,4 +431,19 @@ public void requestToggleFullScreen(final Window window) { ((CPlatformWindow)platformWindow).toggleFullScreen(); } + public void requestEnterFullScreen(final Window window) { + final Object peer = AWTAccessor.getComponentAccessor().getPeer(window); + if (!(peer instanceof LWWindowPeer)) return; + Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow(); + if (!(platformWindow instanceof CPlatformWindow)) return; + ((CPlatformWindow)platformWindow).enterFullScreenMode(); + } + + public void requestLeaveFullScreen(final Window window) { + final Object peer = AWTAccessor.getComponentAccessor().getPeer(window); + if (!(peer instanceof LWWindowPeer)) return; + Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow(); + if (!(platformWindow instanceof CPlatformWindow)) return; + ((CPlatformWindow)platformWindow).exitFullScreenMode(); + } } diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/FullScreenHandler.java b/src/java.desktop/macosx/classes/com/apple/eawt/FullScreenHandler.java index c1d36d8add2b..6f2e7fc764e0 100644 --- a/src/java.desktop/macosx/classes/com/apple/eawt/FullScreenHandler.java +++ b/src/java.desktop/macosx/classes/com/apple/eawt/FullScreenHandler.java @@ -67,8 +67,10 @@ static void removeFullScreenListenerFrom(final RootPaneContainer window, final F } static FullScreenHandler getHandlerFor(final RootPaneContainer window) { - final Object value = window.getRootPane().getClientProperty(CLIENT_PROPERTY); - if (value instanceof FullScreenHandler) return (FullScreenHandler)value; + if (window != null && window.getRootPane() != null) { + final Object value = window.getRootPane().getClientProperty(CLIENT_PROPERTY); + if (value instanceof FullScreenHandler) return (FullScreenHandler)value; + } return null; } diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/_AppEventHandler.java b/src/java.desktop/macosx/classes/com/apple/eawt/_AppEventHandler.java index 248ae55f6d74..4ebd08b9cca0 100644 --- a/src/java.desktop/macosx/classes/com/apple/eawt/_AppEventHandler.java +++ b/src/java.desktop/macosx/classes/com/apple/eawt/_AppEventHandler.java @@ -27,6 +27,7 @@ import java.awt.EventQueue; import java.awt.Frame; +import java.awt.GraphicsEnvironment; import java.awt.desktop.AboutEvent; import java.awt.desktop.AboutHandler; import java.awt.desktop.AppForegroundEvent; @@ -65,8 +66,12 @@ import java.util.Map; import sun.awt.AppContext; import sun.awt.SunToolkit; +import sun.java2d.SunGraphicsEnvironment; +import sun.util.logging.PlatformLogger; class _AppEventHandler { + private static final PlatformLogger logger = PlatformLogger.getLogger(_AppEventHandler.class.getName()); + private static final int NOTIFY_ABOUT = 1; private static final int NOTIFY_PREFS = 2; private static final int NOTIFY_OPEN_APP = 3; @@ -83,6 +88,7 @@ class _AppEventHandler { private static final int NOTIFY_SCREEN_WAKE = 14; private static final int NOTIFY_SYSTEM_SLEEP = 15; private static final int NOTIFY_SYSTEM_WAKE = 16; + private static final int NOTIFY_SCREEN_CHANGE_PARAMETERS = 17; private static final int REGISTER_USER_SESSION = 1; private static final int REGISTER_SCREEN_SLEEP = 2; @@ -264,6 +270,16 @@ private static void handleNativeNotification(final int code) { case NOTIFY_SYSTEM_WAKE: instance.systemSleepDispatcher.dispatch(new _NativeEvent(Boolean.FALSE)); break; + case NOTIFY_SCREEN_CHANGE_PARAMETERS: + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("NOTIFY_SCREEN_CHANGE_PARAMETERS"); + } + if (AppContext.getAppContext() != null) { + EventQueue.invokeLater( + () -> ((SunGraphicsEnvironment) GraphicsEnvironment. + getLocalGraphicsEnvironment()).displayParametersChanged()); + } + break; default: System.err.println("EAWT unknown native notification: " + code); break; diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/event/GestureHandler.java b/src/java.desktop/macosx/classes/com/apple/eawt/event/GestureHandler.java index 4514da90ca90..e3813cf9dbdd 100644 --- a/src/java.desktop/macosx/classes/com/apple/eawt/event/GestureHandler.java +++ b/src/java.desktop/macosx/classes/com/apple/eawt/event/GestureHandler.java @@ -43,6 +43,7 @@ final class GestureHandler { @Native static final int ROTATE = 2; @Native static final int MAGNIFY = 3; @Native static final int SWIPE = 4; + @Native static final int PRESSURE = 5; // installs a private instance of GestureHandler, if necessary static void addGestureListenerTo(final JComponent component, final GestureListener listener) { @@ -97,6 +98,9 @@ public void run() { case SWIPE: firstNotifier.recursivelyHandleSwipe(a, b, new SwipeEvent()); return; + case PRESSURE: + firstNotifier.recursivelyHandlePressure(new PressureEvent(a,b)); + return; } } }); @@ -107,6 +111,7 @@ public void run() { final List rotaters = new LinkedList(); final List magnifiers = new LinkedList(); final List swipers = new LinkedList(); + final List pressures = new LinkedList(); GestureHandler() { } @@ -115,6 +120,7 @@ void addListener(final GestureListener listener) { if (listener instanceof RotationListener) rotaters.add((RotationListener)listener); if (listener instanceof MagnificationListener) magnifiers.add((MagnificationListener)listener); if (listener instanceof SwipeListener) swipers.add((SwipeListener)listener); + if (listener instanceof PressureListener) pressures.add((PressureListener)listener); } void removeListener(final GestureListener listener) { @@ -169,6 +175,16 @@ void recursivelyHandleMagnify(final MagnificationEvent e) { if (next != null) next.recursivelyHandleMagnify(e); } + void recursivelyHandlePressure(final PressureEvent e) { + for (final PressureListener listener : handler.pressures) { + listener.pressure(e); + if (e.isConsumed()) return; + } + + final PerComponentNotifier next = getNextNotifierForComponent(component.getParent()); + if (next != null) next.recursivelyHandlePressure(e); + } + void recursivelyHandleSwipe(final double x, final double y, final SwipeEvent e) { for (final SwipeListener listener : handler.swipers) { if (x < 0) listener.swipedLeft(e); diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/event/PressureEvent.java b/src/java.desktop/macosx/classes/com/apple/eawt/event/PressureEvent.java new file mode 100644 index 000000000000..f3140cc3dfb0 --- /dev/null +++ b/src/java.desktop/macosx/classes/com/apple/eawt/event/PressureEvent.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.apple.eawt.event; + +/** + * Event indicating a swipe was performed by the user. + * + * @see PressureListener + * + * @since Java for Mac OS X 10.10 Update 3, JDK 8 + */ +public class PressureEvent extends GestureEvent { + + public double getPressure() { + return pressure; + } + + public double getStage() { + return stage; + } + + private double pressure; + private double stage; + + PressureEvent(double pressure, double stage) { + this.pressure = pressure; + this.stage = stage; + } +} diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/event/PressureListener.java b/src/java.desktop/macosx/classes/com/apple/eawt/event/PressureListener.java new file mode 100644 index 000000000000..de6a646b0bb7 --- /dev/null +++ b/src/java.desktop/macosx/classes/com/apple/eawt/event/PressureListener.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.apple.eawt.event; + +/** + * Listener interface for receiving pressure events. + * + * @see PressureEvent + * @see GestureUtilities + * + * @since Java for Mac OS X 10.5 Update 7, Java for Mac OS X 10.6 Update 2 + */ +public interface PressureListener extends GestureListener { + public void pressure(final PressureEvent e); +} diff --git a/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java b/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java index 9b0981aa8b29..bad7dc9c8b12 100644 --- a/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java +++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaCaret.java @@ -62,6 +62,7 @@ public void install(final JTextComponent c) { public void deinstall(final JTextComponent c) { c.removePropertyChangeListener(this); super.deinstall(c); + mFocused = false; } @Override diff --git a/src/java.desktop/macosx/classes/com/apple/laf/AquaImageFactory.java b/src/java.desktop/macosx/classes/com/apple/laf/AquaImageFactory.java index 2fddf6483a5d..a1371c416889 100644 --- a/src/java.desktop/macosx/classes/com/apple/laf/AquaImageFactory.java +++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaImageFactory.java @@ -84,11 +84,11 @@ public static IconUIResource getLockImageIcon() { @SuppressWarnings("removal") static Image getGenericJavaIcon() { - return java.security.AccessController.doPrivileged(new PrivilegedAction() { + return checkValidOrStub(java.security.AccessController.doPrivileged(new PrivilegedAction() { public Image run() { return com.apple.eawt.Application.getApplication().getDockIconImage(); } - }); + })); } @SuppressWarnings("removal") @@ -521,4 +521,23 @@ public static Color getSelectionInactiveForegroundColorUIResource() { public static Color getSelectedControlColorUIResource() { return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.SELECTED_CONTROL_TEXT_COLOR)); } + + private static class EmptyImage { + static final BufferedImage INSTANCE; + static { + INSTANCE = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB); + Graphics g = INSTANCE.createGraphics(); + g.setColor(new Color(0, 0, 0, 0)); + g.fillRect(0, 0, 16, 16); + g.dispose(); + } + } + + // [tav] a workaround for JBR-1492 + private static Image checkValidOrStub(Image image) { + if (image == null || image.getWidth(null) <= 0 || image.getHeight(null) <= 0) { + return EmptyImage.INSTANCE; + } + return image; + } } diff --git a/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java b/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java index 5a865f92cb62..0bf3c5fd3596 100644 --- a/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java +++ b/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,12 +41,14 @@ import sun.java2d.MacOSFlags; import sun.java2d.metal.MTLGraphicsConfig; import sun.java2d.opengl.CGLGraphicsConfig; +import sun.util.logging.PlatformLogger; import static java.awt.peer.ComponentPeer.SET_BOUNDS; public final class CGraphicsDevice extends GraphicsDevice - implements DisplayChangedListener { + implements DisplayChangedListener, DisplayParametersChangedListener { + private static final PlatformLogger logger = PlatformLogger.getLogger(CGraphicsDevice.class.getName()); /** * CoreGraphics display ID. This identifier can become non-valid at any time * therefore methods, which is using this id should be ready to it. @@ -56,10 +58,9 @@ public final class CGraphicsDevice extends GraphicsDevice private volatile double yResolution; private volatile Rectangle bounds; private volatile int scale; + private volatile Insets screenInsets; private GraphicsConfiguration config; - private static boolean metalPipelineEnabled = false; - private static boolean oglPipelineEnabled = false; private static AWTPermission fullScreenExclusivePermission; @@ -71,70 +72,34 @@ public final class CGraphicsDevice extends GraphicsDevice public CGraphicsDevice(final int displayID) { this.displayID = displayID; this.initialMode = getDisplayMode(); + StringBuilder errorMessage = new StringBuilder(); - if (MacOSFlags.isMetalEnabled()) { - // Try to create MTLGraphicsConfig, if it fails, - // try to create CGLGraphicsConfig as a fallback - this.config = MTLGraphicsConfig.getConfig(this, displayID); - - if (this.config != null) { - metalPipelineEnabled = true; - } else { - // Try falling back to OpenGL pipeline - if (MacOSFlags.isMetalVerbose()) { - System.out.println("Metal rendering pipeline" + - " initialization failed,using OpenGL" + - " rendering pipeline"); - } - - this.config = CGLGraphicsConfig.getConfig(this); + this.config = CGraphicsEnvironment.usingMetalPipeline() ? + MTLGraphicsConfig.getConfig(this, displayID, errorMessage) : + CGLGraphicsConfig.getConfig(this); - if (this.config != null) { - oglPipelineEnabled = true; - } + if (this.config == null) { + if (MacOSFlags.isMetalVerbose() || MacOSFlags.isOGLVerbose()) { + System.out.println(MacOSFlags.getRenderPipelineName() + + " rendering pipeline initialization failed"); } + throw new IllegalStateException("Error - unable to initialize " + + MacOSFlags.getRenderPipelineName()); } else { - // Try to create CGLGraphicsConfig, if it fails, - // try to create MTLGraphicsConfig as a fallback - this.config = CGLGraphicsConfig.getConfig(this); - - if (this.config != null) { - oglPipelineEnabled = true; - } else { - // Try falling back to Metal pipeline - if (MacOSFlags.isOGLVerbose()) { - System.out.println("OpenGL rendering pipeline" + - " initialization failed,using Metal" + - " rendering pipeline"); - } - - this.config = MTLGraphicsConfig.getConfig(this, displayID); - - if (this.config != null) { - metalPipelineEnabled = true; - } + if (MacOSFlags.isMetalVerbose() || MacOSFlags.isOGLVerbose()) { + System.out.println(MacOSFlags.getRenderPipelineName() + + " pipeline enabled on screen " + displayID); } } - if (!metalPipelineEnabled && !oglPipelineEnabled) { - // This indicates fallback to other rendering pipeline also failed. - // Should never reach here - throw new InternalError("Error - unable to initialize any" + - " rendering pipeline."); - } - - if (metalPipelineEnabled && MacOSFlags.isMetalVerbose()) { - System.out.println("Metal pipeline enabled on screen " + displayID); - } else if (oglPipelineEnabled && MacOSFlags.isOGLVerbose()) { - System.out.println("OpenGL pipeline enabled on screen " + displayID); - } - - // initializes default device state, might be redundant step since we - // call "displayChanged()" later anyway, but we do not want to leave the - // device in an inconsistent state after construction + // [JBR] we don't call displayChanged after creating a device, so call it here. displayChanged(); } + int getDisplayID() { + return displayID; + } + /** * Return a list of all configurations. */ @@ -183,13 +148,7 @@ Rectangle getBounds() { } public Insets getScreenInsets() { - // the insets are queried synchronously and are not cached - // since there are no Quartz or Cocoa means to receive notifications - // on insets changes (e.g. when the Dock is resized): - // the existing CGDisplayReconfigurationCallBack is not notified - // as well as the NSApplicationDidChangeScreenParametersNotification - // is fired on the Dock location changes only - return nativeGetScreenInsets(displayID); + return screenInsets; } public int getScaleFactor() { @@ -212,11 +171,37 @@ public void displayChanged() { xResolution = nativeGetXResolution(displayID); yResolution = nativeGetYResolution(displayID); bounds = nativeGetBounds(displayID).getBounds(); //does integer rounding + screenInsets = nativeGetScreenInsets(displayID); initScaleFactor(); resizeFSWindow(getFullScreenWindow(), bounds); //TODO configs? } + /** + * @return false if display parameters were changed, so we need to recreate the device. + */ + boolean updateDevice() { + int s = scale; + double xr = xResolution, yr = yResolution; + var b = bounds; + displayChanged(); + return s == scale && xr == xResolution && yr == yResolution && b.equals(bounds); + } + + public void displayParametersChanged() { + Insets newScreenInsets = nativeGetScreenInsets(displayID); + if (!newScreenInsets.equals(screenInsets)) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Screen insets for display(" + displayID + ") changed " + + "[top=" + screenInsets.top + ",left=" + screenInsets.left + + ",bottom=" + screenInsets.bottom + ",right=" + screenInsets.right + + "]->[top=" + newScreenInsets.top + ",left=" + newScreenInsets.left + + ",bottom=" + newScreenInsets.bottom + ",right=" + newScreenInsets.right + + "]"); + } + screenInsets = newScreenInsets; + } + } @Override public void paletteChanged() { // devices do not need to react to this event. @@ -380,11 +365,8 @@ public DisplayMode[] getDisplayModes() { } } - public static boolean usingMetalPipeline() { - return metalPipelineEnabled; - } - private void initScaleFactor() { + int _scale = scale; if (SunGraphicsEnvironment.isUIScaleEnabled()) { double debugScale = SunGraphicsEnvironment.getDebugScale(); scale = (int) (debugScale >= 1 @@ -393,6 +375,9 @@ private void initScaleFactor() { } else { scale = 1; } + if (_scale != scale && logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("current scale = " + _scale + ", new scale = " + scale + " (" + this + ")"); + } } private static native double nativeGetScaleFactor(int displayID); diff --git a/src/java.desktop/macosx/classes/sun/awt/CGraphicsEnvironment.java b/src/java.desktop/macosx/classes/sun/awt/CGraphicsEnvironment.java index fe4431e30912..ab2850ef39f5 100644 --- a/src/java.desktop/macosx/classes/sun/awt/CGraphicsEnvironment.java +++ b/src/java.desktop/macosx/classes/sun/awt/CGraphicsEnvironment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,16 +30,22 @@ import java.awt.GraphicsDevice; import java.awt.HeadlessException; import java.awt.Toolkit; +import java.io.File; +import java.lang.annotation.Native; import java.lang.ref.WeakReference; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Map; +import sun.java2d.MacOSFlags; import sun.java2d.MacosxSurfaceManagerFactory; import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SurfaceManagerFactory; +import sun.util.logging.PlatformLogger; /** * This is an implementation of a GraphicsEnvironment object for the default @@ -51,6 +57,14 @@ */ public final class CGraphicsEnvironment extends SunGraphicsEnvironment { + private static final PlatformLogger logger = + PlatformLogger.getLogger(CGraphicsEnvironment.class.getName()); + + @Native private final static int MTL_SUPPORTED = 0; + @Native private final static int MTL_NO_DEVICE = 1; + @Native private final static int MTL_NO_SHADER_LIB = 2; + @Native private final static int MTL_ERROR = 3; + /** * Fetch an array of all valid CoreGraphics display identifiers. */ @@ -67,9 +81,35 @@ public final class CGraphicsEnvironment extends SunGraphicsEnvironment { */ public static void init() { } + @SuppressWarnings("removal") + private static final String mtlShadersLib = AccessController.doPrivileged( + (PrivilegedAction) () -> + System.getProperty("java.home", "") + File.separator + + "lib" + File.separator + "shaders.metallib"); + + private static native int initMetal(String shaderLib); + static { // Load libraries and initialize the Toolkit. Toolkit.getDefaultToolkit(); + metalPipelineEnabled = false; + if (MacOSFlags.isMetalEnabled()) { + int res = initMetal(mtlShadersLib); + if (res != MTL_SUPPORTED) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Cannot initialize Metal: " + + switch (res) { + case MTL_ERROR -> "Unexpected error."; + case MTL_NO_DEVICE -> "No MTLDevice."; + case MTL_NO_SHADER_LIB -> "No Metal shader library."; + default -> "Unexpected error (" + res + ")."; + }); + } + } else { + metalPipelineEnabled = true; + } + } + // Install the correct surface manager factory. SurfaceManagerFactory.setInstance(new MacosxSurfaceManagerFactory()); } @@ -88,6 +128,12 @@ public static void init() { } */ private native void deregisterDisplayReconfiguration(long context); + private static boolean metalPipelineEnabled; + + public static boolean usingMetalPipeline() { + return metalPipelineEnabled; + } + /** Available CoreGraphics displays. */ private final Map devices = new HashMap<>(5); /** @@ -120,12 +166,17 @@ public CGraphicsEnvironment() { } } + public static String getMtlShadersLibPath() { + return mtlShadersLib; + } + /** * Updates the list of devices and notify listeners. */ private void rebuildDevices() { initDevices(); - displayChanged(); + // Do not notify devices, this was already done in initDevices. + displayChanger.notifyListeners(); } /** @@ -166,7 +217,14 @@ private synchronized void initDevices() { // So, we initialize the main display first, then retrieve actual list // of displays, and then recheck the main display again. if (!old.containsKey(mainDisplayID)) { - old.put(mainDisplayID, new CGraphicsDevice(mainDisplayID)); + try { + old.put(mainDisplayID, new CGraphicsDevice(mainDisplayID)); + } catch (IllegalStateException e) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Unable to initialize graphics device for displayID=" + + mainDisplayID + " : " + e); + } + } } int[] displayIDs = getDisplayIDs(); @@ -175,8 +233,17 @@ private synchronized void initDevices() { displayIDs = new int[]{mainDisplayID}; } for (int id : displayIDs) { - devices.put(id, old.containsKey(id) ? old.remove(id) - : new CGraphicsDevice(id)); + old.compute(id, (i, d) -> { + if (d != null && d.updateDevice()) { + // Device didn't change -> reuse + devices.put(i, d); + return null; + } else { + // Device changed -> create new + devices.put(i, new CGraphicsDevice(i)); + return d; + } + }); } // fetch the main display again, the old value might be outdated mainDisplayID = getMainDisplayID(); @@ -212,9 +279,12 @@ private synchronized void initDevices() { } private CGraphicsDevice getSimilarDevice(CGraphicsDevice old) { + CGraphicsDevice sameId = devices.get(old.getDisplayID()); + if (sameId != null) { + return sameId; + } for (CGraphicsDevice device : devices.values()) { if (device.getBounds().equals(old.getBounds())) { - // for now we will use the bounds only return device; } } @@ -261,12 +331,15 @@ public Font[] getAllFonts() { int numLogical = sLogicalFonts.length; int numOtherFonts = superFonts.length; - newFonts = new Font[numOtherFonts + numLogical]; - System.arraycopy(superFonts,0,newFonts,numLogical,numOtherFonts); + newFonts = new Font[numOtherFonts + numLogical * 4]; + System.arraycopy(superFonts, 0, newFonts, numLogical * 4, numOtherFonts); for (int i = 0; i < numLogical; i++) { - newFonts[i] = new Font(sLogicalFonts[i], Font.PLAIN, 1); + for (int j = 0; j < 4; j++) + { + newFonts[i * 4 + j] = new Font(sLogicalFonts[i], j, 1); + } } return newFonts; } diff --git a/src/java.desktop/macosx/classes/sun/font/CCharToGlyphMapper.java b/src/java.desktop/macosx/classes/sun/font/CCharToGlyphMapper.java index 5fa60f1b7ec2..85f49d3f4898 100644 --- a/src/java.desktop/macosx/classes/sun/font/CCharToGlyphMapper.java +++ b/src/java.desktop/macosx/classes/sun/font/CCharToGlyphMapper.java @@ -28,6 +28,8 @@ import java.util.HashMap; public class CCharToGlyphMapper extends CharToGlyphMapper { + private static final int UNMAPPED_CHAR = Integer.MIN_VALUE; + private static native int countGlyphs(final long nativeFontPtr); private Cache cache = new Cache(); @@ -77,7 +79,8 @@ public synchronized boolean charsToGlyphsNS(int count, if (code < FontUtilities.MIN_LAYOUT_CHARCODE) { continue; - } else if (FontUtilities.isComplexCharCode(code)) { + } else if (FontUtilities.isComplexCharCode(code) || + CharToGlyphMapper.isVariationSelector(code)) { return true; } else if (code >= 0x10000) { i += 1; // Empty glyph slot after surrogate @@ -88,17 +91,33 @@ public synchronized boolean charsToGlyphsNS(int count, return false; } + public synchronized int charToVariationGlyph(int unicode, int variationSelector) { + if (variationSelector == 0) { + return charToGlyph(unicode); + } + final char[] unicodeArray = new char[4]; + final int[] glyphArray = new int[4]; + + int size = Character.toChars(unicode, unicodeArray, 0); + size += Character.toChars(variationSelector, unicodeArray, size); + + nativeCharsToGlyphs(fFont.getNativeFontPtr(), size, unicodeArray, glyphArray); + + return glyphArray[0]; + } + public synchronized int charToGlyph(char unicode) { final int glyph = cache.get(unicode); - if (glyph != 0) return glyph; + if (glyph != 0) return glyph == UNMAPPED_CHAR ? 0 : glyph; final char[] unicodeArray = new char[] { unicode }; final int[] glyphArray = new int[1]; nativeCharsToGlyphs(fFont.getNativeFontPtr(), 1, unicodeArray, glyphArray); - cache.put(unicode, glyphArray[0]); + int result = glyphArray[0]; + cache.put(unicode, result == 0 ? UNMAPPED_CHAR : result); - return glyphArray[0]; + return result; } public synchronized int charToGlyph(int unicode) { @@ -243,7 +262,7 @@ public synchronized void get(int count, char[] indices, int[] values) final int value = get(code); if (value != 0 && value != -1) { - values[i] = value; + values[i] = value == UNMAPPED_CHAR ? 0 : value; if (code >= 0x10000) { values[i+1] = INVISIBLE_GLYPH_ID; i++; @@ -288,9 +307,10 @@ public synchronized void get(int count, char[] indices, int[] values) low - LO_SURROGATE_START + 0x10000; } } - values[i] = glyphCodes[m]; - put(code, values[i]); - if (code >= 0x10000) { + values[i] = glyphCodes[m]; + int glyphCode = values[i]; + put(code, glyphCode == 0 ? UNMAPPED_CHAR : glyphCode); + if (code >= 0x10000) { m++; values[i + 1] = INVISIBLE_GLYPH_ID; } diff --git a/src/java.desktop/macosx/classes/sun/font/CCompositeFont.java b/src/java.desktop/macosx/classes/sun/font/CCompositeFont.java new file mode 100644 index 000000000000..a26c55c35b80 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/font/CCompositeFont.java @@ -0,0 +1,103 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.font; + +import java.lang.ref.SoftReference; +import java.util.ArrayList; +import java.util.List; + +public final class CCompositeFont extends CompositeFont { + private final List fallbackFonts = new ArrayList<>(); + + public CCompositeFont(CFont font) { + super(new PhysicalFont[]{font}); + mapper = new CCompositeGlyphMapper(this); + } + + @Override + protected void initSlotMask() { + // List of fallback fonts can grow dynamically for CCompositeFont. + // Adding a new font to fallback list may require more bits + // to represent slot index, which will cause slotShift to increment, + // which in turn will invalidate all glyph codes returned earlier. + // This will cause rendering garbage when fallback list grows + // while rendering a chunk of text, so here we just set slotShift + // to fixed 8 bits and hope we never exceed it (just like before). + slotShift = 8; + slotMask = 0xff; + } + + @Override + public synchronized int getNumSlots() { + return super.getNumSlots(); + } + + @Override + public CFont getSlotFont(int slot) { + if (slot == 0) return (CFont) super.getSlotFont(0); + synchronized (this) { + return fallbackFonts.get(slot - 1); + } + } + + @Override + synchronized FontStrike getStrike(FontStrikeDesc desc, boolean copy) { + return super.getStrike(desc, copy); + } + + @Override + protected synchronized int getValidatedGlyphCode(int glyphCode) { + return super.getValidatedGlyphCode(glyphCode); + } + + @Override + public boolean hasSupplementaryChars() { + return false; + } + + @Override + public boolean useAAForPtSize(int ptsize) { + return true; + } + + public synchronized int findSlot(String fontName) { + for (int slot = 0; slot < numSlots; slot++) { + CFont slotFont = getSlotFont(slot); + if (fontName.equals(slotFont.getNativeFontName())) { + return slot; + } + } + return -1; + } + + public synchronized int addSlot(CFont font) { + int slot = findSlot(font.getNativeFontName()); + if (slot >= 0) return slot; + fallbackFonts.add(font); + lastFontStrike = new SoftReference<>(null); + strikeCache.clear(); + return numSlots++; + } +} diff --git a/src/java.desktop/macosx/classes/sun/font/CCompositeGlyphMapper.java b/src/java.desktop/macosx/classes/sun/font/CCompositeGlyphMapper.java index 1897c7af6420..a48fb61f7b07 100644 --- a/src/java.desktop/macosx/classes/sun/font/CCompositeGlyphMapper.java +++ b/src/java.desktop/macosx/classes/sun/font/CCompositeGlyphMapper.java @@ -25,131 +25,68 @@ package sun.font; -public final class CCompositeGlyphMapper extends CompositeGlyphMapper { - - private CompositeFont font; - private CharToGlyphMapper[] slotMappers; +import java.awt.*; - public CCompositeGlyphMapper(CompositeFont compFont) { +public final class CCompositeGlyphMapper extends CompositeGlyphMapper { + public CCompositeGlyphMapper(CCompositeFont compFont) { super(compFont); - font = compFont; - slotMappers = new CharToGlyphMapper[font.numSlots]; - missingGlyph = 0; } - private CharToGlyphMapper getSlotMapper(int slot) { - CharToGlyphMapper mapper = slotMappers[slot]; - if (mapper == null) { - mapper = font.getSlotFont(slot).getMapper(); - slotMappers[slot] = mapper; + @Override + public int charToVariationGlyph(int unicode, int variationSelector) { + if (variationSelector == 0) { + return charToGlyph(unicode); + } else { + int glyph = convertToGlyph(unicode, variationSelector); + if (glyph == missingGlyph) glyph = charToGlyph(unicode); + return glyph; } - return mapper; } - public boolean canDisplay(char ch) { - int glyph = charToGlyph(ch); - return glyph != missingGlyph; + @Override + protected int convertToGlyph(int unicode) { + int glyph = convertToGlyph(unicode, 0); + setCachedGlyphCode(unicode, glyph); + return glyph; } - private int convertToGlyph(int unicode) { - for (int slot = 0; slot < font.numSlots; slot++) { - CharToGlyphMapper mapper = getSlotMapper(slot); - int glyphCode = mapper.charToGlyph(unicode); - // The CFont Mappers will return a negative code - // for fonts that will fill the glyph from fallbacks - // - cascading font in OSX-speak. But we need to be - // know here that only the codes > 0 are really present. - if (glyphCode > 0) { - glyphCode = compositeGlyphCode(slot, glyphCode); - return glyphCode; - } + @Override + protected int convertToGlyph(int unicode, int variationSelector) { + CCompositeFont compositeFont = (CCompositeFont) font; + CFont mainFont = (CFont) font.getSlotFont(0); + String[] fallbackFontInfo = new String[2]; + int glyphCode = nativeCodePointToGlyph(mainFont.getNativeFontPtr(), unicode, variationSelector, fallbackFontInfo); + if (glyphCode == missingGlyph) { + return missingGlyph; } - return missingGlyph; - } - - public int getNumGlyphs() { - int numGlyphs = 0; - for (int slot=0; slot<1 /*font.numSlots*/; slot++) { - CharToGlyphMapper mapper = slotMappers[slot]; - if (mapper == null) { - mapper = font.getSlotFont(slot).getMapper(); - slotMappers[slot] = mapper; - } - numGlyphs += mapper.getNumGlyphs(); + String fallbackFontName = fallbackFontInfo[0]; + String fallbackFontFamilyName = fallbackFontInfo[1]; + if (fallbackFontName == null || fallbackFontFamilyName == null) { + return font.compositeGlyphCode(0, glyphCode); } - return numGlyphs; - } - - public int charToGlyph(int unicode) { - return convertToGlyph(unicode); - } - - public int charToGlyph(char unicode) { - return convertToGlyph(unicode); - } - - public boolean charsToGlyphsNS(int count, char[] unicodes, int[] glyphs) { - - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - glyphs[i + 1] = INVISIBLE_GLYPH_ID; - } + int slot = compositeFont.findSlot(fallbackFontName); + + if (slot < 0) { + Font2D fallbackFont = FontManagerFactory.getInstance().findFont2D(fallbackFontName, + Font.PLAIN, FontManager.NO_FALLBACK); + if (!(fallbackFont instanceof CFont) || + !fallbackFontName.equals(((CFont) fallbackFont).getNativeFontName())) { + // Native font fallback mechanism can return "hidden" fonts - their names start with dot, + // and they are not returned in a list of fonts available in system, but they can still be used + // if requested explicitly. + fallbackFont = new CFont(fallbackFontName, fallbackFontFamilyName, null); } - glyphs[i] = convertToGlyph(code); + if (mainFont.isFakeItalic()) fallbackFont = ((CFont)fallbackFont).createItalicVariant(false); - if (code < FontUtilities.MIN_LAYOUT_CHARCODE) { - continue; - } - else if (FontUtilities.isComplexCharCode(code)) { - return true; - } - else if (code >= 0x10000) { - i += 1; // Empty glyph slot after surrogate - continue; - } - } - - return false; - } - - public void charsToGlyphs(int count, char[] unicodes, int[] glyphs) { - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - - glyphs[i] = convertToGlyph(code); - i += 1; // Empty glyph slot after surrogate - glyphs[i] = INVISIBLE_GLYPH_ID; - continue; - } - } - - glyphs[i] = convertToGlyph(code); + slot = compositeFont.addSlot((CFont) fallbackFont); } - } - public void charsToGlyphs(int count, int[] unicodes, int[] glyphs) { - for (int i=0; i listOfString); - - private CompositeFont createCompositeFont() { - ArrayList listOfString = new ArrayList(); - getCascadeList(nativeFontPtr, listOfString); - - // In some italic cases the standard Mac cascade list is missing Arabic. - listOfString.add("GeezaPro"); - CFontManager fm = (CFontManager) FontManagerFactory.getInstance(); - int numFonts = 1 + listOfString.size(); - PhysicalFont[] fonts = new PhysicalFont[numFonts]; - fonts[0] = this; - int idx = 1; - if (FontUtilities.isLogging()) { - FontUtilities.logInfo("Cascading list for " + this + " :"); - } - for (String s : listOfString) { - if (FontUtilities.isLogging()) { - FontUtilities.logInfo("Fallback:" + s); - } - if (s.equals(".AppleSymbolsFB")) { - // Don't know why we get the weird name above .. replace. - s = "AppleSymbols"; - } - Font2D f2d = fm.getOrCreateFallbackFont(s); - if (f2d == null || f2d == this) { - continue; - } - fonts[idx++] = (PhysicalFont)f2d; - } - if (idx < fonts.length) { - PhysicalFont[] orig = fonts; - fonts = new PhysicalFont[idx]; - System.arraycopy(orig, 0, fonts, 0, idx); - } - CompositeFont compFont = new CompositeFont(fonts); - compFont.mapper = new CCompositeGlyphMapper(compFont); - return compFont; - } - private CompositeFont compFont; public CompositeFont getCompositeFont2D() { if (compFont == null) { - compFont = createCompositeFont(); + compFont = new CCompositeFont(this); } return compFont; } @@ -270,6 +230,19 @@ protected FontStrike createStrike(FontStrikeDesc desc) { return new CStrike(this, desc); } + boolean isFakeItalic() { + return isFakeItalic; + } + + String getNativeFontName() { + return nativeFontName; + } + + @Override + public String getTypographicSubfamilyName() { + return faceName == null ? super.getTypographicSubfamilyName() : faceName; + } + // sun.font.Font2D caches the last used strike, // but does not check if the properties of the strike match the properties // of the incoming java.awt.Font object (size, style, etc). @@ -297,4 +270,8 @@ public String toString() { ", familyName: " + familyName + ", style: " + style + " } aka: " + super.toString(); } + + public Font2D createItalic() { + return this.createItalicVariant(true); + } } diff --git a/src/java.desktop/macosx/classes/sun/font/CFontManager.java b/src/java.desktop/macosx/classes/sun/font/CFontManager.java index baab32571535..d786b95d0cbb 100644 --- a/src/java.desktop/macosx/classes/sun/font/CFontManager.java +++ b/src/java.desktop/macosx/classes/sun/font/CFontManager.java @@ -33,21 +33,16 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Locale; -import java.util.Map; import java.util.TreeMap; -import java.util.Vector; -import java.util.concurrent.ConcurrentHashMap; import javax.swing.plaf.FontUIResource; import sun.awt.FontConfiguration; import sun.awt.HeadlessToolkit; -import sun.awt.util.ThreadGroupUtils; import sun.lwawt.macosx.*; public final class CFontManager extends SunFontManager { private static Hashtable genericFonts = new Hashtable(); - private final Map fallbackFonts = new ConcurrentHashMap<>(); @Override protected FontConfiguration createFontConfiguration() { @@ -144,6 +139,19 @@ protected void addNativeFontFamilyNames(TreeMap familyNames, Loc } } + @Override + protected String getSystemFontVersion(TrueTypeFont bundledFont) { + String version = getNativeFontVersion(bundledFont.getPostscriptName()); + return version != null ? TrueTypeFont.parseVersion(version) : "0"; + } + + @Override + protected void loadJREFonts(String[] fonts) { + for (String name : fonts) { + loadNativeDirFonts(name); + } + } + protected void registerFontsInDir(final String dirName, boolean useJavaRasterizer, int fontRank, boolean defer, boolean resolveSymLinks) { @@ -164,44 +172,14 @@ protected void registerFontsInDir(final String dirName, boolean useJavaRasterize private native void loadNativeDirFonts(String fontPath); private native void loadNativeFonts(); + native String getNativeFontVersion(String psName); - void registerFont(String fontName, String fontFamilyName) { - final CFont font = new CFont(fontName, fontFamilyName); - + void registerFont(String fontName, String fontFamilyName, String faceName) { + // Use different family for specific font faces + final CFont font = new CFont(fontName, jreFamilyMap.getOrDefault(fontName, fontFamilyName), faceName); registerGenericFont(font); } - void registerItalicDerived() { - FontFamily[] famArr = FontFamily.getAllFontFamilies(); - for (int i=0; i fontToFileMap, HashMap fontToFamilyNameMap, HashMap> familyToFontListMap, Locale locale) {} - - Font2D getOrCreateFallbackFont(String fontName) { - Font2D font2D = findFont2D(fontName, Font.PLAIN, FontManager.NO_FALLBACK); - if (font2D != null || fontName.startsWith(".")) { - return font2D; - } else { - // macOS doesn't list some system fonts in [NSFontManager availableFontFamilies] output, - // so they are not registered in font manager as part of 'loadNativeFonts'. - // These fonts are present in [NSFontManager availableFonts] output though, - // and can be accessed in the same way as other system fonts. - return fallbackFonts.computeIfAbsent(fontName, name -> new CFont(name, null)); - } - } } diff --git a/src/java.desktop/macosx/classes/sun/font/CStrike.java b/src/java.desktop/macosx/classes/sun/font/CStrike.java index b0131711ca5c..241596aa995d 100644 --- a/src/java.desktop/macosx/classes/sun/font/CStrike.java +++ b/src/java.desktop/macosx/classes/sun/font/CStrike.java @@ -25,9 +25,15 @@ package sun.font; +import sun.lwawt.macosx.concurrent.Dispatch; + import java.awt.Rectangle; import java.awt.geom.*; -import java.util.*; +import java.util.HashMap; +import java.util.concurrent.atomic.AtomicBoolean; +import sun.lwawt.macosx.CThreading; +import static sun.awt.SunHints.*; + public final class CStrike extends PhysicalStrike { @@ -36,7 +42,9 @@ private static native long createNativeStrikePtr(long nativeFontPtr, double[] glyphTx, double[] invDevTxMatrix, int aaHint, - int fmHint); + int fmHint, + int subpixelResolutionX, + int subpixelResolutionY); // Disposes the native strike private static native void disposeNativeStrikePtr(long nativeStrikePtr); @@ -60,6 +68,16 @@ private static native GeneralPath getNativeGlyphOutline(long nativeStrikePtr, double x, double y); + private static native void getNativeGlyphRenderData(long nativeStrikePtr, + int glyphCode, + double x, + double y, + GlyphRenderData result); + + private static native void getNativeGlyphOutlineBounds(long nativeStrikePtr, + int glyphCode, + float [] rectData); + // returns the bounding rect for a glyph private static native void getNativeGlyphImageBounds(long nativeStrikePtr, int glyphCode, @@ -119,7 +137,9 @@ public long getNativeStrikePtr() { } nativeStrikePtr = createNativeStrikePtr(nativeFont.getNativeFontPtr(), - glyphTx, invDevTxMatrix, aaHint, fmHint); + glyphTx, invDevTxMatrix, aaHint, fmHint, + FontUtilities.subpixelResolution.width, + FontUtilities.subpixelResolution.height); } return nativeStrikePtr; @@ -173,19 +193,9 @@ Point2D.Float getGlyphMetrics(final int glyphCode) { } Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) { - GeneralPath gp = getGlyphOutline(glyphCode, 0f, 0f); - Rectangle2D r2d = gp.getBounds2D(); - Rectangle2D.Float r2df; - if (r2d instanceof Rectangle2D.Float) { - r2df = (Rectangle2D.Float)r2d; - } else { - float x = (float)r2d.getX(); - float y = (float)r2d.getY(); - float w = (float)r2d.getWidth(); - float h = (float)r2d.getHeight(); - r2df = new Rectangle2D.Float(x, y, w, h); - } - return r2df; + final float [] rectData = new float[4]; + getNativeGlyphOutlineBounds(getNativeStrikePtr(), glyphCode, rectData); + return new Rectangle2D.Float(rectData[0], rectData[1], rectData[2], rectData[3]); } // pt, result in device space @@ -203,7 +213,15 @@ void getGlyphImageBounds(int glyphCode, Point2D.Float pt, Rectangle result) { return; } - result.setRect(floatRect.x + pt.x, floatRect.y + pt.y, floatRect.width, floatRect.height); + boolean subpixel = desc.aaHint == INTVAL_TEXT_ANTIALIAS_ON && + desc.fmHint == INTVAL_FRACTIONALMETRICS_ON; + float subpixelResolutionX = subpixel ? FontUtilities.subpixelResolution.width : 1; + float subpixelResolutionY = subpixel ? FontUtilities.subpixelResolution.height : 1; + // Before rendering, glyph positions are offset by 0.5 pixels, take into consideration + float x = ((int) (pt.x * subpixelResolutionX + 0.5f)) / subpixelResolutionX; + float y = ((int) (pt.y * subpixelResolutionY + 0.5f)) / subpixelResolutionY; + + result.setRect(floatRect.x + x, floatRect.y + y, floatRect.width, floatRect.height); } private void getGlyphImageBounds(int glyphCode, float x, float y, Rectangle2D.Float floatRect) { @@ -214,9 +232,10 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { return getNativeGlyphOutline(getNativeStrikePtr(), glyphCode, x, y); } - // should implement, however not called though any path that is publicly exposed - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { - throw new Error("not implemented yet"); + GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y) { + GlyphRenderData result = new GlyphRenderData(); + getNativeGlyphRenderData(getNativeStrikePtr(), glyphCode, x, y, result); + return result; } // called from the Sun2D renderer @@ -355,7 +374,7 @@ private static class GlyphInfoCache extends CStrikeDisposer { private static final int SECOND_LAYER_SIZE = 16384; // 16384 = 128x128 // rdar://problem/5204197 - private boolean disposed = false; + private final AtomicBoolean disposed = new AtomicBoolean(false); private final long[] firstLayerCache; private SparseBitShiftingTwoLayerArray secondLayerCache; @@ -418,41 +437,50 @@ public synchronized void put(final int index, final long value) { } public synchronized void dispose() { - // rdar://problem/5204197 - // Note that sun.font.Font2D.getStrike() actively disposes - // cleared strikeRef. We need to check the disposed flag to - // prevent double frees of native resources. - if (disposed) { - return; - } - - super.dispose(); - - // clean out the first array - disposeLongArray(firstLayerCache); - - // clean out the two layer arrays - if (secondLayerCache != null) { - final long[][] secondLayerLongArrayArray = secondLayerCache.cache; - for (int i = 0; i < secondLayerLongArrayArray.length; i++) { - final long[] longArray = secondLayerLongArrayArray[i]; - if (longArray != null) disposeLongArray(longArray); - } - } + final Runnable command = () -> { + // rdar://problem/5204197 + // Note that sun.font.Font2D.getStrike() actively disposes + // cleared strikeRef. We need to check the disposed flag to + // prevent double frees of native resources. + if (disposed.compareAndSet(false, true)) { + + super.dispose(); + + // clean out the first array + disposeLongArray(firstLayerCache); + + // clean out the two layer arrays + if (secondLayerCache != null) { + final long[][] secondLayerLongArrayArray = secondLayerCache.cache; + for (final long[] longArray : secondLayerLongArrayArray) { + if (longArray != null) disposeLongArray(longArray); + } + } - // clean up everyone else - if (generalCache != null) { - for (long longValue : generalCache.values()) { - if (longValue != -1 && longValue != 0) { - removeGlyphInfoFromCache(longValue); - StrikeCache.freeLongPointer(longValue); + // clean up everyone else + if (generalCache != null) { + for (long longValue : generalCache.values()) { + if (longValue != -1 && longValue != 0) { + removeGlyphInfoFromCache(longValue); + StrikeCache.freeLongPointer(longValue); + } + } } } - } - - // rdar://problem/5204197 - // Finally, set the flag. - disposed = true; + }; + + // Move disposal code to AppKit thread in order to avoid the + // following deadlock: + // 1) CGLGraphicsConfig.getCGLConfigInfo (called from Java2D + // disposal thread) takes RenderQueue.lock + // 2) CGLLayer.drawInCGLContext is invoked on AppKit thread and + // blocked on RenderQueue.lock + // 1) invokes native block on AppKit and wait + // + // If dispatch instance is not available, run the code on + // disposal thread as before + + CThreading.executeOnAppKit(command); } private static void disposeLongArray(final long[] longArray) { diff --git a/src/java.desktop/macosx/classes/sun/font/CStrikeDisposer.java b/src/java.desktop/macosx/classes/sun/font/CStrikeDisposer.java index b0c8c788ec99..2e72b977626c 100644 --- a/src/java.desktop/macosx/classes/sun/font/CStrikeDisposer.java +++ b/src/java.desktop/macosx/classes/sun/font/CStrikeDisposer.java @@ -25,6 +25,11 @@ package sun.font; +import sun.lwawt.macosx.concurrent.Dispatch; +import sun.lwawt.macosx.CThreading; + +import java.util.concurrent.atomic.AtomicBoolean; + /* * This keeps track of data that needs to be cleaned up once a * strike is freed. @@ -49,6 +54,7 @@ class CStrikeDisposer extends FontStrikeDisposer { long pNativeScalerContext; + private final AtomicBoolean disposed = new AtomicBoolean(false); public CStrikeDisposer(Font2D font2D, FontStrikeDesc desc, long pContext, int[] images) @@ -76,12 +82,23 @@ public CStrikeDisposer(Font2D font2D, FontStrikeDesc desc) { } public synchronized void dispose() { - if (!disposed) { - if (pNativeScalerContext != 0L) { - freeNativeScalerContext(pNativeScalerContext); + final Runnable command = () -> { + if (disposed.compareAndSet(false, true)) { + if (pNativeScalerContext != 0L) { + freeNativeScalerContext(pNativeScalerContext); + } + super.dispose(); } - super.dispose(); - } + }; + // Move disposal code to AppKit thread in order to avoid the + // following deadlock: + // 1) CGLGraphicsConfig.getCGLConfigInfo (called from Java2D + // disposal thread) takes RenderQueue.lock + // 2) CGLLayer.drawInCGLContext is invoked on AppKit thread and + // blocked on RenderQueue.lock + // 1) invokes native block on AppKit and wait + + CThreading.executeOnAppKit(command); } private native void freeNativeScalerContext(long pContext); diff --git a/src/java.desktop/macosx/classes/sun/font/NativeFont.java b/src/java.desktop/macosx/classes/sun/font/NativeFont.java index d3203da3980a..a24ab1221051 100644 --- a/src/java.desktop/macosx/classes/sun/font/NativeFont.java +++ b/src/java.desktop/macosx/classes/sun/font/NativeFont.java @@ -79,12 +79,6 @@ public GeneralPath getGlyphOutline(long pScalerContext, return null; } - public GeneralPath getGlyphVectorOutline(long pScalerContext, - int[] glyphs, int numGlyphs, - float x, float y) { - return null; - } - long getGlyphImage(long pScalerContext, int glyphCode) { return 0L; @@ -104,4 +98,8 @@ Rectangle2D.Float getGlyphOutlineBounds(long pScalerContext, int glyphCode) { return new Rectangle2D.Float(0f, 0f, 0f, 0f); } + + public SlotInfo getSlotInfoForGlyph(int glyphCode) { + return new SlotInfo(getDelegateFont()); + } } diff --git a/src/java.desktop/macosx/classes/sun/font/NativeStrike.java b/src/java.desktop/macosx/classes/sun/font/NativeStrike.java index de5c3aca312d..3afaf2c150a3 100644 --- a/src/java.desktop/macosx/classes/sun/font/NativeStrike.java +++ b/src/java.desktop/macosx/classes/sun/font/NativeStrike.java @@ -79,7 +79,7 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { return null; } - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { + GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y) { return null; } diff --git a/src/java.desktop/macosx/classes/sun/java2d/MacOSFlags.java b/src/java.desktop/macosx/classes/sun/java2d/MacOSFlags.java index 37b573a339b2..5cd9420d8a86 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/MacOSFlags.java +++ b/src/java.desktop/macosx/classes/sun/java2d/MacOSFlags.java @@ -41,6 +41,7 @@ public class MacOSFlags { private static boolean oglEnabled; private static boolean oglVerbose; private static boolean metalEnabled; + private static boolean metalDisplaySyncEnabled; private static boolean metalVerbose; private enum PropertyState {ENABLED, DISABLED, UNSPECIFIED} @@ -115,6 +116,9 @@ private static void initJavaFlags() { metalEnabled = false; } + metalDisplaySyncEnabled = metalEnabled && + !"false".equals(System.getProperty("sun.java2d.metal.displaySync")); + oglVerbose = isBooleanPropTrueVerbose("sun.java2d.opengl"); metalVerbose = isBooleanPropTrueVerbose("sun.java2d.metal"); @@ -153,4 +157,12 @@ public static boolean isOGLEnabled() { public static boolean isOGLVerbose() { return oglVerbose; } + + public static boolean isMetalDisplaySyncEnabled() { + return metalDisplaySyncEnabled; + } + + public static String getRenderPipelineName() { + return metalEnabled? "Metal" : oglEnabled ? "OpenGL" : "Unknown"; + } } diff --git a/src/java.desktop/macosx/classes/sun/java2d/MacosxSurfaceManagerFactory.java b/src/java.desktop/macosx/classes/sun/java2d/MacosxSurfaceManagerFactory.java index 93fac3fb22a4..b2d103740ce8 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/MacosxSurfaceManagerFactory.java +++ b/src/java.desktop/macosx/classes/sun/java2d/MacosxSurfaceManagerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,9 @@ package sun.java2d; +import sun.awt.CGraphicsEnvironment; import sun.awt.image.SunVolatileImage; import sun.awt.image.VolatileSurfaceManager; -import sun.awt.CGraphicsDevice; import sun.java2d.metal.MTLVolatileSurfaceManager; import sun.java2d.opengl.CGLVolatileSurfaceManager; @@ -51,7 +51,7 @@ public class MacosxSurfaceManagerFactory extends SurfaceManagerFactory { public VolatileSurfaceManager createVolatileManager(SunVolatileImage vImg, Object context) { - return CGraphicsDevice.usingMetalPipeline() ? new MTLVolatileSurfaceManager(vImg, context) : + return CGraphicsEnvironment.usingMetalPipeline() ? new MTLVolatileSurfaceManager(vImg, context) : new CGLVolatileSurfaceManager(vImg, context); } } diff --git a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java index 8a992361b962..143a13aa5735 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java +++ b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLGraphicsConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ import sun.awt.CGraphicsConfig; import sun.awt.CGraphicsDevice; +import sun.awt.CGraphicsEnvironment; import sun.awt.image.OffScreenImage; import sun.awt.image.SunVolatileImage; import sun.awt.image.SurfaceManager; @@ -58,9 +59,6 @@ import java.awt.image.DirectColorModel; import java.awt.image.VolatileImage; import java.awt.image.WritableRaster; -import java.io.File; -import java.security.AccessController; -import java.security.PrivilegedAction; import static sun.java2d.metal.MTLContext.MTLContextCaps.CAPS_EXT_GRAD_SHADER; import static sun.java2d.pipe.hw.AccelSurface.TEXTURE; @@ -74,13 +72,6 @@ public final class MTLGraphicsConfig extends CGraphicsConfig { private static ImageCapabilities imageCaps = new MTLImageCaps(); - @SuppressWarnings("removal") - private static final String mtlShadersLib = AccessController.doPrivileged( - (PrivilegedAction) () -> - System.getProperty("java.home", "") + File.separator + - "lib" + File.separator + "shaders.metallib"); - - private BufferCapabilities bufferCaps; private long pConfigInfo; private ContextCapabilities mtlCaps; @@ -88,7 +79,6 @@ public final class MTLGraphicsConfig extends CGraphicsConfig private final Object disposerReferent = new Object(); private final int maxTextureSize; - private static native boolean tryLoadMetalLibrary(int displayID, String shaderLib); private static native long getMTLConfigInfo(int displayID, String mtlShadersLib); /** @@ -125,18 +115,14 @@ public SurfaceData createManagedSurface(int w, int h, int transparency) { } public static MTLGraphicsConfig getConfig(CGraphicsDevice device, - int displayID) + int displayID, StringBuilder errorMessage) { - if (!tryLoadMetalLibrary(displayID, mtlShadersLib)) { - return null; - } - long cfginfo = 0; int textureSize = 0; MTLRenderQueue rq = MTLRenderQueue.getInstance(); rq.lock(); try { - cfginfo = getMTLConfigInfo(displayID, mtlShadersLib); + cfginfo = getMTLConfigInfo(displayID, CGraphicsEnvironment.getMtlShadersLibPath()); if (cfginfo != 0L) { textureSize = nativeGetMaxTextureSize(); // TODO : This clamping code is same as in OpenGL. @@ -149,6 +135,7 @@ public static MTLGraphicsConfig getConfig(CGraphicsDevice device, rq.unlock(); } if (cfginfo == 0) { + errorMessage.append(" Cannot create MTLConfigInfo."); return null; } @@ -158,6 +145,7 @@ public static MTLGraphicsConfig getConfig(CGraphicsDevice device, CAPS_MULTITEXTURE | CAPS_TEXNONPOW2 | CAPS_TEXNONSQUARE | CAPS_EXT_BIOP_SHADER | CAPS_EXT_GRAD_SHADER, null); + return new MTLGraphicsConfig(device, cfginfo, textureSize, caps); } @@ -309,6 +297,11 @@ public void flip(final LWComponentPeer peer, final Image backBuffer, } } + @Override + public void flush(LWComponentPeer peer) { + MTLSurfaceData.flushBuffer(peer.getPlatformWindow().getLayerPtr()); + } + private static class MTLBufferCaps extends BufferCapabilities { public MTLBufferCaps(boolean dblBuf) { super(imageCaps, imageCaps, diff --git a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLLayer.java b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLLayer.java index 890c55376c78..59366ed6d05b 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLLayer.java +++ b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLLayer.java @@ -29,10 +29,13 @@ import sun.java2d.SurfaceData; import sun.lwawt.LWWindowPeer; import sun.lwawt.macosx.CFLayer; +import sun.util.logging.PlatformLogger; + import java.awt.GraphicsConfiguration; import java.awt.Insets; public class MTLLayer extends CFLayer { + private static final PlatformLogger logger = PlatformLogger.getLogger(MTLLayer.class.getName()); private native long nativeCreateLayer(); private static native void nativeSetScale(long layerPtr, double scale); @@ -50,9 +53,17 @@ public MTLLayer(LWWindowPeer peer) { setPtr(nativeCreateLayer()); this.peer = peer; + + MTLGraphicsConfig gc = (MTLGraphicsConfig)getGraphicsConfiguration(); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("device = " + (gc != null ? gc.getDevice() : "null")); + } + if (gc != null) { + setScale(gc.getDevice().getScaleFactor()); + } } - public SurfaceData replaceSurfaceData() { + public SurfaceData replaceSurfaceData(int scale) { if (getBounds().isEmpty()) { surfaceData = NullSurfaceData.theInstance; return surfaceData; @@ -62,7 +73,10 @@ public SurfaceData replaceSurfaceData() { // and blits the buffer to the layer surface (in display callback) MTLGraphicsConfig gc = (MTLGraphicsConfig)getGraphicsConfiguration(); surfaceData = gc.createSurfaceData(this); - setScale(gc.getDevice().getScaleFactor()); + if (scale <= 0) { + scale = gc.getDevice().getScaleFactor(); + } + setScale(scale); if (peer != null) { Insets insets = peer.getInsets(); execute(ptr -> nativeSetInsets(ptr, insets.top, insets.left)); @@ -100,6 +114,10 @@ public void dispose() { private void setScale(final int _scale) { if (scale != _scale) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + MTLGraphicsConfig gc = (MTLGraphicsConfig)getGraphicsConfiguration(); + logger.fine("current scale = " + scale + ", new scale = " + _scale + " (device = " + (gc != null ? gc.getDevice() : "null") + ")"); + } scale = _scale; execute(ptr -> nativeSetScale(ptr, scale)); } diff --git a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLSurfaceData.java b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLSurfaceData.java index 9204bffda6a3..829c3226e085 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/metal/MTLSurfaceData.java +++ b/src/java.desktop/macosx/classes/sun/java2d/metal/MTLSurfaceData.java @@ -53,6 +53,7 @@ import static sun.java2d.pipe.BufferedOpCodes.DISPOSE_SURFACE; import static sun.java2d.pipe.BufferedOpCodes.FLUSH_SURFACE; +import static sun.java2d.pipe.BufferedOpCodes.FLUSH_BUFFER; import static sun.java2d.pipe.hw.ContextCapabilities.CAPS_MULTITEXTURE; import static sun.java2d.pipe.hw.ContextCapabilities.CAPS_PS30; @@ -220,7 +221,7 @@ public Rectangle getBounds() { protected native boolean initRTexture(long pData, boolean isOpaque, int width, int height); - protected native boolean initFlipBackbuffer(long pData); + protected native boolean initFlipBackbuffer(long pData, boolean isOpaque, int width, int height); @Override public SurfaceDataProxy makeProxyFor(SurfaceData srcData) { @@ -246,7 +247,7 @@ private void initSurfaceNow(int width, int height) { break; case FLIP_BACKBUFFER: - success = initFlipBackbuffer(getNativeOps()); + success = initFlipBackbuffer(getNativeOps(), isOpaque, width, height); break; default: @@ -270,6 +271,7 @@ protected void initSurface(final int width, final int height) { switch (type) { case TEXTURE: case RT_TEXTURE: + case FLIP_BACKBUFFER: // need to make sure the context is current before // creating the texture MTLContext.setScratchSurface(graphicsConfig); @@ -554,7 +556,7 @@ public static class MTLLayerSurfaceData extends MTLSurfaceData { private MTLLayerSurfaceData(MTLLayer layer, MTLGraphicsConfig gc, int width, int height) { - super(layer, gc, gc.getColorModel(), RT_TEXTURE, width, height); + super(layer, gc, gc.getColorModel(), FLIP_BACKBUFFER, width, height); this.layer = layer; initSurface(this.width, this.height); } @@ -639,4 +641,18 @@ public static void dispose(long pData, MTLGraphicsConfig gc) { rq.unlock(); } } + + static void flushBuffer(long layer) { + MTLRenderQueue rq = MTLRenderQueue.getInstance(); + rq.lock(); + try { + RenderBuffer buf = rq.getBuffer(); + rq.ensureCapacityAndAlignment(12, 4); + buf.putInt(FLUSH_BUFFER); + buf.putLong(layer); + rq.flushNow(); + } finally { + rq.unlock(); + } + } } diff --git a/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java b/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java index bea5963383e3..77ecafd87c0b 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java +++ b/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java @@ -26,6 +26,7 @@ package sun.java2d.opengl; import java.awt.AWTException; +import java.awt.AWTError; import java.awt.BufferCapabilities; import java.awt.Component; import java.awt.Graphics; @@ -61,6 +62,9 @@ import static sun.java2d.opengl.OGLContext.OGLContextCaps.CAPS_EXT_FBOBJECT; import static sun.java2d.opengl.OGLSurfaceData.FBOBJECT; import static sun.java2d.opengl.OGLSurfaceData.TEXTURE; +import sun.lwawt.macosx.CThreading; +import java.security.PrivilegedAction; +import java.util.concurrent.Callable; public final class CGLGraphicsConfig extends CGraphicsConfig implements OGLGraphicsConfig @@ -118,44 +122,63 @@ public SurfaceData createManagedSurface(int w, int h, int transparency) { OGLSurfaceData.TEXTURE); } + @SuppressWarnings("removal") public static CGLGraphicsConfig getConfig(CGraphicsDevice device) { if (!cglAvailable) { return null; } - long cfginfo = 0; - int textureSize = 0; - final String[] ids = new String[1]; - OGLRenderQueue rq = OGLRenderQueue.getInstance(); - rq.lock(); - try { - // getCGLConfigInfo() creates and destroys temporary - // surfaces/contexts, so we should first invalidate the current - // Java-level context and flush the queue... - OGLContext.invalidateCurrentContext(); - cfginfo = getCGLConfigInfo(); - if (cfginfo != 0L) { - textureSize = nativeGetMaxTextureSize(); - // 7160609: GL still fails to create a square texture of this - // size. Half should be safe enough. - // Explicitly not support a texture more than 2^14, see 8010999. - textureSize = textureSize <= 16384 ? textureSize / 2 : 8192; - OGLContext.setScratchSurface(cfginfo); - rq.flushAndInvokeNow(() -> { - ids[0] = OGLContext.getOGLIdString(); - }); + // Move CGLGraphicsConfig creation code to AppKit thread in order to avoid the + // following deadlock: + // 1) CGLGraphicsConfig.getCGLConfigInfo (called from EDT) takes RenderQueue.lock + // 2) CGLLayer.drawInCGLContext is invoked on AppKit thread and + // blocked on RenderQueue.lock + // 1) invokes native block on AppKit and wait + + Callable command = () -> { + long cfginfo = 0; + int textureSize = 0; + final String[] ids = new String[1]; + OGLRenderQueue rq = OGLRenderQueue.getInstance(); + rq.lock(); + try { + // getCGLConfigInfo() creates and destroys temporary + // surfaces/contexts, so we should first invalidate the current + // Java-level context and flush the queue... + OGLContext.invalidateCurrentContext(); + cfginfo = getCGLConfigInfo(); + if (cfginfo != 0L) { + textureSize = nativeGetMaxTextureSize(); + // 7160609: GL still fails to create a square texture of this + // size. Half should be safe enough. + // Explicitly not support a texture more than 2^14, see 8010999. + textureSize = textureSize <= 16384 ? textureSize / 2 : 8192; + OGLContext.setScratchSurface(cfginfo); + rq.flushAndInvokeNow(() -> { + ids[0] = OGLContext.getOGLIdString(); + }); + } + } finally { + rq.unlock(); + } + if (cfginfo == 0) { + return null; } - } finally { - rq.unlock(); - } - if (cfginfo == 0) { - return null; - } - int oglCaps = getOGLCapabilities(cfginfo); - ContextCapabilities caps = new OGLContextCaps(oglCaps, ids[0]); - return new CGLGraphicsConfig(device, cfginfo, textureSize, caps); + int oglCaps = getOGLCapabilities(cfginfo); + ContextCapabilities caps = new OGLContextCaps(oglCaps, ids[0]); + return new CGLGraphicsConfig(device, cfginfo, textureSize, caps); + }; + + return java.security.AccessController.doPrivileged( + (PrivilegedAction) () -> { + try { + return CThreading.executeOnAppKit(command); + } catch (Throwable throwable) { + throw new AWTError(throwable.getMessage()); + } + }); } public static boolean isCGLAvailable() { @@ -324,6 +347,11 @@ public void flip(final LWComponentPeer peer, final Image backBuffer, } } + @Override + public void flush(LWComponentPeer peer) { + + } + private static class CGLBufferCaps extends BufferCapabilities { public CGLBufferCaps(boolean dblBuf) { super(imageCaps, imageCaps, diff --git a/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLLayer.java b/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLLayer.java index eb6629a0ae93..9f82e1b75055 100644 --- a/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLLayer.java +++ b/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLLayer.java @@ -31,8 +31,10 @@ import sun.lwawt.LWWindowPeer; import sun.java2d.SurfaceData; import sun.lwawt.macosx.CFLayer; +import sun.util.logging.PlatformLogger; public class CGLLayer extends CFLayer { + private static final PlatformLogger logger = PlatformLogger.getLogger(CGLLayer.class.getName()); private native long nativeCreateLayer(); private static native void nativeSetScale(long layerPtr, double scale); @@ -46,9 +48,17 @@ public CGLLayer(LWWindowPeer peer) { setPtr(nativeCreateLayer()); this.peer = peer; + + CGraphicsConfig gc = (CGraphicsConfig)getGraphicsConfiguration(); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("device = " + (gc != null ? gc.getDevice() : "null")); + } + if (gc != null) { + setScale(gc.getDevice().getScaleFactor()); + } } - public SurfaceData replaceSurfaceData() { + public SurfaceData replaceSurfaceData(int scale) { if (getBounds().isEmpty()) { surfaceData = NullSurfaceData.theInstance; return surfaceData; @@ -57,8 +67,15 @@ public SurfaceData replaceSurfaceData() { // the layer redirects all painting to the buffer's graphics // and blits the buffer to the layer surface (in drawInCGLContext callback) CGraphicsConfig gc = (CGraphicsConfig)getGraphicsConfiguration(); + if (gc == null) { + surfaceData = NullSurfaceData.theInstance; + return surfaceData; + } surfaceData = gc.createSurfaceData(this); - setScale(gc.getDevice().getScaleFactor()); + if (scale <= 0) { + scale = gc.getDevice().getScaleFactor(); + } + setScale(scale); // the layer holds a reference to the buffer, which in // turn has a reference back to this layer if (surfaceData instanceof CGLSurfaceData) { @@ -90,8 +107,12 @@ public void dispose() { super.dispose(); } - private void setScale(final int _scale) { + private void setScale(int _scale) { if (scale != _scale) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + CGraphicsConfig gc = (CGraphicsConfig)getGraphicsConfiguration(); + logger.fine("current scale = " + scale + ", new scale = " + _scale + " (device = " + (gc != null ? gc.getDevice() : "null") + ")"); + } scale = _scale; execute(ptr -> nativeSetScale(ptr, scale)); } @@ -107,7 +128,7 @@ private void drawInCGLContext() { OGLRenderQueue rq = OGLRenderQueue.getInstance(); rq.lock(); try { - execute(ptr -> blitTexture(ptr)); + blitTexture(getPointer()); } finally { rq.unlock(); } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java b/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java index f37e4ad7425a..ca208235770e 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,12 +68,13 @@ import com.sun.java.swing.SwingUtilities3; import sun.awt.AWTAccessor; -import sun.awt.CGraphicsDevice; +import sun.awt.CGraphicsEnvironment; import sun.awt.PaintEventDispatcher; import sun.awt.RepaintArea; import sun.awt.SunToolkit; import sun.awt.event.IgnorePaintEvent; import sun.awt.image.SunVolatileImage; +import sun.java2d.MacOSFlags; import sun.java2d.SunGraphics2D; import sun.java2d.metal.MTLRenderQueue; import sun.java2d.opengl.OGLRenderQueue; @@ -930,7 +931,7 @@ public boolean requestFocus(Component lightweightChild, boolean temporary, int result = LWKeyboardFocusManagerPeer.shouldNativelyFocusHeavyweight( getTarget(), lightweightChild, temporary, - focusedWindowChangeAllowed, time, cause); + focusedWindowChangeAllowed, time, cause, true); switch (result) { case LWKeyboardFocusManagerPeer.SNFH_FAILURE: return false; @@ -955,21 +956,16 @@ public boolean requestFocus(Component lightweightChild, boolean temporary, // however that is the shared code and this particular problem's reproducibility has // platform specifics. So, it was decided to narrow down the fix to lwawt (OSX) in // current release. TODO: consider fixing it in the shared code. - if (!focusedWindowChangeAllowed) { - LWWindowPeer decoratedPeer = parentPeer.isSimpleWindow() ? - LWWindowPeer.getOwnerFrameDialog(parentPeer) : parentPeer; - - if (decoratedPeer == null || !decoratedPeer.getPlatformWindow().isActive()) { - if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { - focusLog.fine("request rejected, focusedWindowChangeAllowed==false, " + - "decoratedPeer is inactive: " + decoratedPeer); - } - LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget()); - return false; + if (!focusedWindowChangeAllowed && !parentPeer.getPlatformWindow().isActive()) { + if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { + focusLog.fine("request rejected, focusedWindowChangeAllowed==false, " + + "parentPeer is inactive: " + parentPeer); } + LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget()); + return false; } - boolean res = parentPeer.requestWindowFocus(cause); + boolean res = !focusedWindowChangeAllowed || parentPeer.requestWindowFocus(cause); // If parent window can be made focused and has been made focused (synchronously) // then we can proceed with children, otherwise we retreat if (!res || !parentWindow.isFocused()) { @@ -984,9 +980,7 @@ public boolean requestFocus(Component lightweightChild, boolean temporary, KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance(); Component focusOwner = kfmPeer.getCurrentFocusOwner(); return LWKeyboardFocusManagerPeer.deliverFocus(lightweightChild, - getTarget(), temporary, - focusedWindowChangeAllowed, - time, cause, focusOwner); + getTarget(), true, cause, focusOwner); case LWKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED: return true; @@ -1308,6 +1302,10 @@ private void handleJavaPaintEvent() { // if (!isLayouting && !paintPending) { if (!isLayouting()) { targetPaintArea.paint(getTarget(), shouldClearRectBeforePaint()); + if (MacOSFlags.isMetalEnabled() && !MacOSFlags.isMetalDisplaySyncEnabled()) { + SunToolkit.executeOnEventHandlerThread(getTarget(), + () -> getWindowPeerOrSelf().updateWindow()); + } } } @@ -1335,7 +1333,7 @@ public Point windowToLocal(int x, int y, LWWindowPeer wp) { public Point windowToLocal(Point p, LWWindowPeer wp) { LWComponentPeer cp = this; - while (cp != wp) { + while (cp != null && cp != wp) { Rectangle cpb = cp.getBounds(); p.x -= cpb.x; p.y -= cpb.y; @@ -1419,7 +1417,7 @@ protected final void paintPeer(final Graphics g) { } protected static final void flushOnscreenGraphics(){ - RenderQueue rq = CGraphicsDevice.usingMetalPipeline() ? + RenderQueue rq = CGraphicsEnvironment.usingMetalPipeline() ? MTLRenderQueue.getInstance() : OGLRenderQueue.getInstance(); rq.lock(); try { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWGraphicsConfig.java b/src/java.desktop/macosx/classes/sun/lwawt/LWGraphicsConfig.java index d556ea759952..e989bde846ab 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWGraphicsConfig.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWGraphicsConfig.java @@ -89,6 +89,11 @@ void assertOperationSupported(int numBuffers, BufferCapabilities caps) void flip(LWComponentPeer peer, Image backBuffer, int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction); + /** + * Performs the native flush operation for the given peer + */ + void flush(LWComponentPeer peer); + /** * Creates a new hidden-acceleration image of the given width and height * that is associated with the target Component. diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWMouseInfoPeer.java b/src/java.desktop/macosx/classes/sun/lwawt/LWMouseInfoPeer.java index a507b75a9048..1982f120cdca 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWMouseInfoPeer.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWMouseInfoPeer.java @@ -25,8 +25,7 @@ package sun.lwawt; -import java.awt.Point; -import java.awt.Window; +import java.awt.*; import java.awt.peer.MouseInfoPeer; @@ -41,8 +40,21 @@ public int fillPointWithCoords(Point point) { Point cursorPos = cursorManager.getCursorPosition(); point.x = cursorPos.x; point.y = cursorPos.y; - // TODO: multiscreen - return 0; + GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getScreenDevices(); + int nearestScreen = 0, nearestScreenDistance = Integer.MAX_VALUE; + for (int i = 0; i < gds.length; i++) { + Rectangle bounds = gds[i].getDefaultConfiguration().getBounds(); + int dx = Math.max(Math.min(point.x, bounds.x + bounds.width), bounds.x) - point.x; + int dy = Math.max(Math.min(point.y, bounds.y + bounds.height), bounds.y) - point.y; + int dist = dx*dx + dy*dy; + if (dist == 0) return i; + if (dist < nearestScreenDistance) { + nearestScreen = i; + nearestScreenDistance = dist; + } + } + return nearestScreen; } @Override diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java b/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java index 6f38e62c46dc..37679c4640bc 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java @@ -35,6 +35,7 @@ import java.util.*; import sun.awt.*; +import sun.java2d.MacOSFlags; import sun.print.*; import sun.awt.util.ThreadGroupUtils; @@ -364,6 +365,11 @@ public final boolean isTaskbarSupported() { return true; } + @Override + public boolean needUpdateWindowAfterPaint() { + return MacOSFlags.isMetalEnabled() && !MacOSFlags.isMetalDisplaySyncEnabled(); + } + @Override public final KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() { return LWKeyboardFocusManagerPeer.getInstance(); diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java b/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java index 4ec8d87fee3f..7c208a070453 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java @@ -79,6 +79,7 @@ import sun.java2d.loops.Blit; import sun.java2d.loops.CompositeType; import sun.java2d.pipe.Region; +import sun.lwawt.macosx.CPlatformWindow; import sun.util.logging.PlatformLogger; public class LWWindowPeer @@ -95,6 +96,7 @@ public enum PeerType { } private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWWindowPeer"); + private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.LWWindowPeer"); private final PlatformWindow platformWindow; @@ -301,23 +303,6 @@ protected void setVisibleImpl(final boolean visible) { super.setVisibleImpl(visible); // TODO: update graphicsConfig, see 4868278 platformWindow.setVisible(visible); - if (isSimpleWindow()) { - KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance(); - if (visible) { - if (!getTarget().isAutoRequestFocus()) { - return; - } else { - requestWindowFocus(FocusEvent.Cause.ACTIVATION); - } - // Focus the owner in case this window is focused. - } else if (kfmPeer.getCurrentFocusedWindow() == getTarget()) { - // Transfer focus to the owner. - LWWindowPeer owner = getOwnerFrameDialog(LWWindowPeer.this); - if (owner != null) { - owner.requestWindowFocus(FocusEvent.Cause.ACTIVATION); - } - } - } } @Override @@ -523,6 +508,7 @@ private void updateOpaque() { @Override public void updateWindow() { + getLWGC().flush(this); } public final boolean isTextured() { @@ -734,7 +720,16 @@ public void notifyReshape(int x, int y, int w, int h) { setBounds(x, y, w, h, SET_BOUNDS, false, false); // Second, update the graphics config and surface data - final boolean isNewDevice = updateGraphicsDevice(); + GraphicsDevice newGraphicsDevice = platformWindow.getGraphicsDevice(); + if (newGraphicsDevice == null) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Unable to update graphics device: " + + "platform window graphics device is null"); + } + return; + } + boolean isNewDevice = updateGraphicsDevice(newGraphicsDevice); + if (isNewDevice && !isMaximizedBoundsSet()) { setPlatformMaximizedBounds(getDefaultMaximizedBounds()); } @@ -750,7 +745,11 @@ public void notifyReshape(int x, int y, int w, int h) { } if (tResized || pResized || invalid || isNewDevice) { handleResize(w, h, true); - repaintPeer(); + // Changing window size fires up the execution of the current method on AppKit thread and as result it could + // leads to race condition with paint event on EDT. Running repaintPeer on EDT eliminates such issue. + SunToolkit.executeOnEventHandlerThread(getTarget(), () -> { + repaintPeer(); + }); } repositionSecurityWarning(); @@ -1044,7 +1043,7 @@ public void notifyMouseWheelEvent(long when, int x, int y, int absX, */ @Override public void notifyKeyEvent(int id, long when, int modifiers, - int keyCode, char keyChar, int keyLocation, int extendedKeyCode) + int keyCode, char keyChar, int keyLocation) { LWKeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance(); Component focusOwner = kfmPeer.getCurrentFocusOwner(); @@ -1058,13 +1057,9 @@ public void notifyKeyEvent(int id, long when, int modifiers, KeyEvent keyEvent = new KeyEvent(focusOwner, id, when, modifiers, keyCode, keyChar, keyLocation); - if (extendedKeyCode >= 0) { - AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent, extendedKeyCode); - } else { - AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent, - (keyChar == KeyEvent.CHAR_UNDEFINED) ? keyCode - : ExtendedKeyCodes.getExtendedKeyCodeForChar(keyChar)); - } + AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent, + (keyChar == KeyEvent.CHAR_UNDEFINED) ? keyCode + : ExtendedKeyCodes.getExtendedKeyCodeForChar(keyChar)); postEvent(keyEvent); } @@ -1137,8 +1132,7 @@ private boolean setGraphicsConfig(GraphicsConfiguration gc) { /** * Returns true if the GraphicsDevice has been changed, false otherwise. */ - public boolean updateGraphicsDevice() { - GraphicsDevice newGraphicsDevice = platformWindow.getGraphicsDevice(); + public boolean updateGraphicsDevice(GraphicsDevice newGraphicsDevice) { synchronized (getStateLock()) { if (graphicsDevice == newGraphicsDevice) { return false; @@ -1160,16 +1154,29 @@ public void run() { @Override public final void displayChanged() { - if (updateGraphicsDevice()) { + GraphicsDevice newGraphicsDevice = platformWindow.getGraphicsDevice(); + if (newGraphicsDevice == null) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Unable to update graphics device: " + + "platform window graphics device is null"); + } + return; + } + boolean isNewDevice = updateGraphicsDevice(newGraphicsDevice); + + if (isNewDevice) { updateMinimumSize(); if (!isMaximizedBoundsSet()) { setPlatformMaximizedBounds(getDefaultMaximizedBounds()); } } - // Replace surface unconditionally, because internal state of the - // GraphicsDevice could be changed. - replaceSurfaceData(); - repaintPeer(); + + SunToolkit.executeOnEventHandlerThread(getTarget(), () -> { + // Replace surface unconditionally, because internal state of the + // GraphicsDevice could be changed. + replaceSurfaceData(); + repaintPeer(); + }); } @Override @@ -1210,6 +1217,9 @@ private void replaceSurfaceData(final boolean blit) { } } flushOnscreenGraphics(); + if (((LWToolkit) Toolkit.getDefaultToolkit()).needUpdateWindowAfterPaint()) { + updateWindow(); + } } private void blitSurfaceData(final SurfaceData src, final SurfaceData dst) { @@ -1275,53 +1285,6 @@ public boolean requestWindowFocus(FocusEvent.Cause cause) { return false; } - AppContext targetAppContext = AWTAccessor.getComponentAccessor().getAppContext(getTarget()); - KeyboardFocusManager kfm = AWTAccessor.getKeyboardFocusManagerAccessor() - .getCurrentKeyboardFocusManager(targetAppContext); - Window currentActive = kfm.getActiveWindow(); - - - Window opposite = LWKeyboardFocusManagerPeer.getInstance(). - getCurrentFocusedWindow(); - - // Make the owner active window. - if (isSimpleWindow()) { - LWWindowPeer owner = getOwnerFrameDialog(this); - - // If owner is not natively active, request native - // activation on it w/o sending events up to java. - if (owner != null && !owner.platformWindow.isActive()) { - if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { - focusLog.fine("requesting native focus to the owner " + owner); - } - LWWindowPeer currentActivePeer = currentActive == null ? null : - (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer( - currentActive); - - // Ensure the opposite is natively active and suppress sending events. - if (currentActivePeer != null && currentActivePeer.platformWindow.isActive()) { - if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { - focusLog.fine("the opposite is " + currentActivePeer); - } - currentActivePeer.skipNextFocusChange = true; - } - owner.skipNextFocusChange = true; - - owner.platformWindow.requestWindowFocus(); - } - - // DKFM will synthesize all the focus/activation events correctly. - changeFocusedWindow(true, opposite); - return true; - - // In case the toplevel is active but not focused, change focus directly, - // as requesting native focus on it will not have effect. - } else if (getTarget() == currentActive && !getTarget().hasFocus()) { - - changeFocusedWindow(true, opposite); - return true; - } - return platformWindow.requestWindowFocus(); } @@ -1397,7 +1360,8 @@ protected void changeFocusedWindow(boolean becomesFocused, Window opposite) { // - when the opposite (gaining focus) window is an owned/owner window. // - for a simple window in any case. if (!becomesFocused && - (isGrabbing() || this.isOneOfOwnersOf(grabbingWindow))) + (isGrabbing() || this.isOneOfOwnersOf(grabbingWindow)) && + (opposite == null || getOwnerFrameDialog(AWTAccessor.getComponentAccessor().getPeer(opposite)) != this)) { if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { focusLog.fine("ungrabbing on " + grabbingWindow); @@ -1419,7 +1383,7 @@ protected void changeFocusedWindow(boolean becomesFocused, Window opposite) { WindowEvent windowEvent = new TimedWindowEvent(getTarget(), eventID, opposite, System.currentTimeMillis()); // TODO: wrap in SequencedEvent - postEvent(windowEvent); + SunToolkit.postPriorityEvent(windowEvent); } /* @@ -1527,4 +1491,17 @@ public void updateSecurityWarningVisibility() { public String toString() { return super.toString() + " [target is " + getTarget() + "]"; } + + /** + * [tav] Used externally. + */ + @Override + public long getWindowHandle() { + final long[] handle = new long[1]; + PlatformWindow window = getPlatformWindow(); + if (window instanceof CPlatformWindow) { + ((CPlatformWindow)window).execute(ptr -> handle[0] = ptr); + } + return handle[0]; + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java b/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java index aea8ff2e6a93..d613b9cea25a 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java @@ -61,5 +61,5 @@ void notifyMouseWheelEvent(long when, int x, int y, final int absX, * Called by the delegate when a key is pressed. */ void notifyKeyEvent(int id, long when, int modifiers, - int keyCode, char keyChar, int keyLocation, int extendedKeyCode); + int keyCode, char keyChar, int keyLocation); } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java index d4526324c585..40353f880e63 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java @@ -38,11 +38,14 @@ import java.lang.annotation.Native; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.concurrent.Callable; import java.util.Arrays; +import java.util.function.Function; +import java.util.concurrent.atomic.AtomicInteger; import javax.accessibility.Accessible; import javax.accessibility.AccessibleAction; @@ -56,6 +59,7 @@ import javax.accessibility.AccessibleText; import javax.accessibility.AccessibleValue; import javax.swing.Icon; +import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.JLabel; @@ -72,21 +76,18 @@ class CAccessibility implements PropertyChangeListener { private static Set ignoredRoles; + private static final int INVOKE_TIMEOUT_SECONDS; static { - loadAWTLibrary(); - } - - @SuppressWarnings("removal") - private static void loadAWTLibrary() { - // Need to load the native library for this code. - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Void run() { - System.loadLibrary("awt"); - return null; - } + // (-1) for the infinite timeout + @SuppressWarnings("removal") + int value = java.security.AccessController.doPrivileged( + (PrivilegedAction) () -> { + // Need to load the native library for this code. + System.loadLibrary("awt"); + return Integer.getInteger("sun.lwawt.macosx.CAccessibility.invokeTimeoutSeconds", 1); }); + INVOKE_TIMEOUT_SECONDS = value; } static CAccessibility sAccessibility; @@ -128,14 +129,14 @@ public void propertyChange(final PropertyChangeEvent evt) { private native void focusChanged(); static T invokeAndWait(final Callable callable, final Component c) { - return invokeAndWait(callable, c, null); + return invokeAndWait(callable, c, (T)null); } static T invokeAndWait(final Callable callable, final Component c, final T defValue) { T value = null; if (c != null) { try { - value = LWCToolkit.invokeAndWait(callable, c); + value = LWCToolkit.invokeAndWait(callable, c, INVOKE_TIMEOUT_SECONDS); } catch (final Exception e) { e.printStackTrace(); } } @@ -776,7 +777,7 @@ private static Accessible createAccessibleTreeNode(JTree t, TreePath p) { // This method is called from the native // Each child takes up three entries in the array: one for itself, one for its role, and one for the recursion level - private static Object[] getChildrenAndRolesRecursive(final Accessible a, final Component c, final int whichChildren, final boolean allowIgnored, final int level) { + private static Object[] getChildrenAndRolesRecursive(final Accessible a, final Component c, final int whichChildren, final boolean allowIgnored) { if (a == null) return null; return invokeAndWait(new Callable() { public Object[] call() throws Exception { @@ -832,7 +833,7 @@ public Object[] call() throws Exception { parentStack.add(a); ArrayList indexses = new ArrayList(); Integer index = 0; - int currentLevel = level; + int currentLevel = 0; while (!parentStack.isEmpty()) { Accessible p = parentStack.get(parentStack.size() - 1); @@ -1138,4 +1139,18 @@ public Boolean call() throws Exception { } }, c); } + + private static boolean isComboBoxEditable(Accessible a, Component c) { + if (a == null) return false; + + return invokeAndWait(new Callable() { + public Boolean call() throws Exception { + Accessible sa = CAccessible.getSwingAccessible(a); + if (sa instanceof JComboBox comboBox) { + return comboBox.isEditable(); + } + return false; + } + }, c, false); + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessible.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessible.java index 779423bc28fc..f39bdf27bfe0 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessible.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessible.java @@ -25,13 +25,13 @@ package sun.lwawt.macosx; -import java.awt.Component; +import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.security.PrivilegedAction; -import javax.accessibility.Accessible; -import javax.accessibility.AccessibleContext; -import javax.swing.JTabbedPane; +import javax.accessibility.*; +import javax.swing.*; import static javax.accessibility.AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY; import static javax.accessibility.AccessibleContext.ACCESSIBLE_CARET_PROPERTY; @@ -42,12 +42,24 @@ import static javax.accessibility.AccessibleContext.ACCESSIBLE_NAME_PROPERTY; import static javax.accessibility.AccessibleContext.ACCESSIBLE_VALUE_PROPERTY; -import javax.accessibility.AccessibleRole; -import javax.accessibility.AccessibleState; import sun.awt.AWTAccessor; class CAccessible extends CFRetainedResource implements Accessible { + private static Timer timer = null; + private final static int SELECTED_CHILDREN_MILLISECONDS_DEFAULT = 100; + private static int SELECTED_CHILDREN_MILLISECONDS; + + static { + @SuppressWarnings("removal") int scms = java.security.AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Integer run() { + return Integer.getInteger("sun.lwawt.macosx.CAccessible.selectedChildrenMilliSeconds", + SELECTED_CHILDREN_MILLISECONDS_DEFAULT); + } + }); + SELECTED_CHILDREN_MILLISECONDS = scms >= 0 ? scms : SELECTED_CHILDREN_MILLISECONDS_DEFAULT; + } public static CAccessible getCAccessible(final Accessible a) { if (a == null) return null; @@ -75,6 +87,8 @@ public static CAccessible getCAccessible(final Accessible a) { private static native void treeNodeCollapsed(long ptr); private static native void selectedCellsChanged(long ptr); private static native void tableContentCacheClear(long ptr); + private static native void updateZoomCaretFocus(long ptr); + private static native void updateZoomFocus(long ptr); private Accessible accessible; @@ -99,7 +113,7 @@ protected synchronized void dispose() { @Override public AccessibleContext getAccessibleContext() { - return accessible.getAccessibleContext(); + return accessible != null ? accessible.getAccessibleContext() : null; } public void addNotificationListeners(Component c) { @@ -113,27 +127,38 @@ private class AXChangeNotifier implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent e) { + assert EventQueue.isDispatchThread(); String name = e.getPropertyName(); if ( ptr != 0 ) { Object newValue = e.getNewValue(); Object oldValue = e.getOldValue(); if (name.equals(ACCESSIBLE_CARET_PROPERTY)) { - selectedTextChanged(ptr); + execute(ptr -> selectedTextChanged(ptr)); + // Notify macOS Accessibility Zoom to move focus to the new caret location. + execute(ptr -> updateZoomCaretFocus(ptr)); } else if (name.equals(ACCESSIBLE_TEXT_PROPERTY)) { - valueChanged(ptr); + execute(ptr -> valueChanged(ptr)); } else if (name.equals(ACCESSIBLE_SELECTION_PROPERTY)) { - selectionChanged(ptr); + if (timer != null) { + timer.stop(); + } + timer = new Timer(SELECTED_CHILDREN_MILLISECONDS, actionEvent -> execute(ptr -> selectionChanged(ptr))); + timer.setRepeats(false); + timer.start(); + + // Notify the Accessibility Zoom to follow the new selection location. + execute(ptr -> updateZoomFocus(ptr)); } else if (name.equals(ACCESSIBLE_TABLE_MODEL_CHANGED)) { - valueChanged(ptr); + execute(ptr -> valueChanged(ptr)); if (CAccessible.getSwingAccessible(CAccessible.this) != null) { Accessible a = CAccessible.getSwingAccessible(CAccessible.this); AccessibleContext ac = a.getAccessibleContext(); if ((ac != null) && (ac.getAccessibleRole() == AccessibleRole.TABLE)) { - tableContentCacheClear(ptr); + execute(ptr -> tableContentCacheClear(ptr)); } } } else if (name.equals(ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY)) { - if (newValue instanceof AccessibleContext) { + if (newValue == null || newValue instanceof AccessibleContext) { activeDescendant = (AccessibleContext)newValue; if (newValue instanceof Accessible) { Accessible a = (Accessible)newValue; @@ -143,7 +168,7 @@ public void propertyChange(PropertyChangeEvent e) { if (p != null) { AccessibleContext pac = p.getAccessibleContext(); if ((pac != null) && (pac.getAccessibleRole() == AccessibleRole.TABLE)) { - selectedCellsChanged(ptr); + execute(ptr -> selectedCellsChanged(ptr)); } } } @@ -159,31 +184,48 @@ public void propertyChange(PropertyChangeEvent e) { } if (newValue == AccessibleState.EXPANDED) { - treeNodeExpanded(ptr); + execute(ptr -> treeNodeExpanded(ptr)); } else if (newValue == AccessibleState.COLLAPSED) { - treeNodeCollapsed(ptr); + execute(ptr -> treeNodeCollapsed(ptr)); + } + + if (thisRole == AccessibleRole.COMBO_BOX) { + AccessibleStateSet as = thisAC.getAccessibleStateSet(); + if (as != null) + if (as.contains(AccessibleState.EXPANDED)) { + if (timer != null) { + timer.stop(); + } + timer = new Timer(SELECTED_CHILDREN_MILLISECONDS, actionEvent -> execute(ptr -> selectionChanged(ptr))); + timer.setRepeats(false); + timer.start(); + if (as.contains(AccessibleState.COLLAPSED)) { + execute(ptr -> valueChanged(ptr)); + } + } } if (thisRole == AccessibleRole.POPUP_MENU) { - if ( newValue != null && - ((AccessibleState)newValue) == AccessibleState.VISIBLE ) { - menuOpened(ptr); - } else if ( oldValue != null && - ((AccessibleState)oldValue) == AccessibleState.VISIBLE ) { - menuClosed(ptr); + if (newValue != null && + ((AccessibleState) newValue) == AccessibleState.VISIBLE) { + execute(ptr -> menuOpened(ptr)); + } else if (oldValue != null && + ((AccessibleState) oldValue) == AccessibleState.VISIBLE) { + execute(ptr -> menuClosed(ptr)); + execute(ptr -> unregisterFromCocoaAXSystem(ptr)); } } else if (thisRole == AccessibleRole.MENU_ITEM || (thisRole == AccessibleRole.MENU)) { - if ( newValue != null && - ((AccessibleState)newValue) == AccessibleState.FOCUSED ) { - menuItemSelected(ptr); + if (newValue != null && + ((AccessibleState) newValue) == AccessibleState.FOCUSED) { + execute(ptr -> menuItemSelected(ptr)); } } // Do send check box state changes to native side if (thisRole == AccessibleRole.CHECK_BOX) { if (newValue != null && !newValue.equals(oldValue)) { - valueChanged(ptr); + execute(ptr -> valueChanged(ptr)); } // Notify native side to handle check box style menuitem @@ -215,14 +257,14 @@ public void propertyChange(PropertyChangeEvent e) { } else if (name.equals(ACCESSIBLE_NAME_PROPERTY)) { //for now trigger only for JTabbedPane. if (e.getSource() instanceof JTabbedPane) { - titleChanged(ptr); + execute(ptr -> titleChanged(ptr)); } } else if (name.equals(ACCESSIBLE_VALUE_PROPERTY)) { AccessibleRole thisRole = accessible.getAccessibleContext() .getAccessibleRole(); if (thisRole == AccessibleRole.SLIDER || thisRole == AccessibleRole.PROGRESS_BAR) { - valueChanged(ptr); + execute(ptr -> valueChanged(ptr)); } } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java index cee23f2f96e3..2ae32d6a07cb 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java @@ -29,6 +29,7 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; +import java.awt.im.InputMethodRequests; import java.util.concurrent.Callable; import javax.accessibility.Accessible; @@ -343,4 +344,33 @@ static int[] getRangeForLine(final Accessible a, final int lineIndex) { return new int[] { line.getStartOffset(), line.getEndOffset() }; } + + static double[] getCaretRectangle(final Accessible a, final Component c) { + final double[] ret = new double[4]; + + if (a == null) return null; + + return CAccessibility.invokeAndWait(new Callable() { + public double[] call() throws Exception { + final Accessible sa = CAccessible.getSwingAccessible(a); + if (!(sa instanceof Component)) return null; + + final Component component = (Component) sa; + + final InputMethodRequests imr = component.getInputMethodRequests(); + if (imr == null) return null; + + final Rectangle caretRectangle = imr.getTextLocation(null); + + if (caretRectangle == null) return null; + + ret[0] = caretRectangle.getX(); + ret[1] = caretRectangle.getY(); + ret[2] = 1; // Use 1 as caret width. + ret[3] = caretRectangle.getHeight(); + + return ret; + } + }, c); + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CClipboard.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CClipboard.java index 19f9a4082205..ec574deaaa26 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CClipboard.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CClipboard.java @@ -89,7 +89,11 @@ protected void setContentsNative(Transferable contents) { try { byte[] bytes = DataTransferer.getInstance().translateTransferable(contents, flavor, format); - setData(bytes, format); + if (DataFlavor.javaFileListFlavor.equals(flavor)) { + writeObjects(bytes); + } else { + setData(bytes, format); + } } catch (IOException e) { // Fix 4696186: don't print exception if data with // javaJVMLocalObjectMimeType failed to serialize. @@ -127,6 +131,7 @@ protected void registerClipboardViewerChecked() { private native void declareTypes(long[] formats, SunClipboard newOwner); private native void setData(byte[] data, long format); + private native void writeObjects(byte[] data); void checkPasteboardAndNotify() { if (checkPasteboardWithoutNotification()) { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CCursorManager.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CCursorManager.java index e4abc5fe1a9c..56400c1d293c 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CCursorManager.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CCursorManager.java @@ -45,6 +45,12 @@ public static CCursorManager getInstance() { return theInstance; } + private static void resetCurrentCursor() { + if (theInstance != null) { + theInstance.currentCursor = null; + } + } + private volatile Cursor currentCursor; private CCursorManager() { } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java index 049f8d0df32d..87ad9e075525 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java @@ -100,11 +100,10 @@ public void handleScrollEvent(double pluginX, double pluginY, int modifierFlags, deltaY, NSEvent.SCROLL_PHASE_UNSUPPORTED); } - public void handleKeyEvent(int eventType, int modifierFlags, String characters, - String charsIgnoringMods, boolean isRepeat, short keyCode, + public void handleKeyEvent(int eventType, int modifierFlags, String characters, boolean isRepeat, short keyCode, boolean needsKeyTyped) { - responder.handleKeyEvent(eventType, modifierFlags, characters, charsIgnoringMods, - keyCode, needsKeyTyped, isRepeat); + responder.handleKeyEvent(eventType, modifierFlags, characters, + null, keyCode, needsKeyTyped, isRepeat); } public void handleInputEvent(String text) { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFLayer.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFLayer.java index d88d33118717..ecb3ef6e6181 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFLayer.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFLayer.java @@ -43,7 +43,11 @@ protected CFLayer(long ptr, boolean disposeOnAppKitThread) { super(ptr, disposeOnAppKitThread); } - public abstract SurfaceData replaceSurfaceData(); + public abstract SurfaceData replaceSurfaceData(int scale); + + public SurfaceData replaceSurfaceData() { + return replaceSurfaceData(0); + } @Override public void dispose() { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java index 169aea8127e9..5e19d66f9495 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java @@ -54,12 +54,19 @@ import java.security.AccessController; import java.util.List; +import com.jetbrains.desktop.JBRFileDialog; import sun.awt.AWTAccessor; import sun.java2d.pipe.Region; +import sun.lwawt.LWWindowPeer; import sun.security.action.GetBooleanAction; +import sun.util.logging.PlatformLogger; + +import static com.jetbrains.desktop.JBRFileDialog.*; class CFileDialog implements FileDialogPeer { + private static final PlatformLogger log = PlatformLogger.getLogger("sun.lwawt.macosx.CFileDialog"); + private class Task implements Runnable { @Override @@ -68,9 +75,18 @@ public void run() { @SuppressWarnings("removal") boolean navigateApps = !AccessController.doPrivileged( new GetBooleanAction("apple.awt.use-file-dialog-packages")); - @SuppressWarnings("removal") - boolean chooseDirectories = AccessController.doPrivileged( - new GetBooleanAction("apple.awt.fileDialogForDirectories")); + + JBRFileDialog jbrDialog = JBRFileDialog.get(target); + boolean createDirectories = (jbrDialog.getHints() & CREATE_DIRECTORIES_HINT) != 0; + boolean chooseDirectories = (jbrDialog.getHints() & SELECT_DIRECTORIES_HINT) != 0; + boolean chooseFiles = (jbrDialog.getHints() & SELECT_FILES_HINT) != 0; + if (!chooseDirectories && !chooseFiles) { // Fallback to default + @SuppressWarnings("removal") + boolean dir = AccessController.doPrivileged( + new GetBooleanAction("apple.awt.fileDialogForDirectories")); + chooseFiles = !dir; + chooseDirectories = dir; + } int dialogMode = target.getMode(); String title = target.getTitle(); @@ -78,11 +94,22 @@ public void run() { title = " "; } - String[] userFileNames = nativeRunFileDialog(title, + Window owner = target.getOwner(); + + long ownerPtr = owner == null ? + 0L : + ((CPlatformWindow) ((LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(owner)) + .getPlatformWindow()).executeGet(ptr -> ptr); + + String[] userFileNames = nativeRunFileDialog( + ownerPtr, + title, dialogMode, target.isMultipleMode(), navigateApps, chooseDirectories, + chooseFiles, + createDirectories, target.getFilenameFilter() != null, target.getDirectory(), target.getFile()); @@ -91,7 +118,7 @@ public void run() { String file = null; File[] files = null; - if (userFileNames != null) { + if (userFileNames != null && userFileNames.length > 0) { // the dialog wasn't cancelled int filesNumber = userFileNames.length; files = new File[filesNumber]; @@ -152,6 +179,10 @@ public void setVisible(boolean visible) { * If the dialog doesn't have a file filter return true. */ private boolean queryFilenameFilter(final String inFilename) { + if (!Boolean.getBoolean("awt.file.dialog.enable.filter")) { + return true; + } + boolean ret = false; final FilenameFilter ff = target.getFilenameFilter(); @@ -161,14 +192,19 @@ private boolean queryFilenameFilter(final String inFilename) { if (!fileObj.isDirectory()) { File directoryObj = new File(fileObj.getParent()); String nameOnly = fileObj.getName(); - ret = ff.accept(directoryObj, nameOnly); + try { + ret = ff.accept(directoryObj, nameOnly); + } catch (Throwable e) { + log.warning("FilenameFilter call exception occurred", e); + } } return ret; } - private native String[] nativeRunFileDialog(String title, int mode, + private native String[] nativeRunFileDialog(long ownerPtr, String title, int mode, boolean multipleMode, boolean shouldNavigateApps, - boolean canChooseDirectories, boolean hasFilenameFilter, + boolean canChooseDirectories, boolean canChooseFiles, + boolean canCreateDirectories, boolean hasFilenameFilter, String directory, String file); @Override diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java index 64d8a101d69f..81a3e2b4bf1f 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java @@ -26,6 +26,7 @@ package sun.lwawt.macosx; import java.awt.im.spi.*; +import java.lang.reflect.Method; import java.util.*; import java.awt.*; import java.awt.peer.*; @@ -36,6 +37,7 @@ import java.lang.reflect.InvocationTargetException; import java.text.AttributedCharacterIterator.Attribute; import java.text.*; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.text.JTextComponent; import sun.awt.AWTAccessor; @@ -45,10 +47,11 @@ import static sun.awt.AWTAccessor.ComponentAccessor; public class CInputMethod extends InputMethodAdapter { - private InputMethodContext fIMContext; - private Component fAwtFocussedComponent; + private volatile InputMethodContext fIMContext; + private volatile Component fAwtFocussedComponent; private LWComponentPeer fAwtFocussedComponentPeer; private boolean isActive; + private boolean isTemporarilyDeactivated; private static Map[] sHighlightStyles; @@ -233,10 +236,13 @@ public void dispatchEvent(final AWTEvent event) { */ public void activate() { isActive = true; + enableListening(true); + isTemporarilyDeactivated = false; } public void deactivate(boolean isTemporary) { isActive = false; + isTemporarilyDeactivated = isTemporary; } /** @@ -263,9 +269,13 @@ long getNativeViewPtr(LWComponentPeer peer) { */ public void removeNotify() { if (fAwtFocussedComponentPeer != null) { - nativeEndComposition(getNativeViewPtr(fAwtFocussedComponentPeer)); + long modelPtr = getNativeViewPtr(fAwtFocussedComponentPeer); + nativeEndComposition(modelPtr, fAwtFocussedComponent); + nativeEnableListening(modelPtr, false); + nativeNotifyPeer(modelPtr, null); } + fAwtFocussedComponent = null; fAwtFocussedComponentPeer = null; } @@ -276,34 +286,37 @@ public void removeNotify() { * to talk to when responding to key events. */ protected void setAWTFocussedComponent(Component component) { - LWComponentPeer peer = null; - long modelPtr = 0; - CInputMethod imInstance = this; + if ((isTemporarilyDeactivated && component == null) || component == fAwtFocussedComponent) { + // Sometimes input happens for the natively unfocused window + // (e.g. in case of system emoji picker), + // so we don't reset last focused component on temporary focus lost. + return; + } - // component will be null when we are told there's no focused component. - // When that happens we need to notify the native architecture to stop generating IMEs - if (component == null) { - peer = fAwtFocussedComponentPeer; - imInstance = null; - } else { - peer = getNearestNativePeer(component); + if (fAwtFocussedComponentPeer != null) { + long modelPtr = getNativeViewPtr(fAwtFocussedComponentPeer); + nativeNotifyPeer(modelPtr, null); + } + + fAwtFocussedComponent = component; + fAwtFocussedComponentPeer = getNearestNativePeer(component); + + if (fAwtFocussedComponentPeer != null) { + long modelPtr = getNativeViewPtr(fAwtFocussedComponentPeer); + CInputMethod imInstance = this; // If we have a passive client, don't pass input method events to it. if (component.getInputMethodRequests() == null) { imInstance = null; } - } - - if (peer != null) { - modelPtr = getNativeViewPtr(peer); - // modelPtr refers to the ControlModel that either got or lost focus. nativeNotifyPeer(modelPtr, imInstance); } + } - // Track the focused component and its nearest peer. - fAwtFocussedComponent = component; - fAwtFocussedComponentPeer = getNearestNativePeer(component); + @Override + protected void stopListening() { + enableListening(false); } /** @@ -349,7 +362,7 @@ protected void setAWTFocussedComponent(Component component) { */ public void endComposition() { if (fAwtFocussedComponentPeer != null) - nativeEndComposition(getNativeViewPtr(fAwtFocussedComponentPeer)); + nativeEndComposition(getNativeViewPtr(fAwtFocussedComponentPeer), fAwtFocussedComponent); } /** @@ -411,6 +424,16 @@ public Object getControlObject() { return null; } + private void enableListening(boolean enable) { + if (fAwtFocussedComponentPeer != null) { + final long modelPtr = getNativeViewPtr(fAwtFocussedComponentPeer); + + if (modelPtr != 0) { + nativeEnableListening(modelPtr, enable); + } + } + } + // =========================== NSTextInput callbacks =========================== // The 'marked text' that we get from Cocoa. We need to track this separately, since // Java doesn't let us ask the IM context for it. @@ -423,6 +446,8 @@ public Object getControlObject() { * text view. This effectively wipes out any text in progress. */ private synchronized void insertText(String aString) { + if (fAwtFocussedComponent == null) return; + AttributedString attribString = new AttributedString(aString); // Set locale information on the new string. @@ -492,25 +517,23 @@ private void addAttribute (boolean isThickUnderline, boolean isGray, int start, fCurrentText.addAttribute(TextAttribute.INPUT_METHOD_HIGHLIGHT, theHighlight, begin, end); } - /* Called from JNI to select the previously typed glyph during press and hold */ - private void selectPreviousGlyph() { - if (fIMContext == null) return; // ??? + private void selectRange(int selectionStart, int length) { + if (fIMContext == null || fAwtFocussedComponent == null) { + return; + } + final int selectionEnd = selectionStart + length; try { LWCToolkit.invokeLater(new Runnable() { public void run() { - final int offset = fIMContext.getInsertPositionOffset(); - if (offset < 1) return; // ??? - if (fAwtFocussedComponent instanceof JTextComponent) { - ((JTextComponent) fAwtFocussedComponent).select(offset - 1, offset); + ((JTextComponent) fAwtFocussedComponent).select(selectionStart, selectionEnd); return; } if (fAwtFocussedComponent instanceof TextComponent) { - ((TextComponent) fAwtFocussedComponent).select(offset - 1, offset); + ((TextComponent) fAwtFocussedComponent).select(selectionStart, selectionEnd); return; } - // TODO: Ideally we want to disable press-and-hold in this case } }, fAwtFocussedComponent); } catch (Exception e) { @@ -536,8 +559,7 @@ public void run() { private void dispatchText(int selectStart, int selectLength, boolean pressAndHold) { // Nothing to do if we have no text. - if (fCurrentText == null) - return; + if (fCurrentText == null || fAwtFocussedComponent == null) return; TextHitInfo theCaret = (selectLength == 0 ? TextHitInfo.beforeOffset(selectStart) : null); TextHitInfo visiblePosition = TextHitInfo.beforeOffset(0); @@ -556,19 +578,21 @@ private void dispatchText(int selectStart, int selectLength, boolean pressAndHol /** * Frequent callbacks from NSTextInput. I think we're supposed to commit it here? */ - private synchronized void unmarkText() { - if (fCurrentText == null) - return; + private synchronized void unmarkText(Component component) { + if (component == null) { + component = fAwtFocussedComponent; + } + if (fCurrentText == null || component == null) return; TextHitInfo theCaret = TextHitInfo.afterOffset(fCurrentTextLength); TextHitInfo visiblePosition = theCaret; - InputMethodEvent event = new InputMethodEvent(fAwtFocussedComponent, + InputMethodEvent event = new InputMethodEvent(component, InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, fCurrentText.getIterator(), fCurrentTextLength, theCaret, visiblePosition); - LWCToolkit.postEvent(LWCToolkit.targetToAppContext(fAwtFocussedComponent), event); + LWCToolkit.postEvent(LWCToolkit.targetToAppContext(component), event); fCurrentText = null; fCurrentTextAsString = null; fCurrentTextLength = 0; @@ -586,46 +610,47 @@ private synchronized boolean hasMarkedText() { private synchronized String attributedSubstringFromRange(final int locationIn, final int lengthIn) { final String[] retString = new String[1]; - try { - LWCToolkit.invokeAndWait(new Runnable() { - public void run() { synchronized(retString) { - int location = locationIn; - int length = lengthIn; - - if ((location + length) > (fIMContext.getCommittedTextLength() + fCurrentTextLength)) { - length = fIMContext.getCommittedTextLength() - location; - } + if (fIMContext != null && fAwtFocussedComponent != null) { + invokeAndWaitNoThrow(new Runnable() { + public void run() { + synchronized (retString) { + int location = locationIn; + int length = lengthIn; - AttributedCharacterIterator theIterator = null; + if ((location + length) > (fIMContext.getCommittedTextLength() + fCurrentTextLength)) { + length = fIMContext.getCommittedTextLength() - location; + } - if (fCurrentText == null) { - theIterator = fIMContext.getCommittedText(location, location + length, null); - } else { - int insertSpot = fIMContext.getInsertPositionOffset(); + AttributedCharacterIterator theIterator = null; - if (location < insertSpot) { + if (fCurrentText == null) { theIterator = fIMContext.getCommittedText(location, location + length, null); - } else if (location >= insertSpot && location < insertSpot + fCurrentTextLength) { - theIterator = fCurrentText.getIterator(null, location - insertSpot, location - insertSpot +length); - } else { - theIterator = fIMContext.getCommittedText(location - fCurrentTextLength, location - fCurrentTextLength + length, null); + } else { + int insertSpot = fIMContext.getInsertPositionOffset(); + + if (location < insertSpot) { + theIterator = fIMContext.getCommittedText(location, location + length, null); + } else if (location >= insertSpot && location < insertSpot + fCurrentTextLength) { + theIterator = fCurrentText.getIterator(null, location - insertSpot, location - insertSpot + length); + } else { + theIterator = fIMContext.getCommittedText(location - fCurrentTextLength, location - fCurrentTextLength + length, null); + } } - } - // Get the characters from the iterator - char[] selectedText = new char[theIterator.getEndIndex() - theIterator.getBeginIndex()]; - char current = theIterator.first(); - int index = 0; - while (current != CharacterIterator.DONE) { - selectedText[index++] = current; - current = theIterator.next(); - } + // Get the characters from the iterator + char[] selectedText = new char[theIterator.getEndIndex() - theIterator.getBeginIndex()]; + char current = theIterator.first(); + int index = 0; + while (current != CharacterIterator.DONE) { + selectedText[index++] = current; + current = theIterator.next(); + } - retString[0] = new String(selectedText); - }} + retString[0] = new String(selectedText); + } + } }, fAwtFocussedComponent); - } catch (InvocationTargetException ite) { ite.printStackTrace(); } - + } synchronized(retString) { return retString[0]; } } @@ -638,8 +663,8 @@ public void run() { synchronized(retString) { private synchronized int[] selectedRange() { final int[] returnValue = new int[2]; - try { - LWCToolkit.invokeAndWait(new Runnable() { + if (fIMContext != null && fAwtFocussedComponent != null) { + invokeAndWaitNoThrow(new Runnable() { public void run() { synchronized(returnValue) { AttributedCharacterIterator theIterator = fIMContext.getSelectedText(null); if (theIterator == null) { @@ -672,7 +697,7 @@ public void run() { synchronized(returnValue) { }} }, fAwtFocussedComponent); - } catch (InvocationTargetException ite) { ite.printStackTrace(); } + } synchronized(returnValue) { return returnValue; } } @@ -684,20 +709,17 @@ public void run() { synchronized(returnValue) { * return null. */ private synchronized int[] markedRange() { - if (fCurrentText == null) - return null; + if (fCurrentText == null || fAwtFocussedComponent == null) return null; final int[] returnValue = new int[2]; - try { - LWCToolkit.invokeAndWait(new Runnable() { - public void run() { synchronized(returnValue) { - // The insert position is always after the composed text, so the range start is the - // insert spot less the length of the composed text. - returnValue[0] = fIMContext.getInsertPositionOffset(); - }} - }, fAwtFocussedComponent); - } catch (InvocationTargetException ite) { ite.printStackTrace(); } + invokeAndWaitNoThrow(new Runnable() { + public void run() { synchronized(returnValue) { + // The insert position is always after the composed text, so the range start is the + // insert spot less the length of the composed text. + returnValue[0] = fIMContext.getInsertPositionOffset(); + }} + }, fAwtFocussedComponent); returnValue[1] = fCurrentTextLength; synchronized(returnValue) { return returnValue; } @@ -714,36 +736,38 @@ private synchronized int[] firstRectForCharacterRange(final int absoluteTextOffs final int[] rect = new int[4]; try { - LWCToolkit.invokeAndWait(new Runnable() { - public void run() { synchronized(rect) { - int insertOffset = fIMContext.getInsertPositionOffset(); - int composedTextOffset = absoluteTextOffset - insertOffset; - if (composedTextOffset < 0) composedTextOffset = 0; - Rectangle r = fIMContext.getTextLocation(TextHitInfo.beforeOffset(composedTextOffset)); - rect[0] = r.x; - rect[1] = r.y; - rect[2] = r.width; - rect[3] = r.height; - - // This next if-block is a hack to work around a bug in JTextComponent. getTextLocation ignores - // the TextHitInfo passed to it and always returns the location of the insertion point, which is - // at the start of the composed text. We'll do some calculation so the candidate window for Kotoeri - // follows the requested offset into the composed text. - if (composedTextOffset > 0 && (fAwtFocussedComponent instanceof JTextComponent)) { - Rectangle r2 = fIMContext.getTextLocation(TextHitInfo.beforeOffset(0)); - - if (r.equals(r2)) { - // FIXME: (SAK) If the candidate text wraps over two lines, this calculation pushes the candidate - // window off the right edge of the component. - String inProgressSubstring = fCurrentTextAsString.substring(0, composedTextOffset); - Graphics g = fAwtFocussedComponent.getGraphics(); - int xOffset = g.getFontMetrics().stringWidth(inProgressSubstring); - rect[0] += xOffset; - g.dispose(); + if (fIMContext != null && fAwtFocussedComponent != null) { + FxInvoker.invoke(() -> { + synchronized (rect) { + int insertOffset = fIMContext.getInsertPositionOffset(); + int composedTextOffset = absoluteTextOffset - insertOffset; + if (composedTextOffset < 0) composedTextOffset = 0; + Rectangle r = fIMContext.getTextLocation(TextHitInfo.beforeOffset(composedTextOffset)); + rect[0] = r.x; + rect[1] = r.y; + rect[2] = r.width; + rect[3] = r.height; + + // This next if-block is a hack to work around a bug in JTextComponent. getTextLocation ignores + // the TextHitInfo passed to it and always returns the location of the insertion point, which is + // at the start of the composed text. We'll do some calculation so the candidate window for Kotoeri + // follows the requested offset into the composed text. + if (composedTextOffset > 0 && (fAwtFocussedComponent instanceof JTextComponent)) { + Rectangle r2 = fIMContext.getTextLocation(TextHitInfo.beforeOffset(0)); + + if (r.equals(r2) && fCurrentTextAsString != null) { + // FIXME: (SAK) If the candidate text wraps over two lines, this calculation pushes the candidate + // window off the right edge of the component. + String inProgressSubstring = fCurrentTextAsString.substring(0, composedTextOffset); + Graphics g = fAwtFocussedComponent.getGraphics(); + int xOffset = g.getFontMetrics().stringWidth(inProgressSubstring); + rect[0] += xOffset; + g.dispose(); + } } } - }} - }, fAwtFocussedComponent); + }, (sun.awt.im.InputContext)fIMContext, fAwtFocussedComponent); + } } catch (InvocationTargetException ite) { ite.printStackTrace(); } synchronized(rect) { return rect; } @@ -758,12 +782,14 @@ private synchronized int characterIndexForPoint(final int screenX, final int scr final int[] insertPositionOffset = new int[1]; try { - LWCToolkit.invokeAndWait(new Runnable() { - public void run() { synchronized(offsetInfo) { - offsetInfo[0] = fIMContext.getLocationOffset(screenX, screenY); - insertPositionOffset[0] = fIMContext.getInsertPositionOffset(); - }} - }, fAwtFocussedComponent); + if (fIMContext != null && fAwtFocussedComponent != null) { + FxInvoker.invoke(() -> { + synchronized (offsetInfo) { + offsetInfo[0] = fIMContext.getLocationOffset(screenX, screenY); + insertPositionOffset[0] = fIMContext.getInsertPositionOffset(); + } + }, (sun.awt.im.InputContext)fIMContext, fAwtFocussedComponent); + } } catch (InvocationTargetException ite) { ite.printStackTrace(); } // This bit of gymnastics ensures that the returned location is within the composed text. @@ -799,9 +825,16 @@ public String getNativeInputMethodInfo() // Note that if nativePeer isn't something that normally accepts keystrokes (i.e., a CPanel) // these calls will be ignored. private native void nativeNotifyPeer(long nativePeer, CInputMethod imInstance); - private native void nativeEndComposition(long nativePeer); + private native void nativeEndComposition(long nativePeer, Component component); private native void nativeHandleEvent(LWComponentPeer peer, AWTEvent event); + /* + * Passing false to the second parameter disables any interaction with + * the AppKit text input management subsystem (i.e. input methods, dead keys, maybe smth else) + * Passing true there enables it back + */ + private native void nativeEnableListening(long nativePeerTarget, boolean enable); + // Returns the locale of the active input method. static native Locale getNativeLocale(); @@ -813,4 +846,71 @@ public String getNativeInputMethodInfo() // Initialize toolbox routines static native void nativeInit(); + + private static class FxInvoker { + final static Method GET_CLIENT_COMPONENT_METHOD; + static Class JFX_PANEL_CLASS; + + static { + Method m = null; + try { + m = sun.awt.im.InputContext.class.getDeclaredMethod("getClientComponent"); + if (m != null) m.setAccessible(true); + } catch (NoSuchMethodException ignore) { + } + GET_CLIENT_COMPONENT_METHOD = m; + } + + static Component getClientComponent(sun.awt.im.InputContext ctx) { + if (GET_CLIENT_COMPONENT_METHOD != null) { + try { + return (Component)GET_CLIENT_COMPONENT_METHOD.invoke(ctx); + } catch (IllegalAccessException | InvocationTargetException ignore) { + } + } + return null; + } + + static boolean instanceofJFXPanel(Component clientComponent) { + if (clientComponent != null) { + if (JFX_PANEL_CLASS == null) { + try { + // the class is not available in the current class loader context, use the client class loader + JFX_PANEL_CLASS = Class.forName("javafx.embed.swing.JFXPanel", false, clientComponent.getClass().getClassLoader()); + } catch (ClassNotFoundException ignore) { + } + } + if (JFX_PANEL_CLASS != null) { + return JFX_PANEL_CLASS.isInstance(clientComponent); + } + } + return false; + } + + // Executed on AppKit + static void invoke(Runnable runnable, sun.awt.im.InputContext inputContext, Component targetToAppContext) throws InvocationTargetException { + AtomicBoolean runOnAppKit = new AtomicBoolean(false); + + // 1) Do not run secondary msg loop in this case. + // 2) Delegate runnable back to FX when applicable. + invokeAndWaitNoThrow(() -> { + runOnAppKit.set(instanceofJFXPanel(getClientComponent(inputContext))); + if (!runOnAppKit.get()) { + runnable.run(); + } + }, targetToAppContext); + + if (runOnAppKit.get()) { + runnable.run(); + } + } + } + + static void invokeAndWaitNoThrow(Runnable runnable, Component component) { + try { + LWCToolkit.invokeAndWait(runnable, component); + } catch (Throwable e) { + e.printStackTrace(); + } + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenu.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenu.java index 3511d4aeb1d8..7fef2633d79a 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenu.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenu.java @@ -25,6 +25,7 @@ package sun.lwawt.macosx; +import sun.awt.AWTThreading; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; @@ -64,14 +65,14 @@ long createModel() { LWCToolkit.targetToPeer(getTarget().getParent()); if (parent instanceof CMenu) { - return parent.executeGet(this::nativeCreateSubMenu); + return AWTThreading.executeWaitToolkit(() -> parent.executeGet(this::nativeCreateSubMenu)); } if (parent instanceof CMenuBar) { MenuBar parentContainer = (MenuBar)getTarget().getParent(); boolean isHelpMenu = parentContainer.getHelpMenu() == getTarget(); int insertionLocation = ((CMenuBar)parent).getNextInsertionIndex(); - return parent.executeGet(ptr -> nativeCreateMenu(ptr, isHelpMenu, - insertionLocation)); + return AWTThreading.executeWaitToolkit(() -> parent.executeGet(ptr -> nativeCreateMenu(ptr, isHelpMenu, + insertionLocation))); } throw new InternalError("Parent must be CMenu or CMenuBar"); } @@ -84,7 +85,7 @@ public final void addItem(MenuItem item) { @Override public final void delItem(final int index) { - execute(ptr -> nativeDeleteItem(ptr, index)); + AWTThreading.executeWaitToolkit(() -> execute(ptr -> nativeDeleteItem(ptr, index))); } @Override diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuItem.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuItem.java index c4b2640efb84..0a21cbf00a0e 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuItem.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuItem.java @@ -33,6 +33,7 @@ import java.awt.peer.MenuItemPeer; import java.util.concurrent.atomic.AtomicBoolean; +import sun.awt.AWTThreading; import sun.awt.SunToolkit; import sun.lwawt.LWToolkit; @@ -61,7 +62,7 @@ private boolean isSeparator() { @Override long createModel() { CMenuComponent parent = (CMenuComponent)LWToolkit.targetToPeer(getTarget().getParent()); - return parent.executeGet(ptr->nativeCreate(ptr, isSeparator())); + return AWTThreading.executeWaitToolkit(() -> parent.executeGet(ptr->nativeCreate(ptr, isSeparator()))); } @SuppressWarnings("deprecation") public void setLabel(String label, char keyChar, int keyCode, int modifiers) { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java index a98b5529845d..51ac58a186ca 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java @@ -27,9 +27,11 @@ package sun.lwawt.macosx; import java.awt.Insets; +import java.util.Objects; import sun.lwawt.PlatformComponent; import sun.lwawt.PlatformWindow; +import sun.lwawt.LWWindowPeer; /** * On OSX {@code CPlatformComponent} stores pointer to the native CAlayer which @@ -53,6 +55,8 @@ public long getPointer() { @Override public void initialize(final PlatformWindow platformWindow) { + Objects.requireNonNull(platformWindow); + this.platformWindow = platformWindow; setPtr(nativeCreateComponent(platformWindow.getLayerPtr())); } @@ -61,10 +65,13 @@ public void initialize(final PlatformWindow platformWindow) { @Override public void setBounds(final int x, final int y, final int w, final int h) { - // translates values from the coordinate system of the top-level window - // to the coordinate system of the content view - final Insets insets = platformWindow.getPeer().getInsets(); - execute(ptr->nativeSetBounds(ptr, x - insets.left, y - insets.top, w, h)); + if (platformWindow != null) { + // translates values from the coordinate system of the top-level window + // to the coordinate system of the content view + final LWWindowPeer peer = platformWindow.getPeer(); + final Insets insets = (peer != null) ? peer.getInsets() : new Insets(0, 0, 0, 0); + execute(ptr -> nativeSetBounds(ptr, x - insets.left, y - insets.top, w, h)); + } } @Override diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java index 8570ecaa97a8..da9cea1a0811 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java @@ -28,7 +28,7 @@ import java.awt.*; import java.awt.event.FocusEvent; -import sun.awt.CGraphicsDevice; +import sun.awt.CGraphicsEnvironment; import sun.java2d.SurfaceData; import sun.java2d.metal.MTLLayer; import sun.java2d.opengl.CGLLayer; @@ -55,7 +55,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { @Override // PlatformWindow public void initialize(Window target, final LWWindowPeer peer, PlatformWindow owner) { this.peer = peer; - if (CGraphicsDevice.usingMetalPipeline()) { + if (CGraphicsEnvironment.usingMetalPipeline()) { this.windowLayer = new MTLLayer(peer); } else { this.windowLayer = new CGLLayer(peer); diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java index f14c7b40cbab..1447d9d31e95 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java @@ -26,6 +26,7 @@ package sun.lwawt.macosx; import sun.awt.SunToolkit; +import sun.awt.event.KeyEventProcessing; import sun.lwawt.LWWindowPeer; import sun.lwawt.PlatformEventNotifier; @@ -35,6 +36,8 @@ import java.awt.event.MouseWheelEvent; import java.awt.event.KeyEvent; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Translates NSEvents/NPCocoaEvents into AWT events. @@ -46,6 +49,14 @@ final class CPlatformResponder { private int lastKeyPressCode = KeyEvent.VK_UNDEFINED; private final DeltaAccumulator deltaAccumulatorX = new DeltaAccumulator(); private final DeltaAccumulator deltaAccumulatorY = new DeltaAccumulator(); + private boolean momentumStarted; + private int momentumX; + private int momentumY; + private int momentumModifiers; + private int lastDraggedAbsoluteX; + private int lastDraggedAbsoluteY; + private int lastDraggedRelativeX; + private int lastDraggedRelativeY; CPlatformResponder(final PlatformEventNotifier eventNotifier, final boolean isNpapiCallback) { @@ -67,6 +78,18 @@ void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber, int jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) : NSEvent.nsToJavaEventType(eventType); + boolean dragged = jeventType == MouseEvent.MOUSE_DRAGGED; + if (dragged // ignore dragged event that does not change any location + && lastDraggedAbsoluteX == absX && lastDraggedRelativeX == x + && lastDraggedAbsoluteY == absY && lastDraggedRelativeY == y) return; + + if (dragged || jeventType == MouseEvent.MOUSE_PRESSED) { + lastDraggedAbsoluteX = absX; + lastDraggedAbsoluteY = absY; + lastDraggedRelativeX = x; + lastDraggedRelativeY = y; + } + int jbuttonNumber = MouseEvent.NOBUTTON; int jclickCount = 0; @@ -79,12 +102,16 @@ void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber, } int jmodifiers = NSEvent.nsToJavaModifiers(modifierFlags); - if ((jeventType == MouseEvent.MOUSE_PRESSED) && (jbuttonNumber > MouseEvent.NOBUTTON)) { - // 8294426: NSEvent.nsToJavaModifiers returns 0 on M2 MacBooks if the event is generated - // via tapping (not pressing) on a trackpad - // (System Preferences -> Trackpad -> Tap to click must be turned on). - // So let's set the modifiers manually. - jmodifiers |= MouseEvent.getMaskForButton(jbuttonNumber); + if (jbuttonNumber > MouseEvent.NOBUTTON) { + if ( (jeventType == MouseEvent.MOUSE_PRESSED) || (Jbr5762Fix.isEnabled && (jeventType == MouseEvent.MOUSE_DRAGGED)) ) { + // 8294426: NSEvent.nsToJavaModifiers returns 0 on M2 MacBooks if the event is generated + // via tapping (not pressing) on a trackpad + // (System Preferences -> Trackpad -> Tap to click must be turned on). + // So let's set the modifiers manually. + // + // JBR-5762: enforce modifiers for the pressed button of MOUSE_DRAGGED events as well. + jmodifiers |= MouseEvent.getMaskForButton(jbuttonNumber); + } } boolean jpopupTrigger = NSEvent.isPopupTrigger(jmodifiers); @@ -97,11 +124,26 @@ void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber, /** * Handles scroll events. */ - void handleScrollEvent(final int x, final int y, final int absX, + void handleScrollEvent(int x, int y, final int absX, final int absY, final int modifierFlags, final double deltaX, final double deltaY, final int scrollPhase) { int jmodifiers = NSEvent.nsToJavaModifiers(modifierFlags); + + if (scrollPhase > NSEvent.SCROLL_PHASE_UNSUPPORTED) { + if (scrollPhase == NSEvent.SCROLL_PHASE_BEGAN) { + momentumStarted = false; + } else if (scrollPhase == NSEvent.SCROLL_PHASE_MOMENTUM_BEGAN) { + momentumStarted = true; + momentumX = x; + momentumY = y; + momentumModifiers = jmodifiers; + } else if (momentumStarted) { + x = momentumX; + y = momentumY; + jmodifiers = momentumModifiers; + } + } final boolean isShift = (jmodifiers & InputEvent.SHIFT_DOWN_MASK) != 0; int roundDeltaX = deltaAccumulatorX.getRoundedDelta(deltaX, scrollPhase); @@ -134,8 +176,17 @@ private void dispatchScrollEvent(final int x, final int y, final int absX, /** * Handles key events. + * + * @param eventType macOS event type ID: keyDown, keyUp or flagsChanged + * @param modifierFlags macOS modifier flags mask (NSEventModifierFlags) + * @param chars NSEvent's characters property + * @param actualChars If non-null, then this key should generate KEY_TYPED events + * corresponding to characters in this string. Only valid for keyDown events. + * @param keyCode macOS virtual key code of the key being pressed or released + * @param needsKeyTyped post KEY_TYPED events? + * @param needsKeyReleased post KEY_RELEASED events? */ - void handleKeyEvent(int eventType, int modifierFlags, String chars, String charsIgnoringModifiers, + void handleKeyEvent(int eventType, int modifierFlags, String chars, String actualChars, short keyCode, boolean needsKeyTyped, boolean needsKeyReleased) { boolean isFlagsChangedEvent = isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) : @@ -143,13 +194,10 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars int jeventType = KeyEvent.KEY_PRESSED; int jkeyCode = KeyEvent.VK_UNDEFINED; - int jextendedkeyCode = -1; int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN; - boolean postsTyped = false; boolean spaceKeyTyped = false; char testChar = KeyEvent.CHAR_UNDEFINED; - boolean isDeadChar = (chars!= null && chars.length() == 0); if (isFlagsChangedEvent) { int[] in = new int[] {modifierFlags, keyCode}; @@ -162,59 +210,33 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars jeventType = out[2]; } else { if (chars != null && chars.length() > 0) { - testChar = chars.charAt(0); - - //Check if String chars contains SPACE character. + // `chars` might contain more than one character, so why are we using the last one? + // It doesn't really matter actually! If the string contains more than one character, + // the only way that this character will be used is to construct the keyChar field of the KeyEvent object. + // That field is only guaranteed to be meaningful for KEY_TYPED events, so let's not overthink it. + // Please note: this character is NOT used to construct extended key codes, that happens + // inside the NSEvent.nsToJavaKeyInfo function. + testChar = chars.charAt(chars.length() - 1); + + // Check if String chars contains SPACE character. if (chars.trim().isEmpty()) { spaceKeyTyped = true; } } - char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ? - charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED; - - int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode}; - int[] out = new int[4]; // [jkeyCode, jkeyLocation, deadChar, extendedKeyCode] + int[] in = new int[] {keyCode, KeyEventProcessing.useNationalLayouts ? 1 : 0, KeyEventProcessing.reportDeadKeysAsNormal ? 1 : 0}; + int[] out = new int[2]; // [jkeyCode, jkeyLocation] - postsTyped = NSEvent.nsToJavaKeyInfo(in, out); - if (!postsTyped) { - testChar = KeyEvent.CHAR_UNDEFINED; - } - - if(isDeadChar){ - testChar = (char) out[2]; - if(testChar == 0){ - return; - } - } - - // If Pinyin Simplified input method is selected, CAPS_LOCK key is supposed to switch - // input to latin letters. - // It is necessary to use testCharIgnoringModifiers instead of testChar for event - // generation in such case to avoid uppercase letters in text components. - LWCToolkit lwcToolkit = (LWCToolkit)Toolkit.getDefaultToolkit(); - if ((lwcToolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK) && - Locale.SIMPLIFIED_CHINESE.equals(lwcToolkit.getDefaultKeyboardLocale())) || - (LWCToolkit.isLocaleUSInternationalPC(lwcToolkit.getDefaultKeyboardLocale()) && - LWCToolkit.isCharModifierKeyInUSInternationalPC(testChar) && - (testChar != testCharIgnoringModifiers))) { - testChar = testCharIgnoringModifiers; - } + NSEvent.nsToJavaKeyInfo(in, out); jkeyCode = out[0]; - jextendedkeyCode = out[3]; jkeyLocation = out[1]; jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) : NSEvent.nsToJavaEventType(eventType); } - char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags, spaceKeyTyped); - // Some keys may generate a KEY_TYPED, but we can't determine - // what that character is. That's likely a bug, but for now we - // just check for CHAR_UNDEFINED. - if (javaChar == KeyEvent.CHAR_UNDEFINED) { - postsTyped = false; - } + char javaChar = (testChar == KeyEvent.CHAR_UNDEFINED) ? KeyEvent.CHAR_UNDEFINED : + NSEvent.nsToJavaChar(testChar, modifierFlags, spaceKeyTyped); int jmodifiers = NSEvent.nsToJavaModifiers(modifierFlags); long when = System.currentTimeMillis(); @@ -223,32 +245,34 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars lastKeyPressCode = jkeyCode; } eventNotifier.notifyKeyEvent(jeventType, when, jmodifiers, - jkeyCode, javaChar, jkeyLocation, jextendedkeyCode); - - // Current browser may be sending input events, so don't - // post the KEY_TYPED here. - postsTyped &= needsKeyTyped; + jkeyCode, javaChar, jkeyLocation); // That's the reaction on the PRESSED (not RELEASED) event as it comes to // appear in MacOSX. // Modifier keys (shift, etc) don't want to send TYPED events. // On the other hand we don't want to generate keyTyped events // for clipboard related shortcuts like Meta + [CVX] - if (jeventType == KeyEvent.KEY_PRESSED && postsTyped && + if (jeventType == KeyEvent.KEY_PRESSED && needsKeyTyped && javaChar != KeyEvent.CHAR_UNDEFINED && (jmodifiers & KeyEvent.META_DOWN_MASK) == 0) { - // Enter and Space keys finish the input method processing, - // KEY_TYPED and KEY_RELEASED events for them are synthesized in handleInputEvent. - if (needsKeyReleased && (jkeyCode == KeyEvent.VK_ENTER || jkeyCode == KeyEvent.VK_SPACE)) { - return; + if (actualChars == null) { + // Either macOS didn't send us anything in insertText: to type, + // or this event was not generated in AWTView.m. Let's fall back to using javaChar + // since we still need to generate KEY_TYPED events, for instance for Ctrl+ combinations. + // javaChar is guaranteed to be a valid character, since postsTyped is true. + actualChars = String.valueOf(javaChar); } - eventNotifier.notifyKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers, - KeyEvent.VK_UNDEFINED, javaChar, - KeyEvent.KEY_LOCATION_UNKNOWN, jextendedkeyCode); - //If events come from Firefox, released events should also be generated. + + for (char ch : actualChars.toCharArray()) { + eventNotifier.notifyKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers, + KeyEvent.VK_UNDEFINED, ch, + KeyEvent.KEY_LOCATION_UNKNOWN); + } + + // If events come from Firefox, released events should also be generated. if (needsKeyReleased) { eventNotifier.notifyKeyEvent(KeyEvent.KEY_RELEASED, when, jmodifiers, jkeyCode, javaChar, - KeyEvent.KEY_LOCATION_UNKNOWN, jextendedkeyCode); + KeyEvent.KEY_LOCATION_UNKNOWN); } } } @@ -262,13 +286,13 @@ void handleInputEvent(String text) { eventNotifier.notifyKeyEvent(KeyEvent.KEY_TYPED, System.currentTimeMillis(), 0, KeyEvent.VK_UNDEFINED, c, - KeyEvent.KEY_LOCATION_UNKNOWN, -1); + KeyEvent.KEY_LOCATION_UNKNOWN); index++; } eventNotifier.notifyKeyEvent(KeyEvent.KEY_RELEASED, System.currentTimeMillis(), 0, lastKeyPressCode, c, - KeyEvent.KEY_LOCATION_UNKNOWN, -1); + KeyEvent.KEY_LOCATION_UNKNOWN); } } @@ -314,4 +338,19 @@ else if (scrollPhase == NSEvent.SCROLL_PHASE_MOMENTUM_BEGAN) { return roundDelta; } } + + static class Jbr5762Fix { + static final boolean isEnabled; + + static { + boolean isEnabledLocal = false; + + try { + isEnabledLocal = Boolean.parseBoolean(System.getProperty("awt.mac.enforceMouseModifiersForMouseDragged", "true")); + } catch (Exception ignored) { + } + + isEnabled = isEnabledLocal; + } + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformView.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformView.java index b79f7c3ecf89..ddf85c410a29 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformView.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformView.java @@ -35,14 +35,16 @@ import java.util.concurrent.atomic.AtomicReference; import sun.awt.CGraphicsEnvironment; -import sun.awt.CGraphicsDevice; import sun.java2d.metal.MTLLayer; import sun.lwawt.LWWindowPeer; import sun.java2d.SurfaceData; import sun.java2d.opengl.CGLLayer; +import sun.util.logging.PlatformLogger; public class CPlatformView extends CFRetainedResource { + private static final PlatformLogger logger = + PlatformLogger.getLogger(CPlatformView.class.getName()); private native long nativeCreateView(int x, int y, int width, int height, long windowLayerPtr); private static native void nativeSetAutoResizable(long awtView, boolean toResize); private static native int nativeGetNSViewDisplayID(long awtView); @@ -61,8 +63,7 @@ public CPlatformView() { public void initialize(LWWindowPeer peer, CPlatformResponder responder) { initializeBase(peer, responder); - this.windowLayer = CGraphicsDevice.usingMetalPipeline()? createMTLLayer() : createCGLayer(); - + this.windowLayer = CGraphicsEnvironment.usingMetalPipeline()? createMTLLayer() : createCGLayer(); setPtr(nativeCreateView(0, 0, 0, 0, getWindowLayerPtr())); } @@ -199,8 +200,8 @@ private void deliverMouseEvent(final NSEvent event) { } private void deliverKeyEvent(NSEvent event) { - responder.handleKeyEvent(event.getType(), event.getModifierFlags(), event.getCharacters(), - event.getCharactersIgnoringModifiers(), event.getKeyCode(), true, false); + responder.handleKeyEvent(event.getType(), event.getModifierFlags(), event.getCharacters(), event.getActualCharacters(), + event.getKeyCode(), true, false); } /** @@ -210,4 +211,13 @@ private void deliverKeyEvent(NSEvent event) { private void deliverWindowDidExposeEvent() { peer.notifyExpose(peer.getSize()); } + + private void deliverChangeBackingProperties(float scale) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Changed backing properties, scale = " + scale); + } + if (scale > 0 && windowLayer != null) { + windowLayer.replaceSurfaceData(Math.round(scale)); + } + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 1be76db3acdf..c6bacf4f5506 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -30,19 +30,24 @@ import java.awt.DefaultKeyboardFocusManager; import java.awt.Dialog; import java.awt.Dialog.ModalityType; +import java.awt.EventQueue; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; import java.awt.Insets; +import java.awt.KeyboardFocusManager; import java.awt.MenuBar; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.awt.event.FocusEvent; +import java.awt.event.PaintEvent; import java.awt.event.WindowEvent; import java.awt.event.WindowStateListener; +import java.awt.peer.ComponentPeer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.InvocationTargetException; @@ -63,6 +68,9 @@ import sun.awt.AWTAccessor; import sun.awt.AWTAccessor.ComponentAccessor; import sun.awt.AWTAccessor.WindowAccessor; +import sun.awt.AWTThreading; +import sun.awt.PaintEventDispatcher; +import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SurfaceData; import sun.lwawt.LWLightweightFramePeer; import sun.lwawt.LWToolkit; @@ -75,6 +83,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindow { private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h); private static native void nativeSetNSWindowStyleBits(long nsWindowPtr, int mask, int data); + private static native void nativeSetNSWindowAppearance(long nsWindowPtr, String appearanceName); private static native void nativeSetNSWindowMenuBar(long nsWindowPtr, long menuBarPtr); private static native Insets nativeGetNSWindowInsets(long nsWindowPtr); private static native void nativeSetNSWindowBounds(long nsWindowPtr, double x, double y, double w, double h); @@ -83,7 +92,8 @@ private static native void nativeSetNSWindowStandardFrame(long nsWindowPtr, double x, double y, double w, double h); private static native void nativeSetNSWindowMinMax(long nsWindowPtr, double minW, double minH, double maxW, double maxH); private static native void nativePushNSWindowToBack(long nsWindowPtr); - private static native void nativePushNSWindowToFront(long nsWindowPtr); + private static native void nativePushNSWindowToFront(long nsWindowPtr, boolean wait); + private static native void nativeHideWindow(long nsWindowPtr, boolean wait); private static native void nativeSetNSWindowTitle(long nsWindowPtr, String title); private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr); private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage); @@ -96,6 +106,11 @@ private static native void nativeSetNSWindowStandardFrame(long nsWindowPtr, private static native void nativeEnterFullScreenMode(long nsWindowPtr); private static native void nativeExitFullScreenMode(long nsWindowPtr); static native CPlatformWindow nativeGetTopmostPlatformWindowUnderMouse(); + private static native void nativeRaiseLevel(long nsWindowPtr, boolean popup, boolean onlyIfParentIsActive); + private static native boolean nativeDelayShowing(long nsWindowPtr); + private static native void nativeUpdateCustomTitleBar(long nsWindowPtr); + private static native void nativeCallDeliverMoveResizeEvent(long nsWindowPtr); + private static native void nativeSetRoundedCorners(long nsWindowPrt, float radius, int borderWidth, int borderColor); // Logger to report issues happened during execution but that do not affect functionality private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow"); @@ -127,6 +142,8 @@ private static native void nativeSetNSWindowStandardFrame(long nsWindowPtr, public static final String WINDOW_FULL_CONTENT = "apple.awt.fullWindowContent"; public static final String WINDOW_TRANSPARENT_TITLE_BAR = "apple.awt.transparentTitleBar"; public static final String WINDOW_TITLE_VISIBLE = "apple.awt.windowTitleVisible"; + public static final String WINDOW_APPEARANCE = "apple.awt.windowAppearance"; + public static final String WINDOW_CORNER_RADIUS = "apple.awt.windowCornerRadius"; // This system property is named as jdk.* because it is not specific to AWT // and it is also used in JavaFX @@ -155,7 +172,6 @@ private static native void nativeSetNSWindowStandardFrame(long nsWindowPtr, static final int MINIMIZABLE = 1 << 8; static final int RESIZABLE = 1 << 9; // both a style bit and prop bit - static final int NONACTIVATING = 1 << 24; static final int IS_DIALOG = 1 << 25; static final int IS_MODAL = 1 << 26; static final int IS_POPUP = 1 << 27; @@ -269,6 +285,18 @@ public void applyProperty(final CPlatformWindow c, final Object value) { public void applyProperty(final CPlatformWindow c, final Object value) { c.setStyleBits(TITLE_VISIBLE, value == null ? true : Boolean.parseBoolean(value.toString())); } + }, + new Property(WINDOW_APPEARANCE) { + public void applyProperty(final CPlatformWindow c, final Object value) { + if (value != null && (value instanceof String)) { + c.execute(ptr -> nativeSetNSWindowAppearance(ptr, (String) value)); + } + } + }, + new Property(WINDOW_CORNER_RADIUS) { + public void applyProperty(final CPlatformWindow c, final Object value) { + c.setRoundedCorners(value); + } } }) { @SuppressWarnings("deprecation") @@ -350,17 +378,32 @@ public void initialize(Window _target, LWWindowPeer _peer, PlatformWindow _owner if (owner != null) { hasOwnerPtr = 0L != owner.executeGet(ownerPtr -> { - ref.set(nativeCreateNSWindow(viewPtr, ownerPtr, styleBits, - bounds.x, bounds.y, - bounds.width, bounds.height)); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("createNSWindow: owner=" + Long.toHexString(ownerPtr) + + ", styleBits=" + Integer.toHexString(styleBits) + + ", bounds=" + bounds); + } + long windowPtr = createNSWindow(viewPtr, ownerPtr, styleBits, + bounds.x, bounds.y, bounds.width, bounds.height); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("window created: " + Long.toHexString(windowPtr)); + } + ref.set(windowPtr); return 1; }); } if (!hasOwnerPtr) { - ref.set(nativeCreateNSWindow(viewPtr, 0, - styleBits, bounds.x, bounds.y, - bounds.width, bounds.height)); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("createNSWindow: styleBits=" + Integer.toHexString(styleBits) + + ", bounds=" + bounds); + } + long windowPtr = createNSWindow(viewPtr, 0, styleBits, + bounds.x, bounds.y, bounds.width, bounds.height); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("window created: " + Long.toHexString(windowPtr)); + } + ref.set(windowPtr); } }); setPtr(ref.get()); @@ -397,18 +440,15 @@ CPlatformView createContentView() { protected int getInitialStyleBits() { // defaults style bits - int styleBits = DECORATED | HAS_SHADOW | CLOSEABLE | MINIMIZABLE | ZOOMABLE | RESIZABLE | TITLE_VISIBLE; + int styleBits = DECORATED | HAS_SHADOW | CLOSEABLE | ZOOMABLE | RESIZABLE | TITLE_VISIBLE; - if (isNativelyFocusableWindow()) { - styleBits = SET(styleBits, SHOULD_BECOME_KEY, true); - styleBits = SET(styleBits, SHOULD_BECOME_MAIN, true); - } + styleBits |= getFocusableStyleBits(); final boolean isFrame = (target instanceof Frame); final boolean isDialog = (target instanceof Dialog); final boolean isPopup = (target.getType() == Window.Type.POPUP); - if (isDialog) { - styleBits = SET(styleBits, MINIMIZABLE, false); + if (isFrame) { + styleBits = SET(styleBits, MINIMIZABLE, true); } // Either java.awt.Frame or java.awt.Dialog can be undecorated, however java.awt.Window always is undecorated. @@ -438,7 +478,6 @@ protected int getInitialStyleBits() { if (isPopup) { styleBits = SET(styleBits, TEXTURED, false); // Popups in applets don't activate applet's process - styleBits = SET(styleBits, NONACTIVATING, true); styleBits = SET(styleBits, IS_POPUP, true); } @@ -536,9 +575,19 @@ protected int getInitialStyleBits() { return styleBits; } - // this is the counter-point to -[CWindow _nativeSetStyleBit:] private void setStyleBits(final int mask, final boolean value) { - execute(ptr -> nativeSetNSWindowStyleBits(ptr, mask, value ? mask : 0)); + setStyleBits(mask, value ? mask : 0); + } + + // this is the counter-point to -[CWindow _nativeSetStyleBit:] + private void setStyleBits(final int mask, final int value) { + execute(ptr -> { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("nativeSetNSWindowStyleBits: window=" + Long.toHexString(ptr) + + ", mask=" + Integer.toHexString(mask) + ", value=" + Integer.toHexString(value)); + } + nativeSetNSWindowStyleBits(ptr, mask, value); + }); } private native void _toggleFullScreenMode(final long model); @@ -603,6 +652,18 @@ public SurfaceData replaceSurfaceData() { return contentView.replaceSurfaceData(); } + public void displayChanged(boolean profileOnly) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine(profileOnly ? "DISPLAY_PROFILE_CHANGED" : "DISPLAY_CHANGED"); + } + + if (peer != null && !profileOnly) { + EventQueue.invokeLater( + () -> ((SunGraphicsEnvironment) GraphicsEnvironment. + getLocalGraphicsEnvironment()).displayChanged()); + } + } + @Override // PlatformWindow public void setBounds(int x, int y, int w, int h) { execute(ptr -> nativeSetNSWindowBounds(ptr, x, y, w, h)); @@ -655,6 +716,16 @@ public boolean isVisible() { return this.visible; } + private static LWWindowPeer getBlockerFor(Window window) { + if (window != null) { + ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(window); + if (peer instanceof LWWindowPeer) { + return ((LWWindowPeer)peer).getBlocker(); + } + } + return null; + } + @Override // PlatformWindow public void setVisible(boolean visible) { // Configure stuff @@ -705,52 +776,58 @@ public void setVisible(boolean visible) { } } + this.visible = visible; + // Actually show or hide the window LWWindowPeer blocker = (peer == null)? null : peer.getBlocker(); - if (blocker == null || !visible) { + if (!visible) { + execute(ptr -> AWTThreading.executeWaitToolkit(wait -> nativeHideWindow(ptr, wait))); + } else if (delayShowing()) { + if (blocker == null) { + Window focusedWindow = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow(); + LWWindowPeer focusedWindowBlocker = getBlockerFor(focusedWindow); + if (focusedWindowBlocker == peer) { + // try to switch to target space if we're adding a modal dialog + // that would block currently focused window + owner.execute(CWrapper.NSWindow::orderFront); + } + } + } else if (blocker == null) { // If it ain't blocked, or is being hidden, go regular way - if (visible) { - contentView.execute(viewPtr -> { - execute(ptr -> CWrapper.NSWindow.makeFirstResponder(ptr, - viewPtr)); - }); + contentView.execute(viewPtr -> { + execute(ptr -> CWrapper.NSWindow.makeFirstResponder(ptr, + viewPtr)); + }); - boolean isPopup = (target.getType() == Window.Type.POPUP); - execute(ptr -> { - if (isPopup) { - // Popups in applets don't activate applet's process - CWrapper.NSWindow.orderFrontRegardless(ptr); - } else { - CWrapper.NSWindow.orderFront(ptr); - } + boolean isPopup = (target.getType() == Window.Type.POPUP); + execute(ptr -> { + if (isPopup) { + // Popups in applets don't activate applet's process + CWrapper.NSWindow.orderFrontRegardless(ptr); + } else { + CWrapper.NSWindow.orderFront(ptr); + } - boolean isKeyWindow = CWrapper.NSWindow.isKeyWindow(ptr); - if (!isKeyWindow) { - CWrapper.NSWindow.makeKeyWindow(ptr); - } + boolean isKeyWindow = CWrapper.NSWindow.isKeyWindow(ptr); + if (!isKeyWindow) { + logger.fine("setVisible: makeKeyWindow"); + CWrapper.NSWindow.makeKeyWindow(ptr); + } - if (owner != null - && owner.getPeer() instanceof LWLightweightFramePeer) { - LWLightweightFramePeer peer = - (LWLightweightFramePeer) owner.getPeer(); - - long ownerWindowPtr = peer.getOverriddenWindowHandle(); - if (ownerWindowPtr != 0) { - //Place window above JavaFX stage - CWrapper.NSWindow.addChildWindow( - ownerWindowPtr, ptr, - CWrapper.NSWindow.NSWindowAbove); - } + if (owner != null + && owner.getPeer() instanceof LWLightweightFramePeer) { + LWLightweightFramePeer peer = + (LWLightweightFramePeer) owner.getPeer(); + + long ownerWindowPtr = peer.getOverriddenWindowHandle(); + if (ownerWindowPtr != 0) { + //Place window above JavaFX stage + CWrapper.NSWindow.addChildWindow( + ownerWindowPtr, ptr, + CWrapper.NSWindow.NSWindowAbove); } - }); - } else { - execute(ptr->{ - // immediately hide the window - CWrapper.NSWindow.orderOut(ptr); - // process the close - CWrapper.NSWindow.close(ptr); - }); - } + } + }); } else { // otherwise, put it in a proper z-order CPlatformWindow bw @@ -763,7 +840,6 @@ public void setVisible(boolean visible) { }); }); } - this.visible = visible; nativeSynthesizeMouseEnteredExitedEvents(); @@ -773,7 +849,7 @@ public void setVisible(boolean visible) { // Manage parent-child relationship when showing final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); - if (visible) { + if (visible && !delayShowing()) { // Order myself above my parent if (owner != null && owner.isVisible()) { owner.execute(ownerPtr -> { @@ -805,7 +881,10 @@ public void setVisible(boolean visible) { // Deal with the blocker of the window being shown if (blocker != null && visible) { // Make sure the blocker is above its siblings - ((CPlatformWindow)blocker.getPlatformWindow()).orderAboveSiblings(); + CPlatformWindow blockerWindow = (CPlatformWindow) blocker.getPlatformWindow(); + if (!blockerWindow.delayShowing()) { + blockerWindow.orderAboveSiblings(); + } } } @@ -840,6 +919,7 @@ public void toBack() { @Override // PlatformWindow public void toFront() { + if (delayShowing()) return; LWCToolkit lwcToolkit = (LWCToolkit) Toolkit.getDefaultToolkit(); Window w = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); @@ -849,7 +929,7 @@ public void toFront() { lwcToolkit.activateApplicationIgnoringOtherApps(); } updateFocusabilityForAutoRequestFocus(false); - execute(CPlatformWindow::nativePushNSWindowToFront); + execute(ptr -> AWTThreading.executeWaitToolkit(wait -> nativePushNSWindowToFront(ptr, wait))); updateFocusabilityForAutoRequestFocus(true); } @@ -893,6 +973,7 @@ public boolean rejectFocusRequest(FocusEvent.Cause cause) { @Override public boolean requestWindowFocus() { + if (delayShowing()) return false; execute(ptr -> { if (CWrapper.NSWindow.canBecomeMainWindow(ptr)) { CWrapper.NSWindow.makeMainWindow(ptr); @@ -911,10 +992,28 @@ public boolean isActive() { return ref.get(); } + private boolean isTabbedWindow() { + AtomicBoolean ref = new AtomicBoolean(); + execute(ptr -> { + ref.set(CWrapper.NSWindow.isTabbedWindow(ptr)); + }); + return ref.get(); + } + + // We want a window to be always shown at the same space as its owning window. + // But macOS doesn't have an API to control the target space for a window - + // it's always shown at the active space. So if the target space isn't active now, + // the only way to achieve our goal seems to be delaying the appearance of the + // window till the target space becomes active. + private boolean delayShowing() { + AtomicBoolean ref = new AtomicBoolean(false); + execute(ptr -> ref.set(nativeDelayShowing(ptr))); + return ref.get(); + } + @Override public void updateFocusableWindowState() { - final boolean isFocusable = isNativelyFocusableWindow(); - setStyleBits(SHOULD_BECOME_KEY | SHOULD_BECOME_MAIN, isFocusable); // set both bits at once + setStyleBits(SHOULD_BECOME_KEY | SHOULD_BECOME_MAIN, getFocusableStyleBits()); // set both bits at once } @Override @@ -1055,8 +1154,12 @@ public void setModalBlocked(boolean blocked) { execute(ptr -> nativeSynthesizeMouseEnteredExitedEvents(ptr, CocoaConstants.NSEventTypeMouseExited)); } - execute(ptr -> nativeSetEnabled(ptr, !blocked)); - checkBlockingAndOrder(); + execute(ptr -> { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("nativeSetEnabled: window=" + Long.toHexString(ptr) + ", enabled=" + !blocked); + } + nativeSetEnabled(ptr, !blocked); + }); } public final void invalidateShadow() { @@ -1136,16 +1239,14 @@ static long getNativeViewPtr(PlatformWindow platformWindow) { * Callbacks from the AWTWindow and AWTView objc classes. *************************************************************/ private void deliverWindowFocusEvent(boolean gained, CPlatformWindow opposite){ - // Fix for 7150349: ignore "gained" notifications when the app is inactive. - if (gained && !((LWCToolkit)Toolkit.getDefaultToolkit()).isApplicationActive()) { - focusLogger.fine("the app is inactive, so the notification is ignored"); - return; - } - LWWindowPeer oppositePeer = (opposite == null)? null : opposite.getPeer(); responder.handleWindowFocusEvent(gained, oppositePeer); } + public void doDeliverMoveResizeEvent() { + execute(ptr -> nativeCallDeliverMoveResizeEvent(ptr)); + } + protected void deliverMoveResizeEvent(int x, int y, int width, int height, boolean byUser) { AtomicBoolean ref = new AtomicBoolean(); @@ -1205,21 +1306,13 @@ private void deliverNCMouseDown() { } } - /* - * Our focus model is synthetic and only non-simple window - * may become natively focusable window. - */ - private boolean isNativelyFocusableWindow() { - if (peer == null) { - return false; - } - - return !peer.isSimpleWindow() && target.getFocusableWindowState(); - } - - private boolean isBlocked() { - LWWindowPeer blocker = (peer != null) ? peer.getBlocker() : null; - return (blocker != null); + // returns a combination of SHOULD_BECOME_KEY/SHOULD_BECOME_MAIN relevant for the current window + private int getFocusableStyleBits() { + return (peer == null || target == null || !target.isFocusableWindow()) + ? 0 + : peer.isSimpleWindow() + ? SHOULD_BECOME_KEY + : SHOULD_BECOME_KEY | SHOULD_BECOME_MAIN; } /* @@ -1228,30 +1321,39 @@ private boolean isBlocked() { * circumstances. */ private void updateFocusabilityForAutoRequestFocus(boolean isFocusable) { - if (target.isAutoRequestFocus() || !isNativelyFocusableWindow()) return; - setStyleBits(SHOULD_BECOME_KEY | SHOULD_BECOME_MAIN, isFocusable); // set both bits at once + if (target.isAutoRequestFocus()) return; + int focusableStyleBits = getFocusableStyleBits(); + if (focusableStyleBits == 0) return; + setStyleBits(SHOULD_BECOME_KEY | SHOULD_BECOME_MAIN, + isFocusable ? focusableStyleBits : 0); // set both bits at once } - private boolean checkBlockingAndOrder() { + private void checkBlockingAndOrder() { LWWindowPeer blocker = (peer == null)? null : peer.getBlocker(); if (blocker == null) { - return false; + // If it's not blocked, make sure it's above its siblings + orderAboveSiblings(); + return; } if (blocker instanceof CPrinterDialogPeer) { - return true; + return; } CPlatformWindow pWindow = (CPlatformWindow)blocker.getPlatformWindow(); - pWindow.orderAboveSiblings(); + if (!pWindow.delayShowing()) { + pWindow.orderAboveSiblings(); - pWindow.execute(ptr -> { - CWrapper.NSWindow.orderFrontRegardless(ptr); - CWrapper.NSWindow.makeKeyAndOrderFront(ptr); - CWrapper.NSWindow.makeMainWindow(ptr); - }); - return true; + pWindow.execute(ptr -> { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("Focus blocker " + Long.toHexString(ptr)); + } + CWrapper.NSWindow.orderFrontRegardless(ptr); + CWrapper.NSWindow.makeKeyAndOrderFront(ptr); + CWrapper.NSWindow.makeMainWindow(ptr); + }); + } } private boolean isIconified() { @@ -1289,7 +1391,9 @@ private void orderAboveSiblings() { // which is going to become 'main window', are placed above their siblings. CPlatformWindow rootOwner = getRootOwner(); if (rootOwner.isVisible() && !rootOwner.isIconified() && !rootOwner.isActive()) { - rootOwner.execute(CWrapper.NSWindow::orderFront); + if (rootOwner != this || !isTabbedWindow()) { + rootOwner.execute(CWrapper.NSWindow::orderFrontIfOnActiveSpace); + } } // Do not order child windows of iconified owner. @@ -1313,7 +1417,7 @@ private void orderAboveSiblingsImpl(Window[] windows) { if (p instanceof LWWindowPeer) { CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow(); iconified = isIconified(); - if (pw != null && pw.isVisible() && !iconified) { + if (pw != null && pw.isVisible() && !iconified && !pw.delayShowing()) { // If the window is one of ancestors of 'main window' or is going to become main by itself, // the window should be ordered above its siblings; otherwise the window is just ordered // above its nearest parent. @@ -1325,7 +1429,7 @@ private void orderAboveSiblingsImpl(Window[] windows) { } pwUnder.execute(underPtr -> { pw.execute(ptr -> { - CWrapper.NSWindow.orderWindow(ptr, CWrapper.NSWindow.NSWindowAbove, underPtr); + CWrapper.NSWindow.orderWindowIfOnActiveSpace(ptr, CWrapper.NSWindow.NSWindowAbove, underPtr); }); }); pwUnder = pw; @@ -1349,10 +1453,10 @@ private void orderAboveSiblingsImpl(Window[] windows) { } protected void applyWindowLevel(Window target) { - if (target.isAlwaysOnTop() && target.getType() != Window.Type.POPUP) { - execute(ptr->CWrapper.NSWindow.setLevel(ptr, CWrapper.NSWindow.NSFloatingWindowLevel)); - } else if (target.getType() == Window.Type.POPUP) { - execute(ptr->CWrapper.NSWindow.setLevel(ptr, CWrapper.NSWindow.NSPopUpMenuWindowLevel)); + boolean popup = target.getType() == Window.Type.POPUP; + boolean alwaysOnTop = target.isAlwaysOnTop(); + if (popup || alwaysOnTop || owner != null) { + execute(ptr -> nativeRaiseLevel(ptr, popup, !popup && !alwaysOnTop)); } } @@ -1370,6 +1474,18 @@ private boolean isSimpleWindowOwnedByEmbeddedFrame() { } return false; } + + private long createNSWindow(long nsViewPtr, + long ownerPtr, + long styleBits, + double x, + double y, + double w, + double h) { + return AWTThreading.executeWaitToolkit(() -> + nativeCreateNSWindow(nsViewPtr, ownerPtr, styleBits, x, y, w, h)); + } + // ---------------------------------------------------------------------- // NATIVE CALLBACKS // ---------------------------------------------------------------------- @@ -1380,9 +1496,7 @@ private void windowWillMiniaturize() { private void windowDidBecomeMain() { lastBecomeMainTime = System.currentTimeMillis(); - if (checkBlockingAndOrder()) return; - // If it's not blocked, make sure it's above its siblings - orderAboveSiblings(); + checkBlockingAndOrder(); } private void windowWillEnterFullScreen() { @@ -1402,4 +1516,37 @@ private void windowDidExitFullScreen() { isInFullScreen = false; isFullScreenAnimationOn = false; } + + // JBR API internals + private static void updateCustomTitleBar(ComponentPeer peer) { + if (peer instanceof LWWindowPeer lwwp && + lwwp.getPlatformWindow() instanceof CPlatformWindow cpw) { + cpw.execute(CPlatformWindow::nativeUpdateCustomTitleBar); + } + } + + // JBR API internals + private static void setRoundedCorners(Window window, Object params) { + Object peer = AWTAccessor.getComponentAccessor().getPeer(window); + if (peer instanceof CPlatformWindow) { + ((CPlatformWindow)peer).setRoundedCorners(params); + } else if (window instanceof RootPaneContainer) { + JRootPane rootpane = ((RootPaneContainer)window).getRootPane(); + if (rootpane != null) { + rootpane.putClientProperty(WINDOW_CORNER_RADIUS, params); + } + } + } + + private void setRoundedCorners(Object params) { + if (params instanceof Float) { + execute(ptr -> nativeSetRoundedCorners(ptr, (float) params, 0, 0)); + } else if (params instanceof Object[]) { + Object[] values = (Object[]) params; + if (values.length == 3 && values[0] instanceof Float && values[1] instanceof Integer && values[2] instanceof Color) { + Color color = (Color) values[2]; + execute(ptr -> nativeSetRoundedCorners(ptr, (float) values[0], (int) values[1], color.getRGB())); + } + } + } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java index 407af09810c5..e90416ec242d 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java @@ -30,6 +30,7 @@ import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.awt.print.*; +import java.io.File; import java.net.URI; import java.security.AccessController; import java.security.PrivilegedAction; @@ -185,6 +186,15 @@ protected void setAttributes(PrintRequestAttributeSet attributes) throws Printer if (attributes == null) { return; } + if (getPrintService() == null && isPrintToFile) { + Destination destination = (Destination)attributes.get(Destination.class); + if (destination != null) { + try { + destinationAttr = "" + new File(destination.getURI().getSchemeSpecificPart()); + } catch (Exception e) { + } + } + } Attribute attr = attributes.get(Media.class); if (attr instanceof CustomMediaTray) { CustomMediaTray customTray = (CustomMediaTray) attr; diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java index 5dba06cb612b..ab59a6a3d423 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CRobot.java @@ -30,10 +30,12 @@ import java.awt.peer.RobotPeer; import sun.awt.CGraphicsDevice; +import sun.security.action.GetIntegerAction; final class CRobot implements RobotPeer { private static final int MOUSE_LOCATION_UNKNOWN = -1; + private static final int DEFAULT_SAFE_DELAY_MILLIS = 50; private final CGraphicsDevice fDevice; private int mouseLastX = MOUSE_LOCATION_UNKNOWN; @@ -50,7 +52,12 @@ final class CRobot implements RobotPeer { */ CRobot(CGraphicsDevice d) { fDevice = d; - initRobot(); + int safeDelayMillis = GetIntegerAction.privilegedGetProperty( + "sun.awt.osx.RobotSafeDelayMillis", DEFAULT_SAFE_DELAY_MILLIS); + if (safeDelayMillis < 0) { + safeDelayMillis = DEFAULT_SAFE_DELAY_MILLIS; + } + initRobot(safeDelayMillis); } /** @@ -187,7 +194,7 @@ public int getRGBPixel(int x, int y) { return c; } - private native void initRobot(); + private native void initRobot(int safeDelayMillis); private native void mouseEvent(int lastX, int lastY, int buttonsState, boolean isButtonsDownState, boolean isMouseMove); diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTextPipe.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTextPipe.java index 6aa36453ac0f..e54e5be9f10c 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTextPipe.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTextPipe.java @@ -81,32 +81,26 @@ public void drawString(final SunGraphics2D sg2d, final String s, final double x, } } - private boolean hasSlotData(GlyphVector gv) { + private boolean hasSlotData(GlyphVector gv, Font2D font2D) { final int length = gv.getNumGlyphs(); - for (int i = 0; i < length; i++) { - if ((gv.getGlyphCode(i) & CompositeGlyphMapper.SLOTMASK) != 0) { - return true; + if (length > 0) { + int slotMask = font2D + .getSlotInfoForGlyph(gv.getGlyphCode(0)) + .getSlotMask(); + for (int i = 0; i < length; i++) { + int glyphCode = gv.getGlyphCode(i); + if ((glyphCode & slotMask) != 0) { + return true; + } } } return false; } - private Font getSlotFont(Font font, int slot) { - Font2D f2d = FontUtilities.getFont2D(font); - if (f2d instanceof CFont) { - CompositeFont cf = ((CFont)f2d).getCompositeFont2D(); - PhysicalFont pf = cf.getSlotFont(slot); - Font f = new Font(pf.getFontName(null), - font.getStyle(), font.getSize()); - return f; - } - return null; - } - - private GlyphVector getGlyphVectorWithRange(final Font font, final GlyphVector gV, int start, int count) { + private GlyphVector getGlyphVectorWithRange(final Font font, final GlyphVector gV, int start, int count, int slotShift) { int[] glyphs = new int[count]; for (int i = 0; i < count; i++) { - glyphs[i] = gV.getGlyphCode(start+i) & CompositeGlyphMapper.GLYPHMASK; + glyphs[i] = gV.getGlyphCode(start+i) >>> slotShift; } // Positions should be null to recalculate by native methods, // if GV was segmented. @@ -119,11 +113,11 @@ private GlyphVector getGlyphVectorWithRange(final Font font, final GlyphVector g return sgv; } - private int getLengthOfSameSlot(final GlyphVector gV, final int targetSlot, final int start, final int length) { + private int getLengthOfSameSlot(final GlyphVector gV, final int targetSlot, final int slotMask, + final int start, final int length) { int count = 1; for (; start + count < length; count++) { - int slot = (gV.getGlyphCode(start + count) & - CompositeGlyphMapper.SLOTMASK) >> 24; + int slot = gV.getGlyphCode(start + count) & slotMask; if (targetSlot != slot) { break; } @@ -143,25 +137,33 @@ private void drawGlyphVectorImpl(final SunGraphics2D sg2d, final GlyphVector gV, public void drawGlyphVector(final SunGraphics2D sg2d, final GlyphVector gV, final float x, final float y) { final Font prevFont = sg2d.getFont(); - sg2d.setFont(gV.getFont()); + Font gvFont = gV.getFont(); + Font2D f2d = FontUtilities.getFont2D(gvFont); + if (f2d instanceof FontSubstitution fs) { + f2d = fs.getCompositeFont2D(); + } - if (hasSlotData(gV)) { + if (hasSlotData(gV, f2d)) { final int length = gV.getNumGlyphs(); float[] positions = gV.getGlyphPositions(0, length, null); int start = 0; while (start < length) { - int slot = (gV.getGlyphCode(start) & - CompositeGlyphMapper.SLOTMASK) >> 24; - sg2d.setFont(getSlotFont(gV.getFont(), slot)); - int count = getLengthOfSameSlot(gV, slot, start, length); + int glyphCode = gV.getGlyphCode(start); + Font2D.SlotInfo slotInfo = f2d.getSlotInfoForGlyph(glyphCode); + int slotMask = slotInfo.getSlotMask(); + int slot = glyphCode & slotMask; + sg2d.setFont(new Font(slotInfo.font.getFontName(null), + gvFont.getStyle(), gvFont.getSize())); + int count = getLengthOfSameSlot(gV, slot, slotMask, start, length); GlyphVector rangeGV = getGlyphVectorWithRange(sg2d.getFont(), - gV, start, count); + gV, start, count, slotInfo.slotShift); drawGlyphVectorImpl(sg2d, rangeGV, x + positions[start * 2], y + positions[start * 2 + 1]); start += count; } } else { + sg2d.setFont(gvFont); drawGlyphVectorImpl(sg2d, gV, x, y); } sg2d.setFont(prevFont); diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CThreading.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CThreading.java new file mode 100644 index 000000000000..d7ab98a8fc8c --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CThreading.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.lwawt.macosx; + +import sun.lwawt.macosx.concurrent.Dispatch; + +import java.awt.EventQueue; +import java.awt.AWTError; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; + +@SuppressWarnings("removal") +public class CThreading { + static String APPKIT_THREAD_NAME = "AWT-AppKit"; + + static boolean isEventQueue() { + return EventQueue.isDispatchThread(); + } + + private static native boolean isMainThread(); + + public static boolean isAppKit() { + if (APPKIT_THREAD_NAME.equals(Thread.currentThread().getName())) return true; + + if (isMainThread()) { + Thread.currentThread().setName(APPKIT_THREAD_NAME); + return true; + } + return false; + } + + + static boolean assertEventQueue() { + final boolean isEventQueue = isEventQueue(); + assert isEventQueue : "Threading violation: not EventQueue thread"; + return isEventQueue; + } + + static boolean assertNotEventQueue() { + final boolean isNotEventQueue = isEventQueue(); + assert isNotEventQueue : "Threading violation: EventQueue thread"; + return isNotEventQueue; + } + + static boolean assertAppKit() { + final boolean isAppKitThread = isAppKit(); + assert isAppKitThread : "Threading violation: not AppKit thread"; + return isAppKitThread; + } + + static boolean assertNotAppKit() { + final boolean isNotAppKitThread = !isAppKit(); + assert isNotAppKitThread : "Threading violation: AppKit thread"; + return isNotAppKitThread; + } + + public static V executeOnAppKit(final Callable command) throws Throwable { + if (!isAppKit()) { + Dispatch dispatch = Dispatch.getInstance(); + + if (dispatch == null) { + throw new AWTError("Could not get Dispatch object"); + } + + Callable commandWithTNameFix = () -> { + if (!APPKIT_THREAD_NAME.equals(Thread.currentThread().getName())) { + Thread.currentThread().setName(APPKIT_THREAD_NAME); + } + + return command.call(); + }; + + FutureTask future = new FutureTask<>(commandWithTNameFix); + + dispatch.getNonBlockingMainQueueExecutor().execute(future); + + try { + return future.get(); + } catch (InterruptedException e) { + throw new AWTError(e.getMessage()); + } catch (ExecutionException e) { + throw e.getCause(); + } + } else + return command.call(); + } + + public static V privilegedExecuteOnAppKit(Callable command) + throws Exception { + try { + return java.security.AccessController.doPrivileged( + (PrivilegedExceptionAction) () -> { + //noinspection TryWithIdenticalCatches + try { + return executeOnAppKit(command); + } catch (RuntimeException e) { + throw e; + } catch (Error e) { + throw e; + } catch (Throwable throwable) { + throw new Exception(throwable); + } + } + ); + } catch (PrivilegedActionException e) { + throw e.getException(); + } + } + + public static void executeOnAppKit(Runnable command) { + if (!isAppKit()) { + Dispatch dispatch = Dispatch.getInstance(); + + if (dispatch != null) { + dispatch.getNonBlockingMainQueueExecutor().execute(command); + } + else { + throw new AWTError("Could not get Dispatch object"); + } + } else + command.run(); + } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java index bcb18c76ae10..52e85e338415 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java @@ -245,7 +245,7 @@ public void notifyMouseWheelEvent(long when, int x, int y, int absX, @Override public void notifyKeyEvent(int id, long when, int modifiers, int keyCode, - char keyChar, int keyLocation, int jextendedkeyCode) { + char keyChar, int keyLocation) { } protected int getInitialStyleBits() { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java index 516b8de15506..1baecf34555b 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java @@ -25,6 +25,8 @@ package sun.lwawt.macosx; +import sun.awt.AWTThreading; + final class CWrapper { private CWrapper() { } @@ -45,22 +47,34 @@ static final class NSWindow { // 'level' is one of the keys defined above static native void setLevel(long window, int level); - static native void makeKeyAndOrderFront(long window); - static native void makeKeyWindow(long window); + static void makeKeyAndOrderFront(long window) { + AWTThreading.executeWaitToolkit(wait -> nativeMakeKeyAndOrderFront(window, wait)); + } + static void makeKeyWindow(long window) { + AWTThreading.executeWaitToolkit(wait -> nativeMakeKeyWindow(window, wait)); + } static native void makeMainWindow(long window); static native boolean canBecomeMainWindow(long window); static native boolean isKeyWindow(long window); static native void orderFront(long window); + static native void orderFrontIfOnActiveSpace(long window); static native void orderFrontRegardless(long window); static native void orderWindow(long window, int ordered, long relativeTo); + static native void orderWindowIfOnActiveSpace(long window, int ordered, long relativeTo); /** * Removes the window from the screen. * * @param window the pointer of the NSWindow */ - static native void orderOut(long window); + static void orderOut(long window) { + AWTThreading.executeWaitToolkit(wait -> nativeOrderOut(window, wait)); + } + + private static native void nativeOrderOut(long window, boolean wait); + private static native void nativeMakeKeyWindow(long window, boolean wait); + private static native void nativeMakeKeyAndOrderFront(long window, boolean wait); /** * Removes the window from the screen and releases it. According to @@ -94,6 +108,8 @@ static final class NSWindow { static native void zoom(long window); static native void makeFirstResponder(long window, long responder); + + static native boolean isTabbedWindow(long window); } static final class NSView { diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java index d430825bb856..6b33110aa6dc 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java @@ -85,27 +85,19 @@ import java.awt.peer.TrayIconPeer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.UndeclaredThrowableException; -import java.net.MalformedURLException; import java.net.URL; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.MissingResourceException; -import java.util.Objects; -import java.util.ResourceBundle; +import java.security.*; +import java.util.*; import java.util.concurrent.Callable; - +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.net.MalformedURLException; import javax.swing.UIManager; import com.apple.laf.AquaMenuBarUI; -import sun.awt.AWTAccessor; -import sun.awt.AppContext; -import sun.awt.CGraphicsDevice; -import sun.awt.LightweightFrame; -import sun.awt.PlatformGraphicsInfo; -import sun.awt.SunToolkit; +import sun.awt.*; import sun.awt.datatransfer.DataTransferer; import sun.awt.dnd.SunDragSourceContextPeer; import sun.awt.util.ThreadGroupUtils; @@ -120,6 +112,8 @@ import sun.lwawt.PlatformDropTarget; import sun.lwawt.PlatformWindow; import sun.lwawt.SecurityWarningWindow; +import sun.security.action.GetBooleanAction; +import sun.util.logging.PlatformLogger; @SuppressWarnings("serial") // JDK implementation class final class NamedCursor extends Cursor { @@ -143,6 +137,68 @@ public final class LWCToolkit extends LWToolkit { private static native void initAppkit(ThreadGroup appKitThreadGroup, boolean headless); private static CInputMethodDescriptor sInputMethodDescriptor; + private static native boolean switchKeyboardLayoutNative(String layoutName); + + private static native String getKeyboardLayoutNativeId(); + + private static native String[] getKeyboardLayoutListNative(boolean includeAll); + + private static native boolean setKeyboardLayoutEnabledNative(String layoutName, boolean enabled); + + public static void switchKeyboardLayout (String layoutName) { + if (layoutName == null || layoutName.isEmpty()) { + throw new RuntimeException("A valid layout ID is expected. Found: " + layoutName); + } + if (!switchKeyboardLayoutNative(layoutName)) { + throw new RuntimeException("Couldn't switch layout to " + layoutName); + } + } + + public static String getKeyboardLayoutId () { + return getKeyboardLayoutNativeId(); + } + + public static List getKeyboardLayoutList(boolean includeAll) { + String[] result = getKeyboardLayoutListNative(includeAll); + if (result == null) { + return new ArrayList<>(); + } + return Arrays.asList(result); + } + + public static void enableKeyboardLayout(String layoutName) { + if (layoutName == null || layoutName.isEmpty()) { + throw new RuntimeException("A valid layout ID is expected. Found: " + layoutName); + } + if (!setKeyboardLayoutEnabledNative(layoutName, true)) { + throw new RuntimeException("Couldn't enable layout " + layoutName); + } + } + + public static void disableKeyboardLayout(String layoutName) { + if (layoutName == null || layoutName.isEmpty()) { + throw new RuntimeException("A valid layout ID is expected. Found: " + layoutName); + } + if (!setKeyboardLayoutEnabledNative(layoutName, false)) { + throw new RuntimeException("Couldn't disable layout " + layoutName); + } + } + + public static boolean isKeyboardLayoutEnabled(String layoutName) { + return getKeyboardLayoutList(false).contains(layoutName); + } + + public static boolean isKeyboardLayoutInstalled(String layoutName) { + return getKeyboardLayoutList(true).contains(layoutName); + } + + // Listens to EDT state in invokeAndWait() and disposes the invocation event + // when EDT becomes free but the invocation event is not yet dispatched (considered lost). + // This prevents a deadlock and makes the invocation return some default result. + @SuppressWarnings("removal") + private static final boolean DISPOSE_INVOCATION_ON_EDT_FREE = + AccessController.doPrivileged(new GetBooleanAction("sun.lwawt.macosx.LWCToolkit.invokeAndWait.disposeOnEDTFree")); + static { System.err.flush(); @@ -192,6 +248,8 @@ public Boolean run() { } }); + private static final PlatformLogger log = PlatformLogger.getLogger(LWCToolkit.class.getName()); + @SuppressWarnings("removal") public LWCToolkit() { final String extraButtons = "sun.awt.enableExtraMouseButtons"; @@ -501,15 +559,16 @@ public int getScreenResolution() throws HeadlessException { public Insets getScreenInsets(final GraphicsConfiguration gc) { GraphicsDevice gd = gc.getDevice(); if (!(gd instanceof CGraphicsDevice)) { - return super.getScreenInsets(gc); + return AWTThreading.executeWaitToolkit(() -> super.getScreenInsets(gc)); } - return ((CGraphicsDevice)gd).getScreenInsets(); + CGraphicsDevice cgd = (CGraphicsDevice) gd; + return cgd.getScreenInsets(); } @Override public void sync() { // flush the rendering pipeline - if (CGraphicsDevice.usingMetalPipeline()) { + if (CGraphicsEnvironment.usingMetalPipeline()) { MTLRenderQueue.sync(); } else { OGLRenderQueue.sync(); @@ -529,6 +588,8 @@ public RobotPeer createRobot(GraphicsDevice screen) throws AWTException { private native boolean isCapsLockOn(); + private static native boolean setCapsLockState(boolean on); + /* * NOTE: Among the keys this method is supposed to check, * only Caps Lock works as a true locking key with OS X. @@ -555,6 +616,25 @@ public boolean getLockingKeyState(int keyCode) throws UnsupportedOperationExcept } } + @Override + public void setLockingKeyState(int keyCode, boolean on) throws UnsupportedOperationException { + switch (keyCode) { + case KeyEvent.VK_NUM_LOCK: + case KeyEvent.VK_SCROLL_LOCK: + case KeyEvent.VK_KANA_LOCK: + throw new UnsupportedOperationException("Toolkit.setLockingKeyState"); + + case KeyEvent.VK_CAPS_LOCK: + if (!setCapsLockState(on)) { + throw new RuntimeException("failed to set caps lock state"); + } + break; + + default: + throw new IllegalArgumentException("invalid key for Toolkit.setLockingKeyState"); + } + } + //Is it allowed to generate events assigned to extra mouse buttons. //Set to true by default. private static boolean areExtraMouseButtonsEnabled = true; @@ -681,8 +761,12 @@ public void run() { synchronized(ret) { public static T invokeAndWait(final Callable callable, Component component) throws Exception { + return invokeAndWait(callable, component, -1); + } + + public static T invokeAndWait(final Callable callable, Component component, int timeoutSeconds) throws Exception { final CallableWrapper wrapper = new CallableWrapper<>(callable); - invokeAndWait(wrapper, component); + invokeAndWait(wrapper, component, timeoutSeconds); return wrapper.getResult(); } @@ -708,40 +792,97 @@ public T getResult() throws Exception { if (e != null) throw e; return object; } + + @Override + public String toString() { + return "CallableWrapper{" + callable + "}"; + } } /** - * Kicks an event over to the appropriate event queue and waits for it to + * Kicks an event over to the appropriate eventqueue and waits for it to * finish To avoid deadlocking, we manually run the NSRunLoop while waiting * Any selector invoked using ThreadUtilities performOnMainThread will be * processed in doAWTRunLoop The InvocationEvent will call * LWCToolkit.stopAWTRunLoop() when finished, which will stop our manual - * run loop. Does not dispatch native events while in the loop + * runloop Does not dispatch native events while in the loop */ public static void invokeAndWait(Runnable runnable, Component component) - throws InvocationTargetException { - Objects.requireNonNull(component, "Null component provided to invokeAndWait"); + throws InvocationTargetException + { + invokeAndWait(runnable, component, -1); + } + + public static void invokeAndWait(Runnable runnable, Component component, int timeoutSeconds) + throws InvocationTargetException + { + invokeAndWait(runnable, component, false, -1); + } + + public static void invokeAndWait(Runnable runnable, Component component, boolean processEvents, int timeoutSeconds) + throws InvocationTargetException + { + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("invokeAndWait started: " + runnable); + } + + if (isBlockingEventDispatchThread()) { + String msg = "invokeAndWait is discarded as the EventDispatch thread is currently blocked"; + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine(msg, new Throwable()); + log.fine(AWTThreading.getInstance(component).printEventDispatchThreadStackTrace().toString()); + } else if (log.isLoggable(PlatformLogger.Level.INFO)) { + StackTraceElement[] stack = new Throwable().getStackTrace(); + log.info(msg + ". Originated at " + stack[stack.length - 1]); + Thread dispatchThread = AWTThreading.getInstance(component).getEventDispatchThread(); + log.info(dispatchThread.getName() + " at: " + dispatchThread.getStackTrace()[0].toString()); + } + return; + } + + AWTThreading.TrackedInvocationEvent invocationEvent = + AWTThreading.createAndTrackInvocationEvent(component, runnable, true); long mediator = createAWTRunLoopMediator(); - InvocationEvent invocationEvent = - new InvocationEvent(component, - runnable, - () -> { - if (mediator != 0) { - stopAWTRunLoop(mediator); - } - }, - true); + invocationEvent.onDone(() -> stopAWTRunLoop(mediator)); - AppContext appContext = SunToolkit.targetToAppContext(component); - SunToolkit.postEvent(appContext, invocationEvent); - // 3746956 - flush events from PostEventQueue to prevent them from getting stuck and causing a deadlock - SunToolkit.flushPendingEvents(appContext); - doAWTRunLoop(mediator, false); + if (component != null) { + AppContext appContext = SunToolkit.targetToAppContext(component); + SunToolkit.postEvent(appContext, invocationEvent); + + // 3746956 - flush events from PostEventQueue to prevent them from getting stuck and causing a deadlock + SunToolkit.flushPendingEvents(appContext); + } + else { + // This should be the equivalent to EventQueue.invokeAndWait + ((LWCToolkit)Toolkit.getDefaultToolkit()).getSystemEventQueueForInvokeAndWait().postEvent(invocationEvent); + } + + if (DISPOSE_INVOCATION_ON_EDT_FREE) { + CompletableFuture eventDispatchThreadFreeFuture = + AWTThreading.getInstance(component).onEventDispatchThreadFree(() -> { + if (!invocationEvent.isCompleted(true)) { + // EventQueue is now empty but the posted InvocationEvent is still not dispatched, + // consider it lost then. + invocationEvent.dispose("InvocationEvent was lost"); + } + }); + invocationEvent.onDone(() -> eventDispatchThreadFreeFuture.cancel(false)); + } + + if (!doAWTRunLoop(mediator, processEvents, timeoutSeconds)) { + invocationEvent.dispose("InvocationEvent has timed out"); + } + + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("invokeAndWait finished: " + runnable); + } checkException(invocationEvent); } + private static native boolean isBlockingEventDispatchThread(); + public static void invokeLater(Runnable event, Component component) throws InvocationTargetException { Objects.requireNonNull(component, "Null component provided to invokeLater"); @@ -756,6 +897,10 @@ public static void invokeLater(Runnable event, Component component) checkException(invocationEvent); } + EventQueue getSystemEventQueueForInvokeAndWait() { + return getSystemEventQueueImpl(); + } + /** * Checks if exception occurred while {@code InvocationEvent} was processed and rethrows it as * an {@code InvocationTargetException} @@ -780,6 +925,11 @@ private static void checkException(InvocationEvent event) throws InvocationTarge */ static native void performOnMainThreadAfterDelay(Runnable r, long delay); + /** + * Schedules a {@code Runnable} execution on the Appkit thread and waits for completion. + */ + public static native void performOnMainThreadAndWait(Runnable r); + // DnD support @Override @@ -834,23 +984,6 @@ public Locale getDefaultKeyboardLocale() { return locale; } - public static boolean isLocaleUSInternationalPC(Locale locale) { - return (locale != null ? - locale.toString().equals("_US_UserDefined_15000") : false); - } - - public static boolean isCharModifierKeyInUSInternationalPC(char ch) { - // 5 characters: APOSTROPHE, QUOTATION MARK, ACCENT GRAVE, SMALL TILDE, - // CIRCUMFLEX ACCENT - final char[] modifierKeys = {'\'', '"', '`', '\u02DC', '\u02C6'}; - for (char modKey : modifierKeys) { - if (modKey == ch) { - return true; - } - } - return false; - } - @Override public InputMethodDescriptor getInputMethodAdapterDescriptor() { if (sInputMethodDescriptor == null) @@ -935,9 +1068,16 @@ public boolean canPopupOverlapTaskBar() { * if false - all events come after exit form the nested loop */ static void doAWTRunLoop(long mediator, boolean processEvents) { - doAWTRunLoopImpl(mediator, processEvents, inAWT); + doAWTRunLoop(mediator, processEvents, -1); + } + + /** + * Starts run-loop with the provided timeout. Use (-1) for the infinite value. + */ + static boolean doAWTRunLoop(long mediator, boolean processEvents, int timeoutSeconds) { + return doAWTRunLoopImpl(mediator, processEvents, inAWT, timeoutSeconds); } - private static native void doAWTRunLoopImpl(long mediator, boolean processEvents, boolean inAWT); + private static native boolean doAWTRunLoopImpl(long mediator, boolean processEvents, boolean inAWT, int timeoutSeconds); static native void stopAWTRunLoop(long mediator); private native boolean nativeSyncQueue(long timeout); diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/NSEvent.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/NSEvent.java index ca3d9ad5da7e..9bae8f0db308 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/NSEvent.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/NSEvent.java @@ -56,15 +56,15 @@ final class NSEvent { // Key event information private short keyCode; private String characters; - private String charactersIgnoringModifiers; + private String actualCharacters; // Called from native - NSEvent(int type, int modifierFlags, short keyCode, String characters, String charactersIgnoringModifiers) { + NSEvent(int type, int modifierFlags, short keyCode, String characters, String actualCharacters) { this.type = type; this.modifierFlags = modifierFlags; this.keyCode = keyCode; this.characters = characters; - this.charactersIgnoringModifiers = charactersIgnoringModifiers; + this.actualCharacters = actualCharacters; } // Called from native @@ -132,20 +132,20 @@ short getKeyCode() { return keyCode; } - String getCharactersIgnoringModifiers() { - return charactersIgnoringModifiers; - } - String getCharacters() { return characters; } + String getActualCharacters() { + return actualCharacters; + } + @Override public String toString() { return "NSEvent[" + getType() + " ," + getModifierFlags() + " ," + getClickCount() + " ," + getButtonNumber() + " ," + getX() + " ," + getY() + " ," + getAbsX() + " ," + getAbsY()+ " ," + getKeyCode() + " ," - + getCharacters() + " ," + getCharactersIgnoringModifiers() + "]"; + + getCharacters() + " ," + getActualCharacters() + "]"; } /* @@ -256,7 +256,7 @@ static int nsToJavaEventType(int nsEventType) { /* * Converts NSEvent key info to AWT key info. */ - static native boolean nsToJavaKeyInfo(int[] in, int[] out); + static native void nsToJavaKeyInfo(int[] in, int[] out); /* * Converts NSEvent key modifiers to AWT key info. diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/Dispatch.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/Dispatch.java new file mode 100644 index 000000000000..b0b3d2acfb34 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/Dispatch.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +import java.util.concurrent.*; + +/** + * Factory for {@link Executor}s and {@link ExecutorService}s backed by + * libdispatch. + * + * Access is controlled through the Dispatch.getInstance() method, because + * performed tasks occur on threads owned by libdispatch. These threads are + * not owned by any particular AppContext or have any specific context + * classloader installed. + * + * @since Java for Mac OS X 10.6 Update 2 + */ +@SuppressWarnings("removal") +public final class Dispatch { + /** + * The priorities of the three default asynchronous queues. + */ + public enum Priority { + LOW(-2), NORMAL(0), HIGH(2); // values from + + final int nativePriority; + Priority(final int nativePriority) { this.nativePriority = nativePriority; } + }; + + final static Dispatch instance = new Dispatch(); + + /** + * Factory method returns an instnace of Dispatch if supported by the + * underlying operating system, and if the caller's security manager + * permits "canInvokeInSystemThreadGroup". + * + * @return a factory instance of Dispatch, or null if not available + */ + public static Dispatch getInstance() { + checkSecurity(); + if (!LibDispatchNative.nativeIsDispatchSupported()) return null; + + return instance; + } + + private static void checkSecurity() { + final SecurityManager security = System.getSecurityManager(); + if (security != null) security.checkPermission(new RuntimePermission("canInvokeInSystemThreadGroup")); + } + + private Dispatch() { } + + /** + * Creates an {@link Executor} that performs tasks asynchronously. The {@link Executor} + * cannot be shutdown, and enqueued {@link Runnable}s cannot be canceled. Passing null + * returns the {@link Priority.NORMAL} {@link Executor}. + * + * @param priority - the priority of the returned {@link Executor} + * @return an asynchronous {@link Executor} + */ + public Executor getAsyncExecutor(Priority priority) { + if (priority == null) priority = Priority.NORMAL; + final long nativeQueue = LibDispatchNative.nativeCreateConcurrentQueue(priority.nativePriority); + if (nativeQueue == 0L) return null; + return new LibDispatchConcurrentQueue(nativeQueue); + } + + int queueIndex = 0; + /** + * Creates an {@link ExecutorService} that performs tasks synchronously in FIFO order. + * Useful to protect a resource against concurrent modification, in lieu of a lock. + * Passing null returns an {@link ExecutorService} with a uniquely labeled queue. + * + * @param label - a label to name the queue, shown in several debugging tools + * @return a synchronous {@link ExecutorService} + */ + public ExecutorService createSerialExecutor(String label) { + if (label == null) label = ""; + if (label.length() > 256) label = label.substring(0, 256); + String queueName = "com.apple.java.concurrent."; + if ("".equals(label)) { + synchronized (this) { + queueName += queueIndex++; + } + } else { + queueName += label; + } + + final long nativeQueue = LibDispatchNative.nativeCreateSerialQueue(queueName); + if (nativeQueue == 0) return null; + return new LibDispatchSerialQueue(nativeQueue); + } + + Executor nonBlockingMainQueue = null; + /** + * Returns an {@link Executor} that performs the provided Runnables on the main queue of the process. + * Runnables submitted to this {@link Executor} will not run until the AWT is started or another native toolkit is running a CFRunLoop or NSRunLoop on the main thread. + * + * Submitting a Runnable to this {@link Executor} does not wait for the Runnable to complete. + * @return an asynchronous {@link Executor} that is backed by the main queue + */ + public synchronized Executor getNonBlockingMainQueueExecutor() { + if (nonBlockingMainQueue != null) return nonBlockingMainQueue; + return nonBlockingMainQueue = new LibDispatchMainQueue.ASync(); + } + + Executor blockingMainQueue = null; + /** + * Returns an {@link Executor} that performs the provided Runnables on the main queue of the process. + * Runnables submitted to this {@link Executor} will not run until the AWT is started or another native toolkit is running a CFRunLoop or NSRunLoop on the main thread. + * + * Submitting a Runnable to this {@link Executor} will block until the Runnable has completed. + * @return an {@link Executor} that is backed by the main queue + */ + public synchronized Executor getBlockingMainQueueExecutor() { + if (blockingMainQueue != null) return blockingMainQueue; + return blockingMainQueue = new LibDispatchMainQueue.Sync(); + } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchConcurrentQueue.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchConcurrentQueue.java new file mode 100644 index 000000000000..9ed6046c6668 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchConcurrentQueue.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +import java.util.concurrent.Executor; + +class LibDispatchConcurrentQueue extends LibDispatchQueue implements Executor { + LibDispatchConcurrentQueue(final long queuePtr) { + super(queuePtr); + } + + @Override + public void execute(final Runnable task) { + LibDispatchNative.nativeExecuteAsync(ptr, task); + } + + @Override + protected synchronized void dispose() { + // should not dispose the default concurrent queues + } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchMainQueue.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchMainQueue.java new file mode 100644 index 000000000000..d935372e8403 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchMainQueue.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +import java.util.concurrent.Executor; + +abstract class LibDispatchMainQueue extends LibDispatchQueue implements Executor { + public LibDispatchMainQueue() { + super(LibDispatchNative.nativeGetMainQueue()); + } + + @Override + protected synchronized void dispose() { + // should not dispose the main queue + } + + static class Sync extends LibDispatchMainQueue { + @Override + public void execute(final Runnable task) { + LibDispatchNative.nativeExecuteSync(ptr, task); + } + } + + static class ASync extends LibDispatchMainQueue { + @Override + public void execute(final Runnable task) { + LibDispatchNative.nativeExecuteAsync(ptr, task); + } + } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchNative.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchNative.java new file mode 100644 index 000000000000..bd8cc7d68540 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchNative.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +@SuppressWarnings("removal") +final class LibDispatchNative { + static { + java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public Void run() { + System.loadLibrary("osx"); + return null; + } + }); + } + + static native boolean nativeIsDispatchSupported(); + static native long nativeGetMainQueue(); + static native long nativeCreateConcurrentQueue(int priority); + static native long nativeCreateSerialQueue(String name); + static native void nativeReleaseQueue(long nativeQueue); + static native void nativeExecuteAsync(long nativeQueue, Runnable task); + static native void nativeExecuteSync(long nativeQueue, Runnable task); + + private LibDispatchNative() { } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchQueue.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchQueue.java new file mode 100644 index 000000000000..01362574c012 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchQueue.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +class LibDispatchQueue extends LibDispatchRetainedResource { + LibDispatchQueue(final long queuePtr) { + super(queuePtr); + } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchRetainedResource.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchRetainedResource.java new file mode 100644 index 000000000000..5cffc70cdf63 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchRetainedResource.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +class LibDispatchRetainedResource { + protected long ptr; + + protected LibDispatchRetainedResource(final long ptr) { + this.ptr = ptr; + } + + protected synchronized void dispose() { + if (ptr != 0) LibDispatchNative.nativeReleaseQueue(ptr); + ptr = 0; + } + + @Override + @SuppressWarnings("removal") + protected void finalize() throws Throwable { + dispose(); + } +} diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchSerialQueue.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchSerialQueue.java new file mode 100644 index 000000000000..2b5569edac02 --- /dev/null +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/concurrent/LibDispatchSerialQueue.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.lwawt.macosx.concurrent; + +import java.util.List; +import java.util.concurrent.*; + +class LibDispatchSerialQueue extends AbstractExecutorService { + static final int RUNNING = 0; + static final int SHUTDOWN = 1; +// static final int STOP = 2; // not supported by GCD + static final int TERMINATED = 3; + + final Object lock = new Object(); + LibDispatchQueue nativeQueueWrapper; + volatile int runState; + + LibDispatchSerialQueue(final long queuePtr) { + nativeQueueWrapper = new LibDispatchQueue(queuePtr); + } + + @Override + public void execute(final Runnable task) { + if (nativeQueueWrapper == null) return; + LibDispatchNative.nativeExecuteAsync(nativeQueueWrapper.ptr, task); + } + + @Override + public boolean isShutdown() { + return runState != RUNNING; + } + + @Override + public boolean isTerminated() { + return runState == TERMINATED; + } + + @Override + public void shutdown() { + synchronized (lock) { + if (runState != RUNNING) return; + + runState = SHUTDOWN; + execute(new Runnable() { + public void run() { + synchronized (lock) { + runState = TERMINATED; + lock.notifyAll(); // for the benefit of awaitTermination() + } + } + }); + nativeQueueWrapper = null; + } + } + + @Override + public List shutdownNow() { + shutdown(); + return null; + } + + @Override + public boolean awaitTermination(final long timeout, final TimeUnit unit) throws InterruptedException { + if (runState == TERMINATED) return true; + + final long millis = unit.toMillis(timeout); + if (millis <= 0) return false; + + synchronized (lock) { + if (runState == TERMINATED) return true; + lock.wait(timeout); + if (runState == TERMINATED) return true; + } + + return false; + } +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.h index 3c7cbe086ee5..21120a68f6e7 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.h @@ -26,13 +26,25 @@ #ifndef __AWTEVENT_H #define __AWTEVENT_H +#import + jlong UTC(NSEvent *event); void DeliverJavaKeyEvent(JNIEnv *env, NSEvent *event, jobject peer); void DeliverJavaMouseEvent(JNIEnv *env, NSEvent *event, jobject peer); void SendAdditionalJavaEvents(JNIEnv *env, NSEvent *nsEvent, jobject peer); -jint GetJavaMouseModifiers(NSInteger button, NSUInteger modifierFlags); +jint GetJavaMouseModifiers(NSUInteger modifierFlags); jint NsKeyModifiersToJavaModifiers(NSUInteger nsFlags, BOOL isExtMods); NSUInteger JavaModifiersToNsKeyModifiers(jint javaModifiers, BOOL isExtMods); -unichar NsCharToJavaChar(unichar nsChar, NSUInteger modifiers); +unichar NsCharToJavaChar(unichar nsChar, NSUInteger modifiers, BOOL spaceKeyTyped); + +struct KeyCodeTranslationResult { + unichar character; + BOOL isSuccess; + BOOL isDead; + BOOL isTyped; +}; + +TISInputSourceRef GetCurrentUnderlyingLayout(BOOL useNationalLayouts); +struct KeyCodeTranslationResult TranslateKeyCodeUsingLayout(TISInputSourceRef layout, unsigned short keyCode); #endif /* __AWTEVENT_H */ diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m index d26def5694fb..818cea8491fc 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m @@ -28,6 +28,7 @@ #import "LWCToolkit.h" #import "JNIUtilities.h" +#import "AWTEvent.h" #import #import @@ -60,143 +61,166 @@ #define KL_STANDARD java_awt_event_KeyEvent_KEY_LOCATION_STANDARD #define KL_NUMPAD java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD #define KL_UNKNOWN java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN -static struct _key +#define KL_LEFT java_awt_event_KeyEvent_KEY_LOCATION_LEFT +#define KL_RIGHT java_awt_event_KeyEvent_KEY_LOCATION_RIGHT + +struct KeyTableEntry { unsigned short keyCode; - BOOL postsTyped; + unichar character; + BOOL variesBetweenLayouts; jint javaKeyLocation; jint javaKeyCode; -} -const keyTable[] = +}; + +static const struct KeyTableEntry unknownKeyEntry = { + 0xFFFF, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED +}; + +static const struct KeyTableEntry keyTable[] = { - {0x00, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_A}, - {0x01, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_S}, - {0x02, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_D}, - {0x03, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_F}, - {0x04, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_H}, - {0x05, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_G}, - {0x06, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Z}, - {0x07, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_X}, - {0x08, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_C}, - {0x09, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_V}, - {0x0A, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_QUOTE}, - {0x0B, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_B}, - {0x0C, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Q}, - {0x0D, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_W}, - {0x0E, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_E}, - {0x0F, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_R}, - {0x10, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Y}, - {0x11, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_T}, - {0x12, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_1}, - {0x13, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_2}, - {0x14, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_3}, - {0x15, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_4}, - {0x16, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_6}, - {0x17, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_5}, - {0x18, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_EQUALS}, - {0x19, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_9}, - {0x1A, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_7}, - {0x1B, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_MINUS}, - {0x1C, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_8}, - {0x1D, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_0}, - {0x1E, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_CLOSE_BRACKET}, - {0x1F, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_O}, - {0x20, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_U}, - {0x21, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_OPEN_BRACKET}, - {0x22, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_I}, - {0x23, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_P}, - {0x24, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_ENTER}, - {0x25, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_L}, - {0x26, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_J}, - {0x27, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_QUOTE}, - {0x28, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_K}, - {0x29, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_SEMICOLON}, - {0x2A, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SLASH}, - {0x2B, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_COMMA}, - {0x2C, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_SLASH}, - {0x2D, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_N}, - {0x2E, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_M}, - {0x2F, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_PERIOD}, - {0x30, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_TAB}, - {0x31, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_SPACE}, - {0x32, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_QUOTE}, - {0x33, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SPACE}, - {0x34, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_ENTER}, - {0x35, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_ESCAPE}, - {0x36, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x37, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_META}, // **** - {0x38, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_SHIFT}, // **** - {0x39, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_CAPS_LOCK}, - {0x3A, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_ALT}, // **** - {0x3B, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_CONTROL}, // **** - {0x3C, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x3D, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_ALT_GRAPH}, - {0x3E, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x3F, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // the 'fn' key on PowerBooks - {0x40, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F17}, - {0x41, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_DECIMAL}, - {0x42, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x43, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_MULTIPLY}, - {0x44, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x45, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_ADD}, - {0x46, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x47, NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_CLEAR}, - {0x48, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x49, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x4A, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x4B, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_DIVIDE}, - {0x4C, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_ENTER}, - {0x4D, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x4E, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_SUBTRACT}, - {0x4F, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F18}, - {0x50, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F19}, - {0x51, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_EQUALS}, - {0x52, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD0}, - {0x53, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD1}, - {0x54, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD2}, - {0x55, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD3}, - {0x56, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD4}, - {0x57, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD5}, - {0x58, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD6}, - {0x59, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD7}, - {0x5A, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F20}, - {0x5B, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD8}, - {0x5C, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD9}, - {0x5D, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SLASH}, // This is a combo yen/backslash on JIS keyboards. - {0x5E, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_UNDERSCORE}, - {0x5F, YES, KL_NUMPAD, java_awt_event_KeyEvent_VK_COMMA}, - {0x60, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F5}, - {0x61, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F6}, - {0x62, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F7}, - {0x63, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F3}, - {0x64, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F8}, - {0x65, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F9}, - {0x66, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_ALPHANUMERIC}, - {0x67, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F11}, - {0x68, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_KATAKANA}, - {0x69, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F13}, - {0x6A, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F16}, - {0x6B, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F14}, - {0x6C, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x6D, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F10}, - {0x6E, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x6F, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F12}, - {0x70, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, - {0x71, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F15}, - {0x72, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_HELP}, - {0x73, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_HOME}, - {0x74, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_PAGE_UP}, - {0x75, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_DELETE}, - {0x76, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F4}, - {0x77, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_END}, - {0x78, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F2}, - {0x79, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_PAGE_DOWN}, - {0x7A, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F1}, - {0x7B, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_LEFT}, - {0x7C, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_RIGHT}, - {0x7D, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_DOWN}, - {0x7E, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_UP}, - {0x7F, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, + // Do not reorder the key codes! They are in ascending numeric order without gaps (from 0x00 to 0x7F). + // Characters in the second column are not the characters that UCKeyTranslate returns with the specified key code. + // Instead, they are the NSEvent.characters sent by macOS when pressing the specified key on the US layout. + // They are currently only used to determine whether the NextAppWindow shortcut was pressed. + // They are not used for KEY_TYPED events or anything of this sort. + {kVK_ANSI_A, 'a', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_A}, + {kVK_ANSI_S, 's', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_S}, + {kVK_ANSI_D, 'd', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_D}, + {kVK_ANSI_F, 'f', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_F}, + {kVK_ANSI_H, 'h', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_H}, + {kVK_ANSI_G, 'g', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_G}, + {kVK_ANSI_Z, 'z', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Z}, + {kVK_ANSI_X, 'x', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_X}, + {kVK_ANSI_C, 'c', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_C}, + {kVK_ANSI_V, 'v', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_V}, + {kVK_ISO_Section, '\xa7', YES, KL_STANDARD, 0x1000000 + 0x00A7}, + {kVK_ANSI_B, 'b', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_B}, + {kVK_ANSI_Q, 'q', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Q}, + {kVK_ANSI_W, 'w', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_W}, + {kVK_ANSI_E, 'e', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_E}, + {kVK_ANSI_R, 'r', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_R}, + {kVK_ANSI_Y, 'y', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Y}, + {kVK_ANSI_T, 't', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_T}, + {kVK_ANSI_1, '1', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_1}, + {kVK_ANSI_2, '2', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_2}, + {kVK_ANSI_3, '3', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_3}, + {kVK_ANSI_4, '4', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_4}, + {kVK_ANSI_6, '6', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_6}, + {kVK_ANSI_5, '5', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_5}, + {kVK_ANSI_Equal, '=', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_EQUALS}, + {kVK_ANSI_9, '9', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_9}, + {kVK_ANSI_7, '7', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_7}, + {kVK_ANSI_Minus, '-', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_MINUS}, + {kVK_ANSI_8, '8', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_8}, + {kVK_ANSI_0, '0', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_0}, + {kVK_ANSI_RightBracket, ']', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_CLOSE_BRACKET}, + {kVK_ANSI_O, 'o', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_O}, + {kVK_ANSI_U, 'u', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_U}, + {kVK_ANSI_LeftBracket, '[', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_OPEN_BRACKET}, + {kVK_ANSI_I, 'i', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_I}, + {kVK_ANSI_P, 'p', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_P}, + {kVK_Return, NSCarriageReturnCharacter, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_ENTER}, + {kVK_ANSI_L, 'l', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_L}, + {kVK_ANSI_J, 'j', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_J}, + {kVK_ANSI_Quote, '\'', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_QUOTE}, + {kVK_ANSI_K, 'k', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_K}, + {kVK_ANSI_Semicolon, ';', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_SEMICOLON}, + {kVK_ANSI_Backslash, '\\', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SLASH}, + {kVK_ANSI_Comma, ',', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_COMMA}, + {kVK_ANSI_Slash, '/', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_SLASH}, + {kVK_ANSI_N, 'n', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_N}, + {kVK_ANSI_M, 'm', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_M}, + {kVK_ANSI_Period, '.', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_PERIOD}, + {kVK_Tab, NSTabCharacter, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_TAB}, + {kVK_Space, ' ', NO, KL_STANDARD, java_awt_event_KeyEvent_VK_SPACE}, + {kVK_ANSI_Grave, '`', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_QUOTE}, + {kVK_Delete, NSDeleteCharacter, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SPACE}, + {0x34, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_Escape, '\x1b', NO, KL_STANDARD, java_awt_event_KeyEvent_VK_ESCAPE}, + {kVK_RightCommand, 0, NO, KL_RIGHT, java_awt_event_KeyEvent_VK_META}, + {kVK_Command, 0, NO, KL_LEFT, java_awt_event_KeyEvent_VK_META}, + {kVK_Shift, 0, NO, KL_LEFT, java_awt_event_KeyEvent_VK_SHIFT}, + {kVK_CapsLock, 0, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_CAPS_LOCK}, + {kVK_Option, 0, NO, KL_LEFT, java_awt_event_KeyEvent_VK_ALT}, + {kVK_Control, 0, NO, KL_LEFT, java_awt_event_KeyEvent_VK_CONTROL}, + {kVK_RightShift, 0, NO, KL_RIGHT, java_awt_event_KeyEvent_VK_SHIFT}, + {kVK_RightOption, 0, NO, KL_RIGHT, java_awt_event_KeyEvent_VK_ALT}, + {kVK_RightControl, 0, NO, KL_RIGHT, java_awt_event_KeyEvent_VK_CONTROL}, + {kVK_Function, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, + {kVK_F17, NSF17FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F17}, + {kVK_ANSI_KeypadDecimal, '.', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_DECIMAL}, + {0x42, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_ANSI_KeypadMultiply, '*', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_MULTIPLY}, + {0x44, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_ANSI_KeypadPlus, '+', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_ADD}, + {0x46, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_ANSI_KeypadClear, NSClearLineFunctionKey, NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_CLEAR}, + {kVK_VolumeUp, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, + {kVK_VolumeDown, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, + {kVK_Mute, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, + {kVK_ANSI_KeypadDivide, '/', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_DIVIDE}, + {kVK_ANSI_KeypadEnter, NSEnterCharacter, NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_ENTER}, + {0x4D, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_ANSI_KeypadMinus, '-', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_SUBTRACT}, + {kVK_F18, NSF18FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F18}, + {kVK_F19, NSF19FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F19}, + {kVK_ANSI_KeypadEquals, '=', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_EQUALS}, + {kVK_ANSI_Keypad0, '0', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD0}, + {kVK_ANSI_Keypad1, '1', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD1}, + {kVK_ANSI_Keypad2, '2', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD2}, + {kVK_ANSI_Keypad3, '3', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD3}, + {kVK_ANSI_Keypad4, '4', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD4}, + {kVK_ANSI_Keypad5, '5', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD5}, + {kVK_ANSI_Keypad6, '6', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD6}, + {kVK_ANSI_Keypad7, '7', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD7}, + {kVK_F20, NSF20FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F20}, + {kVK_ANSI_Keypad8, '8', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD8}, + {kVK_ANSI_Keypad9, '9', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD9}, + {kVK_JIS_Yen, '\xa5', YES, KL_STANDARD, 0x1000000 + 0x00A5}, + {kVK_JIS_Underscore, '_', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_UNDERSCORE}, + {kVK_JIS_KeypadComma, ',', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_COMMA}, + {kVK_F5, NSF5FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F5}, + {kVK_F6, NSF6FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F6}, + {kVK_F7, NSF7FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F7}, + {kVK_F3, NSF3FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F3}, + {kVK_F8, NSF8FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F8}, + {kVK_F9, NSF9FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F9}, + {kVK_JIS_Eisu, 0, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_ALPHANUMERIC}, + {kVK_F11, NSF11FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F11}, + {kVK_JIS_Kana, 0, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_KATAKANA}, + {kVK_F13, NSF13FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F13}, + {kVK_F16, NSF16FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F16}, + {kVK_F14, NSF14FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F14}, + {0x6C, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_F10, NSF10FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F10}, + {0x6E, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_F12, NSF12FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F12}, + {0x70, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined + {kVK_F15, NSF15FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F15}, + {kVK_Help, NSHelpFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_HELP}, + {kVK_Home, NSHomeFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_HOME}, + {kVK_PageUp, NSPageUpFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_PAGE_UP}, + {kVK_ForwardDelete, NSDeleteFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_DELETE}, + {kVK_F4, NSF4FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F4}, + {kVK_End, NSEndFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_END}, + {kVK_F2, NSF2FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F2}, + {kVK_PageDown, NSPageDownFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_PAGE_DOWN}, + {kVK_F1, NSF1FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F1}, + {kVK_LeftArrow, NSLeftArrowFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_LEFT}, + {kVK_RightArrow, NSRightArrowFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_RIGHT}, + {kVK_DownArrow, NSDownArrowFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_DOWN}, + {kVK_UpArrow, NSUpArrowFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_UP}, + {0x7F, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined +}; + +static const struct KeyTableEntry keyTableJISOverride[] = { + {0x18, '^', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_CIRCUMFLEX}, + {0x1E, '[', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_OPEN_BRACKET}, + {0x21, '@', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_AT}, + {0x27, ':', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_COLON}, + {0x2A, ']', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_CLOSE_BRACKET}, + // Some other keys are already handled in the previous table, no need to repeat them here }; /* @@ -212,6 +236,7 @@ }; static const struct CharToVKEntry charToDeadVKTable[] = { {0x0060, java_awt_event_KeyEvent_VK_DEAD_GRAVE}, + {0x0027, java_awt_event_KeyEvent_VK_DEAD_ACUTE}, {0x00B4, java_awt_event_KeyEvent_VK_DEAD_ACUTE}, {0x0384, java_awt_event_KeyEvent_VK_DEAD_ACUTE}, // Unicode "GREEK TONOS" -- Greek keyboard, semicolon key {0x005E, java_awt_event_KeyEvent_VK_DEAD_CIRCUMFLEX}, @@ -221,6 +246,7 @@ {0x02D8, java_awt_event_KeyEvent_VK_DEAD_BREVE}, {0x02D9, java_awt_event_KeyEvent_VK_DEAD_ABOVEDOT}, {0x00A8, java_awt_event_KeyEvent_VK_DEAD_DIAERESIS}, + {0x00B0, java_awt_event_KeyEvent_VK_DEAD_ABOVERING}, {0x02DA, java_awt_event_KeyEvent_VK_DEAD_ABOVERING}, {0x02DD, java_awt_event_KeyEvent_VK_DEAD_DOUBLEACUTE}, {0x02C7, java_awt_event_KeyEvent_VK_DEAD_CARON}, @@ -232,6 +258,58 @@ {0,0} }; +// This table is analogous to a similar one found in sun.awt.ExtendedKeyCodes. +// It governs translating the unicode codepoints into the proper VK_ values for keys that have one. +// It only deals with punctuation characters and certain exceptional letters from extended latin set. +// Also see test/jdk/jb/sun/awt/macos/InputMethodTest/KeyCodesTest.java +static const struct CharToVKEntry extraCharToVKTable[] = { + {0x0021, java_awt_event_KeyEvent_VK_EXCLAMATION_MARK}, + {0x0022, java_awt_event_KeyEvent_VK_QUOTEDBL}, + {0x0023, java_awt_event_KeyEvent_VK_NUMBER_SIGN}, + {0x0024, java_awt_event_KeyEvent_VK_DOLLAR}, + {0x0026, java_awt_event_KeyEvent_VK_AMPERSAND}, + {0x0027, java_awt_event_KeyEvent_VK_QUOTE}, + {0x0028, java_awt_event_KeyEvent_VK_LEFT_PARENTHESIS}, + {0x0029, java_awt_event_KeyEvent_VK_RIGHT_PARENTHESIS}, + {0x002A, java_awt_event_KeyEvent_VK_ASTERISK}, + {0x002B, java_awt_event_KeyEvent_VK_PLUS}, + {0x002C, java_awt_event_KeyEvent_VK_COMMA}, + {0x002D, java_awt_event_KeyEvent_VK_MINUS}, + {0x002E, java_awt_event_KeyEvent_VK_PERIOD}, + {0x002F, java_awt_event_KeyEvent_VK_SLASH}, + {0x003A, java_awt_event_KeyEvent_VK_COLON}, + {0x003B, java_awt_event_KeyEvent_VK_SEMICOLON}, + {0x003C, java_awt_event_KeyEvent_VK_LESS}, + {0x003D, java_awt_event_KeyEvent_VK_EQUALS}, + {0x003E, java_awt_event_KeyEvent_VK_GREATER}, + {0x0040, java_awt_event_KeyEvent_VK_AT}, + {0x005B, java_awt_event_KeyEvent_VK_OPEN_BRACKET}, + {0x005C, java_awt_event_KeyEvent_VK_BACK_SLASH}, + {0x005D, java_awt_event_KeyEvent_VK_CLOSE_BRACKET}, + {0x005E, java_awt_event_KeyEvent_VK_CIRCUMFLEX}, + {0x005F, java_awt_event_KeyEvent_VK_UNDERSCORE}, + {0x0060, java_awt_event_KeyEvent_VK_BACK_QUOTE}, + {0x007B, java_awt_event_KeyEvent_VK_BRACELEFT}, + {0x007D, java_awt_event_KeyEvent_VK_BRACERIGHT}, + {0x00A1, java_awt_event_KeyEvent_VK_INVERTED_EXCLAMATION_MARK}, + + // These are the extended latin characters which have a non-obvious key code. + // Their key codes are derived from the upper case instead of the lower case. + // It probably has to do with how these key codes are reported on Windows. + // Translating these characters to the key codes corresponding to their uppercase versions + // makes getExtendedKeyCodeForChar consistent with how these events are reported on macOS. + {0x00E4, 0x01000000+0x00C4}, + {0x00E5, 0x01000000+0x00C5}, + {0x00E6, 0x01000000+0x00C6}, + {0x00E7, 0x01000000+0x00C7}, + {0x00F1, 0x01000000+0x00D1}, + {0x00F6, 0x01000000+0x00D6}, + {0x00F8, 0x01000000+0x00D8}, + + {0x20AC, java_awt_event_KeyEvent_VK_EURO_SIGN}, + {0, 0} +}; + // TODO: some constants below are part of CGS (private interfaces)... // for now we will look at the raw key code to determine left/right status // but not sure this is foolproof... @@ -381,44 +459,154 @@ unichar NsCharToJavaChar(unichar nsChar, NSUInteger modifiers, BOOL spaceKeyType return nsChar; } -static unichar NsGetDeadKeyChar(unsigned short keyCode) +static const struct KeyTableEntry* GetKeyTableEntryForKeyCode(unsigned short keyCode) { + static const size_t keyTableSize = sizeof(keyTable) / sizeof(struct KeyTableEntry); + static const size_t keyTableJISOverrideSize = sizeof(keyTableJISOverride) / sizeof(struct KeyTableEntry); + BOOL isJIS = KBGetLayoutType(LMGetKbdType()) == kKeyboardJIS; + + const struct KeyTableEntry* usKey = &unknownKeyEntry; + + if (keyCode < keyTableSize) { + usKey = &keyTable[keyCode]; + } + + if (isJIS) { + for (int i = 0; i < keyTableJISOverrideSize; ++i) { + if (keyTableJISOverride[i].keyCode == keyCode) { + usKey = &keyTableJISOverride[i]; + break; + } + } + } + + return usKey; +} + +TISInputSourceRef GetCurrentUnderlyingLayout(BOOL useNationalLayouts) { + // TISCopyCurrentKeyboardLayoutInputSource() should always return a key layout + // that has valid unicode character data for use with the UCKeyTranslate() function. + // This is more robust than checking whether the current input source has key layout data + // and then falling back to the override input source if it doesn't. This is because some + // custom IMEs don't set the override input source properly. + + TISInputSourceRef currentLayout = TISCopyCurrentKeyboardLayoutInputSource(); + Boolean currentAscii = currentLayout == nil ? NO : + CFBooleanGetValue((CFBooleanRef) TISGetInputSourceProperty(currentLayout, kTISPropertyInputSourceIsASCIICapable)); + TISInputSourceRef underlyingLayout = (!useNationalLayouts || currentAscii) ? currentLayout : nil; + + if (currentLayout) { + if (underlyingLayout) { + CFAutorelease(currentLayout); + } else { + CFRelease(currentLayout); + } + } + + return underlyingLayout; +} + +struct KeyCodeTranslationResult TranslateKeyCodeUsingLayout(TISInputSourceRef layout, unsigned short keyCode) { - TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); - CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); - if (uchr == nil) { return 0; } + struct KeyCodeTranslationResult result = { + .character = (unichar)0, + .isSuccess = NO, + .isDead = NO, + .isTyped = NO + }; + + const struct KeyTableEntry* usKey = GetKeyTableEntryForKeyCode(keyCode); + + if (usKey == &unknownKeyEntry) { + return result; + } + + if (!usKey->variesBetweenLayouts) { + result.isSuccess = YES; + result.character = usKey->character; + if (result.character != 0 && !(result.character >= NSUpArrowFunctionKey && result.character <= NSModeSwitchFunctionKey)) { + result.isTyped = YES; + } + return result; + } + + if (layout == nil) { + // use the US layout + result.isSuccess = YES; + if (usKey->character != 0) { + result.character = usKey->character; + result.isTyped = YES; + } + return result; + } + + CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(layout, kTISPropertyUnicodeKeyLayoutData); + if (uchr == nil) { + return result; + } const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr); - // Carbon modifiers should be used instead of NSEvent modifiers - UInt32 modifierKeyState = (GetCurrentEventKeyModifiers() >> 8) & 0xFF; - - if (keyboardLayout) { - UInt32 deadKeyState = 0; - UniCharCount maxStringLength = 255; - UniCharCount actualStringLength = 0; - UniChar unicodeString[maxStringLength]; - - // get the deadKeyState - OSStatus status = UCKeyTranslate(keyboardLayout, - keyCode, kUCKeyActionDown, modifierKeyState, - LMGetKbdType(), kUCKeyTranslateNoDeadKeysBit, - &deadKeyState, - maxStringLength, - &actualStringLength, unicodeString); - - if (status == noErr && deadKeyState != 0) { - // Press SPACE to get the dead key char - status = UCKeyTranslate(keyboardLayout, - kVK_Space, kUCKeyActionDown, 0, - LMGetKbdType(), 0, - &deadKeyState, - maxStringLength, - &actualStringLength, unicodeString); - - if (status == noErr && actualStringLength > 0) { - return unicodeString[0]; - } + if (keyboardLayout == NULL) { + return result; + } + + UInt32 modifierKeyState = 0; + UInt32 deadKeyState = 0; + const UniCharCount maxStringLength = 255; + UniCharCount actualStringLength = 0; + UniChar unicodeString[maxStringLength]; + + // get the deadKeyState + OSStatus status = UCKeyTranslate(keyboardLayout, + keyCode, kUCKeyActionDown, modifierKeyState, + LMGetKbdType(), 0, + &deadKeyState, + maxStringLength, + &actualStringLength, unicodeString); + + if (status != noErr) { + return result; + } + + if (deadKeyState == 0) { + result.isSuccess = YES; + result.isDead = NO; + + if (actualStringLength > 0) { + result.isTyped = YES; + + // This is the character that will determine the Java key code of this key. + // There are some keys (even on ASCII-capable key layouts) that produce more than one + // code point (not just more than one UTF-16 code unit mind you!). It's unclear how one + // would go around constructing an extended key code for these keys. Luckily, if we + // use the last code unit to construct the extended key codes, there won't be any collisions + // among the standard macOS ASCII-capable key layouts. That seems good enough to me. + result.character = unicodeString[actualStringLength - 1]; } + + return result; } - return 0; + + deadKeyState = 0; + + // Extract the dead key non-combining character + status = UCKeyTranslate(keyboardLayout, + keyCode, kUCKeyActionDown, modifierKeyState, + LMGetKbdType(), kUCKeyTranslateNoDeadKeysMask, + &deadKeyState, + maxStringLength, + &actualStringLength, unicodeString); + + if (status != noErr) { + return result; + } + + result.isSuccess = YES; + result.isDead = YES; + + if (actualStringLength > 0) { + result.character = unicodeString[actualStringLength - 1]; + } + + return result; } /* @@ -426,83 +614,175 @@ static unichar NsGetDeadKeyChar(unsigned short keyCode) * NSEvent keyCodes and translate to the Java virtual key code. */ static void -NsCharToJavaVirtualKeyCode(unichar ch, BOOL isDeadChar, - NSUInteger flags, unsigned short key, - jint *keyCode, jint *keyLocation, BOOL *postsTyped, - unichar *deadChar, jint *extendedkeyCode) +NsCharToJavaVirtualKeyCode(unsigned short key, const BOOL useNationalLayouts, + const BOOL reportDeadKeysAsNormal, + jint *keyCode, jint *keyLocation) { - static size_t size = sizeof(keyTable) / sizeof(struct _key); - NSInteger offset; - - if (isDeadChar) { - unichar testDeadChar = NsGetDeadKeyChar(key); - const struct CharToVKEntry *map; - for (map = charToDeadVKTable; map->c != 0; ++map) { - if (testDeadChar == map->c) { + // This is going to be a lengthy explanation about what it is that we need to achieve in this function. + // It took me quite a while to figure out myself, so hopefully it will be useful to others as well. + // I will describe the desired behavior when useNationalLayouts = true. Setting this parameter to false should + // ideally make the behavior identical to the one of OpenJDK, barring a few obvious bugfixes, like JBR-3860. + // + // For clarity here's what I mean by certain phrases: + // - Input source: what macOS calls "Keyboard layout input source", so excluding emoji pickers and handwriting + // - Key layout: Input source in the com.apple.keylayout namespace, i.e. a "simple" keyboard + // - IME: Input source in the com.apple.inputmethod namespace, i.e. a "complex" input method + // - Physical layout: A property of the physical keyboard device that has to do with the physical location of keys and their mapping to key codes + // - Underlying key layout: The key layout which actually translates the keys that the user presses to Java events. + // - Key code: A macOS virtual key code (the property `keyCode` on `NSEvent`) + // - Java key code: The values returned by `KeyEvent.getKeyCode()` + // - Key: Keyboard key without any modifiers + // - Combo: Keyboard key with modifiers + // - Dead key/combo: A key/combo that sets a dead key state when interpreted using UCKeyTranslate + // + // Whenever I refer to a key on the physical keyboard I will use the US layout. + // + // This function needs to determine the following: + // - Java key code + // - Java key location + // + // Obtaining the key location is fairly easy, since it can be looked up in the table by key code and physical layout type. + // + // To understand how to obtain the Java key code, let's take a look at the types of input sources that we want to handle: + // - Latin-based key layouts (ABC, German, French, Spanish, etc) + // - Non-latin-based key layouts (Arabic, Armenian, Russian, etc) + // - Latin-based IMEs (Pinyin, Cantonese - Phonetic, Japanese Romaji, etc.) + // - Non-latin-based IMEs (Korean, Zhuyin, Japanese Kana, etc.) + // + // These are possible physical layouts supported on macOS: + // - ANSI (North America, most of Asia and others) + // - ISO (Europe, Latin America, Middle East and others) + // - JIS (Japan) + // + // As a rule, any input source can be used on any physical layout. + // This might cause some key codes to correspond to different characters on the same input source. + // + // Basically we want the following behavior: + // - Latin-based key layouts should report their own keys unchanged. + // - Other input sources should report the key on their underlying key layout. + // + // Latin-based IMEs make it easy to determine the underlying key layout. + // macOS allows us to obtain a copy of the input source by calling TISCopyCurrentKeyboardLayoutInputSource(). + // There's also the TISCopyInputMethodKeyboardLayoutOverride() function, but certain IMs (Google Japanese IME) + // don't set it properly. + // + // Non-latin-based key layouts and IMEs will use the US key layout as the underlying one. + // This is the behavior of native apps. + // + // Java has builtin key codes for most characters that can appear at the base layer of various key layouts. + // The rest are constructed like this: 0x01000000 + codePoint. All keys on builtin ASCII-capable layouts produce + // no surrogate pairs, but some of them can produce strings containing more than one code point. These need to be + // dealt with carefully as to avoid having different keys produce same Java key codes. + // + // Here's the various groups of named Java key codes that we need to handle: + // - Fixed keys that don't vary between input sources: VK_SPACE, VK_SHIFT, VK_NUMPAD0-VK_NUMPAD9, VK_F1-VK_F24, etc. + // - Dead keys: VK_DEAD_ACUTE, VK_DEAD_GRAVE, etc. + // - Punctuation: VK_PLUS, VK_SLASH, VK_SEMICOLON, etc. + // - Latin letters: VK_A-VK_Z + // - Numbers: VK_0-VK_9 + // + // Fixed keys are hardcoded in keyTable and keyTableJISOverride. + // + // Dead keys need to be mapped into the corresponding VK_DEAD_ key codes in the same way the normal keys are mapped, + // that is using an underlying layout. This is done by using the UCKeyTranslate function together with charToDeadVKTable. + // It is possible to extract a (usually) non-combining dead key character by calling UCKeyTranslate + // with the kUCKeyTranslateNoDeadKeysMask option. + // + // Punctuation is hardcoded in extraCharToVKTable. Latin letters and numbers are dealt with separately. + // + // Bonus! What does it mean to have the "national layouts" disabled? In my opinion this simply means that + // the underlying key layout is the one that the user currently uses, or the override key layout for the input method + // that the user currently uses. I think this approach strikes the right balance between preserving compatibility + // with OpenJDK where it matters, while at the same time fixing a lot of annoying bugs. + + // Find out which key does the key code correspond to in the US/ABC key layout. + // Need to take into account that the same virtual key code may correspond to + // different keys depending on the physical layout. + + const struct KeyTableEntry* usKey = GetKeyTableEntryForKeyCode(key); + + // Determine the underlying layout. + // If underlyingLayout is nil then fall back to using the usKey. + + TISInputSourceRef underlyingLayout = GetCurrentUnderlyingLayout(useNationalLayouts); + + // Default to returning the US key data. + *keyCode = usKey->javaKeyCode; + *keyLocation = usKey->javaKeyLocation; + + if (underlyingLayout == nil || !usKey->variesBetweenLayouts) { + return; + } + + // Translate the key using the underlying key layout. + struct KeyCodeTranslationResult translatedKey = TranslateKeyCodeUsingLayout(underlyingLayout, key); + + // Test whether this key is dead. + if (translatedKey.isDead && !reportDeadKeysAsNormal) { + for (const struct CharToVKEntry *map = charToDeadVKTable; map->c != 0; ++map) { + if (translatedKey.character == map->c) { *keyCode = map->javaKey; - *postsTyped = NO; - // TODO: use UNKNOWN here? - *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN; - *deadChar = testDeadChar; return; } } - // If we got here, we keep looking for a normal key. + + // No builtin VK_DEAD_ constant for this dead key, + // nothing better to do than to fall back to the extended key code. + // This can happen on the following ascii-capable key layouts: + // - Apache (com.apple.keylayout.Apache) + // - Chickasaw (com.apple.keylayout.Chickasaw) + // - Choctaw (com.apple.keylayout.Choctaw) + // - Navajo (com.apple.keylayout.Navajo) + // - Vietnamese (com.apple.keylayout.Vietnamese) + // Vietnamese layout is unique among these in that the "dead key" is actually a self-containing symbol, + // that can be modified by an accent typed after it. In essence, it's like a dead key in reverse: + // the user should first type the letter and only then the necessary accent. + // This way the key code would be what the user expects. + + *keyCode = 0x1000000 + translatedKey.character; + return; } - if ([[NSCharacterSet letterCharacterSet] characterIsMember:ch]) { - // key is an alphabetic character - unichar lower; - lower = tolower(ch); - offset = lower - 'a'; - if (offset >= 0 && offset <= 25) { - // checking for A-Z characters - *postsTyped = YES; - // do quick conversion - *keyCode = java_awt_event_KeyEvent_VK_A + offset; - *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_STANDARD; + unichar ch = 0; + + if (translatedKey.isDead || translatedKey.isTyped) { + ch = translatedKey.character; + } + + // Together with the following two checks (letters and digits) this table + // properly handles all keys that have corresponding VK_ codes. + // Unfortunately not all keys are like that. They are handled separately. + + for (const struct CharToVKEntry *map = extraCharToVKTable; map->c != 0; ++map) { + if (map->c == ch) { + *keyCode = map->javaKey; return; - } else { - // checking for non-english characters - // this value comes from ExtendedKeyCodes.java - offset += 0x01000000; - *postsTyped = YES; - // do quick conversion - // the keyCode is off by 32, so adding it here - *extendedkeyCode = java_awt_event_KeyEvent_VK_A + offset + 32; - *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_STANDARD; } } - if ([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:ch]) { + if (ch >= 'a' && ch <= 'z') { + // key is a basic latin letter + *keyCode = java_awt_event_KeyEvent_VK_A + ch - 'a'; + return; + } + + if (ch >= '0' && ch <= '9') { // key is a digit - offset = ch - '0'; - // make sure in range for decimal digits - if (offset >= 0 && offset <= 9) { - jboolean numpad = ((flags & NSNumericPadKeyMask) && - (key > 81 && key < 93)); - *postsTyped = YES; - if (numpad) { - *keyCode = offset + java_awt_event_KeyEvent_VK_NUMPAD0; - *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD; - } else { - *keyCode = offset + java_awt_event_KeyEvent_VK_0; - *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_STANDARD; - } - return; - } + // numpad digits are already handled, since they don't vary between layouts + *keyCode = java_awt_event_KeyEvent_VK_0 + ch - '0'; + return; } - if (key < size) { - *postsTyped = keyTable[key].postsTyped; - *keyCode = keyTable[key].javaKeyCode; - *keyLocation = keyTable[key].javaKeyLocation; - } else { - // Should we report this? This means we've got a keyboard - // we don't know about... - *postsTyped = NO; - *keyCode = java_awt_event_KeyEvent_VK_UNDEFINED; - *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN; + if (useNationalLayouts || [[NSCharacterSet letterCharacterSet] characterIsMember:ch]) { + // If useNationalLayouts = false, then we only convert the key codes for letters here. + // This is the default behavior in OpenJDK and I don't think it's a good idea to change that. + + // Otherwise we also need to report characters other than letters. + // If we ended up in this branch, this means that the character doesn't have its own VK_ code. + // Apart from letters, this is the case for characters like the Section Sign (U+00A7) + // on the French keyboard (key ANSI_6) or Pound Sign (U+00A3) on the Italian – QZERTY keyboard (key ANSI_8). + + *keyCode = 0x01000000 + ch; } } @@ -541,8 +821,6 @@ static unichar NsGetDeadKeyChar(unsigned short keyCode) *javaKeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_LEFT; } else if (eventKeyCode == cur->rightKeyCode) { *javaKeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_RIGHT; - } else if (cur->nsMask == NSAlternateKeyMask) { - continue; } *javaKeyType = (cur->nsMask & nsFlags) ? java_awt_event_KeyEvent_KEY_PRESSED : @@ -673,47 +951,38 @@ jlong UTC(NSEvent *event) { /* * Class: sun_lwawt_macosx_NSEvent * Method: nsToJavaKeyInfo - * Signature: ([I[I)Z + * Signature: ([I[I)V */ -JNIEXPORT jboolean JNICALL +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_NSEvent_nsToJavaKeyInfo (JNIEnv *env, jclass cls, jintArray inData, jintArray outData) { - BOOL postsTyped = NO; - JNI_COCOA_ENTER(env); jboolean copy = JNI_FALSE; jint *data = (*env)->GetIntArrayElements(env, inData, ©); - CHECK_NULL_RETURN(data, postsTyped); + CHECK_NULL(data); - // in = [testChar, testDeadChar, modifierFlags, keyCode] - jchar testChar = (jchar)data[0]; - BOOL isDeadChar = (data[1] != 0); - jint modifierFlags = data[2]; - jshort keyCode = (jshort)data[3]; + // in = [keyCode, useNationalLayouts] + jshort keyCode = (jshort)data[0]; + BOOL useNationalLayouts = (data[1] != 0); + BOOL reportDeadKeysAsNormal = (data[2] != 0); jint jkeyCode = java_awt_event_KeyEvent_VK_UNDEFINED; - jint jextendedkeyCode = -1; jint jkeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN; - jint testDeadChar = 0; - NsCharToJavaVirtualKeyCode((unichar)testChar, isDeadChar, - (NSUInteger)modifierFlags, (unsigned short)keyCode, - &jkeyCode, &jkeyLocation, &postsTyped, - (unichar *) &testDeadChar, &jextendedkeyCode); + NsCharToJavaVirtualKeyCode((unsigned short)keyCode, + useNationalLayouts, + reportDeadKeysAsNormal, + &jkeyCode, &jkeyLocation); - // out = [jkeyCode, jkeyLocation, deadChar, jextendedkeyCode]; + // out = [jkeyCode, jkeyLocation]; (*env)->SetIntArrayRegion(env, outData, 0, 1, &jkeyCode); (*env)->SetIntArrayRegion(env, outData, 1, 1, &jkeyLocation); - (*env)->SetIntArrayRegion(env, outData, 2, 1, &testDeadChar); - (*env)->SetIntArrayRegion(env, outData, 3, 1, &jextendedkeyCode); (*env)->ReleaseIntArrayElements(env, inData, data, 0); JNI_COCOA_EXIT(env); - - return postsTyped; } /* diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.h index 9f64001212c5..9b06de671396 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.h @@ -43,8 +43,10 @@ // Input method data jobject fInputMethodLOCKABLE; + BOOL fInputMethodInteractionEnabled; BOOL fKeyEventsNeeded; BOOL fProcessingKeystroke; + NSString* actualCharacters; BOOL fEnablePressAndHold; BOOL fInPressAndHold; @@ -66,6 +68,7 @@ // Input method-related events - (void)setInputMethod:(jobject)inputMethod; -- (void)abandonInput; +- (void)abandonInput:(jobject) component; +- (void)enableImInteraction:(BOOL)enabled; @end diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m index c349df39dccd..f09c88450b21 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m @@ -26,18 +26,28 @@ #import "jni_util.h" #import "CGLGraphicsConfig.h" #import "AWTView.h" +#import "AWTEvent.h" #import "AWTWindow.h" #import "a11y/CommonComponentAccessibility.h" #import "JavaAccessibilityUtilities.h" #import "GeomUtilities.h" #import "ThreadUtilities.h" #import "JNIUtilities.h" +#import "jni_util.h" +#import "PropertiesUtilities.h" +#import "sun_lwawt_macosx_CPlatformWindow.h" #import +#define DEFAULT_FRAME_WIDTH 1504 +#define DEFAULT_FRAME_HEIGHT 846 + // keyboard layout static NSString *kbdLayout; +// workaround for JBR-6704 +static unichar lastCtrlCombo; + @interface AWTView() @property (retain) CDropTarget *_dropTarget; @property (retain) CDragSource *_dragSource; @@ -45,18 +55,19 @@ @interface AWTView() -(void) deliverResize: (NSRect) rect; -(void) resetTrackingArea; -(void) deliverJavaKeyEventHelper: (NSEvent*) event; --(BOOL) isCodePointInUnicodeBlockNeedingIMEvent: (unichar) codePoint; -(NSMutableString *) parseString : (id) complexString; @end // Uncomment this line to see fprintfs of each InputMethod API being called on this View //#define IM_DEBUG TRUE -//#define EXTRA_DEBUG +//#define LOG_KEY_EVENTS static BOOL shouldUsePressAndHold() { return YES; } +extern bool isSystemShortcut_NextWindowInApplication(NSUInteger modifiersMask, int keyCode, NSString * chars); + @implementation AWTView @synthesize _dropTarget; @@ -76,12 +87,13 @@ - (id) initWithRect: (NSRect) rect m_cPlatformView = cPlatformView; fInputMethodLOCKABLE = NULL; + fInputMethodInteractionEnabled = YES; fKeyEventsNeeded = NO; fProcessingKeystroke = NO; + lastCtrlCombo = 0; fEnablePressAndHold = shouldUsePressAndHold(); fInPressAndHold = NO; - fPAHNeedsToSelect = NO; mouseIsOver = NO; [self resetTrackingArea]; @@ -141,6 +153,26 @@ - (void) viewDidMoveToWindow { } } +- (void)setFrame:(NSRect)newFrame { + if (isnan(newFrame.origin.x)) { + newFrame.origin.x = 0; + } + + if (isnan(newFrame.origin.y)) { + newFrame.origin.y = 0; + } + + if (isnan(newFrame.size.width)) { + newFrame.size.width = DEFAULT_FRAME_WIDTH; + } + + if (isnan(newFrame.size.height)) { + newFrame.size.height = DEFAULT_FRAME_HEIGHT; + } + + [super setFrame:newFrame]; +} + - (BOOL) acceptsFirstMouse: (NSEvent *)event { return YES; } @@ -170,25 +202,41 @@ - (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize { * MouseEvents support */ +- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent *)event { + return [self isWindowDisabled]; +} + - (void) mouseDown: (NSEvent *)event { - NSInputManager *inputManager = [NSInputManager currentInputManager]; - if ([inputManager wantsToHandleMouseEvents]) { + if ([self isWindowDisabled]) { + [NSApp preventWindowOrdering]; + [NSApp activateIgnoringOtherApps:YES]; + } + + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + NSString *checkForInputManagerInMouseDown = + [PropertiesUtilities + javaSystemPropertyForKey:@"apple.awt.checkForInputManagerInMouseDown" + withEnv:env]; + if ([@"true" isCaseInsensitiveLike:checkForInputManagerInMouseDown]) { + NSInputManager *inputManager = [NSInputManager currentInputManager]; + if ([inputManager wantsToHandleMouseEvents]) { #if IM_DEBUG - NSLog(@"-> IM wants to handle event"); + NSLog(@"-> IM wants to handle event"); #endif - if (![inputManager handleMouseEvent:event]) { - [self deliverJavaMouseEvent: event]; - } else { + if ([inputManager handleMouseEvent:event]) { #if IM_DEBUG - NSLog(@"-> Event was handled."); + NSLog(@"-> Event was handled."); + return; #endif - } - } else { + } + } else { #if IM_DEBUG - NSLog(@"-> IM does not want to handle event"); + NSLog(@"-> IM does not want to handle event"); #endif - [self deliverJavaMouseEvent: event]; + } } + + [self deliverJavaMouseEvent:event]; } - (void) mouseUp: (NSEvent *)event { @@ -218,10 +266,19 @@ - (void) mouseMoved: (NSEvent *)event { NSPoint localPoint = [self convertPoint: eventLocation fromView: nil]; if ([self mouse: localPoint inRect: [self bounds]]) { - [self deliverJavaMouseEvent: event]; - } else { - [[self nextResponder] mouseDown:event]; + NSWindow* eventWindow = [event window]; + NSPoint screenPoint = (eventWindow == nil) + ? eventLocation + // SDK we build against is too old - it doesn't have convertPointToScreen + : [eventWindow convertRectToScreen:NSMakeRect(eventLocation.x, eventLocation.y, 0, 0)].origin; + // macOS can report mouseMoved events to a window even if it's not showing currently (see JBR-2702) + // so we're performing an additional check here + if (self.window.windowNumber == [NSWindow windowNumberAtPoint:screenPoint belowWindowWithWindowNumber:0]) { + [self deliverJavaMouseEvent: event]; + return; + } } + [[self nextResponder] mouseMoved:event]; } - (void) mouseDragged: (NSEvent *)event { @@ -257,70 +314,172 @@ - (void) scrollWheel: (NSEvent*) event { * KeyEvents support */ +#ifdef LOG_KEY_EVENTS +static void debugPrintNSString(const char* name, NSString* s) { + if (s == nil) { + fprintf(stderr, "\t%s: nil\n", name); + return; + } + const char* utf8 = [s UTF8String]; + int codeUnits = [s length]; + int bytes = strlen(utf8); + fprintf(stderr, "\t%s: [utf8 = \"", name); + for (const unsigned char* c = (const unsigned char*)utf8; *c; ++c) { + if (*c >= 0x20 && *c <= 0x7e) { + fputc(*c, stderr); + } else { + fprintf(stderr, "\\x%02x", *c); + } + } + fprintf(stderr, "\", utf16 = \""); + for (int i = 0; i < codeUnits; ++i) { + int c = (int)[s characterAtIndex:i]; + if (c >= 0x20 && c <= 0x7e) { + fputc(c, stderr); + } else { + fprintf(stderr, "\\u%04x", c); + } + } + fprintf(stderr, "\", bytes = %d, codeUnits = %d]\n", bytes, codeUnits); +} + +static void debugPrintNSEvent(NSEvent* event, const char* comment) { + NSEventType type = [event type]; + if (type == NSEventTypeKeyDown) { + fprintf(stderr, "[AWTView.m] keyDown in %s\n", comment); + } else if (type == NSEventTypeKeyUp) { + fprintf(stderr, "[AWTView.m] keyUp in %s\n", comment); + } else if (type == NSEventTypeFlagsChanged) { + fprintf(stderr, "[AWTView.m] flagsChanged in %s\n", comment); + } else { + fprintf(stderr, "[AWTView.m] unknown event %d in %s\n", (int)type, comment); + return; + } + if (type == NSEventTypeKeyDown || type == NSEventTypeKeyUp) { + debugPrintNSString("characters", [event characters]); + debugPrintNSString("charactersIgnoringModifiers", [event charactersIgnoringModifiers]); + fprintf(stderr, "\tkeyCode: %d (0x%02x)\n", [event keyCode], [event keyCode]); + } + fprintf(stderr, "\tmodifierFlags: 0x%08x\n", (unsigned)[event modifierFlags]); + TISInputSourceRef is = TISCopyCurrentKeyboardLayoutInputSource(); + fprintf(stderr, "\tTISCopyCurrentKeyboardLayoutInputSource: %s\n", is == nil ? "(nil)" : [(NSString*) TISGetInputSourceProperty(is, kTISPropertyInputSourceID) UTF8String]); + fprintf(stderr, "\twillBeHandledByComplexInputMethod: %s\n", [event willBeHandledByComplexInputMethod] ? "true" : "false"); + CFRelease(is); +} +#endif + - (void) keyDown: (NSEvent *)event { +#ifdef LOG_KEY_EVENTS + debugPrintNSEvent(event, "keyDown"); +#endif fProcessingKeystroke = YES; fKeyEventsNeeded = YES; + NSString *eventCharacters = [event characters]; + unsigned mods = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; + + if (([event modifierFlags] & NSControlKeyMask) && [eventCharacters length] == 1) { + lastCtrlCombo = [eventCharacters characterAtIndex:0]; + } else { + lastCtrlCombo = 0; + } + // Allow TSM to look at the event and potentially send back NSTextInputClient messages. - [self interpretKeyEvents:[NSArray arrayWithObject:event]]; + if (fInputMethodInteractionEnabled == YES) { + [self interpretKeyEvents:[NSArray arrayWithObject:event]]; + } if (fEnablePressAndHold && [event willBeHandledByComplexInputMethod] && fInputMethodLOCKABLE) { + BOOL skipProcessingCancelKeys = YES; fProcessingKeystroke = NO; if (!fInPressAndHold) { fInPressAndHold = YES; - fPAHNeedsToSelect = YES; } else { // Abandon input to reset IM and unblock input after canceling // input accented symbols switch([event keyCode]) { - case kVK_Escape: + case kVK_ForwardDelete: case kVK_Delete: + skipProcessingCancelKeys = NO; case kVK_Return: - case kVK_ForwardDelete: + case kVK_Escape: case kVK_PageUp: case kVK_PageDown: case kVK_DownArrow: case kVK_UpArrow: case kVK_Home: case kVK_End: - [self abandonInput]; - break; + // Abandon input to reset IM and unblock input after + // canceling input accented symbols + [self abandonInput:nil]; + break; } } - return; + if (skipProcessingCancelKeys) { + return; + } } - NSString *eventCharacters = [event characters]; BOOL isDeadKey = (eventCharacters != nil && [eventCharacters length] == 0); if ((![self hasMarkedText] && fKeyEventsNeeded) || isDeadKey) { [self deliverJavaKeyEventHelper: event]; } + if (actualCharacters != nil) { + [actualCharacters release]; + actualCharacters = nil; + } + fProcessingKeystroke = NO; } - (void) keyUp: (NSEvent *)event { +#ifdef LOG_KEY_EVENTS + debugPrintNSEvent(event, "keyUp"); +#endif [self deliverJavaKeyEventHelper: event]; } - (void) flagsChanged: (NSEvent *)event { +#ifdef LOG_KEY_EVENTS + debugPrintNSEvent(event, "flagsChanged"); +#endif [self deliverJavaKeyEventHelper: event]; } - (BOOL) performKeyEquivalent: (NSEvent *) event { +#ifdef LOG_KEY_EVENTS + debugPrintNSEvent(event, "performKeyEquivalent"); +#endif // if IM is active key events should be ignored if (![self hasMarkedText] && !fInPressAndHold) { [self deliverJavaKeyEventHelper: event]; } + const NSUInteger modFlags = + [event modifierFlags] & (NSCommandKeyMask | NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask); + + // Workaround for JBR-3544 + // When tabbing mode is on (jdk.allowMacOSTabbedWindows=true) and "Ctrl Opt N" / "Cmd Opt N" is pressed, + // macOS first sends it, and immediately then sends "Ctrl N" / "Cmd N". + // The workaround is to "eat" (by returning TRUE) the "Ctrl Opt N" / "Cmd Opt N", + // so macOS won't send its "fallback" version ("Ctrl N" / "Cmd N"). + if ([event keyCode] == kVK_ANSI_N) { + const NSUInteger ctrlOpt = (NSControlKeyMask | NSAlternateKeyMask); + const NSUInteger cmdOpt = (NSCommandKeyMask | NSAlternateKeyMask); + + if ((modFlags == ctrlOpt) || (modFlags == cmdOpt)) { + [[NSApp mainMenu] performKeyEquivalent: event]; // just in case (as in the workaround for 8020209 below) + return YES; + } + } + // Workaround for 8020209: special case for "Cmd =" and "Cmd ." // because Cocoa calls performKeyEquivalent twice for these keystrokes - NSUInteger modFlags = [event modifierFlags] & - (NSCommandKeyMask | NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask); if (modFlags == NSCommandKeyMask) { NSString *eventChars = [event charactersIgnoringModifiers]; if ([eventChars length] == 1) { @@ -333,6 +492,23 @@ - (BOOL) performKeyEquivalent: (NSEvent *) event { } + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + NSString *captureNextAppWinKey = [PropertiesUtilities javaSystemPropertyForKey:@"apple.awt.captureNextAppWinKey" + withEnv:env]; + if ([@"true" isCaseInsensitiveLike:captureNextAppWinKey]) { + NSUInteger deviceIndependentModifierFlagsMask = + [event modifierFlags] & NSDeviceIndependentModifierFlagsMask; + // Why translate the key code here and not just use event.characters? + // The default macOS shortcut for NextWindowInApplication is Cmd+Backtick. Pressing Cmd+Dead Grave also works + // for layouts that have the backtick as a dead key. Unfortunately, some (but notably not all) of these layouts + // consider Cmd+Dead Grave to also be a dead key, which means that event.characters will be an empty string. + // Explicitly translating the key code with a proper underlying key layout fixes this. + struct KeyCodeTranslationResult translationResult = TranslateKeyCodeUsingLayout(GetCurrentUnderlyingLayout(YES), [event keyCode]); + if (translationResult.isSuccess && translationResult.character) { + return isSystemShortcut_NextWindowInApplication(deviceIndependentModifierFlagsMask, [event keyCode], [NSString stringWithCharacters:&translationResult.character length:1]) ? YES : NO; + } + } + return NO; } @@ -340,14 +516,17 @@ - (BOOL) performKeyEquivalent: (NSEvent *) event { * Utility methods and accessors */ --(void) deliverJavaMouseEvent: (NSEvent *) event { - BOOL isEnabled = YES; +-(BOOL) isWindowDisabled { NSWindow* window = [self window]; if ([window isKindOfClass: [AWTWindow_Panel class]] || [window isKindOfClass: [AWTWindow_Normal class]]) { - isEnabled = [(AWTWindow*)[window delegate] isEnabled]; + return ![(AWTWindow*)[window delegate] isEnabled]; + } else { + return NO; } +} - if (!isEnabled) { +-(void) deliverJavaMouseEvent: (NSEvent *) event { + if ([self isWindowDisabled]) { return; } @@ -457,20 +636,22 @@ -(void) deliverJavaKeyEventHelper: (NSEvent *) event { JNIEnv *env = [ThreadUtilities getJNIEnv]; jstring characters = NULL; - jstring charactersIgnoringModifiers = NULL; if ([event type] != NSEventTypeFlagsChanged) { characters = NSStringToJavaString(env, [event characters]); - charactersIgnoringModifiers = NSStringToJavaString(env, [event charactersIgnoringModifiers]); + } + jstring jActualCharacters = NULL; + if (actualCharacters != nil) { + jActualCharacters = NSStringToJavaString(env, actualCharacters); } DECLARE_CLASS(jc_NSEvent, "sun/lwawt/macosx/NSEvent"); DECLARE_METHOD(jctor_NSEvent, jc_NSEvent, "", "(IISLjava/lang/String;Ljava/lang/String;)V"); jobject jEvent = (*env)->NewObject(env, jc_NSEvent, jctor_NSEvent, - [event type], - [event modifierFlags], - [event keyCode], - characters, - charactersIgnoringModifiers); + [event type], + [event modifierFlags], + [event keyCode], + characters, + jActualCharacters); CHECK_NULL(jEvent); DECLARE_CLASS(jc_PlatformView, "sun/lwawt/macosx/CPlatformView"); @@ -485,6 +666,9 @@ -(void) deliverJavaKeyEventHelper: (NSEvent *) event { if (characters != NULL) { (*env)->DeleteLocalRef(env, characters); } + if (jActualCharacters != NULL) { + (*env)->DeleteLocalRef(env, jActualCharacters); + } (*env)->DeleteLocalRef(env, jEvent); } @@ -543,21 +727,6 @@ - (void) drawRect:(NSRect)dirtyRect { } } --(BOOL) isCodePointInUnicodeBlockNeedingIMEvent: (unichar) codePoint { - if ((codePoint == 0x0024) || (codePoint == 0x00A3) || - (codePoint == 0x00A5) || - ((codePoint >= 0x900) && (codePoint <= 0x97F)) || - ((codePoint >= 0x20A3) && (codePoint <= 0x20BF)) || - ((codePoint >= 0x3000) && (codePoint <= 0x303F)) || - ((codePoint >= 0xFF00) && (codePoint <= 0xFFEF))) { - // Code point is in 'CJK Symbols and Punctuation' or - // 'Halfwidth and Fullwidth Forms' Unicode block or - // currency symbols unicode or Devanagari script - return YES; - } - return NO; -} - -(NSMutableString *) parseString : (id) complexString { if ([complexString isKindOfClass:[NSString class]]) { return [complexString mutableCopy]; @@ -610,6 +779,10 @@ + (AWTView *) awtView:(JNIEnv*)env ofAccessible:(jobject)jaccessible - (id)getAxData:(JNIEnv*)env { + NSString *a11yEnabledProp = [PropertiesUtilities javaSystemPropertyForKey:@"sun.awt.mac.a11y.enabled" withEnv:env]; + if ([@"false" isCaseInsensitiveLike:a11yEnabledProp]) { + return nil; + } jobject jcomponent = [self awtComponent:env]; id ax = [[[CommonComponentAccessibility alloc] initWithParent:self withEnv:env withAccessible:jcomponent withIndex:-1 withView:self withJavaRole:nil] autorelease]; (*env)->DeleteLocalRef(env, jcomponent); @@ -698,7 +871,7 @@ - (NSData *)accessibleSelectedTextAsRTFD - (BOOL)replaceAccessibleTextSelection:(NSString *)text { id focused = [self accessibilityFocusedUIElement]; - if (![focused respondsToSelector:@selector(setAccessibilitySelectedText)]) return NO; + if (![focused respondsToSelector:@selector(setAccessibilitySelectedText:)]) return NO; [focused setAccessibilitySelectedText:text]; return YES; } @@ -775,9 +948,11 @@ - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag CDragSource *dragSource = self._dragSource; NSDragOperation dragOp = NSDragOperationNone; - if (dragSource != nil) { + if (dragSource != nil) dragOp = [dragSource draggingSourceOperationMaskForLocal:flag]; - } + else if ([super respondsToSelector:@selector(draggingSourceOperationMaskForLocal:)]) + dragOp = [super draggingSourceOperationMaskForLocal:flag]; + return dragOp; } @@ -787,9 +962,11 @@ - (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination CDragSource *dragSource = self._dragSource; NSArray* array = nil; - if (dragSource != nil) { + if (dragSource != nil) array = [dragSource namesOfPromisedFilesDroppedAtDestination:dropDestination]; - } + else if ([super respondsToSelector:@selector(namesOfPromisedFilesDroppedAtDestination:)]) + array = [super namesOfPromisedFilesDroppedAtDestination:dropDestination]; + return array; } @@ -829,9 +1006,11 @@ - (BOOL)ignoreModifierKeysWhileDragging CDragSource *dragSource = self._dragSource; BOOL result = FALSE; - if (dragSource != nil) { + if (dragSource != nil) result = [dragSource ignoreModifierKeysWhileDragging]; - } + else if ([super respondsToSelector:@selector(ignoreModifierKeysWhileDragging)]) + result = [super ignoreModifierKeysWhileDragging]; + return result; } @@ -845,9 +1024,11 @@ - (NSDragOperation)draggingEntered:(id )sender CDropTarget *dropTarget = self._dropTarget; NSDragOperation dragOp = NSDragOperationNone; - if (dropTarget != nil) { + if (dropTarget != nil) dragOp = [dropTarget draggingEntered:sender]; - } + else if ([super respondsToSelector:@selector(draggingEntered:)]) + dragOp = [super draggingEntered:sender]; + return dragOp; } @@ -857,9 +1038,11 @@ - (NSDragOperation)draggingUpdated:(id )sender CDropTarget *dropTarget = self._dropTarget; NSDragOperation dragOp = NSDragOperationNone; - if (dropTarget != nil) { + if (dropTarget != nil) dragOp = [dropTarget draggingUpdated:sender]; - } + else if ([super respondsToSelector:@selector(draggingUpdated:)]) + dragOp = [super draggingUpdated:sender]; + return dragOp; } @@ -879,9 +1062,11 @@ - (BOOL)prepareForDragOperation:(id )sender CDropTarget *dropTarget = self._dropTarget; BOOL result = FALSE; - if (dropTarget != nil) { + if (dropTarget != nil) result = [dropTarget prepareForDragOperation:sender]; - } + else if ([super respondsToSelector:@selector(prepareForDragOperation:)]) + result = [super prepareForDragOperation:sender]; + return result; } @@ -891,9 +1076,11 @@ - (BOOL)performDragOperation:(id )sender CDropTarget *dropTarget = self._dropTarget; BOOL result = FALSE; - if (dropTarget != nil) { + if (dropTarget != nil) result = [dropTarget performDragOperation:sender]; - } + else if ([super respondsToSelector:@selector(performDragOperation:)]) + result = [super performDragOperation:sender]; + return result; } @@ -930,12 +1117,59 @@ - (void)draggingEnded:(id )sender #define GET_CIM_CLASS_RETURN(ret) \ GET_CLASS_RETURN(jc_CInputMethod, "sun/lwawt/macosx/CInputMethod", ret); +- (NSInteger) windowLevel +{ +#ifdef IM_DEBUG + fprintf(stderr, "AWTView InputMethod Selector Called : [windowLevel]\n"); +#endif // IM_DEBUG + + NSWindow* const ownerWindow = [self window]; + if (ownerWindow == nil) { + return NSNormalWindowLevel; + } + + const NSWindowLevel ownerWindowLevel = [ownerWindow level]; + if ( (ownerWindowLevel != NSNormalWindowLevel) && (ownerWindowLevel != NSFloatingWindowLevel) ) { + // the window level has been overridden, let's believe it + return ownerWindowLevel; + } + + AWTWindow* const delegate = (AWTWindow*)[ownerWindow delegate]; + if (delegate == nil) { + return ownerWindowLevel; + } + + const jint styleBits = [delegate styleBits]; + + const BOOL isPopup = ( (styleBits & sun_lwawt_macosx_CPlatformWindow_IS_POPUP) != 0 ); + if (isPopup) { + return NSPopUpMenuWindowLevel; + } + + const BOOL isModal = ( (styleBits & sun_lwawt_macosx_CPlatformWindow_IS_MODAL) != 0 ); + if (isModal) { + return NSFloatingWindowLevel; + } + + return ownerWindowLevel; +} + - (void) insertText:(id)aString replacementRange:(NSRange)replacementRange { #ifdef IM_DEBUG - fprintf(stderr, "AWTView InputMethod Selector Called : [insertText]: %s\n", [aString UTF8String]); + fprintf(stderr, + "AWTView InputMethod Selector Called : [insertText]: %s, replacementRange: location=%lu, length=%lu\n", + [aString UTF8String], replacementRange.location, replacementRange.length); #endif // IM_DEBUG + NSMutableString * useString = [self parseString:aString]; + + // See JBR-6704 + if (lastCtrlCombo && !fProcessingKeystroke && [useString length] == 1 && [useString characterAtIndex:0] == lastCtrlCombo) { + lastCtrlCombo = 0; + return; + } + if (fInputMethodLOCKABLE == NULL) { return; } @@ -948,65 +1182,48 @@ - (void) insertText:(id)aString replacementRange:(NSRange)replacementRange // text, or 'text in progress'. We also need to send the event if we get an insert text out of the blue! // (i.e., when the user uses the Character palette or Inkwell), or when the string to insert is a complex // Unicode value. + BOOL usingComplexIM = [self hasMarkedText] || !fProcessingKeystroke; - NSMutableString * useString = [self parseString:aString]; +#ifdef IM_DEBUG NSUInteger utf16Length = [useString lengthOfBytesUsingEncoding:NSUTF16StringEncoding]; NSUInteger utf8Length = [useString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - BOOL aStringIsComplex = NO; - unichar codePoint = [useString characterAtIndex:0]; - -#ifdef IM_DEBUG NSLog(@"insertText kbdlayout %@ ",(NSString *)kbdLayout); NSLog(@"utf8Length %lu utf16Length %lu", (unsigned long)utf8Length, (unsigned long)utf16Length); - NSLog(@"codePoint %x", codePoint); + NSLog(@"hasMarkedText: %s, fProcessingKeyStroke: %s", [self hasMarkedText] ? "YES" : "NO", fProcessingKeystroke ? "YES" : "NO"); #endif // IM_DEBUG - if ((utf16Length > 2) || - ((utf8Length > 1) && [self isCodePointInUnicodeBlockNeedingIMEvent:codePoint]) || - ((codePoint == 0x5c) && ([(NSString *)kbdLayout containsString:@"Kotoeri"]))) { -#ifdef IM_DEBUG - NSLog(@"string complex "); -#endif - aStringIsComplex = YES; - } + JNIEnv *env = [ThreadUtilities getJNIEnv]; - if ([self hasMarkedText] || !fProcessingKeystroke || aStringIsComplex) { - JNIEnv *env = [ThreadUtilities getJNIEnv]; + GET_CIM_CLASS(); - GET_CIM_CLASS(); - DECLARE_METHOD(jm_selectPreviousGlyph, jc_CInputMethod, "selectPreviousGlyph", "()V"); - // We need to select the previous glyph so that it is overwritten. - if (fPAHNeedsToSelect) { - (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_selectPreviousGlyph); - CHECK_EXCEPTION(); - fPAHNeedsToSelect = NO; - } + if (replacementRange.length > 0) { + DECLARE_METHOD(jm_selectRange, jc_CInputMethod, "selectRange", "(II)V"); + (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_selectRange, replacementRange.location, + replacementRange.length); + CHECK_EXCEPTION(); + } + if (usingComplexIM) { DECLARE_METHOD(jm_insertText, jc_CInputMethod, "insertText", "(Ljava/lang/String;)V"); - jstring insertedText = NSStringToJavaString(env, useString); + jstring insertedText = NSStringToJavaString(env, useString); (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_insertText, insertedText); CHECK_EXCEPTION(); (*env)->DeleteLocalRef(env, insertedText); - - // The input method event will create psuedo-key events for each character in the committed string. - // We also don't want to send the character that triggered the insertText, usually a return. [3337563] fKeyEventsNeeded = NO; - } - else { - // Need to set back the fKeyEventsNeeded flag so that the string following the - // marked text is not ignored by keyDown - if ([useString length] > 0) { - fKeyEventsNeeded = YES; + } else { + if (actualCharacters != nil) { + [actualCharacters release]; } + actualCharacters = [useString copy]; + fKeyEventsNeeded = YES; } - fPAHNeedsToSelect = NO; // Abandon input to reset IM and unblock input after entering accented // symbols - [self abandonInput]; + [self abandonInput:nil]; } + (void)keyboardInputSourceChanged:(NSNotification *)notification @@ -1040,7 +1257,9 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace NSAttributedString *attrString = (isAttributedString ? (NSAttributedString *)aString : nil); NSString *incomingString = (isAttributedString ? [aString string] : aString); #ifdef IM_DEBUG - fprintf(stderr, "AWTView InputMethod Selector Called : [setMarkedText] \"%s\", loc=%lu, length=%lu\n", [incomingString UTF8String], (unsigned long)selectionRange.location, (unsigned long)selectionRange.length); + fprintf(stderr, "AWTView InputMethod Selector Called :[setMarkedText] \"%s\"," + "selectionRange(%lu, %lu), replacementRange(%lu, %lu)\n", [incomingString UTF8String], + selectionRange.location, selectionRange.length, replacementRange.location, replacementRange.length); #endif // IM_DEBUG JNIEnv *env = [ThreadUtilities getJNIEnv]; GET_CIM_CLASS(); @@ -1048,6 +1267,14 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace DECLARE_METHOD(jm_addAttribute, jc_CInputMethod, "addAttribute", "(ZZII)V"); DECLARE_METHOD(jm_dispatchText, jc_CInputMethod, "dispatchText", "(IIZ)V"); + if (replacementRange.length > 0) { + DECLARE_METHOD(jm_selectRange, jc_CInputMethod, "selectRange", "(II)V"); + (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_selectRange, replacementRange.location, + replacementRange.length); + CHECK_EXCEPTION(); + } + + // NSInputContext already did the analysis of the TSM event and created attributes indicating // the underlining and color that should be done to the string. We need to look at the underline // style and color to determine what kind of Java highlighting needs to be done. @@ -1083,14 +1310,6 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace } } - DECLARE_METHOD(jm_selectPreviousGlyph, jc_CInputMethod, "selectPreviousGlyph", "()V"); - // We need to select the previous glyph so that it is overwritten. - if (fPAHNeedsToSelect) { - (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_selectPreviousGlyph); - CHECK_EXCEPTION(); - fPAHNeedsToSelect = NO; - } - (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_dispatchText, selectionRange.location, selectionRange.length, JNI_FALSE); CHECK_EXCEPTION(); @@ -1100,7 +1319,11 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace } } -- (void) unmarkText +- (void) unmarkText { + [self unmarkText:nil]; +} + +- (void) unmarkText:(jobject) component { #ifdef IM_DEBUG fprintf(stderr, "AWTView InputMethod Selector Called : [unmarkText]\n"); @@ -1113,8 +1336,8 @@ - (void) unmarkText // unmarkText cancels any input in progress and commits it to the text field. JNIEnv *env = [ThreadUtilities getJNIEnv]; GET_CIM_CLASS(); - DECLARE_METHOD(jm_unmarkText, jc_CInputMethod, "unmarkText", "()V"); - (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_unmarkText); + DECLARE_METHOD(jm_unmarkText, jc_CInputMethod, "unmarkText", "(Ljava/awt/Component;)V"); + (*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_unmarkText, component); CHECK_EXCEPTION(); } @@ -1174,6 +1397,9 @@ - (NSAttributedString *) attributedSubstringForProposedRange:(NSRange)theRange a jobject theString = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_substringFromRange, theRange.location, theRange.length); CHECK_EXCEPTION_NULL_RETURN(theString, nil); + if (!theString) { + return NULL; + } id result = [[[NSAttributedString alloc] initWithString:JavaStringToNSString(env, theString)] autorelease]; #ifdef IM_DEBUG NSLog(@"attributedSubstringFromRange returning \"%@\"", result); @@ -1372,20 +1598,52 @@ - (void)setInputMethod:(jobject)inputMethod object:nil]; } -- (void)abandonInput +- (void)abandonInput:(jobject) component { #ifdef IM_DEBUG fprintf(stderr, "AWTView InputMethod Selector Called : [abandonInput]\n"); #endif // IM_DEBUG [ThreadUtilities performOnMainThread:@selector(markedTextAbandoned:) on:[NSInputManager currentInputManager] withObject:self waitUntilDone:YES]; - [self unmarkText]; + [self unmarkText:component]; } -/******************************** END NSTextInputClient Protocol ********************************/ +-(void)enableImInteraction:(BOOL)enabled +{ +#ifdef IM_DEBUG + fprintf(stderr, "AWTView InputMethod Selector Called : [enableImInteraction:%d]\n", enabled); +#endif // IM_DEBUG + + AWT_ASSERT_APPKIT_THREAD; + + fInputMethodInteractionEnabled = (enabled == YES) ? YES : NO; +} +/******************************** END NSTextInputClient Protocol ********************************/ +- (void)viewDidChangeBackingProperties { + JNIEnv *env = [ThreadUtilities getJNIEnv]; + if ((*env)->IsSameObject(env, m_cPlatformView, NULL)) { + return; + } + static double debugScale = -2.0; + if (debugScale == -2.0) { // default debugScale value in SGE is -1.0 + debugScale = JNU_CallStaticMethodByName(env, NULL, "sun/java2d/SunGraphicsEnvironment", + "getDebugScale", "()D").d; + } + if (self.window.backingScaleFactor > 0 && debugScale < 0) { + if (self.layer.contentsScale != self.window.backingScaleFactor) { + self.layer.contentsScale = self.window.backingScaleFactor; + DECLARE_CLASS(jc_CPlatformView, "sun/lwawt/macosx/CPlatformView"); + DECLARE_METHOD(deliverChangeBackingProperties, jc_CPlatformView, "deliverChangeBackingProperties", "(F)V"); + jobject jlocal = (*env)->NewLocalRef(env, m_cPlatformView); + (*env)->CallVoidMethod(env, jlocal, deliverChangeBackingProperties, self.window.backingScaleFactor); + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, jlocal); + } + } +} @end // AWTView diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.h index 7d6fb4f3ebcf..be4edfa521fb 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,14 @@ jint preFullScreenLevel; NSRect standardFrame; BOOL isMinimizing; - BOOL keyNotificationRecd; + BOOL isJustCreated; + NSWindowTabbingMode javaWindowTabbingMode; + BOOL isEnterFullScreen; + CGFloat _customTitleBarHeight; + BOOL hideTabController; + NSView *_fullScreenButtons; + NSView *_fullScreenOriginalButtons; + } // An instance of either AWTWindow_Normal or AWTWindow_Panel @@ -62,7 +69,16 @@ @property (nonatomic) jint preFullScreenLevel; @property (nonatomic) NSRect standardFrame; @property (nonatomic) BOOL isMinimizing; -@property (nonatomic) BOOL keyNotificationRecd; +@property (nonatomic) BOOL isJustCreated; +@property (nonatomic) NSWindowTabbingMode javaWindowTabbingMode; +@property (nonatomic) BOOL isEnterFullScreen; +@property (nonatomic, retain) NSNumber *currentDisplayID; +@property (nonatomic, readonly) CGFloat customTitleBarHeight; +@property (nonatomic) BOOL customTitleBarControlsVisible; +@property (nonatomic, retain) NSMutableArray *customTitleBarConstraints; +@property (nonatomic, retain) NSLayoutConstraint *customTitleBarHeightConstraint; +@property (nonatomic, retain) NSMutableArray *customTitleBarButtonCenterXConstraints; +@property (nonatomic) BOOL hideTabController; - (id) initWithPlatformWindow:(jobject)javaPlatformWindow ownerWindow:owner @@ -72,8 +88,11 @@ - (BOOL) isTopmostWindowUnderMouse; +- (NSWindowTabbingMode) getJavaWindowTabbingMode; + // NSWindow overrides delegate methods - (BOOL) canBecomeKeyWindow; +- (void) becomeKeyWindow; - (BOOL) canBecomeMainWindow; - (BOOL) worksWhenModal; - (void)sendEvent:(NSEvent *)event; @@ -83,7 +102,9 @@ @end -@interface AWTWindow_Normal : NSWindow +@interface AWTWindow_Normal : NSWindow { + @private BOOL _ignoreMove; +} - (id) initWithDelegate:(AWTWindow *)delegate frameRect:(NSRect)rect styleMask:(NSUInteger)styleMask @@ -97,4 +118,18 @@ contentView:(NSView *)view; @end +@interface AWTWindowDragView : NSView +@property (nonatomic) jobject javaPlatformWindow; +- (id) initWithPlatformWindow:(jobject)javaPlatformWindow; +@end + +@interface AWTButtonsView : NSView { + @private BOOL _showButtons; + NSColor* _color; +} + +- (void)configureColors; + +@end + #endif _AWTWINDOW_H diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m index 77d1e216a75c..da84ac6716d0 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m @@ -23,8 +23,10 @@ * questions. */ +#include #import +#include #import "sun_lwawt_macosx_CPlatformWindow.h" #import "com_apple_eawt_event_GestureHandler.h" #import "com_apple_eawt_FullScreenHandler.h" @@ -34,7 +36,9 @@ #import "AWTView.h" #import "GeomUtilities.h" #import "ThreadUtilities.h" +#import "NSApplicationAWT.h" #import "JNIUtilities.h" +#import "PropertiesUtilities.h" #define MASK(KEY) \ (sun_lwawt_macosx_CPlatformWindow_ ## KEY) @@ -52,6 +56,16 @@ #define GET_CPLATFORM_WINDOW_CLASS_RETURN(ret) \ GET_CLASS_RETURN(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow", ret); +@interface NSTitlebarAccessoryViewController (Private) +- (void)_setHidden:(BOOL)h animated:(BOOL)a; +@end + +@interface NSWindow (Private) +- (void)_setTabBarAccessoryViewController:(id)controller; +- (void)setIgnoreMove:(BOOL)value; +- (void)_adjustWindowToScreen; +@end + // Cocoa windowDidBecomeKey/windowDidResignKey notifications // doesn't provide information about "opposite" window, so we // have to do a bit of tracking. This variable points to a window @@ -65,6 +79,11 @@ // It would be NSZeroPoint if 'Location by Platform' is not used. static NSPoint lastTopLeftPoint; +static BOOL ignoreResizeWindowDuringAnotherWindowEnd = NO; + +static BOOL fullScreenTransitionInProgress = NO; +static BOOL orderingScheduled = NO; + // -------------------------------------------------------------- // NSWindow/NSPanel descendants implementation #define AWT_NS_WINDOW_IMPLEMENTATION \ @@ -85,7 +104,15 @@ - (id) initWithDelegate:(AWTWindow *)delegate \ [self setInitialFirstResponder:view]; \ [self setReleasedWhenClosed:NO]; \ [self setPreservesContentDuringLiveResize:YES]; \ - \ + [[NSNotificationCenter defaultCenter] addObserver:self \ + selector:@selector(windowDidChangeScreen) \ + name:NSWindowDidChangeScreenNotification object:self]; \ + [[NSNotificationCenter defaultCenter] addObserver:self \ + selector:@selector(windowDidChangeProfile) \ + name:NSWindowDidChangeScreenProfileNotification \ + object:self]; \ + [self addObserver:self forKeyPath:@"visible" \ + options:NSKeyValueObservingOptionNew context:nil]; \ return self; \ } \ \ @@ -102,14 +129,83 @@ - (BOOL) worksWhenModal { \ return [(AWTWindow*)[self delegate] worksWhenModal]; \ } \ \ +- (void)cursorUpdate:(NSEvent *)event { \ + /* Prevent cursor updates from OS side */ \ +} \ + \ - (void)sendEvent:(NSEvent *)event { \ [(AWTWindow*)[self delegate] sendEvent:event]; \ [super sendEvent:event]; \ -} +} \ + \ +- (void)becomeKeyWindow { \ + [super becomeKeyWindow]; \ + [(AWTWindow*)[self delegate] becomeKeyWindow]; \ +} \ + \ +- (NSWindowTabbingMode)tabbingMode { \ + return ((AWTWindow*)[self delegate]).javaWindowTabbingMode; \ +} \ + \ +- (void)observeValueForKeyPath:(NSString *)keyPath \ + ofObject:(id)object \ + change:(NSDictionary *)change \ + context:(void *)context { \ + if ([keyPath isEqualToString:@"visible"]) { \ + BOOL isVisible = \ + [[change objectForKey:NSKeyValueChangeNewKey] \ + boolValue]; \ + if (isVisible) { \ + [(AWTWindow*)[self delegate] \ + _windowDidBecomeVisible]; \ + } \ + } \ +} \ + \ +- (void)windowDidChangeScreen { \ + [(AWTWindow*)[self delegate] _displayChanged:NO]; \ +} \ + \ +- (void)windowDidChangeProfile { \ + [(AWTWindow*)[self delegate] _displayChanged:YES]; \ +} \ + \ +- (void)dealloc { \ + [[NSNotificationCenter defaultCenter] removeObserver:self \ + name:NSWindowDidChangeScreenNotification object:self]; \ + [[NSNotificationCenter defaultCenter] removeObserver:self \ + name:NSWindowDidChangeScreenProfileNotification \ + object:self]; \ + [self removeObserver:self forKeyPath:@"visible"]; \ + [super dealloc]; \ +} \ @implementation AWTWindow_Normal AWT_NS_WINDOW_IMPLEMENTATION +// suppress exception (actually assertion) from [NSWindow _changeJustMain] +// workaround for https://youtrack.jetbrains.com/issue/JBR-2562 +- (void)_changeJustMain { + @try { + // NOTE: we can't use [super _changeJustMain] directly because of the warning ('may not perform to selector') + // And [super performSelector:@selector(_changeJustMain)] will invoke this method (not a base method). + // So do it with objc-runtime.h (see stackoverflow.com/questions/14635024/using-objc-msgsendsuper-to-invoke-a-class-method) + Class superClass = [self superclass]; + struct objc_super mySuper = { + self, + class_isMetaClass(object_getClass(self)) //check if we are an instance or Class + ? object_getClass(superClass) //if we are a Class, we need to send our metaclass (our Class's Class) + : superClass //if we are an instance, we need to send our Class (which we already have) + }; + void (*_objc_msgSendSuper)(struct objc_super *, SEL) = (void *)&objc_msgSendSuper; //cast our pointer so the compiler can sort out the ABI + (*_objc_msgSendSuper)(&mySuper, @selector(_changeJustMain)); + } @catch (NSException *ex) { + NSLog(@"WARNING: suppressed exception from _changeJustMain (workaround for JBR-2562)"); + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + [NSApplicationAWT logException:ex forProcess:processInfo]; + } +} + // Gesture support - (void)postGesture:(NSEvent *)event as:(jint)type a:(jdouble)a b:(jdouble)b { AWT_ASSERT_APPKIT_THREAD; @@ -139,21 +235,35 @@ - (void)postGesture:(NSEvent *)event as:(jint)type a:(jdouble)a b:(jdouble)b { } } -- (void)beginGestureWithEvent:(NSEvent *)event { - [self postGesture:event - as:com_apple_eawt_event_GestureHandler_PHASE - a:-1.0 - b:0.0]; -} - -- (void)endGestureWithEvent:(NSEvent *)event { - [self postGesture:event - as:com_apple_eawt_event_GestureHandler_PHASE - a:1.0 - b:0.0]; +- (BOOL)postPhaseEvent:(NSEvent *)event { + // Consider changing API to reflect MacOS api + // Gesture event should come with phase field + // PhaseEvent should be removed + const unsigned int NSEventPhaseBegan = 0x1 << 0; + const unsigned int NSEventPhaseEnded = 0x1 << 3; + const unsigned int NSEventPhaseCancelled = 0x1 << 4; + + if (event.phase == NSEventPhaseBegan) { + [self postGesture:event + as:com_apple_eawt_event_GestureHandler_PHASE + a:-1.0 + b:0.0]; + return true; + } else if (event.phase == NSEventPhaseEnded || + event.phase == NSEventPhaseCancelled) { + [self postGesture:event + as:com_apple_eawt_event_GestureHandler_PHASE + a:1.0 + b:0.0]; + return true; + } + return false; } - (void)magnifyWithEvent:(NSEvent *)event { + if ([self postPhaseEvent:event]) { + return; + } [self postGesture:event as:com_apple_eawt_event_GestureHandler_MAGNIFY a:[event magnification] @@ -161,6 +271,9 @@ - (void)magnifyWithEvent:(NSEvent *)event { } - (void)rotateWithEvent:(NSEvent *)event { + if ([self postPhaseEvent:event]) { + return; + } [self postGesture:event as:com_apple_eawt_event_GestureHandler_ROTATE a:[event rotation] @@ -174,6 +287,116 @@ - (void)swipeWithEvent:(NSEvent *)event { b:[event deltaY]]; } +- (void)pressureChangeWithEvent:(NSEvent *)event { + float pressure = event.pressure; + [self postGesture:event + as:com_apple_eawt_event_GestureHandler_PRESSURE + a:pressure + b:(([event respondsToSelector:@selector(stage)]) ? ((NSInteger)[event stage]) : -1) + ]; +} + +- (void)moveTabToNewWindow:(id)sender { + AWT_ASSERT_APPKIT_THREAD; + + [super moveTabToNewWindow:sender]; + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + jobject platformWindow = (*env)->NewLocalRef(env, ((AWTWindow *)self.delegate).javaPlatformWindow); + if (platformWindow != NULL) { + // extract the target AWT Window object out of the CPlatformWindow + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_FIELD(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;"); + jobject awtWindow = (*env)->GetObjectField(env, platformWindow, jf_target); + if (awtWindow != NULL) { + DECLARE_CLASS(jc_Window, "java/awt/Window"); + DECLARE_METHOD(jm_runMoveTabToNewWindowCallback, jc_Window, "runMoveTabToNewWindowCallback", "()V"); + (*env)->CallVoidMethod(env, awtWindow, jm_runMoveTabToNewWindowCallback); + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, awtWindow); + } + (*env)->DeleteLocalRef(env, platformWindow); + } + +#ifdef DEBUG + NSLog(@"=== Move Tab to new Window ==="); +#endif +} + +// Call over Foundation from Java +- (CGFloat) getTabBarVisibleAndHeight { + if (@available(macOS 10.13, *)) { + id tabGroup = [self tabGroup]; +#ifdef DEBUG + NSLog(@"=== Window tabBar: %@ ===", tabGroup); +#endif + if ([tabGroup isTabBarVisible]) { + if ([tabGroup respondsToSelector:@selector(_tabBar)]) { // private member + CGFloat height = [[tabGroup _tabBar] frame].size.height; +#ifdef DEBUG + NSLog(@"=== Window tabBar visible: %f ===", height); +#endif + return height; + } +#ifdef DEBUG + NSLog(@"=== NsWindow.tabGroup._tabBar not found ==="); +#endif + return -1; // if we don't get height return -1 and use default value in java without change native code + } +#ifdef DEBUG + NSLog(@"=== Window tabBar not visible ==="); +#endif + } else { +#ifdef DEBUG + NSLog(@"=== Window tabGroup not supported before macOS 10.13 ==="); +#endif + } + return 0; +} + +- (void)orderOut:(id)sender { + ignoreResizeWindowDuringAnotherWindowEnd = YES; + [super orderOut:sender]; +} + +- (void)_setTabBarAccessoryViewController:(id)_controller { + if (((AWTWindow *)self.delegate).hideTabController) { + NSTitlebarAccessoryViewController* controller = [[NSTitlebarAccessoryViewController alloc] init]; + controller.view = [[NSView alloc] init]; + [controller.view setFrame:NSMakeRect(0, 0, 0, 0)]; + [controller _setHidden:YES animated:NO]; + + [super _setTabBarAccessoryViewController:controller]; + } else { + [super _setTabBarAccessoryViewController:_controller]; + } +} + +- (BOOL)isNativeSelected { + if (@available(macOS 10.13, *)) { + return [[self tabGroup] selectedWindow] == self; + } + return NO; +} + +- (void)setIgnoreMove:(BOOL)value { + _ignoreMove = value; + self.movable = !value; +} + +- (void)_adjustWindowToScreen { + if (_ignoreMove) { + self.movable = YES; + } + + [super _adjustWindowToScreen]; + [(AWTWindow *)self.delegate updateFullScreenButtons]; + + if (_ignoreMove) { + self.movable = NO; + } +} + @end @implementation AWTWindow_Panel AWT_NS_WINDOW_IMPLEMENTATION @@ -195,7 +418,10 @@ @implementation AWTWindow @synthesize preFullScreenLevel; @synthesize standardFrame; @synthesize isMinimizing; -@synthesize keyNotificationRecd; +@synthesize isJustCreated; +@synthesize javaWindowTabbingMode; +@synthesize isEnterFullScreen; +@synthesize hideTabController; - (void) updateMinMaxSize:(BOOL)resizable { if (resizable) { @@ -226,11 +452,22 @@ + (NSUInteger) styleMaskForStyleBits:(jint)styleBits { if (IS(styleBits, UTILITY)) type |= NSWindowStyleMaskUtilityWindow; if (IS(styleBits, HUD)) type |= NSWindowStyleMaskHUDWindow; if (IS(styleBits, SHEET)) type |= NSWindowStyleMaskDocModalWindow; - if (IS(styleBits, NONACTIVATING)) type |= NSWindowStyleMaskNonactivatingPanel; return type; } ++ (jint) affectedStyleMaskForCustomTitleBar { + return MASK(FULL_WINDOW_CONTENT) | MASK(TRANSPARENT_TITLE_BAR) | MASK(TITLE_VISIBLE); +} + ++ (jint) overrideStyleBits:(jint)styleBits customTitleBarEnabled:(BOOL)customTitleBarEnabled fullscreen:(BOOL)fullscreen { + if (customTitleBarEnabled) { + styleBits |= MASK(FULL_WINDOW_CONTENT) | MASK(TRANSPARENT_TITLE_BAR); + if (!fullscreen) styleBits &= ~MASK(TITLE_VISIBLE); + } + return styleBits; +} + // updates _METHOD_PROP_BITMASK based properties on the window - (void) setPropertiesForStyleBits:(jint)bits mask:(jint)mask { if (IS(mask, RESIZABLE)) { @@ -269,9 +506,11 @@ - (void) setPropertiesForStyleBits:(jint)bits mask:(jint)mask { if (IS(mask, FULLSCREENABLE) && [self.nsWindow respondsToSelector:@selector(toggleFullScreen:)]) { if (IS(bits, FULLSCREENABLE)) { - [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + self.nsWindow.collectionBehavior = self.nsWindow.collectionBehavior | + NSWindowCollectionBehaviorFullScreenPrimary; } else { - [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorDefault]; + self.nsWindow.collectionBehavior = self.nsWindow.collectionBehavior & + ~NSWindowCollectionBehaviorFullScreenPrimary; } } @@ -280,7 +519,7 @@ - (void) setPropertiesForStyleBits:(jint)bits mask:(jint)mask { } if (IS(mask, TITLE_VISIBLE) && [self.nsWindow respondsToSelector:@selector(setTitleVisibility:)]) { - [self.nsWindow setTitleVisibility:(IS(bits, TITLE_VISIBLE)) ? NSWindowTitleVisible :NSWindowTitleHidden]; + [self.nsWindow setTitleVisibility:(IS(bits, TITLE_VISIBLE) ? NSWindowTitleVisible : NSWindowTitleHidden)]; } } @@ -293,10 +532,23 @@ - (id) initWithPlatformWindow:(jobject)platformWindow { AWT_ASSERT_APPKIT_THREAD; + self = [super init]; + if (self == nil) return nil; // no hope + self.javaPlatformWindow = platformWindow; + NSUInteger newBits = bits; if (IS(bits, SHEET) && owner == nil) { newBits = bits & ~NSWindowStyleMaskDocModalWindow; } + + _customTitleBarHeight = -1.0f; // Negative means uninitialized + self.customTitleBarControlsVisible = YES; + self.customTitleBarConstraints = nil; + self.customTitleBarHeightConstraint = nil; + self.customTitleBarButtonCenterXConstraints = nil; + // Force properties if custom title bar is enabled, but store original value in self.styleBits. + newBits = [AWTWindow overrideStyleBits:newBits customTitleBarEnabled:self.isCustomTitleBarEnabled fullscreen:false]; + NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:newBits]; NSRect contentRect = rect; //[NSWindow contentRectForFrameRect:rect styleMask:styleMask]; @@ -307,12 +559,7 @@ - (id) initWithPlatformWindow:(jobject)platformWindow contentRect.size.height = 1.0; } - self = [super init]; - - if (self == nil) return nil; // no hope - if (IS(bits, UTILITY) || - IS(bits, NONACTIVATING) || IS(bits, HUD) || IS(bits, HIDES_ON_DEACTIVATE) || IS(bits, SHEET)) @@ -334,22 +581,29 @@ - (id) initWithPlatformWindow:(jobject)platformWindow if (self.nsWindow == nil) return nil; // no hope either [self.nsWindow release]; // the property retains the object already - self.keyNotificationRecd = NO; self.isEnabled = YES; self.isMinimizing = NO; - self.javaPlatformWindow = platformWindow; self.styleBits = bits; self.ownerWindow = owner; - [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; - - if (IS(self.styleBits, IS_POPUP)) { - [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenAuxiliary]; - } + [self setPropertiesForStyleBits:newBits mask:MASK(_METHOD_PROP_BITMASK)]; if (IS(bits, SHEET) && owner != nil) { [self.nsWindow setStyleMask: NSWindowStyleMaskDocModalWindow]; } + self.isJustCreated = YES; + + self.javaWindowTabbingMode = [self getJavaWindowTabbingMode]; + self.nsWindow.collectionBehavior = NSWindowCollectionBehaviorManaged; + self.isEnterFullScreen = NO; + + [self configureJavaWindowTabbingIdentifier]; + + if (self.isCustomTitleBarEnabled && !self.isFullScreen) { + [self setUpCustomTitleBar]; + } + + self.currentDisplayID = nil; return self; } @@ -357,67 +611,101 @@ + (BOOL) isAWTWindow:(NSWindow *)window { return [window isKindOfClass: [AWTWindow_Panel class]] || [window isKindOfClass: [AWTWindow_Normal class]]; } -// Retrieves the list of possible window layers (levels) -+ (NSArray*) getWindowLayers { - static NSArray *windowLayers; - static dispatch_once_t token; +// returns id for the topmost window under mouse ++ (NSInteger) getTopmostWindowUnderMouseID { + return [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:kCGNullWindowID]; +} - // Initialize the list of possible window layers - dispatch_once(&token, ^{ - // The layers are ordered from front to back, (i.e. the toppest one is the first) - windowLayers = [NSArray arrayWithObjects: - [NSNumber numberWithInt:CGWindowLevelForKey(kCGPopUpMenuWindowLevelKey)], - [NSNumber numberWithInt:CGWindowLevelForKey(kCGFloatingWindowLevelKey)], - [NSNumber numberWithInt:CGWindowLevelForKey(kCGNormalWindowLevelKey)], - nil - ]; - [windowLayers retain]; - }); - return windowLayers; +// checks that this window is under the mouse cursor and this point is not overlapped by others windows +- (BOOL) isTopmostWindowUnderMouse { + return [self.nsWindow windowNumber] == [AWTWindow getTopmostWindowUnderMouseID]; } -// returns id for the topmost window under mouse -+ (NSInteger) getTopmostWindowUnderMouseID { - NSInteger result = -1; +- (void) configureJavaWindowTabbingIdentifier { + AWT_ASSERT_APPKIT_THREAD; - NSArray *windowLayers = [AWTWindow getWindowLayers]; - // Looking for the window under mouse starting from the toppest layer - for (NSNumber *layer in windowLayers) { - result = [AWTWindow getTopmostWindowUnderMouseIDImpl:[layer integerValue]]; - if (result != -1) { - break; - } + self.hideTabController = NO; + + if (self.javaWindowTabbingMode != NSWindowTabbingModeAutomatic) { + return; + } + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow == NULL) { + return; } - return result; -} -+ (NSInteger) getTopmostWindowUnderMouseIDImpl:(NSInteger)windowLayer { - NSInteger result = -1; + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_FIELD(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;"); + jobject awtWindow = (*env)->GetObjectField(env, platformWindow, jf_target); + + if (awtWindow != NULL) { + DECLARE_CLASS(jc_RootPaneContainer, "javax/swing/RootPaneContainer"); + if ((*env)->IsInstanceOf(env, awtWindow, jc_RootPaneContainer)) { + DECLARE_METHOD(jm_getRootPane, jc_RootPaneContainer, "getRootPane", "()Ljavax/swing/JRootPane;"); + jobject rootPane = (*env)->CallObjectMethod(env, awtWindow, jm_getRootPane); + CHECK_EXCEPTION(); - NSRect screenRect = [[NSScreen mainScreen] frame]; - NSPoint nsMouseLocation = [NSEvent mouseLocation]; - CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y); + if (rootPane != NULL) { + DECLARE_CLASS(jc_JComponent, "javax/swing/JComponent"); + DECLARE_METHOD(jm_getClientProperty, jc_JComponent, "getClientProperty", "(Ljava/lang/Object;)Ljava/lang/Object;"); + jstring jKey = NSStringToJavaString(env, @"JavaWindowTabbingIdentifier"); + jobject jValue = (*env)->CallObjectMethod(env, rootPane, jm_getClientProperty, jKey); + CHECK_EXCEPTION(); + + if (jValue != NULL) { + DECLARE_CLASS(jc_String, "java/lang/String"); + if ((*env)->IsInstanceOf(env, jValue, jc_String)) { + NSString *winId = JavaStringToNSString(env, (jstring)jValue); + [self.nsWindow setTabbingIdentifier:winId]; + if ([winId characterAtIndex:0] == '+') { + self.hideTabController = YES; + [self.nsWindow _setTabBarAccessoryViewController:nil]; + } + } - NSMutableArray *windows = (NSMutableArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); + (*env)->DeleteLocalRef(env, jValue); + } - for (NSDictionary *window in windows) { - NSInteger layer = [[window objectForKey:(id)kCGWindowLayer] integerValue]; - if (layer == windowLayer) { - CGRect rect; - CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect); - if (CGRectContainsPoint(rect, cgMouseLocation)) { - result = [[window objectForKey:(id)kCGWindowNumber] integerValue]; - break; + (*env)->DeleteLocalRef(env, jKey); + (*env)->DeleteLocalRef(env, rootPane); } } + + (*env)->DeleteLocalRef(env, awtWindow); } - [windows release]; - return result; + + (*env)->DeleteLocalRef(env, platformWindow); } -// checks that this window is under the mouse cursor and this point is not overlapped by others windows -- (BOOL) isTopmostWindowUnderMouse { - return [self.nsWindow windowNumber] == [AWTWindow getTopmostWindowUnderMouseID]; +- (NSWindowTabbingMode) getJavaWindowTabbingMode { + AWT_ASSERT_APPKIT_THREAD; + + BOOL result = NO; + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + // extract the target AWT Window object out of the CPlatformWindow + GET_CPLATFORM_WINDOW_CLASS_RETURN(NSWindowTabbingModeDisallowed); + DECLARE_FIELD_RETURN(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;", NSWindowTabbingModeDisallowed); + jobject awtWindow = (*env)->GetObjectField(env, platformWindow, jf_target); + if (awtWindow != NULL) { + DECLARE_CLASS_RETURN(jc_Window, "java/awt/Window", NSWindowTabbingModeDisallowed); + DECLARE_METHOD_RETURN(jm_hasTabbingMode, jc_Window, "hasTabbingMode", "()Z", NSWindowTabbingModeDisallowed); + result = (*env)->CallBooleanMethod(env, awtWindow, jm_hasTabbingMode) == JNI_TRUE ? YES : NO; + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, awtWindow); + } + (*env)->DeleteLocalRef(env, platformWindow); + } + +#ifdef DEBUG + NSLog(@"=== getJavaWindowTabbingMode: %d ===", result); +#endif + + return result ? NSWindowTabbingModeAutomatic : NSWindowTabbingModeDisallowed; } + (AWTWindow *) getTopmostWindowUnderMouse { @@ -490,26 +778,13 @@ - (void) dealloc { self.javaPlatformWindow = nil; self.nsWindow = nil; self.ownerWindow = nil; + self.currentDisplayID = nil; + self.customTitleBarConstraints = nil; + self.customTitleBarHeightConstraint = nil; + self.customTitleBarButtonCenterXConstraints = nil; [super dealloc]; } -// Tests whether window is blocked by modal dialog/window -- (BOOL) isBlocked { - BOOL isBlocked = NO; - - JNIEnv *env = [ThreadUtilities getJNIEnv]; - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - GET_CPLATFORM_WINDOW_CLASS_RETURN(isBlocked); - DECLARE_METHOD_RETURN(jm_isBlocked, jc_CPlatformWindow, "isBlocked", "()Z", isBlocked); - isBlocked = (*env)->CallBooleanMethod(env, platformWindow, jm_isBlocked) == JNI_TRUE ? YES : NO; - CHECK_EXCEPTION(); - (*env)->DeleteLocalRef(env, platformWindow); - } - - return isBlocked; -} - // Test whether window is simple window and owned by embedded frame - (BOOL) isSimpleWindowOwnedByEmbeddedFrame { BOOL isSimpleWindowOwnedByEmbeddedFrame = NO; @@ -549,55 +824,115 @@ + (BOOL) isJavaPlatformWindowVisible:(NSWindow *)window { return isVisible; } -// Orders window children based on the current focus state -- (void) orderChildWindows:(BOOL)focus { -AWT_ASSERT_APPKIT_THREAD; +- (BOOL) delayShowing { + AWT_ASSERT_APPKIT_THREAD; - if (self.isMinimizing || [self isBlocked]) { - // Do not perform any ordering, if iconify is in progress - // or the window is blocked by a modal window + return ownerWindow != nil && + ([ownerWindow delayShowing] || !ownerWindow.nsWindow.onActiveSpace) && + !nsWindow.visible; +} + +- (BOOL) checkBlockingAndOrder { + AWT_ASSERT_APPKIT_THREAD; + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + GET_CPLATFORM_WINDOW_CLASS_RETURN(NO); + DECLARE_METHOD_RETURN(jm_checkBlockingAndOrder, jc_CPlatformWindow, "checkBlockingAndOrder", "()V", NO); + (*env)->CallVoidMethod(env, platformWindow, jm_checkBlockingAndOrder); + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, platformWindow); + } + return YES; +} + ++ (void)activeSpaceDidChange { + AWT_ASSERT_APPKIT_THREAD; + + if (fullScreenTransitionInProgress) { + orderingScheduled = YES; return; } + // show delayed windows + for (NSWindow *window in NSApp.windows) { + if ([AWTWindow isJavaPlatformWindowVisible:window] && !window.visible) { + AWTWindow *awtWindow = (AWTWindow *)[window delegate]; + while (awtWindow.ownerWindow != nil) { + awtWindow = awtWindow.ownerWindow; + } + if (awtWindow.nsWindow.visible && awtWindow.nsWindow.onActiveSpace) { + [awtWindow checkBlockingAndOrder]; + } + } + } +} + +- (void) processVisibleChildren:(void(^)(AWTWindow*))action { NSEnumerator *windowEnumerator = [[NSApp windows]objectEnumerator]; NSWindow *window; while ((window = [windowEnumerator nextObject]) != nil) { if ([AWTWindow isJavaPlatformWindowVisible:window]) { AWTWindow *awtWindow = (AWTWindow *)[window delegate]; - AWTWindow *owner = awtWindow.ownerWindow; - if (IS(awtWindow.styleBits, ALWAYS_ON_TOP)) { - // Do not order 'always on top' windows - continue; - } - while (awtWindow.ownerWindow != nil) { - if (awtWindow.ownerWindow == self) { - if (focus) { - // Move the childWindow to floating level - // so it will appear in front of its - // parent which owns the focus - [window setLevel:NSFloatingWindowLevel]; - } else { - // Focus owner has changed, move the childWindow - // back to normal window level - [window setLevel:NSNormalWindowLevel]; - } - // The childWindow should be displayed in front of - // its nearest parentWindow - [window orderWindow:NSWindowAbove relativeTo:[owner.nsWindow windowNumber]]; + AWTWindow *parent = awtWindow.ownerWindow; + while (parent != nil) { + if (parent == self) { + action(awtWindow); break; } - awtWindow = awtWindow.ownerWindow; + parent = parent.ownerWindow; } } } } +// Orders window children based on the current focus state +- (void) orderChildWindows:(BOOL)focus { +AWT_ASSERT_APPKIT_THREAD; + + if (self.isMinimizing) { + // Do not perform any ordering, if iconify is in progress + return; + } + + [self processVisibleChildren:^void(AWTWindow* child){ + // Do not order 'always on top' windows + if (!IS(child.styleBits, ALWAYS_ON_TOP)) { + NSWindow *window = child.nsWindow; + NSWindow *owner = child.ownerWindow.nsWindow; + if (focus) { + // Move the childWindow to floating level + // so it will appear in front of its + // parent which owns the focus + [window setLevel:NSFloatingWindowLevel]; + } else { + // Focus owner has changed, move the childWindow + // back to normal window level + [window setLevel:NSNormalWindowLevel]; + } + } + }]; +} + // NSWindow overrides - (BOOL) canBecomeKeyWindow { AWT_ASSERT_APPKIT_THREAD; return self.isEnabled && (IS(self.styleBits, SHOULD_BECOME_KEY) || [self isSimpleWindowOwnedByEmbeddedFrame]); } +- (void) becomeKeyWindow { + AWT_ASSERT_APPKIT_THREAD; + + // Reset current cursor in CCursorManager such that any following mouse update event + // restores the correct cursor to the frame context specific one. + JNIEnv *env = [ThreadUtilities getJNIEnv]; + DECLARE_CLASS(jc_CCursorManager, "sun/lwawt/macosx/CCursorManager"); + DECLARE_STATIC_METHOD(sjm_resetCurrentCursor, jc_CCursorManager, "resetCurrentCursor", "()V"); + (*env)->CallStaticVoidMethod(env, jc_CCursorManager, sjm_resetCurrentCursor); + CHECK_EXCEPTION(); +} + - (BOOL) canBecomeMainWindow { AWT_ASSERT_APPKIT_THREAD; if (!self.isEnabled) { @@ -606,15 +941,7 @@ - (BOOL) canBecomeMainWindow { // We should bring up the modal dialog manually [AWTToolkit eventCountPlusPlus]; - JNIEnv *env = [ThreadUtilities getJNIEnv]; - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - GET_CPLATFORM_WINDOW_CLASS_RETURN(NO); - DECLARE_METHOD_RETURN(jm_checkBlockingAndOrder, jc_CPlatformWindow, "checkBlockingAndOrder", "()Z", NO); - (*env)->CallBooleanMethod(env, platformWindow, jm_checkBlockingAndOrder); - CHECK_EXCEPTION(); - (*env)->DeleteLocalRef(env, platformWindow); - } + if (![self checkBlockingAndOrder]) return NO; } return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_MAIN); @@ -628,21 +955,68 @@ - (BOOL) worksWhenModal { // NSWindowDelegate methods -- (void) _deliverMoveResizeEvent { -AWT_ASSERT_APPKIT_THREAD; +- (void)_windowDidBecomeVisible { + self.currentDisplayID = [AWTWindow getNSWindowDisplayID_AppKitThread:nsWindow]; +} + +- (void)_displayChanged:(BOOL)profileOnly { + AWT_ASSERT_APPKIT_THREAD; + if (!profileOnly) { + NSNumber* newDisplayID = [AWTWindow getNSWindowDisplayID_AppKitThread:nsWindow]; + if (newDisplayID == nil) { + // Do not proceed with unset window display id + // to avoid receiving wrong boundary values + return; + } + + if (self.currentDisplayID == nil) { + // Do not trigger notification at first initialization + self.currentDisplayID = newDisplayID; + return; + } + + if ([self.currentDisplayID isEqualToNumber: newDisplayID]) { + return; + } + self.currentDisplayID = newDisplayID; + } - // deliver the event if this is a user-initiated live resize or as a side-effect - // of a Java initiated resize, because AppKit can override the bounds and force - // the bounds of the window to avoid the Dock or remain on screen. - [AWTToolkit eventCountPlusPlus]; JNIEnv *env = [ThreadUtilities getJNIEnv]; jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); if (platformWindow == NULL) { - // TODO: create generic AWT assert + NSLog(@"[AWTWindow _displayChanged]: platformWindow == NULL"); + return; + } + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_METHOD(jm_displayChanged, jc_CPlatformWindow, "displayChanged", "(Z)V"); + (*env)->CallVoidMethod(env, platformWindow, jm_displayChanged, profileOnly); + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, platformWindow); +} + +- (void) _deliverMoveResizeEvent { + AWT_ASSERT_APPKIT_THREAD; + + // deliver the event if this is a user-initiated live resize or as a side-effect + // of a Java initiated resize, because AppKit can override the bounds and force + // the bounds of the window to avoid the Dock or remain on screen. + [AWTToolkit eventCountPlusPlus]; + JNIEnv *env = [ThreadUtilities getJNIEnv]; + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow == NULL) { + NSLog(@"[AWTWindow _deliverMoveResizeEvent]: platformWindow == NULL"); + return; + } + NSRect frame; + @try { + frame = ConvertNSScreenRect(env, [self.nsWindow frame]); + } @catch (NSException *e) { + NSLog(@"WARNING: suppressed exception from ConvertNSScreenRect() in [AWTWindow _deliverMoveResizeEvent]"); + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + [NSApplicationAWT logException:e forProcess:processInfo]; + return; } - NSRect frame = ConvertNSScreenRect(env, [self.nsWindow frame]); - GET_CPLATFORM_WINDOW_CLASS(); DECLARE_METHOD(jm_deliverMoveResizeEvent, jc_CPlatformWindow, "deliverMoveResizeEvent", "(IIIIZ)V"); (*env)->CallVoidMethod(env, platformWindow, jm_deliverMoveResizeEvent, @@ -665,6 +1039,12 @@ - (void)windowDidMove:(NSNotification *)notification { - (void)windowDidResize:(NSNotification *)notification { AWT_ASSERT_APPKIT_THREAD; + if (self.isEnterFullScreen && ignoreResizeWindowDuringAnotherWindowEnd) { +#ifdef DEBUG + NSLog(@"=== Native.windowDidResize: %@ | ignored in transition to fullscreen ===", self.nsWindow.title); +#endif + return; + } [self _deliverMoveResizeEvent]; } @@ -689,24 +1069,14 @@ - (NSRect)windowWillUseStandardFrame:(NSWindow *)window - (void) iconifyChildWindows:(BOOL)iconify { AWT_ASSERT_APPKIT_THREAD; - NSEnumerator *windowEnumerator = [[NSApp windows]objectEnumerator]; - NSWindow *window; - while ((window = [windowEnumerator nextObject]) != nil) { - if ([AWTWindow isJavaPlatformWindowVisible:window]) { - AWTWindow *awtWindow = (AWTWindow *)[window delegate]; - while (awtWindow.ownerWindow != nil) { - if (awtWindow.ownerWindow == self) { - if (iconify) { - [window orderOut:window]; - } else { - [window orderFront:window]; - } - break; - } - awtWindow = awtWindow.ownerWindow; - } + [self processVisibleChildren:^void(AWTWindow* child){ + NSWindow *window = child.nsWindow; + if (iconify) { + [window orderOut:window]; + } else { + [window orderFront:window]; } - } + }]; } - (void) _deliverIconify:(BOOL)iconify { @@ -777,19 +1147,10 @@ - (void) windowDidBecomeMain: (NSNotification *) notification { AWT_ASSERT_APPKIT_THREAD; [AWTToolkit eventCountPlusPlus]; #ifdef DEBUG - NSLog(@"became main: %d %@ %@ %d", [self.nsWindow isKeyWindow], [self.nsWindow title], [self menuBarForWindow], self.keyNotificationRecd); + NSLog(@"became main: %d %@ %@", [self.nsWindow isKeyWindow], [self.nsWindow title], [self menuBarForWindow]); #endif - // if for some reason, no KEY notification is received but this main window is also a key window - // then we need to execute the KEY notification functionality. - if(self.keyNotificationRecd != YES && [self.nsWindow isKeyWindow]) { - [self doWindowDidBecomeKey]; - } - self.keyNotificationRecd = NO; - - if (![self.nsWindow isKeyWindow]) { - [self activateWindowMenuBar]; - } + [self activateWindowMenuBar]; JNIEnv *env = [ThreadUtilities getJNIEnv]; jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); @@ -800,6 +1161,8 @@ - (void) windowDidBecomeMain: (NSNotification *) notification { CHECK_EXCEPTION(); (*env)->DeleteLocalRef(env, platformWindow); } + + [self orderChildWindows:YES]; } - (void) windowDidBecomeKey: (NSNotification *) notification { @@ -808,22 +1171,29 @@ - (void) windowDidBecomeKey: (NSNotification *) notification { #ifdef DEBUG NSLog(@"became key: %d %@ %@", [self.nsWindow isMainWindow], [self.nsWindow title], [self menuBarForWindow]); #endif - [self doWindowDidBecomeKey]; - self.keyNotificationRecd = YES; -} - -- (void) doWindowDidBecomeKey { -AWT_ASSERT_APPKIT_THREAD; AWTWindow *opposite = [AWTWindow lastKeyWindow]; if (![self.nsWindow isMainWindow]) { - [self activateWindowMenuBar]; + [self makeRelevantAncestorMain]; } [AWTWindow setLastKeyWindow:nil]; [self _deliverWindowFocusEvent:YES oppositeWindow: opposite]; - [self orderChildWindows:YES]; +} + +- (void) makeRelevantAncestorMain { + NSWindow *nativeWindow; + AWTWindow *awtWindow = self; + + do { + nativeWindow = awtWindow.nsWindow; + if ([nativeWindow canBecomeMainWindow]) { + [nativeWindow makeMainWindow]; + break; + } + awtWindow = awtWindow.ownerWindow; + } while (awtWindow); } - (void) activateWindowMenuBar { @@ -867,7 +1237,7 @@ - (void) windowDidResignKey: (NSNotification *) notification { #ifdef DEBUG NSLog(@"resigned key: %d %@ %@", [self.nsWindow isMainWindow], [self.nsWindow title], [self menuBarForWindow]); #endif - if (![self.nsWindow isMainWindow]) { + if (![self.nsWindow isMainWindow] || [NSApp keyWindow] == self.nsWindow) { [self deactivateWindow]; } } @@ -881,6 +1251,9 @@ - (void) windowDidResignMain: (NSNotification *) notification { if (![self.nsWindow isKeyWindow]) { [self deactivateWindow]; } + + [self.javaMenuBar deactivate]; + [self orderChildWindows:NO]; } - (void) deactivateWindow { @@ -888,20 +1261,20 @@ - (void) deactivateWindow { #ifdef DEBUG NSLog(@"deactivating window: %@", [self.nsWindow title]); #endif - [self.javaMenuBar deactivate]; // the new key window NSWindow *keyWindow = [NSApp keyWindow]; AWTWindow *opposite = nil; if ([AWTWindow isAWTWindow: keyWindow]) { - opposite = (AWTWindow *)[keyWindow delegate]; + if (keyWindow != self.nsWindow) { + opposite = (AWTWindow *)[keyWindow delegate]; + } [AWTWindow setLastKeyWindow: self]; } else { [AWTWindow setLastKeyWindow: nil]; } [self _deliverWindowFocusEvent:NO oppositeWindow: opposite]; - [self orderChildWindows:NO]; } - (BOOL)windowShouldClose:(id)sender { @@ -938,163 +1311,768 @@ - (void)_notifyFullScreenOp:(jint)op withEnv:(JNIEnv *)env { } } +// this is required to move owned windows to the full-screen space when owner goes to full-screen mode +- (void)allowMovingChildrenBetweenSpaces:(BOOL)allow { + [self processVisibleChildren:^void(AWTWindow* child){ + NSWindow *window = child.nsWindow; + NSWindowCollectionBehavior behavior = window.collectionBehavior; + behavior &= ~(NSWindowCollectionBehaviorManaged | NSWindowCollectionBehaviorTransient); + behavior |= allow ? NSWindowCollectionBehaviorTransient : NSWindowCollectionBehaviorManaged; + window.collectionBehavior = behavior; + }]; +} + +- (void) fullScreenTransitionStarted { + fullScreenTransitionInProgress = YES; +} + +- (void) fullScreenTransitionFinished { + fullScreenTransitionInProgress = NO; + if (orderingScheduled) { + orderingScheduled = NO; + [self checkBlockingAndOrder]; + } +} + +- (CGFloat) customTitleBarHeight { + CGFloat h = _customTitleBarHeight; + if (h < 0.0f) { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + GET_CPLATFORM_WINDOW_CLASS_RETURN(YES); + DECLARE_FIELD_RETURN(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;", 0.0f); + DECLARE_CLASS_RETURN(jc_Window, "java/awt/Window", 0.0f); + DECLARE_METHOD_RETURN(jm_internalCustomTitleBarHeight, jc_Window, "internalCustomTitleBarHeight", "()F", 0.0f); + DECLARE_METHOD_RETURN(jm_internalCustomTitleBarControlsVisible, jc_Window, "internalCustomTitleBarControlsVisible", "()Z", 0.0f); + + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (!platformWindow) return 0.0f; + jobject target = (*env)->GetObjectField(env, platformWindow, jf_target); + if (target) { + h = (CGFloat) (*env)->CallFloatMethod(env, target, jm_internalCustomTitleBarHeight); + self.customTitleBarControlsVisible = (BOOL) (*env)->CallBooleanMethod(env, target, jm_internalCustomTitleBarControlsVisible); + (*env)->DeleteLocalRef(env, target); + } + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, platformWindow); + if (h < 0.0f) h = 0.0f; + _customTitleBarHeight = h; + } + return h; +} + +- (BOOL) isCustomTitleBarEnabled { + CGFloat h = _customTitleBarHeight; + if (h < 0.0f) h = self.customTitleBarHeight; + return h > 0.0f; +} + +- (void) updateCustomTitleBarInsets:(BOOL)hasControls { + CGFloat leftInset; + if (hasControls) { + CGFloat shrinkingFactor = self.customTitleBarButtonShrinkingFactor; + CGFloat horizontalButtonOffset = shrinkingFactor * DefaultHorizontalTitleBarButtonOffset; + leftInset = self.customTitleBarHeight + 2.0f * horizontalButtonOffset; + } else leftInset = 0.0f; + + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_FIELD(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;"); + DECLARE_CLASS(jc_Window, "java/awt/Window"); + DECLARE_METHOD(jm_internalCustomTitleBarUpdateInsets, jc_Window, "internalCustomTitleBarUpdateInsets", "(FF)V"); + + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (!platformWindow) return; + jobject target = (*env)->GetObjectField(env, platformWindow, jf_target); + if (target) { + (*env)->CallVoidMethod(env, target, jm_internalCustomTitleBarUpdateInsets, (jfloat) leftInset, (jfloat) 0.0f); + (*env)->DeleteLocalRef(env, target); + } + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, platformWindow); +} + +- (void)windowWillEnterFullScreen:(NSNotification *)notification { + [self fullScreenTransitionStarted]; + [self allowMovingChildrenBetweenSpaces:YES]; + + self.isEnterFullScreen = YES; + + if (self.isCustomTitleBarEnabled) { + [self resetCustomTitleBar]; + } + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_METHOD(jm_windowWillEnterFullScreen, jc_CPlatformWindow, "windowWillEnterFullScreen", "()V"); + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + (*env)->CallVoidMethod(env, platformWindow, jm_windowWillEnterFullScreen); + CHECK_EXCEPTION(); + [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_WILL_ENTER withEnv:env]; + (*env)->DeleteLocalRef(env, platformWindow); + } +} + +- (void)windowDidEnterFullScreen:(NSNotification *)notification { + self.isEnterFullScreen = YES; + + if (self.isCustomTitleBarEnabled) { + [self forceHideCustomTitleBarTitle:NO]; + [self updateCustomTitleBarInsets:NO]; + + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + NSString *newFullScreenControls = [PropertiesUtilities + javaSystemPropertyForKey:@"apple.awt.newFullScreenControls" withEnv:env]; + if ([@"true" isCaseInsensitiveLike:newFullScreenControls]) { + [self setWindowFullScreenControls]; + } + } + [self allowMovingChildrenBetweenSpaces:NO]; + [self fullScreenTransitionFinished]; + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_METHOD(jm_windowDidEnterFullScreen, jc_CPlatformWindow, "windowDidEnterFullScreen", "()V"); + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + (*env)->CallVoidMethod(env, platformWindow, jm_windowDidEnterFullScreen); + CHECK_EXCEPTION(); + [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_DID_ENTER withEnv:env]; + (*env)->DeleteLocalRef(env, platformWindow); + } + [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows]; +} + +- (void)windowWillExitFullScreen:(NSNotification *)notification { + self.isEnterFullScreen = NO; + + [self fullScreenTransitionStarted]; + + if (self.isCustomTitleBarEnabled) { + [self setWindowControlsHidden:YES]; + [self updateCustomTitleBarInsets:self.customTitleBarControlsVisible]; + [self forceHideCustomTitleBarTitle:YES]; + } + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_METHOD(jm_windowWillExitFullScreen, jc_CPlatformWindow, "windowWillExitFullScreen", "()V"); + if (jm_windowWillExitFullScreen == NULL) { + GET_CPLATFORM_WINDOW_CLASS(); + jm_windowWillExitFullScreen = (*env)->GetMethodID(env, jc_CPlatformWindow, "windowWillExitFullScreen", "()V"); + } + CHECK_NULL(jm_windowWillExitFullScreen); + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + (*env)->CallVoidMethod(env, platformWindow, jm_windowWillExitFullScreen); + CHECK_EXCEPTION(); + [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_WILL_EXIT withEnv:env]; + (*env)->DeleteLocalRef(env, platformWindow); + } +} + +- (void)windowDidExitFullScreen:(NSNotification *)notification { + [self resetWindowFullScreenControls]; + + self.isEnterFullScreen = NO; + + [self fullScreenTransitionFinished]; + + if (self.isCustomTitleBarEnabled) { + [self setUpCustomTitleBar]; + } + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_METHOD(jm_windowDidExitFullScreen, jc_CPlatformWindow, "windowDidExitFullScreen", "()V"); + (*env)->CallVoidMethod(env, platformWindow, jm_windowDidExitFullScreen); + CHECK_EXCEPTION(); + [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_DID_EXIT withEnv:env]; + (*env)->DeleteLocalRef(env, platformWindow); + } + [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows]; +} + +- (void)sendEvent:(NSEvent *)event { + if ([event type] == NSLeftMouseDown || + [event type] == NSRightMouseDown || + [event type] == NSOtherMouseDown) { + NSPoint p = [NSEvent mouseLocation]; + NSRect frame = [self.nsWindow frame]; + NSRect contentRect = [self.nsWindow contentRectForFrameRect:frame]; + + // Check if the click happened in the non-client area (title bar) + if (p.y >= (frame.origin.y + contentRect.size.height)) { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); + if (platformWindow != NULL) { + // Currently, no need to deliver the whole NSEvent. + GET_CPLATFORM_WINDOW_CLASS(); + DECLARE_METHOD(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V"); + (*env)->CallVoidMethod(env, platformWindow, jm_deliverNCMouseDown); + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, platformWindow); + } + } + } +} + +- (void)constrainSize:(NSSize*)size { + float minWidth = 0.f, minHeight = 0.f; + + if (IS(self.styleBits, DECORATED)) { + NSRect frame = [self.nsWindow frame]; + NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self.nsWindow styleMask]]; + + float top = frame.size.height - contentRect.size.height; + float left = contentRect.origin.x - frame.origin.x; + float bottom = contentRect.origin.y - frame.origin.y; + float right = frame.size.width - (contentRect.size.width + left); + + // Speculative estimation: 80 - enough for window decorations controls + minWidth += left + right + 80; + minHeight += top + bottom; + } + + minWidth = MAX(1.f, minWidth); + minHeight = MAX(1.f, minHeight); + + size->width = MAX(size->width, minWidth); + size->height = MAX(size->height, minHeight); +} + +- (void) setEnabled: (BOOL)flag { + self.isEnabled = flag; + + if (IS(self.styleBits, CLOSEABLE)) { + [[self.nsWindow standardWindowButton:NSWindowCloseButton] setEnabled: flag]; + } + + if (IS(self.styleBits, MINIMIZABLE)) { + [[self.nsWindow standardWindowButton:NSWindowMiniaturizeButton] setEnabled: flag]; + } + + if (IS(self.styleBits, ZOOMABLE)) { + [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled: flag]; + } + + if (IS(self.styleBits, RESIZABLE)) { + [self updateMinMaxSize:flag]; + [self.nsWindow setShowsResizeIndicator:flag]; + } +} + ++ (void) setLastKeyWindow:(AWTWindow *)window { + [window retain]; + [lastKeyWindow release]; + lastKeyWindow = window; +} + ++ (AWTWindow *) lastKeyWindow { + return lastKeyWindow; +} + +static const CGFloat DefaultHorizontalTitleBarButtonOffset = 20.0; + +- (CGFloat) customTitleBarButtonShrinkingFactor { + CGFloat minimumHeightWithoutShrinking = 28.0; // This is the smallest macOS title bar availabe with public APIs as of Monterey + CGFloat shrinkingFactor = fmin(self.customTitleBarHeight / minimumHeightWithoutShrinking, 1.0); + return shrinkingFactor; +} + +- (void) setUpCustomTitleBar { + if (self.customTitleBarConstraints != nil) { + [self resetCustomTitleBar]; + } + /** + * The view hierarchy normally looks as follows: + * NSThemeFrame + * ├─NSView (content view) + * └─NSTitlebarContainerView + * ├─_NSTitlebarDecorationView (only on Mojave 10.14 and newer) + * └─NSTitlebarView + * ├─NSVisualEffectView (only on Big Sur 11 and newer) + * ├─NSView (only on Big Sur and newer) + * ├─_NSThemeCloseWidget - Close + * ├─_NSThemeZoomWidget - Full Screen + * ├─_NSThemeWidget - Minimize (note the different order compared to their layout) + * └─AWTWindowDragView (we will create this) + * + * But the order and presence of decorations and effects has been unstable across different macOS versions, + * even patch upgrades, which is why the code below uses scans instead of indexed access + */ + NSView* closeButtonView = [self.nsWindow standardWindowButton:NSWindowCloseButton]; + NSView* zoomButtonView = [self.nsWindow standardWindowButton:NSWindowZoomButton]; + NSView* miniaturizeButtonView = [self.nsWindow standardWindowButton:NSWindowMiniaturizeButton]; + if (!closeButtonView || !zoomButtonView || !miniaturizeButtonView) { + NSLog(@"WARNING: setUpCustomTitleBar closeButtonView=%@, zoomButtonView=%@, miniaturizeButtonView=%@", + closeButtonView, zoomButtonView, miniaturizeButtonView); + return; + } + NSView* titlebar = closeButtonView.superview; + NSView* titlebarContainer = titlebar.superview; + NSView* themeFrame = titlebarContainer.superview; + if (!themeFrame) { + NSLog(@"WARNING: setUpCustomTitleBar titlebar=%@, titlebarContainer=%@, themeFrame=%@", + titlebar, titlebarContainer, themeFrame); + return; + } + + self.customTitleBarConstraints = [[NSMutableArray alloc] init]; + titlebarContainer.translatesAutoresizingMaskIntoConstraints = NO; + self.customTitleBarHeightConstraint = [titlebarContainer.heightAnchor constraintEqualToConstant:self.customTitleBarHeight]; + [self.customTitleBarConstraints addObjectsFromArray:@[ + [titlebarContainer.leftAnchor constraintEqualToAnchor:themeFrame.leftAnchor], + [titlebarContainer.widthAnchor constraintEqualToAnchor:themeFrame.widthAnchor], + [titlebarContainer.topAnchor constraintEqualToAnchor:themeFrame.topAnchor], + self.customTitleBarHeightConstraint, + ]]; + + [self.nsWindow setIgnoreMove:YES]; + + AWTWindowDragView* windowDragView = [[AWTWindowDragView alloc] initWithPlatformWindow:self.javaPlatformWindow]; + [titlebar addSubview:windowDragView positioned:NSWindowBelow relativeTo:closeButtonView]; + + [@[titlebar, windowDragView] enumerateObjectsUsingBlock:^(NSView* view, NSUInteger index, BOOL* stop) + { + view.translatesAutoresizingMaskIntoConstraints = NO; + [self.customTitleBarConstraints addObjectsFromArray:@[ + [view.leftAnchor constraintEqualToAnchor:titlebarContainer.leftAnchor], + [view.rightAnchor constraintEqualToAnchor:titlebarContainer.rightAnchor], + [view.topAnchor constraintEqualToAnchor:titlebarContainer.topAnchor], + [view.bottomAnchor constraintEqualToAnchor:titlebarContainer.bottomAnchor], + ]]; + }]; + + CGFloat shrinkingFactor = self.customTitleBarButtonShrinkingFactor; + CGFloat horizontalButtonOffset = shrinkingFactor * DefaultHorizontalTitleBarButtonOffset; + self.customTitleBarButtonCenterXConstraints = [[NSMutableArray alloc] initWithCapacity:3]; + [@[closeButtonView, miniaturizeButtonView, zoomButtonView] enumerateObjectsUsingBlock:^(NSView* button, NSUInteger index, BOOL* stop) + { + button.translatesAutoresizingMaskIntoConstraints = NO; + NSLayoutConstraint* buttonCenterXConstraint = [button.centerXAnchor constraintEqualToAnchor:titlebarContainer.leftAnchor + constant:(self.customTitleBarHeight / 2.0 + (index * horizontalButtonOffset))]; + [self.customTitleBarButtonCenterXConstraints addObject:buttonCenterXConstraint]; + [self.customTitleBarConstraints addObjectsFromArray:@[ + [button.widthAnchor constraintLessThanOrEqualToAnchor:titlebarContainer.heightAnchor multiplier:0.5], + // Those corrections are required to keep the icons perfectly round because macOS adds a constant 2 px in resulting height to their frame + [button.heightAnchor constraintEqualToAnchor: button.widthAnchor multiplier:14.0/12.0 constant:-2.0], + [button.centerYAnchor constraintEqualToAnchor:titlebarContainer.centerYAnchor], + buttonCenterXConstraint, + ]]; + }]; + + [NSLayoutConstraint activateConstraints:self.customTitleBarConstraints]; + // These properties are already retained, release them so that retainCount = 1 + [self.customTitleBarConstraints release]; + [self.customTitleBarButtonCenterXConstraints release]; + + [self setWindowControlsHidden:!self.customTitleBarControlsVisible]; + [self updateCustomTitleBarInsets:self.customTitleBarControlsVisible]; +} + +- (void) updateCustomTitleBarConstraints { + self.customTitleBarHeightConstraint.constant = self.customTitleBarHeight; + CGFloat shrinkingFactor = self.customTitleBarButtonShrinkingFactor; + CGFloat horizontalButtonOffset = shrinkingFactor * DefaultHorizontalTitleBarButtonOffset; + [self.customTitleBarButtonCenterXConstraints enumerateObjectsUsingBlock:^(NSLayoutConstraint* buttonConstraint, NSUInteger index, BOOL *stop) + { + buttonConstraint.constant = (self.customTitleBarHeight / 2.0 + (index * horizontalButtonOffset)); + }]; + [self setWindowControlsHidden:!self.customTitleBarControlsVisible]; + [self updateCustomTitleBarInsets:self.customTitleBarControlsVisible]; + + [self updateFullScreenButtons]; +} + +- (void) resetCustomTitleBar { + // See [setUpCustomTitleBar] for the view hierarchy we're working with + NSView* closeButtonView = [self.nsWindow standardWindowButton:NSWindowCloseButton]; + NSView* titlebar = closeButtonView.superview; + NSView* titlebarContainer = titlebar.superview; + if (!titlebarContainer) { + NSLog(@"WARNING: resetCustomTitleBar closeButtonView=%@, titlebar=%@, titlebarContainer=%@", + closeButtonView, titlebar, titlebarContainer); + return; + } + + [NSLayoutConstraint deactivateConstraints:self.customTitleBarConstraints]; + + AWTWindowDragView* windowDragView = nil; + for (NSView* view in titlebar.subviews) { + if ([view isMemberOfClass:[AWTWindowDragView class]]) { + windowDragView = view; + } + } + + if (windowDragView != nil) { + [windowDragView removeFromSuperview]; + } + + titlebarContainer.translatesAutoresizingMaskIntoConstraints = YES; + titlebar.translatesAutoresizingMaskIntoConstraints = YES; + + self.customTitleBarConstraints = nil; + self.customTitleBarHeightConstraint = nil; + self.customTitleBarButtonCenterXConstraints = nil; + + [self setWindowControlsHidden:NO]; + [self updateCustomTitleBarInsets:NO]; + + [self.nsWindow setIgnoreMove:NO]; +} + +- (void) setWindowControlsHidden: (BOOL) hidden { + if (_fullScreenOriginalButtons != nil) { + [_fullScreenOriginalButtons.window.contentView setHidden:NO]; + _fullScreenButtons.hidden = YES; + } + + [self.nsWindow standardWindowButton:NSWindowCloseButton].hidden = hidden; + [self.nsWindow standardWindowButton:NSWindowZoomButton].hidden = hidden; + [self.nsWindow standardWindowButton:NSWindowMiniaturizeButton].hidden = hidden; +} + +- (void) setWindowFullScreenControls { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + NSString *dfmMode = [PropertiesUtilities javaSystemPropertyForKey:@"apple.awt.distraction.free.mode" withEnv:env]; + if ([@"true" isCaseInsensitiveLike:dfmMode]) { + return; + } + + NSView* oldCloseButton = [self.nsWindow standardWindowButton:NSWindowCloseButton]; + _fullScreenOriginalButtons = oldCloseButton.superview; + + NSRect closeButtonRect = [oldCloseButton frame]; + NSRect miniaturizeButtonRect = [[self.nsWindow standardWindowButton:NSWindowMiniaturizeButton] frame]; + NSRect zoomButtonRect = [[self.nsWindow standardWindowButton:NSWindowZoomButton] frame]; + + for (NSWindow* window in [[NSApplication sharedApplication] windows]) { + if ([window isKindOfClass:NSClassFromString(@"NSToolbarFullScreenWindow")]) { + [window.contentView setHidden:YES]; + } + } + + _fullScreenButtons = [[AWTButtonsView alloc] init]; + [self updateFullScreenButtons]; + [_fullScreenButtons addTrackingArea:[[NSTrackingArea alloc] initWithRect:[_fullScreenButtons visibleRect] + options:(NSTrackingActiveAlways | NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved) + owner:_fullScreenButtons userInfo:nil]]; + + NSUInteger masks = [self.nsWindow styleMask]; + + NSButton *closeButton = [NSWindow standardWindowButton:NSWindowCloseButton forStyleMask:masks]; + [closeButton setFrame:closeButtonRect]; + [_fullScreenButtons addSubview:closeButton]; + + NSButton *miniaturizeButton = [NSWindow standardWindowButton:NSWindowMiniaturizeButton forStyleMask:masks]; + [miniaturizeButton setFrame:miniaturizeButtonRect]; + [_fullScreenButtons addSubview:miniaturizeButton]; + + NSButton *zoomButton = [NSWindow standardWindowButton:NSWindowZoomButton forStyleMask:masks]; + [zoomButton setFrame:zoomButtonRect]; + [_fullScreenButtons addSubview:zoomButton]; + + [self.nsWindow.contentView addSubview:_fullScreenButtons]; + + [self updateColors]; +} + +- (void)updateColors { + if (_fullScreenButtons != nil) { + [(AWTButtonsView *)_fullScreenButtons configureColors]; + } +} + +- (void)updateFullScreenButtons { + if (_fullScreenButtons == nil || _fullScreenOriginalButtons == nil) { + return; + } + + NSView *parent = self.nsWindow.contentView; + CGFloat w = 80; + CGFloat h = _fullScreenOriginalButtons.frame.size.height; + CGFloat x = 6; + CGFloat y = parent.frame.size.height - h - (self.customTitleBarHeight - h) / 2.0; + + [_fullScreenButtons setFrame:NSMakeRect(x, y, w - x, h)]; +} + +- (void)updateFullScreenButtons: (BOOL) dfm { + if (dfm) { + if (_fullScreenButtons == nil || _fullScreenOriginalButtons == nil) { + return; + } + [_fullScreenOriginalButtons.window.contentView setHidden:NO]; + [self resetWindowFullScreenControls]; + } else { + if (!self.isCustomTitleBarEnabled || _fullScreenButtons != nil) { + return; + } + [self setWindowFullScreenControls]; + } +} + +- (void) resetWindowFullScreenControls { + if (_fullScreenButtons != nil) { + [_fullScreenButtons removeFromSuperview]; + _fullScreenButtons = nil; + _fullScreenOriginalButtons = nil; + } +} + +- (BOOL) isFullScreen { + NSUInteger masks = [self.nsWindow styleMask]; + return (masks & NSWindowStyleMaskFullScreen) != 0; +} + +- (void) forceHideCustomTitleBarTitle: (BOOL) hide { + jint bits = self.styleBits; + if (hide) bits &= ~MASK(TITLE_VISIBLE); + [self setPropertiesForStyleBits:bits mask:MASK(TITLE_VISIBLE)]; +} + +- (void) updateCustomTitleBar { + _customTitleBarHeight = -1.0f; // Reset for lazy init + BOOL enabled = self.isCustomTitleBarEnabled; + BOOL fullscreen = self.isFullScreen; + + jint mask = [AWTWindow affectedStyleMaskForCustomTitleBar]; + jint newBits = [AWTWindow overrideStyleBits:self.styleBits customTitleBarEnabled:enabled fullscreen:fullscreen]; + // Copied from nativeSetNSWindowStyleBits: + // The content view must be resized first, otherwise the window will be resized to fit the existing + // content view. + NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:newBits]; + if (!fullscreen) { + NSRect frame = [nsWindow frame]; + NSRect screenContentRect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask]; + NSRect contentFrame = NSMakeRect(screenContentRect.origin.x - frame.origin.x, + screenContentRect.origin.y - frame.origin.y, + screenContentRect.size.width, + screenContentRect.size.height); + nsWindow.contentView.frame = contentFrame; + } + // NSWindowStyleMaskFullScreen bit shouldn't be updated directly + [nsWindow setStyleMask:(((NSWindowStyleMask) styleMask) & ~NSWindowStyleMaskFullScreen | + nsWindow.styleMask & NSWindowStyleMaskFullScreen)]; + // calls methods on NSWindow to change other properties, based on the mask + [self setPropertiesForStyleBits:newBits mask:mask]; + if (!fullscreen && !self.nsWindow.miniaturized) [self _deliverMoveResizeEvent]; + + if (enabled != (self.customTitleBarConstraints != nil)) { + if (!fullscreen) { + if (self.isCustomTitleBarEnabled) { + [self setUpCustomTitleBar]; + } else { + [self resetCustomTitleBar]; + } + } else { + [self updateFullScreenButtons]; + } + } else if (enabled) { + [self updateCustomTitleBarConstraints]; + } +} + +@end // AWTWindow + +@implementation AWTWindowDragView { + BOOL _dragging; +} + +- (id) initWithPlatformWindow:(jobject)javaPlatformWindow { + self = [super init]; + if (self == nil) return nil; // no hope + + self.javaPlatformWindow = javaPlatformWindow; + return self; +} + +- (BOOL) areCustomTitleBarNativeActionsAllowed { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + GET_CPLATFORM_WINDOW_CLASS_RETURN(YES); + DECLARE_FIELD_RETURN(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;", YES); + DECLARE_CLASS_RETURN(jc_Window, "java/awt/Window", YES); + DECLARE_FIELD_RETURN(jf_customTitleBarHitTest, jc_Window, "customTitleBarHitTest", "I", YES); -- (void)windowWillEnterFullScreen:(NSNotification *)notification { - JNIEnv *env = [ThreadUtilities getJNIEnv]; - GET_CPLATFORM_WINDOW_CLASS(); - DECLARE_METHOD(jm_windowWillEnterFullScreen, jc_CPlatformWindow, "windowWillEnterFullScreen", "()V"); jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - (*env)->CallVoidMethod(env, platformWindow, jm_windowWillEnterFullScreen); - CHECK_EXCEPTION(); - [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_WILL_ENTER withEnv:env]; - (*env)->DeleteLocalRef(env, platformWindow); + if (!platformWindow) return YES; + jint hitTest = java_awt_Window_CustomTitleBar_HIT_UNDEFINED; + jobject target = (*env)->GetObjectField(env, platformWindow, jf_target); + if (target) { + hitTest = (jint) (*env)->GetIntField(env, target, jf_customTitleBarHitTest); + (*env)->DeleteLocalRef(env, target); } + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, platformWindow); + return hitTest <= java_awt_Window_CustomTitleBar_HIT_TITLEBAR; } -- (void)windowDidEnterFullScreen:(NSNotification *)notification { - JNIEnv *env = [ThreadUtilities getJNIEnv]; - GET_CPLATFORM_WINDOW_CLASS(); - DECLARE_METHOD(jm_windowDidEnterFullScreen, jc_CPlatformWindow, "windowDidEnterFullScreen", "()V"); - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - (*env)->CallVoidMethod(env, platformWindow, jm_windowDidEnterFullScreen); - CHECK_EXCEPTION(); - [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_DID_ENTER withEnv:env]; - (*env)->DeleteLocalRef(env, platformWindow); - } - [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows]; +- (BOOL) acceptsFirstMouse:(NSEvent *)event { + return YES; } -- (void)windowWillExitFullScreen:(NSNotification *)notification { - JNIEnv *env = [ThreadUtilities getJNIEnv]; - GET_CPLATFORM_WINDOW_CLASS(); - DECLARE_METHOD(jm_windowWillExitFullScreen, jc_CPlatformWindow, "windowWillExitFullScreen", "()V"); - if (jm_windowWillExitFullScreen == NULL) { - GET_CPLATFORM_WINDOW_CLASS(); - jm_windowWillExitFullScreen = (*env)->GetMethodID(env, jc_CPlatformWindow, "windowWillExitFullScreen", "()V"); - } - CHECK_NULL(jm_windowWillExitFullScreen); - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - (*env)->CallVoidMethod(env, platformWindow, jm_windowWillExitFullScreen); - CHECK_EXCEPTION(); - [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_WILL_EXIT withEnv:env]; - (*env)->DeleteLocalRef(env, platformWindow); +- (BOOL) shouldDelayWindowOrderingForEvent:(NSEvent *)event { + return [[self.window contentView] shouldDelayWindowOrderingForEvent:event]; +} +- (void) mouseDown: (NSEvent *)event { + _dragging = NO; + [[self.window contentView] mouseDown:event]; +} +- (void) mouseUp: (NSEvent *)event { + [[self.window contentView] mouseUp:event]; + if (event.clickCount == 2 && [self areCustomTitleBarNativeActionsAllowed]) { + NSString *action = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleActionOnDoubleClick"]; + if (action != nil && [action caseInsensitiveCompare:@"Minimize"] == NSOrderedSame) { + [self.window performMiniaturize:nil]; + } else if (action == nil || [action caseInsensitiveCompare:@"None"] != NSOrderedSame) { // action == "Maximize" (default) + [self.window performZoom:nil]; + } } } - -- (void)windowDidExitFullScreen:(NSNotification *)notification { - JNIEnv *env = [ThreadUtilities getJNIEnv]; - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - GET_CPLATFORM_WINDOW_CLASS(); - DECLARE_METHOD(jm_windowDidExitFullScreen, jc_CPlatformWindow, "windowDidExitFullScreen", "()V"); - (*env)->CallVoidMethod(env, platformWindow, jm_windowDidExitFullScreen); - CHECK_EXCEPTION(); - [self _notifyFullScreenOp:com_apple_eawt_FullScreenHandler_FULLSCREEN_DID_EXIT withEnv:env]; - (*env)->DeleteLocalRef(env, platformWindow); +- (void) rightMouseDown: (NSEvent *)event { + [[self.window contentView] rightMouseDown:event]; +} +- (void) rightMouseUp: (NSEvent *)event { + [[self.window contentView] rightMouseUp:event]; +} +- (void) otherMouseDown: (NSEvent *)event { + [[self.window contentView] otherMouseDown:event]; +} +- (void) otherMouseUp: (NSEvent *)event { + [[self.window contentView] otherMouseUp:event]; +} +- (void) mouseMoved: (NSEvent *)event { + [[self.window contentView] mouseMoved:event]; +} +- (void) mouseDragged: (NSEvent *)event { + if (!_dragging) { + _dragging = YES; + if ([self areCustomTitleBarNativeActionsAllowed]) { + [self.window performWindowDragWithEvent:event]; + return; + } } - [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows]; + [[self.window contentView] mouseDragged:event]; +} +- (void) rightMouseDragged: (NSEvent *)event { + [[self.window contentView] rightMouseDragged:event]; +} +- (void) otherMouseDragged: (NSEvent *)event { + [[self.window contentView] otherMouseDragged:event]; +} +- (void) mouseEntered: (NSEvent *)event { + [[self.window contentView] mouseEntered:event]; +} +- (void) mouseExited: (NSEvent *)event { + [[self.window contentView] mouseExited:event]; +} +- (void) scrollWheel: (NSEvent*) event { + [[self.window contentView] scrollWheel:event]; +} +- (void) keyDown: (NSEvent *)event { + [[self.window contentView] keyDown:event]; +} +- (void) keyUp: (NSEvent *)event { + [[self.window contentView] keyUp:event]; +} +- (void) flagsChanged: (NSEvent *)event { + [[self.window contentView] flagsChanged:event]; } -- (void)sendEvent:(NSEvent *)event { - if ([event type] == NSEventTypeLeftMouseDown || - [event type] == NSEventTypeRightMouseDown || - [event type] == NSEventTypeOtherMouseDown) { - if ([self isBlocked]) { - // Move parent windows to front and make sure that a child window is displayed - // in front of its nearest parent. - if (self.ownerWindow != nil) { - JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - GET_CPLATFORM_WINDOW_CLASS(); - DECLARE_METHOD(jm_orderAboveSiblings, jc_CPlatformWindow, "orderAboveSiblings", "()V"); - (*env)->CallVoidMethod(env,platformWindow, jm_orderAboveSiblings); - CHECK_EXCEPTION(); - (*env)->DeleteLocalRef(env, platformWindow); - } - } - [self orderChildWindows:YES]; - } +@end - NSPoint p = [NSEvent mouseLocation]; - NSRect frame = [self.nsWindow frame]; - NSRect contentRect = [self.nsWindow contentRectForFrameRect:frame]; +@implementation AWTButtonsView - // Check if the click happened in the non-client area (title bar) - if (p.y >= (frame.origin.y + contentRect.size.height)) { - JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; - jobject platformWindow = (*env)->NewLocalRef(env, self.javaPlatformWindow); - if (platformWindow != NULL) { - // Currently, no need to deliver the whole NSEvent. - GET_CPLATFORM_WINDOW_CLASS(); - DECLARE_METHOD(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V"); - (*env)->CallVoidMethod(env, platformWindow, jm_deliverNCMouseDown); - CHECK_EXCEPTION(); - (*env)->DeleteLocalRef(env, platformWindow); - } - } - } +- (void)dealloc { + [_color release]; + [super dealloc]; } -- (void)constrainSize:(NSSize*)size { - float minWidth = 0.f, minHeight = 0.f; +- (void)mouseEntered:(NSEvent *)theEvent { + [self updateButtons:YES]; +} - if (IS(self.styleBits, DECORATED)) { - NSRect frame = [self.nsWindow frame]; - NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self.nsWindow styleMask]]; +- (void)mouseExited:(NSEvent *)theEvent { + [self updateButtons:NO]; +} - float top = frame.size.height - contentRect.size.height; - float left = contentRect.origin.x - frame.origin.x; - float bottom = contentRect.origin.y - frame.origin.y; - float right = frame.size.width - (contentRect.size.width + left); +- (void)configureColors { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + NSString *javaColor = [PropertiesUtilities javaSystemPropertyForKey:@"apple.awt.newFullScreenControls.background" withEnv:env]; - // Speculative estimation: 80 - enough for window decorations controls - minWidth += left + right + 80; - minHeight += top + bottom; - } + [_color release]; - minWidth = MAX(1.f, minWidth); - minHeight = MAX(1.f, minHeight); + if (javaColor == nil) { + _color = nil; + } else { + int rgb = [javaColor intValue]; - size->width = MAX(size->width, minWidth); - size->height = MAX(size->height, minHeight); + CGFloat alpha = (((rgb >> 24) & 0xff) / 255.0); + CGFloat red = (((rgb >> 16) & 0xff) / 255.0); + CGFloat green = (((rgb >> 8) & 0xff) / 255.0); + CGFloat blue = (((rgb >> 0) & 0xff) / 255.0); + + _color = [NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; + [_color retain]; + } + + [self updateButtons:NO]; } -- (void) setEnabled: (BOOL)flag { - self.isEnabled = flag; +- (void)updateButtons:(BOOL) flag { + _showButtons = flag; - if (IS(self.styleBits, CLOSEABLE)) { - [[self.nsWindow standardWindowButton:NSWindowCloseButton] setEnabled: flag]; + if (self.subviews.count == 3) { + [self updateButton:0 flag:flag]; // close + [self updateButton:1 flag:NO]; // miniaturize + [self updateButton:2 flag:flag]; // zoom } - if (IS(self.styleBits, MINIMIZABLE)) { - [[self.nsWindow standardWindowButton:NSWindowMiniaturizeButton] setEnabled: flag]; + [self setNeedsDisplay:YES]; +} + +- (void)updateButton: (int)index flag:(BOOL) flag { + NSButton *button = (NSButton*)self.subviews[index]; + [button setHidden:!flag]; + [button setHighlighted:flag]; +} + +- (void)drawRect: (NSRect)dirtyRect { + if (self.subviews.count != 3) { + return; } - if (IS(self.styleBits, ZOOMABLE)) { - [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled: flag]; + if (_color == nil) { + [[NSColor whiteColor] setFill]; + } else { + [_color setFill]; } - if (IS(self.styleBits, RESIZABLE)) { - [self updateMinMaxSize:flag]; - [self.nsWindow setShowsResizeIndicator:flag]; + if (_showButtons) { + [self drawButton:1]; // miniaturize + } else { + for (int i = 0; i < 3; i++) { + [self drawButton:i]; + } } } -+ (void) setLastKeyWindow:(AWTWindow *)window { - [window retain]; - [lastKeyWindow release]; - lastKeyWindow = window; -} +- (void)drawButton: (int)index { + NSButton *button = (NSButton*)self.subviews[index]; + NSRect rect = button.frame; + CGFloat r = 12; + CGFloat x = rect.origin.x + (rect.size.width - r) / 2; + CGFloat y = rect.origin.y + (rect.size.height - r) / 2; -+ (AWTWindow *) lastKeyWindow { - return lastKeyWindow; + NSBezierPath* circlePath = [NSBezierPath bezierPath]; + [circlePath appendBezierPathWithOvalInRect:CGRectMake(x, y, r, r)]; + [circlePath fill]; } -@end // AWTWindow +@end /* * Class: sun_lwawt_macosx_CPlatformWindow @@ -1118,7 +2096,7 @@ + (AWTWindow *) lastKeyWindow { /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeCreateNSWindow - * Signature: (JJIIII)J + * Signature: (JJIDDDD)J */ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWindow (JNIEnv *env, jobject obj, jlong contentViewPtr, jlong ownerPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h) @@ -1131,6 +2109,17 @@ + (AWTWindow *) lastKeyWindow { NSView *contentView = OBJC(contentViewPtr); NSRect frameRect = NSMakeRect(x, y, w, h); AWTWindow *owner = [OBJC(ownerPtr) delegate]; + + BOOL isIgnoreMouseEvents = NO; + GET_CPLATFORM_WINDOW_CLASS_RETURN(0); + DECLARE_FIELD_RETURN(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;", 0); + jobject awtWindow = (*env)->GetObjectField(env, obj, jf_target); + if (awtWindow != NULL) { + DECLARE_CLASS_RETURN(jc_Window, "java/awt/Window", 0); + DECLARE_METHOD_RETURN(jm_isIgnoreMouseEvents, jc_Window, "isIgnoreMouseEvents", "()Z", 0); + isIgnoreMouseEvents = (*env)->CallBooleanMethod(env, awtWindow, jm_isIgnoreMouseEvents) == JNI_TRUE ? YES : NO; + (*env)->DeleteLocalRef(env, awtWindow); + } [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ window = [[AWTWindow alloc] initWithPlatformWindow:platformWindow @@ -1140,7 +2129,12 @@ + (AWTWindow *) lastKeyWindow { contentView:contentView]; // the window is released is CPlatformWindow.nativeDispose() - if (window) [window.nsWindow retain]; + if (window) { + [window.nsWindow retain]; + if (isIgnoreMouseEvents) { + [window.nsWindow setIgnoresMouseEvents:YES]; + } + } }]; JNI_COCOA_EXIT(env); @@ -1164,9 +2158,13 @@ + (AWTWindow *) lastKeyWindow { AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + BOOL customTitleBarEnabled = window.isCustomTitleBarEnabled; + BOOL fullscreen = window.isFullScreen; // scans the bit field, and only updates the values requested by the mask // (this implicitly handles the _CALLBACK_PROP_BITMASK case, since those are passive reads) - jint newBits = window.styleBits & ~mask | bits & mask; + jint actualBits = window.styleBits & ~mask | bits & mask; + // Force properties if custom title bar is enabled, but store original value in self.styleBits. + jint newBits = [AWTWindow overrideStyleBits:actualBits customTitleBarEnabled:customTitleBarEnabled fullscreen:fullscreen]; BOOL resized = NO; @@ -1174,7 +2172,8 @@ + (AWTWindow *) lastKeyWindow { // The content view must be resized first, otherwise the window will be resized to fit the existing // content view. if (IS(mask, FULL_WINDOW_CONTENT)) { - if (IS(newBits, FULL_WINDOW_CONTENT) != IS(window.styleBits, FULL_WINDOW_CONTENT)) { + if ((IS(newBits, FULL_WINDOW_CONTENT) != IS(window.styleBits, FULL_WINDOW_CONTENT) || + customTitleBarEnabled) && !fullscreen) { NSRect frame = [nsWindow frame]; NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:newBits]; NSRect screenContentRect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask]; @@ -1185,11 +2184,19 @@ + (AWTWindow *) lastKeyWindow { nsWindow.contentView.frame = contentFrame; resized = YES; } + if (window.isJustCreated) { + // Perform Move/Resize event for just created windows + resized = YES; + window.isJustCreated = NO; + } } // resets the NSWindow's style mask if the mask intersects any of those bits if (mask & MASK(_STYLE_PROP_BITMASK)) { - [nsWindow setStyleMask:[AWTWindow styleMaskForStyleBits:newBits]]; + NSWindowStyleMask styleMask = [AWTWindow styleMaskForStyleBits:newBits]; + NSWindowStyleMask curMask = nsWindow.styleMask; + // NSWindowStyleMaskFullScreen bit shouldn't be updated directly + [nsWindow setStyleMask:(styleMask & ~NSWindowStyleMaskFullScreen | curMask & NSWindowStyleMaskFullScreen)]; } // calls methods on NSWindow to change other properties, based on the mask @@ -1197,7 +2204,7 @@ + (AWTWindow *) lastKeyWindow { [window setPropertiesForStyleBits:newBits mask:mask]; } - window.styleBits = newBits; + window.styleBits = actualBits; if (resized) { [window _deliverMoveResizeEvent]; @@ -1207,6 +2214,34 @@ + (AWTWindow *) lastKeyWindow { JNI_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_CPlatformWindow + * Method: nativeSetNSWindowAppearance + * Signature: (JLjava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowAppearance + (JNIEnv *env, jclass clazz, jlong windowPtr, jstring appearanceName) +{ + JNI_COCOA_ENTER(env); + + NSWindow *nsWindow = OBJC(windowPtr); + // create a global-ref around the appearanceName, so it can be safely passed to Main thread + jobject appearanceNameRef= (*env)->NewGlobalRef(env, appearanceName); + + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + // attach the dispatch thread to the JVM if necessary, and get an env + JNIEnv* blockEnv = [ThreadUtilities getJNIEnvUncached]; + NSAppearance* appearance = [NSAppearance appearanceNamed: + JavaStringToNSString(blockEnv, appearanceNameRef)]; + if (appearance != NULL) { + [nsWindow setAppearance:appearance]; + } + (*blockEnv)->DeleteGlobalRef(blockEnv, appearanceNameRef); + }]; + + JNI_COCOA_EXIT(env); +} + /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeSetNSWindowMenuBar @@ -1223,7 +2258,7 @@ + (AWTWindow *) lastKeyWindow { AWTWindow *window = (AWTWindow*)[nsWindow delegate]; - if ([nsWindow isKeyWindow] || [nsWindow isMainWindow]) { + if ([nsWindow isMainWindow]) { [window.javaMenuBar deactivate]; } @@ -1234,7 +2269,7 @@ + (AWTWindow *) lastKeyWindow { actualMenuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; } - if ([nsWindow isKeyWindow] || [nsWindow isMainWindow]) { + if ([nsWindow isMainWindow]) { [CMenuBar activate:actualMenuBar modallyDisabled:NO]; } }]; @@ -1436,15 +2471,15 @@ + (AWTWindow *) lastKeyWindow { /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativePushNSWindowToFront - * Signature: (J)V + * Signature: (JZ)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowToFront -(JNIEnv *env, jclass clazz, jlong windowPtr) +(JNIEnv *env, jclass clazz, jlong windowPtr, jboolean wait) { JNI_COCOA_ENTER(env); NSWindow *nsWindow = OBJC(windowPtr); - [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + [ThreadUtilities performOnMainThreadWaiting:(BOOL)wait block:^(){ if (![nsWindow isKeyWindow]) { [nsWindow makeKeyAndOrderFront:nsWindow]; @@ -1456,6 +2491,38 @@ + (AWTWindow *) lastKeyWindow { JNI_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_CPlatformWindow + * Method: nativeHideWindow + * Signature: (JZ)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeHideWindow +(JNIEnv *env, jclass clazz, jlong windowPtr, jboolean wait) +{ +JNI_COCOA_ENTER(env); + + NSWindow *nsWindow = OBJC(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:(BOOL)wait block:^(){ + if (nsWindow.keyWindow) { + // When 'windowDidResignKey' is called during 'orderOut', current key window + // is reported as 'nil', so it's impossible to create WINDOW_FOCUS_LOST event + // with correct 'opposite' window. + // So, as a workaround, we perform focus transfer to a parent window explicitly here. + NSWindow *parentWindow = nsWindow; + while ((parentWindow = ((AWTWindow*)parentWindow.delegate).ownerWindow.nsWindow) != nil) { + if (parentWindow.canBecomeKeyWindow) { + [parentWindow makeKeyWindow]; + break; + } + } + } + [nsWindow orderOut:nsWindow]; + [nsWindow close]; + }]; + +JNI_COCOA_EXIT(env); +} + /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeSetNSWindowTitle @@ -1617,6 +2684,21 @@ + (AWTWindow *) lastKeyWindow { JNI_COCOA_EXIT(env); } +// undocumented approach which avoids focus stealing +// and can be used full screen switch is in progress for another window +void enableFullScreenSpecial(NSWindow *nsWindow) { + NSKeyedArchiver *coder = [[NSKeyedArchiver alloc] init]; + [nsWindow encodeRestorableStateWithCoder:coder]; + [coder encodeBool:YES forKey:@"NSIsFullScreen"]; + NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:coder.encodedData]; + decoder.requiresSecureCoding = YES; + decoder.decodingFailurePolicy = NSDecodingFailurePolicySetErrorAndReturn; + [nsWindow restoreStateWithCoder:decoder]; + [decoder finishDecoding]; + [decoder release]; + [coder release]; +} + /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: _toggleFullScreenMode @@ -1632,7 +2714,17 @@ + (AWTWindow *) lastKeyWindow { if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return; [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + static BOOL inProgress = NO; + if ((nsWindow.styleMask & NSWindowStyleMaskFullScreen) != NSWindowStyleMaskFullScreen && + (inProgress || !NSApp.active)) { + enableFullScreenSpecial(nsWindow); + if ((nsWindow.styleMask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen) return; // success + // otherwise fall back to standard approach + } + BOOL savedValue = inProgress; + inProgress = YES; [nsWindow performSelector:toggleFullScreenSelector withObject:nil]; + inProgress = savedValue; }]; JNI_COCOA_EXIT(env); @@ -1673,6 +2765,8 @@ + (AWTWindow *) lastKeyWindow { [nsWindow setDelegate: nil]; [window release]; + + ignoreResizeWindowDuringAnotherWindowEnd = NO; }]; JNI_COCOA_EXIT(env); @@ -1734,3 +2828,111 @@ + (AWTWindow *) lastKeyWindow { JNI_COCOA_EXIT(env); } +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeRaiseLevel +(JNIEnv *env, jclass clazz, jlong windowPtr, jboolean popup, jboolean onlyIfParentIsActive) +{ +JNI_COCOA_ENTER(env); + + NSWindow *nsWindow = OBJC(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + if (onlyIfParentIsActive) { + AWTWindow *parent = window; + do { + parent = parent.ownerWindow; + } while (parent != nil && !parent.nsWindow.isMainWindow); + if (parent == nil) { + return; + } + } + [nsWindow setLevel: popup ? NSPopUpMenuWindowLevel : NSFloatingWindowLevel]; + }]; + +JNI_COCOA_EXIT(env); +} + +/* + * Class: sun_lwawt_macosx_CPlatformWindow + * Method: nativeDelayShowing + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeDelayShowing +(JNIEnv *env, jclass clazz, jlong windowPtr) +{ + __block jboolean result = JNI_FALSE; + + JNI_COCOA_ENTER(env); + + NSWindow *nsWindow = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + result = [window delayShowing]; + }]; + + JNI_COCOA_EXIT(env); + + return result; +} + + +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeUpdateCustomTitleBar +(JNIEnv *env, jclass clazz, jlong windowPtr) +{ + JNI_COCOA_ENTER(env); + + NSWindow *nsWindow = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + [window updateCustomTitleBar]; + }]; + + JNI_COCOA_EXIT(env); +} + +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCallDeliverMoveResizeEvent +(JNIEnv *env, jclass clazz, jlong windowPtr) +{ + JNI_COCOA_ENTER(env); + + NSWindow *nsWindow = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + [window _deliverMoveResizeEvent]; + }]; + + JNI_COCOA_EXIT(env); +} + +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetRoundedCorners +(JNIEnv *env, jclass clazz, jlong windowPtr, jfloat radius, jint borderWidth, jint borderRgb) +{ + JNI_COCOA_ENTER(env); + + NSWindow *w = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + w.hasShadow = YES; + w.contentView.wantsLayer = YES; + w.contentView.layer.cornerRadius = radius; + w.contentView.layer.masksToBounds = YES; + w.contentView.layer.opaque = NO; + + if (borderWidth > 0) { + CGFloat alpha = (((borderRgb >> 24) & 0xff) / 255.0); + CGFloat red = (((borderRgb >> 16) & 0xff) / 255.0); + CGFloat green = (((borderRgb >> 8) & 0xff) / 255.0); + CGFloat blue = (((borderRgb >> 0) & 0xff) / 255.0); + NSColor *color = [NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; + + w.contentView.layer.borderWidth = borderWidth; + w.contentView.layer.borderColor = color.CGColor; + } + + w.backgroundColor = NSColor.clearColor; + w.opaque = NO; + // remove corner radius animation + [w.contentView.layer removeAllAnimations]; + [w invalidateShadow]; + }]; + + JNI_COCOA_EXIT(env); +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m index a8a821423de4..0e1a96330e8a 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m @@ -37,6 +37,7 @@ #import "ThreadUtilities.h" #import "NSApplicationAWT.h" #import "JNIUtilities.h" +#import "AWTWindow.h" #pragma mark App Menu helpers @@ -258,6 +259,11 @@ - (id) init { [ctr addObserver:clz selector:@selector(_appDidDeactivate) name:NSApplicationDidResignActiveNotification object:nil]; [ctr addObserver:clz selector:@selector(_appDidHide) name:NSApplicationDidHideNotification object:nil]; [ctr addObserver:clz selector:@selector(_appDidUnhide) name:NSApplicationDidUnhideNotification object:nil]; + [ctr addObserver:clz selector:@selector(_didChangeScreenParameters) name:NSApplicationDidChangeScreenParametersNotification object:nil]; + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:[AWTWindow class] + selector:@selector(activeSpaceDidChange) + name:NSWorkspaceActiveSpaceDidChangeNotification + object:nil]; return self; } @@ -491,6 +497,10 @@ + (void)_registerForNotification:(NSNumber *)notificationTypeNum { } } ++ (void)_didChangeScreenParameters { + [ApplicationDelegate _notifyJava:com_apple_eawt__AppEventHandler_NOTIFY_SCREEN_CHANGE_PARAMETERS]; +} + // Retrieves the menu to be attached to the Dock icon (AppKit callback) - (NSMenu *)applicationDockMenu:(NSApplication *)sender { AWT_ASSERT_APPKIT_THREAD; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m index 9818300f6a6b..866defd7f4eb 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m @@ -24,6 +24,7 @@ */ #import "CDataTransferer.h" +#include "sun_lwawt_macosx_CDataTransferer.h" #import "ThreadUtilities.h" #import "JNIUtilities.h" #import @@ -174,6 +175,48 @@ - (BOOL) checkPasteboardWithoutNotification:(id)application { JNI_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_CClipboard + * Method: writeObjects + * Signature: ([BJ)V +*/ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CClipboard_writeObjects +(JNIEnv *env, jobject inObject, jbyteArray inBytes, jlong inFormat) +{ + if (inBytes == NULL) { + return; + } + + +JNI_COCOA_ENTER(env); + jint nBytes = (*env)->GetArrayLength(env, inBytes); + jbyte *rawBytes = (*env)->GetPrimitiveArrayCritical(env, inBytes, NULL); + CHECK_NULL(rawBytes); + NSData *bytesAsData = [NSData dataWithBytes:rawBytes length:nBytes]; + (*env)->ReleasePrimitiveArrayCritical(env, inBytes, rawBytes, JNI_ABORT); + NSString *format = formatForIndex(inFormat); + NSMutableArray *formatArray = [NSMutableArray arrayWithCapacity:2]; + const char *bytes = [bytesAsData bytes]; + BOOL isStart=YES; + for (int i = 0; i < [bytesAsData length]; i++) { + if ((unsigned char)bytes[i] == 0) { + isStart = YES; + } else { + if (isStart) { + isStart = NO; + NSString *path = [NSString stringWithUTF8String:(const char *)&bytes[i]]; + NSURL *fileURL = [NSURL fileURLWithPath:path relativeToURL:nil]; + [formatArray addObject:fileURL]; + } + } + } + [ThreadUtilities performOnMainThreadWaiting:YES block:^() { + [[NSPasteboard generalPasteboard] writeObjects:formatArray]; + }]; +JNI_COCOA_EXIT(env); +} + + /* * Class: sun_lwawt_macosx_CClipboard * Method: getClipboardFormats @@ -260,13 +303,22 @@ - (BOOL) checkPasteboardWithoutNotification:(id)application { } NSUInteger dataSize = [clipData length]; + const void *dataBuffer = [clipData bytes]; + if (format == sun_lwawt_macosx_CDataTransferer_CF_STRING && dataSize >= 3) { + const unsigned char *bytesPtr = (const unsigned char *)dataBuffer; + if (bytesPtr[0] == 0xEF && bytesPtr[1] == 0xBB && bytesPtr[2] == 0xBF) { + // strip BOM from string content, like native applications do + dataSize -= 3; + dataBuffer = (const void *)(bytesPtr + 3); + } + } + returnValue = (*env)->NewByteArray(env, dataSize); if (returnValue == NULL) { return NULL; } if (dataSize != 0) { - const void *dataBuffer = [clipData bytes]; (*env)->SetByteArrayRegion(env, returnValue, 0, dataSize, (jbyte *)dataBuffer); } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CDragSource.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CDragSource.m index ddb8630fb67b..a70850ee3faa 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CDragSource.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CDragSource.m @@ -237,7 +237,7 @@ - (jbyteArray)convertData:(jlong)format jobject transferer = [self dataTransferer:env]; jbyteArray data = nil; - if (transferer != NULL) { + if (transferer != NULL && fComponent != NULL) { GET_DT_CLASS_RETURN(NULL); DECLARE_METHOD_RETURN(convertDataMethod, DataTransfererClass, "convertData", "(Ljava/lang/Object;Ljava/awt/datatransfer/Transferable;JLjava/util/Map;Z)[B", NULL); data = (*env)->CallObjectMethod(env, transferer, convertDataMethod, fComponent, fTransferable, format, fFormatMap, (jboolean) TRUE); @@ -744,8 +744,14 @@ - (void) postDragExit { // Also see +[CWindow convertAWTToCocoaScreenRect] // NSScreen-to-JavaScreen mapping: - (NSPoint) mapNSScreenPointToJavaWithOffset:(NSPoint)screenPoint { - NSRect mainR = [[[NSScreen screens] objectAtIndex:0] frame]; - NSPoint point = NSMakePoint(screenPoint.x, mainR.size.height - (screenPoint.y)); + NSScreen *primaryScreen = [[NSScreen screens] firstObject]; + NSPoint point = NSMakePoint(0, 0); + if (primaryScreen == nil) { + return point; + } + + NSRect mainR = [primaryScreen frame]; + point = NSMakePoint(screenPoint.x, mainR.size.height - (screenPoint.y)); // Adjust the point with the drag image offset to get the real mouse hotspot: // The point should remain in screen coordinates (as per DragSourceEvent.getLocation() documentation) diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.h index 677c9715679e..45e841e244a1 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.h @@ -26,6 +26,8 @@ #import @interface CFileDialog : NSObject { + NSWindow* fOwner; + // Should we query back to Java for a file filter? jboolean fHasFileFilter; @@ -54,12 +56,19 @@ // Can the dialog choose directories ? BOOL fChooseDirectories; + // Can the dialog choose files ? + BOOL fChooseFiles; + + // Can the dialog create directories ? + BOOL fCreateDirectories; + // Contains the absolute paths of the selected files as URLs NSArray *fURLs; } // Allocator -- (id) initWithFilter:(jboolean)inHasFilter +- (id) initWithOwner:(NSWindow*) owner + filter:(jboolean)inHasFilter fileDialog:(jobject)inDialog title:(NSString *)inTitle directory:(NSString *)inPath @@ -68,6 +77,8 @@ multipleMode:(BOOL)inMultipleMode shouldNavigate:(BOOL)inNavigateApps canChooseDirectories:(BOOL)inChooseDirectories + canChooseFiles:(BOOL)inChooseFiles + canCreateDirectories:(BOOL)inCreateDirectories withEnv:(JNIEnv*)env; // Invoked from the main thread diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.m index 3b895be8094f..cf7ea481fa46 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CFileDialog.m @@ -29,13 +29,17 @@ #import "ThreadUtilities.h" #import "JNIUtilities.h" #import "CFileDialog.h" +#import "AWTWindow.h" +#import "CMenuBar.h" +#import "ApplicationDelegate.h" #import "java_awt_FileDialog.h" #import "sun_lwawt_macosx_CFileDialog.h" @implementation CFileDialog -- (id)initWithFilter:(jboolean)inHasFilter +- (id)initWithOwner:(NSWindow*)owner + filter:(jboolean)inHasFilter fileDialog:(jobject)inDialog title:(NSString *)inTitle directory:(NSString *)inPath @@ -44,9 +48,13 @@ - (id)initWithFilter:(jboolean)inHasFilter multipleMode:(BOOL)inMultipleMode shouldNavigate:(BOOL)inNavigateApps canChooseDirectories:(BOOL)inChooseDirectories + canChooseFiles:(BOOL)inChooseFiles +canCreateDirectories:(BOOL)inCreateDirectories withEnv:(JNIEnv*)env; { - if (self = [super init]) { + if (self = [super init]) { + fOwner = owner; + [fOwner retain]; fHasFileFilter = inHasFilter; fFileDialog = (*env)->NewGlobalRef(env, inDialog); fDirectory = inPath; @@ -59,6 +67,8 @@ - (id)initWithFilter:(jboolean)inHasFilter fMultipleMode = inMultipleMode; fNavigateApps = inNavigateApps; fChooseDirectories = inChooseDirectories; + fChooseFiles = inChooseFiles; + fCreateDirectories = inCreateDirectories; fPanelResult = NSCancelButton; } @@ -86,6 +96,9 @@ -(void) dealloc { [fURLs release]; fURLs = nil; + [fOwner release]; + fOwner = nil; + [super dealloc]; } @@ -117,14 +130,85 @@ - (void)safeSaveOrLoad { if (fMode == java_awt_FileDialog_LOAD) { NSOpenPanel *openPanel = (NSOpenPanel *)thePanel; [openPanel setAllowsMultipleSelection:fMultipleMode]; - [openPanel setCanChooseFiles:!fChooseDirectories]; + [openPanel setCanChooseFiles:fChooseFiles]; [openPanel setCanChooseDirectories:fChooseDirectories]; - [openPanel setCanCreateDirectories:YES]; + [openPanel setCanCreateDirectories:fCreateDirectories]; } [thePanel setDelegate:self]; - fPanelResult = [thePanel runModalForDirectory:fDirectory file:fFile]; - [thePanel setDelegate:nil]; + + NSMenuItem *editMenuItem = nil; + NSMenu *menu = [NSApp mainMenu]; + if (menu != nil) { + if (menu.numberOfItems > 0) { + NSMenu *submenu = [[menu itemAtIndex:0] submenu]; + if (submenu != nil) { + menu = submenu; + } + } + + editMenuItem = [self createEditMenu]; + if (menu.numberOfItems > 0) { + [menu insertItem:editMenuItem atIndex:0]; + } else { + [menu addItem:editMenuItem]; + } + [editMenuItem release]; + } + + + if (fOwner != nil) { + if (fDirectory != nil) { + [thePanel setDirectoryURL:[NSURL fileURLWithPath:[fDirectory stringByExpandingTildeInPath]]]; + } + + if (fFile != nil) { + [thePanel setNameFieldStringValue:fFile]; + } + + CMenuBar *menuBar = nil; + if (fOwner != nil) { + + // Finds appropriate menubar in our hierarchy, + AWTWindow *awtWindow = (AWTWindow *)fOwner.delegate; + while (awtWindow.ownerWindow != nil) { + awtWindow = awtWindow.ownerWindow; + } + + BOOL isDisabled = NO; + if ([awtWindow.nsWindow isVisible]){ + menuBar = awtWindow.javaMenuBar; + isDisabled = !awtWindow.isEnabled; + } + + if (menuBar == nil) { + menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; + isDisabled = NO; + } + + [CMenuBar activate:menuBar modallyDisabled:isDisabled]; + } + + if (@available(macOS 10.14, *)) { + [thePanel setAppearance:fOwner.appearance]; + } + + fPanelResult = [thePanel runModal]; + + if (menuBar != nil) { + [CMenuBar activate:menuBar modallyDisabled:NO]; + } + } + else + { + fPanelResult = [thePanel runModalForDirectory:fDirectory file:fFile]; + CMenuBar *menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; + [CMenuBar activate:menuBar modallyDisabled:NO]; + } + + if (editMenuItem != nil) { + [menu removeItem:editMenuItem]; + } if ([self userClickedOK]) { if (fMode == java_awt_FileDialog_LOAD) { @@ -135,11 +219,40 @@ - (void)safeSaveOrLoad { } [fURLs retain]; } + + [thePanel setDelegate:nil]; } [self disposer]; } +- (NSMenuItem *) createEditMenu { + NSMenu *editMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; + + NSMenuItem *cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; + [editMenu addItem:cutItem]; + [cutItem release]; + + NSMenuItem *copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; + [editMenu addItem:copyItem]; + [copyItem release]; + + NSMenuItem *pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; + [editMenu addItem:pasteItem]; + [pasteItem release]; + + NSMenuItem *selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; + [editMenu addItem:selectAllItem]; + [selectAllItem release]; + + NSMenuItem *editMenuItem = [NSMenuItem new]; + [editMenuItem setTitle:@"Edit"]; + [editMenuItem setSubmenu:editMenu]; + [editMenu release]; + + return editMenuItem; +} + - (BOOL) askFilenameFilter:(NSString *)filename { JNIEnv *env = [ThreadUtilities getJNIEnv]; jstring jString = NormalizedPathJavaStringFromNSString(env, filename); @@ -175,7 +288,7 @@ - (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url { } - (BOOL) userClickedOK { - return fPanelResult == NSOKButton; + return fPanelResult == NSFileHandlingPanelOKButton; } - (NSArray *)URLs { @@ -186,14 +299,12 @@ - (NSArray *)URLs { /* * Class: sun_lwawt_macosx_CFileDialog * Method: nativeRunFileDialog - * Signature: (Ljava/lang/String;ILjava/io/FilenameFilter; - * Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_sun_lwawt_macosx_CFileDialog_nativeRunFileDialog -(JNIEnv *env, jobject peer, jstring title, jint mode, jboolean multipleMode, - jboolean navigateApps, jboolean chooseDirectories, jboolean hasFilter, - jstring directory, jstring file) +(JNIEnv *env, jobject peer, jlong ownerPtr, jstring title, jint mode, jboolean multipleMode, + jboolean navigateApps, jboolean chooseDirectories, jboolean chooseFiles, jboolean createDirectories, + jboolean hasFilter, jstring directory, jstring file) { jobjectArray returnValue = NULL; @@ -203,7 +314,8 @@ - (NSArray *)URLs { dialogTitle = @" "; } - CFileDialog *dialogDelegate = [[CFileDialog alloc] initWithFilter:hasFilter + CFileDialog *dialogDelegate = [[CFileDialog alloc] initWithOwner:(NSWindow *)jlong_to_ptr(ownerPtr) + filter:hasFilter fileDialog:peer title:dialogTitle directory:JavaStringToNSString(env, directory) @@ -212,6 +324,8 @@ - (NSArray *)URLs { multipleMode:multipleMode shouldNavigate:navigateApps canChooseDirectories:chooseDirectories + canChooseFiles:chooseFiles + canCreateDirectories:createDirectories withEnv:env]; [ThreadUtilities performOnMainThread:@selector(safeSaveOrLoad) diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m index 468c5f6dae09..08feb79ce444 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m @@ -169,9 +169,11 @@ static jobject createJavaDisplayMode(CGDisplayModeRef mode, JNIEnv *env) { w = CGDisplayModeGetWidth(mode); CFRelease(currentBPP); } + uint32_t flags = CGDisplayModeGetIOFlags(mode); + BOOL isDisplayModeDefault = (flags & kDisplayModeDefaultFlag) ? YES : NO; DECLARE_CLASS_RETURN(jc_DisplayMode, "java/awt/DisplayMode", ret); - DECLARE_METHOD_RETURN(jc_DisplayMode_ctor, jc_DisplayMode, "", "(IIII)V", ret); - ret = (*env)->NewObject(env, jc_DisplayMode, jc_DisplayMode_ctor, w, h, bpp, refrate); + DECLARE_METHOD_RETURN(jc_DisplayMode_ctor, jc_DisplayMode, "", "(IIIIZ)V", ret); + ret = (*env)->NewObject(env, jc_DisplayMode, jc_DisplayMode_ctor, w, h, bpp, refrate, (jboolean)isDisplayModeDefault); CHECK_EXCEPTION(); JNI_COCOA_EXIT(env); return ret; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsEnv.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsEnv.m index 58338cbc6c13..ada7deb53796 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsEnv.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsEnv.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,9 @@ * questions. */ +#import +#import +#import "sun_awt_CGraphicsEnvironment.h" #import "AWT_debug.h" #import "JNIUtilities.h" @@ -179,3 +182,36 @@ JNI_COCOA_EXIT(env); } + +JNIEXPORT jint JNICALL Java_sun_awt_CGraphicsEnvironment_initMetal + (JNIEnv *env, jclass mtlgc, jstring shadersLibName) +{ + __block jint ret = sun_awt_CGraphicsEnvironment_MTL_ERROR; + + JNI_COCOA_ENTER(env); + + __block NSString* path = NormalizedPathNSStringFromJavaString(env, shadersLibName); + + [ThreadUtilities performOnMainThreadWaiting:YES block:^() { + + id device = MTLCreateSystemDefaultDevice(); + if (device != nil) { + NSError* error = nil; + id lib = [device newLibraryWithFile:path error:&error]; + if (lib != nil) { + ret = sun_awt_CGraphicsEnvironment_MTL_SUPPORTED; + } else { + J2dRlsTraceLn(J2D_TRACE_ERROR, "CGraphicsEnvironment_initMetal - " + "Failed to load Metal shader library."); + ret = sun_awt_CGraphicsEnvironment_MTL_NO_SHADER_LIB; + } + } else { + J2dRlsTraceLn(J2D_TRACE_ERROR, "CGraphicsEnvironment_initMetal - " + "Failed to create MTLDevice."); + ret = sun_awt_CGraphicsEnvironment_MTL_NO_DEVICE; + } + }]; + + JNI_COCOA_EXIT(env); + return ret; +} \ No newline at end of file diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CInputMethod.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CInputMethod.m index 3bfd72668c37..2c7388829ed5 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CInputMethod.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CInputMethod.m @@ -118,13 +118,6 @@ + (void) _nativeNotifyPeerWithView:(AWTView *)view inputMethod:(jobject) inputMe [view setInputMethod:inputMethod]; // inputMethod is a GlobalRef or null to disable. } -+ (void) _nativeEndComposition:(AWTView *)view { - if (view == nil) return; - - [view abandonInput]; -} - - @end /* @@ -186,19 +179,48 @@ + (void) _nativeEndComposition:(AWTView *)view { /* * Class: sun_lwawt_macosx_CInputMethod * Method: nativeEndComposition - * Signature: (J)V + * Signature: (JLjava/awt/Component;)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEndComposition -(JNIEnv *env, jobject this, jlong nativePeer) +(JNIEnv *env, jobject this, jlong nativePeer, jobject component) +{ +JNI_COCOA_ENTER(env); + AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); + if (!view) return; + jobject componentRef = (*env)->NewGlobalRef(env, component); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + [view abandonInput:componentRef]; + if (componentRef) { + JNIEnv *env = [ThreadUtilities getJNIEnv]; + (*env)->DeleteGlobalRef(env, componentRef); + } + }]; + +JNI_COCOA_EXIT(env); +} + +/* + * Class: sun_lwawt_macosx_CInputMethod + * Method: nativeEnableListening + * Signature: (JZ)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEnableListening + (JNIEnv *env, jobject this, jlong nativePeer, jboolean enable) { + JNI_COCOA_ENTER(env); - AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); - [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ - [CInputMethod _nativeEndComposition:view]; + AWTView * const view = (AWTView *)jlong_to_ptr(nativePeer); + if (view == NULL) { + return; + } + + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + [view enableImInteraction:(enable == JNI_TRUE ? YES : NO)]; }]; JNI_COCOA_EXIT(env); + } /* diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m index 147af2b7a7f0..ced9bf47e6de 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m @@ -26,6 +26,7 @@ #import "JNIUtilities.h" #import +#import #import "CRobotKeyCode.h" #import "LWCToolkit.h" @@ -63,6 +64,10 @@ static int gsEventNumber; static int* gsButtonEventNumber; static NSTimeInterval gNextKeyEventTime; +static NSTimeInterval safeDelay; + +#define KEY_CODE_COUNT 128 +static CGEventFlags keyOwnFlags[KEY_CODE_COUNT]; static inline CGKeyCode GetCGKeyCode(jint javaKeyCode); @@ -99,17 +104,31 @@ static inline void autoDelay(BOOL isMove) { [NSThread sleepForTimeInterval:delay]; } } - gNextKeyEventTime = [[NSDate date] timeIntervalSinceReferenceDate] + 0.050; + gNextKeyEventTime = [[NSDate date] timeIntervalSinceReferenceDate] + safeDelay; +} + +static void initKeyFlags() { + CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate); + for (CGKeyCode keyCode = 0; keyCode < KEY_CODE_COUNT; keyCode++) { + CGEventRef event = CGEventCreateKeyboardEvent(source, keyCode, true); + if (event != NULL) { + keyOwnFlags[keyCode] = CGEventGetFlags(event); + CFRelease(event); + } + } + if (source != NULL) { + CFRelease(source); + } } /* * Class: sun_lwawt_macosx_CRobot * Method: initRobot - * Signature: (V)V + * Signature: (I)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CRobot_initRobot -(JNIEnv *env, jobject peer) +(JNIEnv *env, jobject peer, jint safeDelayMillis) { // Set things up to let our app act like a synthetic keyboard and mouse. // Always set all states, in case Apple ever changes default behaviors. @@ -138,6 +157,7 @@ static inline void autoDelay(BOOL isMove) { gsClickCount = 0; gsLastClickTime = 0; gNextKeyEventTime = 0; + safeDelay = (NSTimeInterval)safeDelayMillis/1000; gsEventNumber = ROBOT_EVENT_NUMBER_START; gsButtonEventNumber = (int*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(int), gNumberOfButtons); @@ -149,6 +169,8 @@ static inline void autoDelay(BOOL isMove) { for (i = 0; i < gNumberOfButtons; ++i) { gsButtonEventNumber[i] = ROBOT_EVENT_NUMBER_START; } + + initKeyFlags(); }]; } } @@ -277,6 +299,20 @@ static inline void autoDelay(BOOL isMove) { }]; } +// CGEventCreateKeyboardEvent incorrectly handles flags pertinent to non-modifier keys +// (e.g. F1-F12 keys always Fn flag set, while arrow keys always have Fn and NumPad flags set). +// Those flags are not cleared for following key presses automatically, so we need to do it ourselves. +// See JBR-4306 for details. +static void clearStickyFlags(CGEventRef event, CGKeyCode keyCode, CGEventFlags flagToCheck) { + if (keyCode < KEY_CODE_COUNT && (keyOwnFlags[keyCode] & flagToCheck) == 0) { + CGEventFlags flags = CGEventGetFlags(event); + CGEventFlags updatedFlags = flags & ~flagToCheck; + if (updatedFlags != flags) { + CGEventSetFlags(event, updatedFlags); + } + } +} + /* * Class: sun_lwawt_macosx_CRobot * Method: keyEvent @@ -289,14 +325,39 @@ static inline void autoDelay(BOOL isMove) { autoDelay(NO); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); - CGKeyCode keyCode = GetCGKeyCode(javaKeyCode); + CGKeyCode keyCode; + + if (javaKeyCode & 0x2000000) { + // This is a dirty, dirty hack and is only used in tests. + // This allows us to send macOS virtual key code directly, without first looking up a Java key code. + // It also allows the caller to set the physical keyboard layout directly. + // The key code that should be passed to Robot in this case is the following: + // 0x2000000 | keyCode | (physicalLayout << 8) + // where physicalLayout is: + // 0 - ANSI + // 1 - ISO + // 2 - JIS + + UInt32 physicalLayout = (javaKeyCode >> 8) & 0xff; + UInt32 keyboardType; + if (physicalLayout == 1) { + keyboardType = 41; // ISO + } else if (physicalLayout == 2) { + keyboardType = 42; // JIS + } else { + keyboardType = 40; // ANSI + } + CGEventSourceSetKeyboardType(source, keyboardType); + keyCode = javaKeyCode & 0xff; + } else { + keyCode = GetCGKeyCode(javaKeyCode); + } CGEventRef event = CGEventCreateKeyboardEvent(source, keyCode, keyPressed); if (event != NULL) { - CGEventFlags flags = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState); - if ((flags & kCGEventFlagMaskSecondaryFn) != 0) { - flags ^= kCGEventFlagMaskSecondaryFn; - CGEventSetFlags(event, flags); - } + // this assumes Robot isn't used to generate Fn key presses + clearStickyFlags(event, keyCode, kCGEventFlagMaskSecondaryFn); + // there is no NumPad key, so this won't hurt in any case + clearStickyFlags(event, keyCode, kCGEventFlagMaskNumericPad); CGEventPost(kCGHIDEventTap, event); CFRelease(event); } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.h index d06b9e8ee461..a93704c7b9ec 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.h @@ -99,6 +99,7 @@ const static int OSX_kVK_Tab = 0x30; const static int OSX_kVK_Space = 0x31; const static int OSX_Delete = 0x33; const static int OSX_Escape = 0x35; +const static int OSX_RightCommand = 0x36; const static int OSX_Command = 0x37; const static int OSX_Shift = 0x38; const static int OSX_CapsLock = 0x39; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.m index e8caf8ca5156..4510c9965bcf 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CRobotKeyCode.m @@ -160,6 +160,11 @@ -(id) init { [NSNumber numberWithInt : OSX_F19], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_F19], [NSNumber numberWithInt : OSX_F20], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_F20], + // There's no VK_ key code for the section key (\u00a7), found on the Standard QWERTY (ABC) ISO layout. + // For consistency, let's use the code returned by getExtendedKeyCodeForChar for this symbol. + // Also see src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java + [NSNumber numberWithInt : OSX_kVK_ISO_Section], [NSNumber numberWithInt : 0x1000000 + 0x00A7], + nil]; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m index 3244438bc1bc..f20f3225d34b 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m @@ -30,12 +30,12 @@ /* * Class: sun_lwawt_macosx_CWrapper$NSWindow - * Method: makeKeyAndOrderFront - * Signature: (J)V + * Method: nativeMakeKeyAndOrderFront + * Signature: (JZ)V */ JNIEXPORT void JNICALL -Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront -(JNIEnv *env, jclass cls, jlong windowPtr) +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_nativeMakeKeyAndOrderFront +(JNIEnv *env, jclass cls, jlong windowPtr, jboolean wait) { JNI_COCOA_ENTER(env); @@ -43,19 +43,19 @@ [ThreadUtilities performOnMainThread:@selector(makeKeyAndOrderFront:) on:window withObject:nil - waitUntilDone:NO]; + waitUntilDone:(BOOL)wait]; JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_CWrapper$NSWindow - * Method: makeKeyWindow - * Signature: (J)V + * Method: nativeMakeKeyWindow + * Signature: (JZ)V */ JNIEXPORT void JNICALL -Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow -(JNIEnv *env, jclass cls, jlong windowPtr) +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_nativeMakeKeyWindow +(JNIEnv *env, jclass cls, jlong windowPtr, jboolean wait) { JNI_COCOA_ENTER(env); @@ -63,7 +63,7 @@ [ThreadUtilities performOnMainThread:@selector(makeKeyWindow) on:window withObject:nil - waitUntilDone:NO]; + waitUntilDone:(BOOL)wait]; JNI_COCOA_EXIT(env); } @@ -156,20 +156,39 @@ /* * Class: sun_lwawt_macosx_CWrapper$NSWindow - * Method: orderOut + * Method: orderFrontIfOnActiveSpace * Signature: (J)V */ JNIEXPORT void JNICALL -Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontIfOnActiveSpace (JNIEnv *env, jclass cls, jlong windowPtr) { +JNI_COCOA_ENTER(env); + + NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + if (window.onActiveSpace) [window orderFront:window]; + }]; + +JNI_COCOA_EXIT(env); +} + +/* + * Class: sun_lwawt_macosx_CWrapper$NSWindow + * Method: nativeOrderOut + * Signature: (JZ)V + */ +JNIEXPORT void JNICALL +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_nativeOrderOut +(JNIEnv *env, jclass cls, jlong windowPtr, jboolean wait) +{ JNI_COCOA_ENTER(env); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); [ThreadUtilities performOnMainThread:@selector(orderOut:) on:window withObject:window - waitUntilDone:NO]; + waitUntilDone:(BOOL)wait]; JNI_COCOA_EXIT(env); } @@ -231,6 +250,26 @@ JNI_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_CWrapper$NSWindow + * Method: orderWindowIfOnActiveSpace + * Signature: (JIJ)V + */ +JNIEXPORT void JNICALL +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderWindowIfOnActiveSpace +(JNIEnv *env, jclass cls, jlong windowPtr, jint order, jlong relativeToPtr) +{ +JNI_COCOA_ENTER(env); + + NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); + NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + if (window.onActiveSpace) [window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]]; + }]; + +JNI_COCOA_EXIT(env); +} + // Used for CWrapper.NSWindow.setLevel() (and level() which isn't implemented yet) static NSInteger LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS]; static void initLevels() @@ -477,6 +516,31 @@ static void initLevels() JNI_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_CWrapper$NSWindow + * Method: isTabbedWindow + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isTabbedWindow +(JNIEnv *env, jclass cls, jlong windowPtr) +{ + __block jboolean isTabbedWindow = JNI_FALSE; + +JNI_COCOA_ENTER(env); + + if (@available(macOS 10.13, *)) { + NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + isTabbedWindow = [[[window tabGroup] windows] count] > 1; + }]; + } + +JNI_COCOA_EXIT(env); + + return isTabbedWindow; +} + /* * Class: sun_lwawt_macosx_CWrapper$NSView * Method: addSubview diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/Dispatch.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/Dispatch.m new file mode 100644 index 000000000000..ee098fca5877 --- /dev/null +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/Dispatch.m @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Must include this before JavaNativeFoundation.h to get jni.h from build + */ +#include "jni.h" +#include "jni_util.h" + +#import "sun_lwawt_macosx_concurrent_LibDispatchNative.h" + +#import +#import +#import "JNIUtilities.h" + +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeIsDispatchSupported + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeIsDispatchSupported +(JNIEnv *env, jclass clazz) +{ + return JNI_TRUE; +} + + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeGetMainQueue + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeGetMainQueue +(JNIEnv *env, jclass clazz) +{ + dispatch_queue_t queue = dispatch_get_main_queue(); + return ptr_to_jlong(queue); +} + + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeCreateConcurrentQueue + * Signature: (I)J + */ +JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeCreateConcurrentQueue +(JNIEnv *env, jclass clazz, jint priority) +{ + dispatch_queue_t queue = dispatch_get_global_queue((long)priority, 0); + return ptr_to_jlong(queue); +} + + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeCreateSerialQueue + * Signature: (Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeCreateSerialQueue +(JNIEnv *env, jclass clazz, jstring name) +{ + if (name == NULL) return 0L; + + jboolean isCopy; + const char *queue_name = (*env)->GetStringUTFChars(env, name, &isCopy); + dispatch_queue_t queue = dispatch_queue_create(queue_name, NULL); + (*env)->ReleaseStringUTFChars(env, name, queue_name); + + return ptr_to_jlong(queue); +} + + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeReleaseQueue + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeReleaseQueue +(JNIEnv *env, jclass clazz, jlong nativeQueue) +{ + if (nativeQueue == 0L) return; + dispatch_release((dispatch_queue_t)jlong_to_ptr(nativeQueue)); +} + + + +static void perform_dispatch(JNIEnv *env, jlong nativeQueue, jobject runnable, void (*dispatch_fxn)(dispatch_queue_t, dispatch_block_t)) +{ +JNI_COCOA_ENTER(env); + DECLARE_CLASS(jc_Runnable, "java/lang/Runnable"); + DECLARE_METHOD(jm_run, jc_Runnable, "run", "()V"); + + dispatch_queue_t queue = (dispatch_queue_t)jlong_to_ptr(nativeQueue); + if (queue == NULL) return; // shouldn't happen + + // create a global-ref around the Runnable, so it can be safely passed to the dispatch thread + jobject runnableRef = (*env)->NewGlobalRef(env, runnable); + dispatch_fxn(queue, ^{ + // attach the dispatch thread to the JVM if necessary, and get an env + JNIEnv* blockEnv = [ThreadUtilities getJNIEnvUncached]; + + JNI_COCOA_ENTER(blockEnv); + // call the user's runnable + (*blockEnv)->CallVoidMethod(blockEnv, runnableRef, jm_run); + CHECK_EXCEPTION_IN_ENV(blockEnv); + (*blockEnv)->DeleteGlobalRef(blockEnv, runnableRef); + JNI_COCOA_EXIT(blockEnv); + }); + +JNI_COCOA_EXIT(env); +} + + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeExecuteAsync + * Signature: (JLjava/lang/Runnable;)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeExecuteAsync +(JNIEnv *env, jclass clazz, jlong nativeQueue, jobject runnable) +{ + // enqueues and returns + perform_dispatch(env, nativeQueue, runnable, dispatch_async); +} + + +/* + * Class: sun_lwawt_macosx_concurrent_LibDispatchNative + * Method: nativeExecuteSync + * Signature: (JLjava/lang/Runnable;)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_concurrent_LibDispatchNative_nativeExecuteSync +(JNIEnv *env, jclass clazz, jlong nativeQueue, jobject runnable) +{ + // blocks until the Runnable completes + perform_dispatch(env, nativeQueue, runnable, dispatch_sync); +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/GeomUtilities.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/GeomUtilities.m index 13ad3d7db6e4..3bdca591edbf 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/GeomUtilities.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/GeomUtilities.m @@ -97,7 +97,7 @@ NSSize JavaToNSSize(JNIEnv *env, jobject dimension) { } static NSScreen *primaryScreen(JNIEnv *env) { - NSScreen *primaryScreen = [[NSScreen screens] objectAtIndex:0]; + NSScreen *primaryScreen = [[NSScreen screens] firstObject]; if (primaryScreen != nil) return primaryScreen; if ((env != NULL) && ([NSThread isMainThread] == NO)) { JNU_ThrowByName(env, "java/lang/RuntimeException", "Failed to convert, no screen."); diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m index 289e63ba98c8..353fdedbd0e9 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m @@ -24,6 +24,8 @@ */ #import +#import +#import #import "InitIDs.h" @@ -161,3 +163,30 @@ (JNIEnv *env, jclass cls) { } + +JNIEXPORT jarray JNICALL Java_sun_font_FontManagerNativeLibrary_loadedLibraries + (JNIEnv *env, jclass cls) +{ + const uint32_t count = _dyld_image_count(); + + jclass stringClazz = (*env)->FindClass(env, "java/lang/String"); + CHECK_NULL_RETURN(stringClazz, NULL); + jarray libsArray = (*env)->NewObjectArray(env, count, stringClazz, NULL); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + + if ((*env)->EnsureLocalCapacity(env, count + 2) != JNI_OK) { + return NULL; // OOME has been thrown already + } + + for (uint32_t i = 0; i < count; i++) { + const char * name = _dyld_get_image_name(i); + if (name) { + jstring jName = (*env)->NewStringUTF(env, name); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + (*env)->SetObjectArrayElement(env, libsArray, i, jName); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + } + } + + return libsArray; +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.h index b829335fc299..d0b17940bf60 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.h @@ -28,7 +28,9 @@ extern NSString *const JavaAccessibilityIgnore; extern NSMutableDictionary *sRoles; +extern NSMutableDictionary *sAnnouncePriorities; extern void initializeRoles(); +extern void initializeAnnouncePriorities(); #define GET_CACCESSIBILITY_CLASS() \ GET_CLASS(sjc_CAccessibility, "sun/lwawt/macosx/CAccessibility"); diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m index bf66df162d13..8094f7faa633 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m @@ -24,6 +24,7 @@ */ #import "JavaAccessibilityUtilities.h" +#import "sun_swing_AccessibleAnnouncer.h" #import "JNIUtilities.h" #import @@ -40,7 +41,9 @@ NSString *const JavaAccessibilityIgnore = @"JavaAxIgnore"; NSMutableDictionary *sRoles = nil; +NSMutableDictionary *sAnnouncePriorities = nil; void initializeRoles(); +void initializeAnnouncePriorities(); // Unique static jclass sjc_AccessibleState = NULL; @@ -478,7 +481,7 @@ void initializeRoles() [sRoles setObject:JavaAccessibilityIgnore forKey:@"frame"]; [sRoles setObject:JavaAccessibilityIgnore forKey:@"glasspane"]; [sRoles setObject:NSAccessibilityGroupRole forKey:@"groupbox"]; - [sRoles setObject:NSAccessibilityStaticTextRole forKey:@"hyperlink"]; //maybe a group? + [sRoles setObject:NSAccessibilityLinkRole forKey:@"hyperlink"]; [sRoles setObject:NSAccessibilityImageRole forKey:@"icon"]; [sRoles setObject:NSAccessibilityGroupRole forKey:@"internalframe"]; [sRoles setObject:NSAccessibilityStaticTextRole forKey:@"label"]; @@ -518,3 +521,10 @@ void initializeRoles() [sRoles setObject:JavaAccessibilityIgnore forKey:@"viewport"]; [sRoles setObject:JavaAccessibilityIgnore forKey:@"window"]; } + +void initializeAnnouncePriorities() { + sAnnouncePriorities = [[NSMutableDictionary alloc] initWithCapacity:3]; + + [sAnnouncePriorities setObject:[NSNumber numberWithInt:NSAccessibilityPriorityMedium] forKey:[NSNumber numberWithInt:sun_swing_AccessibleAnnouncer_ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT]]; + [sAnnouncePriorities setObject:[NSNumber numberWithInt:NSAccessibilityPriorityHigh] forKey:[NSNumber numberWithInt:sun_swing_AccessibleAnnouncer_ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT]]; +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m index da83387a58da..0e60bfbee321 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m @@ -1008,7 +1008,7 @@ - (NSValue *)accessibilityPositionAttribute point.y += size.height; // Now make it into Cocoa screen coords. - point.y = [[[[self view] window] screen] frame].size.height - point.y; + point.y = [[NSScreen screens][0] frame].size.height - point.y; return [NSValue valueWithPoint:point]; } @@ -1386,7 +1386,7 @@ - (id)accessibilityHitTest:(NSPoint)point withEnv:(JNIEnv *)env "(Ljava/awt/Container;FF)Ljavax/accessibility/Accessible;", nil); // Make it into java screen coords - point.y = [[[[self view] window] screen] frame].size.height - point.y; + point.y = [[NSScreen screens][0] frame].size.height - point.y; jobject jparent = fComponent; @@ -1448,19 +1448,6 @@ - (id)accessibilityFocusedUIElement @end -/* - * Class: sun_lwawt_macosx_CAccessibility - * Method: focusChanged - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged -(JNIEnv *env, jobject jthis) -{ -JNI_COCOA_ENTER(env); - [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) on:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO]; -JNI_COCOA_EXIT(env); -} - /* * Class: sun_lwawt_macosx_CAccessible * Method: valueChanged diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.h index 313b49e96512..06a9067b4283 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.h @@ -38,6 +38,10 @@ extern int gNumberOfButtons; // InputEvent mask array extern jint* gButtonDownMasks; +extern int lcdSubPixelPosSupported; + +extern int useFontSmoothing; + @interface AWTToolkit : NSObject { } + (BOOL) inDoDragDropLoop; + (void) setInDoDragDropLoop:(BOOL)val; @@ -53,3 +57,22 @@ extern jint* gButtonDownMasks; /** Macro to cast a jlong to an Objective-C object (id). Casts to long on 32-bit systems to quiesce the compiler. */ #define OBJC(jl) ((id)jlong_to_ptr(jl)) + +#ifndef kCFCoreFoundationVersionNumber10_13_Max +#define kCFCoreFoundationVersionNumber10_13_Max 1499 +#endif + +#ifndef kCFCoreFoundationVersionNumber10_14_Max +#define kCFCoreFoundationVersionNumber10_14_Max 1599 +#endif + +#ifndef IS_OSX_GT10_13 +#define IS_OSX_GT10_13 (floor(kCFCoreFoundationVersionNumber) > \ + kCFCoreFoundationVersionNumber10_13_Max) +#endif + +#ifndef IS_OSX_GT10_14 +#define IS_OSX_GT10_14 (floor(kCFCoreFoundationVersionNumber) > \ +kCFCoreFoundationVersionNumber10_14_Max) +#endif + diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m index cfd7460e275f..6b8a47024e4a 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m @@ -40,8 +40,13 @@ #import "sun_lwawt_macosx_LWCToolkit.h" #import "sizecalc.h" +#import "AWTWindow.h" #import +#import + +#include +#include // SCROLL PHASE STATE #define SCROLL_PHASE_UNSUPPORTED 1 @@ -52,6 +57,8 @@ int gNumberOfButtons; jint* gButtonDownMasks; +int lcdSubPixelPosSupported; +int useFontSmoothing; // Indicates that the app has been started with -XstartOnFirstThread // (directly or via WebStart settings), and AWT should not run its @@ -573,23 +580,34 @@ BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) { /* * Class: sun_lwawt_macosx_LWCToolkit * Method: doAWTRunLoopImpl - * Signature: (JZZ)V + * Signature: (JZZI)Z */ -JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_doAWTRunLoopImpl -(JNIEnv *env, jclass clz, jlong mediator, jboolean processEvents, jboolean inAWT) +JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_doAWTRunLoopImpl +(JNIEnv *env, jclass clz, jlong mediator, jboolean processEvents, jboolean inAWT, jint timeoutSeconds/*(-1) for infinite*/) { -AWT_ASSERT_APPKIT_THREAD; + AWT_ASSERT_APPKIT_THREAD; + jboolean result = JNI_TRUE; JNI_COCOA_ENTER(env); AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator); - if (mediatorObject == nil) return; + if (mediatorObject == nil) return JNI_TRUE; + + NSDate *date = timeoutSeconds > 0 ? [NSDate dateWithTimeIntervalSinceNow:timeoutSeconds] : nil; // Don't use acceptInputForMode because that doesn't setup autorelease pools properly BOOL isRunning = true; while (![mediatorObject shouldEndRunLoop] && isRunning) { isRunning = [[NSRunLoop currentRunLoop] runMode:(inAWT ? [ThreadUtilities javaRunLoopMode] : NSDefaultRunLoopMode) beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.010]]; + + if (date != nil) { + NSDate *now = [[NSDate alloc] init]; + if ([date compare:(now)] == NSOrderedAscending) result = JNI_FALSE; + [now release]; + if (result == JNI_FALSE) break; + } + if (processEvents) { //We do not spin a runloop here as date is nil, so does not matter which mode to use // Processing all events excluding NSApplicationDefined which need to be processed @@ -599,13 +617,30 @@ BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) { untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES]) != nil) { - [NSApp sendEvent:event]; + if ([event.window isKindOfClass:[AWTWindow_Normal class]]) { + // Filter only events from AWTWindow (to skip events from ScreenMenu) + // See https://youtrack.jetbrains.com/issue/IDEA-305287/Implement-non-blocking-ScreenMenu.invokeOpenLater#focus=Comments-27-6614719.0-0 + [NSApp sendEvent:event]; + } } } } [mediatorObject release]; JNI_COCOA_EXIT(env); + + return result; +} + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: isBlockingEventDispatchThread + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isBlockingEventDispatchThread + (JNIEnv *env, jclass clz) +{ + return ThreadUtilities.blockingEventDispatchThread; } /* @@ -620,6 +655,8 @@ BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) { AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator); + if (mediatorObject == nil) return; + [ThreadUtilities performOnMainThread:@selector(endRunLoop) on:mediatorObject withObject:nil waitUntilDone:NO]; [mediatorObject release]; @@ -645,6 +682,23 @@ BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) { JNI_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: performOnMainThreadAndWait + * Signature: (Ljava/lang/Runnable)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_performOnMainThreadAndWait +(JNIEnv *env, jclass clz, jobject runnable) +{ +JNI_COCOA_ENTER(env); + jobject gRunnable = (*env)->NewGlobalRef(env, runnable); + CHECK_NULL(gRunnable); + [ThreadUtilities performOnMainThreadWaiting:YES block:^() { + JavaRunnable* performer = [[JavaRunnable alloc] initWithRunnable:gRunnable]; + [performer perform]; + }]; +JNI_COCOA_EXIT(env); +} /* * Class: sun_lwawt_macosx_LWCToolkit @@ -876,3 +930,157 @@ JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNI_COCOA_EXIT(env); return multiClickTime; } + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: getKeyboardLayoutNativeId + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL +JNICALL Java_sun_lwawt_macosx_LWCToolkit_getKeyboardLayoutNativeId(JNIEnv *env, jclass cls) { + jstring jLayoutId = NULL; + JNI_COCOA_ENTER(env); + __block CFStringRef layoutId = nil; + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + TISInputSourceRef source = TISCopyCurrentKeyboardInputSource(); + layoutId = (CFStringRef)CFRetain(TISGetInputSourceProperty(source, kTISPropertyInputSourceID)); + CFRelease(source); + }]; + jLayoutId = NSStringToJavaString(env, (NSString*)layoutId); + CFRelease(layoutId); + JNI_COCOA_EXIT(env); + return jLayoutId; +} + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: switchKeyboardLayoutNative + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT jboolean JNICALL +JNICALL Java_sun_lwawt_macosx_LWCToolkit_switchKeyboardLayoutNative(JNIEnv *env, jclass cls, jstring jLayoutId) { + __block bool success = false; + JNI_COCOA_ENTER(env); + __block NSString* layoutId = JavaStringToNSString(env, jLayoutId); + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + NSDictionary* searchParam = @{ (NSString*)kTISPropertyInputSourceID : layoutId }; + CFArrayRef sources = TISCreateInputSourceList((CFDictionaryRef)searchParam, NO); + + if (CFArrayGetCount(sources) == 0) { + NSLog(@"failed to switch to keyboard layout %@: no such layout", layoutId); + CFRelease(sources); + return; + } + + TISInputSourceRef source = (TISInputSourceRef)CFArrayGetValueAtIndex(sources, 0); + OSStatus status = TISSelectInputSource(source); + if (status == noErr) { + success = true; + } else { + NSLog(@"failed to switch to keyboard layout %@, error code %d", layoutId, status); + } + + CFRelease(sources); + }]; + JNI_COCOA_EXIT(env); + return success; +} + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: getKeyboardLayoutListNative + * Signature: (Z)[Ljava/lang/String; + */ +JNIEXPORT jarray JNICALL +JNICALL Java_sun_lwawt_macosx_LWCToolkit_getKeyboardLayoutListNative(JNIEnv *env, jclass cls, jboolean includeAll) { + jclass stringClazz = (*env)->FindClass(env, "java/lang/String"); + jarray out = NULL; + JNI_COCOA_ENTER(env); + __block NSMutableArray* layoutIds = [[[NSMutableArray alloc] init] autorelease]; + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + CFArrayRef sources = TISCreateInputSourceList(nil, includeAll); + int numSources = CFArrayGetCount(sources); + + for (int i = 0; i < numSources; ++i) { + TISInputSourceRef layout = CFArrayGetValueAtIndex(sources, i); + NSString* sourceId = TISGetInputSourceProperty(layout, kTISPropertyInputSourceID); + [layoutIds addObject:sourceId]; + } + + CFRelease(sources); + }]; + + int numLayoutIds = (int)[layoutIds count]; + out = (*env)->NewObjectArray(env, numLayoutIds, stringClazz, NULL); + for (int i = 0; i < numLayoutIds; ++i) { + NSString* layoutId = [layoutIds objectAtIndex:i]; + jstring jLayoutId = NSStringToJavaString(env, layoutId); + (*env)->SetObjectArrayElement(env, out, i, jLayoutId); + } + JNI_COCOA_EXIT(env); + return out; +} + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: setKeyboardLayoutEnabledNative + * Signature: (Ljava/lang/String;Z)V + */ +JNIEXPORT jboolean JNICALL +JNICALL Java_sun_lwawt_macosx_LWCToolkit_setKeyboardLayoutEnabledNative(JNIEnv *env, jclass cls, jstring jLayoutId, jboolean enabled) { + __block bool success = false; + JNI_COCOA_ENTER(env); + __block NSString* layoutId = JavaStringToNSString(env, jLayoutId); + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + NSDictionary* searchParam = @{ (NSString*)kTISPropertyInputSourceID : layoutId }; + CFArrayRef sources = TISCreateInputSourceList((CFDictionaryRef)searchParam, YES); + + if (CFArrayGetCount(sources) == 0) { + NSLog(@"failed to set keyboard layout %@ enabled state: no such layout", layoutId); + CFRelease(sources); + return; + } + + TISInputSourceRef source = (TISInputSourceRef)CFArrayGetValueAtIndex(sources, 0); + OSStatus status = enabled ? TISEnableInputSource(source) : TISDisableInputSource(source); + if (status == noErr) { + success = true; + } else { + NSLog(@"failed to set keyboard layout %@ enabled state, error code %d", layoutId, status); + } + + CFRelease(sources); + }]; + JNI_COCOA_EXIT(env); + return success; +} + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: setCapsLockState + * Signature: (Z)Z + */ +JNIEXPORT jboolean JNICALL +JNICALL Java_sun_lwawt_macosx_LWCToolkit_setCapsLockState(JNIEnv *env, jclass cls, jboolean on) { + __block kern_return_t err = KERN_SUCCESS; + JNI_COCOA_ENTER(env); + [ThreadUtilities performOnMainThreadWaiting:YES block:^() { + io_service_t ioHIDService = IOServiceGetMatchingService(kIOMasterPortDefault, + IOServiceMatching(kIOHIDSystemClass)); + if (!ioHIDService) { + err = KERN_FAILURE; + return; + } + + io_connect_t ioHIDConnect; + err = IOServiceOpen(ioHIDService, mach_task_self(), kIOHIDParamConnectType, &ioHIDConnect); + if (err == KERN_SUCCESS) { + err = IOHIDSetModifierLockState(ioHIDConnect, kIOHIDCapsLockState, on); + IOServiceClose(ioHIDConnect); + } + + IOObjectRelease(ioHIDService); + }]; + JNI_COCOA_EXIT(env); + return err == KERN_SUCCESS; +} \ No newline at end of file diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/SystemHotkey.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/SystemHotkey.m new file mode 100644 index 000000000000..2804e54fd3f4 --- /dev/null +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/SystemHotkey.m @@ -0,0 +1,797 @@ +#import +#import +#import + +#import "CRobotKeyCode.h" +#import "java_awt_event_KeyEvent.h" + +#include +#include "jni_util.h" + + +extern JavaVM *jvm; + +enum LOG_LEVEL { + LL_TRACE, + LL_DEBUG, + LL_INFO, + LL_WARNING, + LL_ERROR +}; + +void plog(int logLevel, const char *formatMsg, ...) { + if (!jvm) + return; + if (logLevel < LL_TRACE || logLevel > LL_ERROR || formatMsg == NULL) + return; + + // TODO: check whether current logLevel is enabled in PlatformLogger + static jobject loggerObject = NULL; + static jclass clazz = NULL; + static jmethodID midTrace = NULL, midDebug = NULL, midInfo = NULL, midWarn = NULL, midError = NULL; + + if (loggerObject == NULL) { + JNIEnv* env; + (*jvm)->AttachCurrentThreadAsDaemon(jvm, (void**)&env, NULL); + jclass shkClass = (*env)->FindClass(env, "java/awt/desktop/SystemHotkey"); + if (shkClass == NULL) + return; + jfieldID fieldId = (*env)->GetStaticFieldID(env, shkClass, "ourLog", "Lsun/util/logging/PlatformLogger;"); + if (fieldId == NULL) + return; + loggerObject = (*env)->GetStaticObjectField(env, shkClass, fieldId); + loggerObject = (*env)->NewGlobalRef(env, loggerObject); + + clazz = (*env)->GetObjectClass(env, loggerObject); + if (clazz == NULL) { + NSLog(@"plogImpl: can't find PlatformLogger class"); + return; + } + + midTrace = (*env)->GetMethodID(env, clazz, "finest", "(Ljava/lang/String;)V"); + midDebug = (*env)->GetMethodID(env, clazz, "fine", "(Ljava/lang/String;)V"); + midInfo = (*env)->GetMethodID(env, clazz, "info", "(Ljava/lang/String;)V"); + midWarn = (*env)->GetMethodID(env, clazz, "warning", "(Ljava/lang/String;)V"); + midError = (*env)->GetMethodID(env, clazz, "severe", "(Ljava/lang/String;)V"); + } + + jmethodID mid = midTrace; + switch (logLevel) { + case LL_DEBUG: mid = midDebug; break; + case LL_INFO: mid = midInfo; break; + case LL_WARNING: mid = midWarn; break; + case LL_ERROR: mid = midError; break; + } + if (mid == NULL) { + NSLog(@"plogImpl: undefined log-method for level %d", logLevel); + return; + } + + va_list args; + va_start(args, formatMsg); + const int bufSize = 512; + char buf[bufSize]; + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wformat-nonliteral" + vsnprintf(buf, bufSize, formatMsg, args); + #pragma clang diagnostic pop + va_end(args); + + JNIEnv* env; + jstring jstr; + (*jvm)->AttachCurrentThreadAsDaemon(jvm, (void**)&env, NULL); + jstr = (*env)->NewStringUTF(env, buf); + + (*env)->CallVoidMethod(env, loggerObject, mid, jstr); + (*env)->DeleteLocalRef(env, jstr); +} + +static const char * toCString(id obj) { + return obj == nil ? "nil" : [NSString stringWithFormat:@"%@", obj].UTF8String; +} + +// Copy of java.awt.event.KeyEvent.[MODIFIER]_DOWN_MASK +static const int AWT_SHIFT_DOWN_MASK = 1 << 6; +static const int AWT_CTRL_DOWN_MASK = 1 << 7; +static const int AWT_META_DOWN_MASK = 1 << 8; +static const int AWT_ALT_DOWN_MASK = 1 << 9; + +static int symbolicHotKeysModifiers2java(int mask) { + // NOTE: these masks doesn't coincide with macos events masks + // and can be used only to parse data from settings domain "com.apple.symbolichotkeys" + const int MACOS_SHIFT_MASK = 0x020000; + const int MACOS_CONTROL_MASK = 0x040000; + const int MACOS_OPTION_MASK = 0x080000; + const int MACOS_CMD_MASK = 0x100000; + + int result = 0; + if (mask & MACOS_SHIFT_MASK) + result |= AWT_SHIFT_DOWN_MASK; + if (mask & MACOS_CONTROL_MASK) + result |= AWT_CTRL_DOWN_MASK; + if (mask & MACOS_OPTION_MASK) + result |= AWT_ALT_DOWN_MASK; + if (mask & MACOS_CMD_MASK) + result |= AWT_META_DOWN_MASK; + return result; +} + +static NSString * getAppleSymbolicHotKeysDescription(int hotKeyId) { + static NSDictionary * hotkeyId2DescMap = nil; + if (hotkeyId2DescMap == nil) { + hotkeyId2DescMap = [NSDictionary dictionaryWithObjectsAndKeys: + @"Move focus to the menu bar", [NSNumber numberWithInt:7], + @"Move focus to the Dock", [NSNumber numberWithInt:8], + @"Move focus to active or next window", [NSNumber numberWithInt:9], + @"Move focus to window toolbar", [NSNumber numberWithInt:10], + @"Move focus to floating window", [NSNumber numberWithInt:11], + @"Change the way Tab moves focus", [NSNumber numberWithInt:13], + @"Turn zoom on or off", [NSNumber numberWithInt:15], + @"Zoom in", [NSNumber numberWithInt:17], + @"Zoom out", [NSNumber numberWithInt:19], + @"Reverse Black and White", [NSNumber numberWithInt:21], + @"Turn image smoothing on or off", [NSNumber numberWithInt:23], + @"Increase Contrast", [NSNumber numberWithInt:25], + @"Decrease Contrast", [NSNumber numberWithInt:26], + @"Move focus to the next window in application", [NSNumber numberWithInt:27], + @"Save picture of screen as file", [NSNumber numberWithInt:28], + @"Copy picture of screen to clipboard", [NSNumber numberWithInt:29], + @"Save picture of selected area as file", [NSNumber numberWithInt:30], + @"Copy picture of selected area to clipboard", [NSNumber numberWithInt:31], + @"All Windows", [NSNumber numberWithInt:32], + @"Application Windows", [NSNumber numberWithInt:33], + @"All Windows (Slow)", [NSNumber numberWithInt:34], + @"Application Windows (Slow)", [NSNumber numberWithInt:35], + @"Desktop", [NSNumber numberWithInt:36], + @"Desktop (Slow)", [NSNumber numberWithInt:37], + @"Move focus to the window drawer", [NSNumber numberWithInt:51], + @"Turn Dock Hiding On/Off", [NSNumber numberWithInt:52], + @"Move focus to the status menus", [NSNumber numberWithInt:57], + @"Turn VoiceOver on / off", [NSNumber numberWithInt:59], + @"Select the previous input source", [NSNumber numberWithInt:60], + @"Select the next source in the Input Menu", [NSNumber numberWithInt:61], + @"Dashboard", [NSNumber numberWithInt:62], + @"Dashboard (Slow)", [NSNumber numberWithInt:63], + @"Show Spotlight search field", [NSNumber numberWithInt:64], + @"Show Spotlight window", [NSNumber numberWithInt:65], + @"Dictionary MouseOver", [NSNumber numberWithInt:70], + @"Hide and show Front Row", [NSNumber numberWithInt:73], + @"Activate Spaces", [NSNumber numberWithInt:75], + @"Activate Spaces (Slow)", [NSNumber numberWithInt:76], + @"Spaces Left", [NSNumber numberWithInt:79], + @"Spaces Right", [NSNumber numberWithInt:81], + @"Spaces Down", [NSNumber numberWithInt:83], + @"Spaces Up", [NSNumber numberWithInt:85], + @"Show Help Menu", [NSNumber numberWithInt:91], + @"Show Help Menu", [NSNumber numberWithInt:92], + @"Show Help Menu", [NSNumber numberWithInt:98], + @"Switch to Space 1", [NSNumber numberWithInt:118], + @"Switch to Space 2", [NSNumber numberWithInt:119], + @"Switch to Space 3", [NSNumber numberWithInt:120], + @"Switch to Space 4", [NSNumber numberWithInt:121], + @"Show Launchpad", [NSNumber numberWithInt:160], + @"Show Accessibility Controls", [NSNumber numberWithInt:162], + @"Show Notification Center", [NSNumber numberWithInt:163], + @"Turn Do-Not-Disturb On/Off", [NSNumber numberWithInt:175], + @"Turn focus following On/Off", [NSNumber numberWithInt:179], + nil + ]; + + [hotkeyId2DescMap retain]; + } + + return [hotkeyId2DescMap objectForKey : [NSNumber numberWithInt : hotKeyId]]; +} + +@interface DefaultParams: NSObject +@property (assign) BOOL enabled; +@property (strong) NSString *key_equivalent; ++(DefaultParams *) create:(NSString *)key_equivalent enabled:(BOOL)enabled; +@end + +@implementation DefaultParams ++(DefaultParams *) create:(NSString *)key_equivalent enabled:(BOOL)enabled { + DefaultParams * result = [[[DefaultParams alloc] init] autorelease]; + result.enabled = enabled; + result.key_equivalent = key_equivalent; + return result; +} +@end + +static NSMutableDictionary * createDefaultParams(); + +static int NSModifiers2java(int mask) { + int result = 0; + if (mask & shiftKey) + result |= AWT_SHIFT_DOWN_MASK; + if (mask & controlKey) + result |= AWT_CTRL_DOWN_MASK; + if (mask & optionKey) + result |= AWT_ALT_DOWN_MASK; + if (mask & cmdKey) + result |= AWT_META_DOWN_MASK; + return result; +} + +static int javaModifiers2NS(int jmask) { + int result = 0; + if (jmask & AWT_SHIFT_DOWN_MASK) + result |= NSShiftKeyMask; + if (jmask & AWT_CTRL_DOWN_MASK) + result |= NSControlKeyMask; + if (jmask & AWT_ALT_DOWN_MASK) + result |= NSAlternateKeyMask; + if (jmask & AWT_META_DOWN_MASK) + result |= NSCommandKeyMask; + return result; +} + +typedef bool (^ Visitor)(int, const char *, int, const char *, int); + +static void visitServicesShortcut(Visitor visitorBlock, NSString * key_equivalent, NSString * desc) { + // @ - command + // $ - shift + // ^ - control + // ~ - alt(option) + const bool modIsSHIFT = [key_equivalent containsString:@"$"]; + const bool modIsCONTROL = [key_equivalent containsString:@"^"]; + const bool modIsOPTION = [key_equivalent containsString:@"~"]; + const bool modIsCMD = [key_equivalent containsString:@"@"]; + int modifiers = 0; + if (modIsSHIFT) + modifiers |= AWT_SHIFT_DOWN_MASK; + if (modIsCONTROL) + modifiers |= AWT_CTRL_DOWN_MASK; + if (modIsOPTION) + modifiers |= AWT_ALT_DOWN_MASK; + if (modIsCMD) + modifiers |= AWT_META_DOWN_MASK; + + NSCharacterSet * excludeSet = [NSCharacterSet characterSetWithCharactersInString:@"@$^~"]; + NSString * keyChar = [key_equivalent stringByTrimmingCharactersInSet:excludeSet]; + + visitorBlock(-1, keyChar.UTF8String, modifiers, desc.UTF8String, -1); +} + +void readSystemHotkeysImpl(Visitor visitorBlock) { + // 1. read from com.apple.symbolichotkeys.plist (domain with custom (user defined) shortcuts) + @try { + + NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary * shk = [defaults persistentDomainForName:@"com.apple.symbolichotkeys"]; + if (shk != nil) { + // AppleSymbolicHotKeys = { + // 10 = { + // enabled = 1; + // value = { + // parameters = ( + // 65535, + // 96, + // 8650752 + // ); + // type = standard; + // }; + // }; + // ...... + // } + id hotkeys = [shk valueForKey:@"AppleSymbolicHotKeys"]; + if (hotkeys == nil) + plog(LL_DEBUG, "key AppleSymbolicHotKeys doesn't exist in domain com.apple.symbolichotkeys"); + else if (![hotkeys isKindOfClass:[NSDictionary class]]) + plog(LL_DEBUG, "object for key 'AppleSymbolicHotKeys' isn't NSDictionary (class=%s)", [hotkeys className].UTF8String); + else { + for (id keyObj in hotkeys) { + if (![keyObj isKindOfClass:[NSString class]]) { + plog(LL_DEBUG, "key '%s' isn't instance of NSString (class=%s)", toCString(keyObj), [keyObj className].UTF8String); + continue; + } + NSString *hkNumber = keyObj; + id hkDesc = hotkeys[hkNumber]; + if (![hkDesc isKindOfClass:[NSDictionary class]]) { + plog(LL_DEBUG, "hotkey descriptor '%s' isn't instance of NSDictionary (class=%s)", toCString(hkDesc), [hkDesc className].UTF8String); + continue; + } + NSDictionary *sdict = hkDesc; + id objValue = sdict[@"value"]; + if (objValue == nil) + continue; + + if (![objValue isKindOfClass:[NSDictionary class]]) { + plog(LL_DEBUG, "property 'value' %s isn't instance of NSDictionary (class=%s)", toCString(objValue), [objValue className].UTF8String); + continue; + } + + id objEnabled = sdict[@"enabled"]; + BOOL enabled = objEnabled != nil && [objEnabled boolValue] == YES; + + if (!enabled) + continue; + + NSDictionary * value = objValue; + id objParams = value[@"parameters"]; + if (![objParams isKindOfClass:[NSArray class]]) { + plog(LL_DEBUG, "property 'parameters' %s isn't instance of NSArray (class=%s)", toCString(objParams), [objParams className].UTF8String); + continue; + } + + NSArray *parameters = objParams; + if ([parameters count] < 3) { + plog(LL_DEBUG, "too small lenght of parameters %d", [parameters count]); + continue; + } + + id p0 = parameters[0]; + id p1 = parameters[1]; + id p2 = parameters[2]; + + if (![p0 isKindOfClass:[NSNumber class]] || ![p1 isKindOfClass:[NSNumber class]] || ![p2 isKindOfClass:[NSNumber class]]) { + plog(LL_DEBUG, "some of parameters isn't instance of NSNumber (%s, %s, %s)", [p0 className].UTF8String, [p1 className].UTF8String, [p2 className].UTF8String); + continue; + } + + //parameter 1: ASCII code of the character (or 65535 - hex 0xFFFF - for non-ASCII characters). + //parameter 2: the keyboard key code for the character. + //Parameter 3: the sum of the control, command, shift and option keys. these are bits 17-20 in binary: shift is bit 17, control is bit 18, option is bit 19, and command is bit 20. + // 0x020000 => "Shift", + // 0x040000 => "Control", + // 0x080000 => "Option", + // 0x100000 => "Command" + + int asciiCode = p0 == nil ? 0xFFFF : [p0 intValue]; + int vkeyCode = p1 == nil ? -1 : [p1 intValue]; + int modifiers = p2 == nil ? 0 : [p2 intValue]; + + char keyCharBuf[64]; + const char * keyCharStr = keyCharBuf; + if (asciiCode >= 0 && asciiCode <= 0xFF) { + sprintf(keyCharBuf, "%c", asciiCode); + } else + keyCharStr = NULL; + NSString * description = getAppleSymbolicHotKeysDescription([hkNumber intValue]); + visitorBlock(vkeyCode, keyCharStr, symbolicHotKeysModifiers2java(modifiers), description == nil ? NULL : description.UTF8String, [hkNumber intValue]); + } + } + } else { + plog(LL_DEBUG, "domain com.apple.symbolichotkeys doesn't exist"); + } + + // 2. read from Pbs (domain with services shortcuts) + NSMutableDictionary * allDefParams = createDefaultParams(); + NSDictionary * pbs = [defaults persistentDomainForName:@"pbs"]; + if (pbs) { +// NSServicesStatus = { +// "com.apple.Terminal - Open man Page in Terminal - openManPage" = { +// "key_equivalent" = "@$m"; +// }; +// "com.apple.Terminal - Search man Page Index in Terminal - searchManPages" = { +// "enabled_context_menu" = 0; +// "enabled_services_menu" = 0; +// "key_equivalent" = "@$a"; +// "presentation_modes" = { +// ContextMenu = 0; +// ServicesMenu = 0; +// }; +// }; +// }; +// } + + NSDictionary *services = [pbs valueForKey:@"NSServicesStatus"]; + if (services) { + for (NSString *key in services) { + id value = services[key]; + if (![value isKindOfClass:[NSDictionary class]]) { + plog(LL_DEBUG, "'%s' isn't instance of NSDictionary (class=%s)", toCString(value), [value className].UTF8String); + continue; + } + // NOTE: unchanged default params will not appear here, check allDefParams at the end of this loop + DefaultParams * defParams = [allDefParams objectForKey:key]; + [allDefParams removeObjectForKey:key]; + + NSDictionary *sdict = value; + NSString *key_equivalent = sdict[@"key_equivalent"]; + if (!key_equivalent && defParams != nil) { + key_equivalent = defParams.key_equivalent; + } + if (!key_equivalent) + continue; + + NSString *enabled = sdict[@"enabled_services_menu"]; + if (enabled != nil && [enabled boolValue] == NO) { + continue; + } + if (enabled == nil && defParams != nil && !defParams.enabled) { + continue; + } + + visitServicesShortcut(visitorBlock, key_equivalent, key); + } + } + } + + // Iterate through rest of allDefParams + for (NSString* key in allDefParams) { + DefaultParams * defParams = allDefParams[key]; + if (!defParams.enabled) { + continue; + } + visitServicesShortcut(visitorBlock, defParams.key_equivalent, key); + } + +#ifdef USE_CARBON_CopySymbolicHotKeys + // 3. read from core services + CFArrayRef registeredHotKeys; + if(CopySymbolicHotKeys(®isteredHotKeys) == noErr) { + CFIndex count = CFArrayGetCount(registeredHotKeys); + for(CFIndex i = 0; i < count; i++) { + CFDictionaryRef hotKeyInfo = CFArrayGetValueAtIndex(registeredHotKeys, i); + CFNumberRef hotKeyCode = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyCode); + CFNumberRef hotKeyModifiers = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyModifiers); + CFBooleanRef hotKeyEnabled = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyEnabled); + + int64_t vkeyCode = -1; + CFNumberGetValue(hotKeyCode, kCFNumberSInt64Type, &vkeyCode); + int64_t keyModifiers = 0; + CFNumberGetValue(hotKeyModifiers, kCFNumberSInt64Type, &keyModifiers); + Boolean enabled = CFBooleanGetValue(hotKeyEnabled); + if (!enabled) + continue; + + visitorBlock(vkeyCode, NULL, NSModifiers2java(keyModifiers), NULL, -1); + } + + CFRelease(registeredHotKeys); + } +#endif // USE_CARBON_CopySymbolicHotKeys + } + @catch (NSException *exception) { + NSLog(@"readSystemHotkeys: catched exception, reason '%@'", exception.reason); + } +} + +bool isSystemShortcut_NextWindowInApplication(NSUInteger modifiersMask, int keyCode, NSString * chars) { + const int shortcutUid_NextWindowInApplication = 27; + static NSString * shortcutCharacter = nil; + static int shortcutMask = 0; + static int shortcutKeyCode = -1; + if (shortcutCharacter == nil && shortcutKeyCode == -1) { + readSystemHotkeysImpl( + ^bool(int vkeyCode, const char * keyCharStr, int jmodifiers, const char * descriptionStr, int hotkeyUid) { + if (hotkeyUid != shortcutUid_NextWindowInApplication) + return true; + + if (keyCharStr != NULL) { + shortcutCharacter = [[NSString stringWithFormat:@"%s", keyCharStr] retain]; + } + + if (vkeyCode != -1) { + shortcutKeyCode = vkeyCode; + } + + shortcutMask = javaModifiers2NS(jmodifiers); + return false; + } + ); + if (shortcutCharacter == nil && shortcutKeyCode == -1) { + shortcutCharacter = @"`"; + shortcutMask = NSCommandKeyMask; + } + } + + int ignoredModifiers = NSAlphaShiftKeyMask | NSFunctionKeyMask | NSNumericPadKeyMask | NSHelpKeyMask; + // Ignore Shift because of JBR-4899. + if (!(shortcutMask & NSShiftKeyMask)) { + ignoredModifiers |= NSShiftKeyMask; + } + if ((modifiersMask & ~ignoredModifiers) == shortcutMask) { + return shortcutKeyCode == keyCode || [chars isEqualToString:shortcutCharacter]; + } + + return false; +} + +JNIEXPORT void JNICALL Java_java_awt_desktop_SystemHotkeyReader_readSystemHotkeys(JNIEnv* env, jobject reader) { + jclass clsReader = (*env)->GetObjectClass(env, reader); + jmethodID methodAdd = (*env)->GetMethodID(env, clsReader, "add", "(ILjava/lang/String;ILjava/lang/String;)V"); + + readSystemHotkeysImpl( + ^bool(int vkeyCode, const char * keyCharStr, int jmodifiers, const char * descriptionStr, int hotkeyUid){ + jstring jkeyChar = keyCharStr == NULL ? NULL : (*env)->NewStringUTF(env, keyCharStr); + jstring jdesc = descriptionStr == NULL ? NULL : (*env)->NewStringUTF(env, descriptionStr); + (*env)->CallVoidMethod( + env, reader, methodAdd, (jint)vkeyCode, jkeyChar, (jint)jmodifiers, jdesc + ); + return true; + } + ); +} + +JNIEXPORT jint JNICALL Java_java_awt_desktop_SystemHotkeyReader_osx2java(JNIEnv* env, jclass clazz, jint osxKeyCode) { + static NSDictionary * osx2javaMap = nil; + if (osx2javaMap == nil) { + osx2javaMap = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_BACK_SPACE], [NSNumber numberWithInt:OSX_Delete], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_TAB], [NSNumber numberWithInt:OSX_kVK_Tab], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ENTER], [NSNumber numberWithInt:OSX_kVK_Return], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CLEAR], [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadClear], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SHIFT], [NSNumber numberWithInt:OSX_Shift], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CONTROL], [NSNumber numberWithInt:OSX_Control], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ALT], [NSNumber numberWithInt:OSX_Option], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ALT_GRAPH], [NSNumber numberWithInt:OSX_RightOption], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CAPS_LOCK], [NSNumber numberWithInt:OSX_CapsLock], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ESCAPE], [NSNumber numberWithInt:OSX_Escape], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SPACE], [NSNumber numberWithInt:OSX_kVK_Space], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_PAGE_UP], [NSNumber numberWithInt:OSX_PageUp], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_PAGE_DOWN], [NSNumber numberWithInt:OSX_PageDown], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_END], [NSNumber numberWithInt:OSX_End], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_HOME], [NSNumber numberWithInt:OSX_Home], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_LEFT], [NSNumber numberWithInt:OSX_LeftArrow], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_UP], [NSNumber numberWithInt:OSX_UpArrow], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_RIGHT], [NSNumber numberWithInt:OSX_RightArrow], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DOWN], [NSNumber numberWithInt:OSX_DownArrow], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_COMMA], [NSNumber numberWithInt:OSX_kVK_ANSI_Comma], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_MINUS], [NSNumber numberWithInt:OSX_kVK_ANSI_Minus], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_PERIOD], [NSNumber numberWithInt:OSX_kVK_ANSI_Period], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SLASH], [NSNumber numberWithInt:OSX_kVK_ANSI_Slash], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_0], [NSNumber numberWithInt:OSX_kVK_ANSI_0], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_1], [NSNumber numberWithInt:OSX_kVK_ANSI_1], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_2], [NSNumber numberWithInt:OSX_kVK_ANSI_2], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_3], [NSNumber numberWithInt:OSX_kVK_ANSI_3], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_4], [NSNumber numberWithInt:OSX_kVK_ANSI_4], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_5], [NSNumber numberWithInt:OSX_kVK_ANSI_5], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_6], [NSNumber numberWithInt:OSX_kVK_ANSI_6], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_7], [NSNumber numberWithInt:OSX_kVK_ANSI_7], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_8], [NSNumber numberWithInt:OSX_kVK_ANSI_8], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_9], [NSNumber numberWithInt:OSX_kVK_ANSI_9], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SEMICOLON], [NSNumber numberWithInt:OSX_kVK_ANSI_Semicolon], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_EQUALS], [NSNumber numberWithInt:OSX_kVK_ANSI_Equal], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_A], [NSNumber numberWithInt:OSX_kVK_ANSI_A], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_B], [NSNumber numberWithInt:OSX_kVK_ANSI_B], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_C], [NSNumber numberWithInt:OSX_kVK_ANSI_C], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_D], [NSNumber numberWithInt:OSX_kVK_ANSI_D], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_E], [NSNumber numberWithInt:OSX_kVK_ANSI_E], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F], [NSNumber numberWithInt:OSX_kVK_ANSI_F], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_G], [NSNumber numberWithInt:OSX_kVK_ANSI_G], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_H], [NSNumber numberWithInt:OSX_kVK_ANSI_H], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_I], [NSNumber numberWithInt:OSX_kVK_ANSI_I], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_J], [NSNumber numberWithInt:OSX_kVK_ANSI_J], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_K], [NSNumber numberWithInt:OSX_kVK_ANSI_K], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_L], [NSNumber numberWithInt:OSX_kVK_ANSI_L], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_M], [NSNumber numberWithInt:OSX_kVK_ANSI_M], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_N], [NSNumber numberWithInt:OSX_kVK_ANSI_N], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_O], [NSNumber numberWithInt:OSX_kVK_ANSI_O], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_P], [NSNumber numberWithInt:OSX_kVK_ANSI_P], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_Q], [NSNumber numberWithInt:OSX_kVK_ANSI_Q], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_R], [NSNumber numberWithInt:OSX_kVK_ANSI_R], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_S], [NSNumber numberWithInt:OSX_kVK_ANSI_S], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_T], [NSNumber numberWithInt:OSX_kVK_ANSI_T], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_U], [NSNumber numberWithInt:OSX_kVK_ANSI_U], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_V], [NSNumber numberWithInt:OSX_kVK_ANSI_V], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_W], [NSNumber numberWithInt:OSX_kVK_ANSI_W], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_X], [NSNumber numberWithInt:OSX_kVK_ANSI_X], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_Y], [NSNumber numberWithInt:OSX_kVK_ANSI_Y], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_Z], [NSNumber numberWithInt:OSX_kVK_ANSI_Z], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_OPEN_BRACKET], [NSNumber numberWithInt:OSX_kVK_ANSI_LeftBracket], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_BACK_SLASH], [NSNumber numberWithInt:OSX_kVK_ANSI_Backslash], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CLOSE_BRACKET], [NSNumber numberWithInt:OSX_kVK_ANSI_RightBracket], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD0], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad0], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD1], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad1], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD2], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad2], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD3], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad3], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD4], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad4], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD5], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad5], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD6], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad6], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD7], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad7], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD8], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad8], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD9], [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad9], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_MULTIPLY], [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadMultiply], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ADD], [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadPlus], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SUBTRACT], [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadMinus], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DECIMAL], [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadDecimal], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DIVIDE], [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadDivide], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F1], [NSNumber numberWithInt:OSX_F1], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F2], [NSNumber numberWithInt:OSX_F2], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F3], [NSNumber numberWithInt:OSX_F3], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F4], [NSNumber numberWithInt:OSX_F4], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F5], [NSNumber numberWithInt:OSX_F5], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F6], [NSNumber numberWithInt:OSX_F6], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F7], [NSNumber numberWithInt:OSX_F7], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F8], [NSNumber numberWithInt:OSX_F8], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F9], [NSNumber numberWithInt:OSX_F9], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F10], [NSNumber numberWithInt:OSX_F10], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F11], [NSNumber numberWithInt:OSX_F11], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F12], [NSNumber numberWithInt:OSX_F12], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DELETE], [NSNumber numberWithInt:OSX_ForwardDelete], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_HELP], [NSNumber numberWithInt:OSX_Help], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_META], [NSNumber numberWithInt:OSX_Command], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_BACK_QUOTE], [NSNumber numberWithInt:OSX_kVK_ANSI_Grave], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_QUOTE], [NSNumber numberWithInt:OSX_kVK_ANSI_Quote], + + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F13], [NSNumber numberWithInt:OSX_F13], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F14], [NSNumber numberWithInt:OSX_F14], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F15], [NSNumber numberWithInt:OSX_F15], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F16], [NSNumber numberWithInt:OSX_F16], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F17], [NSNumber numberWithInt:OSX_F17], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F18], [NSNumber numberWithInt:OSX_F18], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F19], [NSNumber numberWithInt:OSX_F19], + [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F20], [NSNumber numberWithInt:OSX_F20], + nil + ]; + + [osx2javaMap retain]; + } + + id val = [osx2javaMap objectForKey : [NSNumber numberWithInt : osxKeyCode]]; + if (nil != val) + return [val intValue]; + + return java_awt_event_KeyEvent_VK_UNDEFINED; +} + +JNIEXPORT jstring JNICALL Java_java_awt_desktop_SystemHotkey_osxKeyCodeDescription(JNIEnv* env, jclass clazz, jint osxKeyCode) { + static NSDictionary * osxCode2DescMap = nil; + if (osxCode2DescMap == nil) { + osxCode2DescMap = [NSDictionary dictionaryWithObjectsAndKeys: + @"A", [NSNumber numberWithInt:kVK_ANSI_A], + @"S", [NSNumber numberWithInt:kVK_ANSI_S], + @"D", [NSNumber numberWithInt:kVK_ANSI_D], + @"F", [NSNumber numberWithInt:kVK_ANSI_F], + @"H", [NSNumber numberWithInt:kVK_ANSI_H], + @"G", [NSNumber numberWithInt:kVK_ANSI_G], + @"Z", [NSNumber numberWithInt:kVK_ANSI_Z], + @"X", [NSNumber numberWithInt:kVK_ANSI_X], + @"C", [NSNumber numberWithInt:kVK_ANSI_C], + @"V", [NSNumber numberWithInt:kVK_ANSI_V], + @"B", [NSNumber numberWithInt:kVK_ANSI_B], + @"Q", [NSNumber numberWithInt:kVK_ANSI_Q], + @"W", [NSNumber numberWithInt:kVK_ANSI_W], + @"E", [NSNumber numberWithInt:kVK_ANSI_E], + @"R", [NSNumber numberWithInt:kVK_ANSI_R], + @"Y", [NSNumber numberWithInt:kVK_ANSI_Y], + @"T", [NSNumber numberWithInt:kVK_ANSI_T], + @"1", [NSNumber numberWithInt:kVK_ANSI_1], + @"2", [NSNumber numberWithInt:kVK_ANSI_2], + @"3", [NSNumber numberWithInt:kVK_ANSI_3], + @"4", [NSNumber numberWithInt:kVK_ANSI_4], + @"6", [NSNumber numberWithInt:kVK_ANSI_6], + @"5", [NSNumber numberWithInt:kVK_ANSI_5], + @"Equal", [NSNumber numberWithInt:kVK_ANSI_Equal], + @"9", [NSNumber numberWithInt:kVK_ANSI_9], + @"7", [NSNumber numberWithInt:kVK_ANSI_7], + @"Minus", [NSNumber numberWithInt:kVK_ANSI_Minus], + @"8", [NSNumber numberWithInt:kVK_ANSI_8], + @"0", [NSNumber numberWithInt:kVK_ANSI_0], + @"RightBracket", [NSNumber numberWithInt:kVK_ANSI_RightBracket], + @"O", [NSNumber numberWithInt:kVK_ANSI_O], + @"U", [NSNumber numberWithInt:kVK_ANSI_U], + @"LeftBracket", [NSNumber numberWithInt:kVK_ANSI_LeftBracket], + @"I", [NSNumber numberWithInt:kVK_ANSI_I], + @"P", [NSNumber numberWithInt:kVK_ANSI_P], + @"L", [NSNumber numberWithInt:kVK_ANSI_L], + @"J", [NSNumber numberWithInt:kVK_ANSI_J], + @"Quote", [NSNumber numberWithInt:kVK_ANSI_Quote], + @"K", [NSNumber numberWithInt:kVK_ANSI_K], + @"Semicolon", [NSNumber numberWithInt:kVK_ANSI_Semicolon], + @"Backslash", [NSNumber numberWithInt:kVK_ANSI_Backslash], + @"Comma", [NSNumber numberWithInt:kVK_ANSI_Comma], + @"Slash", [NSNumber numberWithInt:kVK_ANSI_Slash], + @"N", [NSNumber numberWithInt:kVK_ANSI_N], + @"M", [NSNumber numberWithInt:kVK_ANSI_M], + @"Period", [NSNumber numberWithInt:kVK_ANSI_Period], + @"Grave", [NSNumber numberWithInt:kVK_ANSI_Grave], + @"KeypadDecimal", [NSNumber numberWithInt:kVK_ANSI_KeypadDecimal], + @"KeypadMultiply", [NSNumber numberWithInt:kVK_ANSI_KeypadMultiply], + @"KeypadPlus", [NSNumber numberWithInt:kVK_ANSI_KeypadPlus], + @"KeypadClear", [NSNumber numberWithInt:kVK_ANSI_KeypadClear], + @"KeypadDivide", [NSNumber numberWithInt:kVK_ANSI_KeypadDivide], + @"KeypadEnter", [NSNumber numberWithInt:kVK_ANSI_KeypadEnter], + @"KeypadMinus", [NSNumber numberWithInt:kVK_ANSI_KeypadMinus], + @"KeypadEquals", [NSNumber numberWithInt:kVK_ANSI_KeypadEquals], + @"Keypad0", [NSNumber numberWithInt:kVK_ANSI_Keypad0], + @"Keypad1", [NSNumber numberWithInt:kVK_ANSI_Keypad1], + @"Keypad2", [NSNumber numberWithInt:kVK_ANSI_Keypad2], + @"Keypad3", [NSNumber numberWithInt:kVK_ANSI_Keypad3], + @"Keypad4", [NSNumber numberWithInt:kVK_ANSI_Keypad4], + @"Keypad5", [NSNumber numberWithInt:kVK_ANSI_Keypad5], + @"Keypad6", [NSNumber numberWithInt:kVK_ANSI_Keypad6], + @"Keypad7", [NSNumber numberWithInt:kVK_ANSI_Keypad7], + @"Keypad8", [NSNumber numberWithInt:kVK_ANSI_Keypad8], + @"Keypad9", [NSNumber numberWithInt:kVK_ANSI_Keypad9], + + /* keycodes for keys that are independent of keyboard layout*/ + @"Return", [NSNumber numberWithInt:kVK_Return], + @"Tab", [NSNumber numberWithInt:kVK_Tab], + @"Space", [NSNumber numberWithInt:kVK_Space], + @"Delete", [NSNumber numberWithInt:kVK_Delete], + @"Escape", [NSNumber numberWithInt:kVK_Escape], + @"Command", [NSNumber numberWithInt:kVK_Command], + @"Shift", [NSNumber numberWithInt:kVK_Shift], + @"CapsLock", [NSNumber numberWithInt:kVK_CapsLock], + @"Option", [NSNumber numberWithInt:kVK_Option], + @"Control", [NSNumber numberWithInt:kVK_Control], + @"RightCommand", [NSNumber numberWithInt:kVK_RightCommand], + @"RightShift", [NSNumber numberWithInt:kVK_RightShift], + @"RightOption", [NSNumber numberWithInt:kVK_RightOption], + @"RightControl", [NSNumber numberWithInt:kVK_RightControl], + @"Function", [NSNumber numberWithInt:kVK_Function], + @"F17", [NSNumber numberWithInt:kVK_F17], + @"VolumeUp", [NSNumber numberWithInt:kVK_VolumeUp], + @"VolumeDown", [NSNumber numberWithInt:kVK_VolumeDown], + @"Mute", [NSNumber numberWithInt:kVK_Mute], + @"F18", [NSNumber numberWithInt:kVK_F18], + @"F19", [NSNumber numberWithInt:kVK_F19], + @"F20", [NSNumber numberWithInt:kVK_F20], + @"F5", [NSNumber numberWithInt:kVK_F5], + @"F6", [NSNumber numberWithInt:kVK_F6], + @"F7", [NSNumber numberWithInt:kVK_F7], + @"F3", [NSNumber numberWithInt:kVK_F3], + @"F8", [NSNumber numberWithInt:kVK_F8], + @"F9", [NSNumber numberWithInt:kVK_F9], + @"F11", [NSNumber numberWithInt:kVK_F11], + @"F13", [NSNumber numberWithInt:kVK_F13], + @"F16", [NSNumber numberWithInt:kVK_F16], + @"F14", [NSNumber numberWithInt:kVK_F14], + @"F10", [NSNumber numberWithInt:kVK_F10], + @"F12", [NSNumber numberWithInt:kVK_F12], + @"F15", [NSNumber numberWithInt:kVK_F15], + @"Help", [NSNumber numberWithInt:kVK_Help], + @"Home", [NSNumber numberWithInt:kVK_Home], + @"PageUp", [NSNumber numberWithInt:kVK_PageUp], + @"ForwardDelete", [NSNumber numberWithInt:kVK_ForwardDelete], + @"F4", [NSNumber numberWithInt:kVK_F4], + @"End", [NSNumber numberWithInt:kVK_End], + @"F2", [NSNumber numberWithInt:kVK_F2], + @"PageDown", [NSNumber numberWithInt:kVK_PageDown], + @"F1", [NSNumber numberWithInt:kVK_F1], + @"LeftArrow", [NSNumber numberWithInt:kVK_LeftArrow], + @"RightArrow", [NSNumber numberWithInt:kVK_RightArrow], + @"DownArrow", [NSNumber numberWithInt:kVK_DownArrow], + @"UpArrow", [NSNumber numberWithInt:kVK_UpArrow], + nil + ]; + + [osxCode2DescMap retain]; + } + + NSString * val = [osxCode2DescMap objectForKey : [NSNumber numberWithInt : osxKeyCode]]; + if (val == nil) + return NULL; + + return (*env)->NewStringUTF(env, val.UTF8String); +} + +static NSDictionary * getDefaultParams() { + static NSDictionary * sid2defaults = nil; + if (sid2defaults == nil) { + sid2defaults = [NSDictionary dictionaryWithObjectsAndKeys: + [DefaultParams create:@"@$b" enabled:NO], @"com.apple.BluetoothFileExchange - Send File To Bluetooth Device - sendFileUsingBluetoothOBEXService", + [DefaultParams create:@"@^$c" enabled:YES], @"com.apple.ChineseTextConverterService - Convert Text from Simplified to Traditional Chinese - convertTextToTraditionalChinese", + [DefaultParams create:@"@~^$c" enabled:YES], @"com.apple.ChineseTextConverterService - Convert Text from Traditional to Simplified Chinese - convertTextToSimplifiedChinese", + [DefaultParams create:@"@$l" enabled:YES], @"com.apple.Safari - Search With %WebSearchProvider@ - searchWithWebSearchProvider", + [DefaultParams create:@"@*" enabled:NO], @"com.apple.ScriptEditor2 - Script Editor/Get Result of AppleScript - runAsAppleScript", + [DefaultParams create:@"@$f" enabled:NO], @"com.apple.SpotlightService - SEARCH_WITH_SPOTLIGHT - doSearchWithSpotlight", + [DefaultParams create:@"@$y" enabled:YES], @"com.apple.Stickies - Make Sticky - makeStickyFromTextService", + [DefaultParams create:@"@$m" enabled:YES], @"com.apple.Terminal - Open man Page in Terminal - openManPage", + [DefaultParams create:@"@$a" enabled:YES], @"com.apple.Terminal - Search man Page Index in Terminal - searchManPages", + nil + ]; + + [sid2defaults retain]; + } + + return sid2defaults; +} + +static NSMutableDictionary * createDefaultParams() { + NSDictionary * sid2defaults = getDefaultParams(); + NSMutableDictionary * result = [NSMutableDictionary dictionaryWithCapacity:[sid2defaults count]]; + [result setDictionary:sid2defaults]; + return result; +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.h index cfdd1faee61e..0679528b5816 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.h @@ -26,5 +26,7 @@ #import "CommonComponentAccessibility.h" -@interface ComboBoxAccessibility : CommonComponentAccessibility +@interface ComboBoxAccessibility : CommonComponentAccessibility { + CommonComponentAccessibility *value; +} @end diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.m index 52f171e9dedd..4780144e249e 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/ComboBoxAccessibility.m @@ -49,14 +49,64 @@ - (CommonComponentAccessibility *)accessibleSelection if (axSelectedChild == NULL) { return nil; } - return [CommonComponentAccessibility createWithAccessible:axSelectedChild withEnv:env withView:fView]; + if (value != nil) { + [value release]; + value = nil; + } + value = [[CommonComponentAccessibility createWithAccessible:axSelectedChild withEnv:env withView:fView] retain]; + return value; +} + +- (BOOL)isEditable +{ + JNIEnv* env = [ThreadUtilities getJNIEnv]; + GET_CACCESSIBILITY_CLASS_RETURN(NO); + DECLARE_STATIC_METHOD_RETURN(sjm_isComboBoxEditable, sjc_CAccessibility, "isComboBoxEditable", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Z", NO); + + BOOL isEditable = (*env)->CallStaticBooleanMethod(env, sjc_CAccessibility, sjm_isComboBoxEditable, fAccessible, fComponent); + CHECK_EXCEPTION(); + + return isEditable; } // NSAccessibilityElement protocol methods - (id)accessibilityValue { - return [[self accessibleSelection] accessibilityLabel]; + JNIEnv *env = [ThreadUtilities getJNIEnv]; + BOOL expanded = isExpanded(env, [self axContextWithEnv:env], fComponent); + if (expanded) { + return nil; + } + + [self accessibleSelection]; + + return value != nil ? [value accessibilityLabel] : nil; +} + +- (NSArray *)accessibilitySelectedChildren +{ + CommonComponentAccessibility *accessibleSelection = [self accessibleSelection]; + if (accessibleSelection == nil) { + return nil; + } + return [NSArray arrayWithObject:accessibleSelection]; +} + +- (NSAccessibilityRole)accessibilityRole +{ + return [self isEditable] + ? NSAccessibilityComboBoxRole + : NSAccessibilityPopUpButtonRole; +} + +- (void)dealloc +{ + if (value != nil) { + [value release]; + value = nil; + } + [super dealloc]; } @end diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.h index be0169a064df..a16b7b84c1b4 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.h @@ -62,6 +62,7 @@ - (BOOL)isAccessibleWithEnv:(JNIEnv _Nonnull * _Nonnull)env forAccessible:(nonnull jobject)accessible; + (void)postFocusChanged:(nullable id)message; ++ (void)postAnnounceWithCaller:(id _Nonnull)caller andText:(NSString * _Nonnull)text andPriority:(NSNumber * _Nonnull)priority; + (void) initializeRolesMap; @@ -102,6 +103,7 @@ - (NSRect)accessibilityFrame; - (id _Nullable)accessibilityParent; - (BOOL)isAccessibilityElement; +- (BOOL)isLocationOnScreenValid; @end #endif diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.m index 41a3accd0a59..80ee1fd1a333 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/CommonComponentAccessibility.m @@ -34,7 +34,7 @@ #import "AWTView.h" #import "sun_lwawt_macosx_CAccessible.h" #import "sun_lwawt_macosx_CAccessibility.h" - +#import "sun_swing_AccessibleAnnouncer.h" // GET* macros defined in JavaAccessibilityUtilities.h, so they can be shared. static jclass sjc_CAccessibility = NULL; @@ -55,7 +55,7 @@ #define GET_CHILDRENANDROLESRECURSIVE_METHOD_RETURN(ret) \ GET_CACCESSIBILITY_CLASS_RETURN(ret); \ GET_STATIC_METHOD_RETURN(jm_getChildrenAndRolesRecursive, sjc_CAccessibility, "getChildrenAndRolesRecursive",\ - "(Ljavax/accessibility/Accessible;Ljava/awt/Component;IZI)[Ljava/lang/Object;", ret); + "(Ljavax/accessibility/Accessible;Ljava/awt/Component;IZ)[Ljava/lang/Object;", ret); static jmethodID sjm_getAccessibleComponent = NULL; #define GET_ACCESSIBLECOMPONENT_STATIC_METHOD_RETURN(ret) \ @@ -73,6 +73,9 @@ #define GET_CACCESSIBLE_CLASS_RETURN(ret) \ GET_CLASS_RETURN(sjc_CAccessible, "sun/lwawt/macosx/CAccessible", ret); +#define GET_CACCESSIBLE_CLASS() \ + GET_CLASS(sjc_CAccessible, "sun/lwawt/macosx/CAccessible"); + static NSMutableDictionary * _Nullable rolesMap; static NSMutableDictionary * _Nullable rowRolesMapForParent; NSString *const IgnoreClassName = @"IgnoreAccessibility"; @@ -421,7 +424,34 @@ + (void)initialize + (void)postFocusChanged:(id)message { AWT_ASSERT_APPKIT_THREAD; - NSAccessibilityPostNotification([NSApp accessibilityFocusedUIElement], NSAccessibilityFocusedUIElementChangedNotification); + id focusedUIElement = [NSApp accessibilityFocusedUIElement]; + NSAccessibilityPostNotification(focusedUIElement, NSAccessibilityFocusedUIElementChangedNotification); + + if (UAZoomEnabled() && [focusedUIElement isKindOfClass:[CommonComponentAccessibility class]]) { + [(CommonComponentAccessibility*)focusedUIElement postZoomChangeFocus]; + } +} + ++ (void)postAnnounceWithCaller:(id)caller andText:(NSString *)text andPriority:(NSNumber *)priority +{ + AWT_ASSERT_APPKIT_THREAD; + + NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; + [dictionary setObject:text forKey: NSAccessibilityAnnouncementKey]; + + if (sAnnouncePriorities == nil) { + initializeAnnouncePriorities(); + } + + NSNumber *nsPriority = [sAnnouncePriorities objectForKey:priority]; + + if (nsPriority == nil) { + nsPriority = [sAnnouncePriorities objectForKey:[NSNumber numberWithInt:sun_swing_AccessibleAnnouncer_ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT]]; + } + + [dictionary setObject:nsPriority forKey:NSAccessibilityPriorityKey]; + + NSAccessibilityPostNotificationWithUserInfo(caller, NSAccessibilityAnnouncementRequestedNotification, dictionary); } + (jobject) getCAccessible:(jobject)jaccessible withEnv:(JNIEnv *)env { @@ -458,7 +488,7 @@ + (NSArray *)childrenOfParent:(CommonComponentAccessibility *)parent withEnv:(JN if (recursive) { GET_CHILDRENANDROLESRECURSIVE_METHOD_RETURN(nil); jchildrenAndRoles = (jobjectArray)(*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getChildrenAndRolesRecursive, - parent->fAccessible, parent->fComponent, whichChildren, allowIgnored, 0); + parent->fAccessible, parent->fComponent, whichChildren, allowIgnored); CHECK_EXCEPTION(); } else { GET_CHILDRENANDROLES_METHOD_RETURN(nil); @@ -1227,6 +1257,68 @@ - (BOOL)accessibilityPerformIncrement { return [self accessiblePerformAction:NSAccessibilityIncrementAction]; } +- (void)postZoomChangeFocus { + AWT_ASSERT_APPKIT_THREAD; + + if (![self isEqual:[NSApp accessibilityFocusedUIElement]] || ![self isLocationOnScreenValid]) return; + + NSRect frame = [self accessibilityFrame]; + + if (CGSizeEqualToSize(frame.size, CGSizeZero)) return; + + CommonComponentAccessibility* parent = [self typeSafeParent]; + if (parent != nil) { + NSRect parentFrame = [parent accessibilityFrame]; + // For scrollable components, the accessibilityFrame's height/width is equal to the full scrollable length. + // We want to focus only on the visible part, so limit it to the parent's frame. + frame = NSIntersectionRect(frame, parentFrame); + } + + // UAZoomChangeFocus needs non flipped coordinates (as in Java). + NSRect screenFrame = [[[NSScreen screens] objectAtIndex:0] frame]; + frame.origin.y = screenFrame.size.height - frame.origin.y - frame.size.height; + + CGRect selectedChildBounds = CGRectNull; + NSArray* selectedChildren = [self accessibilitySelectedChildren]; + if (selectedChildren != nil && selectedChildren.count > 0) { + // Use accessibility frame of only the first selected child instead of combined frames of all selected children, + // because there may be a lot of selected children and calculating all their accessibility frames + // could become a performance issue. + CommonComponentAccessibility *child = [selectedChildren objectAtIndex:0]; + if (child != nil && [child isLocationOnScreenValid]) { + NSRect childFrame = [child accessibilityFrame]; + if (!CGSizeEqualToSize(childFrame.size, CGSizeZero)) { + selectedChildBounds = childFrame; + selectedChildBounds.origin.y = screenFrame.size.height - selectedChildBounds.origin.y - selectedChildBounds.size.height; + } + } + } + + UAZoomChangeFocus(&frame, !CGRectIsNull(selectedChildBounds) ? &selectedChildBounds : NULL, kUAZoomFocusTypeOther); +} + +// This method checks that getLocationOnScreen won't return null. The accessibilityFrame uses getLocationOnScreen, but +// it doesn't distinguish between 0;0 location and invalid (null) location. In case of posting UA Zoom focus change, +// we want to ignore invalid location, but not 0;0 coordinates, so we check it separately. +// We still need to use accessibilityFrame to get the location and size for Zoom, because components can override +// accessibilityFrame implementation. +- (BOOL)isLocationOnScreenValid { + JNIEnv *env = [ThreadUtilities getJNIEnv]; + GET_ACCESSIBLECOMPONENT_STATIC_METHOD_RETURN(FALSE); + jobject axComponent = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, sjm_getAccessibleComponent, + fAccessible, fComponent); + CHECK_EXCEPTION(); + DECLARE_STATIC_METHOD_RETURN(jm_getLocationOnScreen, sjc_CAccessibility, "getLocationOnScreen", + "(Ljavax/accessibility/AccessibleComponent;Ljava/awt/Component;)Ljava/awt/Point;", FALSE); + jobject jpoint = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getLocationOnScreen, + axComponent, fComponent); + CHECK_EXCEPTION(); + (*env)->DeleteLocalRef(env, axComponent); + BOOL isLocationValid = jpoint != NULL; + (*env)->DeleteLocalRef(env, jpoint); + return isLocationValid; +} + @end /* @@ -1324,3 +1416,118 @@ - (BOOL)accessibilityPerformIncrement { waitUntilDone:NO]; JNI_COCOA_EXIT(env); } + +/* + * Class: sun_lwawt_macosx_CAccessibility + * Method: focusChanged + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged + (JNIEnv *env, jobject jthis) +{ + JNI_COCOA_ENTER(env); + [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) + on:[CommonComponentAccessibility class] + withObject:nil + waitUntilDone:NO]; + JNI_COCOA_EXIT(env); +} + +/* + * Class: sun_lwawt_macosx_CAccessible + * Method: updateZoomFocus + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_updateZoomFocus + (JNIEnv *env, jclass jklass, jlong element) +{ + if (!UAZoomEnabled()) return; + + JNI_COCOA_ENTER(env); + [ThreadUtilities performOnMainThread:@selector(postZoomChangeFocus) + on:(CommonComponentAccessibility *) jlong_to_ptr(element) + withObject:nil + waitUntilDone:NO]; + JNI_COCOA_EXIT(env); +} + + +static void nativeAnnounceAppKit(jobject jAccessible, NSString *text, NSNumber *javaPriority); + +/* + * Class: sun_swing_AccessibleAnnouncer + * Method: nativeAnnounce + * Signature: (Ljavax/accessibility/Accessible;Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL Java_sun_swing_AccessibleAnnouncer_nativeAnnounce + (JNIEnv *env, jclass cls, jobject jAccessible, jstring str, jint priority) +{ + JNI_COCOA_ENTER(env); + + NSString *const text = JavaStringToNSString(env, str); + NSNumber *const javaPriority = [NSNumber numberWithInt:priority]; + + // From JNI specification: + // > Local references are only valid in the thread in which they are created. + // > The native code must not pass local references from one thread to another. + // + // So we have to create a global ref and pass it to the AppKit thread. + const jobject jAccessibleGlobalRef = (jAccessible == NULL) ? NULL : (*env)->NewGlobalRef(env, jAccessible); + + [ThreadUtilities performOnMainThreadWaiting:YES block:^{ + nativeAnnounceAppKit(jAccessibleGlobalRef, text, javaPriority); + }]; + + if (jAccessibleGlobalRef != NULL) { + (*env)->DeleteGlobalRef(env, jAccessibleGlobalRef); + } + + JNI_COCOA_EXIT(env); +} + +void nativeAnnounceAppKit( + const jobject jAccessible, + NSString * const text, + NSNumber * const javaPriority +) { + AWT_ASSERT_APPKIT_THREAD; + assert((text != NULL)); + assert((javaPriority != NULL)); + + JNIEnv* const env = [ThreadUtilities getJNIEnv]; + if (env == NULL) { // unlikely + NSLog(@"%s: failed to get JNIEnv instance\n%@\n", __func__, [NSThread callStackSymbols]); + return; // I believe it's dangerous to go on announcing in that case + } + + id caller = nil; + + // The meaning of this block is the following: + // if jAccessible is an instance of "javax/accessibility/Accessible" + // and sun.lwawt.macosx.CAccessible#getCAccessible(jAccessible) returns a non-null object + // then we obtain its private field sun.lwawt.macosx.CAccessible#ptr + // (which is a pointer to a native "part" of the accessible component) + // and assign it to caller + if (jAccessible != NULL) { + DECLARE_CLASS(jc_Accessible, "javax/accessibility/Accessible"); + + if ((*env)->IsInstanceOf(env, jAccessible, jc_Accessible) == JNI_TRUE) { + const jobject jCAX = [CommonComponentAccessibility getCAccessible:jAccessible withEnv:env]; + + if (jCAX != NULL) { + GET_CACCESSIBLE_CLASS(); + DECLARE_FIELD(jf_ptr, sjc_CAccessible, "ptr", "J"); + + caller = (CommonComponentAccessibility*)jlong_to_ptr((*env)->GetLongField(env, jCAX, jf_ptr)); + + (*env)->DeleteLocalRef(env, jCAX); + } + } + } + + if (caller == nil) { + caller = [NSApp accessibilityFocusedUIElement]; + } + + [CommonComponentAccessibility postAnnounceWithCaller:caller andText:text andPriority:javaPriority]; +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/MenuAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/MenuAccessibility.m index e8b28d930685..483c9a16752d 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/MenuAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/MenuAccessibility.m @@ -43,7 +43,7 @@ - (NSAccessibilityRole _Nonnull)accessibilityRole - (BOOL)isAccessibilityElement { - return YES; + return [[[self accessibilityParent] accessibilityRole] isEqualToString:NSAccessibilityComboBoxRole]; } - (id _Nullable)accessibilityValue diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/NavigableTextAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/NavigableTextAccessibility.m index 138d502f10fb..288efb5a39e6 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/NavigableTextAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/NavigableTextAccessibility.m @@ -306,6 +306,49 @@ - (id)accessibilityParent return [super accessibilityParent]; } + +/* + * Class: sun_lwawt_macosx_CAccessible + * Method: updateZoomCaretFocus + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_updateZoomCaretFocus + (JNIEnv *env, jclass jklass, jlong element) +{ + if (!UAZoomEnabled()) return; + + JNI_COCOA_ENTER(env); + [ThreadUtilities performOnMainThread:@selector(postZoomChangeCaretFocus) + on:(NavigableTextAccessibility *) jlong_to_ptr(element) + withObject:nil + waitUntilDone:NO]; + JNI_COCOA_EXIT(env); +} + +- (void)postZoomChangeCaretFocus +{ + AWT_ASSERT_APPKIT_THREAD; + + if (![self isEqual:[NSApp accessibilityFocusedUIElement]]) return; + + JNIEnv *env = [ThreadUtilities getJNIEnv]; + + GET_CACCESSIBLETEXT_CLASS(); + DECLARE_STATIC_METHOD(jm_getCaretRectangle, sjc_CAccessibleText, "getCaretRectangle", + "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)[D"); + jdoubleArray axCaretBounds = (jdoubleArray) (*env)->CallStaticObjectMethod(env, sjc_CAccessibleText, + jm_getCaretRectangle, fAccessible, + fComponent); + CHECK_EXCEPTION(); + if (axCaretBounds == NULL) return; + + jdouble *values = (*env)->GetDoubleArrayElements(env, axCaretBounds, NULL); + CGRect caretRect = CGRectMake(values[0], values[1], values[2], values[3]); + (*env)->ReleaseDoubleArrayElements(env, axCaretBounds, values, JNI_ABORT); + + UAZoomChangeFocus(&caretRect, &caretRect, kUAZoomFocusTypeInsertionPoint); +} + /* * Other text methods - (NSRange)accessibilitySharedCharacterRange; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/StaticTextAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/StaticTextAccessibility.m index b54a32be5eba..007744f5ecdd 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/StaticTextAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/StaticTextAccessibility.m @@ -29,6 +29,9 @@ @implementation StaticTextAccessibility - (NSAccessibilityRole _Nonnull)accessibilityRole { + if ([fJavaRole isEqualToString:@"hyperlink"]) { + return NSAccessibilityLinkRole; + } return NSAccessibilityStaticTextRole; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableRowAccessibility.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableRowAccessibility.m index 7c9f9bcb7449..7f298a5b5515 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableRowAccessibility.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableRowAccessibility.m @@ -152,6 +152,10 @@ - (NSRect)accessibilityFrame return NSMakeRect(point.x, point.y, width, height); } +- (BOOL)isLocationOnScreenValid { + return [[[self accessibilityChildren] objectAtIndex:0] isLocationOnScreenValid]; +} + - (BOOL)isAccessibilityOrderedByRow { return YES; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.h b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.h index 3c1ca208c70b..6130e3891601 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.h @@ -32,6 +32,7 @@ @public NSFont *fFont; CGFontRef fNativeCGFont; + NSFont *fFallbackBase; // used for system fonts BOOL fIsFakeItalic; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m index 5e1d6ba0cb1c..4e8044d9bf2d 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m @@ -36,16 +36,20 @@ @implementation AWTFont -- (id) initWithFont:(NSFont *)font { +- (id) initWithFont:(NSFont *)font fallbackBase:(NSFont *)fallbackBaseFont { self = [super init]; if (self) { fFont = [font retain]; fNativeCGFont = CTFontCopyGraphicsFont((CTFontRef)font, NULL); + fFallbackBase = [fallbackBaseFont retain]; } return self; } - (void) dealloc { + [fFallbackBase release]; + fFallbackBase = nil; + [fFont release]; fFont = nil; @@ -73,13 +77,16 @@ + (AWTFont *) awtFontForName:(NSString *)name { // create font with family & size NSFont *nsFont = nil; + NSFont *nsFallbackBase = nil; if ((uiName != nil && [name isEqualTo:uiName]) || (uiBoldName != nil && [name isEqualTo:uiBoldName])) { if (style & java_awt_Font_BOLD) { nsFont = [NSFont boldSystemFontOfSize:1.0]; + nsFallbackBase = [NSFont fontWithName:@"LucidaGrande-Bold" size:1.0]; } else { nsFont = [NSFont systemFontOfSize:1.0]; + nsFallbackBase = [NSFont fontWithName:@"LucidaGrande" size:1.0]; } #ifdef DEBUG NSLog(@"nsFont-name is : %@", nsFont.familyName); @@ -110,7 +117,7 @@ + (AWTFont *) awtFontForName:(NSString *)name nsFont = [[NSFontManager sharedFontManager] convertFont:nsFont toHaveTrait:NSBoldFontMask]; } - return [[[AWTFont alloc] initWithFont:nsFont] autorelease]; + return [[[AWTFont alloc] initWithFont:nsFont fallbackBase:nsFallbackBase] autorelease]; } + (NSFont *) nsFontForJavaFont:(jobject)javaFont env:(JNIEnv *)env { @@ -177,6 +184,7 @@ + (NSFont *) nsFontForJavaFont:(jobject)javaFont env:(JNIEnv *)env { static NSArray* sFilteredFonts = nil; static NSDictionary* sFontFamilyTable = nil; +static NSDictionary* sFontFaceTable = nil; static NSString* GetFamilyNameForFontName(NSString* fontname) @@ -184,9 +192,16 @@ + (NSFont *) nsFontForJavaFont:(jobject)javaFont env:(JNIEnv *)env { return [sFontFamilyTable objectForKey:fontname]; } +static NSString* +GetFaceForFontName(NSString* fontname) +{ + return [sFontFaceTable objectForKey:fontname]; +} + static void addFont(CTFontUIFontType uiType, NSMutableArray *allFonts, - NSMutableDictionary* fontFamilyTable) { + NSMutableDictionary* fontFamilyTable, + NSMutableDictionary* fontFacesTable) { CTFontRef font = CTFontCreateUIFontForLanguage(uiType, 0.0, NULL); if (font == NULL) { @@ -210,6 +225,7 @@ static void addFont(CTFontUIFontType uiType, CFRelease(font); return; } + CFStringRef face = CTFontDescriptorCopyAttribute(desc, kCTFontStyleNameAttribute); if (uiType == kCTFontUIFontSystem) { uiName = (NSString*)name; } @@ -218,61 +234,2888 @@ static void addFont(CTFontUIFontType uiType, } [allFonts addObject:name]; [fontFamilyTable setObject:family forKey:name]; + if (face) { + [fontFacesTable setObject:face forKey:name]; + } #ifdef DEBUG NSLog(@"name is : %@", (NSString*)name); NSLog(@"family is : %@", (NSString*)family); + NSLog(@"face is : %@", (NSString*)face); #endif + if (face) { + CFRelease(face); + } CFRelease(family); CFRelease(name); CFRelease(desc); CFRelease(font); } +static NSDictionary* prebuiltFamilyNames() { + return @{ + @"..SFCompactDisplay-Regular" : @".SF Compact Display", + @"..SFCompactRounded-Regular" : @".SF Compact Rounded", + @"..SFCompactText-Italic" : @".SF Compact Text", + @"..SFCompactText-Regular" : @".SF Compact Text", + @".AlBayanPUA" : @".Al Bayan PUA", + @".AlBayanPUA-Bold" : @".Al Bayan PUA", + @".AlNilePUA" : @".Al Nile PUA", + @".AlNilePUA-Bold" : @".Al Nile PUA", + @".AlTarikhPUA" : @".Al Tarikh PUA", + @".AppleColorEmojiUI" : @".Apple Color Emoji UI", + @".AppleSDGothicNeoI-Bold" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-ExtraBold" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-Heavy" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-Light" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-Medium" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-Regular" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-SemiBold" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-Thin" : @".Apple SD Gothic NeoI", + @".AppleSDGothicNeoI-UltraLight" : @".Apple SD Gothic NeoI", + @".ArabicUIDisplay-Black" : @".Arabic UI Display", + @".ArabicUIDisplay-Bold" : @".Arabic UI Display", + @".ArabicUIDisplay-Heavy" : @".Arabic UI Display", + @".ArabicUIDisplay-Light" : @".Arabic UI Display", + @".ArabicUIDisplay-Medium" : @".Arabic UI Display", + @".ArabicUIDisplay-Regular" : @".Arabic UI Display", + @".ArabicUIDisplay-Semibold" : @".Arabic UI Display", + @".ArabicUIDisplay-Thin" : @".Arabic UI Display", + @".ArabicUIDisplay-Ultralight" : @".Arabic UI Display", + @".ArabicUIText-Bold" : @".Arabic UI Text", + @".ArabicUIText-Heavy" : @".Arabic UI Text", + @".ArabicUIText-Light" : @".Arabic UI Text", + @".ArabicUIText-Medium" : @".Arabic UI Text", + @".ArabicUIText-Regular" : @".Arabic UI Text", + @".ArabicUIText-Semibold" : @".Arabic UI Text", + @".ArialHebrewDeskInterface" : @".Arial Hebrew Desk Interface", + @".ArialHebrewDeskInterface-Bold" : @".Arial Hebrew Desk Interface", + @".ArialHebrewDeskInterface-Light" : @".Arial Hebrew Desk Interface", + @".BaghdadPUA" : @".Baghdad PUA", + @".BeirutPUA" : @".Beirut PUA", + @".DamascusPUA" : @".Damascus PUA", + @".DamascusPUABold" : @".Damascus PUA", + @".DamascusPUALight" : @".Damascus PUA", + @".DamascusPUAMedium" : @".Damascus PUA", + @".DamascusPUASemiBold" : @".Damascus PUA", + @".DecoTypeNaskhPUA" : @".DecoType Naskh PUA", + @".DiwanKufiPUA" : @".Diwan Kufi PUA", + @".FarahPUA" : @".Farah PUA", + @".GeezaProInterface" : @".Geeza Pro Interface", + @".GeezaProInterface-Bold" : @".Geeza Pro Interface", + @".GeezaProInterface-Light" : @".Geeza Pro Interface", + @".GeezaProPUA" : @".Geeza Pro PUA", + @".GeezaProPUA-Bold" : @".Geeza Pro PUA", + @".HelveticaNeueDeskInterface-Bold" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-BoldItalic" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-Heavy" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-Italic" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-Light" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-MediumItalicP4" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-MediumP4" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-Regular" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-Thin" : @".Helvetica Neue DeskInterface", + @".HelveticaNeueDeskInterface-UltraLightP2" : @".Helvetica Neue DeskInterface", + @".HiraKakuInterface-W0" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W1" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W2" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W3" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W4" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W5" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W6" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W7" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W8" : @".Hiragino Kaku Gothic Interface", + @".HiraKakuInterface-W9" : @".Hiragino Kaku Gothic Interface", + @".HiraginoSansGBInterface-W3" : @".Hiragino Sans GB Interface", + @".HiraginoSansGBInterface-W6" : @".Hiragino Sans GB Interface", + @".Keyboard" : @".Keyboard", + @".KufiStandardGKPUA" : @".KufiStandardGK PUA", + @".LucidaGrandeUI" : @".Lucida Grande UI", + @".LucidaGrandeUI-Bold" : @".Lucida Grande UI", + @".MunaPUA" : @".Muna PUA", + @".MunaPUABlack" : @".Muna PUA", + @".MunaPUABold" : @".Muna PUA", + @".NadeemPUA" : @".Nadeem PUA", + @".NewYork-Black" : @".New York", + @".NewYork-BlackItalic" : @".New York", + @".NewYork-Bold" : @".New York", + @".NewYork-BoldG1" : @".New York", + @".NewYork-BoldG2" : @".New York", + @".NewYork-BoldG3" : @".New York", + @".NewYork-BoldG4" : @".New York", + @".NewYork-BoldItalic" : @".New York", + @".NewYork-BoldItalicG1" : @".New York", + @".NewYork-BoldItalicG2" : @".New York", + @".NewYork-BoldItalicG3" : @".New York", + @".NewYork-BoldItalicG4" : @".New York", + @".NewYork-Heavy" : @".New York", + @".NewYork-HeavyItalic" : @".New York", + @".NewYork-Medium" : @".New York", + @".NewYork-MediumItalic" : @".New York", + @".NewYork-Regular" : @".New York", + @".NewYork-RegularG1" : @".New York", + @".NewYork-RegularG2" : @".New York", + @".NewYork-RegularG3" : @".New York", + @".NewYork-RegularG4" : @".New York", + @".NewYork-RegularItalic" : @".New York", + @".NewYork-RegularItalicG1" : @".New York", + @".NewYork-RegularItalicG2" : @".New York", + @".NewYork-RegularItalicG3" : @".New York", + @".NewYork-RegularItalicG4" : @".New York", + @".NewYork-Semibold" : @".New York", + @".NewYork-SemiboldItalic" : @".New York", + @".SFArabic-Black" : @".SF Arabic", + @".SFArabic-Bold" : @".SF Arabic", + @".SFArabic-Heavy" : @".SF Arabic", + @".SFArabic-Light" : @".SF Arabic", + @".SFArabic-Medium" : @".SF Arabic", + @".SFArabic-Regular" : @".SF Arabic", + @".SFArabic-Semibold" : @".SF Arabic", + @".SFArabic-Thin" : @".SF Arabic", + @".SFArabic-Ultralight" : @".SF Arabic", + @".NotoNastaliqUrduUI" : @".Noto Nastaliq Urdu UI", + @".NotoNastaliqUrduUI-Bold" : @".Noto Nastaliq Urdu UI", + @".PingFangHK-Light" : @".PingFang HK", + @".PingFangHK-Medium" : @".PingFang HK", + @".PingFangHK-Regular" : @".PingFang HK", + @".PingFangHK-Semibold" : @".PingFang HK", + @".PingFangHK-Thin" : @".PingFang HK", + @".PingFangHK-Ultralight" : @".PingFang HK", + @".PingFangSC-Light" : @".PingFang SC", + @".PingFangSC-Medium" : @".PingFang SC", + @".PingFangSC-Regular" : @".PingFang SC", + @".PingFangSC-Semibold" : @".PingFang SC", + @".PingFangSC-Thin" : @".PingFang SC", + @".PingFangSC-Ultralight" : @".PingFang SC", + @".PingFangTC-Light" : @".PingFang TC", + @".PingFangTC-Medium" : @".PingFang TC", + @".PingFangTC-Regular" : @".PingFang TC", + @".PingFangTC-Semibold" : @".PingFang TC", + @".PingFangTC-Thin" : @".PingFang TC", + @".PingFangTC-Ultralight" : @".PingFang TC", + @".SFCompactDisplay-Black" : @".SF Compact Display", + @".SFCompactDisplay-Bold" : @".SF Compact Display", + @".SFCompactDisplay-Heavy" : @".SF Compact Display", + @".SFCompactDisplay-Light" : @".SF Compact Display", + @".SFCompactDisplay-Medium" : @".SF Compact Display", + @".SFCompactDisplay-Regular" : @".SF Compact Display", + @".SFCompactDisplay-Semibold" : @".SF Compact Display", + @".SFCompactDisplay-Thin" : @".SF Compact Display", + @".SFCompactDisplay-Ultralight" : @".SF Compact Display", + @".SFCompactRounded-Black" : @".SF Compact Rounded", + @".SFCompactRounded-Bold" : @".SF Compact Rounded", + @".SFCompactRounded-Heavy" : @".SF Compact Rounded", + @".SFCompactRounded-Light" : @".SF Compact Rounded", + @".SFCompactRounded-Medium" : @".SF Compact Rounded", + @".SFCompactRounded-Regular" : @".SF Compact Rounded", + @".SFCompactRounded-Semibold" : @".SF Compact Rounded", + @".SFCompactRounded-Thin" : @".SF Compact Rounded", + @".SFCompactRounded-Ultralight" : @".SF Compact Rounded", + @".SFCompactText-Bold" : @".SF Compact Text", + @".SFCompactText-BoldG1" : @".SF Compact Text", + @".SFCompactText-BoldG2" : @".SF Compact Text", + @".SFCompactText-BoldG3" : @".SF Compact Text", + @".SFCompactText-BoldItalic" : @".SF Compact Text", + @".SFCompactText-BoldItalicG1" : @".SF Compact Text", + @".SFCompactText-BoldItalicG2" : @".SF Compact Text", + @".SFCompactText-BoldItalicG3" : @".SF Compact Text", + @".SFCompactText-Heavy" : @".SF Compact Text", + @".SFCompactText-HeavyItalic" : @".SF Compact Text", + @".SFCompactText-Italic" : @".SF Compact Text", + @".SFCompactText-Light" : @".SF Compact Text", + @".SFCompactText-LightItalic" : @".SF Compact Text", + @".SFCompactText-Medium" : @".SF Compact Text", + @".SFCompactText-MediumItalic" : @".SF Compact Text", + @".SFCompactText-Regular" : @".SF Compact Text", + @".SFCompactText-RegularG1" : @".SF Compact Text", + @".SFCompactText-RegularG2" : @".SF Compact Text", + @".SFCompactText-RegularG3" : @".SF Compact Text", + @".SFCompactText-RegularItalic" : @".SF Compact Text", + @".SFCompactText-RegularItalicG1" : @".SF Compact Text", + @".SFCompactText-RegularItalicG2" : @".SF Compact Text", + @".SFCompactText-RegularItalicG3" : @".SF Compact Text", + @".SFCompactText-Semibold" : @".SF Compact Text", + @".SFCompactText-SemiboldItalic" : @".SF Compact Text", + @".SFCompactText-Thin" : @".SF Compact Text", + @".SFCompactText-ThinItalic" : @".SF Compact Text", + @".SFCompactText-Ultralight" : @".SF Compact Text", + @".SFCompactText-UltralightItalic" : @".SF Compact Text", + @".SFNSDisplay" : @".SF NS Display", + @".SFNSDisplay-Black" : @".SF NS Display", + @".SFNSDisplay-BlackItalic" : @".SF NS Display", + @".SFNSDisplay-Bold" : @".SF NS Display", + @".SFNSDisplay-BoldItalic" : @".SF NS Display", + @".SFNSDisplay-Heavy" : @".SF NS Display", + @".SFNSDisplay-HeavyItalic" : @".SF NS Display", + @".SFNSDisplay-Italic" : @".SF NS Display", + @".SFNSDisplay-Light" : @".SF NS Display", + @".SFNSDisplay-LightItalic" : @".SF NS Display", + @".SFNSDisplay-Medium" : @".SF NS Display", + @".SFNSDisplay-MediumItalic" : @".SF NS Display", + @".SFNSDisplay-Semibold" : @".SF NS Display", + @".SFNSDisplay-SemiboldItalic" : @".SF NS Display", + @".SFNSDisplay-Thin" : @".SF NS Display", + @".SFNSDisplay-ThinG1" : @".SF NS Display", + @".SFNSDisplay-ThinG2" : @".SF NS Display", + @".SFNSDisplay-ThinG3" : @".SF NS Display", + @".SFNSDisplay-ThinG4" : @".SF NS Display", + @".SFNSDisplay-ThinItalic" : @".SF NS Display", + @".SFNSDisplay-Ultralight" : @".SF NS Display", + @".SFNSDisplay-UltralightItalic" : @".SF NS Display", + + @".SFNS-Black" : @".SF NS", + @".SFNS-BlackItalic" : @".SF NS", + @".SFNS-Bold" : @".SF NS", + @".SFNS-BoldG1" : @".SF NS", + @".SFNS-BoldG2" : @".SF NS", + @".SFNS-BoldG3" : @".SF NS", + @".SFNS-BoldG4" : @".SF NS", + @".SFNS-BoldItalic" : @".SF NS", + @".SFNS-Heavy" : @".SF NS", + @".SFNS-HeavyG1" : @".SF NS", + @".SFNS-HeavyG2" : @".SF NS", + @".SFNS-HeavyG3" : @".SF NS", + @".SFNS-HeavyG4" : @".SF NS", + @".SFNS-HeavyItalic" : @".SF NS", + @".SFNS-Light" : @".SF NS", + @".SFNS-LightG1" : @".SF NS", + @".SFNS-LightG2" : @".SF NS", + @".SFNS-LightG3" : @".SF NS", + @".SFNS-LightG4" : @".SF NS", + @".SFNS-LightItalic" : @".SF NS", + @".SFNS-Medium" : @".SF NS", + @".SFNS-MediumG1" : @".SF NS", + @".SFNS-MediumG2" : @".SF NS", + @".SFNS-MediumG3" : @".SF NS", + @".SFNS-MediumG4" : @".SF NS", + @".SFNS-MediumItalic" : @".SF NS", + @".SFNS-Regular" : @".SF NS", + @".SFNS-RegularG1" : @".SF NS", + @".SFNS-RegularG2" : @".SF NS", + @".SFNS-RegularG3" : @".SF NS", + @".SFNS-RegularG4" : @".SF NS", + @".SFNS-RegularItalic" : @".SF NS", + @".SFNS-Semibold" : @".SF NS", + @".SFNS-SemiboldG1" : @".SF NS", + @".SFNS-SemiboldG2" : @".SF NS", + @".SFNS-SemiboldG3" : @".SF NS", + @".SFNS-SemiboldG4" : @".SF NS", + @".SFNS-SemiboldItalic" : @".SF NS", + @".SFNS-Thin" : @".SF NS", + @".SFNS-ThinG1" : @".SF NS", + @".SFNS-ThinG2" : @".SF NS", + @".SFNS-ThinG3" : @".SF NS", + @".SFNS-ThinG4" : @".SF NS", + @".SFNS-ThinItalic" : @".SF NS", + @".SFNS-Ultralight" : @".SF NS", + @".SFNS-UltralightG1" : @".SF NS", + @".SFNS-UltralightG2" : @".SF NS", + @".SFNS-UltralightG3" : @".SF NS", + @".SFNS-UltralightG4" : @".SF NS", + @".SFNS-UltralightItalic" : @".SF NS", + @".SFNS-Ultrathin" : @".SF NS", + @".SFNS-UltrathinG1" : @".SF NS", + @".SFNS-UltrathinG2" : @".SF NS", + @".SFNS-UltrathinG3" : @".SF NS", + @".SFNS-UltrathinG4" : @".SF NS", + @".SFNS-UltrathinItalic" : @".SF NS", + @".SFNSDisplayCondensed-Black" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Bold" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Heavy" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Light" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Medium" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Regular" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Semibold" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Thin" : @".SF NS Display Condensed", + @".SFNSDisplayCondensed-Ultralight" : @".SF NS Display Condensed", + @".SFNSMono-Bold" : @".SF NS Mono", + @".SFNSMono-BoldItalic" : @".SF NS Mono", + @".SFNSMono-Heavy" : @".SF NS Mono", + @".SFNSMono-HeavyItalic" : @".SF NS Mono", + @".SFNSMono-Light" : @".SF NS Mono", + @".SFNSMono-LightItalic" : @".SF NS Mono", + @".SFNSMono-Medium" : @".SF NS Mono", + @".SFNSMono-MediumItalic" : @".SF NS Mono", + @".SFNSMono-Regular" : @".SF NS Mono", + @".SFNSMono-RegularItalic" : @".SF NS Mono", + @".SFNSMono-Semibold" : @".SF NS Mono", + @".SFNSMono-SemiboldItalic" : @".SF NS Mono", + @".SFNSRounded-Black" : @".SF NS Rounded", + @".SFNSRounded-Bold" : @".SF NS Rounded", + @".SFNSRounded-BoldG1" : @".SF NS Rounded", + @".SFNSRounded-BoldG2" : @".SF NS Rounded", + @".SFNSRounded-BoldG3" : @".SF NS Rounded", + @".SFNSRounded-BoldG4" : @".SF NS Rounded", + @".SFNSRounded-Heavy" : @".SF NS Rounded", + @".SFNSRounded-HeavyG1" : @".SF NS Rounded", + @".SFNSRounded-HeavyG2" : @".SF NS Rounded", + @".SFNSRounded-HeavyG3" : @".SF NS Rounded", + @".SFNSRounded-HeavyG4" : @".SF NS Rounded", + @".SFNSRounded-Light" : @".SF NS Rounded", + @".SFNSRounded-LightG1" : @".SF NS Rounded", + @".SFNSRounded-LightG2" : @".SF NS Rounded", + @".SFNSRounded-LightG3" : @".SF NS Rounded", + @".SFNSRounded-LightG4" : @".SF NS Rounded", + @".SFNSRounded-Medium" : @".SF NS Rounded", + @".SFNSRounded-MediumG1" : @".SF NS Rounded", + @".SFNSRounded-MediumG2" : @".SF NS Rounded", + @".SFNSRounded-MediumG3" : @".SF NS Rounded", + @".SFNSRounded-MediumG4" : @".SF NS Rounded", + @".SFNSRounded-Regular" : @".SF NS Rounded", + @".SFNSRounded-RegularG1" : @".SF NS Rounded", + @".SFNSRounded-RegularG2" : @".SF NS Rounded", + @".SFNSRounded-RegularG3" : @".SF NS Rounded", + @".SFNSRounded-RegularG4" : @".SF NS Rounded", + @".SFNSRounded-Semibold" : @".SF NS Rounded", + @".SFNSRounded-SemiboldG1" : @".SF NS Rounded", + @".SFNSRounded-SemiboldG2" : @".SF NS Rounded", + @".SFNSRounded-SemiboldG3" : @".SF NS Rounded", + @".SFNSRounded-SemiboldG4" : @".SF NS Rounded", + @".SFNSRounded-Thin" : @".SF NS Rounded", + @".SFNSRounded-ThinG1" : @".SF NS Rounded", + @".SFNSRounded-ThinG2" : @".SF NS Rounded", + @".SFNSRounded-ThinG3" : @".SF NS Rounded", + @".SFNSRounded-ThinG4" : @".SF NS Rounded", + @".SFNSRounded-Ultralight" : @".SF NS Rounded", + @".SFNSRounded-UltralightG1" : @".SF NS Rounded", + @".SFNSRounded-UltralightG2" : @".SF NS Rounded", + @".SFNSRounded-UltralightG3" : @".SF NS Rounded", + @".SFNSRounded-UltralightG4" : @".SF NS Rounded", + @".SFNSRounded-Ultrathin" : @".SF NS Rounded", + @".SFNSRounded-UltrathinG1" : @".SF NS Rounded", + @".SFNSRounded-UltrathinG2" : @".SF NS Rounded", + @".SFNSRounded-UltrathinG3" : @".SF NS Rounded", + @".SFNSRounded-UltrathinG4" : @".SF NS Rounded", + @".SFNSSymbols-Black" : @".SF NS Symbols", + @".SFNSSymbols-Bold" : @".SF NS Symbols", + @".SFNSSymbols-Heavy" : @".SF NS Symbols", + @".SFNSSymbols-Light" : @".SF NS Symbols", + @".SFNSSymbols-Medium" : @".SF NS Symbols", + @".SFNSSymbols-Regular" : @".SF NS Symbols", + @".SFNSSymbols-Semibold" : @".SF NS Symbols", + @".SFNSSymbols-Thin" : @".SF NS Symbols", + @".SFNSSymbols-Ultralight" : @".SF NS Symbols", + @".SFNSText" : @".SF NS Text", + @".SFNSText-Bold" : @".SF NS Text", + @".SFNSText-BoldItalic" : @".SF NS Text", + @".SFNSText-Heavy" : @".SF NS Text", + @".SFNSText-HeavyItalic" : @".SF NS Text", + @".SFNSText-Italic" : @".SF NS Text", + @".SFNSText-Light" : @".SF NS Text", + @".SFNSText-LightItalic" : @".SF NS Text", + @".SFNSText-Medium" : @".SF NS Text", + @".SFNSText-MediumItalic" : @".SF NS Text", + @".SFNSText-Semibold" : @".SF NS Text", + @".SFNSText-SemiboldItalic" : @".SF NS Text", + @".SFNSTextCondensed-Bold" : @".SF NS Text Condensed", + @".SFNSTextCondensed-Heavy" : @".SF NS Text Condensed", + @".SFNSTextCondensed-Light" : @".SF NS Text Condensed", + @".SFNSTextCondensed-Medium" : @".SF NS Text Condensed", + @".SFNSTextCondensed-Regular" : @".SF NS Text Condensed", + @".SFNSTextCondensed-Semibold" : @".SF NS Text Condensed", + @".SFCompact-Black" : @".SFCompact", + @".SFCompact-BlackItalic" : @".SFCompact", + @".SFCompact-Bold" : @".SFCompact", + @".SFCompact-BoldG1" : @".SFCompact", + @".SFCompact-BoldG2" : @".SFCompact", + @".SFCompact-BoldG3" : @".SFCompact", + @".SFCompact-BoldG4" : @".SFCompact", + @".SFCompact-BoldItalic" : @".SFCompact", + @".SFCompact-BoldItalicG1" : @".SFCompact", + @".SFCompact-BoldItalicG2" : @".SFCompact", + @".SFCompact-BoldItalicG3" : @".SFCompact", + @".SFCompact-BoldItalicG4" : @".SFCompact", + @".SFCompact-Heavy" : @".SFCompact", + @".SFCompact-HeavyG1" : @".SFCompact", + @".SFCompact-HeavyG2" : @".SFCompact", + @".SFCompact-HeavyG3" : @".SFCompact", + @".SFCompact-HeavyG4" : @".SFCompact", + @".SFCompact-HeavyItalic" : @".SFCompact", + @".SFCompact-HeavyItalicG1" : @".SFCompact", + @".SFCompact-HeavyItalicG2" : @".SFCompact", + @".SFCompact-HeavyItalicG3" : @".SFCompact", + @".SFCompact-HeavyItalicG4" : @".SFCompact", + @".SFCompact-Light" : @".SFCompact", + @".SFCompact-LightG1" : @".SFCompact", + @".SFCompact-LightG2" : @".SFCompact", + @".SFCompact-LightG3" : @".SFCompact", + @".SFCompact-LightG4" : @".SFCompact", + @".SFCompact-LightItalic" : @".SFCompact", + @".SFCompact-LightItalicG1" : @".SFCompact", + @".SFCompact-LightItalicG2" : @".SFCompact", + @".SFCompact-LightItalicG3" : @".SFCompact", + @".SFCompact-LightItalicG4" : @".SFCompact", + @".SFCompact-Medium" : @".SFCompact", + @".SFCompact-MediumG1" : @".SFCompact", + @".SFCompact-MediumG2" : @".SFCompact", + @".SFCompact-MediumG3" : @".SFCompact", + @".SFCompact-MediumG4" : @".SFCompact", + @".SFCompact-MediumItalic" : @".SFCompact", + @".SFCompact-MediumItalicG1" : @".SFCompact", + @".SFCompact-MediumItalicG2" : @".SFCompact", + @".SFCompact-MediumItalicG3" : @".SFCompact", + @".SFCompact-MediumItalicG4" : @".SFCompact", + @".SFCompact-Regular" : @".SFCompact", + @".SFCompact-RegularG1" : @".SFCompact", + @".SFCompact-RegularG2" : @".SFCompact", + @".SFCompact-RegularG3" : @".SFCompact", + @".SFCompact-RegularG4" : @".SFCompact", + @".SFCompact-RegularItalic" : @".SFCompact", + @".SFCompact-RegularItalicG1" : @".SFCompact", + @".SFCompact-RegularItalicG2" : @".SFCompact", + @".SFCompact-RegularItalicG3" : @".SFCompact", + @".SFCompact-RegularItalicG4" : @".SFCompact", + @".SFCompact-Semibold" : @".SFCompact", + @".SFCompact-SemiboldG1" : @".SFCompact", + @".SFCompact-SemiboldG2" : @".SFCompact", + @".SFCompact-SemiboldG3" : @".SFCompact", + @".SFCompact-SemiboldG4" : @".SFCompact", + @".SFCompact-SemiboldItalic" : @".SFCompact", + @".SFCompact-SemiboldItalicG1" : @".SFCompact", + @".SFCompact-SemiboldItalicG2" : @".SFCompact", + @".SFCompact-SemiboldItalicG3" : @".SFCompact", + @".SFCompact-SemiboldItalicG4" : @".SFCompact", + @".SFCompact-Thin" : @".SFCompact", + @".SFCompact-ThinG1" : @".SFCompact", + @".SFCompact-ThinG2" : @".SFCompact", + @".SFCompact-ThinG3" : @".SFCompact", + @".SFCompact-ThinG4" : @".SFCompact", + @".SFCompact-ThinItalic" : @".SFCompact", + @".SFCompact-ThinItalicG1" : @".SFCompact", + @".SFCompact-ThinItalicG2" : @".SFCompact", + @".SFCompact-ThinItalicG3" : @".SFCompact", + @".SFCompact-ThinItalicG4" : @".SFCompact", + @".SFCompact-Ultralight" : @".SFCompact", + @".SFCompact-UltralightG1" : @".SFCompact", + @".SFCompact-UltralightG2" : @".SFCompact", + @".SFCompact-UltralightG3" : @".SFCompact", + @".SFCompact-UltralightG4" : @".SFCompact", + @".SFCompact-UltralightItalic" : @".SFCompact", + @".SFCompact-UltralightItalicG1" : @".SFCompact", + @".SFCompact-UltralightItalicG2" : @".SFCompact", + @".SFCompact-UltralightItalicG3" : @".SFCompact", + @".SFCompact-UltralightItalicG4" : @".SFCompact", + @".SFNS-CompressedBlack" : @".SFNS", + @".SFNS-CompressedBold" : @".SFNS", + @".SFNS-CompressedBoldG1" : @".SFNS", + @".SFNS-CompressedBoldG2" : @".SFNS", + @".SFNS-CompressedBoldG3" : @".SFNS", + @".SFNS-CompressedBoldG4" : @".SFNS", + @".SFNS-CompressedHeavy" : @".SFNS", + @".SFNS-CompressedHeavyG1" : @".SFNS", + @".SFNS-CompressedHeavyG2" : @".SFNS", + @".SFNS-CompressedHeavyG3" : @".SFNS", + @".SFNS-CompressedHeavyG4" : @".SFNS", + @".SFNS-CompressedLight" : @".SFNS", + @".SFNS-CompressedLightG1" : @".SFNS", + @".SFNS-CompressedLightG2" : @".SFNS", + @".SFNS-CompressedLightG3" : @".SFNS", + @".SFNS-CompressedLightG4" : @".SFNS", + @".SFNS-CompressedMedium" : @".SFNS", + @".SFNS-CompressedMediumG1" : @".SFNS", + @".SFNS-CompressedMediumG2" : @".SFNS", + @".SFNS-CompressedMediumG3" : @".SFNS", + @".SFNS-CompressedMediumG4" : @".SFNS", + @".SFNS-CompressedRegular" : @".SFNS", + @".SFNS-CompressedRegularG1" : @".SFNS", + @".SFNS-CompressedRegularG2" : @".SFNS", + @".SFNS-CompressedRegularG3" : @".SFNS", + @".SFNS-CompressedRegularG4" : @".SFNS", + @".SFNS-CompressedSemibold" : @".SFNS", + @".SFNS-CompressedSemiboldG1" : @".SFNS", + @".SFNS-CompressedSemiboldG2" : @".SFNS", + @".SFNS-CompressedSemiboldG3" : @".SFNS", + @".SFNS-CompressedSemiboldG4" : @".SFNS", + @".SFNS-CompressedThin" : @".SFNS", + @".SFNS-CompressedThinG1" : @".SFNS", + @".SFNS-CompressedThinG2" : @".SFNS", + @".SFNS-CompressedThinG3" : @".SFNS", + @".SFNS-CompressedThinG4" : @".SFNS", + @".SFNS-CompressedUltralight" : @".SFNS", + @".SFNS-CompressedUltralightG1" : @".SFNS", + @".SFNS-CompressedUltralightG2" : @".SFNS", + @".SFNS-CompressedUltralightG3" : @".SFNS", + @".SFNS-CompressedUltralightG4" : @".SFNS", + @".SFNS-CondensedBlack" : @".SFNS", + @".SFNS-CondensedBold" : @".SFNS", + @".SFNS-CondensedBoldG1" : @".SFNS", + @".SFNS-CondensedBoldG2" : @".SFNS", + @".SFNS-CondensedBoldG3" : @".SFNS", + @".SFNS-CondensedBoldG4" : @".SFNS", + @".SFNS-CondensedHeavy" : @".SFNS", + @".SFNS-CondensedHeavyG1" : @".SFNS", + @".SFNS-CondensedHeavyG2" : @".SFNS", + @".SFNS-CondensedHeavyG3" : @".SFNS", + @".SFNS-CondensedHeavyG4" : @".SFNS", + @".SFNS-CondensedLight" : @".SFNS", + @".SFNS-CondensedLightG1" : @".SFNS", + @".SFNS-CondensedLightG2" : @".SFNS", + @".SFNS-CondensedLightG3" : @".SFNS", + @".SFNS-CondensedLightG4" : @".SFNS", + @".SFNS-CondensedMedium" : @".SFNS", + @".SFNS-CondensedMediumG1" : @".SFNS", + @".SFNS-CondensedMediumG2" : @".SFNS", + @".SFNS-CondensedMediumG3" : @".SFNS", + @".SFNS-CondensedMediumG4" : @".SFNS", + @".SFNS-CondensedRegular" : @".SFNS", + @".SFNS-CondensedRegularG1" : @".SFNS", + @".SFNS-CondensedRegularG2" : @".SFNS", + @".SFNS-CondensedRegularG3" : @".SFNS", + @".SFNS-CondensedRegularG4" : @".SFNS", + @".SFNS-CondensedSemibold" : @".SFNS", + @".SFNS-CondensedSemiboldG1" : @".SFNS", + @".SFNS-CondensedSemiboldG2" : @".SFNS", + @".SFNS-CondensedSemiboldG3" : @".SFNS", + @".SFNS-CondensedSemiboldG4" : @".SFNS", + @".SFNS-CondensedThin" : @".SFNS", + @".SFNS-CondensedThinG1" : @".SFNS", + @".SFNS-CondensedThinG2" : @".SFNS", + @".SFNS-CondensedThinG3" : @".SFNS", + @".SFNS-CondensedThinG4" : @".SFNS", + @".SFNS-CondensedUltralight" : @".SFNS", + @".SFNS-CondensedUltralightG1" : @".SFNS", + @".SFNS-CondensedUltralightG2" : @".SFNS", + @".SFNS-CondensedUltralightG3" : @".SFNS", + @".SFNS-CondensedUltralightG4" : @".SFNS", + @".SFNS-ExpandedBlack" : @".SFNS", + @".SFNS-ExpandedBold" : @".SFNS", + @".SFNS-ExpandedBoldG1" : @".SFNS", + @".SFNS-ExpandedBoldG2" : @".SFNS", + @".SFNS-ExpandedBoldG3" : @".SFNS", + @".SFNS-ExpandedBoldG4" : @".SFNS", + @".SFNS-ExpandedHeavy" : @".SFNS", + @".SFNS-ExpandedHeavyG1" : @".SFNS", + @".SFNS-ExpandedHeavyG2" : @".SFNS", + @".SFNS-ExpandedHeavyG3" : @".SFNS", + @".SFNS-ExpandedHeavyG4" : @".SFNS", + @".SFNS-ExpandedLight" : @".SFNS", + @".SFNS-ExpandedLightG1" : @".SFNS", + @".SFNS-ExpandedLightG2" : @".SFNS", + @".SFNS-ExpandedLightG3" : @".SFNS", + @".SFNS-ExpandedLightG4" : @".SFNS", + @".SFNS-ExpandedMedium" : @".SFNS", + @".SFNS-ExpandedMediumG1" : @".SFNS", + @".SFNS-ExpandedMediumG2" : @".SFNS", + @".SFNS-ExpandedMediumG3" : @".SFNS", + @".SFNS-ExpandedMediumG4" : @".SFNS", + @".SFNS-ExpandedRegular" : @".SFNS", + @".SFNS-ExpandedRegularG1" : @".SFNS", + @".SFNS-ExpandedRegularG2" : @".SFNS", + @".SFNS-ExpandedRegularG3" : @".SFNS", + @".SFNS-ExpandedRegularG4" : @".SFNS", + @".SFNS-ExpandedSemibold" : @".SFNS", + @".SFNS-ExpandedSemiboldG1" : @".SFNS", + @".SFNS-ExpandedSemiboldG2" : @".SFNS", + @".SFNS-ExpandedSemiboldG3" : @".SFNS", + @".SFNS-ExpandedSemiboldG4" : @".SFNS", + @".SFNS-ExpandedThin" : @".SFNS", + @".SFNS-ExpandedThinG1" : @".SFNS", + @".SFNS-ExpandedThinG2" : @".SFNS", + @".SFNS-ExpandedThinG3" : @".SFNS", + @".SFNS-ExpandedThinG4" : @".SFNS", + @".SFNS-ExpandedUltralight" : @".SFNS", + @".SFNS-ExpandedUltralightG1" : @".SFNS", + @".SFNS-ExpandedUltralightG2" : @".SFNS", + @".SFNS-ExpandedUltralightG3" : @".SFNS", + @".SFNS-ExpandedUltralightG4" : @".SFNS", + @".SFNS-ExtraCompressedBlack" : @".SFNS", + @".SFNS-ExtraCompressedBold" : @".SFNS", + @".SFNS-ExtraCompressedBoldG1" : @".SFNS", + @".SFNS-ExtraCompressedBoldG2" : @".SFNS", + @".SFNS-ExtraCompressedBoldG3" : @".SFNS", + @".SFNS-ExtraCompressedBoldG4" : @".SFNS", + @".SFNS-ExtraCompressedHeavy" : @".SFNS", + @".SFNS-ExtraCompressedHeavyG1" : @".SFNS", + @".SFNS-ExtraCompressedHeavyG2" : @".SFNS", + @".SFNS-ExtraCompressedHeavyG3" : @".SFNS", + @".SFNS-ExtraCompressedHeavyG4" : @".SFNS", + @".SFNS-ExtraCompressedLight" : @".SFNS", + @".SFNS-ExtraCompressedLightG1" : @".SFNS", + @".SFNS-ExtraCompressedLightG2" : @".SFNS", + @".SFNS-ExtraCompressedLightG3" : @".SFNS", + @".SFNS-ExtraCompressedLightG4" : @".SFNS", + @".SFNS-ExtraCompressedMedium" : @".SFNS", + @".SFNS-ExtraCompressedMediumG1" : @".SFNS", + @".SFNS-ExtraCompressedMediumG2" : @".SFNS", + @".SFNS-ExtraCompressedMediumG3" : @".SFNS", + @".SFNS-ExtraCompressedMediumG4" : @".SFNS", + @".SFNS-ExtraCompressedRegular" : @".SFNS", + @".SFNS-ExtraCompressedRegularG1" : @".SFNS", + @".SFNS-ExtraCompressedRegularG2" : @".SFNS", + @".SFNS-ExtraCompressedRegularG3" : @".SFNS", + @".SFNS-ExtraCompressedRegularG4" : @".SFNS", + @".SFNS-ExtraCompressedSemibold" : @".SFNS", + @".SFNS-ExtraCompressedSemiboldG1" : @".SFNS", + @".SFNS-ExtraCompressedSemiboldG2" : @".SFNS", + @".SFNS-ExtraCompressedSemiboldG3" : @".SFNS", + @".SFNS-ExtraCompressedSemiboldG4" : @".SFNS", + @".SFNS-ExtraCompressedThin" : @".SFNS", + @".SFNS-ExtraCompressedThinG1" : @".SFNS", + @".SFNS-ExtraCompressedThinG2" : @".SFNS", + @".SFNS-ExtraCompressedThinG3" : @".SFNS", + @".SFNS-ExtraCompressedThinG4" : @".SFNS", + @".SFNS-ExtraCompressedUltralight" : @".SFNS", + @".SFNS-ExtraCompressedUltralightG1" : @".SFNS", + @".SFNS-ExtraCompressedUltralightG2" : @".SFNS", + @".SFNS-ExtraCompressedUltralightG3" : @".SFNS", + @".SFNS-ExtraCompressedUltralightG4" : @".SFNS", + @".SFNS-ExtraExpandedBlack" : @".SFNS", + @".SFNS-ExtraExpandedBold" : @".SFNS", + @".SFNS-ExtraExpandedBoldG1" : @".SFNS", + @".SFNS-ExtraExpandedBoldG2" : @".SFNS", + @".SFNS-ExtraExpandedBoldG3" : @".SFNS", + @".SFNS-ExtraExpandedBoldG4" : @".SFNS", + @".SFNS-ExtraExpandedHeavy" : @".SFNS", + @".SFNS-ExtraExpandedHeavyG1" : @".SFNS", + @".SFNS-ExtraExpandedHeavyG2" : @".SFNS", + @".SFNS-ExtraExpandedHeavyG3" : @".SFNS", + @".SFNS-ExtraExpandedHeavyG4" : @".SFNS", + @".SFNS-ExtraExpandedLight" : @".SFNS", + @".SFNS-ExtraExpandedLightG1" : @".SFNS", + @".SFNS-ExtraExpandedLightG2" : @".SFNS", + @".SFNS-ExtraExpandedLightG3" : @".SFNS", + @".SFNS-ExtraExpandedLightG4" : @".SFNS", + @".SFNS-ExtraExpandedMedium" : @".SFNS", + @".SFNS-ExtraExpandedMediumG1" : @".SFNS", + @".SFNS-ExtraExpandedMediumG2" : @".SFNS", + @".SFNS-ExtraExpandedMediumG3" : @".SFNS", + @".SFNS-ExtraExpandedMediumG4" : @".SFNS", + @".SFNS-ExtraExpandedRegular" : @".SFNS", + @".SFNS-ExtraExpandedRegularG1" : @".SFNS", + @".SFNS-ExtraExpandedRegularG2" : @".SFNS", + @".SFNS-ExtraExpandedRegularG3" : @".SFNS", + @".SFNS-ExtraExpandedRegularG4" : @".SFNS", + @".SFNS-ExtraExpandedSemibold" : @".SFNS", + @".SFNS-ExtraExpandedSemiboldG1" : @".SFNS", + @".SFNS-ExtraExpandedSemiboldG2" : @".SFNS", + @".SFNS-ExtraExpandedSemiboldG3" : @".SFNS", + @".SFNS-ExtraExpandedSemiboldG4" : @".SFNS", + @".SFNS-ExtraExpandedThin" : @".SFNS", + @".SFNS-ExtraExpandedThinG1" : @".SFNS", + @".SFNS-ExtraExpandedThinG2" : @".SFNS", + @".SFNS-ExtraExpandedThinG3" : @".SFNS", + @".SFNS-ExtraExpandedThinG4" : @".SFNS", + @".SFNS-ExtraExpandedUltralight" : @".SFNS", + @".SFNS-ExtraExpandedUltralightG1" : @".SFNS", + @".SFNS-ExtraExpandedUltralightG2" : @".SFNS", + @".SFNS-ExtraExpandedUltralightG3" : @".SFNS", + @".SFNS-ExtraExpandedUltralightG4" : @".SFNS", + @".SFNS-SemiCondensedBlack" : @".SFNS", + @".SFNS-SemiCondensedBold" : @".SFNS", + @".SFNS-SemiCondensedBoldG1" : @".SFNS", + @".SFNS-SemiCondensedBoldG2" : @".SFNS", + @".SFNS-SemiCondensedBoldG3" : @".SFNS", + @".SFNS-SemiCondensedBoldG4" : @".SFNS", + @".SFNS-SemiCondensedHeavy" : @".SFNS", + @".SFNS-SemiCondensedHeavyG1" : @".SFNS", + @".SFNS-SemiCondensedHeavyG2" : @".SFNS", + @".SFNS-SemiCondensedHeavyG3" : @".SFNS", + @".SFNS-SemiCondensedHeavyG4" : @".SFNS", + @".SFNS-SemiCondensedLight" : @".SFNS", + @".SFNS-SemiCondensedLightG1" : @".SFNS", + @".SFNS-SemiCondensedLightG2" : @".SFNS", + @".SFNS-SemiCondensedLightG3" : @".SFNS", + @".SFNS-SemiCondensedLightG4" : @".SFNS", + @".SFNS-SemiCondensedMedium" : @".SFNS", + @".SFNS-SemiCondensedMediumG1" : @".SFNS", + @".SFNS-SemiCondensedMediumG2" : @".SFNS", + @".SFNS-SemiCondensedMediumG3" : @".SFNS", + @".SFNS-SemiCondensedMediumG4" : @".SFNS", + @".SFNS-SemiCondensedRegular" : @".SFNS", + @".SFNS-SemiCondensedRegularG1" : @".SFNS", + @".SFNS-SemiCondensedRegularG2" : @".SFNS", + @".SFNS-SemiCondensedRegularG3" : @".SFNS", + @".SFNS-SemiCondensedRegularG4" : @".SFNS", + @".SFNS-SemiCondensedSemibold" : @".SFNS", + @".SFNS-SemiCondensedSemiboldG1" : @".SFNS", + @".SFNS-SemiCondensedSemiboldG2" : @".SFNS", + @".SFNS-SemiCondensedSemiboldG3" : @".SFNS", + @".SFNS-SemiCondensedSemiboldG4" : @".SFNS", + @".SFNS-SemiCondensedThin" : @".SFNS", + @".SFNS-SemiCondensedThinG1" : @".SFNS", + @".SFNS-SemiCondensedThinG2" : @".SFNS", + @".SFNS-SemiCondensedThinG3" : @".SFNS", + @".SFNS-SemiCondensedThinG4" : @".SFNS", + @".SFNS-SemiCondensedUltralight" : @".SFNS", + @".SFNS-SemiCondensedUltralightG1" : @".SFNS", + @".SFNS-SemiCondensedUltralightG2" : @".SFNS", + @".SFNS-SemiCondensedUltralightG3" : @".SFNS", + @".SFNS-SemiCondensedUltralightG4" : @".SFNS", + @".SFNS-SemiExpandedBlack" : @".SFNS", + @".SFNS-SemiExpandedBold" : @".SFNS", + @".SFNS-SemiExpandedBoldG1" : @".SFNS", + @".SFNS-SemiExpandedBoldG2" : @".SFNS", + @".SFNS-SemiExpandedBoldG3" : @".SFNS", + @".SFNS-SemiExpandedBoldG4" : @".SFNS", + @".SFNS-SemiExpandedHeavy" : @".SFNS", + @".SFNS-SemiExpandedHeavyG1" : @".SFNS", + @".SFNS-SemiExpandedHeavyG2" : @".SFNS", + @".SFNS-SemiExpandedHeavyG3" : @".SFNS", + @".SFNS-SemiExpandedHeavyG4" : @".SFNS", + @".SFNS-SemiExpandedLight" : @".SFNS", + @".SFNS-SemiExpandedLightG1" : @".SFNS", + @".SFNS-SemiExpandedLightG2" : @".SFNS", + @".SFNS-SemiExpandedLightG3" : @".SFNS", + @".SFNS-SemiExpandedLightG4" : @".SFNS", + @".SFNS-SemiExpandedMedium" : @".SFNS", + @".SFNS-SemiExpandedMediumG1" : @".SFNS", + @".SFNS-SemiExpandedMediumG2" : @".SFNS", + @".SFNS-SemiExpandedMediumG3" : @".SFNS", + @".SFNS-SemiExpandedMediumG4" : @".SFNS", + @".SFNS-SemiExpandedRegular" : @".SFNS", + @".SFNS-SemiExpandedRegularG1" : @".SFNS", + @".SFNS-SemiExpandedRegularG2" : @".SFNS", + @".SFNS-SemiExpandedRegularG3" : @".SFNS", + @".SFNS-SemiExpandedRegularG4" : @".SFNS", + @".SFNS-SemiExpandedSemibold" : @".SFNS", + @".SFNS-SemiExpandedSemiboldG1" : @".SFNS", + @".SFNS-SemiExpandedSemiboldG2" : @".SFNS", + @".SFNS-SemiExpandedSemiboldG3" : @".SFNS", + @".SFNS-SemiExpandedSemiboldG4" : @".SFNS", + @".SFNS-SemiExpandedThin" : @".SFNS", + @".SFNS-SemiExpandedThinG1" : @".SFNS", + @".SFNS-SemiExpandedThinG2" : @".SFNS", + @".SFNS-SemiExpandedThinG3" : @".SFNS", + @".SFNS-SemiExpandedThinG4" : @".SFNS", + @".SFNS-SemiExpandedUltralight" : @".SFNS", + @".SFNS-SemiExpandedUltralightG1" : @".SFNS", + @".SFNS-SemiExpandedUltralightG2" : @".SFNS", + @".SFNS-SemiExpandedUltralightG3" : @".SFNS", + @".SFNS-SemiExpandedUltralightG4" : @".SFNS", + @".SFNS-UltraCompressedBlack" : @".SFNS", + @".SFNS-UltraCompressedBold" : @".SFNS", + @".SFNS-UltraCompressedBoldG1" : @".SFNS", + @".SFNS-UltraCompressedBoldG2" : @".SFNS", + @".SFNS-UltraCompressedBoldG3" : @".SFNS", + @".SFNS-UltraCompressedBoldG4" : @".SFNS", + @".SFNS-UltraCompressedHeavy" : @".SFNS", + @".SFNS-UltraCompressedHeavyG1" : @".SFNS", + @".SFNS-UltraCompressedHeavyG2" : @".SFNS", + @".SFNS-UltraCompressedHeavyG3" : @".SFNS", + @".SFNS-UltraCompressedHeavyG4" : @".SFNS", + @".SFNS-UltraCompressedLight" : @".SFNS", + @".SFNS-UltraCompressedLightG1" : @".SFNS", + @".SFNS-UltraCompressedLightG2" : @".SFNS", + @".SFNS-UltraCompressedLightG3" : @".SFNS", + @".SFNS-UltraCompressedLightG4" : @".SFNS", + @".SFNS-UltraCompressedMedium" : @".SFNS", + @".SFNS-UltraCompressedMediumG1" : @".SFNS", + @".SFNS-UltraCompressedMediumG2" : @".SFNS", + @".SFNS-UltraCompressedMediumG3" : @".SFNS", + @".SFNS-UltraCompressedMediumG4" : @".SFNS", + @".SFNS-UltraCompressedRegular" : @".SFNS", + @".SFNS-UltraCompressedRegularG1" : @".SFNS", + @".SFNS-UltraCompressedRegularG2" : @".SFNS", + @".SFNS-UltraCompressedRegularG3" : @".SFNS", + @".SFNS-UltraCompressedRegularG4" : @".SFNS", + @".SFNS-UltraCompressedSemibold" : @".SFNS", + @".SFNS-UltraCompressedSemiboldG1" : @".SFNS", + @".SFNS-UltraCompressedSemiboldG2" : @".SFNS", + @".SFNS-UltraCompressedSemiboldG3" : @".SFNS", + @".SFNS-UltraCompressedSemiboldG4" : @".SFNS", + @".SFNS-UltraCompressedThin" : @".SFNS", + @".SFNS-UltraCompressedThinG1" : @".SFNS", + @".SFNS-UltraCompressedThinG2" : @".SFNS", + @".SFNS-UltraCompressedThinG3" : @".SFNS", + @".SFNS-UltraCompressedThinG4" : @".SFNS", + @".SFNS-UltraCompressedUltralight" : @".SFNS", + @".SFNS-UltraCompressedUltralightG1" : @".SFNS", + @".SFNS-UltraCompressedUltralightG2" : @".SFNS", + @".SFNS-UltraCompressedUltralightG3" : @".SFNS", + @".SFNS-UltraCompressedUltralightG4" : @".SFNS", + @".SanaPUA" : @".Sana PUA", + @".SavoyeLetPlainCC" : @".Savoye LET CC.", + @"AlBayan" : @"Al Bayan", + @"AlBayan-Bold" : @"Al Bayan", + @"AlNile" : @"Al Nile", + @"AlNile-Bold" : @"Al Nile", + @"AlTarikh" : @"Al Tarikh", + @"AmericanTypewriter" : @"American Typewriter", + @"AmericanTypewriter-Bold" : @"American Typewriter", + @"AmericanTypewriter-Condensed" : @"American Typewriter", + @"AmericanTypewriter-CondensedBold" : @"American Typewriter", + @"AmericanTypewriter-CondensedLight" : @"American Typewriter", + @"AmericanTypewriter-Light" : @"American Typewriter", + @"AmericanTypewriter-Semibold" : @"American Typewriter", + @"AndaleMono" : @"Andale Mono", + @"Apple-Chancery" : @"Apple Chancery", + @"AppleBraille" : @"Apple Braille", + @"AppleBraille-Outline6Dot" : @"Apple Braille", + @"AppleBraille-Outline8Dot" : @"Apple Braille", + @"AppleBraille-Pinpoint6Dot" : @"Apple Braille", + @"AppleBraille-Pinpoint8Dot" : @"Apple Braille", + @"AppleColorEmoji" : @"Apple Color Emoji", + @"AppleGothic" : @"AppleGothic", + @"AppleMyungjo" : @"AppleMyungjo", + @"AppleSDGothicNeo-Bold" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-ExtraBold" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-Heavy" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-Light" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-Medium" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-Regular" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-SemiBold" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-Thin" : @"Apple SD Gothic Neo", + @"AppleSDGothicNeo-UltraLight" : @"Apple SD Gothic Neo", + @"AppleSymbols" : @"Apple Symbols", + @"AquaKana" : @".Aqua Kana", + @"AquaKana-Bold" : @".Aqua Kana", + @"Arial-Black" : @"Arial Black", + @"Arial-BoldItalicMT" : @"Arial", + @"Arial-BoldMT" : @"Arial", + @"Arial-ItalicMT" : @"Arial", + @"ArialHebrew" : @"Arial Hebrew", + @"ArialHebrew-Bold" : @"Arial Hebrew", + @"ArialHebrew-Light" : @"Arial Hebrew", + @"ArialHebrewScholar" : @"Arial Hebrew Scholar", + @"ArialHebrewScholar-Bold" : @"Arial Hebrew Scholar", + @"ArialHebrewScholar-Light" : @"Arial Hebrew Scholar", + @"ArialMT" : @"Arial", + @"ArialNarrow" : @"Arial Narrow", + @"ArialNarrow-Bold" : @"Arial Narrow", + @"ArialNarrow-BoldItalic" : @"Arial Narrow", + @"ArialNarrow-Italic" : @"Arial Narrow", + @"ArialRoundedMTBold" : @"Arial Rounded MT Bold", + @"ArialUnicodeMS" : @"Arial Unicode MS", + @"Athelas-Bold" : @"Athelas", + @"Athelas-BoldItalic" : @"Athelas", + @"Athelas-Italic" : @"Athelas", + @"Athelas-Regular" : @"Athelas", + @"Avenir-Black" : @"Avenir", + @"Avenir-BlackOblique" : @"Avenir", + @"Avenir-Book" : @"Avenir", + @"Avenir-BookOblique" : @"Avenir", + @"Avenir-Heavy" : @"Avenir", + @"Avenir-HeavyOblique" : @"Avenir", + @"Avenir-Light" : @"Avenir", + @"Avenir-LightOblique" : @"Avenir", + @"Avenir-Medium" : @"Avenir", + @"Avenir-MediumOblique" : @"Avenir", + @"Avenir-Oblique" : @"Avenir", + @"Avenir-Roman" : @"Avenir", + @"AvenirNext-Bold" : @"Avenir Next", + @"AvenirNext-BoldItalic" : @"Avenir Next", + @"AvenirNext-DemiBold" : @"Avenir Next", + @"AvenirNext-DemiBoldItalic" : @"Avenir Next", + @"AvenirNext-Heavy" : @"Avenir Next", + @"AvenirNext-HeavyItalic" : @"Avenir Next", + @"AvenirNext-Italic" : @"Avenir Next", + @"AvenirNext-Medium" : @"Avenir Next", + @"AvenirNext-MediumItalic" : @"Avenir Next", + @"AvenirNext-Regular" : @"Avenir Next", + @"AvenirNext-UltraLight" : @"Avenir Next", + @"AvenirNext-UltraLightItalic" : @"Avenir Next", + @"AvenirNextCondensed-Bold" : @"Avenir Next Condensed", + @"AvenirNextCondensed-BoldItalic" : @"Avenir Next Condensed", + @"AvenirNextCondensed-DemiBold" : @"Avenir Next Condensed", + @"AvenirNextCondensed-DemiBoldItalic" : @"Avenir Next Condensed", + @"AvenirNextCondensed-Heavy" : @"Avenir Next Condensed", + @"AvenirNextCondensed-HeavyItalic" : @"Avenir Next Condensed", + @"AvenirNextCondensed-Italic" : @"Avenir Next Condensed", + @"AvenirNextCondensed-Medium" : @"Avenir Next Condensed", + @"AvenirNextCondensed-MediumItalic" : @"Avenir Next Condensed", + @"AvenirNextCondensed-Regular" : @"Avenir Next Condensed", + @"AvenirNextCondensed-UltraLight" : @"Avenir Next Condensed", + @"AvenirNextCondensed-UltraLightItalic" : @"Avenir Next Condensed", + @"Ayuthaya" : @"Ayuthaya", + @"Baghdad" : @"Baghdad", + @"BanglaMN" : @"Bangla MN", + @"BanglaMN-Bold" : @"Bangla MN", + @"BanglaSangamMN" : @"Bangla Sangam MN", + @"BanglaSangamMN-Bold" : @"Bangla Sangam MN", + @"Baskerville" : @"Baskerville", + @"Baskerville-Bold" : @"Baskerville", + @"Baskerville-BoldItalic" : @"Baskerville", + @"Baskerville-Italic" : @"Baskerville", + @"Baskerville-SemiBold" : @"Baskerville", + @"Baskerville-SemiBoldItalic" : @"Baskerville", + @"Beirut" : @"Beirut", + @"BigCaslon-Medium" : @"Big Caslon", + @"BodoniOrnamentsITCTT" : @"Bodoni Ornaments", + @"BodoniSvtyTwoITCTT-Bold" : @"Bodoni 72", + @"BodoniSvtyTwoITCTT-Book" : @"Bodoni 72", + @"BodoniSvtyTwoITCTT-BookIta" : @"Bodoni 72", + @"BodoniSvtyTwoOSITCTT-Bold" : @"Bodoni 72 Oldstyle", + @"BodoniSvtyTwoOSITCTT-Book" : @"Bodoni 72 Oldstyle", + @"BodoniSvtyTwoOSITCTT-BookIt" : @"Bodoni 72 Oldstyle", + @"BodoniSvtyTwoSCITCTT-Book" : @"Bodoni 72 Smallcaps", + @"BradleyHandITCTT-Bold" : @"Bradley Hand", + @"BrushScriptMT" : @"Brush Script MT", + @"Calibri" : @"Calibri", + @"Calibri-Bold" : @"Calibri", + @"Calibri-BoldItalic" : @"Calibri", + @"Calibri-Italic" : @"Calibri", + @"Chalkboard" : @"Chalkboard", + @"Chalkboard-Bold" : @"Chalkboard", + @"ChalkboardSE-Bold" : @"Chalkboard SE", + @"ChalkboardSE-Light" : @"Chalkboard SE", + @"ChalkboardSE-Regular" : @"Chalkboard SE", + @"Chalkduster" : @"Chalkduster", + @"Charter-Black" : @"Charter", + @"Charter-BlackItalic" : @"Charter", + @"Charter-Bold" : @"Charter", + @"Charter-BoldItalic" : @"Charter", + @"Charter-Italic" : @"Charter", + @"Charter-Roman" : @"Charter", + @"Cochin" : @"Cochin", + @"Cochin-Bold" : @"Cochin", + @"Cochin-BoldItalic" : @"Cochin", + @"Cochin-Italic" : @"Cochin", + @"ComicSansMS" : @"Comic Sans MS", + @"ComicSansMS-Bold" : @"Comic Sans MS", + @"Copperplate" : @"Copperplate", + @"Copperplate-Bold" : @"Copperplate", + @"Copperplate-Light" : @"Copperplate", + @"CorsivaHebrew" : @"Corsiva Hebrew", + @"CorsivaHebrew-Bold" : @"Corsiva Hebrew", + @"Courier" : @"Courier", + @"Courier-Bold" : @"Courier", + @"Courier-BoldOblique" : @"Courier", + @"Courier-Oblique" : @"Courier", + @"CourierNewPS-BoldItalicMT" : @"Courier New", + @"CourierNewPS-BoldMT" : @"Courier New", + @"CourierNewPS-ItalicMT" : @"Courier New", + @"CourierNewPSMT" : @"Courier New", + @"DINAlternate-Bold" : @"DIN Alternate", + @"DINCondensed-Bold" : @"DIN Condensed", + @"Damascus" : @"Damascus", + @"DamascusBold" : @"Damascus", + @"DamascusLight" : @"Damascus", + @"DamascusMedium" : @"Damascus", + @"DamascusSemiBold" : @"Damascus", + @"DecoTypeNaskh" : @"DecoType Naskh", + @"DevanagariMT" : @"Devanagari MT", + @"DevanagariMT-Bold" : @"Devanagari MT", + @"DevanagariSangamMN" : @"Devanagari Sangam MN", + @"DevanagariSangamMN-Bold" : @"Devanagari Sangam MN", + @"Didot" : @"Didot", + @"Didot-Bold" : @"Didot", + @"Didot-Italic" : @"Didot", + @"DiwanKufi" : @"Diwan Kufi", + @"DiwanMishafi" : @"Mishafi", + @"DiwanMishafiGold" : @"Mishafi Gold", + @"DiwanThuluth" : @"Diwan Thuluth", + @"EuphemiaUCAS" : @"Euphemia UCAS", + @"EuphemiaUCAS-Bold" : @"Euphemia UCAS", + @"EuphemiaUCAS-Italic" : @"Euphemia UCAS", + @"Farah" : @"Farah", + @"Farisi" : @"Farisi", + @"Futura-Bold" : @"Futura", + @"Futura-CondensedExtraBold" : @"Futura", + @"Futura-CondensedMedium" : @"Futura", + @"Futura-Medium" : @"Futura", + @"Futura-MediumItalic" : @"Futura", + @"GB18030Bitmap" : @"GB18030 Bitmap", + @"Galvji" : @"Galvji", + @"Galvji-Bold" : @"Galvji", + @"Galvji-BoldOblique" : @"Galvji", + @"Galvji-Oblique" : @"Galvji", + @"GeezaPro" : @"Geeza Pro", + @"GeezaPro-Bold" : @"Geeza Pro", + @"Geneva" : @"Geneva", + @"Georgia" : @"Georgia", + @"Georgia-Bold" : @"Georgia", + @"Georgia-BoldItalic" : @"Georgia", + @"Georgia-Italic" : @"Georgia", + @"GillSans" : @"Gill Sans", + @"GillSans-Bold" : @"Gill Sans", + @"GillSans-BoldItalic" : @"Gill Sans", + @"GillSans-Italic" : @"Gill Sans", + @"GillSans-Light" : @"Gill Sans", + @"GillSans-LightItalic" : @"Gill Sans", + @"GillSans-SemiBold" : @"Gill Sans", + @"GillSans-SemiBoldItalic" : @"Gill Sans", + @"GillSans-UltraBold" : @"Gill Sans", + @"GujaratiMT" : @"Gujarati MT", + @"GujaratiMT-Bold" : @"Gujarati MT", + @"GujaratiSangamMN" : @"Gujarati Sangam MN", + @"GujaratiSangamMN-Bold" : @"Gujarati Sangam MN", + @"GurmukhiMN" : @"Gurmukhi MN", + @"GurmukhiMN-Bold" : @"Gurmukhi MN", + @"GurmukhiSangamMN" : @"Gurmukhi Sangam MN", + @"GurmukhiSangamMN-Bold" : @"Gurmukhi Sangam MN", + @"Helvetica" : @"Helvetica", + @"Helvetica-Bold" : @"Helvetica", + @"Helvetica-BoldOblique" : @"Helvetica", + @"Helvetica-Light" : @"Helvetica", + @"Helvetica-LightOblique" : @"Helvetica", + @"Helvetica-Oblique" : @"Helvetica", + @"HelveticaLTMM" : @".Helvetica LT MM", + @"HelveticaNeue" : @"Helvetica Neue", + @"HelveticaNeue-Bold" : @"Helvetica Neue", + @"HelveticaNeue-BoldItalic" : @"Helvetica Neue", + @"HelveticaNeue-CondensedBlack" : @"Helvetica Neue", + @"HelveticaNeue-CondensedBold" : @"Helvetica Neue", + @"HelveticaNeue-Italic" : @"Helvetica Neue", + @"HelveticaNeue-Light" : @"Helvetica Neue", + @"HelveticaNeue-LightItalic" : @"Helvetica Neue", + @"HelveticaNeue-Medium" : @"Helvetica Neue", + @"HelveticaNeue-MediumItalic" : @"Helvetica Neue", + @"HelveticaNeue-Thin" : @"Helvetica Neue", + @"HelveticaNeue-ThinItalic" : @"Helvetica Neue", + @"HelveticaNeue-UltraLight" : @"Helvetica Neue", + @"HelveticaNeue-UltraLightItalic" : @"Helvetica Neue", + @"Herculanum" : @"Herculanum", + @"HiraKakuPro-W3" : @"Hiragino Kaku Gothic Pro", + @"HiraKakuPro-W6" : @"Hiragino Kaku Gothic Pro", + @"HiraKakuProN-W3" : @"Hiragino Kaku Gothic ProN", + @"HiraKakuProN-W6" : @"Hiragino Kaku Gothic ProN", + @"HiraKakuStd-W8" : @"Hiragino Kaku Gothic Std", + @"HiraKakuStdN-W8" : @"Hiragino Kaku Gothic StdN", + @"HiraMaruPro-W4" : @"Hiragino Maru Gothic Pro", + @"HiraMaruProN-W4" : @"Hiragino Maru Gothic ProN", + @"HiraMinPro-W3" : @"Hiragino Mincho Pro", + @"HiraMinPro-W6" : @"Hiragino Mincho Pro", + @"HiraMinProN-W3" : @"Hiragino Mincho ProN", + @"HiraMinProN-W6" : @"Hiragino Mincho ProN", + @"HiraginoSans-W0" : @"Hiragino Sans", + @"HiraginoSans-W1" : @"Hiragino Sans", + @"HiraginoSans-W2" : @"Hiragino Sans", + @"HiraginoSans-W3" : @"Hiragino Sans", + @"HiraginoSans-W4" : @"Hiragino Sans", + @"HiraginoSans-W5" : @"Hiragino Sans", + @"HiraginoSans-W6" : @"Hiragino Sans", + @"HiraginoSans-W7" : @"Hiragino Sans", + @"HiraginoSans-W8" : @"Hiragino Sans", + @"HiraginoSans-W9" : @"Hiragino Sans", + @"HiraginoSansGB-W3" : @"Hiragino Sans GB", + @"HiraginoSansGB-W6" : @"Hiragino Sans GB", + @"HoeflerText-Black" : @"Hoefler Text", + @"HoeflerText-BlackItalic" : @"Hoefler Text", + @"HoeflerText-Italic" : @"Hoefler Text", + @"HoeflerText-Ornaments" : @"Hoefler Text", + @"HoeflerText-Regular" : @"Hoefler Text", + @"ITFDevanagari-Bold" : @"ITF Devanagari", + @"ITFDevanagari-Book" : @"ITF Devanagari", + @"ITFDevanagari-Demi" : @"ITF Devanagari", + @"ITFDevanagari-Light" : @"ITF Devanagari", + @"ITFDevanagari-Medium" : @"ITF Devanagari", + @"ITFDevanagariMarathi-Bold" : @"ITF Devanagari Marathi", + @"ITFDevanagariMarathi-Book" : @"ITF Devanagari Marathi", + @"ITFDevanagariMarathi-Demi" : @"ITF Devanagari Marathi", + @"ITFDevanagariMarathi-Light" : @"ITF Devanagari Marathi", + @"ITFDevanagariMarathi-Medium" : @"ITF Devanagari Marathi", + @"Impact" : @"Impact", + @"InaiMathi" : @"InaiMathi", + @"InaiMathi-Bold" : @"InaiMathi", + @"IowanOldStyle-Black" : @"Iowan Old Style", + @"IowanOldStyle-BlackItalic" : @"Iowan Old Style", + @"IowanOldStyle-Bold" : @"Iowan Old Style", + @"IowanOldStyle-BoldItalic" : @"Iowan Old Style", + @"IowanOldStyle-Italic" : @"Iowan Old Style", + @"IowanOldStyle-Roman" : @"Iowan Old Style", + @"IowanOldStyle-Titling" : @"Iowan Old Style", + @"Kailasa" : @"Kailasa", + @"Kailasa-Bold" : @"Kailasa", + @"KannadaMN" : @"Kannada MN", + @"KannadaMN-Bold" : @"Kannada MN", + @"KannadaSangamMN" : @"Kannada Sangam MN", + @"KannadaSangamMN-Bold" : @"Kannada Sangam MN", + @"Kefa-Bold" : @"Kefa", + @"Kefa-Regular" : @"Kefa", + @"KhmerMN" : @"Khmer MN", + @"KhmerMN-Bold" : @"Khmer MN", + @"KhmerSangamMN" : @"Khmer Sangam MN", + @"KohinoorBangla-Bold" : @"Kohinoor Bangla", + @"KohinoorBangla-Light" : @"Kohinoor Bangla", + @"KohinoorBangla-Medium" : @"Kohinoor Bangla", + @"KohinoorBangla-Regular" : @"Kohinoor Bangla", + @"KohinoorBangla-Semibold" : @"Kohinoor Bangla", + @"KohinoorDevanagari-Bold" : @"Kohinoor Devanagari", + @"KohinoorDevanagari-Light" : @"Kohinoor Devanagari", + @"KohinoorDevanagari-Medium" : @"Kohinoor Devanagari", + @"KohinoorDevanagari-Regular" : @"Kohinoor Devanagari", + @"KohinoorDevanagari-Semibold" : @"Kohinoor Devanagari", + @"KohinoorGujarati-Bold" : @"Kohinoor Gujarati", + @"KohinoorGujarati-Light" : @"Kohinoor Gujarati", + @"KohinoorGujarati-Medium" : @"Kohinoor Gujarati", + @"KohinoorGujarati-Regular" : @"Kohinoor Gujarati", + @"KohinoorGujarati-Semibold" : @"Kohinoor Gujarati", + @"KohinoorTelugu-Bold" : @"Kohinoor Telugu", + @"KohinoorTelugu-Light" : @"Kohinoor Telugu", + @"KohinoorTelugu-Medium" : @"Kohinoor Telugu", + @"KohinoorTelugu-Regular" : @"Kohinoor Telugu", + @"KohinoorTelugu-Semibold" : @"Kohinoor Telugu", + @"Kokonor" : @"Kokonor", + @"Krungthep" : @"Krungthep", + @"KufiStandardGK" : @"KufiStandardGK", + @"LaoMN" : @"Lao MN", + @"LaoMN-Bold" : @"Lao MN", + @"LaoSangamMN" : @"Lao Sangam MN", + @"LastResort" : @".LastResort", + @"LucidaGrande" : @"Lucida Grande", + @"LucidaGrande-Bold" : @"Lucida Grande", + @"Luminari-Regular" : @"Luminari", + @"MalayalamMN" : @"Malayalam MN", + @"MalayalamMN-Bold" : @"Malayalam MN", + @"MalayalamSangamMN" : @"Malayalam Sangam MN", + @"MalayalamSangamMN-Bold" : @"Malayalam Sangam MN", + @"Marion-Bold" : @"Marion", + @"Marion-Italic" : @"Marion", + @"Marion-Regular" : @"Marion", + @"MarkerFelt-Thin" : @"Marker Felt", + @"MarkerFelt-Wide" : @"Marker Felt", + @"Menlo-Bold" : @"Menlo", + @"Menlo-BoldItalic" : @"Menlo", + @"Menlo-Italic" : @"Menlo", + @"Menlo-Regular" : @"Menlo", + @"MicrosoftSansSerif" : @"Microsoft Sans Serif", + @"Monaco" : @"Monaco", + @"MonotypeGurmukhi" : @"Gurmukhi MT", + @"Mshtakan" : @"Mshtakan", + @"MshtakanBold" : @"Mshtakan", + @"MshtakanBoldOblique" : @"Mshtakan", + @"MshtakanOblique" : @"Mshtakan", + @"MuktaMahee-Bold" : @"Mukta Mahee", + @"MuktaMahee-ExtraBold" : @"Mukta Mahee", + @"MuktaMahee-ExtraLight" : @"Mukta Mahee", + @"MuktaMahee-Light" : @"Mukta Mahee", + @"MuktaMahee-Medium" : @"Mukta Mahee", + @"MuktaMahee-Regular" : @"Mukta Mahee", + @"MuktaMahee-SemiBold" : @"Mukta Mahee", + @"Muna" : @"Muna", + @"MunaBlack" : @"Muna", + @"MunaBold" : @"Muna", + @"MyanmarMN" : @"Myanmar MN", + @"MyanmarMN-Bold" : @"Myanmar MN", + @"MyanmarSangamMN" : @"Myanmar Sangam MN", + @"MyanmarSangamMN-Bold" : @"Myanmar Sangam MN", + @"Nadeem" : @"Nadeem", + @"NewPeninimMT" : @"New Peninim MT", + @"NewPeninimMT-Bold" : @"New Peninim MT", + @"NewPeninimMT-BoldInclined" : @"New Peninim MT", + @"NewPeninimMT-Inclined" : @"New Peninim MT", + @"Noteworthy-Bold" : @"Noteworthy", + @"Noteworthy-Light" : @"Noteworthy", + @"NotoNastaliqUrdu" : @"Noto Nastaliq Urdu", + @"NotoNastaliqUrdu-Bold" : @"Noto Nastaliq Urdu", + @"NotoSansArmenian-Black" : @"Noto Sans Armenian", + @"NotoSansArmenian-Bold" : @"Noto Sans Armenian", + @"NotoSansArmenian-ExtraBold" : @"Noto Sans Armenian", + @"NotoSansArmenian-ExtraLight" : @"Noto Sans Armenian", + @"NotoSansArmenian-Light" : @"Noto Sans Armenian", + @"NotoSansArmenian-Medium" : @"Noto Sans Armenian", + @"NotoSansArmenian-Regular" : @"Noto Sans Armenian", + @"NotoSansArmenian-SemiBold" : @"Noto Sans Armenian", + @"NotoSansArmenian-Thin" : @"Noto Sans Armenian", + @"NotoSansAvestan-Regular" : @"Noto Sans Avestan", + @"NotoSansBamum-Regular" : @"Noto Sans Bamum", + @"NotoSansBatak-Regular" : @"Noto Sans Batak", + @"NotoSansBrahmi-Regular" : @"Noto Sans Brahmi", + @"NotoSansBuginese-Regular" : @"Noto Sans Buginese", + @"NotoSansBuhid-Regular" : @"Noto Sans Buhid", + @"NotoSansCarian-Regular" : @"Noto Sans Carian", + @"NotoSansChakma-Regular" : @"Noto Sans Chakma", + @"NotoSansCham-Regular" : @"Noto Sans Cham", + @"NotoSansCoptic-Regular" : @"Noto Sans Coptic", + @"NotoSansCuneiform-Regular" : @"Noto Sans Cuneiform", + @"NotoSansCypriot-Regular" : @"Noto Sans Cypriot", + @"NotoSansEgyptianHieroglyphs-Regular" : @"Noto Sans Egyptian Hieroglyphs", + @"NotoSansGlagolitic-Regular" : @"Noto Sans Glagolitic", + @"NotoSansGothic-Regular" : @"Noto Sans Gothic", + @"NotoSansHanunoo-Regular" : @"Noto Sans Hanunoo", + @"NotoSansImperialAramaic-Regular" : @"Noto Sans Imperial Aramaic", + @"NotoSansInscriptionalPahlavi-Regular" : @"Noto Sans Inscriptional Pahlavi", + @"NotoSansInscriptionalParthian-Regular" : @"Noto Sans Inscriptional Parthian", + @"NotoSansJavanese-Regular" : @"Noto Sans Javanese", + @"NotoSansKaithi-Regular" : @"Noto Sans Kaithi", + @"NotoSansKannada-Black" : @"Noto Sans Kannada", + @"NotoSansKannada-Bold" : @"Noto Sans Kannada", + @"NotoSansKannada-ExtraBold" : @"Noto Sans Kannada", + @"NotoSansKannada-ExtraLight" : @"Noto Sans Kannada", + @"NotoSansKannada-Light" : @"Noto Sans Kannada", + @"NotoSansKannada-Medium" : @"Noto Sans Kannada", + @"NotoSansKannada-Regular" : @"Noto Sans Kannada", + @"NotoSansKannada-SemiBold" : @"Noto Sans Kannada", + @"NotoSansKannada-Thin" : @"Noto Sans Kannada", + @"NotoSansKayahLi-Regular" : @"Noto Sans Kayah Li", + @"NotoSansKharoshthi-Regular" : @"Noto Sans Kharoshthi", + @"NotoSansLepcha-Regular" : @"Noto Sans Lepcha", + @"NotoSansLimbu-Regular" : @"Noto Sans Limbu", + @"NotoSansLinearB-Regular" : @"Noto Sans Linear B", + @"NotoSansLisu-Regular" : @"Noto Sans Lisu", + @"NotoSansLycian-Regular" : @"Noto Sans Lycian", + @"NotoSansLydian-Regular" : @"Noto Sans Lydian", + @"NotoSansMandaic-Regular" : @"Noto Sans Mandaic", + @"NotoSansMeeteiMayek-Regular" : @"Noto Sans Meetei Mayek", + @"NotoSansMongolian" : @"Noto Sans Mongolian", + @"NotoSansMyanmar-Black" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-Bold" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-ExtraBold" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-ExtraLight" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-Light" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-Medium" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-Regular" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-SemiBold" : @"Noto Sans Myanmar", + @"NotoSansMyanmar-Thin" : @"Noto Sans Myanmar", + @"NotoSansNKo-Regular" : @"Noto Sans NKo", + @"NotoSansNewTaiLue-Regular" : @"Noto Sans New Tai Lue", + @"NotoSansOgham-Regular" : @"Noto Sans Ogham", + @"NotoSansOlChiki-Regular" : @"Noto Sans Ol Chiki", + @"NotoSansOldItalic-Regular" : @"Noto Sans Old Italic", + @"NotoSansOldPersian-Regular" : @"Noto Sans Old Persian", + @"NotoSansOldSouthArabian-Regular" : @"Noto Sans Old South Arabian", + @"NotoSansOldTurkic-Regular" : @"Noto Sans Old Turkic", + @"NotoSansOriya" : @"Noto Sans Oriya", + @"NotoSansOriya-Bold" : @"Noto Sans Oriya", + @"NotoSansOsmanya-Regular" : @"Noto Sans Osmanya", + @"NotoSansPhagsPa-Regular" : @"Noto Sans PhagsPa", + @"NotoSansPhoenician-Regular" : @"Noto Sans Phoenician", + @"NotoSansRejang-Regular" : @"Noto Sans Rejang", + @"NotoSansRunic-Regular" : @"Noto Sans Runic", + @"NotoSansSamaritan-Regular" : @"Noto Sans Samaritan", + @"NotoSansSaurashtra-Regular" : @"Noto Sans Saurashtra", + @"NotoSansShavian-Regular" : @"Noto Sans Shavian", + @"NotoSansSundanese-Regular" : @"Noto Sans Sundanese", + @"NotoSansSylotiNagri-Regular" : @"Noto Sans Syloti Nagri", + @"NotoSansSyriac-Regular" : @"Noto Sans Syriac", + @"NotoSansTagalog-Regular" : @"Noto Sans Tagalog", + @"NotoSansTagbanwa-Regular" : @"Noto Sans Tagbanwa", + @"NotoSansTaiLe-Regular" : @"Noto Sans Tai Le", + @"NotoSansTaiTham" : @"Noto Sans Tai Tham", + @"NotoSansTaiViet-Regular" : @"Noto Sans Tai Viet", + @"NotoSansThaana-Regular" : @"Noto Sans Thaana", + @"NotoSansTifinagh-Regular" : @"Noto Sans Tifinagh", + @"NotoSansUgaritic-Regular" : @"Noto Sans Ugaritic", + @"NotoSansVai-Regular" : @"Noto Sans Vai", + @"NotoSansYi-Regular" : @"Noto Sans Yi", + @"NotoSansZawgyi-Black" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-Bold" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-ExtraBold" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-ExtraLight" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-Light" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-Medium" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-Regular" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-SemiBold" : @"Noto Sans Zawgyi", + @"NotoSansZawgyi-Thin" : @"Noto Sans Zawgyi", + @"NotoSerifBalinese-Regular" : @"Noto Serif Balinese", + @"NotoSerifMyanmar-Black" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-Bold" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-ExtraBold" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-ExtraLight" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-Light" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-Medium" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-Regular" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-SemiBold" : @"Noto Serif Myanmar", + @"NotoSerifMyanmar-Thin" : @"Noto Serif Myanmar", + @"Optima-Bold" : @"Optima", + @"Optima-BoldItalic" : @"Optima", + @"Optima-ExtraBlack" : @"Optima", + @"Optima-Italic" : @"Optima", + @"Optima-Regular" : @"Optima", + @"OriyaMN" : @"Oriya MN", + @"OriyaMN-Bold" : @"Oriya MN", + @"OriyaSangamMN" : @"Oriya Sangam MN", + @"OriyaSangamMN-Bold" : @"Oriya Sangam MN", + @"PTMono-Bold" : @"PT Mono", + @"PTMono-Regular" : @"PT Mono", + @"PTSans-Bold" : @"PT Sans", + @"PTSans-BoldItalic" : @"PT Sans", + @"PTSans-Caption" : @"PT Sans Caption", + @"PTSans-CaptionBold" : @"PT Sans Caption", + @"PTSans-Italic" : @"PT Sans", + @"PTSans-Narrow" : @"PT Sans Narrow", + @"PTSans-NarrowBold" : @"PT Sans Narrow", + @"PTSans-Regular" : @"PT Sans", + @"PTSerif-Bold" : @"PT Serif", + @"PTSerif-BoldItalic" : @"PT Serif", + @"PTSerif-Caption" : @"PT Serif Caption", + @"PTSerif-CaptionItalic" : @"PT Serif Caption", + @"PTSerif-Italic" : @"PT Serif", + @"PTSerif-Regular" : @"PT Serif", + @"Palatino-Bold" : @"Palatino", + @"Palatino-BoldItalic" : @"Palatino", + @"Palatino-Italic" : @"Palatino", + @"Palatino-Roman" : @"Palatino", + @"Papyrus" : @"Papyrus", + @"Papyrus-Condensed" : @"Papyrus", + @"Phosphate-Inline" : @"Phosphate", + @"Phosphate-Solid" : @"Phosphate", + @"PingFangHK-Light" : @"PingFang HK", + @"PingFangHK-Medium" : @"PingFang HK", + @"PingFangHK-Regular" : @"PingFang HK", + @"PingFangHK-Semibold" : @"PingFang HK", + @"PingFangHK-Thin" : @"PingFang HK", + @"PingFangHK-Ultralight" : @"PingFang HK", + @"PingFangSC-Light" : @"PingFang SC", + @"PingFangSC-Medium" : @"PingFang SC", + @"PingFangSC-Regular" : @"PingFang SC", + @"PingFangSC-Semibold" : @"PingFang SC", + @"PingFangSC-Thin" : @"PingFang SC", + @"PingFangSC-Ultralight" : @"PingFang SC", + @"PingFangTC-Light" : @"PingFang TC", + @"PingFangTC-Medium" : @"PingFang TC", + @"PingFangTC-Regular" : @"PingFang TC", + @"PingFangTC-Semibold" : @"PingFang TC", + @"PingFangTC-Thin" : @"PingFang TC", + @"PingFangTC-Ultralight" : @"PingFang TC", + @"PlantagenetCherokee" : @"Plantagenet Cherokee", + @"Raanana" : @"Raanana", + @"RaananaBold" : @"Raanana", + @"Rockwell-Bold" : @"Rockwell", + @"Rockwell-BoldItalic" : @"Rockwell", + @"Rockwell-Italic" : @"Rockwell", + @"Rockwell-Regular" : @"Rockwell", + @"SFMono-Bold" : @"SF Mono", + @"SFMono-BoldItalic" : @"SF Mono", + @"SFMono-Regular" : @"SF Mono", + @"SFMono-RegularItalic" : @"SF Mono", + @"STHeitiSC-Light" : @"Heiti SC", + @"STHeitiSC-Medium" : @"Heiti SC", + @"STHeitiTC-Light" : @"Heiti TC", + @"STHeitiTC-Medium" : @"Heiti TC", + @"STIXGeneral-Bold" : @"STIXGeneral", + @"STIXGeneral-BoldItalic" : @"STIXGeneral", + @"STIXGeneral-Italic" : @"STIXGeneral", + @"STIXGeneral-Regular" : @"STIXGeneral", + @"STIXIntegralsD-Bold" : @"STIXIntegralsD", + @"STIXIntegralsD-Regular" : @"STIXIntegralsD", + @"STIXIntegralsSm-Bold" : @"STIXIntegralsSm", + @"STIXIntegralsSm-Regular" : @"STIXIntegralsSm", + @"STIXIntegralsUp-Bold" : @"STIXIntegralsUp", + @"STIXIntegralsUp-Regular" : @"STIXIntegralsUp", + @"STIXIntegralsUpD-Bold" : @"STIXIntegralsUpD", + @"STIXIntegralsUpD-Regular" : @"STIXIntegralsUpD", + @"STIXIntegralsUpSm-Bold" : @"STIXIntegralsUpSm", + @"STIXIntegralsUpSm-Regular" : @"STIXIntegralsUpSm", + @"STIXNonUnicode-Bold" : @"STIXNonUnicode", + @"STIXNonUnicode-BoldItalic" : @"STIXNonUnicode", + @"STIXNonUnicode-Italic" : @"STIXNonUnicode", + @"STIXNonUnicode-Regular" : @"STIXNonUnicode", + @"STIXSizeFiveSym-Regular" : @"STIXSizeFiveSym", + @"STIXSizeFourSym-Bold" : @"STIXSizeFourSym", + @"STIXSizeFourSym-Regular" : @"STIXSizeFourSym", + @"STIXSizeOneSym-Bold" : @"STIXSizeOneSym", + @"STIXSizeOneSym-Regular" : @"STIXSizeOneSym", + @"STIXSizeThreeSym-Bold" : @"STIXSizeThreeSym", + @"STIXSizeThreeSym-Regular" : @"STIXSizeThreeSym", + @"STIXSizeTwoSym-Bold" : @"STIXSizeTwoSym", + @"STIXSizeTwoSym-Regular" : @"STIXSizeTwoSym", + @"STIXVariants-Bold" : @"STIXVariants", + @"STIXVariants-Regular" : @"STIXVariants", + @"STSong" : @"STSong", + @"STSongti-SC-Black" : @"Songti SC", + @"STSongti-SC-Bold" : @"Songti SC", + @"STSongti-SC-Light" : @"Songti SC", + @"STSongti-SC-Regular" : @"Songti SC", + @"STSongti-TC-Bold" : @"Songti TC", + @"STSongti-TC-Light" : @"Songti TC", + @"STSongti-TC-Regular" : @"Songti TC", + @"Sana" : @"Sana", + @"Sathu" : @"Sathu", + @"SavoyeLetPlain" : @"Savoye LET", + @"Seravek" : @"Seravek", + @"Seravek-Bold" : @"Seravek", + @"Seravek-BoldItalic" : @"Seravek", + @"Seravek-ExtraLight" : @"Seravek", + @"Seravek-ExtraLightItalic" : @"Seravek", + @"Seravek-Italic" : @"Seravek", + @"Seravek-Light" : @"Seravek", + @"Seravek-LightItalic" : @"Seravek", + @"Seravek-Medium" : @"Seravek", + @"Seravek-MediumItalic" : @"Seravek", + @"ShreeDev0714" : @"Shree Devanagari 714", + @"ShreeDev0714-Bold" : @"Shree Devanagari 714", + @"ShreeDev0714-BoldItalic" : @"Shree Devanagari 714", + @"ShreeDev0714-Italic" : @"Shree Devanagari 714", + @"SignPainter-HouseScript" : @"SignPainter", + @"SignPainter-HouseScriptSemibold" : @"SignPainter", + @"Silom" : @"Silom", + @"SinhalaMN" : @"Sinhala MN", + @"SinhalaMN-Bold" : @"Sinhala MN", + @"SinhalaSangamMN" : @"Sinhala Sangam MN", + @"SinhalaSangamMN-Bold" : @"Sinhala Sangam MN", + @"Skia-Regular" : @"Skia", + @"Skia-Regular_Black" : @"Skia", + @"Skia-Regular_Black-Condensed" : @"Skia", + @"Skia-Regular_Black-Extended" : @"Skia", + @"Skia-Regular_Bold" : @"Skia", + @"Skia-Regular_Condensed" : @"Skia", + @"Skia-Regular_Extended" : @"Skia", + @"Skia-Regular_Light" : @"Skia", + @"Skia-Regular_Light-Condensed" : @"Skia", + @"Skia-Regular_Light-Extended" : @"Skia", + @"SnellRoundhand" : @"Snell Roundhand", + @"SnellRoundhand-Black" : @"Snell Roundhand", + @"SnellRoundhand-Bold" : @"Snell Roundhand", + @"SukhumvitSet-Bold" : @"Sukhumvit Set", + @"SukhumvitSet-Light" : @"Sukhumvit Set", + @"SukhumvitSet-Medium" : @"Sukhumvit Set", + @"SukhumvitSet-SemiBold" : @"Sukhumvit Set", + @"SukhumvitSet-Text" : @"Sukhumvit Set", + @"SukhumvitSet-Thin" : @"Sukhumvit Set", + @"Superclarendon-Black" : @"Superclarendon", + @"Superclarendon-BlackItalic" : @"Superclarendon", + @"Superclarendon-Bold" : @"Superclarendon", + @"Superclarendon-BoldItalic" : @"Superclarendon", + @"Superclarendon-Italic" : @"Superclarendon", + @"Superclarendon-Light" : @"Superclarendon", + @"Superclarendon-LightItalic" : @"Superclarendon", + @"Superclarendon-Regular" : @"Superclarendon", + @"Symbol" : @"Symbol", + @"Tahoma" : @"Tahoma", + @"Tahoma-Bold" : @"Tahoma", + @"TamilMN" : @"Tamil MN", + @"TamilMN-Bold" : @"Tamil MN", + @"TamilSangamMN" : @"Tamil Sangam MN", + @"TamilSangamMN-Bold" : @"Tamil Sangam MN", + @"TeluguMN" : @"Telugu MN", + @"TeluguMN-Bold" : @"Telugu MN", + @"TeluguSangamMN" : @"Telugu Sangam MN", + @"TeluguSangamMN-Bold" : @"Telugu Sangam MN", + @"Thonburi" : @"Thonburi", + @"Thonburi-Bold" : @"Thonburi", + @"Thonburi-Light" : @"Thonburi", + @"Times-Bold" : @"Times", + @"Times-BoldItalic" : @"Times", + @"Times-Italic" : @"Times", + @"Times-Roman" : @"Times", + @"TimesLTMM" : @".Times LT MM", + @"TimesNewRomanPS-BoldItalicMT" : @"Times New Roman", + @"TimesNewRomanPS-BoldMT" : @"Times New Roman", + @"TimesNewRomanPS-ItalicMT" : @"Times New Roman", + @"TimesNewRomanPSMT" : @"Times New Roman", + @"Trattatello" : @"Trattatello", + @"Trebuchet-BoldItalic" : @"Trebuchet MS", + @"TrebuchetMS" : @"Trebuchet MS", + @"TrebuchetMS-Bold" : @"Trebuchet MS", + @"TrebuchetMS-Italic" : @"Trebuchet MS", + @"Verdana" : @"Verdana", + @"Verdana-Bold" : @"Verdana", + @"Verdana-BoldItalic" : @"Verdana", + @"Verdana-Italic" : @"Verdana", + @"Waseem" : @"Waseem", + @"WaseemLight" : @"Waseem", + @"Webdings" : @"Webdings", + @"Wingdings-Regular" : @"Wingdings", + @"Wingdings2" : @"Wingdings 2", + @"Wingdings3" : @"Wingdings 3", + @"ZapfDingbatsITC" : @"Zapf Dingbats", + @"Zapfino" : @"Zapfino", + + // JetBrains fonts + @"DroidSans" : @"Droid Sans", + @"DroidSans-Bold" : @"Droid Sans", + @"DroidSansMono" : @"Droid Sans Mono", + @"DroidSansMonoDotted" : @"Droid Sans Mono Dotted", + @"DroidSansMonoSlashed" : @"Droid Sans Mono Slashed", + @"DroidSerif" : @"Droid Serif", + @"DroidSerif-Bold" : @"Droid Serif", + @"DroidSerif-BoldItalic" : @"Droid Serif", + @"DroidSerif-Italic" : @"Droid Serif", + @"FiraCode-Bold" : @"Fira Code", + @"FiraCode-Light" : @"Fira Code", + @"FiraCode-Medium" : @"Fira Code", + @"FiraCode-Regular" : @"Fira Code", + @"FiraCode-Retina" : @"Fira Code", + @"Inconsolata" : @"Inconsolata", + @"JetBrainsMono-Bold" : @"JetBrains Mono", + @"JetBrainsMono-Regular" : @"JetBrains Mono", + @"JetBrainsMono-Italic" : @"JetBrains Mono", + @"JetBrainsMono-BoldItalic" : @"JetBrains Mono", + @"Roboto-Light" : @"Roboto", + @"Roboto-Thin" : @"Roboto", + @"SourceCodePro-Bold" : @"Source Code Pro", + @"SourceCodePro-BoldIt" : @"Source Code Pro", + @"SourceCodePro-It" : @"Source Code Pro", + @"SourceCodePro-Regular" : @"Source Code Pro", + @"Inter-Bold": @"Inter", + @"Inter-BoldItalic": @"Inter", + @"Inter-Italic": @"Inter", + @"Inter-Regular": @"Inter" + }; +} + +static NSDictionary* prebuiltFaceNames() { + return @{ + @".NewYork-Black" : @"Black", + @".NewYork-BlackItalic" : @"Black Italic", + @".NewYork-Bold" : @"Bold", + @".NewYork-BoldG1" : @"Bold G1", + @".NewYork-BoldG2" : @"Bold G2", + @".NewYork-BoldG3" : @"Bold G3", + @".NewYork-BoldG4" : @"Bold G4", + @".NewYork-BoldItalic" : @"Bold Italic", + @".NewYork-BoldItalicG1" : @"Bold Italic G1", + @".NewYork-BoldItalicG2" : @"Bold Italic G2", + @".NewYork-BoldItalicG3" : @"Bold Italic G3", + @".NewYork-BoldItalicG4" : @"Bold Italic G4", + @".NewYork-Heavy" : @"Heavy", + @".NewYork-HeavyItalic" : @"Heavy Italic", + @".NewYork-Medium" : @"Medium", + @".NewYork-MediumItalic" : @"Medium Italic", + @".NewYork-Regular" : @"Regular", + @".NewYork-RegularG1" : @"Regular G1", + @".NewYork-RegularG2" : @"Regular G2", + @".NewYork-RegularG3" : @"Regular G3", + @".NewYork-RegularG4" : @"Regular G4", + @".NewYork-RegularItalic" : @"Regular Italic", + @".NewYork-RegularItalicG1" : @"Regular Italic G1", + @".NewYork-RegularItalicG2" : @"Regular Italic G2", + @".NewYork-RegularItalicG3" : @"Regular Italic G3", + @".NewYork-RegularItalicG4" : @"Regular Italic G4", + @".NewYork-Semibold" : @"Semibold", + @".NewYork-SemiboldItalic" : @"Semibold Italic", + @".SFArabic-Black" : @"Black", + @".SFArabic-Bold" : @"Bold", + @".SFArabic-Heavy" : @"Heavy", + @".SFArabic-Light" : @"Light", + @".SFArabic-Medium" : @"Medium", + @".SFArabic-Regular" : @"Regular", + @".SFArabic-Semibold" : @"Semibold", + @".SFArabic-Thin" : @"Thin", + @".SFArabic-Ultralight" : @"Ultralight", + @".SFNS-Black" : @"Black", + @".SFNS-BlackItalic" : @"Black Italic", + @".SFNS-Bold" : @"Bold", + @".SFNS-BoldG1" : @"Bold G1", + @".SFNS-BoldG2" : @"Bold G2", + @".SFNS-BoldG3" : @"Bold G3", + @".SFNS-BoldG4" : @"Bold G4", + @".SFNS-BoldItalic" : @"Bold Italic", + @".SFNS-Heavy" : @"Heavy", + @".SFNS-HeavyG1" : @"Heavy G1", + @".SFNS-HeavyG2" : @"Heavy G2", + @".SFNS-HeavyG3" : @"Heavy G3", + @".SFNS-HeavyG4" : @"Heavy G4", + @".SFNS-HeavyItalic" : @"Heavy Italic", + @".SFNS-Light" : @"Light", + @".SFNS-LightG1" : @"Light G1", + @".SFNS-LightG2" : @"Light G2", + @".SFNS-LightG3" : @"Light G3", + @".SFNS-LightG4" : @"Light G4", + @".SFNS-LightItalic" : @"Light Italic", + @".SFNS-Medium" : @"Medium", + @".SFNS-MediumG1" : @"Medium G1", + @".SFNS-MediumG2" : @"Medium G2", + @".SFNS-MediumG3" : @"Medium G3", + @".SFNS-MediumG4" : @"Medium G4", + @".SFNS-MediumItalic" : @"Medium Italic", + @".SFNS-Regular" : @"Regular", + @".SFNS-RegularG1" : @"Regular G1", + @".SFNS-RegularG2" : @"Regular G2", + @".SFNS-RegularG3" : @"Regular G3", + @".SFNS-RegularG4" : @"Regular G4", + @".SFNS-RegularItalic" : @"Regular Italic", + @".SFNS-Semibold" : @"Semibold", + @".SFNS-SemiboldG1" : @"Semibold G1", + @".SFNS-SemiboldG2" : @"Semibold G2", + @".SFNS-SemiboldG3" : @"Semibold G3", + @".SFNS-SemiboldG4" : @"Semibold G4", + @".SFNS-SemiboldItalic" : @"Semibold Italic", + @".SFNS-Thin" : @"Thin", + @".SFNS-ThinG1" : @"Thin G1", + @".SFNS-ThinG2" : @"Thin G2", + @".SFNS-ThinG3" : @"Thin G3", + @".SFNS-ThinG4" : @"Thin G4", + @".SFNS-ThinItalic" : @"Thin Italic", + @".SFNS-Ultralight" : @"Ultralight", + @".SFNS-UltralightG1" : @"Ultralight G1", + @".SFNS-UltralightG2" : @"Ultralight G2", + @".SFNS-UltralightG3" : @"Ultralight G3", + @".SFNS-UltralightG4" : @"Ultralight G4", + @".SFNS-UltralightItalic" : @"Ultralight Italic", + @".SFNS-Ultrathin" : @"Ultrathin", + @".SFNS-UltrathinG1" : @"Ultrathin G1", + @".SFNS-UltrathinG2" : @"Ultrathin G2", + @".SFNS-UltrathinG3" : @"Ultrathin G3", + @".SFNS-UltrathinG4" : @"Ultrathin G4", + @".SFNS-UltrathinItalic" : @"Ultrathin Italic", + @".SFNSMono-Bold" : @"Bold", + @".SFNSMono-BoldItalic" : @"Bold Italic", + @".SFNSMono-Heavy" : @"Heavy", + @".SFNSMono-HeavyItalic" : @"Heavy Italic", + @".SFNSMono-Light" : @"Light", + @".SFNSMono-LightItalic" : @"Light Italic", + @".SFNSMono-Medium" : @"Medium", + @".SFNSMono-MediumItalic" : @"Medium Italic", + @".SFNSMono-Regular" : @"Regular", + @".SFNSMono-RegularItalic" : @"Regular Italic", + @".SFNSMono-Semibold" : @"Semibold", + @".SFNSMono-SemiboldItalic" : @"Semibold Italic", + @".SFCompact-BlackItalic" : @"BlackItalic", + @".SFCompact-Bold" : @"Bold", + @".SFCompact-BoldG1" : @"Bold G1", + @".SFCompact-BoldG2" : @"Bold G2", + @".SFCompact-BoldG3" : @"Bold G3", + @".SFCompact-BoldG4" : @"Bold G4", + @".SFCompact-BoldItalic" : @"Bold Italic", + @".SFCompact-BoldItalicG1" : @"Bold Italic G1", + @".SFCompact-BoldItalicG2" : @"Bold Italic G2", + @".SFCompact-BoldItalicG3" : @"Bold Italic G3", + @".SFCompact-BoldItalicG4" : @"Bold Italic G4", + @".SFCompact-Heavy" : @"Heavy", + @".SFCompact-HeavyG1" : @"Heavy G1", + @".SFCompact-HeavyG2" : @"Heavy G2", + @".SFCompact-HeavyG3" : @"Heavy G3", + @".SFCompact-HeavyG4" : @"Heavy G4", + @".SFCompact-HeavyItalic" : @"Heavy Italic", + @".SFCompact-HeavyItalicG1" : @"Heavy Italic G1", + @".SFCompact-HeavyItalicG2" : @"Heavy Italic G2", + @".SFCompact-HeavyItalicG3" : @"Heavy Italic G3", + @".SFCompact-HeavyItalicG4" : @"Heavy Italic G4", + @".SFCompact-Light" : @"Light", + @".SFCompact-LightG1" : @"Light G1", + @".SFCompact-LightG2" : @"Light G2", + @".SFCompact-LightG3" : @"Light G3", + @".SFCompact-LightG4" : @"Light G4", + @".SFCompact-LightItalic" : @"Light Italic", + @".SFCompact-LightItalicG1" : @"Light Italic G1", + @".SFCompact-LightItalicG2" : @"Light Italic G2", + @".SFCompact-LightItalicG3" : @"Light Italic G3", + @".SFCompact-LightItalicG4" : @"Light Italic G4", + @".SFCompact-Medium" : @"Medium", + @".SFCompact-MediumG1" : @"Medium G1", + @".SFCompact-MediumG2" : @"Medium G2", + @".SFCompact-MediumG3" : @"Medium G3", + @".SFCompact-MediumG4" : @"Medium G4", + @".SFCompact-MediumItalic" : @"Medium Italic", + @".SFCompact-MediumItalicG1" : @"Medium Italic G1", + @".SFCompact-MediumItalicG2" : @"Medium Italic G2", + @".SFCompact-MediumItalicG3" : @"Medium Italic G3", + @".SFCompact-MediumItalicG4" : @"Medium Italic G4", + @".SFCompact-Regular" : @"Regular", + @".SFCompact-RegularG1" : @"Regular G1", + @".SFCompact-RegularG2" : @"Regular G2", + @".SFCompact-RegularG3" : @"Regular G3", + @".SFCompact-RegularG4" : @"Regular G4", + @".SFCompact-RegularItalic" : @"Regular Italic", + @".SFCompact-RegularItalicG1" : @"Regular Italic G1", + @".SFCompact-RegularItalicG2" : @"Regular Italic G2", + @".SFCompact-RegularItalicG3" : @"Regular Italic G3", + @".SFCompact-RegularItalicG4" : @"Regular Italic G4", + @".SFCompact-Semibold" : @"Semibold", + @".SFCompact-SemiboldG1" : @"Semibold G1", + @".SFCompact-SemiboldG2" : @"Semibold G2", + @".SFCompact-SemiboldG3" : @"Semibold G3", + @".SFCompact-SemiboldG4" : @"Semibold G4", + @".SFCompact-SemiboldItalic" : @"Semibold Italic", + @".SFCompact-SemiboldItalicG1" : @"Semibold Italic G1", + @".SFCompact-SemiboldItalicG2" : @"Semibold Italic G2", + @".SFCompact-SemiboldItalicG3" : @"Semibold Italic G3", + @".SFCompact-SemiboldItalicG4" : @"Semibold Italic G4", + @".SFCompact-Thin" : @"Thin", + @".SFCompact-ThinG1" : @"Thin G1", + @".SFCompact-ThinG2" : @"Thin G2", + @".SFCompact-ThinG3" : @"Thin G3", + @".SFCompact-ThinG4" : @"Thin G4", + @".SFCompact-ThinItalic" : @"Thin Italic", + @".SFCompact-ThinItalicG1" : @"Thin Italic G1", + @".SFCompact-ThinItalicG2" : @"Thin Italic G2", + @".SFCompact-ThinItalicG3" : @"Thin Italic G3", + @".SFCompact-ThinItalicG4" : @"Thin Italic G4", + @".SFCompact-Ultralight" : @"Ultralight", + @".SFCompact-UltralightG1" : @"Ultralight G1", + @".SFCompact-UltralightG2" : @"Ultralight G2", + @".SFCompact-UltralightG3" : @"Ultralight G3", + @".SFCompact-UltralightG4" : @"Ultralight G4", + @".SFCompact-UltralightItalic" : @"Ultralight Italic", + @".SFCompact-UltralightItalicG1" : @"Ultralight Italic G1", + @".SFCompact-UltralightItalicG2" : @"Ultralight Italic G2", + @".SFCompact-UltralightItalicG3" : @"Ultralight Italic G3", + @".SFCompact-UltralightItalicG4" : @"Ultralight Italic G4", + @".SFNS-CompressedBlack" : @"Compressed Black", + @".SFNS-CompressedBold" : @"Compressed Bold", + @".SFNS-CompressedBoldG1" : @"Compressed Bold G1", + @".SFNS-CompressedBoldG2" : @"Compressed Bold G2", + @".SFNS-CompressedBoldG3" : @"Compressed Bold G3", + @".SFNS-CompressedBoldG4" : @"Compressed Bold G4", + @".SFNS-CompressedHeavy" : @"Compressed Heavy", + @".SFNS-CompressedHeavyG1" : @"Compressed Heavy G1", + @".SFNS-CompressedHeavyG2" : @"Compressed Heavy G2", + @".SFNS-CompressedHeavyG3" : @"Compressed Heavy G3", + @".SFNS-CompressedHeavyG4" : @"Compressed Heavy G4", + @".SFNS-CompressedLight" : @"Compressed Light", + @".SFNS-CompressedLightG1" : @"Compressed Light G1", + @".SFNS-CompressedLightG2" : @"Compressed Light G2", + @".SFNS-CompressedLightG3" : @"Compressed Light G3", + @".SFNS-CompressedLightG4" : @"Compressed Light G4", + @".SFNS-CompressedMedium" : @"Compressed Medium", + @".SFNS-CompressedMediumG1" : @"Compressed Medium G1", + @".SFNS-CompressedMediumG2" : @"Compressed Medium G2", + @".SFNS-CompressedMediumG3" : @"Compressed Medium G3", + @".SFNS-CompressedMediumG4" : @"Compressed Medium G4", + @".SFNS-CompressedRegular" : @"Compressed Regular", + @".SFNS-CompressedRegularG1" : @"Compressed Regular G1", + @".SFNS-CompressedRegularG2" : @"Compressed Regular G2", + @".SFNS-CompressedRegularG3" : @"Compressed Regular G3", + @".SFNS-CompressedRegularG4" : @"Compressed Regular G4", + @".SFNS-CompressedSemibold" : @"Compressed Semibold", + @".SFNS-CompressedSemiboldG1" : @"Compressed Semibold G1", + @".SFNS-CompressedSemiboldG2" : @"Compressed Semibold G2", + @".SFNS-CompressedSemiboldG3" : @"Compressed Semibold G3", + @".SFNS-CompressedSemiboldG4" : @"Compressed Semibold G4", + @".SFNS-CompressedThin" : @"Compressed Thin", + @".SFNS-CompressedThinG1" : @"Compressed Thin G1", + @".SFNS-CompressedThinG2" : @"Compressed Thin G2", + @".SFNS-CompressedThinG3" : @"Compressed Thin G3", + @".SFNS-CompressedThinG4" : @"Compressed Thin G4", + @".SFNS-CompressedUltralight" : @"Compressed Ultralight", + @".SFNS-CompressedUltralightG1" : @"Compressed Ultralight G1", + @".SFNS-CompressedUltralightG2" : @"Compressed Ultralight G2", + @".SFNS-CompressedUltralightG3" : @"Compressed Ultralight G3", + @".SFNS-CompressedUltralightG4" : @"Compressed Ultralight G4", + @".SFNS-CondensedBlack" : @"Condensed Black", + @".SFNS-CondensedBold" : @"Condensed Bold", + @".SFNS-CondensedBoldG1" : @"Condensed Bold G1", + @".SFNS-CondensedBoldG2" : @"Condensed Bold G2", + @".SFNS-CondensedBoldG3" : @"Condensed Bold G3", + @".SFNS-CondensedBoldG4" : @"Condensed Bold G4", + @".SFNS-CondensedHeavy" : @"Condensed Heavy", + @".SFNS-CondensedHeavyG1" : @"Condensed Heavy G1", + @".SFNS-CondensedHeavyG2" : @"Condensed Heavy G2", + @".SFNS-CondensedHeavyG3" : @"Condensed Heavy G3", + @".SFNS-CondensedHeavyG4" : @"Condensed Heavy G4", + @".SFNS-CondensedLight" : @"Condensed Light", + @".SFNS-CondensedLightG1" : @"Condensed Light G1", + @".SFNS-CondensedLightG2" : @"Condensed Light G2", + @".SFNS-CondensedLightG3" : @"Condensed Light G3", + @".SFNS-CondensedLightG4" : @"Condensed Light G4", + @".SFNS-CondensedMedium" : @"Condensed Medium", + @".SFNS-CondensedMediumG1" : @"Condensed Medium G1", + @".SFNS-CondensedMediumG2" : @"Condensed Medium G2", + @".SFNS-CondensedMediumG3" : @"Condensed Medium G3", + @".SFNS-CondensedMediumG4" : @"Condensed Medium G4", + @".SFNS-CondensedRegular" : @"Condensed Regular", + @".SFNS-CondensedRegularG1" : @"Condensed Regular G1", + @".SFNS-CondensedRegularG2" : @"Condensed Regular G2", + @".SFNS-CondensedRegularG3" : @"Condensed Regular G3", + @".SFNS-CondensedRegularG4" : @"Condensed Regular G4", + @".SFNS-CondensedSemibold" : @"Condensed Semibold", + @".SFNS-CondensedSemiboldG1" : @"Condensed Semibold G1", + @".SFNS-CondensedSemiboldG2" : @"Condensed Semibold G2", + @".SFNS-CondensedSemiboldG3" : @"Condensed Semibold G3", + @".SFNS-CondensedSemiboldG4" : @"Condensed Semibold G4", + @".SFNS-CondensedThin" : @"Condensed Thin", + @".SFNS-CondensedThinG1" : @"Condensed Thin G1", + @".SFNS-CondensedThinG2" : @"Condensed Thin G2", + @".SFNS-CondensedThinG3" : @"Condensed Thin G3", + @".SFNS-CondensedThinG4" : @"Condensed Thin G4", + @".SFNS-CondensedUltralight" : @"Condensed Ultralight", + @".SFNS-CondensedUltralightG1" : @"Condensed Ultralight G1", + @".SFNS-CondensedUltralightG2" : @"Condensed Ultralight G2", + @".SFNS-CondensedUltralightG3" : @"Condensed Ultralight G3", + @".SFNS-CondensedUltralightG4" : @"Condensed Ultralight G4", + @".SFNS-ExpandedBlack" : @"Expanded Black", + @".SFNS-ExpandedBold" : @"Expanded Bold", + @".SFNS-ExpandedBoldG1" : @"Expanded Bold G1", + @".SFNS-ExpandedBoldG2" : @"Expanded Bold G2", + @".SFNS-ExpandedBoldG3" : @"Expanded Bold G3", + @".SFNS-ExpandedBoldG4" : @"Expanded Bold G4", + @".SFNS-ExpandedHeavy" : @"Expanded Heavy", + @".SFNS-ExpandedHeavyG1" : @"Expanded Heavy G1", + @".SFNS-ExpandedHeavyG2" : @"Expanded Heavy G2", + @".SFNS-ExpandedHeavyG3" : @"Expanded Heavy G3", + @".SFNS-ExpandedHeavyG4" : @"Expanded Heavy G4", + @".SFNS-ExpandedLight" : @"Expanded Light", + @".SFNS-ExpandedLightG1" : @"Expanded Light G1", + @".SFNS-ExpandedLightG2" : @"Expanded Light G2", + @".SFNS-ExpandedLightG3" : @"Expanded Light G3", + @".SFNS-ExpandedLightG4" : @"Expanded Light G4", + @".SFNS-ExpandedMedium" : @"Expanded Medium", + @".SFNS-ExpandedMediumG1" : @"Expanded Medium G1", + @".SFNS-ExpandedMediumG2" : @"Expanded Medium G2", + @".SFNS-ExpandedMediumG3" : @"Expanded Medium G3", + @".SFNS-ExpandedMediumG4" : @"Expanded Medium G4", + @".SFNS-ExpandedRegular" : @"Expanded Regular", + @".SFNS-ExpandedRegularG1" : @"Expanded Regular G1", + @".SFNS-ExpandedRegularG2" : @"Expanded Regular G2", + @".SFNS-ExpandedRegularG3" : @"Expanded Regular G3", + @".SFNS-ExpandedRegularG4" : @"Expanded Regular G4", + @".SFNS-ExpandedSemibold" : @"Expanded Semibold", + @".SFNS-ExpandedSemiboldG1" : @"Expanded Semibold G1", + @".SFNS-ExpandedSemiboldG2" : @"Expanded Semibold G2", + @".SFNS-ExpandedSemiboldG3" : @"Expanded Semibold G3", + @".SFNS-ExpandedSemiboldG4" : @"Expanded Semibold G4", + @".SFNS-ExpandedThin" : @"Expanded Thin", + @".SFNS-ExpandedThinG1" : @"Expanded Thin G1", + @".SFNS-ExpandedThinG2" : @"Expanded Thin G2", + @".SFNS-ExpandedThinG3" : @"Expanded Thin G3", + @".SFNS-ExpandedThinG4" : @"Expanded Thin G4", + @".SFNS-ExpandedUltralight" : @"Expanded Ultralight", + @".SFNS-ExpandedUltralightG1" : @"Expanded Ultralight G1", + @".SFNS-ExpandedUltralightG2" : @"Expanded Ultralight G2", + @".SFNS-ExpandedUltralightG3" : @"Expanded Ultralight G3", + @".SFNS-ExpandedUltralightG4" : @"Expanded Ultralight G4", + @".SFNS-ExtraCompressedBlack" : @"ExtraCompressed Black", + @".SFNS-ExtraCompressedBold" : @"ExtraCompressed Bold", + @".SFNS-ExtraCompressedBoldG1" : @"ExtraCompressed Bold G1", + @".SFNS-ExtraCompressedBoldG2" : @"ExtraCompressed Bold G2", + @".SFNS-ExtraCompressedBoldG3" : @"ExtraCompressed Bold G3", + @".SFNS-ExtraCompressedBoldG4" : @"ExtraCompressed Bold G4", + @".SFNS-ExtraCompressedHeavy" : @"ExtraCompressed Heavy", + @".SFNS-ExtraCompressedHeavyG1" : @"ExtraCompressed Heavy G1", + @".SFNS-ExtraCompressedHeavyG2" : @"ExtraCompressed Heavy G2", + @".SFNS-ExtraCompressedHeavyG3" : @"ExtraCompressed Heavy G3", + @".SFNS-ExtraCompressedHeavyG4" : @"ExtraCompressed Heavy G4", + @".SFNS-ExtraCompressedLight" : @"ExtraCompressed Light", + @".SFNS-ExtraCompressedLightG1" : @"ExtraCompressed Light G1", + @".SFNS-ExtraCompressedLightG2" : @"ExtraCompressed Light G2", + @".SFNS-ExtraCompressedLightG3" : @"ExtraCompressed Light G3", + @".SFNS-ExtraCompressedLightG4" : @"ExtraCompressed Light G4", + @".SFNS-ExtraCompressedMedium" : @"ExtraCompressed Medium", + @".SFNS-ExtraCompressedMediumG1" : @"ExtraCompressed Medium G1", + @".SFNS-ExtraCompressedMediumG2" : @"ExtraCompressed Medium G2", + @".SFNS-ExtraCompressedMediumG3" : @"ExtraCompressed Medium G3", + @".SFNS-ExtraCompressedMediumG4" : @"ExtraCompressed Medium G4", + @".SFNS-ExtraCompressedRegular" : @"ExtraCompressed Regular", + @".SFNS-ExtraCompressedRegularG1" : @"ExtraCompressed Regular G1", + @".SFNS-ExtraCompressedRegularG2" : @"ExtraCompressed Regular G2", + @".SFNS-ExtraCompressedRegularG3" : @"ExtraCompressed Regular G3", + @".SFNS-ExtraCompressedRegularG4" : @"ExtraCompressed Regular G4", + @".SFNS-ExtraCompressedSemibold" : @"ExtraCompressed Semibold", + @".SFNS-ExtraCompressedSemiboldG1" : @"ExtraCompressed Semibold G1", + @".SFNS-ExtraCompressedSemiboldG2" : @"ExtraCompressed Semibold G2", + @".SFNS-ExtraCompressedSemiboldG3" : @"ExtraCompressed Semibold G3", + @".SFNS-ExtraCompressedSemiboldG4" : @"ExtraCompressed Semibold G4", + @".SFNS-ExtraCompressedThin" : @"ExtraCompressed Thin", + @".SFNS-ExtraCompressedThinG1" : @"ExtraCompressed Thin G1", + @".SFNS-ExtraCompressedThinG2" : @"ExtraCompressed Thin G2", + @".SFNS-ExtraCompressedThinG3" : @"ExtraCompressed Thin G3", + @".SFNS-ExtraCompressedThinG4" : @"ExtraCompressed Thin G4", + @".SFNS-ExtraCompressedUltralight" : @"ExtraCompressed Ultralight", + @".SFNS-ExtraCompressedUltralightG1" : @"ExtraCompressed Ultralight G1", + @".SFNS-ExtraCompressedUltralightG2" : @"ExtraCompressed Ultralight G2", + @".SFNS-ExtraCompressedUltralightG3" : @"ExtraCompressed Ultralight G3", + @".SFNS-ExtraCompressedUltralightG4" : @"ExtraCompressed Ultralight G4", + @".SFNS-ExtraExpandedBlack" : @"ExtraExpanded Black", + @".SFNS-ExtraExpandedBold" : @"ExtraExpanded Bold", + @".SFNS-ExtraExpandedBoldG1" : @"ExtraExpanded Bold G1", + @".SFNS-ExtraExpandedBoldG2" : @"ExtraExpanded Bold G2", + @".SFNS-ExtraExpandedBoldG3" : @"ExtraExpanded Bold G3", + @".SFNS-ExtraExpandedBoldG4" : @"ExtraExpanded Bold G4", + @".SFNS-ExtraExpandedHeavy" : @"ExtraExpanded Heavy", + @".SFNS-ExtraExpandedHeavyG1" : @"ExtraExpanded Heavy G1", + @".SFNS-ExtraExpandedHeavyG2" : @"ExtraExpanded Heavy G2", + @".SFNS-ExtraExpandedHeavyG3" : @"ExtraExpanded Heavy G3", + @".SFNS-ExtraExpandedHeavyG4" : @"ExtraExpanded Heavy G4", + @".SFNS-ExtraExpandedLight" : @"ExtraExpanded Light", + @".SFNS-ExtraExpandedLightG1" : @"ExtraExpanded Light G1", + @".SFNS-ExtraExpandedLightG2" : @"ExtraExpanded Light G2", + @".SFNS-ExtraExpandedLightG3" : @"ExtraExpanded Light G3", + @".SFNS-ExtraExpandedLightG4" : @"ExtraExpanded Light G4", + @".SFNS-ExtraExpandedMedium" : @"ExtraExpanded Medium", + @".SFNS-ExtraExpandedMediumG1" : @"ExtraExpanded Medium G1", + @".SFNS-ExtraExpandedMediumG2" : @"ExtraExpanded Medium G2", + @".SFNS-ExtraExpandedMediumG3" : @"ExtraExpanded Medium G3", + @".SFNS-ExtraExpandedMediumG4" : @"ExtraExpanded Medium G4", + @".SFNS-ExtraExpandedRegular" : @"ExtraExpanded Regular", + @".SFNS-ExtraExpandedRegularG1" : @"ExtraExpanded Regular G1", + @".SFNS-ExtraExpandedRegularG2" : @"ExtraExpanded Regular G2", + @".SFNS-ExtraExpandedRegularG3" : @"ExtraExpanded Regular G3", + @".SFNS-ExtraExpandedRegularG4" : @"ExtraExpanded Regular G4", + @".SFNS-ExtraExpandedSemibold" : @"ExtraExpanded Semibold", + @".SFNS-ExtraExpandedSemiboldG1" : @"ExtraExpanded Semibold G1", + @".SFNS-ExtraExpandedSemiboldG2" : @"ExtraExpanded Semibold G2", + @".SFNS-ExtraExpandedSemiboldG3" : @"ExtraExpanded Semibold G3", + @".SFNS-ExtraExpandedSemiboldG4" : @"ExtraExpanded Semibold G4", + @".SFNS-ExtraExpandedThin" : @"ExtraExpanded Thin", + @".SFNS-ExtraExpandedThinG1" : @"ExtraExpanded Thin G1", + @".SFNS-ExtraExpandedThinG2" : @"ExtraExpanded Thin G2", + @".SFNS-ExtraExpandedThinG3" : @"ExtraExpanded Thin G3", + @".SFNS-ExtraExpandedThinG4" : @"ExtraExpanded Thin G4", + @".SFNS-ExtraExpandedUltralight" : @"ExtraExpanded Ultralight", + @".SFNS-ExtraExpandedUltralightG1" : @"ExtraExpanded Ultralight G1", + @".SFNS-ExtraExpandedUltralightG2" : @"ExtraExpanded Ultralight G2", + @".SFNS-ExtraExpandedUltralightG3" : @"ExtraExpanded Ultralight G3", + @".SFNS-ExtraExpandedUltralightG4" : @"ExtraExpanded Ultralight G4", + @".SFNS-SemiCondensedBlack" : @"SemiCondensed Black", + @".SFNS-SemiCondensedBold" : @"SemiCondensed Bold", + @".SFNS-SemiCondensedBoldG1" : @"SemiCondensed Bold G1", + @".SFNS-SemiCondensedBoldG2" : @"SemiCondensed Bold G2", + @".SFNS-SemiCondensedBoldG3" : @"SemiCondensed Bold G3", + @".SFNS-SemiCondensedBoldG4" : @"SemiCondensed Bold G4", + @".SFNS-SemiCondensedHeavy" : @"SemiCondensed Heavy", + @".SFNS-SemiCondensedHeavyG1" : @"SemiCondensed Heavy G1", + @".SFNS-SemiCondensedHeavyG2" : @"SemiCondensed Heavy G2", + @".SFNS-SemiCondensedHeavyG3" : @"SemiCondensed Heavy G3", + @".SFNS-SemiCondensedHeavyG4" : @"SemiCondensed Heavy G4", + @".SFNS-SemiCondensedLight" : @"SemiCondensed Light", + @".SFNS-SemiCondensedLightG1" : @"SemiCondensed Light G1", + @".SFNS-SemiCondensedLightG2" : @"SemiCondensed Light G2", + @".SFNS-SemiCondensedLightG3" : @"SemiCondensed Light G3", + @".SFNS-SemiCondensedLightG4" : @"SemiCondensed Light G4", + @".SFNS-SemiCondensedMedium" : @"SemiCondensed Medium", + @".SFNS-SemiCondensedMediumG1" : @"SemiCondensed Medium G1", + @".SFNS-SemiCondensedMediumG2" : @"SemiCondensed Medium G2", + @".SFNS-SemiCondensedMediumG3" : @"SemiCondensed Medium G3", + @".SFNS-SemiCondensedMediumG4" : @"SemiCondensed Medium G4", + @".SFNS-SemiCondensedRegular" : @"SemiCondensed Regular", + @".SFNS-SemiCondensedRegularG1" : @"SemiCondensed Regular G1", + @".SFNS-SemiCondensedRegularG2" : @"SemiCondensed Regular G2", + @".SFNS-SemiCondensedRegularG3" : @"SemiCondensed Regular G3", + @".SFNS-SemiCondensedRegularG4" : @"SemiCondensed Regular G4", + @".SFNS-SemiCondensedSemibold" : @"SemiCondensed Semibold", + @".SFNS-SemiCondensedSemiboldG1" : @"SemiCondensed Semibold G1", + @".SFNS-SemiCondensedSemiboldG2" : @"SemiCondensed Semibold G2", + @".SFNS-SemiCondensedSemiboldG3" : @"SemiCondensed Semibold G3", + @".SFNS-SemiCondensedSemiboldG4" : @"SemiCondensed Semibold G4", + @".SFNS-SemiCondensedThin" : @"SemiCondensed Thin", + @".SFNS-SemiCondensedThinG1" : @"SemiCondensed Thin G1", + @".SFNS-SemiCondensedThinG2" : @"SemiCondensed Thin G2", + @".SFNS-SemiCondensedThinG3" : @"SemiCondensed Thin G3", + @".SFNS-SemiCondensedThinG4" : @"SemiCondensed Thin G4", + @".SFNS-SemiCondensedUltralight" : @"SemiCondensed Ultralight", + @".SFNS-SemiCondensedUltralightG1" : @"SemiCondensed Ultralight G1", + @".SFNS-SemiCondensedUltralightG2" : @"SemiCondensed Ultralight G2", + @".SFNS-SemiCondensedUltralightG3" : @"SemiCondensed Ultralight G3", + @".SFNS-SemiCondensedUltralightG4" : @"SemiCondensed Ultralight G4", + @".SFNS-SemiExpandedBlack" : @"SemiExpanded Black", + @".SFNS-SemiExpandedBold" : @"SemiExpanded Bold", + @".SFNS-SemiExpandedBoldG1" : @"SemiExpanded Bold G1", + @".SFNS-SemiExpandedBoldG2" : @"SemiExpanded Bold G2", + @".SFNS-SemiExpandedBoldG3" : @"SemiExpanded Bold G3", + @".SFNS-SemiExpandedBoldG4" : @"SemiExpanded Bold G4", + @".SFNS-SemiExpandedHeavy" : @"SemiExpanded Heavy", + @".SFNS-SemiExpandedHeavyG1" : @"SemiExpanded Heavy G1", + @".SFNS-SemiExpandedHeavyG2" : @"SemiExpanded Heavy G2", + @".SFNS-SemiExpandedHeavyG3" : @"SemiExpanded Heavy G3", + @".SFNS-SemiExpandedHeavyG4" : @"SemiExpanded Heavy G4", + @".SFNS-SemiExpandedLight" : @"SemiExpanded Light", + @".SFNS-SemiExpandedLightG1" : @"SemiExpanded Light G1", + @".SFNS-SemiExpandedLightG2" : @"SemiExpanded Light G2", + @".SFNS-SemiExpandedLightG3" : @"SemiExpanded Light G3", + @".SFNS-SemiExpandedLightG4" : @"SemiExpanded Light G4", + @".SFNS-SemiExpandedMedium" : @"SemiExpanded Medium", + @".SFNS-SemiExpandedMediumG1" : @"SemiExpanded Medium G1", + @".SFNS-SemiExpandedMediumG2" : @"SemiExpanded Medium G2", + @".SFNS-SemiExpandedMediumG3" : @"SemiExpanded Medium G3", + @".SFNS-SemiExpandedMediumG4" : @"SemiExpanded Medium G4", + @".SFNS-SemiExpandedRegular" : @"SemiExpanded Regular", + @".SFNS-SemiExpandedRegularG1" : @"SemiExpanded Regular G1", + @".SFNS-SemiExpandedRegularG2" : @"SemiExpanded Regular G2", + @".SFNS-SemiExpandedRegularG3" : @"SemiExpanded Regular G3", + @".SFNS-SemiExpandedRegularG4" : @"SemiExpanded Regular G4", + @".SFNS-SemiExpandedSemibold" : @"SemiExpanded Semibold", + @".SFNS-SemiExpandedSemiboldG1" : @"SemiExpanded Semibold G1", + @".SFNS-SemiExpandedSemiboldG2" : @"SemiExpanded Semibold G2", + @".SFNS-SemiExpandedSemiboldG3" : @"SemiExpanded Semibold G3", + @".SFNS-SemiExpandedSemiboldG4" : @"SemiExpanded Semibold G4", + @".SFNS-SemiExpandedThin" : @"SemiExpanded Thin", + @".SFNS-SemiExpandedThinG1" : @"SemiExpanded Thin G1", + @".SFNS-SemiExpandedThinG2" : @"SemiExpanded Thin G2", + @".SFNS-SemiExpandedThinG3" : @"SemiExpanded Thin G3", + @".SFNS-SemiExpandedThinG4" : @"SemiExpanded Thin G4", + @".SFNS-SemiExpandedUltralight" : @"SemiExpanded Ultralight", + @".SFNS-SemiExpandedUltralightG1" : @"SemiExpanded Ultralight G1", + @".SFNS-SemiExpandedUltralightG2" : @"SemiExpanded Ultralight G2", + @".SFNS-SemiExpandedUltralightG3" : @"SemiExpanded Ultralight G3", + @".SFNS-SemiExpandedUltralightG4" : @"SemiExpanded Ultralight G4", + @".SFNS-UltraCompressedBlack" : @"UltraCompressed Black", + @".SFNS-UltraCompressedBold" : @"UltraCompressed Bold", + @".SFNS-UltraCompressedBoldG1" : @"UltraCompressed Bold G1", + @".SFNS-UltraCompressedBoldG2" : @"UltraCompressed Bold G2", + @".SFNS-UltraCompressedBoldG3" : @"UltraCompressed Bold G3", + @".SFNS-UltraCompressedBoldG4" : @"UltraCompressed Bold G4", + @".SFNS-UltraCompressedHeavy" : @"UltraCompressed Heavy", + @".SFNS-UltraCompressedHeavyG1" : @"UltraCompressed Heavy G1", + @".SFNS-UltraCompressedHeavyG2" : @"UltraCompressed Heavy G2", + @".SFNS-UltraCompressedHeavyG3" : @"UltraCompressed Heavy G3", + @".SFNS-UltraCompressedHeavyG4" : @"UltraCompressed Heavy G4", + @".SFNS-UltraCompressedLight" : @"UltraCompressed Light", + @".SFNS-UltraCompressedLightG1" : @"UltraCompressed Light G1", + @".SFNS-UltraCompressedLightG2" : @"UltraCompressed Light G2", + @".SFNS-UltraCompressedLightG3" : @"UltraCompressed Light G3", + @".SFNS-UltraCompressedLightG4" : @"UltraCompressed Light G4", + @".SFNS-UltraCompressedMedium" : @"UltraCompressed Medium", + @".SFNS-UltraCompressedMediumG1" : @"UltraCompressed Medium G1", + @".SFNS-UltraCompressedMediumG2" : @"UltraCompressed Medium G2", + @".SFNS-UltraCompressedMediumG3" : @"UltraCompressed Medium G3", + @".SFNS-UltraCompressedMediumG4" : @"UltraCompressed Medium G4", + @".SFNS-UltraCompressedRegular" : @"UltraCompressed Regular", + @".SFNS-UltraCompressedRegularG1" : @"UltraCompressed Regular G1", + @".SFNS-UltraCompressedRegularG2" : @"UltraCompressed Regular G2", + @".SFNS-UltraCompressedRegularG3" : @"UltraCompressed Regular G3", + @".SFNS-UltraCompressedRegularG4" : @"UltraCompressed Regular G4", + @".SFNS-UltraCompressedSemibold" : @"UltraCompressed Semibold", + @".SFNS-UltraCompressedSemiboldG1" : @"UltraCompressed Semibold G1", + @".SFNS-UltraCompressedSemiboldG2" : @"UltraCompressed Semibold G2", + @".SFNS-UltraCompressedSemiboldG3" : @"UltraCompressed Semibold G3", + @".SFNS-UltraCompressedSemiboldG4" : @"UltraCompressed Semibold G4", + @".SFNS-UltraCompressedThin" : @"UltraCompressed Thin", + @".SFNS-UltraCompressedThinG1" : @"UltraCompressed Thin G1", + @".SFNS-UltraCompressedThinG2" : @"UltraCompressed Thin G2", + @".SFNS-UltraCompressedThinG3" : @"UltraCompressed Thin G3", + @".SFNS-UltraCompressedThinG4" : @"UltraCompressed Thin G4", + @".SFNS-UltraCompressedUltralight" : @"UltraCompressed Ultralight", + @".SFNS-UltraCompressedUltralightG1" : @"UltraCompressed Ultralight G1", + @".SFNS-UltraCompressedUltralightG2" : @"UltraCompressed Ultralight G2", + @".SFNS-UltraCompressedUltralightG3" : @"UltraCompressed Ultralight G3", + @".SFNS-UltraCompressedUltralightG4" : @"UltraCompressed Ultralight G4", + @".Keyboard" : @"Regular", + @"AlBayan" : @"Plain", + @"AlBayan-Bold" : @"Bold", + @"AlNile" : @"Regular", + @"AlNile-Bold" : @"Bold", + @"AlTarikh" : @"Regular", + @"AmericanTypewriter" : @"Regular", + @"AmericanTypewriter-Bold" : @"Bold", + @"AmericanTypewriter-Condensed" : @"Condensed", + @"AmericanTypewriter-CondensedBold" : @"Condensed Bold", + @"AmericanTypewriter-CondensedLight" : @"Condensed Light", + @"AmericanTypewriter-Light" : @"Light", + @"AmericanTypewriter-Semibold" : @"Semibold", + @"AndaleMono" : @"Regular", + @"Apple-Chancery" : @"Chancery", + @"AppleBraille" : @"Regular", + @"AppleBraille-Outline6Dot" : @"Outline 6 Dot", + @"AppleBraille-Outline8Dot" : @"Outline 8 Dot", + @"AppleBraille-Pinpoint6Dot" : @"Pinpoint 6 Dot", + @"AppleBraille-Pinpoint8Dot" : @"Pinpoint 8 Dot", + @"AppleColorEmoji" : @"Regular", + @"AppleGothic" : @"Regular", + @"AppleMyungjo" : @"Regular", + @"AppleSDGothicNeo-Bold" : @"Bold", + @"AppleSDGothicNeo-ExtraBold" : @"ExtraBold", + @"AppleSDGothicNeo-Heavy" : @"Heavy", + @"AppleSDGothicNeo-Light" : @"Light", + @"AppleSDGothicNeo-Medium" : @"Medium", + @"AppleSDGothicNeo-Regular" : @"Regular", + @"AppleSDGothicNeo-SemiBold" : @"SemiBold", + @"AppleSDGothicNeo-Thin" : @"Thin", + @"AppleSDGothicNeo-UltraLight" : @"UltraLight", + @"AppleSymbols" : @"Regular", + @"AquaKana" : @"Regular", + @"AquaKana-Bold" : @"Bold", + @"Arial-Black" : @"Regular", + @"Arial-BoldItalicMT" : @"Bold Italic", + @"Arial-BoldMT" : @"Bold", + @"Arial-ItalicMT" : @"Italic", + @"ArialHebrew" : @"Regular", + @"ArialHebrew-Bold" : @"Bold", + @"ArialHebrew-Light" : @"Light", + @"ArialHebrewScholar" : @"Regular", + @"ArialHebrewScholar-Bold" : @"Bold", + @"ArialHebrewScholar-Light" : @"Light", + @"ArialMT" : @"Regular", + @"ArialNarrow" : @"Regular", + @"ArialNarrow-Bold" : @"Bold", + @"ArialNarrow-BoldItalic" : @"Bold Italic", + @"ArialNarrow-Italic" : @"Italic", + @"ArialRoundedMTBold" : @"Regular", + @"ArialUnicodeMS" : @"Regular", + @"Athelas-Bold" : @"Bold", + @"Athelas-BoldItalic" : @"Bold Italic", + @"Athelas-Italic" : @"Italic", + @"Athelas-Regular" : @"Regular", + @"Avenir-Black" : @"Black", + @"Avenir-BlackOblique" : @"Black Oblique", + @"Avenir-Book" : @"Book", + @"Avenir-BookOblique" : @"Book Oblique", + @"Avenir-Heavy" : @"Heavy", + @"Avenir-HeavyOblique" : @"Heavy Oblique", + @"Avenir-Light" : @"Light", + @"Avenir-LightOblique" : @"Light Oblique", + @"Avenir-Medium" : @"Medium", + @"Avenir-MediumOblique" : @"Medium Oblique", + @"Avenir-Oblique" : @"Oblique", + @"Avenir-Roman" : @"Roman", + @"AvenirNext-Bold" : @"Bold", + @"AvenirNext-BoldItalic" : @"Bold Italic", + @"AvenirNext-DemiBold" : @"Demi Bold", + @"AvenirNext-DemiBoldItalic" : @"Demi Bold Italic", + @"AvenirNext-Heavy" : @"Heavy", + @"AvenirNext-HeavyItalic" : @"Heavy Italic", + @"AvenirNext-Italic" : @"Italic", + @"AvenirNext-Medium" : @"Medium", + @"AvenirNext-MediumItalic" : @"Medium Italic", + @"AvenirNext-Regular" : @"Regular", + @"AvenirNext-UltraLight" : @"Ultra Light", + @"AvenirNext-UltraLightItalic" : @"Ultra Light Italic", + @"AvenirNextCondensed-Bold" : @"Bold", + @"AvenirNextCondensed-BoldItalic" : @"Bold Italic", + @"AvenirNextCondensed-DemiBold" : @"Demi Bold", + @"AvenirNextCondensed-DemiBoldItalic" : @"Demi Bold Italic", + @"AvenirNextCondensed-Heavy" : @"Heavy", + @"AvenirNextCondensed-HeavyItalic" : @"Heavy Italic", + @"AvenirNextCondensed-Italic" : @"Italic", + @"AvenirNextCondensed-Medium" : @"Medium", + @"AvenirNextCondensed-MediumItalic" : @"Medium Italic", + @"AvenirNextCondensed-Regular" : @"Regular", + @"AvenirNextCondensed-UltraLight" : @"Ultra Light", + @"AvenirNextCondensed-UltraLightItalic" : @"Ultra Light Italic", + @"Ayuthaya" : @"Regular", + @"Baghdad" : @"Regular", + @"BanglaMN" : @"Regular", + @"BanglaMN-Bold" : @"Bold", + @"BanglaSangamMN" : @"Regular", + @"BanglaSangamMN-Bold" : @"Bold", + @"Baskerville" : @"Regular", + @"Baskerville-Bold" : @"Bold", + @"Baskerville-BoldItalic" : @"Bold Italic", + @"Baskerville-Italic" : @"Italic", + @"Baskerville-SemiBold" : @"SemiBold", + @"Baskerville-SemiBoldItalic" : @"SemiBold Italic", + @"Beirut" : @"Regular", + @"BigCaslon-Medium" : @"Medium", + @"BodoniOrnamentsITCTT" : @"Regular", + @"BodoniSvtyTwoITCTT-Bold" : @"Bold", + @"BodoniSvtyTwoITCTT-Book" : @"Book", + @"BodoniSvtyTwoITCTT-BookIta" : @"Book Italic", + @"BodoniSvtyTwoOSITCTT-Bold" : @"Bold", + @"BodoniSvtyTwoOSITCTT-Book" : @"Book", + @"BodoniSvtyTwoOSITCTT-BookIt" : @"Book Italic", + @"BodoniSvtyTwoSCITCTT-Book" : @"Book", + @"BradleyHandITCTT-Bold" : @"Bold", + @"BrushScriptMT" : @"Italic", + @"Chalkboard" : @"Regular", + @"Chalkboard-Bold" : @"Bold", + @"ChalkboardSE-Bold" : @"Bold", + @"ChalkboardSE-Light" : @"Light", + @"ChalkboardSE-Regular" : @"Regular", + @"Chalkduster" : @"Regular", + @"Charter-Black" : @"Black", + @"Charter-BlackItalic" : @"Black Italic", + @"Charter-Bold" : @"Bold", + @"Charter-BoldItalic" : @"Bold Italic", + @"Charter-Italic" : @"Italic", + @"Charter-Roman" : @"Roman", + @"Cochin" : @"Regular", + @"Cochin-Bold" : @"Bold", + @"Cochin-BoldItalic" : @"Bold Italic", + @"Cochin-Italic" : @"Italic", + @"ComicSansMS" : @"Regular", + @"ComicSansMS-Bold" : @"Bold", + @"Copperplate" : @"Regular", + @"Copperplate-Bold" : @"Bold", + @"Copperplate-Light" : @"Light", + @"CorsivaHebrew" : @"Regular", + @"CorsivaHebrew-Bold" : @"Bold", + @"Courier" : @"Regular", + @"Courier-Bold" : @"Bold", + @"Courier-BoldOblique" : @"Bold Oblique", + @"Courier-Oblique" : @"Oblique", + @"CourierNewPS-BoldItalicMT" : @"Bold Italic", + @"CourierNewPS-BoldMT" : @"Bold", + @"CourierNewPS-ItalicMT" : @"Italic", + @"CourierNewPSMT" : @"Regular", + @"DFKaiShu-SB-Estd-BF" : @"Regular", + @"DFWaWaSC-W5" : @"Regular", + @"DFWaWaTC-W5" : @"Regular", + @"DINAlternate-Bold" : @"Bold", + @"DINCondensed-Bold" : @"Bold", + @"Damascus" : @"Regular", + @"DamascusBold" : @"Bold", + @"DamascusLight" : @"Light", + @"DamascusMedium" : @"Medium", + @"DamascusSemiBold" : @"Semi Bold", + @"DecoTypeNaskh" : @"Regular", + @"DevanagariMT" : @"Regular", + @"DevanagariMT-Bold" : @"Bold", + @"DevanagariSangamMN" : @"Regular", + @"DevanagariSangamMN-Bold" : @"Bold", + @"Didot" : @"Regular", + @"Didot-Bold" : @"Bold", + @"Didot-Italic" : @"Italic", + @"DiwanKufi" : @"Regular", + @"DiwanMishafi" : @"Regular", + @"DiwanMishafiGold" : @"Regular", + @"DiwanThuluth" : @"Regular", + @"EuphemiaUCAS" : @"Regular", + @"EuphemiaUCAS-Bold" : @"Bold", + @"EuphemiaUCAS-Italic" : @"Italic", + @"FZLTTHB--B51-0" : @"Heavy", + @"FZLTTHK--GBK1-0" : @"Heavy", + @"FZLTXHB--B51-0" : @"Extralight", + @"FZLTXHK--GBK1-0" : @"Extralight", + @"FZLTZHB--B51-0" : @"Demibold", + @"FZLTZHK--GBK1-0" : @"Demibold", + @"Farah" : @"Regular", + @"Farisi" : @"Regular", + @"Futura-Bold" : @"Bold", + @"Futura-CondensedExtraBold" : @"Condensed ExtraBold", + @"Futura-CondensedMedium" : @"Condensed Medium", + @"Futura-Medium" : @"Medium", + @"Futura-MediumItalic" : @"Medium Italic", + @"GB18030Bitmap" : @"Regular", + @"Galvji" : @"Regular", + @"Galvji-Bold" : @"Bold", + @"Galvji-BoldOblique" : @"Bold Oblique", + @"Galvji-Oblique" : @"Oblique", + @"GeezaPro" : @"Regular", + @"GeezaPro-Bold" : @"Bold", + @"Geneva" : @"Regular", + @"Georgia" : @"Regular", + @"Georgia-Bold" : @"Bold", + @"Georgia-BoldItalic" : @"Bold Italic", + @"Georgia-Italic" : @"Italic", + @"GillSans" : @"Regular", + @"GillSans-Bold" : @"Bold", + @"GillSans-BoldItalic" : @"Bold Italic", + @"GillSans-Italic" : @"Italic", + @"GillSans-Light" : @"Light", + @"GillSans-LightItalic" : @"Light Italic", + @"GillSans-SemiBold" : @"SemiBold", + @"GillSans-SemiBoldItalic" : @"SemiBold Italic", + @"GillSans-UltraBold" : @"UltraBold", + @"GujaratiMT" : @"Regular", + @"GujaratiMT-Bold" : @"Bold", + @"GujaratiSangamMN" : @"Regular", + @"GujaratiSangamMN-Bold" : @"Bold", + @"GurmukhiMN" : @"Regular", + @"GurmukhiMN-Bold" : @"Bold", + @"GurmukhiSangamMN" : @"Regular", + @"GurmukhiSangamMN-Bold" : @"Bold", + @"HannotateSC-W5" : @"Regular", + @"HannotateSC-W7" : @"Bold", + @"HannotateTC-W5" : @"Regular", + @"HannotateTC-W7" : @"Bold", + @"HanziPenSC-W3" : @"Regular", + @"HanziPenSC-W5" : @"Bold", + @"HanziPenTC-W3" : @"Regular", + @"HanziPenTC-W5" : @"Bold", + @"Helvetica" : @"Regular", + @"Helvetica-Bold" : @"Bold", + @"Helvetica-BoldOblique" : @"Bold Oblique", + @"Helvetica-Light" : @"Light", + @"Helvetica-LightOblique" : @"Light Oblique", + @"Helvetica-Oblique" : @"Oblique", + @"HelveticaLTMM" : @"Regular", + @"HelveticaNeue" : @"Regular", + @"HelveticaNeue-Bold" : @"Bold", + @"HelveticaNeue-BoldItalic" : @"Bold Italic", + @"HelveticaNeue-CondensedBlack" : @"Condensed Black", + @"HelveticaNeue-CondensedBold" : @"Condensed Bold", + @"HelveticaNeue-Italic" : @"Italic", + @"HelveticaNeue-Light" : @"Light", + @"HelveticaNeue-LightItalic" : @"Light Italic", + @"HelveticaNeue-Medium" : @"Medium", + @"HelveticaNeue-MediumItalic" : @"Medium Italic", + @"HelveticaNeue-Thin" : @"Thin", + @"HelveticaNeue-ThinItalic" : @"Thin Italic", + @"HelveticaNeue-UltraLight" : @"UltraLight", + @"HelveticaNeue-UltraLightItalic" : @"UltraLight Italic", + @"Herculanum" : @"Regular", + @"HiraKakuPro-W3" : @"W3", + @"HiraKakuPro-W6" : @"W6", + @"HiraKakuProN-W3" : @"W3", + @"HiraKakuProN-W6" : @"W6", + @"HiraKakuStd-W8" : @"W8", + @"HiraKakuStdN-W8" : @"W8", + @"HiraMaruPro-W4" : @"W4", + @"HiraMaruProN-W4" : @"W4", + @"HiraMinPro-W3" : @"W3", + @"HiraMinPro-W6" : @"W6", + @"HiraMinProN-W3" : @"W3", + @"HiraMinProN-W6" : @"W6", + @"HiraginoSans-W0" : @"W0", + @"HiraginoSans-W1" : @"W1", + @"HiraginoSans-W2" : @"W2", + @"HiraginoSans-W3" : @"W3", + @"HiraginoSans-W4" : @"W4", + @"HiraginoSans-W5" : @"W5", + @"HiraginoSans-W6" : @"W6", + @"HiraginoSans-W7" : @"W7", + @"HiraginoSans-W8" : @"W8", + @"HiraginoSans-W9" : @"W9", + @"HiraginoSansCNS-W3" : @"W3", + @"HiraginoSansCNS-W6" : @"W6", + @"HiraginoSansGB-W3" : @"W3", + @"HiraginoSansGB-W6" : @"W6", + @"HoeflerText-Black" : @"Black", + @"HoeflerText-BlackItalic" : @"Black Italic", + @"HoeflerText-Italic" : @"Italic", + @"HoeflerText-Ornaments" : @"Ornaments", + @"HoeflerText-Regular" : @"Regular", + @"ITFDevanagari-Bold" : @"Bold", + @"ITFDevanagari-Book" : @"Book", + @"ITFDevanagari-Demi" : @"Demi", + @"ITFDevanagari-Light" : @"Light", + @"ITFDevanagari-Medium" : @"Medium", + @"ITFDevanagariMarathi-Bold" : @"Bold", + @"ITFDevanagariMarathi-Book" : @"Book", + @"ITFDevanagariMarathi-Demi" : @"Demi", + @"ITFDevanagariMarathi-Light" : @"Light", + @"ITFDevanagariMarathi-Medium" : @"Medium", + @"Impact" : @"Regular", + @"InaiMathi" : @"Regular", + @"InaiMathi-Bold" : @"Bold", + @"IowanOldStyle-Black" : @"Black", + @"IowanOldStyle-BlackItalic" : @"Black Italic", + @"IowanOldStyle-Bold" : @"Bold", + @"IowanOldStyle-BoldItalic" : @"Bold Italic", + @"IowanOldStyle-Italic" : @"Italic", + @"IowanOldStyle-Roman" : @"Roman", + @"IowanOldStyle-Titling" : @"Titling", + @"JCHEadA" : @"Regular", + @"JCfg" : @"Regular", + @"JCkg" : @"Regular", + @"JCsmPC" : @"Regular", + @"Kailasa" : @"Regular", + @"Kailasa-Bold" : @"Bold", + @"KannadaMN" : @"Regular", + @"KannadaMN-Bold" : @"Bold", + @"KannadaSangamMN" : @"Regular", + @"KannadaSangamMN-Bold" : @"Bold", + @"Kefa-Bold" : @"Bold", + @"Kefa-Regular" : @"Regular", + @"KhmerMN" : @"Regular", + @"KhmerMN-Bold" : @"Bold", + @"KhmerSangamMN" : @"Regular", + @"Klee-Demibold" : @"Demibold", + @"Klee-Medium" : @"Medium", + @"KohinoorBangla-Bold" : @"Bold", + @"KohinoorBangla-Light" : @"Light", + @"KohinoorBangla-Medium" : @"Medium", + @"KohinoorBangla-Regular" : @"Regular", + @"KohinoorBangla-Semibold" : @"Semibold", + @"KohinoorDevanagari-Bold" : @"Bold", + @"KohinoorDevanagari-Light" : @"Light", + @"KohinoorDevanagari-Medium" : @"Medium", + @"KohinoorDevanagari-Regular" : @"Regular", + @"KohinoorDevanagari-Semibold" : @"Semibold", + @"KohinoorGujarati-Bold" : @"Bold", + @"KohinoorGujarati-Light" : @"Light", + @"KohinoorGujarati-Medium" : @"Medium", + @"KohinoorGujarati-Regular" : @"Regular", + @"KohinoorGujarati-Semibold" : @"Semibold", + @"KohinoorTelugu-Bold" : @"Bold", + @"KohinoorTelugu-Light" : @"Light", + @"KohinoorTelugu-Medium" : @"Medium", + @"KohinoorTelugu-Regular" : @"Regular", + @"KohinoorTelugu-Semibold" : @"Semibold", + @"Kokonor" : @"Regular", + @"Krungthep" : @"Regular", + @"KufiStandardGK" : @"Regular", + @"LaoMN" : @"Regular", + @"LaoMN-Bold" : @"Bold", + @"LaoSangamMN" : @"Regular", + @"LastResort" : @"Regular", + @"LiGothicMed" : @"Medium", + @"LiHeiPro" : @"Medium", + @"LiSongPro" : @"Light", + @"LiSungLight" : @"Light", + @"LucidaGrande" : @"Regular", + @"LucidaGrande-Bold" : @"Bold", + @"Luminari-Regular" : @"Regular", + @"MLingWaiMedium-SC" : @"Medium", + @"MLingWaiMedium-TC" : @"Medium", + @"MalayalamMN" : @"Regular", + @"MalayalamMN-Bold" : @"Bold", + @"MalayalamSangamMN" : @"Regular", + @"MalayalamSangamMN-Bold" : @"Bold", + @"Marion-Bold" : @"Bold", + @"Marion-Italic" : @"Italic", + @"Marion-Regular" : @"Regular", + @"MarkerFelt-Thin" : @"Thin", + @"MarkerFelt-Wide" : @"Wide", + @"Menlo-Bold" : @"Bold", + @"Menlo-BoldItalic" : @"Bold Italic", + @"Menlo-Italic" : @"Italic", + @"Menlo-Regular" : @"Regular", + @"MicrosoftSansSerif" : @"Regular", + @"Monaco" : @"Regular", + @"MonotypeGurmukhi" : @"Regular", + @"Mshtakan" : @"Regular", + @"MshtakanBold" : @"Bold", + @"MshtakanBoldOblique" : @"BoldOblique", + @"MshtakanOblique" : @"Oblique", + @"MuktaMahee-Bold" : @"Bold", + @"MuktaMahee-ExtraBold" : @"ExtraBold", + @"MuktaMahee-ExtraLight" : @"ExtraLight", + @"MuktaMahee-Light" : @"Light", + @"MuktaMahee-Medium" : @"Medium", + @"MuktaMahee-Regular" : @"Regular", + @"MuktaMahee-SemiBold" : @"SemiBold", + @"Muna" : @"Regular", + @"MunaBlack" : @"Black", + @"MunaBold" : @"Bold", + @"MyanmarMN" : @"Regular", + @"MyanmarMN-Bold" : @"Bold", + @"MyanmarSangamMN" : @"Regular", + @"MyanmarSangamMN-Bold" : @"Bold", + @"Nadeem" : @"Regular", + @"NanumBrush" : @"Regular", + @"NanumGothic" : @"Regular", + @"NanumGothicBold" : @"Bold", + @"NanumGothicExtraBold" : @"ExtraBold", + @"NanumMyeongjo" : @"Regular", + @"NanumMyeongjoBold" : @"Bold", + @"NanumMyeongjoExtraBold" : @"ExtraBold", + @"NanumPen" : @"Regular", + @"NewPeninimMT" : @"Regular", + @"NewPeninimMT-Bold" : @"Bold", + @"NewPeninimMT-BoldInclined" : @"Bold Inclined", + @"NewPeninimMT-Inclined" : @"Inclined", + @"Noteworthy-Bold" : @"Bold", + @"Noteworthy-Light" : @"Light", + @"NotoNastaliqUrdu" : @"Regular", + @"NotoNastaliqUrdu-Bold" : @"Bold", + @"NotoSansArmenian-Black" : @"Black", + @"NotoSansArmenian-Bold" : @"Bold", + @"NotoSansArmenian-ExtraBold" : @"ExtraBold", + @"NotoSansArmenian-ExtraLight" : @"ExtraLight", + @"NotoSansArmenian-Light" : @"Light", + @"NotoSansArmenian-Medium" : @"Medium", + @"NotoSansArmenian-Regular" : @"Regular", + @"NotoSansArmenian-SemiBold" : @"SemiBold", + @"NotoSansArmenian-Thin" : @"Thin", + @"NotoSansAvestan-Regular" : @"Regular", + @"NotoSansBamum-Regular" : @"Regular", + @"NotoSansBatak-Regular" : @"Regular", + @"NotoSansBrahmi-Regular" : @"Regular", + @"NotoSansBuginese-Regular" : @"Regular", + @"NotoSansBuhid-Regular" : @"Regular", + @"NotoSansCarian-Regular" : @"Regular", + @"NotoSansChakma-Regular" : @"Regular", + @"NotoSansCham-Regular" : @"Regular", + @"NotoSansCoptic-Regular" : @"Regular", + @"NotoSansCuneiform-Regular" : @"Regular", + @"NotoSansCypriot-Regular" : @"Regular", + @"NotoSansEgyptianHieroglyphs-Regular" : @"Regular", + @"NotoSansGlagolitic-Regular" : @"Regular", + @"NotoSansGothic-Regular" : @"Regular", + @"NotoSansHanunoo-Regular" : @"Regular", + @"NotoSansImperialAramaic-Regular" : @"Regular", + @"NotoSansInscriptionalPahlavi-Regular" : @"Regular", + @"NotoSansInscriptionalParthian-Regular" : @"Regular", + @"NotoSansJavanese-Regular" : @"Regular", + @"NotoSansKaithi-Regular" : @"Regular", + @"NotoSansKannada-Black" : @"Black", + @"NotoSansKannada-Bold" : @"Bold", + @"NotoSansKannada-ExtraBold" : @"ExtraBold", + @"NotoSansKannada-ExtraLight" : @"ExtraLight", + @"NotoSansKannada-Light" : @"Light", + @"NotoSansKannada-Medium" : @"Medium", + @"NotoSansKannada-Regular" : @"Regular", + @"NotoSansKannada-SemiBold" : @"SemiBold", + @"NotoSansKannada-Thin" : @"Thin", + @"NotoSansKayahLi-Regular" : @"Regular", + @"NotoSansKharoshthi-Regular" : @"Regular", + @"NotoSansLepcha-Regular" : @"Regular", + @"NotoSansLimbu-Regular" : @"Regular", + @"NotoSansLinearB-Regular" : @"Regular", + @"NotoSansLisu-Regular" : @"Regular", + @"NotoSansLycian-Regular" : @"Regular", + @"NotoSansLydian-Regular" : @"Regular", + @"NotoSansMandaic-Regular" : @"Regular", + @"NotoSansMeeteiMayek-Regular" : @"Regular", + @"NotoSansMongolian" : @"Regular", + @"NotoSansMyanmar-Black" : @"Black", + @"NotoSansMyanmar-Bold" : @"Bold", + @"NotoSansMyanmar-ExtraBold" : @"ExtraBold", + @"NotoSansMyanmar-ExtraLight" : @"ExtraLight", + @"NotoSansMyanmar-Light" : @"Light", + @"NotoSansMyanmar-Medium" : @"Medium", + @"NotoSansMyanmar-Regular" : @"Regular", + @"NotoSansMyanmar-SemiBold" : @"SemiBold", + @"NotoSansMyanmar-Thin" : @"Thin", + @"NotoSansNKo-Regular" : @"Regular", + @"NotoSansNewTaiLue-Regular" : @"Regular", + @"NotoSansOgham-Regular" : @"Regular", + @"NotoSansOlChiki-Regular" : @"Regular", + @"NotoSansOldItalic-Regular" : @"Regular", + @"NotoSansOldPersian-Regular" : @"Regular", + @"NotoSansOldSouthArabian-Regular" : @"Regular", + @"NotoSansOldTurkic-Regular" : @"Regular", + @"NotoSansOriya" : @"Regular", + @"NotoSansOriya-Bold" : @"Bold", + @"NotoSansOsmanya-Regular" : @"Regular", + @"NotoSansPhagsPa-Regular" : @"Regular", + @"NotoSansPhoenician-Regular" : @"Regular", + @"NotoSansRejang-Regular" : @"Regular", + @"NotoSansRunic-Regular" : @"Regular", + @"NotoSansSamaritan-Regular" : @"Regular", + @"NotoSansSaurashtra-Regular" : @"Regular", + @"NotoSansShavian-Regular" : @"Regular", + @"NotoSansSundanese-Regular" : @"Regular", + @"NotoSansSylotiNagri-Regular" : @"Regular", + @"NotoSansSyriac-Regular" : @"Regular", + @"NotoSansTagalog-Regular" : @"Regular", + @"NotoSansTagbanwa-Regular" : @"Regular", + @"NotoSansTaiLe-Regular" : @"Regular", + @"NotoSansTaiTham" : @"Regular", + @"NotoSansTaiViet-Regular" : @"Regular", + @"NotoSansThaana-Regular" : @"Regular", + @"NotoSansTifinagh-Regular" : @"Regular", + @"NotoSansUgaritic-Regular" : @"Regular", + @"NotoSansVai-Regular" : @"Regular", + @"NotoSansYi-Regular" : @"Regular", + @"NotoSansZawgyi-Black" : @"Black", + @"NotoSansZawgyi-Bold" : @"Bold", + @"NotoSansZawgyi-ExtraBold" : @"ExtraBold", + @"NotoSansZawgyi-ExtraLight" : @"ExtraLight", + @"NotoSansZawgyi-Light" : @"Light", + @"NotoSansZawgyi-Medium" : @"Medium", + @"NotoSansZawgyi-Regular" : @"Regular", + @"NotoSansZawgyi-SemiBold" : @"SemiBold", + @"NotoSansZawgyi-Thin" : @"Thin", + @"NotoSerifBalinese-Regular" : @"Regular", + @"NotoSerifMyanmar-Black" : @"Black", + @"NotoSerifMyanmar-Bold" : @"Bold", + @"NotoSerifMyanmar-ExtraBold" : @"ExtraBold", + @"NotoSerifMyanmar-ExtraLight" : @"ExtraLight", + @"NotoSerifMyanmar-Light" : @"Light", + @"NotoSerifMyanmar-Medium" : @"Medium", + @"NotoSerifMyanmar-Regular" : @"Regular", + @"NotoSerifMyanmar-SemiBold" : @"SemiBold", + @"NotoSerifMyanmar-Thin" : @"Thin", + @"Optima-Bold" : @"Bold", + @"Optima-BoldItalic" : @"Bold Italic", + @"Optima-ExtraBlack" : @"ExtraBlack", + @"Optima-Italic" : @"Italic", + @"Optima-Regular" : @"Regular", + @"OriyaMN" : @"Regular", + @"OriyaMN-Bold" : @"Bold", + @"OriyaSangamMN" : @"Regular", + @"OriyaSangamMN-Bold" : @"Bold", + @"Osaka" : @"Regular", + @"Osaka-Mono" : @"Regular-Mono", + @"PSLOrnanongPro-Bold" : @"Bold", + @"PSLOrnanongPro-BoldItalic" : @"Bold Italic", + @"PSLOrnanongPro-Demibold" : @"Demibold", + @"PSLOrnanongPro-DemiboldItalic" : @"Demibold Italic", + @"PSLOrnanongPro-Italic" : @"Italic", + @"PSLOrnanongPro-Light" : @"Light", + @"PSLOrnanongPro-LightItalic" : @"Light Italic", + @"PSLOrnanongPro-Regular" : @"Regular", + @"PTMono-Bold" : @"Bold", + @"PTMono-Regular" : @"Regular", + @"PTSans-Bold" : @"Bold", + @"PTSans-BoldItalic" : @"Bold Italic", + @"PTSans-Caption" : @"Regular", + @"PTSans-CaptionBold" : @"Bold", + @"PTSans-Italic" : @"Italic", + @"PTSans-Narrow" : @"Regular", + @"PTSans-NarrowBold" : @"Bold", + @"PTSans-Regular" : @"Regular", + @"PTSerif-Bold" : @"Bold", + @"PTSerif-BoldItalic" : @"Bold Italic", + @"PTSerif-Caption" : @"Regular", + @"PTSerif-CaptionItalic" : @"Italic", + @"PTSerif-Italic" : @"Italic", + @"PTSerif-Regular" : @"Regular", + @"Palatino-Bold" : @"Bold", + @"Palatino-BoldItalic" : @"Bold Italic", + @"Palatino-Italic" : @"Italic", + @"Palatino-Roman" : @"Regular", + @"Papyrus" : @"Regular", + @"Papyrus-Condensed" : @"Condensed", + @"Phosphate-Inline" : @"Inline", + @"Phosphate-Solid" : @"Solid", + @"PingFangHK-Light" : @"Light", + @"PingFangHK-Medium" : @"Medium", + @"PingFangHK-Regular" : @"Regular", + @"PingFangHK-Semibold" : @"Semibold", + @"PingFangHK-Thin" : @"Thin", + @"PingFangHK-Ultralight" : @"Ultralight", + @"PingFangSC-Light" : @"Light", + @"PingFangSC-Medium" : @"Medium", + @"PingFangSC-Regular" : @"Regular", + @"PingFangSC-Semibold" : @"Semibold", + @"PingFangSC-Thin" : @"Thin", + @"PingFangSC-Ultralight" : @"Ultralight", + @"PingFangTC-Light" : @"Light", + @"PingFangTC-Medium" : @"Medium", + @"PingFangTC-Regular" : @"Regular", + @"PingFangTC-Semibold" : @"Semibold", + @"PingFangTC-Thin" : @"Thin", + @"PingFangTC-Ultralight" : @"Ultralight", + @"PlantagenetCherokee" : @"Regular", + @"Raanana" : @"Regular", + @"RaananaBold" : @"Bold", + @"Rockwell-Bold" : @"Bold", + @"Rockwell-BoldItalic" : @"Bold Italic", + @"Rockwell-Italic" : @"Italic", + @"Rockwell-Regular" : @"Regular", + @"SFMono-Bold" : @"Bold", + @"SFMono-BoldItalic" : @"Bold Italic", + @"SFMono-Heavy" : @"Heavy", + @"SFMono-HeavyItalic" : @"Heavy Italic", + @"SFMono-Light" : @"Light", + @"SFMono-LightItalic" : @"Light Italic", + @"SFMono-Medium" : @"Medium", + @"SFMono-MediumItalic" : @"Medium Italic", + @"SFMono-Regular" : @"Regular", + @"SFMono-RegularItalic" : @"Regular Italic", + @"SFMono-Semibold" : @"Semibold", + @"SFMono-SemiboldItalic" : @"Semibold Italic", + @"SIL-Hei-Med-Jian" : @"Regular", + @"SIL-Kai-Reg-Jian" : @"Regular", + @"STBaoliSC-Regular" : @"Regular", + @"STBaoliTC-Regular" : @"Regular", + @"STFangsong" : @"Regular", + @"STHeiti" : @"Regular", + @"STHeitiSC-Light" : @"Light", + @"STHeitiSC-Medium" : @"Medium", + @"STHeitiTC-Light" : @"Light", + @"STHeitiTC-Medium" : @"Medium", + @"STIXGeneral-Bold" : @"Bold", + @"STIXGeneral-BoldItalic" : @"Bold Italic", + @"STIXGeneral-Italic" : @"Italic", + @"STIXGeneral-Regular" : @"Regular", + @"STIXIntegralsD-Bold" : @"Bold", + @"STIXIntegralsD-Regular" : @"Regular", + @"STIXIntegralsSm-Bold" : @"Bold", + @"STIXIntegralsSm-Regular" : @"Regular", + @"STIXIntegralsUp-Bold" : @"Bold", + @"STIXIntegralsUp-Regular" : @"Regular", + @"STIXIntegralsUpD-Bold" : @"Bold", + @"STIXIntegralsUpD-Regular" : @"Regular", + @"STIXIntegralsUpSm-Bold" : @"Bold", + @"STIXIntegralsUpSm-Regular" : @"Regular", + @"STIXNonUnicode-Bold" : @"Bold", + @"STIXNonUnicode-BoldItalic" : @"Bold Italic", + @"STIXNonUnicode-Italic" : @"Italic", + @"STIXNonUnicode-Regular" : @"Regular", + @"STIXSizeFiveSym-Regular" : @"Regular", + @"STIXSizeFourSym-Bold" : @"Bold", + @"STIXSizeFourSym-Regular" : @"Regular", + @"STIXSizeOneSym-Bold" : @"Bold", + @"STIXSizeOneSym-Regular" : @"Regular", + @"STIXSizeThreeSym-Bold" : @"Bold", + @"STIXSizeThreeSym-Regular" : @"Regular", + @"STIXSizeTwoSym-Bold" : @"Bold", + @"STIXSizeTwoSym-Regular" : @"Regular", + @"STIXVariants-Bold" : @"Bold", + @"STIXVariants-Regular" : @"Regular", + @"STKaiti" : @"Regular", + @"STKaitiSC-Black" : @"Black", + @"STKaitiSC-Bold" : @"Bold", + @"STKaitiSC-Regular" : @"Regular", + @"STKaitiTC-Black" : @"Black", + @"STKaitiTC-Bold" : @"Bold", + @"STKaitiTC-Regular" : @"Regular", + @"STLibianSC-Regular" : @"Regular", + @"STLibianTC-Regular" : @"Regular", + @"STSong" : @"Regular", + @"STSongti-SC-Black" : @"Black", + @"STSongti-SC-Bold" : @"Bold", + @"STSongti-SC-Light" : @"Light", + @"STSongti-SC-Regular" : @"Regular", + @"STSongti-TC-Bold" : @"Bold", + @"STSongti-TC-Light" : @"Light", + @"STSongti-TC-Regular" : @"Regular", + @"STXihei" : @"Light", + @"STXingkaiSC-Bold" : @"Bold", + @"STXingkaiSC-Light" : @"Light", + @"STXingkaiTC-Bold" : @"Bold", + @"STXingkaiTC-Light" : @"Light", + @"STYuanti-SC-Bold" : @"Bold", + @"STYuanti-SC-Light" : @"Light", + @"STYuanti-SC-Regular" : @"Regular", + @"STYuanti-TC-Bold" : @"Bold", + @"STYuanti-TC-Light" : @"Light", + @"STYuanti-TC-Regular" : @"Regular", + @"Sana" : @"Regular", + @"Sathu" : @"Regular", + @"SavoyeLetPlain" : @"Plain", + @"Seravek" : @"Regular", + @"Seravek-Bold" : @"Bold", + @"Seravek-BoldItalic" : @"Bold Italic", + @"Seravek-ExtraLight" : @"ExtraLight", + @"Seravek-ExtraLightItalic" : @"ExtraLight Italic", + @"Seravek-Italic" : @"Italic", + @"Seravek-Light" : @"Light", + @"Seravek-LightItalic" : @"Light Italic", + @"Seravek-Medium" : @"Medium", + @"Seravek-MediumItalic" : @"Medium Italic", + @"ShreeDev0714" : @"Regular", + @"ShreeDev0714-Bold" : @"Bold", + @"ShreeDev0714-BoldItalic" : @"Bold Italic", + @"ShreeDev0714-Italic" : @"Italic", + @"SignPainter-HouseScript" : @"HouseScript", + @"SignPainter-HouseScriptSemibold" : @"HouseScript Semibold", + @"Silom" : @"Regular", + @"SinhalaMN" : @"Regular", + @"SinhalaMN-Bold" : @"Bold", + @"SinhalaSangamMN" : @"Regular", + @"SinhalaSangamMN-Bold" : @"Bold", + @"Skia-Regular" : @"Regular", + @"Skia-Regular_Black" : @"Black", + @"Skia-Regular_Black-Condensed" : @"Black Condensed", + @"Skia-Regular_Black-Extended" : @"Black Extended", + @"Skia-Regular_Bold" : @"Bold", + @"Skia-Regular_Condensed" : @"Condensed", + @"Skia-Regular_Extended" : @"Extended", + @"Skia-Regular_Light" : @"Light", + @"Skia-Regular_Light-Condensed" : @"Light Condensed", + @"Skia-Regular_Light-Extended" : @"Light Extended", + @"SnellRoundhand" : @"Regular", + @"SnellRoundhand-Black" : @"Black", + @"SnellRoundhand-Bold" : @"Bold", + @"SukhumvitSet-Bold" : @"Bold", + @"SukhumvitSet-Light" : @"Light", + @"SukhumvitSet-Medium" : @"Medium", + @"SukhumvitSet-SemiBold" : @"Semi Bold", + @"SukhumvitSet-Text" : @"Text", + @"SukhumvitSet-Thin" : @"Thin", + @"Superclarendon-Black" : @"Black", + @"Superclarendon-BlackItalic" : @"Black Italic", + @"Superclarendon-Bold" : @"Bold", + @"Superclarendon-BoldItalic" : @"Bold Italic", + @"Superclarendon-Italic" : @"Italic", + @"Superclarendon-Light" : @"Light", + @"Superclarendon-LightItalic" : @"Light Italic", + @"Superclarendon-Regular" : @"Regular", + @"Symbol" : @"Regular", + @"Tahoma" : @"Regular", + @"Tahoma-Bold" : @"Bold", + @"TamilMN" : @"Regular", + @"TamilMN-Bold" : @"Bold", + @"TamilSangamMN" : @"Regular", + @"TamilSangamMN-Bold" : @"Bold", + @"TeamViewer12" : @"Medium", + @"TeluguMN" : @"Regular", + @"TeluguMN-Bold" : @"Bold", + @"TeluguSangamMN" : @"Regular", + @"TeluguSangamMN-Bold" : @"Bold", + @"Thonburi" : @"Regular", + @"Thonburi-Bold" : @"Bold", + @"Thonburi-Light" : @"Light", + @"Times-Bold" : @"Bold", + @"Times-BoldItalic" : @"Bold Italic", + @"Times-Italic" : @"Italic", + @"Times-Roman" : @"Regular", + @"TimesLTMM" : @"Regular", + @"TimesNewRomanPS-BoldItalicMT" : @"Bold Italic", + @"TimesNewRomanPS-BoldMT" : @"Bold", + @"TimesNewRomanPS-ItalicMT" : @"Italic", + @"TimesNewRomanPSMT" : @"Regular", + @"ToppanBunkyuGothicPr6N-DB" : @"Demibold", + @"ToppanBunkyuGothicPr6N-Regular" : @"Regular", + @"ToppanBunkyuMidashiGothicStdN-ExtraBold" : @"Extrabold", + @"ToppanBunkyuMidashiMinchoStdN-ExtraBold" : @"Extrabold", + @"ToppanBunkyuMinchoPr6N-Regular" : @"Regular", + @"Trattatello" : @"Regular", + @"Trebuchet-BoldItalic" : @"Bold Italic", + @"TrebuchetMS" : @"Regular", + @"TrebuchetMS-Bold" : @"Bold", + @"TrebuchetMS-Italic" : @"Italic", + @"TsukuARdGothic-Bold" : @"Bold", + @"TsukuARdGothic-Regular" : @"Regular", + @"TsukuBRdGothic-Bold" : @"Bold", + @"TsukuBRdGothic-Regular" : @"Regular", + @"Verdana" : @"Regular", + @"Verdana-Bold" : @"Bold", + @"Verdana-BoldItalic" : @"Bold Italic", + @"Verdana-Italic" : @"Italic", + @"Waseem" : @"Regular", + @"WaseemLight" : @"Light", + @"Webdings" : @"Regular", + @"WeibeiSC-Bold" : @"Bold", + @"WeibeiTC-Bold" : @"Bold", + @"Wingdings-Regular" : @"Regular", + @"Wingdings2" : @"Regular", + @"Wingdings3" : @"Regular", + @"YuGo-Bold" : @"Bold", + @"YuGo-Medium" : @"Medium", + @"YuKyo-Bold" : @"Bold", + @"YuKyo-Medium" : @"Medium", + @"YuKyo_Yoko-Bold" : @"Bold", + @"YuKyo_Yoko-Medium" : @"Medium", + @"YuMin-Demibold" : @"Demibold", + @"YuMin-Extrabold" : @"Extrabold", + @"YuMin-Medium" : @"Medium", + @"YuMin_36pKn-Demibold" : @"Demibold", + @"YuMin_36pKn-Extrabold" : @"Extrabold", + @"YuMin_36pKn-Medium" : @"Medium", + @"YuppySC-Regular" : @"Regular", + @"YuppyTC-Regular" : @"Regular", + @"ZapfDingbatsITC" : @"Regular", + @"Zapfino" : @"Regular", + + // JetBrains fonts + @"DroidSans" : @"Regular", + @"DroidSans-Bold" : @"Bold", + @"DroidSansMono" : @"Regular", + @"DroidSansMonoDotted" : @"Regular", + @"DroidSansMonoSlashed" : @"Regular", + @"DroidSerif" : @"Regular", + @"DroidSerif-Bold" : @"Bold", + @"DroidSerif-BoldItalic" : @"Bold Italic", + @"DroidSerif-Italic" : @"Italic", + @"FiraCode-Bold" : @"Bold", + @"FiraCode-Light" : @"Light", + @"FiraCode-Medium" : @"Medium", + @"FiraCode-Regular" : @"Regular", + @"FiraCode-Retina" : @"Retina", + @"Inconsolata" : @"Medium", + @"JetBrainsMono-Bold" : @"Bold", + @"JetBrainsMono-Regular" : @"Regular", + @"JetBrainsMono-Italic" : @"Italic", + @"JetBrainsMono-BoldItalic" : @"Bold Italic", + @"Roboto-Light" : @"Light", + @"Roboto-Thin" : @"Thin", + @"SourceCodePro-Bold" : @"Bold", + @"SourceCodePro-BoldIt" : @"Bold Italic", + @"SourceCodePro-It" : @"Italic", + @"SourceCodePro-Regular" : @"Regular", + @"Inter-Bold": @"Bold", + @"Inter-BoldItalic": @"Bold Italoc", + @"Inter-Italic": @"Italic", + @"Inter-Regular": @"Regular" + }; +} + +static bool +isVisibleFamily(NSString *familyName) { + return familyName != nil && + ([familyName characterAtIndex:0] != '.' || + [familyName isEqualToString:@".SF NS Text"] || + [familyName isEqualToString:@".SF NS Display"] || + // Catalina + [familyName isEqualToString:@".SF NS Mono"] || + [familyName isEqualToString:@".SF NS"]); +} + static NSArray* GetFilteredFonts() { if (sFilteredFonts == nil) { NSFontManager *fontManager = [NSFontManager sharedFontManager]; - NSUInteger fontCount = [[fontManager availableFonts] count]; - - NSMutableArray *allFonts = [[NSMutableArray alloc] initWithCapacity:fontCount]; + NSArray *availableFonts= [fontManager availableFonts]; + NSUInteger fontCount = [availableFonts count]; + NSMutableArray* allFonts = [NSMutableArray arrayWithCapacity:fontCount]; NSMutableDictionary* fontFamilyTable = [[NSMutableDictionary alloc] initWithCapacity:fontCount]; - NSArray *allFamilies = [fontManager availableFontFamilies]; - - NSUInteger familyCount = [allFamilies count]; - - NSUInteger familyIndex; - for (familyIndex = 0; familyIndex < familyCount; familyIndex++) { - NSString *family = [allFamilies objectAtIndex:familyIndex]; - - if ((family == nil) || [family characterAtIndex:0] == '.') { + NSMutableDictionary* fontFacesTable = [[NSMutableDictionary alloc] initWithCapacity:fontCount]; + NSMutableDictionary* fontTable = [[NSMutableDictionary alloc] initWithCapacity:fontCount]; + NSDictionary* prebuiltFamilies = prebuiltFamilyNames(); + NSDictionary* prebuiltFaces = prebuiltFaceNames(); + for (NSString *fontName in availableFonts) { + NSFont* font = nil; + NSString* familyName = [prebuiltFamilies objectForKey:fontName]; + if (!familyName) { + font = [NSFont fontWithName:fontName size:NSFont.systemFontSize]; + if(font && font.familyName) { + familyName = font.familyName; +// NSLog(@"@\"%@\" : @\"%@\",", fontName, familyName); + } + } + if (!isVisibleFamily(familyName)) { continue; } - - NSArray *fontFaces = [fontManager availableMembersOfFontFamily:family]; - NSUInteger faceCount = [fontFaces count]; - - NSUInteger faceIndex; - for (faceIndex = 0; faceIndex < faceCount; faceIndex++) { - NSString* face = [[fontFaces objectAtIndex:faceIndex] objectAtIndex:0]; - if (face != nil) { - [allFonts addObject:face]; - [fontFamilyTable setObject:family forKey:face]; + NSString* face = [prebuiltFaces objectForKey:fontName]; + if (!face) { + if (!font) { + font = [NSFont fontWithName:fontName size:NSFont.systemFontSize]; + } + if (font) { + NSFontDescriptor* desc = font.fontDescriptor; + if (desc) { + face = [desc objectForKey:NSFontFaceAttribute]; +// if (face) NSLog(@"@\"%@\" : @\"%@\",", fontName, face); + } } } + [allFonts addObject:fontName]; + [fontFamilyTable setObject:familyName forKey:fontName]; + if (face) { + [fontFacesTable setObject:face forKey:fontName]; + } } + /* * JavaFX registers these fonts and so JDK needs to do so as well. * If this isn't done we will have mis-matched rendering, since * although these may include fonts that are enumerated normally * they also demonstrably includes fonts that are not. */ - addFont(kCTFontUIFontSystem, allFonts, fontFamilyTable); - addFont(kCTFontUIFontEmphasizedSystem, allFonts, fontFamilyTable); + addFont(kCTFontUIFontSystem, allFonts, fontFamilyTable, fontFacesTable); + addFont(kCTFontUIFontEmphasizedSystem, allFonts, fontFamilyTable, fontFacesTable); sFilteredFonts = allFonts; sFontFamilyTable = fontFamilyTable; + sFontFaceTable = fontFacesTable; } return sFilteredFonts; @@ -296,7 +3139,7 @@ static OSStatus CreateFSRef(FSRef *myFSRefPtr, NSString *inPath) (JNIEnv *env, jobject jthis) { DECLARE_CLASS(jc_CFontManager, "sun/font/CFontManager"); - DECLARE_METHOD(jm_registerFont, jc_CFontManager, "registerFont", "(Ljava/lang/String;Ljava/lang/String;)V"); + DECLARE_METHOD(jm_registerFont, jc_CFontManager, "registerFont", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); jint num = 0; @@ -311,14 +3154,48 @@ static OSStatus CreateFSRef(FSRef *myFSRefPtr, NSString *inPath) jobject jFontName = NSStringToJavaString(env, fontname); jobject jFontFamilyName = NSStringToJavaString(env, GetFamilyNameForFontName(fontname)); + NSString *face = GetFaceForFontName(fontname); + jobject jFaceName = face ? NSStringToJavaString(env, face) : NULL; - (*env)->CallVoidMethod(env, jthis, jm_registerFont, jFontName, jFontFamilyName); + (*env)->CallVoidMethod(env, jthis, jm_registerFont, jFontName, jFontFamilyName, jFaceName); CHECK_EXCEPTION(); (*env)->DeleteLocalRef(env, jFontName); (*env)->DeleteLocalRef(env, jFontFamilyName); + if (jFaceName) { + (*env)->DeleteLocalRef(env, jFaceName); + } + } + +JNI_COCOA_EXIT(env); +} + +/* + * Class: Java_sun_font_CFontManager_loadNativeDirFonts + * Method: getNativeFontVersion + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT JNICALL jstring +Java_sun_font_CFontManager_getNativeFontVersion + (JNIEnv *env, jclass clz, jstring psName) +{ + jstring result = NULL; +JNI_COCOA_ENTER(env); + NSString *psNameStr = JavaStringToNSString(env, psName); + CTFontRef sFont = CTFontCreateWithName(psNameStr, 13, nil); + CFStringRef sFontPSName = CTFontCopyName(sFont, kCTFontPostScriptNameKey); + // CTFontCreateWithName always returns some font, + // so we need to check if it is right one + if ([psNameStr isEqualToString:sFontPSName]) { + CFStringRef fontVersionStr = CTFontCopyName(sFont, + kCTFontVersionNameKey); + result = NSStringToJavaString(env, fontVersionStr); + CFRelease(fontVersionStr); } + CFRelease(sFontPSName); + CFRelease(sFont); JNI_COCOA_EXIT(env); + return result; } /* @@ -538,55 +3415,6 @@ static OSStatus CreateFSRef(FSRef *myFSRefPtr, NSString *inPath) } #endif -/* - * Class: sun_awt_FontDescriptor - * Method: initIDs - * Signature: ()V - */ -JNIEXPORT void JNICALL -Java_sun_font_CFont_getCascadeList - (JNIEnv *env, jclass cls, jlong awtFontPtr, jobject arrayListOfString) -{ -JNI_COCOA_ENTER(env); - jclass alc = (*env)->FindClass(env, "java/util/ArrayList"); - if (alc == NULL) return; - jmethodID addMID = (*env)->GetMethodID(env, alc, "add", "(Ljava/lang/Object;)Z"); - if (addMID == NULL) return; - - CFIndex i; - AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); - NSFont* nsFont = awtFont->fFont; - CTFontRef font = (CTFontRef)nsFont; - CFArrayRef codes = CFLocaleCopyISOLanguageCodes(); - -#ifdef DEBUG - CFStringRef base = CTFontCopyFullName(font); - NSLog(@"BaseFont is : %@", (NSString*)base); - CFRelease(base); -#endif - CFArrayRef fds = CTFontCopyDefaultCascadeListForLanguages(font, codes); - CFRelease(codes); - CFIndex cnt = CFArrayGetCount(fds); - for (i=0; iCallBooleanMethod(env, arrayListOfString, addMID, jFontName); - if ((*env)->ExceptionOccurred(env)) { - CFRelease(fds); - return; - } - (*env)->DeleteLocalRef(env, jFontName); - } - CFRelease(fds); -JNI_COCOA_EXIT(env); -} - static CFStringRef EMOJI_FONT_NAME = CFSTR("Apple Color Emoji"); bool IsEmojiFont(CTFontRef font) diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.h b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.h index 05ef198764bd..cd8ba219036b 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.h @@ -34,6 +34,9 @@ CGFloat fSize; JRSFontRenderingStyle fStyle; jint fAAStyle; + jint fFmHint; + jint fSubpixelResolutionX; + jint fSubpixelResolutionY; CGAffineTransform fTx; CGAffineTransform fDevTx; @@ -41,6 +44,13 @@ CGAffineTransform fFontTx; } -+ (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont tx:(CGAffineTransform)tx invDevTx:(CGAffineTransform)invDevTx style:(JRSFontRenderingStyle)style aaStyle:(jint)aaStyle; ++ (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont + tx:(CGAffineTransform)tx + invDevTx:(CGAffineTransform)invDevTx + style:(JRSFontRenderingStyle)style + aaStyle:(jint)aaStyle + fmHint:(jint)fmHint + subpixelResolutionX:(jint)subpixelResolutionX + subpixelResolutionY:(jint)subpixelResolutionY; @end diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.m b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.m index 1e2ba23d9aa4..cf8e1070ca0e 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/AWTStrike.m @@ -31,6 +31,7 @@ #import "CoreTextSupport.h" #import "JNIUtilities.h" #include "fontscalerdefs.h" +#import "LWCToolkit.h" @implementation AWTStrike @@ -40,13 +41,19 @@ - (id) initWithFont:(AWTFont *)awtFont tx:(CGAffineTransform)tx invDevTx:(CGAffineTransform)invDevTx style:(JRSFontRenderingStyle)style - aaStyle:(jint)aaStyle { + aaStyle:(jint)aaStyle + fmHint:(jint)fmHint +subpixelResolutionX:(jint)subpixelResolutionX +subpixelResolutionY:(jint)subpixelResolutionY { self = [super init]; if (self) { fAWTFont = [awtFont retain]; fStyle = style; fAAStyle = aaStyle; + fFmHint = fmHint; + fSubpixelResolutionX = subpixelResolutionX; + fSubpixelResolutionY = subpixelResolutionY; fTx = tx; // composited glyph and device transform @@ -76,12 +83,18 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont tx:(CGAffineTransform)tx invDevTx:(CGAffineTransform)invDevTx style:(JRSFontRenderingStyle)style - aaStyle:(jint)aaStyle { + aaStyle:(jint)aaStyle + fmHint:(jint)fmHint + subpixelResolutionX:(jint)subpixelResolutionX + subpixelResolutionY:(jint)subpixelResolutionY { return [[[AWTStrike alloc] initWithFont:awtFont tx:tx invDevTx:invDevTx style:style - aaStyle:aaStyle] autorelease]; + aaStyle:aaStyle + fmHint:fmHint + subpixelResolutionX:subpixelResolutionX + subpixelResolutionY:subpixelResolutionY] autorelease]; } @end @@ -151,7 +164,7 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont // to indicate we should use CoreText to substitute the character CGGlyph glyph; const CTFontRef fallback = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtFont, glyphCode, &glyph); - CGGlyphImages_GetGlyphMetrics(fallback, &awtStrike->fAltTx, awtStrike->fStyle, &glyph, 1, NULL, &advance); + CGGlyphImages_GetGlyphMetrics(fallback, &awtStrike->fAltTx, awtStrike->fSize, awtStrike->fStyle, &glyph, 1, NULL, &advance, IS_OSX_GT10_14); CFRelease(fallback); advance = CGSizeApplyAffineTransform(advance, awtStrike->fFontTx); if (!JRSFontStyleUsesFractionalMetrics(awtStrike->fStyle)) { @@ -188,7 +201,7 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont const CTFontRef fallback = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtFont, glyphCode, &glyph); CGRect bbox; - CGGlyphImages_GetGlyphMetrics(fallback, &tx, awtStrike->fStyle, &glyph, 1, &bbox, NULL); + CGGlyphImages_GetGlyphMetrics(fallback, &tx, awtStrike->fSize, awtStrike->fStyle, &glyph, 1, &bbox, NULL, IS_OSX_GT10_14); CFRelease(fallback); // the origin of this bounding box is relative to the bottom-left corner baseline @@ -205,20 +218,11 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont JNI_COCOA_EXIT(env); } -/* - * Class: sun_font_CStrike - * Method: getNativeGlyphOutline - * Signature: (JJIDD)Ljava/awt/geom/GeneralPath; - */ -JNIEXPORT jobject JNICALL -Java_sun_font_CStrike_getNativeGlyphOutline - (JNIEnv *env, jclass clazz, - jlong awtStrikePtr, jint glyphCode, jdouble xPos, jdouble yPos) +jobject getGlyphOutline(JNIEnv *env, AWTStrike *awtStrike, + CTFontRef font, CGGlyph glyph, + jdouble xPos, jdouble yPos) { jobject generalPath = NULL; - -JNI_COCOA_ENTER(env); - AWTPathRef path = NULL; jfloatArray pointCoords = NULL; jbyteArray pointTypes = NULL; @@ -228,21 +232,11 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont AWT_FONT_CLEANUP_SETUP; - AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); - AWTFont *awtfont = awtStrike->fAWTFont; - -AWT_FONT_CLEANUP_CHECK(awtfont); - // inverting the shear order and sign to compensate for the flipped coordinate system CGAffineTransform tx = awtStrike->fTx; tx.tx += xPos; tx.ty += yPos; - // get the right font and glyph for this "Java GlyphCode" - - CGGlyph glyph; - const CTFontRef font = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtfont, glyphCode, &glyph); - // get the advance of this glyph CGSize advance; CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, &glyph, &advance, 1); @@ -255,7 +249,6 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont tx = awtStrike->fTx; tx = CGAffineTransformConcat(tx, sInverseTX); AWTGetGlyphOutline(&glyph, (NSFont *)font, &advance, &tx, 0, 1, &path); - CFRelease(font); pointCoords = (*env)->NewFloatArray(env, path->fNumberOfDataElements); AWT_FONT_CLEANUP_CHECK(pointCoords); @@ -289,10 +282,264 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont } AWT_FONT_CLEANUP_FINISH; -JNI_COCOA_EXIT(env); return generalPath; } +/* + * Class: sun_font_CStrike + * Method: getNativeGlyphOutline + * Signature: (JJIDD)Ljava/awt/geom/GeneralPath; + */ +JNIEXPORT jobject JNICALL +Java_sun_font_CStrike_getNativeGlyphOutline + (JNIEnv *env, jclass clazz, + jlong awtStrikePtr, jint glyphCode, jdouble xPos, jdouble yPos) { + jobject generalPath = NULL; + + JNI_COCOA_ENTER(env); + AWT_FONT_CLEANUP_SETUP; + + AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); + AWTFont *awtfont = awtStrike->fAWTFont; + AWT_FONT_CLEANUP_CHECK(awtfont); + + // get the right font and glyph for this "Java GlyphCode" + CGGlyph glyph; + const CTFontRef font = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtfont, glyphCode, &glyph); + + generalPath = getGlyphOutline(env, awtStrike, font, glyph, xPos, yPos); + + cleanup: + CFRelease(font); + + AWT_FONT_CLEANUP_FINISH; + JNI_COCOA_EXIT(env); + + return generalPath; +} + +// OpenType data is Big-Endian +#define GET_BE_INT32(data, i) CFSwapInt32BigToHost(*(const UInt32*) ((const UInt8*) (data) + (i))) +#define GET_BE_INT16(data, i) CFSwapInt16BigToHost(*(const UInt16*) ((const UInt8*) (data) + (i))) + +static bool addBitmapRenderData(JNIEnv *env, AWTStrike *awtStrike, + CTFontRef font, CGGlyph glyph, + jdouble xPos, jdouble yPos, jobject result) { + bool success = false; + + DECLARE_CLASS_RETURN(jc_GlyphRenderData, "sun/font/GlyphRenderData", false); + DECLARE_METHOD_RETURN(GlyphRenderDataAddBitmap, jc_GlyphRenderData, "addBitmap", "(DDDDDDIIII[I)V", false); + + AWT_FONT_CLEANUP_SETUP; + + CTFontDescriptorRef descriptor = NULL; + CGFontRef cgFont = CTFontCopyGraphicsFont(font, &descriptor); + + CFDataRef sbixTable = CGFontCopyTableForTag(cgFont, kCTFontTableSbix); + if (sbixTable == NULL) { + goto cleanup; + } + + // Parse sbix table + CFIndex sbixSize = CFDataGetLength(sbixTable); + if (sbixSize < 8) { + goto cleanup; // Corrupted table + } + const UInt8* sbix = CFDataGetBytePtr(sbixTable); + UInt32 numStrikes = GET_BE_INT32(sbix, 4); + if (8 + 4 * numStrikes > sbixSize) { + goto cleanup; // Corrupted table + } + // Find last strike which has data for our glyph + // Last is usually the biggest + const UInt8* glyphData = NULL; + UInt32 size; + UInt16 ppem, ppi; + for (int i = numStrikes - 1; i >= 0; i--) { + const UInt8* strike = sbix + GET_BE_INT32(sbix, 8 + 4 * i); + if (strike + 12 + 4 * glyph > sbix + sbixSize) { + goto cleanup; // Corrupted table + } + UInt32 offset = GET_BE_INT32(strike, 4 + 4 * glyph); + size = GET_BE_INT32(strike, 8 + 4 * glyph) - offset; + if (size > 0) { + ppem = GET_BE_INT16(strike, 0); + ppi = GET_BE_INT16(strike, 2); + glyphData = strike + offset; + break; + } + } + if (glyphData == NULL) { + goto cleanup; + } + if (glyphData + 4 > sbix + sbixSize) { + goto cleanup; // Corrupted table + } + + // Read glyph data + FourCharCode graphicType = GET_BE_INT32(glyphData, 4); + glyphData += 8; + size -= 8; + if (glyphData + size > sbix + sbixSize) { + goto cleanup; // Corrupted table + } + + // Decode glyph image + CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, glyphData, size, NULL); + CGImageRef image = NULL; + if (graphicType == 'jpg ') { + image = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, false, kCGRenderingIntentDefault); + } else if (graphicType == 'png ') { + image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, false, kCGRenderingIntentDefault); + } + CGDataProviderRelease(dataProvider); + + if (image != NULL) { + CGBitmapInfo info = CGImageGetBitmapInfo(image); + size_t bits = CGImageGetBitsPerPixel(image); + jint colorModel = -1; + if (info & (kCGImageAlphaPremultipliedLast | kCGImageAlphaLast)) { + colorModel = 0; // RGBA + } else if (info & (kCGImageAlphaPremultipliedFirst | kCGImageAlphaFirst)) { + colorModel = 1; // ARGB + } + if (colorModel != -1 && (info & kCGBitmapFloatComponents) == 0 && bits == 32) { + size_t width = CGImageGetWidth(image); + size_t height = CGImageGetHeight(image); + size_t pitch = CGImageGetBytesPerRow(image) / 4; + dataProvider = CGImageGetDataProvider(image); + CFDataRef data = CGDataProviderCopyData(dataProvider); + + jbyteArray array = (*env)->NewIntArray(env, pitch * height); + (*env)->SetIntArrayRegion(env, array, 0, pitch * height, (const jint*) CFDataGetBytePtr(data)); + CFRelease(data); + + double pointSize = 72.0 * ppem / ppi; + double scale = 1.0 / pointSize; + font = CTFontCreateWithGraphicsFont(cgFont, pointSize, NULL, descriptor); + CGRect bbox = CTFontGetBoundingRectsForGlyphs(font, kCTFontOrientationDefault, &glyph, NULL, 1); + CFRelease(font); + double tx = bbox.origin.x + xPos * pointSize / awtStrike->fSize; + double ty = -bbox.origin.y - (double) height + yPos * pointSize / awtStrike->fSize; + + jdouble m00 = awtStrike->fTx.a * scale, m10 = awtStrike->fTx.b * scale; + jdouble m01 = -awtStrike->fTx.c * scale, m11 = -awtStrike->fTx.d * scale; + jdouble m02 = m00 * tx + m01 * ty, m12 = m10 * tx + m11 * ty; + + (*env)->CallVoidMethod(env, result, GlyphRenderDataAddBitmap, + m00, m10, m01, m11, m02, m12, + width, height, pitch, 0, array); + success = true; + } + CGImageRelease(image); + } + + // Cleanup + cleanup: + if (sbixTable) { + CFRelease(sbixTable); + } + if (cgFont) { + CFRelease(cgFont); + } + if (descriptor) { + CFRelease(descriptor); + } + + AWT_FONT_CLEANUP_FINISH; + return success; +} + +/* + * Class: sun_font_CStrike + * Method: getNativeGlyphRenderData + * Signature: (JIDDLsun/font/GlyphRenderData;)V + */ +JNIEXPORT void JNICALL +Java_sun_font_CStrike_getNativeGlyphRenderData + (JNIEnv *env, jclass clazz, + jlong awtStrikePtr, jint glyphCode, jdouble xPos, jdouble yPos, jobject result) +{ + JNI_COCOA_ENTER(env); + + DECLARE_CLASS(jc_GlyphRenderData, "sun/font/GlyphRenderData"); + DECLARE_FIELD(GlyphRenderDataOutline, jc_GlyphRenderData, "outline", "Ljava/awt/geom/GeneralPath;") + + AWT_FONT_CLEANUP_SETUP; + + AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); + AWTFont *awtfont = awtStrike->fAWTFont; + AWT_FONT_CLEANUP_CHECK(awtfont); + + // get the right font and glyph for this "Java GlyphCode" + CGGlyph glyph; + const CTFontRef font = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(awtfont, glyphCode, &glyph); + + if (!addBitmapRenderData(env, awtStrike, font, glyph, xPos, yPos, result)) { + jobject gp = getGlyphOutline(env, awtStrike, font, glyph, xPos, yPos); + if (gp != NULL) { + (*env)->SetObjectField(env, result, GlyphRenderDataOutline, gp); + } + } + + cleanup: + CFRelease(font); + + AWT_FONT_CLEANUP_FINISH; + JNI_COCOA_EXIT(env); +} + +/* + * Class: sun_font_CStrike + * Method: getNativeGlyphOutlineBounds + * Signature: (JILjava/awt/geom/Rectangle2D/Float;DD)V + */ +JNIEXPORT void JNICALL Java_sun_font_CStrike_getNativeGlyphOutlineBounds + (JNIEnv *env, jclass clazz, jlong awtStrikePtr, jint glyphCode, + jfloatArray rectData) +{ + JNI_COCOA_ENTER(env); + AWTStrike *awtStrike = (AWTStrike *)jlong_to_ptr(awtStrikePtr); + AWTFont *awtfont = awtStrike->fAWTFont; + + AWT_FONT_CLEANUP_SETUP; + AWT_FONT_CLEANUP_CHECK(awtfont); + + // get the right font and glyph for this "Java GlyphCode" + CGGlyph glyph; + const CTFontRef font = CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode( + awtfont, glyphCode, &glyph); + + CGRect bbox = CTFontGetBoundingRectsForGlyphs( + font, kCTFontOrientationDefault, &glyph, NULL, 1); + + CGAffineTransform tx = CGAffineTransformConcat(awtStrike->fTx, + sInverseTX); + + bbox = CGRectApplyAffineTransform (bbox, tx); + CFRelease(font); + jfloat *rawRectData = + (*env)->GetPrimitiveArrayCritical(env, rectData, NULL); + + if (CGRectIsNull(bbox)) { + rawRectData[0] = 0.0f; + rawRectData[1] = 0.0f; + rawRectData[2] = 0.0f; + rawRectData[3] = 0.0f; + } else { + rawRectData[0] = (jfloat) bbox.origin.x; + rawRectData[1] = (jfloat) (-bbox.origin.y - bbox.size.height); + rawRectData[2] = (jfloat) bbox.size.width; + rawRectData[3] = (jfloat) bbox.size.height; + } + + (*env)->ReleasePrimitiveArrayCritical(env, rectData, rawRectData, 0); + // Cleanup + cleanup: + AWT_FONT_CLEANUP_FINISH; + + JNI_COCOA_EXIT(env); +} /* * Class: sun_font_CStrike * Method: getGlyphImagePtrsNative @@ -341,7 +588,8 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont * Signature: (J[D[DII)J */ JNIEXPORT jlong JNICALL Java_sun_font_CStrike_createNativeStrikePtr -(JNIEnv *env, jclass clazz, jlong nativeFontPtr, jdoubleArray glyphTxArray, jdoubleArray invDevTxArray, jint aaStyle, jint fmHint) +(JNIEnv *env, jclass clazz, jlong nativeFontPtr, jdoubleArray glyphTxArray, jdoubleArray invDevTxArray, + jint aaStyle, jint fmHint, jint subpixelResolutionX, jint subpixelResolutionY) { AWTStrike *awtStrike = nil; JNI_COCOA_ENTER(env); @@ -352,7 +600,8 @@ + (AWTStrike *) awtStrikeForFont:(AWTFont *)awtFont CGAffineTransform glyphTx = GetTxFromDoubles(env, glyphTxArray); CGAffineTransform invDevTx = GetTxFromDoubles(env, invDevTxArray); - awtStrike = [AWTStrike awtStrikeForFont:awtFont tx:glyphTx invDevTx:invDevTx style:style aaStyle:aaStyle]; // autoreleased + awtStrike = [AWTStrike awtStrikeForFont:awtFont tx:glyphTx invDevTx:invDevTx style:style + aaStyle:aaStyle fmHint:fmHint subpixelResolutionX:subpixelResolutionX subpixelResolutionY:subpixelResolutionY]; // autoreleased if (awtStrike) { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m b/src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m index e0cefbe01dc4..f1e1a8fb4d10 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m @@ -29,6 +29,7 @@ #import "CoreTextSupport.h" #import "sun_font_CCharToGlyphMapper.h" +#import "sun_font_CCompositeGlyphMapper.h" /* * Class: sun_font_CCharToGlyphMapper @@ -115,3 +116,29 @@ JNI_COCOA_EXIT(env); } + +/* + * Class: sun_font_CCompositeGlyphMapper + * Method: nativeCodePointToGlyph + * Signature: (JII[Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL +Java_sun_font_CCompositeGlyphMapper_nativeCodePointToGlyph +(JNIEnv *env, jclass clazz, jlong awtFontPtr, jint codePoint, jint variationSelector, jobjectArray resultArray) +{ +JNI_COCOA_ENTER(env); + AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); + CFStringRef fontNames[] = {NULL, NULL}; + CGGlyph glyph = CTS_CopyGlyphAndFontNamesForCodePoint(awtFont, (UnicodeScalarValue)codePoint, + (UnicodeScalarValue)variationSelector, fontNames); + if (glyph > 0) { + jstring fontName = NSStringToJavaString(env, (NSString *)fontNames[0]); + (*env)->SetObjectArrayElement(env, resultArray, 0, fontName); + jstring fontFamilyName = NSStringToJavaString(env, (NSString *)fontNames[1]); + (*env)->SetObjectArrayElement(env, resultArray, 1, fontFamilyName); + } + if (fontNames[0]) CFRelease(fontNames[0]); + if (fontNames[1]) CFRelease(fontNames[1]); + return glyph; +JNI_COCOA_EXIT(env); +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.h b/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.h index 736167d2af4c..2415ec5093f1 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.h @@ -36,9 +36,11 @@ CGGlyphImages_GetGlyphImagePtrs(jlong glyphInfos[], void CGGlyphImages_GetGlyphMetrics(const CTFontRef font, const CGAffineTransform *tx, + CGFloat fontSize, const JRSFontRenderingStyle style, const CGGlyph glyphs[], size_t count, CGRect bboxes[], - CGSize advances[]); + CGSize advances[], + const bool isCatalinaOrAbove); #endif /* __CGGLYPHIMAGES_H */ diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m b/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m index ecdd6e4cdf80..9ab739a5f932 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m @@ -31,6 +31,7 @@ #import "fontscalerdefs.h" // contains the definition of GlyphInfo struct #import "sun_awt_SunHints.h" +#import "LWCToolkit.h" //#define USE_IMAGE_ALIGNED_MEMORY 1 //#define CGGI_DEBUG 1 @@ -287,24 +288,27 @@ @implementation CGGI_GlyphCanvas static void CGGI_CopyImageFromCanvasToAlphaInfo(CGGI_GlyphCanvas *canvas, GlyphInfo *info) { - UInt32 *src = (UInt32 *)canvas->image->data; size_t srcRowWidth = canvas->image->width; - UInt8 *dest = (UInt8 *)info->image; size_t destRowWidth = info->width; - size_t height = info->height; - size_t y; - - // fill empty glyph image with black-on-white glyph - for (y = 0; y < height; y++) { - size_t destRow = y * destRowWidth; - size_t srcRow = y * srcRowWidth; - size_t x; - for (x = 0; x < destRowWidth; x++) { - UInt32 p = src[srcRow + x]; - dest[destRow + x] = CGGI_ConvertBWPixelToByteGray(p); + for (int sy = 0; sy < info->subpixelResolutionY; sy++) { + for (int sx = 0; sx < info->subpixelResolutionX; sx++) { + UInt32 *src = (UInt32 *)canvas->image->data + sy * height * srcRowWidth + sx * destRowWidth; + UInt8 *dest = (UInt8 *)info->image + (info->subpixelResolutionX * sy + sx) * destRowWidth * height; + + size_t y; + // fill empty glyph image with black-on-white glyph + for (y = 0; y < height; y++) { + size_t destRow = y * destRowWidth; + size_t srcRow = y * srcRowWidth; + size_t x; + for (x = 0; x < destRowWidth; x++) { + UInt32 p = src[srcRow + x]; + dest[destRow + x] = CGGI_ConvertBWPixelToByteGray(p); + } + } } } } @@ -352,8 +356,10 @@ @implementation CGGI_GlyphCanvas } CGGI_GlyphInfoDescriptor; typedef struct CGGI_RenderingMode { - CGGI_GlyphInfoDescriptor *glyphDescriptor; + CGGI_GlyphInfoDescriptor *mainFontDescriptor; JRSFontRenderingStyle cgFontMode; + bool lcdRendering; + bool subpixelResolution; } CGGI_RenderingMode; static CGGI_GlyphInfoDescriptor grey = @@ -366,7 +372,7 @@ @implementation CGGI_GlyphCanvas static inline CGGI_GlyphInfoDescriptor* CGGI_GetGlyphInfoDescriptor(const CGGI_RenderingMode *mode, CTFontRef font) { - return IsEmojiFont(font) ? &argb : mode->glyphDescriptor; + return IsEmojiFont(font) ? &argb : mode->mainFontDescriptor; } static inline CGGI_RenderingMode @@ -376,16 +382,26 @@ @implementation CGGI_GlyphCanvas mode.cgFontMode = strike->fStyle; NSException *e = nil; +#ifdef USE_IMAGE_ALIGNED_MEMORY + mode.subpixelResolution = false; +#else + mode.subpixelResolution = strike->fAAStyle == sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_ON && + strike->fFmHint == sun_awt_SunHints_INTVAL_FRACTIONALMETRICS_ON && + (strike->fSubpixelResolutionX > 1 || strike->fSubpixelResolutionY > 1); +#endif + switch (strike->fAAStyle) { case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_OFF: case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_ON: - mode.glyphDescriptor = &grey; + mode.lcdRendering = false; + mode.mainFontDescriptor = &grey; break; case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_LCD_HRGB: case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_LCD_HBGR: case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_LCD_VRGB: case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_LCD_VBGR: - mode.glyphDescriptor = &rgb; + mode.lcdRendering = true; + mode.mainFontDescriptor = &rgb; break; case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_GASP: case sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_DEFAULT: @@ -399,6 +415,10 @@ @implementation CGGI_GlyphCanvas userInfo:nil]; @throw e; } + if (IsEmojiFont((CTFontRef)strike->fAWTFont->fFont)) { + mode.mainFontDescriptor = &argb; + mode.subpixelResolution = false; + } return mode; } @@ -431,7 +451,7 @@ @implementation CGGI_GlyphCanvas } uint32_t bmpInfo = kCGImageAlphaPremultipliedFirst; - if (mode->glyphDescriptor == &rgb) { + if (mode->lcdRendering) { bmpInfo |= kCGBitmapByteOrder32Host; } @@ -509,8 +529,8 @@ @implementation CGGI_GlyphCanvas { vImage_Buffer canvasRectToClear; canvasRectToClear.data = canvas->image->data; - canvasRectToClear.height = info->height; - canvasRectToClear.width = info->width; + canvasRectToClear.height = info->height * info->subpixelResolutionY; + canvasRectToClear.width = info->width * info->subpixelResolutionX; // use the row stride of the canvas, not the info canvasRectToClear.rowBytes = canvas->image->rowBytes; @@ -538,7 +558,8 @@ @implementation CGGI_GlyphCanvas static inline GlyphInfo * CGGI_CreateNewGlyphInfoFrom(CGSize advance, CGRect bbox, const AWTStrike *strike, - const CGGI_GlyphInfoDescriptor *glyphDescriptor) + const CGGI_GlyphInfoDescriptor *glyphDescriptor, + bool subpixelResolution) { size_t pixelSize = glyphDescriptor->pixelSize; @@ -550,8 +571,23 @@ @implementation CGGI_GlyphCanvas bbox.origin.x -= CGGI_GLYPH_BBOX_PADDING; bbox.origin.y -= CGGI_GLYPH_BBOX_PADDING; - vImagePixelCount width = ceilf(bbox.size.width); - vImagePixelCount height = ceilf(bbox.size.height); + int subpixelResX = 1; + int subpixelResY = 1; + int topLeftX, topLeftY; + vImagePixelCount width, height; + if (subpixelResolution) { + subpixelResX = strike->fSubpixelResolutionX; + subpixelResY = strike->fSubpixelResolutionY; + topLeftX = floorf(bbox.origin.x); + topLeftY = floorf(bbox.origin.y); + width = ceilf(bbox.origin.x + bbox.size.width) - topLeftX; + height = ceilf(bbox.origin.y + bbox.size.height) - topLeftY; + } else { + topLeftX = round(bbox.origin.x); + topLeftY = round(bbox.origin.y); + width = ceilf(bbox.size.width); + height = ceilf(bbox.size.height); + } // if the glyph is larger than 1MB, don't even try... // the GlyphVector path should have taken over by now @@ -567,24 +603,31 @@ @implementation CGGI_GlyphCanvas } advance = CGSizeApplyAffineTransform(advance, strike->fDevTx); + int imageBytes = height * width * pixelSize; + int extraPixelStorage = (strike->fAAStyle == sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_LCD_HRGB && + strike->fFmHint == sun_awt_SunHints_INTVAL_FRACTIONALMETRICS_ON) ? 3 : 0; + #ifdef USE_IMAGE_ALIGNED_MEMORY // create separate memory GlyphInfo *glyphInfo = (GlyphInfo *)malloc(sizeof(GlyphInfo)); - void *image = (void *)malloc(height * width * pixelSize); + void *image = (void *)malloc(imageBytes + extraPixelStorage); #else // create a GlyphInfo struct fused to the image it points to GlyphInfo *glyphInfo = (GlyphInfo *)malloc(sizeof(GlyphInfo) + - height * width * pixelSize); + (imageBytes + extraPixelStorage) * subpixelResX * subpixelResY); #endif glyphInfo->advanceX = advance.width; glyphInfo->advanceY = advance.height; - glyphInfo->topLeftX = round(bbox.origin.x); - glyphInfo->topLeftY = round(bbox.origin.y); + glyphInfo->topLeftX = topLeftX; + glyphInfo->topLeftY = topLeftY; glyphInfo->width = width; glyphInfo->height = height; glyphInfo->rowBytes = width * pixelSize; glyphInfo->cellInfo = NULL; + glyphInfo->subpixelResolutionX = subpixelResX; + glyphInfo->subpixelResolutionY = subpixelResY; + glyphInfo->format = (UInt8) pixelSize; #ifdef USE_IMAGE_ALIGNED_MEMORY glyphInfo->image = image; @@ -592,12 +635,28 @@ @implementation CGGI_GlyphCanvas glyphInfo->image = ((void *)glyphInfo) + sizeof(GlyphInfo); #endif + int i; + for (i = 0; i < extraPixelStorage; i++) (glyphInfo->image)[imageBytes + i] = 0; + return glyphInfo; } #pragma mark --- Glyph Striking onto Canvas --- +#define RENDER_GLYPH_BATCH_SIZE 16 +#define RENDER_GLYPH_ARRAY_INIT_8 glyph,glyph,glyph,glyph,glyph,glyph,glyph,glyph +#define RENDER_GLYPH_ARRAY_INIT RENDER_GLYPH_ARRAY_INIT_8,RENDER_GLYPH_ARRAY_INIT_8 + +static CTFontRef CopyFontWithSize(CTFontRef originalFont, CGFloat size) { + CTFontDescriptorRef descriptor = NULL; + CGFontRef cgFont = CTFontCopyGraphicsFont(originalFont, &descriptor); + CTFontRef result = CTFontCreateWithGraphicsFont(cgFont, size, NULL, descriptor); + if (cgFont) CFRelease(cgFont); + if (descriptor) CFRelease(descriptor); + return result; +} + /* * Clears the canvas, strikes the glyph with CoreGraphics, and then * copies the struck pixels into the GlyphInfo image. @@ -605,7 +664,7 @@ @implementation CGGI_GlyphCanvas static inline void CGGI_CreateImageForGlyph (CGGI_GlyphCanvas *canvas, const CGGlyph glyph, - GlyphInfo *info, const CGGI_GlyphInfoDescriptor *glyphDescriptor, const AWTStrike *strike, CTFontRef font) + GlyphInfo *info, const CGGI_GlyphInfoDescriptor *glyphDescriptor, const AWTStrike *strike, CTFontRef font, const bool isCatalinaOrAbove) { if (isnan(info->topLeftX) || isnan(info->topLeftY)) { // Explicitly set glyphInfo width/height to be 0 to ensure @@ -620,12 +679,14 @@ @implementation CGGI_GlyphCanvas // clean the canvas CGGI_ClearCanvas(canvas, info, glyphDescriptor == &argb); + CGContextSetShouldAntialias(canvas->context, strike->fAAStyle != sun_awt_SunHints_INTVAL_TEXT_ANTIALIAS_OFF); // strike the glyph in the upper right corner CGFloat x = -info->topLeftX; CGFloat y = canvas->image->height + info->topLeftY; - if (glyphDescriptor == &argb) { + CGPoint subpixelOffset = CGPointMake(1.0 / (float) info->subpixelResolutionX, 1.0 / (float) info->subpixelResolutionY); + if (isCatalinaOrAbove || glyphDescriptor == &argb) { // Emoji glyphs are not rendered by CGContextShowGlyphsAtPoint. // Also, it's not possible to use transformation matrix to get the emoji glyph // rendered for the desired font size - actual-size font object is needed. @@ -633,25 +694,52 @@ @implementation CGGI_GlyphCanvas // which calculates glyph metrics. CGAffineTransform matrix = CGContextGetTextMatrix(canvas->context); - CGFloat fontSize = sqrt(fabs(matrix.a * matrix.d - matrix.b * matrix.c)); - CTFontRef sizedFont = CTFontCreateCopyWithSymbolicTraits(font, fontSize, NULL, 0, 0); + // Set actual font size from transformation matrix for color glyphs + CGFloat fontSize = glyphDescriptor != &argb ? strike->fSize : + sqrt(fabs(matrix.a * matrix.d - matrix.b * matrix.c)); + CTFontRef sizedFont = CopyFontWithSize(font, fontSize); CGFloat normFactor = 1.0 / fontSize; CGAffineTransform normalizedMatrix = CGAffineTransformScale(matrix, normFactor, normFactor); CGContextSetTextMatrix(canvas->context, normalizedMatrix); - CGPoint userPoint = CGPointMake(x, y); CGAffineTransform normalizedMatrixInv = CGAffineTransformInvert(normalizedMatrix); - CGPoint textPoint = CGPointApplyAffineTransform(userPoint, normalizedMatrixInv); - CTFontDrawGlyphs(sizedFont, &glyph, &textPoint, 1, canvas->context); + // Render glyphs with subpixel offsets in batches up to 16 per draw call. + // Maximum subpixel resolution is 16 in each dimension, which is 256 total images, which is too crazy. + // In practice 4x1 is enough, so we can draw up to something like 4x4 in one call. + const CGGlyph glyphs[RENDER_GLYPH_BATCH_SIZE] = {RENDER_GLYPH_ARRAY_INIT}; + CGPoint glyphPositions[RENDER_GLYPH_BATCH_SIZE]; + + int glyphIndex = 0; + for (int sy = 0; sy < info->subpixelResolutionY; sy++) { + for (int sx = 0; sx < info->subpixelResolutionX; sx++) { + CGPoint userPoint = CGPointMake(x + info->width * sx + subpixelOffset.x * (float) sx, + y - info->height * sy - subpixelOffset.y * (float) sy); + glyphPositions[glyphIndex] = CGPointApplyAffineTransform(userPoint, normalizedMatrixInv); + glyphIndex++; + if (glyphIndex >= RENDER_GLYPH_BATCH_SIZE) { + CTFontDrawGlyphs(sizedFont, glyphs, glyphPositions, glyphIndex, canvas->context); + glyphIndex = 0; + } + } + } + if (glyphIndex > 0) { + CTFontDrawGlyphs(sizedFont, glyphs, glyphPositions, glyphIndex, canvas->context); + } CFRelease(sizedFont); // restore context's original state CGContextSetTextMatrix(canvas->context, matrix); CGContextSetFontSize(canvas->context, 1); // CTFontDrawGlyphs tampers with it } else { - CGContextShowGlyphsAtPoint(canvas->context, x, y, &glyph, 1); + for (int sy = 0; sy < info->subpixelResolutionY; sy++) { + for (int sx = 0; sx < info->subpixelResolutionX; sx++) { + CGContextShowGlyphsAtPoint(canvas->context, + x + info->width * sx + subpixelOffset.x * (float) sx, + y - info->height * sy - subpixelOffset.y * (float) sy, &glyph, 1); + } + } } // copy the glyph from the canvas into the info @@ -664,10 +752,13 @@ @implementation CGGI_GlyphCanvas static inline GlyphInfo * CGGI_CreateImageForUnicode (CGGI_GlyphCanvas *canvas, const AWTStrike *strike, - const CGGI_RenderingMode *mode, const UnicodeScalarValue uniChar) + const CGGI_RenderingMode *mode, const UnicodeScalarValue uniChar, + const bool isCatalinaOrAbove) { - // save the state of the world + // save the graphics state CGContextSaveGState(canvas->context); + // text matrix is not considered part of graphics state + CGAffineTransform originalTx = CGContextGetTextMatrix(canvas->context); // get the glyph, measure it using CG CGGlyph glyph; @@ -684,20 +775,22 @@ @implementation CGGI_GlyphCanvas fallback = CTS_CopyCTFallbackFontAndGlyphForUnicode(strike->fAWTFont, (const UTF16Char *)&charRef, &glyph, 1); } - CGAffineTransform tx = strike->fTx; JRSFontRenderingStyle style = JRSFontAlignStyleForFractionalMeasurement(strike->fStyle); + CGGI_GlyphInfoDescriptor *glyphDescriptor = CGGI_GetGlyphInfoDescriptor(mode, fallback); + + bool subpixelResolution = mode->subpixelResolution && glyphDescriptor == &grey; + CGRect bbox; CGSize advance; - CGGlyphImages_GetGlyphMetrics(fallback, &tx, style, &glyph, 1, &bbox, &advance); + CGGlyphImages_GetGlyphMetrics(fallback, &strike->fTx, strike->fSize, style, &glyph, 1, &bbox, &advance, isCatalinaOrAbove); - CGGI_GlyphInfoDescriptor *glyphDescriptor = CGGI_GetGlyphInfoDescriptor(mode, fallback); // create the Sun2D GlyphInfo we are going to strike into - GlyphInfo *info = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, glyphDescriptor); + GlyphInfo *info = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, glyphDescriptor, subpixelResolution); // fix the context size, just in case the substituted character is unexpectedly large - CGGI_SizeCanvas(canvas, info->width, info->height, mode); + CGGI_SizeCanvas(canvas, info->width * info->subpixelResolutionX, info->height * info->subpixelResolutionY, mode); // align the transform for the real CoreText strike CGContextSetTextMatrix(canvas->context, strike->fAltTx); @@ -707,10 +800,11 @@ @implementation CGGI_GlyphCanvas CFRelease(cgFallback); // clean the canvas - align, strike, and copy the glyph from the canvas into the info - CGGI_CreateImageForGlyph(canvas, glyph, info, glyphDescriptor, strike, fallback); + CGGI_CreateImageForGlyph(canvas, glyph, info, glyphDescriptor, strike, fallback, isCatalinaOrAbove); - // restore the state of the world + // restore graphics state CGContextRestoreGState(canvas->context); + CGContextSetTextMatrix(canvas->context, originalTx); CFRelease(fallback); #ifdef CGGI_DEBUG @@ -750,16 +844,15 @@ @implementation CGGI_GlyphCanvas CGContextSetFont(canvas->context, strike->fAWTFont->fNativeCGFont); JRSFontSetRenderingStyleOnContext(canvas->context, strike->fStyle); - CTFontRef mainFont = (CTFontRef)strike->fAWTFont->fFont; - CGGI_GlyphInfoDescriptor* mainFontDescriptor = CGGI_GetGlyphInfoDescriptor(mode, mainFont); - + const bool isMojaveOrAbove = IS_OSX_GT10_13; CFIndex i; for (i = 0; i < len; i++) { GlyphInfo *info = (GlyphInfo *)jlong_to_ptr(glyphInfos[i]); if (info != NULL) { - CGGI_CreateImageForGlyph(canvas, glyphs[i], info, mainFontDescriptor, strike, mainFont); + CGGI_CreateImageForGlyph(canvas, glyphs[i], info, mode->mainFontDescriptor, + strike, (CTFontRef)strike->fAWTFont->fFont, isMojaveOrAbove); } else { - info = CGGI_CreateImageForUnicode(canvas, strike, mode, uniChars[i]); + info = CGGI_CreateImageForUnicode(canvas, strike, mode, uniChars[i], isMojaveOrAbove); glyphInfos[i] = ptr_to_jlong(info); } #ifdef CGGI_DEBUG @@ -816,7 +909,7 @@ @implementation CGGI_GlyphCanvas NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary]; - NSString* theKey = (mode->glyphDescriptor == &rgb) ? + NSString* theKey = mode->lcdRendering ? threadLocalLCDCanvasKey : threadLocalAACanvasKey; CGGI_GlyphCanvas *canvas = [threadDict objectForKey:theKey]; @@ -847,12 +940,10 @@ @implementation CGGI_GlyphCanvas CGSize advances[], CGRect bboxes[], const CFIndex len) { AWTFont *font = strike->fAWTFont; - CGAffineTransform tx = strike->fTx; JRSFontRenderingStyle bboxCGMode = JRSFontAlignStyleForFractionalMeasurement(strike->fStyle); CTFontRef fontRef = (CTFontRef)font->fFont; - CGGlyphImages_GetGlyphMetrics(fontRef, &tx, bboxCGMode, glyphs, len, bboxes, advances); - CGGI_GlyphInfoDescriptor* mainFontDescriptor = CGGI_GetGlyphInfoDescriptor(mode, fontRef); + CGGlyphImages_GetGlyphMetrics(fontRef, &strike->fTx, strike->fSize, bboxCGMode, glyphs, len, bboxes, advances, IS_OSX_GT10_14); size_t maxWidth = 1; size_t maxHeight = 1; @@ -869,10 +960,15 @@ @implementation CGGI_GlyphCanvas CGSize advance = advances[i]; CGRect bbox = bboxes[i]; - GlyphInfo *glyphInfo = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, mainFontDescriptor); + GlyphInfo *glyphInfo = CGGI_CreateNewGlyphInfoFrom(advance, bbox, strike, + mode->mainFontDescriptor, + mode->subpixelResolution); + + int w = glyphInfo->width * glyphInfo->subpixelResolutionX; + int h = glyphInfo->height * glyphInfo->subpixelResolutionY; - if (maxWidth < glyphInfo->width) maxWidth = glyphInfo->width; - if (maxHeight < glyphInfo->height) maxHeight = glyphInfo->height; + if (maxWidth < w) maxWidth = w; + if (maxHeight < h) maxHeight = h; glyphInfos[i] = ptr_to_jlong(glyphInfo); } @@ -972,19 +1068,20 @@ @implementation CGGI_GlyphCanvas void CGGlyphImages_GetGlyphMetrics(const CTFontRef font, const CGAffineTransform *tx, + CGFloat fontSize, const JRSFontRenderingStyle style, const CGGlyph glyphs[], size_t count, CGRect bboxes[], - CGSize advances[]) { - if (IsEmojiFont(font)) { + CGSize advances[], + const bool isCatalinaOrAbove) { + if (isCatalinaOrAbove || IsEmojiFont(font)) { // Glyph metrics for emoji font are not strictly proportional to font size, // so we need to construct real-sized font object to calculate them. // The logic here must match the logic in CGGI_CreateImageForGlyph, // which performs glyph drawing. - CGFloat fontSize = sqrt(fabs(tx->a * tx->d - tx->b * tx->c)); - CTFontRef sizedFont = CTFontCreateCopyWithSymbolicTraits(font, fontSize, NULL, 0, 0); + CTFontRef sizedFont = CopyFontWithSize(font, fontSize); if (bboxes) { // JRSFontGetBoundingBoxesForGlyphsAndStyle works incorrectly for AppleColorEmoji font: diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.h b/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.h index cbd3dc5923b2..7987228bcfb4 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.h @@ -35,6 +35,10 @@ #define HI_SURROGATE_END 0xDBFF #define LO_SURROGATE_START 0xDC00 #define LO_SURROGATE_END 0xDFFF +#define VS_START 0xFE00 +#define VS_END 0xFE0F +#define VSS_START 0xE0100 +#define VSS_END 0xE01FF /* * Transform Unicode characters into glyphs. @@ -54,9 +58,17 @@ CTFontRef CTS_CopyCTFallbackFontAndGlyphForJavaGlyphCode(const AWTFont *font, co // Returns the substituted font, and places the appropriate glyph into "glyphRef" CTFontRef CTS_CopyCTFallbackFontAndGlyphForUnicode(const AWTFont *font, const UTF16Char *charRef, CGGlyph *glyphRef, int count); +// Transform a single Unicode character code into glyph code. +// Names of the relevant font are also returned, if the substitution is used. +// Non-null components of fontNames array should always be released by the calling code, regardless of the returned value. +CGGlyph CTS_CopyGlyphAndFontNamesForCodePoint(const AWTFont *font, const UnicodeScalarValue codePoint, const UnicodeScalarValue variationSelector, CFStringRef fontNames[]); + // Breakup a 32 bit unicode value into the component surrogate pairs void CTS_BreakupUnicodeIntoSurrogatePairs(int uniChar, UTF16Char charRef[]); +// Get number of UTF16 values from 32 bit unicode value (2 for surrogate pair and 1 otherwise) +int CTS_GetUnicodeSize(const UnicodeScalarValue unicode); + // Basic struct that holds everything CoreText is interested in typedef struct CTS_ProviderStruct { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.m b/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.m index 5663b3084ac7..9d5e4879aa76 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/CoreTextSupport.m @@ -88,59 +88,153 @@ CFRelease(ctStateDict); // GC } -/* - * Transform Unicode characters into glyphs. - * - * Fills the "glyphsAsInts" array with the glyph codes for the current font, - * or the negative unicode value if we know the character can be hot-substituted. - * - * This is the heart of "Universal Font Substitution" in Java. - */ -void CTS_GetGlyphsAsIntsForCharacters -(const AWTFont *font, const UniChar unicodes[], CGGlyph glyphs[], jint glyphsAsInts[], const size_t count) +int NextUnicode(const UniChar unicodes[], UnicodeScalarValue *codePoint, const size_t index, const size_t limit) { + if (index >= limit) { + return 0; + } + UniChar unicode = unicodes[index]; + UniChar nextUnicode = (index+1) < limit ? unicodes[index+1] : 0; + bool surrogatePair = unicode >= HI_SURROGATE_START && unicode <= HI_SURROGATE_END + && nextUnicode >= LO_SURROGATE_START && nextUnicode <= LO_SURROGATE_END; + *codePoint = surrogatePair ? (((int)(unicode - HI_SURROGATE_START)) << 10) + + nextUnicode - LO_SURROGATE_START + 0x10000 : unicode; + return surrogatePair ? 2 : 1; +} + +void GetFontsAndGlyphsForCharacters(CTFontRef font, CTFontRef fallbackBase, + const UniChar unicodes[], CGGlyph glyphs[], jint glyphsAsInts[], + CTFontRef actualFonts[], const size_t count) { - CTFontGetGlyphsForCharacters((CTFontRef)font->fFont, unicodes, glyphs, count); + CTFontGetGlyphsForCharacters(font, unicodes, glyphs, count); + if (!fallbackBase) fallbackBase = font; + size_t i, size; + for (i = 0; i < count; i += size) { + UnicodeScalarValue codePoint, variationCodePoint; + int codePointSize = size = NextUnicode(unicodes, &codePoint, i, count); + if (size == 0) { + break; + } - size_t i; - for (i = 0; i < count; i++) { - UniChar unicode = unicodes[i]; - UniChar nextUnicode = (i+1) < count ? unicodes[i+1] : 0; - bool surrogatePair = unicode >= HI_SURROGATE_START && unicode <= HI_SURROGATE_END - && nextUnicode >= LO_SURROGATE_START && nextUnicode <= LO_SURROGATE_END; + int variationSize = NextUnicode(unicodes, &variationCodePoint, i + size , count); + bool hasVariationSelector = variationSize > 0 && + ((variationCodePoint >= VSS_START && variationCodePoint <= VSS_END) || + (variationCodePoint >= VS_START && variationCodePoint <= VS_END)); + if (hasVariationSelector) { + size += variationSize; + } CGGlyph glyph = glyphs[i]; - if (glyph > 0) { + if (glyph > 0 && (!hasVariationSelector || glyphs[i + codePointSize] > 0)) { glyphsAsInts[i] = glyph; - if (surrogatePair) i++; + if (actualFonts) actualFonts[i] = nil; continue; } - const CTFontRef fallback = JRSFontCreateFallbackFontForCharacters((CTFontRef)font->fFont, &unicodes[i], - surrogatePair ? 2 : 1); + CTFontRef fallback = JRSFontCreateFallbackFontForCharacters(fallbackBase, &unicodes[i], size); if (fallback) { - CTFontGetGlyphsForCharacters(fallback, &unicodes[i], &glyphs[i], surrogatePair ? 2 : 1); + CTFontGetGlyphsForCharacters(fallback, &unicodes[i], &glyphs[i], size); glyph = glyphs[i]; - CFRelease(fallback); + } else if (hasVariationSelector) { // Try without variation selector + fallback = JRSFontCreateFallbackFontForCharacters(fallbackBase, &unicodes[i], codePointSize); + if (fallback) { + CTFontGetGlyphsForCharacters(fallback, &unicodes[i], &glyphs[i], codePointSize); + glyph = glyphs[i]; + } + } + if (actualFonts && glyph > 0) { + actualFonts[i] = fallback; + } else { + if (actualFonts) actualFonts[i] = nil; + if (fallback) CFRelease(fallback); } if (glyph > 0) { - int codePoint = surrogatePair ? (((int)(unicode - HI_SURROGATE_START)) << 10) - + nextUnicode - LO_SURROGATE_START + 0x10000 : unicode; glyphsAsInts[i] = -codePoint; // set the glyph code to the negative unicode value } else { glyphsAsInts[i] = 0; // CoreText couldn't find a glyph for this character either } - if (surrogatePair) i++; } } +/* + * Transform Unicode characters into glyphs. + * + * Fills the "glyphsAsInts" array with the glyph codes for the current font, + * or the negative unicode value if we know the character can be hot-substituted. + * + * This is the heart of "Universal Font Substitution" in Java. + */ +void CTS_GetGlyphsAsIntsForCharacters +(const AWTFont *font, const UniChar unicodes[], CGGlyph glyphs[], jint glyphsAsInts[], const size_t count) +{ + GetFontsAndGlyphsForCharacters((CTFontRef)font->fFont, (CTFontRef)font->fFallbackBase, + unicodes, glyphs, glyphsAsInts, NULL, count); +} + +/* + * Returns glyph code for a given Unicode character. + * Names of the corresponding substituted font are also returned if substitution is performed. + */ +CGGlyph CTS_CopyGlyphAndFontNamesForCodePoint +(const AWTFont *font, const UnicodeScalarValue codePoint, const UnicodeScalarValue variationSelector, CFStringRef fontNames[]) +{ + CTFontRef fontRef = (CTFontRef)font->fFont; + CTFontRef fallbackBase = (CTFontRef)font->fFallbackBase; + int codePointSize = CTS_GetUnicodeSize(codePoint); + int count = codePointSize + (variationSelector == 0 ? 0 : CTS_GetUnicodeSize(variationSelector)); + UTF16Char unicodes[count]; + if (codePoint < 0x10000) { + unicodes[0] = (UTF16Char)codePoint; + } else { + CTS_BreakupUnicodeIntoSurrogatePairs(codePoint, unicodes); + } + if (variationSelector != 0) { + UTF16Char* codes = &unicodes[codePointSize]; + if (variationSelector < 0x10000) { + codes[0] = (UTF16Char)variationSelector; + } else { + CTS_BreakupUnicodeIntoSurrogatePairs(variationSelector, codes); + } + } + CGGlyph glyphs[count]; + jint glyphsAsInts[count]; + CTFontRef actualFonts[count]; + GetFontsAndGlyphsForCharacters(fontRef, fallbackBase, unicodes, glyphs, glyphsAsInts, actualFonts, count); + CGGlyph glyph = glyphs[0]; + bool substitutionHappened = glyphsAsInts[0] < 0; + if (glyph > 0 && substitutionHappened) { + CTFontRef actualFont = actualFonts[0]; + CFStringRef fontName = nil, familyName = nil; + if (actualFont) { + fontName = CTFontCopyPostScriptName(actualFont); + familyName = CTFontCopyFamilyName(actualFont); + CFRelease(actualFont); + } + fontNames[0] = fontName; + fontNames[1] = familyName; + if (!fontName || !familyName) glyph = 0; + } + return glyph; +} + /* * Translates a Unicode into a CGGlyph/CTFontRef pair * Returns the substituted font, and places the appropriate glyph into "glyphRef" */ CTFontRef CTS_CopyCTFallbackFontAndGlyphForUnicode (const AWTFont *font, const UTF16Char *charRef, CGGlyph *glyphRef, int count) { - CTFontRef fallback = JRSFontCreateFallbackFontForCharacters((CTFontRef)font->fFont, charRef, count); + CTFontRef primary = (CTFontRef)font->fFont; + CTFontRef fallbackBase = (CTFontRef)font->fFallbackBase; + if (fallbackBase) { + CTFontGetGlyphsForCharacters(primary, charRef, glyphRef, count); + if (glyphRef[0] > 0) { + CFRetain(primary); + return primary; + } + } else { + fallbackBase = primary; + } + CTFontRef fallback = JRSFontCreateFallbackFontForCharacters(fallbackBase, charRef, count); if (fallback == NULL) { // use the original font if we somehow got duped into trying to fallback something we can't @@ -190,3 +284,7 @@ void CTS_BreakupUnicodeIntoSurrogatePairs(int uniChar, UTF16Char charRef[]) { charRef[0] = high_surrogate; charRef[1] = low_surrogate; } + +int CTS_GetUnicodeSize(const UnicodeScalarValue unicode) { + return unicode >= 0x10000 ? 2 : 1; +} diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.h index bec085f93db9..cc488651448e 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.h @@ -86,7 +86,8 @@ isAA:(jboolean)isAA; - (id _Nonnull)getTextEncoder:(const BMTLSDOps * _Nonnull)dstOps - isSrcOpaque:(bool)isSrcOpaque; + isSrcOpaque:(bool)isSrcOpaque + gammaCorrection:(bool)gmc; // Base method to obtain any MTLRenderCommandEncoder - (id _Nonnull) getEncoder:(id _Nonnull)dest diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.m index 95374d2c93e5..d21b36f19a69 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.m @@ -42,7 +42,7 @@ - (void)dealloc; - (void)reset:(id)destination isAA:(jboolean)isAA - isText:(jboolean)isText + isGMCText:(jboolean)isGMCText isLCD:(jboolean)isLCD; - (void)updateEncoder:(id)encoder @@ -50,7 +50,6 @@ - (void)updateEncoder:(id)encoder renderOptions:(const RenderOptions *)renderOptions forceUpdate:(jboolean)forceUpdate; @property (assign) jboolean aa; -@property (assign) jboolean text; @property (assign) jboolean lcd; @property (assign) jboolean aaShader; @property (retain) MTLPaint* paint; @@ -64,7 +63,7 @@ @implementation EncoderStates { id _destination; jboolean _isAA; - jboolean _isText; + jboolean _isGMCText; jboolean _isLCD; jboolean _isAAShader; @@ -90,7 +89,6 @@ @implementation EncoderStates { MTLTransform * _transform; } @synthesize aa = _isAA; -@synthesize text = _isText; @synthesize lcd = _isLCD; @synthesize aaShader = _isAAShader; @synthesize paint = _paint; @@ -121,11 +119,11 @@ - (void)setContext:(MTLContext * _Nonnull)mtlc { - (void)reset:(id)destination isAA:(jboolean)isAA - isText:(jboolean)isText + isGMCText:(jboolean)isGMCText isLCD:(jboolean)isLCD { _destination = destination; _isAA = isAA; - _isText = isText; + _isGMCText = isGMCText; _isLCD = isLCD; // NOTE: probably it's better to invalidate/reset all cached states now } @@ -175,7 +173,7 @@ - (void)updatePipelineState:(id)encoder && (_isTexture == renderOptions->isTexture && (!renderOptions->isTexture || _interpolationMode == renderOptions->interpolation)) // interpolation is used only in texture mode && _isAA == renderOptions->isAA && _isAAShader == renderOptions->isAAShader - && _isText == renderOptions->isText + && _isGMCText == renderOptions->isGMCText && _isLCD == renderOptions->isLCD && _srcFlags.isOpaque == renderOptions->srcFlags.isOpaque && _srcFlags.isPremultiplied == renderOptions->srcFlags.isPremultiplied) return; @@ -186,7 +184,7 @@ - (void)updatePipelineState:(id)encoder _interpolationMode = renderOptions->interpolation; _isAA = renderOptions->isAA; _isAAShader = renderOptions->isAAShader; - _isText = renderOptions->isText; + _isGMCText = renderOptions->isGMCText; _isLCD = renderOptions->isLCD; _srcFlags = renderOptions->srcFlags; @@ -345,10 +343,11 @@ - (void)setContext:(MTLContex * _Nonnull)mtlc { } - (id _Nonnull) getTextEncoder:(const BMTLSDOps * _Nonnull)dstOps - isSrcOpaque:(bool)isSrcOpaque + isSrcOpaque:(bool)isSrcOpaque + gammaCorrection:(bool)gmc { RenderOptions roptions = {JNI_TRUE, JNI_FALSE, INTERPOLATION_NEAREST_NEIGHBOR, { isSrcOpaque, JNI_TRUE }, - JNI_TRUE, JNI_FALSE, JNI_FALSE}; + gmc, JNI_FALSE, JNI_FALSE}; return [self getEncoder:dstOps->pTexture renderOptions:&roptions]; } @@ -432,7 +431,7 @@ - (void)setContext:(MTLContex * _Nonnull)mtlc { [_encoderStates reset:dest isAA:renderOptions->isAA - isText:renderOptions->isText + isGMCText:renderOptions->isGMCText isLCD:renderOptions->isLCD]; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m index 6c91f6a6a13d..0bfff8ad7f48 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -235,14 +235,8 @@ static void fillSwizzleUniforms(struct SwizzleUniforms *uniforms, const MTLRaste toTexture:dest destinationSlice:0 destinationLevel:0 destinationOrigin:MTLOriginMake(dx1, dy1, 0)]; [blitEncoder endEncoding]; - [mtlc.encoderManager endEncoder]; - - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; + + [mtlc commitCommandBuffer:NO display:NO]; } } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m index 3919d97c53ad..c15a8ac11903 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,15 +174,7 @@ - (void)endShapeClip:(BMTLSDOps *)dstOps context:(MTLContext *)mtlc { // Complete the rendering to the stencil buffer ------------ [mtlc.encoderManager endEncoder]; - - MTLCommandBufferWrapper* cbWrapper = [mtlc pullCommandBufferWrapper]; - - id commandBuffer = [cbWrapper getCommandBuffer]; - [commandBuffer addCompletedHandler:^(id c) { - [cbWrapper release]; - }]; - - [commandBuffer commit]; + [mtlc commitCommandBuffer:NO display:NO]; _stencilMaskGenerationInProgress = NO; _stencilMaskGenerationStarted = NO; _dstOps = dstOps; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.h index d684f983eeb3..3ab5b418ef06 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,8 +39,10 @@ #include "MTLClip.h" #include "EncoderManager.h" #include "MTLSamplerManager.h" +#import "MTLGlyphCache.h" @class MTLStencilManager; +@class MTLLayer; // Constant from // https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf @@ -67,9 +69,20 @@ @property (readonly) MTLTransform * transform; @property (readonly) MTLClip * clip; +/** + * There are two separate glyph caches: for AA and for LCD. + * Once one of them is initialized as either GRAY or LCD, it + * stays in that mode for the duration of the MTLContext (it is not safe + * to use this one glyph cache for all screens in a multi-monitor + * environment) + */ +@property (readonly) MTLGlyphCache *glyphCacheLCD; +@property (readonly) MTLGlyphCache *glyphCacheAA; + @property jint textureFunction; @property jboolean vertexCacheEnabled; @property jboolean aaEnabled; +@property jboolean useMaskColor; @property (readonly, strong) id device; @property (strong) id commandQueue; @@ -93,7 +106,7 @@ */ + (MTLContext*) setSurfacesEnv:(JNIEnv*)env src:(jlong)pSrc dst:(jlong)pDst; -- (id)initWithDevice:(id)d shadersLib:(NSString*)shadersLib; +- (id)initWithDevice:(jint)displayID shadersLib:(NSString*)shadersLib; - (void)dealloc; /** @@ -229,6 +242,9 @@ - (id)createCommandBuffer; - (id)createBlitCommandBuffer; +- (void)commitCommandBuffer:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay; +- (void)startRedraw:(MTLLayer*)layer; +- (void)stopRedraw:(MTLLayer*)layer; @end /** diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m index b88d60957f39..005512f79c68 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ */ #include +#import #include "sun_java2d_SunGraphics2D.h" @@ -33,8 +34,19 @@ #import "MTLSamplerManager.h" #import "MTLStencilManager.h" +// Keep displaylink thread alive for KEEP_ALIVE_COUNT more times +// to avoid multiple start/stop displaylink operations. It speeds up +// scenarios with multiple subsequent updates. +#define KEEP_ALIVE_COUNT 4 + +// Amount of blit operations per update to make sure that everything is +// rendered into the window drawable. It does not slow things down as we +// use separate command queue for blitting. +#define REDRAW_COUNT 1 extern jboolean MTLSD_InitMTLWindow(JNIEnv *env, MTLSDOps *mtlsdo); +extern BOOL isDisplaySyncEnabled(); +extern BOOL MTLLayer_isExtraRedrawEnabled(); static struct TxtVertex verts[PGRAM_VERTEX_COUNT] = { {{-1.0, 1.0}, {0.0, 0.0}}, @@ -104,34 +116,44 @@ - (void) dealloc { @end + @implementation MTLContext { MTLCommandBufferWrapper * _commandBufferWrapper; + CVDisplayLinkRef _displayLink; + NSMutableSet* _layers; + int _displayLinkCount; MTLComposite * _composite; MTLPaint * _paint; MTLTransform * _transform; MTLTransform * _tempTransform; MTLClip * _clip; - NSObject* _bufImgOp; // TODO: pass as parameter of IsoBlit + NSObject* _bufImgOp; // TODO: pass as parameter of IsoBlit EncoderManager * _encoderManager; MTLSamplerManager * _samplerManager; MTLStencilManager * _stencilManager; } @synthesize textureFunction, - vertexCacheEnabled, aaEnabled, device, pipelineStateStorage, + vertexCacheEnabled, aaEnabled, useMaskColor, + device, pipelineStateStorage, commandQueue, blitCommandQueue, vertexBuffer, texturePool, paint=_paint, encoderManager=_encoderManager, samplerManager=_samplerManager, stencilManager=_stencilManager; extern void initSamplers(id device); -- (id)initWithDevice:(id)d shadersLib:(NSString*)shadersLib { +- (id)initWithDevice:(jint)displayID shadersLib:(NSString*)shadersLib { self = [super init]; if (self) { // Initialization code here. - device = d; + device = CGDirectDisplayCopyCurrentMetalDevice(displayID); + if (device == nil) { + J2dRlsTraceLn1(J2D_TRACE_ERROR, "MTLContext.initWithDevice(): Cannot create device from displayID=%d", + displayID); + return nil; + } pipelineStateStorage = [[MTLPipelineStatesStorage alloc] initWithDevice:device shaderLibPath:shadersLib]; if (pipelineStateStorage == nil) { @@ -162,6 +184,14 @@ - (id)initWithDevice:(id)d shadersLib:(NSString*)shadersLib { blitCommandQueue = [device newCommandQueue]; _tempTransform = [[MTLTransform alloc] init]; + if (isDisplaySyncEnabled()) { + _layers = [[NSMutableSet alloc] init]; + _displayLinkCount = 0; + CVDisplayLinkCreateWithCGDisplay(displayID, &_displayLink); + CVDisplayLinkSetOutputCallback(_displayLink, &mtlDisplayLinkCallback, (__bridge void *) self); + } + _glyphCacheLCD = [[MTLGlyphCache alloc] initWithContext:self]; + _glyphCacheAA = [[MTLGlyphCache alloc] initWithContext:self]; } return self; } @@ -172,6 +202,9 @@ - (void)dealloc { // TODO : Check that texturePool is completely released. // texturePool content is released in MTLCommandBufferWrapper.onComplete() //self.texturePool = nil; + [_glyphCacheLCD release]; + [_glyphCacheAA release]; + self.vertexBuffer = nil; self.commandQueue = nil; self.blitCommandQueue = nil; @@ -217,6 +250,20 @@ - (void)dealloc { _clip = nil; } + if (_layers != nil) { + [_layers release]; + _layers = nil; + } + + if (_displayLink != NULL) { + if (CVDisplayLinkIsRunning(_displayLink)) { + CVDisplayLinkStop(_displayLink); + J2dTraceLn1(J2D_TRACE_VERBOSE, "MTLContext_CVDisplayLinkStop: ctx=%p", self); + } + CVDisplayLinkRelease(_displayLink); + _displayLink = NULL; + } + [super dealloc]; } @@ -489,4 +536,91 @@ -(NSObject*)getBufImgOp { return _bufImgOp; } +- (void)commitCommandBuffer:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay { + [self.encoderManager endEncoder]; + BMTLSDOps *dstOps = MTLRenderQueue_GetCurrentDestination(); + MTLLayer *layer = nil; + if (dstOps != NULL) { + MTLSDOps *dstMTLOps = (MTLSDOps *) dstOps->privOps; + layer = (MTLLayer *) dstMTLOps->layer; + } + + if (layer != nil) { + [layer commitCommandBuffer:self wait:waitUntilCompleted display:updateDisplay]; + } else { + MTLCommandBufferWrapper * cbwrapper = [self pullCommandBufferWrapper]; + if (cbwrapper != nil) { + id commandbuf =[cbwrapper getCommandBuffer]; + [commandbuf addCompletedHandler:^(id commandbuf) { + [cbwrapper release]; + }]; + [commandbuf commit]; + if (waitUntilCompleted) { + [commandbuf waitUntilCompleted]; + } + } + } +} + +- (void) redraw { + AWT_ASSERT_APPKIT_THREAD; + for (MTLLayer *layer in _layers) { + [layer setNeedsDisplay]; + } + if (_displayLinkCount > 0) { + _displayLinkCount--; + } else { + if (_layers.count > 0) { + [_layers removeAllObjects]; + } + if (CVDisplayLinkIsRunning(_displayLink)) { + CVDisplayLinkStop(_displayLink); + J2dTraceLn1(J2D_TRACE_VERBOSE, "MTLContext_CVDisplayLinkStop: ctx=%p", self); + } + } +} + +CVReturn mtlDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext) +{ + J2dTraceLn1(J2D_TRACE_VERBOSE, "MTLContext_mtlDisplayLinkCallback: ctx=%p", displayLinkContext); + @autoreleasepool { + MTLContext *ctx = (__bridge MTLContext *)displayLinkContext; + [ctx performSelectorOnMainThread:@selector(redraw) withObject:nil waitUntilDone:NO]; + } + return kCVReturnSuccess; +} + +- (void)startRedraw:(MTLLayer*)layer { + AWT_ASSERT_APPKIT_THREAD; + layer.redrawCount = REDRAW_COUNT; + J2dTraceLn2(J2D_TRACE_VERBOSE, "MTLContext_startRedraw: ctx=%p layer=%p", self, layer); + _displayLinkCount = KEEP_ALIVE_COUNT; + [_layers addObject:layer]; + if (MTLLayer_isExtraRedrawEnabled()) { + // Request for redraw before starting display link to avoid rendering problem on M2 processor + [layer setNeedsDisplay]; + } + if (_displayLink != NULL && !CVDisplayLinkIsRunning(_displayLink)) { + CVDisplayLinkStart(_displayLink); + J2dTraceLn1(J2D_TRACE_VERBOSE, "MTLContext_CVDisplayLinkStart: ctx=%p", self); + } +} + +- (void)stopRedraw:(MTLLayer*) layer { + AWT_ASSERT_APPKIT_THREAD; + J2dTraceLn2(J2D_TRACE_VERBOSE, "MTLContext_stopRedraw: ctx=%p layer=%p", self, layer); + if (_displayLink != nil) { + if (--layer.redrawCount <= 0) { + [_layers removeObject:layer]; + layer.redrawCount = 0; + } + if (_layers.count == 0 && _displayLinkCount == 0) { + if (CVDisplayLinkIsRunning(_displayLink)) { + CVDisplayLinkStop(_displayLink); + J2dTraceLn1(J2D_TRACE_VERBOSE, "MTLContext_CVDisplayLinkStop: ctx=%p", self); + } + } + } +} + @end diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.h index 316a040ab810..1cc67ff97af0 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.h @@ -33,14 +33,17 @@ extern "C" { #include "jni.h" #include "fontscalerdefs.h" #import +@class MTLContext; -typedef void (MTLFlushFunc)(); +typedef void (MTLFlushFunc)(MTLContext* mtlc); typedef struct _MTLCacheCellInfo MTLCacheCellInfo; typedef struct { - CacheCellInfo *head; - CacheCellInfo *tail; + MTLContext* mtlc; + id encoder; + MTLCacheCellInfo *head; + MTLCacheCellInfo *tail; id texture; jint width; jint height; @@ -57,6 +60,9 @@ struct _MTLCacheCellInfo { // REMIND: find better name? // next cell info in the glyph's cell list (next Glyph Cache Info) MTLCacheCellInfo *nextGCI; + // Glyph subimage ID, used to distinguish between different images + // Only makes sense when subpixel resolution is enabled for the glyph + jint glyphSubimage; jint timesRendered; jint x; jint y; @@ -70,27 +76,29 @@ struct _MTLCacheCellInfo { jfloat ty2; }; -MTLGlyphCacheInfo * -MTLGlyphCache_Init(jint width, jint height, - jint cellWidth, jint cellHeight, - MTLFlushFunc *func); -MTLCacheCellInfo * -MTLGlyphCache_AddGlyph(MTLGlyphCacheInfo *cache, struct GlyphInfo *glyph); -bool -MTLGlyphCache_IsCacheFull(MTLGlyphCacheInfo *cache, GlyphInfo *glyph); -void -MTLGlyphCache_Invalidate(MTLGlyphCacheInfo *cache); void MTLGlyphCache_AddCellInfo(struct GlyphInfo *glyph, MTLCacheCellInfo *cellInfo); void MTLGlyphCache_RemoveCellInfo(struct GlyphInfo *glyph, MTLCacheCellInfo *cellInfo); -MTLCacheCellInfo * -MTLGlyphCache_GetCellInfoForCache(struct GlyphInfo *glyph, - MTLGlyphCacheInfo *cache); -JNIEXPORT void -MTLGlyphCache_RemoveAllCellInfos(struct GlyphInfo *glyph); -void -MTLGlyphCache_Free(MTLGlyphCacheInfo *cache); + +@interface MTLGlyphCache : NSObject +- (id)initWithContext:(MTLContext*)ctx; +- (void) dealloc; +- (BOOL) glyphCacheInitWidth:(jint)width + height:(jint)height + cellWidth:(jint)cellWidth + cellHeight:(jint)cellHeight + pixelFormat:(NSUInteger)pixelFormat + func:(MTLFlushFunc*)func; +- (MTLCacheCellInfo*) addGlyph:(GlyphInfo*)glyph; +- (BOOL) isCacheFull:(GlyphInfo*)glyph; +- (void) invalidate; +- (void) free; + +@property (readwrite) MTLGlyphCacheInfo *cacheInfo; + +@end + #ifdef __cplusplus } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.m index 474bdd9af65d..4808092dbd46 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGlyphCache.m @@ -27,6 +27,7 @@ #include "jni.h" #include "MTLGlyphCache.h" #include "Trace.h" +#import "MTLContext.h" /** * When the cache is full, we will try to reuse the cache cells that have @@ -35,6 +36,19 @@ */ #define TIMES_RENDERED_THRESHOLD 5 +@implementation MTLGlyphCache { + MTLContext* _ctx; +} + +- (id) initWithContext:(MTLContext*) ctx { + self = [super init]; + if (self) { + _ctx = ctx; + _cacheInfo = NULL; + } + return self; +} + /** * Creates a new GlyphCacheInfo structure, fills in the initial values, and * then returns a pointer to the GlyphCacheInfo record. @@ -59,31 +73,40 @@ * for retrieving cell info for the glyph, but instead just use the struct's * field directly. */ -MTLGlyphCacheInfo * -MTLGlyphCache_Init(jint width, jint height, - jint cellWidth, jint cellHeight, - MTLFlushFunc *func) -{ - MTLGlyphCacheInfo *gcinfo; - J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache_Init"); +- (BOOL) glyphCacheInitWidth:(jint)width + height:(jint)height + cellWidth:(jint)cellWidth + cellHeight:(jint)cellHeight + pixelFormat:(NSUInteger)pixelFormat + func:(MTLFlushFunc *)func +{ + J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache.glyphCacheInitWidth"); - gcinfo = (MTLGlyphCacheInfo *)malloc(sizeof(MTLGlyphCacheInfo)); - if (gcinfo == NULL) { + _cacheInfo = (MTLGlyphCacheInfo *)malloc(sizeof(MTLGlyphCacheInfo)); + if (_cacheInfo == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, - "MTLGlyphCache_Init: could not allocate MTLGlyphCacheInfo"); - return NULL; + "MTLGlyphCache.glyphCacheInitWidth: could not allocate MTLGlyphCacheInfo"); + return NO; } - gcinfo->head = NULL; - gcinfo->tail = NULL; - gcinfo->width = width; - gcinfo->height = height; - gcinfo->cellWidth = cellWidth; - gcinfo->cellHeight = cellHeight; - gcinfo->Flush = func; - - return gcinfo; + _cacheInfo->head = NULL; + _cacheInfo->tail = NULL; + _cacheInfo->width = width; + _cacheInfo->height = height; + _cacheInfo->cellWidth = cellWidth; + _cacheInfo->cellHeight = cellHeight; + _cacheInfo->Flush = func; + _cacheInfo->mtlc = _ctx; + _cacheInfo->encoder = nil; + MTLTextureDescriptor *textureDescriptor = + [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:pixelFormat + width:width + height:height + mipmapped:NO]; + _cacheInfo->texture = [_ctx.device newTextureWithDescriptor:textureDescriptor]; + + return YES; } /** @@ -102,32 +125,31 @@ * Returns created cell info if it was successfully created and added to the * cache and glyph's cell lists, NULL otherwise. */ -MTLCacheCellInfo * -MTLGlyphCache_AddGlyph(MTLGlyphCacheInfo *cache, GlyphInfo *glyph) +- (MTLCacheCellInfo*) addGlyph:(GlyphInfo*) glyph { MTLCacheCellInfo *cellinfo = NULL; jint w = glyph->width; jint h = glyph->height; - J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache_AddGlyph"); + J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache.addGlyph"); - if ((glyph->width > cache->cellWidth) || - (glyph->height > cache->cellHeight)) + if ((glyph->width > _cacheInfo->cellWidth) || + (glyph->height > _cacheInfo->cellHeight)) { return NULL; } jint x, y; - if (cache->head == NULL) { + if (_cacheInfo->head == NULL) { x = 0; y = 0; } else { - x = cache->tail->x + cache->cellWidth; - y = cache->tail->y; - if ((x + cache->cellWidth) > cache->width) { + x = _cacheInfo->tail->x + _cacheInfo->cellWidth; + y = _cacheInfo->tail->y; + if ((x + _cacheInfo->cellWidth) > _cacheInfo->width) { x = 0; - y += cache->cellHeight; + y += _cacheInfo->cellHeight; } } @@ -138,28 +160,29 @@ return NULL; } - cellinfo->cacheInfo = cache; + cellinfo->cacheInfo = _cacheInfo; cellinfo->glyphInfo = glyph; + cellinfo->glyphSubimage = 0; cellinfo->timesRendered = 0; cellinfo->x = x; cellinfo->y = y; cellinfo->leftOff = 0; cellinfo->rightOff = 0; - cellinfo->tx1 = (jfloat)cellinfo->x / cache->width; - cellinfo->ty1 = (jfloat)cellinfo->y / cache->height; - cellinfo->tx2 = cellinfo->tx1 + ((jfloat)w / cache->width); - cellinfo->ty2 = cellinfo->ty1 + ((jfloat)h / cache->height); + cellinfo->tx1 = (jfloat)cellinfo->x / _cacheInfo->width; + cellinfo->ty1 = (jfloat)cellinfo->y / _cacheInfo->height; + cellinfo->tx2 = cellinfo->tx1 + ((jfloat)w / _cacheInfo->width); + cellinfo->ty2 = cellinfo->ty1 + ((jfloat)h / _cacheInfo->height); - if (cache->head == NULL) { + if (_cacheInfo->head == NULL) { // initialize the head cell - cache->head = cellinfo; + _cacheInfo->head = cellinfo; } else { // update existing tail cell - cache->tail->next = cellinfo; + _cacheInfo->tail->next = cellinfo; } // add the new cell to the end of the list - cache->tail = cellinfo; + _cacheInfo->tail = cellinfo; cellinfo->next = NULL; cellinfo->nextGCI = NULL; @@ -168,99 +191,69 @@ return cellinfo; } - -bool -MTLGlyphCache_IsCacheFull(MTLGlyphCacheInfo *cache, GlyphInfo *glyph) +- (BOOL) isCacheFull:(GlyphInfo*) glyph { jint w = glyph->width; jint h = glyph->height; - J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache_IsCacheFull"); + J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache.isCacheFull"); jint x, y; - if (cache->head == NULL) { + if (_cacheInfo->head == NULL) { return JNI_FALSE; } else { - x = cache->tail->x + cache->cellWidth; - y = cache->tail->y; - if ((x + cache->cellWidth) > cache->width) { + x = _cacheInfo->tail->x + _cacheInfo->cellWidth; + y = _cacheInfo->tail->y; + if ((x + _cacheInfo->cellWidth) > _cacheInfo->width) { x = 0; - y += cache->cellHeight; - if ((y + cache->cellHeight) > cache->height) { + y += _cacheInfo->cellHeight; + if ((y + _cacheInfo->cellHeight) > _cacheInfo->height) { return JNI_TRUE; } } } return JNI_FALSE; } -/** - * Invalidates all cells in the cache. Note that this method does not - * attempt to compact the cache in any way; it just invalidates any cells - * that already exist. - */ -void -MTLGlyphCache_Invalidate(MTLGlyphCacheInfo *cache) -{ - MTLCacheCellInfo *cellinfo; - - J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache_Invalidate"); - - if (cache == NULL) { - return; - } - - // flush any pending vertices that may be depending on the current - // glyph cache layout - if (cache->Flush != NULL) { - cache->Flush(); - } - - cellinfo = cache->head; - while (cellinfo != NULL) { - if (cellinfo->glyphInfo != NULL) { - // if the cell is occupied, notify the base glyph that its - // cached version for this cache is about to be invalidated - MTLGlyphCache_RemoveCellInfo(cellinfo->glyphInfo, cellinfo); - } - cellinfo = cellinfo->next; - } -} /** * Invalidates and frees all cells and the cache itself. The "cache" pointer * becomes invalid after this function returns. */ -void -MTLGlyphCache_Free(MTLGlyphCacheInfo *cache) +- (void) free { - MTLCacheCellInfo *cellinfo; - - J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache_Free"); - - if (cache == NULL) { + J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache.free"); + if (_cacheInfo == NULL) { return; } // flush any pending vertices that may be depending on the current // glyph cache - if (cache->Flush != NULL) { - cache->Flush(); + if (_cacheInfo->Flush != NULL) { + _cacheInfo->Flush(_cacheInfo->mtlc); } + [_cacheInfo->texture release]; - while (cache->head != NULL) { - cellinfo = cache->head; + while (_cacheInfo->head != NULL) { + MTLCacheCellInfo *cellinfo = _cacheInfo->head; if (cellinfo->glyphInfo != NULL) { // if the cell is occupied, notify the base glyph that its // cached version for this cache is about to be invalidated MTLGlyphCache_RemoveCellInfo(cellinfo->glyphInfo, cellinfo); } - cache->head = cellinfo->next; + _cacheInfo->head = cellinfo->next; free(cellinfo); } - free(cache); + free(_cacheInfo); + _cacheInfo = NULL; } +- (void) dealloc { + [self free]; + [super dealloc]; +} + +@end /** * Add cell info to the head of the glyph's list of cached cells. */ @@ -308,57 +301,4 @@ J2dTraceLn2(J2D_TRACE_WARNING, "MTLGlyphCache_RemoveCellInfo: "\ "no cell 0x%x in glyph 0x%x's cell list", cellInfo, glyph); -} - -/** - * Removes cell info from the glyph's list of cached cells. - */ -JNIEXPORT void -MTLGlyphCache_RemoveAllCellInfos(GlyphInfo *glyph) -{ - MTLCacheCellInfo *currCell, *prevCell; - - J2dTraceLn(J2D_TRACE_INFO, "MTLGlyphCache_RemoveAllCellInfos"); - - if (glyph == NULL || glyph->cellInfo == NULL) { - return; - } - - // invalidate all of this glyph's accelerated cache cells - currCell = glyph->cellInfo; - do { - currCell->glyphInfo = NULL; - prevCell = currCell; - currCell = currCell->nextGCI; - prevCell->nextGCI = NULL; - } while (currCell != NULL); - - glyph->cellInfo = NULL; -} - -/** - * Returns cell info associated with particular cache from the glyph's list of - * cached cells. - */ -MTLCacheCellInfo * -MTLGlyphCache_GetCellInfoForCache(GlyphInfo *glyph, MTLGlyphCacheInfo *cache) -{ - // assert (glyph != NULL && cache != NULL) - J2dTraceLn(J2D_TRACE_VERBOSE2, "MTLGlyphCache_GetCellInfoForCache"); - - if (glyph->cellInfo != NULL) { - MTLCacheCellInfo *cellInfo = glyph->cellInfo; - do { - if (cellInfo->cacheInfo == cache) { - J2dTraceLn3(J2D_TRACE_VERBOSE2, - " glyph 0x%x: found cell 0x%x for cache 0x%x", - glyph, cellInfo, cache); - return cellInfo; - } - cellInfo = cellInfo->nextGCI; - } while (cellInfo != NULL); - } - J2dTraceLn2(J2D_TRACE_VERBOSE2, " glyph 0x%x: no cell for cache 0x%x", - glyph, cache); - return NULL; -} +} \ No newline at end of file diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGraphicsConfig.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGraphicsConfig.m index 7b165a668b3a..c34730642bb6 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGraphicsConfig.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLGraphicsConfig.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,53 +37,25 @@ MTLGC_DestroyMTLGraphicsConfig(jlong pConfigInfo) { J2dTraceLn(J2D_TRACE_INFO, "MTLGC_DestroyMTLGraphicsConfig"); - - MTLGraphicsConfigInfo *mtlinfo = - (MTLGraphicsConfigInfo *)jlong_to_ptr(pConfigInfo); + JNI_COCOA_ENTER(env); + __block MTLGraphicsConfigInfo *mtlinfo = (MTLGraphicsConfigInfo *)jlong_to_ptr(pConfigInfo); if (mtlinfo == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, "MTLGC_DestroyMTLGraphicsConfig: info is null"); return; } - - MTLContext *mtlc = (MTLContext*)mtlinfo->context; - if (mtlc != NULL) { - [mtlinfo->context release]; - mtlinfo->context = nil; - } - free(mtlinfo); -} - -JNIEXPORT jboolean JNICALL -Java_sun_java2d_metal_MTLGraphicsConfig_tryLoadMetalLibrary - (JNIEnv *env, jclass mtlgc, jint displayID, jstring shadersLibName) -{ - __block jboolean ret = JNI_FALSE; - -JNI_COCOA_ENTER(env); - - __block NSString* path = NormalizedPathNSStringFromJavaString(env, shadersLibName); - - [ThreadUtilities performOnMainThreadWaiting:YES block:^() { - - id device = CGDirectDisplayCopyCurrentMetalDevice(displayID); - if (device != nil) { - NSError* error = nil; - id lib = [device newLibraryWithFile:path error:&error]; - if (lib != nil) { - ret = JNI_TRUE; - } else { - J2dRlsTraceLn(J2D_TRACE_ERROR, "MTLGraphicsConfig_tryLoadMetalLibrary - Failed to load Metal shader library."); - } - } else { - J2dRlsTraceLn(J2D_TRACE_ERROR, "MTLGraphicsConfig_tryLoadMetalLibrary - Failed to create MTLDevice."); + __block MTLContext *mtlc = (MTLContext*)mtlinfo->context; + mtlinfo->context = nil; + [ThreadUtilities performOnMainThreadWaiting:NO block:^() { + if (mtlc != NULL) { + [mtlc release]; } + free(mtlinfo); }]; - -JNI_COCOA_EXIT(env); - return ret; + JNI_COCOA_EXIT(env); } + /** * Determines whether the Metal pipeline can be used for a given screen number and * shader library path. A MTLContext is created and the native MTLGraphicsConfigInfo @@ -96,7 +68,6 @@ Java_sun_java2d_metal_MTLGraphicsConfig_getMTLConfigInfo (JNIEnv *env, jclass mtlgc, jint displayID, jstring mtlShadersLib) { - __block MTLContext* mtlc = nil; __block MTLGraphicsConfigInfo* mtlinfo = nil; JNI_COCOA_ENTER(env); @@ -105,7 +76,7 @@ [ThreadUtilities performOnMainThreadWaiting:YES block:^() { - mtlc = [[MTLContext alloc] initWithDevice:CGDirectDisplayCopyCurrentMetalDevice(displayID) + MTLContext* mtlc = [[MTLContext alloc] initWithDevice:displayID shadersLib:path]; if (mtlc != 0L) { // create the MTLGraphicsConfigInfo record for this context diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.h index 83e868b37b71..8cdd342480f4 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,31 +31,16 @@ #import "common.h" @interface MTLLayer : CAMetalLayer -{ -@private - jobject javaLayer; - - // intermediate buffer, used the RQ lock to synchronize - MTLContext* ctx; - float bufferWidth; - float bufferHeight; - id buffer; - int nextDrawableCount; - int topInset; - int leftInset; - CVDisplayLinkRef displayLink; -} @property (nonatomic) jobject javaLayer; @property (readwrite, assign) MTLContext* ctx; -@property (readwrite, assign) float bufferWidth; -@property (readwrite, assign) float bufferHeight; -@property (readwrite, assign) id buffer; -@property (readwrite, assign) int nextDrawableCount; +@property (readwrite, assign) id* buffer; +@property (readwrite, assign) id* outBuffer; +@property (readwrite, atomic) int nextDrawableCount; @property (readwrite, assign) int topInset; @property (readwrite, assign) int leftInset; -@property (readwrite, assign) CVDisplayLinkRef displayLink; -@property (readwrite, atomic) int displayLinkCount; +@property (readwrite, atomic) int redrawCount; +@property (readwrite, atomic) NSTimeInterval avgBlitFrameTime; - (id) initWithJavaLayer:(jobject)layer; @@ -68,9 +53,11 @@ DY2:(jfloat)dy2; - (void) blitCallback; - (void) display; -- (void) redraw; -- (void) startDisplayLink; -- (void) stopDisplayLink; +- (void) startRedraw; +- (void) startRedrawIfNeeded; +- (void) stopRedraw:(BOOL)force; +- (void) flushBuffer; +- (void) commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay; @end #endif /* MTLLayer_h_Included */ diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.m index d7d75f16966c..6dd1ac620197 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,34 +23,98 @@ * questions. */ +#import +#import "PropertiesUtilities.h" #import "MTLGraphicsConfig.h" #import "MTLLayer.h" #import "ThreadUtilities.h" #import "LWCToolkit.h" #import "MTLSurfaceData.h" #import "JNIUtilities.h" -#define KEEP_ALIVE_INC 4 -@implementation MTLLayer +#define MAX_DRAWABLE 3 +#define LAST_DRAWABLE (MAX_DRAWABLE - 1) + +const NSTimeInterval DF_BLIT_FRAME_TIME=1.0/120.0; + +BOOL isDisplaySyncEnabled() { + static int syncEnabled = -1; + if (syncEnabled == -1) { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + if (env == NULL) return NO; + NSString *syncEnabledProp = [PropertiesUtilities javaSystemPropertyForKey:@"sun.java2d.metal.displaySync" + withEnv:env]; + syncEnabled = [@"false" isCaseInsensitiveLike:syncEnabledProp] ? NO : YES; + J2dRlsTraceLn1(J2D_TRACE_INFO, "MTLLayer_isDisplaySyncEnabled: %d", syncEnabled); + } + return (BOOL)syncEnabled; +} + +BOOL isColorMatchingEnabled() { + static int colorMatchingEnabled = -1; + if (colorMatchingEnabled == -1) { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + if (env == NULL) return NO; + NSString *colorMatchingEnabledProp = [PropertiesUtilities javaSystemPropertyForKey:@"sun.java2d.metal.colorMatching" + withEnv:env]; + colorMatchingEnabled = [@"false" isCaseInsensitiveLike:colorMatchingEnabledProp] ? NO : YES; + J2dRlsTraceLn1(J2D_TRACE_INFO, "MTLLayer_isColorMatchingEnabled: %d", colorMatchingEnabled); + } + return (BOOL)colorMatchingEnabled; +} + +BOOL MTLLayer_isM2CPU() { + static int m2CPU = -1; + if (m2CPU == -1) { + char cpuBrandDefaultStr[16]; + char *cpuBrand = cpuBrandDefaultStr; + size_t len; + sysctlbyname("machdep.cpu.brand_string", NULL, &len, NULL, 0); + if (len >= sizeof(cpuBrandDefaultStr)) { + cpuBrand = malloc(len); + } + sysctlbyname("machdep.cpu.brand_string", cpuBrand, &len, NULL, 0); + m2CPU = strstr(cpuBrand, "M2") != NULL; + J2dRlsTraceLn2(J2D_TRACE_INFO, "MTLLayer_isM2CPU: %d (%s)", m2CPU, cpuBrand); -@synthesize javaLayer; -@synthesize ctx; -@synthesize bufferWidth; -@synthesize bufferHeight; -@synthesize buffer; -@synthesize topInset; -@synthesize leftInset; -@synthesize nextDrawableCount; -@synthesize displayLink; -@synthesize displayLinkCount; - -- (void) createDisplayLink { - CVDisplayLinkCreateWithActiveCGDisplays(&displayLink); - CVDisplayLinkSetOutputCallback(displayLink, &displayLinkCallback, (__bridge void*)self); - self.displayLinkCount = 0; + if (cpuBrand != cpuBrandDefaultStr) { + free(cpuBrand); + } + } + return m2CPU; } +BOOL MTLLayer_isSpansDisplays() { + static int spansDisplays = -1; + if (spansDisplays == -1) { + NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; + NSDictionary *spaces = [defaults persistentDomainForName:@"com.apple.spaces"]; + spansDisplays = [(NSNumber*)[spaces valueForKey:@"spans-displays"] intValue]; + J2dRlsTraceLn1(J2D_TRACE_INFO, "MTLLayer_isSpansDisplays: %d", spansDisplays); + } + return spansDisplays; +} + +BOOL MTLLayer_isExtraRedrawEnabled() { + static int redrawEnabled = -1; + if (redrawEnabled == -1) { + JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; + if (env == NULL) return NO; + NSString *syncEnabledProp = [PropertiesUtilities javaSystemPropertyForKey:@"sun.java2d.metal.extraRedraw" + withEnv:env]; + redrawEnabled = [@"false" isCaseInsensitiveLike:syncEnabledProp] ? NO : -1; + if (redrawEnabled == -1) { + redrawEnabled = [@"true" isCaseInsensitiveLike:syncEnabledProp] ? + YES : MTLLayer_isSpansDisplays() && MTLLayer_isM2CPU(); + } + J2dRlsTraceLn1(J2D_TRACE_INFO, "MTLLayer_isExtraRedrawEnabled: %d", redrawEnabled); + } + return (BOOL)redrawEnabled; +} + +@implementation MTLLayer + - (id) initWithJavaLayer:(jobject)layer { AWT_ASSERT_APPKIT_THREAD; @@ -77,118 +141,121 @@ - (id) initWithJavaLayer:(jobject)layer [actions release]; self.topInset = 0; self.leftInset = 0; + + // Validation with MTL_DEBUG_LAYER=1 environment variable + // prohibits blit operations on to the drawable texture + // obtained from a MTLLayer with framebufferOnly=YES self.framebufferOnly = NO; self.nextDrawableCount = 0; self.opaque = YES; - [self createDisplayLink]; - - [[[NSWorkspace sharedWorkspace] notificationCenter] - addObserver : self - selector : @selector(onScreenSleep) - name : NSWorkspaceScreensDidSleepNotification object: NULL]; - - [[[NSWorkspace sharedWorkspace] notificationCenter] - addObserver : self - selector : @selector(onScreenWakeup) - name : NSWorkspaceScreensDidWakeNotification object: NULL]; - + self.redrawCount = 0; + if (@available(macOS 10.13, *)) { + self.displaySyncEnabled = isDisplaySyncEnabled(); + } + if (@available(macOS 10.13.2, *)) { + self.maximumDrawableCount = MAX_DRAWABLE; + } + self.presentsWithTransaction = NO; + self.avgBlitFrameTime = DF_BLIT_FRAME_TIME; return self; } -- (void) onScreenSleep { - J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.onScreenSleep --- received screen sleep notification."); - - [self stopDisplayLink]; -} - -- (void) onScreenWakeup { - J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.onScreenWakeup --- received screen wakeup notification."); - [self stopDisplayLink]; - CVDisplayLinkRelease(self.displayLink); - self.displayLink = nil; - - [self createDisplayLink]; - - [self startDisplayLink]; -} - - (void) blitTexture { - if (self.ctx == NULL || self.javaLayer == NULL || self.buffer == nil || self.ctx.device == nil) { + if (self.ctx == NULL || self.javaLayer == NULL || self.buffer == NULL || *self.buffer == nil || + self.ctx.device == nil) + { J2dTraceLn4(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: uninitialized (mtlc=%p, javaLayer=%p, buffer=%p, device=%p)", self.ctx, - self.javaLayer, self.buffer, ctx.device); - [self stopDisplayLink]; + self.javaLayer, self.buffer, self.ctx.device); + [self stopRedraw:YES]; return; } - if (self.nextDrawableCount != 0) { + if (self.nextDrawableCount >= LAST_DRAWABLE) { + if (!isDisplaySyncEnabled()) { + [self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; + } return; } + + // Perform blit: + [self stopRedraw:NO]; + @autoreleasepool { - if ((self.buffer.width == 0) || (self.buffer.height == 0)) { + if (((*self.buffer).width == 0) || ((*self.buffer).height == 0)) { J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: cannot create drawable of size 0"); - [self stopDisplayLink]; return; } NSUInteger src_x = self.leftInset * self.contentsScale; NSUInteger src_y = self.topInset * self.contentsScale; - NSUInteger src_w = self.buffer.width - src_x; - NSUInteger src_h = self.buffer.height - src_y; + NSUInteger src_w = (*self.buffer).width - src_x; + NSUInteger src_h = (*self.buffer).height - src_y; if (src_h <= 0 || src_w <= 0) { J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: Invalid src width or height."); - [self stopDisplayLink]; return; } id commandBuf = [self.ctx createBlitCommandBuffer]; if (commandBuf == nil) { J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: commandBuf is null"); - [self stopDisplayLink]; return; } id mtlDrawable = [self nextDrawable]; if (mtlDrawable == nil) { J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: nextDrawable is null)"); - [self stopDisplayLink]; return; } + // increment used drawables: self.nextDrawableCount++; - id blitEncoder = [commandBuf blitCommandEncoder]; [blitEncoder - copyFromTexture:self.buffer sourceSlice:0 sourceLevel:0 + copyFromTexture:(isDisplaySyncEnabled()) ? (*self.buffer) : (*self.outBuffer) + sourceSlice:0 sourceLevel:0 sourceOrigin:MTLOriginMake(src_x, src_y, 0) sourceSize:MTLSizeMake(src_w, src_h, 1) - toTexture:mtlDrawable.texture destinationSlice:0 destinationLevel:0 destinationOrigin:MTLOriginMake(0, 0, 0)]; + toTexture:mtlDrawable.texture destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; [blitEncoder endEncoding]; - [commandBuf presentDrawable:mtlDrawable]; - [commandBuf addCompletedHandler:^(id commandBuf) { + if (isDisplaySyncEnabled()) { + [commandBuf presentDrawable:mtlDrawable]; + } else { + if (@available(macOS 10.15.4, *)) { + [commandBuf presentDrawable:mtlDrawable afterMinimumDuration:self.avgBlitFrameTime]; + } else { + [commandBuf presentDrawable:mtlDrawable]; + } + } + + [self retain]; + [commandBuf addCompletedHandler:^(id commandbuf) { + // free drawable: self.nextDrawableCount--; + + if (@available(macOS 10.15.4, *)) { + if (!isDisplaySyncEnabled()) { + // Exponential smoothing on elapsed time: + const NSTimeInterval gpuTime = commandbuf.GPUEndTime - commandbuf.GPUStartTime; + const NSTimeInterval a = 0.25; + self.avgBlitFrameTime = gpuTime * a + self.avgBlitFrameTime * (1.0 - a); + } + } + [self release]; }]; [commandBuf commit]; - - if (--self.displayLinkCount <= 0) { - self.displayLinkCount = 0; - [self stopDisplayLink]; - } } } - (void) dealloc { - - [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self]; - JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; (*env)->DeleteWeakGlobalRef(env, self.javaLayer); self.javaLayer = nil; - [self stopDisplayLink]; - CVDisplayLinkRelease(self.displayLink); - self.displayLink = nil; + [self stopRedraw:YES]; + self.buffer = NULL; [super dealloc]; } @@ -215,34 +282,88 @@ - (void) display { [super display]; } -- (void) redraw { +- (void)startRedrawIfNeeded { AWT_ASSERT_APPKIT_THREAD; - [self setNeedsDisplay]; + if (isDisplaySyncEnabled()) { + if (self.redrawCount == 0) { + [self.ctx startRedraw:self]; + } + } } -- (void) startDisplayLink { - if (!CVDisplayLinkIsRunning(self.displayLink)) { - CVDisplayLinkStart(self.displayLink); - J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer_startDisplayLink"); +- (void)startRedraw { + if (isDisplaySyncEnabled()) { + if (self.ctx != nil) { + [self.ctx performSelectorOnMainThread:@selector(startRedraw:) withObject:self waitUntilDone:NO]; + } + } else { + [self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; } - displayLinkCount += KEEP_ALIVE_INC; // Keep alive displaylink counter } -- (void) stopDisplayLink { - if (CVDisplayLinkIsRunning(self.displayLink)) { - CVDisplayLinkStop(self.displayLink); - J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer_stopDisplayLink"); +- (void)stopRedraw:(BOOL)force { + if (isDisplaySyncEnabled()) { + if (force) { + self.redrawCount = 0; + } + if (self.ctx != nil) { + [self.ctx performSelectorOnMainThread:@selector(stopRedraw:) withObject:self waitUntilDone:NO]; + } + } +} +- (void) flushBuffer { + if (self.ctx == nil || self.buffer == NULL) { + return; } + // Copy the rendered texture to the output buffer (blit later) using the render command queue: + id commandbuf = [self.ctx createCommandBuffer]; + id blitEncoder = [commandbuf blitCommandEncoder]; + [blitEncoder + copyFromTexture:(*self.buffer) sourceSlice:0 sourceLevel:0 + sourceOrigin:MTLOriginMake(0, 0, 0) + sourceSize:MTLSizeMake((*self.buffer).width, (*self.buffer).height, 1) + toTexture:(*self.outBuffer) destinationSlice:0 destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [blitEncoder endEncoding]; + [self retain]; + [commandbuf addCompletedHandler:^(id commandbuf) { + [self startRedraw]; + [self release]; + }]; + [commandbuf commit]; } -CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext) -{ - J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer_displayLinkCallback() called"); - @autoreleasepool { - MTLLayer *layer = (__bridge MTLLayer *)displayLinkContext; - [layer performSelectorOnMainThread:@selector(redraw) withObject:nil waitUntilDone:NO]; +- (void)commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay { + MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; + + if (cbwrapper != nil) { + id commandbuf = [cbwrapper getCommandBuffer]; + + [self retain]; + [commandbuf addCompletedHandler:^(id commandBuf) { + [cbwrapper release]; + if (updateDisplay && isDisplaySyncEnabled()) { + // Ensure layer will be redrawn asap to display new content: + [self performSelectorOnMainThread:@selector(startRedrawIfNeeded) withObject:nil waitUntilDone:NO]; + } + [self release]; + }]; + + [commandbuf commit]; + + if (updateDisplay) { + if (isDisplaySyncEnabled()) { + [self startRedraw]; + } else { + [self flushBuffer]; + } + } + if (waitUntilCompleted && isDisplaySyncEnabled()) { + [commandbuf waitUntilCompleted]; + } + } else if (updateDisplay) { + [self startRedraw]; } - return kCVReturnSuccess; } @end @@ -281,19 +402,31 @@ CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* no if (surfaceData != NULL) { BMTLSDOps *bmtlsdo = (BMTLSDOps*) SurfaceData_GetOps(env, surfaceData); - layer.bufferWidth = bmtlsdo->width; - layer.bufferHeight = bmtlsdo->width; - layer.buffer = bmtlsdo->pTexture; + layer.buffer = &bmtlsdo->pTexture; + layer.outBuffer = &bmtlsdo->pOutTexture; layer.ctx = ((MTLSDOps *)bmtlsdo->privOps)->configInfo->context; layer.device = layer.ctx.device; layer.pixelFormat = MTLPixelFormatBGRA8Unorm; + + if (!isColorMatchingEnabled() && (layer.colorspace != nil)) { + J2dRlsTraceLn1(J2D_TRACE_VERBOSE, + "Java_sun_java2d_metal_MTLLayer_validate: disable color matching (colorspace was '%s')", + [(NSString *)CGColorSpaceCopyName(layer.colorspace) UTF8String]); + // disable color matching: + layer.colorspace = nil; + } + layer.drawableSize = - CGSizeMake(layer.buffer.width, - layer.buffer.height); - [layer startDisplayLink]; + CGSizeMake((*layer.buffer).width, + (*layer.buffer).height); + if (isDisplaySyncEnabled()) { + [layer startRedraw]; + } else { + [layer flushBuffer]; + } } else { layer.ctx = NULL; - [layer stopDisplayLink]; + [layer stopRedraw:YES]; } } @@ -329,9 +462,11 @@ CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* no J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer_blitTexture"); MTLLayer *layer = jlong_to_ptr(layerPtr); MTLContext * ctx = layer.ctx; - if (layer == NULL || ctx == NULL) { + if (layer == nil || ctx == nil) { J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer_blit : Layer or Context is null"); - [layer stopDisplayLink]; + if (layer != nil) { + [layer stopRedraw:YES]; + } return; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLMaskFill.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLMaskFill.m index 89fad174c1e9..d534a20d295d 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLMaskFill.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLMaskFill.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -99,13 +99,7 @@ maskoff, maskscan, masklen, mask); if (mtlc != NULL) { RESET_PREVIOUS_OP(); - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; + [mtlc commitCommandBuffer:NO display:NO]; } if (mask != NULL) { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m index 5a37fbd0c3f6..f0c5f92f7ee9 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m @@ -51,17 +51,19 @@ static MTLRenderPipelineDescriptor * templateRenderPipelineDesc = nil; static MTLRenderPipelineDescriptor * templateTexturePipelineDesc = nil; +static MTLRenderPipelineDescriptor * templateColorTexturePipelineDesc = nil; static MTLRenderPipelineDescriptor * templateAATexturePipelineDesc = nil; static MTLRenderPipelineDescriptor * templateLCDPipelineDesc = nil; static MTLRenderPipelineDescriptor * templateAAPipelineDesc = nil; static void setTxtUniforms(MTLContext *mtlc, int color, id encoder, int interpolation, bool repeat, - jfloat extraAlpha, const SurfaceRasterFlags *srcFlags, int mode); + jfloat extraAlpha, const SurfaceRasterFlags *srcFlags, int mode, + bool gmcText, bool useMaskColor); static void initTemplatePipelineDescriptors() { if (templateRenderPipelineDesc != nil && templateTexturePipelineDesc != nil && - templateAATexturePipelineDesc != nil && templateLCDPipelineDesc != nil && - templateAAPipelineDesc != nil) + templateColorTexturePipelineDesc != nil && templateAATexturePipelineDesc != nil && + templateLCDPipelineDesc != nil && templateAAPipelineDesc != nil) return; MTLVertexDescriptor *vertDesc = [[MTLVertexDescriptor new] autorelease]; @@ -96,6 +98,9 @@ static void initTemplatePipelineDescriptors() { templateAATexturePipelineDesc = [templateTexturePipelineDesc copy]; templateAATexturePipelineDesc.label = @"template_aa_texture"; + templateColorTexturePipelineDesc = [templateTexturePipelineDesc copy]; + templateColorTexturePipelineDesc.label = @"template_col_texture"; + templateLCDPipelineDesc = [MTLRenderPipelineDescriptor new]; templateLCDPipelineDesc.sampleCount = 1; templateLCDPipelineDesc.vertexDescriptor = vertDesc; @@ -212,30 +217,42 @@ - (void)setPipelineState:(id)encoder NSString *fragShader = @"frag_col"; if (renderOptions->isTexture) { + bool gmcText = NO; + bool colorBuffer = YES; vertShader = @"vert_txt"; fragShader = @"frag_txt"; - rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + rpDesc = templateTexturePipelineDesc; + if (renderOptions->isAA) { fragShader = @"aa_frag_txt"; - rpDesc = [[templateAATexturePipelineDesc copy] autorelease]; + rpDesc = templateAATexturePipelineDesc; + colorBuffer = NO; } - if (renderOptions->isText) { - fragShader = @"frag_text"; + if (renderOptions->isGMCText) { + fragShader = @"frag_gmc_text"; + gmcText = YES; + colorBuffer = NO; } if (renderOptions->isLCD) { vertShader = @"vert_txt_lcd"; fragShader = @"lcd_color"; - rpDesc = [[templateLCDPipelineDesc copy] autorelease]; + rpDesc = templateLCDPipelineDesc; + colorBuffer = NO; + } + if (colorBuffer) { + vertShader = @"vert_txt_col"; + fragShader = @"frag_txt_col"; + rpDesc = templateColorTexturePipelineDesc; } setTxtUniforms(mtlc, _color, encoder, renderOptions->interpolation, NO, [mtlc.composite getExtraAlpha], - &renderOptions->srcFlags, 1); + &renderOptions->srcFlags, 1, gmcText, colorBuffer); } else if (renderOptions->isAAShader) { vertShader = @"vert_col_aa"; fragShader = @"frag_col_aa"; - rpDesc = [[templateAAPipelineDesc copy] autorelease]; + rpDesc = templateAAPipelineDesc; } else { - rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + rpDesc = templateRenderPipelineDesc; } [MTLColorPaint setPipelineState:encoder @@ -266,17 +283,17 @@ - (void)setXorModePipelineState:(id)encoder if (renderOptions->isTexture) { vertShader = @"vert_txt_xorMode"; fragShader = @"frag_txt_xorMode"; - rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + rpDesc = templateTexturePipelineDesc; setTxtUniforms(mtlc, col, encoder, renderOptions->interpolation, NO, [mtlc.composite getExtraAlpha], - &renderOptions->srcFlags, 1); + &renderOptions->srcFlags, 1, NO, NO); [encoder setFragmentBytes:&xorColor length:sizeof(xorColor) atIndex:0]; [encoder setFragmentTexture:dstOps->pTexture atIndex:1]; } else { struct FrameUniforms uf = {RGBA_TO_V4(col)}; - rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + rpDesc = templateRenderPipelineDesc; [encoder setVertexBytes:&uf length:sizeof(uf) atIndex:FrameUniformBuffer]; [encoder setFragmentTexture:dstOps->pTexture atIndex:0]; @@ -402,9 +419,9 @@ - (void)setPipelineState:(id)encoder if (renderOptions->isTexture) { vertShader = @"vert_txt_grad"; fragShader = @"frag_txt_grad"; - rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + rpDesc = templateTexturePipelineDesc; } else { - rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + rpDesc = templateRenderPipelineDesc; } id pipelineState = [pipelineStateStorage getPipelineState:rpDesc @@ -426,7 +443,7 @@ - (void)setXorModePipelineState:(id)encoder initTemplatePipelineDescriptors(); NSString* vertShader = @"vert_grad_xorMode"; NSString* fragShader = @"frag_grad_xorMode"; - MTLRenderPipelineDescriptor *rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + MTLRenderPipelineDescriptor *rpDesc = templateRenderPipelineDesc; jint xorColor = (jint) [mtlc.composite getXorColor]; struct GradFrameUniforms uf = { @@ -530,9 +547,9 @@ - (void)setPipelineState:(id)encoder if (renderOptions->isTexture) { vertShader = @"vert_txt_grad"; fragShader = @"frag_txt_lin_grad"; - rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + rpDesc = templateTexturePipelineDesc; } else { - rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + rpDesc = templateRenderPipelineDesc; } struct LinGradFrameUniforms uf = { @@ -694,9 +711,9 @@ - (void)setPipelineState:(id)encoder if (renderOptions->isTexture) { vertShader = @"vert_txt_grad"; fragShader = @"frag_txt_rad_grad"; - rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + rpDesc = templateTexturePipelineDesc; } else { - rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + rpDesc = templateRenderPipelineDesc; } struct RadGradFrameUniforms uf = { @@ -802,15 +819,16 @@ - (void)setPipelineState:(id)encoder if (renderOptions->isTexture) { vertShader = @"vert_txt_tp"; fragShader = @"frag_txt_tp"; - rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + rpDesc = templateTexturePipelineDesc; [encoder setFragmentTexture:_paintTexture atIndex:1]; } else { - rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + rpDesc = templateRenderPipelineDesc; [encoder setFragmentTexture:_paintTexture atIndex:0]; } const SurfaceRasterFlags srcFlags = {_isOpaque, renderOptions->srcFlags.isPremultiplied}; - setTxtUniforms(mtlc, 0, encoder, renderOptions->interpolation, YES, [mtlc.composite getExtraAlpha], - &srcFlags, 0); + setTxtUniforms(mtlc, 0, encoder, + renderOptions->interpolation, YES, [mtlc.composite getExtraAlpha], + &srcFlags, 0, NO, NO); id pipelineState = [pipelineStateStorage getPipelineState:rpDesc vertexShaderId:vertShader @@ -831,7 +849,7 @@ - (void)setXorModePipelineState:(id)encoder // Texture paint XOR mode rendering uses a tile based rendering using a SW pipe (similar to OGL) NSString* vertShader = @"vert_tp_xorMode"; NSString* fragShader = @"frag_tp_xorMode"; - MTLRenderPipelineDescriptor *rpDesc = [[templateRenderPipelineDesc copy] autorelease]; + MTLRenderPipelineDescriptor *rpDesc = templateRenderPipelineDesc; jint xorColor = (jint) [mtlc.composite getXorColor]; [encoder setVertexBytes:&_anchor length:sizeof(_anchor) atIndex:FrameUniformBuffer]; @@ -892,9 +910,48 @@ - (NSString *)description { static void setTxtUniforms(MTLContext *mtlc, int color, id encoder, int interpolation, bool repeat, - jfloat extraAlpha, const SurfaceRasterFlags *srcFlags, int mode) { - struct TxtFrameUniforms uf = {RGBA_TO_V4(color), mode, srcFlags->isOpaque, extraAlpha}; - [encoder setFragmentBytes:&uf length:sizeof(uf) atIndex:FrameUniformBuffer]; + jfloat extraAlpha, const SurfaceRasterFlags *srcFlags, int mode, + bool gmcText, bool useMaskColor) +{ + if (gmcText) { + float ca = (((color) >> 24) & 0xFF)/255.0f; + float cr = (((color) >> 16) & (0xFF))/255.0f; + float cg = (((color) >> 8) & 0xFF)/255.0f; + float cb = ((color) & 0xFF)/255.0f; + // Convert from ARGB_PRE + if (ca > 0.0f) { + cr /= ca; + cg /= ca; + cb /= ca; + } + float inv_light_gamma = 1.666f; + float inv_dark_gamma = 0.333f; + float inv_light_exp = 0.454f; + float inv_dark_exp = 1.4f; + + // calculate brightness of the fragment + float b = (cr/3.0f + cg/3.0f + cb/3.0f)*ca; + + // adjust fragment coverage + float exp = inv_dark_exp*(1.0f - b) + inv_light_exp*b; + + // adjust fragment color and alpha for alpha < 1.0 + if (ca < 1.0f) { + float g = inv_dark_gamma*(1.0f - b) + inv_light_gamma*b; + cr = pow(cr, g); + cg = pow(cg, g); + cb = pow(cb, g); + ca = pow(ca, exp); + } + + struct GMCFrameUniforms uf = {{cr, cg, cb, ca}, exp}; + [encoder setFragmentBytes:&uf length:sizeof(uf) atIndex:FrameUniformBuffer]; + } else { + struct TxtFrameUniforms uf = + {RGBA_TO_V4(color), mode, srcFlags->isOpaque, extraAlpha}; + [encoder setFragmentBytes:&uf length:sizeof(uf) atIndex:FrameUniformBuffer]; + } + [mtlc setUseMaskColor: useMaskColor ? JNI_TRUE : JNI_FALSE]; [mtlc.samplerManager setSamplerWithEncoder:encoder interpolation:interpolation repeat:repeat]; } @@ -912,7 +969,7 @@ - (void)setPipelineState:(id )encoder if (renderOptions->isTexture) { NSString * vertShader = @"vert_txt"; NSString * fragShader = @"frag_txt"; - MTLRenderPipelineDescriptor* rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + MTLRenderPipelineDescriptor* rpDesc = templateTexturePipelineDesc; NSObject *bufImgOp = [mtlc getBufImgOp]; if (bufImgOp != nil) { @@ -955,8 +1012,7 @@ - (void)setPipelineState:(id )encoder } else { setTxtUniforms(mtlc, 0, encoder, renderOptions->interpolation, NO, [mtlc.composite getExtraAlpha], - &renderOptions->srcFlags, 0); - + &renderOptions->srcFlags, 0, NO, NO); } id pipelineState = [pipelineStateStorage getPipelineState:rpDesc vertexShaderId:vertShader @@ -971,7 +1027,7 @@ - (void)setPipelineState:(id )encoder context:mtlc renderOptions:renderOptions pipelineStateStorage:pipelineStateStorage - rpDesc:[[templateRenderPipelineDesc copy] autorelease] + rpDesc:templateRenderPipelineDesc vertShader:@"vert_col" fragShader:@"frag_col" color:0]; @@ -991,12 +1047,12 @@ - (void)setXorModePipelineState:(id )encoder jint xorColor = (jint) [mtlc.composite getXorColor]; NSString * vertShader = @"vert_txt_xorMode"; NSString * fragShader = @"frag_txt_xorMode"; - MTLRenderPipelineDescriptor * rpDesc = [[templateTexturePipelineDesc copy] autorelease]; + MTLRenderPipelineDescriptor * rpDesc = templateTexturePipelineDesc; const int col = 0 ^ xorColor; setTxtUniforms(mtlc, col, encoder, renderOptions->interpolation, NO, [mtlc.composite getExtraAlpha], - &renderOptions->srcFlags, 0); + &renderOptions->srcFlags, 0, NO, NO); [encoder setFragmentBytes:&xorColor length:sizeof(xorColor) atIndex: 0]; BMTLSDOps *dstOps = MTLRenderQueue_GetCurrentDestination(); @@ -1004,7 +1060,7 @@ - (void)setXorModePipelineState:(id )encoder setTxtUniforms(mtlc, 0, encoder, renderOptions->interpolation, NO, [mtlc.composite getExtraAlpha], - &renderOptions->srcFlags, 0); + &renderOptions->srcFlags, 0, NO, NO); id pipelineState = [pipelineStateStorage getPipelineState:rpDesc vertexShaderId:vertShader @@ -1019,7 +1075,7 @@ - (void)setXorModePipelineState:(id )encoder context:mtlc renderOptions:renderOptions pipelineStateStorage:pipelineStateStorage - rpDesc:[[templateRenderPipelineDesc copy] autorelease] + rpDesc:templateRenderPipelineDesc vertShader:@"vert_col" fragShader:@"frag_col" color:0]; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPipelineStatesStorage.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPipelineStatesStorage.m index 9a7862e8c263..27b3507a2d07 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPipelineStatesStorage.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPipelineStatesStorage.m @@ -255,8 +255,11 @@ - (NSPointerArray * ) getSubStates:(NSString *)vertexShaderId fragmentShader:(NS } - (void) dealloc { - [super dealloc]; [computeStates release]; + self.library = nil; + self.shaders = nil; + self.states = nil; + [super dealloc]; } @end diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.h index c81770a2bf3a..8ddec8880e3d 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.h @@ -57,6 +57,18 @@ enum { * These macros now simply delegate to the CheckPreviousOp() method. */ #define CHECK_PREVIOUS_OP(op) MTLRenderQueue_CheckPreviousOp(op) +#define IS_OUTPUT_DEST(dstOps) ((dstOps) != NULL && (dstOps)->drawableType == MTLSD_FLIP_BACKBUFFER) +#define CHECK_RENDER_DEST(dst, disp) \ + do { \ + disp = disp || IS_OUTPUT_DEST(dst); \ + } while(0) + +#define CHECK_RENDER_OP(op, dst, disp) \ + do { \ + MTLRenderQueue_CheckPreviousOp(op); \ + CHECK_RENDER_DEST(dst, disp); \ + } while(0) + #define RESET_PREVIOUS_OP() {mtlPreviousOp = MTL_OP_INIT;} /* @@ -99,7 +111,6 @@ enum { MTLContext *MTLRenderQueue_GetCurrentContext(); BMTLSDOps *MTLRenderQueue_GetCurrentDestination(); -void commitEncodedCommands(); extern jint mtlPreviousOp; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m index 257269e647f0..698100bb73a7 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m @@ -45,7 +45,7 @@ static BMTLSDOps *dstOps = NULL; jint mtlPreviousOp = MTL_OP_INIT; - +extern BOOL isDisplaySyncEnabled(); extern void MTLGC_DestroyMTLGraphicsConfig(jlong pConfigInfo); void MTLRenderQueue_CheckPreviousOp(jint op) { @@ -56,8 +56,9 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } if (op == MTL_OP_SET_COLOR) { - if (mtlPreviousOp != MTL_OP_MASK_OP) { - return; // SET_COLOR should not cause endEncoder + // MTL_OP_MASK_OP: switching from advanced paints to SET_COLOR must cause endEncoder: + if ((mtlPreviousOp != MTL_OP_MASK_OP) || (mtlc == NULL) || [mtlc useMaskColor]) { + return; } } else if (op == MTL_OP_MASK_OP) { MTLVertexCache_EnableMaskCache(mtlc, dstOps); @@ -75,6 +76,8 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { case MTL_OP_MASK_OP : MTLVertexCache_DisableMaskCache(mtlc); break; + default: + break; } if (mtlc != NULL) { @@ -83,15 +86,8 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { if (op == MTL_OP_RESET_PAINT || op == MTL_OP_SYNC || op == MTL_OP_SHAPE_CLIP_SPANS || mtlPreviousOp == MTL_OP_MASK_OP) { - MTLCommandBufferWrapper *cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; - if (op == MTL_OP_SYNC || op == MTL_OP_SHAPE_CLIP_SPANS) { - [commandbuf waitUntilCompleted]; - } + [mtlc commitCommandBuffer:(op == MTL_OP_SYNC || op == MTL_OP_SHAPE_CLIP_SPANS) + display:NO]; } } mtlPreviousOp = op; @@ -103,7 +99,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { jlong buf, jint limit) { unsigned char *b, *end; - + BOOL sync = NO; J2dTraceLn1(J2D_TRACE_INFO, "MTLRenderQueue_flushBuffer: limit=%d", limit); @@ -128,10 +124,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { // draw ops case sun_java2d_pipe_BufferedOpCodes_DRAW_LINE: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_LINE in XOR mode - Force commit earlier draw calls before DRAW_LINE."); } @@ -144,10 +140,11 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_DRAW_RECT: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_RECT in XOR mode - Force commit earlier draw calls before DRAW_RECT."); } @@ -160,7 +157,8 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_DRAW_POLY: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); + jint nPoints = NEXT_INT(b); jboolean isClosed = NEXT_BOOLEAN(b); jint transX = NEXT_INT(b); @@ -169,7 +167,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { jint *yPoints = ((jint *)b) + nPoints; if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_POLY in XOR mode - Force commit earlier draw calls before DRAW_POLY."); @@ -195,10 +193,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_DRAW_PIXEL: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_PIXEL in XOR mode - Force commit earlier draw calls before DRAW_PIXEL."); } @@ -211,10 +209,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_DRAW_SCANLINES: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_SCANLINES in XOR mode - Force commit earlier draw calls before " "DRAW_SCANLINES."); @@ -228,10 +226,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_DRAW_PARALLELOGRAM: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_PARALLELOGRAM in XOR mode - Force commit earlier draw calls before " "DRAW_PARALLELOGRAM."); @@ -255,7 +253,8 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_DRAW_AAPARALLELOGRAM: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); + jfloat x11 = NEXT_FLOAT(b); jfloat y11 = NEXT_FLOAT(b); jfloat dx21 = NEXT_FLOAT(b); @@ -276,10 +275,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { // fill ops case sun_java2d_pipe_BufferedOpCodes_FILL_RECT: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "FILL_RECT in XOR mode - Force commit earlier draw calls before FILL_RECT."); } @@ -293,10 +292,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_FILL_SPANS: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "FILL_SPANS in XOR mode - Force commit earlier draw calls before FILL_SPANS."); } @@ -308,10 +307,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_FILL_PARALLELOGRAM: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "FILL_PARALLELOGRAM in XOR mode - Force commit earlier draw calls before " "FILL_PARALLELOGRAM."); @@ -331,7 +330,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_FILL_AAPARALLELOGRAM: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); jfloat x11 = NEXT_FLOAT(b); jfloat y11 = NEXT_FLOAT(b); jfloat dx21 = NEXT_FLOAT(b); @@ -348,10 +347,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { // text-related ops case sun_java2d_pipe_BufferedOpCodes_DRAW_GLYPH_LIST: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); if ([mtlc useXORComposite]) { - commitEncodedCommands(); + [mtlc commitCommandBuffer:YES display:NO]; J2dTraceLn(J2D_TRACE_VERBOSE, "DRAW_GLYPH_LIST in XOR mode - Force commit earlier draw calls before " "DRAW_GLYPH_LIST."); @@ -391,7 +390,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { // copy-related ops case sun_java2d_pipe_BufferedOpCodes_COPY_AREA: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); jint x = NEXT_INT(b); jint y = NEXT_INT(b); jint w = NEXT_INT(b); @@ -423,6 +422,10 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { OFFSET_XFORM); jboolean isoblit = EXTRACT_BOOLEAN(packedParams, OFFSET_ISOBLIT); + + BMTLSDOps *dst = (BMTLSDOps *)jlong_to_ptr(pDst); + CHECK_RENDER_DEST(dst, sync); + if (isoblit) { MTLBlitLoops_IsoBlit(env, mtlc, pSrc, pDst, xform, hint, texture, @@ -466,7 +469,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { unsigned char *pMask = (masklen > 0) ? b : NULL; if (mtlc == nil) return; - CHECK_PREVIOUS_OP(MTL_OP_MASK_OP); + CHECK_RENDER_OP(MTL_OP_MASK_OP, dstOps, sync); MTLMaskFill_MaskFill(mtlc, dstOps, x, y, w, h, maskoff, maskscan, masklen, pMask); SKIP_BYTES(b, masklen); @@ -474,7 +477,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { } case sun_java2d_pipe_BufferedOpCodes_MASK_BLIT: { - CHECK_PREVIOUS_OP(MTL_OP_OTHER); + CHECK_RENDER_OP(MTL_OP_OTHER, dstOps, sync); jint dstx = NEXT_INT(b); jint dsty = NEXT_INT(b); jint width = NEXT_INT(b); @@ -582,13 +585,14 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { jlong pDst = NEXT_LONG(b); if (mtlc != NULL) { - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; + [mtlc.glyphCacheAA free]; + [mtlc.glyphCacheLCD free]; + if (isDisplaySyncEnabled() && IS_OUTPUT_DEST(dstOps)) { + [mtlc commitCommandBuffer:YES display:YES]; + sync = NO; + } else { + [mtlc commitCommandBuffer:NO display:NO]; + } } mtlc = [MTLContext setSurfacesEnv:env src:pSrc dst:pDst]; dstOps = (BMTLSDOps *)jlong_to_ptr(pDst); @@ -601,26 +605,18 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { MTLGraphicsConfigInfo *mtlInfo = (MTLGraphicsConfigInfo *)jlong_to_ptr(pConfigInfo); - if (mtlInfo == NULL) { + if (mtlc != NULL) { + [mtlc.glyphCacheAA free]; + [mtlc.glyphCacheLCD free]; + [mtlc commitCommandBuffer:NO display:NO]; + } + if (mtlInfo != NULL) { + mtlc = mtlInfo->context; } else { - MTLContext *newMtlc = mtlInfo->context; - if (newMtlc == NULL) { - - } else { - if (mtlc != NULL) { - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; - } - mtlc = newMtlc; - dstOps = NULL; - } + mtlc = NULL; } + dstOps = NULL; break; } case sun_java2d_pipe_BufferedOpCodes_FLUSH_SURFACE: @@ -630,7 +626,9 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { BMTLSDOps *mtlsdo = (BMTLSDOps *)jlong_to_ptr(pData); if (mtlsdo != NULL) { CONTINUE_IF_NULL(mtlc); - MTLTR_FreeGlyphCaches(); + [mtlc.glyphCacheAA free]; + [mtlc.glyphCacheLCD free]; + [mtlc commitCommandBuffer:YES display:NO]; MTLSD_Delete(env, mtlsdo); } break; @@ -654,21 +652,18 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { CHECK_PREVIOUS_OP(MTL_OP_OTHER); jlong pConfigInfo = NEXT_LONG(b); CONTINUE_IF_NULL(mtlc); - - if (mtlc != NULL) { - [mtlc.encoderManager endEncoder]; - } - + [mtlc.glyphCacheAA free]; + [mtlc.glyphCacheLCD free]; + [mtlc commitCommandBuffer:YES display:NO]; MTLGC_DestroyMTLGraphicsConfig(pConfigInfo); - mtlc = NULL; - // dstOps = NULL; break; } case sun_java2d_pipe_BufferedOpCodes_SYNC: { CHECK_PREVIOUS_OP(MTL_OP_SYNC); + sync = YES; break; } @@ -867,6 +862,20 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { break; } + case sun_java2d_pipe_BufferedOpCodes_FLUSH_BUFFER: + { + CHECK_PREVIOUS_OP(MTL_OP_OTHER); + jlong pLayerPtr = NEXT_LONG(b); + MTLLayer* layer = (MTLLayer*)pLayerPtr; + if (layer != nil) { + [layer flushBuffer]; + } else { + J2dRlsTraceLn(J2D_TRACE_ERROR, + "MTLRenderQueue_flushBuffer(FLUSH_BUFFER): MTLLayer is nil"); + } + break; + } + default: J2dRlsTraceLn1(J2D_TRACE_ERROR, "MTLRenderQueue_flushBuffer: invalid opcode=%d", opcode); @@ -878,20 +887,11 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { if (mtlPreviousOp == MTL_OP_MASK_OP) { MTLVertexCache_DisableMaskCache(mtlc); } - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; - BMTLSDOps *dstOps = MTLRenderQueue_GetCurrentDestination(); - if (dstOps != NULL) { - MTLSDOps *dstMTLOps = (MTLSDOps *)dstOps->privOps; - MTLLayer *layer = (MTLLayer*)dstMTLOps->layer; - if (layer != NULL) { - [layer startDisplayLink]; - } + + if (isDisplaySyncEnabled()) { + [mtlc commitCommandBuffer:NO display:YES]; + } else { + [mtlc commitCommandBuffer:sync display:YES]; } } RESET_PREVIOUS_OP(); @@ -916,20 +916,4 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { MTLRenderQueue_GetCurrentDestination() { return dstOps; -} - -/** - * commit earlier encoded commands - * these would be rendered to the back-buffer - which is read in shader while rendering in XOR mode - */ -void commitEncodedCommands() { - [mtlc.encoderManager endEncoder]; - - MTLCommandBufferWrapper *cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; - [commandbuf waitUntilCompleted]; -} +} \ No newline at end of file diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderer.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderer.m index 84b76f8c8f3f..d8bcf969d14e 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderer.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderer.m @@ -298,13 +298,7 @@ void MTLRenderer_DrawPoly(MTLContext *mtlc, BMTLSDOps * dstOps, xPoints, yPoints); if (mtlc != NULL) { RESET_PREVIOUS_OP(); - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; + [mtlc commitCommandBuffer:NO display:NO]; } (*env)->ReleasePrimitiveArrayCritical(env, ypointsArray, yPoints, @@ -579,6 +573,11 @@ void MTLRenderer_FillSpans(MTLContext *mtlc, BMTLSDOps * dstOps, jint spanCount, jfloat dx12, jfloat dy12, jfloat lwr21, jfloat lwr12) { + if (mtlc == NULL || dstOps == NULL || dstOps->pTexture == NULL) { + J2dRlsTraceLn2(J2D_TRACE_ERROR, "MTLRenderer_DrawParallelogram: mtlc=%p or dstOps=%p is NULL", mtlc, dstOps); + return; + } + // dx,dy for line width in the "21" and "12" directions. jfloat ldx21 = dx21 * lwr21; jfloat ldy21 = dy21 * lwr21; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceData.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceData.m index 90b77879b2a7..232d47df878c 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceData.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceData.m @@ -32,10 +32,11 @@ #import "MTLSurfaceData.h" #include "jlong.h" +extern BOOL isDisplaySyncEnabled(); jboolean MTLSD_InitMTLWindow(JNIEnv *env, BMTLSDOps *bmtlsdo); void MTLSD_SetNativeDimensions(JNIEnv *env, BMTLSDOps *bmtlsdo, jint w, jint h); -static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque, jboolean rtt, jint width, jint height) { +static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque, jint sfType, jint width, jint height) { @autoreleasepool { if (bmtlsdo == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, "MTLSurfaceData_initTexture: ops are null"); @@ -76,7 +77,11 @@ static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque textureDescriptor.usage = MTLTextureUsageUnknown; textureDescriptor.storageMode = MTLStorageModePrivate; bmtlsdo->pTexture = [ctx.device newTextureWithDescriptor: textureDescriptor]; - + if (sfType == MTLSD_FLIP_BACKBUFFER && !isDisplaySyncEnabled()) { + bmtlsdo->pOutTexture = [ctx.device newTextureWithDescriptor: textureDescriptor]; + } else { + bmtlsdo->pOutTexture = NULL; + } MTLTextureDescriptor *stencilDataDescriptor = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR8Uint width:width height:height mipmapped:NO]; stencilDataDescriptor.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead; @@ -91,9 +96,10 @@ static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque bmtlsdo->isOpaque = isOpaque; bmtlsdo->width = width; bmtlsdo->height = height; - bmtlsdo->drawableType = rtt ? MTLSD_RT_TEXTURE : MTLSD_TEXTURE; + bmtlsdo->drawableType = sfType; - J2dTraceLn6(J2D_TRACE_VERBOSE, "MTLSurfaceData_initTexture: w=%d h=%d bp=%p [tex=%p] opaque=%d rtt=%d", width, height, bmtlsdo, bmtlsdo->pTexture, isOpaque, rtt); + J2dTraceLn6(J2D_TRACE_VERBOSE, "MTLSurfaceData_initTexture: w=%d h=%d bp=%p [tex=%p] opaque=%d sfType=%d", + width, height, bmtlsdo, bmtlsdo->pTexture, isOpaque, sfType); return JNI_TRUE; } } @@ -108,7 +114,7 @@ static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque jlong pData, jboolean isOpaque, jint width, jint height ) { - if (!MTLSurfaceData_initTexture((BMTLSDOps *)pData, isOpaque, JNI_FALSE, width, height)) + if (!MTLSurfaceData_initTexture((BMTLSDOps *)pData, isOpaque, MTLSD_TEXTURE, width, height)) return JNI_FALSE; MTLSD_SetNativeDimensions(env, (BMTLSDOps *)pData, width, height); return JNI_TRUE; @@ -125,7 +131,16 @@ static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque jlong pData, jboolean isOpaque, jint width, jint height) { - if (!MTLSurfaceData_initTexture((BMTLSDOps *)pData, isOpaque, JNI_TRUE, width, height)) + if (!MTLSurfaceData_initTexture((BMTLSDOps *)pData, isOpaque, MTLSD_RT_TEXTURE, width, height)) + return JNI_FALSE; + MTLSD_SetNativeDimensions(env, (BMTLSDOps *)pData, width, height); + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_sun_java2d_metal_MTLSurfaceData_initFlipBackbuffer + (JNIEnv *env, jobject mtlsd, jlong pData, jboolean isOpaque, jint width, jint height) { + if (!MTLSurfaceData_initTexture((BMTLSDOps *)pData, isOpaque, MTLSD_FLIP_BACKBUFFER, width, height)) return JNI_FALSE; MTLSD_SetNativeDimensions(env, (BMTLSDOps *)pData, width, height); return JNI_TRUE; @@ -176,6 +191,10 @@ static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque || bmtlsdo->drawableType == MTLSD_FLIP_BACKBUFFER ) { [(NSObject *)bmtlsdo->pTexture release]; + if (bmtlsdo->pOutTexture != NULL) { + [(NSObject *)bmtlsdo->pOutTexture release]; + bmtlsdo->pOutTexture = NULL; + } [(NSObject *)bmtlsdo->pStencilTexture release]; [(NSObject *)bmtlsdo->pStencilData release]; bmtlsdo->pTexture = NULL; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceDataBase.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceDataBase.h index 261363f42e2b..bb085e898149 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceDataBase.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLSurfaceDataBase.h @@ -76,6 +76,7 @@ typedef struct { jint width; jint height; void* pTexture; + void* pOutTexture; void* pStencilData; // stencil data to be rendered to this buffer void* pStencilTexture; // stencil texture byte buffer stencil mask used in main rendering } BMTLSDOps; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.h index f521be2c1701..ea46fb4d64e9 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.h @@ -46,8 +46,6 @@ void MTLTR_EnableGlyphVertexCache(MTLContext *mtlc, BMTLSDOps *dstOps); void MTLTR_DisableGlyphVertexCache(MTLContext *mtlc); -id MTLTR_GetGlyphCacheTexture(); -void MTLTR_FreeGlyphCaches(); void MTLTR_DrawGlyphList(JNIEnv *env, MTLContext *mtlc, BMTLSDOps *dstOps, jint totalGlyphs, jboolean usePositions, diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.m index a52d32a5dea9..582954842841 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,19 +66,6 @@ } GlyphMode; static GlyphMode glyphMode = MODE_NOT_INITED; -/** - * There are two separate glyph caches: for AA and for LCD. - * Once one of them is initialized as either GRAY or LCD, it - * stays in that mode for the duration of the application. It should - * be safe to use this one glyph cache for all screens in a multimon - * environment, since the glyph cache texture is shared between all contexts, - * and (in theory) Metal drivers should be smart enough to manage that - * texture across all screens. - */ - -static MTLGlyphCacheInfo *glyphCacheLCD = NULL; -static MTLGlyphCacheInfo *glyphCacheAA = NULL; - /** * This value tracks the previous LCD rgbOrder setting, so if the rgbOrder * value has changed since the last time, it indicates that we need to @@ -98,7 +85,6 @@ static struct TxtVertex txtVertices[6]; static jint vertexCacheIndex = 0; -static id lcdCacheEncoder = nil; #define LCD_ADD_VERTEX(TX, TY, DX, DY, DZ) \ do { \ @@ -119,6 +105,11 @@ LCD_ADD_VERTEX(TX1, TY1, DX1, DY1, 0); \ } while (0) +static void MTLTR_SyncFlushGlyphVertexCache(MTLContext *mtlc) { + MTLVertexCache_FlushGlyphVertexCache(mtlc); + [mtlc commitCommandBuffer:YES display:NO]; +} + /** * Initializes the one glyph cache (texture and data structure). * If lcdCache is JNI_TRUE, the texture will contain RGB data, @@ -126,52 +117,48 @@ * as intensity values. */ static jboolean -MTLTR_InitGlyphCache(MTLContext *mtlc, jboolean lcdCache) +MTLTR_ValidateGlyphCache(MTLContext *mtlc, BMTLSDOps *dstOps, jboolean lcdCache) { J2dTraceLn(J2D_TRACE_INFO, "MTLTR_InitGlyphCache"); - // TODO : Need to verify RGB order in case of LCD - MTLPixelFormat pixelFormat = - lcdCache ? MTLPixelFormatBGRA8Unorm : MTLPixelFormatA8Unorm; - - MTLGlyphCacheInfo *gcinfo; // init glyph cache data structure - gcinfo = MTLGlyphCache_Init(MTLTR_CACHE_WIDTH, - MTLTR_CACHE_HEIGHT, - MTLTR_CACHE_CELL_WIDTH, - MTLTR_CACHE_CELL_HEIGHT, - MTLVertexCache_FlushGlyphVertexCache); - - if (gcinfo == NULL) { + MTLGlyphCache* glyphCache = (lcdCache)?mtlc.glyphCacheLCD:mtlc.glyphCacheAA; + if (glyphCache.cacheInfo == NULL && ![glyphCache glyphCacheInitWidth:MTLTR_CACHE_WIDTH + height:MTLTR_CACHE_HEIGHT + cellWidth:MTLTR_CACHE_CELL_WIDTH + cellHeight:MTLTR_CACHE_CELL_HEIGHT + pixelFormat:(lcdCache)?MTLPixelFormatBGRA8Unorm:MTLPixelFormatA8Unorm + func:MTLTR_SyncFlushGlyphVertexCache]) + { J2dRlsTraceLn(J2D_TRACE_ERROR, "MTLTR_InitGlyphCache: could not init MTL glyph cache"); return JNI_FALSE; } + glyphCache.cacheInfo->encoder = (lcdCache)? + [mtlc.encoderManager getLCDEncoder:dstOps->pTexture isSrcOpaque:YES isDstOpaque:YES]: + [mtlc.encoderManager getTextEncoder:dstOps isSrcOpaque:NO gammaCorrection:YES]; + return JNI_TRUE; +} - MTLTextureDescriptor *textureDescriptor = - [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:pixelFormat - width:MTLTR_CACHE_WIDTH - height:MTLTR_CACHE_HEIGHT - mipmapped:NO]; - - gcinfo->texture = [mtlc.device newTextureWithDescriptor:textureDescriptor]; +void +MTLTR_EnableGlyphVertexCache(MTLContext *mtlc, BMTLSDOps *dstOps) +{ + J2dTraceLn(J2D_TRACE_INFO, "MTLTR_EnableGlyphVertexCache"); - if (lcdCache) { - glyphCacheLCD = gcinfo; - } else { - glyphCacheAA = gcinfo; + if (!MTLVertexCache_InitVertexCache()) { + return; } - return JNI_TRUE; + if (!MTLTR_ValidateGlyphCache(mtlc, dstOps, JNI_FALSE)) { + return; + } } -id -MTLTR_GetGlyphCacheTexture() +void +MTLTR_DisableGlyphVertexCache(MTLContext *mtlc) { - J2dTraceLn(J2D_TRACE_INFO, "MTLTR_GetGlyphCacheTexture"); - if (glyphCacheAA != NULL) { - return glyphCacheAA->texture; - } - return NULL; + J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DisableGlyphVertexCache"); + MTLVertexCache_FlushGlyphVertexCache(mtlc); + MTLVertexCache_FreeVertexCache(); } /** @@ -180,37 +167,35 @@ */ static void MTLTR_AddToGlyphCache(GlyphInfo *glyph, MTLContext *mtlc, - jboolean lcdCache) + BMTLSDOps *dstOps, jboolean lcdCache, jint subimage) { MTLCacheCellInfo *ccinfo; - MTLGlyphCacheInfo *gcinfo; + MTLGlyphCache* gc; jint w = glyph->width; jint h = glyph->height; J2dTraceLn(J2D_TRACE_INFO, "MTLTR_AddToGlyphCache"); if (!lcdCache) { - gcinfo = glyphCacheAA; + gc = mtlc.glyphCacheAA; } else { - gcinfo = glyphCacheLCD; + gc = mtlc.glyphCacheLCD; } - if ((gcinfo == NULL) || (glyph->image == NULL)) { + if ((gc.cacheInfo == NULL) || (glyph->image == NULL)) { return; } - bool isCacheFull = MTLGlyphCache_IsCacheFull(gcinfo, glyph); - if (isCacheFull) { - MTLGlyphCache_Free(gcinfo); - if (!lcdCache) { - MTLTR_InitGlyphCache(mtlc, JNI_FALSE); - gcinfo = glyphCacheAA; + if ([gc isCacheFull:glyph]) { + if (lcdCache) { + [mtlc.glyphCacheLCD free]; + MTLTR_ValidateGlyphCache(mtlc, dstOps, lcdCache); } else { - MTLTR_InitGlyphCache(mtlc, JNI_TRUE); - gcinfo = glyphCacheLCD; + MTLTR_DisableGlyphVertexCache(mtlc); + [mtlc.glyphCacheAA free]; + MTLTR_EnableGlyphVertexCache(mtlc, dstOps); } } - MTLGlyphCache_AddGlyph(gcinfo, glyph); - ccinfo = (MTLCacheCellInfo *) glyph->cellInfo; + ccinfo = [gc addGlyph:glyph]; if (ccinfo != NULL) { // store glyph image in texture cell @@ -219,10 +204,12 @@ {w, h, 1} }; if (!lcdCache) { + ccinfo->glyphSubimage = subimage; NSUInteger bytesPerRow = 1 * w; - [gcinfo->texture replaceRegion:region + [gc.cacheInfo->texture replaceRegion:region mipmapLevel:0 - withBytes:glyph->image + withBytes:glyph->image + + (glyph->rowBytes * glyph->height) * subimage bytesPerRow:bytesPerRow]; } else { unsigned int imageBytes = w * h * 4; @@ -239,7 +226,7 @@ } NSUInteger bytesPerRow = 4 * w; - [gcinfo->texture replaceRegion:region + [gc.cacheInfo->texture replaceRegion:region mipmapLevel:0 withBytes:imageData bytesPerRow:bytesPerRow]; @@ -283,47 +270,6 @@ return JNI_TRUE; } -void -MTLTR_EnableGlyphVertexCache(MTLContext *mtlc, BMTLSDOps *dstOps) -{ -J2dTraceLn(J2D_TRACE_INFO, "MTLTR_EnableGlyphVertexCache"); - - if (!MTLVertexCache_InitVertexCache()) { - return; - } - - if (glyphCacheAA == NULL) { - if (!MTLTR_InitGlyphCache(mtlc, JNI_FALSE)) { - return; - } - } - MTLVertexCache_CreateSamplingEncoder(mtlc, dstOps); -} - -void -MTLTR_DisableGlyphVertexCache(MTLContext *mtlc) -{ - J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DisableGlyphVertexCache"); - MTLVertexCache_FlushGlyphVertexCache(); - MTLVertexCache_FreeVertexCache(); -} - -void MTLTR_FreeGlyphCaches() { - J2dTraceLn(J2D_TRACE_INFO, "MTLTR_FreeGlyphCaches : freeing glyph caches."); - - if (glyphCacheAA != NULL) { - [glyphCacheAA->texture release]; - MTLGlyphCache_Free(glyphCacheAA); - glyphCacheAA = NULL; - } - - if (glyphCacheLCD != NULL) { - [glyphCacheLCD->texture release]; - MTLGlyphCache_Free(glyphCacheLCD); - glyphCacheLCD = NULL; - } -} - static MTLPaint* storedPaint = nil; static void EnableColorGlyphPainting(MTLContext *mtlc) { @@ -338,10 +284,9 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { } static jboolean -MTLTR_DrawGrayscaleGlyphViaCache(MTLContext *mtlc, - GlyphInfo *ginfo, jint x, jint y, BMTLSDOps *dstOps) +MTLTR_DrawGrayscaleGlyphViaCache(MTLContext *mtlc, GlyphInfo *ginfo, + jint x, jint y, BMTLSDOps *dstOps, jint subimage) { - MTLCacheCellInfo *cell; jfloat x1, y1, x2, y2; if (glyphMode != MODE_USE_CACHE_GRAY) { @@ -349,7 +294,6 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { MTLVertexCache_DisableMaskCache(mtlc); } else if (glyphMode == MODE_USE_CACHE_LCD) { [mtlc.encoderManager endEncoder]; - lcdCacheEncoder = nil; } else if (glyphMode == MODE_NO_CACHE_COLOR) { DisableColorGlyphPainting(mtlc); } @@ -357,17 +301,43 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { glyphMode = MODE_USE_CACHE_GRAY; } - if (ginfo->cellInfo == NULL) { + MTLCacheCellInfo *cell; + int rx = ginfo->subpixelResolutionX; + int ry = ginfo->subpixelResolutionY; + if (subimage == 0 && ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0)) { + // Subpixel rendering disabled, there must be only one cell info + cell = (MTLCacheCellInfo *) (ginfo->cellInfo); + } else { + // Subpixel rendering enabled, find subimage in cell list + cell = NULL; + MTLCacheCellInfo *c = (MTLCacheCellInfo *) (ginfo->cellInfo); + while (c != NULL) { + if (c->glyphSubimage == subimage) { + cell = c; + break; + } + c = c->nextGCI; + } + } + + + if (cell == NULL || cell->cacheInfo->mtlc != mtlc) { + if (cell != NULL) { + MTLGlyphCache_RemoveCellInfo(cell->glyphInfo, cell); + } // attempt to add glyph to accelerated glyph cache - MTLTR_AddToGlyphCache(ginfo, mtlc, JNI_FALSE); + MTLTR_AddToGlyphCache(ginfo, mtlc, dstOps, JNI_FALSE, subimage); if (ginfo->cellInfo == NULL) { // we'll just no-op in the rare case that the cell is NULL return JNI_TRUE; } + // Our image, added to cache will be the first, so we take it. + // If for whatever reason we failed to add it to our cache, + // take first cell anyway, it's still better to render glyph + // image with wrong subpixel offset than render nothing. + cell = (MTLCacheCellInfo *) (ginfo->cellInfo); } - - cell = (MTLCacheCellInfo *) (ginfo->cellInfo); cell->timesRendered++; x1 = (jfloat)x; @@ -388,7 +358,7 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { GlyphInfo *ginfo, jint x, jint y, jboolean rgbOrder, jint contrast) { - CacheCellInfo *cell; + MTLCacheCellInfo *cell; jfloat tx1, ty1, tx2, ty2; jint w = ginfo->width; jint h = ginfo->height; @@ -402,38 +372,34 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { DisableColorGlyphPainting(mtlc); } - if (glyphCacheLCD == NULL) { - if (!MTLTR_InitGlyphCache(mtlc, JNI_TRUE)) { - return JNI_FALSE; - } - } - if (lcdCacheEncoder == nil) { - lcdCacheEncoder = [mtlc.encoderManager getLCDEncoder:dstOps->pTexture isSrcOpaque:YES isDstOpaque:YES]; - } if (rgbOrder != lastRGBOrder) { // need to invalidate the cache in this case; see comments // for lastRGBOrder above - MTLGlyphCache_Invalidate(glyphCacheLCD); + [mtlc.glyphCacheLCD free]; lastRGBOrder = rgbOrder; } + if (!MTLTR_ValidateGlyphCache(mtlc, dstOps, JNI_TRUE)) { + return JNI_FALSE; + } + glyphMode = MODE_USE_CACHE_LCD; } if (ginfo->cellInfo == NULL) { // attempt to add glyph to accelerated glyph cache // TODO : Handle RGB order - MTLTR_AddToGlyphCache(ginfo, mtlc, JNI_TRUE); + MTLTR_AddToGlyphCache(ginfo, mtlc, dstOps, JNI_TRUE, 0); if (ginfo->cellInfo == NULL) { // we'll just no-op in the rare case that the cell is NULL return JNI_TRUE; } } - cell = (CacheCellInfo *) (ginfo->cellInfo); + cell = (MTLCacheCellInfo *) (ginfo->cellInfo); cell->timesRendered++; - MTLTR_SetLCDContrast(mtlc, contrast, lcdCacheEncoder); + MTLTR_SetLCDContrast(mtlc, contrast, mtlc.glyphCacheLCD.cacheInfo->encoder); tx1 = cell->tx1; ty1 = cell->ty1; tx2 = cell->tx2; @@ -444,11 +410,11 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { LCD_ADD_TRIANGLES(tx1, ty1, tx2, ty2, x, y, x+w, y+h); - [lcdCacheEncoder setVertexBytes:txtVertices length:sizeof(txtVertices) atIndex:MeshVertexBuffer]; - [lcdCacheEncoder setFragmentTexture:glyphCacheLCD->texture atIndex:0]; - [lcdCacheEncoder setFragmentTexture:dstOps->pTexture atIndex:1]; + [mtlc.glyphCacheLCD.cacheInfo->encoder setVertexBytes:txtVertices length:sizeof(txtVertices) atIndex:MeshVertexBuffer]; + [mtlc.glyphCacheLCD.cacheInfo->encoder setFragmentTexture:mtlc.glyphCacheLCD.cacheInfo->texture atIndex:0]; + [mtlc.glyphCacheLCD.cacheInfo->encoder setFragmentTexture:dstOps->pTexture atIndex:1]; - [lcdCacheEncoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:6]; + [mtlc.glyphCacheLCD.cacheInfo->encoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:6]; vertexCacheIndex = 0; @@ -457,7 +423,7 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { static jboolean MTLTR_DrawGrayscaleGlyphNoCache(MTLContext *mtlc, - GlyphInfo *ginfo, jint x, jint y, BMTLSDOps *dstOps) + GlyphInfo *ginfo, jint x, jint y, BMTLSDOps *dstOps, jint subimage) { jint tw, th; jint sx, sy, sw, sh; @@ -471,7 +437,6 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { MTLTR_DisableGlyphVertexCache(mtlc); } else if (glyphMode == MODE_USE_CACHE_LCD) { [mtlc.encoderManager endEncoder]; - lcdCacheEncoder = nil; } else if (glyphMode == MODE_NO_CACHE_COLOR) { DisableColorGlyphPainting(mtlc); } @@ -493,7 +458,8 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { J2dTraceLn7(J2D_TRACE_INFO, "sx = %d sy = %d x = %d y = %d sw = %d sh = %d w = %d", sx, sy, x, y, sw, sh, w); MTLVertexCache_AddMaskQuad(mtlc, sx, sy, x, y, sw, sh, - w, ginfo->image, + w, ginfo->image + + (ginfo->rowBytes * ginfo->height) * subimage, dstOps); } } @@ -535,7 +501,6 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { MTLTR_DisableGlyphVertexCache(mtlc); } else if (glyphMode == MODE_USE_CACHE_LCD) { [mtlc.encoderManager endEncoder]; - lcdCacheEncoder = nil; } else if (glyphMode == MODE_NO_CACHE_COLOR) { DisableColorGlyphPainting(mtlc); } @@ -592,16 +557,7 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { [mtlc.encoderManager endEncoder]; [blitTexture release]; - MTLCommandBufferWrapper* cbwrapper = [mtlc pullCommandBufferWrapper]; - - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - - [commandbuf commit]; - [commandbuf waitUntilCompleted]; - + [mtlc commitCommandBuffer:YES display:NO]; return JNI_TRUE; } @@ -625,7 +581,6 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { MTLTR_DisableGlyphVertexCache(mtlc); } else if (glyphMode == MODE_USE_CACHE_LCD) { [mtlc.encoderManager endEncoder]; - lcdCacheEncoder = nil; } glyphMode = MODE_NO_CACHE_COLOR; EnableColorGlyphPainting(mtlc); @@ -650,9 +605,8 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { return JNI_TRUE; } -// see DrawGlyphList.c for more on this macro... -#define FLOOR_ASSIGN(l, r) \ - if ((r)<0) (l) = ((int)floor(r)); else (l) = ((int)(r)) +#define ADJUST_SUBPIXEL_GLYPH_POSITION(coord, res) \ + if ((res) > 1) (coord) += 0.5f / ((float)(res)) - 0.5f void MTLTR_DrawGlyphList(JNIEnv *env, MTLContext *mtlc, BMTLSDOps *dstOps, @@ -683,10 +637,10 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { jboolean ok; GlyphInfo *ginfo = (GlyphInfo *)jlong_to_ptr(NEXT_LONG(images)); - if (ginfo == NULL) { + if (ginfo == NULL || ginfo == (void*) -1) { // this shouldn't happen, but if it does we'll just break out... - J2dRlsTraceLn(J2D_TRACE_ERROR, - "MTLTR_DrawGlyphList: glyph info is null"); + J2dRlsTraceLn1(J2D_TRACE_ERROR, + "MTLTR_DrawGlyphList: glyph info is %d", ginfo); break; } @@ -695,17 +649,30 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { jfloat posy = NEXT_FLOAT(positions); glyphx = glyphListOrigX + posx + ginfo->topLeftX; glyphy = glyphListOrigY + posy + ginfo->topLeftY; - FLOOR_ASSIGN(x, glyphx); - FLOOR_ASSIGN(y, glyphy); } else { glyphx = glyphListOrigX + ginfo->topLeftX; glyphy = glyphListOrigY + ginfo->topLeftY; - FLOOR_ASSIGN(x, glyphx); - FLOOR_ASSIGN(y, glyphy); glyphListOrigX += ginfo->advanceX; glyphListOrigY += ginfo->advanceY; } + int rx = ginfo->subpixelResolutionX; + int ry = ginfo->subpixelResolutionY; + ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, rx); + ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ry); + float fx = floor(glyphx); + float fy = floor(glyphy); + x = (int) fx; + y = (int) fy; + int subimage; + if ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0) { + subimage = 0; + } else { + int subx = (int) ((glyphx - fx) * (float) rx); + int suby = (int) ((glyphy - fy) * (float) ry); + subimage = subx + suby * rx; + } + if (ginfo->image == NULL) { J2dTraceLn(J2D_TRACE_INFO, "Glyph image is null"); continue; @@ -713,32 +680,24 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { J2dTraceLn2(J2D_TRACE_INFO, "Glyph width = %d height = %d", ginfo->width, ginfo->height); J2dTraceLn1(J2D_TRACE_INFO, "rowBytes = %d", ginfo->rowBytes); - if (ginfo->rowBytes == ginfo->width) { + if (ginfo->format == sun_font_StrikeCache_PIXEL_FORMAT_GREYSCALE) { // grayscale or monochrome glyph data if (ginfo->width <= MTLTR_CACHE_CELL_WIDTH && ginfo->height <= MTLTR_CACHE_CELL_HEIGHT) { J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DrawGlyphList Grayscale cache"); - ok = MTLTR_DrawGrayscaleGlyphViaCache(mtlc, ginfo, x, y, dstOps); + ok = MTLTR_DrawGrayscaleGlyphViaCache(mtlc, ginfo, x, y, dstOps, subimage); } else { J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DrawGlyphList Grayscale no cache"); - ok = MTLTR_DrawGrayscaleGlyphNoCache(mtlc, ginfo, x, y, dstOps); + ok = MTLTR_DrawGrayscaleGlyphNoCache(mtlc, ginfo, x, y, dstOps, subimage); } - } else if (ginfo->rowBytes == ginfo->width * 4) { + } else if (ginfo->format == sun_font_StrikeCache_PIXEL_FORMAT_BGRA) { J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DrawGlyphList color glyph no cache"); ok = MTLTR_DrawColorGlyphNoCache(mtlc, ginfo, x, y, dstOps); flushBeforeLCD = JNI_FALSE; } else { if (!flushBeforeLCD) { - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper* cbwrapper = [mtlc pullCommandBufferWrapper]; - - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - - [commandbuf commit]; + [mtlc commitCommandBuffer:NO display:NO]; flushBeforeLCD = JNI_TRUE; } @@ -785,7 +744,6 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { MTLTR_DisableGlyphVertexCache(mtlc); } else if (glyphMode == MODE_USE_CACHE_LCD) { [mtlc.encoderManager endEncoder]; - lcdCacheEncoder = nil; } else if (glyphMode == MODE_NO_CACHE_COLOR) { DisableColorGlyphPainting(mtlc); } @@ -830,13 +788,7 @@ static void DisableColorGlyphPainting(MTLContext *mtlc) { } if (mtlc != NULL) { RESET_PREVIOUS_OP(); - [mtlc.encoderManager endEncoder]; - MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper]; - id commandbuf = [cbwrapper getCommandBuffer]; - [commandbuf addCompletedHandler:^(id commandbuf) { - [cbwrapper release]; - }]; - [commandbuf commit]; + [mtlc commitCommandBuffer:NO display:NO]; } (*env)->ReleasePrimitiveArrayCritical(env, imgArray, diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.h index b933c970ed7e..ee3ac313b630 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.h @@ -29,17 +29,32 @@ #include "MTLContext.h" #include "fontscalerdefs.h" +// Next define should exactly match to the amount +// of MTLVC_ADD_VERTEX in MTLVC_ADD_TRIANGLES +#define VERTS_FOR_A_QUAD 6 + +/** + * MTLBuffer.setVertexBytes() is limited to 4K buffer size + */ +#define MTLVC_MAX_VERTEX_SIZE 4096 + +/** + * sizeof(J2DVertex) = 2 x 2 float values = 16 bytes (aligned) + */ +#define MTLVC_SIZE_J2DVertex 16 + /** * The max size of the vertex cache. * * Note: - * This is the max number of vertices (of struct J2DVertex - 16 bytes) + * This is the max number of vertices (of struct J2DVertex) * that can be accommodated in 4KB. * * [MTLRenderCommandEncoder setVertexBytes] expects the data size * to be less than or equal to 4KB. */ -#define MTLVC_MAX_INDEX 250 +#define MTLVC_MAX_QUAD ((MTLVC_MAX_VERTEX_SIZE / MTLVC_SIZE_J2DVertex) / VERTS_FOR_A_QUAD) +#define MTLVC_MAX_INDEX (MTLVC_MAX_QUAD * VERTS_FOR_A_QUAD) /** * Constants that control the size of the texture tile cache used for @@ -50,8 +65,9 @@ #define MTLVC_MASK_CACHE_TILE_SIZE \ (MTLVC_MASK_CACHE_TILE_WIDTH * MTLVC_MASK_CACHE_TILE_HEIGHT) +/* 1 texture contains 8 x 5 = 40 tiles (~ max quad) */ #define MTLVC_MASK_CACHE_WIDTH_IN_TILES 8 -#define MTLVC_MASK_CACHE_HEIGHT_IN_TILES 4 +#define MTLVC_MASK_CACHE_HEIGHT_IN_TILES 5 #define MTLVC_MASK_CACHE_WIDTH_IN_TEXELS \ (MTLVC_MASK_CACHE_TILE_WIDTH * MTLVC_MASK_CACHE_WIDTH_IN_TILES) @@ -63,7 +79,9 @@ * operations where the mask is null. */ #define MTLVC_MASK_CACHE_MAX_INDEX \ - ((MTLVC_MASK_CACHE_WIDTH_IN_TILES * MTLVC_MASK_CACHE_HEIGHT_IN_TILES) - 1) + (MTLVC_MASK_CACHE_WIDTH_IN_TILES * MTLVC_MASK_CACHE_HEIGHT_IN_TILES) +#define MTLVC_MASK_CACHE_MAX_INDEX_RESERVED \ + (MTLVC_MASK_CACHE_MAX_INDEX - 1) #define MTLVC_MASK_CACHE_SPECIAL_TILE_X \ (MTLVC_MASK_CACHE_WIDTH_IN_TEXELS - MTLVC_MASK_CACHE_TILE_WIDTH) #define MTLVC_MASK_CACHE_SPECIAL_TILE_Y \ @@ -74,7 +92,7 @@ */ jboolean MTLVertexCache_InitVertexCache(); void MTLVertexCache_FlushVertexCache(MTLContext *mtlc); -void MTLVertexCache_FlushGlyphVertexCache(); +void MTLVertexCache_FlushGlyphVertexCache(MTLContext *mtlc); void MTLVertexCache_FreeVertexCache(); void MTLVertexCache_EnableMaskCache(MTLContext *mtlc, BMTLSDOps *dstOps); @@ -89,5 +107,5 @@ void MTLVertexCache_AddGlyphQuad(MTLContext *mtlc, jfloat tx1, jfloat ty1, jfloat tx2, jfloat ty2, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2); -void MTLVertexCache_CreateSamplingEncoder(MTLContext *mtlc, BMTLSDOps *dstOps); +void MTLVertexCache_CreateSamplingEncoder(MTLContext *mtlc, BMTLSDOps *dstOps, bool gmc); #endif /* MTLVertexCache_h_Included */ diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m index 61870120ed39..5227602bf7ed 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m @@ -30,44 +30,66 @@ #include "MTLPaints.h" #include "MTLVertexCache.h" -#include "MTLTexturePool.h" #include "MTLTextRenderer.h" -#include "common.h" typedef struct _J2DVertex { float position[2]; float txtpos[2]; } J2DVertex; +typedef struct MaskFillColor sMaskFillColor; + static J2DVertex *vertexCache = NULL; static jint vertexCacheIndex = 0; -static MTLPooledTextureHandle * maskCacheTex = NULL; +static sMaskFillColor *maskColorCache = NULL; +static jint maskColorCacheIndex = 0; + +static MTLPooledTextureHandle *maskCacheTex = nil; static jint maskCacheIndex = 0; -static id encoder = NULL; +static jint maskCacheLastIndex = MTLVC_MASK_CACHE_MAX_INDEX; +static id encoder = nil; -#define MTLVC_ADD_VERTEX(TX, TY, DX, DY, DZ) \ - do { \ +#define MTLVC_ADD_VERTEX(TX, TY, DX, DY) \ + do { \ J2DVertex *v = &vertexCache[vertexCacheIndex++]; \ - v->txtpos[0] = TX; \ - v->txtpos[1] = TY; \ - v->position[0]= DX; \ - v->position[1] = DY; \ + v->txtpos[0] = TX; \ + v->txtpos[1] = TY; \ + v->position[0] = DX; \ + v->position[1] = DY; \ } while (0) +/* + * 1 quad = 2 triangles, 6 vertices + */ #define MTLVC_ADD_TRIANGLES(TX1, TY1, TX2, TY2, DX1, DY1, DX2, DY2) \ - do { \ - MTLVC_ADD_VERTEX(TX1, TY1, DX1, DY1, 0); \ - MTLVC_ADD_VERTEX(TX2, TY1, DX2, DY1, 0); \ - MTLVC_ADD_VERTEX(TX2, TY2, DX2, DY2, 0); \ - MTLVC_ADD_VERTEX(TX2, TY2, DX2, DY2, 0); \ - MTLVC_ADD_VERTEX(TX1, TY2, DX1, DY2, 0); \ - MTLVC_ADD_VERTEX(TX1, TY1, DX1, DY1, 0); \ + do { \ + MTLVC_ADD_VERTEX(TX1, TY1, DX1, DY1); \ + MTLVC_ADD_VERTEX(TX2, TY1, DX2, DY1); \ + MTLVC_ADD_VERTEX(TX2, TY2, DX2, DY2); \ + MTLVC_ADD_VERTEX(TX2, TY2, DX2, DY2); \ + MTLVC_ADD_VERTEX(TX1, TY2, DX1, DY2); \ + MTLVC_ADD_VERTEX(TX1, TY1, DX1, DY1); \ + } while (0) + +#define RGBA_COMP 4 + +#define MTLVC_COPY_COLOR(DST, COL) \ + memcpy(DST, COL, RGBA_COMP); + +#define MTLVC_ADD_QUAD_COLOR(COL) \ + do { \ + sMaskFillColor *uf = &maskColorCache[maskColorCacheIndex++]; \ + MTLVC_COPY_COLOR(uf->color, COL); \ } while (0) -// Next define should exactly match to the amount -// of MTLVC_ADD_VERTEX in MTLVC_ADD_TRIANGLES -#define VERTS_FOR_A_QUAD 6 +#define RGBA_TO_U4(c) \ +{ \ + (unsigned char) (((c) >> 16) & 0xFF), \ + (unsigned char) (((c) >> 8) & 0xFF), \ + (unsigned char) ((c) & 0xFF), \ + (unsigned char) (((c) >> 24) & 0xFF) \ +} jboolean MTLVertexCache_InitVertexCache() @@ -76,12 +98,41 @@ if (vertexCache == NULL) { J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_InitVertexCache : vertexCache == NULL"); - vertexCache = (J2DVertex *)malloc(MTLVC_MAX_INDEX * sizeof(J2DVertex)); + + size_t len = sizeof(J2DVertex); + + if (len != MTLVC_SIZE_J2DVertex) { + J2dRlsTraceLn2(J2D_TRACE_ERROR, "MTLVertexCache_InitVertexCache : sizeof(J2DVertex) = %lu != %d bytes !", + len, MTLVC_SIZE_J2DVertex); + return JNI_FALSE; + } + + len *= MTLVC_MAX_INDEX; + + if (len > MTLVC_MAX_VERTEX_SIZE) { + J2dRlsTraceLn2(J2D_TRACE_ERROR, "MTLVertexCache_InitVertexCache : J2DVertex buffer size = %lu > %d bytes !", + len, MTLVC_MAX_VERTEX_SIZE); + return JNI_FALSE; + } + vertexCache = (J2DVertex *)malloc(len); if (vertexCache == NULL) { return JNI_FALSE; } } + if (maskColorCache == NULL) { + J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_InitVertexCache : maskColorCache == NULL"); + size_t len = MTLVC_MAX_QUAD * sizeof(sMaskFillColor); + if (len > MTLVC_MAX_VERTEX_SIZE) { + J2dRlsTraceLn2(J2D_TRACE_ERROR, "MTLVertexCache_InitVertexCache : MaskFillColor buffer size = %lu > %d bytes !", + len, MTLVC_MAX_VERTEX_SIZE); + return JNI_FALSE; + } + maskColorCache = (sMaskFillColor *)malloc(len); + if (maskColorCache == NULL) { + return JNI_FALSE; + } + } return JNI_TRUE; } @@ -91,17 +142,29 @@ J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_FlushVertexCache"); if (vertexCacheIndex > 0) { - [encoder setVertexBytes: vertexCache length:vertexCacheIndex * sizeof(J2DVertex) - atIndex:MeshVertexBuffer]; + [encoder setVertexBytes:vertexCache + length:vertexCacheIndex * MTLVC_SIZE_J2DVertex + atIndex:MeshVertexBuffer]; + + if (maskColorCacheIndex > 0) { + [encoder setVertexBytes:maskColorCache + length:maskColorCacheIndex * sizeof(sMaskFillColor) + atIndex:MaskColorBuffer]; + } + [encoder setFragmentTexture:maskCacheTex.texture atIndex:0]; - [encoder setFragmentTexture:maskCacheTex.texture atIndex: 0]; J2dTraceLn1(J2D_TRACE_INFO, - "MTLVertexCache_FlushVertexCache : encode %d characters", (vertexCacheIndex / 6)); + "MTLVertexCache_FlushVertexCache : encode %d tiles", (vertexCacheIndex / VERTS_FOR_A_QUAD)); + [encoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:vertexCacheIndex]; + + vertexCacheIndex = 0; + maskColorCacheIndex = 0; + maskCacheIndex = 0; + maskCacheLastIndex = MTLVC_MASK_CACHE_MAX_INDEX; } - vertexCacheIndex = 0; - maskCacheIndex = 0; + // register texture to be released once encoder is completed: if (maskCacheTex != nil) { [[mtlc getCommandBufferWrapper] registerPooledTexture:maskCacheTex]; [maskCacheTex release]; @@ -110,32 +173,73 @@ } void -MTLVertexCache_FlushGlyphVertexCache() +MTLVertexCache_FlushGlyphVertexCache(MTLContext *mtlc) { J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_FlushGlyphVertexCache"); - if (vertexCacheIndex > 0) { - [encoder setVertexBytes: vertexCache length:vertexCacheIndex * sizeof(J2DVertex) - atIndex:MeshVertexBuffer]; - id glyphCacheTex = MTLTR_GetGlyphCacheTexture(); - [encoder setFragmentTexture:glyphCacheTex atIndex: 0]; + if (vertexCacheIndex > 0 && mtlc.glyphCacheAA.cacheInfo != NULL) { + id gcEncoder = mtlc.glyphCacheAA.cacheInfo->encoder; + [gcEncoder setVertexBytes:vertexCache + length:vertexCacheIndex * MTLVC_SIZE_J2DVertex + atIndex:MeshVertexBuffer]; + + id glyphCacheTex = mtlc.glyphCacheAA.cacheInfo->texture; + [gcEncoder setFragmentTexture:glyphCacheTex atIndex: 0]; + J2dTraceLn1(J2D_TRACE_INFO, - "MTLVertexCache_FlushGlyphVertexCache : encode %d characters", (vertexCacheIndex / 6)); - [encoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:vertexCacheIndex]; + "MTLVertexCache_FlushGlyphVertexCache : encode %d characters", (vertexCacheIndex / VERTS_FOR_A_QUAD)); + + [gcEncoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:vertexCacheIndex]; } vertexCacheIndex = 0; } void MTLVertexCache_FreeVertexCache() { - free(vertexCache); - vertexCache = NULL; + if (vertexCache != NULL) { + free(vertexCache); + vertexCache = NULL; + } + if (maskColorCache != NULL) { + free(maskColorCache); + maskColorCache = NULL; + } +} + +static void MTLVertexCache_InitFullTile() +{ + if (maskCacheLastIndex == MTLVC_MASK_CACHE_MAX_INDEX) { + // init special fully opaque tile in the upper-right corner of + // the mask cache texture(only 1x1 pixel used) + static char tile[1]; + static char* pTile = NULL; + if (!pTile) { + tile[0] = (char)0xFF; + pTile = tile; + } + + jint texx = MTLVC_MASK_CACHE_TILE_WIDTH * (MTLVC_MASK_CACHE_WIDTH_IN_TILES - 1); + jint texy = MTLVC_MASK_CACHE_TILE_HEIGHT * (MTLVC_MASK_CACHE_HEIGHT_IN_TILES - 1); + + MTLRegion region = { + {texx, texy, 0}, + {1, 1, 1} + }; + + [maskCacheTex.texture replaceRegion:region + mipmapLevel:0 + withBytes:tile + bytesPerRow:1]; + + maskCacheLastIndex = MTLVC_MASK_CACHE_MAX_INDEX_RESERVED; + } } -static jboolean -MTLVertexCache_InitMaskCache(MTLContext *mtlc) { +static jboolean MTLVertexCache_InitMaskCache(MTLContext *mtlc) +{ J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_InitMaskCache"); - if (maskCacheTex == NULL) { + + if (maskCacheTex == nil) { maskCacheTex = [mtlc.texturePool getTexture:MTLVC_MASK_CACHE_WIDTH_IN_TEXELS height:MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS format:MTLPixelFormatA8Unorm]; @@ -145,30 +249,6 @@ void MTLVertexCache_FreeVertexCache() return JNI_FALSE; } } - // init special fully opaque tile in the upper-right corner of - // the mask cache texture - - char tile[MTLVC_MASK_CACHE_TILE_SIZE]; - memset(tile, 0xff, MTLVC_MASK_CACHE_TILE_SIZE); - - jint texx = MTLVC_MASK_CACHE_TILE_WIDTH * (MTLVC_MASK_CACHE_WIDTH_IN_TILES - 1); - - jint texy = MTLVC_MASK_CACHE_TILE_HEIGHT * (MTLVC_MASK_CACHE_HEIGHT_IN_TILES - 1); - - NSUInteger bytesPerRow = 1 * MTLVC_MASK_CACHE_TILE_WIDTH; - - MTLRegion region = { - {texx, texy, 0}, - {MTLVC_MASK_CACHE_TILE_WIDTH, MTLVC_MASK_CACHE_TILE_HEIGHT, 1} - }; - - - // do we really need this?? - [maskCacheTex.texture replaceRegion:region - mipmapLevel:0 - withBytes:tile - bytesPerRow:bytesPerRow]; - return JNI_TRUE; } @@ -177,36 +257,38 @@ void MTLVertexCache_FreeVertexCache() { J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_EnableMaskCache"); - if (!MTLVertexCache_InitVertexCache()) { - return; + if ([mtlc useMaskColor] + && ![mtlc.paint isKindOfClass:[MTLColorPaint class]]) { + // Reset useMaskColor flag for advanced paints: + [mtlc setUseMaskColor: JNI_FALSE]; } - - if (maskCacheTex == NULL) { + if (vertexCache == NULL) { + if (!MTLVertexCache_InitVertexCache()) { + return; + } + } + if (maskCacheTex == nil) { if (!MTLVertexCache_InitMaskCache(mtlc)) { return; } } - MTLVertexCache_CreateSamplingEncoder(mtlc, dstOps); + MTLVertexCache_CreateSamplingEncoder(mtlc, dstOps, NO); } void MTLVertexCache_DisableMaskCache(MTLContext *mtlc) { - // TODO : Once we enable check_previous_op - // we will start using DisableMaskCache until then - // we are force flushing vertexcache. J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_DisableMaskCache"); MTLVertexCache_FlushVertexCache(mtlc); - maskCacheIndex = 0; - free(vertexCache); - vertexCache = NULL; + MTLVertexCache_FreeVertexCache(); } void -MTLVertexCache_CreateSamplingEncoder(MTLContext *mtlc, BMTLSDOps *dstOps) { +MTLVertexCache_CreateSamplingEncoder(MTLContext *mtlc, BMTLSDOps *dstOps, bool gmc) { J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_CreateSamplingEncoder"); encoder = [mtlc.encoderManager getTextEncoder:dstOps - isSrcOpaque:NO]; + isSrcOpaque:NO + gammaCorrection:gmc]; } void @@ -226,15 +308,21 @@ void MTLVertexCache_FreeVertexCache() // MTLVC_ADD_TRIANGLES at the end of this function // will place VERTS_FOR_A_QUAD vertexes to the vertex cache // check free space and flush if needed. - if ((maskCacheIndex >= MTLVC_MASK_CACHE_MAX_INDEX) || + if ((maskCacheIndex >= maskCacheLastIndex) || ((vertexCacheIndex + VERTS_FOR_A_QUAD) >= MTLVC_MAX_INDEX)) { J2dTraceLn2(J2D_TRACE_INFO, "maskCacheIndex = %d, vertexCacheIndex = %d", maskCacheIndex, vertexCacheIndex); MTLVertexCache_FlushVertexCache(mtlc); + + // Initialize texture & encoder again + // as MTLVertexCache_FlushVertexCache cleared texture MTLVertexCache_EnableMaskCache(mtlc, dstOps); - maskCacheIndex = 0; } + static jint nextFullDx = -1; + static jint nextFullDy = -1; + bool mergeTile = NO; + if (mask != NULL) { jint texx = MTLVC_MASK_CACHE_TILE_WIDTH * (maskCacheIndex % MTLVC_MASK_CACHE_WIDTH_IN_TILES); @@ -242,8 +330,7 @@ void MTLVertexCache_FreeVertexCache() (maskCacheIndex / MTLVC_MASK_CACHE_WIDTH_IN_TILES); J2dTraceLn5(J2D_TRACE_INFO, "texx = %d texy = %d width = %d height = %d maskscan = %d", texx, texy, width, height, maskscan); - NSUInteger bytesPerRow = 1 * width; - NSUInteger slice = bytesPerRow * srcy + srcx; + NSUInteger bytesPerRow = width; MTLRegion region = { {texx, texy, 0}, {width, height, 1} @@ -260,14 +347,14 @@ void MTLVertexCache_FreeVertexCache() // adds extra blitting logic. // TODO : Research more and try removing memcpy logic. if (maskscan <= width) { - int height_offset = bytesPerRow * srcy; + NSUInteger height_offset = bytesPerRow * srcy; [maskCacheTex.texture replaceRegion:region mipmapLevel:0 withBytes:mask + height_offset bytesPerRow:bytesPerRow]; } else { int dst_offset, src_offset; - int size = 1 * width * height; + int size = width * height; char tile[size]; dst_offset = 0; for (int i = srcy; i < srcy + height; i++) { @@ -285,25 +372,86 @@ void MTLVertexCache_FreeVertexCache() tx1 = ((jfloat) texx) / MTLVC_MASK_CACHE_WIDTH_IN_TEXELS; ty1 = ((jfloat) texy) / MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS; + + tx2 = tx1 + (((jfloat)width) / MTLVC_MASK_CACHE_WIDTH_IN_TEXELS); + ty2 = ty1 + (((jfloat)height) / MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS); + + // count added masks: + maskCacheIndex++; + + // reset next Full-tile coords: + nextFullDx = -1; } else { - tx1 = ((jfloat)MTLVC_MASK_CACHE_SPECIAL_TILE_X) / - MTLVC_MASK_CACHE_WIDTH_IN_TEXELS; - ty1 = ((jfloat)MTLVC_MASK_CACHE_SPECIAL_TILE_Y) / - MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS; - } - maskCacheIndex++; + if (maskCacheLastIndex == MTLVC_MASK_CACHE_MAX_INDEX) { + MTLVertexCache_InitFullTile(); + } + // const: texture coords of full tile: + tx1 = (((jfloat)MTLVC_MASK_CACHE_SPECIAL_TILE_X) / + MTLVC_MASK_CACHE_WIDTH_IN_TEXELS); + ty1 = (((jfloat)MTLVC_MASK_CACHE_SPECIAL_TILE_Y) / + MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS); + + // const: use only 1x1 pixel: + tx2 = tx1; + ty2 = ty1; + + if ((dstx == nextFullDx) && (dsty == nextFullDy) + && (vertexCacheIndex > 0)) + { + mergeTile = YES; + } - tx2 = tx1 + (((jfloat)width) / MTLVC_MASK_CACHE_WIDTH_IN_TEXELS); - ty2 = ty1 + (((jfloat)height) / MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS); + // store next Full-tile coords: + nextFullDx = dstx + width; + nextFullDy = dsty; + } dx1 = (jfloat)dstx; dy1 = (jfloat)dsty; - dx2 = dx1 + width; - dy2 = dy1 + height; + dx2 = dx1 + (jfloat)width; + dy2 = dy1 + (jfloat)height; + + if ([mtlc useMaskColor]) { + // ColorPaint class is already checked in MTLVertexCache_EnableMaskCache: + MTLColorPaint* cPaint = (MTLColorPaint *) mtlc.paint; + jint color = cPaint.color; + + static jint lastColor = 0; + static unsigned char last_uColor[RGBA_COMP] = {0, 0, 0, 0}; + + if (color != lastColor) { + lastColor = color; + unsigned char uColor[RGBA_COMP] = RGBA_TO_U4(color); + MTLVC_COPY_COLOR(last_uColor, uColor); + // color changed, cannot merge tile: + mergeTile = NO; + } + if (!mergeTile) { + // add only 1 color per quad: + MTLVC_ADD_QUAD_COLOR(last_uColor); + } + } - J2dTraceLn8(J2D_TRACE_INFO, "tx1 = %f ty1 = %f tx2 = %f ty2 = %f dx1 = %f dy1 = %f dx2 = %f dy2 = %f", tx1, ty1, tx2, ty2, dx1, dy1, dx2, dy2); - MTLVC_ADD_TRIANGLES(tx1, ty1, tx2, ty2, - dx1, dy1, dx2, dy2); + if (mergeTile) { + // Color, Gradient & Texture paints support tile-merging: + // Fix dx2 coordinate in previous triangles: + const jint prevIndex = vertexCacheIndex - VERTS_FOR_A_QUAD; // already tested > 0 + // skip vertex 1 (dx1, dy1) + // fix vertex 2 (dx2, dy1) + J2DVertex *v = &vertexCache[prevIndex + 1]; + v->position[0] = dx2; + // fix vertex 3 (dx2, dy2) + v = &vertexCache[prevIndex + 2]; + v->position[0] = dx2; + // fix vertex 4 (dx2, dy2) + v = &vertexCache[prevIndex + 3]; + v->position[0] = dx2; + // skip vertex 5 (dx1, dy2) + // skip vertex 6 (dx1, dy1) + } else { + J2dTraceLn8(J2D_TRACE_INFO, "tx1 = %f ty1 = %f tx2 = %f ty2 = %f dx1 = %f dy1 = %f dx2 = %f dy2 = %f", tx1, ty1, tx2, ty2, dx1, dy1, dx2, dy2); + MTLVC_ADD_TRIANGLES(tx1, ty1, tx2, ty2, dx1, dy1, dx2, dy2); + } } void @@ -318,9 +466,8 @@ void MTLVertexCache_FreeVertexCache() if ((vertexCacheIndex + VERTS_FOR_A_QUAD) >= MTLVC_MAX_INDEX) { J2dTraceLn2(J2D_TRACE_INFO, "maskCacheIndex = %d, vertexCacheIndex = %d", maskCacheIndex, vertexCacheIndex); - MTLVertexCache_FlushGlyphVertexCache(); + MTLVertexCache_FlushGlyphVertexCache(mtlc); } - MTLVC_ADD_TRIANGLES(tx1, ty1, tx2, ty2, - dx1, dy1, dx2, dy2); + MTLVC_ADD_TRIANGLES(tx1, ty1, tx2, ty2, dx1, dy1, dx2, dy2); } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/RenderOptions.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/RenderOptions.h index 7e8a7b144348..adf1c91505e6 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/RenderOptions.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/RenderOptions.h @@ -35,7 +35,7 @@ typedef struct { jboolean isAA; int interpolation; SurfaceRasterFlags srcFlags; - jboolean isText; + jboolean isGMCText; jboolean isLCD; jboolean isAAShader; } RenderOptions; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/common.h b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/common.h index 70218f7e849c..e1358efde9a2 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/common.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/common.h @@ -31,6 +31,7 @@ #define PGRAM_VERTEX_COUNT 6 #define QUAD_VERTEX_COUNT 4 #define GRAD_MAX_FRACTIONS 12 +#define QUAD_VERTEX_COUNT_PER_COLOR 6 enum GradCycleMethod { GradNoCycle = 0, @@ -46,7 +47,8 @@ enum VertexAttributes { enum BufferIndex { MeshVertexBuffer = 0, FrameUniformBuffer = 1, - MatrixBuffer = 2 + MatrixBuffer = 2, + MaskColorBuffer = 3 }; struct FrameUniforms { @@ -96,6 +98,10 @@ struct TxtVertex { float txtpos[2]; }; +struct MaskFillColor { + unsigned char color[4]; +}; + struct AAVertex { float position[2]; float otxtpos[2]; @@ -156,6 +162,11 @@ struct LCDFrameUniforms { vector_float3 invgamma; }; +struct GMCFrameUniforms { + vector_float4 color; + float exp; +}; + struct SwizzleUniforms { unsigned char swizzle[4]; unsigned char hasAlpha; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/shaders.metal b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/shaders.metal index 722506ab2c33..184f8303ff35 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/shaders.metal +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/shaders.metal @@ -69,6 +69,13 @@ struct TxtShaderInOut { float2 tpCoords; }; +struct TxtColShaderInOut { + float4 position [[position]]; + float2 texCoords; + float2 tpCoords; + float4 color [[flat]]; +}; + struct LCDShaderInOut { float4 position [[position]]; float2 orig_pos; @@ -210,6 +217,19 @@ vertex TxtShaderInOut vert_txt(TxtVertexInput in [[stage_in]], constant Transfor return out; } +vertex TxtColShaderInOut vert_txt_col(TxtVertexInput in [[stage_in]], + constant TransformMatrix& transform [[buffer(MatrixBuffer)]], + const device uchar4* maskColors [[buffer(MaskColorBuffer)]], + uint vertexID [[vertex_id]]) { + TxtColShaderInOut out; + const float4 pos4 = float4(in.position, 0.0, 1.0); + out.position = transform.transformMatrix*pos4; + out.texCoords = in.texCoords; + const uint maskIdx = vertexID / QUAD_VERTEX_COUNT_PER_COLOR; // quad color index + out.color = float4(maskColors[maskIdx]) / 255.0f; + return out; +} + vertex LCDShaderInOut vert_txt_lcd(TxtVertexInput in [[stage_in]], constant TransformMatrix& transform [[buffer(MatrixBuffer)]]) { LCDShaderInOut out; float4 pos4 = float4(in.position, 0.0, 1.0); @@ -311,15 +331,29 @@ fragment half4 frag_txt( float4 pixelColor = renderTexture.sample(textureSampler, vert.texCoords); float srcA = uniforms.isSrcOpaque ? 1 : pixelColor.a; if (uniforms.mode) { - float3 c = mix(pixelColor.rgb, uniforms.color.rgb, srcA); - return half4(c.r, c.g, c.b , - (uniforms.isSrcOpaque) ? - uniforms.color.a : pixelColor.a*uniforms.color.a); + float4 in_col = uniforms.color; + float3 c = mix(pixelColor.rgb, in_col.rgb, srcA); + return half4(c.r, c.g, c.b, + (uniforms.isSrcOpaque) ? in_col.a : pixelColor.a * in_col.a); } - return half4(pixelColor.r, pixelColor.g, - pixelColor.b, srcA)*uniforms.extraAlpha; + pixelColor.b, srcA) * uniforms.extraAlpha; +} + +fragment half4 frag_txt_col( + TxtColShaderInOut vert [[stage_in]], + texture2d renderTexture [[texture(0)]], + constant TxtFrameUniforms& uniforms [[buffer(1)]], + sampler textureSampler [[sampler(0)]] +) { + float4 pixelColor = renderTexture.sample(textureSampler, vert.texCoords); + float srcA = uniforms.isSrcOpaque ? 1 : pixelColor.a; + + float4 in_col = vert.color; + float3 c = mix(pixelColor.rgb, in_col.rgb, srcA); + return half4(c.r, c.g, c.b, + (uniforms.isSrcOpaque) ? in_col.a : pixelColor.a * in_col.a); } fragment half4 frag_text( @@ -332,6 +366,20 @@ fragment half4 frag_text( return half4(uniforms.color * pixelColor.a); } +fragment half4 frag_gmc_text( + TxtShaderInOut vert [[stage_in]], + texture2d renderTexture [[texture(0)]], + constant GMCFrameUniforms& uniforms [[buffer(1)]], + sampler textureSampler [[sampler(0)]] +) { + float4 pixelColor = renderTexture.sample(textureSampler, vert.texCoords); + float a = uniforms.color.a; + float3 col = uniforms.color.rgb; + // adjust fragment coverage + float frag_cov = pow(pixelColor.a, uniforms.exp); + return half4(col.r*frag_cov*a, col.g*frag_cov*a, col.b*frag_cov*a, a*frag_cov); +} + fragment half4 frag_txt_tp(TxtShaderInOut vert [[stage_in]], texture2d renderTexture [[texture(0)]], texture2d paintTexture [[texture(1)]], diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLGraphicsConfig.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLGraphicsConfig.m index 9ffaba58c02e..425de3e94f93 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLGraphicsConfig.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLGraphicsConfig.m @@ -225,6 +225,39 @@ jint caps = CAPS_EMPTY; OGLContext_GetExtensionInfo(env, &caps); + Boolean status = false; + Boolean fontSmoothingDisabled = + CFPreferencesGetAppBooleanValue( + CFSTR("CGFontRenderingFontSmoothingDisabled"), + kCFPreferencesCurrentApplication, &status); + lcdSubPixelPosSupported = YES; + useFontSmoothing = NO; + if (status) { + if (fontSmoothingDisabled) { + J2dRlsTraceLn(J2D_TRACE_INFO, + "LCD_SHADER: disabled via macOS settings"); + caps &= ~CAPS_EXT_LCD_SHADER; + } + } else if (IS_OSX_GT10_13) { + // Adding support for "Use font smoothing when available" setting + Boolean status = false; + Boolean smoothFonts = CFPreferencesGetAppBooleanValue( + CFSTR("AppleFontSmoothing"), + kCFPreferencesCurrentApplication, + &status); + + if (!status) { + smoothFonts = YES; + } + lcdSubPixelPosSupported = !smoothFonts; + useFontSmoothing = smoothFonts; + if (!smoothFonts) { + J2dRlsTraceLn(J2D_TRACE_INFO, + "LCD_SHADER: disabled on macOS 10.14+ by default"); + caps &= ~CAPS_EXT_LCD_SHADER; + } + } + GLint value = 0; [sharedPixelFormat getValues: &value diff --git a/src/java.desktop/macosx/native/libosxapp/JNIUtilities.h b/src/java.desktop/macosx/native/libosxapp/JNIUtilities.h index 41dd4c48b75c..4a06bf34cf29 100644 --- a/src/java.desktop/macosx/native/libosxapp/JNIUtilities.h +++ b/src/java.desktop/macosx/native/libosxapp/JNIUtilities.h @@ -183,22 +183,27 @@ * or maybe a way for the app to continue running depending on the exact * nature of the problem that has been detected and how survivable it is. */ -#define CHECK_EXCEPTION() \ - if ((*env)->ExceptionOccurred(env) != NULL) { \ +#define CHECK_EXCEPTION_IN_ENV(env) { \ + jthrowable exc = (*(env))->ExceptionOccurred(env); \ + if (exc != NULL) { \ if ([NSThread isMainThread] == YES) { \ if (getenv("JNU_APPKIT_TRACE")) { \ - (*env)->ExceptionDescribe(env); \ + (*(env))->ExceptionDescribe(env); \ NSLog(@"%@",[NSThread callStackSymbols]); \ } else { \ - (*env)->ExceptionClear(env); \ + (*(env))->ExceptionClear(env); \ } \ } \ - if (getenv("JNU_NO_COCOA_EXCEPTION") == NULL) { \ - [NSException raise:NSGenericException format:@"Java Exception"]; \ + if (getenv("JNU_NO_COCOA_EXCEPTION") == NULL) {\ + [NSException raise:NSGenericException \ + format:@"%@", ThrowableToNSString(env, exc)]; \ } else { \ - (*env)->ExceptionClear(env); \ + (*(env))->ExceptionClear(env); \ } \ - }; + } \ +}; + +#define CHECK_EXCEPTION() CHECK_EXCEPTION_IN_ENV(env) #define CHECK_EXCEPTION_NULL_RETURN(x, y) \ CHECK_EXCEPTION(); \ @@ -247,4 +252,6 @@ JNIEXPORT NSString* NormalizedPathNSStringFromJavaString(JNIEnv *env, jstring pa JNIEXPORT jstring NormalizedPathJavaStringFromNSString(JNIEnv* env, NSString *str); +JNIEXPORT NSString *ThrowableToNSString(JNIEnv *env, jthrowable exc); + #endif /* __JNIUTILITIES_H */ diff --git a/src/java.desktop/macosx/native/libosxapp/JNIUtilities.m b/src/java.desktop/macosx/native/libosxapp/JNIUtilities.m index c0bab14c627d..0a633215c97b 100644 --- a/src/java.desktop/macosx/native/libosxapp/JNIUtilities.m +++ b/src/java.desktop/macosx/native/libosxapp/JNIUtilities.m @@ -113,3 +113,41 @@ jstring NormalizedPathJavaStringFromNSString(JNIEnv* env, NSString *str) { NSString *normStr = [str precomposedStringWithCanonicalMapping]; return NSStringToJavaString(env, normStr); } + +NSString *ThrowableToNSString(JNIEnv *env, jthrowable exc) { + (*env)->ExceptionClear(env); + + if (JNU_IsInstanceOfByName(env, exc, "java/lang/OutOfMemoryError")) { + static NSString* const OOMEDescr = @"OutOfMemoryError"; + return OOMEDescr; + } + + DECLARE_CLASS_RETURN(sjc_Object, "java/lang/Object", nil); + DECLARE_METHOD_RETURN(jm_toString, sjc_Object, "toString", "()Ljava/lang/String;", nil); + DECLARE_CLASS_RETURN(sjc_Throwable, "java/lang/Throwable", nil); + DECLARE_METHOD_RETURN(jm_getStackTrace, sjc_Throwable, "getStackTrace", + "()[Ljava/lang/StackTraceElement;", nil); + jobject jstr = (*env)->CallObjectMethod(env, exc, jm_toString); + + NSString* result = JavaStringToNSString(env, jstr); + + jobjectArray frames = + (jobjectArray) (*env)->CallObjectMethod(env, exc, jm_getStackTrace); + if (frames != NULL) { + jsize framesLen = (*env)->GetArrayLength(env, frames); + + for (int i = 0; i < framesLen; i++) { + jobject stackElem = (*env)->GetObjectArrayElement(env, frames, i); + jobject stackElemStr = (*env)->CallObjectMethod(env, stackElem, jm_toString); + NSString *frameStr = JavaStringToNSString(env, stackElemStr); + result = [result stringByAppendingFormat:@"\n%@", frameStr]; + (*env)->DeleteLocalRef(env, stackElem); + (*env)->DeleteLocalRef(env, stackElemStr); + } + (*env)->DeleteLocalRef(env, frames); + } + (*env)->DeleteLocalRef(env, jstr); + + return result; +} + diff --git a/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h b/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h index dae21e5024e9..813d619c6ae5 100644 --- a/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h +++ b/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h @@ -41,6 +41,7 @@ JNIEXPORT @interface NSApplicationAWT : NSApplication { - (void) waitForDummyEvent:(double) timeout; + (void) runAWTLoopWithApp:(NSApplication*)app; ++ (void)logException:(NSException *)exception forProcess:(NSProcessInfo*)processInfo; @end diff --git a/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m b/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m index b32de3adc1bc..8e315c03029c 100644 --- a/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m +++ b/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m @@ -156,6 +156,28 @@ - (void)finishLaunching } [super finishLaunching]; + + // fix for JBR-3127 Modal dialogs invoked from modal or floating dialogs are opened in full screen + [defs setBool:NO forKey:@"NSWindowAllowsImplicitFullScreen"]; + + // temporary possibility to load deprecated NSJavaVirtualMachine (just for testing) + // todo: remove when completely tested on BigSur + // see https://youtrack.jetbrains.com/issue/JBR-3127#focus=Comments-27-4684465.0-0 + NSString * loadNSJVMProp = [PropertiesUtilities + javaSystemPropertyForKey:@"apple.awt.application.instantiate.NSJavaVirtualMachine" + withEnv:env]; + if ([@"true" isCaseInsensitiveLike:loadNSJVMProp]) { + if (objc_lookUpClass("NSJavaVirtualMachine") != nil) { + NSLog(@"objc class NSJavaVirtualMachine is already registered"); + } else { + Class nsjvm = objc_allocateClassPair([NSObject class], "NSJavaVirtualMachine", 0); + objc_registerClassPair(nsjvm); + NSLog(@"registered class NSJavaVirtualMachine: %@", nsjvm); + + id nsjvmInst = [[nsjvm alloc] init]; + NSLog(@"instantiated dummy NSJavaVirtualMachine: %@", nsjvmInst); + } + } } @@ -444,6 +466,50 @@ - (void)waitForDummyEvent:(double)timeout { seenDummyEventLock = nil; } +//Provide info from unhandled ObjectiveC exceptions ++ (void)logException:(NSException *)exception forProcess:(NSProcessInfo*)processInfo { + @autoreleasepool { + NSMutableString *info = [[[NSMutableString alloc] init] autorelease]; + [info appendString: + [NSString stringWithFormat: + @"Exception in NSApplicationAWT:\n %@\n", + exception]]; + + NSArray *stack = [exception callStackSymbols]; + + for (NSUInteger i = 0; i < stack.count; i++) { + [info appendString:stack[i]]; + [info appendString:@"\n"]; + } + + NSLog(@"%@", info); + + int processID = [processInfo processIdentifier]; + NSDictionary *env = [[NSProcessInfo processInfo] environment]; + NSString *homePath = env[@"HOME"]; + if (homePath != nil) { + NSString *fileName = + [NSString stringWithFormat:@"%@/jbr_err_pid%d.log", + homePath, processID]; + + if (![[NSFileManager defaultManager] fileExistsAtPath:fileName]) { + [info writeToFile:fileName + atomically:YES + encoding:NSUTF8StringEncoding + error:NULL]; + } + } + } +} + +- (void)_crashOnException:(NSException *)exception { + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + [NSApplicationAWT logException:exception + forProcess:processInfo]; + // Use SIGILL to generate hs_err_ file as well + kill([processInfo processIdentifier], SIGILL); +} + @end diff --git a/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.h b/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.h index 24fb2f61d862..99079abb3a7e 100644 --- a/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.h +++ b/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.h @@ -127,6 +127,13 @@ do { \ __attribute__((visibility("default"))) @interface ThreadUtilities : NSObject { } /* Extend NSObject so can call performSelectorOnMainThread */ +/* + * When a blocking performSelectorOnMainThread is executed from the EventDispatch thread, + * and the executed code triggers an opposite blocking a11y call (via LWCToolkit.invokeAndWait) + * this is a deadlock case, and then this property is used to discard LWCToolkit.invokeAndWait. + */ +@property (class, nonatomic, readonly) BOOL blockingEventDispatchThread; + + (JNIEnv*)getJNIEnv; + (JNIEnv*)getJNIEnvUncached; + (void)detachCurrentThread; diff --git a/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.m b/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.m index deb179ece570..1a0aa001106e 100644 --- a/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.m +++ b/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.m @@ -50,6 +50,24 @@ static inline void attachCurrentThread(void** env) { @implementation ThreadUtilities +static BOOL _blockingEventDispatchThread = NO; +static long eventDispatchThreadPtr = (long)nil; + +static BOOL isEventDispatchThread() { + return (long)[NSThread currentThread] == eventDispatchThreadPtr; +} + +// The [blockingEventDispatchThread] property is readonly, so we implement a private setter +static void setBlockingEventDispatchThread(BOOL value) { + assert([NSThread isMainThread]); + _blockingEventDispatchThread = value; +} + ++ (BOOL) blockingEventDispatchThread { + assert([NSThread isMainThread]); + return _blockingEventDispatchThread; +} + + (void)initialize { /* All the standard modes plus ours */ javaModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, @@ -81,13 +99,6 @@ + (void)setAppkitThreadGroup:(jobject)group { appkitThreadGroup = group; } -/* This is needed because we can't directly pass a block to - * performSelectorOnMainThreadWaiting .. since it expects a selector - */ -+ (void)invokeBlock:(void (^)())block { - block(); -} - /* * When running a block where either we don't wait, or it needs to run on another thread * we need to copy it from stack to heap, use the copy in the call and release after use. @@ -103,12 +114,7 @@ + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block { if ([NSThread isMainThread] && wait == YES) { block(); } else { - if (wait == YES) { - [self performOnMainThread:@selector(invokeBlock:) on:self withObject:block waitUntilDone:YES]; - } else { - void (^blockCopy)(void) = Block_copy(block); - [self performOnMainThread:@selector(invokeBlockCopy:) on:self withObject:blockCopy waitUntilDone:NO]; - } + [self performOnMainThread:@selector(invokeBlockCopy:) on:self withObject:Block_copy(block) waitUntilDone:wait]; } } @@ -116,7 +122,19 @@ + (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg wait if ([NSThread isMainThread] && wait == YES) { [target performSelector:aSelector withObject:arg]; } else { - [target performSelectorOnMainThread:aSelector withObject:arg waitUntilDone:wait modes:javaModes]; + if (wait && isEventDispatchThread()) { + void (^blockCopy)(void) = Block_copy(^(){ + setBlockingEventDispatchThread(YES); + @try { + [target performSelector:aSelector withObject:arg]; + } @finally { + setBlockingEventDispatchThread(NO); + } + }); + [self performSelectorOnMainThread:@selector(invokeBlockCopy:) withObject:blockCopy waitUntilDone:YES modes:javaModes]; + } else { + [target performSelectorOnMainThread:aSelector withObject:arg waitUntilDone:wait modes:javaModes]; + } } } @@ -132,3 +150,27 @@ void OSXAPP_SetJavaVM(JavaVM *vm) jvm = vm; } +/* + * Class: sun_lwawt_macosx_CThreading + * Method: isMainThread + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CThreading_isMainThread + (JNIEnv *env, jclass c) +{ + return [NSThread isMainThread]; +} + +/* + * Class: sun_awt_AWTThreading + * Method: notifyEventDispatchThreadStartedNative + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_sun_awt_AWTThreading_notifyEventDispatchThreadStartedNative + (JNIEnv *env, jclass c) +{ + @synchronized([ThreadUtilities class]) { + eventDispatchThreadPtr = (long)[NSThread currentThread]; + } +} + diff --git a/src/java.desktop/macosx/native/libsplashscreen/splashscreen_sys.m b/src/java.desktop/macosx/native/libsplashscreen/splashscreen_sys.m index 66e0c362318d..c35b6bdf82c3 100644 --- a/src/java.desktop/macosx/native/libsplashscreen/splashscreen_sys.m +++ b/src/java.desktop/macosx/native/libsplashscreen/splashscreen_sys.m @@ -53,11 +53,15 @@ static NSScreen* SplashNSScreen() { - return [[NSScreen screens] objectAtIndex: 0]; + return [[NSScreen screens] firstObject]; } static void SplashCenter(Splash * splash) { + NSScreen *primaryScreen = SplashNSScreen(); + + if (primaryScreen == nil) return; + NSRect screenFrame = [SplashNSScreen() frame]; splash->x = (screenFrame.size.width - splash->width) / 2; diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/ConstrainableGraphics2D.java b/src/java.desktop/share/classes/com/jetbrains/desktop/ConstrainableGraphics2D.java new file mode 100644 index 000000000000..6751da518bea --- /dev/null +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/ConstrainableGraphics2D.java @@ -0,0 +1,33 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.desktop; + +import sun.awt.ConstrainableGraphics; + +import java.awt.geom.Rectangle2D; + +public interface ConstrainableGraphics2D extends ConstrainableGraphics { + public void constrain(Rectangle2D region); + public Object getDestination(); +} diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/FontExtensions.java b/src/java.desktop/share/classes/com/jetbrains/desktop/FontExtensions.java new file mode 100644 index 000000000000..4d300d9fe366 --- /dev/null +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/FontExtensions.java @@ -0,0 +1,65 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.desktop; + +import com.jetbrains.internal.JBRApi; + +import java.awt.*; +import java.lang.invoke.MethodHandles; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; + +public class FontExtensions { + private interface FontExtension { + FontExtension INSTANCE = (FontExtension) JBRApi.internalServiceBuilder(MethodHandles.lookup()) + .withStatic("getFeatures", "getFeatures", "java.awt.Font") + .withStatic("isComplexRendering", "isComplexRendering", "java.awt.Font") + .withStatic("isKerning", "isKerning", "java.awt.Font") + .build(); + + TreeMap getFeatures(Font font); + boolean isComplexRendering(Font font); + boolean isKerning(Font font); + } + + public static String featuresToString(Map features) { + return features.entrySet().stream().map(feature -> (feature.getKey() + "=" + feature.getValue())). + collect(Collectors.joining(";")); + } + + public static TreeMap getFeatures(Font font) { + return FontExtension.INSTANCE.getFeatures(font); + } + + public static boolean isComplexRendering(Font font) { + return FontExtension.INSTANCE.isComplexRendering(font); + } + + public static boolean isKerning(Font font) { + return FontExtension.INSTANCE.isKerning(font); + } +} diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/JBRApiModule.java b/src/java.desktop/share/classes/com/jetbrains/desktop/JBRApiModule.java new file mode 100644 index 000000000000..32e5cf6ffa4f --- /dev/null +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/JBRApiModule.java @@ -0,0 +1,71 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.desktop; + +import com.jetbrains.internal.JBRApi; + +import java.lang.invoke.MethodHandles; + +/** + * This class contains mapping between JBR API interfaces and implementation in {@code java.desktop} module. + */ +public class JBRApiModule { + static { + JBRApi.registerModule(MethodHandles.lookup(), JBRApiModule.class.getModule()::addExports) + .service("com.jetbrains.ExtendedGlyphCache") + .withStatic("getSubpixelResolution", "getSubpixelResolution", "sun.font.FontUtilities") + .service("com.jetbrains.JBRFileDialogService") + .withStatic("getFileDialog", "get", "com.jetbrains.desktop.JBRFileDialog") + .proxy("com.jetbrains.JBRFileDialog", "com.jetbrains.desktop.JBRFileDialog") + .service("com.jetbrains.CustomWindowDecoration", "java.awt.Window$CustomWindowDecoration") + .service("com.jetbrains.RoundedCornersManager") + .withStatic("setRoundedCorners", "setRoundedCorners", "sun.lwawt.macosx.CPlatformWindow", + "sun.awt.windows.WWindowPeer") + .service("com.jetbrains.DesktopActions") + .withStatic("setHandler", "setDesktopActionsHandler", "java.awt.Desktop") + .clientProxy("java.awt.Desktop$DesktopActionsHandler", "com.jetbrains.DesktopActions$Handler") + .service("com.jetbrains.ProjectorUtils") + .withStatic("overrideGraphicsEnvironment", "overrideLocalGraphicsEnvironment", "java.awt.GraphicsEnvironment") + .withStatic("setLocalGraphicsEnvironmentProvider", "setLocalGraphicsEnvironmentProvider", "java.awt.GraphicsEnvironment") + .service("com.jetbrains.AccessibleAnnouncer") + .withStatic("announce", "announce", "sun.swing.AccessibleAnnouncer") + .service("com.jetbrains.GraphicsUtils") + .withStatic("createConstrainableGraphics", "create", "com.jetbrains.desktop.JBRGraphicsDelegate") + .clientProxy("com.jetbrains.desktop.ConstrainableGraphics2D", "com.jetbrains.GraphicsUtils$ConstrainableGraphics2D") + .service("com.jetbrains.WindowDecorations", "java.awt.Window$WindowDecorations") + .proxy("com.jetbrains.WindowDecorations$CustomTitleBar", "java.awt.Window$CustomTitleBar") + .service("com.jetbrains.WindowMove", "java.awt.Window$WindowMoveService") + .service("com.jetbrains.FontExtensions") + .withStatic("getSubpixelResolution", "getSubpixelResolution", "sun.font.FontUtilities") + .withStatic("deriveFontWithFeatures", "deriveFont", "java.awt.Font") + .withStatic("getAvailableFeatures", "getAvailableFeatures", "java.awt.Font") + .service("com.jetbrains.FontOpenTypeFeatures") + .withStatic("getAvailableFeatures", "getAvailableFeatures", "java.awt.Font") + .clientProxy("java.awt.Font$Features", "com.jetbrains.FontExtensions$Features") + .service("com.jetbrains.FontMetricsAccessor", "sun.font.FontDesignMetrics$Accessor") + .clientProxy("sun.font.FontDesignMetrics$Overrider", "com.jetbrains.FontMetricsAccessor$Overrider"); + } +} diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/JBRFileDialog.java b/src/java.desktop/share/classes/com/jetbrains/desktop/JBRFileDialog.java new file mode 100644 index 000000000000..3a1f25b78fd6 --- /dev/null +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/JBRFileDialog.java @@ -0,0 +1,63 @@ +package com.jetbrains.desktop; + +import java.io.Serial; +import java.io.Serializable; +import java.lang.annotation.Native; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.awt.*; + +public class JBRFileDialog implements Serializable { + + @Serial + private static final long serialVersionUID = -9154712118353824660L; + + private static final VarHandle getter; + static { + try { + getter = MethodHandles.privateLookupIn(FileDialog.class, MethodHandles.lookup()) + .findVarHandle(FileDialog.class, "jbrDialog", JBRFileDialog.class); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new Error(e); + } + } + public static JBRFileDialog get(FileDialog dialog) { + return (JBRFileDialog) getter.get(dialog); + } + + /** + * Whether to select files, directories or both (used when common file dialogs are enabled on Windows, or on macOS) + */ + @Native public static final int SELECT_FILES_HINT = 1, SELECT_DIRECTORIES_HINT = 2; + /** + * Whether to allow creating directories or not (used on macOS) + */ + @Native public static final int CREATE_DIRECTORIES_HINT = 4; + + public int hints = CREATE_DIRECTORIES_HINT; + + /** + * Text for "Open" button (used when common file dialogs are enabled on + * Windows). + */ + public String openButtonText; + + /** + * Text for "Select Folder" button (used when common file dialogs are + * enabled on Windows). + */ + public String selectFolderButtonText; + + public void setHints(int hints) { + this.hints = hints; + } + public int getHints() { + return hints; + } + + public void setLocalizationStrings(String openButtonText, String selectFolderButtonText) { + this.openButtonText = openButtonText; + this.selectFolderButtonText = selectFolderButtonText; + } + +} diff --git a/src/java.desktop/share/classes/com/jetbrains/desktop/JBRGraphicsDelegate.java b/src/java.desktop/share/classes/com/jetbrains/desktop/JBRGraphicsDelegate.java new file mode 100644 index 000000000000..6f35e1eb2f8e --- /dev/null +++ b/src/java.desktop/share/classes/com/jetbrains/desktop/JBRGraphicsDelegate.java @@ -0,0 +1,485 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.desktop; + +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.awt.image.BufferedImageOp; +import java.awt.image.ImageObserver; +import java.awt.image.RenderedImage; +import java.awt.image.renderable.RenderableImage; +import java.text.AttributedCharacterIterator; +import java.util.Map; + + +public class JBRGraphicsDelegate extends Graphics2D implements ConstrainableGraphics2D { + public static Graphics2D create(Graphics2D graphics2D, + ConstrainableGraphics2D constrainable) { + return new JBRGraphicsDelegate(graphics2D, constrainable); + } + + private final Graphics2D delegate; + private final ConstrainableGraphics2D constrainable; + + public JBRGraphicsDelegate(Graphics2D delegate, + ConstrainableGraphics2D constrainable) { + this.delegate = delegate; + this.constrainable = constrainable; + } + + @Override + public Object getDestination() { + return constrainable.getDestination(); + } + + @Override + public void constrain(Rectangle2D region) { + constrainable.constrain(region); + } + + @Override + public void constrain(int x, int y, int w, int h) { + constrainable.constrain(x, y, w, h); + } + + @Override + public void draw3DRect(int x, int y, int width, int height, boolean raised) { + delegate.draw3DRect(x, y, width, height, raised); + } + + @Override + public void fill3DRect(int x, int y, int width, int height, boolean raised) { + delegate.fill3DRect(x, y, width, height, raised); + } + + @Override + public void draw(Shape s) { + delegate.draw(s); + } + + @Override + public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) { + return delegate.drawImage(img, xform, obs); + } + + @Override + public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) { + delegate.drawImage(img, op, x, y); + } + + @Override + public void drawRenderedImage(RenderedImage img, AffineTransform xform) { + delegate.drawRenderedImage(img, xform); + } + + @Override + public void drawRenderableImage(RenderableImage img, AffineTransform xform) { + delegate.drawRenderableImage(img, xform); + } + + @Override + public void drawString(String str, int x, int y) { + delegate.drawString(str, x, y); + } + + @Override + public void drawString(String str, float x, float y) { + delegate.drawString(str, x, y); + } + + @Override + public void drawString(AttributedCharacterIterator iterator, int x, int y) { + delegate.drawString(iterator, x, y); + } + + @Override + public void drawString(AttributedCharacterIterator iterator, float x, float y) { + delegate.drawString(iterator, x, y); + } + + @Override + public void drawGlyphVector(GlyphVector g, float x, float y) { + delegate.drawGlyphVector(g, x, y); + } + + @Override + public void fill(Shape s) { + delegate.fill(s); + } + + @Override + public boolean hit(Rectangle rect, Shape s, boolean onStroke) { + return delegate.hit(rect, s, onStroke); + } + + @Override + public GraphicsConfiguration getDeviceConfiguration() { + return delegate.getDeviceConfiguration(); + } + + @Override + public void setComposite(Composite comp) { + delegate.setComposite(comp); + } + + @Override + public void setPaint(Paint paint) { + delegate.setPaint(paint); + } + + @Override + public void setStroke(Stroke s) { + delegate.setStroke(s); + } + + @Override + public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) { + delegate.setRenderingHint(hintKey, hintValue); + } + + @Override + public Object getRenderingHint(RenderingHints.Key hintKey) { + return delegate.getRenderingHint(hintKey); + } + + @Override + public void setRenderingHints(Map hints) { + delegate.setRenderingHints(hints); + } + + @Override + public void addRenderingHints(Map hints) { + delegate.addRenderingHints(hints); + } + + @Override + public RenderingHints getRenderingHints() { + return delegate.getRenderingHints(); + } + + @Override + public void translate(int x, int y) { + delegate.translate(x, y); + } + + @Override + public void translate(double tx, double ty) { + delegate.translate(tx, ty); + } + + @Override + public void rotate(double theta) { + delegate.rotate(theta); + } + + @Override + public void rotate(double theta, double x, double y) { + delegate.rotate(theta, x, y); + } + + @Override + public void scale(double sx, double sy) { + delegate.scale(sx, sy); + } + + @Override + public void shear(double shx, double shy) { + delegate.shear(shx, shy); + } + + @Override + public void transform(AffineTransform Tx) { + delegate.transform(Tx); + } + + @Override + public void setTransform(AffineTransform Tx) { + delegate.setTransform(Tx); + } + + @Override + public AffineTransform getTransform() { + return delegate.getTransform(); + } + + @Override + public Paint getPaint() { + return delegate.getPaint(); + } + + @Override + public Composite getComposite() { + return delegate.getComposite(); + } + + @Override + public void setBackground(Color color) { + delegate.setBackground(color); + } + + @Override + public Color getBackground() { + return delegate.getBackground(); + } + + @Override + public Stroke getStroke() { + return delegate.getStroke(); + } + + @Override + public void clip(Shape s) { + delegate.clip(s); + } + + @Override + public FontRenderContext getFontRenderContext() { + return delegate.getFontRenderContext(); + } + + @Override + public Graphics create() { + return delegate.create(); + } + + @Override + public Graphics create(int x, int y, int width, int height) { + return delegate.create(x, y, width, height); + } + + @Override + public Color getColor() { + return delegate.getColor(); + } + + @Override + public void setColor(Color c) { + delegate.setColor(c); + } + + @Override + public void setPaintMode() { + delegate.setPaintMode(); + } + + @Override + public void setXORMode(Color c1) { + delegate.setXORMode(c1); + } + + @Override + public Font getFont() { + return delegate.getFont(); + } + + @Override + public void setFont(Font font) { + delegate.setFont(font); + } + + @Override + public FontMetrics getFontMetrics() { + return delegate.getFontMetrics(); + } + + @Override + public FontMetrics getFontMetrics(Font f) { + return delegate.getFontMetrics(f); + } + + @Override + public Rectangle getClipBounds() { + return delegate.getClipBounds(); + } + + @Override + public void clipRect(int x, int y, int width, int height) { + delegate.clipRect(x, y, width, height); + } + + @Override + public void setClip(int x, int y, int width, int height) { + delegate.setClip(x, y, width, height); + } + + @Override + public Shape getClip() { + return delegate.getClip(); + } + + @Override + public void setClip(Shape clip) { + delegate.setClip(clip); + } + + @Override + public void copyArea(int x, int y, int width, int height, int dx, int dy) { + delegate.copyArea(x, y, width, height, dx, dy); + } + + @Override + public void drawLine(int x1, int y1, int x2, int y2) { + delegate.drawLine(x1, y1, x2, y2); + } + + @Override + public void fillRect(int x, int y, int width, int height) { + delegate.fillRect(x, y, width, height); + } + + @Override + public void drawRect(int x, int y, int width, int height) { + delegate.drawRect(x, y, width, height); + } + + @Override + public void clearRect(int x, int y, int width, int height) { + delegate.clearRect(x, y, width, height); + } + + @Override + public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { + delegate.drawRoundRect(x, y, width, height, arcWidth, arcHeight); + } + + @Override + public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { + delegate.fillRoundRect(x, y, width, height, arcWidth, arcHeight); + } + + @Override + public void drawOval(int x, int y, int width, int height) { + delegate.drawOval(x, y, width, height); + } + + @Override + public void fillOval(int x, int y, int width, int height) { + delegate.fillOval(x, y, width, height); + } + + @Override + public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { + delegate.drawArc(x, y, width, height, startAngle, arcAngle); + } + + @Override + public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { + delegate.fillArc(x, y, width, height, startAngle, arcAngle); + } + + @Override + public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) { + delegate.drawPolyline(xPoints, yPoints, nPoints); + } + + @Override + public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) { + delegate.drawPolygon(xPoints, yPoints, nPoints); + } + + @Override + public void drawPolygon(Polygon p) { + delegate.drawPolygon(p); + } + + @Override + public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) { + delegate.fillPolygon(xPoints, yPoints, nPoints); + } + + @Override + public void fillPolygon(Polygon p) { + delegate.fillPolygon(p); + } + + @Override + public void drawChars(char[] data, int offset, int length, int x, int y) { + delegate.drawChars(data, offset, length, x, y); + } + + @Override + public void drawBytes(byte[] data, int offset, int length, int x, int y) { + delegate.drawBytes(data, offset, length, x, y); + } + + @Override + public boolean drawImage(Image img, int x, int y, ImageObserver observer) { + return delegate.drawImage(img, x, y, observer); + } + + @Override + public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) { + return delegate.drawImage(img, x, y, width, height, observer); + } + + @Override + public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) { + return delegate.drawImage(img, x, y, bgcolor, observer); + } + + @Override + public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) { + return delegate.drawImage(img, x, y, width, height, bgcolor, observer); + } + + @Override + public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) { + return delegate.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer); + } + + @Override + public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) { + return delegate.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer); + } + + @Override + public void dispose() { + delegate.dispose(); + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + @Deprecated + public Rectangle getClipRect() { + return delegate.getClipRect(); + } + + @Override + public boolean hitClip(int x, int y, int width, int height) { + return delegate.hitClip(x, y, width, height); + } + + @Override + public Rectangle getClipBounds(Rectangle r) { + return delegate.getClipBounds(r); + } +} diff --git a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKEngine.java b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKEngine.java index 1326cee14037..0804747a4263 100644 --- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKEngine.java +++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKEngine.java @@ -94,6 +94,7 @@ static enum WidgetType { static enum Settings { GTK_FONT_NAME, GTK_ICON_SIZES, + GTK_XFT_DPI, GTK_CURSOR_BLINK, GTK_CURSOR_BLINK_TIME } diff --git a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java index 72b8c759e30b..d9b33a5bfc08 100644 --- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java @@ -45,6 +45,7 @@ import sun.awt.SunToolkit; import sun.awt.UNIXToolkit; import sun.awt.OSInfo; +import sun.awt.X11GraphicsDevice; import sun.security.action.GetPropertyAction; import sun.swing.DefaultLayoutStyle; import sun.swing.SwingAccessor; @@ -1449,6 +1450,18 @@ public void initialize() { gtkAAFontSettingsCond = SwingUtilities2.isLocalDisplay(); aaTextInfo = new HashMap<>(2); SwingUtilities2.putAATextInfo(gtkAAFontSettingsCond, aaTextInfo); + + Object value = GTKEngine.INSTANCE.getSetting(GTKEngine.Settings.GTK_XFT_DPI); + if (value instanceof Integer) { + int dpi = ((Integer)value).intValue() / 1024; + if (dpi == -1) { + dpi = 96; + } + if (dpi < 50) { + dpi = 50; + } + X11GraphicsDevice.setXftDpi(dpi); + } } static ReferenceQueue queue = new ReferenceQueue(); diff --git a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java index fa94a57f2e3c..6aa9080dd36e 100644 --- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java +++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java @@ -30,8 +30,10 @@ import javax.swing.plaf.FontUIResource; import java.util.StringTokenizer; +import sun.awt.AWTAccessor; import sun.font.FontConfigManager; import sun.font.FontUtilities; +import sun.java2d.SunGraphicsEnvironment; /** * @author Shannon Hickey @@ -161,11 +163,15 @@ static Font lookupFont(String pangoName) { */ double dsize = size; int dpi = 96; - Object value = - Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Xft/DPI"); + Object xftDPI = Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Xft/DPI"); + Object value = xftDPI; + + if (!(value instanceof Integer)) { + value = GTKEngine.INSTANCE.getSetting(GTKEngine.Settings.GTK_XFT_DPI); + } if (value instanceof Integer) { dpi = ((Integer)value).intValue() / 1024; - if (dpi == -1) { + if (dpi == -1 || SunGraphicsEnvironment.isUIScaleEnabled(dpi)) { dpi = 96; } if (dpi < 50) { /* 50 dpi is the minimum value gnome allows */ @@ -175,6 +181,12 @@ static Font lookupFont(String pangoName) { * 72 dpi, so we need to adjust for that. */ dsize = ((double)(dpi * size)/ 72.0); + + if (xftDPI == null) { + // [tav] used to indicate the 96/72 scale correction to the client app + AWTAccessor.getToolkitAccessor().setDesktopProperty( + Toolkit.getDefaultToolkit(), "gnome.Xft/DPI", value); + } } else { /* If there's no property, GTK scales for the resolution * reported by the Xserver using the formula listed above. diff --git a/src/java.desktop/share/classes/java/awt/Component.java b/src/java.desktop/share/classes/java/awt/Component.java index ad0b87fd3fcb..8130809092bc 100644 --- a/src/java.desktop/share/classes/java/awt/Component.java +++ b/src/java.desktop/share/classes/java/awt/Component.java @@ -25,6 +25,7 @@ package java.awt; +import java.awt.geom.AffineTransform; import java.applet.Applet; import java.awt.dnd.DropTarget; import java.awt.event.ActionEvent; @@ -93,6 +94,10 @@ import sun.awt.AWTAccessor; import sun.awt.AppContext; import sun.awt.ComponentFactory; +import sun.security.action.GetBooleanAction; +import sun.security.action.GetPropertyAction; +import sun.awt.AppContext; +import sun.awt.AWTAccessor; import sun.awt.ConstrainableGraphics; import sun.awt.EmbeddedFrame; import sun.awt.RequestFocusController; @@ -222,6 +227,7 @@ public abstract class Component implements ImageObserver, MenuContainer, private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.Component"); private static final PlatformLogger focusLog = PlatformLogger.getLogger("java.awt.focus.Component"); private static final PlatformLogger mixingLog = PlatformLogger.getLogger("java.awt.mixing.Component"); + private static final PlatformLogger focusRequestLog = PlatformLogger.getLogger("jb.focus.requests"); /** * The peer of the component. The peer implements the component's @@ -345,6 +351,13 @@ public abstract class Component implements ImageObserver, MenuContainer, */ private transient volatile GraphicsConfiguration graphicsConfig; + /** + * Last observed value of {@code graphicsConfig.getDefaultTransform()}. + * Used for firing 'graphicsContextScaleTransform' property change, + * as values returned by {@link #graphicsConfig} may change over time. + */ + private transient volatile AffineTransform lastGraphicsConfigTransform; + /** * A reference to a {@code BufferStrategy} object * used to manipulate the buffers on this component. @@ -613,6 +626,8 @@ static class AWTTreeLock {} */ long eventMask = AWTEvent.INPUT_METHODS_ENABLED_MASK; + private static boolean INPUT_METHODS_DISABLED; + /** * Static properties for incremental drawing. * @see #imageUpdate @@ -636,6 +651,10 @@ static class AWTTreeLock {} String s2 = java.security.AccessController.doPrivileged( new GetPropertyAction("awt.image.redrawrate")); incRate = (s2 != null) ? Integer.parseInt(s2) : 100; + + @SuppressWarnings("removal") + boolean imeDisabled = java.security.AccessController.doPrivileged(new GetBooleanAction("awt.ime.disabled")); + INPUT_METHODS_DISABLED = imeDisabled; } /** @@ -1194,7 +1213,19 @@ private boolean updateSelfGraphicsData(GraphicsConfiguration gc) { if (graphicsConfig == gc) { return false; } + + AffineTransform tx = lastGraphicsConfigTransform; + AffineTransform newTx = gc != null ? gc.getDefaultTransform() : new AffineTransform(); graphicsConfig = gc; + // We cannot rely on graphicsConfig.getDefaultTransform(), + // because its device might have been invalidated and now + // reports different scale than it did before. + if (!newTx.equals(lastGraphicsConfigTransform)) + { + lastGraphicsConfigTransform = newTx; + firePropertyChange("graphicsContextScaleTransform", + tx != null ? tx : new AffineTransform(), newTx); + } ComponentPeer peer = this.peer; if (peer != null) { @@ -1629,6 +1660,7 @@ public boolean isDoubleBuffered() { * @since 1.2 */ public void enableInputMethods(boolean enable) { + if (INPUT_METHODS_DISABLED) return; if (enable) { if ((eventMask & AWTEvent.INPUT_METHODS_ENABLED_MASK) != 0) return; @@ -4443,10 +4475,10 @@ public Graphics getDrawGraphics() { if (backBuffer == null) { return getGraphics(); } - SunGraphics2D g = (SunGraphics2D)backBuffer.getGraphics(); - g.constrain(-insets.left, -insets.top, - backBuffer.getWidth(null) + insets.left, - backBuffer.getHeight(null) + insets.top); + Graphics g = backBuffer.getGraphics(); + ((ConstrainableGraphics)g).constrain(-insets.left, -insets.top, + backBuffer.getWidth(null) + insets.left, + backBuffer.getHeight(null) + insets.top); return g; } @@ -4894,6 +4926,10 @@ void dispatchEventImpl(AWTEvent e) { { return; } + // Custom title bar hit test is performed by all mouse events except MOUSE_EXITED and MOUSE_WHEEL + Window customTitleBarWindow = e.getID() >= MouseEvent.MOUSE_FIRST && e.getID() <= MouseEvent.MOUSE_LAST && + e.getID() != MouseEvent.MOUSE_EXITED && e.getID() != MouseEvent.MOUSE_WHEEL ? + updateCustomTitleBarHitTest(true) : null; /* * 2. Allow the Toolkit to pass this to AWTEventListeners. @@ -5058,6 +5094,10 @@ void dispatchEventImpl(AWTEvent e) { } } + if (customTitleBarWindow != null) { + customTitleBarWindow.applyCustomTitleBarHitTest(); + } + if (SunToolkit.isTouchKeyboardAutoShowEnabled() && (toolkit instanceof SunToolkit) && ((e instanceof MouseEvent) || (e instanceof FocusEvent))) { @@ -5149,6 +5189,7 @@ boolean dispatchMouseWheelToAncestor(MouseWheelEvent e) { } boolean areInputMethodsEnabled() { + if (INPUT_METHODS_DISABLED) return false; // in 1.2, we assume input method support is required for all // components that handle key events, but components can turn off // input methods by calling enableInputMethods(false). @@ -7918,6 +7959,12 @@ final boolean requestFocusHelper(boolean temporary, boolean focusedWindowChangeAllowed, FocusEvent.Cause cause) { + if (focusRequestLog.isLoggable(PlatformLogger.Level.FINE)) { + focusRequestLog.fine("requestFocus(" + + (temporary ? "temporary," : "") + + (focusedWindowChangeAllowed ? "" : "inWindow,") + + cause + ") for " + this, new Throwable()); + } // 1) Check if the event being dispatched is a system-generated mouse event. AWTEvent currentEvent = EventQueue.getCurrentEvent(); if (currentEvent instanceof MouseEvent && @@ -10534,5 +10581,21 @@ public void setMixingCutoutShape(Shape shape) { void updateZOrder() { peer.setZOrder(getHWPeerAboveMe()); } + /** + * Disable IM-events dispatching (global). + * Usage of IM under Linux can cause freezes and crashes, disabling increases stability + */ + public static void disableInputMethodSupport() { + INPUT_METHODS_DISABLED = true; + } + Window updateCustomTitleBarHitTest(boolean allowNativeActions) { + Container p = parent; + if (p == null) return null; + if ((eventMask & (AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_WHEEL_EVENT_MASK)) != 0 || + mouseListener != null || mouseMotionListener != null || mouseWheelListener != null || cursor != null) { + allowNativeActions = false; + } + return p.updateCustomTitleBarHitTest(allowNativeActions); + } } diff --git a/src/java.desktop/share/classes/java/awt/Container.java b/src/java.desktop/share/classes/java/awt/Container.java index c8289aa7fcc2..31cb95feee4d 100644 --- a/src/java.desktop/share/classes/java/awt/Container.java +++ b/src/java.desktop/share/classes/java/awt/Container.java @@ -4452,6 +4452,7 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener { private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.LightweightDispatcher"); private static final int BUTTONS_DOWN_MASK; + private static final int BUTTONS_COUNT; static { int[] buttonsDownMask = AWTAccessor.getInputEventAccessor(). @@ -4461,6 +4462,7 @@ class LightweightDispatcher implements java.io.Serializable, AWTEventListener { mask |= buttonDownMask; } BUTTONS_DOWN_MASK = mask; + BUTTONS_COUNT = buttonsDownMask.length; } LightweightDispatcher(Container nativeContainer) { @@ -4880,6 +4882,19 @@ void retargetMouseEvent(Component target, int id, MouseEvent e) { return; // mouse is over another hw component or target is disabled } + int modifiers = e.getModifiersEx(); + int button = e.getButton(); + if ((id == MouseEvent.MOUSE_ENTERED || id == MouseEvent.MOUSE_EXITED) && + (button > 0 && button <= BUTTONS_COUNT)) { + // generated entered/exited events logically come before the base event (and are dispatched so), + // hence we need to adjust the modifiers accordingly + if (e.getID() == MouseEvent.MOUSE_PRESSED) { + modifiers &= ~InputEvent.getMaskForButton(button); + } else if (e.getID() == MouseEvent.MOUSE_RELEASED) { + modifiers |= InputEvent.getMaskForButton(button); + } + } + int x = e.getX(), y = e.getY(); Component component; @@ -4901,7 +4916,7 @@ void retargetMouseEvent(Component target, int id, MouseEvent e) { retargeted = new MouseWheelEvent(target, id, e.getWhen(), - e.getModifiersEx() | e.getModifiers(), + modifiers, x, y, e.getXOnScreen(), @@ -4917,14 +4932,14 @@ void retargetMouseEvent(Component target, int id, MouseEvent e) { retargeted = new MouseEvent(target, id, e.getWhen(), - e.getModifiersEx() | e.getModifiers(), + modifiers, x, y, e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), - e.getButton()); + button); MouseEventAccessor meAccessor = AWTAccessor.getMouseEventAccessor(); meAccessor.setCausedByTouchEvent(retargeted, meAccessor.isCausedByTouchEvent(e)); diff --git a/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java b/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java index 6f905f3d2c7c..30356f3cea8a 100644 --- a/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java +++ b/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java @@ -124,32 +124,26 @@ public ContainerOrderFocusTraversalPolicy() {} */ /*protected*/ private List getFocusTraversalCycle(Container aContainer) { List cycle = new ArrayList(); - enumerateCycle(aContainer, cycle); + enumerateCycle(aContainer, cycle, true); return cycle; } /*protected*/ private int getComponentIndex(List cycle, Component aComponent) { return cycle.indexOf(aComponent); } - private void enumerateCycle(Container container, List cycle) { - if (!(container.isVisible() && container.isDisplayable())) { + private void enumerateCycle(Component component, List cycle, boolean forceDescending) { + if (!(component.isVisible() && component.isDisplayable())) { return; } - cycle.add(container); + cycle.add(component); - Component[] components = container.getComponents(); - for (int i = 0; i < components.length; i++) { - Component comp = components[i]; - if (comp instanceof Container) { - Container cont = (Container)comp; - - if (!cont.isFocusCycleRoot() && !cont.isFocusTraversalPolicyProvider()) { - enumerateCycle(cont, cycle); - continue; - } + if (component instanceof Container container && + (forceDescending || !(container.isFocusCycleRoot() || container.isFocusTraversalPolicyProvider()))) { + Component[] components = container.getComponents(); + for (Component c : components) { + enumerateCycle(c, cycle, false); } - cycle.add(comp); } } diff --git a/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java b/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java index e416e791e8d0..a863b8bc29f3 100644 --- a/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -79,6 +79,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { private LinkedList typeAheadMarkers = new LinkedList(); private boolean consumeNextKeyTyped; private Component restoreFocusTo; + private WeakReference lastKeyPressedOrReleasedTarget = NULL_COMPONENT_WR; private static boolean fxAppThreadIsDispatchThread; @@ -874,7 +875,9 @@ public boolean dispatchEvent(AWTEvent e) { * @see Component#dispatchEvent */ public boolean dispatchKeyEvent(KeyEvent e) { - Component focusOwner = (((AWTEvent)e).isPosted) ? getFocusOwner() : e.getComponent(); + Component focusOwner = (((AWTEvent)e).isPosted && + !(e.getID() == KeyEvent.KEY_TYPED && SunToolkit.isSystemGenerated(e))) + ? getFocusOwner() : e.getComponent(); if (focusOwner != null && focusOwner.isShowing() && focusOwner.canBeFocusOwner()) { if (!e.isConsumed()) { @@ -1099,8 +1102,21 @@ void clearMarkers() { @SuppressWarnings("deprecation") private boolean preDispatchKeyEvent(KeyEvent ke) { if (((AWTEvent) ke).isPosted) { - Component focusOwner = getFocusOwner(); - ke.setSource(((focusOwner != null) ? focusOwner : getFocusedWindow())); + boolean typedEvent = ke.getID() == KeyEvent.KEY_TYPED; + boolean systemEvent = SunToolkit.isSystemGenerated(ke); + Component focusOwner; + if (typedEvent && systemEvent) { + focusOwner = lastKeyPressedOrReleasedTarget.get(); + } else { + focusOwner = getFocusOwner(); + if (focusOwner == null) { + focusOwner = getFocusedWindow(); + } + } + if (!typedEvent && systemEvent) { + lastKeyPressedOrReleasedTarget = new WeakReference<>(focusOwner); + } + ke.setSource(focusOwner); } if (ke.getSource() == null) { return true; diff --git a/src/java.desktop/share/classes/java/awt/Desktop.java b/src/java.desktop/share/classes/java/awt/Desktop.java index 1abba965d8be..f90e8e9b1b14 100644 --- a/src/java.desktop/share/classes/java/awt/Desktop.java +++ b/src/java.desktop/share/classes/java/awt/Desktop.java @@ -40,6 +40,7 @@ import java.io.File; import java.io.FilePermission; import java.io.IOException; +import java.lang.reflect.Field; import java.net.URI; import java.net.URISyntaxException; import java.security.AccessController; @@ -428,7 +429,11 @@ public void open(File file) throws IOException { checkActionSupport(Action.OPEN); checkFileValidation(file); - peer.open(file); + final DesktopActions localHandler = actions; + if (localHandler != null && localHandler.openSupported) + localHandler.handler.open(file); + else + peer.open(file); } /** @@ -463,7 +468,12 @@ public void edit(File file) throws IOException { if (file.isDirectory()) { throw new IOException(file.getPath() + " is a directory"); } - peer.edit(file); + + final DesktopActions localHandler = actions; + if (localHandler != null && localHandler.editSupported) + localHandler.handler.edit(file); + else + peer.edit(file); } /** @@ -499,7 +509,12 @@ public void print(File file) throws IOException { if (file.isDirectory()) { throw new IOException(file.getPath() + " is a directory"); } - peer.print(file); + + final DesktopActions localHandler = actions; + if (localHandler != null && localHandler.printSupported) + localHandler.handler.print(file); + else + peer.print(file); } /** @@ -530,7 +545,12 @@ public void browse(URI uri) throws IOException { checkExec(); checkActionSupport(Action.BROWSE); Objects.requireNonNull(uri); - peer.browse(uri); + + final DesktopActions localHandler = actions; + if (localHandler != null && localHandler.browseSupported) + localHandler.handler.browse(uri); + else + peer.browse(uri); } /** @@ -602,7 +622,11 @@ public void mail(URI mailtoURI) throws IOException { throw new IllegalArgumentException("URI scheme is not \"mailto\""); } - peer.mail(mailtoURI); + final DesktopActions localHandler = actions; + if (localHandler != null && localHandler.mailSupported) + localHandler.handler.mail(mailtoURI); + else + peer.mail(mailtoURI); } private void checkExec() throws SecurityException { @@ -1049,4 +1073,44 @@ public boolean moveToTrash(File file) { }); return peer.moveToTrash(file); } + + private interface DesktopActionsHandler { + void open(File file) throws IOException; + void edit(File file) throws IOException; + void print(File file) throws IOException; + void mail(URI mailtoURL) throws IOException; + void browse(URI uri) throws IOException; + } + private static class DesktopActions { + private final DesktopActionsHandler handler; + + private final boolean openSupported, editSupported, printSupported, mailSupported, browseSupported; + + private static boolean isImplemented(Object target, String method, Class... params) throws NoSuchMethodException { + return !target.getClass().getMethod(method, params) + .getDeclaringClass().getName().equals("com.jetbrains.DesktopActions$Handler"); + } + + private DesktopActions(DesktopActionsHandler handler) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException { + this.handler = handler; + // Check which methods are actually implemented + Field targetField = handler.getClass().getDeclaredField("target"); + targetField.setAccessible(true); + Object target = targetField.get(handler); + openSupported = isImplemented(target, "open", File.class); + editSupported = isImplemented(target, "edit", File.class); + printSupported = isImplemented(target, "print", File.class); + mailSupported = isImplemented(target, "mail", URI.class); + browseSupported = isImplemented(target, "browse", URI.class); + } + } + private static volatile DesktopActions actions; + + static void setDesktopActionsHandler(DesktopActionsHandler h) { + try { + actions = new DesktopActions(h); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/java.desktop/share/classes/java/awt/DisplayMode.java b/src/java.desktop/share/classes/java/awt/DisplayMode.java index 21585e14e36b..a0c2d3447639 100644 --- a/src/java.desktop/share/classes/java/awt/DisplayMode.java +++ b/src/java.desktop/share/classes/java/awt/DisplayMode.java @@ -51,6 +51,7 @@ public final class DisplayMode { private Dimension size; private int bitDepth; private int refreshRate; + private boolean isDefault; /** * Create a new display mode object with the supplied parameters. @@ -71,6 +72,13 @@ public DisplayMode(int width, int height, int bitDepth, int refreshRate) { this.refreshRate = refreshRate; } + private DisplayMode(int width, int height, int bitDepth, int refreshRate, boolean isDefault) { + this.size = new Dimension(width, height); + this.bitDepth = bitDepth; + this.refreshRate = refreshRate; + this.isDefault = isDefault; + } + /** * Returns the height of the display, in pixels. * @return the height of the display, in pixels @@ -123,6 +131,10 @@ public int getRefreshRate() { return refreshRate; } + private boolean isDefault() { + return isDefault; + } + /** * Returns whether the two display modes are equal. * diff --git a/src/java.desktop/share/classes/java/awt/EventDispatchThread.java b/src/java.desktop/share/classes/java/awt/EventDispatchThread.java index b817ca12ece9..cae49330e452 100644 --- a/src/java.desktop/share/classes/java/awt/EventDispatchThread.java +++ b/src/java.desktop/share/classes/java/awt/EventDispatchThread.java @@ -31,6 +31,7 @@ import java.util.ArrayList; +import sun.awt.AWTThreading; import sun.util.logging.PlatformLogger; import sun.awt.dnd.SunDragSourceContextPeer; @@ -86,6 +87,7 @@ public void stopDispatching() { } public void run() { + AWTThreading.getInstance(Thread.currentThread()).notifyEventDispatchThreadStarted(); try { pumpEvents(new Conditional() { public boolean evaluate() { @@ -97,6 +99,8 @@ public boolean evaluate() { } } + private static native void registerEventDispatchThread(); + void pumpEvents(Conditional cond) { pumpEvents(ANY_EVENT, cond); } diff --git a/src/java.desktop/share/classes/java/awt/EventQueue.java b/src/java.desktop/share/classes/java/awt/EventQueue.java index 4dce257f7278..f8fe5b01c883 100644 --- a/src/java.desktop/share/classes/java/awt/EventQueue.java +++ b/src/java.desktop/share/classes/java/awt/EventQueue.java @@ -46,6 +46,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.security.AccessControlContext; +import java.util.function.BooleanSupplier; import jdk.internal.access.SharedSecrets; import jdk.internal.access.JavaSecurityAccess; @@ -226,6 +227,11 @@ public void setFwDispatcher(EventQueue eventQueue, public long getMostRecentEventTime(EventQueue eventQueue) { return eventQueue.getMostRecentEventTimeImpl(); } + + @Override + public SecondaryLoop createSecondaryLoop(EventQueue eventQueue, BooleanSupplier cond) { + return eventQueue.createSecondaryLoop(cond::getAsBoolean, null, 0); + } }); } @@ -350,6 +356,7 @@ private void postEvent(AWTEvent theEvent, int priority) { if (shouldNotify) { if (theEvent.getSource() != AWTAutoShutdown.getInstance()) { AWTAutoShutdown.getInstance().notifyThreadBusy(dispatchThread); + AWTThreading.getInstance(dispatchThread).notifyEventDispatchThreadBusy(); } pushPopCond.signalAll(); } else if (notifyID) { @@ -562,6 +569,7 @@ public AWTEvent getNextEvent() throws InterruptedException { return event; } AWTAutoShutdown.getInstance().notifyThreadFree(dispatchThread); + AWTThreading.getInstance(dispatchThread).notifyEventDispatchThreadFree(); pushPopCond.await(); } finally { pushPopLock.unlock(); @@ -1124,6 +1132,7 @@ public EventDispatchThread run() { t.setPriority(Thread.NORM_PRIORITY + 1); t.setDaemon(false); AWTAutoShutdown.getInstance().notifyThreadBusy(t); + AWTThreading.getInstance(t).notifyEventDispatchThreadBusy(); return t; } } @@ -1154,6 +1163,7 @@ final void detachDispatchThread(EventDispatchThread edt) { dispatchThread = null; } AWTAutoShutdown.getInstance().notifyThreadFree(edt); + AWTThreading.getInstance(edt).notifyEventDispatchThreadFree(); /* * Event was posted after EDT events pumping had stopped, so start * another EDT to handle this event diff --git a/src/java.desktop/share/classes/java/awt/FileDialog.java b/src/java.desktop/share/classes/java/awt/FileDialog.java index 2c2e16245499..35025b36f05f 100644 --- a/src/java.desktop/share/classes/java/awt/FileDialog.java +++ b/src/java.desktop/share/classes/java/awt/FileDialog.java @@ -33,6 +33,7 @@ import java.io.Serial; import java.lang.annotation.Native; +import com.jetbrains.desktop.JBRFileDialog; import sun.awt.AWTAccessor; /** @@ -629,4 +630,37 @@ protected String paramString() { boolean postsOldMouseEvents() { return false; } + + /** + * Called using reflection; sets localization strings used when common + * file dialogs are enabled on Windows. + */ + @Deprecated(forRemoval = true) + private void setLocalizationStrings(String openButtonText, String selectFolderButtonText) { + jbrDialog.openButtonText = openButtonText; + jbrDialog.selectFolderButtonText = selectFolderButtonText; + } + + @Deprecated(forRemoval = true) + private void setFolderPickerMode(boolean folderPickerMode) { + int hints = jbrDialog.getHints(); + if (folderPickerMode) { + hints |= JBRFileDialog.SELECT_DIRECTORIES_HINT; + } else { + hints &= ~JBRFileDialog.SELECT_DIRECTORIES_HINT; + } + } + + @Deprecated(forRemoval = true) + private void setFileExclusivePickerMode(boolean fileExclusivePickerMode) { + int hints = jbrDialog.getHints(); + if (fileExclusivePickerMode) { + hints |= JBRFileDialog.SELECT_FILES_HINT; + } else { + hints &= ~JBRFileDialog.SELECT_FILES_HINT; + jbrDialog.setHints(hints); + } + } + + private final JBRFileDialog jbrDialog = new JBRFileDialog(); } diff --git a/src/java.desktop/share/classes/java/awt/Font.java b/src/java.desktop/share/classes/java/awt/Font.java index cbcd1f473e9c..5b542288d3c6 100644 --- a/src/java.desktop/share/classes/java/awt/Font.java +++ b/src/java.desktop/share/classes/java/awt/Font.java @@ -52,6 +52,8 @@ import java.util.Hashtable; import java.util.Locale; import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import sun.awt.ComponentFactory; import sun.font.AttributeMap; @@ -69,6 +71,7 @@ import sun.font.FontUtilities; import sun.font.GlyphLayout; import sun.font.StandardGlyphVector; +import sun.font.SunLayoutEngine; import static sun.font.EAttribute.EBACKGROUND; import static sun.font.EAttribute.EBIDI_EMBEDDING; @@ -269,8 +272,8 @@ public void setFont2D(Font font, Font2DHandle handle) { font.font2DHandle = handle; } - public void setCreatedFont(Font font) { - font.createdFont = true; + public void setWithFallback(Font font) { + font.withFallback = true; } public boolean isCreatedFont(Font font) { @@ -403,6 +406,11 @@ public FontPeer getFontPeer(final Font font) { */ public static final int TYPE1_FONT = 1; + private static final String CALT_FEATURE = "calt"; + private static final String LIGA_FEATURE = "liga"; + private static final String KERN_FEATURE = "kern"; + + /** * The logical name of this {@code Font}, as passed to the * constructor. @@ -441,6 +449,17 @@ public FontPeer getFontPeer(final Font font) { */ protected float pointSize; + /** + * OpenType's features setup as list of tag and corresponding value.
    + * This field represent map of features where key is feature's tag and value is feature's value
    + * Ordered map choose intentionally as field's type. It allows to correctly comparing two Font objects + * + * @serial + * @see #getFeatures + * @see #deriveFont(Font, Features) + */ + private TreeMap features = new TreeMap(); + /** * The platform specific font information. */ @@ -457,6 +476,12 @@ public FontPeer getFontPeer(final Font font) { */ private transient boolean createdFont = false; + /* + * Font with fallback components (using CompositeFont), its font2dHandle + * should be copied to derived fonts. + */ + private transient boolean withFallback; + /* * This is true if the font transform is not identity. It * is used to avoid unnecessary instantiation of an AffineTransform. @@ -536,6 +561,10 @@ private Font2D getFont2D() { return font2DHandle.font2D; } + private boolean anyEnabledFeatures() { + return features.values().stream().anyMatch(x -> x != 0); + } + /** * Creates a new {@code Font} from the specified name, style and * point size. @@ -599,35 +628,36 @@ public Font(String name, int style, int size) { this.pointSize = size; } - private Font(String name, int style, float sizePts) { + private Font(String name, int style, float sizePts, TreeMap features) { this.name = (name != null) ? name : "Default"; this.style = (style & ~0x03) == 0 ? style : 0; this.size = (int)(sizePts + 0.5); this.pointSize = sizePts; + this.features = features; } /* This constructor is used by deriveFont when attributes is null */ private Font(String name, int style, float sizePts, - boolean created, Font2DHandle handle) { - this(name, style, sizePts); + boolean created, boolean withFallback, + Font2DHandle handle, boolean useOldHandle, TreeMap features) { + this(name, style, sizePts, features); this.createdFont = created; + this.withFallback = withFallback; /* Fonts created from a stream will use the same font2D instance * as the parent. - * One exception is that if the derived font is requested to be - * in a different style, then also check if its a CompositeFont - * and if so build a new CompositeFont from components of that style. - * CompositeFonts can only be marked as "created" if they are used - * to add fall backs to a physical font. And non-composites are - * always from "Font.createFont()" and shouldn't get this treatment. + * When a derived font is requested to be in a different style + * than a base font with fallback, then build a new CompositeFont + * from components of that style. */ - if (created) { - if (handle.font2D instanceof CompositeFont && - handle.font2D.getStyle() != style) { + if (withFallback) { + if (handle.font2D.getStyle() != style) { FontManager fm = FontManagerFactory.getInstance(); this.font2DHandle = fm.getNewComposite(null, style, handle); } else { this.font2DHandle = handle; } + } else if (created || useOldHandle) { + this.font2DHandle = handle; } } @@ -654,7 +684,7 @@ private Font(File fontFile, int fontFormat, * parent. They can be distinguished because the "created" argument * will be "true". Since there is no way to recreate these fonts they * need to have the handle to the underlying font2D passed in. - * "created" is also true when a special composite is referenced by the + * "withFallback" flag is set when a special composite is referenced by the * handle for essentially the same reasons. * But when deriving a font in these cases two particular attributes * need special attention: family/face and style. @@ -673,10 +703,13 @@ private Font(File fontFile, int fontFormat, * In these cases there is no need to interrogate "values". */ private Font(AttributeValues values, String oldName, int oldStyle, - boolean created, Font2DHandle handle) { + boolean created, boolean withFallback, + Font2DHandle handle, boolean useOldHandle, TreeMap features) { + this.features = features; this.createdFont = created; - if (created) { + this.withFallback = withFallback; + if (created || withFallback) { this.font2DHandle = handle; String newName = null; @@ -692,7 +725,7 @@ private Font(AttributeValues values, String oldName, int oldStyle, if (values.getPosture() >= .2f) newStyle |= ITALIC; if (oldStyle == newStyle) newStyle = -1; } - if (handle.font2D instanceof CompositeFont) { + if (withFallback) { if (newStyle != -1 || newName != null) { FontManager fm = FontManagerFactory.getInstance(); this.font2DHandle = @@ -700,8 +733,11 @@ private Font(AttributeValues values, String oldName, int oldStyle, } } else if (newName != null) { this.createdFont = false; + this.withFallback = false; this.font2DHandle = null; } + } else if (useOldHandle) { + this.font2DHandle = handle; } initFromValues(values); } @@ -742,6 +778,13 @@ protected Font(Font font) { } this.font2DHandle = font.font2DHandle; this.createdFont = font.createdFont; + this.withFallback = font.withFallback; + this.features = font.features; + } + + private Font(Font font, TreeMap features) { + this(font); + this.features = features; } /** @@ -871,7 +914,8 @@ public static Font getFont(Map attributes) { values = font.getAttributeValues().clone(); values.merge(attributes, SECONDARY_MASK); return new Font(values, font.name, font.style, - font.createdFont, font.font2DHandle); + font.createdFont, font.withFallback, + font.font2DHandle, false, new TreeMap()); } return new Font(attributes); } @@ -882,7 +926,8 @@ public static Font getFont(Map attributes) { AttributeValues values = font.getAttributeValues().clone(); values.merge(attributes, SECONDARY_MASK); return new Font(values, font.name, font.style, - font.createdFont, font.font2DHandle); + font.createdFont, font.withFallback, + font.font2DHandle, false, new TreeMap()); } return font; @@ -1603,7 +1648,17 @@ public boolean isTransformed() { * @since 1.6 */ public boolean hasLayoutAttributes() { - return hasLayoutAttributes; + return anyEnabledFeatures() || hasLayoutAttributes; + } + + private static TreeMap getFeatures(Font font) { + TreeMap res = new TreeMap<>(); + res.putAll(font.features); + res.put(KERN_FEATURE, font.getAttributeValues().getKerning()); + res.put(LIGA_FEATURE, font.getAttributeValues().getLigatures()); + res.put(CALT_FEATURE, font.getAttributeValues().getLigatures()); + + return res; } /** @@ -1811,7 +1866,7 @@ public static Font getFont(String nm, Font font) { */ public int hashCode() { if (hash == 0) { - hash = name.hashCode() ^ style ^ size; + hash = name.hashCode() ^ style ^ size ^ features.hashCode(); /* It is possible many fonts differ only in transform. * So include the transform in the hash calculation. * nonIdentityTx is set whenever there is a transform in @@ -1848,7 +1903,9 @@ public boolean equals(Object obj) { nonIdentityTx == font.nonIdentityTx && hasLayoutAttributes == font.hasLayoutAttributes && pointSize == font.pointSize && - name.equals(font.name)) { + withFallback == font.withFallback && + name.equals(font.name) && + features.equals(font.features)) { /* 'values' is usually initialized lazily, except when * the font is constructed from a Map, or derived using @@ -1907,7 +1964,7 @@ public String toString() { * * @serial */ - private int fontSerializedDataVersion = 1; + private int fontSerializedDataVersion = 2; /** * Writes default serializable fields to a stream. @@ -1976,9 +2033,13 @@ private void readObject(java.io.ObjectInputStream s) } catch (Throwable t) { throw new IOException(t); } finally { - fRequestedAttributes = null; // don't need it any more + fRequestedAttributes = null; // don't need it any more + } + } + + if (features == null) { + features = new TreeMap<>(); } - } } /** @@ -2081,13 +2142,15 @@ public Attribute[] getAvailableAttributes() { */ public Font deriveFont(int style, float size){ if (values == null) { - return new Font(name, style, size, createdFont, font2DHandle); + return new Font(name, style, size, createdFont, withFallback, + font2DHandle, false, features); } AttributeValues newValues = getAttributeValues().clone(); int oldStyle = (this.style != style) ? this.style : -1; applyStyle(style, newValues); newValues.setSize(size); - return new Font(newValues, null, oldStyle, createdFont, font2DHandle); + return new Font(newValues, null, oldStyle, createdFont, withFallback, + font2DHandle, false, features); } /** @@ -2106,7 +2169,8 @@ public Font deriveFont(int style, AffineTransform trans){ int oldStyle = (this.style != style) ? this.style : -1; applyStyle(style, newValues); applyTransform(trans, newValues); - return new Font(newValues, null, oldStyle, createdFont, font2DHandle); + return new Font(newValues, null, oldStyle, createdFont, withFallback, + font2DHandle, false, features); } /** @@ -2118,11 +2182,13 @@ public Font deriveFont(int style, AffineTransform trans){ */ public Font deriveFont(float size){ if (values == null) { - return new Font(name, style, size, createdFont, font2DHandle); + return new Font(name, style, size, createdFont, withFallback, + font2DHandle, true, features); } AttributeValues newValues = getAttributeValues().clone(); newValues.setSize(size); - return new Font(newValues, null, -1, createdFont, font2DHandle); + return new Font(newValues, null, -1, createdFont, withFallback, + font2DHandle, true, features); } /** @@ -2138,7 +2204,8 @@ public Font deriveFont(float size){ public Font deriveFont(AffineTransform trans){ AttributeValues newValues = getAttributeValues().clone(); applyTransform(trans, newValues); - return new Font(newValues, null, -1, createdFont, font2DHandle); + return new Font(newValues, null, -1, createdFont, withFallback, + font2DHandle, true, features); } /** @@ -2150,14 +2217,26 @@ public Font deriveFont(AffineTransform trans){ */ public Font deriveFont(int style){ if (values == null) { - return new Font(name, style, size, createdFont, font2DHandle); + return new Font(name, style, size, createdFont, withFallback, + font2DHandle, false, features); } AttributeValues newValues = getAttributeValues().clone(); int oldStyle = (this.style != style) ? this.style : -1; applyStyle(style, newValues); - return new Font(newValues, null, oldStyle, createdFont, font2DHandle); + return new Font(newValues, null, oldStyle, createdFont, withFallback, + font2DHandle, false, features); } + /* + * Set of attributes, updating which on a Font instance cannot possibly + * change the underlying Font2D instance it uses. + */ + private static final Set FONT_2D_UNRELATED_ATTRS + = Set.of(TextAttribute.KERNING, + TextAttribute.LIGATURES, + TextAttribute.SIZE, + TextAttribute.TRANSFORM); + /** * Creates a new {@code Font} object by replicating the current * {@code Font} object and applying a new set of font attributes @@ -2175,7 +2254,23 @@ public Font deriveFont(Map attributes) { AttributeValues newValues = getAttributeValues().clone(); newValues.merge(attributes, RECOGNIZED_MASK); - return new Font(newValues, name, style, createdFont, font2DHandle); + boolean keepFont2DHandle = true; + for (Attribute attribute : attributes.keySet()) { + if (!FONT_2D_UNRELATED_ATTRS.contains(attribute)) { + keepFont2DHandle = false; + break; + } + } + return new Font(newValues, name, style, createdFont, withFallback, + font2DHandle, keepFont2DHandle, features); + } + + private interface Features { + TreeMap getAsTreeMap(); + } + + private static Font deriveFont(Font font, Features features) { + return new Font(font, features.getAsTreeMap()); } /** @@ -2625,32 +2720,29 @@ public Rectangle2D getStringBounds(char [] chars, (limit - beginIndex)); } - // this code should be in textlayout - // quick check for simple text, assume GV ok to use if simple + FontDesignMetrics metrics = FontDesignMetrics.getMetrics(this, frc); + return metrics.charsBounds(chars, beginIndex, limit - beginIndex); + } - boolean simple = values == null || - (values.getKerning() == 0 - && values.getLigatures() == 0 - && values.getTracking() == 0 - && values.getBaselineTransform() == null); - if (simple) { - simple = ! FontUtilities.isComplexText(chars, beginIndex, limit); - } + private static boolean isComplexRendering(Font font) { + return (font.values != null && (font.values.getLigatures() != 0 || font.values.getTracking() != 0 || + font.values.getBaselineTransform() != null)) || font.anyEnabledFeatures(); + } - if (simple || ((limit - beginIndex) == 0)) { - FontDesignMetrics metrics = FontDesignMetrics.getMetrics(this, frc); - return metrics.getSimpleBounds(chars, beginIndex, limit-beginIndex); - } else { - // need char array constructor on textlayout - String str = new String(chars, beginIndex, limit - beginIndex); - TextLayout tl = new TextLayout(str, this, frc); - return new Rectangle2D.Float(0, -tl.getAscent(), tl.getAdvance(), - tl.getAscent() + tl.getDescent() + - tl.getLeading()); - } + private static boolean isKerning(Font font) { + return font.values != null && (font.values.getKerning() != 0); } - /** + /** + * Returns a list of OpenType's features supported by current Font. + * Implementation of such logic goes to HarfBuzz library. + * @return list of OpenType's features concatenated to String + */ + private static Set getAvailableFeatures(Font font) { + return SunLayoutEngine.getAvailableFeatures(FontUtilities.getFont2D(font)); + } + + /** * Returns the logical bounds of the characters indexed in the * specified {@link CharacterIterator} in the * specified {@code FontRenderContext}. The logical bounds diff --git a/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java b/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java index 2e89aa6f6723..237ff093a4cc 100644 --- a/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java +++ b/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java @@ -29,6 +29,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Locale; +import java.util.function.Supplier; import sun.awt.PlatformGraphicsInfo; import sun.font.FontManager; @@ -71,6 +72,9 @@ public abstract class GraphicsEnvironment { protected GraphicsEnvironment() { } + // JBR API internals + private static Supplier graphicsEnvironmentProvider = null; + /** * Lazy initialization of local graphics environment using holder idiom. */ @@ -88,6 +92,12 @@ private static final class LocalGE { * @return the graphics environment */ private static GraphicsEnvironment createGE() { + if (graphicsEnvironmentProvider != null) { + GraphicsEnvironment overriddenGE = graphicsEnvironmentProvider.get(); + if (overriddenGE != null) + return overriddenGE; + } + GraphicsEnvironment ge = PlatformGraphicsInfo.createGE(); if (isHeadless()) { ge = new HeadlessGraphicsEnvironment(ge); @@ -104,6 +114,16 @@ public static GraphicsEnvironment getLocalGraphicsEnvironment() { return LocalGE.INSTANCE; } + // JBR API internals + private static void setLocalGraphicsEnvironmentProvider(Supplier geProvider) { + graphicsEnvironmentProvider = geProvider; + } + + // JBR API internals + private static void overrideLocalGraphicsEnvironment(GraphicsEnvironment overriddenGE) { + setLocalGraphicsEnvironmentProvider(() -> overriddenGE); + } + /** * Tests whether or not a display, keyboard, and mouse can be * supported in this environment. If this method returns true, diff --git a/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java b/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java index d35470948434..5423c79e5528 100644 --- a/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java +++ b/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java @@ -26,6 +26,7 @@ import java.awt.event.FocusEvent; import java.awt.event.InputEvent; +import java.awt.event.InvocationEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowEvent; @@ -116,10 +117,11 @@ public int shouldNativelyFocusHeavyweight(Component heavyweight, boolean temporary, boolean focusedWindowChangeAllowed, long time, - FocusEvent.Cause cause) + FocusEvent.Cause cause, + boolean highPriorityEvents) { return KeyboardFocusManager.shouldNativelyFocusHeavyweight( - heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause); + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause, highPriorityEvents); } public boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant, @@ -2373,7 +2375,8 @@ static boolean processSynchronousLightweightTransfer(Component heavyweight, Comp */ static int shouldNativelyFocusHeavyweight (Component heavyweight, Component descendant, boolean temporary, - boolean focusedWindowChangeAllowed, long time, FocusEvent.Cause cause) + boolean focusedWindowChangeAllowed, long time, FocusEvent.Cause cause, + boolean highPriorityEvents) { if (log.isLoggable(PlatformLogger.Level.FINE)) { if (heavyweight == null) { @@ -2442,17 +2445,22 @@ static boolean processSynchronousLightweightTransfer(Component heavyweight, Comp new FocusEvent(currentFocusOwner, FocusEvent.FOCUS_LOST, temporary, descendant, cause); - // Fix 5028014. Rolled out. - // SunToolkit.postPriorityEvent(currentFocusOwnerEvent); - SunToolkit.postEvent(currentFocusOwner.appContext, - currentFocusOwnerEvent); + if (highPriorityEvents) { + SunToolkit.postPriorityEvent(currentFocusOwnerEvent); + } else { + SunToolkit.postEvent(currentFocusOwner.appContext, + currentFocusOwnerEvent); + } } FocusEvent newFocusOwnerEvent = new FocusEvent(descendant, FocusEvent.FOCUS_GAINED, temporary, currentFocusOwner, cause); - // Fix 5028014. Rolled out. - // SunToolkit.postPriorityEvent(newFocusOwnerEvent); - SunToolkit.postEvent(descendant.appContext, newFocusOwnerEvent); + if (highPriorityEvents) { + SunToolkit.postPriorityEvent(newFocusOwnerEvent); + } else { + SunToolkit.postEvent(descendant.appContext, + newFocusOwnerEvent); + } if (focusLog.isLoggable(PlatformLogger.Level.FINEST)) focusLog.finest("2. SNFH_HANDLED for {0}", String.valueOf(descendant)); @@ -2785,11 +2793,8 @@ static FocusEvent retargetFocusGained(FocusEvent fe) { if (hwFocusRequest.lightweightRequests.size() > 0) { currentLightweightRequests = hwFocusRequest.lightweightRequests; - EventQueue.invokeLater(new Runnable() { - public void run() { - processCurrentLightweightRequests(); - } - }); + SunToolkit.postPriorityEvent(new InvocationEvent(source, + KeyboardFocusManager::processCurrentLightweightRequests)); } // 'opposite' will be fixed by @@ -2926,6 +2931,8 @@ static AWTEvent retargetFocusEvent(AWTEvent event) { newFocusOwner = null; return event; } + + newFocusOwner = null; } } diff --git a/src/java.desktop/share/classes/java/awt/MouseInfo.java b/src/java.desktop/share/classes/java/awt/MouseInfo.java index 3dd115e0724f..0b24abf4c3b2 100644 --- a/src/java.desktop/share/classes/java/awt/MouseInfo.java +++ b/src/java.desktop/share/classes/java/awt/MouseInfo.java @@ -91,30 +91,7 @@ public static PointerInfo getPointerInfo() throws HeadlessException { GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment(). getScreenDevices(); - PointerInfo retval = null; - if (areScreenDevicesIndependent(gds)) { - retval = new PointerInfo(gds[deviceNum], point); - } else { - for (int i = 0; i < gds.length; i++) { - GraphicsConfiguration gc = gds[i].getDefaultConfiguration(); - Rectangle bounds = gc.getBounds(); - if (bounds.contains(point)) { - retval = new PointerInfo(gds[i], point); - } - } - } - - return retval; - } - - private static boolean areScreenDevicesIndependent(GraphicsDevice[] gds) { - for (int i = 0; i < gds.length; i++) { - Rectangle bounds = gds[i].getDefaultConfiguration().getBounds(); - if (bounds.x != 0 || bounds.y != 0) { - return false; - } - } - return true; + return new PointerInfo(gds[deviceNum], point); } /** diff --git a/src/java.desktop/share/classes/java/awt/Toolkit.java b/src/java.desktop/share/classes/java/awt/Toolkit.java index 54053fdc2e17..b84d036d577c 100644 --- a/src/java.desktop/share/classes/java/awt/Toolkit.java +++ b/src/java.desktop/share/classes/java/awt/Toolkit.java @@ -1401,6 +1401,11 @@ private static void initStatic() { public void setPlatformResources(ResourceBundle bundle) { Toolkit.setPlatformResources(bundle); } + + @Override + public void setDesktopProperty(Toolkit tk, String prop, Object value) { + tk.setDesktopProperty(prop, value); + } }); java.security.AccessController.doPrivileged( diff --git a/src/java.desktop/share/classes/java/awt/Window.java b/src/java.desktop/share/classes/java/awt/Window.java index c5d876b9bde9..1a34a38b8079 100644 --- a/src/java.desktop/share/classes/java/awt/Window.java +++ b/src/java.desktop/share/classes/java/awt/Window.java @@ -46,13 +46,20 @@ import java.io.OptionalDataException; import java.io.Serial; import java.io.Serializable; +import java.lang.annotation.Native; +import java.lang.invoke.MethodHandles; import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.security.AccessController; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.EventListener; +import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.HashMap; +import java.util.Objects; import java.util.ResourceBundle; import java.util.Set; import java.util.Vector; @@ -64,6 +71,7 @@ import javax.accessibility.AccessibleState; import javax.accessibility.AccessibleStateSet; +import com.jetbrains.internal.JBRApi; import sun.awt.AWTAccessor; import sun.awt.AWTPermissions; import sun.awt.AppContext; @@ -395,6 +403,7 @@ public static enum Type { private static final long serialVersionUID = 4497834738069338734L; private static final PlatformLogger log = PlatformLogger.getLogger("java.awt.Window"); + private static final PlatformLogger focusRequestLog = PlatformLogger.getLogger("jb.focus.requests"); private static final boolean locationByPlatformProp; @@ -1075,7 +1084,13 @@ public void show() { } else { // fix for 6532736: after this window is shown, its blocker // should be raised to front - modalBlocker.toFront_NoClientCode(); + boolean storedValue = modalBlocker.isAutoRequestFocus(); + modalBlocker.setAutoRequestFocus(false); + try { + modalBlocker.toFront_NoClientCode(); + } finally { + modalBlocker.setAutoRequestFocus(storedValue); + } } if (this instanceof Frame || this instanceof Dialog) { updateChildFocusableWindowState(this); @@ -1121,14 +1136,18 @@ synchronized void postWindowEvent(int id) { * {@link #setVisible(boolean)}. */ @Deprecated + @SuppressWarnings({"unchecked", "rawtypes"}) public void hide() { + WeakReference[] ownedWindowArray; synchronized(ownedWindowList) { - for (int i = 0; i < ownedWindowList.size(); i++) { - Window child = ownedWindowList.elementAt(i).get(); - if ((child != null) && child.visible) { - child.hide(); - child.showWithParent = true; - } + ownedWindowArray = new WeakReference[ownedWindowList.size()]; + ownedWindowList.copyInto(ownedWindowArray); + } + for (WeakReference childRef : ownedWindowArray) { + Window child = childRef.get(); + if ((child != null) && child.visible) { + child.hide(); + child.showWithParent = true; } } if (isModalBlocked()) { @@ -1312,6 +1331,9 @@ public void toFront() { // This functionality is implemented in a final package-private method // to insure that it cannot be overridden by client subclasses. final void toFront_NoClientCode() { + if (focusRequestLog.isLoggable(PlatformLogger.Level.FINE)) { + focusRequestLog.fine("toFront() for" + this, new Throwable()); + } if (visible) { WindowPeer peer = (WindowPeer)this.peer; if (peer != null) { @@ -1355,6 +1377,9 @@ public void toBack() { // This functionality is implemented in a final package-private method // to insure that it cannot be overridden by client subclasses. final void toBack_NoClientCode() { + if (focusRequestLog.isLoggable(PlatformLogger.Level.FINE)) { + focusRequestLog.fine("toBack() for " + this, new Throwable()); + } if(isAlwaysOnTop()) { try { setAlwaysOnTop(false); @@ -3994,6 +4019,333 @@ private static void setLayersOpaque(Component component, boolean isOpaque) { } } + // ************************** Custom title bar support ******************************* + + private static class WindowDecorations { + WindowDecorations() { CustomTitleBar.assertSupported(); } + void setCustomTitleBar(Frame frame, CustomTitleBar customTitleBar) { ((Window) frame).setCustomTitleBar(customTitleBar); } + void setCustomTitleBar(Dialog dialog, CustomTitleBar customTitleBar) { ((Window) dialog).setCustomTitleBar(customTitleBar); } + CustomTitleBar createCustomTitleBar() { return new CustomTitleBar(); } + } + + + private static class CustomTitleBar implements Serializable { + @Serial + private static final long serialVersionUID = -2330620200902241173L; + + @Native + private static final int + HIT_UNDEFINED = 0, + HIT_TITLEBAR = 1, + HIT_CLIENT = 2, + HIT_MINIMIZE_BUTTON = 3, + HIT_MAXIMIZE_BUTTON = 4, + HIT_CLOSE_BUTTON = 5; + + private static void assertSupported() { + if (CustomTitleBarPeer.INSTANCE == null) { + throw new JBRApi.ServiceNotAvailableException("Only supported on Windows and macOS"); + } + } + + private volatile Window window; + private float height; + private HashMap properties; + private final float[] insets = new float[2]; + + private float getHeight() { return height; } + private void setHeight(float height) { + if (height <= 0.0f) throw new IllegalArgumentException("TitleBar height must be positive"); + this.height = height; + notifyUpdate(); + } + private Map getProperties() { + return properties != null ? Collections.unmodifiableMap(properties) : Collections.emptyMap(); + } + private void putProperties(Map m) { + if (properties == null) properties = new HashMap<>(); + properties.putAll(m); + notifyUpdate(); + } + private void putProperty(String key, Object value) { + if (properties == null) properties = new HashMap<>(); + properties.put(key, value); + notifyUpdate(); + } + private float getLeftInset() { return insets[0]; } + private float getRightInset() { return insets[1]; } + private void forceHitTest(boolean client) { + Window w = window; + if (w != null) { + w.pendingCustomTitleBarHitTest = client ? CustomTitleBar.HIT_CLIENT : CustomTitleBar.HIT_TITLEBAR; + w.applyCustomTitleBarHitTest(); + } + } + private Window getContainingWindow() { return window; } + + private void notifyUpdate() { + // Do not synchronize on itself to prevent possible deadlocks, synchronize on parent window instead. + Window w = window; + if (w != null) { + synchronized (w) { + if (w == window) w.setCustomTitleBar(this); + } + } + } + } + + private CustomTitleBar customTitleBar; + + /** + * Convenience method for JNI access. + * @return 0 if there's no custom title bar, >0 otherwise. + */ + private float internalCustomTitleBarHeight() { + CustomTitleBar t = customTitleBar; + return t != null ? t.getHeight() : 0.0f; + } + /** + * Convenience method for JNI access. + * @return true if custom title bar controls are visible. + */ + private boolean internalCustomTitleBarControlsVisible() { + CustomTitleBar t = customTitleBar; + return t == null || Boolean.TRUE.equals(t.getProperties().getOrDefault("controls.visible", Boolean.TRUE)); + } + /** + * Convenience method for JNI access. + */ + private void internalCustomTitleBarUpdateInsets(float left, float right) { + CustomTitleBar t = customTitleBar; + if (t != null) { + t.insets[0] = left; + t.insets[1] = right; + } + } + + private interface CustomTitleBarPeer { + CustomTitleBarPeer INSTANCE = (CustomTitleBarPeer) JBRApi.internalServiceBuilder(MethodHandles.lookup()) + .withStatic("update", "updateCustomTitleBar", "sun.awt.windows.WFramePeer", "sun.lwawt.macosx.CPlatformWindow").build(); + void update(ComponentPeer peer); + } + + private synchronized void setCustomTitleBar(CustomTitleBar t) { + if (t != null && t.getHeight() <= 0.0f) throw new IllegalArgumentException("TitleBar height must be positive"); + if (customTitleBar != null && customTitleBar != t) { + customTitleBar.window = null; + customTitleBar.insets[0] = customTitleBar.insets[1] = 0; + } + customTitleBar = t; + if (t != null) t.window = this; + if (CustomTitleBarPeer.INSTANCE != null) { + CustomTitleBarPeer.INSTANCE.update(peer); + } + } + + /** + * Used to allow/prevent native title bar actions: window drag and double-click maximization. + */ + private transient volatile int customTitleBarHitTest = CustomTitleBar.HIT_UNDEFINED; + /** + * Temporary value which will eventually substitute {@code customTitleBarHitTest}. + * @see #applyCustomTitleBarHitTest() + */ + private transient int pendingCustomTitleBarHitTest = CustomTitleBar.HIT_UNDEFINED; + /** + * Unlike {@code customTitleBarHitTest}, {@code customTitleBarHitTestQuery} is not updated on each mouse event. + * Reset this to {@code CustomTitleBar.HIT_UNDEFINED} and it will be set and fixed on the next hit test update. + */ + private transient volatile int customTitleBarHitTestQuery = CustomTitleBar.HIT_UNDEFINED; + + @Override + Window updateCustomTitleBarHitTest(boolean allowNativeActions) { + if (customTitleBar == null) return null; + pendingCustomTitleBarHitTest = allowNativeActions ? CustomTitleBar.HIT_TITLEBAR : CustomTitleBar.HIT_CLIENT; + if (customDecorHitTestSpots != null) { // Compatibility bridge, to be removed with old API + Point p = getMousePosition(true); + if (p == null) return this; + // Perform old-style hit test + int result = CustomWindowDecoration.NO_HIT_SPOT; + for (var spot : customDecorHitTestSpots) { + if (spot.getKey().contains(p.x, p.y)) { + result = spot.getValue(); + break; + } + } + // Convert old hit test value to new one + pendingCustomTitleBarHitTest = switch (result) { + case CustomWindowDecoration.MINIMIZE_BUTTON -> CustomTitleBar.HIT_MINIMIZE_BUTTON; + case CustomWindowDecoration.MAXIMIZE_BUTTON -> CustomTitleBar.HIT_MAXIMIZE_BUTTON; + case CustomWindowDecoration.CLOSE_BUTTON -> CustomTitleBar.HIT_CLOSE_BUTTON; + case CustomWindowDecoration.NO_HIT_SPOT, CustomWindowDecoration.DRAGGABLE_AREA -> CustomTitleBar.HIT_TITLEBAR; + default -> CustomTitleBar.HIT_CLIENT; + }; + // Overwrite hit test value + applyCustomTitleBarHitTest(); + } + return this; + } + + void applyCustomTitleBarHitTest() { + // Normally this will only be updated on EDT, so we don't care about non-atomic update. + if (customTitleBarHitTestQuery == CustomTitleBar.HIT_UNDEFINED) { + customTitleBarHitTestQuery = pendingCustomTitleBarHitTest; + } + customTitleBarHitTest = pendingCustomTitleBarHitTest; + } + + // *** Following custom decorations code is kept for backward compatibility and will be removed soon. *** + + @Deprecated + private transient volatile boolean hasCustomDecoration; + @Deprecated + private transient volatile List> customDecorHitTestSpots; + @Deprecated + private transient volatile int customDecorTitleBarHeight = -1; // 0 can be a legal value when no title bar is expected + @Deprecated + private static class CustomWindowDecoration { + + CustomWindowDecoration() { CustomTitleBar.assertSupported(); } + + @Native public static final int + NO_HIT_SPOT = 0, + OTHER_HIT_SPOT = 1, + MINIMIZE_BUTTON = 2, + MAXIMIZE_BUTTON = 3, + CLOSE_BUTTON = 4, + MENU_BAR = 5, + DRAGGABLE_AREA = 6; + + void setCustomDecorationEnabled(Window window, boolean enabled) { + window.hasCustomDecoration = enabled; + setTitleBar(window, enabled ? Math.max(window.customDecorTitleBarHeight, 0.01f) : 0); + } + boolean isCustomDecorationEnabled(Window window) { + return window.hasCustomDecoration; + } + + void setCustomDecorationHitTestSpots(Window window, List> spots) { + window.customDecorHitTestSpots = List.copyOf(spots); + } + List> getCustomDecorationHitTestSpots(Window window) { + return window.customDecorHitTestSpots; + } + + void setCustomDecorationTitleBarHeight(Window window, int height) { + window.customDecorTitleBarHeight = height; + setTitleBar(window, window.hasCustomDecoration ? Math.max(height, 0.01f) : 0); + } + int getCustomDecorationTitleBarHeight(Window window) { + return window.customDecorTitleBarHeight; + } + + // Bridge from old to new API + private static void setTitleBar(Window window, float height) { + if (height <= 0.0f) window.setCustomTitleBar(null); + else { + CustomTitleBar t = new CustomTitleBar(); + // Old API accepts title bar height with insets, subtract it for new API. + // We use bottom insets here because top insets may change when toggling custom title bar, they are usually equal. + if (window instanceof Frame f && (f.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0) { + height -= window.getInsets().bottom; + } + t.setHeight(Math.max(height, 0.01f)); + // In old API versions there were no control buttons on Windows. + if (System.getProperty("os.name").toLowerCase().contains("win")) t.putProperty("controls.visible", false); + window.setCustomTitleBar(t); + } + } + } + + private interface WindowMovePeer { + void startMovingWindowTogetherWithMouse(Window window, int mouseButton); + } + + private interface WindowMovePeerX11 extends WindowMovePeer { + WindowMovePeerX11 INSTANCE = (WindowMovePeerX11) JBRApi.internalServiceBuilder(MethodHandles.lookup()) + .withStatic("startMovingWindowTogetherWithMouse", + "startMovingWindowTogetherWithMouse", + "sun.awt.X11.XWindowPeer") + .build(); + } + + private static class WindowMoveService { + WindowMovePeer windowMovePeer; + + WindowMoveService() { + var toolkit = Toolkit.getDefaultToolkit(); + var ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + if (toolkit == null || ge == null) { + throw new JBRApi.ServiceNotAvailableException("Supported only with a Toolkit present"); + } + + if (!objectIsInstanceOf(toolkit, "sun.awt.X11.XToolkit") + || !objectIsInstanceOf(ge, "sun.awt.X11GraphicsEnvironment")) { + throw new JBRApi.ServiceNotAvailableException("Supported only with XToolkit and X11GraphicsEnvironment"); + } + + // This will throw if the service is not supported by the underlying WM + windowMovePeer = WindowMovePeerX11.INSTANCE; + } + + boolean objectIsInstanceOf(Object o, String className) { + Objects.requireNonNull(o); + return o.getClass().getName().equals(className); + } + + void startMovingTogetherWithMouse(Window window, int mouseButton) { + Objects.requireNonNull(window); + windowMovePeer.startMovingWindowTogetherWithMouse(window, mouseButton); + } + } + + // ************************** JBR stuff ******************************* + + private volatile boolean ignoreMouseEvents; + + boolean isIgnoreMouseEvents() { + return ignoreMouseEvents; + } + + /** + * Set via reflection (JB JdkEx API). + */ + void setIgnoreMouseEvents(boolean ignore) { + ignoreMouseEvents = ignore; + } + + private volatile boolean hasTabbingMode; + + boolean hasTabbingMode() { + return hasTabbingMode; + } + + /** + * Set via reflection (JB JdkEx API). + */ + void setTabbingMode() { + hasTabbingMode = true; + } + + private transient volatile Runnable moveTabToNewWindowCallback; + + void runMoveTabToNewWindowCallback() { + if (moveTabToNewWindowCallback != null) { + Runnable callback = moveTabToNewWindowCallback; + SunToolkit.executeOnEventHandlerThread(this, new Runnable() { + public void run() { + callback.run(); + } + }); + } + } + + /** + * Set via reflection (JB JdkEx API). + */ + void setMoveTabToNewWindowCallback(Runnable moveTabToNewWindowCallback) { + this.moveTabToNewWindowCallback = moveTabToNewWindowCallback; + } // ************************** MIXING CODE ******************************* diff --git a/src/java.desktop/share/classes/java/awt/desktop/SystemHotkey.java b/src/java.desktop/share/classes/java/awt/desktop/SystemHotkey.java new file mode 100644 index 000000000000..27c3cc9e0bea --- /dev/null +++ b/src/java.desktop/share/classes/java/awt/desktop/SystemHotkey.java @@ -0,0 +1,88 @@ +package java.awt.desktop; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; + +import sun.util.logging.PlatformLogger; + +import javax.swing.*; +import java.awt.event.KeyEvent; +import java.awt.event.InputEvent; + +/** + * Provides info about system hotkeys + */ +public class SystemHotkey extends AWTKeyStroke { + private static final long serialVersionUID = -6593119259058157651L; + private static final PlatformLogger ourLog = PlatformLogger.getLogger(java.awt.desktop.SystemHotkey.class.getName()); + private static final Map ourCodeDescriptionCache = new HashMap<>(); + + private final int myNativeKeyCode; + private final String myDescription; + + SystemHotkey(char keyChar, int javaKeyCode, int javaModifiers, String description, int nativeKeyCode) { + super(keyChar, javaKeyCode, javaModifiers, true); + this.myNativeKeyCode = nativeKeyCode; + this.myDescription = description; + } + + public String toString() { + return String.format("desc='%s' char=%s mod='%s' nativeKeyCode=0x%X ['%s'] javaKeyCode=0x%X", + String.valueOf(myDescription), String.valueOf(getKeyChar()), InputEvent.getModifiersExText(getModifiers()), + myNativeKeyCode, getOsxKeyCodeDescription(myNativeKeyCode), getKeyCode()); + } + + /** + * Gets hotkey description + * @return hotkey description + */ + public String getDescription() { + return myDescription; + } + + /** + * Reads all registered hotkeys + * @return list of all registered hotkeys + */ + public static List readSystemHotkeys() { + final SystemHotkeyReader reader = new SystemHotkeyReader(); + reader.readSystemHotkeys(); + return reader.getResult(); + } + + /** + * Gets virtual code description + * @param code (virtual keycode) + * @return virtual keycode description + */ + private static String getOsxKeyCodeDescription(int code) { + return ourCodeDescriptionCache.computeIfAbsent(code, (c)->{ + final String desc = osxKeyCodeDescription(c); + return desc == null || desc.isEmpty() ? String.format("Unknown_key_code_0x%X", c) : desc; + }); + } + + private static native String osxKeyCodeDescription(int osxCode); +} + +class SystemHotkeyReader { + private final List myResult = new ArrayList<>(); + + void add(int keyCode, String keyChar, int modifiers, String desc) { + myResult.add(new SystemHotkey( + keyChar == null || keyChar.isEmpty() ? KeyEvent.CHAR_UNDEFINED : keyChar.charAt(0), + keyCode == -1 ? KeyEvent.VK_UNDEFINED : osx2java(keyCode), + modifiers, desc, keyCode + )); + } + + List getResult() { return myResult; } + + native void readSystemHotkeys(); + + private static native int osx2java(int osxCode); +} \ No newline at end of file diff --git a/src/java.desktop/share/classes/java/awt/peer/WindowPeer.java b/src/java.desktop/share/classes/java/awt/peer/WindowPeer.java index 07013a10bd03..b62965631840 100644 --- a/src/java.desktop/share/classes/java/awt/peer/WindowPeer.java +++ b/src/java.desktop/share/classes/java/awt/peer/WindowPeer.java @@ -119,6 +119,22 @@ public interface WindowPeer extends ContainerPeer { */ void repositionSecurityWarning(); + /** + * Returns the system insets (in the scale of the Window device) when available. + * + * @return the system insets or null + */ + default Insets getSysInsets() { return null; } + + /** + * Returns platform window handle. + * + * @return the window handle + */ + default long getWindowHandle() { + throw new UnsupportedOperationException("unimplemented"); + } + /** * Requests a GC that best suits this Window. The returned GC may differ * from the requested GC passed as the argument to this method. This method diff --git a/src/java.desktop/share/classes/javax/swing/BoxLayout.java b/src/java.desktop/share/classes/javax/swing/BoxLayout.java index f1b51797adb5..91ed6efd1f0e 100644 --- a/src/java.desktop/share/classes/javax/swing/BoxLayout.java +++ b/src/java.desktop/share/classes/javax/swing/BoxLayout.java @@ -472,7 +472,8 @@ void checkContainer(Container target) { } void checkRequests() { - if (xChildren == null || yChildren == null) { + // check yTotal, as it's assigned the last, to ensure initialization completed without exceptions: + if (yTotal == null) { // The requests have been invalidated... recalculate // the request information. int n = target.getComponentCount(); diff --git a/src/java.desktop/share/classes/javax/swing/BufferStrategyPaintManager.java b/src/java.desktop/share/classes/javax/swing/BufferStrategyPaintManager.java index 7c00a03d2543..1986dc2ceaca 100644 --- a/src/java.desktop/share/classes/javax/swing/BufferStrategyPaintManager.java +++ b/src/java.desktop/share/classes/javax/swing/BufferStrategyPaintManager.java @@ -33,6 +33,7 @@ import com.sun.java.swing.SwingUtilities3; import sun.awt.AWTAccessor; +import com.jetbrains.desktop.ConstrainableGraphics2D; import sun.awt.SubRegionShowable; import sun.java2d.SunGraphics2D; import sun.java2d.pipe.hw.ExtendedBufferCapabilities; @@ -252,6 +253,15 @@ public boolean paint(JComponent paintingComponent, g2d.setBackground(oldBg); } + paintingComponent.paintToOffscreen(bsg, x, y, w, h, + x + w, y + h); + accumulate(xOffset + x, yOffset + y, w, h); + return true; + } else if ((g instanceof ConstrainableGraphics2D) && + ((ConstrainableGraphics2D)g).getDestination() == root) { + ((ConstrainableGraphics2D)bsg).constrain(new Rectangle.Double(xOffset, yOffset, + x + w, y + h)); + bsg.setClip(x, y, w, h); paintingComponent.paintToOffscreen(bsg, x, y, w, h, x + w, y + h); accumulate(xOffset + x, yOffset + y, w, h); diff --git a/src/java.desktop/share/classes/javax/swing/JComponent.java b/src/java.desktop/share/classes/javax/swing/JComponent.java index 352fefeaacba..be06619b2698 100644 --- a/src/java.desktop/share/classes/javax/swing/JComponent.java +++ b/src/java.desktop/share/classes/javax/swing/JComponent.java @@ -427,6 +427,7 @@ public abstract class JComponent extends Container implements Serializable, * AA text hints. */ private transient Object aaHint; + private transient Object fmHint; private transient Object lcdRenderingHint; static { @@ -732,6 +733,8 @@ protected void setUI(ComponentUI newUI) { // aaText shouldn't persist between look and feels, reset it. aaHint = UIManager.getDefaults().get( RenderingHints.KEY_TEXT_ANTIALIASING); + fmHint = UIManager.getDefaults().get( + RenderingHints.KEY_FRACTIONALMETRICS); lcdRenderingHint = UIManager.getDefaults().get( RenderingHints.KEY_TEXT_LCD_CONTRAST); ComponentUI oldUI = ui; @@ -1091,13 +1094,6 @@ public void paint(Graphics g) { clipH = clipRect.height; } - if(clipW > getWidth()) { - clipW = getWidth(); - } - if(clipH > getHeight()) { - clipH = getHeight(); - } - if(getParent() != null && !(getParent() instanceof JComponent)) { adjustPaintFlags(); shouldClearPaintFlags = true; @@ -4116,6 +4112,8 @@ private ArrayTable getClientProperties() { public final Object getClientProperty(Object key) { if (key == RenderingHints.KEY_TEXT_ANTIALIASING) { return aaHint; + } else if (key == RenderingHints.KEY_FRACTIONALMETRICS) { + return fmHint; } else if (key == RenderingHints.KEY_TEXT_LCD_CONTRAST) { return lcdRenderingHint; } @@ -4160,6 +4158,9 @@ public final void putClientProperty(Object key, Object value) { if (key == RenderingHints.KEY_TEXT_ANTIALIASING) { aaHint = value; return; + } else if (key == RenderingHints.KEY_FRACTIONALMETRICS) { + fmHint = value; + return; } else if (key == RenderingHints.KEY_TEXT_LCD_CONTRAST) { lcdRenderingHint = value; return; diff --git a/src/java.desktop/share/classes/javax/swing/JTable.java b/src/java.desktop/share/classes/javax/swing/JTable.java index 7f7c0a3ee7c7..2081c56d324a 100644 --- a/src/java.desktop/share/classes/javax/swing/JTable.java +++ b/src/java.desktop/share/classes/javax/swing/JTable.java @@ -5330,7 +5330,6 @@ protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, // Start editing when a key is typed. UI classes can disable this behavior // by setting the client property JTable.autoStartsEdit to Boolean.FALSE. if (!retValue && condition == WHEN_ANCESTOR_OF_FOCUSED_COMPONENT && - isFocusOwner() && !Boolean.FALSE.equals(getClientProperty("JTable.autoStartsEdit"))) { // We do not have a binding for the event. Component editorComponent = getEditorComponent(); @@ -5359,11 +5358,6 @@ protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, if (editorComponent == null) { return false; } - } - // If the editorComponent is a JComponent, pass the event to it. - if (editorComponent instanceof JComponent) { - retValue = ((JComponent)editorComponent).processKeyBinding - (ks, e, WHEN_FOCUSED, pressed); // If we have started an editor as a result of the user // pressing a key and the surrendersFocusOnKeystroke property // is true, give the focus to the new editor. @@ -5373,6 +5367,11 @@ protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, editorComponent.requestFocus(); } } + // If the editorComponent is a JComponent, pass the event to it. + if (editorComponent instanceof JComponent) { + retValue = ((JComponent)editorComponent).processKeyBinding + (ks, e, WHEN_FOCUSED, pressed); + } } return retValue; } diff --git a/src/java.desktop/share/classes/javax/swing/JTree.java b/src/java.desktop/share/classes/javax/swing/JTree.java index c081b3cfff8b..3825c7a79810 100644 --- a/src/java.desktop/share/classes/javax/swing/JTree.java +++ b/src/java.desktop/share/classes/javax/swing/JTree.java @@ -50,6 +50,7 @@ import java.io.ObjectOutputStream; import java.io.Serial; import java.io.Serializable; +import java.security.PrivilegedAction; import java.util.Collections; import java.util.Enumeration; import java.util.Hashtable; @@ -4250,6 +4251,18 @@ public AccessibleContext getAccessibleContext() { return accessibleContext; } + private static final boolean EXCLUDE_ACCESSIBLE_CHILDREN_FROM_CLOSED_NODES; + + static { + @SuppressWarnings("removal") boolean eaccn = java.security.AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Boolean run() { + return Boolean.getBoolean("javax.swing.JTree.excludeAccessibleChildrenFromClosedNodes"); + } + }); + EXCLUDE_ACCESSIBLE_CHILDREN_FROM_CLOSED_NODES = eaccn; + } + /** * This class implements accessibility support for the * JTree class. It provides an implementation of the @@ -4269,9 +4282,6 @@ protected class AccessibleJTree extends AccessibleJComponent implements AccessibleSelection, TreeSelectionListener, TreeModelListener, TreeExpansionListener { - TreePath leadSelectionPath; - Accessible leadSelectionAccessible; - /** * Constructs {@code AccessibleJTree} */ @@ -4283,12 +4293,6 @@ public AccessibleJTree() { } JTree.this.addTreeExpansionListener(this); JTree.this.addTreeSelectionListener(this); - leadSelectionPath = JTree.this.getLeadSelectionPath(); - leadSelectionAccessible = (leadSelectionPath != null) - ? new AccessibleJTreeNode(JTree.this, - leadSelectionPath, - JTree.this) - : null; } /** @@ -4795,11 +4799,7 @@ private TreePath getChildTreePath(int i) { return null; } else { Object childObj = treeModel.getChild(obj, i); - Object[] objPath = path.getPath(); - Object[] objChildPath = new Object[objPath.length+1]; - java.lang.System.arraycopy(objPath, 0, objChildPath, 0, objPath.length); - objChildPath[objChildPath.length-1] = childObj; - return new TreePath(objChildPath); + return path.pathByAddingChild(childObj); } } @@ -4990,16 +4990,12 @@ public Accessible getAccessibleParent() { // someone wants to know, so we need to create our parent // if we don't have one (hey, we're a talented kid!) if (accessibleParent == null) { - Object[] objPath = path.getPath(); - if (objPath.length > 1) { - Object objParent = objPath[objPath.length-2]; + TreePath parentPath = path.getParentPath(); + if (parentPath != null) { + Object objParent = parentPath.getLastPathComponent(); if (treeModel != null) { index = treeModel.getIndexOfChild(objParent, obj); } - Object[] objParentPath = new Object[objPath.length-1]; - java.lang.System.arraycopy(objPath, 0, objParentPath, - 0, objPath.length-1); - TreePath parentPath = new TreePath(objParentPath); accessibleParent = new AccessibleJTreeNode(tree, parentPath, null); @@ -5041,6 +5037,7 @@ public int getAccessibleIndexInParent() { * @return the number of accessible children in the object. */ public int getAccessibleChildrenCount() { + if (tree.isCollapsed(path) && EXCLUDE_ACCESSIBLE_CHILDREN_FROM_CLOSED_NODES) return 0; // skip children of collapsed node // Tree nodes can't be so complex that they have // two sets of children -> we're ignoring that case return treeModel.getChildCount(obj); @@ -5053,17 +5050,10 @@ public int getAccessibleChildrenCount() { * @return the Accessible child of the object */ public Accessible getAccessibleChild(int i) { - // Tree nodes can't be so complex that they have - // two sets of children -> we're ignoring that case - if (i < 0 || i >= getAccessibleChildrenCount()) { + TreePath childPath = getChildTreePath(i); + if (childPath == null) { return null; } else { - Object childObj = treeModel.getChild(obj, i); - Object[] objPath = path.getPath(); - Object[] objChildPath = new Object[objPath.length+1]; - java.lang.System.arraycopy(objPath, 0, objChildPath, 0, objPath.length); - objChildPath[objChildPath.length-1] = childObj; - TreePath childPath = new TreePath(objChildPath); return new AccessibleJTreeNode(JTree.this, childPath, this); } } diff --git a/src/java.desktop/share/classes/javax/swing/PopupFactory.java b/src/java.desktop/share/classes/javax/swing/PopupFactory.java index 9789e95e7ff1..5b9405d0ec9b 100644 --- a/src/java.desktop/share/classes/javax/swing/PopupFactory.java +++ b/src/java.desktop/share/classes/javax/swing/PopupFactory.java @@ -46,6 +46,7 @@ import sun.awt.EmbeddedFrame; import sun.awt.OSInfo; +import sun.awt.SunToolkit; import sun.swing.SwingAccessor; import static javax.swing.ClientPropertyKey.PopupFactory_FORCE_HEAVYWEIGHT_POPUP; @@ -391,9 +392,13 @@ static Popup getHeavyWeightPopup(Component owner, Component contents, } } + Toolkit toolkit = Toolkit.getDefaultToolkit(); if (popup == null || ((JWindow) popup.getComponent()) - .getFocusableWindowState() != focusPopup) { + .getFocusableWindowState() != focusPopup || + (toolkit instanceof SunToolkit) && + (((SunToolkit) toolkit).popupMenusAreSpecial()) && + popup.isPopupMenu() != (contents instanceof JPopupMenu)) { if(popup != null) { // The recycled popup can't serve us well @@ -417,6 +422,11 @@ static Popup getHeavyWeightPopup(Component owner, Component contents, return popup; } + private boolean isPopupMenu() { + Component[] components = ((JWindow) getComponent()).getContentPane().getComponents(); + return components.length == 1 && components[0] instanceof JPopupMenu; + } + /** * Returns a previously disposed heavy weight Popup * associated with window. This will return null if diff --git a/src/java.desktop/share/classes/javax/swing/RepaintManager.java b/src/java.desktop/share/classes/javax/swing/RepaintManager.java index eb696a7b489d..6334c1bf22a2 100644 --- a/src/java.desktop/share/classes/javax/swing/RepaintManager.java +++ b/src/java.desktop/share/classes/javax/swing/RepaintManager.java @@ -27,7 +27,10 @@ import java.awt.*; import java.awt.event.*; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import java.awt.image.VolatileImage; +import java.awt.peer.WindowPeer; import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; @@ -1224,8 +1227,15 @@ public Dimension getDoubleBufferMaximumSize() { GraphicsConfiguration gc = gd.getDefaultConfiguration(); virtualBounds = virtualBounds.union(gc.getBounds()); } - doubleBufferMaxSize = new Dimension(virtualBounds.width, - virtualBounds.height); + doubleBufferMaxSize = + // Sometimes underlying desktop environment reports + // incorrect gc bounds (w=0,h=0). Replace them with + // maximum values (as we do for headless mode) + new Dimension( + virtualBounds.width == 0 ? + Integer.MAX_VALUE : virtualBounds.width, + virtualBounds.height == 0 ? + Integer.MAX_VALUE : virtualBounds.height); } catch (HeadlessException e) { doubleBufferMaxSize = new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); } @@ -1338,6 +1348,12 @@ void paint(JComponent paintingComponent, g.setClip(x, y, w, h); paintingComponent.paintToOffscreen(g, x, y, w, h, x + w, y + h); } + if (Toolkit.getDefaultToolkit() instanceof SunToolkit tk) { + final Window window = SwingUtilities.getWindowAncestor(paintingComponent); + if (window != null && tk.needUpdateWindowAfterPaint()) { + AWTAccessor.getWindowAccessor().updateWindow(window); + } + } } /** @@ -1624,7 +1640,8 @@ public void doubleBufferingChanged(JRootPane rootPane) { */ protected void paintDoubleBuffered(JComponent c, Image image, Graphics g, int clipX, int clipY, - int clipW, int clipH) { + int clipW, int clipH) + { if (image instanceof VolatileImage && isPixelsCopying(c, g)) { paintDoubleBufferedFPScales(c, image, g, clipX, clipY, clipW, clipH); } else { diff --git a/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java b/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java index 384a80599628..b471ec127f8a 100644 --- a/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java +++ b/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java @@ -145,7 +145,7 @@ private int getComponentIndex(List cycle, Component aComponent) { private void enumerateAndSortCycle(Container focusCycleRoot, List cycle) { if (focusCycleRoot.isShowing()) { - enumerateCycle(focusCycleRoot, cycle); + enumerateCycle(focusCycleRoot, cycle, true); if (legacySortingFTPEnabled) { legacySort(cycle, comparator); } else { @@ -168,27 +168,21 @@ private void legacySort(List l, } @SuppressWarnings("deprecation") - private void enumerateCycle(Container container, List cycle) { - if (!(container.isVisible() && container.isDisplayable())) { + private void enumerateCycle(Component component, List cycle, boolean forceDescending) { + if (!(component.isVisible() && component.isDisplayable())) { return; } - cycle.add(container); + cycle.add(component); - Component[] components = container.getComponents(); - for (Component comp : components) { - if (comp instanceof Container) { - Container cont = (Container)comp; - - if (!cont.isFocusCycleRoot() && - !cont.isFocusTraversalPolicyProvider() && - !((cont instanceof JComponent) && ((JComponent)cont).isManagingFocus())) - { - enumerateCycle(cont, cycle); - continue; - } + if (component instanceof Container container && + (forceDescending || !(container.isFocusCycleRoot() || + container.isFocusTraversalPolicyProvider() || + ((container instanceof JComponent jComp) && jComp.isManagingFocus())))) { + Component[] components = container.getComponents(); + for (Component c : components) { + enumerateCycle(c, cycle, false); } - cycle.add(comp); } } diff --git a/src/java.desktop/share/classes/javax/swing/UIManager.java b/src/java.desktop/share/classes/javax/swing/UIManager.java index fe23e1d21e0f..bd75ce45ce47 100644 --- a/src/java.desktop/share/classes/javax/swing/UIManager.java +++ b/src/java.desktop/share/classes/javax/swing/UIManager.java @@ -61,7 +61,7 @@ import java.util.Objects; import sun.awt.AppContext; import sun.awt.AWTAccessor; - +import java.awt.GraphicsEnvironment; /** * {@code UIManager} manages the current look and feel, the set of @@ -384,6 +384,11 @@ public String toString() { if (osType == OSInfo.OSType.WINDOWS) { iLAFs.add(new LookAndFeelInfo("Windows", "com.sun.java.swing.plaf.windows.WindowsLookAndFeel")); + if (!GraphicsEnvironment.isHeadless()) { + // Force DPI settings in Win32GraphicsEnvironment.initDisplayWrapper() + // prior to font size settings in desktop properties. + GraphicsEnvironment.getLocalGraphicsEnvironment(); + } if (Toolkit.getDefaultToolkit().getDesktopProperty( "win.xpstyle.themeActive") != null) { iLAFs.add(new LookAndFeelInfo("Windows Classic", diff --git a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicHTML.java b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicHTML.java index 4c40dc2d278f..b3d482e84ca7 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicHTML.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicHTML.java @@ -27,6 +27,7 @@ import java.io.*; import java.awt.*; import java.net.URL; +import java.security.PrivilegedAction; import javax.accessibility.AccessibleContext; import javax.swing.*; @@ -46,6 +47,15 @@ * @since 1.3 */ public class BasicHTML { + // Rebase CSS size map to let relative font sizes scale properly. + @SuppressWarnings("removal") + private final static boolean REBASE_CSS_SIZE_MAP = + java.security.AccessController.doPrivileged( + (PrivilegedAction) + () -> Boolean.getBoolean( + "javax.swing.rebaseCssSizeMap")); + + private final static String JLABEL_USER_CSS_KEY = "javax.swing.JLabel.userStyleSheet"; /** * Constructs a {@code BasicHTML}. @@ -64,6 +74,12 @@ public static View createHTMLView(JComponent c, String html) { BasicEditorKit kit = getFactory(); Document doc = kit.createDefaultDocument(c.getFont(), c.getForeground()); + if (c instanceof JLabel) { + Object userCss = UIManager.getDefaults().get(JLABEL_USER_CSS_KEY); + if (userCss instanceof StyleSheet) { + ((HTMLDocument)doc).getStyleSheet().addStyleSheet((StyleSheet)userCss); + } + } Object base = c.getClientProperty(documentBaseKey); if (base instanceof URL) { ((HTMLDocument)doc).setBase((URL)base); @@ -433,6 +449,10 @@ static class BasicDocument extends HTMLDocument { private void setFontAndColor(Font font, Color fg) { getStyleSheet().addRule(sun.swing.SwingUtilities2. displayPropertiesToCSS(font,fg)); + if (REBASE_CSS_SIZE_MAP && font != null) { + // See: javax.swing.plaf.basic.BasicEditorPaneUI.updateCSS() + if (font != null) getStyleSheet().addRule("BASE_SIZE " + font.getSize()); + } } } diff --git a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java index ec0fbaf99288..954d9ee6edf8 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java @@ -1920,9 +1920,24 @@ public final void propertyChange(PropertyChangeEvent evt) { updateCursor(); modelChanged(); } + if (propertyName.equals("graphicsContextScaleTransform")) { + // force re-layout of the document view + forwardPreferenceChangeToView(rootView); + } BasicTextUI.this.propertyChange(evt); } + private void forwardPreferenceChangeToView(View view) { + if (view.getViewCount() == 0) { + // propagate the change up the hierarchy of this leaf view + view.preferenceChanged(null, true, true); + return; + } + for (int i=0; i end ? 1 : 0); - for (;;) { - startFrom = breaker.preceding(s.offset + (startFrom - pstart)) - + (pstart - s.offset); - if (startFrom > start) { - // The break spot is within the view - bs[ix++] = startFrom; - } else { - break; - } - } - - SegmentCache.releaseSharedSegment(s); - breakSpots = new int[ix]; - System.arraycopy(bs, 0, breakSpots, 0, ix); + breakSpots = calcBreakSpots(breaker); } int breakSpot = BreakIterator.DONE; @@ -824,6 +796,58 @@ private int getBreakSpot(int p0, int p1) { return breakSpot; } + static { + GlyphViewAccessor.setAccessor(new GlyphViewAccessor() { + @Override + public int[] calcBreakSpots(GlyphView glyphView, BreakIterator breaker) { + return glyphView.calcBreakSpots(breaker); + } + }); + } + + // TODO: convert to protected method (removing accessor) when upstreaming the fix + /** + * Collects all possible breaking positions in the element, + * generated by the provided breaker. + * + * @param breaker provider of break positions + * @return possible break positions in the element + */ + int[] calcBreakSpots(BreakIterator breaker) { + int start = getStartOffset(); + int end = getEndOffset(); + int[] bs = new int[end + 1 - start]; + int ix = 0; + + // Breaker should work on the parent element because there may be + // a valid breakpoint at the end edge of the view (space, etc.) + Element parent = getElement().getParentElement(); + int pstart = (parent == null ? start : parent.getStartOffset()); + int pend = (parent == null ? end : parent.getEndOffset()); + + Segment s = getText(pstart, pend); + s.first(); + breaker.setText(s); + + // Backward search should start from end+1 unless there's NO end+1 + int startFrom = end + (pend > end ? 1 : 0); + for (;;) { + startFrom = breaker.preceding(s.offset + (startFrom - pstart)) + + (pstart - s.offset); + if (startFrom > start) { + // The break spot is within the view + bs[ix++] = startFrom; + } else { + break; + } + } + + SegmentCache.releaseSharedSegment(s); + int[] result = new int[ix]; + System.arraycopy(bs, 0, result, 0, ix); + return result; + } + /** * Return break iterator appropriate for the current document. * diff --git a/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java b/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java index 1a11f5c6e372..aa7a0df6ecbc 100644 --- a/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java +++ b/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java @@ -4780,6 +4780,9 @@ private void replaceInputMethodText(InputMethodEvent e) { AttributedCharacterIterator text = e.getText(); int composedTextIndex; + boolean isCaretMoved = false; + int caretPositionToRestore = 0; + // old composed text deletion Document doc = getDocument(); if (composedTextExists()) { @@ -4787,6 +4790,15 @@ private void replaceInputMethodText(InputMethodEvent e) { doc.remove(composedTextStart.getOffset(), composedTextEnd.getOffset() - composedTextStart.getOffset()); + isCaretMoved = caret.getDot() != composedTextStart.getOffset(); + if (isCaretMoved) { + caretPositionToRestore = caret.getDot(); + // if caret set furter in the doc, we should add commitCount + if (caretPositionToRestore > composedTextStart.getOffset()) { + caretPositionToRestore += commitCount; + } + caret.setDot(composedTextStart.getOffset()); + } } catch (BadLocationException ble) {} composedTextStart = composedTextEnd = null; composedTextAttribute = null; @@ -4862,6 +4874,10 @@ private void replaceInputMethodText(InputMethodEvent e) { latestCommittedTextEnd = null; } } + + if (isCaretMoved) { + caret.setDot(caretPositionToRestore); + } } private void createComposedTextAttribute(int composedIndex, diff --git a/src/java.desktop/share/classes/javax/swing/text/TextLayoutStrategy.java b/src/java.desktop/share/classes/javax/swing/text/TextLayoutStrategy.java index ff1a157bce1b..c8c0b003bc0b 100644 --- a/src/java.desktop/share/classes/javax/swing/text/TextLayoutStrategy.java +++ b/src/java.desktop/share/classes/javax/swing/text/TextLayoutStrategy.java @@ -31,6 +31,7 @@ import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; +import java.awt.geom.AffineTransform; import java.text.AttributedCharacterIterator; import java.text.BreakIterator; import java.util.HashSet; @@ -42,6 +43,7 @@ import javax.swing.event.DocumentEvent; import sun.font.BidiUtils; +import sun.swing.SwingUtilities2; /** * A flow strategy that uses java.awt.font.LineBreakMeasurer to @@ -289,6 +291,18 @@ int getLimitingOffset(View v, int startOffset, int spanLeft, boolean requireNext return pos; } + /** + * Synchronize the strategy if the container's FRC scale changes. + */ + void syncFRC(FlowView fv) { + AffineTransform newFrcTx = SwingUtilities2.getFontRenderContext(fv.getContainer()).getTransform(); + if (frcTx.getScaleX() != newFrcTx.getScaleX() || + frcTx.getScaleY() != newFrcTx.getScaleY()) + { + sync(fv); + } + } + /** * Synchronize the strategy with its FlowView. Allows the strategy * to update its state to account for changes in that portion of the @@ -302,6 +316,8 @@ void sync(FlowView fv) { Container container = fv.getContainer(); FontRenderContext frc = sun.swing.SwingUtilities2. getFontRenderContext(container); + frcTx = frc.getTransform(); + BreakIterator iter; Container c = fv.getContainer(); if (c != null) { @@ -344,6 +360,7 @@ void sync(FlowView fv) { private LineBreakMeasurer measurer; private AttributedSegment text; + private AffineTransform frcTx = new AffineTransform(); /** * Implementation of AttributedCharacterIterator that supports diff --git a/src/java.desktop/share/classes/javax/swing/text/html/CSS.java b/src/java.desktop/share/classes/javax/swing/text/html/CSS.java index 2b96b28dfbbc..4d46baa965fd 100644 --- a/src/java.desktop/share/classes/javax/swing/text/html/CSS.java +++ b/src/java.desktop/share/classes/javax/swing/text/html/CSS.java @@ -96,6 +96,7 @@ *
  • list-style-image *
  • list-style-type *
  • list-style-position + *
  • overflow-wrap * * The following are modeled, but currently not rendered. *
    • font-variant @@ -494,6 +495,14 @@ public boolean isInherited() { public static final Attribute MARGIN_TOP = new Attribute("margin-top", "0", false); + /** + * CSS attribute "overflow-wrap". + * + * TODO: make public when upstreaming the fix + */ + static final Attribute OVERFLOW_WRAP = + new Attribute("overflow-wrap", "normal", true); + /** * CSS attribute "padding". */ @@ -597,7 +606,8 @@ public boolean isInherited() { PADDING_TOP, TEXT_ALIGN, TEXT_DECORATION, TEXT_INDENT, TEXT_TRANSFORM, VERTICAL_ALIGN, WORD_SPACING, WHITE_SPACE, WIDTH, BORDER_SPACING, CAPTION_SIDE, - MARGIN_LEFT_LTR, MARGIN_LEFT_RTL, MARGIN_RIGHT_LTR, MARGIN_RIGHT_RTL + MARGIN_LEFT_LTR, MARGIN_LEFT_RTL, MARGIN_RIGHT_LTR, MARGIN_RIGHT_RTL, + OVERFLOW_WRAP }; private static final Attribute[] ALL_MARGINS = diff --git a/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java b/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java index 2b70e6253253..32be0e56ac87 100644 --- a/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java +++ b/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java @@ -1894,6 +1894,13 @@ String getBaseTarget() { */ private static final String I18NProperty = "i18n"; + /** + * Multi-byte property key. + * + * @see AbstractDocument#MultiByteProperty + */ + static final String MultiByteProperty = "multiByte"; + static { contentAttributeSet = new SimpleAttributeSet(); ((MutableAttributeSet)contentAttributeSet). diff --git a/src/java.desktop/share/classes/javax/swing/text/html/InlineView.java b/src/java.desktop/share/classes/javax/swing/text/html/InlineView.java index 38975b3c686e..a7880dc9f55a 100644 --- a/src/java.desktop/share/classes/javax/swing/text/html/InlineView.java +++ b/src/java.desktop/share/classes/javax/swing/text/html/InlineView.java @@ -24,8 +24,11 @@ */ package javax.swing.text.html; +import sun.swing.text.GlyphViewAccessor; + import java.awt.*; import java.text.BreakIterator; +import java.util.Locale; import javax.swing.event.DocumentEvent; import javax.swing.text.*; @@ -61,6 +64,7 @@ public InlineView(Element elem) { * @see View#insertUpdate */ public void insertUpdate(DocumentEvent e, Shape a, ViewFactory f) { + wrapAnywhereMinimumSpan = -1; super.insertUpdate(e, a, f); } @@ -77,6 +81,7 @@ public void insertUpdate(DocumentEvent e, Shape a, ViewFactory f) { * @see View#removeUpdate */ public void removeUpdate(DocumentEvent e, Shape a, ViewFactory f) { + wrapAnywhereMinimumSpan = -1; super.removeUpdate(e, a, f); } @@ -90,6 +95,7 @@ public void removeUpdate(DocumentEvent e, Shape a, ViewFactory f) { * @see View#changedUpdate */ public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) { + wrapAnywhereMinimumSpan = -1; super.changedUpdate(e, a, f); StyleSheet sheet = getStyleSheet(); attr = sheet.getViewAttributes(this); @@ -206,6 +212,8 @@ protected void setPropertiesFromAttributes() { nowrap = false; } + wrapAnywhere = "anywhere".equals(a.getAttribute(CSS.Attribute.OVERFLOW_WRAP)); + HTMLDocument doc = (HTMLDocument)getDocument(); // fetches background color from stylesheet if specified Color bg = doc.getBackground(a); @@ -224,6 +232,41 @@ protected StyleSheet getStyleSheet() { return doc.getStyleSheet(); } + @Override + public float getMinimumSpan(int axis) { + if (axis == View.X_AXIS && wrapAnywhere) { + if (wrapAnywhereMinimumSpan < 0) { + wrapAnywhereMinimumSpan = 0; + int startOffset = getStartOffset(); + int endOffset = getEndOffset(); + Document doc = getDocument(); + if ((doc != null) && Boolean.TRUE.equals(doc.getProperty(HTMLDocument.MultiByteProperty))) { + Container c = getContainer(); + Locale locale = (c == null ? Locale.getDefault() : c.getLocale()); + BreakIterator breaker = BreakIterator.getCharacterInstance(locale); + int[] breakSpots = GlyphViewAccessor.getAccessor().calcBreakSpots(this, breaker); + int lastBreak = endOffset; + for (int breakSpot : breakSpots) { + wrapAnywhereMinimumSpan = Math.max(wrapAnywhereMinimumSpan, + getPartialSpan(breakSpot, lastBreak)); + lastBreak = breakSpot; + } + wrapAnywhereMinimumSpan = Math.max(wrapAnywhereMinimumSpan, + getPartialSpan(startOffset, lastBreak)); + } else { + for (int i = startOffset ; i < endOffset; i++) { + wrapAnywhereMinimumSpan = Math.max(wrapAnywhereMinimumSpan, + getPartialSpan(i, i + 1)); + } + } + } + return wrapAnywhereMinimumSpan; + } + return super.getMinimumSpan(axis); + } + + private float wrapAnywhereMinimumSpan = -1; + private boolean wrapAnywhere; private boolean nowrap; private AttributeSet attr; } diff --git a/src/java.desktop/share/classes/javax/swing/text/html/LineView.java b/src/java.desktop/share/classes/javax/swing/text/html/LineView.java index 6f512f9623fb..0da2af2a04e7 100644 --- a/src/java.desktop/share/classes/javax/swing/text/html/LineView.java +++ b/src/java.desktop/share/classes/javax/swing/text/html/LineView.java @@ -42,6 +42,7 @@ class LineView extends ParagraphView { /** Last place painted at. */ int tabBase; + private boolean wrap; /** * Creates a LineView object. @@ -71,7 +72,7 @@ public boolean isVisible() { * @see View#getPreferredSpan */ public float getMinimumSpan(int axis) { - return getPreferredSpan(axis); + return wrap ? super.getMinimumSpan(axis) : getPreferredSpan(axis); } /** @@ -120,7 +121,7 @@ public float getAlignment(int axis) { * is the height inside of the inset area. */ protected void layout(int width, int height) { - super.layout(Integer.MAX_VALUE - 1, height); + super.layout(wrap ? width : Integer.MAX_VALUE - 1, height); } /** @@ -184,4 +185,10 @@ protected float getPreTab(float x, int tabOffset) { protected int getCharactersPerTab() { return 8; } + + protected void setPropertiesFromAttributes() { + super.setPropertiesFromAttributes(); + View parent = getParent(); + wrap = parent != null && parent.getAttributes().containsAttribute(CSS.Attribute.WHITE_SPACE, "pre-wrap"); + } } diff --git a/src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java b/src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java index fd3c75829e86..9fafdb4e5aac 100644 --- a/src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java +++ b/src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java @@ -2290,6 +2290,9 @@ public void paint(Graphics g, float x, float y, float w, float h, View v, int it if (font != null) { g.setFont(font); } + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); if (childtype == CSS.Value.SQUARE || childtype == CSS.Value.CIRCLE || childtype == CSS.Value.DISC) { drawShape(g, childtype, (int) x, (int) y, @@ -2355,7 +2358,7 @@ void drawShape(Graphics g, CSS.Value type, int ax, int ay, int aw, // Position shape to the middle of the html text. int gap = isLeftToRight ? - (bulletgap + size/3) : (aw + bulletgap); int x = ax + gap; - int y = Math.max(ay, ay + (int)Math.ceil(ah/2)); + int y = Math.max(ay, ay + (int)Math.ceil((ah - size/3)/2)); if (type == CSS.Value.SQUARE) { g.drawRect(x, y, size/3, size/3); diff --git a/src/java.desktop/share/classes/sun/awt/AWTAccessor.java b/src/java.desktop/share/classes/sun/awt/AWTAccessor.java index 1303ef7b282f..6c9926d976d5 100644 --- a/src/java.desktop/share/classes/sun/awt/AWTAccessor.java +++ b/src/java.desktop/share/classes/sun/awt/AWTAccessor.java @@ -49,6 +49,7 @@ import java.io.File; import java.util.ResourceBundle; import java.util.Vector; +import java.util.function.BooleanSupplier; import javax.accessibility.AccessibleBundle; import sun.java2d.cmm.Profile; @@ -441,7 +442,8 @@ int shouldNativelyFocusHeavyweight(Component heavyweight, boolean temporary, boolean focusedWindowChangeAllowed, long time, - Cause cause); + Cause cause, + boolean highPriorityEvents); /** * Delivers focus for the lightweight descendant of the heavyweight * synchronously. @@ -551,12 +553,17 @@ void invokeAndWait(Object source, Runnable r) /** * Sets the delegate for the EventQueue used by FX/AWT single threaded mode */ - void setFwDispatcher(EventQueue eventQueue, FwDispatcher dispatcher); + public void setFwDispatcher(EventQueue eventQueue, FwDispatcher dispatcher); /** * Gets most recent event time in the EventQueue */ long getMostRecentEventTime(EventQueue eventQueue); + + /** + * Creates a secondary loop with the provided condition. + */ + SecondaryLoop createSecondaryLoop(EventQueue eventQueue, BooleanSupplier cond); } /* @@ -782,6 +789,7 @@ public interface SequencedEventAccessor { */ public interface ToolkitAccessor { void setPlatformResources(ResourceBundle bundle); + void setDesktopProperty(Toolkit tk, String prop, Object value); } /* diff --git a/src/java.desktop/share/classes/sun/awt/AWTThreading.java b/src/java.desktop/share/classes/sun/awt/AWTThreading.java new file mode 100644 index 000000000000..13f8ec5afc87 --- /dev/null +++ b/src/java.desktop/share/classes/sun/awt/AWTThreading.java @@ -0,0 +1,464 @@ +package sun.awt; + +import sun.font.FontUtilities; +import sun.util.logging.PlatformLogger; + +import java.awt.*; +import java.awt.event.InvocationEvent; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.lang.ref.WeakReference; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.*; +import java.util.List; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; +import java.util.function.Consumer; + +/** + * Used to perform a cross threads (EventDispatch, Toolkit) execution so that the execution does not cause a deadlock. + * + * Note: the log messages are tested by jdk/jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java + */ +public class AWTThreading { + private static final PlatformLogger logger = PlatformLogger.getLogger(AWTThreading.class.getName()); + + private static final Runnable EMPTY_RUNNABLE = () -> {}; + + private static final AtomicReference> theAWTThreadingFactory = + new AtomicReference<>(AWTThreading::new); + + private final Thread eventDispatchThread; + + private ExecutorService executor; + // every invokeAndWait() pushes a queue of invocations + private final Stack invocations = new Stack<>(); + + private int level; // re-entrance level + + private final List> eventDispatchThreadStateNotifiers = new ArrayList<>(); + private volatile boolean isEventDispatchThreadFree; + + // invocations should be dispatched on proper EDT (per AppContext) + private static final Map EDT_TO_INSTANCE_MAP = new ConcurrentHashMap<>(); + + @SuppressWarnings("serial") + private static class TrackingQueue extends LinkedBlockingQueue {} + + /** + * WARNING: for testing purpose, use {@link AWTThreading#getInstance(Thread)} instead. + */ + public AWTThreading(Thread edt) { + eventDispatchThread = edt; + } + + /** + * Executes a callable from EventDispatch thread (EDT). It's assumed the callable either performs a blocking execution on Toolkit + * or waits a notification from Toolkit. The method is re-entrant. + *

      + * Currently only macOS is supported. The callable can wrap a native obj-c selector. The selector should be executed via + * [JNFRunLoop performOnMainThreadWaiting:YES ...] so that doAWTRunLoop on AppKit (which is run in [JNFRunLoop javaRunLoopMode]) accepts it. + * The callable should not call any Java code that would normally be called on EDT. + *

      + * A deadlock can happen when the callable triggers any blocking invocation from Toolkit to EDT, or when Toolkit already waits in + * such blocking invocation. To avoid that: + *

        + *
      • The callback execution is delegated to a dedicated pool thread. + *
      • All invocation events, initiated by Toolkit via invokeAndWait(), are tracked via a dedicated queue. + *
      • All the tracked invocation events are dispatched on EDT out of order (EventQueue) during the callback execution. + *
      • In case of a re-entrant method call, all the tracked invocation events coming after the call are dispatched first. + *

      + * When called on non-EDT, or on non-macOS, the method executes the callable just in place. + */ + public static T executeWaitToolkit(Callable callable) { + return executeWaitToolkit(callable, -1, null); + } + + /** + * A boolean value passed to the consumer indicates whether the consumer should perform + * a synchronous invocation on the Toolkit thread and wait, or return immediately. + * + * @see #executeWaitToolkit(Callable). + */ + public static void executeWaitToolkit(Consumer consumer) { + boolean wait = EventQueue.isDispatchThread(); + executeWaitToolkit(() -> { + consumer.accept(wait); + return null; + }); + } + + /** + * @see #executeWaitToolkit(Callable). + */ + public static void executeWaitToolkit(Runnable runnable) { + executeWaitToolkit(() -> { + runnable.run(); + return null; + }); + } + + /** + * Same as {@link #executeWaitToolkit(Callable)} except that the method waits no longer than the specified timeout. + */ + public static T executeWaitToolkit(Callable callable, long timeout, TimeUnit unit) { + if (callable == null) return null; + + boolean isEDT = EventQueue.isDispatchThread(); + + if (FontUtilities.isMacOSX && isEDT) { + AWTThreading instance = getInstance(Thread.currentThread()); + if (instance != null) { + return instance.execute(callable, timeout, unit); + } + } + + try { + return callable.call(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @SuppressWarnings("removal") + private T execute(Callable callable, long timeout, TimeUnit unit) { + assert EventQueue.isDispatchThread(); + if (executor == null) { + // init on EDT + AccessController.doPrivileged((PrivilegedAction)() -> + executor = new ThreadPoolExecutor(1, Integer.MAX_VALUE, + 60L, TimeUnit.SECONDS, + new SynchronousQueue<>(), + new ThreadFactory() { + private final ThreadFactory factory = Executors.privilegedThreadFactory(); + @Override + public Thread newThread(Runnable r) { + Thread t = factory.newThread(r); + t.setDaemon(true); + t.setName(AWTThreading.class.getSimpleName() + " " + t.getName()); + return t; + } + }) + ); + } + level++; + try { + TrackingQueue currentQueue; + synchronized (invocations) { + if (level == 1 && invocations.size() == 1) { + currentQueue = invocations.peek(); + } else { + invocations.push(currentQueue = new TrackingQueue()); + } + } + + FutureTask task = new FutureTask<>(callable) { + @Override + protected void done() { + synchronized (invocations) { + invocations.remove(currentQueue); + // add dummy event to wake up the queue + currentQueue.add(new InvocationEvent(new Object(), () -> {})); + } + } + }; + executor.execute(task); + + try { + while (!task.isDone() || !currentQueue.isEmpty()) { + InvocationEvent event; + if (timeout >= 0 && unit != null) { + event = currentQueue.poll(timeout, unit); + } else { + event = currentQueue.take(); + } + if (event == null) { + task.cancel(false); + synchronized (invocations) { + invocations.remove(currentQueue); + } + new RuntimeException("Waiting for the invocation event timed out").printStackTrace(); + break; + } + event.dispatch(); + } + return task.isCancelled() ? null : task.get(); + + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } finally { + level--; + } + return null; + } + + /** + * Used by implementation. + * Creates an invocation event and adds it to the tracking queue. + * It's assumed the event is then posted to EventQueue. + * The following is provided: + *

        + *
      • If the event is first dispatched from EventQueue - it gets removed from the tracking queue. + *
      • If the event is first dispatched from the tracking queue - its dispatching on EventQueue will be noop. + *
          + * + * @param source the source of the event + * @param onDispatched called back on event dispatching + * @param catchThrowables should catch Throwable's or propagate to the EventDispatch thread's loop + */ + public static TrackedInvocationEvent createAndTrackInvocationEvent(Object source, + Runnable onDispatched, + boolean catchThrowables) + { + AWTThreading instance = getInstance(source); + if (instance != null) { + synchronized (instance.invocations) { + if (instance.invocations.isEmpty()) { + instance.invocations.push(new TrackingQueue()); + } + final TrackingQueue queue = instance.invocations.peek(); + final AtomicReference eventRef = new AtomicReference<>(); + + eventRef.set(TrackedInvocationEvent.create( + source, + onDispatched, + new Runnable() { + final WeakReference queueRef = new WeakReference<>(queue); + + @Override + public void run() { + TrackingQueue queue = queueRef.get(); + queueRef.clear(); + if (queue != null) { + queue.remove(eventRef.get()); + } + } + }, + catchThrowables)); + + queue.add(eventRef.get()); + return eventRef.get(); + } + } + return TrackedInvocationEvent.create(source, onDispatched, () -> {}, catchThrowables); + } + + @SuppressWarnings("serial") + public static class TrackedInvocationEvent extends InvocationEvent { + private final long creationTime = System.currentTimeMillis(); + private final Throwable throwable = new Throwable(); + private final CompletableFuture futureResult = new CompletableFuture<>(); + + // dispatch or dispose has been started or already completed + private final AtomicBoolean isCompletionStarted = new AtomicBoolean(false); + + static TrackedInvocationEvent create(Object source, + Runnable onDispatch, + Runnable onDone, + boolean catchThrowables) + { + final AtomicReference eventRef = new AtomicReference<>(); + eventRef.set(new TrackedInvocationEvent( + source, + onDispatch, + () -> { + if (onDone != null) { + onDone.run(); + } + TrackedInvocationEvent thisEvent = eventRef.get(); + if (!thisEvent.isDispatched()) { + // If we're here - this {onDone} is being disposed. + thisEvent.completeIfNotYet(() -> + // If we're here - this {onDone} is called by the outer AWTAccessor.getInvocationEventAccessor().dispose() + // which we do not control, so complete here. + thisEvent.futureResult.completeExceptionally(new Throwable("InvocationEvent was disposed")) + ); + } + }, + catchThrowables)); + return eventRef.get(); + } + + protected TrackedInvocationEvent(Object source, Runnable onDispatched, Runnable onDone, boolean catchThrowables) { + super(source, + Optional.of(onDispatched).orElse(EMPTY_RUNNABLE), + Optional.of(onDone).orElse(EMPTY_RUNNABLE), + catchThrowables); + + futureResult.whenComplete((r, ex) -> { + if (ex != null) { + String message = ex.getMessage() + " (awaiting " + (System.currentTimeMillis() - creationTime) + " ms)"; + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + ex.initCause(throwable); + logger.fine(message, ex); + } else if (logger.isLoggable(PlatformLogger.Level.INFO)) { + StackTraceElement[] stack = throwable.getStackTrace(); + logger.info(message + ". Originated at " + stack[stack.length - 1]); + } + } + }); + } + + @Override + public void dispatch() { + // Should not complete if competion has already started. + if (completeIfNotYet(super::dispatch)) { + futureResult.complete(null); + } + } + + public void dispose(String reason) { + completeIfNotYet(() -> AWTAccessor.getInvocationEventAccessor().dispose(this)); + // Should complete exceptionally regardless of whether completetion has alredy started or hasn't. + futureResult.completeExceptionally(new Throwable(reason)); + } + + private boolean completeIfNotYet(Runnable competeRunnable) { + if (!isCompletionStarted.getAndSet(true)) { + competeRunnable.run(); + return true; + } + return false; + } + + /** + * Returns whether the event is dispatched or disposed. + */ + public boolean isCompleted() { + return futureResult.isDone(); + } + + /** + * Returns whether the event is dispatched or disposed. + * If {@code isCompletionInProgress} is true then also checks whether the event + * dispatching or disposal is in progress and if so returns true. + */ + public boolean isCompleted(boolean isCompletionInProgress) { + return isCompleted() || (isCompletionInProgress && isCompletionStarted.get()); + } + + /** + * Calls the runnable when it's done (immediately if it's done). + */ + public void onDone(Runnable runnable) { + futureResult.whenComplete((r, ex) -> Optional.of(runnable).orElse(EMPTY_RUNNABLE).run()); + } + } + + public static AWTThreading getInstance(Object obj) { + if (obj == null) { + return getInstance(Toolkit.getDefaultToolkit().getSystemEventQueue()); + } + + AppContext appContext = SunToolkit.targetToAppContext(obj); + if (appContext == null) { + return getInstance(Toolkit.getDefaultToolkit().getSystemEventQueue()); + } + + return getInstance((EventQueue)appContext.get(AppContext.EVENT_QUEUE_KEY)); + } + + public static AWTThreading getInstance(EventQueue eq) { + if (eq == null) return null; + + return getInstance(AWTAccessor.getEventQueueAccessor().getDispatchThread(eq)); + } + + public static AWTThreading getInstance(Thread edt) { + assert edt != null; + + return EDT_TO_INSTANCE_MAP.computeIfAbsent(edt, key -> theAWTThreadingFactory.get().apply(edt)); + } + + public Thread getEventDispatchThread() { + return eventDispatchThread; + } + + public StringWriter printEventDispatchThreadStackTrace() { + return printEventDispatchThreadStackTrace(new StringWriter()); + } + + public StringWriter printEventDispatchThreadStackTrace(StringWriter writer) { + assert writer != null; + var printer = new PrintWriter(writer); + Thread dispatchThread = getEventDispatchThread(); + printer.println(dispatchThread.getName()); + Arrays.asList(dispatchThread.getStackTrace()).forEach(frame -> printer.append("\tat ").println(frame)); + return writer; + } + + /** + * Sets {@code AWTThreading} instance factory. + * WARNING: for testing purpose. + */ + public static void setAWTThreadingFactory(Function factory) { + theAWTThreadingFactory.set(factory); + } + + /** + * Must be called on the EventDispatch thread. + */ + public void notifyEventDispatchThreadStarted() { + if (FontUtilities.isMacOSX) notifyEventDispatchThreadStartedNative(); + } + + private static native void notifyEventDispatchThreadStartedNative(); + + public void notifyEventDispatchThreadFree() { + List> notifiers = Collections.emptyList(); + synchronized (eventDispatchThreadStateNotifiers) { + isEventDispatchThreadFree = true; + if (eventDispatchThreadStateNotifiers.size() > 0) { + notifiers = List.copyOf(eventDispatchThreadStateNotifiers); + } + } + if (logger.isLoggable(PlatformLogger.Level.FINER)) { + logger.finer("notifyEventDispatchThreadFree"); + } + // notify callbacks out of the synchronization block + notifiers.forEach(f -> f.complete(null)); + } + + public void notifyEventDispatchThreadBusy() { + synchronized (eventDispatchThreadStateNotifiers) { + isEventDispatchThreadFree = false; + } + if (logger.isLoggable(PlatformLogger.Level.FINER)) { + logger.finer("notifyEventDispatchThreadBusy"); + } + } + + /** + * Sets a callback and returns a {@code CompletableFuture} reporting the case when the associated EventDispatch thread + * has gone sleeping and stopped dispatching events because of empty EventQueue. If the EventDispatch thread is free + * at the moment then the callback is called immediately on the caller's thread and the future completes. + */ + public CompletableFuture onEventDispatchThreadFree(Runnable runnable) { + CompletableFuture future = new CompletableFuture<>(); + future.thenRun(Optional.of(runnable).orElse(EMPTY_RUNNABLE)); + + if (!isEventDispatchThreadFree) { + synchronized (eventDispatchThreadStateNotifiers) { + if (!isEventDispatchThreadFree) { + eventDispatchThreadStateNotifiers.add(future); + future.whenComplete((r, ex) -> { + synchronized (eventDispatchThreadStateNotifiers) { + eventDispatchThreadStateNotifiers.remove(future); + } + }); + return future; + } + } + } + if (logger.isLoggable(PlatformLogger.Level.FINER)) { + logger.finer("onEventDispatchThreadFree: free at the moment"); + } + future.complete(null); + return future; + } +} diff --git a/src/java.desktop/share/classes/sun/awt/DisplayParametersChangedListener.java b/src/java.desktop/share/classes/sun/awt/DisplayParametersChangedListener.java new file mode 100644 index 000000000000..69c34ffd76ef --- /dev/null +++ b/src/java.desktop/share/classes/sun/awt/DisplayParametersChangedListener.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.awt; + +import java.util.EventListener; + +public interface DisplayParametersChangedListener extends EventListener { + /** + * Invoked when the display parameters changed. + */ + public void displayParametersChanged(); +} diff --git a/src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java b/src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java index 3cba18caf8d8..a1ac708f20aa 100644 --- a/src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java +++ b/src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java @@ -43,7 +43,7 @@ public class ExtendedKeyCodes { // known keyboard layout. For instance, sterling sign is on the primary layer // of the Mac Italian layout. private static final HashSet extendedKeyCodesSet = - new HashSet<>(496, 1.0f); + new HashSet<>(510, 1.0f); public static int getExtendedKeyCodeForChar( int c ) { int uc = Character.toUpperCase( c ); Integer regularKeyCode = regularKeyCodesMap.get(c); @@ -657,5 +657,21 @@ public static int getExtendedKeyCodeForChar( int c ) { extendedKeyCodesSet.add(0x01000000+0x01A1); extendedKeyCodesSet.add(0x01000000+0x01B0); extendedKeyCodesSet.add(0x01000000+0x20AB); + + // Additional keys discovered on the base layers of macOS ascii-capable keyboards + extendedKeyCodesSet.add(0x01000000+0x00A4); + extendedKeyCodesSet.add(0x01000000+0x00B8); + extendedKeyCodesSet.add(0x01000000+0x0219); + extendedKeyCodesSet.add(0x01000000+0x021B); + extendedKeyCodesSet.add(0x01000000+0x0254); + extendedKeyCodesSet.add(0x01000000+0x025B); + extendedKeyCodesSet.add(0x01000000+0x028B); + extendedKeyCodesSet.add(0x01000000+0x02BB); + extendedKeyCodesSet.add(0x01000000+0x02BC); + extendedKeyCodesSet.add(0x01000000+0x02C7); + extendedKeyCodesSet.add(0x01000000+0x0301); + extendedKeyCodesSet.add(0x01000000+0x0309); + extendedKeyCodesSet.add(0x01000000+0x0323); + extendedKeyCodesSet.add(0x01000000+0x0331); } } diff --git a/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java b/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java index 86b957398f77..83f9a83d7efe 100644 --- a/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java +++ b/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java @@ -107,9 +107,7 @@ public static boolean shouldFocusOnClick(Component component) { @SuppressWarnings("deprecation") public static boolean deliverFocus(Component lightweightChild, Component target, - boolean temporary, - boolean focusedWindowChangeAllowed, - long time, + boolean highPriority, FocusEvent.Cause cause, Component currentFocusOwner) // provided by the descendant peers { @@ -128,7 +126,11 @@ public static boolean deliverFocus(Component lightweightChild, if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { focusLog.finer("Posting focus event: " + fl); } - SunToolkit.postEvent(SunToolkit.targetToAppContext(currentOwner), fl); + if (highPriority) { + SunToolkit.postPriorityEvent(fl); + } else { + SunToolkit.postEvent(SunToolkit.targetToAppContext(currentOwner), fl); + } } FocusEvent fg = new FocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, @@ -137,7 +139,11 @@ public static boolean deliverFocus(Component lightweightChild, if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { focusLog.finer("Posting focus event: " + fg); } - SunToolkit.postEvent(SunToolkit.targetToAppContext(lightweightChild), fg); + if (highPriority) { + SunToolkit.postPriorityEvent(fg); + } else { + SunToolkit.postEvent(SunToolkit.targetToAppContext(lightweightChild), fg); + } return true; } @@ -152,11 +158,12 @@ public static int shouldNativelyFocusHeavyweight(Component heavyweight, boolean temporary, boolean focusedWindowChangeAllowed, long time, - FocusEvent.Cause cause) + FocusEvent.Cause cause, + boolean highPriorityEvents) { return KfmAccessor.instance.shouldNativelyFocusHeavyweight( heavyweight, descendant, temporary, focusedWindowChangeAllowed, - time, cause); + time, cause, highPriorityEvents); } public static void removeLastFocusRequest(Component heavyweight) { diff --git a/src/java.desktop/share/classes/sun/awt/SunDisplayChanger.java b/src/java.desktop/share/classes/sun/awt/SunDisplayChanger.java index 8cab1acfb723..ef65c10c87f8 100644 --- a/src/java.desktop/share/classes/sun/awt/SunDisplayChanger.java +++ b/src/java.desktop/share/classes/sun/awt/SunDisplayChanger.java @@ -26,13 +26,8 @@ package sun.awt; import java.awt.IllegalComponentStateException; -import java.util.Collections; -import java.util.Iterator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; +import java.util.*; +import java.util.function.Consumer; import sun.util.logging.PlatformLogger; @@ -105,38 +100,7 @@ public void notifyListeners() { if (log.isLoggable(PlatformLogger.Level.FINEST)) { log.finest("notifyListeners"); } - // This method is implemented by making a clone of the set of listeners, - // and then iterating over the clone. This is because during the course - // of responding to a display change, it may be appropriate for a - // DisplayChangedListener to add or remove itself from a SunDisplayChanger. - // If the set itself were iterated over, rather than a clone, it is - // trivial to get a ConcurrentModificationException by having a - // DisplayChangedListener remove itself from its list. - // Because all display change handling is done on the event thread, - // synchronization provides no protection against modifying the listener - // list while in the middle of iterating over it. -bchristi 7/10/2001 - - Set cloneSet; - - synchronized(listeners) { - cloneSet = new HashSet(listeners.keySet()); - } - - for (DisplayChangedListener current : cloneSet) { - try { - if (log.isLoggable(PlatformLogger.Level.FINEST)) { - log.finest("displayChanged for listener: " + current); - } - current.displayChanged(); - } catch (IllegalComponentStateException e) { - // This DisplayChangeListener is no longer valid. Most - // likely, a top-level window was dispose()d, but its - // Java objects have not yet been garbage collected. In any - // case, we no longer need to track this listener, though we - // do need to remove it from the original list, not the clone. - listeners.remove(current); - } - } + notifyChanged(DisplayChangedListener::displayChanged, "displayChanged"); } /* @@ -147,28 +111,34 @@ public void notifyPaletteChanged() { if (log.isLoggable(PlatformLogger.Level.FINEST)) { log.finest("notifyPaletteChanged"); } - // This method is implemented by making a clone of the set of listeners, - // and then iterating over the clone. This is because during the course - // of responding to a display change, it may be appropriate for a - // DisplayChangedListener to add or remove itself from a SunDisplayChanger. - // If the set itself were iterated over, rather than a clone, it is - // trivial to get a ConcurrentModificationException by having a - // DisplayChangedListener remove itself from its list. - // Because all display change handling is done on the event thread, - // synchronization provides no protection against modifying the listener - // list while in the middle of iterating over it. -bchristi 7/10/2001 + notifyChanged(DisplayChangedListener::paletteChanged, "paletteChanged"); + } - Set cloneSet; + private void notifyChanged(Consumer callback, String callbackName) { + // This method is implemented by making a clone of the set of listeners, + // and then iterating over the clone. This is because during the course + // of responding to a display change, it may be appropriate for a + // DisplayChangedListener to add or remove itself from a SunDisplayChanger. + // If the set itself were iterated over, rather than a clone, it is + // trivial to get a ConcurrentModificationException by having a + // DisplayChangedListener remove itself from its list. + // Because all display change handling is done on the event thread, + // synchronization provides no protection against modifying the listener + // list while in the middle of iterating over it. -bchristi 7/10/2001 + + // Preserve "weakness" of the original map to avoid OOME. + WeakHashMap cloneMap; - synchronized (listeners) { - cloneSet = new HashSet(listeners.keySet()); + synchronized(listeners) { + cloneMap = new WeakHashMap<>(listeners); } - for (DisplayChangedListener current : cloneSet) { + + for (DisplayChangedListener current : cloneMap.keySet()) { try { if (log.isLoggable(PlatformLogger.Level.FINEST)) { - log.finest("paletteChanged for listener: " + current); + log.finest(callbackName + " for listener: " + current); } - current.paletteChanged(); + callback.accept(current); } catch (IllegalComponentStateException e) { // This DisplayChangeListener is no longer valid. Most // likely, a top-level window was dispose()d, but its diff --git a/src/java.desktop/share/classes/sun/awt/SunToolkit.java b/src/java.desktop/share/classes/sun/awt/SunToolkit.java index 355ee995c8c5..60356858fc61 100644 --- a/src/java.desktop/share/classes/sun/awt/SunToolkit.java +++ b/src/java.desktop/share/classes/sun/awt/SunToolkit.java @@ -236,15 +236,38 @@ public abstract KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() AccessController.doPrivileged(new GetBooleanAction("awt.lock.fair"))); private static final Condition AWT_LOCK_COND = AWT_LOCK.newCondition(); + public interface AwtLockListener { + void afterAwtLocked(); + void beforeAwtUnlocked(); + } + + private static java.util.List awtLockListeners; + public static synchronized void addAwtLockListener(AwtLockListener l) { + if (awtLockListeners == null) { + awtLockListeners = Collections.synchronizedList(new ArrayList<>()); + } + awtLockListeners.add(l); + } + public static final void awtLock() { AWT_LOCK.lock(); + if (awtLockListeners != null) { + awtLockListeners.forEach(AwtLockListener::afterAwtLocked); + } } public static final boolean awtTryLock() { - return AWT_LOCK.tryLock(); + final boolean wasLocked = AWT_LOCK.tryLock(); + if (wasLocked && awtLockListeners != null) { + awtLockListeners.forEach(AwtLockListener::afterAwtLocked); + } + return wasLocked; } public static final void awtUnlock() { + if (awtLockListeners != null) { + awtLockListeners.forEach(AwtLockListener::beforeAwtUnlocked); + } AWT_LOCK.unlock(); } @@ -479,6 +502,14 @@ public static void postEvent(AppContext appContext, AWTEvent event) { * Post AWTEvent of high priority. */ public static void postPriorityEvent(final AWTEvent e) { + if (e.getID() == WindowEvent.WINDOW_LOST_FOCUS && + e instanceof TimedWindowEvent) + { + TimedWindowEvent twe = (TimedWindowEvent)e; + ((SunToolkit)Toolkit.getDefaultToolkit()). + setWindowDeactivationTime((Window)twe.getSource(), twe.getWhen()); + } + PeerEvent pe = new PeerEvent(Toolkit.getDefaultToolkit(), new Runnable() { @Override public void run() { @@ -593,6 +624,25 @@ class AWTInvocationLock {} } } + /** + * Must be called on the Event Dispatching thread. + *

          + * Executes the runnable so that it can perform a non-blocking invocation on the toolkit thread. + * By default executes the runnable in place. Toolkits which can not rely on the default behavior + * provide platform-specific implementation to ensure the non-blocking invocation. + *

          + * The method may be unsafe and is only used (externally) in critical deadlock-prone cases. + * + * @param runnable the runnable to execute + * @throws Error when called on not Event Dispatching thread + */ + public void unsafeNonblockingExecute(Runnable runnable) { + if (!EventQueue.isDispatchThread()) { + throw new Error("the method must be called on the Event Dispatching thread"); + } + if (runnable != null) runnable.run(); + } + /* * Returns true if the calling thread is the event dispatch thread * contained within AppContext which associated with the given target. @@ -1956,6 +2006,10 @@ public boolean isSwingBackbufferTranslucencySupported() { return false; } + public boolean popupMenusAreSpecial() { + return false; + } + /** * Returns whether or not a containing top level window for the passed * component is @@ -1999,6 +2053,10 @@ public boolean needUpdateWindow() { return false; } + public boolean needUpdateWindowAfterPaint() { + return false; + } + /** * Descendants of the SunToolkit should override and put their own logic here. */ diff --git a/src/java.desktop/share/classes/sun/awt/event/KeyEvent.java b/src/java.desktop/share/classes/sun/awt/event/KeyEvent.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/java.desktop/share/classes/sun/awt/event/KeyEventProcessing.java b/src/java.desktop/share/classes/sun/awt/event/KeyEventProcessing.java new file mode 100644 index 000000000000..f7b506796d0b --- /dev/null +++ b/src/java.desktop/share/classes/sun/awt/event/KeyEventProcessing.java @@ -0,0 +1,29 @@ +package sun.awt.event; + +import sun.font.FontUtilities; + +import java.lang.annotation.Native; + +public class KeyEventProcessing { + // This property is used to emulate old behavior + // when user should turn off national keycodes processing + // "com.jetbrains.use.old.keyevent.processing" + public final static String useNationalLayoutsOption = "com.sun.awt.use.national.layouts"; + @Native + public final static boolean useNationalLayouts = "true".equals( + System.getProperty(useNationalLayoutsOption, + FontUtilities.isMacOSX ? "true" : "false")); + + // Report dead keys (such as VK_DEAD_GRAVE) as normal keys (such as VK_BACK_QUOTE) + public final static String reportDeadKeysAsNormalOption = "com.sun.awt.reportDeadKeysAsNormal"; + @Native + public final static boolean reportDeadKeysAsNormal = "true".equals( + System.getProperty(reportDeadKeysAsNormalOption, + FontUtilities.isMacOSX ? "true" : "false")); + + // Used on windows to emulate latin OEM keys on cyrillic keyboards + public final static String useLatinNonAlphaNumKeycodesOption = "com.sun.awt.useLatinNonAlphaNumKeycodes"; + @Native + public final static boolean useLatinNonAlphaNumKeycodes = "true".equals( + System.getProperty(useLatinNonAlphaNumKeycodesOption, "false")); +} diff --git a/src/java.desktop/share/classes/sun/awt/event/TouchEvent.java b/src/java.desktop/share/classes/sun/awt/event/TouchEvent.java new file mode 100644 index 000000000000..e850270c157f --- /dev/null +++ b/src/java.desktop/share/classes/sun/awt/event/TouchEvent.java @@ -0,0 +1,27 @@ +package sun.awt.event; + +import java.lang.annotation.Native; + +public class TouchEvent { + @Native public static final int TOUCH_BEGIN = 2; + @Native public static final int TOUCH_UPDATE = 3; + @Native public static final int TOUCH_END = 4; + + /** + * The allowable difference between coordinates of touch update events + * in pixels + */ + @Native public static final int CLICK_RADIUS = 10; + + /** + * Stop owning touch processing after timeout + * in ms + */ + public static final long NO_UPDATE_TIMEOUT = 1000L; + + public final static String defaultTouchHandlingOption = "com.jetbrains.default.touchscreen.mode"; + + @Native + public final static boolean defaultTouchHandling = "true".equalsIgnoreCase( + System.getProperty(defaultTouchHandlingOption, "false")); +} diff --git a/src/java.desktop/share/classes/sun/awt/image/VolatileSurfaceManager.java b/src/java.desktop/share/classes/sun/awt/image/VolatileSurfaceManager.java index 9e28875b5e46..48bfbb4fbaee 100644 --- a/src/java.desktop/share/classes/sun/awt/image/VolatileSurfaceManager.java +++ b/src/java.desktop/share/classes/sun/awt/image/VolatileSurfaceManager.java @@ -68,14 +68,14 @@ public abstract class VolatileSurfaceManager /** * The accelerated SurfaceData object. */ - protected SurfaceData sdAccel; + protected volatile SurfaceData sdAccel; /** * The software-based SurfaceData object. Only create when first asked * to (otherwise it is a waste of memory as it will only be used in * situations of surface loss). */ - protected SurfaceData sdBackup; + protected volatile SurfaceData sdBackup; /** * The current SurfaceData object. @@ -138,6 +138,9 @@ public void initialize() { } public SurfaceData getPrimarySurfaceData() { + if (sdCurrent == null) { + sdCurrent = getBackupSurface(); + } return sdCurrent; } @@ -346,17 +349,22 @@ protected void restoreAcceleratedSurface() { */ public void displayChanged() { lostSurface = true; - if (sdAccel != null) { + boolean needBackup = false; + SurfaceData oldData = sdAccel; + if (oldData != null) { // First, nullify the software surface. This guards against // using a SurfaceData that was created in a different // display mode. - sdBackup = null; + if (sdBackup != null) { + sdBackup = null; + needBackup = true; + } + // Clear primary surface data for lazy initialization + sdCurrent = null; // Now, invalidate the old hardware-based SurfaceData // Note that getBackupSurface may set sdAccel to null so we have to invalidate it before - SurfaceData oldData = sdAccel; sdAccel = null; oldData.invalidate(); - sdCurrent = getBackupSurface(); } // Update graphicsConfig for the vImg in case it changed due to // this display change event @@ -373,14 +381,21 @@ public void displayChanged() { // a provision would cause mismatch in graphics configuration of // the display and the surface. Hence we re-create the software // surface as well. - sdBackup = null; - sdCurrent = getBackupSurface(); + if (sdBackup != null) { + sdBackup = null; + needBackup = true; + } + // Clear primary surface data for lazy initialization + sdCurrent = null; } else { // Software backed surface was not invalidated. lostSurface = false; } } + if (needBackup) { + sdCurrent = getBackupSurface(); + } // Update the AffineTransformation backing the volatile image atCurrent = atUpdated; } diff --git a/src/java.desktop/share/classes/sun/font/CMap.java b/src/java.desktop/share/classes/sun/font/CMap.java index 6df5d3cc7328..145c6853d552 100644 --- a/src/java.desktop/share/classes/sun/font/CMap.java +++ b/src/java.desktop/share/classes/sun/font/CMap.java @@ -1064,7 +1064,7 @@ char getGlyph(int charCode) { public static final NullCMapClass theNullCmap = new NullCMapClass(); - final int getControlCodeGlyph(int charCode, boolean noSurrogates) { + static int getControlCodeGlyph(int charCode, boolean noSurrogates) { if (charCode < 0x0010) { switch (charCode) { case 0x0009: @@ -1077,7 +1077,7 @@ final int getControlCodeGlyph(int charCode, boolean noSurrogates) { return -1; } - final char getFormatCharGlyph(int charCode) { + static char getFormatCharGlyph(int charCode) { if (charCode >= 0x200c) { if ((charCode <= 0x200f) || (charCode >= 0x2028 && charCode <= 0x202e) || @@ -1144,15 +1144,17 @@ static class UVS { } } - static final int VS_NOGLYPH = 0; - private int getGlyph(int charCode, int variationSelector) { - int targetSelector = -1; + private int findVariationSelectorIndex(int variationSelector) { for (int i = 0; i < numSelectors; i++) { if (selector[i] == variationSelector) { - targetSelector = i; - break; + return i; } } + return -1; + } + + static final int VS_NOGLYPH = 0; + private int getGlyph(int charCode, int targetSelector) { if (targetSelector == -1) { return VS_NOGLYPH; } @@ -1168,15 +1170,19 @@ private int getGlyph(int charCode, int variationSelector) { } char getVariationGlyph(int charCode, int variationSelector) { + if (variationSelector == 0) { + return getGlyph(charCode); + } char glyph = 0; - if (uvs == null) { - glyph = getGlyph(charCode); - } else { - int result = uvs.getGlyph(charCode, variationSelector); - if (result > 0) { - glyph = (char)(result & 0xFFFF); - } else { - glyph = getGlyph(charCode); + if (uvs != null) { + int targetSelector = uvs.findVariationSelectorIndex(variationSelector); + if (targetSelector != -1) { + int result = uvs.getGlyph(charCode, targetSelector); + if (result > 0) { + glyph = (char)(result & 0xFFFF); + } else { + glyph = getGlyph(charCode); + } } } return glyph; diff --git a/src/java.desktop/share/classes/sun/font/CharToGlyphMapper.java b/src/java.desktop/share/classes/sun/font/CharToGlyphMapper.java index bac385d81db2..0672ac7c8f60 100644 --- a/src/java.desktop/share/classes/sun/font/CharToGlyphMapper.java +++ b/src/java.desktop/share/classes/sun/font/CharToGlyphMapper.java @@ -88,14 +88,46 @@ public int charToVariationGlyph(int unicode, int variationSelector) { public abstract int getNumGlyphs(); - public abstract void charsToGlyphs(int count, - char[] unicodes, int[] glyphs); + private boolean charsToGlyphs(int count, char[] unicodes, int[] glyphs, boolean checkShaping) { + for (int i = 0; i < count; i++) { + int code = unicodes[i]; // char is unsigned. + if (code >= HI_SURROGATE_START && code <= HI_SURROGATE_END && i < count - 1) { + char low = unicodes[i + 1]; + if (low >= LO_SURROGATE_START && low <= LO_SURROGATE_END) { + code = (code - HI_SURROGATE_START) * 0x400 + low - LO_SURROGATE_START + 0x10000; + glyphs[i + 1] = INVISIBLE_GLYPH_ID; + } + } + + glyphs[i] = charToGlyph(code); + + if (code >= FontUtilities.MIN_LAYOUT_CHARCODE) { + if (checkShaping && + (FontUtilities.isComplexCharCode(code) || + CharToGlyphMapper.isVariationSelector(code))) { + return true; + } else if (code >= 0x10000) { + i++; // Empty glyph slot after surrogate. + } + } + } + return false; + } - public abstract boolean charsToGlyphsNS(int count, - char[] unicodes, int[] glyphs); + public void charsToGlyphs(int count, char[] unicodes, int[] glyphs) { + charsToGlyphs(count, unicodes, glyphs, false); + } - public abstract void charsToGlyphs(int count, - int[] unicodes, int[] glyphs); + public boolean charsToGlyphsNS(int count, char[] unicodes, int[] glyphs) { + return charsToGlyphs(count, unicodes, glyphs, true); + } + + public void charsToGlyphs(int count, + int[] unicodes, int[] glyphs) { + for (int i = 0; i < count; i++) { + glyphs[i] = charToGlyph(unicodes[i]); + } + } public static boolean isVariationSelector(int charCode) { return ((charCode >= VSS_START && charCode <= VSS_END) || diff --git a/src/java.desktop/share/classes/sun/font/CompositeFont.java b/src/java.desktop/share/classes/sun/font/CompositeFont.java index bc136d75cfa1..3e296dee8b29 100644 --- a/src/java.desktop/share/classes/sun/font/CompositeFont.java +++ b/src/java.desktop/share/classes/sun/font/CompositeFont.java @@ -26,6 +26,8 @@ package sun.font; import java.awt.Font; +import java.util.Arrays; +import java.util.List; /* Remind: need to enhance to extend component list with a fallback * list, which is not used in metrics or queries on the composite, but @@ -38,7 +40,7 @@ * But its probably OK to include it so long as only composites include * fallbacks. If physicals do then it would be really confusing .. */ -public final class CompositeFont extends Font2D { +public class CompositeFont extends Font2D { private boolean[] deferredInitialisation; String[] componentFileNames; @@ -46,13 +48,14 @@ public final class CompositeFont extends Font2D { /* because components can be lazily initialised the components field is * private, to ensure all clients call getSlotFont() */ - private PhysicalFont[] components; + private Font2D[] components; int numSlots; int numMetricsSlots; int[] exclusionRanges; int[] maxIndices; int numGlyphs = 0; int localeSlot = -1; // primary slot for this locale. + int slotShift, slotMask; /* See isStdComposite() for when/how this is used */ boolean isStdComposite = true; @@ -66,65 +69,58 @@ public CompositeFont(String name, String[] compFileNames, fullName = name; componentFileNames = compFileNames; componentNames = compNames; - if (compNames == null) { - numSlots = componentFileNames.length; - } else { - numSlots = componentNames.length; - } - /* We will limit the number of slots to 254. - * We store the slot for a glyph id in a byte and we may use one slot - * for an EUDC font, and we may also create a composite + /* We will limit the number of slots to 255. + * Previously we stored the slot for a glyph + * id in a byte, and we may create a composite * using this composite as a backup for a physical font. - * So we want to leave space for the two additional slots. + * That's not a problem anymore, as number of bits + * reserved for a slot index can vary (see #slotShift), + * but the more it takes, the less is left for actual + * glyph code, so we'll keep this limit for now. */ - numSlots = (numSlots <= 254) ? numSlots : 254; + List additionalFallbackFonts = fm.getAdditionalFallbackFonts(); + numSlots = Math.min(255, additionalFallbackFonts.size() + + (compNames != null ? compNames.length : compFileNames.length)); /* Only the first "numMetricsSlots" slots are used for font metrics. * the rest are considered "fallback" slots". */ - numMetricsSlots = metricsSlotCnt; + numMetricsSlots = Math.min(metricsSlotCnt, numSlots); exclusionRanges = exclRanges; maxIndices = maxIndexes; + components = new Font2D[numSlots]; + deferredInitialisation = new boolean[numSlots]; + if (defer) { + Arrays.fill(deferredInitialisation, 0, numMetricsSlots, true); + Arrays.fill(deferredInitialisation, numMetricsSlots + + additionalFallbackFonts.size(), numSlots, true); + } /* - * See if this is a windows locale which has a system EUDC font. - * If so add it as the final fallback component of the composite. + * Insert additional fallback fonts if any. * The caller could be responsible for this, but for now it seems * better that it is handled internally to the CompositeFont class. */ - if (fm.getEUDCFont() != null) { + if (!additionalFallbackFonts.isEmpty()) { int msCnt = numMetricsSlots; - int fbCnt = numSlots - msCnt; - numSlots++; + int adCnt = additionalFallbackFonts.size(); + int fbCnt = numSlots - msCnt - adCnt; if (componentNames != null) { componentNames = new String[numSlots]; System.arraycopy(compNames, 0, componentNames, 0, msCnt); - componentNames[msCnt] = fm.getEUDCFont().getFontName(null); - System.arraycopy(compNames, msCnt, - componentNames, msCnt+1, fbCnt); + for (int i = 0; i < adCnt; i++) { + componentNames[msCnt + i] = + additionalFallbackFonts.get(i).getFontName(null); + } + System.arraycopy(compNames, msCnt, componentNames, msCnt+adCnt, fbCnt); } if (componentFileNames != null) { componentFileNames = new String[numSlots]; - System.arraycopy(compFileNames, 0, - componentFileNames, 0, msCnt); - System.arraycopy(compFileNames, msCnt, - componentFileNames, msCnt+1, fbCnt); + System.arraycopy(compFileNames, 0, componentFileNames, 0, msCnt); + System.arraycopy(compFileNames, msCnt, componentFileNames, msCnt+adCnt, fbCnt); } - components = new PhysicalFont[numSlots]; - components[msCnt] = fm.getEUDCFont(); - deferredInitialisation = new boolean[numSlots]; - if (defer) { - for (int i=0; i>> slotShift; + } + + int compositeGlyphCode(int slot, int glyphCode) { + return (glyphCode << slotShift) | (slot & slotMask); } /* This is used for deferred initialisation, so that the components of @@ -300,15 +317,10 @@ private void doDeferredInitialisation(int slot) { * return composite font which cannot be casted to * physical font. */ - try { - components[slot] = - (PhysicalFont) fm.findFont2D(componentNames[slot], - style, - FontManager.PHYSICAL_FALLBACK); - } catch (ClassCastException cce) { - /* Assign default physical font to the slot */ - components[slot] = fm.getDefaultPhysicalFont(); - } + components[slot] = + fm.findFont2D(componentNames[slot], + style, + FontManager.PHYSICAL_FALLBACK); } } deferredInitialisation[slot] = false; @@ -316,7 +328,7 @@ private void doDeferredInitialisation(int slot) { } /* To called only by FontManager.replaceFont */ - void replaceComponentFont(PhysicalFont oldFont, PhysicalFont newFont) { + void replaceComponentFont(Font2D oldFont, Font2D newFont) { if (components == null) { return; } @@ -354,7 +366,7 @@ public boolean isExcludedChar(int slot, int charcode) { } public void getStyleMetrics(float pointSize, float[] metrics, int offset) { - PhysicalFont font = getSlotFont(0); + Font2D font = getSlotFont(0); if (font == null) { // possible? super.getStyleMetrics(pointSize, metrics, offset); } else { @@ -366,7 +378,7 @@ public int getNumSlots() { return numSlots; } - public PhysicalFont getSlotFont(int slot) { + public Font2D getSlotFont(int slot) { /* This is essentially the runtime overhead for deferred font * initialisation: a boolean test on obtaining a slot font, * which will happen per slot, on initialisation of a strike @@ -377,16 +389,12 @@ public PhysicalFont getSlotFont(int slot) { } SunFontManager fm = SunFontManager.getInstance(); try { - PhysicalFont font = components[slot]; + Font2D font = components[slot]; if (font == null) { - try { - font = (PhysicalFont) fm. - findFont2D(componentNames[slot], style, - FontManager.PHYSICAL_FALLBACK); - components[slot] = font; - } catch (ClassCastException cce) { - font = fm.getDefaultPhysicalFont(); - } + font = fm. + findFont2D(componentNames[slot], style, + FontManager.PHYSICAL_FALLBACK); + components[slot] = font; } return font; } catch (Exception e) { @@ -413,13 +421,13 @@ public boolean isStdComposite() { * glyph elsewhere. */ protected int getValidatedGlyphCode(int glyphCode) { - int slot = glyphCode >>> 24; + int slot = decodeSlot(glyphCode); if (slot >= numSlots) { return getMapper().getMissingGlyphCode(); } - int slotglyphCode = glyphCode & CompositeStrike.SLOTMASK; - PhysicalFont slotFont = getSlotFont(slot); + int slotglyphCode = decodeGlyphCode(glyphCode); + Font2D slotFont = getSlotFont(slot); if (slotFont.getValidatedGlyphCode(slotglyphCode) == slotFont.getMissingGlyphCode()) { return getMapper().getMissingGlyphCode(); @@ -488,6 +496,14 @@ public boolean useAAForPtSize(int ptsize) { return getSlotFont(localeSlot).useAAForPtSize(ptsize); } + @Override + public SlotInfo getSlotInfoForGlyph(int glyphCode) { + SlotInfo info = getSlotFont(decodeSlot(glyphCode)) + .getSlotInfoForGlyph(decodeGlyphCode(glyphCode)); + info.slotShift += slotShift; + return info; + } + public String toString() { String ls = System.lineSeparator(); String componentsStr = ""; diff --git a/src/java.desktop/share/classes/sun/font/CompositeGlyphMapper.java b/src/java.desktop/share/classes/sun/font/CompositeGlyphMapper.java index cd53d96d0f4e..a9dafb09a1ca 100644 --- a/src/java.desktop/share/classes/sun/font/CompositeGlyphMapper.java +++ b/src/java.desktop/share/classes/sun/font/CompositeGlyphMapper.java @@ -31,23 +31,11 @@ * and the JDK scaler others. That needs to be dealt with somewhere, but * here we can just always get the same glyph code without * needing a strike. - * - * The C implementation would cache the results of anything up - * to the maximum surrogate pair code point. - * This implementation will not cache as much, since the storage - * requirements are not justifiable. Even so it still can use up - * to 216*256*4 bytes of storage per composite font. If an app - * calls canDisplay on this range for all 20 composite fonts that's - * over 1Mb of cached data. May need to employ WeakReferences if - * this appears to cause problems. */ public class CompositeGlyphMapper extends CharToGlyphMapper { - public static final int SLOTMASK = 0xff000000; - public static final int GLYPHMASK = 0x00ffffff; - - public static final int NBLOCKS = 216; + public static final int NBLOCKS = 512; // covering BMP and SMP public static final int BLOCKSZ = 256; public static final int MAXUNICODE = NBLOCKS*BLOCKSZ; @@ -67,10 +55,6 @@ public CompositeGlyphMapper(CompositeFont compFont) { compFont.maxIndices != null; } - public int compositeGlyphCode(int slot, int glyphCode) { - return (slot << 24 | (glyphCode & GLYPHMASK)); - } - private void initMapper() { if (missingGlyph == CharToGlyphMapper.UNINITIALIZED_GLYPH) { if (glyphMaps == null) { @@ -79,13 +63,13 @@ private void initMapper() { slotMappers = new CharToGlyphMapper[font.numSlots]; /* This requires that slot 0 is never empty. */ missingGlyph = font.getSlotFont(0).getMissingGlyphCode(); - missingGlyph = compositeGlyphCode(0, missingGlyph); + missingGlyph = font.compositeGlyphCode(0, missingGlyph); } } private int getCachedGlyphCode(int unicode) { if (unicode >= MAXUNICODE) { - return UNINITIALIZED_GLYPH; // don't cache surrogates + return UNINITIALIZED_GLYPH; } int[] gmap; if ((gmap = glyphMaps[unicode >> 8]) == null) { @@ -94,9 +78,9 @@ private int getCachedGlyphCode(int unicode) { return gmap[unicode & 0xff]; } - private void setCachedGlyphCode(int unicode, int glyphCode) { + void setCachedGlyphCode(int unicode, int glyphCode) { if (unicode >= MAXUNICODE) { - return; // don't cache surrogates + return; } int index0 = unicode >> 8; if (glyphMaps[index0] == null) { @@ -117,15 +101,21 @@ private CharToGlyphMapper getSlotMapper(int slot) { return mapper; } - private int convertToGlyph(int unicode) { + protected int convertToGlyph(int unicode) { + return convertToGlyph(unicode, 0); + } + + protected int convertToGlyph(int unicode, int variationSelector) { for (int slot = 0; slot < font.numSlots; slot++) { if (!hasExcludes || !font.isExcludedChar(slot, unicode)) { CharToGlyphMapper mapper = getSlotMapper(slot); - int glyphCode = mapper.charToGlyph(unicode); + int glyphCode = mapper.charToVariationGlyph(unicode, variationSelector); if (glyphCode != mapper.getMissingGlyphCode()) { - glyphCode = compositeGlyphCode(slot, glyphCode); - setCachedGlyphCode(unicode, glyphCode); + glyphCode = font.compositeGlyphCode(slot, glyphCode); + if (variationSelector == 0) { + setCachedGlyphCode(unicode, glyphCode); + } return glyphCode; } } @@ -133,6 +123,17 @@ private int convertToGlyph(int unicode) { return missingGlyph; } + @Override + public int charToVariationGlyph(int unicode, int variationSelector) { + if (variationSelector == 0) { + return charToGlyph(unicode); + } else { + int glyph = convertToGlyph(unicode, variationSelector); + // Fallback to base glyph if variation was not found. + return glyph != missingGlyph ? glyph : charToGlyph(unicode); + } + } + public int getNumGlyphs() { int numGlyphs = 0; /* The number of glyphs in a composite is affected by @@ -169,7 +170,7 @@ public int charToGlyph(int unicode, int prefSlot) { CharToGlyphMapper mapper = getSlotMapper(prefSlot); int glyphCode = mapper.charToGlyph(unicode); if (glyphCode != mapper.getMissingGlyphCode()) { - return compositeGlyphCode(prefSlot, glyphCode); + return font.compositeGlyphCode(prefSlot, glyphCode); } } return charToGlyph(unicode); @@ -184,91 +185,4 @@ public int charToGlyph(char unicode) { return glyphCode; } - /* This variant checks if shaping is needed and immediately - * returns true if it does. A caller of this method should be expecting - * to check the return type because it needs to know how to handle - * the character data for display. - */ - public boolean charsToGlyphsNS(int count, char[] unicodes, int[] glyphs) { - - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - glyphs[i + 1] = INVISIBLE_GLYPH_ID; - } - } - - int gc = glyphs[i] = getCachedGlyphCode(code); - if (gc == UNINITIALIZED_GLYPH) { - glyphs[i] = convertToGlyph(code); - } - - if (code < FontUtilities.MIN_LAYOUT_CHARCODE) { - continue; - } - else if (FontUtilities.isComplexCharCode(code) || - CharToGlyphMapper.isVariationSelector(code)) { - return true; - } - else if (code >= 0x10000) { - i += 1; // Empty glyph slot after surrogate - continue; - } - } - - return false; - } - - /* The conversion is not very efficient - looping as it does, converting - * one char at a time. However the cache should fill very rapidly. - */ - public void charsToGlyphs(int count, char[] unicodes, int[] glyphs) { - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - - int gc = glyphs[i] = getCachedGlyphCode(code); - if (gc == UNINITIALIZED_GLYPH) { - glyphs[i] = convertToGlyph(code); - } - i += 1; // Empty glyph slot after surrogate - glyphs[i] = INVISIBLE_GLYPH_ID; - continue; - } - } - - int gc = glyphs[i] = getCachedGlyphCode(code); - if (gc == UNINITIALIZED_GLYPH) { - glyphs[i] = convertToGlyph(code); - } - } - } - - public void charsToGlyphs(int count, int[] unicodes, int[] glyphs) { - for (int i=0; i>> 24); + FontStrike getStrikeForGlyph(int glyphCode) { + return getStrikeForSlot(compFont.decodeSlot(glyphCode)); } - PhysicalStrike getStrikeForSlot(int slot) { + FontStrike getStrikeForSlot(int slot) { if (slot >= strikes.length) { slot = 0; } - PhysicalStrike strike = strikes[slot]; + FontStrike strike = strikes[slot]; if (strike == null) { strike = - (PhysicalStrike)(compFont.getSlotFont(slot).getStrike(desc)); + compFont.getSlotFont(slot).getStrike(desc); strikes[slot] = strike; } @@ -113,31 +111,32 @@ StrikeMetrics getFontMetrics() { * physical font for that slot will substitute the missing glyph. */ void getGlyphImagePtrs(int[] glyphCodes, long[] images, int len) { - PhysicalStrike strike = getStrikeForSlot(0); - int numptrs = strike.getSlot0GlyphImagePtrs(glyphCodes, images, len); + FontStrike strike = getStrikeForSlot(0); + int numptrs = strike.getSlot0GlyphImagePtrs(glyphCodes, images, len, + compFont.slotMask, compFont.slotShift); if (numptrs == len) { return; } for (int i=numptrs; i< len; i++) { strike = getStrikeForGlyph(glyphCodes[i]); - images[i] = strike.getGlyphImagePtr(glyphCodes[i] & SLOTMASK); + images[i] = strike.getGlyphImagePtr(compFont.decodeGlyphCode(glyphCodes[i])); } } long getGlyphImagePtr(int glyphCode) { - PhysicalStrike strike = getStrikeForGlyph(glyphCode); - return strike.getGlyphImagePtr(glyphCode & SLOTMASK); + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphImagePtr(compFont.decodeGlyphCode(glyphCode)); } void getGlyphImageBounds(int glyphCode, Point2D.Float pt, Rectangle result) { - PhysicalStrike strike = getStrikeForGlyph(glyphCode); - strike.getGlyphImageBounds(glyphCode & SLOTMASK, pt, result); + FontStrike strike = getStrikeForGlyph(glyphCode); + strike.getGlyphImageBounds(compFont.decodeGlyphCode(glyphCode), pt, result); } Point2D.Float getGlyphMetrics(int glyphCode) { - PhysicalStrike strike = getStrikeForGlyph(glyphCode); - return strike.getGlyphMetrics(glyphCode & SLOTMASK); + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphMetrics(compFont.decodeGlyphCode(glyphCode)); } Point2D.Float getCharMetrics(char ch) { @@ -145,8 +144,8 @@ Point2D.Float getCharMetrics(char ch) { } float getGlyphAdvance(int glyphCode) { - PhysicalStrike strike = getStrikeForGlyph(glyphCode); - return strike.getGlyphAdvance(glyphCode & SLOTMASK); + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphAdvance(compFont.decodeGlyphCode(glyphCode)); } /* REMIND where to cache? @@ -161,14 +160,14 @@ float getCodePointAdvance(int cp) { } Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) { - PhysicalStrike strike = getStrikeForGlyph(glyphCode); - return strike.getGlyphOutlineBounds(glyphCode & SLOTMASK); + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphOutlineBounds(compFont.decodeGlyphCode(glyphCode)); } GeneralPath getGlyphOutline(int glyphCode, float x, float y) { - PhysicalStrike strike = getStrikeForGlyph(glyphCode); - GeneralPath path = strike.getGlyphOutline(glyphCode & SLOTMASK, x, y); + FontStrike strike = getStrikeForGlyph(glyphCode); + GeneralPath path = strike.getGlyphOutline(compFont.decodeGlyphCode(glyphCode), x, y); if (path == null) { return new GeneralPath(); } else { @@ -176,42 +175,8 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { } } - /* The physical font slot for each glyph is encoded in the glyph ID - * To be as efficient as possible we find a run of glyphs from the - * same slot and create a temporary array of these glyphs decoded - * to the slot. The slot font is then queried for the GeneralPath - * for that run of glyphs. GeneralPaths from each run are appended - * to create the shape for the whole glyph array. - */ - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { - GeneralPath path = null; - GeneralPath gp; - int glyphIndex = 0; - int[] tmpGlyphs; - - while (glyphIndex < glyphs.length) { - int start = glyphIndex; - int slot = glyphs[glyphIndex] >>> 24; - while (glyphIndex < glyphs.length && - (glyphs[glyphIndex+1] >>> 24) == slot) { - glyphIndex++; - } - int tmpLen = glyphIndex-start+1; - tmpGlyphs = new int[tmpLen]; - for (int i=0;i() { + public Void run() { + String rotatedProperty = System.getProperty("rotated.text.native.rendering"); + useNativesForRotatedText = rotatedProperty == null || Boolean.parseBoolean(rotatedProperty); + forceFreeTypeRendering = Boolean.getBoolean("freetype.font.rendering"); + useDirectWrite = Boolean.getBoolean("directwrite.font.rendering") && isDirectWriteAvailable(); + if (useDirectWrite) { + String options = System.getProperty("directwrite.font.rendering.options"); + if (options != null) { + String[] parts = options.split(":"); + if (parts.length > 0 && parts[0].length() > 0) { + try { dwMeasuringMode = Integer.parseInt(parts[0]); } catch (NumberFormatException ignored) { } + } + if (parts.length > 1 && parts[1].length() > 0) { + try { dwRenderingMode = Integer.parseInt(parts[1]); } catch (NumberFormatException ignored) { } + } + if (parts.length > 2 && parts[2].length() > 0) { + try { dwClearTypeLevel = Float.parseFloat(parts[2]); } catch (NumberFormatException ignored) { } + } + if (parts.length > 3 && parts[3].length() > 0) { + try { dwEnhancedContrast = Float.parseFloat(parts[3]); } catch (NumberFormatException ignored) { } + } + if (parts.length > 4 && parts[4].length() > 0) { + try { dwGamma = Float.parseFloat(parts[4]); } catch (NumberFormatException ignored) { } + } + if (parts.length > 5 && parts[5].length() > 0) { + try { dwPixelGeometry = Integer.parseInt(parts[5]); } catch (NumberFormatException ignored) { } + } + } + } + return null; + } + }); + } } } @@ -205,6 +275,20 @@ public class FileFontStrike extends PhysicalStrike { SunFontManager.getInstance().deRegisterBadFont(fileFont); return; } + + /* Always get the image and the advance together for smaller sizes + * that are likely to be important to rendering performance. + * The pixel size of 48.0 can be thought of as + * "maximumSizeForGetImageWithAdvance". + * This should be no greater than OutlineTextRender.THRESHOLD. + */ + double maxSz = 48.0; + getImageWithAdvance = + Math.abs(at.getScaleX()) <= maxSz && + Math.abs(at.getScaleY()) <= maxSz && + Math.abs(at.getShearX()) <= maxSz && + Math.abs(at.getShearY()) <= maxSz; + /* First, see if native code should be used to create the glyph. * GDI will return the integer metrics, not fractional metrics, which * may be requested for this strike, so we would require here that : @@ -217,12 +301,20 @@ public class FileFontStrike extends PhysicalStrike { !GraphicsEnvironment.isHeadless() && !fileFont.useJavaRasterizer && (desc.aaHint == INTVAL_TEXT_ANTIALIAS_LCD_HRGB || - desc.aaHint == INTVAL_TEXT_ANTIALIAS_LCD_HBGR) && - (matrix[1] == 0.0 && matrix[2] == 0.0 && - matrix[0] == matrix[3] && - matrix[0] >= 3.0 && matrix[0] <= 100.0) && - !((TrueTypeFont)fileFont).useEmbeddedBitmapsForSize(intPtSize)) { - useNatives = true; + desc.aaHint == INTVAL_TEXT_ANTIALIAS_LCD_HBGR)) { + double pts = 0; + if (matrix[1] == 0.0 && matrix[2] == 0.0 && matrix[0] == matrix[3]) { + rotation = matrix[0] > 0 ? 0 : 2; + pts = Math.abs(matrix[0]); + } else if (matrix[0] == 0.0 && matrix[3] == 0.0 && matrix[1] == -matrix[2]) { + rotation = matrix[1] > 0 ? 3 : 1; + pts = Math.abs(matrix[1]); + } + intPtSize = (int) pts; + useNatives = !forceFreeTypeRendering && (rotation == 0 || rotation > 0 && useNativesForRotatedText) && + pts >= 3.0 && pts <= 100.0 && (getImageWithAdvance || desc.fmHint == INTVAL_FRACTIONALMETRICS_ON) && + !((TrueTypeFont)fileFont).useEmbeddedBitmapsForSize(intPtSize) && + !((TrueTypeFont)fileFont).hasCOLRTable(); } if (FontUtilities.isLogging() && FontUtilities.isWindows) { FontUtilities.logInfo("Strike for " + fileFont + " at size = " + intPtSize + @@ -235,19 +327,6 @@ public class FileFontStrike extends PhysicalStrike { } this.disposer = new FontStrikeDisposer(fileFont, desc, pScalerContext); - /* Always get the image and the advance together for smaller sizes - * that are likely to be important to rendering performance. - * The pixel size of 48.0 can be thought of as - * "maximumSizeForGetImageWithAdvance". - * This should be no greater than OutlineTextRender.THRESHOLD. - */ - double maxSz = 48.0; - getImageWithAdvance = - Math.abs(at.getScaleX()) <= maxSz && - Math.abs(at.getScaleY()) <= maxSz && - Math.abs(at.getShearX()) <= maxSz && - Math.abs(at.getShearY()) <= maxSz; - /* Some applications request advance frequently during layout. * If we are not getting and caching the image with the advance, * there is a potentially significant performance penalty if the @@ -295,37 +374,63 @@ private native long _getGlyphImageFromWindows(String family, int size, int glyphCode, boolean fracMetrics, + int rotation, + byte charset, int fontDataSize); + private native long _getGlyphImageFromWindowsUsingDirectWrite(String family, + int style, + int size, + int glyphCode, + int rotation, + int measuringMode, + int renderingMode, + float clearTypeLevel, + float enhancedContrast, + float gamma, + int pixelGeometry, + byte charset); + long getGlyphImageFromWindows(int glyphCode) { String family = fileFont.getFamilyName(null); + FontFamily fontFamily = FontFamily.getFamily(family); int style = desc.style & Font.BOLD | desc.style & Font.ITALIC | fileFont.getStyle(); + if (fontFamily != null && fontFamily.getFont(style) != fileFont) { + style = fileFont.getStyle(); + } int size = intPtSize; - long ptr = _getGlyphImageFromWindows - (family, style, size, glyphCode, - desc.fmHint == INTVAL_FRACTIONALMETRICS_ON, - ((TrueTypeFont)fileFont).fontDataSize); - if (ptr != 0) { - /* Get the advance from the JDK rasterizer. This is mostly - * necessary for the fractional metrics case, but there are - * also some very small number (<0.25%) of marginal cases where - * there is some rounding difference between windows and JDK. - * After these are resolved, we can restrict this extra - * work to the FM case. - */ - float advance = getGlyphAdvance(glyphCode, false); - StrikeCache.unsafe.putFloat(ptr + StrikeCache.xAdvanceOffset, - advance); - return ptr; - } else { + byte charset = fileFont.getSupportedCharset(); + long ptr = 0; + if (useDirectWrite) { + ptr = _getGlyphImageFromWindowsUsingDirectWrite(family, style, size, glyphCode, rotation, + dwMeasuringMode, dwRenderingMode, dwClearTypeLevel, dwEnhancedContrast, dwGamma, dwPixelGeometry, + charset); + if (ptr == 0 && FontUtilities.isLogging()) { + FontUtilities.logWarning("Failed to render glyph via DirectWrite: code=" + glyphCode + + ", fontFamily=" + family + ", style=" + style + ", size=" + size + ", rotation=" + rotation); + } + } + if (ptr == 0) { + boolean fm = desc.fmHint == INTVAL_FRACTIONALMETRICS_ON; + ptr = _getGlyphImageFromWindows(family, style, size, glyphCode, fm, + rotation, charset, ((TrueTypeFont)fileFont).fontDataSize); + if (ptr != 0 && fm) { + Point2D.Float metrics = new Point2D.Float(); + fileFont.getGlyphMetrics(pScalerContext, glyphCode, metrics); + StrikeCache.unsafe.putFloat(ptr + StrikeCache.xAdvanceOffset, metrics.x); + StrikeCache.unsafe.putFloat(ptr + StrikeCache.yAdvanceOffset, metrics.y); + } + } + if (ptr == 0) { if (FontUtilities.isLogging()) { FontUtilities.logWarning("Failed to render glyph using GDI: code=" + glyphCode + ", fontFamily=" + family + ", style=" + style + ", size=" + size); } - return fileFont.getGlyphImage(pScalerContext, glyphCode); + ptr = fileFont.getGlyphImage(pScalerContext, glyphCode); } + return ptr; } /* Try the native strikes first, then try the fileFont strike */ @@ -392,16 +497,17 @@ void getGlyphImagePtrs(int[] glyphCodes, long[] images, int len) { /* The following method is called from CompositeStrike as a special case. */ - int getSlot0GlyphImagePtrs(int[] glyphCodes, long[] images, int len) { + int getSlot0GlyphImagePtrs(int[] glyphCodes, long[] images, int len, int slotMask, int slotShift) { int convertedCnt = 0; for (int i=0; i>> 24 != 0) { + if ((glyphCode & slotMask) != 0) { return convertedCnt; } else { convertedCnt++; + glyphCode >>>= slotShift; } if (glyphCode >= INVISIBLE_GLYPHS) { images[i] = StrikeCache.invisibleGlyphPtr; @@ -755,15 +861,15 @@ void getGlyphImageBounds(int glyphCode, Point2D.Float pt, private int getGlyphImageMinX(long ptr, int origMinX) { - int width = StrikeCache.unsafe.getChar(ptr+StrikeCache.widthOffset); + byte format = StrikeCache.unsafe.getByte(ptr+StrikeCache.formatOffset); + if (format != StrikeCache.PIXEL_FORMAT_LCD) { + return origMinX; + } + int height = StrikeCache.unsafe.getChar(ptr+StrikeCache.heightOffset); int rowBytes = StrikeCache.unsafe.getChar(ptr+StrikeCache.rowBytesOffset); - if (rowBytes == width) { - return origMinX; - } - long pixelData = StrikeCache.unsafe.getAddress(ptr + StrikeCache.pixelDataOffset); @@ -950,9 +1056,34 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { return gp; } - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { - return fileFont.getGlyphVectorOutline(pScalerContext, - glyphs, glyphs.length, x, y); + private + WeakReference> glyphRenderDataMapRef; + + GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y) { + + GlyphRenderData grd = null; + ConcurrentHashMap glyphRenderDataMap = null; + + if (glyphRenderDataMapRef != null) { + glyphRenderDataMap = glyphRenderDataMapRef.get(); + if (glyphRenderDataMap != null) { + grd = glyphRenderDataMap.get(glyphCode); + } + } + + if (grd == null) { + grd = fileFont.getGlyphRenderData(pScalerContext, glyphCode, 0, 0); + if (glyphRenderDataMap == null) { + glyphRenderDataMap = new ConcurrentHashMap<>(); + glyphRenderDataMapRef = new WeakReference<>(glyphRenderDataMap); + } + glyphRenderDataMap.put(glyphCode, grd); + } + grd = new GlyphRenderData(grd); // mutable! + if (x != 0f || y != 0f) { + grd.transform(AffineTransform.getTranslateInstance(x, y)); + } + return grd; } protected void adjustPoint(Point2D.Float pt) { diff --git a/src/java.desktop/share/classes/sun/font/Font2D.java b/src/java.desktop/share/classes/sun/font/Font2D.java index 64968086a3b4..6deb984dcd09 100644 --- a/src/java.desktop/share/classes/sun/font/Font2D.java +++ b/src/java.desktop/share/classes/sun/font/Font2D.java @@ -57,15 +57,16 @@ public abstract class Font2D { public static final int DEFAULT_RANK = 4; private static final String[] boldNames = { - "bold", "demibold", "demi-bold", "demi bold", "negreta", "demi", }; + "bold", "demibold", "demi-bold", "demi bold", "negreta", "demi", "black", "coder-b"}; private static final String[] italicNames = { - "italic", "cursiva", "oblique", "inclined", }; + "italic", "cursiva", "oblique", "inclined", "-it", "-lightit", "coder-i"}; private static final String[] boldItalicNames = { "bolditalic", "bold-italic", "bold italic", "boldoblique", "bold-oblique", "bold oblique", - "demibold italic", "negreta cursiva","demi oblique", }; + "demibold italic", "negreta cursiva","demi oblique", + "-boldit", "-blackit", "coder-bi"}; private static final FontRenderContext DEFAULT_FRC = new FontRenderContext(null, false, false); @@ -334,7 +335,7 @@ FontStrike getStrike(FontStrikeDesc desc) { return getStrike(desc, true); } - private FontStrike getStrike(FontStrikeDesc desc, boolean copy) { + FontStrike getStrike(FontStrikeDesc desc, boolean copy) { /* Before looking in the map, see if the descriptor matches the * last strike returned from this Font2D. This should often be a win * since its common for the same font, in the same size to be @@ -523,6 +524,28 @@ public String getFamilyName(Locale l) { return familyName; } + /* + * As defined in OpenType specification + *(https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids, nameID=16) + */ + public String getTypographicFamilyName() { + return familyName; + } + + /* + * As defined in OpenType specification + *(https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids, nameID=17) + */ + public String getTypographicSubfamilyName() { + int style = getStyle(); + switch (style) { + case Font.BOLD: return "Bold"; + case Font.ITALIC: return "Italic"; + case Font.BOLD | Font.ITALIC: return "Bold Italic"; + default: return "Regular"; + } + } + public int getNumGlyphs() { return getMapper().getNumGlyphs(); } @@ -570,4 +593,19 @@ public float getItalicAngle(Font font, AffineTransform at, } } + public static class SlotInfo { + public Font2D font; + public int slotShift; + public SlotInfo(Font2D font) { + this.font = font; + } + public int getSlotMask() { + return (1 << slotShift) - 1; + } + } + + public SlotInfo getSlotInfoForGlyph(int glyphCode) { + return new SlotInfo(this); + } + } diff --git a/src/java.desktop/share/classes/sun/font/FontAccess.java b/src/java.desktop/share/classes/sun/font/FontAccess.java index c51077e05331..70359e237809 100644 --- a/src/java.desktop/share/classes/sun/font/FontAccess.java +++ b/src/java.desktop/share/classes/sun/font/FontAccess.java @@ -44,7 +44,7 @@ public static synchronized FontAccess getFontAccess() { public abstract Font2D getFont2D(Font f); public abstract void setFont2D(Font f, Font2DHandle h); - public abstract void setCreatedFont(Font f); + public abstract void setWithFallback(Font f); public abstract boolean isCreatedFont(Font f); public abstract FontPeer getFontPeer(Font f); } diff --git a/src/java.desktop/share/classes/sun/font/FontDesignMetrics.java b/src/java.desktop/share/classes/sun/font/FontDesignMetrics.java index c5f020991d4d..844c16b1f6f2 100644 --- a/src/java.desktop/share/classes/sun/font/FontDesignMetrics.java +++ b/src/java.desktop/share/classes/sun/font/FontDesignMetrics.java @@ -38,8 +38,12 @@ import java.io.Serial; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import com.jetbrains.desktop.FontExtensions; import sun.java2d.Disposer; import sun.java2d.DisposerRecord; @@ -143,6 +147,8 @@ public final class FontDesignMetrics extends FontMetrics { private transient FontStrike fontStrike; + private transient Overrider overrider; + private static FontRenderContext DEFAULT_FRC = null; private static FontRenderContext getDefaultFrc() { @@ -432,134 +438,128 @@ public FontRenderContext getFontRenderContext() { return frc; } - public int charWidth(char ch) { - // default metrics for compatibility with legacy code - float w; - if (ch < 0x100) { - w = getLatinCharWidth(ch); + private float preciseCharWidth(int ch) { + if (!Character.isValidCodePoint(ch)) { + ch = 0xffff; } - else { - w = handleCharWidth(ch); + Overrider o = overrider; + if (o != null) { + float override = o.charWidth(ch); + if (!Float.isNaN(override)) { + return override; + } } - return (int)(0.5 + w); + return (ch < 0x100) ? getLatinCharWidth((char) ch) : handleCharWidth(ch); + } + + public int charWidth(char ch) { + return charWidth((int) ch); } public int charWidth(int ch) { - if (!Character.isValidCodePoint(ch)) { - ch = 0xffff; - } + return Math.round(preciseCharWidth(ch)); + } - float w = handleCharWidth(ch); + private Rectangle2D.Float textLayoutBounds(Object data, int off, int len) { + String str = data instanceof String ? ((String) data).substring(off, off + len) : + new String((char[]) data, off, len); + TextLayout tl = new TextLayout(str, font, frc); + return new Rectangle2D.Float(0, -tl.getAscent(), + tl.getAdvance(), tl.getAscent() + tl.getDescent() + tl.getLeading()); + } - return (int)(0.5 + w); + private char getChar(Object data, int i) { + return data instanceof String ? ((String) data).charAt(i) : ((char[]) data)[i]; } - public int stringWidth(String str) { + final int ADVANCES_FAST_KEY_LIMIT = 0x100; + private HashMap advances = new HashMap<>(); + private float[] advancesFast = new float[ADVANCES_FAST_KEY_LIMIT * ADVANCES_FAST_KEY_LIMIT]; + + private Rectangle2D.Float dataBounds(Object data, int off, int len) { + assert (data instanceof String || data instanceof char[]); float width = 0; - if (font.hasLayoutAttributes()) { - /* TextLayout throws IAE for null, so throw NPE explicitly */ - if (str == null) { - throw new NullPointerException("str is null"); - } - if (str.length() == 0) { - return 0; - } - width = new TextLayout(str, font, frc).getAdvance(); - } else { - int length = str.length(); - for (int i=0; i < length; i++) { - char ch = str.charAt(i); - if (ch < 0x100) { - width += getLatinCharWidth(ch); - } else if (FontUtilities.isNonSimpleChar(ch)) { - width = new TextLayout(str, font, frc).getAdvance(); - break; - } else { - width += handleCharWidth(ch); - } - } + + if (overrider == null && FontExtensions.isComplexRendering(font) && len > 0) { + return textLayoutBounds(data, off, len); } - return (int) (0.5 + width); - } + float height = ascent + descent + leading; - public int charsWidth(char[] data, int off, int len) { + if (len == 0 || len == 1 && !FontUtilities.isNonSimpleChar(getChar(data, off))) { + width = len > 0 ? preciseCharWidth(getChar(data, off)) : 0f; + return new Rectangle2D.Float(0f, -ascent, width, height); + } - float width = 0; - if (font.hasLayoutAttributes()) { - if (len == 0) { - return 0; - } - String str = new String(data, off, len); - width = new TextLayout(str, font, frc).getAdvance(); - } else { - /* Explicit test needed to satisfy superclass spec */ - if (len < 0) { - throw new IndexOutOfBoundsException("len="+len); - } - int limit = off + len; - for (int i=off; i < limit; i++) { - char ch = data[i]; - if (ch < 0x100) { - width += getLatinCharWidth(ch); - } else if (FontUtilities.isNonSimpleChar(ch)) { - String str = new String(data, off, len); - width = new TextLayout(str, font, frc).getAdvance(); - break; - } else { - width += handleCharWidth(ch); + boolean isKerning = FontExtensions.isKerning(font); + float consecutiveDoubleCharacterWidth = 0f; + char prev = 0; + for (int i = off; i < off + len; i++) { + char cur = getChar(data, i); + if (FontUtilities.isNonSimpleChar(cur)) { + return textLayoutBounds(data, off, len); + } else { + // Correct width of string with kerning calculates by text LayoutBounds but it could be slow. + // Below is description of optimized algorithm for correct calculating width of text with kerning: + // proof: + // base: kerningWidth('c1') = plainWidth('c1') + // induction: kerningWidth('c1..cN-1cN') = + // kerningWidth('c1..cN-1') + kerningWidth('cN-1cN') - plainWidth('cN-1') + // final: kerningWidth('c1..cN') = kerningWidth('c1c2') + ... + kerningWidth('cN-1cN') + // - (plainWidth('c2') + ... + plainWidth('cN-1')) + // remark: for reducing calculation of kerningWidth('c1c2') using caching + if (isKerning && i > off) { + // fast path + if (prev < ADVANCES_FAST_KEY_LIMIT && cur < ADVANCES_FAST_KEY_LIMIT) { + int key = (prev << 8) | cur; + if (advancesFast[key] == 0.0f) { + advancesFast[key] = textLayoutBounds(data, i - 1, 2).width; + } + consecutiveDoubleCharacterWidth += advancesFast[key]; + // common solution + } else { + int key = (prev << 16) | (0xffff & cur); + advances.putIfAbsent(key, textLayoutBounds(data, i - 1, 2).width); + consecutiveDoubleCharacterWidth += advances.get(key); + } } + width += preciseCharWidth(cur); } + prev = cur; } - return (int) (0.5 + width); + if (isKerning) { + width = consecutiveDoubleCharacterWidth - + (width - preciseCharWidth(getChar(data, off)) - preciseCharWidth(getChar(data, off + len - 1))); + } + + return new Rectangle2D.Float(0f, -ascent, width, height); } - /** - * This method is called from java.awt.Font only after verifying - * the arguments and that the text is simple and there are no - * layout attributes, font transform etc. - */ - public Rectangle2D getSimpleBounds(char[] data, int off, int len) { + public Rectangle2D.Float charsBounds(char[] data, int off, int len) { + return dataBounds(data, off, len); + } - float width = 0; - int limit = off + len; - for (int i=off; i < limit; i++) { - char ch = data[i]; - if (ch < 0x100) { - width += getLatinCharWidth(ch); - } else { - width += handleCharWidth(ch); - } + private int dataWidth(Object data, int off, int len) { + return Math.round((float) dataBounds(data, off, len).getWidth()); + } + + public int stringWidth(String str) { + + if (str == null) { + throw new NullPointerException("str is null"); } + return dataWidth(str, 0, str.length()); + } - float height = ascent + descent + leading; - return new Rectangle2D.Float(0f, -ascent, width, height); - } + public int charsWidth(char[] data, int off, int len) { - /** - * Gets the advance widths of the first 256 characters in the - * {@code Font}. The advance is the - * distance from the leftmost point to the rightmost point on the - * character's baseline. Note that the advance of a - * {@code String} is not necessarily the sum of the advances - * of its characters. - * @return an array storing the advance widths of the - * characters in the {@code Font} - * described by this {@code FontMetrics} object. - */ - // More efficient than base class implementation - reuses existing cache - public int[] getWidths() { - int[] widths = new int[256]; - for (char ch = 0 ; ch < 256 ; ch++) { - float w = advCache[ch]; - if (w == UNKNOWN_WIDTH) { - w = advCache[ch] = handleCharWidth(ch); - } - widths[ch] = (int) (0.5 + w); + /* Explicit test needed to satisfy superclass spec */ + if (len < 0) { + throw new IndexOutOfBoundsException("len="+len); } - return widths; + return dataWidth(data, off, len); } public int getMaxAdvance() { @@ -607,4 +607,47 @@ public int getHeight() { } return height; } + + private static class Accessor { // used by JBR API + // Keeping metrics instances here prevents them from being garbage collected + // and being re-created by FontDesignMetrics.getMetrics method + private final Set PINNED_METRICS = new HashSet<>(); + + FontMetrics getMetrics(Font font, FontRenderContext context) { + return FontDesignMetrics.getMetrics(font, context); + } + + float codePointWidth(FontMetrics metrics, int codePoint) { + return metrics instanceof FontDesignMetrics fdm ? fdm.preciseCharWidth(codePoint) + : metrics.charWidth(codePoint); + } + + void setOverride(FontMetrics metrics, Overrider overrider) { + if (metrics instanceof FontDesignMetrics fdm) { + synchronized (PINNED_METRICS) { + if (overrider == null) { + PINNED_METRICS.remove(fdm); + } else { + PINNED_METRICS.add(fdm); + } + fdm.overrider = overrider; + } + } + } + + boolean hasOverride(FontMetrics metrics) { + return metrics instanceof FontDesignMetrics fdm && fdm.overrider != null; + } + + void removeAllOverrides() { + synchronized (PINNED_METRICS) { + PINNED_METRICS.forEach(fdm -> fdm.overrider = null); + PINNED_METRICS.clear(); + } + } + } + + private interface Overrider { // used by JBR API + float charWidth(int codePoint); + } } diff --git a/src/java.desktop/share/classes/sun/font/FontFamily.java b/src/java.desktop/share/classes/sun/font/FontFamily.java index dcec9545dfe6..bbe6a997a51a 100644 --- a/src/java.desktop/share/classes/sun/font/FontFamily.java +++ b/src/java.desktop/share/classes/sun/font/FontFamily.java @@ -28,10 +28,8 @@ import java.io.File; import java.awt.Font; import java.io.IOException; -import java.util.Collection; -import java.util.HashMap; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.Locale; public class FontFamily { @@ -44,6 +42,8 @@ public class FontFamily { protected Font2D bold; protected Font2D italic; protected Font2D bolditalic; + private final List fontSequence = new ArrayList(); + private boolean initialized = false; protected boolean logicalFont = false; protected int familyRank; @@ -61,11 +61,12 @@ public static String[] getAllFamilyNames() { */ static void remove(Font2D font2D) { - String name = font2D.getFamilyName(Locale.ENGLISH); + String name = font2D.familyName; FontFamily family = getFamily(name); if (family == null) { return; } + family.ensureFontsLoaded(); if (family.plain == font2D) { family.plain = null; } @@ -219,11 +220,11 @@ private boolean closerWeight(Font2D currFont, Font2D font, int style) { case Font.PLAIN: case Font.ITALIC: return (newWeight <= Font2D.FWEIGHT_NORMAL && - newWeight > currFont.getWeight()); + newWeight >= currFont.getWeight()); case Font.BOLD: case Font.BOLD|Font.ITALIC: - return (Math.abs(newWeight - Font2D.FWEIGHT_BOLD) < + return (Math.abs(newWeight - Font2D.FWEIGHT_BOLD) <= Math.abs(currFont.getWeight() - Font2D.FWEIGHT_BOLD)); default: @@ -244,6 +245,41 @@ public void setFont(Font2D font, int style) { } FontUtilities.logInfo(msg); } + synchronized (fontSequence) { + if (initialized) { + doSetFont(font, style); + return; + } + fontSequence.add(new FontAndStyle(font, style)); + } + } + + private void ensureFontsLoaded() { + synchronized (fontSequence) { + if (initialized) { + return; + } + if (FontUtilities.isMacOSX) { + fontSequence.sort(Comparator.comparing(FontAndStyle::getWeight)); + } + for (FontAndStyle fontAndStyle : fontSequence) { + doSetFont(fontAndStyle.font, fontAndStyle.style); + } + if (italic == null && plain instanceof FontWithDerivedItalic) { + italic = ((FontWithDerivedItalic)plain).createItalic(); + } + if (bolditalic == null) { + Font2D boldItalicPrototype = bold != null ? bold : plain; + if (boldItalicPrototype instanceof FontWithDerivedItalic) { + bolditalic = ((FontWithDerivedItalic)boldItalicPrototype).createItalic(); + } + } + fontSequence.clear(); + initialized = true; + } + } + + private void doSetFont(Font2D font, int style) { /* Allow a lower-rank font only if its a file font * from the exact same source as any previous font. */ @@ -289,7 +325,7 @@ public void setFont(Font2D font, int style) { } public Font2D getFontWithExactStyleMatch(int style) { - + ensureFontsLoaded(); switch (style) { case Font.PLAIN: @@ -318,7 +354,7 @@ public Font2D getFontWithExactStyleMatch(int style) { * same location. */ public Font2D getFont(int style) { - + ensureFontsLoaded(); switch (style) { case Font.PLAIN: @@ -366,7 +402,7 @@ public Font2D getFont(int style) { * it might as well be from the same family. */ Font2D getClosestStyle(int style) { - + ensureFontsLoaded(); switch (style) { /* if you ask for a plain font try to return a non-italic one, * then a italic one, finally a bold italic one */ @@ -443,8 +479,23 @@ public String toString() { " plain="+plain+ " bold=" + bold + " italic=" + italic + - " bolditalic=" + bolditalic; + " bolditalic=" + bolditalic + + " initialized=" + initialized; + + } + + private static class FontAndStyle { + private final Font2D font; + private final int style; + private FontAndStyle(Font2D inFont, int inStyle) { + font = inFont; + style = inStyle; + } + + int getWeight() { + return font.getWeight(); + } } } diff --git a/src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java b/src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java index ede2d0348b7f..438744a80a54 100644 --- a/src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java +++ b/src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java @@ -26,6 +26,10 @@ package sun.font; import sun.awt.OSInfo; +import sun.util.logging.PlatformLogger; + +import java.nio.file.Path; +import java.util.Set; @SuppressWarnings("removal") public class FontManagerNativeLibrary { @@ -57,6 +61,7 @@ top of freetype library (that is used in binary form). } System.loadLibrary("fontmanager"); + checkLibraries(); return null; } }); @@ -71,4 +76,72 @@ top of freetype library (that is used in binary form). * (no need to execute doPrivileged block more than once) */ public static void load() {} + + + private static class Holder { + private static final PlatformLogger errorLog = PlatformLogger.getLogger("sun.font.FontManagerNativeLibrary"); + } + public static void checkLibraries() { + final String osName = System.getProperty("os.name"); + final boolean isMacOS = osName.startsWith("Mac"); + final boolean isLinux = osName.startsWith("Linux"); + + if (!(isMacOS || isLinux)) return; + + final String[] loadedLibraries = loadedLibraries(); + + final String libawtName = isMacOS ? "libawt.dylib" : "libawt.so"; + final String bootPath = System.getProperty("sun.boot.library.path"); + final Path basePath = bootPath != null + ? Path.of(bootPath) + : getBasePath(libawtName, loadedLibraries); + + if (basePath == null) { + // Nothing to check if the native code failed to report where libawt is + return; + } + + final String libraryPathEnvVarName = isMacOS + ? "DYLD_LIBRARY_PATH" + : "LD_LIBRARY_PATH"; + final Set ourLibraries = isMacOS + ? Set.of("libawt_lwawt.dylib", "libfontmanager.dylib", "libfreetype.dylib") + : Set.of("libawt_xawt.so", "libfontmanager.so"); + + boolean warnedAlready = false; + for (String pathName: loadedLibraries) { + if (pathName == null) + continue; + final Path libPath = Path.of(pathName); + final Path libFileName = libPath.getFileName(); + if (ourLibraries.contains(libFileName.toString())) { + final Path libDirectory = libPath.getParent(); + if (!basePath.equals(libDirectory)) { + Holder.errorLog.severe("Library '" + libFileName + + "' loaded from '" + libDirectory + "' instead of '" + + basePath + "'"); + if (!warnedAlready) { + warnedAlready = true; + final String libraryPathOverride = System.getenv(libraryPathEnvVarName); + if (libraryPathOverride != null) { + Holder.errorLog.severe("Note: " + libraryPathEnvVarName + + " is set to '" + libraryPathOverride + "'"); + } + } + } + } + } + } + + private static Path getBasePath(String libawtName, String[] libs) { + Path basePath = null; + for (String path: libs) { + if (path.endsWith(libawtName)) { + basePath = Path.of(path).getParent().normalize(); + } + } + return basePath; + } + + private static native String[] loadedLibraries(); } diff --git a/src/java.desktop/share/classes/sun/font/FontRunIterator.java b/src/java.desktop/share/classes/sun/font/FontRunIterator.java index d20b1006765e..268efd3a20d9 100644 --- a/src/java.desktop/share/classes/sun/font/FontRunIterator.java +++ b/src/java.desktop/share/classes/sun/font/FontRunIterator.java @@ -34,37 +34,37 @@ * Iterates over runs of fonts in a CompositeFont, optionally taking script runs into account. */ public final class FontRunIterator { - CompositeFont font; - char[] text; - int start; - int limit; + private Font2D font; + private char[] text; + private int limit; - CompositeGlyphMapper mapper; // handy cache + private CharToGlyphMapper mapper; // handy cache - int slot = -1; - int pos; + private int slot; + private int pos; + private Font2D.SlotInfo slotInfo; - public void init(CompositeFont font, char[] text, int start, int limit) { + public void init(Font2D font, char[] text, int start, int limit) { if (font == null || text == null || start < 0 || limit < start || limit > text.length) { throw new IllegalArgumentException(); } this.font = font; this.text = text; - this.start = start; this.limit = limit; - this.mapper = (CompositeGlyphMapper)font.getMapper(); - this.slot = -1; + this.mapper = font.getMapper(); + this.slot = 0; this.pos = start; + this.slotInfo = null; } - public PhysicalFont getFont() { - return slot == -1 ? null : font.getSlotFont(slot); + public Font2D.SlotInfo getSlotInfo() { + return slotInfo; } - public int getGlyphMask() { - return slot << 24; + public int getSlot() { + return slot; } public int getPos() { @@ -112,22 +112,45 @@ public int getPos() { * the data instead of pull it? */ - public boolean next(int script, int lim) { + public boolean next(int lim) { if (pos == lim) { return false; } int ch = nextCodePoint(lim); - int sl = mapper.charToGlyph(ch) & CompositeGlyphMapper.SLOTMASK; - slot = sl >>> 24; - while ((ch = nextCodePoint(lim)) != DONE && (mapper.charToGlyph(ch) & CompositeGlyphMapper.SLOTMASK) == sl); + int nch = nextCodePoint(lim); + int vs = CharToGlyphMapper.isVariationSelector(nch) ? nch : 0; + int gl = mapper.charToVariationGlyph(ch, vs); + slotInfo = font.getSlotInfoForGlyph(gl); + int slotMask = slotInfo.getSlotMask(); + slot = gl & slotMask; + if (slotInfo.slotShift == 0) { + // This is a non-composite font, so return early. + pos = lim; + return true; + } + do { + if (vs == 0) { + ch = nch; + } else { + ch = nextCodePoint(lim); + } + nch = nextCodePoint(lim); + vs = CharToGlyphMapper.isVariationSelector(nch) ? nch : 0; + } while(ch != DONE && isSameRun(ch, vs, slotMask)); + pushback(nch); pushback(ch); return true; } - public boolean next() { - return next(Script.COMMON, limit); + private boolean isSameRun(int ch, int variationSelector, int slotMask) { + // Every font is meant to be able to render format chars + // So we make format chars stick to the current font run + if (CMap.getFormatCharGlyph(ch) == CharToGlyphMapper.INVISIBLE_GLYPH_ID) { + return true; + } + return (mapper.charToVariationGlyph(ch, variationSelector) & slotMask) == slot; } static final int SURROGATE_START = 0x10000; diff --git a/src/java.desktop/share/classes/sun/font/FontScaler.java b/src/java.desktop/share/classes/sun/font/FontScaler.java index ae22cec319f1..4364b554914f 100644 --- a/src/java.desktop/share/classes/sun/font/FontScaler.java +++ b/src/java.desktop/share/classes/sun/font/FontScaler.java @@ -164,8 +164,8 @@ abstract GeneralPath getGlyphOutline(long pScalerContext, int glyphCode, float x, float y) throws FontScalerException; - abstract GeneralPath getGlyphVectorOutline(long pScalerContext, int[] glyphs, - int numGlyphs, float x, float y) + abstract GlyphRenderData getGlyphRenderData(long pScalerContext, int glyphCode, + float x, float y) throws FontScalerException; /* Used by Java2D disposer to ensure native resources are released. diff --git a/src/java.desktop/share/classes/sun/font/FontStrike.java b/src/java.desktop/share/classes/sun/font/FontStrike.java index 2eff2f8169f4..2c12fb1a7db7 100644 --- a/src/java.desktop/share/classes/sun/font/FontStrike.java +++ b/src/java.desktop/share/classes/sun/font/FontStrike.java @@ -73,8 +73,10 @@ abstract void getGlyphImageBounds(int glyphcode, abstract GeneralPath getGlyphOutline(int glyphCode, float x, float y); - abstract GeneralPath - getGlyphVectorOutline(int[] glyphs, float x, float y); + abstract GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y); + int getSlot0GlyphImagePtrs(int[] glyphCodes, long[] images, int len, int slotMask, int slotShift) { + return 0; + } } diff --git a/src/java.desktop/share/classes/sun/font/FontStrikeDesc.java b/src/java.desktop/share/classes/sun/font/FontStrikeDesc.java index 6c1e471fbd0e..13fe9fe9ea04 100644 --- a/src/java.desktop/share/classes/sun/font/FontStrikeDesc.java +++ b/src/java.desktop/share/classes/sun/font/FontStrikeDesc.java @@ -112,12 +112,12 @@ public boolean equals(Object obj) { public static int getAAHintIntVal(Object aa, Font2D font2D, int ptSize) { if (FontUtilities.isMacOSX14 && - (aa == VALUE_TEXT_ANTIALIAS_OFF || - aa == VALUE_TEXT_ANTIALIAS_DEFAULT || - aa == VALUE_TEXT_ANTIALIAS_ON || - aa == VALUE_TEXT_ANTIALIAS_GASP)) + (aa == VALUE_TEXT_ANTIALIAS_LCD_HBGR || + aa == VALUE_TEXT_ANTIALIAS_LCD_HRGB || + aa == VALUE_TEXT_ANTIALIAS_LCD_VBGR || + aa == VALUE_TEXT_ANTIALIAS_LCD_VRGB)) { - return INTVAL_TEXT_ANTIALIAS_ON; + return INTVAL_TEXT_ANTIALIAS_ON; } if (aa == VALUE_TEXT_ANTIALIAS_OFF || @@ -154,12 +154,12 @@ public static int getAAHintIntVal(Font2D font2D, Font font, Object aa = frc.getAntiAliasingHint(); if (FontUtilities.isMacOSX14 && - (aa == VALUE_TEXT_ANTIALIAS_OFF || - aa == VALUE_TEXT_ANTIALIAS_DEFAULT || - aa == VALUE_TEXT_ANTIALIAS_ON || - aa == VALUE_TEXT_ANTIALIAS_GASP)) + (aa == VALUE_TEXT_ANTIALIAS_LCD_HBGR || + aa == VALUE_TEXT_ANTIALIAS_LCD_HRGB || + aa == VALUE_TEXT_ANTIALIAS_LCD_VBGR || + aa == VALUE_TEXT_ANTIALIAS_LCD_VRGB)) { - return INTVAL_TEXT_ANTIALIAS_ON; + return INTVAL_TEXT_ANTIALIAS_ON; } if (aa == VALUE_TEXT_ANTIALIAS_OFF || diff --git a/src/java.desktop/share/classes/sun/font/FontUtilities.java b/src/java.desktop/share/classes/sun/font/FontUtilities.java index bdccf99d1ed5..49ca6b659cd8 100644 --- a/src/java.desktop/share/classes/sun/font/FontUtilities.java +++ b/src/java.desktop/share/classes/sun/font/FontUtilities.java @@ -25,7 +25,7 @@ package sun.font; -import java.awt.Font; +import java.awt.*; import java.lang.ref.SoftReference; import java.util.concurrent.ConcurrentHashMap; import java.security.AccessController; @@ -50,6 +50,8 @@ public final class FontUtilities { public static boolean isWindows; + static Dimension subpixelResolution; + private static boolean debugFonts = false; private static PlatformLogger logger = null; private static boolean logging; @@ -115,11 +117,29 @@ public Object run() { logging = logger.isEnabled(); } + try { + String property = System.getProperty("java2d.font.subpixelResolution", ""); + int separatorIndex = property.indexOf('x'); + final int MAX_RESOLUTION = 16; + subpixelResolution = new Dimension( + Math.max(Math.min(Integer.parseUnsignedInt( + property.substring(0, separatorIndex)), MAX_RESOLUTION), 1), + Math.max(Math.min(Integer.parseUnsignedInt( + property.substring(separatorIndex + 1)), MAX_RESOLUTION), 1) + ); + } catch (Exception ignore) { + subpixelResolution = new Dimension(4, 1); + } + return null; } }); } + static Dimension getSubpixelResolution() { + return subpixelResolution; + } + /** * Referenced by code in the JDK which wants to test for the * minimum char code for which layout may be required. @@ -138,7 +158,7 @@ public Object run() { * where the caller interprets 'layout' to mean any case where * one 'char' (ie the java type char) does not map to one glyph */ - public static final int MAX_LAYOUT_CHARCODE = 0x206F; + public static final int MAX_LAYOUT_CHARCODE = CharToGlyphMapper.VSS_END; /** * Calls the private getFont2D() method in java.awt.Font objects. @@ -305,6 +325,21 @@ else if (code >= 0x202a && code <= 0x202e) { // directional control else if (code >= 0x206a && code <= 0x206f) { // directional control return true; } + else if (code >= 0x20d0 && code <= 0x20f0) { // U+20D0 - U+20F0 combining diacritical marks for symbols + return true; + } + else if (code >= 0x1f1e6 && code <= 0x1f1ff) { // U+1F1E6 - U+1F1FF flag letters https://emojipedia.org/emoji-flag-sequence/ + return true; + } + else if (code == 0x1f3f4) { // black flag https://emojipedia.org/emoji-tag-sequence/ + return true; + } + else if (code >= 0x1f3fb && code <= 0x1f3ff) { // U+1F3FB - U+1F3FF emoji modifiers + return true; + } + else if (CharToGlyphMapper.isVariationSelector(code)) { + return true; + } return false; } @@ -428,10 +463,10 @@ public static FontUIResource getCompositeFontUIResource(Font font) { compMap.put(physicalFont, compFont); } FontAccess.getFontAccess().setFont2D(fuir, compFont.handle); - /* marking this as a created font is needed as only created fonts - * copy their creator's handles. + /* marking this as a font with fallback to make sure its + * handle is copied to derived fonts. */ - FontAccess.getFontAccess().setCreatedFont(fuir); + FontAccess.getFontAccess().setWithFallback(fuir); return fuir; } diff --git a/src/java.desktop/share/classes/sun/font/FontWithDerivedItalic.java b/src/java.desktop/share/classes/sun/font/FontWithDerivedItalic.java new file mode 100644 index 000000000000..7d506a66920f --- /dev/null +++ b/src/java.desktop/share/classes/sun/font/FontWithDerivedItalic.java @@ -0,0 +1,5 @@ +package sun.font; + +interface FontWithDerivedItalic { + Font2D createItalic(); +} \ No newline at end of file diff --git a/src/java.desktop/share/classes/sun/font/FreetypeFontScaler.java b/src/java.desktop/share/classes/sun/font/FreetypeFontScaler.java index 6d8d5512bae4..7d4c00292b7d 100644 --- a/src/java.desktop/share/classes/sun/font/FreetypeFontScaler.java +++ b/src/java.desktop/share/classes/sun/font/FreetypeFontScaler.java @@ -25,10 +25,13 @@ package sun.font; +import java.awt.*; import java.awt.geom.GeneralPath; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; +import java.io.File; import java.lang.ref.WeakReference; +import java.security.PrivilegedAction; /* This is Freetype based implementation of FontScaler. * @@ -47,10 +50,38 @@ class FreetypeFontScaler extends FontScaler { /* At the moment fontmanager library depends on freetype library and therefore no need to load it explicitly here */ FontManagerNativeLibrary.load(); - initIDs(FreetypeFontScaler.class); + @SuppressWarnings("removal") + String fontConfName = java.security.AccessController.doPrivileged( + (PrivilegedAction) () -> { + String loadFontConfig = System.getProperty( + "java2d.font.loadFontConf", ""); + if ("true".equals(loadFontConfig)) { + File f = new File(System.getProperty("user.home", "") + + File.separator + ".fonts.conf"); + + if (f.exists()) { + return f.getAbsolutePath(); + } + } + + if ("true".equals(loadFontConfig) || "bundled".equals(loadFontConfig)) { + File f = new File(System.getProperty("java.home", "") + + File.separator + "lib" + File.separator + "fonts" + File.separator + "font.conf"); + + return f.getAbsolutePath(); + } + return null; + }); + + initIDs(FreetypeFontScaler.class, Toolkit.class, PhysicalFont.class, + fontConfName, + FontUtilities.subpixelResolution.width, + FontUtilities.subpixelResolution.height); } - private static native void initIDs(Class FFS); + private static native void initIDs(Class FFS, Class toolkitClass, Class pfClass, + String jreFontDirName, + int subpixelResolutionX, int subpixelResolutionY); private void invalidateScaler() throws FontScalerException { nativeScaler = 0; @@ -148,19 +179,19 @@ synchronized GeneralPath getGlyphOutline( getGlyphOutline(0L, glyphCode, x,y); } - synchronized GeneralPath getGlyphVectorOutline( - long pScalerContext, int[] glyphs, int numGlyphs, - float x, float y) throws FontScalerException { + synchronized GlyphRenderData getGlyphRenderData(long pScalerContext, int glyphCode, + float x, float y) throws FontScalerException { if (nativeScaler != 0L) { - return getGlyphVectorOutlineNative(font.get(), - pScalerContext, - nativeScaler, - glyphs, - numGlyphs, - x, y); + GlyphRenderData result = new GlyphRenderData(); + getGlyphRenderDataNative(font.get(), + pScalerContext, + nativeScaler, + glyphCode, + x, y, result); + return result; } - return FontScaler - .getNullScaler().getGlyphVectorOutline(0L, glyphs, numGlyphs, x, y); + return FontScaler.getNullScaler(). + getGlyphRenderData(0L, glyphCode, x,y); } /* This method should not be called directly, in case @@ -250,9 +281,9 @@ private native Rectangle2D.Float getGlyphOutlineBoundsNative(Font2D font, private native GeneralPath getGlyphOutlineNative(Font2D font, long pScalerContext, long pScaler, int glyphCode, float x, float y); - private native GeneralPath getGlyphVectorOutlineNative(Font2D font, - long pScalerContext, long pScaler, - int[] glyphs, int numGlyphs, float x, float y); + private native void getGlyphRenderDataNative(Font2D font, long pScalerContext, + long pScaler, int glyphCode, + float x, float y, GlyphRenderData result); private native Point2D.Float getGlyphPointNative(Font2D font, long pScalerContext, long pScaler, int glyphCode, int ptNumber); diff --git a/src/java.desktop/share/classes/sun/font/GlyphLayout.java b/src/java.desktop/share/classes/sun/font/GlyphLayout.java index fe2a8bf25998..87094b617074 100644 --- a/src/java.desktop/share/classes/sun/font/GlyphLayout.java +++ b/src/java.desktop/share/classes/sun/font/GlyphLayout.java @@ -68,6 +68,8 @@ package sun.font; +import com.jetbrains.desktop.FontExtensions; + import java.lang.ref.SoftReference; import java.awt.Font; import java.awt.font.FontRenderContext; @@ -76,6 +78,7 @@ import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.util.ArrayList; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import static java.lang.Character.*; @@ -97,7 +100,6 @@ public final class GlyphLayout { private FontStrikeDesc _sd; private float[] _mat; private float ptSize; - private int _typo_flags; private int _offset; public static final class LayoutEngineKey { @@ -173,8 +175,8 @@ public static interface LayoutEngine { * If the GVData does not have room for the glyphs, throws an IndexOutOfBoundsException and * leave pt and the gvdata unchanged. */ - public void layout(FontStrikeDesc sd, float[] mat, float ptSize, int gmask, - int baseIndex, TextRecord text, int typo_flags, Point2D.Float pt, GVData data); + public void layout(FontStrikeDesc sd, float[] mat, float ptSize, int slot, int slotShift, int baseIndex, TextRecord text, + boolean ltrDirection, Map features, Point2D.Float pt, GVData data); } /** @@ -360,14 +362,6 @@ public StandardGlyphVector layout(Font font, FontRenderContext frc, init(count); - // need to set after init - // go through the back door for this - if (font.hasLayoutAttributes()) { - AttributeValues values = ((AttributeMap)font.getAttributes()).getValues(); - if (values.getKerning() != 0) _typo_flags |= 0x1; - if (values.getLigatures() != 0) _typo_flags |= 0x2; - } - _offset = offset; // use cache now - can we use the strike cache for this? @@ -384,9 +378,11 @@ public StandardGlyphVector layout(Font font, FontRenderContext frc, int min = 0; int max = text.length; + boolean ltrDirection = true; + if (flags != 0) { if ((flags & Font.LAYOUT_RIGHT_TO_LEFT) != 0) { - _typo_flags |= 0x80000000; // RTL + ltrDirection = false; // RTL } if ((flags & Font.LAYOUT_NO_START_CONTEXT) != 0) { @@ -407,36 +403,19 @@ public StandardGlyphVector layout(Font font, FontRenderContext frc, _textRecord.init(text, offset, lim, min, max); int start = offset; - if (font2D instanceof CompositeFont) { - _scriptRuns.init(text, offset, count); // ??? how to handle 'common' chars - _fontRuns.init((CompositeFont)font2D, text, offset, lim); - while (_scriptRuns.next()) { - int limit = _scriptRuns.getScriptLimit(); - int script = _scriptRuns.getScriptCode(); - while (_fontRuns.next(script, limit)) { - Font2D pfont = _fontRuns.getFont(); - /* layout can't deal with NativeFont instances. The - * native font is assumed to know of a suitable non-native - * substitute font. This currently works because - * its consistent with the way NativeFonts delegate - * in other cases too. - */ - if (pfont instanceof NativeFont) { - pfont = ((NativeFont)pfont).getDelegateFont(); - } - int gmask = _fontRuns.getGlyphMask(); - int pos = _fontRuns.getPos(); - nextEngineRecord(start, pos, script, lang, pfont, gmask); - start = pos; - } - } - } else { - _scriptRuns.init(text, offset, count); // ??? don't worry about 'common' chars - while (_scriptRuns.next()) { - int limit = _scriptRuns.getScriptLimit(); - int script = _scriptRuns.getScriptCode(); - nextEngineRecord(start, limit, script, lang, font2D, 0); - start = limit; + _scriptRuns.init(text, offset, count); // ??? how to handle 'common' chars + _fontRuns.init(font2D, text, offset, lim); + while (_scriptRuns.next()) { + int limit = _scriptRuns.getScriptLimit(); + int script = _scriptRuns.getScriptCode(); + while (_fontRuns.next(limit)) { + Font2D.SlotInfo slotInfo = _fontRuns.getSlotInfo(); + Font2D pfont = slotInfo.font; + int slotShift = slotInfo.slotShift; + int slot = _fontRuns.getSlot(); + int pos = _fontRuns.getPos(); + nextEngineRecord(start, pos, script, lang, pfont, slot, slotShift); + start = pos; } } @@ -444,7 +423,7 @@ public StandardGlyphVector layout(Font font, FontRenderContext frc, int stop = _ercount; int dir = 1; - if (_typo_flags < 0) { // RTL + if (!ltrDirection) { // RTL ix = stop - 1; stop = -1; dir = -1; @@ -456,7 +435,7 @@ public StandardGlyphVector layout(Font font, FontRenderContext frc, EngineRecord er = _erecords.get(ix); for (;;) { try { - er.layout(); + er.layout(ltrDirection, FontExtensions.getFeatures(font)); break; } catch (IndexOutOfBoundsException e) { @@ -503,12 +482,11 @@ private GlyphLayout() { } private void init(int capacity) { - this._typo_flags = 0; this._ercount = 0; this._gvdata.init(capacity); } - private void nextEngineRecord(int start, int limit, int script, int lang, Font2D font, int gmask) { + private void nextEngineRecord(int start, int limit, int script, int lang, Font2D font, int slot, int slotShift) { EngineRecord er = null; if (_ercount == _erecords.size()) { er = new EngineRecord(); @@ -516,7 +494,7 @@ private void nextEngineRecord(int start, int limit, int script, int lang, Font2D } else { er = _erecords.get(_ercount); } - er.init(start, limit, font, script, lang, gmask); + er.init(start, limit, font, script, lang, slot, slotShift); ++_ercount; } @@ -625,7 +603,8 @@ public StandardGlyphVector createGlyphVector(Font font, FontRenderContext frc, S private final class EngineRecord { private int start; private int limit; - private int gmask; + private int slot; + private int slotShift; private int eflags; private LayoutEngineKey key; private LayoutEngine engine; @@ -634,10 +613,11 @@ private final class EngineRecord { key = new LayoutEngineKey(); } - void init(int start, int limit, Font2D font, int script, int lang, int gmask) { + void init(int start, int limit, Font2D font, int script, int lang, int slot, int slotShift) { this.start = start; this.limit = limit; - this.gmask = gmask; + this.slot = slot; + this.slotShift = slotShift; this.key.init(font, script, lang); this.eflags = 0; @@ -663,11 +643,11 @@ void init(int start, int limit, Font2D font, int script, int lang, int gmask) { this.engine = _lef.getEngine(key); // flags? } - void layout() { + void layout(boolean ltrDirection, Map features) { _textRecord.start = start; _textRecord.limit = limit; - engine.layout(_sd, _mat, ptSize, gmask, start - _offset, _textRecord, - _typo_flags | eflags, _pt, _gvdata); + engine.layout(_sd, _mat, ptSize, slot, slotShift, start - _offset, _textRecord, + ltrDirection, features, _pt, _gvdata); } } } diff --git a/src/java.desktop/share/classes/sun/font/GlyphList.java b/src/java.desktop/share/classes/sun/font/GlyphList.java index 8d19d005b89d..e147189f89ec 100644 --- a/src/java.desktop/share/classes/sun/font/GlyphList.java +++ b/src/java.desktop/share/classes/sun/font/GlyphList.java @@ -502,15 +502,20 @@ private void fillBounds(int[] bounds, int endGlyphIndex) { } public static boolean canContainColorGlyphs() { - return FontUtilities.isMacOSX; + return true; + } + + /** + * @return {@link StrikeCache#PIXEL_FORMAT_GREYSCALE} for greyscale, + * {@link StrikeCache#PIXEL_FORMAT_LCD} for LCD and {@link StrikeCache#PIXEL_FORMAT_BGRA} for BGRA glyph + */ + public byte getPixelFormat(int glyphIndex) { + return StrikeCache.unsafe.getByte(images[glyphIndex] + + StrikeCache.formatOffset); } public boolean isColorGlyph(int glyphIndex) { - int width = StrikeCache.unsafe.getChar(images[glyphIndex] + - StrikeCache.widthOffset); - int rowBytes = StrikeCache.unsafe.getChar(images[glyphIndex] + - StrikeCache.rowBytesOffset); - return rowBytes == width * 4; + return getPixelFormat(glyphIndex) == StrikeCache.PIXEL_FORMAT_BGRA; } public SurfaceData getColorGlyphData() { diff --git a/src/java.desktop/share/classes/sun/font/GlyphRenderData.java b/src/java.desktop/share/classes/sun/font/GlyphRenderData.java new file mode 100644 index 000000000000..57c59c0378ab --- /dev/null +++ b/src/java.desktop/share/classes/sun/font/GlyphRenderData.java @@ -0,0 +1,185 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.font; + +import jdk.internal.misc.Unsafe; + +import java.awt.*; +import java.awt.color.ColorSpace; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.image.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Data for rendering any number of glyphs bypassing glyph cache. + */ +public class GlyphRenderData { + + public GeneralPath outline; + public List colorLayers; + public List bitmaps; + + public GlyphRenderData() {} + public GlyphRenderData(GlyphRenderData i) { + if (i.outline != null) { + outline = (GeneralPath) i.outline.clone(); + } + if (i.colorLayers != null) { + colorLayers = new ArrayList<>(i.colorLayers.size()); + for (ColorLayer l : i.colorLayers) { + colorLayers.add(new ColorLayer(l.color, (GeneralPath) l.outline.clone())); + } + } + if (i.bitmaps != null) { + bitmaps = new ArrayList<>(i.bitmaps.size()); + for (Bitmap b : i.bitmaps) { + bitmaps.add(new Bitmap(new AffineTransform(b.transform), b.image)); + } + } + } + + /** + * @param i must not be used afterwards + */ + public void merge(GlyphRenderData i) { + if (i.outline != null) { + if (outline == null) { + outline = i.outline; + } else { + outline.append(i.outline.getPathIterator(null), false); + } + } + if (i.colorLayers != null) { + if (colorLayers == null) { + colorLayers = i.colorLayers; + } else { + colorLayers.addAll(i.colorLayers); + } + } + if (i.bitmaps != null) { + if (bitmaps == null) { + bitmaps = i.bitmaps; + } else { + bitmaps.addAll(i.bitmaps); + } + } + } + + public void transform(AffineTransform transform) { + if (outline != null) { + outline.transform(transform); + } + if (colorLayers != null) { + for (ColorLayer layer : colorLayers) { + layer.outline.transform(transform); + } + } + if (bitmaps != null) { + for (Bitmap bitmap : bitmaps) { + bitmap.transform.preConcatenate(transform); + } + } + } + + public void draw(Graphics2D g) { + if (outline != null) { + g.fill(outline); + } + if (colorLayers != null) { + Color color = g.getColor(); + for (ColorLayer layer : colorLayers) { + g.setColor(layer.color == null ? color : layer.color); + g.fill(layer.outline); + } + g.setColor(color); + } + if (bitmaps != null) { + for (Bitmap bitmap : bitmaps) { + g.drawImage(bitmap.image, bitmap.transform, null); + } + } + } + + public record ColorLayer(Color color, GeneralPath outline) {} + + public record Bitmap(AffineTransform transform, Image image) {} + + // These methods exist for convenience and are called from native + + private void setColorLayersList(int capacity) { + colorLayers = new ArrayList<>(capacity); + } + + private void addColorLayers(GeneralPath outline) { + colorLayers.add(new ColorLayer(null, outline)); + } + + private void addColorLayers(int r, int g, int b, int a, GeneralPath outline) { + colorLayers.add(new ColorLayer(new Color(r, g, b, a), outline)); + } + + private static DirectColorModel colorModel(boolean premultiplied, int bits, int r, int g, int b, int a) { + if (Unsafe.getUnsafe().isBigEndian()) { + r = Integer.reverse(r) >>> (32 - bits); + g = Integer.reverse(g) >>> (32 - bits); + b = Integer.reverse(b) >>> (32 - bits); + a = Integer.reverse(a) >>> (32 - bits); + } + return new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), + bits, r, g, b, a, premultiplied, DataBuffer.TYPE_INT); + } + private static final DirectColorModel[] BITMAP_COLOR_MODELS = { + colorModel(false, 32, // macOS RGBA + 0x000000ff, + 0x0000ff00, + 0x00ff0000, + 0xff000000), + colorModel(false, 32, // macOS ARGB + 0x0000ff00, + 0x00ff0000, + 0xff000000, + 0x000000ff), + colorModel(true, 32, // Freetype BGRA + 0x00ff0000, + 0x0000ff00, + 0x000000ff, + 0xff000000) + }; + private void addBitmap(double m00, double m10, + double m01, double m11, + double m02, double m12, + int width, int height, int pitch, + int colorModel, int[] data) { + if (bitmaps == null) { + bitmaps = new ArrayList<>(); + } + DirectColorModel color = BITMAP_COLOR_MODELS[colorModel]; + DataBuffer buffer = new DataBufferInt(data, data.length); + WritableRaster raster = Raster.createPackedRaster(buffer, width, height, pitch, color.getMasks(), null); + BufferedImage image = new BufferedImage(color, raster, color.isAlphaPremultiplied(), null); + bitmaps.add(new Bitmap(new AffineTransform(m00, m10, m01, m11, m02, m12), image)); + } +} diff --git a/src/java.desktop/share/classes/sun/font/HBShaper.java b/src/java.desktop/share/classes/sun/font/HBShaper.java index 70e95cdc27bb..453ebf8273de 100644 --- a/src/java.desktop/share/classes/sun/font/HBShaper.java +++ b/src/java.desktop/share/classes/sun/font/HBShaper.java @@ -48,6 +48,7 @@ import java.lang.invoke.MethodType; import java.lang.invoke.VarHandle; +import java.util.Map; import java.util.Optional; import java.util.WeakHashMap; @@ -199,8 +200,10 @@ private static VarHandle getVarHandle(StructLayout struct, String name) { JAVA_INT, // baseIndex JAVA_FLOAT, // startX JAVA_FLOAT, // startY - JAVA_INT, // flags, + JAVA_INT, // direction + ADDRESS, // features JAVA_INT, // slot, + JAVA_INT, // slotShift, ADDRESS, // ptr to harfbuzz font_funcs object. ADDRESS); // store_results_fn @@ -281,6 +284,7 @@ private static VarHandle getVarHandle(StructLayout struct, String name) { FunctionDescriptor store_layout_fd = FunctionDescriptor.ofVoid( JAVA_INT, // slot + JAVA_INT, // slotShift JAVA_INT, // baseIndex JAVA_INT, // offset JAVA_FLOAT, // startX @@ -450,8 +454,10 @@ static void shape( int limit, int baseIndex, Point2D.Float startPt, - int flags, - int slot) { + boolean ltrDirection, + String features, + int slot, + int slotShift) { /* * ScopedValue is needed so that call backs into Java during @@ -468,12 +474,13 @@ static void shape( float startY = (float)startPt.getY(); MemorySegment matrix = arena.allocateFrom(JAVA_FLOAT, mat); - MemorySegment chars = arena.allocateFrom(JAVA_CHAR, text); + MemorySegment textChars = arena.allocateFrom(JAVA_CHAR, text); + MemorySegment featuresChars = arena.allocateFrom(features); /*int ret =*/ jdk_hb_shape_handle.invokeExact( - ptSize, matrix, hbface, chars, text.length, + ptSize, matrix, hbface, textChars, text.length, script, offset, limit, - baseIndex, startX, startY, flags, slot, + baseIndex, startX, startY, ltrDirection ? 1 : 0, featuresChars, slot, slotShift, hb_jdk_font_funcs_struct, store_layout_results_stub); } catch (Throwable t) { @@ -589,6 +596,7 @@ public void dispose() { /* Upcall to receive results of layout */ private static void store_layout_results( int slot, + int slotShift, int baseIndex, int offset, float startX, @@ -630,7 +638,7 @@ private static void store_layout_results( int cluster = (int)clusterHandle.get(glyphInfoArr, (long)i) - offset; gvdata._indices[storei] = baseIndex + cluster; int codePoint = (int)codePointHandle.get(glyphInfoArr, (long)i); - gvdata._glyphs[storei] = (slot | codePoint); + gvdata._glyphs[storei] = (codePoint << slotShift) | slot; int x_offset = (int)x_offsetHandle.get(glyphPosArr, (long)i); int y_offset = (int)y_offsetHandle.get(glyphPosArr, (long)i); gvdata._positions[(storei*2)] = startX + x + (x_offset * scale); diff --git a/src/java.desktop/share/classes/sun/font/NullFontScaler.java b/src/java.desktop/share/classes/sun/font/NullFontScaler.java index 7cdd2d632468..7dea751e4a87 100644 --- a/src/java.desktop/share/classes/sun/font/NullFontScaler.java +++ b/src/java.desktop/share/classes/sun/font/NullFontScaler.java @@ -59,9 +59,9 @@ GeneralPath getGlyphOutline(long pScalerContext, int glyphCode, return new GeneralPath(); } - GeneralPath getGlyphVectorOutline(long pScalerContext, int[] glyphs, - int numGlyphs, float x, float y) { - return new GeneralPath(); + GlyphRenderData getGlyphRenderData(long pScalerContext, int glyphCode, + float x, float y) { + return new GlyphRenderData(); } long createScalerContext(double[] matrix, int aa, diff --git a/src/java.desktop/share/classes/sun/font/PhysicalFont.java b/src/java.desktop/share/classes/sun/font/PhysicalFont.java index dc05c0e0a5f3..d097a4702905 100644 --- a/src/java.desktop/share/classes/sun/font/PhysicalFont.java +++ b/src/java.desktop/share/classes/sun/font/PhysicalFont.java @@ -108,7 +108,4 @@ abstract Rectangle2D.Float getGlyphOutlineBounds(long pScalerContext, abstract GeneralPath getGlyphOutline(long pScalerContext, int glyphCode, float x, float y); - abstract GeneralPath getGlyphVectorOutline(long pScalerContext, - int[] glyphs, int numGlyphs, - float x, float y); } diff --git a/src/java.desktop/share/classes/sun/font/PhysicalStrike.java b/src/java.desktop/share/classes/sun/font/PhysicalStrike.java index 9b2e7442298d..39186ae7416d 100644 --- a/src/java.desktop/share/classes/sun/font/PhysicalStrike.java +++ b/src/java.desktop/share/classes/sun/font/PhysicalStrike.java @@ -114,10 +114,6 @@ Point2D.Float getCharMetrics(char ch) { return getGlyphMetrics(physicalFont.getMapper().charToGlyph(ch)); } - int getSlot0GlyphImagePtrs(int[] glyphCodes, long[] images, int len) { - return 0; - } - /* Used by the OpenType engine for mark positioning. */ Point2D.Float getGlyphPoint(int glyphCode, int ptNumber) { diff --git a/src/java.desktop/share/classes/sun/font/StandardGlyphVector.java b/src/java.desktop/share/classes/sun/font/StandardGlyphVector.java index e333a9de2917..ac408c9d1f77 100644 --- a/src/java.desktop/share/classes/sun/font/StandardGlyphVector.java +++ b/src/java.desktop/share/classes/sun/font/StandardGlyphVector.java @@ -877,6 +877,21 @@ public float[] getGlyphInfo() { return result; } + public GlyphRenderData getGlyphRenderData(float x, float y) { + setFRCTX(); + initPositions(); + + GlyphRenderData result = new GlyphRenderData(); + for (int i = 0, n = 0; i < glyphs.length; ++i, n += 2) { + float px = x + positions[n]; + float py = y + positions[n+1]; + + getGlyphStrike(i).appendGlyphRenderData(glyphs[i], result, px, py); + } + + return result; + } + ////////////////////// // StandardGlyphVector package private methods ///////////////////// @@ -1067,7 +1082,10 @@ int[] getValidatedGlyphs(int[] oglyphs) { if (oglyphs[i] == 0xFFFE || oglyphs[i] == 0xFFFF) { vglyphs[i] = oglyphs[i]; } else { - vglyphs[i] = font2D.getValidatedGlyphCode(oglyphs[i]); + vglyphs[i] = font2D.getValidatedGlyphCode( + font2D instanceof CompositeFont comp ? + comp.compositeGlyphCode(0, oglyphs[i]) : + oglyphs[i]); } } return vglyphs; @@ -1783,9 +1801,19 @@ Rectangle2D getGlyphOutlineBounds(int glyphID, float x, float y) { result = new Rectangle2D.Float(); result.setRect(strike.getGlyphOutlineBounds(glyphID)); // don't mutate cached rect } else { - GeneralPath gp = strike.getGlyphOutline(glyphID, 0, 0); - gp.transform(sgv.invdtx); - result = gp.getBounds2D(); + if (sgv.invdtx.getShearX() == 0 && sgv.invdtx.getShearY() == 0 && + sgv.invdtx.getScaleX() > 0 && sgv.invdtx.getScaleY() > 0) { + final Rectangle2D.Float rect = strike.getGlyphOutlineBounds(glyphID); + result = new Rectangle2D.Float( + (float)(rect.x*sgv.invdtx.getScaleX() + sgv.invdtx.getTranslateX()), + (float)(rect.y*sgv.invdtx.getScaleY() + sgv.invdtx.getTranslateY()), + (float)(rect.width*sgv.invdtx.getScaleX()), + (float)(rect.height*sgv.invdtx.getScaleY())); + } else { + GeneralPath gp = strike.getGlyphOutline(glyphID, 0, 0); + gp.transform(sgv.invdtx); + result = gp.getBounds2D(); + } } /* Since x is the logical advance of the glyph to this point. * Because of the way that Rectangle.union is specified, this @@ -1816,6 +1844,19 @@ void appendGlyphOutline(int glyphID, GeneralPath result, float x, float y) { PathIterator iterator = gp.getPathIterator(null); result.append(iterator, false); } + + void appendGlyphRenderData(int glyphID, GlyphRenderData result, float x, float y) { + // !!! fontStrike needs a method for this. For that matter, GeneralPath does. + GlyphRenderData grd; + if (sgv.invdtx == null) { + grd = strike.getGlyphRenderData(glyphID, x + dx, y + dy); + } else { + grd = strike.getGlyphRenderData(glyphID, 0, 0); + grd.transform(sgv.invdtx); + grd.transform(AffineTransform.getTranslateInstance(x + dx, y + dy)); + } + result.merge(grd); + } } public String toString() { diff --git a/src/java.desktop/share/classes/sun/font/StrikeCache.java b/src/java.desktop/share/classes/sun/font/StrikeCache.java index 950ba5b3d465..d20f28a848ed 100644 --- a/src/java.desktop/share/classes/sun/font/StrikeCache.java +++ b/src/java.desktop/share/classes/sun/font/StrikeCache.java @@ -27,6 +27,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; +import java.lang.annotation.Native; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; @@ -114,8 +115,16 @@ public final class StrikeCache { static int pixelDataOffset; static int cacheCellOffset; static int managedOffset; + static int subpixelResolutionXOffset; + static int subpixelResolutionYOffset; + static int formatOffset; static long invisibleGlyphPtr; + @Native public static final byte PIXEL_FORMAT_UNKNOWN = -1; + @Native public static final byte PIXEL_FORMAT_GREYSCALE = 1; + @Native public static final byte PIXEL_FORMAT_LCD = 3; + @Native public static final byte PIXEL_FORMAT_BGRA = 4; + /* Native method used to return information used for unsafe * access to native data. * return values as follows:- @@ -130,6 +139,11 @@ public final class StrikeCache { * arr[8] = offset of topLeftY * arr[9] = offset of pixel data. * arr[10] = address of a GlyphImageRef representing the invisible glyph + * arr[11] = offset of cellInfo + * arr[12] = offset of managed + * arr[13] = offset of subpixelResolutionX + * arr[14] = offset of subpixelResolutionY + * arr[15] = offset of format */ static native void getGlyphCacheDescription(long[] infoArray); @@ -140,7 +154,7 @@ public final class StrikeCache { @SuppressWarnings("removal") private static void initStatic() { - long[] nativeInfo = new long[13]; + long[] nativeInfo = new long[16]; getGlyphCacheDescription(nativeInfo); //Can also get address size from Unsafe class :- //nativeAddressSize = unsafe.addressSize(); @@ -157,6 +171,9 @@ private static void initStatic() { invisibleGlyphPtr = nativeInfo[10]; cacheCellOffset = (int) nativeInfo[11]; managedOffset = (int) nativeInfo[12]; + subpixelResolutionXOffset = (int) nativeInfo[13]; + subpixelResolutionYOffset = (int) nativeInfo[14]; + formatOffset = (int) nativeInfo[15]; if (nativeAddressSize < 4) { throw new InternalError("Unexpected address size for font data: " + diff --git a/src/java.desktop/share/classes/sun/font/SunFontManager.java b/src/java.desktop/share/classes/sun/font/SunFontManager.java index 3aec139b56d7..9034f371e065 100644 --- a/src/java.desktop/share/classes/sun/font/SunFontManager.java +++ b/src/java.desktop/share/classes/sun/font/SunFontManager.java @@ -33,9 +33,13 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStreamReader; +import java.math.BigInteger; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; @@ -54,6 +58,7 @@ import sun.awt.SunToolkit; import sun.awt.util.ThreadGroupUtils; import sun.java2d.FontSupport; +import sun.security.action.GetPropertyAction; import sun.util.logging.PlatformLogger; /** @@ -63,7 +68,6 @@ * methods that have to be implemented by specific implementations. */ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { - private static class TTFilter implements FilenameFilter { public boolean accept(File dir,String name) { /* all conveniently have the same suffix length */ @@ -188,6 +192,8 @@ public boolean accept(File dir, String name) { private boolean loaded1dot0Fonts = false; boolean loadedAllFonts = false; boolean loadedAllFontFiles = false; + private HashSet jreBundledFontFiles = new HashSet<>(); + HashMap jreFamilyMap = new HashMap<>(); String[] jreOtherFontFiles; boolean noOtherJREFontFiles = false; // initial assumption. @@ -197,6 +203,7 @@ public boolean accept(File dir, String name) { private String defaultFontName; private String defaultFontFileName; protected HashSet registeredFontFiles = new HashSet<>(); + protected static boolean versionCheckEnabled = false; private ArrayList badFonts; /* fontPath is the location of all fonts on the system, excluding the @@ -258,8 +265,41 @@ public FilenameFilter getType1Filter() { */ private static int maxSoftRefCnt = 10; + protected boolean JREFontsDirExists(String path) { + @SuppressWarnings("removal") + boolean dirExist = AccessController.doPrivileged((PrivilegedAction) () -> + new File(path).isDirectory()); + return dirExist; + } + + private void initJREFontMap() { + + /* Key is familyname+style value as an int. + * Value is filename containing the font. + * If no mapping exists, it means there is no font file for the style + * If the mapping exists but the file doesn't exist in the deferred + * list then it means its not installed. + * This looks like a lot of code and strings but if it saves even + * a single file being opened at JRE start-up there's a big payoff. + * Lucida Sans is probably the only important case as the others + * are rarely used. Consider removing the other mappings if there's + * no evidence they are useful in practice. + */ + if (JREFontsDirExists(jreFontDirName)) { + @SuppressWarnings("removal") + String[] files = AccessController.doPrivileged((PrivilegedAction) () -> + new File(jreFontDirName).list(getTrueTypeFilter())); + Collections.addAll(jreBundledFontFiles, files); + } + + jreFamilyMap.put("Roboto-Light", "Roboto Light"); + jreFamilyMap.put("Roboto-Thin", "Roboto Thin"); + } + static { initStatic(); + versionCheckEnabled = !Boolean.parseBoolean( + GetPropertyAction.privilegedGetProperty("java2d.font.noVersionCheck", "false")); } @SuppressWarnings("removal") @@ -288,17 +328,9 @@ public Void run() { }); } - /** - * If the module image layout changes the location of JDK fonts, - * this will be updated to reflect that. - */ - public static final String getJDKFontDir() { - return jreFontDirName; - } - - public TrueTypeFont getEUDCFont() { + public List getAdditionalFallbackFonts() { // Overridden in Windows. - return null; + return List.of(); } /* Initialise ptrs used by JNI methods */ @@ -306,6 +338,8 @@ public TrueTypeFont getEUDCFont() { @SuppressWarnings("removal") protected SunFontManager() { + + initJREFontMap(); AccessController.doPrivileged(new PrivilegedAction() { public Void run() { File badFontFile = @@ -339,12 +373,7 @@ public Void run() { * registerFonts method as on-screen these JRE fonts * always go through the JDK rasteriser. */ - if (FontUtilities.isLinux) { - /* Linux font configuration uses these fonts */ - registerFontDir(jreFontDirName); - } - registerFontsInDir(jreFontDirName, true, Font2D.JRE_RANK, - true, false); + registerJREFonts(); /* Create the font configuration and get any font path * that might be specified. @@ -458,7 +487,7 @@ public Font2DHandle getNewComposite(String family, int style, } CompositeFont oldComp = (CompositeFont)handle.font2D; - PhysicalFont oldFont = oldComp.getSlotFont(0); + Font2D oldFont = oldComp.getSlotFont(0); if (family == null) { family = oldFont.getFamilyName(null); @@ -468,16 +497,15 @@ public Font2DHandle getNewComposite(String family, int style, } Font2D newFont = findFont2D(family, style, NO_FALLBACK); - if (!(newFont instanceof PhysicalFont)) { - newFont = oldFont; + if (newFont == null) { + return handle; } - PhysicalFont physicalFont = (PhysicalFont)newFont; CompositeFont dialog2D = (CompositeFont)findFont2D("dialog", style, NO_FALLBACK); if (dialog2D == null) { /* shouldn't happen */ return handle; } - CompositeFont compFont = new CompositeFont(physicalFont, dialog2D); + CompositeFont compFont = new CompositeFont(newFont, dialog2D); Font2DHandle newHandle = new Font2DHandle(compFont); return newHandle; } @@ -663,7 +691,7 @@ protected PhysicalFont addToFontList(PhysicalFont f, int rank) { newFont instanceof TrueTypeFont) { TrueTypeFont oldTTFont = (TrueTypeFont)oldFont; TrueTypeFont newTTFont = (TrueTypeFont)newFont; - if (oldTTFont.fileSize >= newTTFont.fileSize) { + if (isFontNewer(oldTTFont.getVersion(), newTTFont.getVersion())) { return oldFont; } } else { @@ -776,6 +804,10 @@ protected synchronized void initialiseDeferredFonts() { } protected synchronized void registerDeferredJREFonts(String jreDir) { + if (!JREFontsDirExists(jreDir)) { + return; + } + for (FontRegistrationInfo info : deferredFontFiles.values()) { if (info.fontFilePath != null && info.fontFilePath.startsWith(jreDir)) { @@ -801,16 +833,19 @@ PhysicalFont findJREDeferredFont(String name, int style) { if (noOtherJREFontFiles) { return null; } - synchronized (jreFontDirName) { + synchronized (jreBundledFontFiles) { if (jreOtherFontFiles == null) { HashSet otherFontFiles = new HashSet<>(); for (String deferredFile : deferredFontFiles.keySet()) { File file = new File(deferredFile); String dir = file.getParent(); + String fname = file.getName(); /* skip names which aren't absolute, aren't in the JRE * directory, or are known Lucida fonts. */ - if (dir == null || !dir.equals(jreFontDirName)) { + if (dir == null || + !dir.equals(jreFontDirName) || + jreBundledFontFiles.contains(fname)) { continue; } otherFontFiles.add(deferredFile); @@ -842,6 +877,14 @@ PhysicalFont findJREDeferredFont(String name, int style) { private PhysicalFont findOtherDeferredFont(String name, int style) { for (String fileName : deferredFontFiles.keySet()) { + File file = new File(fileName); + String dir = file.getParent(); + String fname = file.getName(); + if (dir != null && + dir.equals(jreFontDirName) && + jreBundledFontFiles.contains(fname)) { + continue; + } PhysicalFont physicalFont = initialiseDeferredFont(fileName); if (physicalFont != null && (physicalFont.getFontName(null).equalsIgnoreCase(name) || @@ -2836,12 +2879,8 @@ protected String[] getPlatformFontDirs(boolean noType1Fonts) { /* * helper function for registerFonts */ - private void addDirFonts(String dirName, File dirFile, - FilenameFilter filter, - int fontFormat, boolean useJavaRasterizer, - int fontRank, - boolean defer, boolean resolveSymLinks) { - String[] ls = dirFile.list(filter); + private void addDirFonts(String[] ls, int fontFormat, boolean useJavaRasterizer, + int fontRank, boolean defer, boolean resolveSymLinks) { if (ls == null || ls.length == 0) { return; } @@ -2849,8 +2888,8 @@ private void addDirFonts(String dirName, File dirFile, String[][] nativeNames = new String[ls.length][]; int fontCount = 0; - for (int i=0; i < ls.length; i++ ) { - File theFile = new File(dirFile, ls[i]); + for (String file : ls) { + File theFile = new File(file); String fullName = null; if (resolveSymLinks) { try { @@ -2859,7 +2898,7 @@ private void addDirFonts(String dirName, File dirFile, } } if (fullName == null) { - fullName = dirName + File.separator + ls[i]; + fullName = file; } // REMIND: case compare depends on platform @@ -2993,25 +3032,101 @@ public void registerFontsInDir(String dirName) { registerFontsInDir(dirName, true, Font2D.JRE_RANK, true, false); } + private String[] addPathToFiles(FilenameFilter filter, String path) { + String[] filteredFiles = (new File(path)).list(filter); + if (filteredFiles == null) { + return new String[0]; + } + return Arrays.stream(filteredFiles).map((name) -> (path + File.separator + name)).toArray(String[]::new); + } + // MACOSX begin -- need to access this in subclass protected void registerFontsInDir(String dirName, boolean useJavaRasterizer, // MACOSX end int fontRank, boolean defer, boolean resolveSymLinks) { - File pathFile = new File(dirName); - addDirFonts(dirName, pathFile, ttFilter, + addDirFonts(addPathToFiles(ttFilter, dirName), FONTFORMAT_TRUETYPE, useJavaRasterizer, fontRank==Font2D.UNKNOWN_RANK ? Font2D.TTF_RANK : fontRank, defer, resolveSymLinks); - addDirFonts(dirName, pathFile, t1Filter, + addDirFonts(addPathToFiles(t1Filter, dirName), FONTFORMAT_TYPE1, useJavaRasterizer, fontRank==Font2D.UNKNOWN_RANK ? Font2D.TYPE1_RANK : fontRank, defer, resolveSymLinks); } - protected void registerFontDir(String path) { + protected String getTrueTypeVersion(String path) { + try { + return (new TrueTypeFont(path, null, 0, false, false)).getVersion(); + } catch (FontFormatException e) { + return "0"; + } + } + + // SunFontManager could be extended outside JBR scope (e.g. IdeFontManager) therefore default implementation of this + // method needed for compatibility. Returning of "0" repeats the logic of setting field versionCheckEnabled to false + protected String getSystemFontVersion(TrueTypeFont bundledFont) { + return "0"; + } + + protected void loadJREFonts(String[] fonts) { + addDirFonts(fonts, FONTFORMAT_TRUETYPE, true, + Font2D.JRE_RANK, true, false); + } + + protected static int fontVersionComparator(String versionFirst, String versionSecond) { + return Arrays.compare(versionFirst.split("\\."), versionSecond.split("\\."), + Comparator.comparing(BigInteger::new)); + } + + private boolean isFontNewer(String versionFirst, String versionSecond) { + return fontVersionComparator(versionFirst, versionSecond) > 0; + } + + protected void registerJREFonts() { + List fontsToLoad = new ArrayList<>(); + PlatformLogger logger = FontUtilities.getLogger(); + boolean isLogging = logger != null && FontUtilities.isLogging(); + + if (!versionCheckEnabled && isLogging) { + logger.info("Skip version checking in font loading"); + } + + for (String fontName : jreBundledFontFiles) { + boolean loadFont = true; + String bundledVersion = "unknown"; + String systemVersion = "0"; + String path = jreFontDirName + File.separator + fontName; + if (versionCheckEnabled) { + try { + TrueTypeFont bundledFont = new TrueTypeFont(path, null, 0, false, false); + bundledVersion = bundledFont.getVersion(); + systemVersion = getSystemFontVersion(bundledFont); + + if (isFontNewer(systemVersion, bundledVersion)) { + if (isLogging) { + logger.info("Skip loading " + fontName + ", newer version font on platform were detected. " + + "System version = " + systemVersion + ", Bundled version = " + bundledVersion + "."); + } + loadFont = false; + } + } catch (FontFormatException e) { + if (isLogging) { + logger.warning("Internal error have appeared while reading bundled font " + fontName + "."); + } + } + } + if (loadFont) { + fontsToLoad.add(path); + if (isLogging) { + logger.info("Loaded " + fontName + " (" + bundledVersion + ")"); + } + } + } + + loadJREFonts(fontsToLoad.toArray(new String[0])); } /** diff --git a/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java b/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java index c291e45b5580..591ec166a133 100644 --- a/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java +++ b/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java @@ -30,6 +30,7 @@ package sun.font; +import com.jetbrains.desktop.FontExtensions; import sun.font.GlyphLayout.*; import sun.java2d.Disposer; import sun.java2d.DisposerRecord; @@ -39,8 +40,12 @@ import java.lang.ref.SoftReference; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Arrays; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.WeakHashMap; +import java.util.stream.Collectors; /* * different ways to do this @@ -157,7 +162,7 @@ private SunLayoutEngine(LayoutEngineKey key) { private static final WeakHashMap facePtr = new WeakHashMap<>(); - private long getFacePtr(Font2D font2D) { + private static long getFacePtr(Font2D font2D) { FaceRef ref; synchronized (facePtr) { ref = facePtr.computeIfAbsent(font2D, FaceRef::new); @@ -175,8 +180,14 @@ private long getFacePtr(Font2D font2D) { } - public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int gmask, - int baseIndex, TextRecord tr, int typo_flags, + public static Set getAvailableFeatures(Font2D font) { + long pFace = getFacePtr(font); + return (pFace != 0) ? Arrays.stream(getFeatures(pFace)).filter(elem -> elem != null).collect(Collectors.toSet()) + : Set.of(); + } + + public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int slot, int slotShift, + int baseIndex, TextRecord tr, boolean ltrDirection, Map features, Point2D.Float pt, GVData data) { Font2D font = key.font(); @@ -187,15 +198,17 @@ public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int gmask, HBShaper.shape(font, strike, ptSize, mat, face, tr.text, data, key.script(), tr.start, tr.limit, baseIndex, pt, - typo_flags, gmask); + ltrDirection, FontExtensions.featuresToString(features), + slot, slotShift); } } else { long pFace = getFacePtr(font); if (pFace != 0) { - shape(font, strike, ptSize, mat, pFace, - tr.text, data, key.script(), - tr.start, tr.limit, baseIndex, pt, - typo_flags, gmask); + SunLayoutEngine.shape(font, strike, ptSize, mat, pFace, + tr.text, data, key.script(), + tr.start, tr.limit, baseIndex, pt, + ltrDirection, FontExtensions.featuresToString(features), + slot, slotShift); } } } @@ -206,7 +219,8 @@ public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int gmask, long pFace, char[] chars, GVData data, int script, int offset, int limit, - int baseIndex, Point2D.Float pt, int typo_flags, int slot); + int baseIndex, Point2D.Float pt, boolean ltrDirection, String features, + int slot, int slotShift); private static native long createFace(Font2D font, long platformNativeFontPtr); @@ -238,4 +252,6 @@ public void dispose() { disposeFace(facePtr); } } + + private static native String[] getFeatures(long pFace); } diff --git a/src/java.desktop/share/classes/sun/font/TrueTypeFont.java b/src/java.desktop/share/classes/sun/font/TrueTypeFont.java index 3895ec6ca826..a8f138f8cc35 100644 --- a/src/java.desktop/share/classes/sun/font/TrueTypeFont.java +++ b/src/java.desktop/share/classes/sun/font/TrueTypeFont.java @@ -41,10 +41,14 @@ import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import sun.java2d.Disposer; import sun.java2d.DisposerRecord; @@ -97,6 +101,7 @@ public class TrueTypeFont extends FileFont { public static final int v1ttTag = 0x00010000; // 'v1tt' - Version 1 TT font public static final int trueTag = 0x74727565; // 'true' - Version 2 TT font public static final int ottoTag = 0x4f54544f; // 'otto' - OpenType font + public static final int COLRTag = 0x434f4c52; // 'COLR' /* -- ID's used in the 'name' table */ public static final int MAC_PLATFORM_ID = 1; @@ -107,9 +112,13 @@ public class TrueTypeFont extends FileFont { /* MS locale id for US English is the "default" */ public static final short ENGLISH_LOCALE_ID = 0x0409; // 1033 decimal public static final int FAMILY_NAME_ID = 1; + public static final int SUBFAMILY_NAME_ID = 2; // public static final int STYLE_WEIGHT_ID = 2; // currently unused. public static final int FULL_NAME_ID = 4; + public static final int VERSION_NAME_ID = 5; public static final int POSTSCRIPT_NAME_ID = 6; + public static final int TYPOGRAPHIC_FAMILY_NAME_ID = 16; + public static final int TYPOGRAPHIC_SUBFAMILY_NAME_ID = 17; private static final short US_LCID = 0x0409; // US English - default @@ -179,6 +188,12 @@ public synchronized void dispose() { private Locale nameLocale; private String localeFamilyName; private String localeFullName; + private String typographicFamilyName; + private String typographicSubfamilyName; + private String version; + private String postScriptName; + + private Byte supportedCharset; /* * Used on Windows to validate the font selected by GDI for (sub-pixel @@ -877,6 +892,10 @@ DirectoryEntry getDirectoryEntry(int tag) { return null; } + boolean hasCOLRTable() { + return getDirectoryEntry(COLRTag) != null; + } + /* Used to determine if this size has embedded bitmaps, which * for CJK fonts should be used in preference to LCD glyphs. */ @@ -1049,9 +1068,13 @@ public void getStyleMetrics(float pointSize, float[] metrics, int offset) { metrics[offset+3] = ulSize * pointSize; } - private String makeString(byte[] bytes, int len, + private String makeString(ByteBuffer buffer, int bufferPtr, int len, short platformID, short encoding) { + buffer.position(bufferPtr); + byte[] bytes = new byte[len]; + buffer.get(bytes, 0, len); + if (platformID == MAC_PLATFORM_ID) { encoding = -1; // hack so we can re-use the code below. } @@ -1099,9 +1122,24 @@ private String makeString(byte[] bytes, int len, } } + public static String parseVersion(String str) { + // get first part sequence of digits and dots + Matcher matcher = Pattern.compile("\\d(\\p{XDigit}|\\.)*").matcher(str); + if (!matcher.find()) { + return "0"; + } + // removing leading zeros and hex parts from version e.g. 00010.002.0ab12.300.040 -> 10.2.300.40 + String res = Arrays.stream(matcher.group().split("\\.")).filter(s -> s.matches("\\d+")). + map(s -> (s.replaceFirst("^0*", ""))).map(s -> s.isEmpty() ? "0" : s).collect(Collectors.joining(".")); + return !res.isEmpty() ? res : "0"; + } + + public String getVersion() { + return version; + } + protected void initNames() { - byte[] name = new byte[256]; ByteBuffer buffer = getTableBuffer(nameTag); if (buffer != null) { @@ -1120,6 +1158,8 @@ protected void initNames() { languageCompatibleLCIDs = getLanguageCompatibleLCIDsFromLocale(nameLocale); + String subfamilyName = null; + for (int i=0; i names) { int namePtr = (((int) sbuffer.get()) & 0xffff) + stringPtr; if (nameID == requestedID) { - buffer.position(namePtr); - buffer.get(name, 0, nameLen); - names.add(makeString(name, nameLen, platformID, encodingID)); + names.add(makeString(buffer, namePtr, nameLen, platformID, encodingID)); } } } @@ -1697,6 +1773,32 @@ public boolean hasSupplementaryChars() { return ((TrueTypeGlyphMapper)getMapper()).hasSupplementaryChars(); } + @Override + synchronized byte getSupportedCharset() { + if (supportedCharset != null) return supportedCharset; + Map supportedCharsets = new HashMap<>(); + getSupportedCharsetsForFamily(familyName, supportedCharsets); + HashSet allNames = new HashSet<>(); + try { + initAllNames(FULL_NAME_ID, allNames); + } catch (Exception e) { + /* In case of malformed font */ + } + Byte charset = super.getSupportedCharset(); + for (Map.Entry e : supportedCharsets.entrySet()) { + if (allNames.contains(e.getKey())) { + charset = e.getValue(); + break; + } + } + if (FontUtilities.isLogging()) { + FontUtilities.logInfo(fullName + " supported charset: " + (charset.intValue() & 0xFF)); + } + return (supportedCharset = charset); + } + + private static native void getSupportedCharsetsForFamily(String familyName, Map supportedCharsets); + @Override public String toString() { return "** TrueType Font: Family="+familyName+ " Name="+fullName+ diff --git a/src/java.desktop/share/classes/sun/font/TrueTypeGlyphMapper.java b/src/java.desktop/share/classes/sun/font/TrueTypeGlyphMapper.java index 79b3eec24bb0..e6c0f8f67af1 100644 --- a/src/java.desktop/share/classes/sun/font/TrueTypeGlyphMapper.java +++ b/src/java.desktop/share/classes/sun/font/TrueTypeGlyphMapper.java @@ -132,77 +132,6 @@ public int charToVariationGlyph(int unicode, int variationSelector) { return glyph; } - public void charsToGlyphs(int count, int[] unicodes, int[] glyphs) { - for (int i=0;i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - - glyphs[i] = getGlyphFromCMAP(code); - i += 1; // Empty glyph slot after surrogate - glyphs[i] = INVISIBLE_GLYPH_ID; - continue; - } - } - glyphs[i] = getGlyphFromCMAP(code); - - } - } - - /* This variant checks if shaping is needed and immediately - * returns true if it does. A caller of this method should be expecting - * to check the return type because it needs to know how to handle - * the character data for display. - */ - public boolean charsToGlyphsNS(int count, char[] unicodes, int[] glyphs) { - - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - glyphs[i + 1] = INVISIBLE_GLYPH_ID; - } - } - - glyphs[i] = getGlyphFromCMAP(code); - - if (code < FontUtilities.MIN_LAYOUT_CHARCODE) { - continue; - } - else if (FontUtilities.isComplexCharCode(code) || - CharToGlyphMapper.isVariationSelector(code)) { - return true; - } - else if (code >= 0x10000) { - i += 1; // Empty glyph slot after surrogate - continue; - } - } - - return false; - } - /* A pretty good heuristic is that the cmap we are using * supports 32 bit character codes. */ diff --git a/src/java.desktop/share/classes/sun/font/Type1GlyphMapper.java b/src/java.desktop/share/classes/sun/font/Type1GlyphMapper.java index 6006b70ed934..42099fe0ccbd 100644 --- a/src/java.desktop/share/classes/sun/font/Type1GlyphMapper.java +++ b/src/java.desktop/share/classes/sun/font/Type1GlyphMapper.java @@ -98,80 +98,4 @@ public int charToGlyph(int ch) { } } } - - public void charsToGlyphs(int count, char[] unicodes, int[] glyphs) { - /* The conversion into surrogates is misleading. - * The Type1 glyph mapper only accepts 16 bit unsigned shorts. - * If its > not in the range it can use assign the missing glyph. - */ - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - glyphs[i + 1] = 0xFFFF; // invisible glyph - } - } - glyphs[i] = charToGlyph(code); - if (code >= 0x10000) { - i += 1; // Empty glyph slot after surrogate - } - } - } - - public void charsToGlyphs(int count, int[] unicodes, int[] glyphs) { - /* I believe this code path is never exercised. Its there mainly - * for surrogates and/or the opentype engine which aren't likely - * to be an issue for Type1 fonts. So no need to optimise it. - */ - for (int i=0; i= HI_SURROGATE_START && - code <= HI_SURROGATE_END && i < count - 1) { - char low = unicodes[i + 1]; - - if (low >= LO_SURROGATE_START && - low <= LO_SURROGATE_END) { - code = (code - HI_SURROGATE_START) * - 0x400 + low - LO_SURROGATE_START + 0x10000; - glyphs[i + 1] = INVISIBLE_GLYPH_ID; - } - } - - glyphs[i] = charToGlyph(code); - - if (code < FontUtilities.MIN_LAYOUT_CHARCODE) { - continue; - } - else if (FontUtilities.isComplexCharCode(code)) { - return true; - } - else if (code >= 0x10000) { - i += 1; // Empty glyph slot after surrogate - continue; - } - } - - return false; - } } diff --git a/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java b/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java index 86666b1f894b..88d16e1e8f44 100644 --- a/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java +++ b/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java @@ -370,8 +370,9 @@ public void constrain(int x, int y, int w, int h, Region region) { // changes parameters according to the current scale and translate. final double scaleX = transform.getScaleX(); final double scaleY = transform.getScaleY(); - x = constrainX = (int) transform.getTranslateX(); - y = constrainY = (int) transform.getTranslateY(); + // [tav] rounding down affects aligning by insets in WWindowPeer.getGraphics + x = constrainX = (int)Math.floor(transform.getTranslateX()); + y = constrainY = (int)Math.floor(transform.getTranslateY()); w = Region.dimAdd(x, Region.clipScale(w, scaleX)); h = Region.dimAdd(y, Region.clipScale(h, scaleY)); @@ -772,11 +773,6 @@ public FontInfo checkFontInfo(FontInfo info, Font font, } } } - if (FontUtilities.isMacOSX14 && - (aahint == SunHints.INTVAL_TEXT_ANTIALIAS_OFF)) - { - aahint = SunHints.INTVAL_TEXT_ANTIALIAS_ON; - } info.aaHint = aahint; info.fontStrike = info.font2D.getStrike(font, devAt, textAt, aahint, fmhint); diff --git a/src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java b/src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java index 4335b1c9fbff..cbf2d69b0b05 100644 --- a/src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java +++ b/src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java @@ -41,14 +41,17 @@ import java.awt.image.BufferedImage; import java.awt.peer.ComponentPeer; import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Locale; import java.util.TreeMap; import sun.awt.DisplayChangedListener; +import sun.awt.DisplayParametersChangedListener; import sun.awt.SunDisplayChanger; import sun.font.FontManager; import sun.font.FontManagerFactory; import sun.font.FontManagerForSGE; +import sun.font.FontUtilities; import sun.java2d.pipe.Region; import sun.security.action.GetPropertyAction; @@ -60,21 +63,56 @@ * @see GraphicsConfiguration */ public abstract class SunGraphicsEnvironment extends GraphicsEnvironment - implements DisplayChangedListener { + implements DisplayChangedListener, DisplayParametersChangedListener { /** Establish the default font to be used by SG2D. */ private final Font defaultFont = new Font(Font.DIALOG, Font.PLAIN, 12); - @SuppressWarnings("removal") - private static final boolean uiScaleEnabled - = "true".equals(AccessController.doPrivileged( - new GetPropertyAction("sun.java2d.uiScale.enabled", "true"))); + private static final Object UI_SCALE_LOCK = new Object(); + private static boolean uiScaleEnabled; + private static Boolean uiScaleEnabled_overridden; + private static final double debugScale; - private static final double debugScale = - uiScaleEnabled ? getScaleFactor("sun.java2d.uiScale") : -1; + static { + final GetPropertyAction gpa = new GetPropertyAction("sun.java2d.uiScale.enabled", "true"); + @SuppressWarnings("removal") + final String uiScaleEnabledPropValue = AccessController.doPrivileged(gpa); + + uiScaleEnabled = FontUtilities.isMacOSX || + ("true".equals(uiScaleEnabledPropValue) && + (isWindows_8_1_orUpper() || FontUtilities.isLinux)); + + if (uiScaleEnabled && FontUtilities.isWindows) { + System.setProperty("swing.bufferPerWindow", "false"); // todo: until JRE-489 is fixed + } + debugScale = uiScaleEnabled ? getScaleFactor("sun.java2d.uiScale") : -1; + } protected GraphicsDevice[] screens; + private static boolean isWindows_8_1_orUpper() { + if (!FontUtilities.isWindows) return false; + + String osVersion = System.getProperty("os.version"); + if (osVersion == null) return false; + + String[] parts = osVersion.split("\\."); + if (parts.length < 1) return false; + + try { + int majorVer = Integer.parseInt(parts[0]); + if (majorVer > 6) return true; + if (majorVer < 6) return false; + + if (parts.length < 2) return false; + + int minorVer = Integer.parseInt(parts[1]); + if (minorVer >= 3) return true; + } catch (NumberFormatException ignore) { + } + return false; + } + /** * Returns an array of all of the screen devices. */ @@ -229,6 +267,15 @@ public void displayChanged() { displayChanger.notifyListeners(); } + @Override + public void displayParametersChanged() { + for (GraphicsDevice gd : getScreenDevices()) { + if (gd instanceof DisplayParametersChangedListener) { + ((DisplayParametersChangedListener) gd).displayParametersChanged(); + } + } + } + /** * Part of the DisplayChangedListener interface: * propagate this event to listeners @@ -284,7 +331,27 @@ public boolean isFlipStrategyPreferred(ComponentPeer peer) { } public static boolean isUIScaleEnabled() { - return uiScaleEnabled; + Boolean enabledOverridden = uiScaleEnabled_overridden; + return enabledOverridden != null ? enabledOverridden : uiScaleEnabled; + } + + /** + * Overrides isUIScaleEnabled() to false for fractional scale on Linux. + * + * [tav] todo: temp until fract scale is supported on Linux + */ + public static boolean isUIScaleEnabled(int dpi) { + if (FontUtilities.isLinux) { + if (uiScaleEnabled_overridden == null) { + synchronized (UI_SCALE_LOCK) { + if (uiScaleEnabled_overridden == null) { + uiScaleEnabled_overridden = + Double.compare(dpi / 96.0, Math.floor(dpi / 96.0)) == 0 && uiScaleEnabled; + } + } + } + } + return isUIScaleEnabled(); } public static double getDebugScale() { diff --git a/src/java.desktop/share/classes/sun/java2d/SurfaceData.java b/src/java.desktop/share/classes/sun/java2d/SurfaceData.java index 31091528c87c..2dc0074d7885 100644 --- a/src/java.desktop/share/classes/sun/java2d/SurfaceData.java +++ b/src/java.desktop/share/classes/sun/java2d/SurfaceData.java @@ -450,13 +450,13 @@ public PixelToPgramLoopConverter(ShapeDrawPipe shapepipe, colorPrimitives = new LoopPipe(); outlineTextRenderer = new OutlineTextRenderer(); + solidTextRenderer = new SolidTextRenderer(); aaTextRenderer = new AATextRenderer(); if (FontUtilities.isMacOSX14) { - solidTextRenderer = aaTextRenderer; + lcdTextRenderer = aaTextRenderer; } else { - solidTextRenderer = new SolidTextRenderer(); + lcdTextRenderer = new LCDTextRenderer(); } - lcdTextRenderer = new LCDTextRenderer(); colorPipe = new AlphaColorPipe(); // colorShape = colorPrimitives; diff --git a/src/java.desktop/share/classes/sun/java2d/loops/RenderCache.java b/src/java.desktop/share/classes/sun/java2d/loops/RenderCache.java index 7a9c2d59eb8e..b5fb1de230d8 100644 --- a/src/java.desktop/share/classes/sun/java2d/loops/RenderCache.java +++ b/src/java.desktop/share/classes/sun/java2d/loops/RenderCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,68 +25,45 @@ package sun.java2d.loops; -public final class RenderCache { - static final class Entry { - private SurfaceType src; - private CompositeType comp; - private SurfaceType dst; - private Object value; +import java.util.LinkedHashMap; +import java.util.Map; - public Entry(SurfaceType src, - CompositeType comp, - SurfaceType dst, - Object value) - { - this.src = src; - this.comp = comp; - this.dst = dst; - this.value = value; - } +public final class RenderCache { - public boolean matches(SurfaceType src, - CompositeType comp, - SurfaceType dst) - { - // bug 4725045: using equals() causes different SurfaceType - // objects with the same strings to match in the cache, which is - // not the behavior we want. Constrain the match to succeed only - // on object matches instead. - return ((this.src == src) && - (this.comp == comp) && - (this.dst == dst)); - } + private final int MAX_ENTRIES; + private final Map mruCache; - public Object getValue() { - return value; + record Key(SurfaceType src, CompositeType comp, SurfaceType dst) { + @Override + public boolean equals(Object o) { + if (o instanceof Key other) { + // bug 4725045: using equals() causes different SurfaceType + // objects with the same strings to match in the cache, which is + // not the behavior we want. Constrain the match to succeed only + // on object matches instead. + return ((this.src == other.src) && + (this.comp == other.comp) && + (this.dst == other.dst)); + } + return false; } } - private Entry[] entries; - public RenderCache(int size) { - entries = new Entry[size]; + MAX_ENTRIES = size; + mruCache = new LinkedHashMap<>(size + 1) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > MAX_ENTRIES; + } + }; } public synchronized Object get(SurfaceType src, CompositeType comp, SurfaceType dst) { - int max = entries.length - 1; - for (int i = max; i >= 0; i--) { - Entry e = entries[i]; - if (e == null) { - break; - } - if (e.matches(src, comp, dst)) { - if (i < max - 4) { - System.arraycopy(entries, i+1, entries, i, max - i); - entries[max] = e; - } - return e.getValue(); - } - } - - return null; + return mruCache.get(new Key(src, comp, dst)); } public synchronized void put(SurfaceType src, @@ -94,10 +71,6 @@ public synchronized void put(SurfaceType src, SurfaceType dst, Object value) { - Entry e = new Entry(src, comp, dst, value); - - int num = entries.length; - System.arraycopy(entries, 1, entries, 0, num - 1); - entries[num - 1] = e; + mruCache.put(new Key(src, comp, dst), value); } } diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/BBoxAATileGenerator.java b/src/java.desktop/share/classes/sun/java2d/marlin/BBoxAATileGenerator.java new file mode 100644 index 000000000000..6798bb57a05b --- /dev/null +++ b/src/java.desktop/share/classes/sun/java2d/marlin/BBoxAATileGenerator.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.java2d.marlin; + +import sun.java2d.pipe.AATileGenerator; + +class BBoxAATileGenerator implements AATileGenerator, MarlinConst { + + protected static final boolean DISABLE_BLEND = false; + + protected final Renderer renderer; + protected final MarlinCache cache; + + // per-thread renderer stats + final RendererStats rdrStats; + + BBoxAATileGenerator(final RendererStats stats, final Renderer r, + final MarlinCache cache) + { + this.rdrStats = stats; + this.renderer = r; + this.cache = cache; + } + + /** + * Disposes this tile generator: + * clean up before reusing this instance + */ + @Override + public void dispose() { + if (DO_MONITORS) { + // called from AAShapePipe.renderTiles() (render tiles end): + rdrStats.mon_pipe_renderTiles.stop(); + } + // dispose renderer and recycle the RendererContext instance: + renderer.dispose(); + } + + public final void getBbox(int[] bbox) { + bbox[0] = cache.bboxX0; + bbox[1] = cache.bboxY0; + bbox[2] = cache.bboxX1; + bbox[3] = cache.bboxY1; + } + + /** + * Gets the width of the tiles that the generator batches output into. + * @return the width of the standard alpha tile + */ + @Override + public final int getTileWidth() { + if (DO_MONITORS) { + // called from AAShapePipe.renderTiles() (render tiles start): + rdrStats.mon_pipe_renderTiles.start(); + } + return TILE_W; + } + + /** + * Gets the height of the tiles that the generator batches output into. + * @return the height of the standard alpha tile + */ + @Override + public final int getTileHeight() { + return TILE_H; + } + + /** + * Gets the typical alpha value that will characterize the current + * tile. + * The answer may be 0x00 to indicate that the current tile has + * no coverage in any of its pixels, or it may be 0xff to indicate + * that the current tile is completely covered by the path, or any + * other value to indicate non-trivial coverage cases. + * @return 0x00 for no coverage, 0xff for total coverage, or any other + * value for partial coverage of the tile + */ + @Override + public int getTypicalAlpha() { + if (DISABLE_BLEND) { + // always return empty tiles to disable blending operations + return 0x00; + } + + // Note: if we have a filled rectangle that doesn't end on a tile + // border, we could still return 0xff, even though al!=maxTileAlphaSum + // This is because if we return 0xff, our users will fill a rectangle + // starting at x,y that has width = Math.min(TILE_SIZE, bboxX1-x), + // and height min(TILE_SIZE,bboxY1-y), which is what should happen. + // However, to support this, we would have to use 2 Math.min's + // and 2 multiplications per tile, instead of just 2 multiplications + // to compute maxTileAlphaSum. The savings offered would probably + // not be worth it, considering how rare this case is. + // Note: I have not tested this, so in the future if it is determined + // that it is worth it, it should be implemented. Perhaps this method's + // interface should be changed to take arguments the width and height + // of the current tile. This would eliminate the 2 Math.min calls that + // would be needed here, since our caller needs to compute these 2 + // values anyway. + // this default implementation returns FULL tiles: + final int alpha = 0xff; + if (DO_STATS) { + rdrStats.hist_tile_generator_alpha.add(alpha); + } + return alpha; + } + + /** + * Skips the current tile and moves on to the next tile. + * Either this method, or the getAlpha() method should be called + * once per tile, but not both. + */ + @Override + public void nextTile() { + // this default implementation does nothing + } + + /** + * Gets the alpha coverage values for the current tile. + * Either this method, or the nextTile() method should be called + * once per tile, but not both. + */ + @Override + public void getAlpha(final byte[] tile, final int offset, + final int rowstride) + { + // this default implementation does nothing + } +} diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/DMarlinRenderingEngine.java b/src/java.desktop/share/classes/sun/java2d/marlin/DMarlinRenderingEngine.java index a42e474e7649..02daae95c466 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/DMarlinRenderingEngine.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/DMarlinRenderingEngine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -909,7 +909,7 @@ public AATileGenerator getAATileGenerator(Shape s, boolean normalize, int[] bbox) { - MarlinTileGenerator ptg = null; + BBoxAATileGenerator ptg = null; Renderer r = null; final RendererContext rdrCtx = getRendererContext(); @@ -983,11 +983,10 @@ public AATileGenerator getAATileGenerator(Shape s, strokeTo(rdrCtx, s, _at, bs, thin, norm, true, r); } - if (r.endRendering()) { - ptg = rdrCtx.ptg.init(); + if ((ptg = r.endRendering()) != null) { ptg.getBbox(bbox); // note: do not returnRendererContext(rdrCtx) - // as it will be called later by MarlinTileGenerator.dispose() + // as it will be called later by BBoxAATileGenerator.dispose() r = null; } } finally { @@ -1032,7 +1031,7 @@ public AATileGenerator getAATileGenerator(double x, double y, ldx1 = ldy1 = ldx2 = ldy2 = 0.0d; } - MarlinTileGenerator ptg = null; + BBoxAATileGenerator ptg = null; Renderer r = null; final RendererContext rdrCtx = getRendererContext(); @@ -1062,11 +1061,10 @@ public AATileGenerator getAATileGenerator(double x, double y, } r.pathDone(); - if (r.endRendering()) { - ptg = rdrCtx.ptg.init(); + if ((ptg = r.endRendering()) != null) { ptg.getBbox(bbox); // note: do not returnRendererContext(rdrCtx) - // as it will be called later by MarlinTileGenerator.dispose() + // as it will be called later by BBoxAATileGenerator.dispose() r = null; } } finally { diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/MarlinCache.java b/src/java.desktop/share/classes/sun/java2d/marlin/MarlinCache.java index 9eb46fccb31c..986afcf8c431 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/MarlinCache.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/MarlinCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -120,13 +120,17 @@ public final class MarlinCache implements MarlinConst { tileMax = Integer.MIN_VALUE; } - void init(int minx, int miny, int maxx, int maxy) - { + void initBBox(int minx, int miny, int maxx, int maxy) { // assert maxy >= miny && maxx >= minx; bboxX0 = minx; bboxY0 = miny; bboxX1 = maxx; bboxY1 = maxy; + } + + void init(int minx, int miny, int maxx, int maxy) + { + initBBox(minx, miny, maxx, maxy); final int width = (maxx - minx); diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/MarlinTileGenerator.java b/src/java.desktop/share/classes/sun/java2d/marlin/MarlinTileGenerator.java index 4f9977a0b2d3..07f0e4f55962 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/MarlinTileGenerator.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/MarlinTileGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,9 +29,7 @@ import sun.java2d.pipe.AATileGenerator; import jdk.internal.misc.Unsafe; -final class MarlinTileGenerator implements AATileGenerator, MarlinConst { - - private static final boolean DISABLE_BLEND = false; +final class MarlinTileGenerator extends BBoxAATileGenerator { private static final int MAX_TILE_ALPHA_SUM = TILE_W * TILE_H * MAX_AA_ALPHA; @@ -52,19 +50,12 @@ final class MarlinTileGenerator implements AATileGenerator, MarlinConst { } } - private final Renderer renderer; - private final MarlinCache cache; private int x, y; - // per-thread renderer stats - final RendererStats rdrStats; - MarlinTileGenerator(final RendererStats stats, final Renderer r, final MarlinCache cache) { - this.rdrStats = stats; - this.renderer = r; - this.cache = cache; + super(stats, r, cache); } MarlinTileGenerator init() { @@ -80,43 +71,10 @@ MarlinTileGenerator init() { */ @Override public void dispose() { - if (DO_MONITORS) { - // called from AAShapePipe.renderTiles() (render tiles end): - rdrStats.mon_pipe_renderTiles.stop(); - } // dispose cache: cache.dispose(); // dispose renderer and recycle the RendererContext instance: - renderer.dispose(); - } - - void getBbox(int[] bbox) { - bbox[0] = cache.bboxX0; - bbox[1] = cache.bboxY0; - bbox[2] = cache.bboxX1; - bbox[3] = cache.bboxY1; - } - - /** - * Gets the width of the tiles that the generator batches output into. - * @return the width of the standard alpha tile - */ - @Override - public int getTileWidth() { - if (DO_MONITORS) { - // called from AAShapePipe.renderTiles() (render tiles start): - rdrStats.mon_pipe_renderTiles.start(); - } - return TILE_W; - } - - /** - * Gets the height of the tiles that the generator batches output into. - * @return the height of the standard alpha tile - */ - @Override - public int getTileHeight() { - return TILE_H; + super.dispose(); } /** diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java b/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java index a8a342af262a..c28f69f5db3f 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,9 @@ final class Renderer implements DPathConsumer2D, MarlinConst { + static final boolean TRACE_SLOPE_0 = DO_STATS && false; + static final boolean TRACE_RECT = DO_STATS && false; + static final boolean DISABLE_RENDER = MarlinProperties.isSkipRenderer(); static final boolean ENABLE_BLOCK_FLAGS = MarlinProperties.isUseTileFlags(); @@ -136,6 +139,7 @@ final class Renderer implements DPathConsumer2D, MarlinConst { // sublist in the segment lists (the portion of the list that contains // all the segments that cross the next scan line). private int edgeCount; + private int edgeVertCount; private int[] edgePtrs; // auxiliary storage for edge pointers (merge sort) private int[] aux_edgePtrs; @@ -366,22 +370,58 @@ private void addLine(double x1, double y1, double x2, double y2) { edgeMaxY = lastCrossing; } - final double slope = (x1 - x2) / (y1 - y2); + if (DO_STATS) { + rdrCtx.stats.stat_rdr_addLine_slope_length.add( + (lastCrossing - firstCrossing + SUBPIXEL_MASK_Y) >> SUBPIXEL_LG_POSITIONS_Y + ); + } + if (TRACE_SLOPE_0 && (x1 != x2)) { + // TODO: check same end point x (more precisely using integer maths) + final int firstX = FloatMath.ceil_int(x1 - 0.5); + final int lastX = FloatMath.ceil_int(x2 - 0.5); + if (firstX == lastX) { + rdrCtx.stats.stat_rdr_addLine_slope_small.add( + (lastCrossing - firstCrossing + SUBPIXEL_MASK_Y) >> SUBPIXEL_LG_POSITIONS_Y + ); + // TODO: force case: (slope == 0.0) => use purely vertical edge + } + } + + final double slope; + + if (x1 == x2) { + slope = 0.0; + edgeVertCount++; + if (DO_STATS) { + rdrCtx.stats.stat_rdr_addLine_slope_0.add( + (lastCrossing - firstCrossing + SUBPIXEL_MASK_Y) >> SUBPIXEL_LG_POSITIONS_Y + ); + } - if (slope >= 0.0d) { // <==> x1 < x2 if (x1 < edgeMinX) { edgeMinX = x1; } - if (x2 > edgeMaxX) { - edgeMaxX = x2; - } - } else { - if (x2 < edgeMinX) { - edgeMinX = x2; - } if (x1 > edgeMaxX) { edgeMaxX = x1; } + } else { + slope = (x1 - x2) / (y1 - y2); + + if (slope >= 0.0d) { // <==> x1 < x2 + if (x1 < edgeMinX) { + edgeMinX = x1; + } + if (x2 > edgeMaxX) { + edgeMaxX = x2; + } + } else { + if (x2 < edgeMinX) { + edgeMinX = x2; + } + if (x1 > edgeMaxX) { + edgeMaxX = x1; + } + } } // local variables for performance: @@ -596,6 +636,7 @@ Renderer init(final int pix_boundsX, final int pix_boundsY, // reset used mark: edgeCount = 0; + edgeVertCount = 0; activeEdgeMaxUsed = 0; edges.used = 0; @@ -1431,12 +1472,12 @@ private void _endRendering(final int ymin, final int ymax) { } } - boolean endRendering() { - if (DO_MONITORS) { - rdrCtx.stats.mon_rdr_endRendering.start(); - } + BBoxAATileGenerator endRendering() { if (edgeMinY == Integer.MAX_VALUE) { - return false; // undefined edges bounds + if (DO_STATS) { + rdrCtx.stats.stat_rdr_shape_skip.add(1); + } + return null; // undefined edges bounds } // bounds as half-open intervals @@ -1459,7 +1500,13 @@ boolean endRendering() { // test clipping for shapes out of bounds if ((spminX >= spmaxX) || (spminY >= spmaxY)) { - return false; + if (DO_STATS) { + rdrCtx.stats.stat_rdr_shape_skip.add(1); + } + return null; + } + if (DO_MONITORS) { + rdrCtx.stats.mon_rdr_endRendering.start(); } // half open intervals @@ -1472,20 +1519,48 @@ boolean endRendering() { // exclusive: final int pmaxY = (spmaxY + SUBPIXEL_MASK_Y) >> SUBPIXEL_LG_POSITIONS_Y; - // store BBox to answer ptg.getBBox(): - this.cache.init(pminX, pminY, pmaxX, pmaxY); + // bbox area in pixels: + if (DO_STATS) { + rdrCtx.stats.stat_rdr_iter.add(spmaxY - spminY); + rdrCtx.stats.stat_rdr_shape_area.add(((long)(pmaxX - pminX)) * (pmaxY - pminY)); + } - // Heuristics for using block flags: - if (ENABLE_BLOCK_FLAGS) { - enableBlkFlags = this.cache.useRLE; - prevUseBlkFlags = enableBlkFlags && !ENABLE_BLOCK_FLAGS_HEURISTICS; + if (edgeVertCount != 0) { + final int totalEdgesCount = edges.used / SIZEOF_EDGE_BYTES; - if (enableBlkFlags) { - // ensure blockFlags array is large enough: - // note: +2 to ensure enough space left at end - final int blkLen = ((pmaxX - pminX) >> BLOCK_SIZE_LG) + 2; - if (blkLen > INITIAL_ARRAY) { - blkFlags = blkFlags_ref.getArray(blkLen); + // check flat ? + if (totalEdgesCount == edgeVertCount) { + // all edges are constant (vert or horiz): + if (DO_STATS) { + rdrCtx.stats.stat_rdr_edges_constant.add(totalEdgesCount); + rdrCtx.stats.stat_rdr_shape_area_constant.add(((long)(pmaxX - pminX)) * (pmaxY - pminY)); + } + + // check rect ? + if (totalEdgesCount == 2) { + if (TRACE_RECT) { + MarlinUtils.logInfo("sp rect = [" + spminX + " ... " + spmaxX + + "[ [" + spminY + " ... " + spmaxY + "["); + } + + final int subpixelMask = (spminX & SUBPIXEL_MASK_X) | (spmaxX & SUBPIXEL_MASK_X) + | (spminY & SUBPIXEL_MASK_Y) | (spmaxY & SUBPIXEL_MASK_Y); + + if (subpixelMask == 0) { + // rectangle aligned on pixel grid: + if (TRACE_RECT) { + MarlinUtils.logInfo("FULL RECT: pXY = [" + pminX + " ... " + pmaxX + + "[ [" + pminY + " ... " + pmaxY + "["); + } + if (DO_STATS) { + rdrCtx.stats.stat_rdr_iter_skip.add(spmaxY - spminY); + } + // store BBox to answer ptg.getBBox(): + this.cache.initBBox(pminX, pminY, pmaxX, pmaxY); + + // skip renderer entirely using BBoxAATileGenerator: + return rdrCtx.ftg; + } } } } @@ -1504,10 +1579,28 @@ boolean endRendering() { if (DO_LOG_BOUNDS) { MarlinUtils.logInfo("pXY = [" + pminX + " ... " + pmaxX - + "[ [" + pminY + " ... " + pmaxY + "["); + + "[ [" + pminY + " ... " + pmaxY + "["); MarlinUtils.logInfo("bbox_spXY = [" + bbox_spminX + " ... " - + bbox_spmaxX + "[ [" + bbox_spminY + " ... " - + bbox_spmaxY + "["); + + bbox_spmaxX + "[ [" + bbox_spminY + " ... " + + bbox_spmaxY + "["); + } + + // store BBox to answer ptg.getBBox(): + this.cache.init(pminX, pminY, pmaxX, pmaxY); + + // Heuristics for using block flags: + if (ENABLE_BLOCK_FLAGS) { + enableBlkFlags = this.cache.useRLE; + prevUseBlkFlags = enableBlkFlags && !ENABLE_BLOCK_FLAGS_HEURISTICS; + + if (enableBlkFlags) { + // ensure blockFlags array is large enough: + // note: +2 to ensure enough space left at end + final int blkLen = ((pmaxX - pminX) >> BLOCK_SIZE_LG) + 2; + if (blkLen > INITIAL_ARRAY) { + blkFlags = blkFlags_ref.getArray(blkLen); + } + } } // Prepare alpha line: @@ -1525,7 +1618,7 @@ boolean endRendering() { // process first tile line: endRendering(pminY); - return true; + return rdrCtx.ptg.init(); } private int bbox_spminX, bbox_spmaxX, bbox_spminY, bbox_spmaxY; diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java b/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java index b258f4e25d82..c7d607ec690f 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,6 +75,7 @@ static RendererContext createContext() { final PathSimplifier pathSimplifier = new PathSimplifier(); final Dasher dasher; final MarlinTileGenerator ptg; + final BBoxAATileGenerator ftg; final MarlinCache cache; // flag indicating the shape is stroked (1) or filled (0) int stroking = 0; @@ -151,6 +152,8 @@ static RendererContext createContext() { // Renderer: cache = new MarlinCache(this); renderer = new Renderer(this); // needs MarlinCache from rdrCtx.cache + + ftg = new BBoxAATileGenerator(stats, renderer, cache); // full tiles ptg = new MarlinTileGenerator(stats, renderer, cache); stroker = new Stroker(this); diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java b/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java index 5517ce93f994..1f1a538e6e4e 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/RendererStats.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,6 +69,12 @@ public static void dumpStats() { = new StatLong("renderer.addLine"); final StatLong stat_rdr_addLine_skip = new StatLong("renderer.addLine.skip"); + final StatLong stat_rdr_addLine_slope_length + = new StatLong("renderer.addLine.slope.len"); + final StatLong stat_rdr_addLine_slope_0 + = new StatLong("renderer.addLine.slope.zero"); + final StatLong stat_rdr_addLine_slope_small + = new StatLong("renderer.addLine.slope.small"); final StatLong stat_rdr_curveBreak = new StatLong("renderer.curveBreakIntoLinesAndAdd"); final StatLong stat_rdr_curveBreak_dec @@ -79,6 +85,14 @@ public static void dumpStats() { = new StatLong("renderer.quadBreakIntoLinesAndAdd"); final StatLong stat_rdr_quadBreak_dec = new StatLong("renderer.quadBreakIntoLinesAndAdd.dec"); + final StatLong stat_rdr_shape_skip + = new StatLong("renderer.shape.skip"); + final StatLong stat_rdr_shape_area + = new StatLong("renderer.shape.area"); + final StatLong stat_rdr_shape_area_constant + = new StatLong("renderer.shape.area.constant"); + final StatLong stat_rdr_edges_constant + = new StatLong("renderer.edges.constant"); final StatLong stat_rdr_edges = new StatLong("renderer.edges"); final StatLong stat_rdr_edges_count @@ -103,6 +117,10 @@ public static void dumpStats() { = new StatLong("renderer.crossings.msorts"); final StatLong stat_rdr_crossings_dpqs = new StatLong("renderer.crossings.dpqs"); + final StatLong stat_rdr_iter + = new StatLong("renderer.iter"); + final StatLong stat_rdr_iter_skip + = new StatLong("renderer.iter.skip"); final StatLong stat_str_polystack_curves = new StatLong("stroker.polystack.curves"); final StatLong stat_str_polystack_types @@ -182,11 +200,18 @@ public static void dumpStats() { stat_cache_tiles, stat_rdr_addLine, stat_rdr_addLine_skip, + stat_rdr_addLine_slope_length, + stat_rdr_addLine_slope_0, + stat_rdr_addLine_slope_small, stat_rdr_curveBreak, stat_rdr_curveBreak_dec, stat_rdr_curveBreak_inc, stat_rdr_quadBreak, stat_rdr_quadBreak_dec, + stat_rdr_shape_skip, + stat_rdr_shape_area, + stat_rdr_shape_area_constant, + stat_rdr_edges_constant, stat_rdr_edges, stat_rdr_edges_count, stat_rdr_edges_resizes, @@ -199,6 +224,8 @@ public static void dumpStats() { stat_rdr_crossings_bsearch, stat_rdr_crossings_msorts, stat_rdr_crossings_dpqs, + stat_rdr_iter, + stat_rdr_iter_skip, stat_str_polystack_types, stat_str_polystack_curves, stat_cpd_polystack_curves, @@ -379,6 +406,7 @@ public void run() { statTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { + logInfo("--- RendererStats dump at: " + new java.util.Date() + " ---"); dump(); } }, DUMP_INTERVAL, DUMP_INTERVAL); diff --git a/src/java.desktop/share/classes/sun/java2d/marlin/Version.java b/src/java.desktop/share/classes/sun/java2d/marlin/Version.java index 76bdbe59338c..2dae9f9bfed6 100644 --- a/src/java.desktop/share/classes/sun/java2d/marlin/Version.java +++ b/src/java.desktop/share/classes/sun/java2d/marlin/Version.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ public final class Version { - private static final String VERSION = "marlin-0.9.4.6.1-Unsafe-OpenJDK"; + private static final String VERSION = "marlin-0.9.4.7-Unsafe-OpenJDK"; public static String getVersion() { return VERSION; diff --git a/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java b/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java index 4b89aca5c85d..a6060d98a654 100644 --- a/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java +++ b/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java @@ -25,6 +25,7 @@ package sun.java2d.opengl; +import sun.awt.AWTThreading; import sun.awt.util.ThreadGroupUtils; import sun.java2d.pipe.RenderBuffer; import sun.java2d.pipe.RenderQueue; @@ -32,6 +33,7 @@ import static sun.java2d.pipe.BufferedOpCodes.*; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.concurrent.TimeUnit; /** * OGL-specific implementation of RenderQueue. This class provides a @@ -154,7 +156,7 @@ private void flushBuffer() { } private class QueueFlusher implements Runnable { - private boolean needsFlush; + private volatile boolean needsFlush; private Runnable task; private Error error; private final Thread thread; @@ -168,28 +170,49 @@ public QueueFlusher() { thread.start(); } - public synchronized void flushNow() { - // wake up the flusher - needsFlush = true; - notify(); + public void flushNow() { + flushNow(null); + } + + private void flushNow(Runnable task) { + Error err; + synchronized (this) { + if (task != null) { + this.task = task; + } + // wake up the flusher + needsFlush = true; + notifyAll(); - // wait for flush to complete - while (needsFlush) { + // wait for flush to complete try { - wait(); + wait(100); } catch (InterruptedException e) { } + err = error; + } + if (needsFlush) { + // if we still wait for flush then avoid potential deadlock + err = AWTThreading.executeWaitToolkit(() -> { + synchronized (QueueFlusher.this) { + while (needsFlush) { + try { + QueueFlusher.this.wait(); + } catch (InterruptedException e) { + } + } + return error; + } + }, 5, TimeUnit.SECONDS); } - // re-throw any error that may have occurred during the flush - if (error != null) { - throw error; + if (err != null) { + throw err; } } - public synchronized void flushAndInvokeNow(Runnable task) { - this.task = task; - flushNow(); + public void flushAndInvokeNow(Runnable task) { + flushNow(task); } public synchronized void run() { @@ -243,7 +266,7 @@ public synchronized void run() { task = null; // allow the waiting thread to continue needsFlush = false; - notify(); + notifyAll(); } } } diff --git a/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java b/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java index 0372f0b016a9..553675cbc016 100644 --- a/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java +++ b/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java @@ -401,12 +401,10 @@ public Raster getRaster(int x, int y, int w, int h) { * more code just to support a few uncommon cases. */ public boolean canRenderLCDText(SunGraphics2D sg2d) { - return - graphicsConfig.isCapPresent(CAPS_EXT_LCD_SHADER) && - sg2d.surfaceData.getTransparency() == Transparency.OPAQUE && - sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR && - (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY || - (sg2d.compositeState <= SunGraphics2D.COMP_ALPHA && canHandleComposite(sg2d.composite))); + return graphicsConfig.isCapPresent(CAPS_EXT_LCD_SHADER) && + sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR && + (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY || + (sg2d.compositeState <= SunGraphics2D.COMP_ALPHA && canHandleComposite(sg2d.composite))); } private boolean canHandleComposite(Composite c) { diff --git a/src/java.desktop/share/classes/sun/java2d/pipe/BufferedOpCodes.java b/src/java.desktop/share/classes/sun/java2d/pipe/BufferedOpCodes.java index 001f9e9d7f19..2baf6a22bd99 100644 --- a/src/java.desktop/share/classes/sun/java2d/pipe/BufferedOpCodes.java +++ b/src/java.desktop/share/classes/sun/java2d/pipe/BufferedOpCodes.java @@ -77,6 +77,7 @@ public final class BufferedOpCodes { // multibuffering ops @Native public static final int SWAP_BUFFERS = 80; + @Native public static final int FLUSH_BUFFER = 81; // special no-op op code (mainly used for achieving 8-byte alignment) @Native public static final int NOOP = 90; diff --git a/src/java.desktop/share/classes/sun/java2d/pipe/GlyphListLoopPipe.java b/src/java.desktop/share/classes/sun/java2d/pipe/GlyphListLoopPipe.java index ebe1146483e7..41bf0dccfcf3 100644 --- a/src/java.desktop/share/classes/sun/java2d/pipe/GlyphListLoopPipe.java +++ b/src/java.desktop/share/classes/sun/java2d/pipe/GlyphListLoopPipe.java @@ -26,6 +26,7 @@ package sun.java2d.pipe; import sun.awt.SunHints; +import sun.font.StrikeCache; import sun.java2d.SunGraphics2D; import sun.font.GlyphList; @@ -41,50 +42,49 @@ public abstract class GlyphListLoopPipe extends GlyphListPipe protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl, int aaHint) { int prevLimit = 0; - boolean isColor = false; + byte pixelFormat = StrikeCache.PIXEL_FORMAT_UNKNOWN; int len = gl.getNumGlyphs(); gl.startGlyphIteration(); if (GlyphList.canContainColorGlyphs()) { for (int i = 0; i < len; i++) { - boolean newIsColor = gl.isColorGlyph(i); - if (newIsColor != isColor) { - drawGlyphListSegment(sg2d, gl, prevLimit, i, aaHint, - isColor); + byte newFormat = gl.getPixelFormat(i); + if (newFormat != pixelFormat) { + drawGlyphListSegment(sg2d, gl, + prevLimit, i, aaHint, pixelFormat); prevLimit = i; - isColor = newIsColor; + pixelFormat = newFormat; } } } - drawGlyphListSegment(sg2d, gl, prevLimit, len, aaHint, isColor); + drawGlyphListSegment(sg2d, gl, prevLimit, len, aaHint, pixelFormat); } private void drawGlyphListSegment(SunGraphics2D sg2d, GlyphList gl, int fromglyph, int toGlyph, - int aaHint, boolean isColor) { + int aaHint, byte pixelFormat) { if (fromglyph >= toGlyph) return; - if (isColor) { - sg2d.loops.drawGlyphListColorLoop. - DrawGlyphListColor(sg2d, sg2d.surfaceData, - gl, fromglyph, toGlyph); - } else { - switch (aaHint) { - case SunHints.INTVAL_TEXT_ANTIALIAS_OFF: + switch (pixelFormat) { + case StrikeCache.PIXEL_FORMAT_GREYSCALE: + if (aaHint == SunHints.INTVAL_TEXT_ANTIALIAS_OFF) { sg2d.loops.drawGlyphListLoop. DrawGlyphList(sg2d, sg2d.surfaceData, gl, fromglyph, toGlyph); - return; - case SunHints.INTVAL_TEXT_ANTIALIAS_ON: + } else { sg2d.loops.drawGlyphListAALoop. DrawGlyphListAA(sg2d, sg2d.surfaceData, gl, fromglyph, toGlyph); - return; - case SunHints.INTVAL_TEXT_ANTIALIAS_LCD_HRGB: - case SunHints.INTVAL_TEXT_ANTIALIAS_LCD_VRGB: - sg2d.loops.drawGlyphListLCDLoop. - DrawGlyphListLCD(sg2d, sg2d.surfaceData, - gl, fromglyph, toGlyph); - return; - } + } + return; + case StrikeCache.PIXEL_FORMAT_LCD: + sg2d.loops.drawGlyphListLCDLoop. + DrawGlyphListLCD(sg2d, sg2d.surfaceData, + gl, fromglyph, toGlyph); + return; + case StrikeCache.PIXEL_FORMAT_BGRA: + sg2d.loops.drawGlyphListColorLoop. + DrawGlyphListColor(sg2d, sg2d.surfaceData, + gl, fromglyph, toGlyph); + return; } } } diff --git a/src/java.desktop/share/classes/sun/java2d/pipe/OutlineTextRenderer.java b/src/java.desktop/share/classes/sun/java2d/pipe/OutlineTextRenderer.java index b657e434d2f9..e40e52afebad 100644 --- a/src/java.desktop/share/classes/sun/java2d/pipe/OutlineTextRenderer.java +++ b/src/java.desktop/share/classes/sun/java2d/pipe/OutlineTextRenderer.java @@ -28,12 +28,13 @@ import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; import java.awt.font.TextLayout; + +import sun.font.GlyphRenderData; +import sun.font.StandardGlyphVector; import sun.java2d.SunGraphics2D; import sun.awt.SunHints; -import java.awt.Shape; -import java.awt.geom.AffineTransform; -import java.awt.font.TextLayout; +import java.awt.geom.GeneralPath; /** * A delegate pipe of SG2D for drawing "large" text with @@ -78,36 +79,22 @@ public void drawString(SunGraphics2D g2d, String str, double x, double y) { } TextLayout tl = new TextLayout(str, g2d.getFont(), g2d.getFontRenderContext()); - Shape s = tl.getOutline(AffineTransform.getTranslateInstance(x, y)); - - int textAAHint = g2d.getFontInfo().aaHint; - - int prevaaHint = - 1; - if (textAAHint != SunHints.INTVAL_TEXT_ANTIALIAS_OFF && - g2d.antialiasHint != SunHints.INTVAL_ANTIALIAS_ON) { - prevaaHint = g2d.antialiasHint; - g2d.antialiasHint = SunHints.INTVAL_ANTIALIAS_ON; - g2d.validatePipe(); - } else if (textAAHint == SunHints.INTVAL_TEXT_ANTIALIAS_OFF - && g2d.antialiasHint != SunHints.INTVAL_ANTIALIAS_OFF) { - prevaaHint = g2d.antialiasHint; - g2d.antialiasHint = SunHints.INTVAL_ANTIALIAS_OFF; - g2d.validatePipe(); - } - g2d.fill(s); - - if (prevaaHint != -1) { - g2d.antialiasHint = prevaaHint; - g2d.validatePipe(); - } + // This will end up calling our drawGlyphVector + tl.draw(g2d, (float) x, (float) y); } public void drawGlyphVector(SunGraphics2D g2d, GlyphVector gv, float x, float y) { + GlyphRenderData grd; + if (gv instanceof StandardGlyphVector) { + grd = ((StandardGlyphVector) gv).getGlyphRenderData(x, y); + } else { + grd = new GlyphRenderData(); + grd.outline = new GeneralPath(gv.getOutline(x, y)); + } - Shape s = gv.getOutline(x, y); int prevaaHint = - 1; FontRenderContext frc = gv.getFontRenderContext(); boolean aa = frc.isAntiAliased(); @@ -134,7 +121,7 @@ public void drawGlyphVector(SunGraphics2D g2d, GlyphVector gv, g2d.validatePipe(); } - g2d.fill(s); + grd.draw(g2d); if (prevaaHint != -1) { g2d.antialiasHint = prevaaHint; diff --git a/src/java.desktop/share/classes/sun/java2d/pipe/RenderQueue.java b/src/java.desktop/share/classes/sun/java2d/pipe/RenderQueue.java index d33db33ec5c8..bde1c3c18004 100644 --- a/src/java.desktop/share/classes/sun/java2d/pipe/RenderQueue.java +++ b/src/java.desktop/share/classes/sun/java2d/pipe/RenderQueue.java @@ -72,7 +72,7 @@ public abstract class RenderQueue { /** The size of the underlying buffer, in bytes. */ - private static final int BUFFER_SIZE = 32000; + private static final int BUFFER_SIZE = 6400000; /** The underlying buffer for this queue. */ protected RenderBuffer buf; diff --git a/src/java.desktop/share/classes/sun/swing/AccessibleAnnouncer.java b/src/java.desktop/share/classes/sun/swing/AccessibleAnnouncer.java new file mode 100644 index 000000000000..e40082d97b3e --- /dev/null +++ b/src/java.desktop/share/classes/sun/swing/AccessibleAnnouncer.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.swing; + +import jdk.internal.misc.InnocuousThread; +import sun.awt.AWTThreading; + +import javax.accessibility.Accessible; +import java.lang.annotation.Native; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * This class provides the ability to speak a given string using screen readers. + * + * @author Artem Semenov + */ +public class AccessibleAnnouncer { + + /** + * messages do not interrupt the current speech, they are spoken after the screen reader has spoken the current phrase + */ + @Native public static final int ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT = 0; + + /** + * messages interrupt the current speech, but only when the focus is on the window of the calling application + */ + @Native public static final int ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT = 1; + + private static ExecutorService executor; + + private AccessibleAnnouncer() {} + + /** + * This method makes an announcement with the specified priority + * + * @param str string for announcing + * @param priority priority for announcing + */ + public static void announce(final String str, final int priority) throws Exception { + announce(null, str, priority); + } + + /** + * This method makes an announcement with the specified priority from an accessible to which the announcing relates + * + * @param a an accessible to which the announcing relates + * @param str string for announcing + * @param priority priority for announcing + */ + public static void announce(Accessible a, final String str, final int priority) throws Exception { + if (str == null || + priority != ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT && + priority != ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT) { + throw new IllegalArgumentException("Invalid parameters passed for declaration"); + } + + // On Windows, this doesn't need to run on EDT and may be a long-running operation, + // so execute it on a background thread. + if (System.getProperty("os.name").startsWith("Windows")) { + if (executor == null) { + executor = Executors.newSingleThreadExecutor(r -> { + Thread t = InnocuousThread.newSystemThread(AccessibleAnnouncer.class.getSimpleName(), r); + t.setDaemon(true); + return t; + }); + } + executor.execute(() -> nativeAnnounce(a, str, priority)); + } else { + AWTThreading.executeWaitToolkit(() -> nativeAnnounce(a, str, priority)); + } + } + + private static native void nativeAnnounce(Accessible a, final String str, final int priority); +} diff --git a/src/java.desktop/share/classes/sun/swing/SwingUtilities2.java b/src/java.desktop/share/classes/sun/swing/SwingUtilities2.java index d763a72d528b..d21543d4ecb7 100644 --- a/src/java.desktop/share/classes/sun/swing/SwingUtilities2.java +++ b/src/java.desktop/share/classes/sun/swing/SwingUtilities2.java @@ -67,11 +67,13 @@ import java.text.AttributedString; import java.text.BreakIterator; import java.text.CharacterIterator; +import java.util.Arrays; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; @@ -102,9 +104,11 @@ import sun.java2d.SunGraphicsEnvironment; import sun.print.ProxyPrintGraphics; +import static java.awt.RenderingHints.KEY_FRACTIONALMETRICS; import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING; import static java.awt.RenderingHints.KEY_TEXT_LCD_CONTRAST; import static java.awt.RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT; +import static java.awt.RenderingHints.VALUE_FRACTIONALMETRICS_OFF; import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT; import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGR; import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB; @@ -178,8 +182,8 @@ public static void putAATextInfo(boolean lafCondition, Map hints = (Map) desktopHints; Object aaHint = hints.get(KEY_TEXT_ANTIALIASING); if (aaHint == null - || aaHint == VALUE_TEXT_ANTIALIAS_OFF - || aaHint == VALUE_TEXT_ANTIALIAS_DEFAULT) { + /*|| aaHint == VALUE_TEXT_ANTIALIAS_OFF + || aaHint == VALUE_TEXT_ANTIALIAS_DEFAULT*/) { return; } map.put(KEY_TEXT_ANTIALIASING, aaHint); @@ -565,25 +569,9 @@ public static void drawString(JComponent c, Graphics g, String text, ? null : c.getClientProperty(KEY_TEXT_ANTIALIASING); if (aaHint != null) { - Object oldContrast = null; - Object oldAAValue = g2.getRenderingHint(KEY_TEXT_ANTIALIASING); - if (aaHint != oldAAValue) { - g2.setRenderingHint(KEY_TEXT_ANTIALIASING, aaHint); - } else { - oldAAValue = null; - } - - Object lcdContrastHint = c.getClientProperty( - KEY_TEXT_LCD_CONTRAST); - if (lcdContrastHint != null) { - oldContrast = g2.getRenderingHint(KEY_TEXT_LCD_CONTRAST); - if (lcdContrastHint.equals(oldContrast)) { - oldContrast = null; - } else { - g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST, - lcdContrastHint); - } - } + Object oldAAValue = configureHint(KEY_TEXT_ANTIALIASING, g2, aaHint); + Object oldFMValue = configureHint(KEY_FRACTIONALMETRICS, g2, c); + Object oldContrast = configureHint(KEY_TEXT_LCD_CONTRAST, g2, c); if (needsTextLayout) { TextLayout layout = createTextLayout(c, text, g2.getFont(), @@ -593,12 +581,9 @@ public static void drawString(JComponent c, Graphics g, String text, g2.drawString(text, x, y); } - if (oldAAValue != null) { - g2.setRenderingHint(KEY_TEXT_ANTIALIASING, oldAAValue); - } - if (oldContrast != null) { - g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST, oldContrast); - } + restoreHint(KEY_TEXT_ANTIALIASING, g2, oldAAValue); + restoreHint(KEY_FRACTIONALMETRICS, g2, oldFMValue); + restoreHint(KEY_TEXT_LCD_CONTRAST, g2, oldContrast); return; } @@ -904,34 +889,15 @@ public static float drawChars(JComponent c, Graphics g, Graphics2D g2 = (Graphics2D) g; if (aaHint != null) { - - Object oldContrast = null; - Object oldAAValue = g2.getRenderingHint(KEY_TEXT_ANTIALIASING); - if (aaHint != null && aaHint != oldAAValue) { - g2.setRenderingHint(KEY_TEXT_ANTIALIASING, aaHint); - } else { - oldAAValue = null; - } - - Object lcdContrastHint = c.getClientProperty(KEY_TEXT_LCD_CONTRAST); - if (lcdContrastHint != null) { - oldContrast = g2.getRenderingHint(KEY_TEXT_LCD_CONTRAST); - if (lcdContrastHint.equals(oldContrast)) { - oldContrast = null; - } else { - g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST, - lcdContrastHint); - } - } + Object oldAAValue = configureHint(KEY_TEXT_ANTIALIASING, g2, aaHint); + Object oldFMValue = configureHint(KEY_FRACTIONALMETRICS, g2, c); + Object oldContrast = configureHint(KEY_TEXT_LCD_CONTRAST, g2, c); g2.drawString(new String(data, offset, length), x, y); - if (oldAAValue != null) { - g2.setRenderingHint(KEY_TEXT_ANTIALIASING, oldAAValue); - } - if (oldContrast != null) { - g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST, oldContrast); - } + restoreHint(KEY_TEXT_ANTIALIASING, g2, oldAAValue); + restoreHint(KEY_FRACTIONALMETRICS, g2, oldFMValue); + restoreHint(KEY_TEXT_LCD_CONTRAST, g2, oldContrast); } else { g2.drawString(new String(data, offset, length), x, y); @@ -1044,7 +1010,11 @@ private static float drawStringImpl(JComponent c, Graphics g, } else { layout = new TextLayout(iterator, frc); } - layout.draw(g2d, x, y); + if (Boolean.TRUE.equals(Toolkit.getDefaultToolkit().getDesktopProperty("jb.swing.avoid.text.layout"))) { + g2d.drawString(iterator, x, y); + } else { + layout.draw(g2d, x, y); + } retVal = layout.getAdvance(); } @@ -1248,20 +1218,33 @@ public static FontMetrics getFontMetrics(JComponent c, Font font) { */ private static FontRenderContext getFRCProperty(JComponent c) { if (c != null) { - GraphicsConfiguration gc = c.getGraphicsConfiguration(); AffineTransform tx = (gc == null) ? null : gc.getDefaultTransform(); + // [tav] workaround deadlock on MacOSX until fixed, JRE-226 + if (!FontUtilities.isMacOSX && tx == null && !GraphicsEnvironment.isHeadless()) { + tx = GraphicsEnvironment + .getLocalGraphicsEnvironment() + .getDefaultScreenDevice() + .getDefaultConfiguration() + .getDefaultTransform(); + } Object aaHint = c.getClientProperty(KEY_TEXT_ANTIALIASING); - return getFRCFromCache(tx, aaHint); + if (aaHint == null) aaHint = VALUE_TEXT_ANTIALIAS_DEFAULT; + + Object fmHint = c.getClientProperty(KEY_FRACTIONALMETRICS); + if (fmHint == null) fmHint = VALUE_FRACTIONALMETRICS_DEFAULT; + + return getFRCFromCache(tx, aaHint, fmHint); } return null; } private static final Object APP_CONTEXT_FRC_CACHE_KEY = new Object(); - private static FontRenderContext getFRCFromCache(AffineTransform tx, - Object aaHint) { - if (tx == null && aaHint == null) { + private static FontRenderContext getFRCFromCache(AffineTransform tx, Object aaHint, Object fmHint) { + if ((tx == null || tx.isIdentity()) + && (aaHint == VALUE_TEXT_ANTIALIAS_OFF || aaHint == VALUE_TEXT_ANTIALIAS_DEFAULT) + && (fmHint == VALUE_FRACTIONALMETRICS_OFF || fmHint == VALUE_FRACTIONALMETRICS_DEFAULT)) { return null; } @@ -1270,46 +1253,36 @@ private static FontRenderContext getFRCFromCache(AffineTransform tx, AppContext.getAppContext().get(APP_CONTEXT_FRC_CACHE_KEY); if (cache == null) { - cache = new HashMap<>(); + cache = new ConcurrentHashMap<>(); AppContext.getAppContext().put(APP_CONTEXT_FRC_CACHE_KEY, cache); } Object key = (tx == null) - ? aaHint - : (aaHint == null ? tx : new KeyPair(tx, aaHint)); + ? new KeyArray(aaHint, fmHint) + : new KeyArray(tx, aaHint, fmHint); - FontRenderContext frc = cache.get(key); - if (frc == null) { - aaHint = (aaHint == null) ? VALUE_TEXT_ANTIALIAS_OFF : aaHint; - frc = new FontRenderContext(tx, aaHint, - VALUE_FRACTIONALMETRICS_DEFAULT); - cache.put(key, frc); - } - return frc; + return cache.computeIfAbsent(key, k -> new FontRenderContext(tx, aaHint, fmHint)); } - private static class KeyPair { + private static class KeyArray { + private final Object[] array; - private final Object key1; - private final Object key2; - - public KeyPair(Object key1, Object key2) { - this.key1 = key1; - this.key2 = key2; + KeyArray(Object... array) { + this.array = array; } @Override - public boolean equals(Object obj) { - if (!(obj instanceof KeyPair)) { + public boolean equals(Object object) { + if (!(object instanceof KeyArray)) { return false; } - KeyPair that = (KeyPair) obj; - return this.key1.equals(that.key1) && this.key2.equals(that.key2); + KeyArray that = (KeyArray) object; + return Arrays.equals(that.array, array); } @Override public int hashCode() { - return key1.hashCode() + 37 * key2.hashCode(); + return Arrays.hashCode(array); } } @@ -2337,4 +2310,45 @@ public static boolean isScaleChanged(final String name, var oldTx = oldGC != null ? oldGC.getDefaultTransform() : null; return !Objects.equals(newTx, oldTx); } + + /** + * @param key the key of the hint to be set + * @param g the graphics to configure + * @param c the component that provides a hint value + * @return a value previously set in the given graphics, + * or {@code null} if a hint value is not set + */ + private static Object configureHint(RenderingHints.Key key, Graphics2D g, JComponent c) { + if (c == null) return null; // component is not specified + + return configureHint(key, g, c.getClientProperty(key)); + } + + /** + * @param key the key of the hint to be set + * @param g the graphics to configure + * @param newValue the new value to set + * @return a value previously set in the given graphics, + * or {@code null} if a hint value is not set + */ + private static Object configureHint(RenderingHints.Key key, Graphics2D g, Object newValue) { + if (newValue == null) return null; // new value is not provided + + Object oldValue = g.getRenderingHint(key); + if (newValue.equals(oldValue)) return null; // value is not changed + + g.setRenderingHint(key, newValue); + return oldValue; + } + + /** + * @param key the key of the hint to be set + * @param g the graphics to configure + * @param oldValue the stored value to set + */ + private static void restoreHint(RenderingHints.Key key, Graphics2D g, Object oldValue) { + if (oldValue == null) return; // nothing to restore + + g.setRenderingHint(key, oldValue); + } } diff --git a/src/java.desktop/share/classes/sun/swing/text/GlyphViewAccessor.java b/src/java.desktop/share/classes/sun/swing/text/GlyphViewAccessor.java new file mode 100644 index 000000000000..7b407b5b5c0b --- /dev/null +++ b/src/java.desktop/share/classes/sun/swing/text/GlyphViewAccessor.java @@ -0,0 +1,41 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.swing.text; + +import javax.swing.text.GlyphView; +import java.text.BreakIterator; + +public abstract class GlyphViewAccessor { + private static GlyphViewAccessor accessor; + + public static void setAccessor(GlyphViewAccessor a) { + accessor = a; + } + + public static GlyphViewAccessor getAccessor() { + return accessor; + } + + public abstract int[] calcBreakSpots(GlyphView glyphView, BreakIterator breaker); +} diff --git a/src/java.desktop/share/fonts/DroidSans-Bold.ttf b/src/java.desktop/share/fonts/DroidSans-Bold.ttf new file mode 100644 index 000000000000..d065b64eb186 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSans-Bold.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSans.ttf b/src/java.desktop/share/fonts/DroidSans.ttf new file mode 100644 index 000000000000..ad1efca88aed Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSans.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSansMono.ttf b/src/java.desktop/share/fonts/DroidSansMono.ttf new file mode 100644 index 000000000000..a007071944f7 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSansMono.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSansMonoDotted.ttf b/src/java.desktop/share/fonts/DroidSansMonoDotted.ttf new file mode 100644 index 000000000000..e56a5ca7171d Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSansMonoDotted.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSansMonoSlashed.ttf b/src/java.desktop/share/fonts/DroidSansMonoSlashed.ttf new file mode 100644 index 000000000000..8c44b47edc58 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSansMonoSlashed.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSerif-Bold.ttf b/src/java.desktop/share/fonts/DroidSerif-Bold.ttf new file mode 100644 index 000000000000..838d255888b4 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSerif-Bold.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSerif-BoldItalic.ttf b/src/java.desktop/share/fonts/DroidSerif-BoldItalic.ttf new file mode 100644 index 000000000000..0b1601f61bd7 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSerif-BoldItalic.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSerif-Italic.ttf b/src/java.desktop/share/fonts/DroidSerif-Italic.ttf new file mode 100644 index 000000000000..2972809daaa8 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSerif-Italic.ttf differ diff --git a/src/java.desktop/share/fonts/DroidSerif-Regular.ttf b/src/java.desktop/share/fonts/DroidSerif-Regular.ttf new file mode 100644 index 000000000000..5b4fe815d2d8 Binary files /dev/null and b/src/java.desktop/share/fonts/DroidSerif-Regular.ttf differ diff --git a/src/java.desktop/share/fonts/FiraCode-Bold.ttf b/src/java.desktop/share/fonts/FiraCode-Bold.ttf new file mode 100644 index 000000000000..39265a19da74 Binary files /dev/null and b/src/java.desktop/share/fonts/FiraCode-Bold.ttf differ diff --git a/src/java.desktop/share/fonts/FiraCode-Light.ttf b/src/java.desktop/share/fonts/FiraCode-Light.ttf new file mode 100644 index 000000000000..ed3258e047c6 Binary files /dev/null and b/src/java.desktop/share/fonts/FiraCode-Light.ttf differ diff --git a/src/java.desktop/share/fonts/FiraCode-Medium.ttf b/src/java.desktop/share/fonts/FiraCode-Medium.ttf new file mode 100644 index 000000000000..2cad0184a28c Binary files /dev/null and b/src/java.desktop/share/fonts/FiraCode-Medium.ttf differ diff --git a/src/java.desktop/share/fonts/FiraCode-Regular.ttf b/src/java.desktop/share/fonts/FiraCode-Regular.ttf new file mode 100644 index 000000000000..0d570685b44c Binary files /dev/null and b/src/java.desktop/share/fonts/FiraCode-Regular.ttf differ diff --git a/src/java.desktop/share/fonts/FiraCode-Retina.ttf b/src/java.desktop/share/fonts/FiraCode-Retina.ttf new file mode 100644 index 000000000000..248d36b688a6 Binary files /dev/null and b/src/java.desktop/share/fonts/FiraCode-Retina.ttf differ diff --git a/src/java.desktop/share/fonts/FiraCode_LICENSE.txt b/src/java.desktop/share/fonts/FiraCode_LICENSE.txt new file mode 100644 index 000000000000..5ec3dbcb8ff5 --- /dev/null +++ b/src/java.desktop/share/fonts/FiraCode_LICENSE.txt @@ -0,0 +1,102 @@ +Copyright (c) 2014, Nikita Prokopov http://tonsky.me +with Reserved Font Name Fira Code. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Sans. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Mono. + +Copyright (c) 2014, Telefonica S.A. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/src/java.desktop/share/fonts/Inconsolata.ttf b/src/java.desktop/share/fonts/Inconsolata.ttf new file mode 100644 index 000000000000..a4e12becc81a Binary files /dev/null and b/src/java.desktop/share/fonts/Inconsolata.ttf differ diff --git a/src/java.desktop/share/fonts/Inconsolata_LICENSE.txt b/src/java.desktop/share/fonts/Inconsolata_LICENSE.txt new file mode 100644 index 000000000000..818a10122531 --- /dev/null +++ b/src/java.desktop/share/fonts/Inconsolata_LICENSE.txt @@ -0,0 +1,93 @@ +Copyright (c) 2011, Raph Levien (firstname.lastname@gmail.com), Copyright (c) 2012, Cyreal (cyreal.org) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/src/java.desktop/share/fonts/Inter-Italic.otf b/src/java.desktop/share/fonts/Inter-Italic.otf new file mode 100644 index 000000000000..39d6016be45b Binary files /dev/null and b/src/java.desktop/share/fonts/Inter-Italic.otf differ diff --git a/src/java.desktop/share/fonts/Inter-Regular.otf b/src/java.desktop/share/fonts/Inter-Regular.otf new file mode 100644 index 000000000000..84e6a61c3c0f Binary files /dev/null and b/src/java.desktop/share/fonts/Inter-Regular.otf differ diff --git a/src/java.desktop/share/fonts/Inter-SemiBold.otf b/src/java.desktop/share/fonts/Inter-SemiBold.otf new file mode 100644 index 000000000000..daf4c4413f7b Binary files /dev/null and b/src/java.desktop/share/fonts/Inter-SemiBold.otf differ diff --git a/src/java.desktop/share/fonts/Inter-SemiBoldItalic.otf b/src/java.desktop/share/fonts/Inter-SemiBoldItalic.otf new file mode 100644 index 000000000000..bc58b80d70b2 Binary files /dev/null and b/src/java.desktop/share/fonts/Inter-SemiBoldItalic.otf differ diff --git a/src/java.desktop/share/fonts/Inter_LICENSE.txt b/src/java.desktop/share/fonts/Inter_LICENSE.txt new file mode 100644 index 000000000000..ff80f8c61568 --- /dev/null +++ b/src/java.desktop/share/fonts/Inter_LICENSE.txt @@ -0,0 +1,94 @@ +Copyright (c) 2016-2020 The Inter Project Authors. +"Inter" is trademark of Rasmus Andersson. +https://github.com/rsms/inter + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/java.desktop/share/fonts/JetBrainsMono-Bold.ttf b/src/java.desktop/share/fonts/JetBrainsMono-Bold.ttf new file mode 100644 index 000000000000..8c93043de645 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-Bold.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-BoldItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-BoldItalic.ttf new file mode 100644 index 000000000000..1ddf216d1884 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-BoldItalic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-ExtraBold.ttf b/src/java.desktop/share/fonts/JetBrainsMono-ExtraBold.ttf new file mode 100644 index 000000000000..435d7a726594 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-ExtraBold.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-ExtraBoldItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-ExtraBoldItalic.ttf new file mode 100644 index 000000000000..79e616ebc740 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-ExtraBoldItalic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-ExtraLight.ttf b/src/java.desktop/share/fonts/JetBrainsMono-ExtraLight.ttf new file mode 100644 index 000000000000..c131cbf2c60c Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-ExtraLight.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-ExtraLightItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-ExtraLightItalic.ttf new file mode 100644 index 000000000000..a768985bdfe7 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-ExtraLightItalic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-Italic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-Italic.ttf new file mode 100644 index 000000000000..ccc9d6a5bc15 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-Italic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-Light.ttf b/src/java.desktop/share/fonts/JetBrainsMono-Light.ttf new file mode 100644 index 000000000000..15f15a2a121f Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-Light.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-LightItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-LightItalic.ttf new file mode 100644 index 000000000000..506208f6bb73 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-LightItalic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-Medium.ttf b/src/java.desktop/share/fonts/JetBrainsMono-Medium.ttf new file mode 100644 index 000000000000..97671156df25 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-Medium.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-MediumItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-MediumItalic.ttf new file mode 100644 index 000000000000..415a9e34d350 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-MediumItalic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-Regular.ttf b/src/java.desktop/share/fonts/JetBrainsMono-Regular.ttf new file mode 100644 index 000000000000..dff66cc50702 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-Regular.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-SemiBold.ttf b/src/java.desktop/share/fonts/JetBrainsMono-SemiBold.ttf new file mode 100644 index 000000000000..a70e69bd21aa Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-SemiBold.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-SemiBoldItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-SemiBoldItalic.ttf new file mode 100644 index 000000000000..968602e88d18 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-SemiBoldItalic.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-Thin.ttf b/src/java.desktop/share/fonts/JetBrainsMono-Thin.ttf new file mode 100644 index 000000000000..7dbe2ac6ba53 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-Thin.ttf differ diff --git a/src/java.desktop/share/fonts/JetBrainsMono-ThinItalic.ttf b/src/java.desktop/share/fonts/JetBrainsMono-ThinItalic.ttf new file mode 100644 index 000000000000..c6ad6c219402 Binary files /dev/null and b/src/java.desktop/share/fonts/JetBrainsMono-ThinItalic.ttf differ diff --git a/src/java.desktop/share/fonts/LICENSE.txt b/src/java.desktop/share/fonts/LICENSE.txt new file mode 100644 index 000000000000..a4a4b177b7ef --- /dev/null +++ b/src/java.desktop/share/fonts/LICENSE.txt @@ -0,0 +1,13 @@ +Copyright 2000-2016 JetBrains s.r.o. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/src/java.desktop/share/fonts/Roboto-Light.ttf b/src/java.desktop/share/fonts/Roboto-Light.ttf new file mode 100644 index 000000000000..664e1b2f9dba Binary files /dev/null and b/src/java.desktop/share/fonts/Roboto-Light.ttf differ diff --git a/src/java.desktop/share/fonts/Roboto-Thin.ttf b/src/java.desktop/share/fonts/Roboto-Thin.ttf new file mode 100644 index 000000000000..d262d1446fbd Binary files /dev/null and b/src/java.desktop/share/fonts/Roboto-Thin.ttf differ diff --git a/src/java.desktop/share/fonts/SourceCodePro-Bold.ttf b/src/java.desktop/share/fonts/SourceCodePro-Bold.ttf new file mode 100644 index 000000000000..e0c576f1b023 Binary files /dev/null and b/src/java.desktop/share/fonts/SourceCodePro-Bold.ttf differ diff --git a/src/java.desktop/share/fonts/SourceCodePro-BoldIt.ttf b/src/java.desktop/share/fonts/SourceCodePro-BoldIt.ttf new file mode 100644 index 000000000000..9a4010d8bfaf Binary files /dev/null and b/src/java.desktop/share/fonts/SourceCodePro-BoldIt.ttf differ diff --git a/src/java.desktop/share/fonts/SourceCodePro-It.ttf b/src/java.desktop/share/fonts/SourceCodePro-It.ttf new file mode 100644 index 000000000000..e7f1541e7eb0 Binary files /dev/null and b/src/java.desktop/share/fonts/SourceCodePro-It.ttf differ diff --git a/src/java.desktop/share/fonts/SourceCodePro-Regular.ttf b/src/java.desktop/share/fonts/SourceCodePro-Regular.ttf new file mode 100644 index 000000000000..437f47280b4f Binary files /dev/null and b/src/java.desktop/share/fonts/SourceCodePro-Regular.ttf differ diff --git a/src/java.desktop/share/fonts/SourceCodePro_LICENSE.txt b/src/java.desktop/share/fonts/SourceCodePro_LICENSE.txt new file mode 100644 index 000000000000..1177330426de --- /dev/null +++ b/src/java.desktop/share/fonts/SourceCodePro_LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/java.desktop/share/fonts/font.conf b/src/java.desktop/share/fonts/font.conf new file mode 100644 index 000000000000..adbc1ca84944 --- /dev/null +++ b/src/java.desktop/share/fonts/font.conf @@ -0,0 +1,22 @@ + + + + + + Consolas + + + Noto Sans Mono CJK JP + + + 12 + + + medium + + + hintfull + + + + diff --git a/src/java.desktop/share/fonts/fonts.dir b/src/java.desktop/share/fonts/fonts.dir new file mode 100644 index 000000000000..f3087ca43147 --- /dev/null +++ b/src/java.desktop/share/fonts/fonts.dir @@ -0,0 +1,450 @@ +449 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-adobe-standard +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-ascii-0 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso10646-1 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-1 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-10 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-13 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-15 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-16 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-2 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-3 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-4 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-5 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-iso8859-9 +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-koi8-e +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-koi8-r +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-koi8-ru +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-koi8-u +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-koi8-uni +DroidSans-Bold.ttf -misc-droid sans-bold-r-normal--0-0-0-0-p-0-microsoft-cp1252 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-adobe-standard +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-ascii-0 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso10646-1 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-1 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-10 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-13 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-15 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-16 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-2 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-3 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-4 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-5 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-iso8859-9 +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-koi8-e +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-koi8-r +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-koi8-ru +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-koi8-u +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-koi8-uni +DroidSans.ttf -misc-droid sans-medium-r-normal--0-0-0-0-p-0-microsoft-cp1252 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-adobe-standard +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-ascii-0 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso10646-1 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-10 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-13 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-15 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-16 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-2 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-3 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-4 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-5 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-9 +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-koi8-e +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-koi8-r +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-koi8-ru +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-koi8-u +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-koi8-uni +DroidSansMono.ttf -misc-droid sans mono-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-adobe-standard +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-ascii-0 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso10646-1 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-1 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-10 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-13 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-15 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-2 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-3 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-4 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-5 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-iso8859-9 +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-koi8-e +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-koi8-r +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-koi8-ru +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-koi8-u +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-koi8-uni +DroidSansMonoDotted.ttf -misc-droid sans mono dotted-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-adobe-standard +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-ascii-0 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso10646-1 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-1 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-10 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-13 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-15 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-2 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-3 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-4 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-5 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-iso8859-9 +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-koi8-e +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-koi8-r +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-koi8-ru +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-koi8-u +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-koi8-uni +DroidSansMonoSlashed.ttf -misc-droid sans mono slashed-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-adobe-standard +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-ascii-0 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso10646-1 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-1 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-10 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-13 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-15 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-16 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-2 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-3 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-4 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-5 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-iso8859-9 +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-koi8-e +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-koi8-r +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-koi8-ru +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-koi8-u +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-koi8-uni +DroidSerif-Bold.ttf -misc-droid serif-bold-r-normal--0-0-0-0-p-0-microsoft-cp1252 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-adobe-standard +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-ascii-0 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso10646-1 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-1 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-10 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-13 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-15 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-16 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-2 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-3 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-4 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-5 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-iso8859-9 +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-koi8-e +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-koi8-r +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-koi8-ru +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-koi8-u +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-koi8-uni +DroidSerif-BoldItalic.ttf -misc-droid serif-bold-i-normal--0-0-0-0-p-0-microsoft-cp1252 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-adobe-standard +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-ascii-0 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso10646-1 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-1 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-10 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-13 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-15 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-16 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-2 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-3 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-4 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-5 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-iso8859-9 +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-koi8-e +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-koi8-r +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-koi8-ru +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-koi8-u +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-koi8-uni +DroidSerif-Italic.ttf -misc-droid serif-medium-i-normal--0-0-0-0-p-0-microsoft-cp1252 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-adobe-standard +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-ascii-0 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso10646-1 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-1 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-10 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-13 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-15 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-16 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-2 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-3 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-4 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-5 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-iso8859-9 +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-koi8-e +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-koi8-r +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-koi8-ru +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-koi8-u +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-koi8-uni +DroidSerif-Regular.ttf -misc-droid serif-medium-r-normal--0-0-0-0-p-0-microsoft-cp1252 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-ascii-0 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-ibm-cp850 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-ibm-cp852 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-ibm-cp866 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso10646-1 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-1 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-10 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-13 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-15 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-16 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-2 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-3 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-4 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-5 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-iso8859-9 +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-koi8-e +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-koi8-r +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-koi8-ru +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-koi8-u +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-koi8-uni +FiraCode-Bold.ttf -misc-fira code-bold-r-normal--0-0-0-0-m-0-microsoft-cp1252 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-ascii-0 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-ibm-cp850 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-ibm-cp852 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-ibm-cp866 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso10646-1 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-1 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-10 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-13 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-15 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-16 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-2 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-3 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-4 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-5 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-iso8859-9 +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-koi8-e +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-koi8-r +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-koi8-ru +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-koi8-u +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-koi8-uni +FiraCode-Light.ttf -misc-fira code light-light-r-normal--0-0-0-0-m-0-microsoft-cp1252 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-ascii-0 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-ibm-cp850 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-ibm-cp852 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-ibm-cp866 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso10646-1 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-1 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-10 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-13 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-15 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-16 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-2 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-3 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-4 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-5 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-iso8859-9 +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-koi8-e +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-koi8-r +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-koi8-ru +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-koi8-u +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-koi8-uni +FiraCode-Medium.ttf -misc-fira code medium-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-ascii-0 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-ibm-cp850 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-ibm-cp852 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-ibm-cp866 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso10646-1 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-1 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-10 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-13 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-15 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-16 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-2 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-3 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-4 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-5 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-iso8859-9 +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-koi8-e +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-koi8-r +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-koi8-ru +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-koi8-u +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-koi8-uni +FiraCode-Regular.ttf -misc-fira code-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-ascii-0 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-ibm-cp850 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-ibm-cp852 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-ibm-cp866 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso10646-1 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-1 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-10 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-13 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-15 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-16 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-2 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-3 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-4 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-5 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-iso8859-9 +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-koi8-e +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-koi8-r +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-koi8-ru +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-koi8-u +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-koi8-uni +FiraCode-Retina.ttf -misc-fira code retina-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 +Inconsolata.ttf -misc-inconsolata-medium-r-normal--0-0-0-0-c-0-ascii-0 +Inconsolata.ttf -misc-inconsolata-medium-r-normal--0-0-0-0-c-0-iso10646-1 +Inconsolata.ttf -misc-inconsolata-medium-r-normal--0-0-0-0-c-0-iso8859-1 +Inconsolata.ttf -misc-inconsolata-medium-r-normal--0-0-0-0-c-0-iso8859-15 +Inconsolata.ttf -misc-inconsolata-medium-r-normal--0-0-0-0-c-0-iso8859-2 +Inconsolata.ttf -misc-inconsolata-medium-r-normal--0-0-0-0-c-0-iso8859-9 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-ascii-0 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso10646-1 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-1 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-10 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-13 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-15 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-16 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-2 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-3 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-4 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-iso8859-9 +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-koi8-r +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-koi8-u +JetBrainsMono-Bold-Italic.ttf -misc-jetbrains mono-bold-i-normal--0-0-0-0-p-0-microsoft-cp1252 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-ascii-0 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso10646-1 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-1 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-10 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-13 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-15 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-16 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-2 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-3 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-4 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-iso8859-9 +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-koi8-r +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-koi8-u +JetBrainsMono-Bold.ttf -misc-jetbrains mono-bold-r-normal--0-0-0-0-p-0-microsoft-cp1252 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-ascii-0 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso10646-1 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-1 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-10 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-13 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-15 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-16 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-2 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-3 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-4 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-iso8859-9 +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-koi8-r +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-koi8-u +JetBrainsMono-Italic.ttf -misc-jetbrains mono-medium-i-normal--0-0-0-0-p-0-microsoft-cp1252 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-ascii-0 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso10646-1 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-1 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-10 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-13 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-15 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-16 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-2 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-3 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-4 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-iso8859-9 +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-koi8-r +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-koi8-u +JetBrainsMono-Regular.ttf -misc-jetbrains mono-medium-r-normal--0-0-0-0-p-0-microsoft-cp1252 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-adobe-standard +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-ascii-0 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso10646-1 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-1 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-10 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-13 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-15 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-16 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-2 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-3 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-4 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-5 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-iso8859-9 +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-koi8-e +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-koi8-r +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-koi8-ru +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-koi8-u +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-koi8-uni +Roboto-Light.ttf -misc-roboto light-light-r-normal--0-0-0-0-p-0-microsoft-cp1252 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-adobe-standard +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-ascii-0 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso10646-1 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-1 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-10 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-13 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-15 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-2 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-3 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-4 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-5 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-iso8859-9 +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-koi8-e +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-koi8-r +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-koi8-ru +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-koi8-u +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-koi8-uni +Roboto-Thin.ttf -misc-roboto thin-light-r-normal--0-0-0-0-p-0-microsoft-cp1252 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-adobe-standard +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-ascii-0 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-ibm-cp437 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-ibm-cp850 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-ibm-cp852 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-ibm-cp866 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso10646-1 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-1 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-10 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-13 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-15 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-16 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-2 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-3 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-4 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-5 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-iso8859-9 +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-koi8-e +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-koi8-r +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-koi8-ru +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-koi8-u +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-koi8-uni +SourceCodePro-Bold.ttf -adobe-source code pro-bold-r-normal--0-0-0-0-m-0-microsoft-cp1252 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-adobe-standard +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-ascii-0 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-ibm-cp850 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-ibm-cp852 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso10646-1 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-1 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-10 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-13 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-15 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-16 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-2 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-3 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-4 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-iso8859-9 +SourceCodePro-BoldIt.ttf -adobe-source code pro-bold-i-normal--0-0-0-0-m-0-microsoft-cp1252 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-adobe-standard +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-ascii-0 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-ibm-cp850 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-ibm-cp852 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso10646-1 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-1 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-10 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-13 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-15 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-16 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-2 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-3 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-4 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-iso8859-9 +SourceCodePro-It.ttf -adobe-source code pro-medium-i-normal--0-0-0-0-m-0-microsoft-cp1252 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-adobe-standard +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-ascii-0 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-ibm-cp437 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-ibm-cp850 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-ibm-cp852 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-ibm-cp866 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso10646-1 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-1 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-10 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-13 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-15 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-16 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-2 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-3 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-4 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-5 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-iso8859-9 +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-koi8-e +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-koi8-r +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-koi8-ru +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-koi8-u +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-koi8-uni +SourceCodePro-Regular.ttf -adobe-source code pro-medium-r-normal--0-0-0-0-m-0-microsoft-cp1252 diff --git a/src/java.desktop/share/native/common/font/AccelGlyphCache.h b/src/java.desktop/share/native/common/font/AccelGlyphCache.h index 05006aeea71a..ffcddb6b0b5f 100644 --- a/src/java.desktop/share/native/common/font/AccelGlyphCache.h +++ b/src/java.desktop/share/native/common/font/AccelGlyphCache.h @@ -57,6 +57,9 @@ struct _CacheCellInfo { // REMIND: find better name? // next cell info in the glyph's cell list (next Glyph Cache Info) CacheCellInfo *nextGCI; + // Glyph subimage ID, used to distinguish between different images + // Only makes sense when subpixel resolution is enabled for the glyph + jint glyphSubimage; jint timesRendered; jint x; jint y; diff --git a/src/java.desktop/share/native/common/font/fontscalerdefs.h b/src/java.desktop/share/native/common/font/fontscalerdefs.h index 4b3914664034..cd83607aa21b 100644 --- a/src/java.desktop/share/native/common/font/fontscalerdefs.h +++ b/src/java.desktop/share/native/common/font/fontscalerdefs.h @@ -27,6 +27,7 @@ #define FontScalerDefsIncludesDefined #include "AccelGlyphCache.h" +#include "sun_font_StrikeCache.h" #ifdef __cplusplus extern "C" { @@ -74,7 +75,10 @@ typedef struct GlyphInfo { UInt16 width; UInt16 height; UInt16 rowBytes; - UInt8 managed; + UInt8 managed; + UInt8 format; // sun_font_StrikeCache_PIXEL_FORMAT_* + UInt8 subpixelResolutionX; + UInt8 subpixelResolutionY; float topLeftX; float topLeftY; void *cellInfo; diff --git a/src/java.desktop/share/native/common/font/sunfontids.h b/src/java.desktop/share/native/common/font/sunfontids.h index 5f764e241cb9..4c00a795abd2 100644 --- a/src/java.desktop/share/native/common/font/sunfontids.h +++ b/src/java.desktop/share/native/common/font/sunfontids.h @@ -80,6 +80,12 @@ typedef struct FontManagerNativeIDs { /* sun/font/GlyphList */ jfieldID glyphListX, glyphListY, glyphListLen, glyphImages, glyphListUsePos, glyphListPos, lcdRGBOrder, lcdSubPixPos; + + /* sun/font/GlyphRenderData */ + jfieldID glyphRenderDataOutline, glyphRenderDataColorLayers; + jmethodID glyphRenderDataSetColorLayersListMID, + glyphRenderDataAddColorLayerMID, glyphRenderDataAddColorLayerFGMID, + glyphRenderDataAddBitmapMID; } FontManagerNativeIDs; extern FontManagerNativeIDs sunFontIDs; diff --git a/src/java.desktop/share/native/common/java2d/opengl/OGLContext.c b/src/java.desktop/share/native/common/java2d/opengl/OGLContext.c index 89c3af32b1dd..21606923023e 100644 --- a/src/java.desktop/share/native/common/java2d/opengl/OGLContext.c +++ b/src/java.desktop/share/native/common/java2d/opengl/OGLContext.c @@ -1073,4 +1073,96 @@ JNIEXPORT jstring JNICALL Java_sun_java2d_opengl_OGLContext_getOGLIdString return ret; } +static int JVM_GetIntProperty(JNIEnv *env, const char* name, int defaultValue) { + static jclass systemCls = NULL; + if (systemCls == NULL) { + systemCls = (*env)->FindClass(env, "java/lang/System"); + if (systemCls == NULL) { + return defaultValue; + } + } + + static jmethodID mid = NULL; + + if (mid == NULL) { + mid = (*env)->GetStaticMethodID(env, systemCls, "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;"); + if (mid == NULL) { + return defaultValue; + } + } + + jstring jName = (*env)->NewStringUTF(env, name); + if (jName == NULL) { + return defaultValue; + } + + int result = defaultValue; + jstring jvalue = (*env)->CallStaticObjectMethod(env, systemCls, mid, jName); + if (jvalue != NULL) { + const char *utf8string = (*env)->GetStringUTFChars(env, jvalue, NULL); + if (utf8string != NULL) { + const int parsedVal = atoi(utf8string); + if (parsedVal > 0) { + result = parsedVal; + } + } + (*env)->ReleaseStringUTFChars(env, jvalue, utf8string); + } + (*env)->DeleteLocalRef(env, jName); + return result; +} + +void OGLContext_InitGrayRenderHints(JNIEnv *env, OGLContext *oglc) { + static GrayRenderHints *grayRenderHints = NULL; + static GrayRenderHints defaultRenderHints[] = { + // hints for "use font smoothing" option + // disabled + {1.666f, 0.333f, 1.0f, 1.25f}, + // enabled + {1.666f, 0.333f, 0.454f, 1.4f} + }; + + if (grayRenderHints == NULL) { + + // read from VM-properties + int val = JVM_GetIntProperty(env, "awt.font.nosm.light_gamma", 0); + if (val > 0) { + defaultRenderHints[0].light_gamma = val / 1000.0; + } + val = JVM_GetIntProperty(env, "awt.font.nosm.dark_gamma", 0); + if (val > 0) { + defaultRenderHints[0].dark_gamma = val / 1000.0; + } + val = JVM_GetIntProperty(env, "awt.font.nosm.light_exp", 0); + if (val > 0) { + defaultRenderHints[0].light_exp = val / 1000.0; + } + val = JVM_GetIntProperty(env, "awt.font.nosm.dark_exp", 0); + if (val > 0) { + defaultRenderHints[0].dark_exp = val / 1000.0; + } + + val = JVM_GetIntProperty(env, "awt.font.sm.light_gamma", 0); + if (val > 0) { + defaultRenderHints[1].light_gamma = val / 1000.0; + } + val = JVM_GetIntProperty(env, "awt.font.sm.dark_gamma", 0); + if (val > 0) { + defaultRenderHints[1].dark_gamma = val / 1000.0; + } + val = JVM_GetIntProperty(env, "awt.font.sm.light_exp", 0); + if (val > 0) { + defaultRenderHints[1].light_exp = val / 1000.0; + } + val = JVM_GetIntProperty(env, "awt.font.sm.dark_exp", 0); + if (val > 0) { + defaultRenderHints[1].dark_exp = val / 1000.0; + } + + grayRenderHints = defaultRenderHints; + } + oglc->grayRenderHints = grayRenderHints; +} + #endif /* !HEADLESS */ diff --git a/src/java.desktop/share/native/common/java2d/opengl/OGLContext.h b/src/java.desktop/share/native/common/java2d/opengl/OGLContext.h index fbd26f87e751..49967e870598 100644 --- a/src/java.desktop/share/native/common/java2d/opengl/OGLContext.h +++ b/src/java.desktop/share/native/common/java2d/opengl/OGLContext.h @@ -52,6 +52,16 @@ typedef struct { GLenum dst; } OGLBlendRule; +/** + * Use this hints if gray gamma shader is enabled + */ +typedef struct { + float light_gamma; // brightness of light text + float dark_gamma; // brightness of dark text + float light_exp; // thickness of light text + float dark_exp; // thickness of dark text +} GrayRenderHints; + /** * The OGLContext structure contains cached state relevant to the native * OpenGL context stored within the native ctxInfo field. Each Java-level @@ -85,6 +95,7 @@ typedef struct { GLuint blitTextureID; GLint textureFunction; jboolean vertexCacheEnabled; + GrayRenderHints *grayRenderHints; } OGLContext; /** @@ -221,5 +232,6 @@ void OGLContext_GetExtensionInfo(JNIEnv *env, jint *caps); jboolean OGLContext_IsVersionSupported(const unsigned char *versionstr); GLhandleARB OGLContext_CreateFragmentProgram(const char *fragmentShaderSource); +void OGLContext_InitGrayRenderHints(JNIEnv *env, OGLContext *oglc); #endif /* OGLContext_h_Included */ diff --git a/src/java.desktop/share/native/common/java2d/opengl/OGLRenderQueue.c b/src/java.desktop/share/native/common/java2d/opengl/OGLRenderQueue.c index 6328707a3e2a..8bb13de3fc7f 100644 --- a/src/java.desktop/share/native/common/java2d/opengl/OGLRenderQueue.c +++ b/src/java.desktop/share/native/common/java2d/opengl/OGLRenderQueue.c @@ -83,6 +83,8 @@ Java_sun_java2d_opengl_OGLRenderQueue_flushBuffer return; } + if (limit == 0) return; + INIT_PREVIOUS_OP(); end = b + limit; diff --git a/src/java.desktop/share/native/common/java2d/opengl/OGLTextRenderer.c b/src/java.desktop/share/native/common/java2d/opengl/OGLTextRenderer.c index 19389066f872..cdf8b9f5af74 100644 --- a/src/java.desktop/share/native/common/java2d/opengl/OGLTextRenderer.c +++ b/src/java.desktop/share/native/common/java2d/opengl/OGLTextRenderer.c @@ -68,6 +68,13 @@ typedef enum { } GlyphMode; static GlyphMode glyphMode = MODE_NOT_INITED; +/** + * Current blending modes saved in OGLTR_EnableGrayGlyphModeState and restored in + * OGLTR_DisableGlyphModeState + */ +static GLint currentBlendSrc; +static GLint currentBlendDst; + /** * There are two separate glyph caches: for AA and for LCD. * Once one of them is initialized as either GRAY or LCD, it @@ -86,6 +93,11 @@ static GlyphCacheInfo *glyphCacheAA = NULL; */ static GLhandleARB lcdTextProgram = 0; +/** + * The handle to the Gray text fragment program object. + */ +static GLhandleARB grayTextProgram = 0; + /** * This value tracks the previous LCD contrast setting, so if the contrast * value hasn't changed since the last time the gamma uniforms were @@ -218,7 +230,7 @@ OGLTR_InitGlyphCache(jboolean lcdCache) * associated with the given OGLContext. */ static void -OGLTR_AddToGlyphCache(GlyphInfo *glyph, GLenum pixelFormat) +OGLTR_AddToGlyphCache(GlyphInfo *glyph, GLenum pixelFormat, jint subimage) { CacheCellInfo *ccinfo; GlyphCacheInfo *gcinfo; @@ -235,15 +247,16 @@ OGLTR_AddToGlyphCache(GlyphInfo *glyph, GLenum pixelFormat) return; } - AccelGlyphCache_AddGlyph(gcinfo, glyph); - ccinfo = (CacheCellInfo *) glyph->cellInfo; + ccinfo = AccelGlyphCache_AddGlyph(gcinfo, glyph); if (ccinfo != NULL) { + ccinfo->glyphSubimage = subimage; // store glyph image in texture cell j2d_glTexSubImage2D(GL_TEXTURE_2D, 0, ccinfo->x, ccinfo->y, glyph->width, glyph->height, - pixelFormat, GL_UNSIGNED_BYTE, glyph->image); + pixelFormat, GL_UNSIGNED_BYTE, glyph->image + + (glyph->rowBytes * glyph->height) * subimage); } } @@ -299,6 +312,38 @@ static const char *lcdTextShaderSource = " gl_FragColor = vec4(pow(result.rgb, invgamma), 1.0);" "}"; +static const char *grayGammaTextShaderSource = + "uniform vec4 src_adj;" + "uniform sampler2D glyph_tex;" + "uniform float inv_light_gamma;" + "uniform float inv_dark_gamma;" + "uniform float inv_light_exp;" + "uniform float inv_dark_exp;" + "void main(void)" + "{" + "float a = src_adj.a;" + "vec3 col = src_adj.rgb;" + // Convert from ARGB_PRE + "if (a > 0.0) {" + "col = col/a;" + "}" + // calculate brightness of the fragment + "float b = dot(col, vec3(1.0/3.0, 1.0/3.0, 1.0/3.0))*a;" + + // adjust fragment coverage + "float frag_cov = float(texture2D(glyph_tex, gl_TexCoord[0].st));" + "float exp = mix(inv_dark_exp, inv_light_exp, b);" + "frag_cov = pow(frag_cov, exp);" + + // adjust fragment color and alpha for alpha < 1.0 + "if (a < 1.0) {" + "float g = mix(inv_dark_gamma, inv_light_gamma,b);" + "col = pow(col, vec3(g));" + "a = pow(a, exp);" + "}" + "gl_FragColor = vec4(col, a*frag_cov);" + "}"; + /** * Compiles and links the LCD text shader program. If successful, this * function returns a handle to the newly created shader program; otherwise @@ -334,6 +379,52 @@ OGLTR_CreateLCDTextProgram() return lcdTextProgram; } +/** + * Compiles and links the LCD text shader program. If successful, this + * function returns a handle to the newly created shader program; otherwise + * returns 0. + */ +static GLhandleARB +OGLTR_CreateGrayTextProgram(OGLContext *oglc, jboolean useFontSmoothing) +{ + GLhandleARB grayTextProgram; + GLint loc; + + J2dTraceLn(J2D_TRACE_INFO, "OGLTR_CreateGrayTextProgram"); + + grayTextProgram = OGLContext_CreateFragmentProgram(grayGammaTextShaderSource); + + if (grayTextProgram == 0) { + J2dRlsTraceLn(J2D_TRACE_ERROR, + "OGLTR_CreateGrayTextProgram: error creating program"); + return 0; + } + + // "use" the program object temporarily so that we can set the uniforms + j2d_glUseProgramObjectARB(grayTextProgram); + + GrayRenderHints *hints = &(oglc->grayRenderHints[useFontSmoothing]); + J2dTraceLn5(J2D_TRACE_INFO, + "OGLTR_CreateGrayTextProgram: useFontSmoothing=%d " + "light_gamma=%f dark_gamma=%f light_exp=%f dark_exp=%f", + useFontSmoothing, hints->light_gamma, hints->dark_gamma, + hints->light_exp, hints->dark_exp); + + loc = j2d_glGetUniformLocationARB(grayTextProgram, "inv_light_gamma"); + j2d_glUniform1fARB(loc, hints->light_gamma); + loc = j2d_glGetUniformLocationARB(grayTextProgram, "inv_dark_gamma"); + j2d_glUniform1fARB(loc, hints->dark_gamma); + loc = j2d_glGetUniformLocationARB(grayTextProgram, "inv_light_exp"); + j2d_glUniform1fARB(loc, hints->light_exp); + loc = j2d_glGetUniformLocationARB(grayTextProgram, "inv_dark_exp"); + j2d_glUniform1fARB(loc, hints->dark_exp); + + // "unuse" the program object; it will be re-bound later as needed + j2d_glUseProgramObjectARB(0); + + return grayTextProgram; +} + /** * (Re)Initializes the gamma related uniforms. * @@ -403,6 +494,41 @@ OGLTR_UpdateLCDTextColor(jint contrast) return JNI_TRUE; } +/** + * Updates the current source color ("src_adj") of the Gray text shader + * program. + */ +static jboolean +OGLTR_UpdateGrayTextColor() +{ + GLfloat radj, gadj, badj, aadj; + GLfloat clr[4]; + GLint loc; + + /* + * Note: Ideally we would update the "src_adj" uniform parameter only + * when there is a change in the source color. Fortunately, the cost + * of querying the current OpenGL color state and updating the uniform + * value is quite small, and in the common case we only need to do this + * once per GlyphList, so we gain little from trying to optimize too + * eagerly here. + */ + + // get the current OpenGL primary color state + j2d_glGetFloatv(GL_CURRENT_COLOR, clr); + + radj = (GLfloat)clr[0]; + gadj = (GLfloat)clr[1]; + badj = (GLfloat)clr[2]; + aadj = (GLfloat)clr[3]; + + // update the "src_adj" parameter of the shader program with this value + loc = j2d_glGetUniformLocationARB(grayTextProgram, "src_adj"); + j2d_glUniform4fARB(loc, radj, gadj, badj, aadj); + + return JNI_TRUE; +} + /** * Enables the LCD text shader and updates any related state, such as the * gamma lookup table textures. @@ -464,6 +590,39 @@ OGLTR_EnableLCDGlyphModeState(GLuint glyphTextureID, return JNI_TRUE; } +/** + * Enables the GrayScale text shader and updates any related states + */ +static jboolean +OGLTR_EnableGrayGlyphModeState(OGLContext *oglc, GLuint glyphTextureID, jboolean useFontSmoothing) +{ + // bind the texture containing glyph data to texture unit 0 + j2d_glActiveTextureARB(GL_TEXTURE0_ARB); + j2d_glBindTexture(GL_TEXTURE_2D, glyphTextureID); + j2d_glEnable(GL_TEXTURE_2D); + j2d_glEnable(GL_BLEND); + j2d_glGetIntegerv(GL_BLEND_SRC_ALPHA, ¤tBlendSrc); + j2d_glGetIntegerv(GL_BLEND_DST_ALPHA, ¤tBlendDst); + + j2d_glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // create the Gray text shader, if necessary + if (grayTextProgram == 0) { + grayTextProgram = OGLTR_CreateGrayTextProgram(oglc, useFontSmoothing); + if (grayTextProgram == 0) { + return JNI_FALSE; + } + } + + // enable the Gray text shader + j2d_glUseProgramObjectARB(grayTextProgram); + + // update the current color settings + if (!OGLTR_UpdateGrayTextColor()) { + return JNI_FALSE; + } + return JNI_TRUE; +} void OGLTR_EnableGlyphVertexCache(OGLContext *oglc) @@ -487,7 +646,7 @@ OGLTR_EnableGlyphVertexCache(OGLContext *oglc) // for grayscale/monochrome text, the current OpenGL source color // is modulated with the glyph image as part of the texture // application stage, so we use GL_MODULATE here - OGLC_UPDATE_TEXTURE_FUNCTION(oglc, GL_MODULATE); + //OGLC_UPDATE_TEXTURE_FUNCTION(oglc, GL_MODULATE); } void @@ -527,9 +686,18 @@ OGLTR_DisableGlyphModeState() j2d_glDisable(GL_TEXTURE_2D); break; + case MODE_USE_CACHE_GRAY: + OGLVertexCache_FlushVertexCache(); + j2d_glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + j2d_glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + j2d_glUseProgramObjectARB(0); + j2d_glActiveTextureARB(GL_TEXTURE0_ARB); + j2d_glDisable(GL_TEXTURE_2D); + j2d_glBlendFunc(currentBlendSrc, currentBlendDst); + break; case MODE_NO_CACHE_COLOR: case MODE_NO_CACHE_GRAY: - case MODE_USE_CACHE_GRAY: + /* FALLTHROUGH */ case MODE_NOT_INITED: default: break; @@ -537,8 +705,8 @@ OGLTR_DisableGlyphModeState() } static jboolean -OGLTR_DrawGrayscaleGlyphViaCache(OGLContext *oglc, - GlyphInfo *ginfo, jint x, jint y) +OGLTR_DrawGrayscaleGlyphViaCache(OGLContext *oglc, GlyphInfo *ginfo, + jint x, jint y, jboolean useFontSmoothing, jint subimage) { CacheCellInfo *cell; jfloat x1, y1, x2, y2; @@ -546,20 +714,54 @@ OGLTR_DrawGrayscaleGlyphViaCache(OGLContext *oglc, if (glyphMode != MODE_USE_CACHE_GRAY) { OGLTR_DisableGlyphModeState(); CHECK_PREVIOUS_OP(OGL_STATE_GLYPH_OP); + j2d_glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + if (glyphCacheAA == NULL) { + if (!OGLTR_InitGlyphCache(JNI_FALSE)) { + return JNI_FALSE; + } + } + + if (!OGLTR_EnableGrayGlyphModeState(oglc, glyphCacheAA->cacheID, useFontSmoothing)) + { + return JNI_FALSE; + } + glyphMode = MODE_USE_CACHE_GRAY; } - if (ginfo->cellInfo == NULL) { - // attempt to add glyph to accelerated glyph cache - OGLTR_AddToGlyphCache(ginfo, GL_LUMINANCE); + int rx = ginfo->subpixelResolutionX; + int ry = ginfo->subpixelResolutionY; + if (subimage == 0 && ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0)) { + // Subpixel rendering disabled, there must be only one cell info + cell = (CacheCellInfo *) (ginfo->cellInfo); + } else { + // Subpixel rendering enabled, find subimage in cell list + cell = NULL; + CacheCellInfo *c = (CacheCellInfo *) (ginfo->cellInfo); + while (c != NULL) { + if (c->glyphSubimage == subimage) { + cell = c; + break; + } + c = c->nextGCI; + } + } - if (ginfo->cellInfo == NULL) { + if (cell == NULL) { + // attempt to add glyph to accelerated glyph cache + OGLTR_AddToGlyphCache(ginfo, GL_LUMINANCE, subimage); + // Our image, added to cache will be the first, so we take it. + // If for whatever reason we failed to add it to our cache, + // take first cell anyway, it's still better to render glyph + // image with wrong subpixel offset than render nothing. + cell = (CacheCellInfo *) (ginfo->cellInfo); + + if (cell == NULL) { // we'll just no-op in the rare case that the cell is NULL return JNI_TRUE; } } - cell = (CacheCellInfo *) (ginfo->cellInfo); cell->timesRendered++; x1 = (jfloat)x; @@ -757,7 +959,7 @@ OGLTR_DrawLCDGlyphViaCache(OGLContext *oglc, OGLSDOps *dstOps, j2d_glActiveTextureARB(GL_TEXTURE0_ARB); // attempt to add glyph to accelerated glyph cache - OGLTR_AddToGlyphCache(ginfo, rgbOrder ? GL_RGB : GL_BGR); + OGLTR_AddToGlyphCache(ginfo, rgbOrder ? GL_RGB : GL_BGR, 0); if (ginfo->cellInfo == NULL) { // we'll just no-op in the rare case that the cell is NULL @@ -824,7 +1026,8 @@ OGLTR_DrawLCDGlyphViaCache(OGLContext *oglc, OGLSDOps *dstOps, static jboolean OGLTR_DrawGrayscaleGlyphNoCache(OGLContext *oglc, - GlyphInfo *ginfo, jint x, jint y) + GlyphInfo *ginfo, jint x, jint y, + jint subimage) { jint tw, th; jint sx, sy, sw, sh; @@ -851,7 +1054,8 @@ OGLTR_DrawGrayscaleGlyphNoCache(OGLContext *oglc, OGLVertexCache_AddMaskQuad(oglc, sx, sy, x, y, sw, sh, - w, ginfo->image); + w, ginfo->image + + (ginfo->rowBytes * ginfo->height) * subimage); } } @@ -1006,10 +1210,14 @@ OGLTR_DrawColorGlyphNoCache(OGLContext *oglc, GlyphInfo *ginfo, jint x, jint y) return JNI_TRUE; } +// Control subpixel positioning for macOS 13+ grayscale glyphs +#ifdef MACOSX +extern int lcdSubPixelPosSupported; +extern int useFontSmoothing; +#endif -// see DrawGlyphList.c for more on this macro... -#define FLOOR_ASSIGN(l, r) \ - if ((r)<0) (l) = ((int)floor(r)); else (l) = ((int)(r)) +#define ADJUST_SUBPIXEL_GLYPH_POSITION(coord, res) \ + if ((res) > 1) (coord) += 0.5f / ((float)(res)) - 0.5f void OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps, @@ -1020,6 +1228,7 @@ OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps, { int glyphCounter; GLuint dstTextureID = 0; + jboolean fontSmoothing = JNI_FALSE; J2dTraceLn(J2D_TRACE_INFO, "OGLTR_DrawGlyphList"); @@ -1048,22 +1257,27 @@ OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps, // * Means to prevent read-after-write problem. // At the moment, a GL_NV_texture_barrier extension is used // to achieve this. +#ifdef MACOSX if (OGLC_IS_CAP_PRESENT(oglc, CAPS_EXT_TEXBARRIER) && dstOps->textureTarget == GL_TEXTURE_2D) { dstTextureID = dstOps->textureID; } + subPixPos = lcdSubPixelPosSupported ? subPixPos : 0; + fontSmoothing = useFontSmoothing; +#endif + for (glyphCounter = 0; glyphCounter < totalGlyphs; glyphCounter++) { jint x, y; jfloat glyphx, glyphy; jboolean ok; GlyphInfo *ginfo = (GlyphInfo *)jlong_to_ptr(NEXT_LONG(images)); - if (ginfo == NULL) { + if (ginfo == NULL || ginfo == (void*) -1) { // this shouldn't happen, but if it does we'll just break out... - J2dRlsTraceLn(J2D_TRACE_ERROR, - "OGLTR_DrawGlyphList: glyph info is null"); + J2dRlsTraceLn1(J2D_TRACE_ERROR, + "OGLTR_DrawGlyphList: glyph info is %d", ginfo); break; } @@ -1072,31 +1286,47 @@ OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps, jfloat posy = NEXT_FLOAT(positions); glyphx = glyphListOrigX + posx + ginfo->topLeftX; glyphy = glyphListOrigY + posy + ginfo->topLeftY; - FLOOR_ASSIGN(x, glyphx); - FLOOR_ASSIGN(y, glyphy); } else { glyphx = glyphListOrigX + ginfo->topLeftX; glyphy = glyphListOrigY + ginfo->topLeftY; - FLOOR_ASSIGN(x, glyphx); - FLOOR_ASSIGN(y, glyphy); glyphListOrigX += ginfo->advanceX; glyphListOrigY += ginfo->advanceY; } + int rx = ginfo->subpixelResolutionX; + int ry = ginfo->subpixelResolutionY; + ADJUST_SUBPIXEL_GLYPH_POSITION(glyphx, rx); + ADJUST_SUBPIXEL_GLYPH_POSITION(glyphy, ry); + float fx = floor(glyphx); + float fy = floor(glyphy); + x = (int) fx; + y = (int) fy; + int subimage; + if ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0) { + subimage = 0; + } else { + int subx = (int) ((glyphx - fx) * (float) rx); + int suby = (int) ((glyphy - fy) * (float) ry); + subimage = subx + suby * rx; + } + if (ginfo->image == NULL) { continue; } - if (ginfo->rowBytes == ginfo->width) { + if (ginfo->format == sun_font_StrikeCache_PIXEL_FORMAT_GREYSCALE) { + if (oglc->grayRenderHints == NULL) { + OGLContext_InitGrayRenderHints(env, oglc); + } // grayscale or monochrome glyph data if (ginfo->width <= OGLTR_CACHE_CELL_WIDTH && ginfo->height <= OGLTR_CACHE_CELL_HEIGHT) { - ok = OGLTR_DrawGrayscaleGlyphViaCache(oglc, ginfo, x, y); + ok = OGLTR_DrawGrayscaleGlyphViaCache(oglc, ginfo, x, y, fontSmoothing, subimage); } else { - ok = OGLTR_DrawGrayscaleGlyphNoCache(oglc, ginfo, x, y); + ok = OGLTR_DrawGrayscaleGlyphNoCache(oglc, ginfo, x, y, subimage); } - } else if (ginfo->rowBytes == ginfo->width * 4) { + } else if (ginfo->format == sun_font_StrikeCache_PIXEL_FORMAT_BGRA) { // color glyph data ok = OGLTR_DrawColorGlyphNoCache(oglc, ginfo, x, y); } else { @@ -1133,7 +1363,7 @@ OGLTR_DrawGlyphList(JNIEnv *env, OGLContext *oglc, OGLSDOps *dstOps, break; } } - + OGLVertexCache_FlushVertexCache(); OGLTR_DisableGlyphModeState(); } diff --git a/src/java.desktop/share/native/libfontmanager/DrawGlyphList.c b/src/java.desktop/share/native/libfontmanager/DrawGlyphList.c index d32a72093910..3f0d9deb3444 100644 --- a/src/java.desktop/share/native/libfontmanager/DrawGlyphList.c +++ b/src/java.desktop/share/native/libfontmanager/DrawGlyphList.c @@ -35,6 +35,25 @@ #include "sun_java2d_loops_DrawGlyphListAA.h" +static UInt8* getSubpixelGlyphImage(GlyphInfo *glyph, float x, float y) { + int rx = glyph->subpixelResolutionX; + int ry = glyph->subpixelResolutionY; + if ((rx == 1 && ry == 1) || rx <= 0 || ry <= 0) { + return glyph->image; + } + int xOffset; + int yOffset; + if (x >= 0 && y >= 0) { + xOffset = ((int) (x * (float) rx)) % rx; + yOffset = ((int) (y * (float) ry)) % ry; + } else { + xOffset = (int) ((x - (float) floor(x)) * (float) rx); + yOffset = (int) ((y - (float) floor(y)) * (float) ry); + } + return glyph->image + (glyph->rowBytes * glyph->height) * + (xOffset + yOffset * rx); +} + /* * Need to account for the rare case when (eg) repainting damaged * areas results in the drawing location being negative, in which @@ -50,6 +69,9 @@ #define FLOOR_ASSIGN(l, r)\ if ((r)<0) (l) = ((int)floor(r)); else (l) = ((int)(r)) +#define ADJUST_SUBPIXEL_GLYPH_POSITION(coord, res) \ + if ((res) > 1) (coord) += 0.5f / ((float)(res)) - 0.5f; + GlyphBlitVector* setupBlitVector(JNIEnv *env, jobject glyphlist, jint fromGlyph, jint toGlyph) { @@ -102,8 +124,12 @@ GlyphBlitVector* setupBlitVector(JNIEnv *env, jobject glyphlist, jfloat py = y + positions[++n]; ginfo = (GlyphInfo*)((uintptr_t)imagePtrs[g + fromGlyph]); + ADJUST_SUBPIXEL_GLYPH_POSITION(px, ginfo->subpixelResolutionX); + ADJUST_SUBPIXEL_GLYPH_POSITION(py, ginfo->subpixelResolutionY); gbv->glyphs[g].glyphInfo = ginfo; - gbv->glyphs[g].pixels = ginfo->image; + gbv->glyphs[g].pixels = getSubpixelGlyphImage(ginfo, + px + ginfo->topLeftX, + py + ginfo->topLeftY); gbv->glyphs[g].width = ginfo->width; gbv->glyphs[g].rowBytes = ginfo->rowBytes; gbv->glyphs[g].height = ginfo->height; @@ -114,14 +140,21 @@ GlyphBlitVector* setupBlitVector(JNIEnv *env, jobject glyphlist, positions, JNI_ABORT); } else { for (g=0; gsubpixelResolutionX); + ADJUST_SUBPIXEL_GLYPH_POSITION(py, ginfo->subpixelResolutionY); gbv->glyphs[g].glyphInfo = ginfo; - gbv->glyphs[g].pixels = ginfo->image; + gbv->glyphs[g].pixels = getSubpixelGlyphImage(ginfo, + px + ginfo->topLeftX, + py + ginfo->topLeftY); gbv->glyphs[g].width = ginfo->width; gbv->glyphs[g].rowBytes = ginfo->rowBytes; gbv->glyphs[g].height = ginfo->height; - FLOOR_ASSIGN(gbv->glyphs[g].x, x + ginfo->topLeftX); - FLOOR_ASSIGN(gbv->glyphs[g].y, y + ginfo->topLeftY); + FLOOR_ASSIGN(gbv->glyphs[g].x, px + ginfo->topLeftX); + FLOOR_ASSIGN(gbv->glyphs[g].y, py + ginfo->topLeftY); /* copy image data into this array at x/y locations */ x += ginfo->advanceX; @@ -545,8 +578,7 @@ GlyphBlitVector* setupLCDBlitVector(JNIEnv *env, jobject glyphlist, free(gbv); return (GlyphBlitVector*)NULL; } - /* rowBytes==width tests if its a B&W or LCD glyph */ - if (ginfo->width == ginfo->rowBytes) { + if (ginfo->format != sun_font_StrikeCache_PIXEL_FORMAT_LCD) { subPixPos = JNI_FALSE; } } diff --git a/src/java.desktop/share/native/libfontmanager/HBShaper.c b/src/java.desktop/share/native/libfontmanager/HBShaper.c index ffb3419286d9..0c73a01f473a 100644 --- a/src/java.desktop/share/native/libfontmanager/HBShaper.c +++ b/src/java.desktop/share/native/libfontmanager/HBShaper.c @@ -25,10 +25,13 @@ #include #include +#include +#include #include "hb.h" #include "hb-jdk.h" #include "hb-ot.h" #include "scriptMapping.h" +#include "HBShaper.h" static jclass gvdClass = 0; static const char* gvdClassName = "sun/font/GlyphLayout$GVData"; @@ -69,7 +72,7 @@ static int init_JNI_IDs(JNIEnv *env) { // gmask is the composite font slot mask // baseindex is to be added to the character (code point) index. jboolean storeGVData(JNIEnv* env, - jobject gvdata, jint slot, + jobject gvdata, jint slot, jint slotShift, jint baseIndex, int offset, jobject startPt, int charCount, int glyphCount, hb_glyph_info_t *glyphInfo, hb_glyph_position_t *glyphPos, float devScale) { @@ -135,7 +138,7 @@ jboolean storeGVData(JNIEnv* env, int storei = i + initialCount; int cluster = glyphInfo[i].cluster - offset; indices[storei] = baseIndex + cluster; - glyphs[storei] = (unsigned int)(glyphInfo[i].codepoint | slot); + glyphs[storei] = (unsigned int)((glyphInfo[i].codepoint << slotShift) | slot); positions[storei*2] = startX + x + glyphPos[i].x_offset * scale; positions[(storei*2)+1] = startY + y - glyphPos[i].y_offset * scale; x += glyphPos[i].x_advance * scale; @@ -220,10 +223,102 @@ JDKFontInfo* return fi; } +hb_buffer_t *create_buffer(int script, int ltrDirection) { + hb_buffer_t *buffer = hb_buffer_create(); -#define TYPO_KERN 0x00000001 -#define TYPO_LIGA 0x00000002 -#define TYPO_RTL 0x80000000 + hb_direction_t direction = ltrDirection ? HB_DIRECTION_LTR : HB_DIRECTION_RTL; + hb_buffer_set_script(buffer, getHBScriptCode(script)); + hb_buffer_set_language(buffer, hb_ot_tag_to_language(HB_OT_TAG_DEFAULT_LANGUAGE)); + hb_buffer_set_direction(buffer, direction); + hb_buffer_set_cluster_level(buffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); + + return buffer; +} + +bool shape_full(hb_font_t* hbfont, hb_buffer_t *buffer, const char *featuresStr) { + if (featuresStr == NULL) { + return false; + } + + const char SEPARATOR = ';'; + int featuresCount = 1; + int featuresStrLength = strlen(featuresStr); + for (int i = 0; i < featuresStrLength; i++) { + featuresCount += featuresStr[i] == SEPARATOR ? 1 : 0; + } + hb_feature_t *features = calloc(featuresCount, sizeof(hb_feature_t)); + jboolean res = true; + if (features == NULL) { + return false; + } + + const char *iter = featuresStr; + for (int i = 0; i < featuresCount; i++) { + char *next = strchr(iter, SEPARATOR); + if (!hb_feature_from_string(iter, next != NULL ? next - iter : -1, &features[i])) { + res = false; + goto cleanup; + } + iter = next + 1; + } + + res = hb_shape_full(hbfont, buffer, features, featuresCount, 0); +cleanup: + free(features); + return res; +} + +static hb_tag_t *createFeatureTags(hb_face_t *face, int tag, int *count) { + *count = hb_ot_layout_table_get_feature_tags(face, tag, 0, NULL, NULL); + if (*count == 0) { + return NULL; + } + + hb_tag_t *res = calloc(*count, sizeof(hb_tag_t)); + if (res == NULL) { + *count = 0; + return NULL; + } + + hb_ot_layout_table_get_feature_tags(face, tag, 0, (unsigned int *)count, res); + return res; +} + +static void putFeatureTagsToArray(JNIEnv *env, int count, int offset, + hb_tag_t *featureTags, jobjectArray arr) { + if (featureTags == NULL) { + return; + } + + char feature[sizeof(hb_tag_t) + 1] = {0}; + for (int i = 0; i < count; i++) { + hb_tag_to_string(featureTags[i], feature); + (*env)->SetObjectArrayElement(env, arr, offset + i, (*env)->NewStringUTF(env, feature)); + } +} + +JNIEXPORT jobjectArray JNICALL Java_sun_font_SunLayoutEngine_getFeatures + (JNIEnv *env, jclass cls, jlong pFace) { + + jobjectArray res; + int gposFeatureCount, gsubFeatureCount; + + hb_face_t *hbface = (hb_face_t*) jlong_to_ptr(pFace); + hb_tag_t *gposFeatureTags = createFeatureTags(hbface, HB_OT_TAG_GPOS, &gposFeatureCount); + hb_tag_t *gsubFeatureTags = createFeatureTags(hbface, HB_OT_TAG_GSUB, &gsubFeatureCount); + + res = (*env)->NewObjectArray(env, gposFeatureCount + gsubFeatureCount, + (*env)->FindClass(env, "java/lang/String"), NULL); + if (res) { + putFeatureTagsToArray(env, gposFeatureCount, 0, gposFeatureTags, res); + putFeatureTagsToArray(env, gsubFeatureCount, gposFeatureCount, gsubFeatureTags, res); + } + + free(gposFeatureTags); + free(gsubFeatureTags); + + return res; +} JNIEXPORT jboolean JNICALL Java_sun_font_SunLayoutEngine_shape (JNIEnv *env, jclass cls, @@ -239,8 +334,10 @@ JNIEXPORT jboolean JNICALL Java_sun_font_SunLayoutEngine_shape jint limit, jint baseIndex, jobject startPt, - jint flags, - jint slot) { + jboolean ltrDirection, + jstring features, + jint slot, + jint slotShift) { hb_buffer_t *buffer; hb_face_t* hbface; @@ -250,12 +347,8 @@ JNIEXPORT jboolean JNICALL Java_sun_font_SunLayoutEngine_shape int glyphCount; hb_glyph_info_t *glyphInfo; hb_glyph_position_t *glyphPos; - hb_direction_t direction = HB_DIRECTION_LTR; - hb_feature_t *features = NULL; - int featureCount = 0; - char* kern = (flags & TYPO_KERN) ? "kern" : "-kern"; - char* liga = (flags & TYPO_LIGA) ? "liga" : "-liga"; - jboolean ret; + const char *featuresPtr = NULL; + jboolean ret = JNI_TRUE; unsigned int buflen; JDKFontInfo *jdkFontInfo = @@ -270,48 +363,40 @@ JNIEXPORT jboolean JNICALL Java_sun_font_SunLayoutEngine_shape hbface = (hb_face_t*) jlong_to_ptr(pFace); hbfont = hb_jdk_font_create(hbface, jdkFontInfo, NULL); - buffer = hb_buffer_create(); - hb_buffer_set_script(buffer, getHBScriptCode(script)); - hb_buffer_set_language(buffer, - hb_ot_tag_to_language(HB_OT_TAG_DEFAULT_LANGUAGE)); - if ((flags & TYPO_RTL) != 0) { - direction = HB_DIRECTION_RTL; - } - hb_buffer_set_direction(buffer, direction); - hb_buffer_set_cluster_level(buffer, - HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); + buffer = create_buffer(script, ltrDirection); chars = (*env)->GetCharArrayElements(env, text, NULL); - if ((*env)->ExceptionCheck(env)) { - hb_buffer_destroy(buffer); - hb_font_destroy(hbfont); - free((void*)jdkFontInfo); - return JNI_FALSE; + if (chars == NULL || (*env)->ExceptionCheck(env)) { + ret = JNI_FALSE; + goto cleanup; } len = (*env)->GetArrayLength(env, text); - hb_buffer_add_utf16(buffer, chars, len, offset, limit-offset); - features = calloc(2, sizeof(hb_feature_t)); - if (features) { - hb_feature_from_string(kern, -1, &features[featureCount++]); - hb_feature_from_string(liga, -1, &features[featureCount++]); + featuresPtr = (*env)->GetStringUTFChars(env, features, NULL); + if (!shape_full(hbfont, buffer, featuresPtr)) { + ret = JNI_FALSE; + goto cleanup; } - hb_shape_full(hbfont, buffer, features, featureCount, 0); glyphCount = hb_buffer_get_length(buffer); glyphInfo = hb_buffer_get_glyph_infos(buffer, 0); glyphPos = hb_buffer_get_glyph_positions(buffer, &buflen); - ret = storeGVData(env, gvdata, slot, baseIndex, offset, startPt, + ret = storeGVData(env, gvdata, slot, slotShift, baseIndex, offset, startPt, limit - offset, glyphCount, glyphInfo, glyphPos, jdkFontInfo->devScale); - hb_buffer_destroy (buffer); +cleanup: + if (featuresPtr) { + (*env)->ReleaseStringUTFChars(env, features, featuresPtr); + } + if (chars) { + (*env)->ReleaseCharArrayElements(env, text, chars, JNI_ABORT); + } + hb_buffer_destroy(buffer); hb_font_destroy(hbfont); free((void*)jdkFontInfo); - if (features != NULL) free(features); - (*env)->ReleaseCharArrayElements(env, text, chars, JNI_ABORT); return ret; } diff --git a/src/java.desktop/share/classes/sun/font/lookup/JDKFontLookup.java b/src/java.desktop/share/native/libfontmanager/HBShaper.h similarity index 76% rename from src/java.desktop/share/classes/sun/font/lookup/JDKFontLookup.java rename to src/java.desktop/share/native/libfontmanager/HBShaper.h index fc101d67b868..9137c0e386d1 100644 --- a/src/java.desktop/share/classes/sun/font/lookup/JDKFontLookup.java +++ b/src/java.desktop/share/native/libfontmanager/HBShaper.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,17 +23,15 @@ * questions. */ -package sun.font.lookup; +#ifndef JETBRAINSRUNTIME_HBSHAPER_H +#define JETBRAINSRUNTIME_HBSHAPER_H -import sun.font.SunFontManager; +#include "hb.h" +#include "hb-jdk.h" +#include "hb-ot.h" +#include -/** - * Implementation-class accessed by other JDK modules to - * locate the JDK-provided fonts. - */ -public final class JDKFontLookup { +hb_buffer_t *create_buffer(int script, int ltrDirection); +bool shape_full(hb_font_t* hbfont, hb_buffer_t *buffer, const char *featuresStr); - public static final String getJDKFontDir() { - return SunFontManager.getJDKFontDir(); - } -} +#endif diff --git a/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c b/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c index 94289db7046c..f17254b32f39 100644 --- a/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c +++ b/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c @@ -24,10 +24,12 @@ */ #include +#include #include "hb.h" #include "hb-jdk-p.h" #include "hb-ot.h" #include "scriptMapping.h" +#include "HBShaper.h" static float euclidianDistance(float a, float b) { @@ -59,10 +61,6 @@ static float euclidianDistance(float a, float b) return root; } -#define TYPO_KERN 0x00000001 -#define TYPO_LIGA 0x00000002 -#define TYPO_RTL 0x80000000 - JDKEXPORT int jdk_hb_shape( float ptSize, float *matrix, @@ -75,11 +73,12 @@ JDKEXPORT int jdk_hb_shape( int baseIndex, float startX, float startY, - int flags, + int ltrDirection, + const char *features, int slot, + int slotShift, hb_font_funcs_t* font_funcs, - store_layoutdata_func_t store_layout_results_fn - ) { + store_layoutdata_func_t store_layout_results_fn) { hb_buffer_t *buffer; hb_face_t* hbface; @@ -87,11 +86,7 @@ JDKEXPORT int jdk_hb_shape( int glyphCount; hb_glyph_info_t *glyphInfo; hb_glyph_position_t *glyphPos; - hb_direction_t direction = HB_DIRECTION_LTR; - hb_feature_t *features = NULL; int featureCount = 0; - char* kern = (flags & TYPO_KERN) ? "kern" : "-kern"; - char* liga = (flags & TYPO_LIGA) ? "liga" : "-liga"; int ret; unsigned int buflen; @@ -107,39 +102,23 @@ JDKEXPORT int jdk_hb_shape( ptSize, devScale, NULL, font_funcs); - buffer = hb_buffer_create(); - hb_buffer_set_script(buffer, getHBScriptCode(script)); - hb_buffer_set_language(buffer, - hb_ot_tag_to_language(HB_OT_TAG_DEFAULT_LANGUAGE)); - if ((flags & TYPO_RTL) != 0) { - direction = HB_DIRECTION_RTL; - } - hb_buffer_set_direction(buffer, direction); - hb_buffer_set_cluster_level(buffer, - HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); + buffer = create_buffer(script, ltrDirection); int charCount = limit - offset; hb_buffer_add_utf16(buffer, chars, len, offset, charCount); - features = calloc(2, sizeof(hb_feature_t)); - if (features) { - hb_feature_from_string(kern, -1, &features[featureCount++]); - hb_feature_from_string(liga, -1, &features[featureCount++]); - } + shape_full(hbfont, buffer, features); - hb_shape_full(hbfont, buffer, features, featureCount, 0); glyphCount = hb_buffer_get_length(buffer); glyphInfo = hb_buffer_get_glyph_infos(buffer, 0); glyphPos = hb_buffer_get_glyph_positions(buffer, &buflen); ret = (*store_layout_results_fn) - (slot, baseIndex, offset, startX, startY, devScale, + (slot, slotShift, baseIndex, offset, startX, startY, devScale, charCount, glyphCount, glyphInfo, glyphPos); hb_buffer_destroy (buffer); hb_font_destroy(hbfont); - if (features != NULL) { - free(features); - } + return ret; } diff --git a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c index f9ebacad66be..f1aab9d85b6f 100644 --- a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c +++ b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c @@ -25,24 +25,91 @@ #include "jni.h" #include "jni_util.h" -#include "jlong.h" +#include "jvm_md.h" #include "sunfontids.h" #include "sun_font_FreetypeFontScaler.h" - +#include "freetype/tttables.h" #include -#if !defined(_WIN32) && !defined(__APPLE_) -#include +#if defined(_WIN32) || defined(MACOSX) +#define DISABLE_FONTCONFIG #endif + #include + +#ifndef DISABLE_FONTCONFIG +#include +#include +#else +#define DISABLE_FONTCONFIG +#endif + #include "ft2build.h" +#include FT_LCD_FILTER_H #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_BBOX_H #include FT_SIZES_H #include FT_OUTLINE_H #include FT_SYNTHESIS_H +#include FT_MODULE_H #include FT_LCD_FILTER_H #include FT_MODULE_H +#include FT_LCD_FILTER_H + +#if defined(_WIN32) || defined(MACOSX) +#include FT_COLOR_H +#define COLOR_OUTLINES_AVAILABLE (1) +#else +// Linux is built with system Freetype by default, +// and it's often a bit old and doesn't have FT_COLOR_H. +// Thus, we load required symbols dynamically on Linux. +#define DYNAMIC_COLOR_OUTLINES + +typedef struct FT_Color__Dynamic { + FT_Byte blue; + FT_Byte green; + FT_Byte red; + FT_Byte alpha; +} FT_Color_Dynamic; + +typedef struct FT_LayerIterator__Dynamic { + FT_UInt num_layers; + FT_UInt layer; + FT_Byte* p; +} FT_LayerIterator_Dynamic; + +#define FT_Color FT_Color_Dynamic +#define FT_LayerIterator FT_LayerIterator_Dynamic + +typedef FT_Error (*FT_Palette_Select_Func)(FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette); + +typedef FT_Bool (*FT_Get_Color_Glyph_Layer_Func)(FT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator); + +FT_Palette_Select_Func FT_Palette_Select_Dynamic = NULL; +FT_Get_Color_Glyph_Layer_Func FT_Get_Color_Glyph_Layer_Dynamic = NULL; + +#define FT_Palette_Select FT_Palette_Select_Dynamic +#define FT_Get_Color_Glyph_Layer FT_Get_Color_Glyph_Layer_Dynamic +#define COLOR_OUTLINES_AVAILABLE (FT_Palette_Select && FT_Get_Color_Glyph_Layer) +#endif + +#ifndef DISABLE_FONTCONFIG +#include "fontconfigmanager.h" +#include +#endif + +#ifndef FC_LCD_NONE +#define FC_LCD_NONE 0 +#define FC_LCD_DEFAULT 1 +#define FC_LCD_LIGHT 2 +#define FC_LCD_LEGACY 3 +#endif #include "fontscaler.h" @@ -56,6 +123,48 @@ #define FloatToFTFixed(f) (FT_Fixed)((f) * (float)(ftFixed1)) #define FTFixedToFloat(x) ((x) / (float)(ftFixed1)) #define FT26Dot6ToFloat(x) ((x) / ((float) (1<<6))) +#define ROUND(x) ((int) ((x<0) ? (x-0.5) : (x+0.5))) +#define FT26Dot6ToDouble(x) ((x) / ((double) (1<<6))) +#define FT26Dot6ToInt(x) (((int)(x)) >> 6) +#define FT26Dot6ToIntRound(x) (((int)(x + (1 << 5))) >> 6) +#define FT26Dot6ToIntCeil(x) (((int)(x - 1 + (1 << 6))) >> 6) +#define IntToFT26Dot6(x) (((FT_Fixed)(x)) << 6) +#define FLOOR_DIV(X, Y) ((X) >= 0 ? (X) / (Y) : ((X) - (Y) + 1) / (Y)) + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef DISABLE_FONTCONFIG +typedef struct CachedMatch { + // Assume familyName and scaleable are constant + double fcSize; + + FcBool fcHinting; + FcBool fcHintingSet; + int fcHintStyle; + FcBool fcHintStyleSet; + FcBool fcAntialias; + FcBool fcAntialiasSet; + FcBool fcAutohint; + FcBool fcAutohintSet; + int fcRGBA; + FcBool fcRGBASet; + int fcLCDFilter; + FcBool fcLCDFilterSet; +} CachedMatch; + +#define NUM_CACHED_VALUES 8 +#endif + +// Define these manually when building with old Freetype (before 2.5) +#if !defined(FT_LOAD_COLOR) +#define FT_LOAD_COLOR ( 1L << 20 ) +#define FT_PIXEL_MODE_BGRA 7 +#endif typedef struct { /* Important note: @@ -78,6 +187,12 @@ typedef struct { unsigned fontDataOffset; unsigned fontDataLength; unsigned fileSize; + +#ifndef DISABLE_FONTCONFIG + CachedMatch cachedMatches[NUM_CACHED_VALUES]; + // Next index to insert a value + int nextCacheIdx; +#endif } FTScalerInfo; typedef struct FTScalerContext { @@ -87,11 +202,26 @@ typedef struct FTScalerContext { jint fmType; /* fractional metrics - on/off */ jboolean doBold; /* perform algorithmic bolding? */ jboolean doItalize; /* perform algorithmic italicizing? */ - int renderFlags; /* configuration specific to particular engine */ + + /* Fontconfig info */ + FT_Render_Mode renderFlags; + FT_Int32 loadFlags; + FT_LcdFilter lcdFilter; + int pathType; int ptsz; /* size in points */ + int fixedSizeIndex;/* -1 for scalable fonts and index inside + * scalerInfo->face->available_sizes otherwise */ + jboolean colorFont; } FTScalerContext; +/* SampledBGRABitmap contains (possibly) downscaled image data + * prepared for sampling when generating transformed bitmap */ +typedef struct SampledBGRABitmap { + unsigned char* data; + int left, top, width, height, rowBytes, xDownscale, yDownscale; +} SampledBGRABitmap; + #ifdef DEBUG /* These are referenced in the freetype sources if DEBUG macro is defined. To simplify work with debugging version of freetype we define @@ -104,10 +234,34 @@ void z_error(char *s) {} static jmethodID invalidateScalerMID; static jboolean debugFonts; // Stores the value of FontUtilities.debugFonts() +static jmethodID getDefaultToolkitMID; +static jclass tkClass; +static jfieldID platNameFID; +static jfieldID familyNameFID; + +static jboolean logFC = JNI_FALSE; +static jboolean logFFS = JNI_FALSE; + +static FT_UnitVector subpixelGlyphResolution; JNIEXPORT void JNICALL Java_sun_font_FreetypeFontScaler_initIDs( - JNIEnv *env, jobject scaler, jclass FFSClass) { + JNIEnv *env, jobject scaler, jclass FFSClass, jclass TKClass, + jclass PFClass, jstring jreFontConfName, + jint subpixelResolutionX, + jint subpixelResolutionY) +{ + const char *fssLogEnabled = getenv("OPENJDK_LOG_FFS"); + const char *fontConf = (jreFontConfName == NULL) ? + NULL : (*env)->GetStringUTFChars(env, jreFontConfName, NULL); + + if (fssLogEnabled != NULL && !strcmp(fssLogEnabled, "yes")) { + logFFS = JNI_TRUE; + } + + subpixelGlyphResolution.x = subpixelResolutionX; + subpixelGlyphResolution.y = subpixelResolutionY; + invalidateScalerMID = (*env)->GetMethodID(env, FFSClass, "invalidateScaler", "()V"); @@ -115,6 +269,47 @@ Java_sun_font_FreetypeFontScaler_initIDs( debugFonts = JNU_CallStaticMethodByName(env, &ignoreException, "sun/font/FontUtilities", "debugFonts", "()Z").z; + getDefaultToolkitMID = + (*env)->GetStaticMethodID(env, TKClass, "getDefaultToolkit", + "()Ljava/awt/Toolkit;"); + tkClass = (*env)->NewGlobalRef(env, TKClass); + platNameFID = (*env)->GetFieldID(env, PFClass, "platName", "Ljava/lang/String;"); + familyNameFID = (*env)->GetFieldID(env, PFClass, "familyName", "Ljava/lang/String;"); + +#ifdef DYNAMIC_COLOR_OUTLINES + void *lib = dlopen("libfreetype.so", RTLD_LOCAL|RTLD_LAZY); + if (!lib) { + lib = dlopen("libfreetype.so.6", RTLD_LOCAL|RTLD_LAZY); + } + if (lib) { + FT_Palette_Select = (FT_Palette_Select_Func)dlsym(lib, "FT_Palette_Select"); + FT_Get_Color_Glyph_Layer = (FT_Get_Color_Glyph_Layer_Func)dlsym(lib, "FT_Get_Color_Glyph_Layer"); + } +#endif +} + +typedef FT_Error (*FtLibrarySetLcdFilterPtrType) (FT_Library library, FT_LcdFilter filter); + +static FT_Error FT_Library_SetLcdFilter_Proxy(FT_Library library, FT_LcdFilter filter) { +#ifndef DISABLE_FONTCONFIG + static FtLibrarySetLcdFilterPtrType FtLibrarySetLcdFilterPtr = NULL; + static int ftLibrarySetLcdFilterNotChecked = 1; + if (ftLibrarySetLcdFilterNotChecked) { + if (logFC) fprintf(stderr, "FC_LOG: Lookup FT_Library_SetLcdFilter: "); + FtLibrarySetLcdFilterPtr = (FtLibrarySetLcdFilterPtrType) dlsym(RTLD_DEFAULT, "FT_Library_SetLcdFilter"); + if (logFC) fprintf(stderr, (FtLibrarySetLcdFilterPtr)? "found\n" : "not found\n"); + ftLibrarySetLcdFilterNotChecked = 0; + } + if (FtLibrarySetLcdFilterPtr) { + return (*FtLibrarySetLcdFilterPtr)(library, filter); + } else { + if (logFC) fprintf(stderr, "FC_LOG: Skipping FT_Library_SetLcdFilter\n"); + } + + return 0; +#else + return FT_Library_SetLcdFilter(library, filter); +#endif } static void freeNativeResources(JNIEnv *env, FTScalerInfo* scalerInfo) { @@ -283,7 +478,7 @@ static void setInterpreterVersion(FT_Library library) { const char* property = "interpreter-version"; /* If some one is setting this, don't override it */ - if (props != NULL && strstr(props, property)) { + if (props != NULL && strstr(property, props)) { return; } /* @@ -322,7 +517,7 @@ static void setInterpreterVersion(FT_Library library) { ((FT_MulFix(units_per_EM, y_scale) / BOLD_DIVISOR )) #define BOLD_MODIFIER(units_per_EM, y_scale) \ - (context->doBold ? BOLD_FACTOR(units_per_EM, y_scale) : 0) + ((context->doBold && !context->colorFont) ? BOLD_FACTOR(units_per_EM, y_scale) : 0) static void GlyphSlot_Embolden(FT_GlyphSlot slot, FT_Matrix transform) { FT_Pos extra = 0; @@ -522,7 +717,7 @@ Java_sun_font_FreetypeFontScaler_createScalerContextNative( return (jlong) 0; } (*env)->GetDoubleArrayRegion(env, matrix, 0, 4, dmat); - ptsz = euclidianDistance(dmat[2], dmat[3]); //i.e. y-size + ptsz = euclidianDistance(dmat[0], dmat[1]); //i.e. x-size if (ptsz < 1.0) { //text can not be smaller than 1 point ptsz = 1.0; @@ -570,13 +765,36 @@ Java_sun_font_FreetypeFontScaler_createScalerContextNative( return ptr_to_jlong(context); } +#ifndef DISABLE_FONTCONFIG +static void setupLoadRenderFlags(FTScalerContext *context, int fcHintStyle, FcBool fcAutohint, FcBool fcAutohintSet, + FT_Int32 fcLoadFlags, FT_Render_Mode fcRenderFlags) +{ + switch (fcHintStyle) { + case FC_HINT_NONE: + context->loadFlags = FT_LOAD_NO_HINTING; + break; + case FC_HINT_SLIGHT: + context->loadFlags = FT_LOAD_TARGET_LIGHT; + break; + default: + context->loadFlags = fcLoadFlags; + } + + context->renderFlags = fcRenderFlags; + + if (fcAutohintSet && fcAutohint) { + context->loadFlags |= FT_LOAD_FORCE_AUTOHINT; + } +} +#endif + // values used by FreeType (as of version 2.10.1) for italics transformation matrix in FT_GlyphSlot_Oblique #define FT_MATRIX_ONE 0x10000 #define FT_MATRIX_OBLIQUE_XY 0x0366A static void setupTransform(FT_Matrix* target, FTScalerContext *context) { FT_Matrix* transform = &context->transform; - if (context->doItalize) { + if (context->doItalize && !context->colorFont) { // we cannot use FT_GlyphSlot_Oblique as it doesn't work well with arbitrary transforms, // so we add corresponding shear transform to the requested glyph transformation target->xx = FT_MATRIX_ONE; @@ -592,34 +810,304 @@ static void setupTransform(FT_Matrix* target, FTScalerContext *context) { } } -static int setupFTContext(JNIEnv *env, - jobject font2D, - FTScalerInfo *scalerInfo, - FTScalerContext *context) { +static void setDefaultScalerSettings(FTScalerContext *context) { + if (context->aaType == TEXT_AA_ON || context->colorFont) { + context->loadFlags = FT_LOAD_TARGET_NORMAL; + } else if (context->aaType == TEXT_AA_OFF) { + context->loadFlags = FT_LOAD_TARGET_MONO; + } else { + context->lcdFilter = FT_LCD_FILTER_LIGHT; + if (context->aaType == TEXT_AA_LCD_HRGB || + context->aaType == TEXT_AA_LCD_HBGR) { + context->loadFlags = FT_LOAD_TARGET_LCD; + } else { + context->loadFlags = FT_LOAD_TARGET_LCD_V; + } + } + context->renderFlags = FT_LOAD_TARGET_MODE(context->loadFlags); +} + +#ifndef DISABLE_FONTCONFIG +static FcBool getRenderingSettingsField(int *target, int value) { + *target = value; + return (value != -1) ? FcTrue : FcFalse; +} +#endif + +static int setupFTContext(JNIEnv *env, jobject font2D, FTScalerInfo *scalerInfo, FTScalerContext *context, + FT_Bool configureFont) { FT_Matrix matrix; int errCode = 0; - scalerInfo->env = env; scalerInfo->font2D = font2D; + const char *cfontFamilyName = NULL; + const char *cfontPath = NULL; + jstring jfontFamilyName = NULL; + jstring jfontPath = NULL; if (context != NULL) { + context->colorFont = FT_HAS_COLOR(scalerInfo->face) || !FT_IS_SCALABLE(scalerInfo->face); + setupTransform(&matrix, context); FT_Set_Transform(scalerInfo->face, &matrix, NULL); - errCode = FT_Set_Char_Size(scalerInfo->face, 0, context->ptsz, 72, 72); + if (FT_IS_SCALABLE(scalerInfo->face)) { // Standard scalable face + context->fixedSizeIndex = -1; + errCode = FT_Set_Char_Size(scalerInfo->face, 0, context->ptsz, 72, 72); + } else { // Non-scalable face (that should only be bitmap faces) + const int ptsz = context->ptsz; + // Best size is smallest, but not smaller than requested + int bestSizeIndex = 0; + FT_Pos bestSize = scalerInfo->face->available_sizes[0].size; + int i; + for (i = 1; i < scalerInfo->face->num_fixed_sizes; i++) { + FT_Pos size = scalerInfo->face->available_sizes[i].size; + if ((size >= ptsz && bestSize >= ptsz && size < bestSize) || + (size < ptsz && bestSize < ptsz && size > bestSize) || + (size >= ptsz && bestSize < ptsz)) { + bestSizeIndex = i; + bestSize = size; + } + } + context->fixedSizeIndex = bestSizeIndex; + errCode = FT_Set_Char_Size(scalerInfo->face, 0, bestSize, 72, 72); + } + + if (errCode) return errCode; + + errCode = FT_Activate_Size(scalerInfo->face->size); + if (errCode) return errCode; + + if (configureFont) { + context->renderFlags = FT_RENDER_MODE_NORMAL; + context->lcdFilter = FT_LCD_FILTER_NONE; + context->loadFlags = FT_LOAD_DEFAULT; + +#ifdef DISABLE_FONTCONFIG + setDefaultScalerSettings(context); + return 0; +#else + jfontFamilyName = (*env)->GetObjectField(env, font2D, familyNameFID); + cfontFamilyName = (*env)->GetStringUTFChars(env, jfontFamilyName, NULL); + jfontPath = (*env)->GetObjectField(env, font2D, platNameFID); + cfontPath = (*env)->GetStringUTFChars(env, jfontPath, NULL); + + if (logFC) { + fprintf(stderr, "FC_LOG: %s %s ", cfontFamilyName, cfontPath); + } + + double fcSize = FT26Dot6ToDouble(context->ptsz); + if (logFC) fprintf(stderr, " size=%f", fcSize); + + // Find cached value + CachedMatch cachedMatch; + cachedMatch.fcSize = 0; // Initialize to empty + for (int cacheIdx = 0; cacheIdx < NUM_CACHED_VALUES; ++cacheIdx) { + if (scalerInfo->cachedMatches[cacheIdx].fcSize == fcSize) { + cachedMatch = scalerInfo->cachedMatches[cacheIdx]; + break; + } + } + + if (cachedMatch.fcSize == 0) { + RenderingFontHints renderingFontHints; + int status = setupRenderingFontHints(cfontFamilyName, NULL, fcSize, &renderingFontHints); + if (status != 0) { + if (cfontPath) { + (*env)->ReleaseStringUTFChars(env, jfontPath, cfontPath); + } + if (cfontFamilyName) { + (*env)->ReleaseStringUTFChars(env, jfontFamilyName, cfontFamilyName); + } + setDefaultScalerSettings(context); + return 0; + } + + cachedMatch.fcSize = fcSize; + + cachedMatch.fcHintingSet = + getRenderingSettingsField(&cachedMatch.fcHinting, renderingFontHints.fcHinting); + cachedMatch.fcHintStyleSet = + getRenderingSettingsField(&cachedMatch.fcHintStyle, renderingFontHints.fcHintStyle); + cachedMatch.fcAntialiasSet = + getRenderingSettingsField(&cachedMatch.fcAntialias, renderingFontHints.fcAntialias); + cachedMatch.fcAutohintSet = + getRenderingSettingsField(&cachedMatch.fcAutohint, renderingFontHints.fcAutohint); + cachedMatch.fcLCDFilterSet = + getRenderingSettingsField(&cachedMatch.fcRGBA, renderingFontHints.fcRGBA); + cachedMatch.fcRGBASet = + getRenderingSettingsField(&cachedMatch.fcLCDFilter, renderingFontHints.fcLCDFilter); + + if (NUM_CACHED_VALUES > 0) { + int nextCacheIdx = scalerInfo->nextCacheIdx; + // Store newly queried value + scalerInfo->cachedMatches[nextCacheIdx] = cachedMatch; + // Update next index + scalerInfo->nextCacheIdx = (nextCacheIdx + 1) % NUM_CACHED_VALUES; + } // else caching is disabled + } else { + if (logFC) fprintf(stderr, " - CACHED"); + } // end invoke/setup cache + + if (logFC) fprintf(stderr, "\nFC_LOG: "); + + FcBool fcHinting = cachedMatch.fcHinting; + FcBool fcHintingSet = cachedMatch.fcHintStyleSet; + + if (logFC && fcHintingSet) fprintf(stderr, "FC_HINTING(%d) ", fcHinting); + + int fcHintStyle = cachedMatch.fcHintStyle; + FcBool fcHintStyleSet = cachedMatch.fcHintStyleSet; + + if (logFC && fcHintStyleSet) { + switch (fcHintStyle) { + case FC_HINT_NONE: + fprintf(stderr, "FC_HINT_NONE "); + break; + case FC_HINT_SLIGHT: + fprintf(stderr, "FC_HINT_SLIGHT "); + break; + case FC_HINT_MEDIUM: + fprintf(stderr, "FC_HINT_MEDIUM "); + break; + case FC_HINT_FULL: + fprintf(stderr, "FC_HINT_FULL "); + break; + default: + fprintf(stderr, "FC_HINT_UNKNOWN "); + break; + } + } + + if (fcHintingSet && !fcHinting) { + fcHintStyleSet = FcTrue; + fcHintStyle = FC_HINT_NONE; + } + + if (fcHintStyleSet && fcHintStyle == FC_HINT_NONE) { + fcHinting = FcFalse; + } + + FcBool fcAntialias = cachedMatch.fcAntialias; + FcBool fcAntialiasSet = cachedMatch.fcAntialiasSet; + + if (logFC) { + switch(context->aaType) { + case TEXT_AA_ON: + fprintf(stderr, "JDK_AA_ON "); + break; + case TEXT_AA_OFF: + fprintf(stderr, "JDK_AA_OFF "); + break; + case TEXT_AA_LCD_HRGB: + fprintf(stderr, "JDK_AA_LCD_HRGB "); + break; + case TEXT_AA_LCD_HBGR: + fprintf(stderr, "JDK_AA_LCD_HBGR "); + break; + default: + fprintf(stderr, "JDK_AA_UNKNOWN "); + break; + } + if (fcAntialiasSet) fprintf(stderr, "FC_ANTIALIAS(%d) ", fcAntialias); + } + + FcBool fcAutohintSet = cachedMatch.fcAutohintSet; + FcBool fcAutohint = cachedMatch.fcAutohint; + + if (logFC && fcAutohintSet) fprintf(stderr, "FC_AUTOHINT(%d) ", fcAutohint); + + if (context->aaType == TEXT_AA_ON || context->colorFont) { // Greyscale AA or color glyph + setupLoadRenderFlags(context, fcHintStyle, fcAutohint, fcAutohintSet, FT_LOAD_DEFAULT, FT_RENDER_MODE_NORMAL); + } else if (context->aaType == TEXT_AA_OFF) { // No AA + setupLoadRenderFlags(context, FC_HINT_FULL, fcAutohint, fcAutohintSet, FT_LOAD_TARGET_MONO, FT_RENDER_MODE_MONO); + } else { + int fcRGBA = FC_RGBA_UNKNOWN; + if (fcAntialiasSet && fcAntialias) { + FcBool fcRGBASet = cachedMatch.fcRGBASet; + int fcRGBA = cachedMatch.fcRGBA; + if (fcRGBASet) { + switch (fcRGBA) { + case FC_RGBA_RGB: + case FC_RGBA_BGR: + if (logFC) fprintf(stderr, fcRGBA == FC_RGBA_RGB ? "FC_RGBA_RGB " : "FC_RGBA_BGR "); + setupLoadRenderFlags(context, fcHintStyle, fcAutohint, fcAutohintSet, + FT_LOAD_TARGET_LCD, FT_RENDER_MODE_LCD); + break; + case FC_RGBA_VRGB: + case FC_RGBA_VBGR: + if (logFC) fprintf(stderr, fcRGBA == FC_RGBA_VRGB ? "FC_RGBA_VRGB " : "FC_RGBA_VBGR "); + setupLoadRenderFlags(context, fcHintStyle, fcAutohint, fcAutohintSet, + FT_LOAD_TARGET_LCD_V, FT_RENDER_MODE_LCD_V); + break; + case FC_RGBA_NONE: + if (logFC) fprintf(stderr, "FC_RGBA_NONE "); + break; + default: + if (logFC) fprintf(stderr, "FC_RGBA_UNKNOWN "); + break; + } + } + } + if (fcRGBA == FC_RGBA_UNKNOWN || fcRGBA == FC_RGBA_NONE) { + + if (context->aaType == TEXT_AA_LCD_HRGB || + context->aaType == TEXT_AA_LCD_HBGR) { + setupLoadRenderFlags(context, fcHintStyle, fcAutohint, fcAutohintSet, + FT_LOAD_TARGET_LCD, FT_RENDER_MODE_LCD); + } else { + setupLoadRenderFlags(context, fcHintStyle, fcAutohint, fcAutohintSet, + FT_LOAD_TARGET_LCD_V, FT_RENDER_MODE_LCD_V); + } + } + } + + int fcLCDFilter = cachedMatch.fcLCDFilter; + FcBool fcLCDFilterSet = cachedMatch.fcLCDFilterSet; + context->lcdFilter = FT_LCD_FILTER_DEFAULT; + if (fcLCDFilterSet) { + switch (fcLCDFilter) { + case FC_LCD_NONE: + if (logFC) fprintf(stderr, "FC_LCD_NONE"); + context->lcdFilter = FT_LCD_FILTER_NONE; + break; + case FC_LCD_LIGHT: + if (logFC) fprintf(stderr, "FC_LCD_LIGHT"); + context->lcdFilter = FT_LCD_FILTER_LIGHT; + break; + case FC_LCD_LEGACY: + if (logFC) fprintf(stderr, "FC_LCD_LEGACY"); + context->lcdFilter = FT_LCD_FILTER_LEGACY; + break; + case FC_LCD_DEFAULT: + if (logFC) fprintf(stderr, "FC_LCD_DEFAULT"); + break; + default: + if (logFC) fprintf(stderr, "FC_LCD_UNKNOWN"); + ; + } + } - if (errCode == 0) { - errCode = FT_Activate_Size(scalerInfo->face->size); + if (logFC) fprintf(stderr, "\n"); + + if (cfontPath) { + (*env)->ReleaseStringUTFChars(env, jfontPath, cfontPath); + } + if (cfontFamilyName) { + (*env)->ReleaseStringUTFChars(env, jfontFamilyName, cfontFamilyName); + } +#endif } FT_Library_SetLcdFilter(scalerInfo->library, FT_LCD_FILTER_DEFAULT); } - return errCode; + return 0; } // using same values as for the transformation matrix -#define OBLIQUE_MODIFIER(y) (context->doItalize ? ((y)*FT_MATRIX_OBLIQUE_XY/FT_MATRIX_ONE) : 0) +#define OBLIQUE_MODIFIER(y) \ + ((context->doItalize && !context->colorFont) ? ((y)*FT_MATRIX_OBLIQUE_XY/FT_MATRIX_ONE) : 0) /* * Class: sun_font_FreetypeFontScaler @@ -640,6 +1128,7 @@ Java_sun_font_FreetypeFontScaler_getFontMetricsNative( (FTScalerInfo*) jlong_to_ptr(pScaler); int errCode; + jlong ascent, descent, height; if (isNullScalerContext(context) || scalerInfo == NULL) { return (*env)->NewObject(env, @@ -648,7 +1137,7 @@ Java_sun_font_FreetypeFontScaler_getFontMetricsNative( f0, f0, f0, f0, f0, f0, f0, f0, f0, f0); } - errCode = setupFTContext(env, font2D, scalerInfo, context); + errCode = setupFTContext(env, font2D, scalerInfo, context, FALSE); if (errCode) { metrics = (*env)->NewObject(env, @@ -680,36 +1169,76 @@ Java_sun_font_FreetypeFontScaler_getFontMetricsNative( (-FTFixedToFloat(context->transform.yx) * (x) + \ FTFixedToFloat(context->transform.yy) * (y)) - /* - * See FreeType source code: src/base/ftobjs.c ft_recompute_scaled_metrics() - * http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1659 - */ - /* ascent */ - ax = 0; - ay = -(jfloat) (FT_MulFixFloatShift6( - ((jlong) scalerInfo->face->ascender), - (jlong) scalerInfo->face->size->metrics.y_scale)); - /* descent */ - dx = 0; - dy = -(jfloat) (FT_MulFixFloatShift6( - ((jlong) scalerInfo->face->descender), - (jlong) scalerInfo->face->size->metrics.y_scale)); - /* baseline */ - bx = by = 0; - - /* leading */ - lx = 0; - ly = (jfloat) (FT_MulFixFloatShift6( - (jlong) scalerInfo->face->height, - (jlong) scalerInfo->face->size->metrics.y_scale)) - + ay - dy; - /* max advance */ - mx = (jfloat) FT26Dot6ToFloat( - scalerInfo->face->size->metrics.max_advance + - OBLIQUE_MODIFIER(scalerInfo->face->size->metrics.height) + - BOLD_MODIFIER(scalerInfo->face->units_per_EM, - scalerInfo->face->size->metrics.y_scale)); - my = 0; + if (context->fixedSizeIndex == -1) { +#if defined(_WIN32) + TT_OS2* info = (TT_OS2*)FT_Get_Sfnt_Table(scalerInfo->face, FT_SFNT_OS2); + if (info) { + ascent = (jlong) (info->usWinAscent); + descent = (jlong) (-info->usWinDescent); + height = (jlong) (info->usWinAscent + info->usWinDescent); + } else +#endif + { + ascent = (jlong)scalerInfo->face->ascender; + descent = (jlong)scalerInfo->face->descender; + height = (jlong) scalerInfo->face->height; + } + /* + * See FreeType source code: + * src/base/ftobjs.c ft_recompute_scaled_metrics() + * http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1659 + */ + /* ascent */ + ax = 0; + ay = -(jfloat) (FT_MulFixFloatShift6( + ascent, + (jlong) scalerInfo->face->size->metrics.y_scale)); + /* descent */ + dx = 0; + dy = -(jfloat) (FT_MulFixFloatShift6( + descent, + (jlong) scalerInfo->face->size->metrics.y_scale)); + /* baseline */ + bx = by = 0; + + /* leading */ + lx = 0; + ly = (jfloat) (FT_MulFixFloatShift6( + height, + (jlong) scalerInfo->face->size->metrics.y_scale)) + + ay - dy; + /* max advance */ + mx = (jfloat) FT26Dot6ToFloat( + scalerInfo->face->size->metrics.max_advance + + OBLIQUE_MODIFIER(scalerInfo->face->size->metrics.height) + + BOLD_MODIFIER(scalerInfo->face->units_per_EM, + scalerInfo->face->size->metrics.y_scale)); + my = 0; + } else { + /* Just manually scale metrics for non-scalable fonts */ + FT_Fixed scale = FT_DivFix(context->ptsz, + scalerInfo->face->available_sizes[context->fixedSizeIndex].size); + /* ascent */ + ax = 0; + ay = -(jfloat) FT_MulFixFloatShift6( + scalerInfo->face->size->metrics.ascender, scale); + /* descent */ + dx = 0; + dy = -(jfloat) FT_MulFixFloatShift6( + scalerInfo->face->size->metrics.descender, scale); + /* baseline */ + bx = by = 0; + + /* leading */ + lx = 0; + ly = (jfloat) FT_MulFixFloatShift6( + scalerInfo->face->size->metrics.height, scale) + ay - dy; + /* max advance */ + /* no bold/italic transformations for non-scalable fonts */ + mx = (jfloat) FT_MulFixFloatShift6( + scalerInfo->face->size->metrics.max_advance, scale); + my = 0; + } metrics = (*env)->NewObject(env, sunFontIDs.strikeMetricsClass, @@ -727,7 +1256,7 @@ static jlong getGlyphImageNativeInternal( JNIEnv *env, jobject scaler, jobject font2D, jlong pScalerContext, jlong pScaler, jint glyphCode, - jboolean renderImage); + jboolean renderImage, jboolean setupContext); /* * Class: sun_font_FreetypeFontScaler @@ -756,7 +1285,7 @@ Java_sun_font_FreetypeFontScaler_getGlyphAdvanceNative( jlong image; image = getGlyphImageNativeInternal( - env, scaler, font2D, pScalerContext, pScaler, glyphCode, JNI_FALSE); + env, scaler, font2D, pScalerContext, pScaler, glyphCode, JNI_FALSE, JNI_TRUE); info = (GlyphInfo*) jlong_to_ptr(image); if (info != NULL) { @@ -782,7 +1311,7 @@ Java_sun_font_FreetypeFontScaler_getGlyphMetricsNative( jlong image = getGlyphImageNativeInternal( env, scaler, font2D, - pScalerContext, pScaler, glyphCode, JNI_FALSE); + pScalerContext, pScaler, glyphCode, JNI_FALSE, JNI_TRUE); info = (GlyphInfo*) jlong_to_ptr(image); if (info != NULL) { @@ -899,6 +1428,200 @@ static void CopyFTSubpixelVToSubpixel(const void* srcImage, int srcRowBytes, } +/* Get enclosing axis-aligned rectangle of transformed bitmap bounds */ +static FT_BBox getTransformedBitmapBoundingBox(FT_GlyphSlot ftglyph, + const FT_Matrix* transform) { + FT_Vector corners[4]; + corners[0].x = corners[2].x = IntToFT26Dot6(ftglyph->bitmap_left); + corners[0].y = corners[1].y = IntToFT26Dot6(ftglyph->bitmap_top); + corners[1].x = corners[3].x = IntToFT26Dot6(ftglyph->bitmap_left + + (FT_Int) ftglyph->bitmap.width); + corners[2].y = corners[3].y = IntToFT26Dot6(ftglyph->bitmap_top - + (FT_Int) ftglyph->bitmap.rows); + + FT_Vector_Transform(corners, transform); + FT_BBox bb = {corners[0].x, corners[0].y, corners[0].x, corners[0].y}; + int i; + for (i = 1; i < 4; i++) { + FT_Vector_Transform(corners + i, transform); + if (corners[i].x < bb.xMin) { + bb.xMin = corners[i].x; + } + if (corners[i].x > bb.xMax) { + bb.xMax = corners[i].x; + } + if (corners[i].y < bb.yMin) { + bb.yMin = corners[i].y; + } + if (corners[i].y > bb.yMax) { + bb.yMax = corners[i].y; + } + } + bb.xMin = FT26Dot6ToInt(bb.xMin); + bb.yMin = FT26Dot6ToInt(bb.yMin); + bb.xMax = FT26Dot6ToIntCeil(bb.xMax); + bb.yMax = FT26Dot6ToIntCeil(bb.yMax); + return bb; +} + +/* Generate SampledBGRABitmap, downscaling original image when necessary. + * It may allocate memory for downscaled image, + * so it must be freed with freeSampledBGRABitmap() */ +static SampledBGRABitmap createSampledBGRABitmap(FT_GlyphSlot ftglyph, + int xDownscale, + int yDownscale) { + SampledBGRABitmap sampledBitmap; + if (xDownscale == 1 && yDownscale == 1) { // No downscale, use original data + sampledBitmap.data = ftglyph->bitmap.buffer; + sampledBitmap.left = ftglyph->bitmap_left; + sampledBitmap.top = ftglyph->bitmap_top; + sampledBitmap.width = ftglyph->bitmap.width; + sampledBitmap.height = ftglyph->bitmap.rows; + sampledBitmap.rowBytes = ftglyph->bitmap.pitch; + sampledBitmap.xDownscale = 1; + sampledBitmap.yDownscale = 1; + } else { // Generate downscaled bitmap + sampledBitmap.left = ftglyph->bitmap_left / xDownscale; + sampledBitmap.top = (ftglyph->bitmap_top + yDownscale - 1) / yDownscale; + sampledBitmap.width = + (ftglyph->bitmap_left + (FT_Pos) ftglyph->bitmap.width - + sampledBitmap.left * xDownscale + xDownscale - 1) / xDownscale; + sampledBitmap.height = + (sampledBitmap.top * yDownscale - ftglyph->bitmap_top + + (FT_Pos) ftglyph->bitmap.rows + yDownscale - 1) / yDownscale; + sampledBitmap.data = + malloc(4 * sampledBitmap.width * sampledBitmap.height); + sampledBitmap.rowBytes = sampledBitmap.width * 4; + sampledBitmap.xDownscale = xDownscale; + sampledBitmap.yDownscale = yDownscale; + int xOffset = sampledBitmap.left * xDownscale - ftglyph->bitmap_left; + int yOffset = ftglyph->bitmap_top - sampledBitmap.top * yDownscale; + int x, y; + for (y = 0; y < sampledBitmap.height; y++) { + for (x = 0; x < sampledBitmap.width; x++) { + // Average pixels + int b = 0, g = 0, r = 0, a = 0; + int xFrom = x * xDownscale + xOffset, + yFrom = y * yDownscale + yOffset, + xTo = xFrom + xDownscale, + yTo = yFrom + yDownscale; + if (xFrom < 0) { + xFrom = 0; + } + if (xTo > (int) ftglyph->bitmap.width) { + xTo = (int) ftglyph->bitmap.width; + } + if (yFrom < 0) { + yFrom = 0; + } + if (yTo > (int) ftglyph->bitmap.rows) { + yTo = (int) ftglyph->bitmap.rows; + } + int i, j; + for (j = yFrom; j < yTo; j++) { + for (i = xFrom; i < xTo; i++) { + int offset = j * ftglyph->bitmap.pitch + i * 4; + b += ftglyph->bitmap.buffer[offset + 0]; + g += ftglyph->bitmap.buffer[offset + 1]; + r += ftglyph->bitmap.buffer[offset + 2]; + a += ftglyph->bitmap.buffer[offset + 3]; + } + } + int offset = y * sampledBitmap.rowBytes + x * 4; + sampledBitmap.data[offset + 0] = b / xDownscale / yDownscale; + sampledBitmap.data[offset + 1] = g / xDownscale / yDownscale; + sampledBitmap.data[offset + 2] = r / xDownscale / yDownscale; + sampledBitmap.data[offset + 3] = a / xDownscale / yDownscale; + } + } + } + return sampledBitmap; +} +static void freeSampledBGRABitmap(SampledBGRABitmap* bitmap) { + if (bitmap->xDownscale != 1 || bitmap->yDownscale != 1) { + free(bitmap->data); + } +} +/* Get color (returned via b, g, r and a variables, [0-256)) + * from specific pixel in bitmap. + * Returns black-transparent (0,0,0,0) color when sampling out of bounds */ +static void sampleBGRABitmapGlyph(int* b, int* g, int* r, int* a, + const SampledBGRABitmap* bitmap, + int x, int y) { + int column = x - bitmap->left, row = bitmap->top - y; + if (column < 0 || column >= bitmap->width || + row < 0 || row >= bitmap->height) { + *b = *g = *r = *a = 0; + } else { + int offset = row * bitmap->rowBytes + column * 4; + *b = bitmap->data[offset + 0]; + *g = bitmap->data[offset + 1]; + *r = bitmap->data[offset + 2]; + *a = bitmap->data[offset + 3]; + } +} +static int bilinearColorMix(int c00, int c10, int c01, int c11, + float x, float y) { + float top = (float) c00 + x * (float) (c10 - c00); + float bottom = (float) c01 + x * (float) (c11 - c01); + return (int) (top + y * (bottom - top)); +} +/* Transform ftglyph into pre-allocated glyphInfo with transform matrix */ +static void transformBGRABitmapGlyph(FT_GlyphSlot ftglyph, GlyphInfo* glyphInfo, + const FT_Matrix* transform, + const FT_BBox* dstBoundingBox, + const jboolean linear) { + FT_Matrix inv = *transform; + FT_Matrix_Invert(&inv); // Transformed -> original bitmap space + int invScaleX = (int) sqrt(FTFixedToFloat(FT_MulFix(inv.xx, inv.xx) + + FT_MulFix(inv.xy, inv.xy))); + int invScaleY = (int) sqrt(FTFixedToFloat(FT_MulFix(inv.yx, inv.yx) + + FT_MulFix(inv.yy, inv.yy))); + if (invScaleX < 1) { + invScaleX = 1; + } + if (invScaleY < 1) { + invScaleY = 1; + } + SampledBGRABitmap sampledBitmap = + createSampledBGRABitmap(ftglyph, invScaleX, invScaleY); + int x, y; + for (y = 0; y < glyphInfo->height; y++) { + for (x = 0; x < glyphInfo->width; x++) { + FT_Vector position = { + IntToFT26Dot6(dstBoundingBox->xMin + x), + IntToFT26Dot6(dstBoundingBox->yMax - y) + }; + FT_Vector_Transform(&position, &inv); + int sampleX = FT26Dot6ToInt(position.x / invScaleX), + sampleY = FT26Dot6ToInt(position.y / invScaleY); + int b, g, r, a; + sampleBGRABitmapGlyph(&b, &g, &r, &a, + &sampledBitmap, sampleX, sampleY); + if (linear) { + int bX, gX, rX, aX, bY, gY, rY, aY, bXY, gXY, rXY, aXY; + sampleBGRABitmapGlyph(&bX, &gX, &rX, &aX, + &sampledBitmap, sampleX + 1, sampleY); + sampleBGRABitmapGlyph(&bY, &gY, &rY, &aY, + &sampledBitmap, sampleX, sampleY + 1); + sampleBGRABitmapGlyph(&bXY, &gXY, &rXY, &aXY, + &sampledBitmap, sampleX + 1, sampleY + 1); + float fractX = FT26Dot6ToFloat((position.x / invScaleX) & 63), + fractY = FT26Dot6ToFloat((position.y / invScaleY) & 63); + b = bilinearColorMix(b, bX, bY, bXY, fractX, fractY); + g = bilinearColorMix(g, gX, gY, gXY, fractX, fractY); + r = bilinearColorMix(r, rX, rY, rXY, fractX, fractY); + a = bilinearColorMix(a, aX, aY, aXY, fractX, fractY); + } + glyphInfo->image[y*glyphInfo->rowBytes + x * 4 + 0] = b; + glyphInfo->image[y*glyphInfo->rowBytes + x * 4 + 1] = g; + glyphInfo->image[y*glyphInfo->rowBytes + x * 4 + 2] = r; + glyphInfo->image[y*glyphInfo->rowBytes + x * 4 + 3] = a; + } + } + freeSampledBGRABitmap(&sampledBitmap); +} + /* JDK does not use glyph images for fonts with a * pixel size > 100 (see THRESHOLD in OutlineTextRenderer.java) * so if the glyph bitmap image dimension is > 1024 pixels, @@ -918,35 +1641,70 @@ Java_sun_font_FreetypeFontScaler_getGlyphImageNative( return getGlyphImageNativeInternal( env, scaler, font2D, - pScalerContext, pScaler, glyphCode, JNI_TRUE); + pScalerContext, pScaler, glyphCode, JNI_TRUE, JNI_TRUE); } static jlong getGlyphImageNativeInternal( JNIEnv *env, jobject scaler, jobject font2D, jlong pScalerContext, jlong pScaler, jint glyphCode, - jboolean renderImage) { + jboolean renderImage, jboolean setupContext) { static int PADBYTES = 3; int error, imageSize; UInt16 width, height, rowBytes; GlyphInfo *glyphInfo; - int renderFlags = FT_LOAD_DEFAULT, target; FT_GlyphSlot ftglyph; + FT_Library library; FTScalerContext* context = (FTScalerContext*) jlong_to_ptr(pScalerContext); FTScalerInfo *scalerInfo = (FTScalerInfo*) jlong_to_ptr(pScaler); + if (logFFS) { + fprintf(stderr, "FFS_LOG: getGlyphImageNative '%c'(%d) ", + (glyphCode >= 0x20 && glyphCode <=0x7E)? glyphCode : ' ', + glyphCode); + } + if (isNullScalerContext(context) || scalerInfo == NULL) { + if (logFFS) fprintf(stderr, "FFS_LOG: NULL context or info\n"); return ptr_to_jlong(getNullGlyphImage()); } + else if (logFFS){ + char* aaTypeStr; + switch (context->aaType) { + case TEXT_AA_ON: + aaTypeStr = "AA_ON"; + break; + case TEXT_AA_OFF: + aaTypeStr = "AA_OFF"; + break; + case TEXT_AA_LCD_HBGR: + aaTypeStr = "AA_LCD_HBGR"; + break; + case TEXT_AA_LCD_VBGR: + aaTypeStr = "AA_LCD_VBGR"; + break; + case TEXT_AA_LCD_HRGB: + aaTypeStr = "AA_LCD_HRGB"; + break; + default: + aaTypeStr = "AA_UNKNOWN"; + break; + } + fprintf(stderr, "%s size=%.2f\n", aaTypeStr, + ((double)context->ptsz)/64.0); + } - error = setupFTContext(env, font2D, scalerInfo, context); - if (error) { - invalidateJavaScaler(env, scaler, scalerInfo); - return ptr_to_jlong(getNullGlyphImage()); + if (setupContext) { + error = setupFTContext(env, font2D, scalerInfo, context, TRUE); + if (error) { + if (logFFS) fprintf(stderr, "FFS_LOG: Cannot setup FT context\n"); + invalidateJavaScaler(env, scaler, scalerInfo); + return ptr_to_jlong(getNullGlyphImage()); + } } /* @@ -957,11 +1715,16 @@ static jlong * which did not use freetype. */ if (context->aaType == TEXT_AA_ON && context->fmType == TEXT_FM_ON) { - renderFlags |= FT_LOAD_NO_HINTING; - } + context->loadFlags |= FT_LOAD_NO_HINTING; + } - if (!context->useSbits) { - renderFlags |= FT_LOAD_NO_BITMAP; + if (context->colorFont) { + context->loadFlags |= FT_LOAD_COLOR; + } + + /* Don't disable bitmaps for color glyphs */ + if (!context->useSbits && !context->colorFont) { + context->loadFlags |= FT_LOAD_NO_BITMAP; } /* NB: in case of non identity transform @@ -969,36 +1732,44 @@ static jlong and apply it explicitly after hinting is performed. Or we can disable hinting. */ - /* select appropriate hinting mode */ - if (context->aaType == TEXT_AA_OFF) { - target = FT_LOAD_TARGET_MONO; - } else if (context->aaType == TEXT_AA_ON) { - target = FT_LOAD_TARGET_NORMAL; - } else if (context->aaType == TEXT_AA_LCD_HRGB || - context->aaType == TEXT_AA_LCD_HBGR) { - target = FT_LOAD_TARGET_LCD; - } else { - target = FT_LOAD_TARGET_LCD_V; - } - renderFlags |= target; - - error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderFlags); - if (error) { + if (FT_Load_Glyph(scalerInfo->face, glyphCode, context->loadFlags)) { //do not destroy scaler yet. //this can be problem of particular context (e.g. with bad transform) return ptr_to_jlong(getNullGlyphImage()); } ftglyph = scalerInfo->face->glyph; + library = ftglyph->library; + FT_Library_SetLcdFilter_Proxy(library, context->lcdFilter); + + /* After call to FT_Render_Glyph, glyph format will be changed from + * FT_GLYPH_FORMAT_OUTLINE to FT_GLYPH_FORMAT_BITMAP, so save this value */ + int outlineGlyph = ftglyph->format == FT_GLYPH_FORMAT_OUTLINE; /* apply styles */ - if (context->doBold) { /* if bold style */ + if (context->doBold && outlineGlyph && !context->colorFont) { /* if bold style */ GlyphSlot_Embolden(ftglyph, context->transform); } /* generate bitmap if it is not done yet e.g. if algorithmic styling is performed and style was added to outline */ - if (renderImage && (ftglyph->format == FT_GLYPH_FORMAT_OUTLINE)) { + int subpixelGlyph = FALSE; + int subpixelResolutionX = 1; + int subpixelResolutionY = 1; + if (renderImage && outlineGlyph) { + /* We can create an extended glyph when rendering with grayscale AA thus + * increasing subpixel resolution & reducing glyph spacing issues. + * We do this by rendering the glyph multiple times with + * different subpixel offsets, which results in + * subpixelResolutionX * subpixelResolutionY images per glyph. */ + if (!context->colorFont && ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY && + context->aaType == TEXT_AA_ON && context->fmType == TEXT_FM_ON) { + subpixelResolutionX = subpixelGlyphResolution.x; + subpixelResolutionY = subpixelGlyphResolution.y; + if (subpixelResolutionX > 1 || subpixelResolutionY > 1) { + subpixelGlyph = TRUE; + } + } FT_BBox bbox; FT_Outline_Get_CBox(&(ftglyph->outline), &bbox); int w = (int)((bbox.xMax>>6)-(bbox.xMin>>6)); @@ -1007,32 +1778,62 @@ static jlong glyphInfo = getNullGlyphImage(); return ptr_to_jlong(glyphInfo); } - error = FT_Render_Glyph(ftglyph, FT_LOAD_TARGET_MODE(target)); + error = FT_Render_Glyph(ftglyph, context->renderFlags); if (error != 0) { return ptr_to_jlong(getNullGlyphImage()); } } + FT_Fixed manualScale = context->fixedSizeIndex == -1 ? ftFixed1 : FT_DivFix( + context->ptsz, scalerInfo->face->available_sizes[context->fixedSizeIndex].size); + FT_Matrix manualTransform; + FT_BBox manualTransformBoundingBox; + int topLeftX, topLeftY; if (renderImage) { - width = (UInt16) ftglyph->bitmap.width; - rowBytes = width; + if (context->fixedSizeIndex == -1) { + width = (UInt16) ftglyph->bitmap.width + subpixelGlyph; + height = (UInt16) ftglyph->bitmap.rows + subpixelGlyph; + topLeftX = ftglyph->bitmap_left; + topLeftY = -ftglyph->bitmap_top; + } else { + /* Fixed size glyph, prepare matrix and + * bounding box for manual transformation */ + manualTransform.xx = FT_MulFix(context->transform.xx, manualScale); + manualTransform.xy = FT_MulFix(context->transform.xy, manualScale); + manualTransform.yx = FT_MulFix(context->transform.yx, manualScale); + manualTransform.yy = FT_MulFix(context->transform.yy, manualScale); + manualTransformBoundingBox = + getTransformedBitmapBoundingBox(ftglyph, &manualTransform); + width = (UInt16) (manualTransformBoundingBox.xMax - + manualTransformBoundingBox.xMin); + height = (UInt16) (manualTransformBoundingBox.yMax - + manualTransformBoundingBox.yMin); + topLeftX = manualTransformBoundingBox.xMin; + topLeftY = -manualTransformBoundingBox.yMax; + } + if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) { + glyphInfo = getNullGlyphImage(); + return ptr_to_jlong(glyphInfo); + } if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD) { rowBytes = PADBYTES + width + PADBYTES; + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) { + rowBytes = width * 4; + } else { + rowBytes = width; } - height = (UInt16) ftglyph->bitmap.rows; - if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) { - glyphInfo = getNullGlyphImage(); - return ptr_to_jlong(glyphInfo); - } } else { width = 0; rowBytes = 0; height = 0; + topLeftX = 0; + topLeftY = 0; } imageSize = rowBytes*height; - glyphInfo = (GlyphInfo*) calloc(sizeof(GlyphInfo) + imageSize, 1); + glyphInfo = (GlyphInfo*) calloc(sizeof(GlyphInfo) + + imageSize * subpixelResolutionX * subpixelResolutionY, 1); if (glyphInfo == NULL) { glyphInfo = getNullGlyphImage(); return ptr_to_jlong(glyphInfo); @@ -1042,21 +1843,31 @@ static jlong glyphInfo->rowBytes = rowBytes; glyphInfo->width = width; glyphInfo->height = height; + glyphInfo->topLeftX = (float) topLeftX; + glyphInfo->topLeftY = (float) topLeftY; + glyphInfo->subpixelResolutionX = subpixelResolutionX; + glyphInfo->subpixelResolutionY = subpixelResolutionY; + + if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) { + glyphInfo->format = sun_font_StrikeCache_PIXEL_FORMAT_BGRA; + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD || + ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD_V) { + glyphInfo->format = sun_font_StrikeCache_PIXEL_FORMAT_LCD; + } else { + glyphInfo->format = sun_font_StrikeCache_PIXEL_FORMAT_GREYSCALE; + } if (renderImage) { - glyphInfo->topLeftX = (float) ftglyph->bitmap_left; - glyphInfo->topLeftY = (float) -ftglyph->bitmap_top; - if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD && width > 0) { glyphInfo->width = width/3; glyphInfo->topLeftX -= 1; - glyphInfo->width += 1; + glyphInfo->width += 2; } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD_V) { glyphInfo->height = glyphInfo->height/3; } } - if (context->fmType == TEXT_FM_ON) { + if (context->fmType == TEXT_FM_ON && outlineGlyph) { float advh = FTFixedToFloat(ftglyph->linearHoriAdvance); glyphInfo->advanceX = (float) (advh * FTFixedToFloat(context->transform.xx)); @@ -1064,14 +1875,18 @@ static jlong (float) - (advh * FTFixedToFloat(context->transform.yx)); } else { if (!ftglyph->advance.y) { - glyphInfo->advanceX = FT26Dot6ToFloat(ftglyph->advance.x); + glyphInfo->advanceX = FT26Dot6ToIntRound( + FT_MulFix(ftglyph->advance.x, manualScale)); glyphInfo->advanceY = 0; } else if (!ftglyph->advance.x) { glyphInfo->advanceX = 0; - glyphInfo->advanceY = FT26Dot6ToFloat(-ftglyph->advance.y); + glyphInfo->advanceY = FT26Dot6ToIntRound( + -FT_MulFix(ftglyph->advance.y, manualScale)); } else { - glyphInfo->advanceX = FT26Dot6ToFloat(ftglyph->advance.x); - glyphInfo->advanceY = FT26Dot6ToFloat(-ftglyph->advance.y); + glyphInfo->advanceX = FT26Dot6ToFloat( + FT_MulFix(ftglyph->advance.x, manualScale)); + glyphInfo->advanceY = FT26Dot6ToFloat( + -FT_MulFix(ftglyph->advance.y, manualScale)); } } @@ -1081,46 +1896,94 @@ static jlong glyphInfo->image = (unsigned char*) glyphInfo + sizeof(GlyphInfo); //convert result to output format //output format is either 3 bytes per pixel (for subpixel modes) + //4 bytes per pixel for BGRA glyphs // or 1 byte per pixel for AA and B&W - if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO) { - /* convert from 8 pixels per byte to 1 byte per pixel */ - CopyBW2Grey8(ftglyph->bitmap.buffer, - ftglyph->bitmap.pitch, - (void *) glyphInfo->image, - width, - width, - height); - } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) { - /* byte per pixel to byte per pixel => just copy */ - memcpy(glyphInfo->image, ftglyph->bitmap.buffer, imageSize); - } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY4) { - /* 4 bits per pixel to byte per pixel */ - CopyGrey4ToGrey8(ftglyph->bitmap.buffer, + if (subpixelGlyph) { + // Copy first image with zero subpixel offset + unsigned int i; + for (i = 0; i < (unsigned int) ftglyph->bitmap.rows; i++) { + const UInt8* src = ftglyph->bitmap.buffer + i * ftglyph->bitmap.pitch; + UInt8* dst = glyphInfo->image + i * rowBytes; + memcpy(dst, src, ftglyph->bitmap.width); + } + // Render remaining images + int sx = (1 << 6) / subpixelResolutionX, sy = (1 << 6) / subpixelResolutionY; + FT_Bitmap bitmap = ftglyph->bitmap; + bitmap.rows = height; + bitmap.pitch = bitmap.width = width; + int prevX = ftglyph->bitmap_left * (1 << 6), prevY = (ftglyph->bitmap_top - height) * (1 << 6); + int x, y; + for (y = 0; y < subpixelResolutionY; y++) { + for (x = (y == 0); x < subpixelResolutionX; x++) { + bitmap.buffer = glyphInfo->image + imageSize * (subpixelResolutionX * y + x); + int newX = sx * x, newY = -sy * y; + FT_Outline_Translate(&ftglyph->outline, newX - prevX, newY - prevY); + error = FT_Outline_Get_Bitmap(library, &ftglyph->outline, &bitmap); + if (error) { + // In case of error, copy first image + memcpy(bitmap.buffer, glyphInfo->image, imageSize); + } + prevX = newX; + prevY = newY; + } + } + } else if (context->fixedSizeIndex == -1) { + // Standard format conversion without image transformation + if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO) { + /* convert from 8 pixels per byte to 1 byte per pixel */ + CopyBW2Grey8(ftglyph->bitmap.buffer, ftglyph->bitmap.pitch, (void *) glyphInfo->image, width, width, height); - } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD) { - /* 3 bytes per pixel to 3 bytes per pixel */ - CopyFTSubpixelToSubpixel(ftglyph->bitmap.buffer, - ftglyph->bitmap.pitch, - (void *) (glyphInfo->image+PADBYTES), - rowBytes, - width, - height); - } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD_V) { - /* 3 bytes per pixel to 3 bytes per pixel */ - CopyFTSubpixelVToSubpixel(ftglyph->bitmap.buffer, - ftglyph->bitmap.pitch, - (void *) glyphInfo->image, - width*3, - width, - height); - glyphInfo->rowBytes *=3; + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) { + /* byte per pixel to byte per pixel => just copy */ + memcpy(glyphInfo->image, ftglyph->bitmap.buffer, imageSize); + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY4) { + /* 4 bits per pixel to byte per pixel */ + CopyGrey4ToGrey8(ftglyph->bitmap.buffer, + ftglyph->bitmap.pitch, + (void *) glyphInfo->image, + width, + width, + height); + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD) { + /* 3 bytes per pixel to 3 bytes per pixel */ + CopyFTSubpixelToSubpixel(ftglyph->bitmap.buffer, + ftglyph->bitmap.pitch, + (void *) (glyphInfo->image+PADBYTES), + rowBytes, + width, + height); + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD_V) { + /* 3 bytes per pixel to 3 bytes per pixel */ + CopyFTSubpixelVToSubpixel(ftglyph->bitmap.buffer, + ftglyph->bitmap.pitch, + (void *) glyphInfo->image, + width*3, + width, + height); + glyphInfo->rowBytes *=3; + } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) { + /* 4 bytes per pixel to 4 bytes per pixel => just copy */ + memcpy(glyphInfo->image, ftglyph->bitmap.buffer, imageSize); + } else { + free(glyphInfo); + glyphInfo = getNullGlyphImage(); + } } else { - free(glyphInfo); - glyphInfo = getNullGlyphImage(); + // Here we have to transform image manually + // Only BGRA format is supported (should be enough) + if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) { + transformBGRABitmapGlyph(ftglyph, glyphInfo, + &manualTransform, + &manualTransformBoundingBox, + context->aaType != TEXT_AA_OFF); + } else { + free(glyphInfo); + glyphInfo = getNullGlyphImage(); + } } } @@ -1140,7 +2003,7 @@ Java_sun_font_FreetypeFontScaler_disposeNativeScaler( /* Freetype functions *may* cause callback to java that can use cached values. Make sure our cache is up to date. NB: scaler context is not important at this point, can use NULL. */ - int errCode = setupFTContext(env, font2D, scalerInfo, NULL); + int errCode = setupFTContext(env, font2D, scalerInfo, NULL, FALSE); if (errCode) { return; } @@ -1203,7 +2066,7 @@ Java_sun_font_FreetypeFontScaler_getGlyphCodeNative( /* Freetype functions *may* cause callback to java that can use cached values. Make sure our cache is up to date. Scaler context is not important here, can use NULL. */ - errCode = setupFTContext(env, font2D, scalerInfo, NULL); + errCode = setupFTContext(env, font2D, scalerInfo, NULL, FALSE); if (errCode) { return 0; } @@ -1214,34 +2077,26 @@ Java_sun_font_FreetypeFontScaler_getGlyphCodeNative( #define FloatToF26Dot6(x) ((unsigned int) ((x)*64)) -static FT_Outline* getFTOutline(JNIEnv* env, jobject font2D, - FTScalerContext *context, FTScalerInfo* scalerInfo, - jint glyphCode, jfloat xpos, jfloat ypos) { - int renderFlags; +static FT_Outline* getFTOutlineNoSetup(FTScalerContext *context, FTScalerInfo* scalerInfo, + jint glyphCode, jfloat xpos, jfloat ypos) { + FT_Error error; FT_GlyphSlot ftglyph; + FT_Int32 loadFlags; - if (glyphCode >= INVISIBLE_GLYPHS || - isNullScalerContext(context) || scalerInfo == NULL) { - return NULL; - } + // We cannot get an outline from bitmap version of glyph + loadFlags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP; - error = setupFTContext(env, font2D, scalerInfo, context); - if (error) { - return NULL; - } - - renderFlags = FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP; - - error = FT_Load_Glyph(scalerInfo->face, glyphCode, renderFlags); + error = FT_Load_Glyph(scalerInfo->face, glyphCode, loadFlags); if (error) { return NULL; } ftglyph = scalerInfo->face->glyph; + int outlineGlyph = ftglyph->format == FT_GLYPH_FORMAT_OUTLINE; /* apply styles */ - if (context->doBold) { /* if bold style */ + if (context->doBold && outlineGlyph && !context->colorFont) { /* if bold style */ GlyphSlot_Embolden(ftglyph, context->transform); } @@ -1252,6 +2107,24 @@ static FT_Outline* getFTOutline(JNIEnv* env, jobject font2D, return &ftglyph->outline; } +static FT_Outline* getFTOutline(JNIEnv* env, jobject font2D, + FTScalerContext *context, FTScalerInfo* scalerInfo, + jint glyphCode, jfloat xpos, jfloat ypos) { + FT_Error error; + + if (glyphCode >= INVISIBLE_GLYPHS || + isNullScalerContext(context) || scalerInfo == NULL) { + return NULL; + } + + error = setupFTContext(env, font2D, scalerInfo, context, TRUE); + if (error) { + return NULL; + } + + return getFTOutlineNoSetup(context, scalerInfo, glyphCode, xpos, ypos); +} + #define F26Dot6ToFloat(n) (((float)(n))/((float) 64)) /* Types of GeneralPath segments. @@ -1408,19 +2281,13 @@ static void freeGP(GPData* gpdata) { } } -static jobject getGlyphGeneralPath(JNIEnv* env, jobject font2D, - FTScalerContext *context, FTScalerInfo *scalerInfo, - jint glyphCode, jfloat xpos, jfloat ypos) { +static jobject outlineToGeneralPath(JNIEnv* env, FT_Outline* outline) { - FT_Outline* outline; jobject gp = NULL; jbyteArray types; jfloatArray coords; GPData gpdata; - outline = getFTOutline(env, font2D, context, scalerInfo, - glyphCode, xpos, ypos); - if (outline == NULL || outline->n_points == 0) { return gp; } @@ -1458,6 +2325,78 @@ static jobject getGlyphGeneralPath(JNIEnv* env, jobject font2D, return gp; } +static jboolean addColorLayersRenderData(JNIEnv* env, FTScalerContext *context, + FTScalerInfo* scalerInfo, jint glyphCode, + jfloat xpos, jfloat ypos, jobject result) { + + if (!COLOR_OUTLINES_AVAILABLE) return JNI_FALSE; + FT_Error error; + + FT_Color* colors; + error = FT_Palette_Select(scalerInfo->face, 0, &colors); + if (error) { + return JNI_FALSE; + } + + FT_LayerIterator iterator; + iterator.p = NULL; + FT_UInt glyphIndex, colorIndex; + if (!FT_Get_Color_Glyph_Layer(scalerInfo->face, glyphCode, + &glyphIndex, &colorIndex, &iterator)) { + return JNI_FALSE; + } + (*env)->CallVoidMethod(env, result, sunFontIDs.glyphRenderDataSetColorLayersListMID, iterator.num_layers); + do { + FT_Outline* outline = getFTOutlineNoSetup(context, scalerInfo, glyphIndex, xpos, ypos); + jobject gp = outlineToGeneralPath(env, outline); + + if (colorIndex == 0xFFFF) { + (*env)->CallVoidMethod(env, result, sunFontIDs.glyphRenderDataAddColorLayerFGMID, gp); + } else { + (*env)->CallVoidMethod(env, result, sunFontIDs.glyphRenderDataAddColorLayerMID, + colors[colorIndex].red, colors[colorIndex].green, + colors[colorIndex].blue, colors[colorIndex].alpha, gp); + } + } while(FT_Get_Color_Glyph_Layer(scalerInfo->face, glyphCode, + &glyphIndex, &colorIndex, &iterator)); + + return JNI_TRUE; +} + +static void addBitmapRenderData(JNIEnv *env, jobject scaler, jobject font2D, + FTScalerContext *context, FTScalerInfo* scalerInfo, + jint glyphCode, jfloat xpos, jfloat ypos, jobject result) { + GlyphInfo* glyphInfo = (GlyphInfo*) jlong_to_ptr(getGlyphImageNativeInternal( + env, scaler, font2D, + ptr_to_jlong(context), ptr_to_jlong(scalerInfo), + glyphCode, JNI_FALSE, JNI_FALSE)); + + FT_GlyphSlot ftglyph = scalerInfo->face->glyph; + + if (ftglyph->bitmap.pixel_mode != FT_PIXEL_MODE_BGRA) { + return; + } + + int pitch = ftglyph->bitmap.pitch / 4; + int size = pitch * ftglyph->bitmap.rows; + jintArray array = (*env)->NewIntArray(env, size); + (*env)->SetIntArrayRegion(env, array, 0, size, (jint*) ftglyph->bitmap.buffer); + + double bitmapSize = (double) scalerInfo->face->available_sizes[context->fixedSizeIndex].size; + double scale = (double) context->ptsz / bitmapSize / (double) (ftFixed1); + double tx = ftglyph->bitmap_left + xpos * bitmapSize / (double) context->ptsz; + double ty = -ftglyph->bitmap_top + ypos * bitmapSize / (double) context->ptsz; + + jdouble m00 = (jdouble) context->transform.xx * scale, m10 = (jdouble) context->transform.xy * scale; + jdouble m01 = (jdouble) context->transform.yx * scale, m11 = (jdouble) context->transform.yy * scale; + jdouble m02 = m00 * tx + m01 * ty, m12 = m10 * tx + m11 * ty; + + free(glyphInfo); + (*env)->CallVoidMethod(env, result, sunFontIDs.glyphRenderDataAddBitmapMID, + m00, m10, m01, m11, m02, m12, + ftglyph->bitmap.width, ftglyph->bitmap.rows, pitch, 2, array); +} + /* * Class: sun_font_FreetypeFontScaler * Method: getGlyphOutlineNative @@ -1472,13 +2411,10 @@ Java_sun_font_FreetypeFontScaler_getGlyphOutlineNative( (FTScalerContext*) jlong_to_ptr(pScalerContext); FTScalerInfo* scalerInfo = (FTScalerInfo *) jlong_to_ptr(pScaler); - jobject gp = getGlyphGeneralPath(env, - font2D, - context, - scalerInfo, - glyphCode, - xpos, - ypos); + FT_Outline* outline = getFTOutline(env, font2D, context, + scalerInfo, glyphCode, + xpos, ypos); + jobject gp = outlineToGeneralPath(env, outline); if (gp == NULL) { /* can be legal */ gp = (*env)->NewObject(env, sunFontIDs.gpClass, @@ -1537,93 +2473,40 @@ Java_sun_font_FreetypeFontScaler_getGlyphOutlineBoundsNative( /* * Class: sun_font_FreetypeFontScaler - * Method: getGlyphVectorOutlineNative - * Signature: (Lsun/font/Font2D;J[IIFF)Ljava/awt/geom/GeneralPath; + * Method: getGlyphRenderDataNative + * Signature: (Lsun/font/Font2D;JIFFLsun/font/GlyphRenderData;)V */ -JNIEXPORT jobject -JNICALL -Java_sun_font_FreetypeFontScaler_getGlyphVectorOutlineNative( - JNIEnv *env, jobject scaler, jobject font2D, - jlong pScalerContext, jlong pScaler, - jintArray glyphArray, jint numGlyphs, jfloat xpos, jfloat ypos) { - - FT_Outline* outline; - jobject gp = NULL; - jbyteArray types; - jfloatArray coords; - GPData gpdata; - int i; - jint *glyphs; +JNIEXPORT void JNICALL +Java_sun_font_FreetypeFontScaler_getGlyphRenderDataNative( + JNIEnv *env, jobject scaler, jobject font2D, jlong pScalerContext, + jlong pScaler, jint glyphCode, jfloat xpos, jfloat ypos, jobject result) { FTScalerContext *context = - (FTScalerContext*) jlong_to_ptr(pScalerContext); - FTScalerInfo *scalerInfo = - (FTScalerInfo*) jlong_to_ptr(pScaler); + (FTScalerContext*) jlong_to_ptr(pScalerContext); + FTScalerInfo* scalerInfo = (FTScalerInfo *) jlong_to_ptr(pScaler); - glyphs = NULL; - if (numGlyphs > 0 && 0xffffffffu / sizeof(jint) >= (unsigned int)numGlyphs) { - glyphs = (jint*) malloc(numGlyphs*sizeof(jint)); - } - if (glyphs == NULL) { - // We reach here if: - // 1. numGlyphs <= 0, - // 2. overflow check failed, or - // 3. malloc failed. - gp = (*env)->NewObject(env, sunFontIDs.gpClass, sunFontIDs.gpCtrEmpty); - return gp; + if (glyphCode >= INVISIBLE_GLYPHS || + isNullScalerContext(context) || scalerInfo == NULL) { + return; } - (*env)->GetIntArrayRegion(env, glyphArray, 0, numGlyphs, glyphs); - - gpdata.numCoords = 0; - for (i=0; i= INVISIBLE_GLYPHS) { - continue; - } - outline = getFTOutline(env, - font2D, - context, - scalerInfo, - glyphs[i], - xpos, ypos); - - if (outline == NULL || outline->n_points == 0) { - continue; - } - - gpdata.pointTypes = NULL; - gpdata.pointCoords = NULL; - if (!allocateSpaceForGP(&gpdata, outline->n_points, - outline->n_contours)) { - break; - } - - addToGP(&gpdata, outline); + FT_Error error = setupFTContext(env, font2D, scalerInfo, context, TRUE); + if (error) { + return; } - free(glyphs); - if (gpdata.numCoords != 0) { - types = (*env)->NewByteArray(env, gpdata.numTypes); - coords = (*env)->NewFloatArray(env, gpdata.numCoords); - - if (types && coords) { - (*env)->SetByteArrayRegion(env, types, 0, - gpdata.numTypes, gpdata.pointTypes); - (*env)->SetFloatArrayRegion(env, coords, 0, - gpdata.numCoords, gpdata.pointCoords); - - gp=(*env)->NewObject(env, - sunFontIDs.gpClass, - sunFontIDs.gpCtr, - gpdata.wr, - types, - gpdata.numTypes, - coords, - gpdata.numCoords); - return gp; - } + if (context->fixedSizeIndex == -1) { + if (!context->colorFont || + !addColorLayersRenderData(env, context, scalerInfo, glyphCode, xpos, ypos, result)) { + FT_Outline* outline = getFTOutlineNoSetup(context, scalerInfo, glyphCode, xpos, ypos); + jobject gp = outlineToGeneralPath(env, outline); + if (gp != NULL) { + (*env)->SetObjectField(env, result, sunFontIDs.glyphRenderDataOutline, gp); + } + } + } else { + addBitmapRenderData(env, scaler, font2D, context, scalerInfo, glyphCode, xpos, ypos, result); } - return (*env)->NewObject(env, sunFontIDs.gpClass, sunFontIDs.gpCtrEmpty); } JNIEXPORT jlong JNICALL @@ -1667,4 +2550,4 @@ Java_sun_font_FreetypeFontScaler_getGlyphPointNative( return (*env)->NewObject(env, sunFontIDs.pt2DFloatClass, sunFontIDs.pt2DFloatCtr, x, y); -} +} \ No newline at end of file diff --git a/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h b/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h index 58d39816b759..89f291dea0ac 100644 --- a/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h +++ b/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h @@ -57,7 +57,7 @@ hb_font_t* jdk_font_create_hbp( typedef int (*store_layoutdata_func_t) - (int slot, int baseIndex, int offset, + (int slot, int slotShift, int baseIndex, int offset, float startX, float startY, float devScale, int charCount, int glyphCount, hb_glyph_info_t *glyphInfo, hb_glyph_position_t *glyphPos); @@ -75,8 +75,10 @@ JDKEXPORT int jdk_hb_shape( int baseIndex, // used only to store results. float startX, // used only to store results. float startY, // used only to store results. - int flags, + int ltrDirection, + const char *features, int slot, // used only to store results + int slotShift, // used only to store results // Provide upcall Method handles that harfbuzz needs hb_font_funcs_t* font_funcs, store_layoutdata_func_t store_layout_data_upcall diff --git a/src/java.desktop/share/native/libfontmanager/sunFont.c b/src/java.desktop/share/native/libfontmanager/sunFont.c index b50a67e5c40b..29000466cb69 100644 --- a/src/java.desktop/share/native/libfontmanager/sunFont.c +++ b/src/java.desktop/share/native/libfontmanager/sunFont.c @@ -189,6 +189,20 @@ static void initFontIDs(JNIEnv *env) { CHECK_NULL(sunFontIDs.lcdSubPixPos = (*env)->GetFieldID(env, tmpClass, "lcdSubPixPos", "Z")); + CHECK_NULL(tmpClass = (*env)->FindClass(env, "sun/font/GlyphRenderData")); + CHECK_NULL(sunFontIDs.glyphRenderDataOutline = + (*env)->GetFieldID(env, tmpClass, "outline", "Ljava/awt/geom/GeneralPath;")); + CHECK_NULL(sunFontIDs.glyphRenderDataColorLayers = + (*env)->GetFieldID(env, tmpClass, "colorLayers", "Ljava/util/List;")); + CHECK_NULL(sunFontIDs.glyphRenderDataSetColorLayersListMID = + (*env)->GetMethodID(env, tmpClass, "setColorLayersList", "(I)V")); + CHECK_NULL(sunFontIDs.glyphRenderDataAddColorLayerMID = + (*env)->GetMethodID(env, tmpClass, "addColorLayers", "(IIIILjava/awt/geom/GeneralPath;)V")); + CHECK_NULL(sunFontIDs.glyphRenderDataAddColorLayerFGMID = + (*env)->GetMethodID(env, tmpClass, "addColorLayers", "(Ljava/awt/geom/GeneralPath;)V")); + CHECK_NULL(sunFontIDs.glyphRenderDataAddBitmapMID = + (*env)->GetMethodID(env, tmpClass, "addBitmap", "(DDDDDDIIII[I)V")); + initLCDGammaTables(); initialisedFontIDs = 1; @@ -308,7 +322,7 @@ Java_sun_font_StrikeCache_getGlyphCacheDescription GlyphInfo *info; size_t baseAddr; - if ((*env)->GetArrayLength(env, results) < 13) { + if ((*env)->GetArrayLength(env, results) < 16) { return; } @@ -335,6 +349,9 @@ Java_sun_font_StrikeCache_getGlyphCacheDescription nresults[10] = (jlong)(uintptr_t)info; /* invisible glyph */ nresults[11] = (size_t)&(info->cellInfo)-baseAddr; nresults[12] = (size_t)&(info->managed)-baseAddr; + nresults[13] = (size_t)&(info->subpixelResolutionX)-baseAddr; + nresults[14] = (size_t)&(info->subpixelResolutionY)-baseAddr; + nresults[15] = (size_t)&(info->format)-baseAddr; (*env)->ReleasePrimitiveArrayCritical(env, results, nresults, 0); } diff --git a/src/java.desktop/unix/classes/sun/awt/AccessibleAnnouncerUtilities.java b/src/java.desktop/unix/classes/sun/awt/AccessibleAnnouncerUtilities.java new file mode 100644 index 000000000000..7ba372049935 --- /dev/null +++ b/src/java.desktop/unix/classes/sun/awt/AccessibleAnnouncerUtilities.java @@ -0,0 +1,472 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.awt; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.CharacterIterator; +import java.text.StringCharacterIterator; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +class AccessibleAnnouncerUtilities { + private final static String GENERAL_KEY = "general"; + private final static String ENABLE_SPEECH_KEY = "enableSpeech"; + private final static String ACTIVE_PROFILE_KEY = "activeProfile"; + private final static String PROFILES_KEY = "profiles"; + private final static String SPEECH_SERVER_INFO_KEY = "speechServerInfo"; + private final static String VOICES_KEY = "voices"; + private final static String RATE_KEY = "rate"; + private final static String AVERAGE_PITCH_KEY = "average-pitch"; + private final static String FAMILY_KEY = "family"; + private final static String NAME_KEY = "name"; + private final static String LANG_KEY = "lang"; + private final static String DIALECT_KEY = "dialect"; + private final static String VARIANT_KEY = "variant"; + private final static String GAIN_KEY = "gain"; + private final static String VERBALIZE_PUNCTUATION_STYLE_KEY = "verbalizePunctuationStyle"; + private final static String DEFAULT_KEY = "default"; + + private static Object getOrcaConf() { + try { + String path = System.getProperty("user.home") + "/.local/share/orca/user-settings.conf"; + String orcaConfSTR = Files.readString(Paths.get(path)); + + return JSONParser.parse(orcaConfSTR); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + private static String getSpeechServerInfo(Object conf) { + if (conf == null) + return null; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return null; + + return JSONParser.getStringValue(conf, PROFILES_KEY, moduleName, SPEECH_SERVER_INFO_KEY, String.valueOf(0)); + } + + private static double getGain(Object conf) { + if (conf == null) + return -1; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return -1; + + Double val = JSONParser.getDoubleValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, GAIN_KEY); + if (val != null) + return val; + return -1; + } + + private static String getVariant(Object conf) { + if (conf == null) + return null; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return null; + + return JSONParser.getStringValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, FAMILY_KEY, + VARIANT_KEY); + } + + private static String getDialect(Object conf) { + if (conf == null) + return null; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return null; + + return JSONParser.getStringValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, FAMILY_KEY, + DIALECT_KEY); + } + + private static String getLang(Object conf) { + if (conf == null) + return null; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return null; + + return JSONParser.getStringValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, FAMILY_KEY, LANG_KEY); + } + + private static String getName(Object conf) { + if (conf == null) + return null; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return null; + + return JSONParser.getStringValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, FAMILY_KEY, NAME_KEY); + } + + private static double getAveragePitch(Object conf) { + if (conf == null) + return -1; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return -1; + + Double val = JSONParser.getDoubleValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, + AVERAGE_PITCH_KEY); + if (val != null) + return val; + return -1; + } + + private static double getRate(Object conf) { + if (conf == null) + return -1; + + String moduleName = getActiveProfile(conf); + if (moduleName == null) + return -1; + + Double val = JSONParser.getDoubleValue(conf, PROFILES_KEY, moduleName, VOICES_KEY, DEFAULT_KEY, RATE_KEY); + if (val != null) + return val; + return -1; + } + + private static String getActiveProfile(Object conf) { + if (conf == null) + return null; + + int counter = 0; + String str = JSONParser.getStringValue(conf, GENERAL_KEY, ACTIVE_PROFILE_KEY, String.valueOf(counter)); + while (str != null) { + if (!JSONParser.valueExists(conf, PROFILES_KEY, str)) { + counter++; + str = JSONParser.getStringValue(conf, GENERAL_KEY, ACTIVE_PROFILE_KEY, String.valueOf(counter)); + } else { + return str; + } + } + + return null; + } + + private static int getVerbalizePunctuationStyle(Object conf) { + if (conf == null) + return -1; + + Integer val = JSONParser.getIntValue(conf, GENERAL_KEY, VERBALIZE_PUNCTUATION_STYLE_KEY); + if (val != null) + return val; + return -1; + } + + private static boolean getEnableSpeech(Object conf) { + if (conf == null) + return false; + + Boolean val = JSONParser.getBooleanValue(conf, GENERAL_KEY, ENABLE_SPEECH_KEY); + if (val != null) + return val; + return false; + } + + private static class JSONParser { + private JSONParser() { + } + + public static Object parse(String json) throws ParseException { + CharacterIterator it = new StringCharacterIterator(json); + return Token.JSON.parse(it); + } + + public static class ParseException extends Exception { + private static final long serialVersionUID = 1992707L; + + ParseException(String message) { + super(message); + } + } + + enum Token { + JSON { + Object parse(CharacterIterator it) throws ParseException { + Object o = ELEMENT.parse(it); + if (it.next() != CharacterIterator.DONE) { + error(it, "unexpected text following JSON end"); + } + return o; + } + }, + ELEMENT { + Object parse(CharacterIterator it) throws ParseException { + Token.skipWhitespace(it); + final Object o = VALUE.parse(it); + Token.skipWhitespace(it); + return o; + } + }, + VALUE { + Object parse(CharacterIterator it) throws ParseException { + final char ch = it.current(); + switch (ch) { + case '{' -> { + return OBJECT.parse(it); + } + case '[' -> { + return ARRAY.parse(it); + } + case '"' -> { + return STRING.parse(it); + } + case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> { + return NUMBER.parse(it); + } + case 'n' -> { + Token.skipOver(it, 'n'); + Token.skipOver(it, 'u'); + Token.skipOver(it, 'l'); + Token.skipOver(it, 'l'); + return null; + + } + case 't' -> { + Token.skipOver(it, 't'); + Token.skipOver(it, 'r'); + Token.skipOver(it, 'u'); + Token.skipOver(it, 'e'); + return Boolean.TRUE; + } + case 'f' -> { + Token.skipOver(it, 'f'); + Token.skipOver(it, 'a'); + Token.skipOver(it, 'l'); + Token.skipOver(it, 's'); + Token.skipOver(it, 'e'); + return Boolean.FALSE; + } + default -> error(it, "unexpected character '" + ch + "' when parsing VALUE"); + } + + return null; + } + }, + OBJECT { + Object parse(CharacterIterator it) throws ParseException { + skipOver(it, '{'); + skipWhitespace(it); + final Map map = new HashMap<>(); + + while (it.current() != '}' && it.current() != CharacterIterator.DONE) { + Token.skipWhitespace(it); + final String name = (String) STRING.parse(it); + Token.skipWhitespace(it); + if (name == null) + error(it, "error parsing member name in object"); + Token.skipOver(it, ':'); + final Object value = ELEMENT.parse(it); + map.put(name, value); + if (it.current() == ',') + it.next(); + } + skipOver(it, '}'); + + return map; + } + }, + ARRAY { + Object parse(CharacterIterator it) throws ParseException { + skipOver(it, '['); + skipWhitespace(it); + final ArrayList array = new ArrayList<>(); + while (it.current() != ']' && it.current() != CharacterIterator.DONE) { + final Object element = ELEMENT.parse(it); + array.add(element); + if (it.current() == ',') + it.next(); + } + skipOver(it, ']'); + return array.toArray(); + } + }, + STRING { + Object parse(CharacterIterator it) throws ParseException { + final StringBuilder builder = new StringBuilder(); + skipOver(it, '"'); + + char ch = it.current(); + while (ch != '"' && it.current() != CharacterIterator.DONE) { + if (ch == '\\') { + ch = it.next(); + if (ch == CharacterIterator.DONE) { + error(it, "string unexpectedly terminated in escape sequence"); + } else if (ch == 'u') { + final char hex1 = it.next(); + final char hex2 = it.next(); + final char hex3 = it.next(); + final char hex4 = it.next(); + if (hex1 == CharacterIterator.DONE || hex2 == CharacterIterator.DONE + || hex3 == CharacterIterator.DONE || hex4 == CharacterIterator.DONE) { + error(it, "string unexpectedly terminated in unicode sequence"); + } + final char utf16 = (char) Integer.parseInt(String.valueOf(hex1) + hex2 + hex3 + hex4, + 16); + builder.append(utf16); + } else { + ch = switch (ch) { + case 'b' -> '\b'; + case 'f' -> '\f'; + case 'n' -> '\n'; + case 'r' -> '\r'; + case 't' -> '\t'; + default -> ch; + }; + builder.append(ch); + } + } else { + builder.append(ch); + } + ch = it.next(); + } + skipOver(it, '"'); + return builder.toString(); + } + }, + NUMBER { + Object parse(CharacterIterator it) throws ParseException { + final StringBuilder builder = new StringBuilder(); + if (it.current() == '-') { + builder.append('-'); + it.next(); + } + + while (Character.isDigit(it.current()) && it.current() != CharacterIterator.DONE) { + builder.append(it.current()); + final char ch = it.next(); + if (ch == '.') { + builder.append(ch); + it.next(); + } + } + + return Double.valueOf(builder.toString()); + } + }; + + abstract Object parse(CharacterIterator it) throws ParseException; + + private static void error(CharacterIterator it, String message) throws ParseException { + StringBuilder builder = new StringBuilder(message); + builder.append("; position ").append(it.getIndex()).append(" "); + if (it.current() != CharacterIterator.DONE) { + builder.append("(at '"); + for (int i = 0; it.current() != CharacterIterator.DONE && i < 15; i++) { + final char ch = it.current(); + if (ch == '\n') + builder.append("\\n"); + else + builder.append(ch); + it.next(); + } + builder.append("')"); + } else { + builder.append("(at EOF)"); + } + + throw new ParseException(builder.toString()); + } + + private static void skipOver(CharacterIterator it, char ch) throws ParseException { + if (it.current() != ch) { + error(it, "expected '" + ch + "', found '" + it.current() + "'"); + } + it.next(); + } + + private static void skipWhitespace(CharacterIterator it) { + while (Character.isWhitespace(it.current())) + it.next(); + } + } + + public static String getStringValue(Object json, String... qualifiers) { + Object value = getObjectValueImpl(json, qualifiers); + return value instanceof String stringValue ? stringValue : null; + } + + public static Boolean getBooleanValue(Object json, String... qualifiers) { + Object value = getObjectValueImpl(json, qualifiers); + return value instanceof Boolean booleanValue ? booleanValue : null; + } + + public static Integer getIntValue(Object json, String... qualifiers) { + Object value = getObjectValueImpl(json, qualifiers); + return value instanceof Double doubleValue ? doubleValue.intValue() : null; + } + + public static Double getDoubleValue(Object json, String... qualifiers) { + Object value = getObjectValueImpl(json, qualifiers); + return value instanceof Double booleanValue ? booleanValue : null; + } + + private static boolean valueExists(Object json, String... qualifiers) { + return getObjectValueImpl(json, qualifiers) != null; + } + + @SuppressWarnings("rawtypes") + private static Object getObjectValueImpl(Object json, String[] qualifiers) { + Object current = json; + for (String qual : qualifiers) { + if (current instanceof Map currentMap) { + if (currentMap.containsKey(qual)) { + current = currentMap.get(qual); + } else { + return null; + } + } else if (current instanceof Object[] array) { + int index = Integer.parseInt(qual); + if (index >= 0 && index < array.length) { + current = array[index]; + } else { + return null; + } + } else { + break; + } + } + return current; + } + } +} diff --git a/src/java.desktop/unix/classes/sun/awt/FcFontManager.java b/src/java.desktop/unix/classes/sun/awt/FcFontManager.java index ecd7ac0ad357..807e8570f39f 100644 --- a/src/java.desktop/unix/classes/sun/awt/FcFontManager.java +++ b/src/java.desktop/unix/classes/sun/awt/FcFontManager.java @@ -25,9 +25,7 @@ package sun.awt; -import sun.font.FcFontConfiguration; -import sun.font.FontConfigManager; -import sun.font.SunFontManager; +import sun.font.*; /** * A {@link sun.font.FontManager} that uses fontconfig to find system fonts. @@ -45,6 +43,13 @@ public synchronized FontConfigManager getFontConfigManager() { return fcManager; } + @Override + protected String getSystemFontVersion(TrueTypeFont bundledFont) { + String query = bundledFont.getTypographicFamilyName() + ":style=" + bundledFont.getTypographicSubfamilyName(); + String systemFont = FontConfigManager.getFontProperty(query, "%{file}"); + return systemFont != null ? getTrueTypeVersion(systemFont) : "0"; + } + @Override protected FontConfiguration createFontConfiguration() { FcFontConfiguration fcFontConfig = new FcFontConfiguration(this); diff --git a/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java b/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java index 191a12092a1f..128364a5b08c 100644 --- a/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java +++ b/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java @@ -55,11 +55,13 @@ import java.security.PrivilegedAction; import java.util.Arrays; +import jdk.internal.misc.InnocuousThread; import sun.awt.X11.XBaseWindow; import sun.security.action.GetIntegerAction; import com.sun.java.swing.plaf.gtk.GTKConstants.TextDirection; import sun.java2d.opengl.OGLRenderQueue; import sun.security.action.GetPropertyAction; +import sun.util.logging.PlatformLogger; public abstract class UNIXToolkit extends SunToolkit { @@ -112,6 +114,16 @@ public int getNumber() { private Boolean nativeGTKAvailable; private Boolean nativeGTKLoaded; private BufferedImage tmpImage = null; + private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.UNIXToolkit"); + + private static void printError(String str) { + log.fine(str); + } + + @Override + protected void initializeDesktopProperties() { + initSystemPropertyWatcher(); + } public static int getDatatransferTimeout() { @SuppressWarnings("removal") @@ -548,6 +560,8 @@ public static boolean isOnWayland() { return result; } + private static native int isSystemDarkColorScheme(); + @Override public boolean isRunningOnWayland() { return isOnWayland(); @@ -566,6 +580,43 @@ public boolean isRunningOnWayland() { // application icons). private static final WindowFocusListener waylandWindowFocusListener; + private static final String OS_THEME_IS_DARK = "awt.os.theme.isDark"; + + private static Thread systemPropertyWatcher = null; + + private static native boolean dbusInit(); + + private void initSystemPropertyWatcher() { + @SuppressWarnings("removal") + String dbusEnabled = AccessController.doPrivileged( + new GetPropertyAction("jbr.dbus.enabled", "true")).toLowerCase(); + if (!"true".equals(dbusEnabled) || !dbusInit()) { + return; + } + + int initialSystemDarkColorScheme = isSystemDarkColorScheme(); + if (initialSystemDarkColorScheme >= 0) { + setDesktopProperty(OS_THEME_IS_DARK, initialSystemDarkColorScheme != 0); + + systemPropertyWatcher = InnocuousThread.newThread("SystemPropertyWatcher", + () -> { + while (true) { + try { + int isSystemDarkColorScheme = isSystemDarkColorScheme(); + if (isSystemDarkColorScheme >= 0) { + setDesktopProperty(OS_THEME_IS_DARK, isSystemDarkColorScheme != 0); + } + + Thread.sleep(1000); + } catch (Exception ignored) { + } + } + }); + systemPropertyWatcher.setDaemon(true); + systemPropertyWatcher.start(); + } + } + static { if (isOnWayland()) { waylandWindowFocusListener = new WindowAdapter() { diff --git a/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java index 71263ec49f34..817aea705427 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java @@ -114,12 +114,7 @@ public void setVisible(boolean b) { try { quit = !b; if (b) { - Runnable task = () -> { - showNativeDialog(); - standaloneWindow = 0; - fd.setVisible(false); - }; - new Thread(null, task, "ShowDialog", 0, false).start(); + new Thread(null, this::showNativeDialog, "ShowDialog", 0, false).start(); } else { quit(); fd.setVisible(false); @@ -208,4 +203,13 @@ boolean setWindow(long xid) { } return false; } + + /** + * Called by native code when GTK dialog is closing. + */ + private void onClose() { + widget = 0; + standaloneWindow = 0; + fd.setVisible(false); + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/Native.java b/src/java.desktop/unix/classes/sun/awt/X11/Native.java index 744e665baaa9..de370c81c798 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/Native.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/Native.java @@ -375,6 +375,20 @@ static long toData(long[] longs) { return res; } + /** + * Access to C double data(eight bytes) + */ + static final int DOUBLE_SIZE = 8; + static double getDouble(long ptr) { return unsafe.getDouble(ptr); } + static double getDouble(long ptr, int index) { return getDouble(ptr + DOUBLE_SIZE * index); } + /** + * Stores to C double data(eight bytes) + */ + static void putDouble(long ptr, double data) { unsafe.putDouble(ptr, data); } + static void putDouble(long ptr, int index, double data) { + putDouble(ptr + index * DOUBLE_SIZE, data); + } + /** * Access to C "unsigned long" date type, which is XID in X diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java b/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java index 138e4a709a4e..9d6f8d674cec 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java @@ -654,13 +654,12 @@ XBaseMenuWindow getMenuWindowFromPoint(Point pt) { * ************************************************/ - GraphicsConfiguration getCurrentGraphicsConfiguration() { + void updateCurrentGraphicsConfiguration() { Component hw = SunToolkit.getHeavyweightComponent(target); XWindow peer = AWTAccessor.getComponentAccessor().getPeer(hw); if (peer != null && peer.graphicsConfig != null) { - return peer.graphicsConfig; + graphicsConfig = peer.graphicsConfig; } - return graphicsConfig; } /** diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XBaseWindow.java b/src/java.desktop/unix/classes/sun/awt/X11/XBaseWindow.java index 2b5b78fd0279..a4f3cc187d72 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XBaseWindow.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XBaseWindow.java @@ -59,7 +59,9 @@ public class XBaseWindow { VISIBLE = "visible", // whether it is visible by default SAVE_UNDER = "save under", // save content under this window BACKING_STORE = "backing store", // enables double buffering - BIT_GRAVITY = "bit gravity"; // copy old content on geometry change + BIT_GRAVITY = "bit gravity", // copy old content on geometry change + XI_EVENT_MASK = "xi event mask", // xi event mask, Long + XI_DEVICE_ID = "xi device id"; // xi device id, Integer private XCreateWindowParams delayedParams; Set children = new HashSet(); @@ -81,6 +83,8 @@ public class XBaseWindow { private static XAtom wm_client_leader; + private static long globalUserTime; + static enum InitialiseState { INITIALISING, INITIALISED, @@ -209,6 +213,10 @@ protected final void init(XCreateWindowParams params) { } } + protected boolean isInitialising() { + return initialising == InitialiseState.INITIALISING; + } + public boolean checkInitialised() { awtLock(); try { @@ -307,12 +315,18 @@ protected int getScale() { return 1; } - protected int scaleUp(int x) { - return x; + protected int scaleUp(int i) { + return i; + } + protected Point scaleUp(int x, int y) { + return new Point(x, y); } - protected int scaleDown(int x) { - return x; + protected int scaleDown(int i) { + return i; + } + protected Point scaleDown(int x, int y) { + return new Point(x, y); } /** @@ -381,10 +395,10 @@ private void create(XCreateWindowParams params) { if (log.isLoggable(PlatformLogger.Level.FINE)) { log.fine("Creating window for " + this + " with the following attributes: \n" + params); } + Point p = scaleUp(bounds.x, bounds.y); window = XlibWrapper.XCreateWindow(XToolkit.getDisplay(), parentWindow.longValue(), - scaleUp(bounds.x), - scaleUp(bounds.y), + p.x, p.y, scaleUp(bounds.width), scaleUp(bounds.height), 0, // border @@ -398,6 +412,19 @@ private void create(XCreateWindowParams params) { throw new IllegalStateException("Couldn't create window because of wrong parameters. Run with NOISY_AWT to see details"); } XToolkit.addToWinMap(window, this); + + Long xiEventMask = (Long) params.get(XI_EVENT_MASK); + if (xiEventMask != null && XToolkit.isXInputEnabled()) { + Integer xiDeviceId = (Integer) params.get(XI_DEVICE_ID); + if (xiDeviceId == null) { + xiDeviceId = XConstants.XIAllDevices; + } + + int status = XToolkit.XISelectEvents(XToolkit.getDisplay(), window, xiEventMask, xiDeviceId); + if (status != XConstants.Success) { + throw new IllegalStateException("Couldn't select XI events. Status: " + status); + } + } } finally { xattr.dispose(); } @@ -510,8 +537,9 @@ public void setSizeHints(long flags, int x, int y, int width, int height) { // we want to reset PPosition in hints. This is necessary // for locationByPlatform functionality if ((flags & XUtilConstants.PPosition) != 0) { - hints.set_x(scaleUp(x)); - hints.set_y(scaleUp(y)); + Point p = scaleUp(x, y); + hints.set_x(p.x); + hints.set_y(p.y); } if ((flags & XUtilConstants.PSize) != 0) { hints.set_width(scaleUp(width)); @@ -629,9 +657,10 @@ public void xRequestFocus() { XToolkit.awtLock(); try { if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { - focusLog.finer("XSetInputFocus on " + Long.toHexString(getWindow())); + focusLog.finer("XSetInputFocus on " + Long.toHexString(getWindow()) + + " with global time " + globalUserTime); } - XlibWrapper.XSetInputFocus(XToolkit.getDisplay(), getWindow()); + XlibWrapper.XSetInputFocus2(XToolkit.getDisplay(), getWindow(), globalUserTime); } finally { XToolkit.awtUnlock(); } @@ -654,6 +683,7 @@ public void xSetVisible(boolean visible) { try { this.visible = visible; if (visible) { + setUserTimeBeforeShowing(); XlibWrapper.XMapWindow(XToolkit.getDisplay(), getWindow()); } else { @@ -741,9 +771,9 @@ public void xSetBounds(int x, int y, int width, int height) { height = Math.max(MIN_SIZE, height); XToolkit.awtLock(); try { + Point p = parentWindow == null ? scaleUp(x, y) : new Point(scaleUp(x), scaleUp(y)); XlibWrapper.XMoveResizeWindow(XToolkit.getDisplay(), getWindow(), - scaleUp(x), scaleUp(y), - scaleUp(width), scaleUp(height)); + p.x, p.y, scaleUp(width), scaleUp(height)); } finally { XToolkit.awtUnlock(); } @@ -765,8 +795,9 @@ static Point toOtherWindow(long src, long dst, int x, int y) { if (srcPeer != null && dstPeer != null) { // (x, y) is relative to src - rpt.x = x + srcPeer.getAbsoluteX() - dstPeer.getAbsoluteX(); - rpt.y = y + srcPeer.getAbsoluteY() - dstPeer.getAbsoluteY(); + Point s = srcPeer.scaleUp(x + srcPeer.getAbsoluteX(), y + srcPeer.getAbsoluteY()); + Point d = dstPeer.scaleUp(x + dstPeer.getAbsoluteX(), y + dstPeer.getAbsoluteY()); + rpt = dstPeer.scaleDown(s.x - d.x, s.y - d.y); } else if (dstPeer != null && XlibUtil.isRoot(src, dstPeer.getScreenNumber())) { // from root into peer rpt.x = x - dstPeer.getAbsoluteX(); @@ -776,8 +807,15 @@ static Point toOtherWindow(long src, long dst, int x, int y) { rpt.x = x + srcPeer.getAbsoluteX(); rpt.y = y + srcPeer.getAbsoluteY(); } else { - int scale = srcPeer == null ? 1 : srcPeer.getScale(); - rpt = XlibUtil.translateCoordinates(src, dst, new Point(x, y), scale); + if (srcPeer != null) { + x = srcPeer.scaleUp(x); + y = srcPeer.scaleUp(y); + } + rpt = XlibUtil.translateCoordinates(src, dst, x, y); + if (dstPeer != null) { + rpt.x = dstPeer.scaleDown(rpt.x); + rpt.y = dstPeer.scaleDown(rpt.y); + } } return rpt; } @@ -1013,6 +1051,7 @@ public void handleClientMessage(XEvent xev) { public void handleVisibilityEvent(XEvent xev) { } public void handleKeyPress(XEvent xev) { + setUserTime(xev.get_xkey().get_time(), true); } public void handleKeyRelease(XEvent xev) { } @@ -1033,16 +1072,24 @@ public void handleButtonPressRelease(XEvent xev) { if (theButton > SunToolkit.MAX_BUTTONS_SUPPORTED) { return; } + + if (xbe.get_type() == XConstants.ButtonPress) { + rememberLastButtonPressLocation(xbe.get_x_root(), xbe.get_y_root()); + } + int buttonState = 0; buttonState = xbe.get_state() & XConstants.ALL_BUTTONS_MASK; boolean isWheel = (theButton == XConstants.MouseWheelUp || - theButton == XConstants.MouseWheelDown); + theButton == XConstants.MouseWheelDown || + theButton == XConstants.ScrollLeft || + theButton == XConstants.ScrollRight); // don't give focus if it's just the mouse wheel turning if (!isWheel) { switch (xev.get_type()) { case XConstants.ButtonPress: + setUserTime(xbe.get_time(), true); if (buttonState == 0) { XWindowPeer parent = getToplevelXWindow(); // See 6385277, 6981400. @@ -1072,11 +1119,16 @@ public void handleConfigureNotifyEvent(XEvent xev) { insLog.finer("Configure, {0}", xe); } - x = scaleDown(xe.get_x()); - y = scaleDown(xe.get_y()); + Point p = scaleDown(xe.get_x(), xe.get_y()); + x = p.x; + y = p.y; width = scaleDown(xe.get_width()); height = scaleDown(xe.get_height()); } + + public void handleTouchEvent(XEvent xev) { + } + /** * Checks ButtonRelease released all Mouse buttons */ @@ -1116,6 +1168,12 @@ static void dispatchToWindow(XEvent ev) { if (target == null || !isGrabbedEvent(ev, target)) { target = XToolkit.windowToXWindow(ev.get_xany().get_window()); } + + if (target == null && ev.get_type() == XConstants.GenericEvent && + XlibWrapper.XGetEventData(ev.get_xgeneric().get_display(), ev.pData)) { + target = XToolkit.windowToXWindow(XToolkit.GetXIDeviceEvent(ev.get_xcookie()).get_event()); + } + if (target != null && target.checkInitialised()) { target.dispatchEvent(ev); } @@ -1182,6 +1240,17 @@ public void dispatchEvent(XEvent xev) { case XConstants.CreateNotify: handleCreateNotify(xev); break; + case XConstants.GenericEvent: + switch (xev.get_xgeneric().get_evtype()) { + case XConstants.XI_TouchBegin: + case XConstants.XI_TouchUpdate: + case XConstants.XI_TouchEnd: + handleTouchEvent(xev); + break; + default: + break; + } + break; } } protected boolean isEventDisabled(XEvent e) { @@ -1260,4 +1329,57 @@ public boolean containsGlobal(int x, int y) { return x >= getAbsoluteX() && y >= getAbsoluteY() && x < (getAbsoluteX()+getWidth()) && y < (getAbsoluteY()+getHeight()); } + void setUserTimeBeforeShowing() { + if (globalUserTime != 0) setUserTime(globalUserTime, false); + } + + protected void setUserTime(long time, boolean updateGlobalTime) { + setUserTime(time, updateGlobalTime, true); + } + + protected void setUserTime(long time, boolean updateGlobalTime, boolean updateWindowProperty) { + if (updateGlobalTime && (int)time - (int)globalUserTime > 0 /* accounting for wrap-around */) { + globalUserTime = time; + } + if (updateWindowProperty) { + XNETProtocol netProtocol = XWM.getWM().getNETProtocol(); + if (netProtocol != null) { + netProtocol.setUserTime(this, time); + } + } + } + + static { + String desktopStartupId = XToolkit.getDesktopStartupId(); + if (desktopStartupId != null) { + int timePos = desktopStartupId.indexOf("_TIME"); + if (timePos < 0) { + log.fine("Couldn't find startup time in DESKTOP_STARTUP_ID: " + desktopStartupId); + } else { + try { + globalUserTime = Long.parseLong(desktopStartupId.substring(timePos + 5)); + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("Extracted startup time from DESKTOP_STARTUP_ID: " + globalUserTime); + } + } + catch (NumberFormatException e) { + log.fine("Couldn't parse startup time in DESKTOP_STARTUP_ID: " + desktopStartupId); + } + } + } + else { + log.fine("No DESKTOP_STARTUP_ID"); + } + } + + + private static volatile Point lastButtonPressAbsLocation = null; + + protected static Point getLastButtonPressAbsLocation() { + return lastButtonPressAbsLocation; + } + + private static void rememberLastButtonPressLocation(int absX, int absY) { + lastButtonPressAbsLocation = new Point(absX, absY); + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java index 79d6965e05f6..1c604981a6f3 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java @@ -81,6 +81,9 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget private static final PlatformLogger enableLog = PlatformLogger.getLogger("sun.awt.X11.enable.XComponentPeer"); private static final PlatformLogger shapeLog = PlatformLogger.getLogger("sun.awt.X11.shape.XComponentPeer"); + // A lock ensuring focus requests are processed atomically + static final Object focusRequestLock = new Object(); + boolean paintPending = false; boolean isLayouting = false; private boolean enabled; @@ -243,75 +246,89 @@ static final AWTEvent wrapInSequenced(AWTEvent event) { return AWTAccessor.getSequencedEventAccessor().create(event); } - // TODO: consider moving it to KeyboardFocusManagerPeerImpl @SuppressWarnings("deprecation") public final boolean requestFocus(Component lightweightChild, boolean temporary, boolean focusedWindowChangeAllowed, long time, FocusEvent.Cause cause) { - if (XKeyboardFocusManagerPeer. - processSynchronousLightweightTransfer(target, lightweightChild, temporary, - focusedWindowChangeAllowed, time)) - { - return true; - } + XWindowPeer wpeerToFocus = null; + synchronized (focusRequestLock) { + if (XKeyboardFocusManagerPeer. + processSynchronousLightweightTransfer(target, lightweightChild, temporary, + focusedWindowChangeAllowed, time)) + { + return true; + } - int result = XKeyboardFocusManagerPeer. - shouldNativelyFocusHeavyweight(target, lightweightChild, - temporary, focusedWindowChangeAllowed, - time, cause); - - switch (result) { - case XKeyboardFocusManagerPeer.SNFH_FAILURE: - return false; - case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED: - // Currently we just generate focus events like we deal with lightweight instead of calling - // XSetInputFocus on native window - if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { - focusLog.finer("Proceeding with request to " + - lightweightChild + " in " + target); - } - /** - * The problems with requests in non-focused window arise because shouldNativelyFocusHeavyweight - * checks that native window is focused while appropriate WINDOW_GAINED_FOCUS has not yet - * been processed - it is in EventQueue. Thus, SNFH allows native request and stores request record - * in requests list - and it breaks our requests sequence as first record on WGF should be the last - * focus owner which had focus before WLF. So, we should not add request record for such requests - * but store this component in mostRecent - and return true as before for compatibility. - */ - Window parentWindow = SunToolkit.getContainingWindow(target); - if (parentWindow == null) { - return rejectFocusRequestHelper("WARNING: Parent window is null"); - } - XWindowPeer wpeer = AWTAccessor.getComponentAccessor() - .getPeer(parentWindow); - if (wpeer == null) { - return rejectFocusRequestHelper("WARNING: Parent window's peer is null"); - } - /* - * Passing null 'actualFocusedWindow' as we don't want to restore focus on it - * when a component inside a Frame is requesting focus. - * See 6314575 for details. - */ - boolean res = wpeer.requestWindowFocus(null); - - if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { - focusLog.finer("Requested window focus: " + res); - } - // If parent window can be made focused and has been made focused(synchronously) - // then we can proceed with children, otherwise we retreat. - if (!(res && parentWindow.isFocused())) { - return rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); - } - return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild, - target, - temporary, - focusedWindowChangeAllowed, - time, cause); - // Motif compatibility code - case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED: - // Either lightweight or excessive request - all events are generated. - return true; + int result = XKeyboardFocusManagerPeer. + shouldNativelyFocusHeavyweight(target, lightweightChild, + temporary, focusedWindowChangeAllowed, + time, cause, true); + + switch (result) { + case XKeyboardFocusManagerPeer.SNFH_FAILURE: + return false; + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED: + // Currently we just generate focus events like we deal with lightweight instead of calling + // XSetInputFocus on native window + if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { + focusLog.finer("Proceeding with request to " + + lightweightChild + " in " + target); + } + /** + * The problems with requests in non-focused window arise because shouldNativelyFocusHeavyweight + * checks that native window is focused while appropriate WINDOW_GAINED_FOCUS has not yet + * been processed - it is in EventQueue. Thus, SNFH allows native request and stores request record + * in requests list - and it breaks our requests sequence as first record on WGF should be the last + * focus owner which had focus before WLF. So, we should not add request record for such requests + * but store this component in mostRecent - and return true as before for compatibility. + */ + Window parentWindow = SunToolkit.getContainingWindow(target); + if (parentWindow == null) { + return rejectFocusRequestHelper("WARNING: Parent window is null"); + } + + if (parentWindow.isFocused()) { + if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { + focusLog.finer("Target window is already focused, requesting focus internally"); + } + return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild, + target, + temporary, + focusedWindowChangeAllowed, + time, cause); + } + + if (!focusedWindowChangeAllowed) { + return rejectFocusRequestHelper("Target window isn't focused, aborting"); + } + + wpeerToFocus = AWTAccessor.getComponentAccessor() + .getPeer(parentWindow); + if (wpeerToFocus == null) { + return rejectFocusRequestHelper("WARNING: Parent window's peer is null"); + } + + rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); + break; + + // Motif compatibility code + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED: + // Either lightweight or excessive request - all events are generated. + return true; + } + } + // doing this with 'focusLock' not held to avoid deadlocks + if (wpeerToFocus != null) { + /* + * Passing null 'actualFocusedWindow' as we don't want to restore focus on it + * when a component inside a Frame is requesting focus. + * See 6314575 for details. + */ + boolean res = wpeerToFocus.requestWindowFocus(null); + if (focusLog.isLoggable(PlatformLogger.Level.FINER)) { + focusLog.finer("Requested window focus: " + res); + } } return false; } @@ -1330,7 +1347,10 @@ public void applyShape(Region shape) { int scale = getScale(); if (scale != 1) { - shape = shape.getScaledRegion(scale, scale); + Rectangle bounds = graphicsConfig.getBounds(); + shape = shape.getTranslatedRegion(-bounds.x, -bounds.y) + .getScaledRegion(scale, scale) + .getTranslatedRegion(bounds.x, bounds.y); } XlibWrapper.SetRectangularShape( @@ -1378,7 +1398,7 @@ public boolean updateGraphicsData(GraphicsConfiguration gc) { } initGraphicsConfiguration(); - doValidateSurface(); + syncBounds(); return false; } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XConstants.java b/src/java.desktop/unix/classes/sun/awt/X11/XConstants.java index 6aafa1b1db3a..82ab6fd3b4cf 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XConstants.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XConstants.java @@ -170,7 +170,8 @@ private XConstants(){} public static final int ColormapNotify = 32 ; public static final int ClientMessage = 33 ; public static final int MappingNotify = 34 ; - public static final int LASTEvent = 35 ; /* must be bigger than any event # */ + public static final int GenericEvent = 35 ; + public static final int LASTEvent = 36 ; /* must be bigger than any event # */ /* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer, @@ -210,6 +211,8 @@ private XConstants(){} // as it may be possible to remap them via x11 configuration files public static final int MouseWheelUp = buttons[3]; public static final int MouseWheelDown = buttons[4]; + public static final int ScrollLeft = buttons[5]; + public static final int ScrollRight = buttons[6]; /* Notify modes */ @@ -679,4 +682,70 @@ private XConstants(){} public static final long XkbModifierMapMask = (1L<<2); public static final long XkbVirtualModsMask = (1L<<6); //server map + /* Fake device ID's for event selection */ + public static final int XIAllDevices = 0; + public static final int XIAllMasterDevices = 1; + + /* XI Event types */ + public static final int XI_DeviceChanged = 1; + public static final int XI_KeyPress = 2; + public static final int XI_KeyRelease = 3; + public static final int XI_ButtonPress = 4; + public static final int XI_ButtonRelease = 5; + public static final int XI_Motion = 6; + public static final int XI_Enter = 7; + public static final int XI_Leave = 8; + public static final int XI_FocusIn = 9; + public static final int XI_FocusOut = 10; + public static final int XI_HierarchyChanged = 11; + public static final int XI_PropertyEvent = 12; + public static final int XI_RawKeyPress = 13; + public static final int XI_RawKeyRelease = 14; + public static final int XI_RawButtonPress = 15; + public static final int XI_RawButtonRelease = 16; + public static final int XI_RawMotion = 17; + public static final int XI_TouchBegin = 18;/* XI 2.2 */ + public static final int XI_TouchUpdate = 19; + public static final int XI_TouchEnd = 20; + public static final int XI_TouchOwnership = 21; + public static final int XI_RawTouchBegin = 22; + public static final int XI_RawTouchUpdate = 23; + public static final int XI_RawTouchEnd = 24; + public static final int XI_BarrierHit = 25;/* XI 2.3 */ + public static final int XI_BarrierLeave = 26; + public static final int XI_LASTEVENT = XI_BarrierLeave; + /* NOTE: XI2LASTEVENT in xserver/include/inputstr.h must be the same value + * as XI_LASTEVENT if the server is supposed to handle masks etc. for this + * type of event. */ + + /* Event masks. + * Note: the protocol spec defines a mask to be of (1 << type). Clients are + * free to create masks by bitshifting instead of using these defines. + */ + public static final long XI_DeviceChangedMask = 1L << XI_DeviceChanged; + public static final long XI_KeyPressMask = 1L << XI_KeyPress; + public static final long XI_KeyReleaseMask = 1L << XI_KeyRelease; + public static final long XI_ButtonPressMask = 1L << XI_ButtonPress; + public static final long XI_ButtonReleaseMask = 1L << XI_ButtonRelease; + public static final long XI_MotionMask = 1L << XI_Motion; + public static final long XI_EnterMask = 1L << XI_Enter; + public static final long XI_LeaveMask = 1L << XI_Leave; + public static final long XI_FocusInMask = 1L << XI_FocusIn; + public static final long XI_FocusOutMask = 1L << XI_FocusOut; + public static final long XI_HierarchyChangedMask = 1L << XI_HierarchyChanged; + public static final long XI_PropertyEventMask = 1L << XI_PropertyEvent; + public static final long XI_RawKeyPressMask = 1L << XI_RawKeyPress; + public static final long XI_RawKeyReleaseMask = 1L << XI_RawKeyRelease; + public static final long XI_RawButtonPressMask = 1L << XI_RawButtonPress; + public static final long XI_RawButtonReleaseMask = 1L << XI_RawButtonRelease; + public static final long XI_RawMotionMask = 1L << XI_RawMotion; + public static final long XI_TouchBeginMask = 1L << XI_TouchBegin; + public static final long XI_TouchEndMask = 1L << XI_TouchEnd; + public static final long XI_TouchOwnershipChangedMask = 1L << XI_TouchOwnership; + public static final long XI_TouchUpdateMask = 1L << XI_TouchUpdate; + public static final long XI_RawTouchBeginMask = 1L << XI_RawTouchBegin; + public static final long XI_RawTouchEndMask = 1L << XI_RawTouchEnd; + public static final long XI_RawTouchUpdateMask = 1L << XI_RawTouchUpdate; + public static final long XI_BarrierHitMask = 1L << XI_BarrierHit; + public static final long XI_BarrierLeaveMask = 1L << XI_BarrierLeave; } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java index 102a76b16a7d..e50551fd801f 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java @@ -27,7 +27,6 @@ import java.awt.*; import java.awt.event.ComponentEvent; -import java.awt.event.InvocationEvent; import java.awt.event.WindowEvent; import java.util.Collections; import java.util.HashMap; @@ -35,6 +34,7 @@ import java.util.Optional; import sun.awt.IconInfo; +import sun.awt.PeerEvent; import sun.util.logging.PlatformLogger; import sun.awt.AWTAccessor; @@ -50,11 +50,14 @@ abstract class XDecoratedPeer extends XWindowPeer { // reparented - indicates that WM has adopted the top-level. boolean configure_seen; boolean insets_corrected; + // Set to true after reconfigureContentWindow is called for the first time. + // Before this, content window may not be in sync with insets. + private boolean content_reconfigured; XIconWindow iconWindow; volatile WindowDimensions dimensions; XContentWindow content; - volatile Insets currentInsets; + private volatile Insets currentInsets; // Device-space XFocusProxyWindow focusProxy; static final Map,Insets> lastKnownInsets = Collections.synchronizedMap(new HashMap<>()); @@ -101,6 +104,9 @@ void preInit(XCreateWindowParams params) { void postInit(XCreateWindowParams params) { // The size hints must be set BEFORE mapping the window (see 6895647) updateSizeHints(dimensions); + if (isTargetUndecorated()) { + XWM.setGtkFrameExtents(window); + } // The super method maps the window if it's visible on the shared level super.postInit(params); @@ -305,9 +311,6 @@ private Insets getWMSetInsets(XAtom changedAtom) { insLog.finer("FRAME_EXTENTS: {0}", wm_set_insets); } - if (wm_set_insets != null) { - wm_set_insets = copyAndScaleDown(wm_set_insets); - } return wm_set_insets; } @@ -341,19 +344,11 @@ public void handlePropertyNotify(XEvent xev) { || ev.get_atom() == XWM.XA_NET_FRAME_EXTENTS.getAtom()) { if (XWM.getWMID() != XWM.UNITY_COMPIZ_WM) { - if ((XWM.getWMID() == XWM.MUTTER_WM && !isTargetUndecorated() && isVisible()) - || getMWMDecorTitleProperty().isPresent()) { - // Insets might have changed "in-flight" if that property - // is present, so we need to get the actual values of - // insets from the WM and propagate them through all the - // proper channels. - wm_set_insets = null; - Insets in = getWMSetInsets(XAtom.get(ev.get_atom())); - if (in != null && !in.equals(dimensions.getInsets())) { - handleCorrectInsets(in); - } - } else { - getWMSetInsets(XAtom.get(ev.get_atom())); + wm_set_insets = null; + Insets in = getWMSetInsets(XAtom.get(ev.get_atom())); + if (isReparented() && (!isMapped() || getMWMDecorTitleProperty().isPresent()) && + in != null && !copyAndScaleDown(in).equals(dimensions.getInsets())) { + handleCorrectInsets(in); } } else { if (!isReparented()) { @@ -367,7 +362,7 @@ public void handlePropertyNotify(XEvent xev) { if (!isEmbedded() && !isTargetUndecorated()) { lastKnownInsets.put(getClass(), in); } - if (!in.equals(dimensions.getInsets())) { + if (!copyAndScaleDown(in).equals(dimensions.getInsets())) { if (insets_corrected || isMaximized()) { currentInsets = in; insets_corrected = true; @@ -402,6 +397,9 @@ public void handleReparentNotifyEvent(XEvent xev) { if (insLog.isLoggable(PlatformLogger.Level.FINE)) { insLog.fine(xe.toString()); } + + setPendingConfigureEvent(null); + reparent_serial = xe.get_serial(); long root = XlibWrapper.RootWindow(XToolkit.getDisplay(), getScreenNumber()); @@ -415,6 +413,10 @@ public void handleReparentNotifyEvent(XEvent xev) { insets_corrected = true; reshape(dimensions, SET_SIZE, false); } else if (xe.get_parent() == root) { + if (!isReparented()) { + // X server on Windows (e.g. Cygwin/X) does perform a no-op reparenting to the root window + return; + } configure_seen = false; insets_corrected = false; @@ -445,7 +447,7 @@ public void handleReparentNotifyEvent(XEvent xev) { } // If these insets are equal to our current insets - no actions are necessary Insets dimInsets = dimensions.getInsets(); - if (correctWM.equals(dimInsets)) { + if (copyAndScaleDown(correctWM).equals(dimInsets)) { insLog.finer("Insets are the same as estimated - no additional reshapes necessary"); no_reparent_artifacts = true; insets_corrected = true; @@ -454,9 +456,6 @@ public void handleReparentNotifyEvent(XEvent xev) { } } else { correctWM = XWM.getWM().getInsets(this, xe.get_window(), xe.get_parent()); - if (correctWM != null) { - correctWM = copyAndScaleDown(correctWM); - } if (insLog.isLoggable(PlatformLogger.Level.FINER)) { if (correctWM != null) { @@ -496,10 +495,11 @@ private void handleCorrectInsets(Insets correctWM) { } WindowDimensions newDimensions = new WindowDimensions(dimensions); newDimensions.setInsets(getRealInsets()); + Rectangle client = dimensions.getClientRect(); dimensions = newDimensions; insets_corrected = true; - if (isMaximized()) { + if (isMaximized() || client.width <= 0 || client.height <= 0) { return; } @@ -529,14 +529,11 @@ private Insets guessInsets() { } else { if (!isNull(currentInsets)) { /* insets were set on wdata by System Properties */ - return copy(currentInsets); + return currentInsets; } else { Insets res = getWMSetInsets(null); if (res == null) { res = XWM.getWM().guessInsets(this); - if (res != null) { - res = copyAndScaleDown(res); - } } return res; } @@ -548,15 +545,20 @@ private void applyGuessedInsets() { currentInsets = copy(guessed); } - private Insets getRealInsets() { + @Override + Insets getRealUnscaledInsets() { if (isNull(currentInsets)) { applyGuessedInsets(); } return currentInsets; } + Insets getRealInsets() { + return copyAndScaleDown(getRealUnscaledInsets()); + } + public Insets getInsets() { - Insets in = copy(getRealInsets()); + Insets in = getRealInsets(); in.top += getMenuBarHeight(); if (insLog.isLoggable(PlatformLogger.Level.FINEST)) { insLog.finest("Get insets returns {0}", in); @@ -629,6 +631,27 @@ private void reshape(WindowDimensions newDimensions, int op, updateSizeHints(dimensions); Rectangle client = dimensions.getClientRect(); checkShellRect(client); + + if (isTargetUndecorated() && this instanceof XFramePeer framePeer) { + if (isMaximized()) { + // Under Xorg, if an undecorated (read: client-side decorated) + // window has been maximized (either vertically or horizontally), + // it cannot change its size programmatically until both maximized + // states have been cleared. And since the window is undecorated, it also + // cannot change its size with the user's help because + // "undecorated" means "no borders" and that, perhaps incorrectly, implies + // that there's nothing to grab on in order to resize interactively. + // To exit this viscous circle, drop the maximized state. This does have + // unpleasant side effects (such as an animation played by the WM), but + // those seem to be a lesser evil than the total inability to resize. + int state = framePeer.getState(); + if ((state & Frame.MAXIMIZED_BOTH) != Frame.MAXIMIZED_BOTH) { + state &= ~Frame.MAXIMIZED_BOTH; + framePeer.setExtendedState(state); + } + } + } + setShellBounds(client); if (content != null && !content.getSize().equals(newDimensions.getSize())) @@ -697,7 +720,7 @@ private void reshape(int x, int y, int width, int height, int operation, break; case SET_CLIENT_SIZE: { // Sets client rect size. Width and height contain insets. - Insets in = currentInsets; + Insets in = getRealInsets(); width -= in.left+in.right; height -= in.top+in.bottom; dims.setClientSize(width, height); @@ -741,6 +764,30 @@ void reconfigureContentWindow(WindowDimensions dims) { return; } content.setContentBounds(dims); + content_reconfigured = true; + } + + private XEvent pendingConfigureEvent; + + private void setPendingConfigureEvent(XConfigureEvent xev) { + if (pendingConfigureEvent != null) { + pendingConfigureEvent.dispose(); + } + pendingConfigureEvent = xev == null ? null : xev.clone(); + } + + private void processPendingConfigureEvent() { + if (pendingConfigureEvent != null) { + processConfigureEvent(pendingConfigureEvent.get_xconfigure()); + pendingConfigureEvent.dispose(); + pendingConfigureEvent = null; + } + } + + @Override + public void handleMapNotifyEvent(XEvent xev) { + processPendingConfigureEvent(); + super.handleMapNotifyEvent(xev); } boolean no_reparent_artifacts = false; @@ -781,24 +828,30 @@ public void handleConfigureNotifyEvent(XEvent xev) { return; } - /* - * Some window managers configure before we are reparented and - * the send event flag is set! ugh... (Enlightenment for one, - * possibly MWM as well). If we haven't been reparented yet - * this is just the WM shuffling us into position. Ignore - * it!!!! or we wind up in a bogus location. - */ int runningWM = XWM.getWMID(); if (insLog.isLoggable(PlatformLogger.Level.FINE)) { insLog.fine("reparented={0}, visible={1}, WM={2}, decorations={3}", isReparented(), isVisible(), runningWM, getDecorations()); } - if (!isReparented() && isVisible() && runningWM != XWM.NO_WM - && !XWM.isNonReparentingWM() - && getDecorations() != XWindowAttributesData.AWT_DECOR_NONE) { - insLog.fine("- visible but not reparented, skipping"); - return; + if (!isReparented() && isVisible() && getDecorations() != XWindowAttributesData.AWT_DECOR_NONE) { + if (ENABLE_REPARENTING_CHECK) { + if (runningWM != XWM.NO_WM && !XWM.isNonReparentingWM()) { + insLog.fine("- visible but not reparented, skipping"); + return; + } + } else if (!isMapped()) { + // For reparenting window managers we're not processing ConfigureNotify events received before + // ReparentNotify. But we cannot know for sure whether WM is reparenting or not, so we remember + // the last received ConfigureNotify event, and process it at the time MapNotify is received. + setPendingConfigureEvent(xe); + return; + } } + + processConfigureEvent(xe); + } + + private void processConfigureEvent(XConfigureEvent xe) { //Last chance to correct insets if (!insets_corrected && getDecorations() != XWindowAttributesData.AWT_DECOR_NONE) { long parent = XlibUtil.getParentWindow(window); @@ -811,7 +864,7 @@ && getDecorations() != XWindowAttributesData.AWT_DECOR_NONE) { } } if (correctWM != null) { - handleCorrectInsets(copyAndScaleDown(correctWM)); + handleCorrectInsets(correctWM); } else { //Only one attempt to correct insets is made (to lower risk) //if insets are still not available we simply set the flag @@ -821,29 +874,37 @@ && getDecorations() != XWindowAttributesData.AWT_DECOR_NONE) { updateChildrenSizes(); - Point newLocation = getNewLocation(xe, currentInsets.left, currentInsets.top); - WindowDimensions newDimensions = - new WindowDimensions(newLocation, - new Dimension(scaleDown(xe.get_width()), - scaleDown(xe.get_height())), - copy(currentInsets), true); - - if (insLog.isLoggable(PlatformLogger.Level.FINER)) { - insLog.finer("Insets are {0}, new dimensions {1}", - currentInsets, newDimensions); - } + WindowLocation eventLocation = getNewLocation(xe); + Dimension eventDimension = new Dimension(xe.get_width(), xe.get_height()); + boolean xinerama = XToolkit.localEnv.runningXinerama(); - checkIfOnNewScreen(newDimensions.getBounds()); - - Point oldLocation = getLocation(); - dimensions = newDimensions; - if (!newLocation.equals(oldLocation)) { - handleMoved(newDimensions); - } - reconfigureContentWindow(newDimensions); - updateChildrenSizes(); + SunToolkit.executeOnEventHandlerThread(target, () -> { + Point oldLocation = getLocation(); + Dimension newSize = xinerama + ? checkIfOnNewScreen(new Rectangle(eventLocation.getDeviceLocation(), eventDimension)) + : new Dimension(scaleDown(eventDimension.width), scaleDown(eventDimension.height)); + Point newUserLocation = eventLocation.getUserLocation(); + WindowDimensions newDimensions = new WindowDimensions(newUserLocation, newSize, getRealInsets(), true); + if (insLog.isLoggable(PlatformLogger.Level.FINER)) { + insLog.finer("Insets are {0}, new dimensions {1}", + getRealInsets(), newDimensions); + } + dimensions = newDimensions; + if (!newUserLocation.equals(oldLocation)) { + handleMoved(newDimensions); + } + reconfigureContentWindow(newDimensions); + updateChildrenSizes(); + repositionSecurityWarning(); + }); + } - repositionSecurityWarning(); + @Override + WindowLocation queryXLocation() { + XContentWindow c = content; + boolean client = c == null || !content_reconfigured; + return new WindowLocation(XlibUtil.translateCoordinates(client ? window : c.getWindow(), + XlibWrapper.RootWindow(XToolkit.getDisplay(), getScreenNumber()), 0, 0), client); } private void checkShellRectSize(Rectangle shellRect) { @@ -870,9 +931,9 @@ private void setShellBounds(Rectangle rec) { insLog.fine("Setting shell bounds on " + this + " to " + rec); } updateSizeHints(rec.x, rec.y, rec.width, rec.height); + Point p = parentWindow == null ? scaleUp(rec.x, rec.y) : new Point(scaleUp(rec.x), scaleUp(rec.y)); XlibWrapper.XMoveResizeWindow(XToolkit.getDisplay(), getShell(), - scaleUp(rec.x), scaleUp(rec.y), - scaleUp(rec.width), scaleUp(rec.height)); + p.x, p.y, scaleUp(rec.width), scaleUp(rec.height)); } private void setShellSize(Rectangle rec) { @@ -889,8 +950,8 @@ private void setShellPosition(Rectangle rec) { insLog.fine("Setting shell position on " + this + " to " + rec); } updateSizeHints(rec.x, rec.y, rec.width, rec.height); - XlibWrapper.XMoveWindow(XToolkit.getDisplay(), getShell(), - scaleUp(rec.x), scaleUp(rec.y)); + Point p = parentWindow == null ? scaleUp(rec.x, rec.y) : new Point(scaleUp(rec.x), scaleUp(rec.y)); + XlibWrapper.XMoveWindow(XToolkit.getDisplay(), getShell(), p.x, p.y); } public void setResizable(boolean resizable) { @@ -1072,15 +1133,32 @@ public void handleClientMessage(XEvent xev) { super.handleClientMessage(xev); XClientMessageEvent cl = xev.get_xclient(); if ((wm_protocols != null) && (cl.get_message_type() == wm_protocols.getAtom())) { + long timestamp = getTimeStampFromClientMessage(cl); + // We should treat WM_TAKE_FOCUS and WM_DELETE_WINDOW messages as user interaction, as they can originate + // e.g. from user clicking on window title bar and window close button correspondingly + // (there will be no ButtonPress/ButtonRelease events in those cases). + // The received timestamp will be used to set _NET_WM_USER_TIME on newly opened windows to ensure their + // correct focusing/positioning, but we don't set it on current window to avoid race conditions (when e.g. + // WM_TAKE_FOCUS arrives around the time of new window opening). + setUserTime(timestamp, true, false); + if (cl.get_data(0) == wm_delete_window.getAtom()) { handleQuit(); } else if (cl.get_data(0) == wm_take_focus.getAtom()) { - handleWmTakeFocus(cl); + handleWmTakeFocus(timestamp); } } } - private void handleWmTakeFocus(XClientMessageEvent cl) { + private static long getTimeStampFromClientMessage(XClientMessageEvent cl) { + long requestTimeStamp = cl.get_data(1); + // older versions of KDE window manager always send 0 ('CurrentTime') as timestamp, + // even though it seems to violate ICCCM specification + // (see https://bugs.kde.org/show_bug.cgi?id=347153 and https://bugs.kde.org/show_bug.cgi?id=421068) + return requestTimeStamp == 0 ? XToolkit.getCurrentServerTime() : requestTimeStamp; + } + + private void handleWmTakeFocus(long requestTimeStamp) { if (focusLog.isLoggable(PlatformLogger.Level.FINE)) { focusLog.fine("WM_TAKE_FOCUS on {0}", this); } @@ -1091,14 +1169,14 @@ private void handleWmTakeFocus(XClientMessageEvent cl) { .getCurrentFocusedWindow(); Window activeWindow = XWindowPeer.getDecoratedOwner(focusedWindow); if (activeWindow != target) { - requestWindowFocus(cl.get_data(1), true); + requestWindowFocus(requestTimeStamp, true); } else { WindowEvent we = new WindowEvent(focusedWindow, WindowEvent.WINDOW_GAINED_FOCUS); sendEvent(we); } } else { - requestWindowFocus(cl.get_data(1), true); + requestWindowFocus(requestTimeStamp, true); } } @@ -1199,7 +1277,7 @@ boolean isMaximized() { @Override boolean isOverrideRedirect() { - return Window.Type.POPUP.equals(getWindowType()); + return Window.Type.POPUP.equals(getWindowType()) && !XWM.isKDE2(); } public boolean requestWindowFocus(long time, boolean timeProvided) { @@ -1216,6 +1294,18 @@ public boolean requestWindowFocus(long time, boolean timeProvided) { } XWindowPeer toFocus = this; + + if (!FULL_MODAL_TRANSIENTS_CHAIN && modalBlocker != null && !haveCommonAncestor(target, modalBlocker)) { + toFocus = AWTAccessor.getComponentAccessor().getPeer(modalBlocker); + // raising an already top-most window is a no-op, but we perform corresponding + // check here to avoid xmonad WM going into an infinite loop - raise request + // causes it to refresh internal state and re-send WM_TAKE_FOCUS message + if (!toFocus.isTopMostWindow()) { + toFocus.toFront(); + return false; + } + } + while (toFocus.nextTransientFor != null) { toFocus = toFocus.nextTransientFor; } @@ -1290,7 +1380,7 @@ public void handleWindowFocusIn(long serial) { * WM_TAKE_FOCUS (when FocusIn is generated via XSetInputFocus call) but * definitely before the Frame gets FocusIn event (when this method is called). */ - postEvent(new InvocationEvent(target, new Runnable() { + postEvent(new PeerEvent(target, new Runnable() { public void run() { XWindowPeer fw = null; synchronized (getStateLock()) { @@ -1302,7 +1392,7 @@ public void run() { } fw.handleWindowFocusIn_Dispatch(); } - })); + }, PeerEvent.ULTIMATE_PRIORITY_EVENT)); } } @@ -1339,4 +1429,44 @@ public final Optional getMWMDecorTitleProperty() { public final boolean getWindowTitleVisible() { return getMWMDecorTitleProperty().orElse(true); } + + @Override + void syncBounds() { + Rectangle r = target.getBounds(); + Insets ins = getRealInsets(); + if (r.width <= ins.left + ins.right || r.height <= ins.top + ins.bottom) { + return; + } + + if (XWindowPeer.RESIZE_WITH_SCALE) { + if (syncSizeOnly && dimensions != null) { + dimensions.setSize(r.width, r.height); + dimensions.setInsets(ins); + boolean isMaximized = target instanceof Frame f && (f.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0; + // When a window is maximized, affirming its size through an explicit request to the X server + // may make the window fullscreen, which has undesirable consequences. Also, when a window + // already has the maximized attributes, it is already properly sized, so no need to + // resize explicitly. + if (!isMaximized) { + xSetSize(r.width, r.height); + } + } else { + dimensions = new WindowDimensions(r, ins, false); + xSetBounds(r.x, r.y, r.width, r.height); + } + } + reconfigureContentWindow(dimensions); + doValidateSurface(); + layout(); + } + + @Override + public boolean updateGraphicsData(GraphicsConfiguration gc) { + if (content != null) { + content.initGraphicsConfiguration(); + } + boolean ret = super.updateGraphicsData(gc); + updateMinimumSize(); + return ret; + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java index 4866da3c718a..6945393220cc 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java @@ -155,4 +155,25 @@ boolean isFocusedWindowModalBlocker() { } return super.isFocusedWindowModalBlocker(); } + + @Override + public void handleUnmapNotifyEvent(XEvent xev) { + super.handleUnmapNotifyEvent(xev); + if (visible && ((Dialog)target).isModal() && XWM.getWMID() == XWM.KDE2_WM) { + // the case of modal dialog window being minimized (iconified) on KDE + // (other WMs don't seem to allow minimizing) + Vector windowPeers = collectJavaToplevels(); + for (XWindowPeer peer : windowPeers) { + if (peer.modalBlocker == target) { + XToolkit.awtLock(); + try { + XlibWrapper.XIconifyWindow(XToolkit.getDisplay(), peer.getWindow(), peer.getScreenNumber()); + } + finally { + XToolkit.awtUnlock(); + } + } + } + } + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XDnDDropTargetProtocol.java b/src/java.desktop/unix/classes/sun/awt/X11/XDnDDropTargetProtocol.java index 89a4fecabd7c..6d1776f3ed8e 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XDnDDropTargetProtocol.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XDnDDropTargetProtocol.java @@ -33,6 +33,7 @@ import java.io.IOException; +import sun.awt.X11GraphicsEnvironment; import sun.util.logging.PlatformLogger; import jdk.internal.misc.Unsafe; @@ -606,22 +607,15 @@ private boolean processXdndPosition(XClientMessageEvent xclient) { y = (int)(xclient.get_data(2) & 0xFFFF); if (xwindow != null) { - x = xwindow.scaleDown(x); - y = xwindow.scaleDown(y); + Point p = xwindow.scaleDown(x, y); + x = p.x; + y = p.y; } else { - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - for (GraphicsDevice gd : ge.getScreenDevices()) { - X11GraphicsConfig gc = (X11GraphicsConfig)gd.getDefaultConfiguration(); - Rectangle rt = gc.getBounds(); - rt.x = gc.scaleUp(rt.x); - rt.y = gc.scaleUp(rt.y); - rt.width = gc.scaleUp(rt.width); - rt.height = gc.scaleUp(rt.height); - if (rt.contains(x, y)) { - x = gc.scaleDown(x); - y = gc.scaleDown(y); - break; - } + Point p = ((X11GraphicsEnvironment) GraphicsEnvironment.getLocalGraphicsEnvironment()) + .scaleDown(null, x, y); + if (p != null) { + x = p.x; + y = p.y; } long receiver = @@ -708,6 +702,7 @@ private boolean processXdndDrop(XClientMessageEvent xclient) { } if (targetXWindow != null) { + targetXWindow.setUserTime(xclient.get_data(2), true); notifyProtocolListener(targetXWindow, sourceX, sourceY, userAction, xclient, MouseEvent.MOUSE_RELEASED); } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java index cf2a411e7e50..95b52c0dcef4 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java @@ -217,7 +217,7 @@ public boolean requestFocus(Component lightweightChild, { int result = XKeyboardFocusManagerPeer .shouldNativelyFocusHeavyweight(proxy, lightweightChild, - temporary, false, time, cause); + temporary, false, time, cause, false); switch (result) { case XKeyboardFocusManagerPeer.SNFH_FAILURE: diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFramePeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFramePeer.java index 93c1ebd092ee..28b40890eb12 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFramePeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFramePeer.java @@ -142,30 +142,34 @@ public void handleConfigureNotifyEvent(XEvent xev) xembedLog.fine(xe.toString()); } + WindowLocation eventLocation = getNewLocation(xe); + Dimension eventDimension = new Dimension(xe.get_width(), xe.get_height()); + boolean xinerama = XToolkit.localEnv.runningXinerama(); // fix for 5063031 // if we use super.handleConfigureNotifyEvent() we would get wrong // size and position because embedded frame really is NOT a decorated one - checkIfOnNewScreen(toGlobal(new Rectangle(scaleDown(xe.get_x()), - scaleDown(xe.get_y()), - scaleDown(xe.get_width()), - scaleDown(xe.get_height())))); - - Rectangle oldBounds = getBounds(); - - synchronized (getStateLock()) { - x = scaleDown(xe.get_x()); - y = scaleDown(xe.get_y()); - width = scaleDown(xe.get_width()); - height = scaleDown(xe.get_height()); - - dimensions.setClientSize(width, height); - dimensions.setLocation(x, y); - } + SunToolkit.executeOnEventHandlerThread(target, () -> { + Point newUserLocation = eventLocation.getUserLocation(); + Rectangle oldBounds = getBounds(); + Dimension newSize = xinerama + ? checkIfOnNewScreen(new Rectangle(eventLocation.getDeviceLocation(), eventDimension)) + : new Dimension(scaleDown(eventDimension.width), scaleDown(eventDimension.height)); + + synchronized (getStateLock()) { + x = newUserLocation.x; + y = newUserLocation.y; + width = newSize.width; + height = newSize.height; + + dimensions.setClientSize(width, height); + dimensions.setLocation(x, y); + } - if (!getLocation().equals(oldBounds.getLocation())) { - handleMoved(dimensions); - } - reconfigureContentWindow(dimensions); + if (!getLocation().equals(oldBounds.getLocation())) { + handleMoved(dimensions); + } + reconfigureContentWindow(dimensions); + }); } protected void traverseOutForward() { @@ -274,16 +278,16 @@ public int getAbsoluteX() { Point absoluteLoc = XlibUtil.translateCoordinates(getWindow(), XToolkit.getDefaultRootWindow(), - new Point(0, 0), getScale()); - return absoluteLoc != null ? absoluteLoc.x : 0; + 0, 0); + return absoluteLoc != null ? scaleDown(absoluteLoc.x, absoluteLoc.y).x : 0; } public int getAbsoluteY() { Point absoluteLoc = XlibUtil.translateCoordinates(getWindow(), XToolkit.getDefaultRootWindow(), - new Point(0, 0), getScale()); - return absoluteLoc != null ? absoluteLoc.y : 0; + 0, 0); + return absoluteLoc != null ? scaleDown(absoluteLoc.x, absoluteLoc.y).y : 0; } public int getWidth() { diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java index c7f3ba95bc16..14ecd999b8e5 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java @@ -30,11 +30,13 @@ import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; +import java.awt.GraphicsConfiguration; import java.awt.Insets; import java.awt.MenuBar; import java.awt.Rectangle; import java.awt.peer.FramePeer; import sun.awt.SunToolkit; +import sun.awt.X11GraphicsConfig; import sun.util.logging.PlatformLogger; import sun.awt.AWTAccessor; @@ -719,4 +721,14 @@ public void emulateActivation(boolean doActivate) { handleWindowFocusOut(null, 0); } } + + @Override + public boolean updateGraphicsData(GraphicsConfiguration gc) { + boolean ret = super.updateGraphicsData(gc); + if (menubarPeer != null) { + menubarPeer.initGraphicsConfiguration(); + menubarPeer.syncBounds(); + } + return ret; + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java b/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java index 54912312c55b..fa85ee8b0a8c 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,18 +26,33 @@ package sun.awt.X11; -import java.awt.AWTException; -import java.awt.Component; -import java.awt.Container; -import java.awt.Rectangle; +import java.awt.*; +import java.awt.event.*; +import java.awt.im.InputMethodRequests; import java.awt.im.spi.InputMethodContext; import java.awt.peer.ComponentPeer; +import java.lang.ref.WeakReference; +import java.util.Arrays; +import java.util.ArrayDeque; +import java.util.Iterator; +import java.util.Objects; +import java.util.Queue; +import java.util.function.Supplier; +import java.util.stream.Stream; import sun.awt.AWTAccessor; +import sun.awt.SunToolkit; +import sun.awt.X11GraphicsDevice; +import sun.awt.X11GraphicsEnvironment; import sun.awt.X11InputMethod; import sun.util.logging.PlatformLogger; +import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.text.JTextComponent; + /** * Input Method Adapter for XIM (without Motif) * @@ -47,6 +63,7 @@ public class XInputMethod extends X11InputMethod { public XInputMethod() throws AWTException { super(); + clientComponentCaretPositionTracker = new ClientComponentCaretPositionTracker(this); } public void setInputMethodContext(InputMethodContext context) { @@ -58,8 +75,139 @@ public void notifyClientWindowChange(Rectangle location) { if (peer != null) { adjustStatusWindow(peer.getContentWindow()); } + + if (doesSupportMovingCandidatesNativeWindow) { + clientComponentCaretPositionTracker.onNotifyClientWindowChange(location); + } + } + + @Override + public synchronized void activate() { + super.activate(); + + if (doesSupportMovingCandidatesNativeWindow) { + updateCandidatesNativeWindowPosition(true); + clientComponentCaretPositionTracker.startTracking(getClientComponent()); + } + } + + @Override + public synchronized void deactivate(boolean isTemporary) { + clientComponentCaretPositionTracker.stopTrackingCurrentComponent(); + super.deactivate(isTemporary); + } + + @Override + public void dispatchEvent(AWTEvent e) { + if (doesSupportMovingCandidatesNativeWindow) { + if (e.getID() == MouseEvent.MOUSE_PRESSED) { + /* doesSupportMovingCandidatesNativeWindow == true means that natively the IM uses XIMPreeditPosition + * input mode (the term "input style" is used in XOrg docs). + * The main flaw of this mode is that AWT doesn't receive any information about changes in the + * currently composed preedit text. In other words, Java applications don't know whether + * composing is happening now or not and don't have a way to get the current preedit text. Therefore, + * when the caret position changes in response to mouse clicks, Swing doesn't understand that + * there's a need to discard the preedit text (because it thinks there is no any), see + * javax.swing.text.JTextComponent.ComposedTextCaret#positionCaret. + * To prevent the preedit text from following the caret when it's moved in response to mouse clicks, + * let's manually discard the preedit text here. + */ + endComposition(); + } + clientComponentCaretPositionTracker.onDispatchEvent(e); + } + super.dispatchEvent(e); + } + + @Override + public void endComposition() { + if (!doesSupportMovingCandidatesNativeWindow) { + // Use the old implementation if + // the IM isn't using the new mode introduced in JBR-2460 (XIMPreeditPosition) + super.endComposition(); + return; + } + + if (disposed) { + return; + } + + String preeditText = invokeResetXIC(); + needResetXIC = false; + + awtLock(); + try { + if (composedText != null) { + composedText = null; + // Remove any existing composed text by posting an InputMethodEvent with null composed text + postInputMethodEvent( + InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, + null, + 0, + null, + null, + EventQueue.getMostRecentEventTime() + ); + } + + if (committedText != null) { + preeditText = preeditText == null ? committedText : committedText + preeditText; + committedText = null; + } + + if (preeditText != null && !preeditText.isEmpty()) { + dispatchCommittedText(preeditText); + } + } finally { + awtUnlock(); + } + } + + // Is called from native + private static boolean isJbNewXimClientEnabled() { + try { + final String strVal = System.getProperty("jb.awt.newXimClient.enabled"); + final boolean defVal = true; + + return (strVal == null) ? defVal : Boolean.parseBoolean(strVal); + } catch (Exception err) { + if (log.isLoggable(PlatformLogger.Level.SEVERE)) { + log.severe("Error at isJbNewXimClientEnabled", err); + } + } + + return false; + } + + protected boolean preferXBelowTheSpot() { + try { + if (BrokenImDetectionContext.EATEN_EVENTS_THRESHOLD > 0) { + // The fix of JBR-1573, + // which is incompatible with the implementation of the native below-the-spot mode (a.k.a. X over-the-spot), + // is explicitly enabled. + // So let's disable this mode in favor of that fix. + + if (log.isLoggable(PlatformLogger.Level.WARNING)) { + log.warning("The property \"jb.awt.newXimClient.preferBelowTheSpot\" is ignored in favor of the explicitly enabled \"recreate.x11.input.method\""); + } + + return false; + } + + final String strVal = System.getProperty("jb.awt.newXimClient.preferBelowTheSpot"); + final boolean defVal = true; + + return (strVal == null) ? defVal : Boolean.parseBoolean(strVal); + } catch (Exception err) { + if (log.isLoggable(PlatformLogger.Level.SEVERE)) { + log.severe("Error at isJbNewXimClientEnabled", err); + } + } + + return false; } + protected boolean openXIM() { return openXIMNative(XToolkit.getDisplay()); } @@ -69,14 +217,24 @@ protected boolean createXIC() { if (peer == null) { return false; } - return createXICNative(peer.getContentWindow()); + return createXICNative(peer.getContentWindow(), preferXBelowTheSpot()); } + protected boolean recreateXIC(int ctxid) { + final XComponentPeer peer = (XComponentPeer)getPeer(clientComponentWindow); + if (peer == null || pData == 0) + return true; + return recreateXICNative(peer.getContentWindow(), pData, ctxid, preferXBelowTheSpot()); + } + protected int releaseXIC() { + if (pData == 0) + return 0; + return releaseXICNative(pData); + } private static volatile long xicFocus; - protected void setXICFocus(ComponentPeer peer, - boolean value, boolean active) { + protected void setXICFocus(ComponentPeer peer, boolean value, boolean active) { if (peer == null) { return; } @@ -84,15 +242,17 @@ protected void setXICFocus(ComponentPeer peer, setXICFocusNative(((XComponentPeer)peer).getContentWindow(), value, active); + + doesSupportMovingCandidatesNativeWindow = value && doesFocusedXICSupportMovingCandidatesNativeWindow(); } public static long getXICFocus() { return xicFocus; } -/* XAWT_HACK FIX ME! - do NOT call client code! -*/ + /* XAWT_HACK FIX ME! + do NOT call client code! + */ protected Container getParent(Component client) { return client.getParent(); } @@ -145,12 +305,646 @@ long getCurrentParentWindow() { return peer.getContentWindow(); } + + // JBR-6456: Sudden keyboard death on Linux using iBus. + // xicDestroyMustBeDelayed, XIC_DELAYED_TO_BE_DESTROYED_CAPACITY, xicDelayedToBeDestroyed can only be accessed + // under the AWT lock + // See the #disposeXIC method for the purpose of these fields + private static boolean xicDestroyMustBeDelayed = false; + private static final int XIC_DELAYED_TO_BE_DESTROYED_CAPACITY = 16; + private static final Queue xicDelayedToBeDestroyed = new ArrayDeque<>(XIC_DELAYED_TO_BE_DESTROYED_CAPACITY); + + static void delayAllXICDestroyUntilAFurtherNotice() { + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("delayAllXICDestroyUntilAFurtherNotice(): is being called", new Throwable("Stacktrace")); + } + + XToolkit.awtLock(); + try { + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("delayAllXICDestroyUntilAFurtherNotice(): xicDestroyMustBeDelayed=={0}", xicDestroyMustBeDelayed); + } + + xicDestroyMustBeDelayed = true; + } finally { + XToolkit.awtUnlock(); + } + } + + static void delayedXICDestroyShouldBeDone() { + XToolkit.awtLock(); + try { + xicDestroyMustBeDelayed = false; + doDelayedXICDestroy(false, -1); + } finally { + XToolkit.awtUnlock(); + } + } + + private static void doDelayedXICDestroy(boolean forced, int maxCountToDestroy) { + final boolean isFineLoggable = log.isLoggable(PlatformLogger.Level.FINE); + + if (isFineLoggable) { + log.fine( + "doDelayedXICDestroy(forced==" + forced + ", maxCountToDestroy==" + maxCountToDestroy + "): is being called", + new Throwable("Stacktrace") + ); + } + + assert(SunToolkit.isAWTLockHeldByCurrentThread()); + assert(forced || !xicDestroyMustBeDelayed); + + while ( (maxCountToDestroy != 0) && !xicDelayedToBeDestroyed.isEmpty() ) { + final long pX11IMData = xicDelayedToBeDestroyed.remove(); + --maxCountToDestroy; + + if (isFineLoggable) { + log.fine("doDelayedXICDestroy(): destroying pX11IMData={0}", pX11IMData); + } + + assert(pX11IMData != 0); + delayedDisposeXIC_disposeXICNative(pX11IMData); + } + } + + @Override + protected void disposeXIC() { + awtLock(); + try { + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("disposeXIC(): xicDestroyMustBeDelayed=={0}", xicDestroyMustBeDelayed); + } + + if (!xicDestroyMustBeDelayed) { + // JBR-6456: Sudden keyboard death on Linux using iBus. + // iBus's X11 frontend being run in the async mode (IBUS_ENABLE_SYNC_MODE=0) has a bug leading to a + // violation of the communication protocol between iBus and Xlib (so-called "XIM protocol"), + // later causing Xlib to behave unexpectedly from iBus's point of view, breaking iBus's + // internal state. After all, iBus starts to "steal" all the keyboard events + // (so that each call of XFilterEvent(...) with an instance of XKeyEvent returns True). + // The initial iBus's bug only appears when XDestroyIC(...) gets called right after a call of + // XFilterEvent(...) with an instance of XKeyEvent returned True, + // meaning that iBus has started, but hasn't finished yet processing of the key event. + // In case of AWT/Swing apps, XDestroyIC gets called whenever a focused HW window gets closed + // (because it leads to disposing of the associated input context, + // see java.awt.Window#doDispose and sun.awt.im.InputContext#dispose) + // So, to work around iBus's bug, we have to avoid calling XDestroyIC until iBus finishes processing of + // all the keyboard events it has already started processing of, i.e. until a call of + // XFilterEvent(...) returns False. + // To achieve that, the implemented fix delays destroying of input contexts whenever a call of + // XFilterEvent(...) with an instance of XKeyEvent returns True until one of the next calls of + // XFilterEvent(...) with the same instance of XKeyEvent returns False. + // The delaying is implemented via storing the native pointers to the input contexts to + // xicDelayedToBeDestroyed instead of applying XDestroyIC(...) immediately. + // The xicDelayedToBeDestroyed's size is explicitly limited to + // XIC_DELAYED_TO_BE_DESTROYED_CAPACITY. If the limit gets reached, a few input contexts gets + // pulled from there and destroyed regardless of the current value of xicDestroyMustBeDelayed. + // The xicDestroyMustBeDelayed field is responsible for indication whether it's required to delay + // the destroying or not. It gets set in #delayAllXICDestroyUntilAFurtherNotice + // and unset in delayedXICDestroyShouldBeDone; both are called by sun.awt.X11.XToolkit depending on + // the value returned by the calls of sun.awt.X11.XlibWrapper#XFilterEvent. + + super.disposeXIC(); + return; + } + + final long pX11IMData = pData; + + // To make sure that the delayed to be destroyed input context won't get used by AWT/Swing or Xlib + // by a mistake, the following things are done: + // 1. The input method focus gets detached from the input context (via a call of XUnsetICFocus) + // 2. All the native pointers to this instance of XInputMethod + // (now it's just the variable currentX11InputMethodInstance in awt_InputMethod.c) get unset + // 3. All the java pointers to the native context (now it's just sun.awt.X11InputMethodBase#pData) + // get unset as well + delayedDisposeXIC_preparation_unsetFocusAndDetachCurrentXICNative(); + + // 4. The state of the native context gets reset (effectively via a call of XmbResetIC) + delayedDisposeXIC_preparation_resetSpecifiedCtxNative(pX11IMData); + + if (pX11IMData == 0) { + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine("disposeXIC(): pX11IMData==NULL, skipped"); + } + return; + } + + // If the storage is full, a few input context are pulled from there and destroyed regardless of + // the value of xicDestroyMustBeDelayed + if (xicDelayedToBeDestroyed.size() >= XIC_DELAYED_TO_BE_DESTROYED_CAPACITY) { + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine( + "disposeXIC(): xicDelayedToBeDestroyed.size()=={0} >= XIC_DELAYED_TO_BE_DESTROYED_CAPACITY", + xicDelayedToBeDestroyed.size() + ); + } + + doDelayedXICDestroy(true, xicDelayedToBeDestroyed.size() - XIC_DELAYED_TO_BE_DESTROYED_CAPACITY + 1); + } + + if (log.isLoggable(PlatformLogger.Level.FINE)) { + log.fine( + "disposeXIC(): adding pX11IMData=={0} to xicDelayedToBeDestroyed (which already contains {1} elements)", + pX11IMData, xicDelayedToBeDestroyed.size() + ); + } + xicDelayedToBeDestroyed.add(pX11IMData); + } finally { + awtUnlock(); + } + } + + + static void onXKeyEventFiltering(final boolean isXKeyEventFiltered) { + // Fix of JBR-1573, JBR-2444, JBR-4394 (a.k.a. IDEA-246833). + // Input method is considered broken if and only if all the following statements are true: + // * XFilterEvent have filtered more than filteredEventsThreshold last events of types KeyPress, KeyRelease; + // * Input method hasn't been changed (e.g. recreated); + // * The input context is not in preedit state (XNPreeditStartCallback has been called but then XNPreeditDoneCallback - hasn't) + + // The functionality is disabled + if (BrokenImDetectionContext.EATEN_EVENTS_THRESHOLD < 1) { + return; + } + // Must be called within AWT_LOCK + if (!XToolkit.isAWTLockHeldByCurrentThread()) { + return; + } + + if (isXKeyEventFiltered) { + final long nativeDataPtr = BrokenImDetectionContext.obtainCurrentXimNativeDataPtr(); + if (nativeDataPtr == 0) { + ++BrokenImDetectionContext.eatenKeyEventsCount; + } else { + final int isDuringPreediting = BrokenImDetectionContext.isDuringPreediting(nativeDataPtr); + if (isDuringPreediting > 0) { + BrokenImDetectionContext.eatenKeyEventsCount = 0; + } else if (isDuringPreediting == 0) { + ++BrokenImDetectionContext.eatenKeyEventsCount; + } else if (BrokenImDetectionContext.isCurrentXicPassive(nativeDataPtr)) { + // Unfortunately for passive XIC (XIMPreeditNothing | XIMStatusNothing) we have no way to get know + // whether the XIC is in preediting state or not, so we won't handle this case. + BrokenImDetectionContext.eatenKeyEventsCount = 0; + } else { + ++BrokenImDetectionContext.eatenKeyEventsCount; + } + } + } else { + BrokenImDetectionContext.eatenKeyEventsCount = 0; + } + + if (BrokenImDetectionContext.eatenKeyEventsCount > BrokenImDetectionContext.EATEN_EVENTS_THRESHOLD) { + BrokenImDetectionContext.eatenKeyEventsCount = 0; + recreateAllXIC(); + } + } + + private static class BrokenImDetectionContext { + static final int EATEN_EVENTS_THRESHOLD; + + static int eatenKeyEventsCount = 0; + + /** + * @return pointer to X11InputMethodData + */ + static native long obtainCurrentXimNativeDataPtr(); + + /** + * <0 - unknown + * >0 - true + * 0 - false + */ + static native int isDuringPreediting(long ximNativeDataPtr); + + static native boolean isCurrentXicPassive(long ximNativeDataPtr); + + + static { + int eatenEventsThresholdInitializer = 0; + final String eventsThresholdMode = System.getProperty("recreate.x11.input.method", "false"); + + if ("true".equalsIgnoreCase(eventsThresholdMode)) { + eatenEventsThresholdInitializer = 7; + } else if (!"false".equalsIgnoreCase(eventsThresholdMode)) { + try { + eatenEventsThresholdInitializer = Integer.parseInt(eventsThresholdMode); + } catch (NumberFormatException err) { + log.warning( + "Invalid value of \"recreate.x11.input.method\" system property \"" + + eventsThresholdMode + + "\". Only \"true\", \"false\" and integer values are supported", + err + ); + } + } + + EATEN_EVENTS_THRESHOLD = eatenEventsThresholdInitializer; + } + } + + + // JBR-2460 + private volatile boolean doesSupportMovingCandidatesNativeWindow = false; + private Point lastKnownCandidatesNativeWindowAbsolutePosition = null; + + private void updateCandidatesNativeWindowPosition(final boolean forceUpdate) { + assert(SwingUtilities.isEventDispatchThread()); + + if (!doesSupportMovingCandidatesNativeWindow) { + return; + } + + final Component clientComponent = getClientComponent(); + if (clientComponent == null) { + // No client + return; + } + + final Window clientComponentWindow = getClientComponentWindow(); + if (clientComponentWindow == null) { + // Impossible? + return; + } + + if (!clientComponent.isShowing() || (!clientComponentWindow.isShowing())) { + // Components are not showing yet, so it's impossible to determine their location on the screen + // and/or the location of the caret + return; + } + + final Point clientComponentAbsolutePos = clientComponent.getLocationOnScreen(); + final int clientComponentAbsoluteMaxX = clientComponentAbsolutePos.x + clientComponent.getWidth(); + final int clientComponentAbsoluteMaxY = clientComponentAbsolutePos.y + clientComponent.getHeight(); + + // Initial values are the fallback which is the bottom-left corner of the component + Point expectedCandidatesNativeWindowAbsolutePos = new Point( + clientComponentAbsolutePos.x, + clientComponentAbsoluteMaxY + ); + + final InputMethodRequests clientImr = clientComponent.getInputMethodRequests(); + if (clientImr != null) { + // An active client + + final Rectangle caretRect = clientImr.getTextLocation(null); + if (caretRect != null) { + expectedCandidatesNativeWindowAbsolutePos.x = caretRect.x; + expectedCandidatesNativeWindowAbsolutePos.y = caretRect.y + caretRect.height; + } + } + + // Clamping within the client component's visible rect (if available and not empty) or just its bounds + final var clientComponentVisibleRect = getJComponentVisibleRectIfNotEmpty(clientComponent); + if (clientComponentVisibleRect == null) { + expectedCandidatesNativeWindowAbsolutePos.x = + Math.max(clientComponentAbsolutePos.x, Math.min(expectedCandidatesNativeWindowAbsolutePos.x, clientComponentAbsoluteMaxX - 1)); + expectedCandidatesNativeWindowAbsolutePos.y = + Math.max(clientComponentAbsolutePos.y, Math.min(expectedCandidatesNativeWindowAbsolutePos.y, clientComponentAbsoluteMaxY - 1)); + } else { + final int visibleBoundsAbsoluteMinX = clientComponentAbsolutePos.x + clientComponentVisibleRect.x; + final int visibleBoundsAbsoluteMaxX = visibleBoundsAbsoluteMinX + clientComponentVisibleRect.width; + final int visibleBoundsAbsoluteMinY = clientComponentAbsolutePos.y + clientComponentVisibleRect.y; + final int visibleBoundsAbsoluteMaxY = visibleBoundsAbsoluteMinY + clientComponentVisibleRect.height; + + expectedCandidatesNativeWindowAbsolutePos.x = + Math.max(visibleBoundsAbsoluteMinX, Math.min(expectedCandidatesNativeWindowAbsolutePos.x, visibleBoundsAbsoluteMaxX - 1)); + expectedCandidatesNativeWindowAbsolutePos.y = + Math.max(visibleBoundsAbsoluteMinY, Math.min(expectedCandidatesNativeWindowAbsolutePos.y, visibleBoundsAbsoluteMaxY - 1)); + } + + // Scaling the coordinates according to the screen's current scaling settings. + // To do it properly, we have to know the screen which the point is on. + // The code below supposes this is the one which clientComponent belongs to, because we've clamped + // the point coordinates within the component's bounds above. + final X11GraphicsEnvironment graphicsEnvironment = + ((X11GraphicsEnvironment) GraphicsEnvironment.getLocalGraphicsEnvironment()); + final X11GraphicsDevice candidatesNativeWindowDevice = getComponentX11Device(clientComponent); + Point scaledExpectedCandidatesNativeWindowAbsolutePos = graphicsEnvironment.scaleUp(candidatesNativeWindowDevice, + expectedCandidatesNativeWindowAbsolutePos.x, + expectedCandidatesNativeWindowAbsolutePos.y); + if (scaledExpectedCandidatesNativeWindowAbsolutePos != null) { + expectedCandidatesNativeWindowAbsolutePos = scaledExpectedCandidatesNativeWindowAbsolutePos; + } + + // Clamping within screen bounds (to avoid the input candidates window to appear outside a screen). + final Rectangle closestScreenScaledBounds = new Rectangle(); + final X11GraphicsDevice candidatesNativeWindowClosestScreen = findClosestScreenToPoint( + closestScreenScaledBounds, + expectedCandidatesNativeWindowAbsolutePos, + candidatesNativeWindowDevice + ); + if (candidatesNativeWindowClosestScreen != null) { + final int screenScaledBoundsXMax = closestScreenScaledBounds.x + closestScreenScaledBounds.width - 1; + final int screenScaledBoundsYMax = closestScreenScaledBounds.y + closestScreenScaledBounds.height - 1; + + expectedCandidatesNativeWindowAbsolutePos.x = + Math.max(closestScreenScaledBounds.x, Math.min(expectedCandidatesNativeWindowAbsolutePos.x, screenScaledBoundsXMax)); + expectedCandidatesNativeWindowAbsolutePos.y = + Math.max(closestScreenScaledBounds.y, Math.min(expectedCandidatesNativeWindowAbsolutePos.y, screenScaledBoundsYMax)); + } + + if (forceUpdate || !expectedCandidatesNativeWindowAbsolutePos.equals(lastKnownCandidatesNativeWindowAbsolutePosition)) { + // adjustCandidatesNativeWindowPosition expects coordinates relative to the client window + Point clientComponentWindowAbsolutePos = clientComponentWindow.getLocationOnScreen(); + final X11GraphicsDevice clientComponentWindowDevice = getComponentX11Device(clientComponentWindow); + Point scaledClientComponentWindowAbsolutePos = graphicsEnvironment.scaleUp(clientComponentWindowDevice, + clientComponentWindowAbsolutePos.x, + clientComponentWindowAbsolutePos.y); + if (scaledClientComponentWindowAbsolutePos != null) { + clientComponentWindowAbsolutePos = scaledClientComponentWindowAbsolutePos; + } + + final int relativeX = expectedCandidatesNativeWindowAbsolutePos.x - clientComponentWindowAbsolutePos.x; + final int relativeY = expectedCandidatesNativeWindowAbsolutePos.y - clientComponentWindowAbsolutePos.y; + + awtLock(); + try { + adjustCandidatesNativeWindowPosition(relativeX, relativeY); + } finally { + awtUnlock(); + } + + lastKnownCandidatesNativeWindowAbsolutePosition = expectedCandidatesNativeWindowAbsolutePos; + } + } + + private static Rectangle getJComponentVisibleRectIfNotEmpty(final Component component) { + if (component instanceof JComponent jComponent) { + final Rectangle result = jComponent.getVisibleRect(); + if ((result != null) && (result.width > 0) && (result.height > 0)) { + return result; + } + } + return null; + } + + private static X11GraphicsDevice getComponentX11Device(final Component component) { + if (component == null) return null; + + final var componentGc = component.getGraphicsConfiguration(); + if (componentGc == null) return null; + + return (componentGc.getDevice() instanceof X11GraphicsDevice result) ? result : null; + } + + private static X11GraphicsDevice findClosestScreenToPoint( + final Rectangle outScreenScaledBounds, + final Point absolutePointScaled, + final X11GraphicsDevice... screensToCheckFirst + ) { + assert(outScreenScaledBounds != null); + + if (absolutePointScaled == null) { + return null; + } + + final Iterator screensToCheck = + Stream.concat( // screensToCheckFirst + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() + Arrays.stream(screensToCheckFirst), + Stream.>of(() -> { + final var localGe = GraphicsEnvironment.getLocalGraphicsEnvironment(); + if (localGe != null) { + return localGe.getScreenDevices(); + } + return null; + }).flatMap(supplier -> Stream.of(supplier.get())) + ).map(device -> (device instanceof X11GraphicsDevice screen) ? screen : null) + .filter(Objects::nonNull) + .iterator(); + + int closestScreenMinDistance = Integer.MAX_VALUE; + X11GraphicsDevice result = null; + while (screensToCheck.hasNext()) { + final X11GraphicsDevice screen = screensToCheck.next(); + + final Rectangle screenBoundsScaled = screen.getBounds(); + if (screenBoundsScaled == null) { + continue; + } + screenBoundsScaled.width = screen.scaleUp(screenBoundsScaled.width); + screenBoundsScaled.height = screen.scaleUp(screenBoundsScaled.height); + + final int distance = obtainDistanceBetween(screenBoundsScaled, absolutePointScaled); + if (distance < closestScreenMinDistance) { + result = screen; + closestScreenMinDistance = distance; + + outScreenScaledBounds.x = screenBoundsScaled.x; + outScreenScaledBounds.y = screenBoundsScaled.y; + outScreenScaledBounds.width = screenBoundsScaled.width; + outScreenScaledBounds.height = screenBoundsScaled.height; + + if (distance < 1) { + break; + } + } + } + + return result; + } + + private static int obtainDistanceBetween(final Rectangle rectangle, final Point absolutePointScaled) { + if ((rectangle.width < 1) || (rectangle.height < 1)) { + return Integer.MAX_VALUE; + } + + final int screenBoundsScaledXMax = rectangle.x + rectangle.width - 1; + final int screenBoundsScaledYMax = rectangle.y + rectangle.height - 1; + + final int dx = Math.max(0, Math.max(rectangle.x - absolutePointScaled.x, absolutePointScaled.x - screenBoundsScaledXMax)); + final int dy = Math.max(0, Math.max(rectangle.y - absolutePointScaled.y, absolutePointScaled.y - screenBoundsScaledYMax)); + + return dx + dy; // just sum is enough for our purposes + } + + /* * Native methods */ private native boolean openXIMNative(long display); - private native boolean createXICNative(long window); - private native void setXICFocusNative(long window, - boolean value, boolean active); + private native boolean createXICNative(long window, boolean preferBelowTheSpot); + private native boolean recreateXICNative(long window, long px11data, int ctxid, boolean preferBelowTheSpot); + private native int releaseXICNative(long px11data); + private native void setXICFocusNative(long window, boolean value, boolean active); private native void adjustStatusWindow(long window); + + // 1. Applies XUnsetICFocus to the current input context + // 2. Unsets currentX11InputMethodInstance if it's set to this instance of XInputMethod + // 3. Unsets sun.awt.X11InputMethodBase#pData + private native void delayedDisposeXIC_preparation_unsetFocusAndDetachCurrentXICNative(); + // Applies XmbResetIC to the passed input context + private static native void delayedDisposeXIC_preparation_resetSpecifiedCtxNative(long pX11IMData); + // Applies XDestroyIC to the passed input context + private static native void delayedDisposeXIC_disposeXICNative(long pX11IMData); + + private native boolean doesFocusedXICSupportMovingCandidatesNativeWindow(); + + private native void adjustCandidatesNativeWindowPosition(int x, int y); + + + /** + * This class tries to track all the cases when the position of the parent XInputMethod's candidate window has + * to be updated. Here are the examples of such cases: + *
            + *
          • The caret position has changed ; + *
          • The component has been moved/resized ; + *
          • The component's window has been moved/resized ; + *
          • The component's text has been changed ; + *
          + * Tracking makes sense only when the parent XIM is in a mode allowing to move a native candidates window. + * This is controlled by a flag {@link XInputMethod#doesSupportMovingCandidatesNativeWindow}. + * Thus, the tracking gets enabled (via {@link #startTracking(Component)}) only when the flag is evaluated to true. + */ + private static class ClientComponentCaretPositionTracker implements ComponentListener, CaretListener, TextListener + { + public ClientComponentCaretPositionTracker(XInputMethod owner) { + this.owner = new WeakReference<>(owner); + } + + + public void startTracking(final Component component) { + stopTrackingCurrentComponent(); + + if (component == null) { + return; + } + + trackedComponent = new WeakReference<>(component); + + // Moving and changing the size causes a possible change of caret position + component.addComponentListener(this); + + if (component instanceof JTextComponent jtc) { + jtc.addCaretListener(this); + isCaretListenerInstalled = true; + } else if (component instanceof TextComponent tc) { + tc.addTextListener(this); + isTextListenerInstalled = true; + } + } + + public void stopTrackingCurrentComponent() { + final Component trackedComponentStrong; + if (trackedComponent == null) { + trackedComponentStrong = null; + } else { + trackedComponentStrong = trackedComponent.get(); + trackedComponent.clear(); + trackedComponent = null; + } + + if (trackedComponentStrong == null) { + isCaretListenerInstalled = false; + isTextListenerInstalled = false; + return; + } + + if (isTextListenerInstalled) { + isTextListenerInstalled = false; + ((TextComponent)trackedComponentStrong).removeTextListener(this); + } + + if (isCaretListenerInstalled) { + isCaretListenerInstalled = false; + ((JTextComponent)trackedComponentStrong).removeCaretListener(this); + } + + trackedComponentStrong.removeComponentListener(this); + } + + /* Listening callbacks */ + + public void onDispatchEvent(AWTEvent event) { + if (isCaretListenerInstalled) { + return; + } + + final int eventId = event.getID(); + + if ( (eventId >= MouseEvent.MOUSE_FIRST) && (eventId <= MouseEvent.MOUSE_LAST) ) { + // The event hasn't been dispatched yet, so the caret position couldn't be changed. + // Hence, we have to postpone the updating request. + SwingUtilities.invokeLater(() -> updateImCandidatesNativeWindowPosition(false)); + return; + } + + if ( !isTextListenerInstalled && (eventId >= KeyEvent.KEY_FIRST) && (eventId <= KeyEvent.KEY_LAST) ) { + // The event hasn't been dispatched yet, so the caret position couldn't be changed. + // Hence, we have to postpone the updating request. + SwingUtilities.invokeLater(() -> updateImCandidatesNativeWindowPosition(false)); + } + } + + public void onNotifyClientWindowChange(Rectangle location) { + if (location != null) { + updateImCandidatesNativeWindowPosition(lastKnownClientWindowBounds == null); + } + lastKnownClientWindowBounds = location; + } + + // ComponentListener + + @Override + public void componentHidden(ComponentEvent e) {} + + @Override + public void componentMoved(ComponentEvent e) { + updateImCandidatesNativeWindowPosition(false); + } + + @Override + public void componentResized(ComponentEvent e) { + updateImCandidatesNativeWindowPosition(false); + } + + @Override + public void componentShown(ComponentEvent e) { + updateImCandidatesNativeWindowPosition(false); + } + + // CaretListener + + @Override + public void caretUpdate(CaretEvent e) { + updateImCandidatesNativeWindowPosition(false); + } + + // TextListener + + @Override + public void textValueChanged(TextEvent e) { + updateImCandidatesNativeWindowPosition(false); + } + + /* Private parts */ + + private final WeakReference owner; + private WeakReference trackedComponent = null; + private boolean isCaretListenerInstalled = false; + private boolean isTextListenerInstalled = false; + private Rectangle lastKnownClientWindowBounds = null; + + + private void updateImCandidatesNativeWindowPosition(boolean forceUpdate) { + final XInputMethod ownerStrong = owner.get(); + + if ((ownerStrong == null) || (ownerStrong.isDisposed())) { + // The owning XInputMethod instance is no longer valid + + stopTrackingCurrentComponent(); + owner.clear(); + + return; + } + + if (!ownerStrong.isActive) { + stopTrackingCurrentComponent(); // will start tracking back when the owner gets active back + return; + } + + ownerStrong.updateCandidatesNativeWindowPosition(forceUpdate); + } + } + + final ClientComponentCaretPositionTracker clientComponentCaretPositionTracker; } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java index 2ec736feb29b..0eb67d595a6c 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java @@ -105,9 +105,7 @@ public static boolean deliverFocus(Component lightweightChild, { return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild, target, - temporary, - focusedWindowChangeAllowed, - time, + true, cause, getInstance().getCurrentFocusOwner()); } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java b/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java index acf8edf8c2d3..f91083dccca0 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java @@ -37,6 +37,7 @@ */ package sun.awt.X11; +import java.awt.event.KeyEvent; import java.util.Hashtable; import jdk.internal.misc.Unsafe; @@ -1717,6 +1718,20 @@ static long getKeysym( XKeyEvent ev ) { keysym2JavaKeycodeHash.put( Long.valueOf(XConstants.NoSymbol), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN)); + /* JetBrains Runtime mappings to fix JBR-6215, they override L3-L10, R1-R4 which have nonsensical defaults. */ + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F13), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F13, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F14), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F14, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F15), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F15, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F16), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F16, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F17), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F17, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F18), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F18, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F19), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F19, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F20), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F20, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F21), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F21, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F22), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F22, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F23), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F23, KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put ( Long.valueOf(XKeySymConstants.XK_F24), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F24, KeyEvent.KEY_LOCATION_STANDARD)); + /* Reverse search of keysym by keycode. */ /* Add keyboard locking codes. */ diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java index 39315e21f540..e385a55c85ab 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java @@ -297,8 +297,9 @@ protected MappingData map() { * @see XBaseMenuWindow#getSubmenuBounds */ protected Rectangle getSubmenuBounds(Rectangle itemBounds, Dimension windowSize) { + updateCurrentGraphicsConfiguration(); Rectangle globalBounds = toGlobal(itemBounds); - Rectangle screenBounds = getCurrentGraphicsConfiguration().getBounds(); + Rectangle screenBounds = graphicsConfig.getBounds(); Rectangle res; res = fitWindowBelow(globalBounds, windowSize, screenBounds); if (res != null) { @@ -515,23 +516,4 @@ void handleF10KeyPress(KeyEvent event) { selectItem(getFirstSelectableItem(), true); } - /* - * In previous version keys were handled in handleKeyPress. - * Now we override this function do disable F10 explicit - * processing. All processing is done using KeyEvent. - */ - public void handleKeyPress(XEvent xev) { - XKeyEvent xkey = xev.get_xkey(); - if (log.isLoggable(PlatformLogger.Level.FINE)) { - log.fine(xkey.toString()); - } - if (isEventDisabled(xev)) { - return; - } - final Component currentSource = getEventSource(); - //This is the only difference from XWindow.handleKeyPress - //Ancestor's function can invoke handleF10KeyPress here - handleKeyPress(xkey); - } - } //class XMenuBarPeer diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XMenuWindow.java b/src/java.desktop/unix/classes/sun/awt/X11/XMenuWindow.java index e62f08c5287c..196028751ca6 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XMenuWindow.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XMenuWindow.java @@ -282,8 +282,9 @@ protected MappingData map() { * @see XBaseMenuWindow#getSubmenuBounds */ protected Rectangle getSubmenuBounds(Rectangle itemBounds, Dimension windowSize) { + updateCurrentGraphicsConfiguration(); Rectangle globalBounds = toGlobal(itemBounds); - Rectangle screenBounds = getCurrentGraphicsConfiguration().getBounds(); + Rectangle screenBounds = graphicsConfig.getBounds(); Rectangle res; res = fitWindowRight(globalBounds, windowSize, screenBounds); if (res != null) { @@ -390,6 +391,9 @@ boolean ensureCreated() { params.add(OVERRIDE_REDIRECT, Boolean.TRUE); params.add(XWindow.TARGET, target); init(params); + } else { + initGraphicsConfiguration(); + syncBounds(); } return true; } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java index f4c46c2766d3..c6bb05e9a296 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java @@ -28,6 +28,7 @@ import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Point; +import java.awt.Rectangle; import java.awt.Window; import java.awt.peer.MouseInfoPeer; @@ -65,13 +66,36 @@ public int fillPointWithCoords(Point point) { if (pointerFound) { point.x = Native.getInt(XlibWrapper.larg3); point.y = Native.getInt(XlibWrapper.larg4); - GraphicsDevice device = gds[i]; - if (device instanceof X11GraphicsDevice) { - int scale = ((X11GraphicsDevice) device).getScaleFactor(); - point.x = XlibUtil.scaleDown(point.x, scale); - point.y = XlibUtil.scaleDown(point.y, scale); + // In virtual screen environment XQueryPointer returns true only for the + // default screen, so search all available devices to determine correct scale. + // Note that in XWayland mode, pointer position is returned only when over + // owned or *some other* windows, so it may "freeze" when moving over + // desktop or some non-owned windows. + boolean independentScreens = true; + int nearestScreen = i, nearestScreenDistance = Integer.MAX_VALUE; + for (int j = 0; j < gdslen; j++) { + Rectangle bounds = gds[j].getDefaultConfiguration().getBounds(); + if (bounds.x != 0 || bounds.y != 0) independentScreens = false; + if (gds[j] instanceof X11GraphicsDevice d) { + bounds.width = d.scaleUp(bounds.width); + bounds.height = d.scaleUp(bounds.height); + } + int dx = Math.max(Math.min(point.x, bounds.x + bounds.width), bounds.x) - point.x; + int dy = Math.max(Math.min(point.y, bounds.y + bounds.height), bounds.y) - point.y; + int dist = dx*dx + dy*dy; + if (dist < nearestScreenDistance) { + nearestScreen = j; + nearestScreenDistance = dist; + } } - return i; + if (independentScreens) nearestScreen = i; + GraphicsDevice device = gds[nearestScreen]; + if (device instanceof X11GraphicsDevice x11d) { + Point p = x11d.scaleDown(point.x, point.y); + point.x = p.x; + point.y = p.y; + } + return nearestScreen; } } } finally { diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XNETProtocol.java b/src/java.desktop/unix/classes/sun/awt/X11/XNETProtocol.java index 81c31b277fb9..e5d20e9daa9a 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XNETProtocol.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XNETProtocol.java @@ -27,8 +27,12 @@ import java.awt.Frame; import java.nio.charset.Charset; - +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Point; +import java.awt.event.MouseEvent; import sun.awt.IconInfo; +import sun.awt.SunToolkit; import sun.util.logging.PlatformLogger; import static java.nio.charset.StandardCharsets.US_ASCII; @@ -80,15 +84,11 @@ private void setInitialState(XWindowPeer window, int state) { } private void requestState(XWindowPeer window, int state) { - /* - * We have to use toggle for maximization because of transitions - * from maximization in one direction only to maximization in the - * other direction only. - */ int old_net_state = getState(window); int max_changed = (state ^ old_net_state) & (Frame.MAXIMIZED_BOTH); XClientMessageEvent req = new XClientMessageEvent(); + int action = 0; try { switch(max_changed) { case 0: @@ -96,14 +96,22 @@ private void requestState(XWindowPeer window, int state) { case Frame.MAXIMIZED_HORIZ: req.set_data(1, XA_NET_WM_STATE_MAXIMIZED_HORZ.getAtom()); req.set_data(2, 0); + action = ((state & Frame.MAXIMIZED_HORIZ) == Frame.MAXIMIZED_HORIZ) + ? _NET_WM_STATE_ADD + : _NET_WM_STATE_REMOVE; break; case Frame.MAXIMIZED_VERT: req.set_data(1, XA_NET_WM_STATE_MAXIMIZED_VERT.getAtom()); req.set_data(2, 0); + action = ((state & Frame.MAXIMIZED_VERT) == Frame.MAXIMIZED_VERT) + ? _NET_WM_STATE_ADD + : _NET_WM_STATE_REMOVE; break; case Frame.MAXIMIZED_BOTH: + // Somehow this doesn't work when changing HORZ->VERT, but works VERT->HORZ req.set_data(1, XA_NET_WM_STATE_MAXIMIZED_HORZ.getAtom()); req.set_data(2, XA_NET_WM_STATE_MAXIMIZED_VERT.getAtom()); + action = _NET_WM_STATE_TOGGLE; break; default: return; @@ -115,7 +123,7 @@ private void requestState(XWindowPeer window, int state) { req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); - req.set_data(0, _NET_WM_STATE_TOGGLE); + req.set_data(0, action); XToolkit.awtLock(); try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), @@ -224,10 +232,23 @@ private void setStateHelper(XWindowPeer window, XAtom state, boolean set) { Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()), Boolean.valueOf(window.isMapped()), Boolean.valueOf(window.isShowing())); } + XAtomList net_wm_state = window.getNETWMState(); if (window.isShowing()) { + if (net_wm_state.contains(state) == set) { + if (log.isLoggable(PlatformLogger.Level.FINER)) { + log.finer("Current state on {0} is {1}, {2} is already {3}", + window, net_wm_state, state, set ? "set" : "unset"); + } + return; + } + if (!set) { + net_wm_state.remove(state); + } else { + net_wm_state.add(state); + } + window.net_wm_state = net_wm_state; requestState(window, state, set); } else { - XAtomList net_wm_state = window.getNETWMState(); if (log.isLoggable(PlatformLogger.Level.FINER)) { log.finer("Current state on {0} is {1}", window, net_wm_state); } @@ -282,6 +303,9 @@ public void setLayer(XWindowPeer window, int layer) { XAtom XA_NET_WM_WINDOW_OPACITY = XAtom.get("_NET_WM_WINDOW_OPACITY"); + XAtom XA_NET_WM_USER_TIME = XAtom.get("_NET_WM_USER_TIME"); + public final XAtom XA_NET_WM_MOVE_RESIZE = XAtom.get("_NET_WM_MOVERESIZE"); + /* For _NET_WM_STATE ClientMessage requests */ static final int _NET_WM_STATE_REMOVE =0; /* remove/unset property */ static final int _NET_WM_STATE_ADD =1; /* add/set property */ @@ -329,6 +353,10 @@ boolean doOpacityProtocol() { return res; } + boolean doWMMoveResizeProtocol() { + return active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_MOVE_RESIZE); + } + public void setActiveWindow(long window) { if (!active() || !checkProtocol(XA_NET_SUPPORTED, XA_NET_ACTIVE_WINDOW)) { return; @@ -448,4 +476,79 @@ public boolean isWMStateNetHidden(XWindowPeer window) { XAtomList state = window.getNETWMState(); return (state != null && state.size() != 0 && state.contains(XA_NET_WM_STATE_HIDDEN)); } + + void setUserTime(XBaseWindow window, long time) { + if (active()) { + XA_NET_WM_USER_TIME.setCard32Property(window, time); + } + } + + private static int convertToXButton(int mouseButton) { + return switch (mouseButton) { + case MouseEvent.BUTTON1 -> 1; + case MouseEvent.BUTTON2 -> 3; + case MouseEvent.BUTTON3 -> 2; + default -> -1; + }; + } + + /** + * Starts moving the window together with the mouse pointer by sending a _NET_WM_MOVERESIZE event with + * the direction set to _NET_WM_MOVERESIZE_MOVE (move only), x_root/y_root obtained from the current + * mouse pointer coordinates, and button set to {@code mouseButton}. + * See Extended Window Manager Hints + * for more information. + * Preconditions for calling this method: + *
            + *
          • {@code XWM.isWMMoveResizeSupported()} returned true.
          • + *
          • Mouse pointer is within this window's bounds.
          • + *
          • The mouse button specified by {@code mouseButton} is pressed.
          • + *
          + * Calling this method will make the window to start moving together with the mouse pointer until + * the specified mouse button is released or Esc is pressed. The conditions for cancelling + * the move may differ between WMs. + * + * @param lastButtonPressAbsLocation the location of the mouse pointer in absolute coordinates where the mouse + * button was pressed. + * @param mouseButton indicates the mouse button that was pressed to start moving the window; + * must be one of {@code MouseEvent.BUTTON1}, {@code MouseEvent.BUTTON2}, + * or {@code MouseEvent.BUTTON3}. + */ + void startMovingWindowTogetherWithMouse(long window, Point lastButtonPressAbsLocation, int mouseButton) { + final int button = convertToXButton(mouseButton); + if (button <= 0) return; + + if (lastButtonPressAbsLocation == null) return; + + SunToolkit.awtLock(); + final XClientMessageEvent msg = new XClientMessageEvent(); + try { + msg.set_type(XConstants.ClientMessage); + msg.set_window(window); + msg.set_format(32); + msg.set_message_type(XA_NET_WM_MOVE_RESIZE.getAtom()); + + final int _NET_WM_MOVERESIZE_MOVE = 8; + // See https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html + msg.set_data(0, lastButtonPressAbsLocation.x); + msg.set_data(1, lastButtonPressAbsLocation.y); + msg.set_data(2, _NET_WM_MOVERESIZE_MOVE); + msg.set_data(3, button); + msg.set_data(4, 0); + + // Though we already did setGrab(false) before, this may sometimes be not enough. + // Presumably pointer may be grabbed automatically by a button press, + // so release grabs again here, otherwise it wouldn't work on Xorg. + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); + XlibWrapper.XSendEvent(XToolkit.getDisplay(), + XToolkit.getDefaultRootWindow(), + false, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, + msg.pData); + } finally { + msg.dispose(); + SunToolkit.awtUnlock(); + } + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XPopupMenuPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XPopupMenuPeer.java index ba22969b1484..b4c1a10e599f 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XPopupMenuPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XPopupMenuPeer.java @@ -206,8 +206,9 @@ Vector getMenuTargetItems() { * @param windowSize the desired size of menu's window */ protected Rectangle getWindowBounds(Point origin, Dimension windowSize) { + updateCurrentGraphicsConfiguration(); Rectangle globalBounds = new Rectangle(origin.x, origin.y, 0, 0); - Rectangle screenBounds = getCurrentGraphicsConfiguration().getBounds(); + Rectangle screenBounds = graphicsConfig.getBounds(); Rectangle res; res = fitWindowRight(globalBounds, windowSize, screenBounds); if (res != null) { @@ -327,28 +328,4 @@ void ungrabInputImpl() { hide(); } - /************************************************ - * - * Overridden XWindow keyboard processing - * - ************************************************/ - - /* - * In previous version keys were handled in handleKeyPress. - * Now we override this function do disable F10 explicit - * processing. All processing is done using KeyEvent. - */ - @Override - public void handleKeyPress(XEvent xev) { - XKeyEvent xkey = xev.get_xkey(); - if (log.isLoggable(PlatformLogger.Level.FINE)) { - log.fine(xkey.toString()); - } - if (isEventDisabled(xev)) { - return; - } - final Component currentSource = getEventSource(); - handleKeyPress(xkey); - } - } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java index 6d155c0bcc8b..01f69195f94a 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XRobotPeer.java @@ -25,6 +25,7 @@ package sun.awt.X11; +import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.peer.RobotPeer; @@ -35,6 +36,7 @@ import sun.awt.UNIXToolkit; import sun.awt.X11GraphicsConfig; import sun.awt.X11GraphicsDevice; +import sun.awt.X11GraphicsEnvironment; import sun.awt.screencast.ScreencastHelper; import sun.security.action.GetPropertyAction; @@ -91,7 +93,9 @@ final class XRobotPeer implements RobotPeer { @Override public void mouseMove(int x, int y) { - mouseMoveImpl(xgc, xgc.scaleUp(x), xgc.scaleUp(y)); + Point p = ((X11GraphicsEnvironment) X11GraphicsEnvironment.getLocalGraphicsEnvironment()) + .scaleUp(xgc.getDevice(), x, y); + mouseMoveImpl(xgc, p != null ? p.x : x, p != null ? p.y : y); } @Override diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java b/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java index 1b4f45b55f1f..1b6fe37c5fdf 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java @@ -111,12 +111,14 @@ import java.awt.peer.TrayIconPeer; import java.awt.peer.WindowPeer; import java.beans.PropertyChangeListener; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintStream; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; @@ -126,6 +128,12 @@ import java.util.TreeMap; import java.util.Vector; import java.util.concurrent.TimeUnit; +import java.util.Deque; +import java.util.ArrayDeque; +import java.util.AbstractMap; +import java.util.StringTokenizer; +import java.util.Optional; +import java.util.Set; import javax.swing.LookAndFeel; import javax.swing.UIDefaults; @@ -151,8 +159,6 @@ import sun.security.action.GetPropertyAction; import sun.util.logging.PlatformLogger; -import static sun.awt.X11.XlibUtil.scaleDown; - public final class XToolkit extends UNIXToolkit implements Runnable { private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XToolkit"); private static final PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XToolkit"); @@ -160,6 +166,282 @@ public final class XToolkit extends UNIXToolkit implements Runnable { private static final PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XToolkit"); private static final PlatformLogger backingStoreLog = PlatformLogger.getLogger("sun.awt.X11.backingStore.XToolkit"); + public static final class Tracer { + private static int flags; // what to trace (see TRACE... below) + private static String fileName; // where to trace to (file or stderr if null) + private static String pattern; // limit tracing to method names containing this pattern (ignore case) + private static PrintStream outStream; // stream to trace to + private static long threshold = 0; // minimum time delta to record the event + private static boolean verbose = false; // verbose tracing + + private static final int TRACELOG = 1; + private static final int TRACETIMESTAMP = 1 << 1; + private static final int TRACESTATS = 1 << 2; + + private static void showTraceUsage() { + System.err.println("usage: -Dsun.awt.x11.trace=" + + "[log[,timestamp]],[stats],[name:]," + + "[out:],[td=],[help],[verbose]"); + } + + static { + final GetPropertyAction gpa = new GetPropertyAction("sun.awt.x11.trace"); + @SuppressWarnings("removal") + final String trace = AccessController.doPrivileged(gpa); + if (trace != null) { + int traceFlags = 0; + final StringTokenizer st = new StringTokenizer(trace, ","); + while (st.hasMoreTokens()) { + final String tok = st.nextToken(); + if (tok.equalsIgnoreCase("stats")) { + traceFlags |= TRACESTATS; + } else if (tok.equalsIgnoreCase("log")) { + traceFlags |= TRACELOG; + } else if (tok.equalsIgnoreCase("timestamp")) { + traceFlags |= TRACETIMESTAMP; + } else if (tok.regionMatches(true, 0, "name:", 0, 5)) { + pattern = tok.substring(5).toUpperCase(); + } else if (tok.equalsIgnoreCase("verbose")) { + verbose = true; + } else if (tok.regionMatches(true, 0, "out:", 0, 4)) { + fileName = tok.substring(4); + } else if (tok.regionMatches(true, 0, "td=", 0, 3)) { + try { + threshold = Long.max(Long.parseLong(tok.substring(3)), 0); + } catch (NumberFormatException e) { + showTraceUsage(); + } + } else { + if (!tok.equalsIgnoreCase("help")) { + System.err.println("unrecognized token: " + tok); + } + showTraceUsage(); + } + } + + if (verbose) { + System.err.print("XToolkit logging "); + if ((traceFlags & TRACELOG) != 0) { + System.err.println("enabled"); + System.err.print("XToolkit timestamps "); + if ((traceFlags & TRACETIMESTAMP) != 0) { + System.err.println("enabled"); + } else { + System.err.println("disabled"); + } + } else { + System.err.println("[and timestamps] disabled"); + } + System.err.print("XToolkit invocation statistics at exit "); + if ((traceFlags & TRACESTATS) != 0) { + System.err.println("enabled"); + } else { + System.err.println("disabled"); + } + System.err.print("XToolkit trace output to "); + if (fileName == null) { + System.err.println("System.err"); + } else { + System.err.println("file '" + fileName + "'"); + } + if (pattern != null) { + System.err.println("XToolkit trace limited to " + pattern); + } + } + + Tracer.flags = traceFlags; + } + } + + public static boolean tracingEnabled() { + return (flags != 0); + } + + private static synchronized PrintStream getTraceOutputFile() { + if (outStream == null) { + outStream = System.err; + if (fileName != null) { + try { + outStream = new PrintStream(new FileOutputStream(fileName), true); + } catch (FileNotFoundException e) { + } + } + } + return outStream; + } + + private static long lastTimeMs = System.currentTimeMillis(); + + private static synchronized void outputTraceLine(String prefix, String line) { + final StringBuilder outStr = new StringBuilder(prefix); + outStr.append(' '); + if ((flags & TRACETIMESTAMP) != 0) { + final long curTimeMs = System.currentTimeMillis(); + outStr.append(String.format("+ %1$03dms ", curTimeMs - lastTimeMs)); + lastTimeMs = curTimeMs; + } + outStr.append(line); + getTraceOutputFile().println(outStr); + } + + public static void traceRawLine(String line) { + getTraceOutputFile().println(line); + } + + public static void traceLine(String line) { + outputTraceLine("[LOG] ", line); + } + + public static void traceError(String msg) { + outputTraceLine("[ERR] ", msg); + } + + private static boolean isInterestedInMethod(String mname) { + return (pattern == null || mname.toUpperCase().contains(pattern)); + } + + private static final class AwtLockerDescriptor { + public long startTimeMs; // when the locking has occurred + public StackWalker.StackFrame frame; // the frame that called awtLock() + + public AwtLockerDescriptor(StackWalker.StackFrame frame, long start) { + this.startTimeMs = start; + this.frame = frame; + } + } + + private static final Deque awtLockersStack = new ArrayDeque<>(); + + private static void pushAwtLockCaller(StackWalker.StackFrame frame, long startTimeMs) { + // accessed under AWT lock so no need for additional synchronization + awtLockersStack.push(new AwtLockerDescriptor(frame, startTimeMs)); + } + + private static long popAwtLockCaller(StackWalker.StackFrame frame, long finishTimeMs) { + // accessed under AWT lock so no need for additional synchronization + try { + final AwtLockerDescriptor descr = awtLockersStack.pop(); + if (descr.frame.getMethodName().compareTo(frame.getMethodName()) != 0) { + // Note: this often happens with XToolkit.waitForEvents()/XToolkit.run(). + // traceError("Mismatching awtLock()/awtUnlock(): locked by " + descr.frame + ", unlocked by " + frame); + } + return finishTimeMs - descr.startTimeMs; + } catch(NoSuchElementException e) { + traceError("No matching awtLock() for awtUnlock(): " + frame); + } + + return -1; + } + + private static class AwtLockTracer implements SunToolkit.AwtLockListener { + private static final Set awtLockerMethods = Set.of("awtLock", "awtUnlock", "awtTryLock"); + + private static StackWalker.StackFrame getLockCallerFrame() { + Optional frame = StackWalker.getInstance().walk( + s -> s.dropWhile(stackFrame -> !awtLockerMethods.contains(stackFrame.getMethodName())) + .dropWhile(stackFrame -> awtLockerMethods.contains( stackFrame.getMethodName())) + .findFirst() ); + + return frame.orElse(null); + } + + public void afterAwtLocked() { + final StackWalker.StackFrame awtLockerFrame = getLockCallerFrame(); + if (awtLockerFrame != null) { + final String mname = awtLockerFrame.getMethodName(); + if (isInterestedInMethod(mname)) { + pushAwtLockCaller(awtLockerFrame, System.currentTimeMillis()); + } + } + } + + public void beforeAwtUnlocked() { + final StackWalker.StackFrame awtLockerFrame = getLockCallerFrame(); + if (awtLockerFrame != null) { + final String mname = awtLockerFrame.getMethodName(); + if (isInterestedInMethod(mname)) { + final long timeSpentMs = popAwtLockCaller(awtLockerFrame, System.currentTimeMillis()); + if (timeSpentMs >= threshold) { + updateStatistics(awtLockerFrame.toString(), timeSpentMs); + traceLine(String.format("%s held AWT lock for %dms", awtLockerFrame, timeSpentMs)); + } + } + } + } + } + + private static final class MethodStats implements Comparable { + public long minTimeMs; + public long maxTimeMs; + public long count; + private long totalTimeMs; + + MethodStats() { + this.minTimeMs = Long.MAX_VALUE; + } + + public void update(long timeSpentMs) { + count++; + minTimeMs = Math.min(minTimeMs, timeSpentMs); + maxTimeMs = Math.max(maxTimeMs, timeSpentMs); + totalTimeMs += timeSpentMs; + } + + public long averageTimeMs() { + return (long)((double)totalTimeMs / count); + } + + @Override + public int compareTo(MethodStats other) { + return Long.compare(other.averageTimeMs(), this.averageTimeMs()); + } + + @Override + public String toString() { + return String.format("%dms (%dx[%d-%d]ms)", averageTimeMs(), count, minTimeMs, maxTimeMs); + } + } + + private static HashMap methodTimingTable; + + private static synchronized void updateStatistics(String mname, long timeSpentMs) { + if ((flags & TRACESTATS) != 0) { + if (methodTimingTable == null) { + methodTimingTable = new HashMap<>(1024); + TraceReporter.setShutdownHook(); + } + + final MethodStats descr = methodTimingTable.computeIfAbsent(mname, k -> new MethodStats()); + descr.update(timeSpentMs); + } + } + + private static class TraceReporter implements Runnable { + public static void setShutdownHook() { + final Tracer.TraceReporter t = new Tracer.TraceReporter(); + final Thread thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), t, + "XToolkit TraceReporter", 0, false); + thread.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(thread); + } + + public void run() { + traceRawLine(""); + traceRawLine("AWT Lock usage statistics"); + traceRawLine("========================="); + final ArrayList> l; + synchronized(Tracer.class) { // in order to avoid methodTimingTable modifications during the traversal + l = new ArrayList<>(methodTimingTable.size()); + methodTimingTable.forEach((fname, fdescr) + -> l.add(new AbstractMap.SimpleImmutableEntry<>(fname, fdescr))); + } + l.sort(Map.Entry.comparingByValue()); + l.forEach(item -> traceRawLine(item.getValue() + " --- " + item.getKey())); + traceRawLine("Legend: ( x [ - ] ms) --- "); + } + } + } + //There is 400 ms is set by default on Windows and 500 by default on KDE and GNOME. //We use the same hardcoded constant. private static final int AWT_MULTICLICK_DEFAULT_TIME = 500; @@ -186,6 +468,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { */ private boolean loadedXSettings; + private int cachedScreenResolution = 72; + /** * XSETTINGS for the default screen. *

          @@ -205,6 +489,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { static int awt_multiclick_time; static boolean securityWarningEnabled; + private static String desktopStartupId; + /** * Dimensions of default virtual screen in pixels. These values are used to * limit the maximum size of the window. @@ -214,6 +500,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { private static XMouseInfoPeer xPeer; + private static Boolean isXWayland; + static { initSecurityWarning(); if (GraphicsEnvironment.isHeadless()) { @@ -335,6 +623,7 @@ void init() { log.finer("X locale modifiers are not supported, using default"); } tryXKB(); + checkXInput(); arrowCursor = XlibWrapper.XCreateFontCursor(XToolkit.getDisplay(), XCursorFontConstants.XC_arrow); @@ -351,7 +640,10 @@ void init() { XToolkit.addEventDispatcher(XToolkit.getDefaultRootWindow(), new XEventDispatcher() { @Override public void dispatchEvent(XEvent ev) { - if (ev.get_type() == XConstants.ConfigureNotify) { + if (ev.get_type() == XConstants.ConfigureNotify || + (ev.get_type() == XConstants.PropertyNotify && + ev.get_xproperty().get_atom() == XWM.XA_NET_DESKTOP_GEOMETRY.getAtom())) // possible DPI change + { awtUnlock(); try { ((X11GraphicsEnvironment)GraphicsEnvironment. @@ -404,6 +696,9 @@ static String getCorrectXIDString(String val) { static native String getEnv(String key); + static String getDesktopStartupId() { + return desktopStartupId; + } static String getAWTAppClassName() { return awtAppClassName; @@ -416,6 +711,10 @@ public XToolkit() { PerformanceLogger.setTime("XToolkit construction"); } + if (Tracer.tracingEnabled()) { + addAwtLockListener(new Tracer.AwtLockTracer()); + } + if (!GraphicsEnvironment.isHeadless()) { String mainClassName = null; @@ -429,6 +728,10 @@ public XToolkit() { } awtAppClassName = getCorrectXIDString(mainClassName); + // this should be done before 'load_gtk', as the latter clears the environment variable + desktopStartupId = AccessController.doPrivileged((PrivilegedAction) () -> + getEnv("DESKTOP_STARTUP_ID")); + init(); XWM.init(); @@ -536,13 +839,7 @@ private void processGlobalMotionEvent(XEvent e, XBaseWindow win) { XMotionEvent ev = e.get_xmotion(); awtLock(); try { - if (lastCursorPos == null) { - lastCursorPos = new Point(win.scaleDown(ev.get_x_root()), - win.scaleDown(ev.get_y_root())); - } else { - lastCursorPos.setLocation(win.scaleDown(ev.get_x_root()), - win.scaleDown(ev.get_y_root())); - } + lastCursorPos = win.scaleDown(ev.get_x_root(), ev.get_y_root()); } finally { awtUnlock(); } @@ -559,13 +856,7 @@ private void processGlobalMotionEvent(XEvent e, XBaseWindow win) { XCrossingEvent ev = e.get_xcrossing(); awtLock(); try { - if (lastCursorPos == null) { - lastCursorPos = new Point(win.scaleDown(ev.get_x_root()), - win.scaleDown(ev.get_y_root())); - } else { - lastCursorPos.setLocation(win.scaleDown(ev.get_x_root()), - win.scaleDown(ev.get_y_root())); - } + lastCursorPos = win.scaleDown(ev.get_x_root(), ev.get_y_root()); } finally { awtUnlock(); } @@ -696,6 +987,14 @@ public void run(boolean loop) processXkbChanges(ev); } + if (ev.get_type() == XConstants.KeyPress) { + doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC = + mayXResetICReturnThePreeditTextViaNextKeyPressEvent && + isKeyPressSyntetic(ev.get_xkey()); + + mayXResetICReturnThePreeditTextViaNextKeyPressEvent = false; + } + if (XDropTargetEventProcessor.processEvent(ev) || XDragSourceContextPeer.processEvent(ev)) { continue; @@ -717,31 +1016,124 @@ public void run(boolean loop) } } } - if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && ( - ev.get_type() == XConstants.KeyPress - || ev.get_type() == XConstants.KeyRelease)) { + + final boolean isKeyEvent = ( (ev.get_type() == XConstants.KeyPress) || + (ev.get_type() == XConstants.KeyRelease) ); + + final long keyEventSerial = isKeyEvent ? ev.get_xkey().get_serial() : -1; + + if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && isKeyEvent) { keyEventLog.fine("before XFilterEvent:" + ev); } if (XlibWrapper.XFilterEvent(ev.getPData(), w)) { + if (isKeyEvent) { + if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { + keyEventLog.fine( + "Setting lastFilteredKeyEventSerial=={0} to {1}", + lastFilteredKeyEventSerial, keyEventSerial + ); + } + lastFilteredKeyEventSerial = keyEventSerial; + + XInputMethod.delayAllXICDestroyUntilAFurtherNotice(); + XInputMethod.onXKeyEventFiltering(true); + } continue; } - if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && ( - ev.get_type() == XConstants.KeyPress - || ev.get_type() == XConstants.KeyRelease)) { + if (keyEventLog.isLoggable(PlatformLogger.Level.FINE) && isKeyEvent) { keyEventLog.fine( "after XFilterEvent:" + ev); // IS THIS CORRECT? } + if (isKeyEvent) { + XInputMethod.onXKeyEventFiltering(false); + if (keyEventSerial == lastFilteredKeyEventSerial) { + // JBR-6456: Sudden keyboard death on Linux using iBus. + // If more than 1 key events are being processed by iBus + // (i.e. more than one in a row calls of XFilterEvent(...) with instances of XKeyEvent have + // returned true), + // we have to postpone destroying until the very last one is completely processed) + XInputMethod.delayedXICDestroyShouldBeDone(); + } + } + dispatchEvent(ev); } catch (Throwable thr) { XBaseWindow.ungrabInput(); processException(thr); } finally { + doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC = false; + // free event data if XGetEventData was called + XlibWrapper.XFreeEventData(getDisplay(), ev.pData); awtUnlock(); } } } + + // ================================================================================================================ + // JBR-3112 Linux: Last character issue with Korean. + // XmbResetIC/XwcResetIC are called (by sun.awt.X11InputMethodBase#endComposition) when + // the keyboard focus goes to another Java component. + // By the X11 specification, these functions must return the current preedit text. However, some + // input methods (e.g., iBus and fcitx4) don't return the preedit text, but instead send it later + // (asynchronously) via a combination of a synthetic KeyPress event + XmbLookupString applied to it. + // Not only does this behavior breaks the X11 specification, + // but it also causes the preedit text to wrongly go to the newly focused Java component rather than + // its intended target, the previously focused component for which the preedit text was originally composed. + // Thus, in order to prevent the "outdated" preedit text from going to the newly focused component, let's + // at least discard it at all. + // *How* it's done: the toolkit gets notified whenever XmbResetIC/XwcResetIC gets called and then + // discards the preedit text returned from XmbLookupString/XwcLookupString, applied to the next + // KeyPress event being dispatched. + // ================================================================================================================ + + private volatile boolean mayXResetICReturnThePreeditTextViaNextKeyPressEvent = false; + private boolean doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC = false; + + /** + * Notifies the toolkit that XmbResetIC/XwcResetIC has recently returned null + * (likely meaning that the preedit text will be sent later via a synthetic KeyPress event, + * although the focus may have already moved to another component) + */ + public void xResetICMayReturnThePreeditTextViaNextKeyPressEvent() { + mayXResetICReturnThePreeditTextViaNextKeyPressEvent = true; + } + + /** + * @return true if the composed text returned from XmbLookupString/XwcLookupString + * (see function awt_x11inputmethod_lookupString in awt_InputMethod.c), applied to the currently + * dispatched KeyEvent, must be discarded (instead of being dispatched to the focused component) ; + * false otherwise + * @see XWindow#handleKeyPress(XKeyEvent) + */ + public boolean doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC() { + assert isToolkitThread(); + return doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC; + } + + private static boolean isKeyPressSyntetic(XKeyEvent ev) { + assert (ev.get_type() == XConstants.KeyPress); + + return ( (ev.get_root() == 0) && + (ev.get_subwindow() == 0) && + (ev.get_time() == 0) && + (ev.get_x() == 0) && + (ev.get_y() == 0) && + (ev.get_x_root() == 0) && + (ev.get_y_root() == 0) && + (ev.get_state() == 0) ); + } + + + // JBR-6456: Sudden keyboard death on Linux using iBus. + // The field holds the value of sun.awt.X11.XKeyEvent#get_serial of the last key event, which + // XFilterEvent(...) returned True for. + // See the usages of the variable for more info. + // See sun.awt.X11.XInputMethod#disposeXIC for the detailed explanation of the whole fix. + private long lastFilteredKeyEventSerial = -1; + + /** * Listener installed to detect display changes. */ @@ -797,7 +1189,7 @@ static int getMaxWindowHeightInPixels() { return maxWindowHeightInPixels; } - private static Rectangle getWorkArea(long root, int scale) + private static Rectangle getWorkArea(long root) { XAtom XA_NET_WORKAREA = XAtom.get("_NET_WORKAREA"); @@ -813,10 +1205,7 @@ private static Rectangle getWorkArea(long root, int scale) int rootWidth = (int)Native.getLong(native_ptr, 2); int rootHeight = (int)Native.getLong(native_ptr, 3); - return new Rectangle(scaleDown(rootX, scale), - scaleDown(rootY, scale), - scaleDown(rootWidth, scale), - scaleDown(rootHeight, scale)); + return new Rectangle(rootX, rootY, rootWidth, rootHeight); } } finally @@ -832,12 +1221,8 @@ private static Rectangle getWorkArea(long root, int scale) * insets are calculated using _NET_WORKAREA property of the root window. *

          * Note that _NET_WORKAREA is a rectangular area and it does not work - * well in the Xinerama mode. - *

          - * We will trust the part of this rectangular area only if it starts at the - * requested graphics configuration. Below is an example when the - * _NET_WORKAREA intersects with the requested graphics configuration but - * produces wrong result. + * well in the Xinerama mode, so we assume that only 0th screen has insets. + * Below is an example when _NET_WORKAREA produces wrong result. * * //<-x1,y1/////// * // // //////////////// @@ -855,20 +1240,33 @@ private Insets getScreenInsetsImpl(final GraphicsConfiguration gc) { if (np == null || !(gd instanceof X11GraphicsDevice) || !np.active()) { return super.getScreenInsets(gc); } + X11GraphicsDevice x11gd = (X11GraphicsDevice) gd; + int screenNum = x11gd.getScreen(); + Rectangle screen = gc.getBounds(); + boolean isFirstScreen = screen.x == 0 && screen.y == 0; + if (localEnv.runningXinerama() && !isFirstScreen) { + // We cannot estimate insets for non-default screen, + // there are often none. + return new Insets(0, 0, 0, 0); + } XToolkit.awtLock(); try { - X11GraphicsDevice x11gd = (X11GraphicsDevice) gd; - long root = XlibUtil.getRootWindow(x11gd.getScreen()); - Rectangle workArea = getWorkArea(root, x11gd.getScaleFactor()); - Rectangle screen = gc.getBounds(); - if (workArea != null && screen.contains(workArea.getLocation())) { + Rectangle workArea = getWorkArea(XlibUtil.getRootWindow(screenNum)); + if (workArea != null) { + Point p = x11gd.scaleDown(workArea.x, workArea.y); + workArea.x = p.x; + workArea.y = p.y; + workArea.width = x11gd.scaleDown(workArea.width); + workArea.height = x11gd.scaleDown(workArea.height); workArea = workArea.intersection(screen); - int top = workArea.y - screen.y; - int left = workArea.x - screen.x; - int bottom = screen.height - workArea.height - top; - int right = screen.width - workArea.width - left; - return new Insets(top, left, bottom, right); + if (!workArea.isEmpty()) { + int top = workArea.y; + int left = workArea.x; + int bottom = screen.height - workArea.height - top; + int right = screen.width - workArea.width - left; + return new Insets(top, left, bottom, right); + } } // Note that it is better to return zeros than inadequate values return new Insets(0, 0, 0, 0); @@ -1351,15 +1749,18 @@ static void XSync() { @Override public int getScreenResolution() { long display = getDisplay(); - awtLock(); - try { - return (int) ((XlibWrapper.DisplayWidth(display, - XlibWrapper.DefaultScreen(display)) * 25.4) / - XlibWrapper.DisplayWidthMM(display, - XlibWrapper.DefaultScreen(display))); - } finally { - awtUnlock(); + if (awtTryLock()) { + try { + return cachedScreenResolution = + (int) ((XlibWrapper.DisplayWidth(display, + XlibWrapper.DefaultScreen(display)) * 25.4) / + XlibWrapper.DisplayWidthMM(display, + XlibWrapper.DefaultScreen(display))); + } finally { + awtUnlock(); + } } + return cachedScreenResolution; } static native long getDefaultXColormap(); @@ -1550,6 +1951,7 @@ protected void initializeDesktopProperties() { localEnv.displayChanged()); } } + super.initializeDesktopProperties(); } /** @@ -2403,6 +2805,58 @@ private void processXkbChanges(XEvent ev) { } } + private static volatile boolean hasXInputExtension = false; + + public static boolean isXInputEnabled() { + return hasXInputExtension; + } + + public static void checkXInput() { + awtLock(); + try { + String extensionName = "XInputExtension"; + boolean hasExtension = XlibWrapper.XQueryExtension(XToolkit.getDisplay(), extensionName, + XlibWrapper.iarg1, XlibWrapper.iarg2, XlibWrapper.iarg3); + if (!hasExtension) { + log.warning("X Input extension isn't available, error: {0}", Native.getInt(XlibWrapper.iarg1)); + return; + } + + final int requiredMajor = 2; + final int requiredMinor = 2; + Native.putInt(XlibWrapper.iarg1, requiredMajor); + Native.putInt(XlibWrapper.iarg2, requiredMinor); + int status = XlibWrapper.XIQueryVersion(XToolkit.getDisplay(), XlibWrapper.iarg1, XlibWrapper.iarg2); + if (status == XConstants.BadRequest) { + log.warning("X Input2 not supported in the server"); + return; + } + + int major = Native.getInt(XlibWrapper.iarg1); + int minor = Native.getInt(XlibWrapper.iarg2); + if (major >= requiredMajor && minor >= requiredMinor) { + hasXInputExtension = true; + } else { + log.warning("Desired version is 2.2, server version is {0}.{1}", major, minor); + } + } finally { + awtUnlock(); + } + } + + public static XIDeviceEvent GetXIDeviceEvent(XGenericEventCookie cookie) { + return new XIDeviceEvent(cookie.get_data()); + } + + public static int XISelectEvents(long display, long window, long mask, int deviceid) { + if (isXInputEnabled()) { + return XlibWrapper.XISelectEvents(display, window, mask, deviceid); + } else { + log.warning("Attempting to select xi events while xinput isn't available"); + return XConstants.BadRequest; + } + } + private static long eventNumber; public static long getEventNumber() { awtLock(); @@ -2561,6 +3015,11 @@ public boolean isTranslucencyCapable(GraphicsConfiguration gc) { return ((X11GraphicsConfig)gc).isTranslucencyCapable(); } + @Override + public boolean popupMenusAreSpecial() { + return XWM.isKDE2(); + } + /** * Returns the value of "sun.awt.disablegrab" property. Default * value is {@code false}. @@ -2569,4 +3028,21 @@ public boolean isTranslucencyCapable(GraphicsConfiguration gc) { public static boolean getSunAwtDisableGrab() { return AccessController.doPrivileged(new GetBooleanAction("sun.awt.disablegrab")); } + + static synchronized boolean isXWayland() { + if (isXWayland == null) { + isXWayland = getEnv("WAYLAND_DISPLAY") != null; + } + return isXWayland; + } + + /** + * Checks if the window manager supports _NET_WM_MOVERESIZE protocol. + * + * @return {@code true} if _NET_WM_MOVERESIZE is supported by the + * window manager and false otherwise. + */ + boolean isWindowMoveSupported() { + return XWM.isWMMoveResizeSupported(); + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XWM.java b/src/java.desktop/unix/classes/sun/awt/X11/XWM.java index 0382a7b6caf3..345dc88b0a72 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XWM.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XWM.java @@ -34,6 +34,7 @@ import jdk.internal.misc.Unsafe; import java.awt.Insets; import java.awt.Frame; +import java.awt.Point; import java.awt.Rectangle; import java.util.Collection; import java.util.HashMap; @@ -89,6 +90,12 @@ final class XWM static final XAtom XA_NET_FRAME_EXTENTS = new XAtom(); static final XAtom XA_NET_REQUEST_FRAME_EXTENTS = new XAtom(); +/* Root window */ + static final XAtom XA_NET_DESKTOP_GEOMETRY = new XAtom(); + +/* Mutter */ + static final XAtom XA_GTK_FRAME_EXTENTS = new XAtom(); + static final int UNDETERMINED_WM = 1, NO_WM = 2, @@ -105,7 +112,12 @@ final class XWM LG3D_WM = 13, CWM_WM = 14, MUTTER_WM = 15, - UNITY_COMPIZ_WM = 16; + UNITY_COMPIZ_WM = 16, + XMONAD_WM = 17, + AWESOME_WM = 18, + I3_WM = 19, + WESTON_WM = 20; + public String toString() { switch (WMID) { case NO_WM: @@ -138,6 +150,12 @@ public String toString() { return "CWM"; case MUTTER_WM: return "Mutter"; + case XMONAD_WM: + return "XMonad"; + case AWESOME_WM: + return "Awesome"; + case WESTON_WM: + return "Weston"; case UNDETERMINED_WM: default: return "Undetermined WM"; @@ -206,6 +224,8 @@ static void initAtoms() { { XA_MWM_HINTS, "_MOTIF_WM_HINTS" }, { XA_NET_FRAME_EXTENTS, "_NET_FRAME_EXTENTS" }, { XA_NET_REQUEST_FRAME_EXTENTS, "_NET_REQUEST_FRAME_EXTENTS" }, + { XA_NET_DESKTOP_GEOMETRY, "_NET_DESKTOP_GEOMETRY" }, + { XA_GTK_FRAME_EXTENTS, "_GTK_FRAME_EXTENTS" } }; String[] names = new String[atomInitList.length]; @@ -602,13 +622,31 @@ static boolean isMutter() { return isNetWMName("Mutter") || isNetWMName("GNOME Shell"); } + static boolean isXmonad() { + return isNetWMName("xmonad"); + } + + static boolean isAwesome() { + return isNetWMName("awesome"); + } + + static boolean isI3() { + return isNetWMName("i3"); + } + + static boolean isWeston() { + return isNetWMName("Weston"); + } + static int awtWMNonReparenting = -1; static boolean isNonReparentingWM() { if (awtWMNonReparenting == -1) { awtWMNonReparenting = (XToolkit.getEnv("_JAVA_AWT_WM_NONREPARENTING") != null) ? 1 : 0; } return (awtWMNonReparenting == 1 || XWM.getWMID() == XWM.COMPIZ_WM - || XWM.getWMID() == XWM.LG3D_WM || XWM.getWMID() == XWM.CWM_WM); + || XWM.getWMID() == XWM.LG3D_WM || XWM.getWMID() == XWM.CWM_WM || + XWM.getWMID() == XWM.XMONAD_WM + ); } /* @@ -799,6 +837,14 @@ static int getWMID() { awt_wmgr = XWM.ICE_WM; } else if (isUnityCompiz()) { awt_wmgr = XWM.UNITY_COMPIZ_WM; + } else if (isXmonad()) { + awt_wmgr = XWM.XMONAD_WM; + } else if (isAwesome()) { + awt_wmgr = XWM.AWESOME_WM; + } else if (isI3()) { + awt_wmgr = XWM.I3_WM; + } else if (isWeston()) { + awt_wmgr = XWM.WESTON_WM; } /* * We don't check for legacy WM when we already know that WM @@ -1031,18 +1077,16 @@ static void setShellResizable(XDecoratedPeer window) { try { Rectangle shellBounds; if (getWMID() != UNITY_COMPIZ_WM) { - shellBounds = window.getShellBounds(); - shellBounds.translate(-window.currentInsets.left, - -window.currentInsets.top); + shellBounds = window.getBounds(); } else { shellBounds = window.getDimensions().getScreenBounds(); } window.updateSizeHints(window.getDimensions()); requestWMExtents(window.getWindow()); + Point p = window.scaleUp(shellBounds.x, shellBounds.y); XlibWrapper.XMoveResizeWindow(XToolkit.getDisplay(), window.getShell(), - window.scaleUp(shellBounds.x), - window.scaleUp(shellBounds.y), + p.x, p.y, window.scaleUp(shellBounds.width), window.scaleUp(shellBounds.height)); /* REMINDER: will need to revisit when setExtendedStateBounds is added */ @@ -1077,10 +1121,10 @@ static void setShellNotResizable(XDecoratedPeer window, WindowDimensions newDime window.updateSizeHints(newDimensions); requestWMExtents(window.getWindow()); XToolkit.XSync(); + Point p = window.scaleUp(shellBounds.x, shellBounds.y); XlibWrapper.XMoveResizeWindow(XToolkit.getDisplay(), window.getShell(), - window.scaleUp(shellBounds.x), - window.scaleUp(shellBounds.y), + p.x, p.y, window.scaleUp(shellBounds.width), window.scaleUp(shellBounds.height)); } @@ -1123,6 +1167,8 @@ boolean supportsDynamicLayout() { case XWM.SAWFISH_WM: case XWM.ICE_WM: case XWM.METACITY_WM: + case XWM.XMONAD_WM: + case XWM.AWESOME_WM: return true; case XWM.OPENLOOK_WM: case XWM.MOTIF_WM: @@ -1364,14 +1410,13 @@ Insets guessInsets(XDecoratedPeer window) { break; case NO_WM: case LG3D_WM: + case XMONAD_WM: + case AWESOME_WM: res = zeroInsets; break; case UNITY_COMPIZ_WM: res = new Insets(28, 1, 1, 1); break; - case MUTTER_WM: - res = new Insets(37, 0, 0, 0); - break; case MOTIF_WM: case OPENLOOK_WM: default: @@ -1383,7 +1428,6 @@ Insets guessInsets(XDecoratedPeer window) { } return res; } - /* * Some buggy WMs ignore window gravity when processing * ConfigureRequest and position window as if the gravity is Static. @@ -1447,11 +1491,27 @@ public static Insets getInsetsFromExtents(long window) { if (window == XConstants.None) { return null; } - XNETProtocol net_protocol = getWM().getNETProtocol(); - if (net_protocol != null && net_protocol.active()) { - Insets insets = getInsetsFromProp(window, XA_NET_FRAME_EXTENTS); - if (insLog.isLoggable(PlatformLogger.Level.FINE)) { - insLog.fine("_NET_FRAME_EXTENTS: {0}", insets); + final XNETProtocol net_protocol = getWM().getNETProtocol(); + final boolean frameExtentsSupported = + net_protocol != null + && net_protocol.active() + && net_protocol.checkProtocol(net_protocol.XA_NET_SUPPORTED, XA_NET_FRAME_EXTENTS); + if (frameExtentsSupported) { + Insets insets = null; + final int MAX_RETRY_COUNT = 3; + for (int i = 0; i < MAX_RETRY_COUNT; i++) { + insets = getInsetsFromProp(window, XA_NET_FRAME_EXTENTS); + if (insLog.isLoggable(PlatformLogger.Level.FINE)) { + insLog.fine("_NET_FRAME_EXTENTS: {0}", insets); + } + if (insets == null) { + final long timeForInsetExtentToBecomeReadyMs = (i + 1)*5; + insLog.fine("_NET_FRAME_EXTENTS not available (yet?), retrying in {0} ms", + timeForInsetExtentToBecomeReadyMs); + try { + Thread.sleep(timeForInsetExtentToBecomeReadyMs); + } catch (InterruptedException ignored) {} + } } if (insets != null) { @@ -1645,7 +1705,9 @@ Insets getInsets(XDecoratedPeer win, long window, long parent) { break; } case XWM.SAWFISH_WM: - case XWM.OPENLOOK_WM: { + case XWM.OPENLOOK_WM: + case XWM.AWESOME_WM: + { /* single reparenting */ syncTopLevelPos(window, lwinAttr); correctWM.top = lwinAttr.get_y(); @@ -1771,4 +1833,43 @@ public boolean setNetWMIcon(XWindowPeer window, java.util.List icons) } return false; } + + public static void setGtkFrameExtents(long window) { + // This will make Mutter think that we are "client-decorated" + // (see meta_window_is_client_decorated() in src/core/window.c of Mutter). + // It is necessary for some heuristics that Mutter has not to be applied. + long data = Native.allocateLongArray(4); + try { + Native.putLong(data, 0, 0); + Native.putLong(data, 1, 0); + Native.putLong(data, 2, 0); + Native.putLong(data, 3, 0); + + XToolkit.awtLock(); + XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance()); + XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, + XA_GTK_FRAME_EXTENTS.getAtom(), + XAtom.XA_CARDINAL, + 32, XConstants.PropModeReplace, + data, 4); + XErrorHandlerUtil.RESTORE_XERROR_HANDLER(); + } finally { + XToolkit.awtUnlock(); + unsafe.freeMemory(data); + } + } + + public static boolean isWMMoveResizeSupported() { + if (g_net_protocol == null) { + return false; + } + + return g_net_protocol.doWMMoveResizeProtocol(); + } + + void startMovingWindowTogetherWithMouse(long window, Point lastButtonPressAbsLocation, int mouseButton) { + if (g_net_protocol != null) { + g_net_protocol.startMovingWindowTogetherWithMouse(window, lastButtonPressAbsLocation, mouseButton); + } + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java b/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java index 38e35bdbeeaa..53893fdc0279 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java @@ -35,6 +35,7 @@ import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; import java.awt.Point; import java.awt.Rectangle; import java.awt.SystemColor; @@ -58,6 +59,9 @@ import sun.awt.SunToolkit; import sun.awt.X11ComponentPeer; import sun.awt.X11GraphicsConfig; +import sun.awt.X11GraphicsEnvironment; +import sun.awt.event.KeyEventProcessing; +import sun.awt.event.TouchEvent; import sun.java2d.SunGraphics2D; import sun.java2d.SurfaceData; import sun.util.logging.PlatformLogger; @@ -68,6 +72,7 @@ class XWindow extends XBaseWindow implements X11ComponentPeer { private static PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XWindow"); private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.X11.focus.XWindow"); private static PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XWindow"); + private static PlatformLogger touchEventLog = PlatformLogger.getLogger("sun.awt.event.TouchEvent"); /* If a motion comes in while a multi-click is pending, * allow a smudge factor so that moving the mouse by a small * amount does not wipe out the multi-click state variables. @@ -80,6 +85,12 @@ class XWindow extends XBaseWindow implements X11ComponentPeer { static WeakReference lastWindowRef = null; static int clickCount = 0; + // all touch scrolls are measured in pixels + private static int touchBeginX = 0, touchBeginY = 0; + private static int trackingId = 0; + private static long lastTouchUpdateTime = 0; + private static boolean isTouchScroll = false; + // used to check if we need to re-create surfaceData. int oldWidth = -1; int oldHeight = -1; @@ -189,6 +200,17 @@ protected void initGraphicsConfiguration() { graphicsConfigData = new AwtGraphicsConfigData(graphicsConfig.getAData()); } + void syncBounds() { + Rectangle r = target.getBounds(); + x = r.x; + y = r.y; + width = r.width; + height = r.height; + xSetBounds(x,y,width,height); + doValidateSurface(); + layout(); + } + void preInit(XCreateWindowParams params) { super.preInit(params); reparented = Boolean.TRUE.equals(params.get(REPARENTED)); @@ -239,6 +261,11 @@ void preInit(XCreateWindowParams params) { params.putIfNull(BACKING_STORE, XToolkit.getBackingStoreType()); + params.putIfNull(XI_EVENT_MASK, XConstants.XI_TouchBeginMask | + XConstants.XI_TouchUpdateMask | + XConstants.XI_TouchEndMask); + params.putIfNull(XI_DEVICE_ID, XConstants.XIAllMasterDevices); + XToolkit.awtLock(); try { if (wm_protocols == null) { @@ -685,8 +712,7 @@ public void handleButtonPressRelease(XEvent xev) { int x = scaleDown(xbe.get_x()); int y = scaleDown(xbe.get_y()); if (xev.get_xany().get_window() != window) { - Point localXY = toLocal(scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root())); + Point localXY = toLocal(scaleDown(xbe.get_x_root(), xbe.get_y_root())); x = localXY.x; y = localXY.y; } @@ -734,11 +760,11 @@ public void handleButtonPressRelease(XEvent xev) { if (!isWheel(lbutton)) { modifiers = getModifiers(xbe.get_state(), button, 0); + Point p = scaleDown(xbe.get_x_root(), xbe.get_y_root()); MouseEvent me = new MouseEvent(getEventSource(), type == XConstants.ButtonPress ? MouseEvent.MOUSE_PRESSED : MouseEvent.MOUSE_RELEASED, jWhen,modifiers, x, y, - scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root()), + p.x, p.y, clickCount,popupTrigger,button); postEventToEventQueue(me); @@ -746,13 +772,13 @@ public void handleButtonPressRelease(XEvent xev) { if ((type == XConstants.ButtonRelease) && ((mouseButtonClickAllowed & XlibUtil.getButtonMask(lbutton)) != 0) ) // No up-button in the drag-state { + p = scaleDown(xbe.get_x_root(), xbe.get_y_root()); postEventToEventQueue(me = new MouseEvent(getEventSource(), MouseEvent.MOUSE_CLICKED, jWhen, modifiers, x, y, - scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root()), + p.x, p.y, clickCount, false, button)); } @@ -761,11 +787,11 @@ public void handleButtonPressRelease(XEvent xev) { else { modifiers = getWheelModifiers(xbe.get_state(), button); if (xev.get_type() == XConstants.ButtonPress) { + Point p = scaleDown(xbe.get_x_root(), xbe.get_y_root()); MouseWheelEvent mwe = new MouseWheelEvent(getEventSource(),MouseEvent.MOUSE_WHEEL, jWhen, modifiers, x, y, - scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root()), + p.x, p.y, 1,false,MouseWheelEvent.WHEEL_UNIT_SCROLL, 3,button==4 ? -1 : 1); postEventToEventQueue(mwe); @@ -779,6 +805,143 @@ public void handleButtonPressRelease(XEvent xev) { } } + public void handleTouchEvent(XEvent xev) { + super.handleTouchEvent(xev); + + XIDeviceEvent dev = XToolkit.GetXIDeviceEvent(xev.get_xcookie()); + // TODO remove this after TouchEvents support + // own touch processing by tracking id + if (isTouchReleased()) { + trackingId = dev.get_detail(); + } else if (!isOwningTouch(dev.get_detail())) { + return; + } + + int x = scaleDown((int) dev.get_event_x()); + int y = scaleDown((int) dev.get_event_y()); + + if (dev.get_event() != window) { + Point localXY = toLocal(scaleDown((int) dev.get_root_x(), (int) dev.get_root_y())); + x = localXY.x; + y = localXY.y; + } + int modifiers = getModifiers(dev.get_mods().get_effective(), MouseEvent.BUTTON1, 0); + int scrollModifiers = modifiers & ~InputEvent.SHIFT_DOWN_MASK; + + long jWhen = System.currentTimeMillis(); + + switch (dev.get_evtype()) { + case XConstants.XI_TouchBegin: + if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) { + touchEventLog.finest("Touch Begin at: " + x + ", " + y); + } + isTouchScroll = false; + touchBeginX = x; + touchBeginY = y; + lastTouchUpdateTime = jWhen; + sendWheelEventFromTouch(dev, jWhen, scrollModifiers, touchBeginX, touchBeginY, TouchEvent.TOUCH_BEGIN, 1); + break; + case XConstants.XI_TouchUpdate: + if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) { + touchEventLog.finest("Touch Update at: " + x + ", " + y); + } + lastTouchUpdateTime = jWhen; + + if (!isTouchScroll && isInsideTouchClickBoundaries(x, y)) { + return; + } + isTouchScroll = true; + + int deltaY = lastY - y; + if (deltaY != 0) { + if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) { + touchEventLog.finest("Vertical touch scroll, delta: " + deltaY); + } + sendWheelEventFromTouch(dev, jWhen, scrollModifiers, x, y, TouchEvent.TOUCH_UPDATE, deltaY); + } + + int deltaX = lastX - x; + if (deltaX != 0) { + if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) { + touchEventLog.finest("Horizontal touch scroll, delta: " + deltaX); + } + int horizontalScrollMods = scrollModifiers | InputEvent.SHIFT_DOWN_MASK; + sendWheelEventFromTouch(dev, jWhen, horizontalScrollMods, x, y, TouchEvent.TOUCH_UPDATE, deltaX); + } + break; + case XConstants.XI_TouchEnd: + if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) { + touchEventLog.finest("Touch End at: " + x + ", " + y); + } + sendWheelEventFromTouch(dev, jWhen, scrollModifiers, x, y, TouchEvent.TOUCH_END, 1); + + if (!isTouchScroll) { + if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) { + touchEventLog.finest("Touch Press at: " + x + ", " + y); + } + sendButtonPressFromTouch(dev, jWhen, modifiers, touchBeginX, touchBeginY); + } + + // release touch processing + trackingId = 0; + break; + } + + lastX = x; + lastY = y; + } + + private boolean isInsideTouchClickBoundaries(int x, int y) { + return Math.abs(touchBeginX - x) <= TouchEvent.CLICK_RADIUS && + Math.abs(touchBeginY - y) <= TouchEvent.CLICK_RADIUS; + } + + private static boolean isOwningTouch(int fingerId) { + return trackingId == fingerId; + } + + private static boolean isTouchReleased() { + if (trackingId == 0) { + return true; + } + + // recovery from situation when TOUCH_END event didn't occurred + long msFromLastUpdate = Math.abs(System.currentTimeMillis() - lastTouchUpdateTime); + if (msFromLastUpdate >= TouchEvent.NO_UPDATE_TIMEOUT) { + touchEventLog.warning("Release touch processing, milliseconds from last update: " + msFromLastUpdate); + } + return msFromLastUpdate >= TouchEvent.NO_UPDATE_TIMEOUT; + } + + private void sendButtonPressFromTouch(XIDeviceEvent dev, long jWhen, int modifiers, int x, int y) { + sendMouseEventFromTouch(dev, MouseEvent.MOUSE_MOVED, jWhen, modifiers, x, y, MouseEvent.NOBUTTON, 0); + sendMouseEventFromTouch(dev, MouseEvent.MOUSE_DRAGGED, jWhen, modifiers, x, y, MouseEvent.BUTTON1, 0); + sendMouseEventFromTouch(dev, MouseEvent.MOUSE_PRESSED, jWhen, modifiers, x, y, MouseEvent.BUTTON1, 1); + sendMouseEventFromTouch(dev, MouseEvent.MOUSE_RELEASED, jWhen, modifiers, x, y, MouseEvent.BUTTON1, 1); + sendMouseEventFromTouch(dev, MouseEvent.MOUSE_CLICKED, jWhen, modifiers, x, y, MouseEvent.BUTTON1, 1); + } + + private void sendWheelEventFromTouch(XIDeviceEvent dev, long jWhen, int modifiers, int x, int y, int type, int delta) { + Point p = scaleDown((int) dev.get_root_x(), (int) dev.get_root_y()); + postEventToEventQueue( + new MouseWheelEvent(getEventSource(), MouseEvent.MOUSE_WHEEL, jWhen, + modifiers, + x, y, + p.x, p.y, + 0, false, type, + 1, delta)); + } + + private void sendMouseEventFromTouch(XIDeviceEvent dev, int type, long jWhen, int modifiers, int x, int y, int button, int clickCount) { + boolean popupTrigger = button == MouseEvent.BUTTON3; + Point p = scaleDown((int) dev.get_root_x(), (int) dev.get_root_y()); + postEventToEventQueue( + new MouseEvent(getEventSource(), type, jWhen, + modifiers, x, y, + p.x, p.y, + clickCount, popupTrigger, button)); + } + public void handleMotionNotify(XEvent xev) { super.handleMotionNotify(xev); XMotionEvent xme = xev.get_xmotion(); @@ -835,8 +998,7 @@ public void handleMotionNotify(XEvent xev) { Component source = getEventSource(); if (xme.get_window() != window) { - Point localXY = toLocal(scaleDown(xme.get_x_root()), - scaleDown(xme.get_y_root())); + Point localXY = toLocal(scaleDown(xme.get_x_root(), xme.get_y_root())); x = localXY.x; y = localXY.y; } @@ -844,10 +1006,9 @@ public void handleMotionNotify(XEvent xev) { * According to canvas.c we shouldn't post any MouseEvent if mouse is dragging and clickCount!=0. */ if ((isDragging && clickCount == 0) || !isDragging) { + Point p = scaleDown(xme.get_x_root(), xme.get_y_root()); MouseEvent mme = new MouseEvent(source, mouseEventType, jWhen, - modifiers, x, y, - scaleDown(xme.get_x_root()), - scaleDown(xme.get_y_root()), + modifiers, x, y, p.x, p.y, clickCount, popupTrigger, MouseEvent.NOBUTTON); postEventToEventQueue(mme); } @@ -856,7 +1017,8 @@ public void handleMotionNotify(XEvent xev) { // REMIND: need to implement looking for disabled events private native boolean x11inputMethodLookupString(long event, - long[] keysymArray); + long[] keysymArray, + boolean keyPressContainsThePreeditTextOfLastXResetIC); private native boolean haveCurrentX11InputMethodInstance(); @@ -960,8 +1122,7 @@ public void handleXCrossingEvent(XEvent xev) { int x = scaleDown(xce.get_x()); int y = scaleDown(xce.get_y()); if (xce.get_window() != window) { - Point localXY = toLocal(scaleDown(xce.get_x_root()), - scaleDown(xce.get_y_root())); + Point localXY = toLocal(scaleDown(xce.get_x_root(), xce.get_y_root())); x = localXY.x; y = localXY.y; } @@ -969,12 +1130,12 @@ public void handleXCrossingEvent(XEvent xev) { // This code tracks boundary crossing and ensures MOUSE_ENTER/EXIT // are posted in alternate pairs if (compWithMouse != null) { + Point p = scaleDown(xce.get_x_root(), xce.get_y_root()); MouseEvent me = new MouseEvent(compWithMouse, MouseEvent.MOUSE_EXITED, jWhen, modifiers, scaleDown(xce.get_x()), scaleDown(xce.get_y()), - scaleDown(xce.get_x_root()), - scaleDown(xce.get_y_root()), + p.x, p.y, clickCount, popupTrigger, MouseEvent.NOBUTTON); postEventToEventQueue(me); @@ -982,12 +1143,12 @@ public void handleXCrossingEvent(XEvent xev) { lastWindowRef = null; } if (xce.get_type() == XConstants.EnterNotify) { + Point p = scaleDown(xce.get_x_root(), xce.get_y_root()); MouseEvent me = new MouseEvent(getEventSource(), MouseEvent.MOUSE_ENTERED, jWhen, modifiers, scaleDown(xce.get_x()), scaleDown(xce.get_y()), - scaleDown(xce.get_x_root()), - scaleDown(xce.get_y_root()), + p.x, p.y, clickCount, popupTrigger, MouseEvent.NOBUTTON); postEventToEventQueue(me); @@ -1075,6 +1236,12 @@ private static int primaryUnicode2JavaKeycode(int uni) { return (uni > 0? sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(uni) : 0); //return (uni > 0? uni + 0x01000000 : 0); } + + // java keycodes for unicode values consistent with MacOS and Windows + private static int addUnicodeOffset(int uni) { + return uni > 0 ? uni + 0x01000000 : 0; + } + void logIncomingKeyEvent(XKeyEvent ev) { if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { keyEventLog.fine("--XWindow.java:handleKeyEvent:"+ev); @@ -1108,7 +1275,12 @@ final void handleKeyPress(XKeyEvent ev) { if ( //TODO check if there's an active input method instance // without calling a native method. Is it necessary though? haveCurrentX11InputMethodInstance()) { - if (x11inputMethodLookupString(ev.pData, keysym)) { + + final boolean keyPressContainsThePreeditTextOfLastXResetIC = + Toolkit.getDefaultToolkit() instanceof XToolkit xToolkit && + xToolkit.doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC(); + + if (x11inputMethodLookupString(ev.pData, keysym, keyPressContainsThePreeditTextOfLastXResetIC)) { if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) { keyEventLog.fine("--XWindow.java XIM did process event; return; dec keysym processed:"+(keysym[0])+ "; hex keysym processed:"+Long.toHexString(keysym[0]) @@ -1163,10 +1335,18 @@ final void handleKeyPress(XKeyEvent ev) { ); } - int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? - primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : - jkc.getJavaKeycode(); + primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : + jkc.getJavaKeycode(); + + int jkeyToReturn; + if (KeyEventProcessing.useNationalLayouts) { + jkeyToReturn = getNationalKeyCode(jkc, unicodeFromPrimaryKeysym); + jkeyExtended = jkeyToReturn; + } else { + jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible + } + postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED, isDeadKey ? jkeyExtended : jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), @@ -1245,10 +1425,18 @@ private void handleKeyRelease(XKeyEvent ev) { // is undefined, we still will have a guess of what was engraved on a keytop. int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0); - int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? - primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : - jkc.getJavaKeycode(); + primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : + jkc.getJavaKeycode(); + + int jkeyToReturn; + if (KeyEventProcessing.useNationalLayouts) { + jkeyToReturn = getNationalKeyCode(jkc, unicodeFromPrimaryKeysym); + jkeyExtended = jkeyToReturn; + } else { + jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible + } + postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED, isDeadKey ? jkeyExtended : jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), @@ -1260,6 +1448,14 @@ private void handleKeyRelease(XKeyEvent ev) { } + private static int getNationalKeyCode(XKeysym.Keysym2JavaKeycode jkc, int unicodeFromPrimaryKeysym) { + // use this key code for both keyCode and extendedKeyCode + // compatible with MacOS and Windows + return jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? + addUnicodeOffset(unicodeFromPrimaryKeysym) : + jkc.getJavaKeycode(); + } + private boolean isDeadKey(long keysym){ return XKeySymConstants.XK_dead_grave <= keysym && keysym <= XKeySymConstants.XK_dead_semivoiced_sound; @@ -1548,12 +1744,20 @@ protected int getScale() { } @Override - protected int scaleUp(int x) { - return graphicsConfig.scaleUp(x); + protected int scaleUp(int i) { + return graphicsConfig.scaleUp(i); + } + protected Point scaleUp(int x, int y) { + return ((X11GraphicsEnvironment) GraphicsEnvironment.getLocalGraphicsEnvironment()) + .scaleUp(graphicsConfig.getDevice(), x, y); } @Override - protected int scaleDown(int x) { - return graphicsConfig.scaleDown(x); + protected int scaleDown(int i) { + return graphicsConfig.scaleDown(i); + } + protected Point scaleDown(int x, int y) { + return ((X11GraphicsEnvironment) GraphicsEnvironment.getLocalGraphicsEnvironment()) + .scaleDown(graphicsConfig.getDevice(), x, y); } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java index 069e3b7559be..42b7163cd36e 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java @@ -25,36 +25,16 @@ package sun.awt.X11; -import java.awt.AWTEvent; -import java.awt.Component; -import java.awt.Dialog; -import java.awt.Dimension; -import java.awt.EventQueue; -import java.awt.Frame; -import java.awt.Graphics; -import java.awt.GraphicsConfiguration; -import java.awt.GraphicsDevice; -import java.awt.GraphicsEnvironment; -import java.awt.Image; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.SystemColor; -import java.awt.Window; +import java.awt.*; import java.awt.event.ComponentEvent; import java.awt.event.FocusEvent; import java.awt.event.WindowEvent; import java.awt.peer.ComponentPeer; import java.awt.peer.WindowPeer; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; -import java.util.Vector; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; +import com.jetbrains.internal.JBRApi; import sun.awt.AWTAccessor; import sun.awt.AWTAccessor.ComponentAccessor; import sun.awt.DisplayChangedListener; @@ -65,6 +45,11 @@ import sun.java2d.pipe.Region; import sun.util.logging.PlatformLogger; +import sun.security.action.GetPropertyAction; + +import javax.swing.JPopupMenu; +import javax.swing.JWindow; + import static java.nio.charset.StandardCharsets.UTF_8; class XWindowPeer extends XPanelPeer implements WindowPeer, @@ -76,6 +61,15 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, private static final PlatformLogger grabLog = PlatformLogger.getLogger("sun.awt.X11.grab.XWindowPeer"); private static final PlatformLogger iconLog = PlatformLogger.getLogger("sun.awt.X11.icon.XWindowPeer"); + static final boolean ENABLE_REPARENTING_CHECK + = "true".equals(GetPropertyAction.privilegedGetProperty("reparenting.check")); + private static final boolean ENABLE_DESKTOP_CHECK + = "true".equals(GetPropertyAction.privilegedGetProperty("transients.desktop.check", "true")); + static final boolean FULL_MODAL_TRANSIENTS_CHAIN + = "true".equals(GetPropertyAction.privilegedGetProperty("full.modal.transients.chain")); + static final boolean RESIZE_WITH_SCALE + = "true".equals(GetPropertyAction.privilegedGetProperty("resize.with.scale", "false")); + // should be synchronized on awtLock private static Set windows = new HashSet(); @@ -105,6 +99,11 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, private static final AtomicBoolean isStartupNotificationRemoved = new AtomicBoolean(); + private Long desktopId; // guarded by AWT lock + private boolean desktopIdInvalid; // guarded by AWT lock + + transient boolean syncSizeOnly; // Force syncBounds() to sync only size, not location. + /* * Focus related flags */ @@ -169,6 +168,7 @@ void preInit(XCreateWindowParams params) { params.put(EVENT_MASK, eventMask); XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE"); + XA_NET_WM_DESKTOP = XAtom.get("_NET_WM_DESKTOP"); params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect())); @@ -532,6 +532,10 @@ void updateFocusability() { } } + Insets getRealUnscaledInsets() { + return new Insets(0, 0, 0, 0); + } + public Insets getInsets() { return new Insets(0, 0, 0, 0); } @@ -626,32 +630,29 @@ public void handleWindowFocusIn_Dispatch() { public void handleWindowFocusInSync(long serial) { WindowEvent we = new WindowEvent((Window)target, WindowEvent.WINDOW_GAINED_FOCUS); - XKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow((Window) target); - sendEvent(we); + synchronized (focusRequestLock) { + XKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow((Window) target); + sendEvent(we); + } } // NOTE: This method may be called by privileged threads. // DO NOT INVOKE CLIENT CODE ON THIS THREAD! public void handleWindowFocusIn(long serial) { - WindowEvent we = new WindowEvent((Window)target, WindowEvent.WINDOW_GAINED_FOCUS); - /* wrap in Sequenced, then post*/ - XKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow((Window) target); - postEvent(wrapInSequenced((AWTEvent) we)); + handleWindowFocusInSync(serial); } // NOTE: This method may be called by privileged threads. // DO NOT INVOKE CLIENT CODE ON THIS THREAD! public void handleWindowFocusOut(Window oppositeWindow, long serial) { - WindowEvent we = new WindowEvent((Window)target, WindowEvent.WINDOW_LOST_FOCUS, oppositeWindow); - XKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(null); - XKeyboardFocusManagerPeer.getInstance().setCurrentFocusOwner(null); - /* wrap in Sequenced, then post*/ - postEvent(wrapInSequenced((AWTEvent) we)); + handleWindowFocusOutSync(oppositeWindow, serial); } public void handleWindowFocusOutSync(Window oppositeWindow, long serial) { WindowEvent we = new WindowEvent((Window)target, WindowEvent.WINDOW_LOST_FOCUS, oppositeWindow); - XKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(null); - XKeyboardFocusManagerPeer.getInstance().setCurrentFocusOwner(null); - sendEvent(we); + synchronized (focusRequestLock) { + XKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(null); + XKeyboardFocusManagerPeer.getInstance().setCurrentFocusOwner(null); + sendEvent(we); + } } /* --- DisplayChangedListener Stuff --- */ @@ -659,59 +660,79 @@ public void handleWindowFocusOutSync(Window oppositeWindow, long serial) { /* Xinerama * called to check if we've been moved onto a different screen * Based on checkNewXineramaScreen() in awt_GraphicsEnv.c + * newBounds are specified in device space. + * Returns the corrected dimension of this window. */ - public void checkIfOnNewScreen(Rectangle newBounds) { - if (!XToolkit.localEnv.runningXinerama()) { - return; - } - + public Dimension checkIfOnNewScreen(Rectangle newBounds) { if (log.isLoggable(PlatformLogger.Level.FINEST)) { log.finest("XWindowPeer: Check if we've been moved to a new screen since we're running in Xinerama mode"); } - int area = newBounds.width * newBounds.height; - int intAmt, vertAmt, horizAmt; - int largestAmt = 0; + int largestIntersection = 0; int curScreenNum = ((X11GraphicsDevice)getGraphicsConfiguration().getDevice()).getScreen(); - int newScreenNum = 0; + int newScreenNum = curScreenNum; GraphicsDevice[] gds = XToolkit.localEnv.getScreenDevices(); - GraphicsConfiguration newGC = null; - Rectangle screenBounds; + GraphicsConfiguration newGC = getGraphicsConfiguration(); + + for (int i = 0; i < gds.length; i++) { + X11GraphicsDevice device = (X11GraphicsDevice) gds[i]; + Rectangle screenBounds = gds[i].getDefaultConfiguration().getBounds(); + // Rescale screen size to native unscaled coordinates + screenBounds.width = device.scaleUp(screenBounds.width); + screenBounds.height = device.scaleUp(screenBounds.height); + + Rectangle intersection = screenBounds.intersection(newBounds); + if (!intersection.isEmpty()) { + int area = intersection.width * intersection.height; + if (area > largestIntersection) { + largestIntersection = area; + newScreenNum = i; + newGC = gds[i].getDefaultConfiguration(); + if (intersection.equals(newBounds)) break; + } + } + } - XToolkit.awtUnlock(); - try { - for (int i = 0; i < gds.length; i++) { - screenBounds = gds[i].getDefaultConfiguration().getBounds(); - if (newBounds.intersects(screenBounds)) { - horizAmt = Math.min(newBounds.x + newBounds.width, - screenBounds.x + screenBounds.width) - - Math.max(newBounds.x, screenBounds.x); - vertAmt = Math.min(newBounds.y + newBounds.height, - screenBounds.y + screenBounds.height)- - Math.max(newBounds.y, screenBounds.y); - intAmt = horizAmt * vertAmt; - if (intAmt == area) { - // Completely on this screen - done! - newScreenNum = i; - newGC = gds[i].getDefaultConfiguration(); - break; - } - if (intAmt > largestAmt) { - largestAmt = intAmt; - newScreenNum = i; - newGC = gds[i].getDefaultConfiguration(); - } + Rectangle newScaledBounds = newBounds.getBounds(); + if (XWindowPeer.RESIZE_WITH_SCALE) { + // Try to guess that after the window has been moved to another monitor and (probably) + // resized as a result, the majority of its area will still be on that new monitor. + // This is a guess since we cannot predict the result of the resize operation where + // the window manager has the final say. + boolean isMaximized = target instanceof Frame f && (f.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0; + if (newScreenNum != curScreenNum && !isMaximized) { + X11GraphicsDevice device = (X11GraphicsDevice) gds[newScreenNum]; + Rectangle screenBounds = newGC.getBounds(); + // Rescale screen size to native unscaled coordinates + screenBounds.width = device.scaleUp(screenBounds.width); + screenBounds.height = device.scaleUp(screenBounds.height); + // Rescale window to new screen's scale + newScaledBounds.width = newBounds.width * device.getScaleFactor() / graphicsConfig.getScale(); + newScaledBounds.height = newBounds.height * device.getScaleFactor() / graphicsConfig.getScale(); + Rectangle intersection = screenBounds.intersection(newScaledBounds); + if (intersection.isEmpty() || + intersection.width * intersection.height <= newScaledBounds.width * newScaledBounds.height / 2) { + newScreenNum = curScreenNum; // Don't move to the new screen } } - } finally { - XToolkit.awtLock(); } + + var device = (X11GraphicsDevice) newGC.getDevice(); + Dimension newSize = newScaledBounds.getSize(); + newSize.width = device.scaleDown(newSize.width); + newSize.height = device.scaleDown(newSize.height); if (newScreenNum != curScreenNum) { if (log.isLoggable(PlatformLogger.Level.FINEST)) { log.finest("XWindowPeer: Moved to a new screen"); } - executeDisplayChangedOnEDT(newGC); + var acc = AWTAccessor.getComponentAccessor(); + syncSizeOnly = true; + acc.setSize(target, newSize.width, newSize.height); + acc.setGraphicsConfiguration(target, newGC); + syncSizeOnly = false; } + + return newSize; } /** @@ -744,24 +765,67 @@ public void displayChanged() { public void paletteChanged() { } - private Point queryXLocation() - { - return XlibUtil.translateCoordinates(getContentWindow(), XlibWrapper - .RootWindow(XToolkit.getDisplay(), - getScreenNumber()), - new Point(0, 0), getScale()); + void xSetSize(int width, int height) { + if (getWindow() == 0) { + insLog.warning("Attempt to resize uncreated window"); + throw new IllegalStateException("Attempt to resize uncreated window"); + } + if (insLog.isLoggable(PlatformLogger.Level.FINE)) { + insLog.fine("Setting size on " + this + " to " + width + "x" + height); + } + width = Math.max(MIN_SIZE, width); + height = Math.max(MIN_SIZE, height); + XToolkit.awtLock(); + try { + XlibWrapper.XResizeWindow(XToolkit.getDisplay(), getWindow(), + scaleUp(width), scaleUp(height)); + } finally { + XToolkit.awtUnlock(); + } } - protected Point getNewLocation(XConfigureEvent xe, int leftInset, int topInset) { - // Bounds of the window - Rectangle targetBounds = AWTAccessor.getComponentAccessor().getBounds(target); + class WindowLocation { + private final Point location; // Device space + private final boolean client; + WindowLocation(Point location, boolean client) { + this.location = location; + this.client = client; + } + Point getDeviceLocation() { + if (location == null) { + Point l = AWTAccessor.getComponentAccessor().getLocation(target); + l = scaleUp(l.x, l.y); + return l; + } else if (client) { + Insets insets = getRealUnscaledInsets(); + return new Point(location.x - insets.left, location.y - insets.top); + } else { + return location; + } + } + Point getUserLocation() { + if (location == null) { + return AWTAccessor.getComponentAccessor().getLocation(target); + } else if (client) { + Insets insets = getRealUnscaledInsets(); + return scaleDown(location.x - insets.left, location.y - insets.top); + } else { + return scaleDown(location.x, location.y); + } + } + } + + WindowLocation queryXLocation() { + return new WindowLocation(XlibUtil.translateCoordinates(getContentWindow(), + XlibWrapper.RootWindow(XToolkit.getDisplay(), getScreenNumber()), 0, 0), false); + } + WindowLocation getNewLocation(XConfigureEvent xe) { int runningWM = XWM.getWMID(); - Point newLocation = targetBounds.getLocation(); - if (xe.get_send_event() || runningWM == XWM.NO_WM || XWM.isNonReparentingWM()) { + if (xe.get_send_event() || + (ENABLE_REPARENTING_CHECK ? (runningWM == XWM.NO_WM || XWM.isNonReparentingWM()) : !isReparented())) { // Location, Client size + insets - newLocation = new Point(scaleDown(xe.get_x()) - leftInset, - scaleDown(xe.get_y()) - topInset); + return new WindowLocation(new Point(xe.get_x(), xe.get_y()), true); } else { // ICCCM 4.1.5 states that a real ConfigureNotify will be sent when // a window is resized but the client can not tell if the window was @@ -776,21 +840,17 @@ protected Point getNewLocation(XConfigureEvent xe, int leftInset, int topInset) case XWM.MUTTER_WM: case XWM.SAWFISH_WM: case XWM.UNITY_COMPIZ_WM: + case XWM.AWESOME_WM: { - Point xlocation = queryXLocation(); + WindowLocation xlocation = queryXLocation(); if (log.isLoggable(PlatformLogger.Level.FINE)) { - log.fine("New X location: {0}", xlocation); + log.fine("New X location: {0} ({1})", xlocation.location, xlocation.client ? "client" : "bounds"); } - if (xlocation != null) { - newLocation = xlocation; - } - break; + return xlocation; } - default: - break; } } - return newLocation; + return new WindowLocation(null, false); } /* @@ -804,27 +864,32 @@ public void handleConfigureNotifyEvent(XEvent xev) { if (insLog.isLoggable(PlatformLogger.Level.FINE)) { insLog.fine(xe.toString()); } - checkIfOnNewScreen(new Rectangle(scaleDown(xe.get_x()), - scaleDown(xe.get_y()), - scaleDown(xe.get_width()), - scaleDown(xe.get_height()))); - Rectangle oldBounds = getBounds(); + WindowLocation eventLocation = getNewLocation(xe); + Dimension eventDimension = new Dimension(xe.get_width(), xe.get_height()); + boolean xinerama = XToolkit.localEnv.runningXinerama(); - x = scaleDown(xe.get_x()); - y = scaleDown(xe.get_y()); - width = scaleDown(xe.get_width()); - height = scaleDown(xe.get_height()); - - if (!getBounds().getSize().equals(oldBounds.getSize())) { - AWTAccessor.getComponentAccessor().setSize(target, width, height); - postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_RESIZED)); - } - if (!getBounds().getLocation().equals(oldBounds.getLocation())) { - AWTAccessor.getComponentAccessor().setLocation(target, x, y); - postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_MOVED)); - } - repositionSecurityWarning(); + SunToolkit.executeOnEventHandlerThread(target, () -> { + Rectangle oldBounds = getBounds(); + Dimension newSize = xinerama + ? checkIfOnNewScreen(new Rectangle(eventLocation.getDeviceLocation(), eventDimension)) + : new Dimension(scaleDown(eventDimension.width), scaleDown(eventDimension.height));; + Point newUserLocation = eventLocation.getUserLocation(); + x = newUserLocation.x; + y = newUserLocation.y; + width = newSize.width; + height = newSize.height; + + if (!getBounds().getSize().equals(oldBounds.getSize())) { + AWTAccessor.getComponentAccessor().setSize(target, width, height); + postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_RESIZED)); + } + if (!getBounds().getLocation().equals(oldBounds.getLocation())) { + AWTAccessor.getComponentAccessor().setLocation(target, x, y); + postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_MOVED)); + } + repositionSecurityWarning(); + }); } final void requestXFocus(long time) { @@ -923,6 +988,12 @@ public void handleFocusEvent(XEvent xev) { } handleWindowFocusOut(oppositeWindow, xfe.get_serial()); } + if (XToolkit.isXWayland() && XAwtState.getGrabWindow() != null) { + // under XWayland, pointer grab doesn't give us ability to receive button events for native Wayland + // windows, so the logic in handleButtonPressRelease method won't work, and we need this workaround + // to cancel the grab on switching to another application + postEventToEventQueue(new sun.awt.UngrabEvent(getEventSource())); + } } } } @@ -1100,19 +1171,26 @@ private void promoteDefaultPosition() { } } + /* + * This decides on a mechanism to suppress newly created window from getting + * focus, if 'autoRequestFocus' is set to 'false'. The 'old' (historically + * used) way is to suppress WM_TAKE_FOCUS protocol temporarily, until the + * window is mapped. This approach doesn't work for i3 window manager + * though, as the latter doesn't track updates to WM_TAKE_FOCUS property + * (it's not required as per ICCCM specification). So another approach is + * used - setting _NET_WM_USER_TIME to 0, as specified in EWMH spec (see + * 'setUserTimeBeforeShowing' method). + */ + private boolean shouldSuppressWmTakeFocus() { + int wmId = XWM.getWMID(); + return wmId != XWM.I3_WM; + } + public void setVisible(boolean vis) { if (!isVisible() && vis) { isBeforeFirstMapNotify = true; winAttr.initialFocus = isAutoRequestFocus(); - if (!winAttr.initialFocus) { - /* - * It's easier and safer to temporary suppress WM_TAKE_FOCUS - * protocol itself than to ignore WM_TAKE_FOCUS client message. - * Because we will have to make the difference between - * the message come after showing and the message come after - * activation. Also, on Metacity, for some reason, we have _two_ - * WM_TAKE_FOCUS client messages when showing a frame/dialog. - */ + if (!winAttr.initialFocus && shouldSuppressWmTakeFocus()) { suppressWmTakeFocus(true); } } @@ -1122,6 +1200,15 @@ public void setVisible(boolean vis) { warningWindow.setSecurityWarningVisible(false, false); } boolean refreshChildsTransientFor = isVisible() != vis; + // To enable type-ahead for 'simple' windows, we initiate internal focus transfer to such a window even before + // it's mapped by a window manager. 'Simple' windows aren't natively focusable, so for this to work as expected + // we only need to be sure that the window will be mapped soon after we request it. There are known cases when + // window manager delays mapping the window for a long time (e.g. i3wm does this when another window is in + // full-screen mode), but no known cases when it does it for popup windows, so we hope that we're safe here with + // 'simple' windows. + if (vis && isSimpleWindow() && shouldFocusOnMapNotify()) { + requestInitialFocus(); + } super.setVisible(vis); if (refreshChildsTransientFor) { for (Window child : ((Window) target).getOwnedWindows()) { @@ -1171,11 +1258,49 @@ public void setVisible(boolean vis) { updateChildrenSizes(); } repositionSecurityWarning(); + + /* + * Fix for 6457980/JBR-1762. + * When hiding an owned Window we should implicitly + * return focus to its owner because it won't + * receive WM_TAKE_FOCUS. + */ + if (!vis && isSimpleWindow() && target == XKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow()) { + // Use the same logic as in MacOS (see LWWindowPeer, was introduced in: + // 54bb2dd097 'JBR-1417 JBR 11 does not support chain of popups)' + Window targetOwner = ((Window)target).getOwner(); + while (targetOwner != null && (targetOwner.getOwner() != null && !targetOwner.isFocusableWindow())) { + targetOwner = targetOwner.getOwner(); + } + + if (targetOwner != null) { + XWindowPeer xwndpeer = AWTAccessor.getComponentAccessor().getPeer(targetOwner); + if (xwndpeer != null) { + xwndpeer.requestWindowFocus(); + } + } + } } protected void suppressWmTakeFocus(boolean doSuppress) { } + @Override + void setUserTimeBeforeShowing() { + if (XWM.getWMID() == XWM.KDE2_WM && isSimpleWindow() && ((Window)target).getType() == Window.Type.POPUP && + !isInitialising()) { + // Workaround, to suppress blinking of taskbar icon, when hover popup is displayed for a background window + // Checking of initializing status of XBaseWindow class allows to avoid deadlock. + setUserTime(XToolkit.getCurrentServerTime(), false); + } + else if (winAttr.initialFocus || shouldSuppressWmTakeFocus()) { + super.setUserTimeBeforeShowing(); + } + else { + setUserTime(0, false); + } + } + final boolean isSimpleWindow() { return !(target instanceof Frame || target instanceof Dialog); } @@ -1259,7 +1384,15 @@ public void updateSecurityWarningVisibility() { boolean isOverrideRedirect() { return XWM.getWMID() == XWM.OPENLOOK_WM || - Window.Type.POPUP.equals(getWindowType()); + Window.Type.POPUP.equals(getWindowType()) && (!XWM.isKDE2() || isPopupMenuWindow()); + } + + private boolean isPopupMenuWindow() { + if (!(target instanceof JWindow)) return false; + Container contentPane = ((JWindow) target).getContentPane(); + if (contentPane == null) return false; + Component[] components = contentPane.getComponents(); + return components.length == 1 && components[0] instanceof JPopupMenu; } final boolean isOLWMDecorBug() { @@ -1290,19 +1423,6 @@ public void dispose() { removeRootPropertyEventDispatcher(); mustControlStackPosition = false; super.dispose(); - - /* - * Fix for 6457980. - * When disposing an owned Window we should implicitly - * return focus to its decorated owner because it won't - * receive WM_TAKE_FOCUS. - */ - if (isSimpleWindow()) { - if (target == XKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow()) { - Window owner = getDecoratedOwner((Window)target); - ((XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(owner)).requestWindowFocus(); - } - } } boolean isResizable() { @@ -1337,12 +1457,7 @@ private void removeStartupNotification() { return; } - @SuppressWarnings("removal") - final String desktopStartupId = AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - return XToolkit.getEnv("DESKTOP_STARTUP_ID"); - } - }); + final String desktopStartupId = XToolkit.getDesktopStartupId(); if (desktopStartupId == null) { return; } @@ -1403,21 +1518,34 @@ public void handleMapNotifyEvent(XEvent xev) { isUnhiding |= isWMStateNetHidden(); super.handleMapNotifyEvent(xev); - if (!winAttr.initialFocus) { + + if (!ENABLE_REPARENTING_CHECK && delayedModalBlocking) { + // case of non-re-parenting WM + // (for a re-parenting WM this should have been already done on ReparentNotify processing) + addToTransientFors(AWTAccessor.getComponentAccessor().getPeer(modalBlocker)); + delayedModalBlocking = false; + } + + if (isBeforeFirstMapNotify && !winAttr.initialFocus && shouldSuppressWmTakeFocus()) { suppressWmTakeFocus(false); // restore the protocol. - /* - * For some reason, on Metacity, a frame/dialog being shown - * without WM_TAKE_FOCUS protocol doesn't get moved to the front. - * So, we do it evidently. - */ - XToolkit.awtLock(); - try { - XlibWrapper.XRaiseWindow(XToolkit.getDisplay(), getWindow()); - } finally { - XToolkit.awtUnlock(); + if (!XWM.isKDE2()) { + /* + * For some reason, on Metacity, a frame/dialog being shown + * without WM_TAKE_FOCUS protocol doesn't get moved to the front. + * So, we do it evidently. + * + * We don't do it on KDE, as raising a child window will also raise the parent one there, + * and we don't want that. + */ + XToolkit.awtLock(); + try { + XlibWrapper.XRaiseWindow(XToolkit.getDisplay(), getWindow()); + } finally { + XToolkit.awtUnlock(); + } } } - if (shouldFocusOnMapNotify()) { + if (!isSimpleWindow() && shouldFocusOnMapNotify() && !XWM.isWeston()) { focusLog.fine("Automatically request focus on window"); requestInitialFocus(); } @@ -1615,7 +1743,9 @@ public void setModalBlocked(Dialog d, boolean blocked, } modalBlocker = d; - if (isReparented() || XWM.isNonReparentingWM()) { + if (isReparented() || + ENABLE_REPARENTING_CHECK && XWM.isNonReparentingWM() || + !ENABLE_REPARENTING_CHECK && isMapped()) { addToTransientFors(blockerPeer, javaToplevels); } else { delayedModalBlocking = true; @@ -1626,8 +1756,12 @@ public void setModalBlocked(Dialog d, boolean blocked, } modalBlocker = null; - if (isReparented() || XWM.isNonReparentingWM()) { - removeFromTransientFors(); + if (isReparented() || + ENABLE_REPARENTING_CHECK && XWM.isNonReparentingWM() || + !ENABLE_REPARENTING_CHECK && isMapped()) { + if (FULL_MODAL_TRANSIENTS_CHAIN || haveCommonAncestor(target, d)) { + removeFromTransientFors(); + } } else { delayedModalBlocking = false; } @@ -1669,7 +1803,7 @@ static void setToplevelTransientFor(XWindowPeer window, XWindowPeer transientFor if (!allStates && (window.getWMState() != transientForWindow.getWMState())) { return; } - if (window.getScreenNumber() != transientForWindow.getScreenNumber()) { + if (screenOrDesktopDiffers(window, transientForWindow)) { return; } long bpw = window.getWindow(); @@ -1706,7 +1840,7 @@ static void setToplevelTransientFor(XWindowPeer window, XWindowPeer transientFor void updateTransientFor() { int state = getWMState(); XWindowPeer p = prevTransientFor; - while ((p != null) && ((p.getWMState() != state) || (p.getScreenNumber() != getScreenNumber()))) { + while ((p != null) && ((p.getWMState() != state) || screenOrDesktopDiffers(p, this))) { p = p.prevTransientFor; } if (p != null) { @@ -1715,7 +1849,7 @@ void updateTransientFor() { restoreTransientFor(this); } XWindowPeer n = nextTransientFor; - while ((n != null) && ((n.getWMState() != state) || (n.getScreenNumber() != getScreenNumber()))) { + while ((n != null) && ((n.getWMState() != state) || screenOrDesktopDiffers(n, this))) { n = n.nextTransientFor; } if (n != null) { @@ -1723,6 +1857,43 @@ void updateTransientFor() { } } + private Long getDesktopId() { + XToolkit.awtLock(); + try { + if (desktopIdInvalid) { + desktopIdInvalid = false; + desktopId = null; + WindowPropertyGetter getter = + new WindowPropertyGetter(window, XA_NET_WM_DESKTOP, 0, 1, false, XAtom.XA_CARDINAL); + try { + if (getter.execute() == XConstants.Success && + getter.getActualType() == XAtom.XA_CARDINAL && + getter.getActualFormat() == 32) { + long ptr = getter.getData(); + if (ptr != 0) { + desktopId = Native.getCard32(ptr); + } + } + } finally { + getter.dispose(); + } + } + return desktopId; + } finally { + XToolkit.awtUnlock(); + } + } + + private static boolean screenOrDesktopDiffers(XWindowPeer p1, XWindowPeer p2) { + if (p1.getScreenNumber() != p2.getScreenNumber()) return true; + if (!ENABLE_DESKTOP_CHECK) return false; + Long d1 = p1.getDesktopId(); + if (d1 == null) return false; + Long d2 = p2.getDesktopId(); + if (d2 == null) return false; + return !d1.equals(d2); + } + /* * Removes the TRANSIENT_FOR hint from the given top-level window. * If window or transientForWindow are embedded frames, the containing @@ -1787,6 +1958,7 @@ private void addToTransientFors(XDialogPeer blockerPeer) { private void addToTransientFors(XDialogPeer blockerPeer, Vector javaToplevels) { + if (!FULL_MODAL_TRANSIENTS_CHAIN && !haveCommonAncestor(target, blockerPeer.target)) return; // blockerPeer chain iterator XWindowPeer blockerChain = blockerPeer; while (blockerChain.prevTransientFor != null) { @@ -2019,6 +2191,7 @@ public void xSetVisible(boolean visible) { this.visible = visible; if (visible) { applyWindowType(); + setUserTimeBeforeShowing(); XlibWrapper.XMapRaised(XToolkit.getDisplay(), getWindow()); } else { XlibWrapper.XUnmapWindow(XToolkit.getDisplay(), getWindow()); @@ -2089,6 +2262,7 @@ public void updateFocusableWindowState() { cachedFocusableWindow = isFocusableWindow(); } + XAtom XA_NET_WM_DESKTOP; XAtom XA_NET_WM_STATE; XAtomList net_wm_state; public XAtomList getNETWMState() { @@ -2105,6 +2279,18 @@ public void setNETWMState(XAtomList state) { } } + @Override + public void handlePropertyNotify(XEvent xev) { + super.handlePropertyNotify(xev); + XPropertyEvent ev = xev.get_xproperty(); + if (ev.get_atom() == XA_NET_WM_DESKTOP.getAtom()) { + desktopIdInvalid = true; + if (ENABLE_DESKTOP_CHECK) { + updateTransientFor(); + } + } + } + public PropMwmHints getMWMHints() { if (mwm_hints == null) { mwm_hints = new PropMwmHints(); @@ -2154,10 +2340,9 @@ public boolean isGrabbed() { public void handleXCrossingEvent(XEvent xev) { XCrossingEvent xce = xev.get_xcrossing(); if (grabLog.isLoggable(PlatformLogger.Level.FINE)) { + Point p = scaleDown(xce.get_x_root(), xce.get_y_root()); grabLog.fine("{0}, when grabbed {1}, contains {2}", - xce, isGrabbed(), - containsGlobal(scaleDown(xce.get_x_root()), - scaleDown(xce.get_y_root()))); + xce, isGrabbed(), containsGlobal(p.x, p.y)); } if (isGrabbed()) { // When window is grabbed, all events are dispatched to @@ -2182,10 +2367,9 @@ xce, isGrabbed(), public void handleMotionNotify(XEvent xev) { XMotionEvent xme = xev.get_xmotion(); if (grabLog.isLoggable(PlatformLogger.Level.FINER)) { + Point p = scaleDown(xme.get_x_root(), xme.get_y_root()); grabLog.finer("{0}, when grabbed {1}, contains {2}", - xme, isGrabbed(), - containsGlobal(scaleDown(xme.get_x_root()), - scaleDown(xme.get_y_root()))); + xme, isGrabbed(), containsGlobal(p.x, p.y)); } if (isGrabbed()) { boolean dragging = false; @@ -2210,8 +2394,7 @@ xme, isGrabbed(), // So, I do not want to implement complicated logic for better retargeting. target = pressTarget.isVisible() ? pressTarget : this; xme.set_window(target.getWindow()); - Point localCoord = target.toLocal(scaleDown(xme.get_x_root()), - scaleDown(xme.get_y_root())); + Point localCoord = target.toLocal(scaleDown(xme.get_x_root(), xme.get_y_root())); xme.set_x(scaleUp(localCoord.x)); xme.set_y(scaleUp(localCoord.y)); } @@ -2227,8 +2410,8 @@ xme, isGrabbed(), // note that we need to pass dragging events to the grabber (6390326) // see comment above for more information. - if (!containsGlobal(scaleDown(xme.get_x_root()), - scaleDown(xme.get_y_root())) + Point p = scaleDown(xme.get_x_root(), xme.get_y_root()); + if (!containsGlobal(p.x, p.y) && !dragging) { // Outside of Java return; @@ -2251,10 +2434,10 @@ public void handleButtonPressRelease(XEvent xev) { return; } if (grabLog.isLoggable(PlatformLogger.Level.FINE)) { + Point p = scaleDown(xbe.get_x_root(), xbe.get_y_root()); grabLog.fine("{0}, when grabbed {1}, contains {2} ({3}, {4}, {5}x{6})", xbe, isGrabbed(), - containsGlobal(scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root())), + containsGlobal(p.x, p.y), getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight()); } @@ -2282,8 +2465,7 @@ xbe, isGrabbed(), // see 6390326 for more information. target = pressTarget.isVisible() ? pressTarget : this; xbe.set_window(target.getWindow()); - Point localCoord = target.toLocal(scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root())); + Point localCoord = target.toLocal(scaleDown(xbe.get_x_root(), xbe.get_y_root())); xbe.set_x(scaleUp(localCoord.x)); xbe.set_y(scaleUp(localCoord.y)); pressTarget = this; @@ -2297,9 +2479,9 @@ xbe, isGrabbed(), // Target is either us or our content window - // check that event is inside. 'Us' in case of // shell will mean that this will also filter out press on title + Point p = scaleDown(xbe.get_x_root(), xbe.get_y_root()); if ((target == this || target == getContentXWindow()) - && !containsGlobal(scaleDown(xbe.get_x_root()), - scaleDown(xbe.get_y_root()))) + && !containsGlobal(p.x, p.y)) { // Outside this toplevel hierarchy // According to the specification of UngrabEvent, post it @@ -2413,4 +2595,108 @@ public void setOpaque(boolean isOpaque) { public void updateWindow() { // no-op } + + boolean isTopMostWindow() { + long curChild = 0; + long curParent = window; + while (curParent != 0) { + XQueryTree qt = new XQueryTree(curParent); + try { + if (qt.execute() == 0) { + return false; + } + if (curParent == qt.get_root()) { + // children are reported in bottom-to-top order, + // so we are checking the last one + int nChildren = qt.get_nchildren(); + return nChildren > 0 && Native.getWindow(qt.get_children(), nChildren - 1) == curChild; + } else { + // our window could have been re-parented by window manager, + // so we should get to the direct child of the root window + curChild = curParent; + curParent = qt.get_parent(); + } + } finally { + qt.dispose(); + } + } + return false; + } + + @Override + void syncBounds() { + Rectangle r = target.getBounds(); + width = r.width; + height = r.height; + if (syncSizeOnly) { + xSetSize(width, height); + } else { + x = r.x; + y = r.y; + xSetBounds(x, y, width, height); + } + doValidateSurface(); + layout(); + } + + @Override + public boolean updateGraphicsData(GraphicsConfiguration gc) { + if (super.updateGraphicsData(gc)) return true; + repositionSecurityWarning(); + return false; + } + + static boolean haveCommonAncestor(Component c1, Component c2) { + return getRootOwner(c1) == getRootOwner(c2); + } + + static Component getRootOwner(Component c) { + while (c.getParent() != null) { + c = c.getParent(); + } + return c; + } + + void startMovingTogetherWithMouse(int mouseButton) { + setGrab(false); + XWM.getWM().startMovingWindowTogetherWithMouse(getParentTopLevel().getWindow(), getLastButtonPressAbsLocation(), mouseButton); + } + + private static void startMovingWindowTogetherWithMouse(Window window, int mouseButton) { + final AWTAccessor.ComponentAccessor acc = AWTAccessor.getComponentAccessor(); + ComponentPeer peer = acc.getPeer(window); + if (peer instanceof XWindowPeer xWindowPeer) { + xWindowPeer.startMovingTogetherWithMouse(mouseButton); + } else { + throw new IllegalArgumentException("AWT window must have XWindowPeer as its peer"); + } + } + + private static class WindowMoveService { + WindowMoveService() { + final var toolkit = Toolkit.getDefaultToolkit(); + final var ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + if (toolkit == null || ge == null + || !toolkit.getClass().getName().equals("sun.awt.X11.XToolkit") + || !ge.getClass().getName().equals("sun.awt.X11GraphicsEnvironment")) { + throw new JBRApi.ServiceNotAvailableException("Supported only with XToolkit and X11GraphicsEnvironment"); + } + + if (!((XToolkit)Toolkit.getDefaultToolkit()).isWindowMoveSupported()) { + throw new JBRApi.ServiceNotAvailableException("Window manager does not support _NET_WM_MOVE_RESIZE"); + } + } + + void startMovingTogetherWithMouse(Window window, int mouseButton) { + Objects.requireNonNull(window); + + final AWTAccessor.ComponentAccessor acc = AWTAccessor.getComponentAccessor(); + ComponentPeer peer = acc.getPeer(window); + if (peer instanceof XWindowPeer xWindowPeer) { + xWindowPeer.startMovingTogetherWithMouse(mouseButton); + } else { + throw new IllegalArgumentException("AWT window must have XWindowPeer as its peer"); + } + } + } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XWrapperBase.java b/src/java.desktop/unix/classes/sun/awt/X11/XWrapperBase.java index ab1f432b702e..65da2d983074 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XWrapperBase.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XWrapperBase.java @@ -63,8 +63,8 @@ String getWindow(long window) { } public abstract long getPData(); public XEvent clone() { - long copy = XlibWrapper.unsafe.allocateMemory(getDataSize()); - XlibWrapper.unsafe.copyMemory(getPData(), copy, getDataSize()); - return new XEvent(copy); + XEvent copy = new XEvent(); + XlibWrapper.unsafe.copyMemory(getPData(), copy.getPData(), getDataSize()); + return copy; } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XlibUtil.java b/src/java.desktop/unix/classes/sun/awt/X11/XlibUtil.java index 7a005bcc8c5c..de3de8dc44d3 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XlibUtil.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XlibUtil.java @@ -101,56 +101,18 @@ static boolean isRoot(long rootCandidate, long screenNumber) return root == rootCandidate; } - /** - * Returns the bounds of the given window, in absolute coordinates - */ - static Rectangle getWindowGeometry(long window, int scale) - { - XToolkit.awtLock(); - try - { - int res = XlibWrapper.XGetGeometry(XToolkit.getDisplay(), - window, - XlibWrapper.larg1, // root_return - XlibWrapper.larg2, // x_return - XlibWrapper.larg3, // y_return - XlibWrapper.larg4, // width_return - XlibWrapper.larg5, // height_return - XlibWrapper.larg6, // border_width_return - XlibWrapper.larg7); // depth_return - if (res == 0) - { - return null; - } - - int x = Native.getInt(XlibWrapper.larg2); - int y = Native.getInt(XlibWrapper.larg3); - long width = Native.getUInt(XlibWrapper.larg4); - long height = Native.getUInt(XlibWrapper.larg5); - - return new Rectangle(scaleDown(x, scale), scaleDown(y, scale), - scaleDown((int) width, scale), - scaleDown((int) height, scale)); - } - finally - { - XToolkit.awtUnlock(); - } - } - /** * Translates the given point from one window to another. Returns - * null if the translation is failed + * null if the translation is failed. Coordinates must be in device space. */ - static Point translateCoordinates(long src, long dst, Point p, int scale) + static Point translateCoordinates(long src, long dst, int x, int y) { Point translated = null; XToolkit.awtLock(); try { - XTranslateCoordinates xtc = - new XTranslateCoordinates(src, dst, p.x * scale, p.y * scale); + XTranslateCoordinates xtc = new XTranslateCoordinates(src, dst, x, y); try { int status = xtc.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance()); @@ -158,8 +120,7 @@ static Point translateCoordinates(long src, long dst, Point p, int scale) ((XErrorHandlerUtil.saved_error == null) || (XErrorHandlerUtil.saved_error.get_error_code() == XConstants.Success))) { - translated = new Point(scaleDown(xtc.get_dest_x(), scale), - scaleDown(xtc.get_dest_y(), scale)); + translated = new Point(xtc.get_dest_x(), xtc.get_dest_y()); } } finally @@ -175,26 +136,6 @@ static Point translateCoordinates(long src, long dst, Point p, int scale) return translated; } - /** - * Translates the given rectangle from one window to another. - * Returns null if the translation is failed - */ - static Rectangle translateCoordinates(long src, long dst, Rectangle r, - int scale) - { - Point translatedLoc = translateCoordinates(src, dst, r.getLocation(), - scale); - - if (translatedLoc == null) - { - return null; - } - else - { - return new Rectangle(translatedLoc, r.getSize()); - } - } - /** * Returns the parent for the given window */ @@ -414,8 +355,4 @@ static int getButtonMask(int button) { return 1 << (7 + button); } } - - static int scaleDown(int x, int scale) { - return Region.clipRound(x / (double)scale); - } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XlibWrapper.java b/src/java.desktop/unix/classes/sun/awt/X11/XlibWrapper.java index 7a23c806374b..17d6970693ea 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XlibWrapper.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XlibWrapper.java @@ -557,6 +557,12 @@ static native void SetBitmapShape(long display, long window, static native void SetZOrder(long display, long window, long above); + static native int XIQueryVersion(long display, long major_version_iptr, long minor_version_iptr); + static native int XISelectEvents(long display, long window, long mask, int deviceid); + + static native boolean XGetEventData(long display, long ptr); + static native void XFreeEventData(long display, long ptr); + /* Global memory area used for X lib parameter passing */ static final long lbuffer = unsafe.allocateMemory(64); // array to hold 8 longs diff --git a/src/java.desktop/unix/classes/sun/awt/X11FontManager.java b/src/java.desktop/unix/classes/sun/awt/X11FontManager.java index 26cf8fd6e052..f404cf81345f 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11FontManager.java +++ b/src/java.desktop/unix/classes/sun/awt/X11FontManager.java @@ -38,6 +38,7 @@ import java.util.NoSuchElementException; import java.util.StringTokenizer; import java.util.Vector; +import java.util.stream.Stream; import javax.swing.plaf.FontUIResource; import sun.font.MFontConfiguration; @@ -49,6 +50,8 @@ import sun.font.FontUtilities; import sun.font.NativeFont; +import static sun.font.SunFontManager.jreFontDirName; + /** * The X11 implementation of {@link FontManager}. */ @@ -277,8 +280,7 @@ protected String[] getNativeNames(String fontFileName, * the loadFonts() method does too. So all should be well. */ - @Override - protected void registerFontDir(String path) { + private void registerFontDir(String path) { /* fonts.dir file format looks like :- * 47 * Arial.ttf -monotype-arial-regular-r-normal--0-0-0-0-p-0-iso8859-1 @@ -418,6 +420,12 @@ protected void registerFontDir(String path) { } } + @Override + protected void registerJREFonts() { + registerFontDir(jreFontDirName); + super.registerJREFonts(); + } + @Override public void loadFonts() { super.loadFonts(); @@ -722,14 +730,13 @@ protected FontUIResource getFontConfigFUIR(String family, int style, int size) { /* The name of the font will be that of the physical font in slot, * but by setting the handle to that of the CompositeFont it * renders as that CompositeFont. - * It also needs to be marked as a created font which is the - * current mechanism to signal that deriveFont etc must copy - * the handle from the original font. + * Font is marked as having fallback components to signal that + * deriveFont etc must copy the handle from the original font. */ FontUIResource fuir = new FontUIResource(font2D.getFamilyName(null), style, size); FontAccess.getFontAccess().setFont2D(fuir, font2D.handle); - FontAccess.getFontAccess().setCreatedFont(fuir); + FontAccess.getFontAccess().setWithFallback(fuir); return fuir; } } diff --git a/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java b/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java index 10d30a2bc7db..28e61d0eaf1a 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java +++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsConfig.java @@ -271,12 +271,12 @@ public int getScale() { return getDevice().getScaleFactor(); } - public int scaleUp(int x) { - return Region.clipRound(x * (double)getScale()); + public int scaleUp(int i) { + return getDevice().scaleUp(i); } - public int scaleDown(int x) { - return Region.clipRound(x / (double)getScale()); + public int scaleDown(int i) { + return getDevice().scaleDown(i); } /** diff --git a/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java b/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java index 573d842e5f29..d3e3945b3086 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java +++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java @@ -31,6 +31,7 @@ import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Insets; +import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; import java.security.AccessController; @@ -39,6 +40,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import sun.awt.util.ThreadGroupUtils; import sun.java2d.SunGraphicsEnvironment; @@ -72,11 +74,28 @@ public final class X11GraphicsDevice extends GraphicsDevice private volatile Insets insets; private boolean shutdownHookRegistered; private int scale; + private final AtomicBoolean isScaleFactorDefault = new AtomicBoolean(false); + private static volatile int xrmXftDpi; + private static volatile int xftDpi; + private static final int GDK_SCALE; + private static final double GDK_DPI_SCALE; + private static final double GDK_SCALE_MULTIPLIER; public X11GraphicsDevice(int screennum) { this.screen = screennum; - this.scale = initScaleFactor(); this.bounds = getBoundsImpl(); + int scaleFactor = initScaleFactor(-1); + synchronized (isScaleFactorDefault) { + isScaleFactorDefault.set(scaleFactor == -1); + this.scale = isScaleFactorDefault.get() ? 1 : scaleFactor; + } + } + + static { + xrmXftDpi = getXrmXftDpi(-1); + GDK_SCALE = (int)getGdkScale("GDK_SCALE", -1); + GDK_DPI_SCALE = getGdkScale("GDK_DPI_SCALE", -1); + GDK_SCALE_MULTIPLIER = GDK_SCALE != -1 ? GDK_SCALE * (GDK_DPI_SCALE != -1 ? GDK_DPI_SCALE : 1) : 1; } /** @@ -115,19 +134,50 @@ public int getType() { return TYPE_RASTER_SCREEN; } - public int scaleUp(int x) { - return Region.clipRound(x * (double)getScaleFactor()); + public int scaleUp(int i) { + return Region.clipRound(i * (double)getScaleFactor()); + } + + public int scaleDown(int i) { + return Region.clipRound(i / (double)getScaleFactor()); + } + + public Point scaleUp(int x, int y) { + double ls = getScaleFactor(), lx = (x - bounds.x) * ls, ly = (y - bounds.y) * ls; + return new Point( + Region.clipRound(bounds.x + lx), + Region.clipRound(bounds.y + ly)); + } + + public Point scaleUpChecked(int x, int y) { + double ls = getScaleFactor(), lx = (x - bounds.x) * ls, ly = (y - bounds.y) * ls; + if (lx >= 0 && ly >= 0 && lx <= bounds.width && ly <= bounds.height) { + return new Point( + Region.clipRound(bounds.x + lx), + Region.clipRound(bounds.y + ly)); + } else return null; + } + + public Point scaleDown(int x, int y) { + double lx = x - bounds.x, ly = y - bounds.y, ls = getScaleFactor(); + return new Point( + Region.clipRound(bounds.x + lx / ls), + Region.clipRound(bounds.y + ly / ls)); } - public int scaleDown(int x) { - return Region.clipRound(x / (double)getScaleFactor()); + public Point scaleDownChecked(int x, int y) { + double lx = x - bounds.x, ly = y - bounds.y; + if (lx >= 0 && ly >= 0 && lx <= bounds.width && ly <= bounds.height) { + double ls = getScaleFactor(); + return new Point( + Region.clipRound(bounds.x + lx / ls), + Region.clipRound(bounds.y + ly / ls)); + } else return null; } private Rectangle getBoundsImpl() { Rectangle rect = pGetBounds(getScreen()); if (getScaleFactor() != 1) { - rect.x = scaleDown(rect.x); - rect.y = scaleDown(rect.y); rect.width = scaleDown(rect.width); rect.height = scaleDown(rect.height); } @@ -323,7 +373,9 @@ private static native void enumDisplayModes(int screen, private static native void configDisplayMode(int screen, int width, int height, int displayMode); - private static native double getNativeScaleFactor(int screen); + private static native double getNativeScaleFactor(int screen, double defValue); + private static native double getGdkScale(String name, double defValue); + private static native int getXrmXftDpi(int defValue); private native Rectangle pGetBounds(int screenNum); /** @@ -439,10 +491,7 @@ public synchronized DisplayMode getDisplayMode() { @Override public synchronized DisplayMode[] getDisplayModes() { - if (!isFullScreenSupported() - || ((X11GraphicsEnvironment) GraphicsEnvironment - .getLocalGraphicsEnvironment()).runningXinerama()) { - // only the current mode will be returned + if (!isFullScreenSupported()) { return super.getDisplayModes(); } ArrayList modes = new ArrayList(); @@ -537,7 +586,8 @@ private synchronized DisplayMode getMatchingDisplayMode(DisplayMode dm) { */ @Override public synchronized void displayChanged() { - scale = initScaleFactor(); + xrmXftDpi = getXrmXftDpi(-1); + scale = initScaleFactor(1); bounds = getBoundsImpl(); insets = null; // On X11 the visuals do not change, and therefore we don't need @@ -569,24 +619,66 @@ public int getScaleFactor() { return scale; } - public int getNativeScale() { - return (int)Math.round(getNativeScaleFactor(screen)); + private double getNativeScale() { + isXrandrExtensionSupported(); + return getNativeScaleFactor(screen, -1); } - private int initScaleFactor() { - - if (SunGraphicsEnvironment.isUIScaleEnabled()) { + public static void setXftDpi(int dpi) { + xftDpi = dpi; + boolean uiScaleEnabled = SunGraphicsEnvironment.isUIScaleEnabled(dpi); + double xftDpiScale = uiScaleEnabled ? xftDpi / 96.0 : 1.0; + for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) { + X11GraphicsDevice x11gd = (X11GraphicsDevice)gd; + synchronized (x11gd.isScaleFactorDefault) { + if (x11gd.isScaleFactorDefault.get() || !uiScaleEnabled) { + x11gd.scale = (int)Math.round(xftDpiScale * (uiScaleEnabled ? GDK_SCALE_MULTIPLIER : 1)); + x11gd.isScaleFactorDefault.set(false); + } + } + } + } + private int initScaleFactor(int defValue) { + boolean uiScaleEnabled = SunGraphicsEnvironment.isUIScaleEnabled(); + if (uiScaleEnabled) { double debugScale = SunGraphicsEnvironment.getDebugScale(); if (debugScale >= 1) { return (int) debugScale; } - int nativeScale = getNativeScale(); - return nativeScale >= 1 ? nativeScale : 1; + double gdkScaleMult = uiScaleEnabled ? GDK_SCALE_MULTIPLIER : 1; + double nativeScale = getNativeScale(); + if (nativeScale > 0) { + return (int)Math.round(nativeScale * gdkScaleMult); + } + if (xrmXftDpi > 0) { + return (int)Math.round((xrmXftDpi / 96.0) * gdkScaleMult); + } + if (xftDpi > 0) { + return (int)Math.round((xftDpi / 96.0) * gdkScaleMult); + } } + return defValue; + } - return 1; + /** + * Used externally for diagnostic purpose. + */ + public String[][] getDpiInfo() { + int dpi = xrmXftDpi != -1 ? xrmXftDpi : xftDpi; + String xftDpiStr = dpi != -1 ? String.valueOf(dpi) : "undefined"; + double gsettingsScale = getNativeScaleFactor(screen, -1); + String gsettingsScaleStr = gsettingsScale != -1 ? String.valueOf(gsettingsScale) : "undefined"; + String gdkScaleStr = GDK_SCALE != -1 ? String.valueOf(GDK_SCALE) : "undefined"; + String gdkDpiScaleStr = GDK_DPI_SCALE != -1 ? String.valueOf(GDK_DPI_SCALE) : "undefined"; + + return new String[][] { + {"Xft.DPI", xftDpiStr, "Font DPI (X resources value)"}, + {"GSettings scale factor", gsettingsScaleStr, "http://wiki.archlinux.org/index.php/HiDPI"}, + {"GDK_SCALE", gdkScaleStr, "http://developer.gnome.org/gtk3/stable/gtk-x11.html"}, + {"GDK_DPI_SCALE", gdkDpiScaleStr, "http://developer.gnome.org/gtk3/stable/gtk-x11.html"} + }; } /** diff --git a/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java b/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java index 93f5eaf6656c..d4a920041ad6 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java +++ b/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java @@ -27,6 +27,7 @@ import java.awt.AWTError; import java.awt.GraphicsDevice; +import java.awt.Point; import java.lang.ref.WeakReference; import java.net.InetAddress; import java.net.NetworkInterface; @@ -74,6 +75,7 @@ public Object run() { if (!isHeadless()) { // first check the OGL system property boolean glxRequested = false; + boolean glxRecommended = false; String prop = System.getProperty("sun.java2d.opengl"); if (prop != null) { if (prop.equals("true") || prop.equals("t")) { @@ -82,6 +84,9 @@ public Object run() { glxRequested = true; glxVerbose = true; } + } else if (openGLRecommended()) { + glxRequested = true; + glxRecommended = true; } // Now check for XRender system property @@ -106,7 +111,7 @@ public Object run() { // only attempt to initialize GLX if it was requested if (glxRequested) { - glxAvailable = initGLX(); + glxAvailable = initGLX(glxRecommended); if (glxVerbose && !glxAvailable) { System.out.println( "Could not enable OpenGL " + @@ -137,11 +142,21 @@ public Object run() { } + private static boolean isVMWare() { + final String virtName = System.getProperty("jbr.virtualization.information"); + return virtName != null && virtName.equals("VMWare virtualization"); + } + + private static boolean openGLRecommended() { + final String sessionType = System.getenv("XDG_SESSION_TYPE"); + return (sessionType != null && sessionType.equals("wayland") && isVMWare()); + } + private static boolean glxAvailable; private static boolean glxVerbose; - private static native boolean initGLX(); + private static native boolean initGLX(boolean glxRecommended); public static boolean isGLXAvailable() { return glxAvailable; @@ -238,6 +253,8 @@ private synchronized void initDevices() { int index = getDefaultScreenNum(); mainScreen = 0 < index && index < numScreens ? index : 0; + updateWaylandMonitorScaling(); + for (int id = 0; id < numScreens; ++id) { devices.put(id, old.containsKey(id) ? old.remove(id) : new X11GraphicsDevice(id)); @@ -260,6 +277,32 @@ private synchronized void initDevices() { } } + public Point scaleUp(X11GraphicsDevice defaultDevice, int x, int y) { + Point p = defaultDevice == null ? null : defaultDevice.scaleUpChecked(x, y); + if (p != null) { + return p; + } + for (X11GraphicsDevice d : devices.values()) { + if (d != defaultDevice && (p = d.scaleUpChecked(x, y)) != null) { + return p; + } + } + return defaultDevice == null ? null : defaultDevice.scaleUp(x, y); + } + + public Point scaleDown(X11GraphicsDevice defaultDevice, int x, int y) { + Point p = defaultDevice == null ? null : defaultDevice.scaleDownChecked(x, y); + if (p != null) { + return p; + } + for (X11GraphicsDevice d : devices.values()) { + if (d != defaultDevice && (p = d.scaleDownChecked(x, y)) != null) { + return p; + } + } + return defaultDevice == null ? null : defaultDevice.scaleDown(x, y); + } + @Override public synchronized GraphicsDevice getDefaultScreenDevice() { return devices.get(mainScreen); @@ -377,6 +420,8 @@ public boolean runningXinerama() { return pRunningXinerama(); } + private static native void updateWaylandMonitorScaling(); + /** * From the DisplayChangedListener interface; devices do not need * to react to this event. diff --git a/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java b/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java index 3b556533bc26..f665b0b7a134 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java +++ b/src/java.desktop/unix/classes/sun/awt/X11InputMethod.java @@ -25,12 +25,17 @@ package sun.awt; +import java.util.HashMap; +import java.util.List; +import java.util.ArrayList; + import java.awt.AWTException; import java.awt.event.InputMethodEvent; import java.awt.font.TextAttribute; import java.awt.font.TextHitInfo; import java.awt.peer.ComponentPeer; import java.text.AttributedString; +import java.util.Map; import sun.util.logging.PlatformLogger; @@ -40,6 +45,7 @@ * @author JavaSoft International */ public abstract class X11InputMethod extends X11InputMethodBase { + protected static final List activeInputMethods = new ArrayList(); /** * Constructs an X11InputMethod instance. It initializes the XIM @@ -85,6 +91,9 @@ public synchronized void activate() { if (!createXIC()) { return; } + awtLock(); + activeInputMethods.add(this); + awtUnlock(); disposed = false; } @@ -329,6 +338,7 @@ void dispatchComposedText(String chgText, protected synchronized void disposeImpl() { disposeXIC(); awtLock(); + activeInputMethods.remove(this); composedText = null; committedText = null; rawFeedbacks = null; @@ -353,4 +363,24 @@ public void setCompositionEnabled(boolean enable) { savedCompositionState = enable; } } + + protected static void recreateAllXIC() { + // NOTE: called within AWT_LOCK + Map im2ctxid = new HashMap<>(activeInputMethods.size()); + for (X11InputMethod im : activeInputMethods) { + im2ctxid.put(im, im.releaseXIC()); + } + if (!recreateX11InputMethod()) { + log.warning("can't recreate X11 InputMethod"); + return; + } + for (X11InputMethod im : activeInputMethods) { + if (!im.recreateXIC(im2ctxid.get(im))) + log.warning("can't recreate XIC for " + im.toString()); + } + } + + protected abstract boolean recreateXIC(int ctxid); + protected abstract int releaseXIC(); + private static native boolean recreateX11InputMethod(); } diff --git a/src/java.desktop/unix/classes/sun/awt/X11InputMethodBase.java b/src/java.desktop/unix/classes/sun/awt/X11InputMethodBase.java index baef82a1add7..d4fb562de3e2 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11InputMethodBase.java +++ b/src/java.desktop/unix/classes/sun/awt/X11InputMethodBase.java @@ -30,6 +30,7 @@ import java.awt.Component; import java.awt.Container; import java.awt.EventQueue; +import java.awt.Toolkit; import java.awt.Window; import java.awt.event.InputMethodEvent; import java.awt.font.TextAttribute; @@ -37,10 +38,6 @@ import java.awt.im.InputMethodHighlight; import java.awt.im.spi.InputMethodContext; import java.awt.peer.ComponentPeer; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; import java.lang.Character.Subset; import java.lang.ref.WeakReference; import java.text.AttributedCharacterIterator; @@ -49,9 +46,8 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import java.util.StringTokenizer; -import java.util.regex.Pattern; +import sun.awt.X11.XToolkit; import sun.awt.im.InputMethodAdapter; import sun.util.logging.PlatformLogger; @@ -256,7 +252,7 @@ protected final void resetXICifneeded(){ */ if (needResetXIC && haveActiveClient() && getClientComponent() != needResetXICClient.get()){ - resetXIC(); + invokeResetXIC(); // needs to reset the last xic focused component. lastXICFocussedComponent = null; @@ -311,7 +307,7 @@ public void disableInputMethod() { lastXICFocussedComponent = null; isLastXICActive = false; - resetXIC(); + invokeResetXIC(); needResetXICClient.clear(); needResetXIC = false; } @@ -370,7 +366,7 @@ protected void stopListening() { // method could get the input focus. disableInputMethod(); if (needResetXIC) { - resetXIC(); + invokeResetXIC(); needResetXICClient.clear(); needResetXIC = false; } @@ -472,7 +468,7 @@ void dispatchCommittedText(String str, long when) { } } - private void dispatchCommittedText(String str) { + protected final void dispatchCommittedText(String str) { dispatchCommittedText(str, EventQueue.getMostRecentEventTime()); } @@ -564,7 +560,9 @@ public Object getControlObject() { * @see java.awt.im.spi.InputMethod#removeNotify */ public synchronized void removeNotify() { - dispose(); + stopListening(); + awtFocussedComponent = null; + clientComponentWindow = null; } /** @@ -612,7 +610,7 @@ public void endComposition() { return; } - String text = resetXIC(); + String text = invokeResetXIC(); /* needResetXIC is only set to true for active client. So passive client should not reset the flag to false. */ if (active) { @@ -797,6 +795,27 @@ public String toString() { } } + protected final String invokeResetXIC() { + if (Toolkit.getDefaultToolkit() instanceof XToolkit xToolkit) { + awtLock(); + try { + final String resetResult = resetXIC(); + if (resetResult == null) { + // If XmbResetIC/XwcResetIC returns null, it means one of the following: + // * There was no preedit text + // * In case of iBus/fcitx4, the preedit text is sent later to the toolkit via + // a synthetic KeyPress event + XmbLookupString/XwcLookupString applied to it + xToolkit.xResetICMayReturnThePreeditTextViaNextKeyPressEvent(); + } + return resetResult; + } finally { + awtUnlock(); + } + } else { + return resetXIC(); + } + } + /* * Native methods */ @@ -811,6 +830,7 @@ public String toString() { protected native void disposeXIC(); + /** Don't use it directly, use {@link #invokeResetXIC} instead */ private native String resetXIC(); protected native boolean setCompositionEnabledNative(boolean enable); diff --git a/src/java.desktop/unix/classes/sun/font/DelegateStrike.java b/src/java.desktop/unix/classes/sun/font/DelegateStrike.java index 4f2de5ebc2f1..e046ae9c1f56 100644 --- a/src/java.desktop/unix/classes/sun/font/DelegateStrike.java +++ b/src/java.desktop/unix/classes/sun/font/DelegateStrike.java @@ -107,8 +107,4 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { return delegateStrike.getGlyphOutline(glyphCode, x, y); } - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { - return delegateStrike.getGlyphVectorOutline(glyphs, x, y); - } - } diff --git a/src/java.desktop/unix/classes/sun/font/FontConfigManager.java b/src/java.desktop/unix/classes/sun/font/FontConfigManager.java index 6e3b83f4b66a..ba923b28f370 100644 --- a/src/java.desktop/unix/classes/sun/font/FontConfigManager.java +++ b/src/java.desktop/unix/classes/sun/font/FontConfigManager.java @@ -128,7 +128,7 @@ public static Object getFontConfigAAHint(String fcFamily) { if (FontUtilities.isWindows) { return null; } else { - int hint = getFontConfigAASettings(getFCLocaleStr(), fcFamily); + int hint = getFontConfigAASettings(fcFamily); if (hint < 0) { return null; } else { @@ -188,7 +188,7 @@ public synchronized void initFontConfigFonts(boolean includeFallbacks) { fontArr[i].jdkName = FontUtilities.mapFcName(fontArr[i].fcFamily); fontArr[i].style = i % 4; // depends on array order. } - getFontConfig(getFCLocaleStr(), fcInfo, fontArr, includeFallbacks); + setupFontConfigFonts(getFCLocaleStr(), fcInfo, fontArr, includeFallbacks); FontConfigFont anyFont = null; /* If don't find anything (eg no libfontconfig), then just return */ for (int i = 0; i< fontArr.length; i++) { @@ -432,10 +432,12 @@ public FcCompFont[] getFontConfigFonts() { return fontConfigFonts; } + public static native String getFontProperty(String name, String pattern); + /* Return an array of FcCompFont structs describing the primary * font located for each of fontconfig/GTK/Pango's logical font names. */ - private static native void getFontConfig(String locale, + private static native void setupFontConfigFonts(String locale, FontConfigInfo fcInfo, FcCompFont[] fonts, boolean includeFallbacks); @@ -454,6 +456,9 @@ FontConfigInfo getFontConfigInfo() { return fcInfo; } - private static native int - getFontConfigAASettings(String locale, String fcFamily); + private static native int getFontConfigAASettings(String fcFamily, String locale); + + private static int getFontConfigAASettings(String fcFamily) { + return getFontConfigAASettings(fcFamily, getFCLocaleStr()); + } } diff --git a/src/java.desktop/unix/classes/sun/font/NativeFont.java b/src/java.desktop/unix/classes/sun/font/NativeFont.java index 337d38c095ac..6d361a7360e2 100644 --- a/src/java.desktop/unix/classes/sun/font/NativeFont.java +++ b/src/java.desktop/unix/classes/sun/font/NativeFont.java @@ -286,12 +286,6 @@ void getGlyphMetrics(long pScalerContext, int glyphCode, throw new RuntimeException("this should be called on the strike"); } - public GeneralPath getGlyphVectorOutline(long pScalerContext, - int[] glyphs, int numGlyphs, - float x, float y) { - return null; - } - private native int countGlyphs(byte[] platformNameBytes, int ptSize); public int getNumGlyphs() { @@ -310,6 +304,10 @@ PhysicalFont getDelegateFont() { return delegateFont; } + public SlotInfo getSlotInfoForGlyph(int glyphCode) { + return new SlotInfo(getDelegateFont()); + } + /* Specify that the dpi is 72x72, as this corresponds to JDK's * default user space. These are the 10th and 11th fields in the XLFD. * ptSize in XLFD is in 10th's of a point so multiply by 10, diff --git a/src/java.desktop/unix/classes/sun/font/NativeStrike.java b/src/java.desktop/unix/classes/sun/font/NativeStrike.java index bc735367b993..87fee0e9e644 100644 --- a/src/java.desktop/unix/classes/sun/font/NativeStrike.java +++ b/src/java.desktop/unix/classes/sun/font/NativeStrike.java @@ -288,8 +288,8 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { return new GeneralPath(); } - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { - return new GeneralPath(); + GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y) { + return new GlyphRenderData(); } } diff --git a/src/java.desktop/unix/classes/sun/font/X11TextRenderer.java b/src/java.desktop/unix/classes/sun/font/X11TextRenderer.java index bac23128cd8d..6b5640d27921 100644 --- a/src/java.desktop/unix/classes/sun/font/X11TextRenderer.java +++ b/src/java.desktop/unix/classes/sun/font/X11TextRenderer.java @@ -67,7 +67,7 @@ public void drawGlyphVector(SunGraphics2D sg2d, GlyphVector g, } } - native void doDrawGlyphList(long dstData, long xgc, + native boolean doDrawGlyphList(long dstData, long xgc, Region clip, GlyphList gl); protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { @@ -78,7 +78,27 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { long xgc = x11sd.getRenderGC(clip, SunGraphics2D.COMP_ISCOPY, null, sg2d.pixel); gl.startGlyphIteration(); - doDrawGlyphList(x11sd.getNativeOps(), xgc, clip, gl); + boolean allGlyphsRendered = doDrawGlyphList(x11sd.getNativeOps(), xgc, clip, gl); + // There are some color glyphs, which we couldn't draw + if (!allGlyphsRendered) { + gl.startGlyphIteration(); + for (int i = 0; i < gl.getNumGlyphs(); i++) { + if (gl.isColorGlyph(i)) { + int end; + for (end = i + 1; end < gl.getNumGlyphs(); end++) { + if (!gl.isColorGlyph(end)) { + break; + } + } + sg2d.loops.drawGlyphListColorLoop. + DrawGlyphListColor(sg2d, sg2d.surfaceData, + gl, i, end); + i = end - 1; + } else { + gl.setGlyphIndex(i); + } + } + } } finally { SunToolkit.awtUnlock(); } @@ -89,11 +109,11 @@ public X11TextRenderer traceWrap() { } public static class Tracer extends X11TextRenderer { - void doDrawGlyphList(long dstData, long xgc, + boolean doDrawGlyphList(long dstData, long xgc, Region clip, GlyphList gl) { GraphicsPrimitive.tracePrimitive("X11DrawGlyphs"); - super.doDrawGlyphList(dstData, xgc, clip, gl); + return super.doDrawGlyphList(dstData, xgc, clip, gl); } } } diff --git a/src/java.desktop/unix/classes/sun/font/XRGlyphCache.java b/src/java.desktop/unix/classes/sun/font/XRGlyphCache.java index 04b5c1a9504a..1e30c01eb953 100644 --- a/src/java.desktop/unix/classes/sun/font/XRGlyphCache.java +++ b/src/java.desktop/unix/classes/sun/font/XRGlyphCache.java @@ -38,21 +38,27 @@ */ public class XRGlyphCache implements GlyphDisposedListener { + /** + * BGRA glyphs are rendered as images + * and therefore don't belong to any glyph set + */ + public static final int BGRA_GLYPH_SET = -1; + XRBackend con; XRCompositeManager maskBuffer; HashMap cacheMap = new HashMap(256); - int nextID = 1; MutableInteger tmp = new MutableInteger(0); int grayGlyphSet; int lcdGlyphSet; + final EnumMap glyphSetsByType; int time = 0; int cachedPixels = 0; static final int MAX_CACHED_PIXELS = 100000; - ArrayList freeGlyphIDs = new ArrayList(255); + final GlyphIDAllocator glyphIDAllocator = new GlyphIDAllocator(); static final boolean batchGlyphUpload = true; // Boolean.parseBoolean(System.getProperty("sun.java2d.xrender.batchGlyphUpload")); @@ -63,6 +69,11 @@ public XRGlyphCache(XRCompositeManager maskBuf) { grayGlyphSet = con.XRenderCreateGlyphSet(XRUtils.PictStandardA8); lcdGlyphSet = con.XRenderCreateGlyphSet(XRUtils.PictStandardARGB32); + glyphSetsByType = new EnumMap<>(XRGlyphCacheEntry.Type.class); + glyphSetsByType.put(XRGlyphCacheEntry.Type.GRAYSCALE, grayGlyphSet); + glyphSetsByType.put(XRGlyphCacheEntry.Type.LCD, lcdGlyphSet); + glyphSetsByType.put(XRGlyphCacheEntry.Type.BGRA, BGRA_GLYPH_SET); + StrikeCache.addGlyphDisposedListener(this); } @@ -85,14 +96,6 @@ public void glyphDisposed(ArrayList glyphPtrList) { } } - protected int getFreeGlyphID() { - if (freeGlyphIDs.size() > 0) { - int newID = freeGlyphIDs.remove(freeGlyphIDs.size() - 1); - return newID; - } - return nextID++; - } - protected XRGlyphCacheEntry getEntryForPointer(long imgPtr) { int id = XRGlyphCacheEntry.getGlyphID(imgPtr); @@ -104,7 +107,7 @@ protected XRGlyphCacheEntry getEntryForPointer(long imgPtr) { return cacheMap.get(tmp); } - public XRGlyphCacheEntry[] cacheGlyphs(GlyphList glyphList) { + public XRGlyphCacheEntry[] cacheGlyphs(GlyphList glyphList, int parentXid) { time++; XRGlyphCacheEntry[] entries = new XRGlyphCacheEntry[glyphList.getNumGlyphs()]; @@ -114,17 +117,20 @@ public XRGlyphCacheEntry[] cacheGlyphs(GlyphList glyphList) { for (int i = 0; i < glyphList.getNumGlyphs(); i++) { XRGlyphCacheEntry glyph; - if (imgPtrs[i] == 0L) { + if (imgPtrs[i] == 0L || + imgPtrs[i] == StrikeCache.invisibleGlyphPtr) { continue; } // Find uncached glyphs and queue them for upload if ((glyph = getEntryForPointer(imgPtrs[i])) == null) { glyph = new XRGlyphCacheEntry(imgPtrs[i], glyphList); - glyph.setGlyphID(getFreeGlyphID()); + glyph.setGlyphID(glyphIDAllocator.allocateID( + glyph.getSubpixelResolutionX() * + glyph.getSubpixelResolutionY())); cacheMap.put(new MutableInteger(glyph.getGlyphID()), glyph); if (uncachedGlyphs == null) { - uncachedGlyphs = new ArrayList(); + uncachedGlyphs = new ArrayList<>(); } uncachedGlyphs.add(glyph); } @@ -134,13 +140,15 @@ public XRGlyphCacheEntry[] cacheGlyphs(GlyphList glyphList) { // Add glyphs to cache if (uncachedGlyphs != null) { - uploadGlyphs(entries, uncachedGlyphs, glyphList, null); + uploadGlyphs(entries, uncachedGlyphs, glyphList, parentXid); } return entries; } - protected void uploadGlyphs(XRGlyphCacheEntry[] glyphs, ArrayList uncachedGlyphs, GlyphList gl, int[] glIndices) { + protected void uploadGlyphs(XRGlyphCacheEntry[] glyphs, + ArrayList uncachedGlyphs, + GlyphList gl, int parentXid) { for (XRGlyphCacheEntry glyph : uncachedGlyphs) { cachedPixels += glyph.getPixelCnt(); } @@ -149,67 +157,59 @@ protected void uploadGlyphs(XRGlyphCacheEntry[] glyphs, ArrayList[] seperatedGlyphList = seperateGlyphTypes(uncachedGlyphs, containsLCDGlyphs); - List grayGlyphList = seperatedGlyphList[0]; - List lcdGlyphList = seperatedGlyphList[1]; + EnumMap> + glyphListsByType = separateGlyphTypes(uncachedGlyphs); + + uploadGlyphs(grayGlyphSet, gl, + glyphListsByType.get(XRGlyphCacheEntry.Type.GRAYSCALE)); + uploadGlyphs(lcdGlyphSet, gl, + glyphListsByType.get(XRGlyphCacheEntry.Type.LCD)); + List bgraGlyphs = glyphListsByType.getOrDefault( + XRGlyphCacheEntry.Type.BGRA, List.of()); + if (!bgraGlyphs.isEmpty()) { + con.addBGRAGlyphImages(parentXid, bgraGlyphs); + } + } + private void uploadGlyphs(int glyphSet, GlyphList glyphList, + List cacheEntries) { + if (cacheEntries == null || cacheEntries.isEmpty()) { + return; + } /* * Some XServers crash when uploading multiple glyphs at once. TODO: * Implement build-switch in local case for distributors who know their * XServer is fixed */ if (batchGlyphUpload) { - if (grayGlyphList != null && grayGlyphList.size() > 0) { - con.XRenderAddGlyphs(grayGlyphSet, gl, grayGlyphList, generateGlyphImageStream(grayGlyphList)); - } - if (lcdGlyphList != null && lcdGlyphList.size() > 0) { - con.XRenderAddGlyphs(lcdGlyphSet, gl, lcdGlyphList, generateGlyphImageStream(lcdGlyphList)); - } + con.XRenderAddGlyphs(glyphSet, glyphList, cacheEntries, + generateGlyphImageStream(cacheEntries)); } else { - ArrayList tmpList = new ArrayList(1); + ArrayList tmpList = new ArrayList<>(1); tmpList.add(null); - - for (XRGlyphCacheEntry entry : uncachedGlyphs) { + for (XRGlyphCacheEntry entry : cacheEntries) { tmpList.set(0, entry); - - if (entry.getGlyphSet() == grayGlyphSet) { - con.XRenderAddGlyphs(grayGlyphSet, gl, tmpList, generateGlyphImageStream(tmpList)); - } else { - con.XRenderAddGlyphs(lcdGlyphSet, gl, tmpList, generateGlyphImageStream(tmpList)); - } + con.XRenderAddGlyphs(glyphSet, glyphList, tmpList, + generateGlyphImageStream(tmpList)); } } } /** - * Separates lcd and grayscale glyphs queued for upload, and sets the - * appropriate glyphset for the cache entries. + * Separates bgra, lcd and grayscale glyphs queued for upload, and sets the + * appropriate glyph set for the cache entries. */ - protected List[] seperateGlyphTypes(List glyphList, boolean containsLCDGlyphs) { - ArrayList lcdGlyphs = null; - ArrayList grayGlyphs = null; - + protected EnumMap> + separateGlyphTypes(List glyphList) { + EnumMap> glyphLists = + new EnumMap<>(XRGlyphCacheEntry.Type.class); for (XRGlyphCacheEntry cacheEntry : glyphList) { - if (cacheEntry.isGrayscale(containsLCDGlyphs)) { - if (grayGlyphs == null) { - grayGlyphs = new ArrayList<>(glyphList.size()); - } - cacheEntry.setGlyphSet(grayGlyphSet); - grayGlyphs.add(cacheEntry); - } else { - if (lcdGlyphs == null) { - lcdGlyphs = new ArrayList<>(glyphList.size()); - } - cacheEntry.setGlyphSet(lcdGlyphSet); - lcdGlyphs.add(cacheEntry); - } + XRGlyphCacheEntry.Type cacheEntryType = cacheEntry.getType(); + cacheEntry.setGlyphSet(glyphSetsByType.get(cacheEntryType)); + glyphLists.computeIfAbsent(cacheEntryType, ignore -> + new ArrayList<>(glyphList.size())).add(cacheEntry); } - // Arrays and generics don't play well together - @SuppressWarnings({"unchecked", "rawtypes"}) - List[] tmp = - (List[]) (new List[] { grayGlyphs, lcdGlyphs }); - return tmp; + return glyphLists; } /** @@ -226,20 +226,7 @@ protected byte[] generateGlyphImageStream(List glyphList) { return stream.toByteArray(); } - protected boolean containsLCDGlyphs(List entries) { - boolean containsLCDGlyphs = false; - - for (XRGlyphCacheEntry entry : entries) { - containsLCDGlyphs = !(entry.getSourceRowBytes() == entry.getWidth()); - - if (containsLCDGlyphs) { - return true; - } - } - return false; - } - - protected void clearCache(XRGlyphCacheEntry[] glyps) { + protected void clearCache(XRGlyphCacheEntry[] glyphs) { /* * Glyph uploading is so slow anyway, we can afford some inefficiency * here, as the cache should usually be quite small. TODO: Implement @@ -252,8 +239,10 @@ public int compare(XRGlyphCacheEntry e1, XRGlyphCacheEntry e2) { } }); - for (XRGlyphCacheEntry glyph : glyps) { - glyph.setPinned(); + for (XRGlyphCacheEntry glyph : glyphs) { + if (glyph != null) { + glyph.setPinned(); + } } GrowableIntArray deleteGlyphList = new GrowableIntArray(1, 10); @@ -268,8 +257,10 @@ public int compare(XRGlyphCacheEntry e1, XRGlyphCacheEntry e2) { } } - for (XRGlyphCacheEntry glyph : glyps) { - glyph.setUnpinned(); + for (XRGlyphCacheEntry glyph : glyphs) { + if (glyph != null) { + glyph.setUnpinned(); + } } freeGlyphs(deleteGlyphList); @@ -278,20 +269,36 @@ public int compare(XRGlyphCacheEntry e1, XRGlyphCacheEntry e2) { private void freeGlyphs(GrowableIntArray glyphIdList) { GrowableIntArray removedLCDGlyphs = new GrowableIntArray(1, 10); GrowableIntArray removedGrayscaleGlyphs = new GrowableIntArray(1, 10); + long[] removedBGRAGlyphPtrs = null; + int removedBGRAGlyphPtrsCount = 0; for (int i=0; i < glyphIdList.getSize(); i++) { int glyphId = glyphIdList.getInt(i); - freeGlyphIDs.add(glyphId); tmp.setValue(glyphId); XRGlyphCacheEntry entry = cacheMap.get(tmp); + int subglyphs = entry.getSubpixelResolutionX() * entry.getSubpixelResolutionY(); + glyphIDAllocator.freeID(glyphId, subglyphs); cachedPixels -= entry.getPixelCnt(); cacheMap.remove(tmp); if (entry.getGlyphSet() == grayGlyphSet) { - removedGrayscaleGlyphs.addInt(glyphId); - } else { + for (int j = 0; j < subglyphs; j++) { + removedGrayscaleGlyphs.addInt(glyphId + j); + } + } else if (entry.getGlyphSet() == lcdGlyphSet) { removedLCDGlyphs.addInt(glyphId); + } else if (entry.getGlyphSet() == BGRA_GLYPH_SET) { + if (removedBGRAGlyphPtrs == null) { + removedBGRAGlyphPtrs = new long[10]; + } else if (removedBGRAGlyphPtrsCount >= removedBGRAGlyphPtrs.length) { + long[] n = new long[removedBGRAGlyphPtrs.length * 2]; + System.arraycopy(removedBGRAGlyphPtrs, 0, n, 0, + removedBGRAGlyphPtrs.length); + removedBGRAGlyphPtrs = n; + } + removedBGRAGlyphPtrs[removedBGRAGlyphPtrsCount++] = + entry.getBgraGlyphInfoPtr(); } entry.setGlyphID(0); @@ -304,5 +311,53 @@ private void freeGlyphs(GrowableIntArray glyphIdList) { if (removedLCDGlyphs.getSize() > 0) { con.XRenderFreeGlyphs(lcdGlyphSet, removedLCDGlyphs.getSizedArray()); } + + if (removedBGRAGlyphPtrsCount > 0) { + con.freeBGRAGlyphImages(removedBGRAGlyphPtrs, + removedBGRAGlyphPtrsCount); + } + } + + /** + * Each XR glyph image needs its own ID, which are allocated using + * this class. When using supplementary subpixel glyphs + * ({@code -Djava2d.font.subpixelResolution=4x2}), its XRGlyphCacheEntry + * may correspond to few images and therefore may need a range of IDs + * instead of a single one. + * @implNote This allocator uses a simple strategy for reusing IDs with + * a single pool per capacity (e.g. one pool containing only individual + * IDs and second pool containing ranges each with 8 sequential IDs). + * When pool is empty, new range of IDs is allocated by incrementing + * {@code nextID} counter. + */ + private static class GlyphIDAllocator { + + @SuppressWarnings({"unchecked", "rawtypes"}) + private List[] freeIDsByCapacity = new List[]{ + new ArrayList<>(255) + }; + private int nextID = 1; + + private int allocateID(int count) { + if (count <= freeIDsByCapacity.length) { + List pool = freeIDsByCapacity[count - 1]; + if (pool != null && !pool.isEmpty()) { + return pool.remove(pool.size() - 1); + } + } + int id = nextID; + nextID += count; + return id; + } + + private void freeID(int id, int count) { + if (count > freeIDsByCapacity.length) { + freeIDsByCapacity = Arrays.copyOf(freeIDsByCapacity, count); + } + if (freeIDsByCapacity[count - 1] == null) { + freeIDsByCapacity[count - 1] = new ArrayList<>(255); + } + freeIDsByCapacity[count - 1].add(id); + } } } diff --git a/src/java.desktop/unix/classes/sun/font/XRGlyphCacheEntry.java b/src/java.desktop/unix/classes/sun/font/XRGlyphCacheEntry.java index fff6919c464e..ae5227f7f768 100644 --- a/src/java.desktop/unix/classes/sun/font/XRGlyphCacheEntry.java +++ b/src/java.desktop/unix/classes/sun/font/XRGlyphCacheEntry.java @@ -34,7 +34,7 @@ */ public class XRGlyphCacheEntry { - long glyphInfoPtr; + long glyphInfoPtr, bgraGlyphInfoPtr; int lastUsed; boolean pinned; @@ -52,6 +52,14 @@ public XRGlyphCacheEntry(long glyphInfoPtr, GlyphList gl) { yOff = Math.round(getYAdvance()); } + public long getBgraGlyphInfoPtr() { + return bgraGlyphInfoPtr; + } + + public void setBgraGlyphInfoPtr(long bgraGlyphInfoPtr) { + this.bgraGlyphInfoPtr = bgraGlyphInfoPtr; + } + public int getXOff() { return xOff; } @@ -132,18 +140,22 @@ public void writePixelData(ByteArrayOutputStream os, boolean uploadAsLCD) { int width = getWidth(); int height = getHeight(); int rowBytes = getSourceRowBytes(); - int paddedWidth = getPaddedWidth(uploadAsLCD); - - if (!uploadAsLCD) { - for (int line = 0; line < height; line++) { - for(int x = 0; x < paddedWidth; x++) { - if(x < width) { - os.write(StrikeCache.unsafe.getByte(pixelDataAddress + (line * rowBytes + x))); - }else { - /*pad to multiple of 4 bytes per line*/ - os.write(0); + int paddedWidth = getPaddedWidth(); + + if (getType() == Type.GRAYSCALE) { + int subglyphs = getSubpixelResolutionX() * getSubpixelResolutionY(); + for (int subglyph = 0; subglyph < subglyphs; subglyph++) { + for (int line = 0; line < height; line++) { + for(int x = 0; x < paddedWidth; x++) { + if(x < width) { + os.write(StrikeCache.unsafe.getByte(pixelDataAddress + (line * rowBytes + x))); + }else { + /*pad to multiple of 4 bytes per line*/ + os.write(0); + } } } + pixelDataAddress += height * rowBytes; } } else { for (int line = 0; line < height; line++) { @@ -172,26 +184,44 @@ public float getTopLeftYOffset() { return StrikeCache.unsafe.getFloat(glyphInfoPtr + StrikeCache.topLeftYOffset); } + public byte getSubpixelResolutionX() { + byte rx = StrikeCache.unsafe.getByte(glyphInfoPtr + StrikeCache.subpixelResolutionXOffset); + return rx < 1 ? 1 : rx; + } + + public byte getSubpixelResolutionY() { + byte ry = StrikeCache.unsafe.getByte(glyphInfoPtr + StrikeCache.subpixelResolutionYOffset); + return ry < 1 ? 1 : ry; + } + public long getGlyphInfoPtr() { return glyphInfoPtr; } - public boolean isGrayscale(boolean listContainsLCDGlyphs) { - return getSourceRowBytes() == getWidth() && !(getWidth() == 0 && getHeight() == 0 && listContainsLCDGlyphs); + public Type getType() { + byte format = StrikeCache.unsafe.getByte(glyphInfoPtr + StrikeCache.formatOffset); + if (format == StrikeCache.PIXEL_FORMAT_GREYSCALE) { + return Type.GRAYSCALE; + } else if (format == StrikeCache.PIXEL_FORMAT_LCD) { + return Type.LCD; + } else if (format == StrikeCache.PIXEL_FORMAT_BGRA) { + return Type.BGRA; + } else { + throw new IllegalStateException("Unknown glyph format: " + format); + } } - public int getPaddedWidth(boolean listContainsLCDGlyphs) { - int width = getWidth(); - return isGrayscale(listContainsLCDGlyphs) ? (int) Math.ceil(width / 4.0) * 4 : width; + public int getPaddedWidth() { + return getType() == Type.GRAYSCALE ? + (int) Math.ceil(getWidth() / 4.0) * 4 : getWidth(); } - public int getDestinationRowBytes(boolean listContainsLCDGlyphs) { - boolean grayscale = isGrayscale(listContainsLCDGlyphs); - return grayscale ? getPaddedWidth(grayscale) : getWidth() * 4; + public int getDestinationRowBytes() { + return getType() == Type.GRAYSCALE ? getPaddedWidth() : getWidth() * 4; } - public int getGlyphDataLenth(boolean listContainsLCDGlyphs) { - return getDestinationRowBytes(listContainsLCDGlyphs) * getHeight(); + public int getGlyphDataLenth() { + return getDestinationRowBytes() * getHeight(); } public void setPinned() { @@ -211,10 +241,19 @@ public void setLastUsed(int lastUsed) { } public int getPixelCnt() { - return getWidth() * getHeight(); + return getWidth() * getHeight() * getSubpixelResolutionX() * getSubpixelResolutionY(); } public boolean isPinned() { return pinned; } + + + public enum Type { + GRAYSCALE, + LCD, + BGRA + } + + } diff --git a/src/java.desktop/unix/classes/sun/font/XRTextRenderer.java b/src/java.desktop/unix/classes/sun/font/XRTextRenderer.java index 6f23bf10899c..1fc051e276ba 100644 --- a/src/java.desktop/unix/classes/sun/font/XRTextRenderer.java +++ b/src/java.desktop/unix/classes/sun/font/XRTextRenderer.java @@ -78,13 +78,20 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { advY += 0.5f; } - XRGlyphCacheEntry[] cachedGlyphs = glyphCache.cacheGlyphs(gl); + XRGlyphCacheEntry[] cachedGlyphs = + glyphCache.cacheGlyphs(gl, x11sd.getXid()); boolean containsLCDGlyphs = false; - int activeGlyphSet = cachedGlyphs[0].getGlyphSet(); + /* Do not initialize it to cachedGlyphs[0].getGlyphSet(), + * as it may cause NPE */ + int activeGlyphSet = 0; int eltIndex = -1; gl.startGlyphIteration(); float[] positions = gl.getPositions(); + /* Accumulated advances are used to adjust glyph positions + * when mixing BGRA and standard glyphs as they have + * completely different methods of rendering. */ + float accumulatedXEltAdvanceX = 0, accumulatedXEltAdvanceY = 0; for (int i = 0; i < gl.getNumGlyphs(); i++) { gl.setGlyphIndex(i); XRGlyphCacheEntry cacheEntry = cachedGlyphs[i]; @@ -92,9 +99,34 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { continue; } - eltList.getGlyphs().addInt(cacheEntry.getGlyphID()); int glyphSet = cacheEntry.getGlyphSet(); + int subpixelResolutionX = cacheEntry.getSubpixelResolutionX(); + int subpixelResolutionY = cacheEntry.getSubpixelResolutionY(); + float glyphX = advX; + float glyphY = advY; + if (glyphSet == XRGlyphCache.BGRA_GLYPH_SET) { + /* BGRA glyphs store pointers to BGRAGlyphInfo + * struct instead of glyph index */ + eltList.getGlyphs().addInt( + (int) (cacheEntry.getBgraGlyphInfoPtr() >> 32)); + eltList.getGlyphs().addInt( + (int) cacheEntry.getBgraGlyphInfoPtr()); + } else if (subpixelResolutionX == 1 && subpixelResolutionY == 1) { + eltList.getGlyphs().addInt(cacheEntry.getGlyphID()); + } else { + glyphX += 0.5f / subpixelResolutionX - 0.5f; + glyphY += 0.5f / subpixelResolutionY - 0.5f; + int x = ((int) Math.floor(glyphX * + (float) subpixelResolutionX)) % subpixelResolutionX; + if (x < 0) x += subpixelResolutionX; + int y = ((int) Math.floor(glyphY * + (float) subpixelResolutionY)) % subpixelResolutionY; + if (y < 0) y += subpixelResolutionY; + eltList.getGlyphs().addInt(cacheEntry.getGlyphID() + + x + y * subpixelResolutionX); + } + containsLCDGlyphs |= (glyphSet == glyphCache.lcdGlyphSet); int posX = 0, posY = 0; @@ -103,7 +135,11 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { || cacheEntry.getYAdvance() != ((float) cacheEntry.getYOff()) || glyphSet != activeGlyphSet || eltIndex < 0 - || eltList.getCharCnt(eltIndex) == MAX_ELT_GLYPH_COUNT) { + /* We don't care about number of glyphs when + * rendering BGRA glyphs because they are not rendered + * using XRenderCompositeText. */ + || (glyphSet != XRGlyphCache.BGRA_GLYPH_SET && + eltList.getCharCnt(eltIndex) == MAX_ELT_GLYPH_COUNT)) { eltIndex = eltList.getNextIndex(); eltList.setCharCnt(eltIndex, 1); @@ -112,8 +148,8 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { if (gl.usePositions()) { // In this case advX only stores rounding errors - float x = positions[i * 2] + advX; - float y = positions[i * 2 + 1] + advY; + float x = positions[i * 2] + glyphX; + float y = positions[i * 2 + 1] + glyphY; posX = (int) Math.floor(x); posY = (int) Math.floor(y); advX -= cacheEntry.getXOff(); @@ -127,8 +163,8 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { * later. This way rounding-error can be corrected, and * is required to be consistent with the software loops. */ - posX = (int) Math.floor(advX); - posY = (int) Math.floor(advY); + posX = (int) Math.floor(glyphX); + posY = (int) Math.floor(glyphY); // Advance of ELT = difference between stored relative // positioning information and required float. @@ -136,17 +172,31 @@ protected void drawGlyphList(SunGraphics2D sg2d, GlyphList gl) { advY += (cacheEntry.getYAdvance() - cacheEntry.getYOff()); } - // Offset of the current glyph is the difference - // to the last glyph and this one - eltList.setXOff(eltIndex, (posX - oldPosX)); - eltList.setYOff(eltIndex, (posY - oldPosY)); - - oldPosX = posX; - oldPosY = posY; + if (glyphSet == XRGlyphCache.BGRA_GLYPH_SET) { + // BGRA glyphs use absolute positions + eltList.setXOff(eltIndex, + (int) (accumulatedXEltAdvanceX + posX)); + eltList.setYOff(eltIndex, + (int) (accumulatedXEltAdvanceY + posY)); + } else { + // Offset of the current glyph is the difference + // to the last glyph and this one + eltList.setXOff(eltIndex, (posX - oldPosX)); + eltList.setYOff(eltIndex, (posY - oldPosY)); + oldPosX = posX; + oldPosY = posY; + } } else { eltList.setCharCnt(eltIndex, eltList.getCharCnt(eltIndex) + 1); } + if (glyphSet == XRGlyphCache.BGRA_GLYPH_SET) { + advX += cacheEntry.getXAdvance(); + advY += cacheEntry.getYAdvance(); + } else { + accumulatedXEltAdvanceX += cacheEntry.getXAdvance(); + accumulatedXEltAdvanceY += cacheEntry.getYAdvance(); + } } int maskFormat = containsLCDGlyphs ? XRUtils.PictStandardARGB32 : XRUtils.PictStandardA8; diff --git a/src/java.desktop/unix/classes/sun/java2d/xr/XRBackend.java b/src/java.desktop/unix/classes/sun/java2d/xr/XRBackend.java index b44bca61ef09..0c00a4c4c223 100644 --- a/src/java.desktop/unix/classes/sun/java2d/xr/XRBackend.java +++ b/src/java.desktop/unix/classes/sun/java2d/xr/XRBackend.java @@ -94,6 +94,11 @@ public void XRenderAddGlyphs(int glyphSet, GlyphList gl, public void XRenderFreeGlyphs(int glyphSet, int[] gids); + public void addBGRAGlyphImages(int drawable, + List cacheEntries); + + public void freeBGRAGlyphImages(long[] glyphInfoPointers, int glyphCount); + public void XRenderCompositeText(byte op, int src, int dst, int maskFormatID, int xSrc, int ySrc, int xDst, int yDst, diff --git a/src/java.desktop/unix/classes/sun/java2d/xr/XRBackendNative.java b/src/java.desktop/unix/classes/sun/java2d/xr/XRBackendNative.java index e5f337d34153..7c0d453b12a0 100644 --- a/src/java.desktop/unix/classes/sun/java2d/xr/XRBackendNative.java +++ b/src/java.desktop/unix/classes/sun/java2d/xr/XRBackendNative.java @@ -229,12 +229,22 @@ private static long[] getGlyphInfoPtrs(List cacheEntries) { return glyphInfoPtrs; } + private static int countTotalSubglyphs(List cacheEntries) { + int totalSubglyphs = 0; + for (int i = 0; i < cacheEntries.size(); i++) { + XRGlyphCacheEntry entry = cacheEntries.get(i); + totalSubglyphs += entry.getSubpixelResolutionX() * + entry.getSubpixelResolutionY(); + } + return totalSubglyphs; + } + public void XRenderAddGlyphs(int glyphSet, GlyphList gl, List cacheEntries, byte[] pixelData) { long[] glyphInfoPtrs = getGlyphInfoPtrs(cacheEntries); - XRAddGlyphsNative(glyphSet, glyphInfoPtrs, - glyphInfoPtrs.length, pixelData, pixelData.length); + XRAddGlyphsNative(glyphSet, glyphInfoPtrs, glyphInfoPtrs.length, + pixelData, pixelData.length, countTotalSubglyphs(cacheEntries)); } public void XRenderFreeGlyphs(int glyphSet, int[] gids) { @@ -245,11 +255,32 @@ private static native void XRAddGlyphsNative(int glyphSet, long[] glyphInfoPtrs, int glyphCnt, byte[] pixelData, - int pixelDataLength); + int pixelDataLength, + int totalSubglyphs); private static native void XRFreeGlyphsNative(int glyphSet, int[] gids, int idCnt); + public void addBGRAGlyphImages(int drawable, + List cacheEntries) { + long[] glyphInfoPtrs = getGlyphInfoPtrs(cacheEntries); + addBGRAGlyphImagesNative(drawable, glyphInfoPtrs, + glyphInfoPtrs.length, FMTPTR_ARGB32); + /* addBGRAGlyphImagesNative replaced values in + * glyphInfoPtrs with pointers to BGRAGlyphInfo structs, save them */ + int i = 0; + for (XRGlyphCacheEntry cacheEntry : cacheEntries) { + cacheEntry.setBgraGlyphInfoPtr(glyphInfoPtrs[i++]); + } + } + + private native void addBGRAGlyphImagesNative(int drawable, + long[] glyphInfoPtrs, + int glyphCnt, long format32); + + public native void freeBGRAGlyphImages(long[] glyphInfoPointers, + int glyphCount); + private static native void XRenderCompositeTextNative(int op, int src, int dst, int srcX, int srcY, long maskFormat, diff --git a/src/java.desktop/unix/data/x11wrappergen/sizes-32.txt b/src/java.desktop/unix/data/x11wrappergen/sizes-32.txt index 935abc9465a9..2e25425dc26b 100644 --- a/src/java.desktop/unix/data/x11wrappergen/sizes-32.txt +++ b/src/java.desktop/unix/data/x11wrappergen/sizes-32.txt @@ -272,12 +272,14 @@ XEvent.xclient 0 XEvent.xcolormap 0 XEvent.xconfigure 0 XEvent.xconfigurerequest 0 +XEvent.xcookie 0 XEvent.xcreatewindow 0 XEvent.xcrossing 0 XEvent.xdestroywindow 0 XEvent.xerror 0 XEvent.xexpose 0 XEvent.xfocus 0 +XEvent.xgeneric 0 XEvent.xgraphicsexpose 0 XEvent.xgravity 0 XEvent.xkey 0 @@ -370,6 +372,22 @@ XGCValues.subwindow_mode 64 XGCValues.tile 44 XGCValues.ts_x_origin 52 XGCValues.ts_y_origin 56 +XGenericEvent 24 +XGenericEventCookie 32 +XGenericEventCookie.cookie 24 +XGenericEventCookie.data 28 +XGenericEventCookie.display 12 +XGenericEventCookie.evtype 20 +XGenericEventCookie.extension 16 +XGenericEventCookie.send_event 8 +XGenericEventCookie.serial 4 +XGenericEventCookie.type 0 +XGenericEvent.display 12 +XGenericEvent.evtype 20 +XGenericEvent.extension 16 +XGenericEvent.send_event 8 +XGenericEvent.serial 4 +XGenericEvent.type 0 XGraphicsExposeEvent 48 XGraphicsExposeEvent.count 36 XGraphicsExposeEvent.display 12 @@ -396,6 +414,9 @@ XHostAddress 12 XHostAddress.address 8 XHostAddress.family 0 XHostAddress.length 4 +XIButtonState 8 +XIButtonState.mask 4 +XIButtonState.mask_len 0 XIconSize 24 XIconSize.height_inc 20 XIconSize.max_height 12 @@ -403,6 +424,29 @@ XIconSize.max_width 8 XIconSize.min_height 4 XIconSize.min_width 0 XIconSize.width_inc 16 +XIDeviceEvent 140 +XIDeviceEvent.buttons 88 +XIDeviceEvent.child 48 +XIDeviceEvent.detail 36 +XIDeviceEvent.deviceid 28 +XIDeviceEvent.display 12 +XIDeviceEvent.event 44 +XIDeviceEvent.event_x 68 +XIDeviceEvent.event_y 76 +XIDeviceEvent.evtype 20 +XIDeviceEvent.extension 16 +XIDeviceEvent.flags 84 +XIDeviceEvent.group 124 +XIDeviceEvent.mods 108 +XIDeviceEvent.root 40 +XIDeviceEvent.root_x 52 +XIDeviceEvent.root_y 60 +XIDeviceEvent.send_event 8 +XIDeviceEvent.serial 4 +XIDeviceEvent.sourceid 32 +XIDeviceEvent.time 24 +XIDeviceEvent.type 0 +XIDeviceEvent.valuators 96 XImage 88 XImage.bitmap_bit_order 28 XImage.bitmap_pad 32 @@ -436,6 +480,11 @@ XIMHotKeyTrigger.modifier_mask 8 XIMHotKeyTriggers 8 XIMHotKeyTriggers.key 4 XIMHotKeyTriggers.num_hot_key 0 +XIModifierState 16 +XIModifierState.base 0 +XIModifierState.effective 12 +XIModifierState.latched 4 +XIModifierState.locked 8 XIMPreeditCaretCallbackStruct 12 XIMPreeditCaretCallbackStruct.direction 4 XIMPreeditCaretCallbackStruct.position 0 @@ -472,6 +521,10 @@ XIMText.string 12 XIMValuesList 8 XIMValuesList.count_values 0 XIMValuesList.supported_values 4 +XIValuatorState 12 +XIValuatorState.mask 4 +XIValuatorState.mask_len 0 +XIValuatorState.values 8 XkbAccessXNotifyEvent 44 XkbAccessXNotifyEvent.debounce_delay 40 XkbAccessXNotifyEvent.detail 28 diff --git a/src/java.desktop/unix/data/x11wrappergen/sizes-64.txt b/src/java.desktop/unix/data/x11wrappergen/sizes-64.txt index 29cea81c899e..75591c04611a 100644 --- a/src/java.desktop/unix/data/x11wrappergen/sizes-64.txt +++ b/src/java.desktop/unix/data/x11wrappergen/sizes-64.txt @@ -272,12 +272,14 @@ XEvent.xclient 0 XEvent.xcolormap 0 XEvent.xconfigure 0 XEvent.xconfigurerequest 0 +XEvent.xcookie 0 XEvent.xcreatewindow 0 XEvent.xcrossing 0 XEvent.xdestroywindow 0 XEvent.xerror 0 XEvent.xexpose 0 XEvent.xfocus 0 +XEvent.xgeneric 0 XEvent.xgraphicsexpose 0 XEvent.xgravity 0 XEvent.xkey 0 @@ -370,6 +372,22 @@ XGCValues.subwindow_mode 96 XGCValues.tile 64 XGCValues.ts_x_origin 80 XGCValues.ts_y_origin 84 +XGenericEvent 40 +XGenericEventCookie 56 +XGenericEventCookie.cookie 40 +XGenericEventCookie.data 48 +XGenericEventCookie.display 24 +XGenericEventCookie.evtype 36 +XGenericEventCookie.extension 32 +XGenericEventCookie.send_event 16 +XGenericEventCookie.serial 8 +XGenericEventCookie.type 0 +XGenericEvent.display 24 +XGenericEvent.evtype 36 +XGenericEvent.extension 32 +XGenericEvent.send_event 16 +XGenericEvent.serial 8 +XGenericEvent.type 0 XGraphicsExposeEvent 72 XGraphicsExposeEvent.count 56 XGraphicsExposeEvent.display 24 @@ -396,6 +414,9 @@ XHostAddress 16 XHostAddress.address 8 XHostAddress.family 0 XHostAddress.length 4 +XIButtonState 16 +XIButtonState.mask 8 +XIButtonState.mask_len 0 XIconSize 24 XIconSize.height_inc 20 XIconSize.max_height 12 @@ -403,6 +424,29 @@ XIconSize.max_width 8 XIconSize.min_height 4 XIconSize.min_width 0 XIconSize.width_inc 16 +XIDeviceEvent 200 +XIDeviceEvent.buttons 128 +XIDeviceEvent.child 80 +XIDeviceEvent.detail 56 +XIDeviceEvent.deviceid 48 +XIDeviceEvent.display 24 +XIDeviceEvent.event 72 +XIDeviceEvent.event_x 104 +XIDeviceEvent.event_y 112 +XIDeviceEvent.evtype 36 +XIDeviceEvent.extension 32 +XIDeviceEvent.flags 120 +XIDeviceEvent.group 184 +XIDeviceEvent.mods 168 +XIDeviceEvent.root 64 +XIDeviceEvent.root_x 88 +XIDeviceEvent.root_y 96 +XIDeviceEvent.send_event 16 +XIDeviceEvent.serial 8 +XIDeviceEvent.sourceid 52 +XIDeviceEvent.time 40 +XIDeviceEvent.type 0 +XIDeviceEvent.valuators 144 XImage 136 XImage.bitmap_bit_order 32 XImage.bitmap_pad 36 @@ -436,6 +480,11 @@ XIMHotKeyTrigger.modifier_mask 12 XIMHotKeyTriggers 16 XIMHotKeyTriggers.key 8 XIMHotKeyTriggers.num_hot_key 0 +XIModifierState 16 +XIModifierState.base 0 +XIModifierState.effective 12 +XIModifierState.latched 4 +XIModifierState.locked 8 XIMPreeditCaretCallbackStruct 12 XIMPreeditCaretCallbackStruct.direction 4 XIMPreeditCaretCallbackStruct.position 0 @@ -472,6 +521,10 @@ XIMText.string 24 XIMValuesList 16 XIMValuesList.count_values 0 XIMValuesList.supported_values 8 +XIValuatorState 24 +XIValuatorState.mask 8 +XIValuatorState.mask_len 0 +XIValuatorState.values 16 XkbAccessXNotifyEvent 64 XkbAccessXNotifyEvent.debounce_delay 60 XkbAccessXNotifyEvent.detail 48 diff --git a/src/java.desktop/unix/data/x11wrappergen/xlibtypes.txt b/src/java.desktop/unix/data/x11wrappergen/xlibtypes.txt index 5cdf297897b3..e8be6914dfee 100644 --- a/src/java.desktop/unix/data/x11wrappergen/xlibtypes.txt +++ b/src/java.desktop/unix/data/x11wrappergen/xlibtypes.txt @@ -127,6 +127,22 @@ XKeymapEvent display long window long key_vector array byte 32 +XGenericEvent + type int + serial long + send_event Bool + display long + extension int + evtype int +XGenericEventCookie + type int + serial long + send_event Bool + display long + extension int + evtype int + cookie int + data pointer XDestroyWindowEvent type int serial long @@ -814,6 +830,8 @@ XEvent xmapping struct XMappingEvent xerror struct XErrorEvent xkeymap struct XKeymapEvent + xgeneric struct XGenericEvent + xcookie struct XGenericEventCookie pad array long 24 XkbAnyEvent @@ -1039,3 +1057,42 @@ XkbEvent accessx struct XkbAccessXNotifyEvent device struct XkbExtensionDeviceNotifyEvent core struct XEvent + +XIButtonState + mask_len int + mask pointer byte + +XIValuatorState + mask_len int + mask pointer byte + values pointer double + +XIModifierState + base int + latched int + locked int + effective int + +XIDeviceEvent + type int + serial long + send_event Bool + display long + extension int + evtype int + time ulong + deviceid int + sourceid int + detail int + root long + event long + child long + root_x double + root_y double + event_x double + event_y double + flags int + buttons struct XIButtonState + valuators struct XIValuatorState + mods struct XIModifierState + group struct XIModifierState diff --git a/src/java.desktop/unix/native/common/awt/fontconfigmanager.h b/src/java.desktop/unix/native/common/awt/fontconfigmanager.h new file mode 100644 index 000000000000..ce3382c90d90 --- /dev/null +++ b/src/java.desktop/unix/native/common/awt/fontconfigmanager.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef JETBRAINSRUNTIME_FONTCONFIGMANAGER_H +#define JETBRAINSRUNTIME_FONTCONFIGMANAGER_H + +typedef struct RenderingFontHints { + int fcHinting; + int fcHintStyle; + int fcAntialias; + int fcAutohint; + int fcRGBA; + int fcLCDFilter; +} RenderingFontHints; + +void openFontConfig(); +char **getFontConfigLocations(); +int setupRenderingFontHints(const char* fcName, const char* locale, double size, RenderingFontHints *renderingFontHints); + +#endif //JETBRAINSRUNTIME_FONTCONFIGMANAGER_H diff --git a/src/java.desktop/unix/native/common/awt/fontpath.c b/src/java.desktop/unix/native/common/awt/fontpath.c index b270a3fc94d7..d5b3a4c8a4f4 100644 --- a/src/java.desktop/unix/native/common/awt/fontpath.c +++ b/src/java.desktop/unix/native/common/awt/fontpath.c @@ -35,6 +35,8 @@ #include #include +#include "fontconfigmanager.h" + #include #include #include @@ -85,8 +87,6 @@ static char *fullAixFontPath[] = { }; #endif -static char **getFontConfigLocations(); - typedef struct { const char *name[MAXFDIRS]; int num; @@ -380,843 +380,3 @@ JNIEXPORT jstring JNICALL Java_sun_awt_FcFontManager_getFontPathNative ret = (*env)->NewStringUTF(env, ptr); return ret; } - -#include - -#include - - -static void* openFontConfig() { - - char *homeEnv; - static char *homeEnvStr = "HOME="; /* must be static */ - void* libfontconfig = NULL; - - /* Private workaround to not use fontconfig library. - * May be useful during testing/debugging - */ - char *useFC = getenv("USE_J2D_FONTCONFIG"); - if (useFC != NULL && !strcmp(useFC, "no")) { - return NULL; - } - -#if defined(_AIX) - /* On AIX, fontconfig is not a standard package supported by IBM. - * instead it has to be installed from the "AIX Toolbox for Linux Applications" - * site http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html - * and will be installed under /opt/freeware/lib/libfontconfig.a. - * Notice that the archive contains the real 32- and 64-bit shared libraries. - * We first try to load 'libfontconfig.so' from the default library path in the - * case the user has installed a private version of the library and if that - * doesn't succeed, we try the version from /opt/freeware/lib/libfontconfig.a - */ - libfontconfig = dlopen("libfontconfig.so", RTLD_LOCAL|RTLD_LAZY); - if (libfontconfig == NULL) { - libfontconfig = dlopen("/opt/freeware/lib/libfontconfig.a(libfontconfig.so.1)", RTLD_MEMBER|RTLD_LOCAL|RTLD_LAZY); - if (libfontconfig == NULL) { - return NULL; - } - } -#else - /* 64 bit sparc should pick up the right version from the lib path. - * New features may be added to libfontconfig, this is expected to - * be compatible with old features, but we may need to start - * distinguishing the library version, to know whether to expect - * certain symbols - and functionality - to be available. - * Also add explicit search for .so.1 in case .so symlink doesn't exist. - */ - libfontconfig = dlopen(FONTCONFIG_DLL_VERSIONED, RTLD_LOCAL|RTLD_LAZY); - if (libfontconfig == NULL) { - libfontconfig = dlopen(FONTCONFIG_DLL, RTLD_LOCAL|RTLD_LAZY); - if (libfontconfig == NULL) { - return NULL; - } - } -#endif - - /* Version 1.0 of libfontconfig crashes if HOME isn't defined in - * the environment. This should generally never happen, but we can't - * control it, and can't control the version of fontconfig, so iff - * its not defined we set it to an empty value which is sufficient - * to prevent a crash. I considered unsetting it before exit, but - * it doesn't appear to work on Solaris, so I will leave it set. - */ - homeEnv = getenv("HOME"); - if (homeEnv == NULL) { - putenv(homeEnvStr); - } - - return libfontconfig; -} - -typedef void* (FcFiniFuncType)(); - -static void closeFontConfig(void* libfontconfig, jboolean fcFini) { - - /* NB FcFini is not in (eg) the Solaris 10 version of fontconfig. Its not - * clear if this means we are really leaking resources in those cases - * but it seems we should call this function when its available. - * But since the Swing GTK code may be still accessing the lib, its probably - * safest for now to just let this "leak" rather than potentially - * concurrently free global data still in use by other code. - */ -#if 0 - if (fcFini) { /* release resources */ - FcFiniFuncType FcFini = (FcFiniFuncType)dlsym(libfontconfig, "FcFini"); - - if (FcFini != NULL) { - (*FcFini)(); - } - } -#endif - dlclose(libfontconfig); -} - -typedef FcConfig* (*FcInitLoadConfigFuncType)(); -typedef FcPattern* (*FcPatternBuildFuncType)(FcPattern *orig, ...); -typedef FcObjectSet* (*FcObjectSetFuncType)(const char *first, ...); -typedef FcFontSet* (*FcFontListFuncType)(FcConfig *config, - FcPattern *p, - FcObjectSet *os); -typedef FcResult (*FcPatternGetBoolFuncType)(const FcPattern *p, - const char *object, - int n, - FcBool *b); -typedef FcResult (*FcPatternGetIntegerFuncType)(const FcPattern *p, - const char *object, - int n, - int *i); -typedef FcResult (*FcPatternGetStringFuncType)(const FcPattern *p, - const char *object, - int n, - FcChar8 ** s); -typedef FcChar8* (*FcStrDirnameFuncType)(const FcChar8 *file); -typedef void (*FcPatternDestroyFuncType)(FcPattern *p); -typedef void (*FcObjectSetDestroyFuncType)(FcObjectSet *os); -typedef void (*FcFontSetDestroyFuncType)(FcFontSet *s); -typedef FcPattern* (*FcNameParseFuncType)(const FcChar8 *name); -typedef FcBool (*FcPatternAddStringFuncType)(FcPattern *p, - const char *object, - const FcChar8 *s); -typedef void (*FcDefaultSubstituteFuncType)(FcPattern *p); -typedef FcBool (*FcConfigSubstituteFuncType)(FcConfig *config, - FcPattern *p, - FcMatchKind kind); -typedef FcPattern* (*FcFontMatchFuncType)(FcConfig *config, - FcPattern *p, - FcResult *result); -typedef FcFontSet* (*FcFontSetCreateFuncType)(); -typedef FcBool (*FcFontSetAddFuncType)(FcFontSet *s, FcPattern *font); - -typedef FcResult (*FcPatternGetCharSetFuncType)(FcPattern *p, - const char *object, - int n, - FcCharSet **c); -typedef FcFontSet* (*FcFontSortFuncType)(FcConfig *config, - FcPattern *p, - FcBool trim, - FcCharSet **csp, - FcResult *result); -typedef FcCharSet* (*FcCharSetUnionFuncType)(const FcCharSet *a, - const FcCharSet *b); -typedef FcCharSet* (*FcCharSetDestroyFuncType)(FcCharSet *fcs); -typedef FcChar32 (*FcCharSetSubtractCountFuncType)(const FcCharSet *a, - const FcCharSet *b); - -typedef int (*FcGetVersionFuncType)(); - -typedef FcStrList* (*FcConfigGetCacheDirsFuncType)(FcConfig *config); -typedef FcChar8* (*FcStrListNextFuncType)(FcStrList *list); -typedef FcChar8* (*FcStrListDoneFuncType)(FcStrList *list); - -static char **getFontConfigLocations() { - - char **fontdirs; - int numdirs = 0; - FcInitLoadConfigFuncType FcInitLoadConfig; - FcPatternBuildFuncType FcPatternBuild; - FcObjectSetFuncType FcObjectSetBuild; - FcFontListFuncType FcFontList; - FcPatternGetStringFuncType FcPatternGetString; - FcStrDirnameFuncType FcStrDirname; - FcPatternDestroyFuncType FcPatternDestroy; - FcObjectSetDestroyFuncType FcObjectSetDestroy; - FcFontSetDestroyFuncType FcFontSetDestroy; - - FcConfig *fontconfig; - FcPattern *pattern; - FcObjectSet *objset; - FcFontSet *fontSet; - FcStrList *strList; - FcChar8 *str; - int i, f, found, len=0; - char **fontPath; - - void* libfontconfig = openFontConfig(); - - if (libfontconfig == NULL) { - return NULL; - } - - FcPatternBuild = - (FcPatternBuildFuncType)dlsym(libfontconfig, "FcPatternBuild"); - FcObjectSetBuild = - (FcObjectSetFuncType)dlsym(libfontconfig, "FcObjectSetBuild"); - FcFontList = - (FcFontListFuncType)dlsym(libfontconfig, "FcFontList"); - FcPatternGetString = - (FcPatternGetStringFuncType)dlsym(libfontconfig, "FcPatternGetString"); - FcStrDirname = - (FcStrDirnameFuncType)dlsym(libfontconfig, "FcStrDirname"); - FcPatternDestroy = - (FcPatternDestroyFuncType)dlsym(libfontconfig, "FcPatternDestroy"); - FcObjectSetDestroy = - (FcObjectSetDestroyFuncType)dlsym(libfontconfig, "FcObjectSetDestroy"); - FcFontSetDestroy = - (FcFontSetDestroyFuncType)dlsym(libfontconfig, "FcFontSetDestroy"); - - if (FcPatternBuild == NULL || - FcObjectSetBuild == NULL || - FcPatternGetString == NULL || - FcFontList == NULL || - FcStrDirname == NULL || - FcPatternDestroy == NULL || - FcObjectSetDestroy == NULL || - FcFontSetDestroy == NULL) { /* problem with the library: return. */ - closeFontConfig(libfontconfig, JNI_FALSE); - return NULL; - } - - /* Make calls into the fontconfig library to build a search for - * outline fonts, and to get the set of full file paths from the matches. - * This set is returned from the call to FcFontList(..) - * We allocate an array of char* pointers sufficient to hold all - * the matches + 1 extra which ensures there will be a NULL after all - * valid entries. - * We call FcStrDirname strip the file name from the path, and - * check if we have yet seen this directory. If not we add a pointer to - * it into our array of char*. Note that FcStrDirname returns newly - * allocated storage so we can use this in the return char** value. - * Finally we clean up, freeing allocated resources, and return the - * array of unique directories. - */ - pattern = (*FcPatternBuild)(NULL, FC_OUTLINE, FcTypeBool, FcTrue, NULL); - objset = (*FcObjectSetBuild)(FC_FILE, NULL); - fontSet = (*FcFontList)(NULL, pattern, objset); - if (fontSet == NULL) { - /* FcFontList() may return NULL if fonts are not installed. */ - fontdirs = NULL; - } else { - fontdirs = (char**)calloc(fontSet->nfont+1, sizeof(char*)); - if (fontdirs == NULL) { - (*FcFontSetDestroy)(fontSet); - goto cleanup; - } - for (f=0; f < fontSet->nfont; f++) { - FcChar8 *file; - FcChar8 *dir; - if ((*FcPatternGetString)(fontSet->fonts[f], FC_FILE, 0, &file) == - FcResultMatch) { - dir = (*FcStrDirname)(file); - found = 0; - for (i=0;iGetStringUTFChars(env, fcNameStr, 0); - if (fcName == NULL) { - return -1; - } - locale = (*env)->GetStringUTFChars(env, localeStr, 0); - - if ((libfontconfig = openFontConfig()) == NULL) { - (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr,(const char*)locale); - } - return -1; - } - - FcNameParse = (FcNameParseFuncType)dlsym(libfontconfig, "FcNameParse"); - FcPatternAddString = - (FcPatternAddStringFuncType)dlsym(libfontconfig, "FcPatternAddString"); - FcConfigSubstitute = - (FcConfigSubstituteFuncType)dlsym(libfontconfig, "FcConfigSubstitute"); - FcDefaultSubstitute = (FcDefaultSubstituteFuncType) - dlsym(libfontconfig, "FcDefaultSubstitute"); - FcFontMatch = (FcFontMatchFuncType)dlsym(libfontconfig, "FcFontMatch"); - FcPatternGetBool = (FcPatternGetBoolFuncType) - dlsym(libfontconfig, "FcPatternGetBool"); - FcPatternGetInteger = (FcPatternGetIntegerFuncType) - dlsym(libfontconfig, "FcPatternGetInteger"); - FcPatternDestroy = - (FcPatternDestroyFuncType)dlsym(libfontconfig, "FcPatternDestroy"); - - if (FcNameParse == NULL || - FcPatternAddString == NULL || - FcConfigSubstitute == NULL || - FcDefaultSubstitute == NULL || - FcFontMatch == NULL || - FcPatternGetBool == NULL || - FcPatternGetInteger == NULL || - FcPatternDestroy == NULL) { /* problem with the library: return. */ - - (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr,(const char*)locale); - } - closeFontConfig(libfontconfig, JNI_FALSE); - return -1; - } - - - pattern = (*FcNameParse)((FcChar8 *)fcName); - if (locale != NULL) { - (*FcPatternAddString)(pattern, FC_LANG, (unsigned char*)locale); - } - (*FcConfigSubstitute)(NULL, pattern, FcMatchPattern); - (*FcDefaultSubstitute)(pattern); - matchPattern = (*FcFontMatch)(NULL, pattern, &result); - /* Perhaps should call FcFontRenderPrepare() here as some pattern - * elements might change as a result of that call, but I'm not seeing - * any difference in testing. - */ - if (matchPattern) { - (*FcPatternGetBool)(matchPattern, FC_ANTIALIAS, 0, &antialias); - (*FcPatternGetInteger)(matchPattern, FC_RGBA, 0, &rgba); - (*FcPatternDestroy)(matchPattern); - } - (*FcPatternDestroy)(pattern); - - (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - closeFontConfig(libfontconfig, JNI_TRUE); - - if (antialias == FcFalse) { - return TEXT_AA_OFF; - } else if (rgba <= FC_RGBA_UNKNOWN || rgba >= FC_RGBA_NONE) { - return TEXT_AA_ON; - } else { - switch (rgba) { - case FC_RGBA_RGB : return TEXT_AA_LCD_HRGB; - case FC_RGBA_BGR : return TEXT_AA_LCD_HBGR; - case FC_RGBA_VRGB : return TEXT_AA_LCD_VRGB; - case FC_RGBA_VBGR : return TEXT_AA_LCD_VBGR; - default : return TEXT_AA_LCD_HRGB; // should not get here. - } - } -} - -JNIEXPORT jint JNICALL -Java_sun_font_FontConfigManager_getFontConfigVersion - (JNIEnv *env, jclass obj) { - - void* libfontconfig; - FcGetVersionFuncType FcGetVersion; - int version = 0; - - if ((libfontconfig = openFontConfig()) == NULL) { - return 0; - } - - FcGetVersion = (FcGetVersionFuncType)dlsym(libfontconfig, "FcGetVersion"); - - if (FcGetVersion == NULL) { - closeFontConfig(libfontconfig, JNI_FALSE); - return 0; - } - version = (*FcGetVersion)(); - closeFontConfig(libfontconfig, JNI_FALSE); - - return version; -} - - -JNIEXPORT void JNICALL -Java_sun_font_FontConfigManager_getFontConfig -(JNIEnv *env, jclass obj, jstring localeStr, jobject fcInfoObj, - jobjectArray fcCompFontArray, jboolean includeFallbacks) { - - FcNameParseFuncType FcNameParse; - FcPatternAddStringFuncType FcPatternAddString; - FcConfigSubstituteFuncType FcConfigSubstitute; - FcDefaultSubstituteFuncType FcDefaultSubstitute; - FcFontMatchFuncType FcFontMatch; - FcPatternGetStringFuncType FcPatternGetString; - FcPatternDestroyFuncType FcPatternDestroy; - FcPatternGetCharSetFuncType FcPatternGetCharSet; - FcFontSortFuncType FcFontSort; - FcFontSetDestroyFuncType FcFontSetDestroy; - FcCharSetUnionFuncType FcCharSetUnion; - FcCharSetDestroyFuncType FcCharSetDestroy; - FcCharSetSubtractCountFuncType FcCharSetSubtractCount; - FcGetVersionFuncType FcGetVersion; - FcConfigGetCacheDirsFuncType FcConfigGetCacheDirs; - FcStrListNextFuncType FcStrListNext; - FcStrListDoneFuncType FcStrListDone; - - int i, arrlen; - jobject fcCompFontObj; - jstring fcNameStr, jstr; - const char *locale, *fcName; - FcPattern *pattern; - FcResult result; - void* libfontconfig; - jfieldID fcNameID, fcFirstFontID, fcAllFontsID, fcVersionID, fcCacheDirsID; - jfieldID familyNameID, styleNameID, fullNameID, fontFileID; - jmethodID fcFontCons; - char* debugMinGlyphsStr = getenv("J2D_DEBUG_MIN_GLYPHS"); - jclass fcInfoClass; - jclass fcCompFontClass; - jclass fcFontClass; - - CHECK_NULL(fcInfoObj); - CHECK_NULL(fcCompFontArray); - - fcInfoClass = - (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigInfo"); - CHECK_NULL(fcInfoClass); - fcCompFontClass = - (*env)->FindClass(env, "sun/font/FontConfigManager$FcCompFont"); - CHECK_NULL(fcCompFontClass); - fcFontClass = - (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigFont"); - CHECK_NULL(fcFontClass); - - - CHECK_NULL(fcVersionID = (*env)->GetFieldID(env, fcInfoClass, "fcVersion", "I")); - CHECK_NULL(fcCacheDirsID = (*env)->GetFieldID(env, fcInfoClass, "cacheDirs", - "[Ljava/lang/String;")); - CHECK_NULL(fcNameID = (*env)->GetFieldID(env, fcCompFontClass, - "fcName", "Ljava/lang/String;")); - CHECK_NULL(fcFirstFontID = (*env)->GetFieldID(env, fcCompFontClass, "firstFont", - "Lsun/font/FontConfigManager$FontConfigFont;")); - CHECK_NULL(fcAllFontsID = (*env)->GetFieldID(env, fcCompFontClass, "allFonts", - "[Lsun/font/FontConfigManager$FontConfigFont;")); - CHECK_NULL(fcFontCons = (*env)->GetMethodID(env, fcFontClass, "", "()V")); - CHECK_NULL(familyNameID = (*env)->GetFieldID(env, fcFontClass, - "familyName", "Ljava/lang/String;")); - CHECK_NULL(styleNameID = (*env)->GetFieldID(env, fcFontClass, - "styleStr", "Ljava/lang/String;")); - CHECK_NULL(fullNameID = (*env)->GetFieldID(env, fcFontClass, - "fullName", "Ljava/lang/String;")); - CHECK_NULL(fontFileID = (*env)->GetFieldID(env, fcFontClass, - "fontFile", "Ljava/lang/String;")); - - if ((libfontconfig = openFontConfig()) == NULL) { - return; - } - - FcNameParse = (FcNameParseFuncType)dlsym(libfontconfig, "FcNameParse"); - FcPatternAddString = - (FcPatternAddStringFuncType)dlsym(libfontconfig, "FcPatternAddString"); - FcConfigSubstitute = - (FcConfigSubstituteFuncType)dlsym(libfontconfig, "FcConfigSubstitute"); - FcDefaultSubstitute = (FcDefaultSubstituteFuncType) - dlsym(libfontconfig, "FcDefaultSubstitute"); - FcFontMatch = (FcFontMatchFuncType)dlsym(libfontconfig, "FcFontMatch"); - FcPatternGetString = - (FcPatternGetStringFuncType)dlsym(libfontconfig, "FcPatternGetString"); - FcPatternDestroy = - (FcPatternDestroyFuncType)dlsym(libfontconfig, "FcPatternDestroy"); - FcPatternGetCharSet = - (FcPatternGetCharSetFuncType)dlsym(libfontconfig, - "FcPatternGetCharSet"); - FcFontSort = - (FcFontSortFuncType)dlsym(libfontconfig, "FcFontSort"); - FcFontSetDestroy = - (FcFontSetDestroyFuncType)dlsym(libfontconfig, "FcFontSetDestroy"); - FcCharSetUnion = - (FcCharSetUnionFuncType)dlsym(libfontconfig, "FcCharSetUnion"); - FcCharSetDestroy = - (FcCharSetDestroyFuncType)dlsym(libfontconfig, "FcCharSetDestroy"); - FcCharSetSubtractCount = - (FcCharSetSubtractCountFuncType)dlsym(libfontconfig, - "FcCharSetSubtractCount"); - FcGetVersion = (FcGetVersionFuncType)dlsym(libfontconfig, "FcGetVersion"); - - if (FcNameParse == NULL || - FcPatternAddString == NULL || - FcConfigSubstitute == NULL || - FcDefaultSubstitute == NULL || - FcFontMatch == NULL || - FcPatternGetString == NULL || - FcPatternDestroy == NULL || - FcPatternGetCharSet == NULL || - FcFontSetDestroy == NULL || - FcCharSetUnion == NULL || - FcCharSetDestroy == NULL || - FcGetVersion == NULL || - FcCharSetSubtractCount == NULL) {/* problem with the library: return.*/ - closeFontConfig(libfontconfig, JNI_FALSE); - return; - } - - (*env)->SetIntField(env, fcInfoObj, fcVersionID, (*FcGetVersion)()); - - /* Optionally get the cache dir locations. This isn't - * available until v 2.4.x, but this is OK since on those later versions - * we can check the time stamps on the cache dirs to see if we - * are out of date. There are a couple of assumptions here. First - * that the time stamp on the directory changes when the contents are - * updated. Secondly that the locations don't change. The latter is - * most likely if a new version of fontconfig is installed, but we also - * invalidate the cache if we detect that. Arguably even that is "rare", - * and most likely is tied to an OS upgrade which gets a new file anyway. - */ - FcConfigGetCacheDirs = - (FcConfigGetCacheDirsFuncType)dlsym(libfontconfig, - "FcConfigGetCacheDirs"); - FcStrListNext = - (FcStrListNextFuncType)dlsym(libfontconfig, "FcStrListNext"); - FcStrListDone = - (FcStrListDoneFuncType)dlsym(libfontconfig, "FcStrListDone"); - if (FcStrListNext != NULL && FcStrListDone != NULL && - FcConfigGetCacheDirs != NULL) { - - FcStrList* cacheDirs; - FcChar8* cacheDir; - int cnt = 0; - jobject cacheDirArray = - (*env)->GetObjectField(env, fcInfoObj, fcCacheDirsID); - int max = (*env)->GetArrayLength(env, cacheDirArray); - - cacheDirs = (*FcConfigGetCacheDirs)(NULL); - if (cacheDirs != NULL) { - while ((cnt < max) && (cacheDir = (*FcStrListNext)(cacheDirs))) { - jstr = (*env)->NewStringUTF(env, (const char*)cacheDir); - if (IS_NULL(jstr)) { - (*FcStrListDone)(cacheDirs); - return; - } - (*env)->SetObjectArrayElement(env, cacheDirArray, cnt++, jstr); - (*env)->DeleteLocalRef(env, jstr); - } - (*FcStrListDone)(cacheDirs); - } - } - - locale = (*env)->GetStringUTFChars(env, localeStr, 0); - if (locale == NULL) { - (*env)->ExceptionClear(env); - JNU_ThrowOutOfMemoryError(env, "Could not create locale"); - return; - } - - arrlen = (*env)->GetArrayLength(env, fcCompFontArray); - for (i=0; iGetObjectArrayElement(env, fcCompFontArray, i); - fcNameStr = - (jstring)((*env)->GetObjectField(env, fcCompFontObj, fcNameID)); - fcName = (*env)->GetStringUTFChars(env, fcNameStr, 0); - if (fcName == NULL) { - (*env)->DeleteLocalRef(env, fcCompFontObj); - (*env)->DeleteLocalRef(env, fcNameStr); - continue; - } - pattern = (*FcNameParse)((FcChar8 *)fcName); - (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); - (*env)->DeleteLocalRef(env, fcNameStr); - if (pattern == NULL) { - closeFontConfig(libfontconfig, JNI_FALSE); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - return; - } - - /* locale may not usually be necessary as fontconfig appears to apply - * this anyway based on the user's environment. However we want - * to use the value of the JDK startup locale so this should take - * care of it. - */ - if (locale != NULL) { - (*FcPatternAddString)(pattern, FC_LANG, (unsigned char*)locale); - } - (*FcConfigSubstitute)(NULL, pattern, FcMatchPattern); - (*FcDefaultSubstitute)(pattern); - fontset = (*FcFontSort)(NULL, pattern, FcTrue, NULL, &result); - if (fontset == NULL) { - (*FcPatternDestroy)(pattern); - closeFontConfig(libfontconfig, JNI_FALSE); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - return; - } - - /* fontconfig returned us "nfonts". If we are just getting the - * first font, we set nfont to zero. Otherwise we use "nfonts". - * Next create separate C arrays of length nfonts for family file etc. - * Inspect the returned fonts and the ones we like (adds enough glyphs) - * are added to the arrays and we increment 'fontCount'. - */ - nfonts = fontset->nfont; - family = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); - styleStr = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); - fullname = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); - file = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); - if (family == NULL || styleStr == NULL || - fullname == NULL || file == NULL) { - if (family != NULL) { - free(family); - } - if (styleStr != NULL) { - free(styleStr); - } - if (fullname != NULL) { - free(fullname); - } - if (file != NULL) { - free(file); - } - (*FcPatternDestroy)(pattern); - (*FcFontSetDestroy)(fontset); - closeFontConfig(libfontconfig, JNI_FALSE); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - return; - } - fontCount = 0; - minGlyphs = 20; - if (debugMinGlyphsStr != NULL) { - int val = minGlyphs; - sscanf(debugMinGlyphsStr, "%5d", &val); - if (val >= 0 && val <= 65536) { - minGlyphs = val; - } - } - - for (j=0; jfonts[j]; - FcChar8 *fontformat; - FcCharSet *charset = NULL; - - fontformat = NULL; - (*FcPatternGetString)(fontPattern, FC_FONTFORMAT, 0, &fontformat); - /* We only want TrueType fonts but some Linuxes still depend - * on Type 1 fonts for some Locale support, so we'll allow - * them there. - */ - if (fontformat != NULL - && (strcmp((char*)fontformat, "TrueType") != 0) -#if defined(__linux__) || defined(_AIX) - && (strcmp((char*)fontformat, "Type 1") != 0) - && (strcmp((char*)fontformat, "CFF") != 0) -#endif - ) { - continue; - } - result = (*FcPatternGetCharSet)(fontPattern, - FC_CHARSET, 0, &charset); - if (result != FcResultMatch) { - free(family); - free(fullname); - free(styleStr); - free(file); - (*FcPatternDestroy)(pattern); - (*FcFontSetDestroy)(fontset); - if (prevUnionCharset != NULL) { - (*FcCharSetDestroy)(prevUnionCharset); - } - closeFontConfig(libfontconfig, JNI_FALSE); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - return; - } - - /* We don't want 20 or 30 fonts, so once we hit 10 fonts, - * then require that they really be adding value. Too many - * adversely affects load time for minimal value-add. - * This is still likely far more than we've had in the past. - */ - if (j==10) { - minGlyphs = 50; - } - if (unionCharset == NULL) { - unionCharset = charset; - } else { - if ((*FcCharSetSubtractCount)(charset, unionCharset) - > minGlyphs) { - unionCharset = (* FcCharSetUnion)(unionCharset, charset); - if (prevUnionCharset != NULL) { - (*FcCharSetDestroy)(prevUnionCharset); - } - prevUnionCharset = unionCharset; - } else { - continue; - } - } - - fontCount++; // found a font we will use. - (*FcPatternGetString)(fontPattern, FC_FILE, 0, &file[j]); - (*FcPatternGetString)(fontPattern, FC_FAMILY, 0, &family[j]); - (*FcPatternGetString)(fontPattern, FC_STYLE, 0, &styleStr[j]); - (*FcPatternGetString)(fontPattern, FC_FULLNAME, 0, &fullname[j]); - if (!includeFallbacks) { - break; - } - if (fontCount == 254) { - break; // CompositeFont will only use up to 254 slots from here. - } - } - - // Release last instance of CharSet union - if (prevUnionCharset != NULL) { - (*FcCharSetDestroy)(prevUnionCharset); - } - - /* Once we get here 'fontCount' is the number of returned fonts - * we actually want to use, so we create 'fcFontArr' of that length. - * The non-null entries of "family[]" etc are those fonts. - * Then loop again over all nfonts adding just those non-null ones - * to 'fcFontArr'. If its null (we didn't want the font) - * then we don't enter the main body. - * So we should never get more than 'fontCount' entries. - */ - if (includeFallbacks) { - fcFontArr = - (*env)->NewObjectArray(env, fontCount, fcFontClass, NULL); - if (IS_NULL(fcFontArr)) { - free(family); - free(fullname); - free(styleStr); - free(file); - (*FcPatternDestroy)(pattern); - (*FcFontSetDestroy)(fontset); - closeFontConfig(libfontconfig, JNI_FALSE); - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - return; - } - (*env)->SetObjectField(env,fcCompFontObj, fcAllFontsID, fcFontArr); - } - fn=0; - - for (j=0;jNewObject(env, fcFontClass, fcFontCons); - if (IS_NULL(fcFont)) break; - jstr = (*env)->NewStringUTF(env, (const char*)family[j]); - if (IS_NULL(jstr)) break; - (*env)->SetObjectField(env, fcFont, familyNameID, jstr); - (*env)->DeleteLocalRef(env, jstr); - if (file[j] != NULL) { - jstr = (*env)->NewStringUTF(env, (const char*)file[j]); - if (IS_NULL(jstr)) break; - (*env)->SetObjectField(env, fcFont, fontFileID, jstr); - (*env)->DeleteLocalRef(env, jstr); - } - if (styleStr[j] != NULL) { - jstr = (*env)->NewStringUTF(env, (const char*)styleStr[j]); - if (IS_NULL(jstr)) break; - (*env)->SetObjectField(env, fcFont, styleNameID, jstr); - (*env)->DeleteLocalRef(env, jstr); - } - if (fullname[j] != NULL) { - jstr = (*env)->NewStringUTF(env, (const char*)fullname[j]); - if (IS_NULL(jstr)) break; - (*env)->SetObjectField(env, fcFont, fullNameID, jstr); - (*env)->DeleteLocalRef(env, jstr); - } - if (fn==0) { - (*env)->SetObjectField(env, fcCompFontObj, - fcFirstFontID, fcFont); - } - if (includeFallbacks) { - (*env)->SetObjectArrayElement(env, fcFontArr, fn++,fcFont); - } else { - (*env)->DeleteLocalRef(env, fcFont); - break; - } - (*env)->DeleteLocalRef(env, fcFont); - } - } - if (includeFallbacks) { - (*env)->DeleteLocalRef(env, fcFontArr); - } - (*env)->DeleteLocalRef(env, fcCompFontObj); - (*FcFontSetDestroy)(fontset); - (*FcPatternDestroy)(pattern); - free(family); - free(styleStr); - free(fullname); - free(file); - } - - /* release resources and close the ".so" */ - - if (locale) { - (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); - } - closeFontConfig(libfontconfig, JNI_TRUE); -} diff --git a/src/java.desktop/unix/native/common/awt/systemscale/systemScale.c b/src/java.desktop/unix/native/common/awt/systemscale/systemScale.c index cb14db56a919..c9947c6799b4 100644 --- a/src/java.desktop/unix/native/common/awt/systemscale/systemScale.c +++ b/src/java.desktop/unix/native/common/awt/systemscale/systemScale.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,30 +24,248 @@ */ #include "systemScale.h" +#include "jni.h" +#include "jni_util.h" +#include "jvm_md.h" +#include +#include #include +#include +#include -static int getScale(const char *name) { +#ifdef __APPLE__ +# include +#endif + +typedef void* g_settings_schema_source_get_default(); +typedef void* g_settings_schema_source_ref(void *); +typedef void g_settings_schema_source_unref(void *); +typedef void* g_settings_schema_source_lookup(void *, char *, int); +typedef int g_settings_schema_has_key(void *, char *); +typedef void* g_settings_new_full(void *, void *, char *); +typedef void* g_settings_get_value(void *, char *); +typedef int g_variant_is_of_type(void *, char *); +typedef unsigned long g_variant_n_children(void *); +typedef void* g_variant_get_child_value(void *, unsigned long); +typedef void g_variant_unref(void *); +typedef char* g_variant_get_string(void *, unsigned long *); +typedef int g_variant_get_int32(void *); +typedef unsigned g_variant_get_uint32(void *); +typedef double g_variant_get_double(void *); + +static g_settings_schema_has_key* fp_g_settings_schema_has_key; +static g_settings_new_full* fp_g_settings_new_full; +static g_settings_get_value* fp_g_settings_get_value; +static g_variant_is_of_type* fp_g_variant_is_of_type; +static g_variant_n_children* fp_g_variant_n_children; +static g_variant_get_child_value* fp_g_variant_get_child_value; +static g_variant_get_string* fp_g_variant_get_string; +static g_variant_get_int32* fp_g_variant_get_int32; +static g_variant_get_uint32* fp_g_variant_get_uint32; +static g_variant_get_double* fp_g_variant_get_double; +static g_variant_unref* fp_g_variant_unref; + +static void* get_schema_value(char *name, char *key) { + static void *lib_handle; + static int initialized = 0; + static void * default_schema; + static g_settings_schema_source_lookup* schema_lookup; + void *schema = NULL, *fp = NULL; + if (!initialized) { + initialized = 1; + lib_handle = dlopen(JNI_LIB_NAME("gio-2.0"), RTLD_GLOBAL | RTLD_LAZY); + if (!lib_handle) { + CHECK_NULL_RETURN(lib_handle = + dlopen(VERSIONED_JNI_LIB_NAME("gio-2.0", "0"), + RTLD_GLOBAL | RTLD_LAZY), NULL); + } + CHECK_NULL_RETURN(fp_g_settings_schema_has_key = + (g_settings_schema_has_key*) + dlsym(lib_handle, "g_settings_schema_has_key"), NULL); + CHECK_NULL_RETURN(fp_g_settings_new_full = + (g_settings_new_full*) + dlsym(lib_handle, "g_settings_new_full"), NULL); + CHECK_NULL_RETURN(fp_g_settings_get_value = + (g_settings_get_value*) + dlsym(lib_handle, "g_settings_get_value"), NULL); + CHECK_NULL_RETURN(fp_g_variant_is_of_type = + (g_variant_is_of_type*) + dlsym(lib_handle, "g_variant_is_of_type"), NULL); + CHECK_NULL_RETURN(fp_g_variant_n_children = + (g_variant_n_children*) + dlsym(lib_handle, "g_variant_n_children"), NULL); + CHECK_NULL_RETURN(fp_g_variant_get_child_value = + (g_variant_get_child_value*) + dlsym(lib_handle, "g_variant_get_child_value"), NULL); + CHECK_NULL_RETURN(fp_g_variant_get_string = + (g_variant_get_string*) + dlsym(lib_handle, "g_variant_get_string"), NULL); + CHECK_NULL_RETURN(fp_g_variant_get_int32 = + (g_variant_get_int32*) + dlsym(lib_handle, "g_variant_get_int32"), NULL); + CHECK_NULL_RETURN(fp_g_variant_get_uint32 = + (g_variant_get_uint32*) + dlsym(lib_handle, "g_variant_get_uint32"), NULL); + CHECK_NULL_RETURN(fp_g_variant_get_double = + (g_variant_get_double*) + dlsym(lib_handle, "g_variant_get_double"), NULL); + CHECK_NULL_RETURN(fp_g_variant_unref = + (g_variant_unref*) + dlsym(lib_handle, "g_variant_unref"), NULL); + + fp = dlsym(lib_handle, "g_settings_schema_source_get_default"); + if (fp) { + default_schema = ((g_settings_schema_source_get_default*)fp)(); + } + if (default_schema) { + fp = dlsym(lib_handle, "g_settings_schema_source_ref"); + if (fp) { + ((g_settings_schema_source_ref*)fp)(default_schema); + } + } + schema_lookup = (g_settings_schema_source_lookup*) + dlsym(lib_handle, "g_settings_schema_source_lookup"); + } + + if (!default_schema || !schema_lookup) { + return NULL; + } + + schema = schema_lookup(default_schema, name, 1); + if (schema) { + if (fp_g_settings_schema_has_key(schema, key)) { + void *settings = fp_g_settings_new_full(schema, NULL, NULL); + if (settings) { + return fp_g_settings_get_value(settings, key); + } + } + } + return NULL; +} + +// When monitor framebuffer scaling enabled, compositor scales down monitor resolutions according to their scales, +// so that we're working in logical, not device pixels, just like in macOS. This approach is used for implementing +// fractional scaling, so basically this function tells you whether fractional scaling is enabled or not. +int isMonitorFramebufferScalingEnabled() { + int result = 0; + void* features = get_schema_value("org.gnome.mutter", "experimental-features"); + if (features) { + if (fp_g_variant_is_of_type(features, "as")) { + int numFeatures = fp_g_variant_n_children(features); + for (int i = 0; i < numFeatures; i++) { + void* feature = fp_g_variant_get_child_value(features, i); + if (feature) { + char* name = fp_g_variant_get_string(feature, NULL); + if (name && strcmp(name, "scale-monitor-framebuffer") == 0) { + result = 1; + } + fp_g_variant_unref(feature); + if (result) break; + } + } + } + fp_g_variant_unref(features); + } + return result; +} + + +static double getDesktopScale(char *output_name) { + double result = -1; + if(output_name) { + void *value = get_schema_value("com.ubuntu.user-interface", + "scale-factor"); + if (value) { + if(fp_g_variant_is_of_type(value, "a{si}")) { + int num = fp_g_variant_n_children(value); + int i = 0; + while (i < num) { + void *entry = fp_g_variant_get_child_value(value, i++); + if (entry) { + void *screen = fp_g_variant_get_child_value(entry, 0); + void *scale = fp_g_variant_get_child_value(entry, 1); + if (screen && scale) { + char *name = fp_g_variant_get_string(screen, NULL); + if (name && !strcmp(name, output_name)) { + result = fp_g_variant_get_int32(scale) / 8.; + } + fp_g_variant_unref(screen); + fp_g_variant_unref(scale); + } + fp_g_variant_unref(entry); + } + if (result > 0) { + break; + } + } + } + fp_g_variant_unref(value); + } + /* [tav] + if (result > 0) { + value = get_schema_value("com.canonical.Unity.Interface", + "text-scale-factor"); + if (value && fp_g_variant_is_of_type(value, "d")) { + result *= fp_g_variant_get_double(value); + fp_g_variant_unref(value); + } + }*/ + } + + if (result <= 0) { + void *value = get_schema_value("org.gnome.desktop.interface", + "scaling-factor"); + if (value && fp_g_variant_is_of_type(value, "u")) { + result = fp_g_variant_get_uint32(value); + fp_g_variant_unref(value); + } + } + + /* [tav] + if (result <= 0) { + void *value = get_schema_value("org.gnome.desktop.interface", + "text-scaling-factor"); + if (value && fp_g_variant_is_of_type(value, "d")) { + result = fp_g_variant_get_double(value); + fp_g_variant_unref(value); + } + }*/ + + return result; + +} + +double getScaleEnvVar(const char *name, double default_value) { char *uiScale = getenv(name); if (uiScale != NULL) { - double scale = strtod(uiScale, NULL); - if (scale < 1) { - return -1; + locale_t c_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + double scale = strtod_l(uiScale, NULL, c_locale); + freelocale(c_locale); + if (scale > 0) { + return scale; } - return (int) scale; } - return -1; + return default_value; } -double getNativeScaleFactor() { +double getNativeScaleFactor(char *output_name, double default_value) { static int scale = -2.0; + double native_scale = 0; + int gdk_scale = 0; if (scale == -2) { - scale = getScale("J2D_UISCALE"); + scale = (int)getScaleEnvVar("J2D_UISCALE", -1); } if (scale > 0) { return scale; } - return getScale("GDK_SCALE"); + native_scale = getDesktopScale(output_name); + + if (native_scale <= 0) { + native_scale = default_value; + } + + return native_scale; } diff --git a/src/java.desktop/unix/native/common/awt/systemscale/systemScale.h b/src/java.desktop/unix/native/common/awt/systemscale/systemScale.h index 2dc6e37c3a3d..619e6418272c 100644 --- a/src/java.desktop/unix/native/common/awt/systemscale/systemScale.h +++ b/src/java.desktop/unix/native/common/awt/systemscale/systemScale.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,9 @@ #include #include -double getNativeScaleFactor(); +double getNativeScaleFactor(char *output_name, double default_value); +double getScaleEnvVar(const char* var_name, double default_value); +int isMonitorFramebufferScalingEnabled(); #endif diff --git a/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.c b/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.c index b5232b7a912c..a345123c8d61 100644 --- a/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.c +++ b/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.c @@ -47,6 +47,64 @@ extern Bool usingXinerama; */ static GLXContext sharedContext = 0; +static jboolean +isSoftwareRenderer(void) +{ + jboolean isLLVMPipeline = JNI_TRUE; // Assume the worst + const int attributes[] = { + GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_RED_SIZE, 1, /* Request a single buffered color buffer */ + GLX_GREEN_SIZE, 1, /* with the maximum number of color bits */ + GLX_BLUE_SIZE, 1, /* for each component */ + None + }; + const int scrnum = DefaultScreen(awt_display); + int nconfs; + GLXFBConfig *fbConfigs = j2d_glXChooseFBConfig(awt_display, scrnum, + attributes, &nconfs); + if ((fbConfigs == NULL) || (nconfs <= 0)) { + return isLLVMPipeline; + } + + XVisualInfo *visinfo = j2d_glXGetVisualFromFBConfig(awt_display, fbConfigs[0]); + if (visinfo == NULL) { + XFree(fbConfigs); + return isLLVMPipeline; + } + + GLXContext ctx = j2d_glXCreateNewContext(awt_display, fbConfigs[0], + GLX_RGBA_TYPE, 0, GL_TRUE); + if (ctx == 0) { + XFree(visinfo); + XFree(fbConfigs); + return isLLVMPipeline; + } + + const Window root = RootWindow(awt_display, scrnum); + XSetWindowAttributes attr; + attr.background_pixel = 0; + attr.border_pixel = 0; + attr.colormap = XCreateColormap(awt_display, root, visinfo->visual, AllocNone); + attr.event_mask = StructureNotifyMask | ExposureMask; + const unsigned long mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; + const Window win = XCreateWindow(awt_display, root, 0, 0, 1, 1, + 0, visinfo->depth, InputOutput, + visinfo->visual, mask, &attr); + + if (j2d_glXMakeContextCurrent(awt_display, win, win, ctx)) { + const char * renderer = j2d_glXQueryCurrentRendererStringMESA(GLX_RENDERER_DEVICE_ID_MESA); + isLLVMPipeline = (strstr(renderer, "llvmpipe") != NULL); + } + + XDestroyWindow(awt_display, win); + j2d_glXDestroyContext(awt_display, ctx); + XFree(visinfo); + XFree(fbConfigs); + + return isLLVMPipeline; +} + /** * Attempts to initialize GLX and the core OpenGL library. For this method * to return JNI_TRUE, the following must be true: @@ -59,7 +117,7 @@ static GLXContext sharedContext = 0; * GraphicsConfig in the environment. */ static jboolean -GLXGC_InitGLX() +GLXGC_InitGLX(jboolean glxRecommended) { int errorbase, eventbase; const char *version; @@ -105,6 +163,14 @@ GLXGC_InitGLX() return JNI_FALSE; } + if (glxRecommended) { + if (isSoftwareRenderer()) { + // There are severe glitches when using software renderer, so + // if the OpenGL pipeline is merely recommended and not forced, + // report that it is not useable. + return JNI_FALSE; + } + } return JNI_TRUE; } @@ -115,7 +181,7 @@ GLXGC_InitGLX() * calling this method. */ jboolean -GLXGC_IsGLXAvailable() +GLXGC_IsGLXAvailable(jboolean glxRecommended) { static jboolean glxAvailable = JNI_FALSE; static jboolean firstTime = JNI_TRUE; @@ -123,7 +189,7 @@ GLXGC_IsGLXAvailable() J2dTraceLn(J2D_TRACE_INFO, "GLXGC_IsGLXAvailable"); if (firstTime) { - glxAvailable = GLXGC_InitGLX(); + glxAvailable = GLXGC_InitGLX(glxRecommended); firstTime = JNI_FALSE; } @@ -339,7 +405,7 @@ GLXGC_FindBestVisual(JNIEnv *env, jint screen) J2dRlsTraceLn1(J2D_TRACE_INFO, "GLXGC_FindBestVisual: scn=%d", screen); - if (!GLXGC_IsGLXAvailable()) { + if (!GLXGC_IsGLXAvailable(JNI_FALSE)) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXGC_FindBestVisual: could not initialize GLX"); return 0; diff --git a/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.h b/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.h index e81f6a8d7d1b..cc903db9481c 100644 --- a/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.h +++ b/src/java.desktop/unix/native/common/java2d/opengl/GLXGraphicsConfig.h @@ -86,7 +86,7 @@ typedef struct _GLXCtxInfo { GLXPbuffer scratchSurface; } GLXCtxInfo; -jboolean GLXGC_IsGLXAvailable(); +jboolean GLXGC_IsGLXAvailable(jboolean glxRecommended); VisualID GLXGC_FindBestVisual(JNIEnv *env, jint screen); #endif /* HEADLESS */ diff --git a/src/java.desktop/unix/native/common/java2d/opengl/OGLFuncs_md.h b/src/java.desktop/unix/native/common/java2d/opengl/OGLFuncs_md.h index 5f478f69070c..c9408383ebdf 100644 --- a/src/java.desktop/unix/native/common/java2d/opengl/OGLFuncs_md.h +++ b/src/java.desktop/unix/native/common/java2d/opengl/OGLFuncs_md.h @@ -68,6 +68,11 @@ typedef int (GLAPIENTRY *glXQueryContextType)(Display *dpy, GLXContext ctx, int typedef void (GLAPIENTRY *glXSelectEventType)(Display *dpy, GLXDrawable draw, unsigned long event_mask); typedef void (GLAPIENTRY *glXGetSelectedEventType)(Display *dpy, GLXDrawable draw, unsigned long *event_mask); +/** + * These are required for just one purpose of checking the available renderer in isSoftwareRenderer() + */ +typedef const char* (GLAPIENTRY *glXQueryCurrentRendererStringMESAType) (int attribute); + /** * GLX extension functions */ @@ -165,7 +170,8 @@ do { \ OGL_##action##_FUNC(glXMakeContextCurrent); \ OGL_##action##_FUNC(glXGetCurrentReadDrawable); \ OGL_##action##_FUNC(glXQueryContext); \ - OGL_##action##_FUNC(glXSelectEvent); \ + OGL_##action##_FUNC(glXSelectEvent); \ + OGL_##action##_FUNC(glXQueryCurrentRendererStringMESA); \ OGL_##action##_FUNC(glXGetSelectedEvent); #define OGL_EXPRESS_PLATFORM_EXT_FUNCS(action) diff --git a/src/java.desktop/unix/native/common/java2d/x11/X11FontScaler_md.c b/src/java.desktop/unix/native/common/java2d/x11/X11FontScaler_md.c index 2ab6f287b690..16a2d8bcf300 100644 --- a/src/java.desktop/unix/native/common/java2d/x11/X11FontScaler_md.c +++ b/src/java.desktop/unix/native/common/java2d/x11/X11FontScaler_md.c @@ -289,6 +289,9 @@ JNIEXPORT jlong JNICALL AWTFontGenerateImage(AWTFont pFont, AWTChar2b* xChar) { glyphInfo->cellInfo = NULL; glyphInfo->width = width; glyphInfo->height = height; + glyphInfo->subpixelResolutionX = 1; + glyphInfo->subpixelResolutionY = 1; + glyphInfo->format = sun_font_StrikeCache_PIXEL_FORMAT_GREYSCALE; glyphInfo->topLeftX = xcs.lbearing; glyphInfo->topLeftY = -xcs.ascent; glyphInfo->advanceX = xcs.width; diff --git a/src/java.desktop/unix/native/common/java2d/x11/X11SurfaceData.c b/src/java.desktop/unix/native/common/java2d/x11/X11SurfaceData.c index 36d6feb6029a..c90c43933513 100644 --- a/src/java.desktop/unix/native/common/java2d/x11/X11SurfaceData.c +++ b/src/java.desktop/unix/native/common/java2d/x11/X11SurfaceData.c @@ -37,6 +37,7 @@ #include "awt_GraphicsEnv.h" #include +#include #ifndef HEADLESS @@ -1116,9 +1117,9 @@ X11SD_SwapBytes(X11SDOps *xsdo, XImage * img, int depth, int bpp) { } } -static XImage * X11SD_GetImage(JNIEnv *env, X11SDOps *xsdo, +static XImage * X11SD_GetImageReal(JNIEnv *env, X11SDOps *xsdo, SurfaceDataBounds *bounds, - jint lockFlags) + jint lockFlags, jboolean* usedXGetImage) { int x, y, w, h, maxWidth, maxHeight; int scan; @@ -1175,12 +1176,14 @@ static XImage * X11SD_GetImage(JNIEnv *env, X11SDOps *xsdo, } if (img == NULL) { img = XGetImage(awt_display, drawable, x, y, w, h, -1, ZPixmap); + if (usedXGetImage != NULL) *usedXGetImage = True; if (img != NULL) { img->obdata = NULL; } } #else img = XGetImage(awt_display, drawable, x, y, w, h, -1, ZPixmap); + if (usedXGetImage != NULL) *usedXGetImage = True; #endif /* MITSHM */ if (img == NULL) { SurfaceDataBounds temp; @@ -1280,6 +1283,177 @@ static XImage * X11SD_GetImage(JNIEnv *env, X11SDOps *xsdo, return img; } +static jboolean isDisplayLocal() { + static jboolean isLocal = True; + static jboolean isLocalSet = False; + + if (!isLocalSet) { + isLocalSet = True; + + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + jboolean sawException = JNI_FALSE; + jobject ge = JNU_CallStaticMethodByName(env, &sawException, "java/awt/GraphicsEnvironment", + "getLocalGraphicsEnvironment", "()Ljava/awt/GraphicsEnvironment;").l; + CHECK_NULL_RETURN(ge, True); + if (!sawException) { + jclass sgeCls = (*env)->FindClass(env, "sun/java2d/SunGraphicsEnvironment"); + CHECK_NULL_RETURN(sgeCls, True); + if ((*env)->IsInstanceOf(env, ge, sgeCls)) { + isLocal = JNU_CallMethodByName(env, NULL, ge, "isDisplayLocal", "()Z").z; + } + } + } + + return isLocal; +} + +// Auxiliary data structure to keep info when faking XGetImage() calls +struct X11GetImageInfo { + unsigned long bgPixel; +}; + +// All the possible settings for the "remote.x11.workaround" property. +#define WORKAROUND_PROPERTY_NAME "remote.x11.workaround" + +// Corresponds to property value "false" and means that the workaround will not be used at all +#define WORKAROUND_DONT_USE 0 + +// Corresponds to property value "true" and forces the workaround to be used even if not needed or not useful +#define WORKAROUND_USE 1 + +// This is the default setting and is used when the property wasn't specified or is neither "true" nor "false". +// Enables the workaround only when XGetImage() calls become "slow", but once enabled, never switches +// the workaround off. +#define WORKAROUND_AUTO 2 + +// Returns one of WORKAROUND_... values based on "remote.x11.workaround" VM property. +// The default is WORKAROUND_AUTO. +static int getRemoteX11WorkaroundProperty() { + int ret = WORKAROUND_AUTO; + + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + jstring name = (*env)->NewStringUTF(env, WORKAROUND_PROPERTY_NAME); + CHECK_NULL_RETURN(name, ret); + jstring jPropValue = JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;", name).l; + if (jPropValue != NULL) { + const char * utf8string = (*env)->GetStringUTFChars(env, jPropValue, NULL); + if (utf8string != NULL) { + if (strcmp(utf8string, "true") == 0) { + ret = WORKAROUND_USE; + } else if (strcmp(utf8string, "false") == 0){ + ret = WORKAROUND_DONT_USE; + } + } + (*env)->ReleaseStringUTFChars(env, jPropValue, utf8string); + } + (*env)->DeleteLocalRef(env, name); + + return ret; +} + +// Verifies if the workaround for slow XGetImage() performance needs to be used based on the image given and +// the difference between start and finish times. +// Collects the information necessary for the workaround to work into the 'info' output argument. +// Returns False - use workaround, True - use real XGetImage(). +static jboolean shouldUseRealGetImage(int workaroundPropertyValue, + XImage* img, + const struct timespec* timeStart, + const struct timespec* timeFinish, + struct X11GetImageInfo* info) { + static int timesCalled = 0; + if (timesCalled <= 4) { + timesCalled++; + // Skip first several calls because these aren't representative (showing the splash screen, etc). + return True; + } + + // NB: local X server time varies between 0 (most of the time) and 40ms (rarely). Remote X server times naturally + // vary wildly. + const long long timeMillis = (timeFinish->tv_sec - timeStart->tv_sec)*1000 + + (timeFinish->tv_nsec - timeStart->tv_nsec)/1000000; + + const jboolean considerWorkaround = (workaroundPropertyValue == WORKAROUND_USE || timeMillis > 20); + if (considerWorkaround) { + if (img != NULL && img->data != NULL && img->width > 3 && img->height > 3) { + unsigned long px1 = XGetPixel(img, 0, 0); + unsigned long px2 = XGetPixel(img, 1, 1); + unsigned long px3 = XGetPixel(img, 2, 2); + if (px1 == px2 && px2 == px3) { + // Consider this one to be a good candidate for the background pixel because a short diagonal + // of this image has the same color. + info->bgPixel = px1; + + if (workaroundPropertyValue == WORKAROUND_USE) { + fprintf(stderr, "[JetBrains Runtime] Switched off alpha compositing of images because " + "-D" WORKAROUND_PROPERTY_NAME "=true was specified.\n"); + } else { + fprintf(stderr, "[JetBrains Runtime] Detected slow X11, switched off alpha compositing of images. " + "Control with -D" WORKAROUND_PROPERTY_NAME "={true|false|auto}.\n"); + } + return False; + } + } + } + + return True; +} + +// Paints every pixel of the given image with the given color. +static inline void paintImageWithColor(XImage* img, unsigned long bgColor) { + if (img != NULL && img->data != NULL) { + for(int y = 0; y < img->height; y++) { + for(int x = 0; x < img->width; x++) { + XPutPixel(img, x, y, bgColor); + } + } + } +} + +// Overrides "real" X11SD_GetImage() in order to measure performance and decide whether a workaround for slow +// remote X11 is needed. In that case, routes the call to a "fake" XGetImage() that merely creates an empty image +// with a background obtained from one of the "slow", but real XGetImage() calls. +static XImage * X11SD_GetImage(JNIEnv *env, X11SDOps *xsdo, + SurfaceDataBounds *bounds, + jint lockFlags) { + static struct X11GetImageInfo info = { 0 }; + static int workaroundPropertyValue = WORKAROUND_DONT_USE; + static jboolean useRealGetImage = True; + static jboolean isFirstTime = True; + if (isFirstTime) { + isFirstTime = False; + workaroundPropertyValue = getRemoteX11WorkaroundProperty(); + if (workaroundPropertyValue != WORKAROUND_USE && isDisplayLocal()) { + // Even if we detect XGetImage() slowness, switching to a fake one will not improve the performance of a + // local X11 connection. Switch to "don't use" for the local one unless we are forced to use by + // the VM property. + workaroundPropertyValue = WORKAROUND_DONT_USE; + } + } + + XImage *resImg = NULL; + if (useRealGetImage) { + struct timespec timeStart, timeFinish; + jboolean usedXGetImage = False; + + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &timeStart); + resImg = X11SD_GetImageReal(env, xsdo, bounds, lockFlags, &usedXGetImage); + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &timeFinish); + + if (workaroundPropertyValue != WORKAROUND_DONT_USE && usedXGetImage) { + useRealGetImage = shouldUseRealGetImage(workaroundPropertyValue, resImg, &timeStart, &timeFinish, &info); + } + } else { + const jint fakeLockFlags = 0; // forces creation of a new image instead of fetching it with XGetImage() + resImg = X11SD_GetImageReal(env, xsdo, bounds, fakeLockFlags, NULL); + + paintImageWithColor(resImg, info.bgPixel); + } + + return resImg; +} + void X11SD_DisposeOrCacheXImage(XImage * image) { /* REMIND: might want to check if the new image worth caching. */ /* Cache only shared images. Passed image is assumed to be non-null. */ diff --git a/src/java.desktop/unix/native/common/java2d/x11/X11TextRenderer_md.c b/src/java.desktop/unix/native/common/java2d/x11/X11TextRenderer_md.c index c7aff6f34c84..e0e9eb6ca8c4 100644 --- a/src/java.desktop/unix/native/common/java2d/x11/X11TextRenderer_md.c +++ b/src/java.desktop/unix/native/common/java2d/x11/X11TextRenderer_md.c @@ -103,7 +103,7 @@ static jboolean checkPixmap(JNIEnv *env, AwtGraphicsConfigDataPtr cData) static void FillBitmap(XImage *theImage, ImageRef *glyphs, jint totalGlyphs, jint clipLeft, jint clipTop, - jint clipRight, jint clipBottom) + jint clipRight, jint clipBottom, jboolean *allGlyphsRendered) { int glyphCounter; int scan = theImage->bytes_per_line; @@ -124,12 +124,17 @@ static void FillBitmap(XImage *theImage, if (!pixels) { continue; } - rowBytes = glyphs[glyphCounter].width; + rowBytes = glyphs[glyphCounter].rowBytes; left = glyphs[glyphCounter].x; top = glyphs[glyphCounter].y; width = glyphs[glyphCounter].width; height = glyphs[glyphCounter].height; + if ((int) rowBytes == width * 4) { // Skip colored glyphs + *allGlyphsRendered = JNI_FALSE; + continue; + } + /* if any clipping required, modify parameters now */ right = left + width; bottom = top + height; @@ -206,7 +211,7 @@ static void FillBitmap(XImage *theImage, JNIEXPORT void JNICALL AWTDrawGlyphList(JNIEnv *env, jobject xtr, jlong dstData, jlong gc, - SurfaceDataBounds *bounds, ImageRef *glyphs, jint totalGlyphs) + SurfaceDataBounds *bounds, ImageRef *glyphs, jint totalGlyphs, jboolean *allGlyphsRendered) { #ifndef HEADLESS GC xgc, theGC; @@ -259,7 +264,7 @@ AWTDrawGlyphList(JNIEnv *env, jobject xtr, FillBitmap(theImage, glyphs, totalGlyphs, - cx1, cy1, cx2, cy2); + cx1, cy1, cx2, cy2, allGlyphsRendered); // NOTE: Since we are tiling around by BM_W, BM_H offsets // and thePixmap is BM_W x BM_H, we do not have to move diff --git a/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c b/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c index b2dedca351c5..fb3cee7d4141 100644 --- a/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c +++ b/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c @@ -32,6 +32,14 @@ #include #include "gdefs.h" +#if defined(_WIN32) || defined(MACOSX) +#define DISABLE_FONTCONFIG +#endif + +#ifndef DISABLE_FONTCONFIG +#include "fontconfigmanager.h" +#endif + #include #include @@ -160,5 +168,8 @@ AWT_OnLoad(JavaVM *vm, void *reserved) JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { +#ifndef DISABLE_FONTCONFIG + openFontConfig(); +#endif return AWT_OnLoad(vm, reserved); } diff --git a/src/java.desktop/unix/native/libawt/awt/fontconfigmanager.c b/src/java.desktop/unix/native/libawt/awt/fontconfigmanager.c new file mode 100644 index 000000000000..32360f1a145b --- /dev/null +++ b/src/java.desktop/unix/native/libawt/awt/fontconfigmanager.c @@ -0,0 +1,896 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include + +#if defined(MACOSX) +#define DISABLE_FONTCONFIG +#endif + +#ifndef DISABLE_FONTCONFIG + +#if defined(__linux__) +#include +#endif /* __linux__ */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fontconfigmanager.h" + +#ifndef HEADLESS +#include +#else +/* locks ought to be included from awt.h */ +#define AWT_LOCK() +#define AWT_UNLOCK() +#endif /* !HEADLESS */ + +#define FONTCONFIG_DLL_VERSIONED VERSIONED_JNI_LIB_NAME("fontconfig", "1") +#define FONTCONFIG_DLL JNI_LIB_NAME("fontconfig") + +#if defined( __linux__) +/* All the known interesting locations we have discovered on + * various flavors of Linux + */ +static char *fullLinuxFontPath[] = { + "/usr/X11R6/lib/X11/fonts/TrueType", /* RH 7.1+ */ + "/usr/X11R6/lib/X11/fonts/truetype", /* SuSE */ + "/usr/X11R6/lib/X11/fonts/tt", + "/usr/X11R6/lib/X11/fonts/TTF", + "/usr/X11R6/lib/X11/fonts/OTF", /* RH 9.0 (but empty!) */ + "/usr/share/fonts/ja/TrueType", /* RH 7.2+ */ + "/usr/share/fonts/truetype", + "/usr/share/fonts/ko/TrueType", /* RH 9.0 */ + "/usr/share/fonts/zh_CN/TrueType", /* RH 9.0 */ + "/usr/share/fonts/zh_TW/TrueType", /* RH 9.0 */ + "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType", /* Debian */ + "/usr/X11R6/lib/X11/fonts/Type1", + "/usr/share/fonts/default/Type1", /* RH 9.0 */ + NULL, /* terminates the list */ +}; +#elif defined(_AIX) +static char *fullAixFontPath[] = { + "/usr/lpp/X11/lib/X11/fonts/Type1", /* from X11.fnt.iso_T1 */ + "/usr/lpp/X11/lib/X11/fonts/TrueType", /* from X11.fnt.ucs.ttf */ + NULL, /* terminates the list */ +}; +#endif + +typedef FcConfig* (*FcInitLoadConfigFuncType)(); +typedef FcPattern* (*FcPatternBuildFuncType)(FcPattern *orig, ...); +typedef FcObjectSet* (*FcObjectSetFuncType)(const char *first, ...); +typedef FcFontSet* (*FcFontListFuncType)(FcConfig *config, FcPattern *p, FcObjectSet *os); +typedef FcResult (*FcPatternGetBoolFuncType)(const FcPattern *p, const char *object, int n, FcBool *b); +typedef FcResult (*FcPatternGetIntegerFuncType)(const FcPattern *p, const char *object, int n, int *i); +typedef FcResult (*FcPatternGetStringFuncType)(const FcPattern *p, const char *object, int n, FcChar8 ** s); +typedef FcChar8* (*FcStrDirnameFuncType)(const FcChar8 *file); +typedef void (*FcPatternDestroyFuncType)(FcPattern *p); +typedef void (*FcObjectSetDestroyFuncType)(FcObjectSet *os); +typedef void (*FcFontSetDestroyFuncType)(FcFontSet *s); +typedef FcPattern* (*FcNameParseFuncType)(const FcChar8 *name); +typedef FcBool (*FcPatternAddStringFuncType)(FcPattern *p, const char *object, const FcChar8 *s); +typedef FcBool (*FcPatternAddDoubleFuncType)(FcPattern *p, const char *object, double v); +typedef void (*FcDefaultSubstituteFuncType)(FcPattern *p); +typedef FcBool (*FcConfigSubstituteFuncType)(FcConfig *config, FcPattern *p, FcMatchKind kind); +typedef FcPattern* (*FcFontMatchFuncType)(FcConfig *config, FcPattern *p, FcResult *result); +typedef FcFontSet* (*FcFontSetCreateFuncType)(); +typedef FcBool (*FcFontSetAddFuncType)(FcFontSet *s, FcPattern *font); +typedef FcResult (*FcPatternGetCharSetFuncType)(FcPattern *p, const char *object, int n, FcCharSet **c); +typedef FcFontSet* (*FcFontSortFuncType)(FcConfig *config, FcPattern *p, FcBool trim, FcCharSet **csp, FcResult *result); +typedef FcCharSet* (*FcCharSetUnionFuncType)(const FcCharSet *a, const FcCharSet *b); +typedef FcCharSet* (*FcCharSetDestroyFuncType)(FcCharSet *fcs); +typedef FcChar32 (*FcCharSetSubtractCountFuncType)(const FcCharSet *a, const FcCharSet *b); +typedef int (*FcGetVersionFuncType)(); +typedef FcStrList* (*FcConfigGetCacheDirsFuncType)(FcConfig *config); +typedef FcChar8* (*FcStrListNextFuncType)(FcStrList *list); +typedef FcChar8* (*FcStrListDoneFuncType)(FcStrList *list); +typedef FcChar8* (*FcPatternFormatFuncType)(FcPattern *pat, const FcChar8 *format); +typedef void (*FcStrFreeFuncType)(FcChar8 *str); + +static FcInitLoadConfigFuncType fcInitLoadConfig; +static FcPatternBuildFuncType fcPatternBuild; +static FcObjectSetFuncType fcObjectSetBuild; +static FcFontListFuncType fcFontList; +static FcStrDirnameFuncType fcStrDirname; +static FcObjectSetDestroyFuncType fcObjectSetDestroy; +static FcPatternGetBoolFuncType fcPatternGetBool; +static FcPatternGetIntegerFuncType fcPatternGetInteger; +static FcNameParseFuncType fcNameParse; +static FcPatternAddStringFuncType fcPatternAddString; +static FcPatternAddDoubleFuncType fcPatternAddDouble; +static FcConfigSubstituteFuncType fcConfigSubstitute; +static FcDefaultSubstituteFuncType fcDefaultSubstitute; +static FcFontMatchFuncType fcFontMatch; +static FcPatternGetStringFuncType fcPatternGetString; +static FcPatternDestroyFuncType fcPatternDestroy; +static FcPatternGetCharSetFuncType fcPatternGetCharSet; +static FcFontSortFuncType fcFontSort; +static FcFontSetDestroyFuncType fcFontSetDestroy; +static FcCharSetUnionFuncType fcCharSetUnion; +static FcCharSetDestroyFuncType fcCharSetDestroy; +static FcCharSetSubtractCountFuncType fcCharSetSubtractCount; +static FcGetVersionFuncType fcGetVersion; +static FcConfigGetCacheDirsFuncType fcConfigGetCacheDirs; +static FcStrListNextFuncType fcStrListNext; +static FcStrListDoneFuncType fcStrListDone; +static FcPatternFormatFuncType fcPatternFormat; +static FcStrFreeFuncType fcStrFree; + +static void *libfontconfig = NULL; + +static void closeFontConfig() { + + if (libfontconfig != NULL) { + dlclose(libfontconfig); + libfontconfig = NULL; + } +} + +void openFontConfig() { + + char *homeEnv; + static char *homeEnvStr = "HOME="; /* must be static */ + + /* Private workaround to not use fontconfig library. + * May be useful during testing/debugging + */ + char *useFC = getenv("USE_J2D_FONTCONFIG"); + if (useFC != NULL && !strcmp(useFC, "no")) { + return; + } + +#if defined(_AIX) + /* On AIX, fontconfig is not a standard package supported by IBM. + * instead it has to be installed from the "AIX Toolbox for Linux Applications" + * site http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html + * and will be installed under /opt/freeware/lib/libfontconfig.a. + * Notice that the archive contains the real 32- and 64-bit shared libraries. + * We first try to load 'libfontconfig.so' from the default library path in the + * case the user has installed a private version of the library and if that + * doesn't succeed, we try the version from /opt/freeware/lib/libfontconfig.a + */ + libfontconfig = dlopen("libfontconfig.so", RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + libfontconfig = dlopen("/opt/freeware/lib/libfontconfig.a(libfontconfig.so.1)", RTLD_MEMBER|RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + return; + } + } +#else + /* 64 bit sparc should pick up the right version from the lib path. + * New features may be added to libfontconfig, this is expected to + * be compatible with old features, but we may need to start + * distinguishing the library version, to know whether to expect + * certain symbols - and functionality - to be available. + * Also add explicit search for .so.1 in case .so symlink doesn't exist. + */ + libfontconfig = dlopen(FONTCONFIG_DLL_VERSIONED, RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + libfontconfig = dlopen(FONTCONFIG_DLL, RTLD_LOCAL|RTLD_LAZY); + if (libfontconfig == NULL) { + return; + } + } +#endif + + /* Version 1.0 of libfontconfig crashes if HOME isn't defined in + * the environment. This should generally never happen, but we can't + * control it, and can't control the version of fontconfig, so iff + * its not defined we set it to an empty value which is sufficient + * to prevent a crash. I considered unsetting it before exit, but + * it doesn't appear to work on Solaris, so I will leave it set. + */ + homeEnv = getenv("HOME"); + if (homeEnv == NULL) { + putenv(homeEnvStr); + } + + fcPatternBuild = (FcPatternBuildFuncType)dlsym(libfontconfig, "FcPatternBuild"); + fcObjectSetBuild = (FcObjectSetFuncType)dlsym(libfontconfig, "FcObjectSetBuild"); + fcFontList = (FcFontListFuncType)dlsym(libfontconfig, "FcFontList"); + fcStrDirname = (FcStrDirnameFuncType)dlsym(libfontconfig, "FcStrDirname"); + fcObjectSetDestroy = (FcObjectSetDestroyFuncType)dlsym(libfontconfig, "FcObjectSetDestroy"); + fcPatternGetBool = (FcPatternGetBoolFuncType) dlsym(libfontconfig, "FcPatternGetBool"); + fcPatternGetInteger = (FcPatternGetIntegerFuncType)dlsym(libfontconfig, "FcPatternGetInteger"); + fcNameParse = (FcNameParseFuncType)dlsym(libfontconfig, "FcNameParse"); + fcPatternAddString = (FcPatternAddStringFuncType)dlsym(libfontconfig, "FcPatternAddString"); + fcPatternAddDouble = (FcPatternAddDoubleFuncType)dlsym(libfontconfig, "FcPatternAddDouble"); + fcConfigSubstitute = (FcConfigSubstituteFuncType)dlsym(libfontconfig, "FcConfigSubstitute"); + fcDefaultSubstitute = (FcDefaultSubstituteFuncType)dlsym(libfontconfig, "FcDefaultSubstitute"); + fcFontMatch = (FcFontMatchFuncType)dlsym(libfontconfig, "FcFontMatch"); + fcPatternGetString = (FcPatternGetStringFuncType)dlsym(libfontconfig, "FcPatternGetString"); + fcPatternDestroy = (FcPatternDestroyFuncType)dlsym(libfontconfig, "FcPatternDestroy"); + fcPatternGetCharSet = (FcPatternGetCharSetFuncType)dlsym(libfontconfig, "FcPatternGetCharSet"); + fcFontSort = (FcFontSortFuncType)dlsym(libfontconfig, "FcFontSort"); + fcFontSetDestroy = (FcFontSetDestroyFuncType)dlsym(libfontconfig, "FcFontSetDestroy"); + fcCharSetUnion = (FcCharSetUnionFuncType)dlsym(libfontconfig, "FcCharSetUnion"); + fcCharSetDestroy = (FcCharSetDestroyFuncType)dlsym(libfontconfig, "FcCharSetDestroy"); + fcCharSetSubtractCount = (FcCharSetSubtractCountFuncType)dlsym(libfontconfig, "FcCharSetSubtractCount"); + fcGetVersion = (FcGetVersionFuncType)dlsym(libfontconfig, "FcGetVersion"); + fcConfigGetCacheDirs = (FcConfigGetCacheDirsFuncType)dlsym(libfontconfig, "FcConfigGetCacheDirs"); + fcStrListNext = (FcStrListNextFuncType)dlsym(libfontconfig, "FcStrListNext"); + fcStrListDone = (FcStrListDoneFuncType)dlsym(libfontconfig, "FcStrListDone"); + fcPatternFormat = (FcPatternFormatFuncType)dlsym(libfontconfig, "FcPatternFormat"); + fcStrFree = (FcStrFreeFuncType)dlsym(libfontconfig, "FcStrFree"); + + if (fcPatternBuild == NULL || fcObjectSetBuild == NULL || fcFontList == NULL || fcStrDirname == NULL || + fcObjectSetDestroy == NULL || fcPatternGetBool == NULL || fcPatternGetInteger == NULL || fcNameParse == NULL || + fcPatternAddString == NULL || fcConfigSubstitute == NULL || fcDefaultSubstitute == NULL || fcFontMatch == NULL || + fcPatternGetString == NULL || fcPatternDestroy == NULL || fcPatternGetCharSet == NULL || fcFontSort == NULL || + fcFontSetDestroy == NULL || fcCharSetUnion == NULL || fcCharSetDestroy == NULL || fcCharSetSubtractCount == NULL || + fcGetVersion == NULL || fcConfigGetCacheDirs == NULL || fcStrListNext == NULL || fcStrListDone == NULL || + fcPatternAddDouble == NULL || fcPatternFormat == NULL || fcStrFree == NULL) { + closeFontConfig(); + } +} + +static bool usingFontConfig() { + return (libfontconfig != NULL) ? true : false; +} + +JNIEXPORT void JNICALL +JNI_OnUnload(JavaVM *vm, void *reserved) { + closeFontConfig(); +} + +/* These are copied from sun.awt.SunHints. + * Consider initialising them as ints using JNI for more robustness. + */ +#define TEXT_AA_OFF 1 +#define TEXT_AA_ON 2 +#define TEXT_AA_LCD_HRGB 4 +#define TEXT_AA_LCD_HBGR 5 +#define TEXT_AA_LCD_VRGB 6 +#define TEXT_AA_LCD_VBGR 7 + +typedef FcResult (*FcPatternGetValueFuncType)(const FcPattern *p, const char *object, int n, void *b); + +static void setRenderingFontHintsField(FcPatternGetValueFuncType fcPatternGetValue, FcPattern* matchPattern, + const char* property, int* value) { + if (FcResultMatch != (*fcPatternGetValue)(matchPattern, property, 0, value)) { + *value = -1; + } +} + +JNIEXPORT int setupRenderingFontHints +(const char* fcName, const char* locale, double size, RenderingFontHints *renderingFontHints) { + + FcPattern *pattern, *matchPattern; + FcResult result; + + if (usingFontConfig() == false) { + return -1; + } + + if (fcName == NULL) { + return -1; + } + pattern = (*fcNameParse)((FcChar8 *)fcName); + if (locale != NULL) { + (*fcPatternAddString)(pattern, FC_LANG, (unsigned char*)locale); + } + if (size != 0) { + (*fcPatternAddDouble)(pattern, FC_SIZE, size); + } + (*fcConfigSubstitute)(NULL, pattern, FcMatchPattern); + (*fcDefaultSubstitute)(pattern); + matchPattern = (*fcFontMatch)(NULL, pattern, &result); + /* Perhaps should call FcFontRenderPrepare() here as some pattern + * elements might change as a result of that call, but I'm not seeing + * any difference in testing. + */ + if (matchPattern) { + // Extract values from result + setRenderingFontHintsField((FcPatternGetValueFuncType)(fcPatternGetBool), matchPattern, FC_HINTING, + &renderingFontHints->fcHinting); + setRenderingFontHintsField((FcPatternGetValueFuncType)(fcPatternGetInteger), matchPattern, FC_HINT_STYLE, + &renderingFontHints->fcHintStyle); + setRenderingFontHintsField((FcPatternGetValueFuncType)(fcPatternGetBool), matchPattern, FC_ANTIALIAS, + &renderingFontHints->fcAntialias); + setRenderingFontHintsField((FcPatternGetValueFuncType)(fcPatternGetBool), matchPattern, FC_AUTOHINT, + &renderingFontHints->fcAutohint); + setRenderingFontHintsField((FcPatternGetValueFuncType)(fcPatternGetInteger), matchPattern, FC_RGBA, + &renderingFontHints->fcRGBA); + setRenderingFontHintsField((FcPatternGetValueFuncType)(fcPatternGetInteger), matchPattern, FC_LCD_FILTER, + &renderingFontHints->fcLCDFilter); + + (*fcPatternDestroy)(matchPattern); + } + (*fcPatternDestroy)(pattern); + + return 0; +} + +#endif + +JNIEXPORT char **getFontConfigLocations() { + +#ifdef DISABLE_FONTCONFIG + return NULL; +#else + if (usingFontConfig() == false) { + return NULL; + } + + char **fontdirs; + int numdirs = 0; + + FcPattern *pattern; + FcObjectSet *objset; + FcFontSet *fontSet; + int i, f, found; + + /* Make calls into the fontconfig library to build a search for + * outline fonts, and to get the set of full file paths from the matches. + * This set is returned from the call to fcFontList(..) + * We allocate an array of char* pointers sufficient to hold all + * the matches + 1 extra which ensures there will be a NULL after all + * valid entries. + * We call fcStrDirname strip the file name from the path, and + * check if we have yet seen this directory. If not we add a pointer to + * it into our array of char*. Note that fcStrDirname returns newly + * allocated storage so we can use this in the return char** value. + * Finally we clean up, freeing allocated resources, and return the + * array of unique directories. + */ + pattern = (*fcPatternBuild)(NULL, FC_OUTLINE, FcTypeBool, FcTrue, NULL); + objset = (*fcObjectSetBuild)(FC_FILE, NULL); + fontSet = (*fcFontList)(NULL, pattern, objset); + if (fontSet == NULL) { + /* fcFontList() may return NULL if fonts are not installed. */ + fontdirs = NULL; + } else { + fontdirs = (char**)calloc(fontSet->nfont+1, sizeof(char*)); + if (fontdirs == NULL) { + (*fcFontSetDestroy)(fontSet); + goto cleanup; + } + for (f=0; f < fontSet->nfont; f++) { + FcChar8 *file; + FcChar8 *dir; + if ((*fcPatternGetString)(fontSet->fonts[f], FC_FILE, 0, &file) == FcResultMatch) { + dir = (*fcStrDirname)(file); + found = 0; + for (i=0;iFindClass(env, "sun/font/FontConfigManager$FontConfigInfo")); + CHECK_NULL(fcCompFontClass = (*env)->FindClass(env, "sun/font/FontConfigManager$FcCompFont")); + CHECK_NULL(fcFontClass = (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigFont")); + CHECK_NULL(fcVersionID = (*env)->GetFieldID(env, fcInfoClass, "fcVersion", "I")); + CHECK_NULL(fcCacheDirsID = (*env)->GetFieldID(env, fcInfoClass, "cacheDirs", "[Ljava/lang/String;")); + CHECK_NULL(fcNameID = (*env)->GetFieldID(env, fcCompFontClass, "fcName", "Ljava/lang/String;")); + CHECK_NULL(fcFirstFontID = (*env)->GetFieldID(env, fcCompFontClass, "firstFont", "Lsun/font/FontConfigManager$FontConfigFont;")); + CHECK_NULL(fcAllFontsID = (*env)->GetFieldID(env, fcCompFontClass, "allFonts", "[Lsun/font/FontConfigManager$FontConfigFont;")); + CHECK_NULL(fcFontCons = (*env)->GetMethodID(env, fcFontClass, "", "()V")); + CHECK_NULL(familyNameID = (*env)->GetFieldID(env, fcFontClass, "familyName", "Ljava/lang/String;")); + CHECK_NULL(styleNameID = (*env)->GetFieldID(env, fcFontClass, "styleStr", "Ljava/lang/String;")); + CHECK_NULL(fullNameID = (*env)->GetFieldID(env, fcFontClass, "fullName", "Ljava/lang/String;")); + CHECK_NULL(fontFileID = (*env)->GetFieldID(env, fcFontClass, "fontFile", "Ljava/lang/String;")); + + (*env)->SetIntField(env, fcInfoObj, fcVersionID, (*fcGetVersion)()); + + /* Optionally get the cache dir locations. This isn't + * available until v 2.4.x, but this is OK since on those later versions + * we can check the time stamps on the cache dirs to see if we + * are out of date. There are a couple of assumptions here. First + * that the time stamp on the directory changes when the contents are + * updated. Secondly that the locations don't change. The latter is + * most likely if a new version of fontconfig is installed, but we also + * invalidate the cache if we detect that. Arguably even that is "rare", + * and most likely is tied to an OS upgrade which gets a new file anyway. + */ + if (fcStrListNext != NULL && fcStrListDone != NULL && + fcConfigGetCacheDirs != NULL) { + + FcStrList* cacheDirs; + FcChar8* cacheDir; + int cnt = 0; + jobject cacheDirArray = (*env)->GetObjectField(env, fcInfoObj, fcCacheDirsID); + int max = (*env)->GetArrayLength(env, cacheDirArray); + + cacheDirs = (*fcConfigGetCacheDirs)(NULL); + if (cacheDirs != NULL) { + while ((cnt < max) && (cacheDir = (*fcStrListNext)(cacheDirs))) { + jstr = (*env)->NewStringUTF(env, (const char*)cacheDir); + if (IS_NULL(jstr)) { + (*fcStrListDone)(cacheDirs); + return; + } + (*env)->SetObjectArrayElement(env, cacheDirArray, cnt++, jstr); + (*env)->DeleteLocalRef(env, jstr); + } + (*fcStrListDone)(cacheDirs); + } + } + + locale = (*env)->GetStringUTFChars(env, localeStr, 0); + if (locale == NULL) { + (*env)->ExceptionClear(env); + JNU_ThrowOutOfMemoryError(env, "Could not create locale"); + return; + } + + arrlen = (*env)->GetArrayLength(env, fcCompFontArray); + for (i=0; iGetObjectArrayElement(env, fcCompFontArray, i); + fcNameStr = + (jstring)((*env)->GetObjectField(env, fcCompFontObj, fcNameID)); + fcName = (*env)->GetStringUTFChars(env, fcNameStr, 0); + if (fcName == NULL) { + (*env)->DeleteLocalRef(env, fcCompFontObj); + (*env)->DeleteLocalRef(env, fcNameStr); + continue; + } + pattern = (*fcNameParse)((FcChar8 *)fcName); + (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); + (*env)->DeleteLocalRef(env, fcNameStr); + if (pattern == NULL) { + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } + return; + } + + /* locale may not usually be necessary as fontconfig appears to apply + * this anyway based on the user's environment. However we want + * to use the value of the JDK startup locale so this should take + * care of it. + */ + if (locale != NULL) { + (*fcPatternAddString)(pattern, FC_LANG, (unsigned char*)locale); + } + (*fcConfigSubstitute)(NULL, pattern, FcMatchPattern); + (*fcDefaultSubstitute)(pattern); + fontset = (*fcFontSort)(NULL, pattern, FcTrue, NULL, &result); + if (fontset == NULL) { + (*fcPatternDestroy)(pattern); + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } + return; + } + + /* fontconfig returned us "nfonts". If we are just getting the + * first font, we set nfont to zero. Otherwise we use "nfonts". + * Next create separate C arrays of length nfonts for family file etc. + * Inspect the returned fonts and the ones we like (adds enough glyphs) + * are added to the arrays and we increment 'fontCount'. + */ + nfonts = fontset->nfont; + family = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); + styleStr = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); + fullname = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); + file = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); + if (family == NULL || styleStr == NULL || + fullname == NULL || file == NULL) { + if (family != NULL) { + free(family); + } + if (styleStr != NULL) { + free(styleStr); + } + if (fullname != NULL) { + free(fullname); + } + if (file != NULL) { + free(file); + } + (*fcPatternDestroy)(pattern); + (*fcFontSetDestroy)(fontset); + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } + return; + } + fontCount = 0; + minGlyphs = 20; + if (debugMinGlyphsStr != NULL) { + int val = minGlyphs; + sscanf(debugMinGlyphsStr, "%5d", &val); + if (val >= 0 && val <= 65536) { + minGlyphs = val; + } + } + + for (j=0; jfonts[j]; + FcChar8 *fontformat; + FcCharSet *charset = NULL; + + fontformat = NULL; + (*fcPatternGetString)(fontPattern, FC_FONTFORMAT, 0, &fontformat); + /* We only want TrueType fonts but some Linuxes still depend + * on Type 1 fonts for some Locale support, so we'll allow + * them there. + */ + if (fontformat != NULL + && (strcmp((char*)fontformat, "TrueType") != 0) +#if defined(__linux__) || defined(_AIX) + && (strcmp((char*)fontformat, "Type 1") != 0) + && (strcmp((char*)fontformat, "CFF") != 0) +#endif + ) { + continue; + } + result = (*fcPatternGetCharSet)(fontPattern, FC_CHARSET, 0, &charset); + if (result != FcResultMatch) { + free(family); + free(fullname); + free(styleStr); + free(file); + (*fcPatternDestroy)(pattern); + (*fcFontSetDestroy)(fontset); + if (prevUnionCharset != NULL) { + (*fcCharSetDestroy)(prevUnionCharset); + } + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } + return; + } + + /* We don't want 20 or 30 fonts, so once we hit 10 fonts, + * then require that they really be adding value. Too many + * adversely affects load time for minimal value-add. + * This is still likely far more than we've had in the past. + */ + if (j==10) { + minGlyphs = 50; + } + if (unionCharset == NULL) { + unionCharset = charset; + } else { + if ((*fcCharSetSubtractCount)(charset, unionCharset) + > minGlyphs) { + unionCharset = (* fcCharSetUnion)(unionCharset, charset); + if (prevUnionCharset != NULL) { + (*fcCharSetDestroy)(prevUnionCharset); + } + prevUnionCharset = unionCharset; + } else { + continue; + } + } + + fontCount++; // found a font we will use. + (*fcPatternGetString)(fontPattern, FC_FILE, 0, &file[j]); + (*fcPatternGetString)(fontPattern, FC_FAMILY, 0, &family[j]); + (*fcPatternGetString)(fontPattern, FC_STYLE, 0, &styleStr[j]); + (*fcPatternGetString)(fontPattern, FC_FULLNAME, 0, &fullname[j]); + if (!includeFallbacks) { + break; + } + if (fontCount == 254) { + break; // CompositeFont will only use up to 254 slots from here. + } + } + + // Release last instance of CharSet union + if (prevUnionCharset != NULL) { + (*fcCharSetDestroy)(prevUnionCharset); + } + + /* Once we get here 'fontCount' is the number of returned fonts + * we actually want to use, so we create 'fcFontArr' of that length. + * The non-null entries of "family[]" etc are those fonts. + * Then loop again over all nfonts adding just those non-null ones + * to 'fcFontArr'. If its null (we didn't want the font) + * then we don't enter the main body. + * So we should never get more than 'fontCount' entries. + */ + if (includeFallbacks) { + fcFontArr = + (*env)->NewObjectArray(env, fontCount, fcFontClass, NULL); + if (IS_NULL(fcFontArr)) { + free(family); + free(fullname); + free(styleStr); + free(file); + (*fcPatternDestroy)(pattern); + (*fcFontSetDestroy)(fontset); + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } + return; + } + (*env)->SetObjectField(env,fcCompFontObj, fcAllFontsID, fcFontArr); + } + fn=0; + + for (j=0;jNewObject(env, fcFontClass, fcFontCons); + if (IS_NULL(fcFont)) break; + jstr = (*env)->NewStringUTF(env, (const char*)family[j]); + if (IS_NULL(jstr)) break; + (*env)->SetObjectField(env, fcFont, familyNameID, jstr); + (*env)->DeleteLocalRef(env, jstr); + if (file[j] != NULL) { + jstr = (*env)->NewStringUTF(env, (const char*)file[j]); + if (IS_NULL(jstr)) break; + (*env)->SetObjectField(env, fcFont, fontFileID, jstr); + (*env)->DeleteLocalRef(env, jstr); + } + if (styleStr[j] != NULL) { + jstr = (*env)->NewStringUTF(env, (const char*)styleStr[j]); + if (IS_NULL(jstr)) break; + (*env)->SetObjectField(env, fcFont, styleNameID, jstr); + (*env)->DeleteLocalRef(env, jstr); + } + if (fullname[j] != NULL) { + jstr = (*env)->NewStringUTF(env, (const char*)fullname[j]); + if (IS_NULL(jstr)) break; + (*env)->SetObjectField(env, fcFont, fullNameID, jstr); + (*env)->DeleteLocalRef(env, jstr); + } + if (fn==0) { + (*env)->SetObjectField(env, fcCompFontObj, + fcFirstFontID, fcFont); + } + if (includeFallbacks) { + (*env)->SetObjectArrayElement(env, fcFontArr, fn++,fcFont); + } else { + (*env)->DeleteLocalRef(env, fcFont); + break; + } + (*env)->DeleteLocalRef(env, fcFont); + } + } + if (includeFallbacks) { + (*env)->DeleteLocalRef(env, fcFontArr); + } + (*env)->DeleteLocalRef(env, fcCompFontObj); + (*fcFontSetDestroy)(fontset); + (*fcPatternDestroy)(pattern); + free(family); + free(styleStr); + free(fullname); + free(file); + } + + /* release resources and close the ".so" */ + + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } +#endif +} + +JNIEXPORT jint JNICALL +Java_sun_font_FontConfigManager_getFontConfigAASettings + (JNIEnv *env, jclass obj, jstring fcNameStr, jstring localeStr) { + +#ifdef DISABLE_FONTCONFIG + return -1; +#else + if (usingFontConfig() == false) { + return -1; + } + + int rgba = 0; + const char *locale=NULL, *fcName=NULL; + + if (fcNameStr == NULL || localeStr == NULL) { + return -1; + } + + fcName = (*env)->GetStringUTFChars(env, fcNameStr, 0); + locale = (*env)->GetStringUTFChars(env, localeStr, 0); + int status = 0; + RenderingFontHints renderingFontHints; + if (fcName && locale) { + status = setupRenderingFontHints(fcName, locale, 0, &renderingFontHints); + } else { + status = -1; + } + + if (locale) { + (*env)->ReleaseStringUTFChars(env, localeStr, (const char*)locale); + } + if (fcName) { + (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); + } + + if (status) { + return status; + } + + if (renderingFontHints.fcAntialias == FcFalse) { + return TEXT_AA_OFF; + } else if (renderingFontHints.fcRGBA <= FC_RGBA_UNKNOWN || renderingFontHints.fcRGBA >= FC_RGBA_NONE) { + return TEXT_AA_ON; + } else { + switch (renderingFontHints.fcRGBA) { + case FC_RGBA_RGB : return TEXT_AA_LCD_HRGB; + case FC_RGBA_BGR : return TEXT_AA_LCD_HBGR; + case FC_RGBA_VRGB : return TEXT_AA_LCD_VRGB; + case FC_RGBA_VBGR : return TEXT_AA_LCD_VBGR; + default : return TEXT_AA_LCD_HRGB; // should not get here. + } + } +#endif +} + +JNIEXPORT jstring JNICALL +Java_sun_font_FontConfigManager_getFontProperty + (JNIEnv *env, jclass obj, jstring query, jstring property) { + +#ifdef DISABLE_FONTCONFIG + return NULL; +#else + if (usingFontConfig() == false) { + return NULL; + } + + const char *queryPtr = NULL; + const char *propertyPtr = NULL; + FcChar8 *fontFamily = NULL; + FcChar8 *fontPath = NULL; + jstring res = NULL; + + queryPtr = (*env)->GetStringUTFChars(env, query, 0); + propertyPtr = (*env)->GetStringUTFChars(env, property, 0); + if (queryPtr == NULL || propertyPtr == NULL) { + goto cleanup; + } + + FcPattern *pattern = (*fcNameParse)((FcChar8 *) queryPtr); + if (pattern == NULL) { + goto cleanup; + } + (*fcConfigSubstitute)(NULL, pattern, FcMatchScan); + (*fcDefaultSubstitute)(pattern); + + FcResult fcResult; + FcPattern *match = (*fcFontMatch)(0, pattern, &fcResult); + if (match == NULL || fcResult != FcResultMatch) { + goto cleanup; + } + fontFamily = (*fcPatternFormat)(match, (FcChar8*) "%{family}"); + if (fontFamily == NULL) { + goto cleanup; + } + // result of foundFontName could be set of families, so we left only first family + char *commaPos = strchr((char *) fontFamily, ','); + if (commaPos != NULL) { + *commaPos = '\0'; + } + if (strstr(queryPtr, (char *) fontFamily) == NULL) { + goto cleanup; + } + + fontPath = (*fcPatternFormat)(match, (FcChar8*) propertyPtr); + if (fontPath == NULL) { + goto cleanup; + } + res = (*env)->NewStringUTF(env, (char *) fontPath); + +cleanup: + if (fontPath) { + (*fcStrFree)(fontPath); + } + if (fontFamily) { + (*fcStrFree)(fontFamily); + } + if (propertyPtr) { + (*env)->ReleaseStringUTFChars(env, property, (const char*)propertyPtr); + } + if (queryPtr) { + (*env)->ReleaseStringUTFChars(env, query, (const char*)queryPtr); + } + + return res; +#endif +} \ No newline at end of file diff --git a/src/java.desktop/unix/native/libawt/awt/initIDs.c b/src/java.desktop/unix/native/libawt/awt/initIDs.c index ddba5d1338a9..8afbf42de1f6 100644 --- a/src/java.desktop/unix/native/libawt/awt/initIDs.c +++ b/src/java.desktop/unix/native/libawt/awt/initIDs.c @@ -33,6 +33,10 @@ #include "jni_util.h" +#include +#include +#include + /* * This file contains stubs for JNI field and method id initializers * which are used in the win32 awt. @@ -91,3 +95,77 @@ Java_java_awt_event_MouseEvent_initIDs (JNIEnv *env, jclass clazz) { } + +struct shared_libs { + uint32_t count; + uint32_t index; + char ** names; +}; + +static int +dl_iterate_callback + (struct dl_phdr_info *info, size_t size, void *data) +{ + struct shared_libs *libs = (struct shared_libs*)data; + if (libs->names == NULL) { + libs->count++; + } else { + // The number of libraries may have grown since the last time we asked. + if (libs->index < libs->count) { + libs->names[libs->index++] = strdup(info->dlpi_name); + } + } + + return 0; +} + +static jarray +convert_to_java_array + (JNIEnv *env, struct shared_libs* libs) +{ + if ((*env)->EnsureLocalCapacity(env, libs->count + 2) != JNI_OK) { + return NULL; // OOME has been thrown already + } + + + jclass stringClazz = (*env)->FindClass(env, "java/lang/String"); + CHECK_NULL_RETURN(stringClazz, NULL); + jarray libsArray = (*env)->NewObjectArray(env, libs->count, stringClazz, NULL); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + + for (uint32_t i = 0; i < libs->count; i++) { + const char * name = libs->names[i]; + if (name) { + jstring jName = (*env)->NewStringUTF(env, name); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + (*env)->SetObjectArrayElement(env, libsArray, i, jName); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); + } + } + + return libsArray; +} + +JNIEXPORT jarray JNICALL +Java_sun_font_FontManagerNativeLibrary_loadedLibraries + (JNIEnv *env, jclass cls) +{ + struct shared_libs libs = {0, 0, NULL}; + dl_iterate_phdr(&dl_iterate_callback, &libs); + if (libs.count <= 0) { + return NULL; + } + + libs.names = (char **) calloc(libs.count, sizeof(libs.names[0])); + CHECK_NULL_RETURN(libs.names, NULL); + dl_iterate_phdr(&dl_iterate_callback, &libs); + + jarray libsArray = convert_to_java_array(env, &libs); + + for (uint32_t i = 0; i < libs.count; i++) { + free(libs.names[i]); + } + free(libs.names); + + return libsArray; +} diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c index aa2e88940dca..9bb3eefa445c 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c @@ -37,6 +37,8 @@ #include #include #include +#include +#include #ifndef NO_XRANDR #include #endif @@ -652,6 +654,178 @@ static void resetNativeData(int screen) { x11Screens[screen].numConfigs = 0; } +typedef void wl_proxy; +typedef void wl_interface; +typedef void wl_display; +typedef void wl_registry; +typedef void wl_output; + +struct wl_registry_listener { + void (*global)(void* data, wl_registry* wl_registry, uint name, const char* iface, uint ver); + void (*global_remove)(void* data, wl_registry* wl_registry, uint name); +}; + +struct wl_output_listener { + void (*geometry)(void *data, + wl_output *wl_output, + int32_t x, + int32_t y, + int32_t physical_width, + int32_t physical_height, + int32_t subpixel, + const char *make, + const char *model, + int32_t transform); + void (*mode)(void *data, + wl_output *wl_output, + uint32_t flags, + int32_t width, + int32_t height, + int32_t refresh); + void (*done)(void *data, + wl_output *wl_output); + void (*scale)(void *data, + wl_output *wl_output, + int32_t factor); +}; + +static wl_display* (*wl_display_connect)(const char *name); +static wl_proxy* (*wl_proxy_marshal_constructor)(wl_proxy *proxy, + uint32_t opcode, + const wl_interface *interface, ...); +static wl_proxy* (*wl_proxy_marshal_constructor_versioned)(wl_proxy *proxy, + uint32_t opcode, + const wl_interface *interface, + uint32_t version, + ...); +static int (*wl_proxy_add_listener)(wl_proxy *proxy, void (**implementation)(void), void *data); +static int (*wl_display_roundtrip)(wl_display *display); +static void (*wl_display_disconnect)(wl_display *display); + +static wl_interface* wl_registry_interface; +static wl_interface* wl_output_interface; + +static void* wlLibHandle = NULL; +#define LOAD_WAYLAND_SYMBOL(NAME) NAME = dlsym(wlLibHandle, #NAME); if (!(NAME)) goto cleanup + +static void wlInit() { + wlLibHandle = dlopen("libwayland-client.so.0", RTLD_LAZY | RTLD_LOCAL); + if (!wlLibHandle) return; + + LOAD_WAYLAND_SYMBOL(wl_display_connect); + LOAD_WAYLAND_SYMBOL(wl_proxy_marshal_constructor); + LOAD_WAYLAND_SYMBOL(wl_proxy_marshal_constructor_versioned); + LOAD_WAYLAND_SYMBOL(wl_proxy_add_listener); + LOAD_WAYLAND_SYMBOL(wl_display_roundtrip); + LOAD_WAYLAND_SYMBOL(wl_display_disconnect); + + LOAD_WAYLAND_SYMBOL(wl_registry_interface); + LOAD_WAYLAND_SYMBOL(wl_output_interface); + + return; + cleanup: + dlclose(wlLibHandle); + wlLibHandle = NULL; +} + +static int32_t* waylandMonitorScales = NULL; +struct UpdateWaylandMonitorsData { + int32_t currentWaylandMonitor, currentWaylandScale, xinScreens; + XineramaScreenInfo *xinInfo; + int32_t* waylandMonitorScales; +}; + +static void wlOutputGeometry(void *data, + wl_output *wl_output, + int32_t x, + int32_t y, + int32_t physical_width, + int32_t physical_height, + int32_t subpixel, + const char *make, + const char *model, + int32_t transform) { + struct UpdateWaylandMonitorsData* monData = (struct UpdateWaylandMonitorsData*) data; + // Match Wayland and Xinerama monitors by coordinates + for (int i = 0; i < monData->xinScreens; i++) { + if (monData->xinInfo[i].x_org == x && monData->xinInfo[i].y_org == y) { + monData->currentWaylandMonitor = monData->xinInfo[i].screen_number; + return; + } + } + monData->currentWaylandMonitor = -1; +} +static void wlOutputMode(void *data, + wl_output *wl_output, + uint32_t flags, + int32_t width, + int32_t height, + int32_t refresh) {} +static void wlOutputDone(void *data, + wl_output *wl_output) { + struct UpdateWaylandMonitorsData* monData = (struct UpdateWaylandMonitorsData*) data; + if (monData->currentWaylandMonitor != -1) { + monData->waylandMonitorScales[monData->currentWaylandMonitor] = monData->currentWaylandScale; + } +} +static void wlOutputScale(void *data, + wl_output *wl_output, + int32_t factor) { + struct UpdateWaylandMonitorsData* monData = (struct UpdateWaylandMonitorsData*) data; + monData->currentWaylandScale = factor; +} +static struct wl_output_listener wlOutputListener = {&wlOutputGeometry, &wlOutputMode, &wlOutputDone, &wlOutputScale}; + +static void wlGlobal(void* data, + wl_registry* registry, + uint32_t name, + const char *interface, + uint32_t version) { + const uint32_t ver = 2; // Output protocol version + if (strcmp(interface, "wl_output") == 0 && version >= ver) { + wl_output* output = wl_proxy_marshal_constructor_versioned(registry, 0, wl_output_interface, ver, name, "wl_output", ver, NULL); // wl_registry_bind + wl_proxy_add_listener(output, (void (**)(void)) &wlOutputListener, data); // wl_output_add_listener + } +} +static void wlGlobalRemove(void* data, + wl_registry* registry, + uint32_t name) {} +static struct wl_registry_listener wlRegistryListener = {&wlGlobal, &wlGlobalRemove}; + +/* + * Class: sun_awt_X11GraphicsEnvironment + * Method: updateWaylandMonitorScaling + * Signature: ()V + */ +JNIEXPORT void JNICALL +Java_sun_awt_X11GraphicsEnvironment_updateWaylandMonitorScaling(JNIEnv *env, jclass clazz) { + if (!usingXinerama || !wlLibHandle) return; + + struct UpdateWaylandMonitorsData monData; + monData.currentWaylandMonitor = -1; + monData.currentWaylandScale = 1; + monData.waylandMonitorScales = NULL; + if (!isMonitorFramebufferScalingEnabled()) { + monData.xinInfo = (*XineramaQueryScreens)(awt_display, &monData.xinScreens); + if (monData.xinInfo == NULL) return; + wl_display* display = wl_display_connect(NULL); + if (display == NULL) return; + monData.waylandMonitorScales = calloc(monData.xinScreens, sizeof(int32_t)); + + wl_registry* registry = wl_proxy_marshal_constructor(display, 1, wl_registry_interface, NULL); // wl_display_get_registry + wl_proxy_add_listener(registry, (void (**)(void)) &wlRegistryListener, &monData); // wl_registry_add_listener + wl_display_roundtrip(display); // Get globals (wl_outputs) + wl_display_roundtrip(display); // Get outputs info + + wl_display_disconnect(display); + XFree(monData.xinInfo); + } + + int32_t* oldScales = waylandMonitorScales; + waylandMonitorScales = monData.waylandMonitorScales; + free(oldScales); +} + /* * Class: sun_awt_X11GraphicsEnvironment * Method: initDevices @@ -761,6 +935,9 @@ awt_init_Display(JNIEnv *env, jobject this) ptr_to_jlong(awt_display)); JNU_CHECK_EXCEPTION_RETURN(env, NULL); + // Init Wayland if available, it's used to retrieve per-monitor scaling + wlInit(); + /* set awt_numScreens, and whether or not we're using Xinerama */ xineramaInit(); return dpy; @@ -792,6 +969,7 @@ AwtGraphicsConfigDataPtr getDefaultConfig(int screen) { // NB: should be invoked only while holding the AWT lock DASSERT(screen >= 0 && screen < awt_numScreens); + if (screen < 0 || screen >= awt_numScreens) return NULL; ensureConfigsInited(NULL, screen); return x11Screens[screen].defaultConfig; } @@ -815,12 +993,12 @@ Java_sun_awt_X11GraphicsEnvironment_initDisplay(JNIEnv *env, jobject this, * Signature: ()Z */ JNIEXPORT jboolean JNICALL -Java_sun_awt_X11GraphicsEnvironment_initGLX(JNIEnv *env, jclass x11ge) +Java_sun_awt_X11GraphicsEnvironment_initGLX(JNIEnv *env, jclass x11ge, jboolean glxRecommended) { jboolean glxAvailable; AWT_LOCK(); - glxAvailable = GLXGC_IsGLXAvailable(); + glxAvailable = GLXGC_IsGLXAvailable(glxRecommended); AWT_UNLOCK(); return glxAvailable; @@ -1741,7 +1919,49 @@ Java_sun_awt_X11GraphicsDevice_getCurrentDisplayMode AWT_LOCK(); - if (screen < ScreenCount(awt_display)) { + if (usingXinerama && XScreenCount(awt_display) > 0) { + XRRScreenResources *res = awt_XRRGetScreenResources(awt_display, + RootWindow(awt_display, 0)); + if (res) { + if (res->noutput > screen) { + XRROutputInfo *output_info = awt_XRRGetOutputInfo(awt_display, + res, res->outputs[screen]); + if (output_info) { + if (output_info->crtc) { + XRRCrtcInfo *crtc_info = + awt_XRRGetCrtcInfo (awt_display, res, + output_info->crtc); + if (crtc_info) { + if (crtc_info->mode) { + int i; + for (i = 0; i < res->nmode; i++) { + XRRModeInfo *mode = &res->modes[i]; + if (mode->id == crtc_info->mode) { + float rate = 0; + if (mode->hTotal && mode->vTotal) { + rate = ((float)mode->dotClock / + ((float)mode->hTotal * + (float)mode->vTotal)); + } + displayMode = X11GD_CreateDisplayMode( + env, + mode->width, + mode->height, + BIT_DEPTH_MULTI, + (int)(rate +.2)); + break; + } + } + } + awt_XRRFreeCrtcInfo(crtc_info); + } + } + awt_XRRFreeOutputInfo(output_info); + } + } + awt_XRRFreeScreenResources(res); + } + } else { config = awt_XRRGetScreenInfo(awt_display, RootWindow(awt_display, screen)); @@ -1791,8 +2011,45 @@ Java_sun_awt_X11GraphicsDevice_enumDisplayModes AWT_LOCK(); - if (XScreenCount(awt_display) > 0) { - + if (usingXinerama && XScreenCount(awt_display) > 0) { + XRRScreenResources *res = awt_XRRGetScreenResources(awt_display, + RootWindow(awt_display, 0)); + if (res) { + if (res->noutput > screen) { + XRROutputInfo *output_info = awt_XRRGetOutputInfo(awt_display, + res, res->outputs[screen]); + if (output_info) { + int i; + for (i = 0; i < output_info->nmode; i++) { + RRMode m = output_info->modes[i]; + int j; + XRRModeInfo *mode; + for (j = 0; j < res->nmode; j++) { + mode = &res->modes[j]; + if (mode->id == m) { + float rate = 0; + if (mode->hTotal && mode->vTotal) { + rate = ((float)mode->dotClock / + ((float)mode->hTotal * + (float)mode->vTotal)); + } + X11GD_AddDisplayMode(env, arrayList, + mode->width, mode->height, + BIT_DEPTH_MULTI, (int)(rate +.2)); + if ((*env)->ExceptionCheck(env)) { + goto ret0; + } + break; + } + } + } +ret0: + awt_XRRFreeOutputInfo(output_info); + } + } + awt_XRRFreeScreenResources(res); + } + } else { XRRScreenConfiguration *config; config = awt_XRRGetScreenInfo(awt_display, @@ -1950,14 +2207,108 @@ Java_sun_awt_X11GraphicsDevice_exitFullScreenExclusive * End DisplayMode/FullScreen support */ +static char *get_output_screen_name(JNIEnv *env, int screen) { +#ifdef NO_XRANDR + return NULL; +#else + if (!awt_XRRGetScreenResources || !awt_XRRGetOutputInfo) { + return NULL; + } + char *name = NULL; + AWT_LOCK(); + int scr = 0, out = 0; + if (usingXinerama && XScreenCount(awt_display) > 0) { + out = screen; + } else { + scr = screen; + } + + XRRScreenResources *res = awt_XRRGetScreenResources(awt_display, + RootWindow(awt_display, scr)); + if (res) { + if (res->noutput > out) { + XRROutputInfo *output_info = awt_XRRGetOutputInfo(awt_display, + res, res->outputs[out]); + if (output_info) { + if (output_info->name) { + name = strdup(output_info->name); + } + awt_XRRFreeOutputInfo(output_info); + } + } + awt_XRRFreeScreenResources(res); + } + AWT_UNLOCK(); + return name; +#endif /* NO_XRANDR */ +} + /* * Class: sun_awt_X11GraphicsDevice * Method: getNativeScaleFactor - * Signature: (I)D + * Signature: (ID)D */ JNIEXPORT jdouble JNICALL Java_sun_awt_X11GraphicsDevice_getNativeScaleFactor - (JNIEnv *env, jobject this, jint screen) { + (JNIEnv *env, jobject this, jint screen, jdouble defValue) { + int32_t* wls = waylandMonitorScales; + if (wls != NULL && wls[screen] != 0) { + return (double) wls[screen]; + } + + // in case of Xinerama individual screen scales are not supported + char *name = get_output_screen_name(env, usingXinerama ? 0 : screen); + double scale = getNativeScaleFactor(name, defValue); + if (name) { + free(name); + } + return scale; +} + +/* + * Class: sun_awt_X11GraphicsDevice + * Method: getGdkScale + * Signature: (Ljava/lang/String;D)D + */ +JNIEXPORT jdouble JNICALL +Java_sun_awt_X11GraphicsDevice_getGdkScale + (JNIEnv *env, jobject this, jstring envVarName, jdouble defValue) +{ + const char* name = (*env)->GetStringUTFChars(env, envVarName, 0); + double value = getScaleEnvVar(name, defValue); + (*env)->ReleaseStringUTFChars(env, envVarName, name); + return value; +} - return getNativeScaleFactor(); +/* + * Class: sun_awt_X11GraphicsDevice + * Method: getXrmXftDpi + * Signature: (I)I + */ +JNIEXPORT jint JNICALL +Java_sun_awt_X11GraphicsDevice_getXrmXftDpi + (JNIEnv *env, jobject this, jint defValue) +{ + int dpi = defValue; +#ifndef HEADLESS + // Ubuntu 18.04 introduced a new settings for a scale factor: Settings > Devices > Displays > Scale. + // It is propagated to Xresource (and is read fine with 'xrdb' util) but is not propagated to GSettings + // (gtk3 doesn't see it in 'gtk-xft-dpi'). So, retrieve "Xft.dpi" from Xresource via X11 API call. + Display *display = XOpenDisplay(NULL); // need to open new display to get up-to-date XResource value + if (display) { + char *resource_manager = XResourceManagerString(display); + if (resource_manager) { + XrmDatabase db = XrmGetStringDatabase(resource_manager); + if (db) { + XrmValue value; + char *type; + if (XrmGetResource(db, "Xft.dpi", "Xft.dpi", &type, &value)) { + dpi = atoi(value.addr); + } + } + } + XCloseDisplay(display); + } +#endif + return dpi; } diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c index f9fe7b2b1261..b0168cf4973a 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c @@ -1,5 +1,6 @@ /* * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,9 +30,11 @@ #include "awt.h" #include "awt_p.h" +#include "debug_assert.h" #include #include +#include #include #include @@ -113,22 +116,104 @@ typedef struct { } StatusWindow; #endif + +// ===================================================== JBR-2460 ===================================================== + +/** + * The structure keeps an instance of XIC and some other dynamic resources attached to the XIC which have to be fred + * when the XIC is destroyed + * + * @see jbNewXimClient_createInputContextOfStyle + */ +typedef struct jbNewXimClient_ExtendedInputContext { + XIC xic; + + /** + * The input style (XNInputStyle) used to create the XIC. + */ + XIMStyle inputStyle; + + /** + * The display of XIM used to create the XIC and the fontsets. + * Mustn't be NULL if xic isn't NULL. + */ + Display* xicDisplay; + + /** + * NULL if the XNFontSet attribute of XNPreeditAttributes of xic hasn't been specified manually. + * Otherwise it has to be freed via XFreeFontSet when xic is destroyed AND the font set is no longer needed. + * The pointer can be equal to statusCustomFontSet, so don't forget to handle such a case before calling XFreeFontSet. + */ + XFontSet preeditCustomFontSet; + + /** + * NULL if the XNFontSet attribute of XNStatusAttributes of xic hasn't been specified manually. + * Otherwise it has to be freed via XFreeFontSet when xic is destroyed AND the font set is no longer needed. + * The pointer can be equal to preeditCustomFontSet, so don't forget to handle such a case before calling XFreeFontSet. + */ + XFontSet statusCustomFontSet; + + /** + * NULL if the input style of xic contains neither XIMPreeditCallbacks nor XIMStatusCallbacks. + * Otherwise the array consist of values for the following properties and has to be freed: + * - XNPreeditStartCallback + * - XNPreeditDoneCallback + * - XNPreeditDrawCallback + * - XNPreeditCaretCallback + * - XNStatusStartCallback + * - XNStatusDoneCallback + * - XNStatusDrawCallback + */ + XIMCallback (*preeditAndStatusCallbacks)[NCALLBACKS]; +} jbNewXimClient_ExtendedInputContext; + +/** + * Just sets all fields of the context to the specified values. + */ +static inline void jbNewXimClient_setInputContextFields( + // Non-nullable + jbNewXimClient_ExtendedInputContext *context, + // Nullable + XIC xic, + XIMStyle inputStyle, + // Nullable + Display *xicDisplay, + // Nullable + XFontSet preeditCustomFontSet, + // Nullable + XFontSet statusCustomFontSet, + // Nullable + XIMCallback (*preeditAndStatusCallbacks)[NCALLBACKS] +); + +/** + * Destroys the input context previously created by jbNewXimClient_createInputContextOfStyle. + * @param[in,out] context - a pointer to the context which is going to be destroyed. + */ +static void jbNewXimClient_destroyInputContext(jbNewXimClient_ExtendedInputContext *context); + +// ==================================================================================================================== + + /* * X11InputMethodData keeps per X11InputMethod instance information. A pointer * to this data structure is kept in an X11InputMethod object (pData). */ typedef struct _X11InputMethodData { - XIC current_ic; /* current X Input Context */ - XIC ic_active; /* X Input Context for active clients */ - XIC ic_passive; /* X Input Context for passive clients */ - XIMCallback *callbacks; /* callback parameters */ - jobject x11inputmethod; /* global ref to X11InputMethod instance */ - /* associated with the XIC */ + XIC current_ic; /* current X Input Context */ + jbNewXimClient_ExtendedInputContext ic_active; /* X Input Context for active clients */ + jbNewXimClient_ExtendedInputContext ic_passive; /* X Input Context for passive clients */ + jobject x11inputmethod; /* global ref to X11InputMethod instance */ + /* associated with the XIC */ #if defined(__linux__) - StatusWindow *statusWindow; /* our own status window */ + StatusWindow *statusWindow; /* our own status window */ #endif - char *lookup_buf; /* buffer used for XmbLookupString */ - int lookup_buf_len; /* lookup buffer size in bytes */ + char *lookup_buf; /* buffer used for XmbLookupString */ + int lookup_buf_len; /* lookup buffer size in bytes */ + + struct { + Boolean isBetweenPreeditStartAndPreeditDone; + } brokenImDetectionContext; } X11InputMethodData; /* @@ -336,6 +421,30 @@ static void setX11InputMethodData(JNIEnv * env, jobject imInstance, X11InputMeth JNU_SetLongFieldFromPtr(env, imInstance, x11InputMethodIDs.pData, pX11IMData); } +static void +destroyXInputContexts(X11InputMethodData *pX11IMData) { + if (pX11IMData == NULL) { + return; + } + + if (pX11IMData->ic_active.xic != (XIC)0) { + if (pX11IMData->ic_passive.xic == pX11IMData->ic_active.xic) { + // To avoid double-free + jbNewXimClient_setInputContextFields(&pX11IMData->ic_passive, NULL, 0, NULL, NULL, NULL, NULL); + } + + XUnsetICFocus(pX11IMData->ic_active.xic); + jbNewXimClient_destroyInputContext(&pX11IMData->ic_active); + } + + if (pX11IMData->ic_passive.xic != (XIC)0) { + XUnsetICFocus(pX11IMData->ic_passive.xic); + jbNewXimClient_destroyInputContext(&pX11IMData->ic_passive); + } + + pX11IMData->current_ic = (XIC)0; +} + /* this function should be called within AWT_LOCK() */ static void destroyX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData) @@ -347,19 +456,7 @@ destroyX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData) return; } - if (pX11IMData->ic_active != (XIC)0) { - XUnsetICFocus(pX11IMData->ic_active); - XDestroyIC(pX11IMData->ic_active); - if (pX11IMData->ic_active != pX11IMData->ic_passive) { - if (pX11IMData->ic_passive != (XIC)0) { - XUnsetICFocus(pX11IMData->ic_passive); - XDestroyIC(pX11IMData->ic_passive); - } - pX11IMData->ic_passive = (XIC)0; - pX11IMData->current_ic = (XIC)0; - } - } - + destroyXInputContexts(pX11IMData); freeX11InputMethodData(env, pX11IMData); } @@ -381,9 +478,6 @@ freeX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData) } #endif - if (pX11IMData->callbacks) - free((void *)pX11IMData->callbacks); - if (env) { /* Remove the global reference from the list, so that the callback function or whoever refers to it could know. @@ -396,6 +490,8 @@ freeX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData) free((void *)pX11IMData->lookup_buf); } + pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False; + free((void *)pX11IMData); } @@ -445,7 +541,7 @@ setXICWindowFocus(XIC ic, Window w) #define INITIAL_LOOKUP_BUF_SIZE 512 Boolean -awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp) +awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp, const Boolean keyPressContainsThePreeditTextOfLastXResetIC) { JNIEnv *env = GetJNIEnv(); X11InputMethodData *pX11IMData = NULL; @@ -531,17 +627,22 @@ awt_x11inputmethod_lookupString(XKeyPressedEvent *event, KeySym *keysymp) /*FALLTHRU*/ case XLookupChars: /* - printf("lookupString: status=XLookupChars, type=%d, state=%x, keycode=%x, keysym=%x\n", - event->type, event->state, event->keycode, keysym); + printf("lookupString: status=XLookupChars, type=%d, state=%x, keycode=%x, keysym=%x, keyPressContainsThePreeditTextOfLastXResetIC=%d\n", + event->type, event->state, event->keycode, keysym, (int)keyPressContainsThePreeditTextOfLastXResetIC); */ - javastr = JNU_NewStringPlatform(env, (const char *)pX11IMData->lookup_buf); - if (javastr != NULL) { - JNU_CallMethodByName(env, NULL, - currentX11InputMethodInstance, - "dispatchCommittedText", - "(Ljava/lang/String;J)V", - javastr, - event->time); + + // JBR-3112 + // See sun.awt.X11.XToolkit#doesCurrentlyDispatchedKeyPressContainThePreeditTextOfLastXResetIC + if (!keyPressContainsThePreeditTextOfLastXResetIC) { + javastr = JNU_NewStringPlatform(env, (const char *)pX11IMData->lookup_buf); + if (javastr != NULL) { + JNU_CallMethodByName(env, NULL, + currentX11InputMethodInstance, + "dispatchCommittedText", + "(Ljava/lang/String;J)V", + javastr, + event->time); + } } break; @@ -591,32 +692,38 @@ static StatusWindow *createStatusWindow(Window parent) { int screen = 0; int i; AwtGraphicsConfigDataPtr adata; - extern int awt_numScreens; /*hardcode the size right now, should get the size base on font*/ int width=80, height=22; Window rootWindow; Window *ignoreWindowPtr; unsigned int ignoreUnit; + Status rc; - XGetGeometry(dpy, parent, &rootWindow, &x, &y, &w, &h, &bw, &depth); + rc = XGetGeometry(dpy, parent, &rootWindow, &x, &y, &w, &h, &bw, &depth); + if (rc == 0) { + return NULL; + } attrib.override_redirect = True; attribmask = CWOverrideRedirect; - for (i = 0; i < awt_numScreens; i++) { - if (RootWindow(dpy, i) == rootWindow) { - screen = i; - break; - } + rc = XGetWindowAttributes(dpy, parent, &xwa); + if (rc == 0) { + return NULL; + } + bw = 2; /*xwa.border_width does not have the correct value*/ + + if (xwa.screen != NULL) { + screen = XScreenNumberOfScreen(xwa.screen); } adata = getDefaultConfig(screen); + if (NULL == adata || NULL == adata->AwtColorMatch) { + return NULL; + } bg = adata->AwtColorMatch(255, 255, 255, adata); fg = adata->AwtColorMatch(0, 0, 0, adata); light = adata->AwtColorMatch(195, 195, 195, adata); dim = adata->AwtColorMatch(128, 128, 128, adata); - XGetWindowAttributes(dpy, parent, &xwa); - bw = 2; /*xwa.border_width does not have the correct value*/ - /*compare the size difference between parent container and shell widget, the diff should be the border frame and title bar height (?)*/ @@ -845,6 +952,31 @@ static void adjustStatusWindow(Window shell) { } #endif /* __linux__ */ + +// ===================================================== JBR-2460 ===================================================== + +/** + * Checks whether the client's new implementation is enabled. + * + * @return True if the client's new implementation is enabled ; False otherwise. + */ +static Bool jbNewXimClient_isEnabled(); + +/** + * A successor of createXIC(JNIEnv*, X11InputMethodData*, Window). + */ +static Bool jbNewXimClient_initializeXICs( + JNIEnv *env, + XIM xInputMethodConnection, + X11InputMethodData *pX11IMData, + Window window, + Bool preferBelowTheSpot +); + +// ==================================================================================================================== + + +// TODO: update the docs /* * Creates two XICs, one for active clients and the other for passive * clients. All information on those XICs are stored in the @@ -860,8 +992,12 @@ static void adjustStatusWindow(Window shell) { * fallback to None styles. */ static Bool -createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w) +createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w, Bool preferBelowTheSpot) { + if (jbNewXimClient_isEnabled() && jbNewXimClient_initializeXICs(env, X11im, pX11IMData, w, preferBelowTheSpot)) { + return True; + } + XVaNestedList preedit = NULL; XVaNestedList status = NULL; XIMStyle on_the_spot_styles = XIMPreeditCallbacks, @@ -928,24 +1064,28 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w) } } + jbNewXimClient_setInputContextFields(&pX11IMData->ic_active, NULL, 0, NULL, NULL, NULL, NULL); + jbNewXimClient_setInputContextFields(&pX11IMData->ic_passive, NULL, 0, NULL, NULL, NULL, NULL); + if (active_styles == on_the_spot_styles) { - pX11IMData->ic_passive = XCreateIC(X11im, + pX11IMData->ic_passive.xic = XCreateIC(X11im, XNClientWindow, w, XNFocusWindow, w, XNInputStyle, passive_styles, NULL); + pX11IMData->ic_passive.inputStyle = passive_styles; callbacks = (XIMCallback *)malloc(sizeof(XIMCallback) * NCALLBACKS); if (callbacks == (XIMCallback *)NULL) return False; - pX11IMData->callbacks = callbacks; + pX11IMData->ic_active.preeditAndStatusCallbacks = ( XIMCallback(*)[NCALLBACKS] ) callbacks; for (i = 0; i < NCALLBACKS; i++, callbacks++) { callbacks->client_data = (XPointer) pX11IMData->x11inputmethod; callbacks->callback = callback_funcs[i]; } - callbacks = pX11IMData->callbacks; + callbacks = (XIMCallback *)pX11IMData->ic_active.preeditAndStatusCallbacks; preedit = (XVaNestedList)XVaCreateNestedList(0, XNPreeditStartCallback, &callbacks[PreeditStartIndex], XNPreeditDoneCallback, &callbacks[PreeditDoneIndex], @@ -966,36 +1106,39 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w) if (status == NULL) goto err; pX11IMData->statusWindow = createStatusWindow(w); - pX11IMData->ic_active = XCreateIC(X11im, + pX11IMData->ic_active.xic = XCreateIC(X11im, XNClientWindow, w, XNFocusWindow, w, XNInputStyle, active_styles, XNPreeditAttributes, preedit, XNStatusAttributes, status, NULL); + pX11IMData->ic_active.inputStyle = active_styles; XFree((void *)status); XFree((void *)preedit); } #else /* !__linux__ */ - pX11IMData->ic_active = XCreateIC(X11im, + pX11IMData->ic_active.xic = XCreateIC(X11im, XNClientWindow, w, XNFocusWindow, w, XNInputStyle, active_styles, XNPreeditAttributes, preedit, NULL); + pX11IMData->ic_active.inputStyle = active_styles; XFree((void *)preedit); #endif /* __linux__ */ } else { - pX11IMData->ic_active = XCreateIC(X11im, + pX11IMData->ic_active.xic = XCreateIC(X11im, XNClientWindow, w, XNFocusWindow, w, XNInputStyle, active_styles, NULL); + pX11IMData->ic_active.inputStyle = active_styles; pX11IMData->ic_passive = pX11IMData->ic_active; } - if (pX11IMData->ic_active == (XIC)0 - || pX11IMData->ic_passive == (XIC)0) { + if (pX11IMData->ic_active.xic == (XIC)0 + || pX11IMData->ic_passive.xic == (XIC)0) { return False; } @@ -1007,9 +1150,9 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w) XIMCallback cb; cb.client_data = (XPointer) pX11IMData->x11inputmethod; cb.callback = (XIMProc) CommitStringCallback; - XSetICValues (pX11IMData->ic_active, XNCommitStringCallback, &cb, NULL); - if (pX11IMData->ic_active != pX11IMData->ic_passive) { - XSetICValues (pX11IMData->ic_passive, XNCommitStringCallback, &cb, NULL); + XSetICValues (pX11IMData->ic_active.xic, XNCommitStringCallback, &cb, NULL); + if (pX11IMData->ic_active.xic != pX11IMData->ic_passive.xic) { + XSetICValues (pX11IMData->ic_passive.xic, XNCommitStringCallback, &cb, NULL); } } @@ -1017,23 +1160,25 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w) // at XmbResetIC. This attribute can be set at XCreateIC. I separately // set the attribute to avoid the failure of XCreateIC at some platform // which does not support the attribute. - if (pX11IMData->ic_active != 0) - XSetICValues(pX11IMData->ic_active, + if (pX11IMData->ic_active.xic != 0) + XSetICValues(pX11IMData->ic_active.xic, XNResetState, XIMInitialState, NULL); - if (pX11IMData->ic_passive != 0 - && pX11IMData->ic_active != pX11IMData->ic_passive) - XSetICValues(pX11IMData->ic_passive, + if (pX11IMData->ic_passive.xic != 0 + && pX11IMData->ic_active.xic != pX11IMData->ic_passive.xic) + XSetICValues(pX11IMData->ic_passive.xic, XNResetState, XIMInitialState, NULL); + pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False; + /* Add the global reference object to X11InputMethod to the list. */ addToX11InputMethodGRefList(pX11IMData->x11inputmethod); /* Unset focus to avoid unexpected IM on */ - setXICFocus(pX11IMData->ic_active, False); - if (pX11IMData->ic_active != pX11IMData->ic_passive) - setXICFocus(pX11IMData->ic_passive, False); + setXICFocus(pX11IMData->ic_active.xic, False); + if (pX11IMData->ic_active.xic != pX11IMData->ic_passive.xic) + setXICFocus(pX11IMData->ic_passive.xic, False); return True; @@ -1047,16 +1192,53 @@ createXIC(JNIEnv * env, X11InputMethodData *pX11IMData, Window w) static int PreeditStartCallback(XIC ic, XPointer client_data, XPointer call_data) { - /*ARGSUSED*/ - /* printf("Native: PreeditStartCallback\n"); */ + /* printf("Native: PreeditStartCallback(%p, %p, %p)\n", ic, client_data, call_data); */ + + JNIEnv * const env = GetJNIEnv(); + + AWT_LOCK(); + + jobject javaInputMethodGRef = (jobject)client_data; + if (!isX11InputMethodGRefInList(javaInputMethodGRef)) { + goto finally; + } + + X11InputMethodData * const pX11IMData = getX11InputMethodData(env, javaInputMethodGRef); + if (pX11IMData == NULL) { + goto finally; + } + + pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = True; + + finally: + AWT_UNLOCK(); return -1; } static void PreeditDoneCallback(XIC ic, XPointer client_data, XPointer call_data) { - /*ARGSUSED*/ - /* printf("Native: PreeditDoneCallback\n"); */ + /* printf("Native: PreeditDoneCallback(%p, %p, %p)\n", ic, client_data, call_data); */ + + JNIEnv * const env = GetJNIEnv(); + + AWT_LOCK(); + + jobject javaInputMethodGRef = (jobject)client_data; + if (!isX11InputMethodGRefInList(javaInputMethodGRef)) { + goto finally; + } + + X11InputMethodData * const pX11IMData = getX11InputMethodData(env, javaInputMethodGRef); + if (pX11IMData == NULL) { + goto finally; + } + + pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False; + + finally: + AWT_UNLOCK(); + return; } /* @@ -1069,6 +1251,8 @@ static void PreeditDrawCallback(XIC ic, XPointer client_data, XIMPreeditDrawCallbackStruct *pre_draw) { + /* printf("Native: PreeditDrawCallback(%p, %p, %p)\n", ic, client_data, pre_draw); */ + JNIEnv *env = GetJNIEnv(); X11InputMethodData *pX11IMData = NULL; jmethodID x11imMethodID; @@ -1161,7 +1345,7 @@ PreeditCaretCallback(XIC ic, XPointer client_data, XIMPreeditCaretCallbackStruct *pre_caret) { /*ARGSUSED*/ - /* printf("Native: PreeditCaretCallback\n"); */ + /* printf("Native: PreeditCaretCallback(%p, %p, %p)\n", ic, client_data, pre_caret); */ } #if defined(__linux__) @@ -1169,14 +1353,14 @@ static void StatusStartCallback(XIC ic, XPointer client_data, XPointer call_data) { /*ARGSUSED*/ - /*printf("StatusStartCallback:\n"); */ + /*printf("Native: StatusStartCallback(%p, %p, %p)\n", ic, client_data, call_data); */ } static void StatusDoneCallback(XIC ic, XPointer client_data, XPointer call_data) { /*ARGSUSED*/ - /*printf("StatusDoneCallback:\n"); */ + /*printf("Native: StatusDoneCallback(%p, %p, %p)\n", ic, client_data, call_data); */ JNIEnv *env = GetJNIEnv(); X11InputMethodData *pX11IMData = NULL; StatusWindow *statusWindow; @@ -1207,7 +1391,7 @@ StatusDrawCallback(XIC ic, XPointer client_data, XIMStatusDrawCallbackStruct *status_draw) { /*ARGSUSED*/ - /*printf("StatusDrawCallback:\n"); */ + /*printf("Native: StatusDrawCallback(%p, %p, %p)\n", ic, client_data, status_draw); */ JNIEnv *env = GetJNIEnv(); X11InputMethodData *pX11IMData = NULL; StatusWindow *statusWindow; @@ -1260,6 +1444,8 @@ StatusDrawCallback(XIC ic, XPointer client_data, #endif /* __linux__ */ static void CommitStringCallback(XIC ic, XPointer client_data, XPointer call_data) { + /* printf("Native: CommitStringCallback(%p, %p, %p)\n", ic, client_data, call_data); */ + JNIEnv *env = GetJNIEnv(); XIMText * text = (XIMText *)call_data; X11InputMethodData *pX11IMData = NULL; @@ -1370,7 +1556,8 @@ Java_sun_awt_X11_XInputMethod_openXIMNative(JNIEnv *env, JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XInputMethod_createXICNative(JNIEnv *env, jobject this, - jlong window) + jlong window, + jboolean preferBelowTheSpot) { X11InputMethodData *pX11IMData; jobject globalRef; @@ -1400,7 +1587,7 @@ Java_sun_awt_X11_XInputMethod_createXICNative(JNIEnv *env, pX11IMData->lookup_buf = 0; pX11IMData->lookup_buf_len = 0; - if (createXIC(env, pX11IMData, (Window)window) == False) { + if (createXIC(env, pX11IMData, (Window)window, (preferBelowTheSpot == JNI_TRUE) ? True : False) == False) { destroyX11InputMethodData((JNIEnv *) NULL, pX11IMData); pX11IMData = (X11InputMethodData *) NULL; if ((*env)->ExceptionCheck(env)) { @@ -1415,6 +1602,117 @@ Java_sun_awt_X11_XInputMethod_createXICNative(JNIEnv *env, return (pX11IMData != NULL); } +JNIEXPORT jboolean JNICALL +Java_sun_awt_X11_XInputMethod_recreateXICNative(JNIEnv *env, + jobject this, + jlong window, jlong pData, jint ctxid, + jboolean preferBelowTheSpot) +{ + // NOTE: must be called under AWT_LOCK + X11InputMethodData * pX11IMData = (X11InputMethodData *)pData; + jboolean result = createXIC(env, pX11IMData, window, (preferBelowTheSpot == JNI_TRUE) ? True : False); + if (result) { + if (ctxid == 1) + pX11IMData->current_ic = pX11IMData->ic_active.xic; + else if (ctxid == 2) + pX11IMData->current_ic = pX11IMData->ic_passive.xic; + } + return result; +} + +JNIEXPORT int JNICALL +Java_sun_awt_X11_XInputMethod_releaseXICNative(JNIEnv *env, + jobject this, + jlong pData) +{ + // NOTE: must be called under AWT_LOCK + X11InputMethodData * pX11IMData = (X11InputMethodData *)pData; + int result = 0; + if (pX11IMData->current_ic == pX11IMData->ic_active.xic) + result = 1; + else if (pX11IMData->current_ic == pX11IMData->ic_passive.xic) + result = 2; + pX11IMData->current_ic = NULL; + destroyXInputContexts(pX11IMData); + return result; +} + + +JNIEXPORT void JNICALL +Java_sun_awt_X11_XInputMethod_delayedDisposeXIC_1preparation_1unsetFocusAndDetachCurrentXICNative + (JNIEnv *env, jobject this) +{ + DASSERT(env != NULL); + X11InputMethodData *pX11IMData = NULL; + + AWT_LOCK(); + + pX11IMData = getX11InputMethodData(env, this); + if (pX11IMData == NULL) { + AWT_UNLOCK(); + return; + } + + if (pX11IMData->ic_active.xic != (XIC)0) { + setXICFocus(pX11IMData->ic_active.xic, False); + } + if ( (pX11IMData->ic_passive.xic != (XIC)0) && (pX11IMData->ic_passive.xic != pX11IMData->ic_active.xic) ) { + setXICFocus(pX11IMData->ic_passive.xic, False); + } + pX11IMData->current_ic = (XIC)0; + + setX11InputMethodData(env, this, NULL); + if ( (*env)->IsSameObject(env, pX11IMData->x11inputmethod, currentX11InputMethodInstance) == JNI_TRUE ) { + // currentX11InputMethodInstance never holds a "unique" java ref - it only holds a "weak" copy of + // _X11InputMethodData::x11inputmethod, so we mustn't DeleteGlobalRef here + currentX11InputMethodInstance = NULL; + currentFocusWindow = 0; + } + + AWT_UNLOCK(); +} + +JNIEXPORT void JNICALL +Java_sun_awt_X11_XInputMethod_delayedDisposeXIC_1preparation_1resetSpecifiedCtxNative + (JNIEnv *env, jclass clazz, const jlong pData) +{ + X11InputMethodData * const pX11IMData = (X11InputMethodData *)pData; + char* preeditText = NULL; + + if (pX11IMData == NULL) { + return; + } + + AWT_LOCK(); + + if (pX11IMData->ic_active.xic != (XIC)0) { + if ( (preeditText = XmbResetIC(pX11IMData->ic_active.xic)) != NULL ) { + (void)XFree(preeditText); preeditText = NULL; + } + } + if ( (pX11IMData->ic_passive.xic != (XIC)0) && (pX11IMData->ic_passive.xic != pX11IMData->ic_active.xic) ) { + if ( (preeditText = XmbResetIC(pX11IMData->ic_passive.xic)) != NULL ) { + (void)XFree(preeditText); preeditText = NULL; + } + } + + AWT_UNLOCK(); +} + +JNIEXPORT void JNICALL +Java_sun_awt_X11_XInputMethod_delayedDisposeXIC_1disposeXICNative(JNIEnv *env, jclass clazz, jlong pData) +{ + X11InputMethodData *pX11IMData = (X11InputMethodData *)pData; + if (pX11IMData == NULL) { + return; + } + + AWT_LOCK(); + destroyX11InputMethodData(env, pX11IMData); pX11IMData = NULL; pData = 0; + AWT_UNLOCK(); +} + + JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env, jobject this, @@ -1436,7 +1734,7 @@ Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env, return; } pX11IMData->current_ic = active ? - pX11IMData->ic_active : pX11IMData->ic_passive; + pX11IMData->ic_active.xic : pX11IMData->ic_passive.xic; /* * On Solaris2.6, setXICWindowFocus() has to be invoked * before setting focus. @@ -1465,6 +1763,110 @@ Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env, AWT_UNLOCK(); } + +/* + * Class: sun_awt_X11_XInputMethod_BrokenImDetectionContext + * Method: obtainCurrentXimNativeDataPtr + * Signature: ()J + * + * NOTE: MUST BE CALLED WITHIN AWT_LOCK + */ +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XInputMethod_00024BrokenImDetectionContext_obtainCurrentXimNativeDataPtr + (JNIEnv *env, jclass cls) +{ + jlong result = 0; + + if (isX11InputMethodGRefInList(currentX11InputMethodInstance)) { + X11InputMethodData * const pX11IMData = getX11InputMethodData(env, currentX11InputMethodInstance); + result = ptr_to_jlong(pX11IMData); + } + + return result; +} + +/* + * Class: sun_awt_X11_XInputMethod_BrokenImDetectionContext + * Method: isCurrentXicPassive + * Signature: (J)Z + * + * NOTE: MUST BE CALLED WITHIN AWT_LOCK + */ +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XInputMethod_00024BrokenImDetectionContext_isCurrentXicPassive + (JNIEnv *env, jclass cls, jlong ximNativeDataPtr) +{ + X11InputMethodData * const pX11ImData = (X11InputMethodData *)jlong_to_ptr(ximNativeDataPtr); + if (pX11ImData == NULL) { + return JNI_FALSE; + } + + const jboolean result = (pX11ImData->current_ic == NULL) ? JNI_FALSE + : (pX11ImData->current_ic == pX11ImData->ic_passive.xic) ? JNI_TRUE + : JNI_FALSE; + + return result; +} + +static XIMPreeditState getPreeditStateOf(XIC xic) { +#if defined(__linux__) && defined(_LP64) && !defined(_LITTLE_ENDIAN) + // XIMPreeditState value which is used for XGetICValues must be 32bit on BigEndian XOrg's xlib + unsigned int state = XIMPreeditUnKnown; +#else + XIMPreeditState state = XIMPreeditUnKnown; +#endif + + XVaNestedList preeditStateAttr = XVaCreateNestedList(0, XNPreeditState, &state, NULL); + if (preeditStateAttr == NULL) { + return XIMPreeditUnKnown; + } + const char * const unsupportedAttrs = XGetICValues(xic, XNPreeditAttributes, preeditStateAttr, NULL); + XFree((void *)preeditStateAttr); + + if (unsupportedAttrs != NULL) { + return XIMPreeditUnKnown; + } + + return (state == XIMPreeditEnable) ? XIMPreeditEnable + : (state == XIMPreeditDisable) ? XIMPreeditDisable + : XIMPreeditUnKnown; +} + +/* + * Class: sun_awt_X11_XInputMethod_BrokenImDetectionContext + * Method: isDuringPreediting + * Signature: ()I + * + * Returns the following values: + * * >0 in case the IM is in preediting state; + * * 0 in case the IM is not in preediting state; + * * <0 in case it's unknown whether the IM is in preediting state or not. + * + * NOTE: MUST BE CALLED WITHIN AWT_LOCK + */ +JNIEXPORT jint JNICALL Java_sun_awt_X11_XInputMethod_00024BrokenImDetectionContext_isDuringPreediting + (JNIEnv *env, jclass cls, jlong ximNativeDataPtr) +{ + X11InputMethodData * const pX11ImData = (X11InputMethodData *)jlong_to_ptr(ximNativeDataPtr); + if (pX11ImData == NULL) { + return -1; + } + + jint result = -1; + + if (pX11ImData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone) { + result = 1; + } else if (pX11ImData->current_ic != NULL) { + const XIMPreeditState preeditState = getPreeditStateOf(pX11ImData->current_ic); + if (preeditState == XIMPreeditEnable) { + result = 1; + } else if (preeditState == XIMPreeditDisable) { + result = 0; + } + } + + return result; +} + + /* * Class: sun_awt_X11InputMethodBase * Method: initIDs @@ -1559,16 +1961,16 @@ JNIEXPORT jstring JNICALL Java_sun_awt_X11InputMethodBase_resetXIC /* * If there is no reference to the current XIC, try to reset both XICs. */ - xText = XmbResetIC(pX11IMData->ic_active); + xText = XmbResetIC(pX11IMData->ic_active.xic); /*it may also means that the real client component does not have focus -- has been deactivated... its xic should not have the focus, bug#4284651 showes reset XIC for htt may bring the focus back, so de-focus it again. */ - setXICFocus(pX11IMData->ic_active, FALSE); - if (pX11IMData->ic_active != pX11IMData->ic_passive) { - char *tmpText = XmbResetIC(pX11IMData->ic_passive); - setXICFocus(pX11IMData->ic_passive, FALSE); + setXICFocus(pX11IMData->ic_active.xic, FALSE); + if (pX11IMData->ic_active.xic != pX11IMData->ic_passive.xic) { + char *tmpText = XmbResetIC(pX11IMData->ic_passive.xic); + setXICFocus(pX11IMData->ic_passive.xic, FALSE); if (xText == (char *)NULL && tmpText) xText = tmpText; } @@ -1627,10 +2029,10 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11InputMethodBase_setCompositionEnabled XGetInputFocus(awt_display, &focus, &revert_to); XGetICValues(pX11IMData->current_ic, XNFocusWindow, &w, NULL); if (RevertToPointerRoot == revert_to - && pX11IMData->ic_active != pX11IMData->ic_passive) { - if (pX11IMData->current_ic == pX11IMData->ic_active) { + && pX11IMData->ic_active.xic != pX11IMData->ic_passive.xic) { + if (pX11IMData->current_ic == pX11IMData->ic_active.xic) { if (getParentWindow(focus) == getParentWindow(w)) { - XUnsetICFocus(pX11IMData->ic_active); + XUnsetICFocus(pX11IMData->ic_active.xic); calledXSetICFocus = True; } } @@ -1644,7 +2046,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11InputMethodBase_setCompositionEnabled XFree((void *)pr_atrb); #if defined(__linux__) if (calledXSetICFocus) { - XSetICFocus(pX11IMData->ic_active); + XSetICFocus(pX11IMData->ic_active.xic); } #endif AWT_UNLOCK(); @@ -1716,19 +2118,1011 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_adjustStatusWindow #endif } -#if defined(__linux__) -static Window getParentWindow(Window w) + +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XInputMethod_doesFocusedXICSupportMovingCandidatesNativeWindow + (JNIEnv *env, jobject this) { - Window root=None, parent=None, *ignore_children=NULL; - unsigned int ignore_uint=0; - Status status = 0; + X11InputMethodData *pX11IMData = NULL; + jboolean result = JNI_FALSE; - if (w == None) - return None; - status = XQueryTree(dpy, w, &root, &parent, &ignore_children, &ignore_uint); - XFree(ignore_children); - if (status == 0) - return None; - return parent; -} -#endif + if ((env == NULL) || (this == NULL)) { + return JNI_FALSE; + } + + AWT_LOCK(); + + pX11IMData = getX11InputMethodData(env, this); + if (pX11IMData == NULL) { + goto finally; + } + + if (pX11IMData->current_ic == NULL) { + goto finally; + } + + if (pX11IMData->current_ic == pX11IMData->ic_active.xic) { + if ( (pX11IMData->ic_active.inputStyle & XIMPreeditPosition) == XIMPreeditPosition ) { + result = JNI_TRUE; + } + } else { + DASSERT(pX11IMData->current_ic == pX11IMData->ic_passive.xic); + if ( (pX11IMData->ic_passive.inputStyle & XIMPreeditPosition) == XIMPreeditPosition ) { + result = JNI_TRUE; + } + } + +finally: + AWT_UNLOCK(); + + return result; +} + + +static void jbNewXimClient_moveImCandidatesWindow(XIC ic, XPoint newLocation); + +JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_adjustCandidatesNativeWindowPosition + (JNIEnv *env, jobject this, jint x, jint y) +{ + // Must be called under awt lock + + XPoint location = {x, y}; + XIC xic = NULL; + X11InputMethodData *pX11IMData = getX11InputMethodData(env, this); + + if (pX11IMData == NULL) { + return; + } + + xic = pX11IMData->current_ic; + if (xic == NULL) { + jio_fprintf(stderr, "%s: xic == NULL.\n", __func__); + return; + } + + jbNewXimClient_moveImCandidatesWindow(xic, location); +} + +#if defined(__linux__) +static Window getParentWindow(Window w) +{ + Window root=None, parent=None, *ignore_children=NULL; + unsigned int ignore_uint=0; + Status status = 0; + + if (w == None) + return None; + status = XQueryTree(dpy, w, &root, &parent, &ignore_children, &ignore_uint); + XFree(ignore_children); + if (status == 0) + return None; + return parent; +} +#endif + +JNIEXPORT jboolean JNICALL +Java_sun_awt_X11InputMethod_recreateX11InputMethod(JNIEnv *env, jclass cls) +{ + if (X11im == NULL || dpy == NULL) + return JNI_FALSE; + + Status retstat = XCloseIM(X11im); + X11im = XOpenIM(dpy, NULL, NULL, NULL); + if (X11im == NULL) + return JNI_FALSE; + + XIMCallback ximCallback; + ximCallback.callback = (XIMProc)DestroyXIMCallback; + ximCallback.client_data = NULL; + XSetIMValues(X11im, XNDestroyCallback, &ximCallback, NULL); + return JNI_TRUE; +} + + +// ==================================================================================================================== +// JBR-2460: completely new implementation of XIM client +// It uses the "over-the-spot" interaction style with the IME +// (to be more precise, XIMPreeditPosition | XIMStatusNothing flags. XIMStatusNothing is used because it's the only +// style supported by each of fcitx, fcitx5, iBus IMEs) +// Usage of the new client is controlled by the function jbNewXimClient_isEnabled that invokes +// the sun.awt.X11.XInputMethod#isJbNewXimClientEnabled method +// ==================================================================================================================== + +/** + * Optional features + */ +typedef struct { + struct { + // XNVisiblePosition + Bool isXNVisiblePositionAvailable; + // XNR6PreeditCallback + Bool isXNR6PreeditCallbackAvailable; + } ximFeatures; + + struct { + // XNStringConversion + Bool isXNStringConversionAvailable; + // XNStringConversionCallback + Bool isXNStringConversionCallbackAvailable; + // XNResetState + Bool isXNResetStateAvailable; + // XNHotKey + Bool isXNHotKeyAvailable; + // XNPreeditState + Bool isXNPreeditStateAvailable; + // XNPreeditStateNotifyCallback + Bool isXNPreeditStateNotifyCallbackAvailable; + // XNCommitStringCallback + Bool isXNCommitStringCallbackAvailable; + } xicFeatures; +} jbNewXimClient_XIMFeatures; + +/** + * Asks \p inputMethod about the features it supports. + */ +static jbNewXimClient_XIMFeatures jbNewXimClient_obtainSupportedXIMFeaturesBy(XIM inputMethod); + + +/** + * Obtains supported input styles by the specified input method + * @return NULL if failed ; otherwise the returned pointer has to be freed via XFree after use + */ +static XIMStyles* jbNewXimClient_obtainSupportedInputStylesBy(XIM inputMethod); + + +// See https://docs.oracle.com/javase/8/docs/technotes/guides/imf/spec.html#InputStyles +// DON'T FORGET TO ADJUST THE VALUE OF THE JBNEWXIMCLIENT_COUNTOF_SUPPORTED_INPUT_STYLES IF YOU ADD/REMOVE ELEMENTS HERE +typedef enum jbNewXimClient_SupportedInputStyle { + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_1 = XIMPreeditCallbacks | XIMStatusCallbacks, + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_2 = XIMPreeditCallbacks | XIMStatusNothing, + // Corresponds to jbNewXimClient_createInputContextOfPreeditPositionStatusNothing + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_BELOW_THE_SPOT_1 = XIMPreeditPosition | XIMStatusNothing, + // Corresponds to jbNewXimClient_createInputContextOfPreeditNothingStatusNothing + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ROOT_WINDOW_1 = XIMPreeditNothing | XIMStatusNothing, + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_NOFEEDBACK = XIMPreeditNone | XIMStatusNone +} jbNewXimClient_SupportedInputStyle; + +enum { + JBNEWXIMCLIENT_COUNTOF_SUPPORTED_INPUT_STYLES = 5 +}; + +typedef struct jbNewXimClient_PrioritizedStyles { + struct { + jbNewXimClient_SupportedInputStyle forActiveClient; + jbNewXimClient_SupportedInputStyle forPassiveClient; + } combinations[JBNEWXIMCLIENT_COUNTOF_SUPPORTED_INPUT_STYLES * JBNEWXIMCLIENT_COUNTOF_SUPPORTED_INPUT_STYLES]; + + // Only 0th..pairsCount-1 elements of combinations are valid + unsigned int pairsCount; +} jbNewXimClient_PrioritizedStyles; + +/** + * Among all the XIM input styles supported by the current IME (see jbNewXimClient_obtainSupportedInputStylesBy) finds + * all styles supported by this implementation and forms pairs (style for an active client ; style for a passive client) + * in the descending order of preference. + * + * @param preferBelowTheSpot - allows to override the default behavior which prefers on-the-spot style over below-the-spot + * @param allXimSupportedInputStyles - the XIM input styles to search within + * @param allXimSupportedFeatures - all the features supported by the current IME (can be obtained via jbNewXimClient_obtainSupportedXIMFeaturesBy) + * @return pairs (style for an active client ; style for a passive client) in the combinations field + * and the number of valid pairs in the pairsCount field + */ +static jbNewXimClient_PrioritizedStyles jbNewXimClient_chooseAndPrioritizeInputStyles( + Bool preferBelowTheSpot, + const XIMStyles *allXimSupportedInputStyles, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +); + + +/** + * Creates an input context of the specified input style. + * + * @param style - specifies on of the styles obtained from jbNewXimClient_chooseAndPrioritizeInputStyles + * @param window - specifies XNClientWindow XIC value + * @param allXimSupportedFeatures - specifies all the features supported by the current IME + * (can be obtained via jbNewXimClient_obtainSupportedXIMFeaturesBy) + * @return NULL if it failed to create an input context suitable for the specified input style + * ; otherwise the returned pointer has to be freed via XDestroyIC + */ +static jbNewXimClient_ExtendedInputContext jbNewXimClient_createInputContextOfStyle( + jbNewXimClient_SupportedInputStyle style, + JNIEnv *jEnv, + const X11InputMethodData *pX11IMData, + XIM xInputMethodConnection, + Window window, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +); + + +static jclass XInputMethodCls = NULL; +static jmethodID isJbNewXimClientEnabledMID = NULL; +static Bool jbNewXimClient_isEnabled() { + // Basically it just calls the java static method sun.awt.X11.XInputMethod#isJbNewXimClientEnabled() + + JNIEnv * const jniEnv = GetJNIEnv(); + + if ((jniEnv == NULL) || (jniEnv == (void*)JNI_ERR)) { + jio_fprintf(stderr, "%s: GetJNIEnv() failed (jniEnv == NULL || jniEnv == (void*)JNI_ERR).\n", __func__); + return False; + } + + // Looking up the method sun.awt.X11.XInputMethod#isJbNewXimClientEnabled() + + if (XInputMethodCls == NULL) { + jclass XInputMethodClsTmp = NULL; + const jclass XInputMethodClsLocalRef = (*jniEnv)->FindClass(jniEnv, "sun/awt/X11/XInputMethod"); + if (XInputMethodClsLocalRef == NULL) { + jio_fprintf(stderr, "%s: failed to find the sun.awt.X11.XInputMethod class (XInputMethodClsLocalRef == NULL).\n", __func__); + return False; + } + + XInputMethodClsTmp = (jclass)(*jniEnv)->NewGlobalRef(jniEnv, XInputMethodClsLocalRef); + if (XInputMethodClsTmp == NULL) { + jio_fprintf(stderr, "%s: NewGlobalRef() failed (XInputMethodClsTmp == NULL).\n", __func__); + return False; + } + + XInputMethodCls = XInputMethodClsTmp; + } + + if (isJbNewXimClientEnabledMID == NULL) { + const jmethodID isJbNewXimClientEnabledMIDTmp = + (*jniEnv)->GetStaticMethodID(jniEnv, XInputMethodCls, "isJbNewXimClientEnabled", "()Z"); + if (isJbNewXimClientEnabledMIDTmp == NULL) { + jio_fprintf(stderr, "%s: GetStaticMethodID() failed (isJbNewXimClientEnabledMIDTmp == NULL).\n", __func__); + return False; + } + + isJbNewXimClientEnabledMID = isJbNewXimClientEnabledMIDTmp; + } + + return ( (*jniEnv)->CallStaticBooleanMethod(jniEnv, XInputMethodCls, isJbNewXimClientEnabledMID) == JNI_TRUE ) + ? True + : False; +} + + +static Bool jbNewXimClient_initializeXICs( + JNIEnv* const env, + const XIM xInputMethodConnection, + X11InputMethodData* const pX11IMData, + const Window window, + const Bool preferBelowTheSpot +) { + if (env == NULL) { + jio_fprintf(stderr, "%s: env == NULL.\n", __func__); + return False; + } + if (xInputMethodConnection == NULL) { + // printf has been disabled because it pollutes stderr in environments without input methods + //jio_fprintf(stderr, "%s: xInputMethodConnection == NULL.\n", __func__); + return False; + } + if (pX11IMData == NULL) { + jio_fprintf(stderr, "%s: pX11IMData == NULL.\n", __func__); + return False; + } + + Bool result = False; + + jbNewXimClient_XIMFeatures supportedXimFeatures = { 0 }; + XIMStyles* supportedXimInputStyles = NULL; + + jbNewXimClient_PrioritizedStyles inputStylesToTry = { 0 }; + + jbNewXimClient_ExtendedInputContext activeClientIc; + jbNewXimClient_ExtendedInputContext passiveClientIc; + + unsigned int i = 0; + + jbNewXimClient_setInputContextFields(&activeClientIc, NULL, 0, NULL, NULL, NULL, NULL); + jbNewXimClient_setInputContextFields(&passiveClientIc, NULL, 0, NULL, NULL, NULL, NULL); + + // Required IC values for XCreateIC by the X protocol: + // * XNInputStyle + // * (When XNInputStyle includes XIMPreeditPosition) XNFontSet + // * When XNInputStyle includes XIMPreeditCallbacks: + // * XNPreeditStartCallback + // * XNPreeditDoneCallback + // * XNPreeditDrawCallback + // * XNPreeditCaretCallback + // * When XNInputStyle includes XIMStatusCallbacks: + // * XNStatusStartCallback + // * XNStatusDoneCallback + // * XNStatusDrawCallback + + // 1. Ask for supported IM features (see the docs about XNQueryIMValuesList and XNQueryICValuesList) + // 2. Ask for supported IM styles (XIMPreedit... | XIMStatus...) + // 3. Choose the IM styles for active and passive clients in the following descending order: + // a. if preferBelowTheSpot is True: + // 1. XIMPreeditPosition + // 2. XIMPreeditCallbacks + // 3. XIMPreeditNothing + // 4. XIMPreeditNone + // b. if preferBelowTheSpot is False: + // 1. XIMPreeditCallbacks + // 2. XIMPreeditPosition + // 3. XIMPreeditNothing + // 4. XIMPreeditNone + // 4. Try to create an active and a passive client of the styles got from p.3 + + supportedXimFeatures = jbNewXimClient_obtainSupportedXIMFeaturesBy(xInputMethodConnection); + + supportedXimInputStyles = jbNewXimClient_obtainSupportedInputStylesBy(xInputMethodConnection); + if (supportedXimInputStyles == NULL) { + jio_fprintf(stderr, "%s: failed to obtain input styles supported by xInputMethodConnection=%p.\n", + __func__, xInputMethodConnection); + goto finally; + } + + inputStylesToTry = jbNewXimClient_chooseAndPrioritizeInputStyles( + preferBelowTheSpot, + supportedXimInputStyles, + &supportedXimFeatures + ); + + XFree(supportedXimInputStyles); + supportedXimInputStyles = NULL; + + if (inputStylesToTry.pairsCount < 1) { + // No acceptable styles are found + goto finally; + } + + // Try to create a pair of contexts for an active and a passive client respectively + // in descending order of preferred styles pairs + for (i = 0; i < inputStylesToTry.pairsCount; ++i) { + activeClientIc = jbNewXimClient_createInputContextOfStyle( + inputStylesToTry.combinations[i].forActiveClient, + env, + pX11IMData, + xInputMethodConnection, + window, + &supportedXimFeatures + ); + if (activeClientIc.xic == NULL) { + // Failed to create a context for an active client, so let's try the next pair of styles + continue; + } + + passiveClientIc = jbNewXimClient_createInputContextOfStyle( + inputStylesToTry.combinations[i].forPassiveClient, + env, + pX11IMData, + xInputMethodConnection, + window, + &supportedXimFeatures + ); + if (passiveClientIc.xic == NULL) { + // Failed to create a context for a passive client, so let's dispose the context of an active client and + // then try the next pair of styles + jbNewXimClient_destroyInputContext(&activeClientIc); + } else { + // Both contexts have been created successfully + break; + } + } + + if ((activeClientIc.xic == NULL) || (passiveClientIc.xic == NULL)) { + jio_fprintf(stderr, "%s: failed to create an input context for an active client and/or a passive client. %u pairs of input styles have been tried\n", + __func__, inputStylesToTry.pairsCount); + + // If one of the contexts is NULL then both of them are expected to be NULL + DASSERT(activeClientIc.xic == NULL); + DASSERT(passiveClientIc.xic == NULL); + + goto finally; + } + + pX11IMData->current_ic = NULL; + pX11IMData->ic_active = activeClientIc; + pX11IMData->ic_passive = passiveClientIc; + + pX11IMData->brokenImDetectionContext.isBetweenPreeditStartAndPreeditDone = False; + + /* Add the global reference object to X11InputMethod to the list. */ + addToX11InputMethodGRefList(pX11IMData->x11inputmethod); + + result = True; + +finally: + if (supportedXimInputStyles != NULL) { + XFree(supportedXimInputStyles); + supportedXimInputStyles = NULL; + } + + if (result != True) { + jbNewXimClient_destroyInputContext(&activeClientIc); + jbNewXimClient_destroyInputContext(&passiveClientIc); + } + + return result; +} + + +static jbNewXimClient_XIMFeatures jbNewXimClient_obtainSupportedXIMFeaturesBy(XIM inputMethod) +{ + jbNewXimClient_XIMFeatures result = { 0 }; + XIMValuesList *ximValues = NULL; + XIMValuesList *xicValues = NULL; + char *unsupportedIMValue = NULL; + + result.ximFeatures.isXNVisiblePositionAvailable = False; + result.ximFeatures.isXNR6PreeditCallbackAvailable = False; + + result.xicFeatures.isXNStringConversionAvailable = False; + result.xicFeatures.isXNStringConversionCallbackAvailable = False; + result.xicFeatures.isXNResetStateAvailable = False; + result.xicFeatures.isXNHotKeyAvailable = False; + result.xicFeatures.isXNPreeditStateAvailable = False; + result.xicFeatures.isXNPreeditStateNotifyCallbackAvailable = False; + result.xicFeatures.isXNCommitStringCallbackAvailable = False; + + if (inputMethod == NULL) { + return result; + } + + unsupportedIMValue = XGetIMValues( + inputMethod, + XNQueryIMValuesList, &ximValues, + XNQueryICValuesList, &xicValues, + NULL + ); + if (unsupportedIMValue != NULL) { + jio_fprintf(stderr, "%s: failed to get the following property \"%s\".\n", __func__, unsupportedIMValue); + // Mustn't be freed + unsupportedIMValue = NULL; + } + + if (ximValues != NULL) { + for (unsigned int i = 0; i < ximValues->count_values; ++i) { + if (strcmp(XNVisiblePosition, ximValues->supported_values[i]) == 0) { + result.ximFeatures.isXNVisiblePositionAvailable = True; + } else if (strcmp(XNR6PreeditCallback, ximValues->supported_values[i]) == 0) { + result.ximFeatures.isXNR6PreeditCallbackAvailable = True; + } + } + } + if (xicValues != NULL) { + for (unsigned int i = 0; i < xicValues->count_values; ++i) { + if (strcmp(XNStringConversion, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNStringConversionAvailable = True; + } else if (strcmp(XNStringConversionCallback, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNStringConversionCallbackAvailable = True; + } else if (strcmp(XNResetState, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNResetStateAvailable = True; + } else if (strcmp(XNHotKey, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNHotKeyAvailable = True; + } else if (strcmp(XNPreeditState, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNPreeditStateAvailable = True; + } else if (strcmp(XNPreeditStateNotifyCallback, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNPreeditStateNotifyCallbackAvailable = True; + } else if (strcmp(XNCommitStringCallback, xicValues->supported_values[i]) == 0) { + result.xicFeatures.isXNCommitStringCallbackAvailable = True; + } + } + } + +finally: + if (ximValues != NULL) { + XFree(ximValues); + ximValues = NULL; + } + if (xicValues != NULL) { + XFree(xicValues); + xicValues = NULL; + } + + return result; +} + + +static XIMStyles* jbNewXimClient_obtainSupportedInputStylesBy(XIM inputMethod) +{ + XIMStyles* result = NULL; + char *unsupportedIMValue = NULL; + + if (inputMethod == NULL) { + return NULL; + } + if ( (unsupportedIMValue = XGetIMValues(inputMethod, XNQueryInputStyle, &result, NULL)) != NULL ) { + jio_fprintf(stderr, "%s: failed to get the following property \"%s\".\n", __func__, unsupportedIMValue); + unsupportedIMValue = NULL; + } + + return result; +} + +static jbNewXimClient_PrioritizedStyles jbNewXimClient_chooseAndPrioritizeInputStyles( + Bool preferBelowTheSpot, + const XIMStyles *allXimSupportedInputStyles, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +) { + jbNewXimClient_PrioritizedStyles result = { 0 }; + + const jbNewXimClient_SupportedInputStyle activeClientStylesTemplate[] = { + (preferBelowTheSpot == True) ? JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_BELOW_THE_SPOT_1 : JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_1, + (preferBelowTheSpot == True) ? JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_1 : JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_2, + (preferBelowTheSpot == True) ? JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_2 : JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_BELOW_THE_SPOT_1, + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ROOT_WINDOW_1, + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_NOFEEDBACK + }; + enum { ACTIVE_CLIENT_ALL_STYLES_COUNT = sizeof(activeClientStylesTemplate) / sizeof(activeClientStylesTemplate[0]) }; + + const jbNewXimClient_SupportedInputStyle passiveClientStylesTemplate[] = { + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ROOT_WINDOW_1, + JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_NOFEEDBACK + }; + enum { PASSIVE_CLIENT_ALL_STYLES_COUNT = sizeof(passiveClientStylesTemplate) / sizeof(passiveClientStylesTemplate[0]) }; + + // Will be filled later based on the templates + jbNewXimClient_SupportedInputStyle activeClientStyles[ACTIVE_CLIENT_ALL_STYLES_COUNT] = { 0 }; + unsigned int activeClientStylesCount = 0; + + // Will be filled later based on the templates + jbNewXimClient_SupportedInputStyle passiveClientStyles[PASSIVE_CLIENT_ALL_STYLES_COUNT] = { 0 }; + unsigned int passiveClientStylesCount = 0; + + unsigned int i = 0, j = 0; + + DASSERT(activeClientStylesCount <= JBNEWXIMCLIENT_COUNTOF_SUPPORTED_INPUT_STYLES); + DASSERT(passiveClientStylesCount <= JBNEWXIMCLIENT_COUNTOF_SUPPORTED_INPUT_STYLES); + + result.pairsCount = 0; + + if ((allXimSupportedInputStyles == NULL) || (allXimSupportedFeatures == NULL)) { + return result; + } + + // Filling activeClientStyles + for (i = 0; i < ACTIVE_CLIENT_ALL_STYLES_COUNT; ++i) { + const jbNewXimClient_SupportedInputStyle searchedStyle = activeClientStylesTemplate[i]; + + for (j = 0; j < allXimSupportedInputStyles->count_styles; ++j) { + if ( (allXimSupportedInputStyles->supported_styles[j] & searchedStyle) == searchedStyle ) { + activeClientStyles[activeClientStylesCount++] = searchedStyle; + break; + } + } + } + + // Filling passiveClientStyles + for (i = 0; i < PASSIVE_CLIENT_ALL_STYLES_COUNT; ++i) { + const jbNewXimClient_SupportedInputStyle searchedStyle = passiveClientStylesTemplate[i]; + + for (j = 0; j < allXimSupportedInputStyles->count_styles; ++j) { + if ( (allXimSupportedInputStyles->supported_styles[j] & searchedStyle) == searchedStyle ) { + passiveClientStyles[passiveClientStylesCount++] = searchedStyle; + break; + } + } + } + + // Combining the pairs (activeClientStyles[i], passiveClientStyles[j]) into result + DASSERT(activeClientStylesCount * passiveClientStylesCount <= sizeof(result.combinations) / sizeof(result.combinations[0])); + for (i = 0; i < activeClientStylesCount; ++i) { + const jbNewXimClient_SupportedInputStyle activeStyle = activeClientStyles[i]; + + for (j = 0; j < passiveClientStylesCount; ++j) { + const jbNewXimClient_SupportedInputStyle passiveStyle = passiveClientStyles[i]; + + result.combinations[result.pairsCount].forActiveClient = activeStyle; + result.combinations[result.pairsCount].forPassiveClient = passiveStyle; + ++result.pairsCount; + } + } + + return result; +} + + +/** + * Creates an input context of the style XIMPreeditPosition | XIMStatusNothing (corresponds to the java below-the-spot style). + */ +static jbNewXimClient_ExtendedInputContext jbNewXimClient_createInputContextOfPreeditPositionStatusNothing( + JNIEnv *jEnv, + jobject x11inputmethod, + XIM xInputMethodConnection, + Window window, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +); + +/** + * Creates an input context of the style XIMPreeditNothing | XIMStatusNothing (corresponds to the java root-window style). + */ +static jbNewXimClient_ExtendedInputContext jbNewXimClient_createInputContextOfPreeditNothingStatusNothing( + JNIEnv *jEnv, + jobject x11inputmethod, + XIM xInputMethodConnection, + Window window, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +); + +static jbNewXimClient_ExtendedInputContext jbNewXimClient_createInputContextOfStyle( + const jbNewXimClient_SupportedInputStyle style, + JNIEnv * const jEnv, + const X11InputMethodData * const pX11IMData, + const XIM xInputMethodConnection, + const Window window, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +) { + jbNewXimClient_ExtendedInputContext result; + jbNewXimClient_setInputContextFields(&result, NULL, 0, NULL, NULL, NULL, NULL); + + switch (style) { + case JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_BELOW_THE_SPOT_1: + result = jbNewXimClient_createInputContextOfPreeditPositionStatusNothing( + jEnv, pX11IMData->x11inputmethod, xInputMethodConnection, window, allXimSupportedFeatures + ); + break; + case JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ROOT_WINDOW_1: + result = jbNewXimClient_createInputContextOfPreeditNothingStatusNothing( + jEnv, pX11IMData->x11inputmethod, xInputMethodConnection, window, allXimSupportedFeatures + ); + break; + case JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_1: + case JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_ON_THE_SPOT_2: + case JBNEWXIMCLIENT_SUPPORTED_INPUT_STYLE_NOFEEDBACK: + // TODO: support + break; + } + + if (result.xic != NULL) { + /* Unsets focus to avoid unexpected IM on */ + setXICFocus(result.xic, False); + } + + return result; +} + + +/** A wrapper around XCreateFontSet */ +static XFontSet jbNewXimClient_createIcFontset(Display *display, const char *xlfdFontSet); + + +static jbNewXimClient_ExtendedInputContext jbNewXimClient_createInputContextOfPreeditPositionStatusNothing( + JNIEnv * const jEnv, + const jobject x11inputmethod, + const XIM xInputMethodConnection, + const Window window, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +) { + jbNewXimClient_ExtendedInputContext result; + Display *xicDisplay = NULL; + // XNFontSet + XFontSet preeditFontSet = NULL; + // XNSpotLocation + XPoint imCandidatesInitLocation = { 0, 0 }; + // XNPreeditAttributes + XVaNestedList preeditAttributes = NULL; + XIC xic = NULL; + char *unsupportedIMValue = NULL; + + jbNewXimClient_setInputContextFields(&result, NULL, 0, NULL, NULL, NULL, NULL); + + if ((jEnv == NULL) || (x11inputmethod == NULL) || (xInputMethodConnection == NULL) || (allXimSupportedFeatures == NULL)) { + return result; + } + + xicDisplay = XDisplayOfIM(xInputMethodConnection); + if (xicDisplay == NULL) { + jio_fprintf(stderr, "%s: xicDisplay == NULL.\n", __func__); + goto finally; + } + + preeditFontSet = jbNewXimClient_createIcFontset( + xicDisplay, + // Literally any fonts + "-*-*-*-*-*-*-*-*-*-*-*-*-*-*" + ); + if (preeditFontSet == NULL) { + goto finally; + } + + preeditAttributes = XVaCreateNestedList(0, + /* + * Xlib mistakenly requires to set XNFontSet for the XIMPreeditPosition style (otherwise XCreateIC fails) + * due to its own bug there: + * https://github.com/mirror/libX11/blob/ff8706a5eae25b8bafce300527079f68a201d27f/modules/im/ximcp/imRm.c#L2011 + * (it should have XIM_MODE_PRE_DEFAULT instead of XIM_MODE_PRE_CREATE) + */ + XNFontSet, preeditFontSet, + /* + * Xlib mistakenly requires to set XNSpotLocation for the XIMPreeditPosition style + * at the creation time (otherwise XCreateIC fails) due to its own bug there: + * https://github.com/mirror/libX11/blob/ff8706a5eae25b8bafce300527079f68a201d27f/modules/im/ximcp/imRm.c#L1951 + * (it should have XIM_MODE_PRE_DEFAULT instead of XIM_MODE_PRE_CREATE) + */ + XNSpotLocation, &imCandidatesInitLocation, + NULL + ); + if (preeditAttributes == NULL) { + jio_fprintf(stderr, "%s: preeditAttributes == NULL.\n", __func__); + goto finally; + } + + xic = XCreateIC( + xInputMethodConnection, + /* + * Since we're forced to set XNSpotLocation at the creation time (see above), + * we have to set XNClientWindow before + * (otherwise we can get an undefined behavior according to the documentation of the XNSpotLocation) + */ + XNClientWindow, window, + XNInputStyle, (XIMStyle)(XIMPreeditPosition | XIMStatusNothing), + XNPreeditAttributes, preeditAttributes, + NULL + ); + + XFree(preeditAttributes); + preeditAttributes = NULL; + + if (xic == NULL) { + jio_fprintf(stderr, "%s: XCreateIC failed to create an input context.\n", __func__); + goto finally; + } + + // Setting up various XIC properties + + // First, obligatory properties + + // XNClientWindow has already been set at XCreateIC + + if ( (unsupportedIMValue = XSetICValues(xic, XNFocusWindow, window, NULL)) != NULL ) { + jio_fprintf(stderr, "%s: failed to set the following property \"%s\".\n", __func__, unsupportedIMValue); + unsupportedIMValue = NULL; + // Not a critical error so let's proceed + } + + // Optional properties + + /* + * Use commit string call back if possible. + * This will ensure the correct order of preedit text and commit text + */ + if (allXimSupportedFeatures->xicFeatures.isXNCommitStringCallbackAvailable == True) + { + const char* setIcErr = NULL; + XIMCallback cb; + cb.client_data = (XPointer)x11inputmethod; + cb.callback = (XIMProc)&CommitStringCallback; + + if ( (setIcErr = XSetICValues(xic, XNCommitStringCallback, &cb, NULL)) != NULL ) { + jio_fprintf(stderr, "%s: failed to set the IC value \"%s\".\n", __func__, setIcErr); + } + } + + /* + * The code sets the IC mode that the preedit state is not initialized + * at XmbResetIC. This attribute can be set at XCreateIC. I separately + * set the attribute to avoid the failure of XCreateIC at some platform + * which does not support the attribute. + */ + if (allXimSupportedFeatures->xicFeatures.isXNResetStateAvailable == True) { + const char* setIcErr = XSetICValues(xic, XNResetState, XIMInitialState, NULL); + if (setIcErr != NULL) { + jio_fprintf(stderr, "%s: failed to set the IC value \"%s\".\n", __func__, setIcErr); + } + } + + result.xic = xic; + result.inputStyle = XIMPreeditPosition | XIMStatusNothing; + result.xicDisplay = xicDisplay; + result.preeditCustomFontSet = preeditFontSet; + +finally: + if (preeditAttributes != NULL) { + XFree(preeditAttributes); + preeditAttributes = NULL; + } + if (result.xic == NULL) { + // Cleanup if smth failed + + if (xic != NULL) { + XDestroyIC(xic); + xic = NULL; + } + if (preeditFontSet != NULL) { + DASSERT(xicDisplay != NULL); + XFreeFontSet(xicDisplay, preeditFontSet); + preeditFontSet = NULL; + } + } + + return result; +} + +static jbNewXimClient_ExtendedInputContext jbNewXimClient_createInputContextOfPreeditNothingStatusNothing( + JNIEnv * const jEnv, + const jobject x11inputmethod, + const XIM xInputMethodConnection, + const Window window, + const jbNewXimClient_XIMFeatures *allXimSupportedFeatures +) { + jbNewXimClient_ExtendedInputContext result; + Display *xicDisplay = NULL; + XIC xic = NULL; + char *unsupportedIMValue = NULL; + + jbNewXimClient_setInputContextFields(&result, NULL, 0, NULL, NULL, NULL, NULL); + + if ((jEnv == NULL) || (x11inputmethod == NULL) || (xInputMethodConnection == NULL) || (allXimSupportedFeatures == NULL)) { + return result; + } + + xicDisplay = XDisplayOfIM(xInputMethodConnection); + if (xicDisplay == NULL) { + jio_fprintf(stderr, "%s: xicDisplay == NULL.\n", __func__); + goto finally; + } + + xic = XCreateIC( + xInputMethodConnection, + XNInputStyle, (XIMStyle)(XIMPreeditNothing | XIMStatusNothing), + NULL + ); + + if (xic == NULL) { + jio_fprintf(stderr, "%s: XCreateIC failed to create an input context.\n", __func__); + goto finally; + } + + // Setting up various XIC properties + + // First, obligatory properties + + if ( (unsupportedIMValue = XSetICValues(xic, XNClientWindow, window, NULL)) != NULL ) { + jio_fprintf(stderr, "%s: failed to set the following property \"%s\".\n", __func__, unsupportedIMValue); + unsupportedIMValue = NULL; + // The X protocol requires to set the property once and only once and before any input is done using + // the input context. So a failure here is critical, we can't proceed + goto finally; + } + + if ( (unsupportedIMValue = XSetICValues(xic, XNFocusWindow, window, NULL)) != NULL ) { + jio_fprintf(stderr, "%s: failed to set the following property \"%s\".\n", __func__, unsupportedIMValue); + unsupportedIMValue = NULL; + // Not a critical error so let's proceed + } + + // Optional properties + + /* + * Use commit string call back if possible. + * This will ensure the correct order of preedit text and commit text. + */ + if (allXimSupportedFeatures->xicFeatures.isXNCommitStringCallbackAvailable == True) + { + const char* setIcErr = NULL; + XIMCallback cb; + cb.client_data = (XPointer)x11inputmethod; + cb.callback = (XIMProc)&CommitStringCallback; + + if ( (setIcErr = XSetICValues(xic, XNCommitStringCallback, &cb, NULL)) != NULL ) { + jio_fprintf(stderr, "%s: failed to set the IC value \"%s\".\n", __func__, setIcErr); + } + } + + /* + * The code sets the IC mode that the preedit state is not initialized + * at XmbResetIC. This attribute can be set at XCreateIC. I separately + * set the attribute to avoid the failure of XCreateIC at some platform + * which does not support the attribute. + */ + if (allXimSupportedFeatures->xicFeatures.isXNResetStateAvailable == True) { + const char* setIcErr = XSetICValues(xic, XNResetState, XIMInitialState, NULL); + if (setIcErr != NULL) { + jio_fprintf(stderr, "%s: failed to set the IC value \"%s\".\n", __func__, setIcErr); + } + } + + result.xic = xic; + result.inputStyle = XIMPreeditNothing | XIMStatusNothing; + result.xicDisplay = xicDisplay; + +finally: + return result; +} + + +static XFontSet jbNewXimClient_createIcFontset(Display * const display, const char * const xlfdFontSet) { + XFontSet result = NULL; + // Has to be freed via XFreeStringList + char** missingCharsets = NULL; + int missingCharsetsCount = 0; + // Mustn't be freed + char* defStringReturn = NULL; + + if ((display == NULL) || (xlfdFontSet == NULL)) { + return result; + } + + result = XCreateFontSet(display, xlfdFontSet, &missingCharsets, &missingCharsetsCount, &defStringReturn); + + if (missingCharsets != NULL) { + XFreeStringList(missingCharsets); + missingCharsets = NULL; + missingCharsetsCount = 0; + } + + return result; +} + + +static inline void jbNewXimClient_setInputContextFields( + // Non-nullable + jbNewXimClient_ExtendedInputContext * const context, + // Nullable + const XIC xic, + XIMStyle inputStyle, + // Nullable + Display * const xicDisplay, + // Nullable + const XFontSet preeditCustomFontSet, + // Nullable + const XFontSet statusCustomFontSet, + // Nullable + XIMCallback (* const preeditAndStatusCallbacks)[NCALLBACKS] +) { + if (context == NULL) { + return; + } + + context->xic = xic; + context->inputStyle = inputStyle; + context->xicDisplay = xicDisplay; + context->preeditCustomFontSet = preeditCustomFontSet; + context->statusCustomFontSet = statusCustomFontSet; + context->preeditAndStatusCallbacks = preeditAndStatusCallbacks; +} + +static void jbNewXimClient_destroyInputContext(jbNewXimClient_ExtendedInputContext *context) +{ + if (context == NULL) { + return; + } + + jbNewXimClient_ExtendedInputContext localContext = *context; + jbNewXimClient_setInputContextFields(context, NULL, 0, NULL, NULL, NULL, NULL); + + if (localContext.xic != NULL) { + XDestroyIC(localContext.xic); + } + if (localContext.preeditCustomFontSet != NULL) { + DASSERT(localContext.xicDisplay != NULL); + XFreeFontSet(localContext.xicDisplay, localContext.preeditCustomFontSet); + } + if ((localContext.statusCustomFontSet != NULL) && (localContext.statusCustomFontSet != localContext.preeditCustomFontSet)) { + DASSERT(localContext.xicDisplay != NULL); + XFreeFontSet(localContext.xicDisplay, localContext.statusCustomFontSet); + } + if (localContext.preeditAndStatusCallbacks != NULL) { + free(localContext.preeditAndStatusCallbacks); + } +} + + +static void jbNewXimClient_moveImCandidatesWindow(XIC ic, XPoint newLocation) +{ + XVaNestedList preeditAttributes = NULL; + char *unsupportedIMValue = NULL; + + if (ic == NULL) { + jio_fprintf(stderr, "%s: ic == NULL.\n", __func__); + return; + } + + preeditAttributes = XVaCreateNestedList(0, XNSpotLocation, &newLocation, NULL); + if (preeditAttributes == NULL) { + jio_fprintf(stderr, "%s: failed to create XVaNestedList.\n", __func__); + return; + } + + unsupportedIMValue = XSetICValues(ic, XNPreeditAttributes, preeditAttributes, NULL); + + XFree(preeditAttributes); + preeditAttributes = NULL; + + if (unsupportedIMValue != NULL) { + jio_fprintf(stderr, "%s: failed to set the following property \"%s\".\n", __func__, unsupportedIMValue); + } +} diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c b/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c index 7dba83e9024d..90bc2388f8fe 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c @@ -2461,6 +2461,8 @@ static jobject gtk2_get_setting(JNIEnv *env, Setting property) return get_string_property(env, settings, "gtk-font-name"); case GTK_ICON_SIZES: return get_string_property(env, settings, "gtk-icon-sizes"); + case GTK_XFT_DPI: + return get_integer_property(env, settings, "gtk-xft-dpi"); case GTK_CURSOR_BLINK: return get_boolean_property(env, settings, "gtk-cursor-blink"); case GTK_CURSOR_BLINK_TIME: diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c index ff637430edf3..4d50413ffbe3 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c @@ -2753,6 +2753,8 @@ static jobject gtk3_get_setting(JNIEnv *env, Setting property) return get_string_property(env, settings, "gtk-font-name"); case GTK_ICON_SIZES: return get_string_property(env, settings, "gtk-icon-sizes"); + case GTK_XFT_DPI: + return get_integer_property(env, settings, "gtk-xft-dpi"); case GTK_CURSOR_BLINK: return get_boolean_property(env, settings, "gtk-cursor-blink"); case GTK_CURSOR_BLINK_TIME: diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.h b/src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.h index 33bd4a6cee83..c963d769a66a 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.h +++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.h @@ -403,6 +403,7 @@ typedef enum { GTK_FONT_NAME, GTK_ICON_SIZES, + GTK_XFT_DPI, GTK_CURSOR_BLINK, GTK_CURSOR_BLINK_TIME } Setting; diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c b/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c index d778c0bf6d65..6f7702d90d0e 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c @@ -46,6 +46,7 @@ static jmethodID filenameFilterCallbackMethodID = NULL; static jmethodID setFileInternalMethodID = NULL; static jfieldID widgetFieldID = NULL; static jmethodID setWindowMethodID = NULL; +static jmethodID onCloseMethodID = NULL; JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_initIDs (JNIEnv *env, jclass cx) @@ -66,6 +67,9 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_initIDs setWindowMethodID = (*env)->GetMethodID(env, cx, "setWindow", "(J)Z"); DASSERT(setWindowMethodID != NULL); + + onCloseMethodID = (*env)->GetMethodID(env, cx, "onClose", "()V"); + DASSERT(onCloseMethodID != NULL); } static gboolean filenameFilterCallback(const GtkFileFilterInfo * filter_info, gpointer obj) @@ -92,6 +96,8 @@ static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler) GtkWidget * dialog = (GtkWidget*)jlong_to_ptr( (*env)->GetLongField(env, jpeer, widgetFieldID)); + (*env)->CallVoidMethod(env, jpeer, onCloseMethodID); + if (dialog != NULL) { // Callbacks from GTK signals are made within the GTK lock @@ -106,8 +112,6 @@ static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler) gtk->gtk_main_quit (); - (*env)->SetLongField(env, jpeer, widgetFieldID, 0); - if (!isSignalHandler) { gtk->gdk_threads_leave(); } diff --git a/src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRBackendNative.c b/src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRBackendNative.c index 0ea86e3e9b3c..cdfb72162480 100644 --- a/src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRBackendNative.c +++ b/src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRBackendNative.c @@ -59,6 +59,14 @@ typedef struct _XRadialGradient { } XRadialGradient; #endif +/* BGRA glyph that is rendered using XRenderComposite instead of + * XRenderCompositeText32. Used for colored glyphs */ +typedef struct _BGRAGlyphInfo { + GlyphInfo* glyphInfo; + Pixmap pixmap; + Picture picture; +} BGRAGlyphInfo; + #include #define BUILD_TRANSFORM_MATRIX(TRANSFORM, M00, M01, M02, M10, M11, M12) \ @@ -750,19 +758,20 @@ JNIEXPORT void JNICALL Java_sun_java2d_xr_XRBackendNative_XRAddGlyphsNative (JNIEnv *env, jclass cls, jint glyphSet, jlongArray glyphInfoPtrsArray, jint glyphCnt, - jbyteArray pixelDataArray, int pixelDataLength) { + jbyteArray pixelDataArray, jint pixelDataLength, + jint subglyphs) { jlong *glyphInfoPtrs; unsigned char *pixelData; - int i; + int i, j; if (MAX_PAYLOAD / (sizeof(XGlyphInfo) + sizeof(Glyph)) - < (unsigned)glyphCnt) { - /* glyphCnt too big, payload overflow */ + < (unsigned)subglyphs) { + /* subglyphs too big, payload overflow */ return; } - XGlyphInfo *xginfo = (XGlyphInfo *) malloc(sizeof(XGlyphInfo) * glyphCnt); - Glyph *gid = (Glyph *) malloc(sizeof(Glyph) * glyphCnt); + XGlyphInfo *xginfo = (XGlyphInfo *) malloc(sizeof(XGlyphInfo) * subglyphs); + Glyph *gid = (Glyph *) malloc(sizeof(Glyph) * subglyphs); if (xginfo == NULL || gid == NULL) { if (xginfo != NULL) { @@ -792,24 +801,29 @@ Java_sun_java2d_xr_XRBackendNative_XRAddGlyphsNative return; } + int outputGlyph = 0; for (i=0; i < glyphCnt; i++) { GlyphInfo *jginfo = (GlyphInfo *) jlong_to_ptr(glyphInfoPtrs[i]); - // 'jginfo->cellInfo' is of type 'void*' - // (see definition of 'GlyphInfo' in fontscalerdefs.h) - // 'Glyph' is typedefed to 'unsigned long' - // (see http://www.x.org/releases/X11R7.7/doc/libXrender/libXrender.txt) - // Maybe we should assert that (sizeof(void*) == sizeof(Glyph)) ? - gid[i] = (Glyph) (jginfo->cellInfo); - xginfo[i].x = (-jginfo->topLeftX); - xginfo[i].y = (-jginfo->topLeftY); - xginfo[i].width = jginfo->width; - xginfo[i].height = jginfo->height; - xginfo[i].xOff = round(jginfo->advanceX); - xginfo[i].yOff = round(jginfo->advanceY); + int images = jginfo->subpixelResolutionX * jginfo->subpixelResolutionY; + for (j=0; j < images; j++) { + // 'jginfo->cellInfo' is of type 'void*' + // (see definition of 'GlyphInfo' in fontscalerdefs.h) + // 'Glyph' is typedefed to 'unsigned long' + // (see http://www.x.org/releases/X11R7.7/doc/libXrender/libXrender.txt) + // Maybe we should assert that (sizeof(void*) == sizeof(Glyph)) ? + gid[outputGlyph] = (Glyph) (jginfo->cellInfo) + j; + xginfo[outputGlyph].x = (-jginfo->topLeftX); + xginfo[outputGlyph].y = (-jginfo->topLeftY); + xginfo[outputGlyph].width = jginfo->width; + xginfo[outputGlyph].height = jginfo->height; + xginfo[outputGlyph].xOff = round(jginfo->advanceX); + xginfo[outputGlyph].yOff = round(jginfo->advanceY); + outputGlyph++; + } } - XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], glyphCnt, + XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], subglyphs, (const char*)pixelData, pixelDataLength); (*env)->ReleasePrimitiveArrayCritical(env, glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT); @@ -879,12 +893,84 @@ Java_sun_java2d_xr_XRBackendNative_XRFreeGlyphsNative } } +JNIEXPORT void JNICALL +Java_sun_java2d_xr_XRBackendNative_addBGRAGlyphImagesNative + (JNIEnv* env, jclass clazz, jint drawable, + jlongArray javaGlyphInfoPointersArray, jint glyphCnt, jlong format32) { + jlong* glyphInfoPointers; + if ((glyphInfoPointers = (jlong *) + (*env)->GetPrimitiveArrayCritical(env, javaGlyphInfoPointersArray, NULL)) == NULL) { + return; + } + + XRenderPictFormat* format = (XRenderPictFormat*) jlong_to_ptr(format32); + XRenderPictureAttributes pictureAttributes; + + int i; + for (i = 0; i < glyphCnt; i++) { + GlyphInfo* glyphInfo = (GlyphInfo*) jlong_to_ptr(glyphInfoPointers[i]); + + Pixmap pixmap = XCreatePixmap(awt_display, (Drawable) drawable, + glyphInfo->width, glyphInfo->height, 32); + GC gc = XCreateGC(awt_display, (Drawable) pixmap, 0L, NULL); + XImage* image = XCreateImage(awt_display, NULL, 32, ZPixmap, 0, + (char*) glyphInfo->image, + glyphInfo->width, glyphInfo->height, + 32, glyphInfo->rowBytes); + XPutImage(awt_display, pixmap, gc, image, 0, 0, 0, 0, + glyphInfo->width, glyphInfo->height); + image->data = NULL; + XDestroyImage(image); + XFreeGC(awt_display, gc); + Picture picture = XRenderCreatePicture(awt_display, pixmap, format, + 0, &pictureAttributes); + + BGRAGlyphInfo* bgraGlyphInfo = + (BGRAGlyphInfo*) malloc(sizeof(BGRAGlyphInfo)); + bgraGlyphInfo->glyphInfo = glyphInfo; + bgraGlyphInfo->pixmap = pixmap; + bgraGlyphInfo->picture = picture; + + glyphInfoPointers[i] = ptr_to_jlong(bgraGlyphInfo); + } + + (*env)->ReleasePrimitiveArrayCritical(env, javaGlyphInfoPointersArray, + glyphInfoPointers, JNI_ABORT); +} + +JNIEXPORT void JNICALL +Java_sun_java2d_xr_XRBackendNative_freeBGRAGlyphImages + (JNIEnv* env, jclass clazz, + jlongArray javaGlyphInfoPointersArray, jint glyphCnt) { + jlong* glyphInfoPointers; + if ((glyphInfoPointers = (jlong *) + (*env)->GetPrimitiveArrayCritical(env, javaGlyphInfoPointersArray, NULL)) == NULL) { + return; + } + + int i; + for (i = 0; i < glyphCnt; i++) { + BGRAGlyphInfo* bgraGlyphInfo = + (BGRAGlyphInfo*) jlong_to_ptr(glyphInfoPointers[i]); + XRenderFreePicture(awt_display, bgraGlyphInfo->picture); + XFreePixmap(awt_display, bgraGlyphInfo->pixmap); + free(bgraGlyphInfo); + } + + (*env)->ReleasePrimitiveArrayCritical(env, javaGlyphInfoPointersArray, + glyphInfoPointers, JNI_ABORT); +} + JNIEXPORT jint JNICALL Java_sun_java2d_xr_XRBackendNative_XRenderCreateGlyphSetNative (JNIEnv *env, jclass cls, jlong format) { return XRenderCreateGlyphSet(awt_display, (XRenderPictFormat *) jlong_to_ptr(format)); } +static jboolean fits16Bit(jint x) { + return (((x & 0xffff8000) + 0x8000) & 0xffff0000) == 0 ? JNI_TRUE : JNI_FALSE; +} + JNIEXPORT void JNICALL Java_sun_java2d_xr_XRBackendNative_XRenderCompositeTextNative (JNIEnv *env, jclass cls, jint op, jint src, jint dst, @@ -899,6 +985,11 @@ Java_sun_java2d_xr_XRBackendNative_XRenderCompositeTextNative unsigned int sids[256]; int charCnt = 0; + if (fits16Bit(sx) == JNI_FALSE || fits16Bit(sy) == JNI_FALSE) { + // X Rendering Extension protocol supports only 16-bit initial coordinates + return; + } + if ((MAX_PAYLOAD / sizeof(XGlyphElt32) < (unsigned)eltCnt) || (MAX_PAYLOAD / sizeof(unsigned int) < (unsigned)glyphCnt) || ((MAX_PAYLOAD - sizeof(XGlyphElt32)*(unsigned)eltCnt) / @@ -956,19 +1047,48 @@ Java_sun_java2d_xr_XRBackendNative_XRenderCompositeTextNative xids[i] = ids[i]; } - for (i=0; i < eltCnt; i++) { - xelts[i].nchars = elts[i*4 + 0]; - xelts[i].xOff = elts[i*4 + 1]; - xelts[i].yOff = elts[i*4 + 2]; - xelts[i].glyphset = (GlyphSet) elts[i*4 + 3]; - xelts[i].chars = &xids[charCnt]; - - charCnt += xelts[i].nchars; + int totalXElts = 0; + for (i = 0; i < eltCnt; i++) { + int nchars = elts[i*4]; + int xOff = elts[i*4 + 1]; + int yOff = elts[i*4 + 2]; + int glyphset = (GlyphSet) elts[i*4 + 3]; + if (glyphset == -1) { // BGRA glyph, render as image + float x = (float) xOff; + float y = (float) yOff; + int ch; + for (ch = 0; ch < nchars; ch++) { + BGRAGlyphInfo* bgraGlyphInfo = (BGRAGlyphInfo*) + (((jlong) xids[charCnt + ch * 2] << 32) | + (((jlong) xids[charCnt + ch * 2 + 1]) & 0xFFFFFFFF)); + GlyphInfo* glyph = bgraGlyphInfo->glyphInfo; + XRenderComposite(awt_display, PictOpOver, + bgraGlyphInfo->picture, + (Picture) 0, (Picture) dst, + 0, 0, 0, 0, + (int) (x + glyph->topLeftX), + (int) (y + glyph->topLeftY), + glyph->width, glyph->height); + x += glyph->advanceX; + y += glyph->advanceY; + } + charCnt += nchars * 2; + } else { // Standard XRender glyph + xelts[totalXElts].nchars = nchars; + xelts[totalXElts].xOff = xOff; + xelts[totalXElts].yOff = yOff; + xelts[totalXElts].glyphset = glyphset; + xelts[totalXElts].chars = &xids[charCnt]; + charCnt += nchars; + totalXElts++; + } } - XRenderCompositeText32(awt_display, op, (Picture) src, (Picture) dst, - (XRenderPictFormat *) jlong_to_ptr(maskFmt), - sx, sy, 0, 0, xelts, eltCnt); + if (totalXElts > 0) { + XRenderCompositeText32(awt_display, op, (Picture) src, (Picture) dst, + (XRenderPictFormat *) jlong_to_ptr(maskFmt), + sx, sy, 0, 0, xelts, totalXElts); + } (*env)->ReleasePrimitiveArrayCritical(env, glyphIDArray, ids, JNI_ABORT); (*env)->ReleasePrimitiveArrayCritical(env, eltArray, elts, JNI_ABORT); diff --git a/src/java.desktop/unix/native/libawt_xawt/xawt/XWindow.c b/src/java.desktop/unix/native/libawt_xawt/xawt/XWindow.c index 0708beba3e0e..d97671392a7d 100644 --- a/src/java.desktop/unix/native/libawt_xawt/xawt/XWindow.c +++ b/src/java.desktop/unix/native/libawt_xawt/xawt/XWindow.c @@ -47,6 +47,8 @@ #include "awt_p.h" #include "awt_GraphicsEnv.h" +#include "keycode_cache.h" + #define XK_KATAKANA #include /* standard X keysyms */ #include /* DEC vendor-specific */ @@ -84,7 +86,7 @@ jfieldID targetID; jfieldID graphicsConfigID; extern jobject currentX11InputMethodInstance; -extern Boolean awt_x11inputmethod_lookupString(XKeyPressedEvent *, KeySym *); +extern Boolean awt_x11inputmethod_lookupString(XKeyPressedEvent *, KeySym *, Boolean keyPressContainsThePreeditTextOfLastXResetIC); Boolean awt_UseType4Patch = False; Boolean awt_ServerDetected = False; Boolean awt_XKBDetected = False; @@ -812,6 +814,7 @@ isXKBenabled(Display *display) { return awt_UseXKB; } +#ifndef USE_KEYCODE_CACHE /* * Map a keycode to the corresponding keysym. * This replaces the deprecated X11 function XKeycodeToKeysym @@ -836,6 +839,7 @@ keycodeToKeysym(Display *display, KeyCode keycode, int index) { XFree(key_syms); return ks; } +#endif // USE_KEYCODE_CACHE static Boolean isKPevent(XEvent *event) @@ -1099,7 +1103,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XWindow_haveCurrentX11InputMethodIns } JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XWindow_x11inputMethodLookupString -(JNIEnv *env, jobject object, jlong event, jlongArray keysymArray) { +(JNIEnv *env, jobject object, jlong event, jlongArray keysymArray, jboolean keyPressContainsThePreeditTextOfLastXResetIC) { KeySym keysym = NoSymbol; Boolean boo; /* keysymArray (and testbuf[]) have dimension 2 because we put there two @@ -1113,7 +1117,11 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XWindow_x11inputMethodLookupString testbuf[1]=0; - boo = awt_x11inputmethod_lookupString((XKeyPressedEvent*)jlong_to_ptr(event), &keysym); + boo = awt_x11inputmethod_lookupString( + (XKeyPressedEvent*)jlong_to_ptr(event), + &keysym, + (keyPressContainsThePreeditTextOfLastXResetIC == JNI_TRUE) ? True : False + ); testbuf[0] = keysym; (*env)->SetLongArrayRegion(env, keysymArray, 0, 2, (jlong *)(testbuf)); diff --git a/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c b/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c index 4682595811e6..1b70ced3cd24 100644 --- a/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c +++ b/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c @@ -36,11 +36,14 @@ #include "utility/rect.h" #include "sun_awt_X11_XlibWrapper.h" +#include "keycode_cache.h" #include #include #include #include +#include +#include #include #include #include @@ -54,9 +57,6 @@ extern Bool statusWindowEventHandler(XEvent event); #endif -// From XWindow.c -extern KeySym keycodeToKeysym(Display *display, KeyCode keycode, int index); - #if defined(DEBUG) static jmethodID lockIsHeldMID = NULL; @@ -177,6 +177,11 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XCloseDisplay(JNIEnv *env, jclass clazz, jlong display) { AWT_CHECK_HAVE_LOCK(); + +#ifdef USE_KEYCODE_CACHE + resetKeyCodeCache(); +#endif + XCloseDisplay((Display*) jlong_to_ptr(display)); } @@ -662,7 +667,11 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent return (jboolean)True; } #endif - return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window); + XEvent* const xEvent = (XEvent *)jlong_to_ptr(ptr); + + const jboolean isEventFiltered = (jboolean) XFilterEvent(xEvent, (Window) window); + + return isEventFiltered; } /* @@ -1964,6 +1973,11 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping (JNIEnv *env, jclass clazz, jlong event_ptr) { AWT_CHECK_HAVE_LOCK(); + +#ifdef USE_KEYCODE_CACHE + resetKeyCodeCache(); +#endif + XRefreshKeyboardMapping((XMappingEvent*) jlong_to_ptr(event_ptr)); } @@ -2265,6 +2279,63 @@ Java_sun_awt_X11_XlibWrapper_SetZOrder value_mask, &wc ); } +/* + * Class: XlibWrapper + * Method: XIQueryVersion + */ +JNIEXPORT jint JNICALL +Java_sun_awt_X11_XlibWrapper_XIQueryVersion +(JNIEnv *env, jclass clazz, jlong display, jlong major_version_iptr, jlong minor_version_iptr) +{ + return XIQueryVersion((Display *)jlong_to_ptr(display), + jlong_to_ptr(major_version_iptr), jlong_to_ptr(minor_version_iptr)); +} + +/* + * Class: XlibWrapper + * Method: XISelectEvents + */ +JNIEXPORT jint JNICALL +Java_sun_awt_X11_XlibWrapper_XISelectEvents +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong mask, jint deviceid) +{ + XIEventMask evmask; + evmask.deviceid = (int)deviceid; + evmask.mask_len = XIMaskLen(XI_LASTEVENT); + union jlong_to_char_ptr + { + jlong value; + unsigned char mask[8]; + } converter; + converter.value = mask; + evmask.mask = (unsigned char*)&converter.mask; + return XISelectEvents((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), + &evmask, /*num masks*/ 1); +} + +/* + * Class: XlibWrapper + * Method: XGetEventData + */ +JNIEXPORT jboolean JNICALL +Java_sun_awt_X11_XlibWrapper_XGetEventData +(JNIEnv *env, jclass clazz, jlong display, jlong ptr) +{ + return XGetEventData((Display *)jlong_to_ptr(display), + (XGenericEventCookie *)ptr_to_jlong(ptr)) ? JNI_TRUE : JNI_FALSE; +} + +/* + * Class: XlibWrapper + * Method: XFreeEventData + */ +JNIEXPORT void JNICALL +Java_sun_awt_X11_XlibWrapper_XFreeEventData +(JNIEnv *env, jclass clazz, jlong display, jlong ptr) +{ + return XFreeEventData((Display *)jlong_to_ptr(display), (XGenericEventCookie *)ptr_to_jlong(ptr)); +} + /* * Class: XlibWrapper * Method: SetBitmapShape diff --git a/src/java.desktop/unix/native/libawt_xawt/xawt/keycode_cache.c b/src/java.desktop/unix/native/libawt_xawt/xawt/keycode_cache.c new file mode 100644 index 000000000000..77aab698605d --- /dev/null +++ b/src/java.desktop/unix/native/libawt_xawt/xawt/keycode_cache.c @@ -0,0 +1,110 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "keycode_cache.h" +#include "awt.h" + +#ifdef DEBUG +#include +#endif + +#ifdef USE_KEYCODE_CACHE + +/** + * Keeps the KeyCode -> KeySym mapping. + */ +typedef struct { + KeySym* symbols; // array of KeySym indexed by the key code with min_code corresponding to index 0 + int syms_per_code; // number of elements in 'symbols' corresponding to one key code + int min_code; // minimum valid key code (typically 8) + int max_code; // maximum valid key code (typically 255) +} KeyCodeCache; + +static KeyCodeCache keycode_cache = {0}; + +#ifdef DEBUG +static void +dump_keycode_cache(const KeyCodeCache* cache) { + fprintf(stderr, "KeyCodeCache dump\n"); + if (cache->symbols == NULL) { + fprintf(stderr, "-- empty --\n"); + } else { + fprintf(stderr, "syms_per_code=%d, min_code=%d, max_code=%d\n", + cache->syms_per_code, cache->min_code, cache->max_code); + for(int i = cache->min_code; i <= cache->max_code; i++) { + fprintf(stderr, "0x%02x --", i); + for(int j = 0; j < cache->syms_per_code; j++) { + const int sym_index = (i - cache->min_code)*cache->syms_per_code + j; + fprintf(stderr, "%04lu - ", cache->symbols[sym_index]); + } + fprintf(stderr, "\n"); + } + } +} +#endif // DEBUG + +/** + * Clears the cache and frees memory, if allocated. + * + * NB: not thread safe and is supposed to be called only when holding the AWT lock. + */ +extern void +resetKeyCodeCache(void) { + if (keycode_cache.symbols) { + XFree(keycode_cache.symbols); + } + keycode_cache = (KeyCodeCache){0}; +} + +/** + * Translates the given keycode to the corresponding KeySym at the given index. + * Caches the mapping for all valid key codes by using just one XGetKeyboardMapping() Xlib call, + * which greatly reduces delays when working with a remote X server. + * + * NB: not thread safe and is supposed to be called only when holding the AWT lock. + */ +extern KeySym +keycodeToKeysym(Display* display, KeyCode keycode, int index) { + if (!keycode_cache.symbols) { + XDisplayKeycodes(display, &keycode_cache.min_code, &keycode_cache.max_code); + const int count_all = keycode_cache.max_code - keycode_cache.min_code + 1; + keycode_cache.symbols = XGetKeyboardMapping(display, keycode_cache.min_code, count_all, &keycode_cache.syms_per_code); + // NB: this may not always get free'ed + } + + if (keycode_cache.symbols) { + const Boolean code_within_range = (keycode >= keycode_cache.min_code && keycode <= keycode_cache.max_code); + const Boolean index_within_range = (index >= 0 && index < keycode_cache.syms_per_code); + if (code_within_range && index_within_range) { + const int sym_index = (keycode - keycode_cache.min_code)*keycode_cache.syms_per_code + index; + KeySym sym = keycode_cache.symbols[sym_index]; + return sym; + } + } + + return NoSymbol; +} + +#endif /* USE_KEYCODE_CACHE */ diff --git a/src/java.desktop/unix/native/libawt_xawt/xawt/keycode_cache.h b/src/java.desktop/unix/native/libawt_xawt/xawt/keycode_cache.h new file mode 100644 index 000000000000..6dec7f1a0cf1 --- /dev/null +++ b/src/java.desktop/unix/native/libawt_xawt/xawt/keycode_cache.h @@ -0,0 +1,37 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef _KEYCODE_CACHE_H +#define _KEYCODE_CACHE_H + +#include + +#define USE_KEYCODE_CACHE 1 + +void resetKeyCodeCache(void); + +KeySym keycodeToKeysym(Display* display, KeyCode keycode, int index); + +#endif /* _KEYCODE_CACHE_H */ \ No newline at end of file diff --git a/src/java.desktop/unix/native/libfontmanager/X11TextRenderer.c b/src/java.desktop/unix/native/libfontmanager/X11TextRenderer.c index e1f64c566b38..caf52a51be7b 100644 --- a/src/java.desktop/unix/native/libfontmanager/X11TextRenderer.c +++ b/src/java.desktop/unix/native/libfontmanager/X11TextRenderer.c @@ -45,14 +45,14 @@ JNIEXPORT void JNICALL AWTDrawGlyphList (JNIEnv *env, jobject xtr, jlong dstData, jlong gc, - SurfaceDataBounds *bounds, ImageRef *glyphs, jint totalGlyphs); + SurfaceDataBounds *bounds, ImageRef *glyphs, jint totalGlyphs, jboolean *allGlyphsRendered); /* * Class: sun_font_X11TextRenderer * Method: doDrawGlyphList - * Signature: (Lsun/java2d/SurfaceData;Ljava/awt/Rectangle;ILsun/font/GlyphList;J)V + * Signature: (Lsun/java2d/SurfaceData;Ljava/awt/Rectangle;ILsun/font/GlyphList;J)Z */ -JNIEXPORT void JNICALL Java_sun_font_X11TextRenderer_doDrawGlyphList +JNIEXPORT jboolean JNICALL Java_sun_font_X11TextRenderer_doDrawGlyphList (JNIEnv *env, jobject xtr, jlong dstData, jlong xgc, jobject clip, jobject glyphlist) @@ -64,13 +64,15 @@ JNIEXPORT void JNICALL Java_sun_font_X11TextRenderer_doDrawGlyphList glyphCount = (*env)->GetIntField(env, glyphlist, sunFontIDs.glyphListLen); if ((gbv = setupBlitVector(env, glyphlist, 0, glyphCount)) == NULL) { - return; + return JNI_TRUE; } if (!RefineBounds(gbv, &bounds)) { free(gbv); - return; + return JNI_TRUE; } + jboolean allGlyphsRendered = JNI_TRUE; AWTDrawGlyphList(env, xtr, dstData, xgc, - &bounds, gbv->glyphs, gbv->numGlyphs); + &bounds, gbv->glyphs, gbv->numGlyphs, &allGlyphsRendered); free(gbv); + return allGlyphsRendered; } diff --git a/src/java.desktop/unix/native/libsplashscreen/splashscreen_sys.c b/src/java.desktop/unix/native/libsplashscreen/splashscreen_sys.c index e990cd9014a0..3b237aa8ee02 100644 --- a/src/java.desktop/unix/native/libsplashscreen/splashscreen_sys.c +++ b/src/java.desktop/unix/native/libsplashscreen/splashscreen_sys.c @@ -782,7 +782,7 @@ SplashGetScaledImageName(const char* jarName, const char* fileName, #ifndef __linux__ return JNI_FALSE; #endif - *scaleFactor = (float)getNativeScaleFactor(); + *scaleFactor = (float)getNativeScaleFactor(NULL, 1); return GetScaledImageName(fileName, scaledImgName, scaleFactor, scaledImageNameLength); } diff --git a/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/icons/JavaCup32.png b/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/icons/JavaCup32.png index 0c41d652a3c6..b0b036ce6c1f 100644 Binary files a/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/icons/JavaCup32.png and b/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/icons/JavaCup32.png differ diff --git a/src/java.desktop/windows/classes/sun/awt/Win32FontManager.java b/src/java.desktop/windows/classes/sun/awt/Win32FontManager.java index 1d5f76f99604..c9f2c00ed428 100644 --- a/src/java.desktop/windows/classes/sun/awt/Win32FontManager.java +++ b/src/java.desktop/windows/classes/sun/awt/Win32FontManager.java @@ -26,45 +26,42 @@ package sun.awt; -import java.awt.FontFormatException; -import java.awt.GraphicsEnvironment; +import java.awt.*; import java.io.File; import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Locale; -import java.util.NoSuchElementException; -import java.util.StringTokenizer; +import java.util.*; +import java.util.List; +import java.util.stream.Stream; import sun.awt.windows.WFontConfiguration; -import sun.font.FontManager; -import sun.font.SunFontManager; -import sun.font.TrueTypeFont; +import sun.font.*; /** - * The X11 implementation of {@link FontManager}. + * The Win32 implementation of {@link FontManager}. */ public final class Win32FontManager extends SunFontManager { + private HashMap windowsSystemVersion = null; @SuppressWarnings("removal") - private static final TrueTypeFont eudcFont = - AccessController.doPrivileged(new PrivilegedAction() { - public TrueTypeFont run() { - String eudcFile = getEUDCFontFile(); - if (eudcFile != null) { - try { - /* Must use Java rasteriser since GDI doesn't - * enumerate (allow direct use) of EUDC fonts. - */ - return new TrueTypeFont(eudcFile, null, 0, - true, false); - } catch (FontFormatException e) { - } + private static final List additionalFallbackFonts = + AccessController.doPrivileged((PrivilegedAction>) () -> { + List list = new ArrayList<>(); + list.add(new EmojiFont()); + // https://learn.microsoft.com/en-us/windows/win32/intl/end-user-defined-characters + String eudcFile = getEUDCFontFile(); + if (eudcFile != null) { + try { + /* Must use Java rasteriser since GDI doesn't + * enumerate (allow direct use) of EUDC fonts. + */ + list.add(new TrueTypeFont(eudcFile, null, 0, + true, false)); + } catch (FontFormatException e) { } - return null; } - }); + return Collections.unmodifiableList(list); + }); /* Used on Windows to obtain from the windows registry the name * of a file containing the system EUFC font. If running in one of @@ -74,8 +71,8 @@ public TrueTypeFont run() { */ private static native String getEUDCFontFile(); - public TrueTypeFont getEUDCFont() { - return eudcFont; + public List getAdditionalFallbackFonts() { + return additionalFallbackFonts; } @SuppressWarnings("removal") @@ -185,6 +182,28 @@ public FontConfiguration createFontConfiguration(boolean preferLocaleFonts, preferLocaleFonts,preferPropFonts); } + @Override + protected void registerJREFonts() { + if (versionCheckEnabled) { + windowsSystemVersion = new HashMap<>(); + HashMap fontToFileMap = new HashMap<>(100); + populateFontFileNameMap(fontToFileMap, new HashMap<>(), new HashMap<>(), Locale.ENGLISH); + for (String key : fontToFileMap.keySet()) { + // find maximum observable platform font's version + Optional version = Stream.concat(Arrays.stream(getPlatformFontDirs(true)), Stream.of("")). + map((path) -> (getTrueTypeVersion(path + File.separator + fontToFileMap.get(key)))). + max(SunFontManager::fontVersionComparator); + windowsSystemVersion.put(key, version.isPresent() ? version.get() : "0"); + } + } + super.registerJREFonts(); + } + + @Override + protected String getSystemFontVersion(TrueTypeFont bundledFont) { + return windowsSystemVersion.getOrDefault(bundledFont.getFullName().toLowerCase(), "0"); + } + protected void populateFontFileNameMap(HashMap fontToFileMap, HashMap fontToFamilyNameMap, @@ -245,7 +264,9 @@ public Object run() { */ static String fontsForPrinting = null; protected void registerJREFontsWithPlatform(String pathName) { - fontsForPrinting = pathName; + if (JREFontsDirExists(pathName)) { + fontsForPrinting = pathName; + } } @SuppressWarnings("removal") diff --git a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java index d1e41c2c9249..0eeb65d0e3cf 100644 --- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java +++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsConfig.java @@ -218,11 +218,9 @@ public String toString() { return (super.toString()+"[dev="+device+",pixfmt="+visual+"]"); } - private native Rectangle getBounds(int screen); - @Override public Rectangle getBounds() { - return getBounds(device.getScreen()); + return device.getBounds(); } @Override diff --git a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java index 5fc34c05e4d5..d8ab98c5736f 100644 --- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java +++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java @@ -106,11 +106,12 @@ public class Win32GraphicsDevice extends GraphicsDevice implements private static native void initIDs(); - native void initDevice(int screen); - native void initNativeScale(int screen); - native void setNativeScale(int screen, float scaleX, float scaleY); - native float getNativeScaleX(int screen); - native float getNativeScaleY(int screen); + private native void initDevice(int screen); + private static native void initNativeScale(int screen); + private static native void setNativeScale(int screen, float scaleX, float scaleY); + private static native float getNativeScaleX(int screen); + private static native float getNativeScaleY(int screen); + private static native Rectangle getBounds(int screen); public Win32GraphicsDevice(int screennum) { this.screen = screennum; @@ -169,6 +170,10 @@ private void initScaleFactors() { } } + public Rectangle getBounds() { + return getBounds(getScreen()); + } + /** * Returns whether this is a valid device. Device can become * invalid as a result of device removal event. @@ -256,7 +261,7 @@ protected int getMaxConfigs(int screen) { } } - private native int getMaxConfigsImpl(int screen); + private static native int getMaxConfigsImpl(int screen); /** * Returns whether or not the PixelFormat indicated by index is @@ -268,7 +273,7 @@ protected int getMaxConfigs(int screen) { * are disabled. Do not call this function with an index of 0. * @param index a PixelFormat index */ - private native boolean isPixFmtSupported(int index, int screen); + private static native boolean isPixFmtSupported(int index, int screen); /** * Returns the PixelFormatID of the default graphics configuration @@ -287,7 +292,7 @@ protected int getDefaultPixID(int screen) { * Returns the default PixelFormat ID from GDI. Do not call if PixelFormats * are disabled. */ - private native int getDefaultPixIDImpl(int screen); + private static native int getDefaultPixIDImpl(int screen); /** * Returns the default graphics configuration @@ -541,9 +546,8 @@ public void displayChanged() { dynamicColorModel = null; defaultConfig = null; configs = null; - initScaleFactors(); - Rectangle screenBounds = getDefaultConfiguration().getBounds(); + Rectangle screenBounds = getBounds(); resizeFSWindow(getFullScreenWindow(), screenBounds); // pass on to all top-level windows on this display @@ -577,8 +581,8 @@ public void removeDisplayChangedListener(DisplayChangedListener client) { /** * Creates and returns the color model associated with this device */ - private native ColorModel makeColorModel (int screen, - boolean dynamic); + private static native ColorModel makeColorModel(int screen, + boolean dynamic); /** * Returns a dynamic ColorModel which is updated when there diff --git a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsEnvironment.java b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsEnvironment.java index cb7ab363cdfc..30ea0db0567a 100644 --- a/src/java.desktop/windows/classes/sun/awt/Win32GraphicsEnvironment.java +++ b/src/java.desktop/windows/classes/sun/awt/Win32GraphicsEnvironment.java @@ -31,6 +31,7 @@ import java.awt.peer.ComponentPeer; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; import java.util.ListIterator; import sun.awt.windows.WToolkit; @@ -51,6 +52,11 @@ public final class Win32GraphicsEnvironment extends SunGraphicsEnvironment { + // [tav] the values match the native ones + private final static int PROCESS_DPI_UNAWARE = 0; + private final static int PROCESS_SYSTEM_DPI_AWARE = 1; + private final static int PROCESS_PER_MONITOR_DPI_AWARE = 2; + static final float debugScaleX; static final float debugScaleY; @@ -92,6 +98,7 @@ public final class Win32GraphicsEnvironment extends SunGraphicsEnvironment { public Win32GraphicsEnvironment() { } + private native static void setProcessDPIAwareness(int level); protected native int getNumScreens(); private native int getDefaultScreen(); @@ -133,41 +140,23 @@ public GraphicsDevice getDefaultScreenDevice() { */ @Override public void displayChanged() { - // getNumScreens() will return the correct current number of screens - GraphicsDevice[] newDevices = new GraphicsDevice[getNumScreens()]; - GraphicsDevice[] oldScreens = screens; - // go through the list of current devices and determine if they - // could be reused, or will have to be replaced - if (oldScreens != null) { - for (int i = 0; i < oldScreens.length; i++) { - if (!(screens[i] instanceof Win32GraphicsDevice)) { + if (screens != null) { + if (oldDevices == null) { + oldDevices = new ArrayList<>(); + } + for (int i = 0; i < screens.length; i++) { + if (screens[i] instanceof Win32GraphicsDevice gd) { + oldDevices.add(new WeakReference<>(gd)); + } else { // REMIND: can we ever have anything other than Win32GD? - assert (false) : oldScreens[i]; - continue; + assert (false) : screens[i]; } - Win32GraphicsDevice gd = (Win32GraphicsDevice)oldScreens[i]; - // devices may be invalidated from the native code when the - // display change happens (device add/removal also causes a - // display change) - if (!gd.isValid()) { - if (oldDevices == null) { - oldDevices = - new ArrayList>(); - } - oldDevices.add(new WeakReference(gd)); - } else if (i < newDevices.length) { - // reuse the device - newDevices[i] = gd; - } - } - oldScreens = null; - } - // create the new devices (those that weren't reused) - for (int i = 0; i < newDevices.length; i++) { - if (newDevices[i] == null) { - newDevices[i] = makeScreenDevice(i); } } + // create the new devices + // getNumScreens() will return the correct current number of screens + GraphicsDevice[] newDevices = new GraphicsDevice[getNumScreens()]; + Arrays.setAll(newDevices, this::makeScreenDevice); // install the new array of devices // Note: no synchronization here, it doesn't matter if a thread gets // a new or an old array this time around diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WClipboard.java b/src/java.desktop/windows/classes/sun/awt/windows/WClipboard.java index e16b18052955..010ee01f1f0b 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WClipboard.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WClipboard.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.Map; +import sun.awt.datatransfer.ClipboardTransferable; import sun.awt.datatransfer.DataTransferer; import sun.awt.datatransfer.SunClipboard; @@ -91,6 +92,39 @@ protected void setContentsNative(Transferable contents) { } } + + // ======================= JBR-5980 Pasting from clipboard not working reliably in Windows ======================= + private static final boolean isContentsCacheDisabled; // initialized in the static block below + private static final boolean areOwnershipExtraChecksEnabled; // initialized in the static block below + + @Override + public synchronized Transferable getContents(Object requestor) { + if (isContentsCacheDisabled) { + // JBR-5980: sometimes the cache (this.contents) doesn't reset when something gets copied to the + // system clipboard outside of the Java app. This workaround allows to disable the caching, so + // each call to getContents will result in reading the clipboard content from the system through + // Win32 Clipbaord API. + + return new ClipboardTransferable((SunClipboard)this); + } + + return super.getContents(requestor); + } + + // Upcall from native + private void ensureNoOwnedData() { + boolean thereAreOwnedData = false; + synchronized (this) { + thereAreOwnedData = ((this.owner != null) || (this.contents != null)); + } + if (thereAreOwnedData) { + // to properly clear everything + lostOwnershipImpl(); + } + } + // =============================================================================================================== + + private void lostSelectionOwnershipImpl() { lostOwnershipImpl(); } @@ -121,9 +155,28 @@ protected void clearNativeContext() {} */ private native void publishClipboardData(long format, byte[] bytes); - private static native void init(); + private static native void init(boolean areOwnershipExtraChecksEnabled); static { - init(); + // ====================== JBR-5980 Pasting from clipboard not working reliably in Windows ====================== + boolean flagInitializer = false; // let's fall back in the default behavior + try { + // is "false" by default due to JBR-6267 + flagInitializer = + "true".equalsIgnoreCase(System.getProperty("awt.windows.clipboard.cache.disabled", "false")); + } catch (Throwable ignored) { + } + isContentsCacheDisabled = flagInitializer; + + flagInitializer = false; // let's fall back in the default behavior + try { + flagInitializer = + "true".equalsIgnoreCase(System.getProperty("awt.windows.clipboard.extraOwnershipChecksEnabled", "true")); + } catch (Throwable ignored) { + } + areOwnershipExtraChecksEnabled = flagInitializer; + // ============================================================================================================= + + init(areOwnershipExtraChecksEnabled); } @Override diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java b/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java index c07d116abfbc..7d1f7b419570 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java @@ -726,7 +726,7 @@ public boolean requestFocus(Component lightweightChild, boolean temporary, int result = WKeyboardFocusManagerPeer .shouldNativelyFocusHeavyweight((Component)target, lightweightChild, temporary, focusedWindowChangeAllowed, - time, cause); + time, cause, true); switch (result) { case WKeyboardFocusManagerPeer.SNFH_FAILURE: diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java b/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java index 7502b667250f..cdf10308dba7 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java @@ -36,6 +36,7 @@ import java.util.MissingResourceException; import java.util.Vector; import sun.awt.AWTAccessor; +import sun.security.action.GetBooleanAction; final class WFileDialogPeer extends WWindowPeer implements FileDialogPeer { @@ -70,6 +71,11 @@ boolean checkFilenameFilter(String filename) { super(target); } + @Override + public void updateGC() { + // nop + } + @Override void create(WComponentPeer parent) { this.parent = parent; @@ -91,6 +97,10 @@ protected void disposeImpl() { WToolkit.targetDisposedPeer(target, this); _dispose(); } + @SuppressWarnings("removal") + private static boolean useCommonItemDialog() { + return AccessController.doPrivileged(new GetBooleanAction("sun.awt.windows.useCommonItemDialog")); + } private native void _show(); private native void _hide(); diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WFramePeer.java b/src/java.desktop/windows/classes/sun/awt/windows/WFramePeer.java index a5612b08dc45..9131a005cd0c 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WFramePeer.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WFramePeer.java @@ -31,6 +31,7 @@ import java.awt.GraphicsConfiguration; import java.awt.MenuBar; import java.awt.Rectangle; +import java.awt.peer.ComponentPeer; import java.awt.peer.FramePeer; import java.security.AccessController; @@ -133,6 +134,14 @@ private Rectangle adjustMaximizedBounds(Rectangle bounds) { return bounds; } + @Override + public void displayChanged() { + super.displayChanged(); + updateIcon(); + } + + private native void updateIcon(); + @Override public boolean updateGraphicsData(GraphicsConfiguration gc) { boolean result = super.updateGraphicsData(gc); @@ -255,4 +264,32 @@ public void emulateActivation(boolean activate) { } private native void synthesizeWmActivate(boolean activate); + + // JBR API internals + private static void updateCustomTitleBar(ComponentPeer peer) { + // In native code AwtDialog is actually a descendant of AwtFrame, + // so we don't distinguish between WFramePeer and WDialogPeer here, + // just treat WFramePeer like a base class. + if (peer instanceof WFramePeer || peer instanceof WDialogPeer) { + updateCustomTitleBar((WWindowPeer) peer); + } + } + private static native void updateCustomTitleBar(WWindowPeer peer); + + @SuppressWarnings("removal") + private static boolean isWin11OrNewer() { + String osName = AccessController.doPrivileged(new GetPropertyAction("os.name")); + String osVersion = AccessController.doPrivileged(new GetPropertyAction("os.version")); + if ("Windows 10".equals(osName)) { + return false; + } else { + int version = 10; + try { + version = (int) Double.parseDouble(osVersion); + } catch (NullPointerException | NumberFormatException ignored) {} + return version >= 10; + } + } + // Used from native + private static final boolean WIN11_OR_NEWER = isWin11OrNewer(); } diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java b/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java index 1dcd4bf11af0..9c14acac851e 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java @@ -168,10 +168,6 @@ public Object getControlObject() { @Override public boolean setLocale(Locale lang) { - return setLocale(lang, false); - } - - private boolean setLocale(Locale lang, boolean onActivate) { Locale[] available = WInputMethodDescriptor.getAvailableLocalesInternal(); for (int i = 0; i < available.length; i++) { Locale locale = available[i]; @@ -180,7 +176,7 @@ private boolean setLocale(Locale lang, boolean onActivate) { locale.equals(Locale.JAPAN) && lang.equals(Locale.JAPANESE) || locale.equals(Locale.KOREA) && lang.equals(Locale.KOREAN)) { if (isActive) { - setNativeLocale(locale.toLanguageTag(), onActivate); + setNativeLocale(locale.toLanguageTag()); } currentLocale = locale; return true; @@ -319,9 +315,6 @@ public void activate() { isLastFocussedActiveClient = isAc; } isActive = true; - if (currentLocale != null) { - setLocale(currentLocale, true); - } // Compare IM's composition string with Java's composition string if (hasCompositionString && !isCompositionStringAvailable(context)) { @@ -348,10 +341,6 @@ public void activate() { @Override public void deactivate(boolean isTemporary) { - // Sync currentLocale with the Windows keyboard layout which might be changed - // by hot key - getLocale(); - // Delay calling disableNativeIME until activate is called and the newly // focused component has a different peer as the last focused component. if (awtFocussedComponentPeer != null) { @@ -446,6 +435,7 @@ public void removeNotify() { endCompositionNative(context, DISCARD_INPUT); awtFocussedComponent = null; awtFocussedComponentPeer = null; + stopListening(); } /** @@ -604,27 +594,35 @@ public void inquireCandidatePosition() Runnable r = new Runnable() { @Override public void run() { - int x = 0; - int y = 0; Component client = getClientComponent(); + Rectangle caretRect = null; if (client != null) { if (!client.isShowing()) { return; } + if (haveActiveClient()) { - Rectangle rc = inputContext.getTextLocation(TextHitInfo.leading(0)); - x = rc.x; - y = rc.y + rc.height; - } else { - Point pt = client.getLocationOnScreen(); - Dimension size = client.getSize(); - x = pt.x; - y = pt.y + size.height; + caretRect = inputContext.getTextLocation(TextHitInfo.leading(0)); + } + if (caretRect == null) { + Point pt = client.getLocationOnScreen(); + Dimension size = client.getSize(); + caretRect = new Rectangle(pt, size); } } - openCandidateWindow(awtFocussedComponentPeer, x, y); + if (caretRect == null) { + openCandidateWindow(awtFocussedComponentPeer, 0, 0, 0, 0); + } else { + openCandidateWindow( + awtFocussedComponentPeer, + caretRect.x, + caretRect.y, + caretRect.x + caretRect.width - ( (caretRect.width > 0) ? 1 : 0), + caretRect.y + caretRect.height - ( (caretRect.height > 0) ? 1 : 0) + ); + } } }; WToolkit.postEvent(WToolkit.targetToAppContext(source), @@ -667,7 +665,7 @@ private WComponentPeer getNearestNativePeer(Component comp) private native void setStatusWindowVisible(WComponentPeer peer, boolean visible); private native String getNativeIMMDescription(); static native Locale getNativeLocale(); - static native boolean setNativeLocale(String localeName, boolean onActivate); - private native void openCandidateWindow(WComponentPeer peer, int x, int y); + static native boolean setNativeLocale(String localeName); + private native void openCandidateWindow(WComponentPeer peer, int caretLeftX, int caretTopY, int caretRightX, int caretBottomY); private native boolean isCompositionStringAvailable(int context); } diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java b/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java index f11409d4acab..9b5e8aed2025 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java @@ -80,9 +80,7 @@ public static boolean deliverFocus(Component lightweightChild, // TODO: do something to eliminate this forwarding return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild, target, - temporary, - focusedWindowChangeAllowed, - time, + true, cause, getNativeFocusOwner()); } diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WPathGraphics.java b/src/java.desktop/windows/classes/sun/awt/windows/WPathGraphics.java index 84ae7e8f4183..fd4872d0a6dd 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WPathGraphics.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WPathGraphics.java @@ -566,7 +566,7 @@ public void drawString(String str, float x, float y, endChar++; } String substr = new String(chars, startChar,endChar-startChar); - PhysicalFont slotFont = compFont.getSlotFont(slot); + Font2D slotFont = compFont.getSlotFont(slot); textOut(substr, font, slotFont, frc, scaledFontSizeY, iangle, awScale, advanceScaleX, advanceScaleY, @@ -800,7 +800,7 @@ protected boolean printGlyphVector(GlyphVector gv, float x, float y) { * if only one slot is unavailable is not worth worrying * about. */ - PhysicalFont slotFont = compFont.getSlotFont(slot); + Font2D slotFont = compFont.getSlotFont(slot); if (!(slotFont instanceof TrueTypeFont)) { return false; } @@ -831,7 +831,7 @@ protected boolean printGlyphVector(GlyphVector gv, float x, float y) { } private void textOut(String str, - Font font, PhysicalFont font2D, + Font font, Font2D font2D, FontRenderContext frc, float deviceSize, int rotation, float awScale, double scaleFactorX, double scaleFactorY, diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java b/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java index f2a0042e9cfa..89555f3dc87c 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java @@ -47,6 +47,11 @@ class WPrintDialogPeer extends WWindowPeer implements DialogPeer { super(target); } + @Override + public void updateGC() { + // nop + } + @Override void create(WComponentPeer parent) { this.parent = parent; diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java b/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java index 7b82229c02cd..1e0d12b56f57 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java @@ -48,6 +48,9 @@ import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.geom.AffineTransform; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import java.awt.image.DataBufferInt; import java.awt.peer.WindowPeer; import java.beans.PropertyChangeEvent; @@ -55,6 +58,9 @@ import java.util.LinkedList; import java.util.List; +import javax.swing.JRootPane; +import javax.swing.RootPaneContainer; + import sun.awt.AWTAccessor; import sun.awt.AppContext; import sun.awt.DisplayChangedListener; @@ -64,6 +70,8 @@ import sun.awt.Win32GraphicsDevice; import sun.awt.Win32GraphicsEnvironment; import sun.java2d.pipe.Region; + +import sun.java2d.SunGraphics2D; import sun.util.logging.PlatformLogger; import static sun.java2d.SunGraphicsEnvironment.toUserSpace; @@ -75,6 +83,8 @@ public class WWindowPeer extends WPanelPeer implements WindowPeer, private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.windows.WWindowPeer"); private static final PlatformLogger screenLog = PlatformLogger.getLogger("sun.awt.windows.screen.WWindowPeer"); + public static final String WINDOW_CORNER_RADIUS = "apple.awt.windowCornerRadius"; + // we can't use WDialogPeer as blocker may be an instance of WPrintDialogPeer that // extends WWindowPeer, not WDialogPeer private WWindowPeer modalBlocker = null; @@ -110,6 +120,8 @@ public class WWindowPeer extends WPanelPeer implements WindowPeer, */ private WindowListener windowListener; + private Insets sysInsets; // set from native updateInsets + /** * Initialize JNI field IDs */ @@ -204,6 +216,7 @@ public void setResizable(boolean resizable) { void initialize() { super.initialize(); + sysInsets = (Insets)insets_.clone(); updateInsets(insets_); if (!((Window) target).isFontSet()) { @@ -242,6 +255,13 @@ void initialize() { this.isOpaque = true; setOpaque(((Window)target).isOpaque()); } + + if (target instanceof RootPaneContainer) { + JRootPane rootpane = ((RootPaneContainer)target).getRootPane(); + if (rootpane != null) { + setRoundedCornersImpl(rootpane.getClientProperty(WINDOW_CORNER_RADIUS)); + } + } } native void createAwtWindow(WComponentPeer parent); @@ -317,6 +337,11 @@ final void syncBounds() { // state. native void updateInsets(Insets i); + @Override + public Insets getSysInsets() { + return (Insets)sysInsets.clone(); + } + static native int getSysMinWidth(); static native int getSysMinHeight(); static native int getSysIconWidth(); @@ -606,6 +631,14 @@ public void updateGC() { AWTAccessor.getComponentAccessor(). setGraphicsConfiguration((Component)target, winGraphicsConfig); + + // Windows may have already sent us WM_PAINT, + // which we have processed before updating the GC, + // so force full repaint just to be sure we don't leave damaged content. + if (oldDev != newDev) { + Rectangle b = getBounds(); + handlePaint(0, 0, b.width, b.height); + } } /** @@ -806,6 +839,46 @@ public void setOpaque(boolean isOpaque) { } } + // JBR API internals + private static void setRoundedCorners(Window window, Object params) { + Object peer = AWTAccessor.getComponentAccessor().getPeer(window); + if (peer instanceof WWindowPeer) { + ((WWindowPeer)peer).setRoundedCornersImpl(params); + } else if (window instanceof RootPaneContainer) { + JRootPane rootpane = ((RootPaneContainer)window).getRootPane(); + if (rootpane != null) { + rootpane.putClientProperty(WINDOW_CORNER_RADIUS, params); + } + } + } + + private void setRoundedCornersImpl(Object params) { + if (params instanceof String) { + setRoundedCorners(getRoundedType(params), false, 0); + } else if (params instanceof Object[]) { + Object[] values = (Object[]) params; + if (values.length == 2 && values[0] instanceof String && values[1] instanceof Color) { + Color color = (Color) values[1]; + setRoundedCorners(getRoundedType(values[0]), true, color.getRGB()); + } + } + } + + private static int getRoundedType(Object params) { + if ("none".equals(params)) { + return 1; + } + if ("full".equals(params)) { + return 2; + } + if ("small".equals(params)) { + return 3; + } + return 0; // default + } + + private native void setRoundedCorners(int type, boolean isBorderColor, int borderColor); + native void updateWindowImpl(int[] data, int width, int height); @Override @@ -901,4 +974,83 @@ public void propertyChange(PropertyChangeEvent e) { } } } + + @Override + public Graphics getGraphics() { + Graphics g = super.getGraphics(); + if (!(g instanceof SunGraphics2D)) return g; + SunGraphics2D sg = (SunGraphics2D)g; + + // [tav] For the scaling graphics we need to compensate the toplevel insets rounding error + // to place [0, 0] of the client area in its correct device pixel. + if (sg.transformState == SunGraphics2D.TRANSFORM_TRANSLATESCALE) { + Point2D err = getInsetsRoundingError(sg); + double errX = err.getX(); + double errY = err.getY(); + if (errX != 0 || errY != 0) { + // save the current tx + AffineTransform tx = sg.transform; + + // translate the constrain + Region constrainClip = sg.constrainClip; + Shape usrClip = sg.usrClip; + if (constrainClip != null) { + // SunGraphics2D.constrain(..) rounds down x/y, so to compensate we need to round up + int _errX = (int) Math.ceil(errX); + int _errY = (int) Math.ceil(errY); + if ((_errX | _errY) != 0) { + // drop everything to default + sg.constrainClip = null; + sg.usrClip = null; + sg.clipState = SunGraphics2D.CLIP_DEVICE; + sg.transform = new AffineTransform(); + sg.setDevClip(sg.getSurfaceData().getBounds()); + + Region r = constrainClip.getTranslatedRegion(_errX, _errY); + sg.constrain(r.getLoX(), r.getLoY(), r.getWidth(), r.getHeight()); + } + } + + // translate usrClip + if (usrClip != null) { + if (usrClip instanceof Rectangle2D) { + Rectangle2D u = (Rectangle2D) usrClip; + u.setRect(u.getX() + errX, u.getY() + errY, u.getWidth(), u.getHeight()); + } else { + usrClip = AffineTransform.getTranslateInstance(errX, errY).createTransformedShape(usrClip); + } + sg.transform = new AffineTransform(); + sg.setClip(usrClip); // constrain clip is already valid + } + + // finally translate the tx (in the device space, so via concatenate) + AffineTransform newTx = AffineTransform.getTranslateInstance(errX - sg.constrainX, errY - sg.constrainY); + newTx.concatenate(tx); + sg.setTransform(newTx); + } + } + return sg; + } + + /** + * For the scaling graphics and a decorated toplevel as the destination, + * calculates the rounding error of the toplevel insets. + * + * @return the left/top insets rounding error, in device space + */ + private Point2D getInsetsRoundingError(SunGraphics2D g) { + Point2D.Double err = new Point2D.Double(0, 0); + if (g.transformState >= SunGraphics2D.TRANSFORM_TRANSLATESCALE && !isTargetUndecorated()) { + Insets sysInsets = getSysInsets(); + if (sysInsets != null) { + Insets insets = ((Window)target).getInsets(); + // insets.left/top is a scaled down rounded value + // insets.left/top * tx.scale is a scaled up value (which contributes to graphics translate) + // sysInsets.left/top is the precise system value + err.x = sysInsets.left - insets.left * g.transform.getScaleX(); + err.y = sysInsets.top - insets.top * g.transform.getScaleY(); + } + } + return err; + } } diff --git a/src/java.desktop/windows/classes/sun/font/EmojiFont.java b/src/java.desktop/windows/classes/sun/font/EmojiFont.java new file mode 100644 index 000000000000..d7e31387bb9e --- /dev/null +++ b/src/java.desktop/windows/classes/sun/font/EmojiFont.java @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.font; + +import java.awt.*; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; + +public class EmojiFont extends Font2D { + + private Font2D symbol, emoji; + private volatile boolean init; + + public EmojiFont() { + handle = new Font2DHandle(this); + fullName = "Emoji.plain"; + familyName = "Emoji"; + fontRank = JRE_RANK; + style = Font.PLAIN; + } + + private void init() { + if (!init) { + synchronized (this) { + if (!init) { + SunFontManager fm = SunFontManager.getInstance(); + symbol = fm.findFont2D("Segoe UI Symbol", Font.PLAIN, FontManager.NO_FALLBACK); + emoji = fm.findFont2D("Segoe UI Emoji", Font.PLAIN, FontManager.NO_FALLBACK); + init = true; + } + } + } + } + + @Override + public void getStyleMetrics(float pointSize, float[] metrics, int offset) { + init(); + if (emoji != null) { + emoji.getStyleMetrics(pointSize, metrics, offset); + } else if (symbol != null) { + symbol.getStyleMetrics(pointSize, metrics, offset); + } else { + super.getStyleMetrics(pointSize, metrics, offset); + } + } + + @Override + FontStrike createStrike(FontStrikeDesc desc) { + init(); + return new Strike(desc); + } + + @Override + protected int getValidatedGlyphCode(int glyphCode) { + init(); + Font2D slot = (glyphCode & 1) == 1 ? emoji : symbol; + if (emoji != null) { + int result = slot.getValidatedGlyphCode(glyphCode >>> 1); + if (result != slot.getMissingGlyphCode()) { + return glyphCode; + } + } + return getMissingGlyphCode(); + } + + @Override + CharToGlyphMapper getMapper() { + init(); + if (mapper == null) { + mapper = new Mapper(); + } + return mapper; + } + + @Override + public boolean hasSupplementaryChars() { + init(); + return (emoji != null && emoji.hasSupplementaryChars()) || + (symbol != null && symbol.hasSupplementaryChars()); + } + + @Override + public int getNumGlyphs() { + init(); + return Math.max(emoji != null ? emoji.getNumGlyphs() : 0, + symbol != null ? symbol.getNumGlyphs() : 0); + } + + @Override + public boolean canDisplay(int cp) { + return (Character.isEmoji(cp) || Character.isEmojiComponent(cp)) && getMapper().canDisplay(cp); + } + + @Override + public SlotInfo getSlotInfoForGlyph(int glyphCode) { + SlotInfo info = ((glyphCode & 1) == 1 ? emoji : symbol) + .getSlotInfoForGlyph(glyphCode >>> 1); + info.slotShift++; + return info; + } + + private class Strike extends FontStrike { + + private final FontStrike symbol, emoji; + + private Strike(FontStrikeDesc desc) { + this.desc = desc; + this.disposer = new FontStrikeDisposer(EmojiFont.this, desc); + symbol = EmojiFont.this.symbol == null ? null : + EmojiFont.this.symbol.getStrike(desc); + emoji = EmojiFont.this.emoji == null ? null : + EmojiFont.this.emoji.getStrike(desc); + } + + private FontStrike getStrikeForGlyph(int glyphCode) { + return (glyphCode & 1) == 1 ? emoji : symbol; + } + + @Override + public int getNumGlyphs() { + return EmojiFont.this.getNumGlyphs(); + } + + @Override + StrikeMetrics getFontMetrics() { + if (strikeMetrics == null) { + StrikeMetrics compMetrics = new StrikeMetrics(); + if (emoji != null) { + compMetrics.merge(emoji.getFontMetrics()); + } + if (symbol != null) { + compMetrics.merge(symbol.getFontMetrics()); + } + strikeMetrics = compMetrics; + } + return strikeMetrics; + } + + @Override + void getGlyphImagePtrs(int[] glyphCodes, long[] images, int len) { + for (int i = 0; i < len; i++) { + images[i] = getGlyphImagePtr(glyphCodes[i]); + } + } + + @Override + long getGlyphImagePtr(int glyphCode) { + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphImagePtr(glyphCode >>> 1); + } + + @Override + void getGlyphImageBounds(int glyphCode, Point2D.Float pt, Rectangle result) { + FontStrike strike = getStrikeForGlyph(glyphCode); + strike.getGlyphImageBounds(glyphCode >>> 1, pt, result); + } + + @Override + Point2D.Float getGlyphMetrics(int glyphCode) { + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphMetrics(glyphCode >>> 1); + } + + @Override + Point2D.Float getCharMetrics(char ch) { + return getGlyphMetrics(getMapper().charToGlyph(ch)); + } + + @Override + float getGlyphAdvance(int glyphCode) { + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphAdvance(glyphCode >>> 1); + } + + @Override + float getCodePointAdvance(int cp) { + return getGlyphAdvance(getMapper().charToGlyph(cp)); + } + + @Override + Rectangle2D.Float getGlyphOutlineBounds(int glyphCode) { + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphOutlineBounds(glyphCode >>> 1); + } + + @Override + GeneralPath getGlyphOutline(int glyphCode, float x, float y) { + FontStrike strike = getStrikeForGlyph(glyphCode); + GeneralPath path = strike.getGlyphOutline(glyphCode >>> 1, x, y); + return path != null ? path : new GeneralPath(); + } + + @Override + GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y) { + FontStrike strike = getStrikeForGlyph(glyphCode); + return strike.getGlyphRenderData(glyphCode >>> 1, x, y); + } + } + + class Mapper extends CharToGlyphMapper { + + private final CharToGlyphMapper symbol, emoji; + + private Mapper() { + symbol = EmojiFont.this.symbol == null ? null : + EmojiFont.this.symbol.getMapper(); + emoji = EmojiFont.this.emoji == null ? null : + EmojiFont.this.emoji.getMapper(); + if (EmojiFont.this.emoji != null) { + missingGlyph = compositeGlyphCode(true, EmojiFont.this.emoji.getMissingGlyphCode()); + } else if (EmojiFont.this.symbol != null) { + missingGlyph = compositeGlyphCode(false, EmojiFont.this.symbol.getMissingGlyphCode()); + } + } + + private int compositeGlyphCode(boolean slot, int glyphCode) { + return slot ? (glyphCode << 1) | 1 : glyphCode << 1; + } + + private boolean getSlot(int unicode, int variationSelector) { + return switch (variationSelector) { + case 0xFE0F -> true; + case 0xFE0E -> false; + default -> Character.isEmojiPresentation(unicode); + }; + } + + @Override + public int getNumGlyphs() { + return EmojiFont.this.getNumGlyphs(); + } + + @Override + public int charToVariationGlyph(int unicode, int variationSelector) { + boolean slot = getSlot(unicode, variationSelector); + CharToGlyphMapper mapper = slot ? emoji : symbol; + if (mapper != null) { + int glyph = mapper.charToGlyph(unicode); + if (glyph != mapper.getMissingGlyphCode()) { + return compositeGlyphCode(slot, glyph); + } + } + mapper = slot ? symbol : emoji; + if (mapper != null) { + int glyph = mapper.charToGlyph(unicode); + if (glyph != mapper.getMissingGlyphCode()) { + return compositeGlyphCode(!slot, glyph); + } + } + return missingGlyph; + } + + @Override + public int charToGlyph(int unicode) { + return charToVariationGlyph(unicode, 0); + } + + @Override + public int charToGlyph(char unicode) { + return charToGlyph((int) unicode); + } + } +} diff --git a/src/java.desktop/windows/classes/sun/font/NativeFont.java b/src/java.desktop/windows/classes/sun/font/NativeFont.java index 7a5c29c7c73e..3efaa1762302 100644 --- a/src/java.desktop/windows/classes/sun/font/NativeFont.java +++ b/src/java.desktop/windows/classes/sun/font/NativeFont.java @@ -79,8 +79,7 @@ public GeneralPath getGlyphOutline(long pScalerContext, return null; } - public GeneralPath getGlyphVectorOutline(long pScalerContext, - int[] glyphs, int numGlyphs, + public GlyphRenderData getGlyphRenderData(long pScalerContext, int glyphCode, float x, float y) { return null; } @@ -104,4 +103,8 @@ Rectangle2D.Float getGlyphOutlineBounds(long pScalerContext, int glyphCode) { return new Rectangle2D.Float(0f, 0f, 0f, 0f); } + + public SlotInfo getSlotInfoForGlyph(int glyphCode) { + return new SlotInfo(getDelegateFont()); + } } diff --git a/src/java.desktop/windows/classes/sun/font/NativeStrike.java b/src/java.desktop/windows/classes/sun/font/NativeStrike.java index a28c47911ed4..8391bbac718d 100644 --- a/src/java.desktop/windows/classes/sun/font/NativeStrike.java +++ b/src/java.desktop/windows/classes/sun/font/NativeStrike.java @@ -79,7 +79,7 @@ GeneralPath getGlyphOutline(int glyphCode, float x, float y) { return null; } - GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) { + GlyphRenderData getGlyphRenderData(int glyphCode, float x, float y) { return null; } diff --git a/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java b/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java index 3c18de432bb0..ca478ca108f6 100644 --- a/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java +++ b/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java @@ -213,7 +213,7 @@ public Object run() { } offscreenSharingEnabled = getBooleanProp("sun.java2d.offscreenSharing", false); - String dpiOverride = System.getProperty("sun.java2d.dpiaware"); + String dpiOverride = System.getProperty("sun.java2d.dpiaware", "true"); if (dpiOverride != null) { setHighDPIAware = dpiOverride.equalsIgnoreCase("true"); } else { diff --git a/src/java.desktop/windows/data/fontconfig/fontconfig.properties b/src/java.desktop/windows/data/fontconfig/fontconfig.properties index 40e40ca55af9..420c9db2d2c1 100644 --- a/src/java.desktop/windows/data/fontconfig/fontconfig.properties +++ b/src/java.desktop/windows/data/fontconfig/fontconfig.properties @@ -51,8 +51,7 @@ allfonts.mongolian=Mongolian Baiti allfonts.myanmar=Myanmar Text allfonts.dingbats=Wingdings allfonts.symbol=Symbol -allfonts.symbols=Segoe UI Symbol -allfonts.thai=DokChampa +allfonts.thai=Tahoma allfonts.georgian=Sylfaen allfonts.korean-fallback=Malgun Gothic @@ -231,7 +230,7 @@ sequence.dialog.x-MS950-HKSCS-XP=alphabetic,chinese-ms950,chinese-hkscs,dingbats sequence.dialoginput.x-MS950-HKSCS-XP=alphabetic,chinese-ms950,chinese-hkscs,dingbats,symbol,chinese-ms950-extb sequence.allfonts.UTF-8.hi=alphabetic/1252,devanagari,dingbats,symbol -sequence.allfonts.UTF-8.ja=alphabetic,japanese,dingbats,symbol +sequence.allfonts.UTF-8.ja=alphabetic,japanese,devanagari,dingbats,symbol sequence.allfonts.UTF-8.ko=alphabetic,korean,dingbats,symbol sequence.allfonts.windows-1255=hebrew,alphabetic/1252,dingbats,symbol @@ -250,8 +249,7 @@ sequence.dialoginput.x-windows-949=alphabetic,korean,dingbats,symbol sequence.allfonts.x-windows-874=alphabetic,thai,dingbats,symbol -sequence.fallback=symbols,\ - chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\ +sequence.fallback=chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\ japanese,korean-fallback,chinese-ms950-extb,chinese-ms936-extb,\ georgian,devanagari,bengali,gujarati,gurmukhi,kannada,\ malayalam,oriya,sinhala,tamil,telugu,thai,khmer,mongolian,\ @@ -259,7 +257,7 @@ sequence.fallback=symbols,\ # Exclusion Ranges -exclusion.alphabetic=0700-1cff,1d80-1e9f,1f00-2017,2020-20ab,20ad-20b8,20bb-20bc,20be-f8ff +exclusion.alphabetic=0700-1cff,1d80-1e9f,1f00-2017,2020-20ab,20ad-20b8,20bb-20bc,20be-24ff,2501-2501,2503-250b,250d-250f,2511-2513,2515-2517,2519-251b,251d-2523,2525-252b,252d-2533,2535-253b,253d-254f,256d-f8ff exclusion.chinese-gb18030=0390-03d6,2200-22ef,2701-27be exclusion.hebrew=0041-005a,0060-007a,007f-00ff,20ac-20ac @@ -317,9 +315,9 @@ filename.Latha=latha.ttf filename.Mangal=MANGAL.TTF filename.Raavi=raavi.ttf filename.Shruti=shruti.ttf +filename.Tahoma=tahoma.ttf filename.Tunga=TUNGA.TTF filename.Vrinda=vrinda.ttf -filename.DokChampa=dokchamp.ttf filename.Khmer_UI=KhmerUI.ttf filename.Mongolian_Baiti=monbaiti.ttf filename.Myanmar_Text=mmrtext.ttf @@ -328,5 +326,6 @@ filename.Wingdings=WINGDING.TTF filename.Sylfaen=sylfaen.ttf filename.Segoe_UI_Symbol=SEGUISYM.TTF +filename.Segoe_UI_Emoji=seguiemj.ttf filename.Malgun_Gothic=malgun.ttf filename.Malgun_Gothic_Bold=malgunbd.TTF diff --git a/src/java.desktop/windows/native/libawt/java2d/d3d/D3DTextRenderer.cpp b/src/java.desktop/windows/native/libawt/java2d/d3d/D3DTextRenderer.cpp index c86e2f14a401..331f91e8204f 100644 --- a/src/java.desktop/windows/native/libawt/java2d/d3d/D3DTextRenderer.cpp +++ b/src/java.desktop/windows/native/libawt/java2d/d3d/D3DTextRenderer.cpp @@ -792,7 +792,7 @@ D3DTR_DrawGlyphList(D3DContext *d3dc, D3DSDOps *dstOps, break; } - grayscale = (ginfo->rowBytes == ginfo->width); + grayscale = (ginfo->format == sun_font_StrikeCache_PIXEL_FORMAT_GREYSCALE); if (usePositions) { jfloat posx = NEXT_FLOAT(positions); diff --git a/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/AccessibleAnnouncer.cpp b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/AccessibleAnnouncer.cpp new file mode 100644 index 000000000000..36a6c973aa96 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/AccessibleAnnouncer.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "sun_swing_AccessibleAnnouncer.h" +#include "NVDAAnnouncer.h" // NVDAAnnounce +#include "JawsAnnouncer.h" // JawsAnnounce + +/* + * Class: sun_swing_AccessibleAnnouncer + * Method: nativeAnnounce + * Signature: (Ljavax/accessibility/Accessible;Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL Java_sun_swing_AccessibleAnnouncer_nativeAnnounce +(JNIEnv *env, jclass cls, jobject accessible, jstring str, jint priority) +{ +#ifndef NO_A11Y_NVDA_ANNOUNCING + if (NVDAAnnounce(env, str, priority)) { + return; + } +#endif + +#ifndef NO_A11Y_JAWS_ANNOUNCING + if (JawsAnnounce(env, str, priority)) { + return; + } +#endif + +#ifdef DEBUG + fprintf(stderr, "Each announcer has failed or the build was made without any of them\n"); +#endif +} diff --git a/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/IJawsApi.h b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/IJawsApi.h new file mode 100644 index 000000000000..54285702fba5 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/IJawsApi.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef IJAWS_API_H +#define IJAWS_API_H + +#ifndef NO_A11Y_JAWS_ANNOUNCING + +#include +#include + +#undef INTERFACE +#define INTERFACE IJawsApi + +DECLARE_INTERFACE_(IJawsApi ,IDispatch) +{ + STDMETHOD(RunScript)(THIS_ /* [in] */ BSTR ScriptName, VARIANT_BOOL* retval) PURE; + STDMETHOD(SayString)(THIS_ /* [in]*/ BSTR StringToSpeak, + /*[in, optional, defaultvalue(-1)]*/ VARIANT_BOOL bFlush, VARIANT_BOOL* retval) PURE; + STDMETHOD(StopSpeech)(THIS_ ) PURE; + STDMETHOD(Enable)(THIS_ /*[in]*/ VARIANT_BOOL vbNoDDIHooks, + VARIANT_BOOL* retval) PURE; + STDMETHOD(Disable)(THIS_ VARIANT_BOOL* retval) PURE; + STDMETHOD(RunFunction)(THIS_ /*[in]*/ BSTR FunctionName, VARIANT_BOOL* retval) PURE; +}; + +#endif // ndef NO_A11Y_JAWS_ANNOUNCING + +#endif // ndef IJAWS_API_H diff --git a/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/JawsAnnouncer.cpp b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/JawsAnnouncer.cpp new file mode 100644 index 000000000000..20105f4a5b70 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/JawsAnnouncer.cpp @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "JawsAnnouncer.h" + +#ifndef NO_A11Y_JAWS_ANNOUNCING +#include "IJawsApi.h" +#include "sun_swing_AccessibleAnnouncer.h" +#include "jni_util.h" // JNU_ThrowOutOfMemoryError +#include "debug_assert.h" // DASSERT +#include // DEFINE_GUID + + +/* {CCE5B1E5-B2ED-45D5-B09F-8EC54B75ABF4} */ +DEFINE_GUID(CLSID_JAWSCLASS, + 0xCCE5B1E5, 0xB2ED, 0x45D5, 0xB0, 0x9F, 0x8E, 0xC5, 0x4B, 0x75, 0xAB, 0xF4); + +/* {123DEDB4-2CF6-429C-A2AB-CC809E5516CE} */ +DEFINE_GUID(IID_IJAWSAPI, + 0x123DEDB4, 0x2CF6, 0x429C, 0xA2, 0xAB, 0xCC, 0x80, 0x9E, 0x55, 0x16, 0xCE); + + +class ComInitializationWrapper final { +public: // ctors + ComInitializationWrapper() = default; + ComInitializationWrapper(const ComInitializationWrapper&) = delete; + ComInitializationWrapper(ComInitializationWrapper&&) = delete; + +public: // assignments + ComInitializationWrapper& operator=(const ComInitializationWrapper&) = delete; + ComInitializationWrapper& operator=(ComInitializationWrapper&&) = delete; + +public: + HRESULT tryInitialize() { + if (!isInitialized()) { + m_initializeResult = CoInitializeEx(nullptr, COINIT_MULTITHREADED); + } + return m_initializeResult; + } + +public: // dtor + ~ComInitializationWrapper() { + // MSDN: To close the COM library gracefully, each successful call to CoInitialize or CoInitializeEx, + // including those that return S_FALSE, must be balanced by a corresponding call to CoUninitialize + if ((m_initializeResult == S_OK) || (m_initializeResult == S_FALSE)) { + m_initializeResult = CO_E_NOTINITIALIZED; + CoUninitialize(); + } + } + +public: // getters + HRESULT getInitializeResult() const noexcept { return m_initializeResult; } + + bool isInitialized() const noexcept { + if ( (m_initializeResult == S_OK) || + (m_initializeResult == S_FALSE) || // Is already initialized + (m_initializeResult == RPC_E_CHANGED_MODE) ) { // Is already initialized but with different threading mode + return true; + } + return false; + } + +private: + HRESULT m_initializeResult = CO_E_NOTINITIALIZED; +}; + + +template +struct ComObjectWrapper final { + T* objPtr; + + ~ComObjectWrapper() { + T* const localObjPtr = objPtr; + objPtr = nullptr; + + if (localObjPtr != nullptr) { + localObjPtr->Release(); + } + } +}; + + +bool JawsAnnounce(JNIEnv *env, jstring str, jint priority) +{ + DASSERT(env != nullptr); + DASSERT(str != nullptr); + + ComInitializationWrapper comInitializer; + comInitializer.tryInitialize(); + if (!comInitializer.isInitialized()) { +#ifdef DEBUG + fprintf(stderr, "JawsAnnounce: CoInitialize failed ; HRESULT=0x%llX.\n", + static_cast(comInitializer.getInitializeResult())); +#endif + return false; + } + + static ComObjectWrapper pJawsApi{ nullptr }; + if (pJawsApi.objPtr == nullptr) { + HRESULT hr = CoCreateInstance(CLSID_JAWSCLASS, nullptr, CLSCTX_INPROC_SERVER, IID_IJAWSAPI, reinterpret_cast(&pJawsApi.objPtr)); + if ((hr != S_OK) || (pJawsApi.objPtr == nullptr)) { +#ifdef DEBUG + fprintf(stderr, "JawsAnnounce: CoCreateInstance failed ; HRESULT=0x%llX.\n", static_cast(hr)); +#endif + // just in case + if (pJawsApi.objPtr != nullptr) { + pJawsApi.objPtr->Release(); + pJawsApi.objPtr = nullptr; + } + return false; + } + } + + VARIANT_BOOL jawsInterruptCurrentOutput = VARIANT_TRUE; + if (priority == sun_swing_AccessibleAnnouncer_ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT) { + jawsInterruptCurrentOutput = VARIANT_FALSE; + } + + const jchar* jStringToSpeak = env->GetStringChars(str, nullptr); + if (jStringToSpeak == nullptr) { + if (env->ExceptionCheck() == JNI_FALSE) { + JNU_ThrowOutOfMemoryError(env, "JawsAnnounce: failed to obtain chars from the announcing string"); + } + return false; + } + + BSTR stringToSpeak = SysAllocString(jStringToSpeak); + + env->ReleaseStringChars(str, jStringToSpeak); + jStringToSpeak = nullptr; + + if (stringToSpeak == nullptr) { + if (env->ExceptionCheck() == JNI_FALSE) { + JNU_ThrowOutOfMemoryError(env, "JawsAnnounce: failed to allocate memory for the announcing string"); + } + return false; + } + + VARIANT_BOOL jawsSucceeded = VARIANT_FALSE; + + HRESULT comCallResult = pJawsApi.objPtr->SayString(stringToSpeak, jawsInterruptCurrentOutput, &jawsSucceeded); + + SysFreeString(stringToSpeak); + stringToSpeak = nullptr; + + if (FAILED(comCallResult)) { +#ifdef DEBUG + fprintf(stderr, "JawsAnnounce: failed to invoke COM function to say string ; HRESULT=0x%llX.\n", static_cast(comCallResult)); +#endif + return false; + } + if (jawsSucceeded != VARIANT_TRUE) { +#ifdef DEBUG + fprintf(stderr, "JawsAnnounce: failed to say string ; code = %d.\n", static_cast(jawsSucceeded)); +#endif + return false; + } + + return true; +} + +#endif // ndef NO_A11Y_JAWS_ANNOUNCING diff --git a/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/JawsAnnouncer.h b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/JawsAnnouncer.h new file mode 100644 index 000000000000..3c60223ae7c9 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/JawsAnnouncer.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef JAWS_ANNOUNCER_H +#define JAWS_ANNOUNCER_H + +#ifndef NO_A11Y_JAWS_ANNOUNCING + +#include "jni.h" + +bool JawsAnnounce(JNIEnv *env, jstring str, jint priority); + +#endif // ndef NO_A11Y_JAWS_ANNOUNCING + +#endif // ndef JAWS_ANNOUNCER_H diff --git a/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/NVDAAnnouncer.cpp b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/NVDAAnnouncer.cpp new file mode 100644 index 000000000000..089c22c23ed8 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/NVDAAnnouncer.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +#include "NVDAAnnouncer.h" + +#ifndef NO_A11Y_NVDA_ANNOUNCING +#include "sun_swing_AccessibleAnnouncer.h" +#include "jni_util.h" // JNU_ThrowOutOfMemoryError +#include "debug_assert.h" // DASSERT +#include // nvdaController_*, error_status_t + +bool NVDAAnnounce(JNIEnv* const env, const jstring str, const jint priority) +{ + DASSERT(env != nullptr); + DASSERT(str != nullptr); + + error_status_t nvdaStatus; + + if ( (nvdaStatus = nvdaController_testIfRunning()) != 0 ) { +#ifdef DEBUG + fprintf(stderr, "NVDA isn't running or an RPC error occurred code = %d\n", nvdaStatus); +#endif + return false; + } + + if (priority == sun_swing_AccessibleAnnouncer_ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT) { + if ( (nvdaStatus = nvdaController_cancelSpeech()) != 0 ) { +#ifdef DEBUG + fprintf(stderr, "Failed to interrupt current output. code = %d\n", nvdaStatus); +#endif + } + } + + const jchar* jchars = env->GetStringChars(str, nullptr); + if (jchars == nullptr) { + if (env->ExceptionCheck() == JNI_FALSE) { + JNU_ThrowOutOfMemoryError(env, "NVDAAnnounce: failed to obtain chars from the announcing string"); + } + return false; + } + + static_assert(sizeof(*jchars) == sizeof(wchar_t), "Can't cast jchar* to wchar_t*"); + const wchar_t* announceText = reinterpret_cast(jchars); + + nvdaStatus = nvdaController_speakText(announceText); + + env->ReleaseStringChars(str, jchars); + jchars = nullptr; + announceText = nullptr; + + if (nvdaStatus != 0) { +#ifdef DEBUG + fprintf(stderr, "nvdaController_speakText failed code = %d\n", nvdaStatus); +#endif + return false; + } + + return true; +} + +#endif // ndef NO_A11Y_NVDA_ANNOUNCING diff --git a/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/NVDAAnnouncer.h b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/NVDAAnnouncer.h new file mode 100644 index 000000000000..2a4c0c2402fa --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/AccessibleAnnouncer/NVDAAnnouncer.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +#ifndef NVDA_ANNOUNCER_H +#define NVDA_ANNOUNCER_H + +#ifndef NO_A11Y_NVDA_ANNOUNCING + +#include // JNIEnv, jstring, jint + +[[nodiscard]] bool NVDAAnnounce(JNIEnv *env, jstring str, jint priority); + +#endif // ndef NO_A11Y_NVDA_ANNOUNCING + +#endif // ndef NVDA_ANNOUNCER_H diff --git a/src/java.desktop/windows/native/libawt/windows/Devices.cpp b/src/java.desktop/windows/native/libawt/windows/Devices.cpp index e275cb77a577..2ded3e80b083 100644 --- a/src/java.desktop/windows/native/libawt/windows/Devices.cpp +++ b/src/java.desktop/windows/native/libawt/windows/Devices.cpp @@ -229,6 +229,7 @@ BOOL Devices::UpdateInstance(JNIEnv *env) } for (i = 0; i < numScreens; ++i) { rawDevices[i]->Initialize(); + rawDevices[i]->InitDesktopScales(); } { CriticalSection::Lock l(arrayLock); diff --git a/src/java.desktop/windows/native/libawt/windows/MouseInfo.cpp b/src/java.desktop/windows/native/libawt/windows/MouseInfo.cpp index 560764e8b28f..46aa1a70ee87 100644 --- a/src/java.desktop/windows/native/libawt/windows/MouseInfo.cpp +++ b/src/java.desktop/windows/native/libawt/windows/MouseInfo.cpp @@ -112,9 +112,7 @@ Java_sun_awt_windows_WMouseInfoPeer_fillPointWithCoords(JNIEnv *env, jclass cls, env->SetIntField(point, xID, x); env->SetIntField(point, yID, y); - // Always return 0 on Windows: we assume there's always a - // virtual screen device used. - return (jint)0; + return (jint) screen; } } // extern "C" diff --git a/src/java.desktop/windows/native/libawt/windows/awt.h b/src/java.desktop/windows/native/libawt/windows/awt.h index 3703bfbb0cb6..2fdc6f929e9c 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt.h +++ b/src/java.desktop/windows/native/libawt/windows/awt.h @@ -40,6 +40,17 @@ extern COLORREF DesktopColor2RGB(int colorIndex); +#ifndef PROCESS_DPI_AWARENESS //_WIN32_WINNT_WINBLUE +typedef enum _PROCESS_DPI_AWARENESS { + PROCESS_DPI_UNAWARE = 0, + PROCESS_SYSTEM_DPI_AWARE = 1, + PROCESS_PER_MONITOR_DPI_AWARE = 2 +} PROCESS_DPI_AWARENESS; +#endif + +typedef BOOL(WINAPI AdjustWindowRectExForDpiFunc)(LPRECT, DWORD, BOOL, DWORD, UINT); +typedef UINT(WINAPI GetDpiForWindowFunc)(HWND); + class AwtObject; typedef AwtObject* PDATA; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.cpp index 2aadcd5a08c7..ca754d358b49 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.cpp @@ -37,9 +37,7 @@ jmethodID AwtClipboard::lostSelectionOwnershipMID; jobject AwtClipboard::theCurrentClipboard; -/* This flag is set while we call EmptyClipboard to indicate to - WM_DESTROYCLIPBOARD handler that we are not losing ownership */ -BOOL AwtClipboard::isGettingOwnership = FALSE; +volatile LONG /* BOOL */ AwtClipboard::isGettingOwnership = FALSE; volatile jmethodID AwtClipboard::handleContentsChangedMID; volatile BOOL AwtClipboard::isClipboardViewerRegistered = FALSE; @@ -51,6 +49,8 @@ volatile BOOL AwtClipboard::isClipboardViewerRegistered = FALSE; */ void AwtClipboard::LostOwnership(JNIEnv *env) { + (void)::InterlockedExchange(&AwtClipboard::isOwner, FALSE); // isOwner = FALSE; + if (theCurrentClipboard != NULL) { env->CallVoidMethod(theCurrentClipboard, lostSelectionOwnershipMID); DASSERT(!safe_ExceptionOccurred(env)); @@ -93,6 +93,52 @@ void AwtClipboard::UnregisterClipboardViewer(JNIEnv *env) { CATCH_BAD_ALLOC; } + +// ======================== JBR-5980 Pasting from clipboard not working reliably in Windows =========================== +volatile BOOL AwtClipboard::areOwnershipExtraChecksEnabled = FALSE; +volatile LONG /* BOOL */ AwtClipboard::isOwner = FALSE; +jmethodID AwtClipboard::ensureNoOwnedDataMID = nullptr; + +void AwtClipboard::SetOwnershipExtraChecksEnabled(BOOL enabled) { + areOwnershipExtraChecksEnabled = enabled; +} + +void AwtClipboard::ExtraCheckOfOwnership() { + if (areOwnershipExtraChecksEnabled != TRUE) { + return; + } + + JNIEnv* const env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + if (env == nullptr) { + return; + } + + const bool isOwner = + // Checks the actual value of AwtClipboard::isOwner without altering it + (::InterlockedCompareExchange(&AwtClipboard::isOwner, TRUE, TRUE) != LONG{FALSE}); + if (isOwner) { + const HWND toolkitHwnd = AwtToolkit::GetInstance().GetHWnd(); + + if (::OpenClipboard(toolkitHwnd) == 0) { + // failed to open the clipboard + return; + } + const HWND clipboardOwnerHwnd = ::GetClipboardOwner(); + ::CloseClipboard(); + + if (clipboardOwnerHwnd != toolkitHwnd) { + AwtClipboard::LostOwnership(env); + } + } else { + if ((theCurrentClipboard != nullptr) && (ensureNoOwnedDataMID != nullptr)) { + env->CallVoidMethod(theCurrentClipboard, ensureNoOwnedDataMID); + DASSERT(!safe_ExceptionOccurred(env)); + } + } +} +// ==================================================================================================================== + + extern "C" { void awt_clipboard_uninitialize(JNIEnv *env) { @@ -111,7 +157,7 @@ void awt_clipboard_uninitialize(JNIEnv *env) { * Signature: ()V */ JNIEXPORT void JNICALL -Java_sun_awt_windows_WClipboard_init(JNIEnv *env, jclass cls) +Java_sun_awt_windows_WClipboard_init(JNIEnv *env, jclass cls, jboolean areOwnershipExtraChecksEnabled) { TRY; @@ -119,6 +165,11 @@ Java_sun_awt_windows_WClipboard_init(JNIEnv *env, jclass cls) env->GetMethodID(cls, "lostSelectionOwnershipImpl", "()V"); DASSERT(AwtClipboard::lostSelectionOwnershipMID != NULL); + AwtClipboard::ensureNoOwnedDataMID = env->GetMethodID(cls, "ensureNoOwnedData", "()V"); + DASSERT(AwtClipboard::ensureNoOwnedDataMID != nullptr); + + AwtClipboard::SetOwnershipExtraChecksEnabled( (areOwnershipExtraChecksEnabled == JNI_TRUE) ? TRUE : FALSE ); + CATCH_BAD_ALLOC; } diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.h b/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.h index 7821dacdb745..e732ee3fb1a0 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Clipboard.h @@ -35,7 +35,14 @@ class AwtClipboard { private: - static BOOL isGettingOwnership; + // This flag is set while we call EmptyClipboard to indicate to WM_DESTROYCLIPBOARD handler that + // we are not losing ownership + // Although the variable's type is LONG, it's supposed to be treated as BOOL, + // with the only possible values TRUE and FALSE. + // Also, all accesses to the variable (both reading and writing) MUST be performed using + // Windows Interlocked Variable Access API. + // LONG is only used to make sure it's safe to pass the variable to ::Interlocked*** functions. + static volatile LONG /* BOOL */ isGettingOwnership; static volatile BOOL isClipboardViewerRegistered; static volatile jmethodID handleContentsChangedMID; @@ -44,19 +51,40 @@ class AwtClipboard { static jobject theCurrentClipboard; INLINE static void GetOwnership() { - AwtClipboard::isGettingOwnership = TRUE; + (void)::InterlockedExchange(&isGettingOwnership, TRUE); // isGettingOwnership = TRUE VERIFY(EmptyClipboard()); - AwtClipboard::isGettingOwnership = FALSE; + (void)::InterlockedExchange(&isGettingOwnership, FALSE); // isGettingOwnership = FALSE + (void)::InterlockedExchange(&isOwner, TRUE); // isOwner = TRUE; } INLINE static BOOL IsGettingOwnership() { - return isGettingOwnership; + // Returns the actual value of isGettingOwnership without altering it + return ::InterlockedCompareExchange(&isGettingOwnership, TRUE, TRUE) != LONG{FALSE}; } static void LostOwnership(JNIEnv *env); static void WmClipboardUpdate(JNIEnv *env); static void RegisterClipboardViewer(JNIEnv *env, jobject jclipboard); static void UnregisterClipboardViewer(JNIEnv *env); + + // ===================== JBR-5980 Pasting from clipboard not working reliably in Windows ========================== +public: + static jmethodID ensureNoOwnedDataMID; + +public: + static void SetOwnershipExtraChecksEnabled(BOOL enabled); + // Checks if ownership has been lost since the last check or the last acquiring of ownership + static void ExtraCheckOfOwnership(); + +private: + static volatile BOOL areOwnershipExtraChecksEnabled; + // Although the variable's type is LONG, it's supposed to be treated as BOOL, + // with the only possible values TRUE and FALSE. + // Also, all accesses to the variable (both reading and writing) MUST be performed using + // Windows Interlocked Variable Access API. + // LONG is only used to make sure it's safe to pass the variable to ::Interlocked*** functions. + static volatile LONG /* BOOL */ isOwner; + // ================================================================================================================ }; #endif /* AWT_CLIPBOARD_H */ diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp index 4f87e8ef4c11..4d728b525e77 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp @@ -33,6 +33,7 @@ #include "jlong.h" #include "awt_AWTEvent.h" #include "awt_BitmapUtil.h" +#include "awt_Clipboard.h" #include "awt_Component.h" #include "awt_Cursor.h" #include "awt_Dimension.h" @@ -63,6 +64,7 @@ #include #include #include +#include #include #include #include @@ -85,15 +87,6 @@ static DCList passiveDCList; extern void CheckFontSmoothingSettings(HWND); -extern "C" { - // Remember the input language has changed by some user's action - // (Alt+Shift or through the language icon on the Taskbar) to control the - // race condition between the toolkit thread and the AWT event thread. - // This flag remains TRUE until the next WInputMethod.getNativeLocale() is - // issued. - BOOL g_bUserHasChangedInputLang = FALSE; -} - BOOL AwtComponent::sm_suppressFocusAndActivation = FALSE; BOOL AwtComponent::sm_restoreFocusAndActivation = FALSE; HWND AwtComponent::sm_focusOwner = NULL; @@ -218,10 +211,11 @@ BOOL windowMoveLockHeld = FALSE; AwtComponent::AwtComponent() { m_mouseButtonClickAllowed = 0; - m_touchDownOccurred = FALSE; - m_touchUpOccurred = FALSE; - m_touchDownPoint.x = m_touchDownPoint.y = 0; - m_touchUpPoint.x = m_touchUpPoint.y = 0; + + m_isTouchScroll = FALSE; + m_touchBeginPoint = {0, 0}; + m_lastTouchPoint = {0, 0}; + m_callbacksEnabled = FALSE; m_hwnd = NULL; @@ -768,6 +762,18 @@ jobject AwtComponent::FindHeavyweightUnderCursor(BOOL useCache) { if (comp != NULL) { INT nHittest = (INT)::SendMessage(hit, WM_NCHITTEST, 0, MAKELPARAM(p.x, p.y)); + + if (AwtFrame::IsTitleBarHitTest(nHittest)) { + AwtWindow* window = comp->GetContainer(); + if (window != NULL && !window->IsSimpleWindow() && + ((AwtFrame*) window)->HasCustomTitleBar()) { + // In case of custom title bar, WindowFromPoint will return root frame, so search further + ScreenToBottommostChild(hit, p.x, p.y); + comp = AwtComponent::GetComponent(hit); + if (comp != NULL) nHittest = HTCLIENT; + } + } + /* * Fix for BugTraq ID 4304024. * Allow a non-default cursor only for the client area. @@ -1285,6 +1291,7 @@ void SpyWinMessage(HWND hwnd, UINT message, LPCTSTR szComment) { WIN_MSG(WM_AWT_COMPONENT_HIDE) WIN_MSG(WM_AWT_COMPONENT_SETFOCUS) WIN_MSG(WM_AWT_WINDOW_SETACTIVE) + WIN_MSG(WM_AWT_WINDOW_TOFRONT) WIN_MSG(WM_AWT_LIST_SETMULTISELECT) WIN_MSG(WM_AWT_HANDLE_EVENT) WIN_MSG(WM_AWT_RESHAPE_COMPONENT) @@ -1326,6 +1333,18 @@ void SpyWinMessage(HWND hwnd, UINT message, LPCTSTR szComment) { #endif /* SPY_MESSAGES */ +// consider making general function +// T getClassStaticField(cls, field, default_val) +static BOOL IsDefaultTouch() +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + jclass cls = env->FindClass("sun/awt/event/TouchEvent"); + CHECK_NULL_RETURN(cls, FALSE); + jfieldID fieldID = env->GetStaticFieldID(cls, "defaultTouchHandling", "Z"); + CHECK_NULL_RETURN(fieldID, FALSE); + return static_cast(env->GetStaticBooleanField(cls, fieldID)); +} + /* * Dispatch messages for this window class--general component */ @@ -1351,6 +1370,8 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) return (LRESULT)TRUE; } + static const BOOL PROCESS_TOUCH_EVENTS = !IsDefaultTouch(); + DWORD curPos = 0; UINT switchMessage = message; @@ -1560,6 +1581,12 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) } break; } + case WM_ACTIVATEAPP: + if (wParam == TRUE) { + // the window is being activated, let's check if we still own the clipboard + AwtClipboard::ExtraCheckOfOwnership(); + } + break; case WM_MOUSEACTIVATE: { AwtWindow *window = GetContainer(); if (window && window->IsFocusableWindow()) { @@ -1570,7 +1597,7 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) window->AwtSetActiveWindow(TRUE, LOWORD(lParam)/*hittest*/); } mr = mrConsume; - retValue = MA_NOACTIVATE; + retValue = AwtToolkit::GetInstance().IsActiveWindowTrackingEnabled() ? MA_ACTIVATE : MA_NOACTIVATE; break; } case WM_CTLCOLORMSGBOX: @@ -1608,8 +1635,39 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) mr = WmNcMouseUp(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), LEFT_BUTTON); break; case WM_NCRBUTTONDOWN: - mr = WmNcMouseDown(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), RIGHT_BUTTON); - break; + case WM_NCRBUTTONDBLCLK: + mr = WmNcMouseDown(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), RIGHT_BUTTON); + break; + case WM_NCRBUTTONUP: + mr = WmNcMouseUp(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), RIGHT_BUTTON); + break; + case WM_NCMBUTTONDOWN: + case WM_NCMBUTTONDBLCLK: + mr = WmNcMouseDown(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), MIDDLE_BUTTON); + break; + case WM_NCMBUTTONUP: + mr = WmNcMouseUp(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), MIDDLE_BUTTON); + break; + case WM_NCXBUTTONDOWN: + case WM_NCXBUTTONDBLCLK: + if (AwtToolkit::GetInstance().areExtraMouseButtonsEnabled()) { + int b = 0; + if (HIWORD(wParam) == 1) b = X1_BUTTON; + else if (HIWORD(wParam) == 2) b = X2_BUTTON; + if (b != 0) mr = WmNcMouseDown(LOWORD(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), b); + } + break; + case WM_NCXBUTTONUP: + if (AwtToolkit::GetInstance().areExtraMouseButtonsEnabled()) { + int b = 0; + if (HIWORD(wParam) == 1) b = X1_BUTTON; + else if (HIWORD(wParam) == 2) b = X2_BUTTON; + if (b != 0) mr = WmNcMouseUp(LOWORD(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), b); + } + break; + case WM_NCMOUSEMOVE: + mr = WmNcMouseMove(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); + break; case WM_LBUTTONUP: if (ignoreNextLBTNUP) { ignoreNextLBTNUP = FALSE; @@ -1634,6 +1692,9 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) case WM_MOUSEHWHEEL: case WM_AWT_MOUSEENTER: case WM_AWT_MOUSEEXIT: + if (IsMouseEventFromTouch() && PROCESS_TOUCH_EVENTS) { + break; + } curPos = ::GetMessagePos(); POINT myPos; myPos.x = GET_X_LPARAM(curPos); @@ -1711,13 +1772,27 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) } break; case WM_TOUCH: - WmTouch(wParam, lParam); - break; + if (PROCESS_TOUCH_EVENTS) { + WmTouch(wParam, lParam); + break; + } case WM_SETCURSOR: mr = mrDoDefault; - if (LOWORD(lParam) == HTCLIENT) { + if (LOWORD(lParam) == HTCLIENT || AwtFrame::IsTitleBarHitTest(LOWORD(lParam))) { if (AwtComponent* comp = AwtComponent::GetComponent((HWND)wParam)) { + if (AwtFrame::IsTitleBarHitTest(LOWORD(lParam))) { + AwtWindow* window = comp->GetContainer(); + if (window == NULL || window->IsSimpleWindow() || + !((AwtFrame*) window)->HasCustomTitleBar()) break; + // When custom title bar is enabled, WM_SETCURSOR is sent to root Frame, so find actual component under cursor + HWND hwnd = (HWND) wParam; + POINT p; + ::GetCursorPos(&p); + ScreenToBottommostChild(hwnd, p.x, p.y); + comp = AwtComponent::GetComponent(hwnd); + if (!comp) break; + } AwtCursor::UpdateCursor(comp); mr = mrConsume; } @@ -1796,9 +1871,6 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ::ToAsciiEx(VK_SPACE, ::MapVirtualKey(VK_SPACE, 0), keyboardState, &ignored, 0, GetKeyboardLayout()); - // Set this flag to block ActivateKeyboardLayout from - // WInputMethod.activate() - g_bUserHasChangedInputLang = TRUE; CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); break; } @@ -1807,7 +1879,6 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) "new = 0x%08X", GetHWnd(), GetClassName(), (UINT)lParam); mr = WmInputLangChange(static_cast(wParam), reinterpret_cast(lParam)); - g_bUserHasChangedInputLang = TRUE; CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); // should return non-zero if we process this message retValue = 1; @@ -1863,7 +1934,7 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) mr = WmNcPaint((HRGN)wParam); break; case WM_NCHITTEST: - mr = WmNcHitTest(LOWORD(lParam), HIWORD(lParam), retValue); + mr = WmNcHitTest(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), retValue); break; case WM_AWT_RESHAPE_COMPONENT: { @@ -1948,6 +2019,10 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) retValue = (LRESULT)((AwtWindow*)this)->AwtSetActiveWindow((BOOL)wParam); mr = mrConsume; break; + case WM_AWT_WINDOW_TOFRONT: + ((AwtWindow*)this)->ToFront(); + mr = mrConsume; + break; case WM_AWT_CREATE_PRINTED_PIXELS: { CreatePrintedPixelsStruct* cpps = (CreatePrintedPixelsStruct*)wParam; @@ -2286,6 +2361,9 @@ MsgRouting AwtComponent::WmNcMouseDown(WPARAM hitTest, int x, int y, int button) MsgRouting AwtComponent::WmNcMouseUp(WPARAM hitTest, int x, int y, int button) { return mrDoDefault; } +MsgRouting AwtComponent::WmNcMouseMove(WPARAM hitTest, int x, int y) { + return mrDoDefault; +} MsgRouting AwtComponent::WmWindowPosChanging(LPARAM windowPos) { return mrDoDefault; @@ -2296,34 +2374,97 @@ MsgRouting AwtComponent::WmWindowPosChanged(LPARAM windowPos) { void AwtComponent::WmTouch(WPARAM wParam, LPARAM lParam) { AwtToolkit& tk = AwtToolkit::GetInstance(); - if (!tk.IsWin8OrLater() || !tk.IsTouchKeyboardAutoShowEnabled()) { + if (!tk.IsWin8OrLater()) { return; } UINT inputsCount = LOWORD(wParam); TOUCHINPUT* pInputs = new TOUCHINPUT[inputsCount]; - if (pInputs != NULL) { - if (tk.TIGetTouchInputInfo((HTOUCHINPUT)lParam, inputsCount, pInputs, - sizeof(TOUCHINPUT)) != 0) { - for (UINT i = 0; i < inputsCount; i++) { - TOUCHINPUT ti = pInputs[i]; - if (ti.dwFlags & TOUCHEVENTF_PRIMARY) { - if (ti.dwFlags & TOUCHEVENTF_DOWN) { - m_touchDownPoint.x = ti.x / 100; - m_touchDownPoint.y = ti.y / 100; - ::ScreenToClient(GetHWnd(), &m_touchDownPoint); - m_touchDownOccurred = TRUE; - } else if (ti.dwFlags & TOUCHEVENTF_UP) { - m_touchUpPoint.x = ti.x / 100; - m_touchUpPoint.y = ti.y / 100; - ::ScreenToClient(GetHWnd(), &m_touchUpPoint); - m_touchUpOccurred = TRUE; - } - } - } + if (tk.TIGetTouchInputInfo((HTOUCHINPUT)lParam, inputsCount, pInputs, + sizeof(TOUCHINPUT)) != 0) { + for (UINT i = 0; i < inputsCount; i++) { + WmTouchHandler(pInputs[i]); } - delete[] pInputs; } + delete[] pInputs; +} + +BOOL AwtComponent::IsInsideTouchClickBoundaries(POINT p) +{ + return abs(p.x - m_touchBeginPoint.x) <= sun_awt_event_TouchEvent_CLICK_RADIUS && + abs(p.y - m_touchBeginPoint.y) <= sun_awt_event_TouchEvent_CLICK_RADIUS; +} + +POINT AwtComponent::TouchCoordsToLocal(LONG x, LONG y) +{ + POINT p{TOUCH_COORD_TO_PIXEL(x), TOUCH_COORD_TO_PIXEL(y)}; + ::ScreenToClient(GetHWnd(), &p); + return p; +} + +void AwtComponent::SendMouseWheelEventFromTouch(POINT p, jint modifiers, jint scrollType, jint pixels) +{ + SendMouseWheelEvent(java_awt_event_MouseEvent_MOUSE_WHEEL, ::JVM_CurrentTimeMillis(NULL, 0), + p.x, p.y, modifiers, /*clickCount*/ 0, /*popupTrigger*/ JNI_FALSE, + scrollType, /*scrollAmount*/ 1, pixels, + static_cast(pixels), /*msg*/ nullptr); +} + +void AwtComponent::SendMouseEventFromTouch(jint id, POINT p, jint modifiers, jint clickCount, jint button) +{ + SendMouseEvent(id, ::JVM_CurrentTimeMillis(NULL, 0), p.x, p.y, + modifiers, clickCount, /*popupTrigger*/ JNI_FALSE, + button, /*msg*/ nullptr, /*causedByTouchEvent*/ TRUE); +} + +void AwtComponent::SendButtonPressEventFromTouch(POINT p, jint modifiers) +{ + SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_MOVED, p, modifiers, 0, java_awt_event_MouseEvent_NOBUTTON); + SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_PRESSED, p, modifiers, 1, java_awt_event_MouseEvent_BUTTON1); + SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_RELEASED, p, modifiers, 1, java_awt_event_MouseEvent_BUTTON1); + SendMouseEventFromTouch(java_awt_event_MouseEvent_MOUSE_CLICKED, p, modifiers, 1, java_awt_event_MouseEvent_BUTTON1); +} + +void AwtComponent::WmTouchHandler(const TOUCHINPUT& touchInput) +{ + // skip multitouch, remove after gesture support + if (!(touchInput.dwFlags & TOUCHEVENTF_PRIMARY)) { + return; + } + + const jint modifiers = GetJavaModifiers(); + const POINT p = TouchCoordsToLocal(touchInput.x, touchInput.y); + + if (touchInput.dwFlags & TOUCHEVENTF_DOWN) { + m_touchBeginPoint = p; + m_isTouchScroll = FALSE; + SendMouseWheelEventFromTouch(p, modifiers, sun_awt_event_TouchEvent_TOUCH_BEGIN, 1); + } else if (touchInput.dwFlags & TOUCHEVENTF_MOVE) { + if (!m_isTouchScroll && IsInsideTouchClickBoundaries(p)) { + return; + } + m_isTouchScroll = TRUE; + + const jint deltaY = ScaleDownY(static_cast(m_lastTouchPoint.y - p.y)); + if (deltaY != 0) { + const jint scrollModifiers = modifiers & ~java_awt_event_InputEvent_SHIFT_DOWN_MASK; + SendMouseWheelEventFromTouch(p, scrollModifiers, sun_awt_event_TouchEvent_TOUCH_UPDATE, deltaY); + } + + const jint deltaX = ScaleDownX(static_cast(m_lastTouchPoint.x - p.x)); + if (deltaX != 0) { + const jint scrollModifiers = modifiers | java_awt_event_InputEvent_SHIFT_DOWN_MASK; + SendMouseWheelEventFromTouch(p, scrollModifiers, sun_awt_event_TouchEvent_TOUCH_UPDATE, deltaX); + } + } else if (touchInput.dwFlags & TOUCHEVENTF_UP) { + SendMouseWheelEventFromTouch(p, modifiers, sun_awt_event_TouchEvent_TOUCH_END, 1); + + if (!m_isTouchScroll) { + SendButtonPressEventFromTouch(p, modifiers); + } + } + + m_lastTouchPoint = p; } /* Double-click variables. */ @@ -2368,14 +2509,6 @@ MsgRouting AwtComponent::WmMouseDown(UINT flags, int x, int y, int button) m_mouseButtonClickAllowed |= GetButtonMK(button); lastTime = now; - BOOL causedByTouchEvent = FALSE; - if (m_touchDownOccurred && - (abs(m_touchDownPoint.x - x) <= TOUCH_MOUSE_COORDS_DELTA) && - (abs(m_touchDownPoint.y - y) <= TOUCH_MOUSE_COORDS_DELTA)) { - causedByTouchEvent = TRUE; - m_touchDownOccurred = FALSE; - } - MSG msg; InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y); @@ -2394,7 +2527,7 @@ MsgRouting AwtComponent::WmMouseDown(UINT flags, int x, int y, int button) SendMouseEvent(java_awt_event_MouseEvent_MOUSE_PRESSED, now, x, y, GetJavaModifiers(), clickCount, JNI_FALSE, - GetButton(button), &msg, causedByTouchEvent); + GetButton(button), &msg, /*causedByTouchEvent*/ FALSE); /* * NOTE: this call is intentionally placed after all other code, * since AwtComponent::WmMouseDown() assumes that the cached id of the @@ -2403,7 +2536,7 @@ MsgRouting AwtComponent::WmMouseDown(UINT flags, int x, int y, int button) * SetCapture() sends WM_CAPTURECHANGED and breaks that * assumption. */ - SetDragCapture(flags); + if (!(flags & MK_NOCAPTURE)) SetDragCapture(flags); AwtWindow * owner = (AwtWindow*)GetComponent(GetTopLevelParentForWindow(GetHWnd())); if (AwtWindow::GetGrabbedWindow() != NULL && owner != NULL) { @@ -2416,21 +2549,13 @@ MsgRouting AwtComponent::WmMouseDown(UINT flags, int x, int y, int button) MsgRouting AwtComponent::WmMouseUp(UINT flags, int x, int y, int button) { - BOOL causedByTouchEvent = FALSE; - if (m_touchUpOccurred && - (abs(m_touchUpPoint.x - x) <= TOUCH_MOUSE_COORDS_DELTA) && - (abs(m_touchUpPoint.y - y) <= TOUCH_MOUSE_COORDS_DELTA)) { - causedByTouchEvent = TRUE; - m_touchUpOccurred = FALSE; - } - MSG msg; InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y); SendMouseEvent(java_awt_event_MouseEvent_MOUSE_RELEASED, ::JVM_CurrentTimeMillis(NULL, 0), x, y, GetJavaModifiers(), clickCount, (GetButton(button) == java_awt_event_MouseEvent_BUTTON3 ? - TRUE : FALSE), GetButton(button), &msg, causedByTouchEvent); + TRUE : FALSE), GetButton(button), &msg, /*causedByTouchEvent*/ FALSE); /* * If no movement, then report a click following the button release. * When WM_MOUSEUP comes to a window without previous WM_MOUSEDOWN, @@ -2693,9 +2818,12 @@ AwtComponent::GetJavaModifiers() if (HIBYTE(::GetKeyState(VK_MENU)) != 0) { modifiers |= java_awt_event_InputEvent_ALT_DOWN_MASK; } - if (HIBYTE(::GetKeyState(VK_RMENU)) != 0) { - modifiers |= java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK; - } +// Reverted fix of JDK-8041928: MouseEvent.getModifiersEx gives wrong result +// Because it breaks AltGr shortcuts. +// See IDEA-287559, JBR-4207 for more info. +// if (HIBYTE(::GetKeyState(VK_RMENU)) != 0) { +// modifiers |= java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK; +// } if (HIBYTE(::GetKeyState(VK_MBUTTON)) != 0) { modifiers |= java_awt_event_InputEvent_BUTTON2_DOWN_MASK; } @@ -2948,6 +3076,22 @@ static DynamicKeyMapEntry dynamicKeyMapTable[] = { {0, 0} }; +static DynamicKeyMapEntry latinNonAlphaNumKeyMapTable[] = { + {0x00BA, java_awt_event_KeyEvent_VK_SEMICOLON}, // VK_OEM_1 + {0x00BB, java_awt_event_KeyEvent_VK_EQUALS}, // VK_OEM_PLUS + {0x00BC, java_awt_event_KeyEvent_VK_COMMA}, // VK_OEM_COMMA + {0x00BD, java_awt_event_KeyEvent_VK_MINUS}, // VK_OEM_MINUS + {0x00BE, java_awt_event_KeyEvent_VK_PERIOD}, // VK_OEM_PERIOD + {0x00BF, java_awt_event_KeyEvent_VK_SLASH}, // VK_OEM_2 + {0x00C0, java_awt_event_KeyEvent_VK_DEAD_GRAVE}, // VK_OEM_3 + {0x00DB, java_awt_event_KeyEvent_VK_OPEN_BRACKET}, // VK_OEM_4 + {0x00DC, java_awt_event_KeyEvent_VK_BACK_SLASH}, // VK_OEM_5 + {0x00DD, java_awt_event_KeyEvent_VK_CLOSE_BRACKET}, // VK_OEM_6 + {0x00DE, java_awt_event_KeyEvent_VK_QUOTE}, // VK_OEM_7 + {0x00DF, java_awt_event_KeyEvent_VK_UNDEFINED}, // VK_OEM_8 + {0x00E2, java_awt_event_KeyEvent_VK_UNDEFINED}, // VK_OEM_102 + {0, 0} +}; // Auxiliary tables used to fill the above dynamic table. We first @@ -3234,6 +3378,16 @@ void AwtComponent::JavaKeyToWindowsKey(UINT javaKey, return; } +static BOOL UseLatinNonAlphaNumKeycodes() +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + jclass cls = env->FindClass("sun/awt/event/KeyEventProcessing"); + CHECK_NULL_RETURN(cls, TRUE); + jfieldID fieldID = env->GetStaticFieldID(cls, "useLatinNonAlphaNumKeycodes", "Z"); + CHECK_NULL_RETURN(fieldID, TRUE); + return static_cast(env->GetStaticBooleanField(cls, fieldID)); +} + UINT AwtComponent::WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers, UINT character, BOOL isDeadKey) { @@ -3278,6 +3432,16 @@ UINT AwtComponent::WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers, UINT cha } } + static const BOOL USE_LATIN_NON_ALPHA_NUM_KEYCODES = UseLatinNonAlphaNumKeycodes(); + if (USE_LATIN_NON_ALPHA_NUM_KEYCODES) { + for (int i = 0; latinNonAlphaNumKeyMapTable[i].windowsKey != 0; i++) { + if (latinNonAlphaNumKeyMapTable[i].windowsKey == windowsKey && + latinNonAlphaNumKeyMapTable[i].javaKey != java_awt_event_KeyEvent_VK_UNDEFINED) { + return latinNonAlphaNumKeyMapTable[i].javaKey; + } + } + } + for (int j = 0; dynamicKeyMapTable[j].windowsKey != 0; j++) { if (dynamicKeyMapTable[j].windowsKey == windowsKey) { if (dynamicKeyMapTable[j].javaKey != java_awt_event_KeyEvent_VK_UNDEFINED) { @@ -3855,49 +4019,63 @@ void AwtComponent::SetCompositionWindow(RECT& r) ImmReleaseContext(hwnd, hIMC); } -void AwtComponent::OpenCandidateWindow(int x, int y) -{ +void AwtComponent::OpenCandidateWindow( + const int caretLeftX, + const int caretTopY, + const int caretRightX, + const int caretBottomY +) { UINT bits = 1; POINT p = {0, 0}; // upper left corner of the client area HWND hWnd = ImmGetHWnd(); if (!::IsWindowVisible(hWnd)) { return; } + HWND hTop = GetTopLevelParentForWindow(hWnd); ::ClientToScreen(hTop, &p); - int sx = ScaleUpAbsX(x) - p.x; - int sy = ScaleUpAbsY(y) - p.y; + const int sCaretLeftX = ScaleUpAbsX(caretLeftX) - p.x; + const int sCaretTopY = ScaleUpAbsY(caretTopY) - p.y; + const int sCaretRightX = ScaleUpAbsX(caretRightX) - p.x; + const int sCaretBottomY = ScaleUpAbsY(caretBottomY) - p.y; + if (!m_bitsCandType) { - SetCandidateWindow(m_bitsCandType, sx, sy); + SetCandidateWindow(m_bitsCandType, sCaretLeftX, sCaretTopY, sCaretRightX, sCaretBottomY); return; } for (int iCandType=0; iCandType<32; iCandType++, bits<<=1) { if ( m_bitsCandType & bits ) - SetCandidateWindow(iCandType, sx, sy); + SetCandidateWindow(iCandType, sCaretLeftX, sCaretTopY, sCaretRightX, sCaretBottomY); } } -void AwtComponent::SetCandidateWindow(int iCandType, int x, int y) -{ +void AwtComponent::SetCandidateWindow( + const int iCandType, + const int caretLeftX, + const int caretTopY, + const int caretRightX, + const int caretBottomY +) { HWND hwnd = ImmGetHWnd(); HIMC hIMC = ImmGetContext(hwnd); if (hIMC) { CANDIDATEFORM cf; cf.dwStyle = CFS_CANDIDATEPOS; ImmGetCandidateWindow(hIMC, 0, &cf); - if (x != cf.ptCurrentPos.x || y != cf.ptCurrentPos.y) { + if (caretLeftX != cf.ptCurrentPos.x || caretBottomY != cf.ptCurrentPos.y) { cf.dwIndex = iCandType; - cf.dwStyle = CFS_CANDIDATEPOS; - cf.ptCurrentPos = {x, y}; - cf.rcArea = {0, 0, 0, 0}; + cf.dwStyle = CFS_EXCLUDE; + cf.ptCurrentPos = {caretLeftX, caretBottomY}; + cf.rcArea = {caretLeftX, caretTopY, caretRightX, caretBottomY}; + ImmSetCandidateWindow(hIMC, &cf); } COMPOSITIONFORM cfr; cfr.dwStyle = CFS_POINT; ImmGetCompositionWindow(hIMC, &cfr); - if (x != cfr.ptCurrentPos.x || y != cfr.ptCurrentPos.y) { + if (caretLeftX != cfr.ptCurrentPos.x || caretBottomY != cfr.ptCurrentPos.y) { cfr.dwStyle = CFS_POINT; - cfr.ptCurrentPos = {x, y}; + cfr.ptCurrentPos = {caretLeftX, caretBottomY}; cfr.rcArea = {0, 0, 0, 0}; ImmSetCompositionWindow(hIMC, &cfr); } @@ -4603,8 +4781,16 @@ MsgRouting AwtComponent::WmNcPaint(HRGN hrgn) return mrDoDefault; } -MsgRouting AwtComponent::WmNcHitTest(UINT x, UINT y, LRESULT &retVal) +MsgRouting AwtComponent::WmNcHitTest(int x, int y, LRESULT &retVal) { + AwtWindow* window = GetContainer(); + if (window == NULL || window->IsSimpleWindow()) return mrDoDefault; + AwtFrame* frame = (AwtFrame*)window; + if (frame->HasCustomTitleBar() && + frame->WmNcHitTest(x, y, retVal) == mrConsume) { + retVal = HTTRANSPARENT; + return mrConsume; + } return mrDoDefault; } diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Component.h b/src/java.desktop/windows/native/libawt/windows/awt_Component.h index 740eb8c72f97..d20284d21367 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Component.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Component.h @@ -66,11 +66,9 @@ const UINT MAX_ACP_STR_LEN = 7; // ANSI CP identifiers are no longer than this // combination of standard mouse button flags const int ALL_MK_BUTTONS = MK_LBUTTON|MK_MBUTTON|MK_RBUTTON; const int X_BUTTONS = MK_XBUTTON1|MK_XBUTTON2; - -// The allowable difference between coordinates of the WM_TOUCH event and the -// corresponding WM_LBUTTONDOWN/WM_LBUTTONUP event letting to associate these -// events, when their coordinates are slightly different. -const int TOUCH_MOUSE_COORDS_DELTA = 10; +// Do not set drag capture when dispatching mouse event. +// This is useful for non-client events in custom title bar area for preserving native behavior. +#define MK_NOCAPTURE 0x80000000 // Whether to check for embedded frame and adjust location #define CHECK_EMBEDDED 0 @@ -523,9 +521,16 @@ class AwtComponent : public AwtObject { int wheelRotation, BOOL isHorizontal); virtual MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); virtual MsgRouting WmNcMouseUp(WPARAM hitTest, int x, int y, int button); + virtual MsgRouting WmNcMouseMove(WPARAM hitTest, int x, int y); virtual MsgRouting WmWindowPosChanging(LPARAM windowPos); virtual MsgRouting WmWindowPosChanged(LPARAM windowPos); virtual void WmTouch(WPARAM wParam, LPARAM lParam); + void WmTouchHandler(const TOUCHINPUT& touchInput); + BOOL IsInsideTouchClickBoundaries(POINT p); + POINT TouchCoordsToLocal(LONG x, LONG y); + void SendMouseWheelEventFromTouch(POINT p, jint modifiers, jint scrollType, jint pixels); + void SendMouseEventFromTouch(jint id, POINT p, jint modifiers, jint clickCount, jint button); + void SendButtonPressEventFromTouch(POINT p, jint modifiers); // NB: 64-bit: vkey is wParam of the message, but other API's take // vkey parameters of type UINT, so we do the cast before dispatching. @@ -540,8 +545,8 @@ class AwtComponent : public AwtObject { virtual MsgRouting WmPaste(); virtual void SetCompositionWindow(RECT &r); - virtual void OpenCandidateWindow(int x, int y); - virtual void SetCandidateWindow(int iCandType, int x, int y); + virtual void OpenCandidateWindow(int caretLeftX, int caretTopY, int caretRightX, int caretBottomY); + virtual void SetCandidateWindow(int iCandType, int caretLeftX, int caretTopY, int caretRightX, int caretBottomY); virtual MsgRouting WmImeSetContext(BOOL fSet, LPARAM *lplParam); virtual MsgRouting WmImeNotify(WPARAM subMsg, LPARAM bitsCandType); virtual MsgRouting WmImeStartComposition(); @@ -579,7 +584,7 @@ class AwtComponent : public AwtObject { LPNCCALCSIZE_PARAMS lpncsp, LRESULT &retVal); virtual MsgRouting WmNcPaint(HRGN hrgn); - virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT &retVal); + virtual MsgRouting WmNcHitTest(int x, int y, LRESULT &retVal); virtual MsgRouting WmSysCommand(UINT uCmdType, int xPos, int yPos); virtual MsgRouting WmEnterSizeMove(); virtual MsgRouting WmExitSizeMove(); @@ -748,6 +753,7 @@ class AwtComponent : public AwtObject { virtual void FillBackground(HDC hMemoryDC, SIZE &size); virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha); +public: int ScaleUpX(int x); int ScaleUpAbsX(int x); int ScaleUpY(int y); @@ -767,10 +773,9 @@ class AwtComponent : public AwtObject { */ UINT m_mouseButtonClickAllowed; - BOOL m_touchDownOccurred; - BOOL m_touchUpOccurred; - POINT m_touchDownPoint; - POINT m_touchUpPoint; + BOOL m_isTouchScroll; + POINT m_touchBeginPoint; + POINT m_lastTouchPoint; BOOL m_bSubclassed; BOOL m_bPauseDestroy; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_DesktopProperties.cpp b/src/java.desktop/windows/native/libawt/windows/awt_DesktopProperties.cpp index 502433a13aa6..65558dd27a01 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_DesktopProperties.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_DesktopProperties.cpp @@ -29,6 +29,7 @@ #include "mmsystem.h" #include "jlong.h" #include "awt_DesktopProperties.h" +#include "awt_Win32GraphicsDevice.h" #include "awt_Toolkit.h" #include "sun_awt_windows_WDesktopProperties.h" #include "java_awt_Font.h" @@ -37,6 +38,8 @@ #include #include +#include + // WDesktopProperties fields jfieldID AwtDesktopProperties::pDataID = 0; jmethodID AwtDesktopProperties::setBooleanPropertyID = 0; @@ -46,6 +49,8 @@ jmethodID AwtDesktopProperties::setColorPropertyID = 0; jmethodID AwtDesktopProperties::setFontPropertyID = 0; jmethodID AwtDesktopProperties::setSoundPropertyID = 0; +BOOL AppsUseLightThemeCached = TRUE; + AwtDesktopProperties::AwtDesktopProperties(jobject self) { this->self = GetEnv()->NewGlobalRef(self); GetEnv()->SetLongField( self, AwtDesktopProperties::pDataID, @@ -82,6 +87,11 @@ void AwtDesktopProperties::GetWindowsParameters() { } void getInvScale(float &invScaleX, float &invScaleY) { + if (!AwtWin32GraphicsDevice::IsUiScaleEnabled()) { + invScaleX = 1.0f; + invScaleY = 1.0f; + return; + } static int dpiX = -1; static int dpiY = -1; if (dpiX == -1 || dpiY == -1) { @@ -486,6 +496,42 @@ void CheckFontSmoothingSettings(HWND hWnd) { } } +BOOL GetDwmColorizationColorFromRegistry(DWORD& colorizationColor, DWORD& colorizationColorBalance) { + // DwmGetColorizationColor is unreliable: it doesn't extract the actual accent color value set by user. To get the + // actual value (usable e.g. to calculate the border colors), we have to use the registry. + DWORD colorizationColorBgr = 0; + DWORD dwordSize(sizeof(DWORD)); + + HKEY hKey = NULL; + if (::RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\DWM", 0, KEY_READ, &hKey) != ERROR_SUCCESS) return FALSE; + if (::RegQueryValueEx(hKey, L"ColorizationColor", NULL, NULL, reinterpret_cast(&colorizationColorBgr), &dwordSize) != ERROR_SUCCESS) { + RegCloseKey(hKey); + return FALSE; + } + + int b = colorizationColorBgr & 0xFF; + int g = (colorizationColorBgr & 0xFF00) >> 8; + int r = (colorizationColorBgr & 0xFF0000) >> 16; + colorizationColor = RGB(r, g, b); + + if (::RegQueryValueEx(hKey, L"ColorizationColorBalance", NULL, NULL, reinterpret_cast(&colorizationColorBalance), &dwordSize) != ERROR_SUCCESS) { + colorizationColorBalance = -1; + } + RegCloseKey(hKey); + + return TRUE; +} + +BOOL ColorizationColorAffectsBorders() { + DWORD result = 0; + DWORD bufSize(sizeof(DWORD)); + HKEY hKey = NULL; + if (::RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\DWM"), 0, KEY_READ, &hKey) != ERROR_SUCCESS) return TRUE; + if (::RegQueryValueEx(hKey, _T("ColorPrevalence"), NULL, NULL, reinterpret_cast(&result), &bufSize) != ERROR_SUCCESS) result = 1; + RegCloseKey(hKey); + return result == 0 ? FALSE : TRUE; +} + void AwtDesktopProperties::GetColorParameters() { SetColorProperty(TEXT("win.frame.activeCaptionGradientColor"), @@ -504,6 +550,20 @@ void AwtDesktopProperties::GetColorParameters() { SetColorProperty(TEXT("win.frame.activeCaptionColor"), GetSysColor(COLOR_ACTIVECAPTION)); SetColorProperty(TEXT("win.frame.activeBorderColor"), GetSysColor(COLOR_ACTIVEBORDER)); + BOOL enabled; + DwmIsCompositionEnabled(&enabled); + if (enabled) { + DWORD color = 0; + DWORD balance = 0; + + if (GetDwmColorizationColorFromRegistry(color, balance)) { + SetColorProperty(TEXT("win.dwm.colorizationColor"), color); + SetIntegerProperty(TEXT("win.dwm.colorizationColorBalance"), balance); + } + + SetBooleanProperty(TEXT("win.dwm.colorizationColor.affects.borders"), ColorizationColorAffectsBorders()); + } + // ?? ?? ?? SetColorProperty(TEXT("win.frame.color"), GetSysColor(COLOR_WINDOWFRAME)); // ?? WHAT THE HECK DOES THIS MEAN ?? // ?? ?? ?? @@ -637,6 +697,20 @@ void AwtDesktopProperties::GetOtherParameters() { } free(value); } + + // Add property for light/dark theme detection + value = getWindowsPropFromReg(TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"), + TEXT("AppsUseLightTheme"), &valueType); + BOOL lightTheme = TRUE; + if (value != NULL) { + if (valueType == REG_DWORD) { + lightTheme = (BOOL)((int)*value == 1); + } + free(value); + } + SetBooleanProperty(TEXT("win.lightTheme.on"), lightTheme); + AppsUseLightThemeCached = lightTheme; + } catch (std::bad_alloc&) { if (value != NULL) { diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Dialog.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Dialog.cpp index 8e3ca77c4723..a4f6c29eb32c 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Dialog.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Dialog.cpp @@ -172,6 +172,8 @@ AwtDialog* AwtDialog::Create(jobject peer, jobject parent) dialog->RecalcNonClient(); dialog->UpdateSystemMenu(); + CustomTitleBarControls::Refresh(dialog->customTitleBarControls, dialog->GetHWnd(), target, env); + /* * Initialize icon as inherited from parent if it exists */ @@ -403,7 +405,7 @@ HICON AwtDialog::GetEffectiveIcon(int iconType) //Java cup icon is not loaded in window class for dialogs //It needs to be set explicitly for resizable dialogs //and ownerless dialogs - hIcon = (smallIcon) ? AwtToolkit::GetInstance().GetAwtIconSm() : + hIcon = (smallIcon) ? AwtToolkit::GetInstance().GetAwtIconSm(reinterpret_cast(this)) : AwtToolkit::GetInstance().GetAwtIcon(); } else if ((hIcon != NULL) && IsIconInherited() && !isResizable) { //Non-resizable dialogs without explicitly set icon diff --git a/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp b/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp index e8128372ceb0..e62fd6d4ef00 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp @@ -23,15 +23,18 @@ * questions. */ +#include "awt_ole.h" #include "awt.h" #include "awt_FileDialog.h" #include "awt_Dialog.h" #include "awt_Toolkit.h" #include "ComCtl32Util.h" +#include "com_jetbrains_desktop_JBRFileDialog.h" #include #include #include - +#include +#include /************************************************************************ * AwtFileDialog fields @@ -51,12 +54,110 @@ jfieldID AwtFileDialog::modeID; jfieldID AwtFileDialog::dirID; jfieldID AwtFileDialog::fileID; jfieldID AwtFileDialog::filterID; +jfieldID AwtFileDialog::jbrDialogID; +jfieldID AwtFileDialog::openButtonTextID; +jfieldID AwtFileDialog::selectFolderButtonTextID; +jfieldID AwtFileDialog::hintsID; + +class CoTaskStringHolder { +public: + CoTaskStringHolder() : m_str(NULL) {} + + CoTaskStringHolder(CoTaskStringHolder& other) { + m_str = other.m_str; + other.m_str = NULL; + } + + CoTaskStringHolder& operator=(CoTaskStringHolder& other) { + if (m_str == other.m_str) return *this; + Clean(); + m_str = other.m_str; + other.m_str = NULL; + return *this; + } + + LPTSTR* operator&() { + return &m_str; + } + + operator bool() { + return m_str != NULL; + } + + operator LPTSTR() { + return m_str; + } + + ~CoTaskStringHolder() { + Clean(); + } +private: + LPTSTR m_str; + + void Clean() { + if (m_str) { + ::CoTaskMemFree(m_str); + m_str = NULL; + } + } +}; + +template +class SmartHolderBase { +public: + SmartHolderBase() : m_pointer(NULL) {} + + SmartHolderBase& operator=(const SmartHolderBase&) = delete; + + void Attach(T* other) { + if (m_pointer == other) return; + Clean(); + m_pointer = other; + } + + operator bool() { + return m_pointer != NULL; + } + + operator T*() { + return m_pointer; + } + + ~SmartHolderBase() { + Clean(); + } +protected: + T* m_pointer; + + virtual void Clean() { + if (m_pointer) { + delete m_pointer; + m_pointer = NULL; + } + } +}; + +template +class SmartHolder : public SmartHolderBase { +}; + +template +class SmartHolder : public SmartHolderBase { + virtual void Clean() { + if (this->m_pointer) { + delete [] this->m_pointer; + this->m_pointer = NULL; + } + } +}; /* Localized filter string */ #define MAX_FILTER_STRING 128 static TCHAR s_fileFilterString[MAX_FILTER_STRING]; /* Non-localized suffix of the filter string */ static const TCHAR s_additionalString[] = TEXT(" (*.*)\0*.*\0"); +static SmartHolder s_fileFilterSpec; +static UINT s_fileFilterCount; // Default limit of the output buffer. #define SINGLE_MODE_BUFFER_LIMIT MAX_PATH+1 @@ -65,8 +166,45 @@ static const TCHAR s_additionalString[] = TEXT(" (*.*)\0*.*\0"); // The name of the property holding the pointer to the OPENFILENAME structure. static LPCTSTR OpenFileNameProp = TEXT("AWT_OFN"); +_COM_SMARTPTR_TYPEDEF(IFileDialog, __uuidof(IFileDialog)); +_COM_SMARTPTR_TYPEDEF(IFileDialogEvents, __uuidof(IFileDialogEvents)); +_COM_SMARTPTR_TYPEDEF(IShellItem, __uuidof(IShellItem)); +_COM_SMARTPTR_TYPEDEF(IFileOpenDialog, __uuidof(IFileOpenDialog)); +_COM_SMARTPTR_TYPEDEF(IShellItemArray, __uuidof(IShellItemArray)); +_COM_SMARTPTR_TYPEDEF(IOleWindowPtr, __uuidof(IOleWindowPtr)); + /***********************************************************************/ +COMDLG_FILTERSPEC *CreateFilterSpec(UINT *count) { + UINT filterCount = 0; + for (UINT index = 0; index < MAX_FILTER_STRING - 1; index++) { + if (s_fileFilterString[index] == _T('\0')) { + filterCount++; + if (s_fileFilterString[index + 1] == _T('\0')) + break; + } + } + filterCount /= 2; + COMDLG_FILTERSPEC *filterSpec = new COMDLG_FILTERSPEC[filterCount]; + UINT currentIndex = 0; + TCHAR *currentStart = s_fileFilterString; + for (UINT index = 0; index < MAX_FILTER_STRING - 1; index++) { + if (s_fileFilterString[index] == _T('\0')) { + if (currentIndex & 1) { + filterSpec[currentIndex / 2].pszSpec = currentStart; + } else { + filterSpec[currentIndex / 2].pszName = currentStart; + } + currentStart = s_fileFilterString + index + 1; + currentIndex++; + if (s_fileFilterString[index + 1] == _T('\0')) + break; + } + } + *count = filterCount; + return filterSpec; +} + void AwtFileDialog::Initialize(JNIEnv *env, jstring filterDescription) { @@ -86,6 +224,7 @@ AwtFileDialog::Initialize(JNIEnv *env, jstring filterDescription) } DASSERT(s + sizeof(s_additionalString) < s_fileFilterString + MAX_FILTER_STRING); memcpy(s, s_additionalString, sizeof(s_additionalString)); + s_fileFilterSpec.Attach(CreateFilterSpec(&s_fileFilterCount)); } LRESULT CALLBACK FileDialogWndProc(HWND hWnd, UINT message, @@ -237,12 +376,407 @@ FileDialogHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) CATCH_BAD_ALLOC_RET(TRUE); } +struct FileDialogData { + IFileDialogPtr fileDialog; + SmartHolder result; + UINT resultSize; + jobject peer; + BOOL ignoreCustomizations; + + // Whether the container folder of the current item should be used irregardless of the dialog result. + BOOL forceUseContainerFolder; + + SmartHolder openButtonText; + SmartHolder selectFolderButtonText; + + // Last observed value of the "File name" text box before user entered or selected a directory; kept for checking in + // some of the routines which have to behave differently in case user never touched the file name box. + CoTaskStringHolder lastIgnoredFileName; +}; + +bool SkipSelectedResults(FileDialogData *data) { + // Usually, when the "Open" / "Select Folder" button is pressed, we should close the file dialog (sometimes do it + // forcibly, because IFileDialog doesn't always thinks it should accept currently selected items, even if the dialog + // logic advices it should). + // + // But there's one case when we shouldn't: when the user has pasted a directory path into the "File name" text box, + // we should navigate to the directory entered instead of closing the dialog. This check guarantees we won't close + // the dialog if a directory path is pasted. + OLE_TRY + IFileDialogPtr fileDialog = data->fileDialog; + + CoTaskStringHolder currentFileName; + OLE_HRT(fileDialog->GetFileName(¤tFileName)); + if (_tcslen(currentFileName) == 0 || wcscmp(currentFileName, data->lastIgnoredFileName) == 0) { + return false; // do not skip anything if there's no file name entered + } + + IFileOpenDialogPtr fileOpenDialog = nullptr; + IShellItemArrayPtr psia = nullptr; + OLE_HRT(fileDialog->QueryInterface(IID_PPV_ARGS(&fileOpenDialog))) + if (FAILED(fileOpenDialog->GetSelectedItems(&psia))) { + return false; // not a real path entered (thus it couldn't be resolved): don't skip anything + } + + DWORD itemsCount = 0; + OLE_HRT(psia->GetCount(&itemsCount)); + if (itemsCount != 1) { + return false; // zero or multiple items selected for some reason: fall back to default flow + } + + IShellItemPtr singleItem = nullptr; + OLE_HRT(psia->GetItemAt(0, &singleItem)); + + SFGAOF attributes = 0; + bool isFolder = singleItem->GetAttributes(SFGAO_FOLDER, &attributes) == S_OK; + if (isFolder) { + // There's a folder name or path written in the file name text box: skip result selection, then. + return true; + } + OLE_CATCH + + // Skip selected results (and fall back to default dialog logic) in case of any error. + return true; +} + +HRESULT GetSelectedResults(FileDialogData *data) { + OLE_TRY + + IFileOpenDialogPtr fileOpenDialog; + size_t currentOffset = 0; + IShellItemArrayPtr psia; + DWORD itemsCount; + + OLE_HRT(data->fileDialog->QueryInterface(IID_PPV_ARGS(&fileOpenDialog))) + OLE_HRT(fileOpenDialog->GetSelectedItems(&psia)); + OLE_HRT(psia->GetCount(&itemsCount)); + + UINT maxBufferSize = (MAX_PATH + 1) * itemsCount + 1; + data->result.Attach(new TCHAR[maxBufferSize]); + data->resultSize = maxBufferSize; + LPTSTR resultBuffer = data->result; + for (DWORD i = 0; i < itemsCount; i++) { + IShellItemPtr psi; + OLE_HRT(psia->GetItemAt(i, &psi)); + if (i == 0 && itemsCount > 1) { + IShellItemPtr psiParent; + CoTaskStringHolder filePath; + OLE_HRT(psi->GetParent(&psiParent)); + OLE_HRT(psiParent->GetDisplayName(SIGDN_FILESYSPATH, &filePath)); + size_t filePathLength = _tcslen(filePath); + _tcsncpy(resultBuffer + currentOffset, filePath, filePathLength); + resultBuffer[currentOffset + filePathLength] = _T('\0'); + currentOffset += filePathLength + 1; + } + + CoTaskStringHolder filePath; + SIGDN displayForm = itemsCount > 1 ? SIGDN_PARENTRELATIVE : SIGDN_FILESYSPATH; + OLE_HRT(psi->GetDisplayName(displayForm, &filePath)); + size_t filePathLength = _tcslen(filePath); + _tcsncpy(resultBuffer + currentOffset, filePath, filePathLength); + resultBuffer[currentOffset + filePathLength] = _T('\0'); + currentOffset += filePathLength + 1; + } + resultBuffer[currentOffset] = _T('\0'); + resultBuffer[currentOffset + 1] = _T('\0'); + data->fileDialog->Close(S_OK); + + OLE_CATCH + OLE_RETURN_HR +} + +bool ShouldForceCloseDialogOnApply(FileDialogData *data) { + // We shouldn't force-close the dialog if we aren't in the force-close mode, or if we're in the folder picker mode: + if (!data->forceUseContainerFolder) return false; + if (data->ignoreCustomizations) return false; + + IFileDialogPtr fileDialog = data->fileDialog; + + OLE_TRY + // We should force-close the dialog on Enter, if there's nothing entered into the file name box: + CoTaskStringHolder currentFileName; + OLE_HRT(fileDialog->GetFileName(¤tFileName)); + if (_tcslen(currentFileName) == 0 || wcscmp(currentFileName, data->lastIgnoredFileName) == 0) { + return true; + } + + // If there's something entered into the file name box, then we should only force-close the dialog if it + // corresponds to a real file; otherwise, the user was probably looking for a file filter (e.g. entered + // "*.xml"), so we shouldn't close the dialog. + // + // To detect it, check the selected item list: if it's unavailable, it means that the item entered isn't an + // existing one. + IFileOpenDialogPtr fileOpenDialog; + IShellItemArrayPtr psia; + OLE_HRT(fileDialog->QueryInterface(IID_PPV_ARGS(&fileOpenDialog))) + if (FAILED(fileOpenDialog->GetSelectedItems(&psia))) { + return false; + } + OLE_CATCH + + // Don't close the dialog: this will assume default behavior, as if no customization were applied. + return false; +} + +LRESULT CALLBACK +FileDialogSubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + TRY; + + HWND parent = ::GetParent(hWnd); + + switch (uMsg) { + case WM_COMMAND: { + if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDOK) { + FileDialogData *data = (FileDialogData*) dwRefData; + if (!data->ignoreCustomizations) { + OLE_TRY + if (!SkipSelectedResults(data)) { + OLE_HRT(GetSelectedResults(data)); + } + OLE_CATCH + + // Force to close the dialog even if there's no item selected, but we're in the forceUseContainerFolder + // mode. + if (ShouldForceCloseDialogOnApply(data)) { + DestroyWindow(hWnd); + } + } + } + if (LOWORD(wParam) == IDCANCEL) { + jobject peer = (jobject) (::GetProp(hWnd, ModalDialogPeerProp)); + env->CallVoidMethod(peer, AwtFileDialog::setHWndMID, (jlong) 0); + + FileDialogData *data = (FileDialogData*) dwRefData; + if (!data->ignoreCustomizations) { + data->forceUseContainerFolder = FALSE; // disable mode on cancel + } + } + break; + } + case WM_SETICON: { + return 0; + } + case WM_DESTROY: { + HIMC hIMC = ::ImmGetContext(hWnd); + if (hIMC != NULL) { + ::ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0); + ::ImmReleaseContext(hWnd, hIMC); + } + + RemoveWindowSubclass(hWnd, &FileDialogSubclassProc, uIdSubclass); + + ::RemoveProp(parent, ModalDialogPeerProp); + break; + } + } + + return DefSubclassProc(hWnd, uMsg, wParam, lParam); + + CATCH_BAD_ALLOC_RET(TRUE); +} + +class CDialogEventHandler : public IFileDialogEvents +{ +public: + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv) + { + static const QITAB qit[] = { + QITABENT(CDialogEventHandler, IFileDialogEvents), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); + } + + IFACEMETHODIMP_(ULONG) AddRef() + { + return InterlockedIncrement(&m_refCount); + } + + IFACEMETHODIMP_(ULONG) Release() + { + long retVal = InterlockedDecrement(&m_refCount); + if (!retVal) + delete this; + return retVal; + } + + IFACEMETHODIMP OnFolderChange(IFileDialog *fileDialog) { + if (!m_activated) { + InitDialog(fileDialog); + m_activated = true; + } + + OLE_TRY + if (!data->ignoreCustomizations) { + IShellItemPtr folder = nullptr; + OLE_HRT(fileDialog->GetFolder(&folder)); + CoTaskStringHolder filePath; + OLE_HRT(folder->GetDisplayName(SIGDN_FILESYSPATH, &filePath)); + size_t filePathLength = _tcslen(filePath); + data->result.Attach(new TCHAR[filePathLength + 1]); + _tcscpy_s(data->result, filePathLength + 1, filePath); + data->resultSize = (UINT)(filePathLength + 1); + + CoTaskStringHolder fileName; + OLE_HRT(fileDialog->GetFileName(&fileName)); + data->lastIgnoredFileName = fileName; + + OLE_HRT(fileDialog->SetOkButtonLabel(data->selectFolderButtonText)); + data->forceUseContainerFolder = TRUE; + } + OLE_CATCH + + return S_OK; + }; + + IFACEMETHODIMP OnFileOk(IFileDialog *) { + OLE_TRY + OLE_HRT(GetSelectedResults(data)); + OLE_CATCH + + // Since the user has chosen a file, reset the forceUseContainerFolder mode. + data->forceUseContainerFolder = FALSE; + + return S_OK; + }; + + IFACEMETHODIMP OnFolderChanging(IFileDialog *, IShellItem *) { return S_OK; }; + IFACEMETHODIMP OnHelp(IFileDialog *) { return S_OK; }; + IFACEMETHODIMP OnSelectionChange(IFileDialog *fileDialog) { + OLE_TRY + if (!data->ignoreCustomizations) { + IShellItemPtr currentSelection = NULL; + OLE_HRT(fileDialog->GetCurrentSelection(¤tSelection)); + SFGAOF att = 0; + bool isFolder = currentSelection->GetAttributes(SFGAO_FOLDER, &att) == S_OK; + + LPCWSTR buttonLabel = nullptr; + if (isFolder) { + buttonLabel = data->selectFolderButtonText ? (WCHAR*) data->selectFolderButtonText : L"Select Folder"; + } else { + buttonLabel = data->openButtonText ? (WCHAR*) data->openButtonText : L"Open"; + } + OLE_HRT(fileDialog->SetOkButtonLabel(buttonLabel)); + + // Since we have an item selected, we're no more in the forceUseContainerFolder mode. + data->forceUseContainerFolder = FALSE; + + if (isFolder) { + CoTaskStringHolder fileName; + OLE_HRT(fileDialog->GetFileName(&fileName)); + data->lastIgnoredFileName = fileName; + } + } + OLE_CATCH + + return S_OK; + }; + IFACEMETHODIMP OnShareViolation(IFileDialog *, IShellItem *, FDE_SHAREVIOLATION_RESPONSE *) { return S_OK; }; + IFACEMETHODIMP OnTypeChange(IFileDialog *pfd) { return S_OK; }; + IFACEMETHODIMP OnOverwrite(IFileDialog *, IShellItem *, FDE_OVERWRITE_RESPONSE *) { return S_OK; }; + + CDialogEventHandler(FileDialogData *data) : data(data), m_refCount(1), m_activated(false) { }; +private: + ~CDialogEventHandler() { }; + FileDialogData *data; + bool m_activated; + long m_refCount; + + void InitDialog(IFileDialog *fileDialog) { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + TRY; + OLE_TRY + + IOleWindowPtr pWindow; + OLE_HR = fileDialog->QueryInterface(IID_PPV_ARGS(&pWindow)); + if (!SUCCEEDED(OLE_HR)) + return; + + HWND hdlg; + OLE_HRT(pWindow->GetWindow(&hdlg)); + + jobject peer = data->peer; + env->CallVoidMethod(peer, AwtFileDialog::setHWndMID, (jlong)hdlg); + ::SetProp(hdlg, ModalDialogPeerProp, reinterpret_cast(peer)); + + // fix for 4508670 - disable CS_SAVEBITS + DWORD style = ::GetClassLong(hdlg, GCL_STYLE); + ::SetClassLong(hdlg, GCL_STYLE, style & ~CS_SAVEBITS); + + // set appropriate icon for parentless dialogs + jobject awtParent = env->GetObjectField(peer, AwtFileDialog::parentID); + if (awtParent == NULL) { + ::SendMessage(hdlg, WM_SETICON, (WPARAM)ICON_BIG, + (LPARAM)AwtToolkit::GetInstance().GetAwtIcon()); + } else { + AwtWindow *awtWindow = (AwtWindow *)JNI_GET_PDATA(awtParent); + ::SendMessage(hdlg, WM_SETICON, (WPARAM)ICON_BIG, + (LPARAM)(awtWindow->GetHIcon())); + ::SendMessage(hdlg, WM_SETICON, (WPARAM)ICON_SMALL, + (LPARAM)(awtWindow->GetHIconSm())); + env->DeleteLocalRef(awtParent); + } + + SetWindowSubclass(hdlg, &FileDialogSubclassProc, 0, (DWORD_PTR) data); + + OLE_CATCH + CATCH_BAD_ALLOC; + } +}; + +HRESULT CDialogEventHandler_CreateInstance(FileDialogData *data, REFIID riid, void **ppv) +{ + OLE_TRY + IFileDialogEventsPtr dlg(new CDialogEventHandler(data), false); + OLE_HRT(dlg->QueryInterface(riid, ppv)); + OLE_CATCH + OLE_RETURN_HR +} + +HRESULT CreateShellItem(LPTSTR path, IShellItemPtr& shellItem) { + size_t pathLength = _tcslen(path); + for (size_t index = 0; index < pathLength; index++) { + if (path[index] == _T('/')) + path[index] = _T('\\'); + } + + return ::SHCreateItemInKnownFolder(FOLDERID_ComputerFolder, 0, path, IID_PPV_ARGS(&shellItem)); +} + +void AttachString(JNIEnv *env, const jstring string, SmartHolder &holder) { + if (JNU_IsNull(env, string)) { + holder.Attach(nullptr); + } else { + JavaStringBuffer buffer(env, string); + + size_t length = buffer.GetSize(); + size_t lengthWithTerminatingNull = length + 1; + holder.Attach(new WCHAR[lengthWithTerminatingNull]); + + wcscpy_s(holder, lengthWithTerminatingNull, buffer); + } +} + +void SaveCommonDialogLocalizationData(JNIEnv *env, const jobject jbrFileDialog, FileDialogData &data) { + jstring openButtonText = static_cast(env->GetObjectField(jbrFileDialog, AwtFileDialog::openButtonTextID)); + jstring selectFolderButtonText = static_cast(env->GetObjectField(jbrFileDialog, AwtFileDialog::selectFolderButtonTextID)); + + AttachString(env, openButtonText, data.openButtonText); + AttachString(env, selectFolderButtonText, data.selectFolderButtonText); + + env->DeleteLocalRef(openButtonText); + env->DeleteLocalRef(selectFolderButtonText); +} + void AwtFileDialog::Show(void *p) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject peer; - LPTSTR fileBuffer = NULL; LPTSTR currentDirectory = NULL; jint mode = 0; BOOL result = FALSE; @@ -256,13 +790,26 @@ AwtFileDialog::Show(void *p) AwtComponent* awtParent = NULL; jboolean multipleMode = JNI_FALSE; + OLE_DECL + OLEHolder _ole_; + IFileDialogPtr pfd; + IFileDialogEventsPtr pfde; + IShellItemPtr psiResult; + FileDialogData data; + DWORD dwCookie = OLE_BAD_COOKIE; + OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); peer = (jobject)p; + LPTSTR fileBuffer = NULL; + + BOOL useCommonItemDialog = JNU_CallStaticMethodByName(env, NULL, + "sun/awt/windows/WFileDialogPeer", "useCommonItemDialog", "()Z").z == JNI_TRUE; try { DASSERT(peer); + target = env->GetObjectField(peer, AwtObject::targetID); parent = env->GetObjectField(peer, AwtFileDialog::parentID); if (parent != NULL) { @@ -270,6 +817,18 @@ AwtFileDialog::Show(void *p) } // DASSERT(awtParent); title = (jstring)(env)->GetObjectField(target, AwtDialog::titleID); + /* + Fix for 6488834. + To disable Win32 native parent modality we have to set + hwndOwner field to either NULL or some hidden window. For + parentless dialogs we use NULL to show them in the taskbar, + and for all other dialogs AwtToolkit's HWND is used. + */ + /* [moklev] This fix does not needed anymore + * Tested on Windows 10 with example from JDK-4080029 + * Revert the fix and set the proper parent to keep correct position of modal dialogs + */ +// HWND hwndOwner = awtParent ? AwtToolkit::GetInstance().GetHWnd() : NULL; HWND hwndOwner = awtParent ? awtParent->GetHWnd() : NULL; if (title == NULL || env->GetStringLength(title)==0) { @@ -292,7 +851,7 @@ AwtFileDialog::Show(void *p) } else { bufferLimit = SINGLE_MODE_BUFFER_LIMIT; } - LPTSTR fileBuffer = new TCHAR[bufferLimit]; + fileBuffer = new TCHAR[bufferLimit]; memset(fileBuffer, 0, bufferLimit * sizeof(TCHAR)); file = (jstring)env->GetObjectField(target, AwtFileDialog::fileID); @@ -304,68 +863,147 @@ AwtFileDialog::Show(void *p) fileBuffer[0] = _T('\0'); } - ofn.lStructSize = sizeof(ofn); - ofn.lpstrFilter = s_fileFilterString; - ofn.nFilterIndex = 1; - /* - Fix for 6488834. - To disable Win32 native parent modality we have to set - hwndOwner field to either NULL or some hidden window. For - parentless dialogs we use NULL to show them in the taskbar, - and for all other dialogs AwtToolkit's HWND is used. - */ - if (awtParent != NULL) - { - ofn.hwndOwner = AwtToolkit::GetInstance().GetHWnd(); - } - else - { - ofn.hwndOwner = NULL; - } - ofn.lpstrFile = fileBuffer; - ofn.nMaxFile = bufferLimit; - ofn.lpstrTitle = titleBuffer; - ofn.lpstrInitialDir = directoryBuffer; - ofn.Flags = OFN_LONGNAMES | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | - OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING; - fileFilter = env->GetObjectField(peer, - AwtFileDialog::fileFilterID); - if (!JNU_IsNull(env,fileFilter)) { - ofn.Flags |= OFN_ENABLEINCLUDENOTIFY; - } - ofn.lCustData = (LPARAM)peer; - ofn.lpfnHook = (LPOFNHOOKPROC)FileDialogHookProc; + fileFilter = env->GetObjectField(peer, AwtFileDialog::fileFilterID); + + if (!useCommonItemDialog) { + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFilter = s_fileFilterString; + ofn.nFilterIndex = 1; + /* + Fix for 6488834. + To disable Win32 native parent modality we have to set + hwndOwner field to either NULL or some hidden window. For + parentless dialogs we use NULL to show them in the taskbar, + and for all other dialogs AwtToolkit's HWND is used. + */ + if (awtParent != NULL) { + ofn.hwndOwner = AwtToolkit::GetInstance().GetHWnd(); + } else { + ofn.hwndOwner = NULL; + } + ofn.lpstrFile = fileBuffer; + ofn.nMaxFile = bufferLimit; + ofn.lpstrTitle = titleBuffer; + ofn.lpstrInitialDir = directoryBuffer; + ofn.Flags = OFN_LONGNAMES | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | + OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING; + + if (!JNU_IsNull(env,fileFilter)) { + ofn.Flags |= OFN_ENABLEINCLUDENOTIFY; + } + ofn.lCustData = (LPARAM)peer; + ofn.lpfnHook = (LPOFNHOOKPROC)FileDialogHookProc; - if (multipleMode == JNI_TRUE) { - ofn.Flags |= OFN_ALLOWMULTISELECT; - } + if (multipleMode == JNI_TRUE) { + ofn.Flags |= OFN_ALLOWMULTISELECT; + } - // Save current directory, so we can reset if it changes. - currentDirectory = new TCHAR[MAX_PATH+1]; + // Save current directory, so we can reset if it changes. + currentDirectory = new TCHAR[MAX_PATH+1]; - VERIFY(::GetCurrentDirectory(MAX_PATH, currentDirectory) > 0); + VERIFY(::GetCurrentDirectory(MAX_PATH, currentDirectory) > 0); + } mode = env->GetIntField(target, AwtFileDialog::modeID); AwtDialog::CheckInstallModalHook(); - // show the Win32 file dialog - if (mode == java_awt_FileDialog_LOAD) { - result = ::GetOpenFileName(&ofn); + if (useCommonItemDialog) { + OLE_NEXT_TRY + GUID fileDialogMode = mode == java_awt_FileDialog_LOAD ? CLSID_FileOpenDialog : CLSID_FileSaveDialog; + OLE_HRT(pfd.CreateInstance(fileDialogMode)); + + jobject jbrDialog = env->GetObjectField(target, AwtFileDialog::jbrDialogID); + jint hints = env->GetIntField(jbrDialog, AwtFileDialog::hintsID); + bool folderPickerMode = hints & com_jetbrains_desktop_JBRFileDialog_SELECT_DIRECTORIES_HINT; + bool fileExclusivePickerMode = hints & com_jetbrains_desktop_JBRFileDialog_SELECT_FILES_HINT; + if (folderPickerMode && fileExclusivePickerMode) { + folderPickerMode = fileExclusivePickerMode = false; + } + data.ignoreCustomizations = folderPickerMode || fileExclusivePickerMode || mode == java_awt_FileDialog_SAVE; + data.fileDialog = pfd; + data.peer = peer; + SaveCommonDialogLocalizationData(env, jbrDialog, data); + OLE_HRT(CDialogEventHandler_CreateInstance(&data, IID_PPV_ARGS(&pfde))); + OLE_HRT(pfd->Advise(pfde, &dwCookie)); + + DWORD dwFlags; + OLE_HRT(pfd->GetOptions(&dwFlags)); + dwFlags |= FOS_FORCEFILESYSTEM; + if (multipleMode == JNI_TRUE) { + dwFlags |= FOS_ALLOWMULTISELECT; + } + if (folderPickerMode) { + dwFlags |= FOS_PICKFOLDERS; + } + OLE_HRT(pfd->SetOptions(dwFlags)); + + OLE_HRT(pfd->SetTitle(titleBuffer)); + + if (!folderPickerMode) { + OLE_HRT(pfd->SetFileTypes(s_fileFilterCount, s_fileFilterSpec)); + OLE_HRT(pfd->SetFileTypeIndex(1)); + } + + { + IShellItemPtr directoryItem; + OLE_TRY + OLE_HRT(CreateShellItem(const_cast(static_cast(directoryBuffer)), directoryItem)); + OLE_HRT(pfd->SetFolder(directoryItem)); + OLE_CATCH + } + + { + OLE_TRY + OLE_HRT(pfd->SetFileName(fileBuffer)); + OLE_CATCH + } + + OLE_CATCH + } + + if (useCommonItemDialog && SUCCEEDED(OLE_HR)) { + if (mode == java_awt_FileDialog_LOAD) { + result = SUCCEEDED(pfd->Show(hwndOwner)); + if (!result && data.forceUseContainerFolder && data.result) { + // If the dialog has "failed", but we're in the forceUseContainerFolder mode, then we're supposed to + // use the container set in data.result, so just proceed as if the dialog succeeded: + result = TRUE; + } + } else { + result = SUCCEEDED(pfd->Show(hwndOwner)); + if (result) { + OLE_NEXT_TRY + OLE_HRT(pfd->GetResult(&psiResult)); + CoTaskStringHolder filePath; + OLE_HRT(psiResult->GetDisplayName(SIGDN_FILESYSPATH, &filePath)); + size_t filePathLength = _tcslen(filePath); + data.resultSize = (UINT)filePathLength; + data.result.Attach(new TCHAR[filePathLength + 1]); + _tcscpy_s(data.result, filePathLength + 1, filePath); + OLE_CATCH + result = SUCCEEDED(OLE_HR); + } + } } else { - result = ::GetSaveFileName(&ofn); - } - // Fix for 4181310: FileDialog does not show up. - // If the dialog is not shown because of invalid file name - // replace the file name by empty string. - if (!result) { - dlgerr = ::CommDlgExtendedError(); - if (dlgerr == FNERR_INVALIDFILENAME) { - _tcscpy_s(fileBuffer, bufferLimit, TEXT("")); - if (mode == java_awt_FileDialog_LOAD) { - result = ::GetOpenFileName(&ofn); - } else { - result = ::GetSaveFileName(&ofn); + // show the Win32 file dialog + if (mode == java_awt_FileDialog_LOAD) { + result = ::GetOpenFileName(&ofn); + } else { + result = ::GetSaveFileName(&ofn); + } + // Fix for 4181310: FileDialog does not show up. + // If the dialog is not shown because of invalid file name + // replace the file name by empty string. + if (!result) { + dlgerr = ::CommDlgExtendedError(); + if (dlgerr == FNERR_INVALIDFILENAME) { + _tcscpy_s(fileBuffer, bufferLimit, TEXT("")); + if (mode == java_awt_FileDialog_LOAD) { + result = ::GetOpenFileName(&ofn); + } else { + result = ::GetSaveFileName(&ofn); + } } } } @@ -376,19 +1014,31 @@ AwtFileDialog::Show(void *p) AwtDialog::ModalActivateNextWindow(NULL, target, peer); - VERIFY(::SetCurrentDirectory(currentDirectory)); + if (!useCommonItemDialog) { + VERIFY(::SetCurrentDirectory(currentDirectory)); + } // Report result to peer. if (result) { - jint length = multipleMode - ? (jint)GetBufferLength(ofn.lpstrFile, ofn.nMaxFile) - : (jint)_tcslen(ofn.lpstrFile); + jint length; + if (useCommonItemDialog) { + length = (jint) GetBufferLength(data.result, data.resultSize); + } else { + length = multipleMode + ? (jint) GetBufferLength(ofn.lpstrFile, ofn.nMaxFile) + : (jint) _tcslen(ofn.lpstrFile); + } + jcharArray jnames = env->NewCharArray(length); if (jnames == NULL) { throw std::bad_alloc(); } - env->SetCharArrayRegion(jnames, 0, length, (jchar*)ofn.lpstrFile); + if (useCommonItemDialog) { + env->SetCharArrayRegion(jnames, 0, length, (jchar *) (LPTSTR) data.result); + } else { + env->SetCharArrayRegion(jnames, 0, length, (jchar *) ofn.lpstrFile); + } env->CallVoidMethod(peer, AwtFileDialog::handleSelectedMID, jnames); env->DeleteLocalRef(jnames); } else { @@ -397,6 +1047,12 @@ AwtFileDialog::Show(void *p) DASSERT(!safe_ExceptionOccurred(env)); } catch (...) { + if (useCommonItemDialog) { + if (pfd && dwCookie != OLE_BAD_COOKIE) { + pfd->Unadvise(dwCookie); + } + } + env->DeleteLocalRef(target); env->DeleteLocalRef(parent); env->DeleteLocalRef(title); @@ -406,11 +1062,18 @@ AwtFileDialog::Show(void *p) env->DeleteGlobalRef(peer); delete[] currentDirectory; - if (ofn.lpstrFile) - delete[] ofn.lpstrFile; + /* ofn.lpstrFile may have not been set if useCommonItemDialog == true, + * so use fileBuffer instead */ + delete[] fileBuffer; throw; } + if (useCommonItemDialog) { + if (pfd && dwCookie != OLE_BAD_COOKIE) { + pfd->Unadvise(dwCookie); + } + } + env->DeleteLocalRef(target); env->DeleteLocalRef(parent); env->DeleteLocalRef(title); @@ -420,8 +1083,9 @@ AwtFileDialog::Show(void *p) env->DeleteGlobalRef(peer); delete[] currentDirectory; - if (ofn.lpstrFile) - delete[] ofn.lpstrFile; + /* ofn.lpstrFile may have not been set if useCommonItemDialog == true, + * so use fileBuffer instead */ + delete[] fileBuffer; } BOOL AwtFileDialog::InheritsNativeMouseWheelBehavior() {return true;} @@ -546,6 +1210,29 @@ Java_sun_awt_windows_WFileDialogPeer_initIDs(JNIEnv *env, jclass cls) env->GetFieldID(cls, "filter", "Ljava/io/FilenameFilter;"); DASSERT(AwtFileDialog::filterID != NULL); + AwtFileDialog::jbrDialogID = + env->GetFieldID(cls, "jbrDialog", "Lcom/jetbrains/desktop/JBRFileDialog;"); + DASSERT(AwtFileDialog::jbrDialogID != NULL); + CHECK_NULL(AwtFileDialog::jbrDialogID); + + /* com.jetbrains.desktop.JBRFileDialog fields */ + cls = env->FindClass("com/jetbrains/desktop/JBRFileDialog"); + CHECK_NULL(cls); + + AwtFileDialog::openButtonTextID = + env->GetFieldID(cls, "openButtonText", "Ljava/lang/String;"); + DASSERT(AwtFileDialog::openButtonTextID != NULL); + CHECK_NULL(AwtFileDialog::openButtonTextID); + + AwtFileDialog::selectFolderButtonTextID = + env->GetFieldID(cls, "selectFolderButtonText", "Ljava/lang/String;"); + DASSERT(AwtFileDialog::selectFolderButtonTextID != NULL); + CHECK_NULL(AwtFileDialog::selectFolderButtonTextID); + + AwtFileDialog::hintsID = env->GetFieldID(cls, "hints", "I"); + DASSERT(AwtFileDialog::hintsID != NULL); + CHECK_NULL(AwtFileDialog::hintsID); + CATCH_BAD_ALLOC; } diff --git a/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.h b/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.h index 53c3bde0035b..35d0b37d8cbc 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_FileDialog.h @@ -56,6 +56,12 @@ class AwtFileDialog { static jfieldID dirID; static jfieldID fileID; static jfieldID filterID; + static jfieldID jbrDialogID; + + /* com.jetbrains.desktop.JBRFileDialog field and method ids */ + static jfieldID openButtonTextID; + static jfieldID selectFolderButtonTextID; + static jfieldID hintsID; static void Initialize(JNIEnv *env, jstring filterDescription); static void Show(void *peer); diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Frame.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Frame.cpp index 9ca12aa58027..e8e3b839ea45 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Frame.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Frame.cpp @@ -30,10 +30,14 @@ #include "awt_IconCursor.h" #include "awt_Win32GraphicsDevice.h" #include "ComCtl32Util.h" +#include "shellapi.h" #include +#include +#include #include +#include #include #include @@ -91,6 +95,35 @@ struct BlockedThreadStruct { static bool SetFocusToPluginControl(HWND hwndPlugin); +struct WmMouseMessage { + UINT flags, mouseUp, mouseDown; +}; +static WmMouseMessage MouseButtonToWm(int button) { + button &= ~DBL_CLICK; // Delete double click modifier + WmMouseMessage msg {AwtComponent::GetButtonMK(button), 0, 0}; + switch (button) { + case LEFT_BUTTON: + msg.mouseDown = WM_LBUTTONDOWN; + msg.mouseUp = WM_LBUTTONUP; + break; + case MIDDLE_BUTTON: + msg.mouseDown = WM_MBUTTONDOWN; + msg.mouseUp = WM_MBUTTONUP; + break; + case RIGHT_BUTTON: + msg.mouseDown = WM_RBUTTONDOWN; + msg.mouseUp = WM_RBUTTONUP; + break; + case X1_BUTTON: + case X2_BUTTON: + msg.mouseDown = WM_XBUTTONDOWN; + msg.mouseUp = WM_XBUTTONUP; + msg.flags = MAKEWPARAM(msg.flags, button == X1_BUTTON ? 1 : 2); + break; + } + return msg; +} + /************************************************************************ * AwtFrame fields */ @@ -128,6 +161,9 @@ AwtFrame::AwtFrame() { isInManualMoveOrSize = FALSE; grabbedHitTest = 0; + customTitleBarHeight = -1.0f; // Negative means uninitialized + customTitleBarTouchDragPosition = (LPARAM) -1; + customTitleBarControls = NULL; } AwtFrame::~AwtFrame() @@ -136,6 +172,10 @@ AwtFrame::~AwtFrame() void AwtFrame::Dispose() { + if (customTitleBarControls) { + delete customTitleBarControls; + customTitleBarControls = NULL; + } AwtWindow::Dispose(); } @@ -336,6 +376,7 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent) self); frame->RecalcNonClient(); } + CustomTitleBarControls::Refresh(frame->customTitleBarControls, frame->GetHWnd(), target, env); } } catch (...) { env->DeleteLocalRef(target); @@ -374,6 +415,11 @@ LRESULT AwtFrame::ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, Ms AwtComponent *focusOwner = NULL; AwtComponent *imeTargetComponent = NULL; + if (customTitleBarControls) { + if (message == WM_NCMOUSELEAVE) customTitleBarControls->Hit(CustomTitleBarControls::HitType::RESET, 0, 0); + if (message == WM_DWMCOLORIZATIONCOLORCHANGED || message == WM_THEMECHANGED) customTitleBarControls->Update(); + } + // IME and input language related messages need to be sent to a window // which has the Java input focus switch (message) { @@ -570,6 +616,48 @@ MsgRouting AwtFrame::WmMouseMove(UINT flags, int x, int y) { } MsgRouting AwtFrame::WmNcMouseUp(WPARAM hitTest, int x, int y, int button) { + customTitleBarTouchDragPosition = (LPARAM) -1; + if (IsTitleBarHitTest(hitTest) && HasCustomTitleBar()) { + WmMouseMessage msg = MouseButtonToWm(button); + if (IsMouseEventFromTouch()) { + if (button & LEFT_BUTTON) { + // We didn't send MouseDown event in NcMouseDown, so send it here. + if (customTitleBarControls) { + customTitleBarControls->Hit(CustomTitleBarControls::HitType::PRESS, x, y); + } + msg.flags |= MK_NOCAPTURE; + SendMessageAtPoint(msg.mouseDown, msg.flags, x, y); + } else { + // We shouldn't get there, but just in case... + // We have already sent MouseDown and MouseUp events in NcMouseDown, so nothing to do here. + return mrConsume; + } + } + SendMessageAtPoint(msg.mouseUp, msg.flags, x, y); + if (button == LEFT_BUTTON) { + if (customTitleBarControls) { + LRESULT ht = customTitleBarControls->Hit(CustomTitleBarControls::HitType::RELEASE, x, y); + if (ht != hitTest) hitTest = HTNOWHERE; + } + HWND hwnd = GetHWnd(); + switch (hitTest) { + case HTCLOSE: + ::SendMessage(hwnd, WM_CLOSE, 0, 0); + break; + case HTMINBUTTON: + if (GetStyle() & WS_MINIMIZEBOX) { + ::ShowWindow(hwnd, SW_SHOWMINIMIZED); + } + break; + case HTMAXBUTTON: + if (GetStyle() & WS_MAXIMIZEBOX) { + ::ShowWindow(hwnd, ::IsZoomed(hwnd) ? SW_SHOWNORMAL : SW_SHOWMAXIMIZED); + } + break; + } + } + return mrConsume; + } if (!IsFocusableWindow() && (button & LEFT_BUTTON)) { /* * Fix for 6399659. @@ -618,6 +706,46 @@ MsgRouting AwtFrame::WmNcMouseDown(WPARAM hitTest, int x, int y, int button) { if (m_grabbedWindow != NULL/* && !m_grabbedWindow->IsOneOfOwnersOf(this)*/) { m_grabbedWindow->Ungrab(); } + customTitleBarTouchDragPosition = (LPARAM) -1; + if (IsTitleBarHitTest(hitTest) && HasCustomTitleBar()) { + // When double-clicking title bar of native Windows apps, they respond to second mouse press, not release + const int LEFT_DBLCLCK = LEFT_BUTTON | DBL_CLICK; + BOOL maximize = (button & LEFT_DBLCLCK) == LEFT_DBLCLCK && IsResizable(); + BOOL lpress = button == LEFT_BUTTON; + WmMouseMessage msg = MouseButtonToWm(button); + if (IsMouseEventFromTouch()) { + msg.flags |= MK_NOCAPTURE; + if (button & LEFT_BUTTON) { + // Don't send mouse down events for left button touch for now, wait for NcMouseUp. + // In case of window drag we will not receive a NcMouseUp. + if (maximize) return AreCustomTitleBarNativeActionsAllowed() ? mrDoDefault : mrConsume; + if (lpress) { + customTitleBarTouchDragPosition = MAKELPARAM(x, y); + // Reset hit test query, we will check it in NcMouseMove + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = GetTarget(env); + if (target) { + env->SetIntField(target, AwtWindow::customTitleBarHitTestQueryID, java_awt_Window_CustomTitleBar_HIT_UNDEFINED); + env->DeleteLocalRef(target); + } + } + } else { + // For all buttons except left originated from touch, only NcMouseDown is sent, so treat this as click. + SendMessageAtPoint(msg.mouseDown, msg.flags, x, y); + SendMessageAtPoint(msg.mouseUp, msg.flags, x, y); + } + return mrConsume; + } + if (customTitleBarControls) { + LRESULT ht = customTitleBarControls->Hit(CustomTitleBarControls::HitType::PRESS, x, y); + if (ht != HTNOWHERE) hitTest = ht; + } + BOOL defaultControl = lpress && hitTest != HTCAPTION; // Press on min/max/close button + BOOL defaultAction = (maximize || lpress) && AreCustomTitleBarNativeActionsAllowed() && !defaultControl; + if (defaultAction || defaultControl) msg.flags |= MK_NOCAPTURE; + SendMessageAtPoint(msg.mouseDown, msg.flags, x, y); + return defaultAction ? mrDoDefault : mrConsume; + } if (!IsFocusableWindow() && (button & LEFT_BUTTON)) { switch (hitTest) { case HTTOP: @@ -649,6 +777,30 @@ MsgRouting AwtFrame::WmNcMouseDown(WPARAM hitTest, int x, int y, int button) { return AwtWindow::WmNcMouseDown(hitTest, x, y, button); } +MsgRouting AwtFrame::WmNcMouseMove(WPARAM hitTest, int x, int y) { + if (customTitleBarControls) customTitleBarControls->Hit(CustomTitleBarControls::HitType::MOVE, x, y); + if (IsTitleBarHitTest(hitTest) && HasCustomTitleBar()) { + if (customTitleBarTouchDragPosition != (LPARAM) -1 && IsMouseEventFromTouch()) { + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = GetTarget(env); + if (target) { + switch (env->GetIntField(target, AwtWindow::customTitleBarHitTestQueryID)) { + case java_awt_Window_CustomTitleBar_HIT_UNDEFINED: break; // Hit test query is not ready yet, skip. + case java_awt_Window_CustomTitleBar_HIT_TITLEBAR: // Apply drag behavior + if (hitTest != HTCAPTION) break; // Native hit test didn't update yet, skip. + DefWindowProc(WM_NCLBUTTONDOWN, hitTest, customTitleBarTouchDragPosition); + default: // Reset drag-by-touch flag + customTitleBarTouchDragPosition = (LPARAM) -1; + } + env->DeleteLocalRef(target); + } + } + SendMessageAtPoint(WM_MOUSEMOVE, 0, x, y); + return mrConsume; + } + return AwtWindow::WmNcMouseMove(hitTest, x, y); +} + // Override AwtWindow::Reshape() to handle minimized/maximized // frames (see 6525850, 4065534) void AwtFrame::Reshape(int x, int y, int w, int h) @@ -909,6 +1061,7 @@ MsgRouting AwtFrame::WmWindowPosChanging(LPARAM windowPos) { MsgRouting AwtFrame::WmSize(UINT type, int w, int h) { + if (customTitleBarControls) customTitleBarControls->Update(); currentWmSizeState = type; if (currentWmSizeState == SIZE_MINIMIZED) { UpdateSecurityWarningVisibility(); @@ -981,6 +1134,11 @@ MsgRouting AwtFrame::WmSize(UINT type, int w, int h) MsgRouting AwtFrame::WmActivate(UINT nState, BOOL fMinimized, HWND opposite) { + if (customTitleBarControls) { + customTitleBarControls->Update(nState == WA_INACTIVE ? + CustomTitleBarControls::State::INACTIVE : + CustomTitleBarControls::State::NORMAL); + } jint type; if (nState != WA_INACTIVE) { @@ -1185,6 +1343,20 @@ MsgRouting AwtFrame::WmGetIcon(WPARAM iconType, LRESULT& retVal) } } +void _UpdateIcon(void* p) { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + jobject self = reinterpret_cast(p); + PDATA pData; + AwtFrame* frame; + JNI_CHECK_PEER_GOTO(self, ret); + + frame = (AwtFrame*)pData; + frame->DoUpdateIcon(); +ret: + env->DeleteGlobalRef(self); +} + void AwtFrame::DoUpdateIcon() { //Workaround windows bug: @@ -1201,7 +1373,7 @@ HICON AwtFrame::GetEffectiveIcon(int iconType) BOOL smallIcon = ((iconType == ICON_SMALL) || (iconType == 2/*ICON_SMALL2*/)); HICON hIcon = (smallIcon) ? GetHIconSm() : GetHIcon(); if (hIcon == NULL) { - hIcon = (smallIcon) ? AwtToolkit::GetInstance().GetAwtIconSm() : + hIcon = (smallIcon) ? AwtToolkit::GetInstance().GetAwtIconSm(reinterpret_cast(this)) : AwtToolkit::GetInstance().GetAwtIcon(); } return hIcon; @@ -1474,6 +1646,10 @@ void AwtFrame::_SetMaximizedBounds(void *param) if (::IsWindow(f->GetHWnd())) { DASSERT(!::IsBadReadPtr(f, sizeof(AwtFrame))); + x = f->ScaleUpAbsX(x); + y = f->ScaleUpAbsY(y); + width = f->ScaleUpX(width); + height = f->ScaleUpY(height); f->SetMaximizedBounds(x, y, width, height); } ret: @@ -1692,6 +1868,226 @@ void AwtFrame::_NotifyModalBlocked(void *param) delete nmbs; } +// {start} Custom title bar support + +BOOL AwtFrame::HasCustomTitleBar() { + float h = customTitleBarHeight; + if (h < 0.0f) h = GetCustomTitleBarHeight(); + return h > 0.0f; +} + +float AwtFrame::GetCustomTitleBarHeight() { + float h = customTitleBarHeight; + if (h < 0.0f) { + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = GetTarget(env); + if (target) { + h = env->CallFloatMethod(target, AwtWindow::internalCustomTitleBarHeightMID); + env->DeleteLocalRef(target); + } + if (h < 0.0f) h = 0.0f; + customTitleBarHeight = h; + } + // Copied from AwtComponent::ScaleUpY, but without rounding + int screen = GetScreenImOn(); + Devices::InstanceAccess devices; + AwtWin32GraphicsDevice* device = devices->GetDevice(screen); + return device == NULL ? h : h * device->GetScaleY(); +} + +jint AwtFrame::GetCustomTitleBarHitTest() { + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = GetTarget(env); + jint result = java_awt_Window_CustomTitleBar_HIT_UNDEFINED; + if (target) { + result = env->GetIntField(target, AwtWindow::customTitleBarHitTestID); + env->DeleteLocalRef(target); + } + return result; +} + +BOOL AwtFrame::AreCustomTitleBarNativeActionsAllowed() { + return GetCustomTitleBarHitTest() <= java_awt_Window_CustomTitleBar_HIT_TITLEBAR; +} + +void AwtFrame::SendMessageAtPoint(UINT msg, WPARAM wparam, int ncx, int ncy) { + HWND w = GetHWnd(); + POINT p = ScreenToBottommostChild(w, ncx, ncy); + ::SetMessageExtraInfo((LPARAM) 0); // Extra info may contain MOUSEEVENTF_FROMTOUCH, clear it. + ::SendMessage(w, msg, wparam, MAKELPARAM(p.x, p.y)); +} + +// Returns frame border insets (without title bar). +// Note that in non-maximized state there's 0px between top of the frame and top of the client area. +// This method, however, still returns non-zero top inset in that case - it represents height of the resize border. +RECT AwtFrame::GetSysInsets() { + // GetSystemMetricsForDpi gives incorrect values, use AdjustWindowRectExForDpi for border metrics instead + HWND hwnd = GetHWnd(); + LONG style = GetStyle(), exStyle = GetStyleEx(); + style &= ~WS_CAPTION | WS_BORDER; // Remove caption but leave border + UINT dpi = AwtToolkit::GetDpiForWindow(hwnd); + RECT rect = {}; + AwtToolkit::AdjustWindowRectExForDpi(&rect, style, FALSE, exStyle, dpi); + RECT insets; + ::SetRect(&insets, -rect.left, -rect.top, rect.right, rect.bottom); + return insets; +} + +LRESULT AwtFrame::HitTestNCA(int x, int y) { + RECT rcWindow; + HWND hwnd = GetHWnd(); + + RECT insets = GetSysInsets(); + GetWindowRect(hwnd, &rcWindow); + + float titleBarHeight = GetCustomTitleBarHeight(); + if (::IsZoomed(hwnd)) titleBarHeight += insets.top; + + USHORT uRow = 1; + USHORT uCol = 1; + LRESULT captionVariant; + + if (y >= rcWindow.top && y < rcWindow.top + titleBarHeight) + { + if (y < rcWindow.top + insets.top) { + captionVariant = HTTOP; + } else { + captionVariant = HTNOWHERE; + if (customTitleBarControls) { + captionVariant = customTitleBarControls->Hit(CustomTitleBarControls::HitType::TEST, x, y); + } + if (captionVariant == HTNOWHERE) { + switch (GetCustomTitleBarHitTest()) { + case java_awt_Window_CustomTitleBar_HIT_MINIMIZE_BUTTON: captionVariant = HTMINBUTTON; break; + case java_awt_Window_CustomTitleBar_HIT_MAXIMIZE_BUTTON: captionVariant = HTMAXBUTTON; break; + case java_awt_Window_CustomTitleBar_HIT_CLOSE_BUTTON: captionVariant = HTCLOSE; break; + default: captionVariant = HTCAPTION; break; + } + } + } + uRow = 0; + } else if (y < rcWindow.bottom && + y >= rcWindow.bottom - insets.bottom) { + uRow = 2; + } + + if (x >= rcWindow.left && + x < rcWindow.left + insets.left) + { + uCol = 0; + } else if (x < rcWindow.right && + x >= rcWindow.right - insets.right) + { + uCol = 2; + } + + LRESULT hitTests[3][3] = { + {HTTOPLEFT, captionVariant, HTTOPRIGHT}, + {HTLEFT, HTNOWHERE, HTRIGHT}, + {HTBOTTOMLEFT, HTBOTTOM, HTBOTTOMRIGHT}, + }; + + return hitTests[uRow][uCol]; +} + +MsgRouting AwtFrame::WmNcCalcSize(BOOL wParam, LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal) +{ + if (!wParam || !HasCustomTitleBar()) { + return AwtWindow::WmNcCalcSize(wParam, lpncsp, retVal); + } + + RECT* rect = &lpncsp->rgrc[0]; + LONG frameTop = rect->top; + DefWindowProc(WM_NCCALCSIZE, (WPARAM) wParam, (LPARAM) lpncsp); + rect->top = frameTop; // DefWindowProc takes into account caption height, revert this + + if (::IsZoomed(GetHWnd())) { + rect->top += GetSysInsets().top; // We need to add top inset in maximized case + // [moklev] Workaround for RIDER-27069, IDEA-211327 + if (!this->IsUndecorated()) { + APPBARDATA abData; + abData.uEdge = 0; + abData.cbSize = sizeof(abData); + if (::SHAppBarMessage(ABM_GETSTATE, &abData) == ABS_AUTOHIDE && + ::SHAppBarMessage(ABM_GETTASKBARPOS, &abData)) + { + // [tav] leave one pixel for autohide taskbar + switch (abData.uEdge) { + case ABE_TOP: + rect->top += 1; + break; + case ABE_LEFT: + rect->left += 1; + break; + case ABE_BOTTOM: + rect->bottom -= 1; + break; + case ABE_RIGHT: + rect->right -= 1; + break; + } + } + } + } + retVal = 0L; + return mrConsume; +} + +MsgRouting AwtFrame::WmNcHitTest(int x, int y, LRESULT& retVal) +{ + if (!HasCustomTitleBar()) { + return AwtWindow::WmNcHitTest(x, y, retVal); + } + if (::IsWindow(GetModalBlocker(GetHWnd()))) { + retVal = HTCLIENT; + return mrConsume; + } + retVal = HitTestNCA(x, y); + return retVal == HTNOWHERE ? mrDoDefault : mrConsume; +} + +void AwtFrame::RedrawNonClient() +{ + UINT flags = SwpFrameChangeFlags; + if (!HasCustomTitleBar()) { + // With custom title bar enabled, SetWindowPos call below can cause WM_SIZE message being sent. + // If we're coming here from WFramePeer.initialize (as part of 'setResizable' call), + // WM_SIZE message processing can happen concurrently with window flags update done as part of + // 'setState' call), and lead to inconsistent state. + // So, we disable asynchronous processing in case we have custom title bar to avoid the race condition. + flags |= SWP_ASYNCWINDOWPOS; + } + ::SetWindowPos(GetHWnd(), (HWND) NULL, 0, 0, 0, 0, flags); +} + +void AwtFrame::_UpdateCustomTitleBar(void* p) { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + jobject self = reinterpret_cast(p); + PDATA pData; + AwtFrame* frame; + BOOL old; + jobject target; + JNI_CHECK_PEER_GOTO(self, ret); + + frame = (AwtFrame*)pData; + old = frame->HasCustomTitleBar(); + frame->customTitleBarHeight = -1.0f; // Reset to uninitialized + if (frame->HasCustomTitleBar() != old) frame->RedrawNonClient(); + target = frame->GetTarget(env); + CustomTitleBarControls::Refresh(frame->customTitleBarControls, frame->GetHWnd(), target, env); + env->DeleteLocalRef(target); + ret: + env->DeleteGlobalRef(self); +} + +// {end} Custom title bar support + +UINT AwtFrame::GetCurrentWmSizeType() +{ + return isZoomed() ? SIZE_MAXIMIZED : SIZENORMAL; +} + /************************************************************************ * WFramePeer native methods */ @@ -2012,6 +2408,28 @@ Java_sun_awt_windows_WFramePeer_synthesizeWmActivate(JNIEnv *env, jobject self, CATCH_BAD_ALLOC; } +JNIEXPORT void JNICALL +Java_sun_awt_windows_WFramePeer_updateIcon(JNIEnv *env, jobject self) +{ + TRY; + + AwtToolkit::GetInstance().InvokeFunction(_UpdateIcon, env->NewGlobalRef(self)); + // global ref is deleted in _UpdateIcon() + + CATCH_BAD_ALLOC; +} + +JNIEXPORT void JNICALL +Java_sun_awt_windows_WFramePeer_updateCustomTitleBar(JNIEnv *env, jclass cls, jobject peer) +{ + TRY; + + AwtToolkit::GetInstance().InvokeFunction(AwtFrame::_UpdateCustomTitleBar, env->NewGlobalRef(peer)); + // global ref is deleted in _UpdateCustomTitleBar() + + CATCH_BAD_ALLOC; +} + } /* extern "C" */ static bool SetFocusToPluginControl(HWND hwndPlugin) diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Frame.h b/src/java.desktop/windows/native/libawt/windows/awt_Frame.h index 8b70720448ae..996806d9d810 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Frame.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Frame.h @@ -29,6 +29,7 @@ #include "awt_Window.h" #include "awt_MenuBar.h" //add for multifont #include "awt_Toolkit.h" +#include "jbr_CustomTitleBarControls.h" #include "Hashtable.h" #include "java_awt_Frame.h" @@ -111,9 +112,12 @@ class AwtFrame : public AwtWindow { MsgRouting WmMouseMove(UINT flags, int x, int y); MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); MsgRouting WmNcMouseUp(WPARAM hitTest, int x, int y, int button); + MsgRouting WmNcMouseMove(WPARAM hitTest, int x, int y); MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal); MsgRouting WmShowWindow(BOOL show, UINT status); MsgRouting WmWindowPosChanging(LPARAM windowPos); + MsgRouting WmNcCalcSize(BOOL fCalcValidRects, LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal); + MsgRouting WmNcHitTest(int x, int y, LRESULT& retVal); virtual MsgRouting WmSysCommand(UINT uCmdType, int xPos, int yPos); @@ -145,6 +149,7 @@ class AwtFrame : public AwtWindow { static void _SetIMMOption(void *param); static void _SynthesizeWmActivate(void *param); static void _NotifyModalBlocked(void *param); + static void _UpdateCustomTitleBar(void *param); virtual void Reshape(int x, int y, int width, int height); @@ -156,10 +161,18 @@ class AwtFrame : public AwtWindow { INLINE HWND GetImeTargetComponent() { return m_imeTargetComponent; } INLINE void SetImeTargetComponent(HWND hwnd) { m_imeTargetComponent = hwnd; } + void RedrawNonClient(); + BOOL HasCustomTitleBar(); + static inline BOOL IsTitleBarHitTest(UINT_PTR hitTest) { + return hitTest == HTCAPTION || hitTest == HTMINBUTTON || hitTest == HTMAXBUTTON || hitTest == HTCLOSE; + } + protected: /* The frame is undecorated. */ BOOL m_isUndecorated; + CustomTitleBarControls* customTitleBarControls; + private: LRESULT ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, MsgRouting &mr); @@ -219,6 +232,18 @@ class AwtFrame : public AwtWindow { WPARAM grabbedHitTest; POINT savedMousePos; + float customTitleBarHeight; + LPARAM customTitleBarTouchDragPosition; + + float GetCustomTitleBarHeight(); + jint GetCustomTitleBarHitTest(); + BOOL AreCustomTitleBarNativeActionsAllowed(); + void SendMessageAtPoint(UINT msg, WPARAM w, int x, int y); + RECT GetSysInsets(); + LRESULT HitTestNCA(int x, int y); + + virtual UINT GetCurrentWmSizeType(); + /* * Hashtable - a table that contains all the * information about non-toolkit threads with modal blocked embedded diff --git a/src/java.desktop/windows/native/libawt/windows/awt_InputMethod.cpp b/src/java.desktop/windows/native/libawt/windows/awt_InputMethod.cpp index fcc6e4c2cb87..a9fb919ffcb7 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_InputMethod.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_InputMethod.cpp @@ -44,8 +44,6 @@ extern "C" { jobject CreateLocaleObject(JNIEnv *env, const char * name); HKL getDefaultKeyboardLayout(); -extern BOOL g_bUserHasChangedInputLang; - /* * Class: sun_awt_windows_WInputMethod * Method: createNativeContext @@ -292,10 +290,6 @@ JNIEXPORT jobject JNICALL Java_sun_awt_windows_WInputMethod_getNativeLocale const char * javaLocaleName = getJavaIDFromLangID(AwtComponent::GetInputLanguage()); if (javaLocaleName != NULL) { - // Now WInputMethod.currentLocale and AwtComponent::m_idLang are get sync'ed, - // so we can reset this flag. - g_bUserHasChangedInputLang = FALSE; - jobject ret = CreateLocaleObject(env, javaLocaleName); free((void *)javaLocaleName); return ret; @@ -309,10 +303,10 @@ JNIEXPORT jobject JNICALL Java_sun_awt_windows_WInputMethod_getNativeLocale /* * Class: sun_awt_windows_WInputMethod * Method: setNativeLocale - * Signature: (Ljava/lang/String;Z)Z + * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WInputMethod_setNativeLocale - (JNIEnv *env, jclass cls, jstring localeString, jboolean onActivate) + (JNIEnv *env, jclass cls, jstring localeString) { TRY; @@ -353,7 +347,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WInputMethod_setNativeLocale if (supported != NULL) { if (strcmp(supported, requested) == 0) { // use special message to call ActivateKeyboardLayout() in main thread. - if (AwtToolkit::GetInstance().SendMessage(WM_AWT_ACTIVATEKEYBOARDLAYOUT, (WPARAM)onActivate, (LPARAM)hKLList[i])) { + if (AwtToolkit::GetInstance().SendMessage(WM_AWT_ACTIVATEKEYBOARDLAYOUT, 0, (LPARAM)hKLList[i])) { //also need to change the same keyboard layout for the Java AWT-EventQueue thread AwtToolkit::activateKeyboardLayout(hKLList[i]); retValue = JNI_TRUE; @@ -413,7 +407,7 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WInputMethod_setStatusWindowVisible * Signature: (Lsun/awt/windows/WComponentPeer;II)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WInputMethod_openCandidateWindow - (JNIEnv *env, jobject self, jobject peer, jint x, jint y) + (JNIEnv *env, jobject self, jobject peer, jint caretLeftX, jint caretTopY, jint caretRightX, jint caretBottomY) { TRY; @@ -421,19 +415,26 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WInputMethod_openCandidateWindow JNI_CHECK_PEER_RETURN(peer); jobject peerGlobalRef = env->NewGlobalRef(peer); + if (peerGlobalRef == nullptr) { + return; + } - // WARNING! MAKELONG macro treats the given values as unsigned. - // This may lead to some bugs in multiscreen configurations, as - // coordinates can be negative numbers. So, while handling - // WM_AWT_OPENCANDIDATEWINDOW message in AwtToolkit, we should - // carefully extract right x and y values using GET_X_LPARAM and - // GET_Y_LPARAM, not LOWORD and HIWORD - // See CR 4805862, AwtToolkit::WndProc - - // use special message to open candidate window in main thread. - AwtToolkit::GetInstance().InvokeInputMethodFunction(WM_AWT_OPENCANDIDATEWINDOW, - (WPARAM)peerGlobalRef, MAKELONG(x, y)); - // global ref is deleted in message handler + // it'd be better to replace the static_cast with a placement new, but it's broken + // in debug builds because the "new" expression is redefined as a macro + ::RECT* const caretRect = static_cast<::RECT*>( safe_Malloc(sizeof(::RECT)) ); + // safe_Malloc throws an std::bad_alloc if fails, so we don't need to add a nullptr check here + *caretRect = ::RECT{ caretLeftX, caretTopY, caretRightX, caretBottomY }; + + // use a special message to open a candidate window in main thread. + static_assert( sizeof(peerGlobalRef) <= sizeof(WPARAM), "peerGlobalRef may not fit into WPARAM type" ); + static_assert( sizeof(caretRect) <= sizeof(LPARAM), "caretRect may not fit into LPARAM type" ); + AwtToolkit::GetInstance().InvokeInputMethodFunction( + WM_AWT_OPENCANDIDATEWINDOW, + reinterpret_cast(peerGlobalRef), + reinterpret_cast(caretRect) + ); + + // peerGlobalRef and caretRect are deleted in the message handler (AwtToolkit::WndProc) CATCH_BAD_ALLOC; } diff --git a/src/java.desktop/windows/native/libawt/windows/awt_List.cpp b/src/java.desktop/windows/native/libawt/windows/awt_List.cpp index 7ffbb5c6a852..973442e030be 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_List.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_List.cpp @@ -404,7 +404,7 @@ AwtList::OwnerMeasureItem(UINT /*ctrlId*/, MEASUREITEMSTRUCT& measureInfo) } MsgRouting -AwtList::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) +AwtList::WmNcHitTest(int x, int y, LRESULT& retVal) { if (::IsWindow(AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(GetHWnd())))) { retVal = HTCLIENT; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_List.h b/src/java.desktop/windows/native/libawt/windows/awt_List.h index 3450089b5091..69c97a520cc0 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_List.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_List.h @@ -110,7 +110,7 @@ class AwtList : public AwtComponent { /* * Windows message handler functions */ - MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); + MsgRouting WmNcHitTest(int x, int y, LRESULT& retVal); MsgRouting WmMouseDown(UINT flags, int x, int y, int button); MsgRouting WmMouseUp(UINT flags, int x, int y, int button); MsgRouting WmNotify(UINT notifyCode); diff --git a/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.cpp b/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.cpp index 0bfba78c0905..347f8d8fedc4 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.cpp @@ -359,7 +359,7 @@ void AwtScrollPane::PostScrollEvent(int orient, int scrollCode, int pos) { } MsgRouting -AwtScrollPane::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) +AwtScrollPane::WmNcHitTest(int x, int y, LRESULT& retVal) { if (::IsWindow(AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(GetHWnd())))) { retVal = HTCLIENT; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.h b/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.h index 129b0e12cd8c..203ef348d553 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_ScrollPane.h @@ -75,7 +75,7 @@ class AwtScrollPane : public AwtCanvas { /* * Windows message handler functions */ - virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); + virtual MsgRouting WmNcHitTest(int x, int y, LRESULT& retVal); virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar); virtual MsgRouting WmVScroll(UINT scrollCode, UINT pos, HWND hScrollBar); diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.cpp index f13677cfbed5..e59fce9cb387 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.cpp @@ -223,7 +223,7 @@ AwtScrollbar::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) } MsgRouting -AwtScrollbar::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) +AwtScrollbar::WmNcHitTest(int x, int y, LRESULT& retVal) { if (::IsWindow(AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(GetHWnd())))) { retVal = HTCLIENT; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.h b/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.h index 9369cab0e589..6db58abf8f3f 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Scrollbar.h @@ -71,7 +71,7 @@ class AwtScrollbar : public AwtComponent { // Prevent KB Q102552 race. virtual MsgRouting WmMouseDown(UINT flags, int x, int y, int button); - virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); + virtual MsgRouting WmNcHitTest(int x, int y, LRESULT& retVal); virtual MsgRouting HandleEvent(MSG *msg, BOOL synthetic); diff --git a/src/java.desktop/windows/native/libawt/windows/awt_TextArea.cpp b/src/java.desktop/windows/native/libawt/windows/awt_TextArea.cpp index 6dc21c5addae..0e71f0637b70 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_TextArea.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_TextArea.cpp @@ -138,7 +138,7 @@ AwtTextArea::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { } MsgRouting -AwtTextArea::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) +AwtTextArea::WmNcHitTest(int x, int y, LRESULT& retVal) { if (::IsWindow(AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(GetHWnd())))) { retVal = HTCLIENT; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_TextArea.h b/src/java.desktop/windows/native/libawt/windows/awt_TextArea.h index 1738e64b8edb..eba97e333023 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_TextArea.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_TextArea.h @@ -59,7 +59,7 @@ class AwtTextArea : public AwtTextComponent { LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); MsgRouting WmEnable(BOOL fEnabled); - MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT &retVal); + MsgRouting WmNcHitTest(int x, int y, LRESULT &retVal); MsgRouting HandleEvent(MSG *msg, BOOL synthetic); virtual BOOL InheritsNativeMouseWheelBehavior(); diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp index 5d7171addb45..aaddcf48bdd5 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp @@ -54,6 +54,8 @@ #include "debug_trace.h" #include "debug_mem.h" +#include "java_rc.h" + #include "ComCtl32Util.h" #include "DllUtil.h" @@ -69,7 +71,6 @@ extern void initScreens(JNIEnv *env); extern "C" void awt_dnd_initialize(); extern "C" void awt_dnd_uninitialize(); extern "C" void awt_clipboard_uninitialize(JNIEnv *env); -extern "C" BOOL g_bUserHasChangedInputLang; extern CriticalSection windowMoveLock; extern BOOL windowMoveLockHeld; @@ -139,6 +140,9 @@ extern "C" JNIEXPORT jboolean JNICALL AWTIsHeadless() { #define IDT_AWT_MOUSECHECK 0x101 +AdjustWindowRectExForDpiFunc* AwtToolkit::lpAdjustWindowRectExForDpi = NULL; +GetDpiForWindowFunc* AwtToolkit::lpGetDpiForWindow = NULL; + static LPCTSTR szAwtToolkitClassName = TEXT("SunAwtToolkit"); static const int MOUSE_BUTTONS_WINDOWS_SUPPORTED = 5; //three standard buttons + XBUTTON1 + XBUTTON2. @@ -663,6 +667,13 @@ BOOL AwtToolkit::Initialize() { awt_dnd_initialize(); + HMODULE hLibUser32Dll = JDK_LoadSystemLibrary("User32.dll"); + if (hLibUser32Dll != NULL) { + lpAdjustWindowRectExForDpi = (AdjustWindowRectExForDpiFunc*)GetProcAddress(hLibUser32Dll, "AdjustWindowRectExForDpi"); + lpGetDpiForWindow = (GetDpiForWindowFunc*)GetProcAddress(hLibUser32Dll, "GetDpiForWindow"); + ::FreeLibrary(hLibUser32Dll); + } + /* * Initialization of the touch keyboard related variables. */ @@ -683,6 +694,13 @@ BOOL AwtToolkit::Initialize() { tk.m_touchKbrdAutoShowIsEnabled = env->CallStaticBooleanMethod( sunToolkitCls, isTouchKeyboardAutoShowEnabledMID); + BOOL tracking = FALSE; + int result = 0; + result = ::SystemParametersInfo(SPI_GETACTIVEWINDOWTRACKING, 0, + &tracking, 0); + + tk.m_active_window_tracking_mode_enabled = (tracking && (result != 0)); + CATCH_BAD_ALLOC_RET(FALSE); if (tk.m_isWin8OrLater && tk.m_touchKbrdAutoShowIsEnabled) { @@ -787,6 +805,10 @@ BOOL AwtToolkit::IsDynamicLayoutSet() { return m_isDynamicLayoutSet; } +BOOL AwtToolkit::IsActiveWindowTrackingEnabled() { + return m_active_window_tracking_mode_enabled; +} + BOOL AwtToolkit::IsDynamicLayoutSupported() { // SPI_GETDRAGFULLWINDOWS is only supported on Win95 if // Windows Plus! is installed. Otherwise, box frame resize. @@ -890,6 +912,20 @@ void AwtToolkit::DestroyComponentHWND(HWND hwnd) void SpyWinMessage(HWND hwnd, UINT message, LPCTSTR szComment); #endif +static BOOL CALLBACK UpdateAllThreadWindowSizes(HWND hWnd, LPARAM) +{ + TRY; + AwtComponent *c = AwtComponent::GetComponent(hWnd); + if (c) { + RECT r; + GetWindowRect(hWnd, &r); + c->WmSize(SIZENORMAL, r.right-r.left, r.bottom-r.top); + c->Invalidate(NULL); + } + return TRUE; + CATCH_BAD_ALLOC_RET(FALSE); +} + /* * An AwtToolkit window is just a means of routing toolkit messages to here. */ @@ -984,6 +1020,14 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, } // Remove this define when we move to newer (XP) version of SDK. #define WM_THEMECHANGED 0x031A + +#ifndef WM_DWMCOMPOSITIONCHANGED +#define WM_DWMCOMPOSITIONCHANGED 0x031E +#define WM_DWMNCRENDERINGCHANGED 0x031F +#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320 +#define WM_DWMWINDOWMAXIMIZEDCHANGED 0x0321 +#endif // WM_DWMCOMPOSITIONCHANGED + case WM_DWMCOLORIZATIONCOLORCHANGED: case WM_THEMECHANGED: { /* Upcall to WToolkit when user changes configuration. * @@ -999,12 +1043,7 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, } return 0; } -#ifndef WM_DWMCOMPOSITIONCHANGED -#define WM_DWMCOMPOSITIONCHANGED 0x031E -#define WM_DWMNCRENDERINGCHANGED 0x031F -#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320 -#define WM_DWMWINDOWMAXIMIZEDCHANGED 0x0321 -#endif // WM_DWMCOMPOSITIONCHANGED + case WM_DWMCOMPOSITIONCHANGED: { DWMResetCompositionEnabled(); return 0; @@ -1185,14 +1224,6 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, return cmode; } case WM_AWT_ACTIVATEKEYBOARDLAYOUT: { - if (wParam && g_bUserHasChangedInputLang) { - // Input language has been changed since the last WInputMethod.getNativeLocale() - // call. So let's honor the user's selection. - // Note: we need to check this flag inside the toolkit thread to synchronize access - // to the flag. - return FALSE; - } - if (lParam == (LPARAM)::GetKeyboardLayout(0)) { // already active return FALSE; @@ -1209,16 +1240,33 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, return (LRESULT)activateKeyboardLayout((HKL)lParam); } case WM_AWT_OPENCANDIDATEWINDOW: { - jobject peerObject = (jobject)wParam; - AwtComponent* p = (AwtComponent*)JNI_GET_PDATA(peerObject); + jobject peerObject = reinterpret_cast(wParam); + AwtComponent* p = reinterpret_cast( JNI_GET_PDATA(peerObject) ); DASSERT( !IsBadReadPtr(p, sizeof(AwtObject))); - // fix for 4805862: use GET_X_LPARAM and GET_Y_LPARAM macros - // instead of LOWORD and HIWORD - p->OpenCandidateWindow(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); - env->DeleteGlobalRef(peerObject); + + ::RECT* caretRect = reinterpret_cast<::RECT*>(lParam); + DASSERT( !IsBadReadPtr(caretRect, sizeof(*caretRect)) ); + + if ( (p != nullptr) && (caretRect != nullptr) ) { + p->OpenCandidateWindow(caretRect->left, caretRect->top, caretRect->right, caretRect->bottom); + } + + // Cleaning up + if (caretRect != nullptr) { + free(caretRect); + caretRect = nullptr; + } + if (peerObject != nullptr) { + env->DeleteGlobalRef(peerObject); + peerObject = nullptr; + } + p = nullptr; + + // Returning to AwtToolkit::InvokeInputMethodFunction AwtToolkit& tk = AwtToolkit::GetInstance(); tk.m_inputMethodData = 0; ::SetEvent(tk.m_inputMethodWaitEvent); + return 0; } @@ -1254,6 +1302,7 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, case WM_DISPLAYCHANGE: { // Reinitialize screens initScreens(env); + ::EnumThreadWindows(MainThread(), (WNDENUMPROC)UpdateAllThreadWindowSizes, 0); // Notify Java side - call WToolkit.displayChanged() jclass clazz = env->FindClass("sun/awt/windows/WToolkit"); @@ -1268,8 +1317,10 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, } /* Session management */ case WM_QUERYENDSESSION: { - /* Shut down cleanly */ - if (!isSuddenTerminationEnabled) { + // Shut down cleanly + // If m_messageLoopResult is EXIT_ALL_ENCLOSING_LOOPS means that application is already in process a closing. + // No need to repeat such logic via WM_QUERYENDSESSION and WM_ENDSESSION. + if (!isSuddenTerminationEnabled || AwtToolkit::GetInstance().m_messageLoopResult == EXIT_ALL_ENCLOSING_LOOPS) { return FALSE; } if (JVM_RaiseSignal(SIGTERM)) { @@ -1725,6 +1776,8 @@ BOOL AwtToolkit::PreProcessMouseMsg(AwtComponent* p, MSG& msg) curPos.x = GET_X_LPARAM(dwCurPos); curPos.y = GET_Y_LPARAM(dwCurPos); HWND hWndFromPoint = ::WindowFromPoint(curPos); + // In case of custom title bar, WindowFromPoint will return root frame, so search further just in case + if (hWndFromPoint) ScreenToBottommostChild(hWndFromPoint, curPos.x, curPos.y); // hWndFromPoint == 0 if mouse is over a scrollbar AwtComponent* mouseComp = AwtComponent::GetComponent(hWndFromPoint); @@ -1888,10 +1941,12 @@ AwtObject* AwtToolkit::LookupCmdID(UINT id) HICON AwtToolkit::GetAwtIcon() { - return ::LoadIcon(GetModuleHandle(), TEXT("AWT_ICON")); + HICON hIcon = ::LoadIcon(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON)); + if (!hIcon) hIcon = ::LoadIcon(GetModuleHandle(), TEXT("AWT_ICON")); + return hIcon; } -HICON AwtToolkit::GetAwtIconSm() +HICON AwtToolkit::GetAwtIconSm(void* pAwtWindow) { static HICON defaultIconSm = NULL; static int prevSmx = 0; @@ -1900,9 +1955,22 @@ HICON AwtToolkit::GetAwtIconSm() int smx = GetSystemMetrics(SM_CXSMICON); int smy = GetSystemMetrics(SM_CYSMICON); + if (AwtWin32GraphicsDevice::IsUiScaleEnabled() && pAwtWindow != NULL) { + AwtWindow *wnd = reinterpret_cast(pAwtWindow); + Devices::InstanceAccess devices; + AwtWin32GraphicsDevice* device = devices->GetDevice(AwtWin32GraphicsDevice::DeviceIndexForWindow(wnd->GetHWnd())); + if (device) { + smx = 16 * device->GetScaleX(); + smy = 16 * device->GetScaleY(); + } + } + // Fixed 6364216: LoadImage() may leak memory if (defaultIconSm == NULL || smx != prevSmx || smy != prevSmy) { - defaultIconSm = (HICON)LoadImage(GetModuleHandle(), TEXT("AWT_ICON"), IMAGE_ICON, smx, smy, 0); + defaultIconSm = ::LoadIcon(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON)); + if (!defaultIconSm) { + defaultIconSm = (HICON)LoadImage(GetModuleHandle(), TEXT("AWT_ICON"), IMAGE_ICON, smx, smy, 0); + } prevSmx = smx; prevSmy = smy; } @@ -3142,3 +3210,15 @@ LRESULT AwtToolkit::InvokeInputMethodFunction(UINT msg, WPARAM wParam, LPARAM lP return 0; } } + +POINT ScreenToBottommostChild(HWND& w, LONG ncx, LONG ncy) { + POINT p; + for (;;) { + p = {ncx, ncy}; + ::ScreenToClient(w, &p); + HWND t = ::ChildWindowFromPointEx(w, p, CWP_SKIPINVISIBLE | CWP_SKIPDISABLED | CWP_SKIPTRANSPARENT); + if (t == NULL || t == w) return p; + w = t; + } +} + diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h b/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h index 4a4b2bdcb3fa..038653556492 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h @@ -181,8 +181,24 @@ class CriticalSection { #define TOUCHEVENTF_NOCOALESCE 0x0020 #define TOUCHEVENTF_PEN 0x0040 #define TOUCHEVENTF_PALM 0x0080 + + /* + * Conversion of touch input coordinates to pixels + */ + #define TOUCH_COORD_TO_PIXEL(l) ((l) / 100) +#endif + +#ifndef MOUSEEVENTF_FROMTOUCH_MASK +#define MOUSEEVENTF_FROMTOUCH_MASK 0xFFFFFF00 #endif +#ifndef MOUSEEVENTF_FROMTOUCH +#define MOUSEEVENTF_FROMTOUCH 0xFF515700 +#endif + +inline BOOL IsMouseEventFromTouch() { + return (::GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH_MASK) == MOUSEEVENTF_FROMTOUCH; +} /************************************************************************ * AwtToolkit class */ @@ -216,6 +232,7 @@ class AwtToolkit { void SetDynamicLayout(BOOL dynamic); BOOL IsDynamicLayoutSet(); BOOL IsDynamicLayoutSupported(); + BOOL IsActiveWindowTrackingEnabled(); BOOL IsDynamicLayoutActive(); BOOL areExtraMouseButtonsEnabled(); void setExtraMouseButtonsEnabled(BOOL enable); @@ -370,7 +387,7 @@ class AwtToolkit { /* Return the current application icon. */ HICON GetAwtIcon(); - HICON GetAwtIconSm(); + HICON GetAwtIconSm(void* pAwtWindow = NULL); // Calculate a wave-like value out of the integer 'value' and // the specified period. @@ -425,6 +442,15 @@ class AwtToolkit { static BOOL CALLBACK CommonPeekMessageFunc(MSG& msg); static BOOL activateKeyboardLayout(HKL hkl); + static INLINE BOOL AdjustWindowRectExForDpi(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle, UINT dpi) + { + return lpAdjustWindowRectExForDpi != NULL ? + lpAdjustWindowRectExForDpi(lpRect, dwStyle, bMenu, dwExStyle, dpi) : ::AdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle); + } + static INLINE UINT GetDpiForWindow(HWND hwnd) { + return lpGetDpiForWindow != NULL ? lpGetDpiForWindow(hwnd) : 96; + } + HANDLE m_waitEvent; volatile DWORD eventNumber; volatile BOOL isDnDSourceActive; @@ -442,6 +468,7 @@ class AwtToolkit { BOOL m_isActive; // set to FALSE at beginning of Dispose BOOL m_isDisposed; // set to TRUE at end of Dispose BOOL m_areExtraMouseButtonsEnabled; + BOOL m_active_window_tracking_mode_enabled; typedef BOOL (WINAPI *RegisterTouchWindowFunc)(HWND hWnd, ULONG ulFlags); typedef BOOL (WINAPI *GetTouchInputInfoFunc)(HTOUCHINPUT hTouchInput, @@ -491,6 +518,9 @@ class AwtToolkit { HANDLE m_inputMethodWaitEvent; LRESULT m_inputMethodData; + static AdjustWindowRectExForDpiFunc *lpAdjustWindowRectExForDpi; + static GetDpiForWindowFunc *lpGetDpiForWindow; + /* track display changes - used by palette-updating code. This is a workaround for a windows bug that prevents WM_PALETTECHANGED event from occurring immediately after @@ -714,4 +744,6 @@ template inline T* SafeCreate(T* &pArg) { } } +POINT ScreenToBottommostChild(HWND& w, LONG ncx, LONG ncy); + #endif /* AWT_TOOLKIT_H */ diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsConfig.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsConfig.cpp index 463c1fdee10d..acb3cbfde33d 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsConfig.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsConfig.cpp @@ -76,50 +76,3 @@ inline int shiftToMask(int numBits, int shift) { mask = mask << shift; return mask; } - -/* - * Class: sun_awt_Win32GraphicsConfig - * Method: getBounds - * Signature: ()Ljava/awt/Rectangle - */ -JNIEXPORT jobject JNICALL - Java_sun_awt_Win32GraphicsConfig_getBounds(JNIEnv *env, jobject thisobj, - jint screen) -{ - jclass clazz; - jmethodID mid; - jobject bounds = NULL; - - clazz = env->FindClass("java/awt/Rectangle"); - CHECK_NULL_RETURN(clazz, NULL); - mid = env->GetMethodID(clazz, "", "(IIII)V"); - if (mid != 0) { - RECT rRW = {0, 0, 0, 0}; - Devices::InstanceAccess devices; - AwtWin32GraphicsDevice *device = devices->GetDevice(screen); - - if (TRUE == MonitorBounds(AwtWin32GraphicsDevice::GetMonitor(screen), &rRW)) { - int w = (device == NULL) ? rRW.right - rRW.left - : device->ScaleDownX(rRW.right - rRW.left); - int h = (device == NULL) ? rRW.bottom - rRW.top - : device->ScaleDownY(rRW.bottom - rRW.top); - - bounds = env->NewObject(clazz, mid, rRW.left, rRW.top, w, h); - } - else { - // 4910760 - don't return a null bounds, return the bounds of the - // primary screen - int w = ::GetSystemMetrics(SM_CXSCREEN); - int h = ::GetSystemMetrics(SM_CYSCREEN); - - bounds = env->NewObject(clazz, mid, - 0, 0, - device == NULL ? w : device->ScaleDownX(w), - device == NULL ? h : device->ScaleDownY(h)); - } - if (safe_ExceptionOccurred(env)) { - return 0; - } - } - return bounds; -} diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.cpp index 8a84a28685fd..5c28fd7d98cf 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.cpp @@ -914,6 +914,14 @@ int AwtWin32GraphicsDevice::GetScreenFromHMONITOR(HMONITOR mon) { * End of static deviceIndex-based methods */ +BOOL AwtWin32GraphicsDevice::IsUiScaleEnabled() +{ + return JNU_CallStaticMethodByName(AwtToolkit::GetEnv(), + NULL, + "sun/java2d/SunGraphicsEnvironment", + "isUIScaleEnabled", + "()Z").z; +} const DWORD REQUIRED_FLAGS = ( //Flags which must be set in PFD_SUPPORT_GDI | //in the PixelFormatDescriptor. @@ -984,7 +992,7 @@ Java_sun_awt_Win32GraphicsDevice_initIDs(JNIEnv *env, jclass cls) */ JNIEXPORT jint JNICALL Java_sun_awt_Win32GraphicsDevice_getMaxConfigsImpl - (JNIEnv* jniEnv, jobject theThis, jint screen) { + (JNIEnv* jniEnv, jclass clazz, jint screen) { TRY; HDC hDC = AwtWin32GraphicsDevice::GetDCFromScreen(screen); @@ -1011,7 +1019,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_Win32GraphicsDevice_getMaxConfigsImpl */ JNIEXPORT jboolean JNICALL Java_sun_awt_Win32GraphicsDevice_isPixFmtSupported - (JNIEnv* env, jobject theThis, jint pixFmtID, jint screen) { + (JNIEnv* env, jclass clazz, jint pixFmtID, jint screen) { TRY; jboolean suppColor = JNI_TRUE; HDC hDC = AwtWin32GraphicsDevice::GetDCFromScreen(screen); @@ -1053,7 +1061,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_Win32GraphicsDevice_isPixFmtSupported */ JNIEXPORT jint JNICALL Java_sun_awt_Win32GraphicsDevice_getDefaultPixIDImpl - (JNIEnv* env, jobject theThis, jint screen) { + (JNIEnv* env, jclass clazz, jint screen) { TRY; int pixFmtID = 0; HDC hDC = AwtWin32GraphicsDevice::GetDCFromScreen(screen); @@ -1085,7 +1093,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_Win32GraphicsDevice_getDefaultPixIDImpl } if (JNI_FALSE == Java_sun_awt_Win32GraphicsDevice_isPixFmtSupported( - env, theThis, pixFmtID, screen)) { + env, clazz, pixFmtID, screen)) { /* Can't find a suitable pixel format ID. Fall back on 0. */ pixFmtID = 0; } @@ -1382,7 +1390,7 @@ JNIEXPORT void JNICALL Java_sun_awt_Win32GraphicsDevice_enumDisplayModes JNIEXPORT jobject JNICALL Java_sun_awt_Win32GraphicsDevice_makeColorModel - (JNIEnv *env, jobject thisPtr, jint screen, jboolean dynamic) + (JNIEnv *env, jclass clazz, jint screen, jboolean dynamic) { Devices::InstanceAccess devices; return devices->GetDevice(screen)->GetColorModel(env, dynamic); @@ -1395,10 +1403,10 @@ JNIEXPORT jobject JNICALL */ JNIEXPORT void JNICALL Java_sun_awt_Win32GraphicsDevice_initDevice - (JNIEnv *env, jobject thisPtr, jint screen) + (JNIEnv *env, jobject graphicsDevice, jint screen) { Devices::InstanceAccess devices; - devices->GetDevice(screen)->SetJavaDevice(env, thisPtr); + devices->GetDevice(screen)->SetJavaDevice(env, graphicsDevice); } /* @@ -1408,7 +1416,7 @@ JNIEXPORT void JNICALL */ JNIEXPORT void JNICALL Java_sun_awt_Win32GraphicsDevice_setNativeScale - (JNIEnv *env, jobject thisPtr, jint screen, jfloat scaleX, jfloat scaleY) + (JNIEnv *env, jclass clazz, jint screen, jfloat scaleX, jfloat scaleY) { Devices::InstanceAccess devices; AwtWin32GraphicsDevice *device = devices->GetDevice(screen); @@ -1426,7 +1434,7 @@ JNIEXPORT void JNICALL */ JNIEXPORT jfloat JNICALL Java_sun_awt_Win32GraphicsDevice_getNativeScaleX - (JNIEnv *env, jobject thisPtr, jint screen) + (JNIEnv *env, jclass clazz, jint screen) { Devices::InstanceAccess devices; AwtWin32GraphicsDevice *device = devices->GetDevice(screen); @@ -1440,7 +1448,7 @@ JNIEXPORT jfloat JNICALL */ JNIEXPORT jfloat JNICALL Java_sun_awt_Win32GraphicsDevice_getNativeScaleY - (JNIEnv *env, jobject thisPtr, jint screen) + (JNIEnv *env, jclass clazz, jint screen) { Devices::InstanceAccess devices; AwtWin32GraphicsDevice *device = devices->GetDevice(screen); @@ -1454,7 +1462,7 @@ JNIEXPORT jfloat JNICALL */ JNIEXPORT void JNICALL Java_sun_awt_Win32GraphicsDevice_initNativeScale -(JNIEnv *env, jobject thisPtr, jint screen) +(JNIEnv *env, jclass clazz, jint screen) { Devices::InstanceAccess devices; AwtWin32GraphicsDevice *device = devices->GetDevice(screen); @@ -1463,3 +1471,48 @@ Java_sun_awt_Win32GraphicsDevice_initNativeScale device->InitDesktopScales(); } } + +/* + * Class: sun_awt_Win32GraphicsDevice + * Method: getBounds + * Signature: (I)Ljava/awt/Rectangle + */ +JNIEXPORT jobject JNICALL + Java_sun_awt_Win32GraphicsDevice_getBounds(JNIEnv *env, jclass clazz, jint screen) +{ + jmethodID mid; + jobject bounds = NULL; + + clazz = env->FindClass("java/awt/Rectangle"); + CHECK_NULL_RETURN(clazz, NULL); + mid = env->GetMethodID(clazz, "", "(IIII)V"); + if (mid != 0) { + RECT rRW = {0, 0, 0, 0}; + Devices::InstanceAccess devices; + AwtWin32GraphicsDevice *device = devices->GetDevice(screen); + + if (TRUE == MonitorBounds(AwtWin32GraphicsDevice::GetMonitor(screen), &rRW)) { + int w = (device == NULL) ? rRW.right - rRW.left + : device->ScaleDownX(rRW.right - rRW.left); + int h = (device == NULL) ? rRW.bottom - rRW.top + : device->ScaleDownY(rRW.bottom - rRW.top); + + bounds = env->NewObject(clazz, mid, rRW.left, rRW.top, w, h); + } + else { + // 4910760 - don't return a null bounds, return the bounds of the + // primary screen + int w = ::GetSystemMetrics(SM_CXSCREEN); + int h = ::GetSystemMetrics(SM_CYSCREEN); + + bounds = env->NewObject(clazz, mid, + 0, 0, + device == NULL ? w : device->ScaleDownX(w), + device == NULL ? h : device->ScaleDownY(h)); + } + if (safe_ExceptionOccurred(env)) { + return 0; + } + } + return bounds; +} diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.h b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.h index 55f6c1623a8e..b8902788c7b2 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsDevice.h @@ -97,6 +97,7 @@ class AwtWin32GraphicsDevice { static int GetDefaultDeviceIndex() { return primaryIndex; } static HDC GetDCFromScreen(int screen); static int GetScreenFromHMONITOR(HMONITOR mon); + static BOOL IsUiScaleEnabled(); // if not, be dpi-unaware (backward compatible behaviour) static int primaryIndex; static BOOL primaryPalettized; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp index 9991427c75ed..e8940d5cc4a8 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp @@ -75,6 +75,28 @@ SetProcessDPIAwareProperty() } } +static void +SetProcessDPIAwareness(PROCESS_DPI_AWARENESS level) +{ + typedef HRESULT(WINAPI SetProcessDpiAwarenessFunc)(int); + static HMODULE hLibSHCoreDll = NULL; + static SetProcessDpiAwarenessFunc *lpSetProcessDpiAwareness = NULL; + + if (hLibSHCoreDll == NULL) { + hLibSHCoreDll = JDK_LoadSystemLibrary("shcore.dll"); + if (hLibSHCoreDll != NULL) { + lpSetProcessDpiAwareness = (SetProcessDpiAwarenessFunc*)GetProcAddress( + hLibSHCoreDll, "SetProcessDpiAwareness"); + } + ::FreeLibrary(hLibSHCoreDll); + hLibSHCoreDll = NULL; + } + + if (lpSetProcessDpiAwareness != NULL) { + lpSetProcessDpiAwareness(level); + } +} + #define DWM_COMP_UNDEFINED (~(TRUE|FALSE)) static int dwmIsCompositionEnabled = DWM_COMP_UNDEFINED; @@ -343,3 +365,14 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_Win32GraphicsEnvironment_isVistaOS { return IS_WINVISTA; } + +/* + * Class: sun_awt_Win32GraphicsEnvironment + * Method: setProcessDPIAwareness + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_sun_awt_Win32GraphicsEnvironment_setProcessDPIAwareness + (JNIEnv *env, jclass wgeclass, jint level) +{ + SetProcessDPIAwareness(static_cast(level)); +} \ No newline at end of file diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Window.cpp b/src/java.desktop/windows/native/libawt/windows/awt_Window.cpp index a135d6f0113d..7d253950d241 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Window.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_Window.cpp @@ -46,10 +46,16 @@ #include "sun_awt_windows_WCanvasPeer.h" #include +#include #if !defined(__int3264) typedef int32_t LONG_PTR; #endif // __int3264 +// Define these to be able to build with older SDKs +#define DWM_WINDOW_CORNER_PREFERENCE int +#define DWMWA_WINDOW_CORNER_PREFERENCE 33 +#define DWMWA_BORDER_COLOR 34 + // Used for Swing's Menu/Tooltip animation Support const int UNSPECIFIED = 0; const int TOOLTIP = 1; @@ -125,6 +131,13 @@ struct OpaqueStruct { jobject window; jboolean isOpaque; }; +// struct for _SetRoundedCorners() method +struct RoundedCornersStruct { + jobject window; + DWM_WINDOW_CORNER_PREFERENCE type; + jboolean isBorderColor; + jint borderColor; +}; // struct for _UpdateWindow() method struct UpdateWindowStruct { jobject window; @@ -161,13 +174,17 @@ jfieldID AwtWindow::locationByPlatformID; jfieldID AwtWindow::autoRequestFocusID; jfieldID AwtWindow::securityWarningWidthID; jfieldID AwtWindow::securityWarningHeightID; +jfieldID AwtWindow::customTitleBarHitTestID; +jfieldID AwtWindow::customTitleBarHitTestQueryID; jfieldID AwtWindow::windowTypeID; jmethodID AwtWindow::notifyWindowStateChangedMID; +jfieldID AwtWindow::sysInsetsID; jmethodID AwtWindow::getWarningStringMID; jmethodID AwtWindow::calculateSecurityWarningPositionMID; jmethodID AwtWindow::windowTypeNameMID; +jmethodID AwtWindow::internalCustomTitleBarHeightMID; int AwtWindow::ms_instanceCounter = 0; HHOOK AwtWindow::ms_hCBTFilter; @@ -198,6 +215,7 @@ AwtWindow::AwtWindow() { m_isFocusableWindow = TRUE; m_isRetainingHierarchyZOrder = FALSE; m_filterFocusAndActivation = FALSE; + m_isIgnoringMouseEvents = FALSE; if (AwtWindow::ms_instanceCounter == 1) { AwtWindow::ms_hCBTFilter = @@ -279,7 +297,7 @@ AwtWindow::Grab() { // we shouldn't perform grab in this case (see 4841881 & 6539458) Ungrab(); } else if (GetHWnd() != AwtComponent::GetFocusedWindow()) { - _ToFront(env->NewGlobalRef(GetPeer(env))); + _ToFront(env->NewGlobalRef(GetPeer(env)), FALSE); // Global ref was deleted in _ToFront } } @@ -1122,6 +1140,10 @@ AwtWindow* AwtWindow::Create(jobject self, jobject parent) if (env->ExceptionCheck()) goto done; DWORD style = WS_CLIPCHILDREN | WS_POPUP; DWORD exStyle = WS_EX_NOACTIVATE; + if (JNU_CallMethodByName(env, NULL, target, "isIgnoreMouseEvents", "()Z").z) { + exStyle |= WS_EX_LAYERED | WS_EX_TRANSPARENT; + window->m_isIgnoringMouseEvents = TRUE; + } if (GetRTL()) { exStyle |= WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR; if (GetRTLReadingOrder()) @@ -1233,6 +1255,49 @@ void AwtWindow::Reshape(int x, int y, int w, int h) { // monitor, so the WM_DPICHANGED will adjust it for the "target" monitor. int scaleUpAbsX = device == NULL ? x : device->ScaleUpAbsX(x); int scaleUpAbsY = device == NULL ? y : device->ScaleUpAbsY(y); + + int usrX = x; + int usrY = y; + + // [tav] Handle the fact that an owned window is most likely positioned relative to its owner, and it may + // require pixel-perfect alignment. For that, compensate rounding errors (caused by converting from the device + // space to the integer user space and back) for the owner's origin and for the owner's client area origin + // (see Window::GetAlignedInsets). + AwtComponent* parent = GetParent(); + if (parent != NULL && (device->GetScaleX() > 1 || device->GetScaleY() > 1)) { + RECT parentInsets; + parent->GetInsets(&parentInsets); + // Convert the owner's client area origin to user space + int parentInsetsUsrX = device->ScaleDownX(parentInsets.left); + int parentInsetsUsrY = device->ScaleDownY(parentInsets.top); + + RECT parentRect; + VERIFY(::GetWindowRect(parent->GetHWnd(), &parentRect)); + // Convert the owner's origin to user space + int parentUsrX = device->ScaleDownAbsX(parentRect.left); + int parentUsrY = device->ScaleDownAbsY(parentRect.top); + + // Calc the offset from the owner's client area in user space + int offsetUsrX = usrX - parentUsrX - parentInsetsUsrX; + int offsetUsrY = usrY - parentUsrY - parentInsetsUsrY; + + // Convert the offset to device space + int offsetDevX = device->ScaleUpX(offsetUsrX); + int offsetDevY = device->ScaleUpY(offsetUsrY); + + // Finally calc the window's location based on the frame's and its insets system numbers. + int devX = parentRect.left + parentInsets.left + offsetDevX; + int devY = parentRect.top + parentInsets.top + offsetDevY; + + // Check the toplevel is not going to be moved to another screen. + ::SetRect(&parentRect, devX, devY, devX + w, devY + h); + HMONITOR hmon = ::MonitorFromRect(&parentRect, MONITOR_DEFAULTTONEAREST); + if (hmon != NULL && AwtWin32GraphicsDevice::GetScreenFromHMONITOR(hmon) == device->GetDeviceIndex()) { + scaleUpAbsX = devX; + scaleUpAbsY = devY; + } + } + ReshapeNoScale(scaleUpAbsX, scaleUpAbsY, ScaleUpX(w), ScaleUpY(h)); // The window manager may tweak the size for different reasons, so try // to make sure our window has the correct size in the user's space. @@ -1377,12 +1442,20 @@ void AwtWindow::Show() } if (!done) { // transient windows shouldn't change the owner window's position in the z-order - if (IsRetainingHierarchyZOrder()){ + if (IsRetainingHierarchyZOrder() || m_isIgnoringMouseEvents) { UINT flags = SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW | SWP_NOOWNERZORDER; - if (nCmdShow == SW_SHOWNA) { + if (nCmdShow == SW_SHOWNA || m_isIgnoringMouseEvents) { flags |= SWP_NOACTIVATE; } - ::SetWindowPos(GetHWnd(), HWND_TOPMOST, 0, 0, 0, 0, flags); + HWND hInsertAfter = HWND_TOP; + if (m_isIgnoringMouseEvents) { + HWND hFgWindow = ::GetForegroundWindow(); + HWND hOwner = ::GetWindow(GetHWnd(), GW_OWNER); + if (hFgWindow != NULL && hOwner != hFgWindow) { + hInsertAfter = ::GetWindow(hOwner, GW_HWNDPREV); // insert below the wnd above the owner + } + } + ::SetWindowPos(GetHWnd(), hInsertAfter, 0, 0, 0, 0, flags); } else { ::ShowWindow(GetHWnd(), nCmdShow); } @@ -1474,18 +1547,39 @@ BOOL AwtWindow::UpdateInsets(jobject insets) jobject peerInsets = (env)->GetObjectField(peer, AwtPanel::insets_ID); DASSERT(!safe_ExceptionOccurred(env)); + jobject peerSysInsets = (env)->GetObjectField(peer, AwtWindow::sysInsetsID); + DASSERT(!safe_ExceptionOccurred(env)); + + // Floor resulting insets + int screen = GetScreenImOn(); + Devices::InstanceAccess devices; + AwtWin32GraphicsDevice* device = devices->GetDevice(screen); + float scaleX = device == NULL ? 1.0f : device->GetScaleX(); + float scaleY = device == NULL ? 1.0f : device->GetScaleY(); + RECT result; + result.top = (LONG) floor(m_insets.top / scaleY); + result.bottom = (LONG) floor(m_insets.bottom / scaleY); + result.left = (LONG) floor(m_insets.left / scaleX); + result.right = (LONG) floor(m_insets.right / scaleX); + if (peerInsets != NULL) { // may have been called during creation - (env)->SetIntField(peerInsets, AwtInsets::topID, ScaleDownY(m_insets.top)); - (env)->SetIntField(peerInsets, AwtInsets::bottomID, ScaleDownY(m_insets.bottom)); - (env)->SetIntField(peerInsets, AwtInsets::leftID, ScaleDownX(m_insets.left)); - (env)->SetIntField(peerInsets, AwtInsets::rightID, ScaleDownX(m_insets.right)); + (env)->SetIntField(peerInsets, AwtInsets::topID, result.top); + (env)->SetIntField(peerInsets, AwtInsets::bottomID, result.bottom); + (env)->SetIntField(peerInsets, AwtInsets::leftID, result.left); + (env)->SetIntField(peerInsets, AwtInsets::rightID, result.right); + } + if (peerSysInsets != NULL) { + (env)->SetIntField(peerSysInsets, AwtInsets::topID, m_insets.top); + (env)->SetIntField(peerSysInsets, AwtInsets::bottomID, m_insets.bottom); + (env)->SetIntField(peerSysInsets, AwtInsets::leftID, m_insets.left); + (env)->SetIntField(peerSysInsets, AwtInsets::rightID, m_insets.right); } /* Get insets into the Inset object (if any) that was passed */ if (insets != NULL) { - (env)->SetIntField(insets, AwtInsets::topID, ScaleDownY(m_insets.top)); - (env)->SetIntField(insets, AwtInsets::bottomID, ScaleDownY(m_insets.bottom)); - (env)->SetIntField(insets, AwtInsets::leftID, ScaleDownX(m_insets.left)); - (env)->SetIntField(insets, AwtInsets::rightID, ScaleDownX(m_insets.right)); + (env)->SetIntField(insets, AwtInsets::topID, result.top); + (env)->SetIntField(insets, AwtInsets::bottomID, result.bottom); + (env)->SetIntField(insets, AwtInsets::leftID, result.left); + (env)->SetIntField(insets, AwtInsets::rightID, result.right); } env->DeleteLocalRef(peerInsets); @@ -1556,6 +1650,34 @@ void AwtWindow::SendComponentEvent(jint eventId) env->DeleteLocalRef(event); } +static void SendPriorityEvent(jobject event) { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + static jclass toolkitClass; + if (toolkitClass == NULL) { + toolkitClass = env->FindClass("sun/awt/SunToolkit"); + if (toolkitClass != NULL) { + toolkitClass = (jclass)env->NewGlobalRef(toolkitClass); + } + if (toolkitClass == NULL) { + return; + } + } + + static jmethodID postPriorityEventMID; + if (postPriorityEventMID == NULL) { + postPriorityEventMID = + env->GetStaticMethodID(toolkitClass, "postPriorityEvent", + "(Ljava/awt/AWTEvent;)V"); + DASSERT(postPriorityEventMID); + if (postPriorityEventMID == NULL) { + return; + } + } + + env->CallStaticVoidMethod(toolkitClass, postPriorityEventMID, event); +} + void AwtWindow::SendWindowEvent(jint id, HWND opposite, jint oldState, jint newState) { @@ -1586,25 +1708,6 @@ void AwtWindow::SendWindowEvent(jint id, HWND opposite, } } - static jclass sequencedEventCls; - if (sequencedEventCls == NULL) { - jclass sequencedEventClsLocal - = env->FindClass("java/awt/SequencedEvent"); - DASSERT(sequencedEventClsLocal); - CHECK_NULL(sequencedEventClsLocal); - sequencedEventCls = - (jclass)env->NewGlobalRef(sequencedEventClsLocal); - env->DeleteLocalRef(sequencedEventClsLocal); - } - - static jmethodID sequencedEventConst; - if (sequencedEventConst == NULL) { - sequencedEventConst = - env->GetMethodID(sequencedEventCls, "", - "(Ljava/awt/AWTEvent;)V"); - CHECK_NULL(sequencedEventConst); - } - static jclass windowCls = NULL; if (windowCls == NULL) { jclass windowClsLocal = env->FindClass("java/awt/Window"); @@ -1661,17 +1764,11 @@ void AwtWindow::SendWindowEvent(jint id, HWND opposite, if (id == java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS || id == java_awt_event_WindowEvent_WINDOW_LOST_FOCUS) { - jobject sequencedEvent = env->NewObject(sequencedEventCls, - sequencedEventConst, - event); - DASSERT(!safe_ExceptionOccurred(env)); - DASSERT(sequencedEvent != NULL); - env->DeleteLocalRef(event); - event = sequencedEvent; + SendPriorityEvent(event); + } else { + SendEvent(event); } - SendEvent(event); - env->DeleteLocalRef(event); } @@ -1783,18 +1880,20 @@ MsgRouting AwtWindow::WmShowWindow(BOOL show, UINT status) /* * Original fix for 4810575. Modified for 6386592. * If a simple window gets disposed we should synthesize - * WM_ACTIVATE for its nearest owner. This is not performed by default because + * WM_ACTIVATE for its nearest focusable owner. This is not performed by default because * the owner frame/dialog is natively active. */ HWND hwndSelf = GetHWnd(); HWND hwndOwner = ::GetParent(hwndSelf); - if (!show && IsSimpleWindow() && hwndSelf == AwtComponent::GetFocusedWindow() && - hwndOwner != NULL && ::IsWindowVisible(hwndOwner)) - { - AwtFrame *owner = (AwtFrame*)AwtComponent::GetComponent(hwndOwner); - if (owner != NULL) { - owner->AwtSetActiveWindow(); + if (!show && IsSimpleWindow() && hwndSelf == AwtComponent::GetFocusedWindow()) { + while (hwndOwner != NULL && ::IsWindowVisible(hwndOwner)) { + AwtWindow *owner = (AwtWindow*)AwtComponent::GetComponent(hwndOwner); + if (owner != NULL && owner->IsFocusableWindow()) { + owner->AwtSetActiveWindow(); + break; + } + hwndOwner = ::GetParent(hwndOwner); } } @@ -1814,6 +1913,21 @@ void AwtWindow::WmDPIChanged(const LPARAM &lParam) { RECT *r = (RECT *) lParam; ReshapeNoScale(r->left, r->top, r->right - r->left, r->bottom - r->top); CheckIfOnNewScreen(true); + WmSize(GetCurrentWmSizeType(), r->right - r->left, r->bottom - r->top); +} + +MsgRouting AwtWindow::WmEraseBkgnd(HDC hDC, BOOL& didErase) +{ + if (!IsUndecorated()) { + // [tav] When an undecorated window is shown nothing is actually displayed + // until something is drawn in it. In order to prevent blinking, the background + // is not erased for such windows. + RECT rc; + ::GetClipBox(hDC, &rc); + ::FillRect(hDC, &rc, this->GetBackgroundBrush()); + } + didErase = TRUE; + return mrConsume; } /* @@ -1831,8 +1945,8 @@ MsgRouting AwtWindow::WmMove(int x, int y) // NOTE: See also AwtWindow::Reshape return mrDoDefault; } - // Check for the new screen and update the java peer - CheckIfOnNewScreen(false); // postpone if different DPI + + if (CheckIfOnNewScreen(false)) DoUpdateIcon(); /* Update the java AWT target component's fields directly */ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -1844,8 +1958,46 @@ MsgRouting AwtWindow::WmMove(int x, int y) RECT rect; ::GetWindowRect(GetHWnd(), &rect); - (env)->SetIntField(target, AwtComponent::xID, ScaleDownAbsX(rect.left)); - (env)->SetIntField(target, AwtComponent::yID, ScaleDownAbsY(rect.top)); + // [tav] Convert x/y to user space, asymmetrically to AwtWindow::Reshape() + POINT pt = {rect.left + (rect.right - rect.left) / 2, rect.top + (rect.bottom - rect.top) / 2}; + Devices::InstanceAccess devices; + HMONITOR monitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); + int screen = AwtWin32GraphicsDevice::GetScreenFromHMONITOR(monitor); + AwtWin32GraphicsDevice *device = devices->GetDevice(screen); + + int usrX = ScaleDownAbsX(rect.left); + int usrY = ScaleDownAbsY(rect.top); + + AwtComponent* parent = GetParent(); + if (parent != NULL && (device->GetScaleX() > 1 || device->GetScaleY() > 1)) { + + RECT parentInsets; + parent->GetInsets(&parentInsets); + // Convert the owner's client area origin to user space + int parentInsetsUsrX = device->ScaleDownX(parentInsets.left); + int parentInsetsUsrY = device->ScaleDownY(parentInsets.top); + + RECT parentRect; + VERIFY(::GetWindowRect(parent->GetHWnd(), &parentRect)); + // Convert the owner's origin to user space + int parentUsrX = device->ScaleDownAbsX(parentRect.left); + int parentUsrY = device->ScaleDownAbsY(parentRect.top); + + // Calc the offset from the owner's client area in device space + int offsetDevX = rect.left - parentRect.left - parentInsets.left; + int offsetDevY = rect.top - parentRect.top - parentInsets.top; + + // Convert the offset to user space + int offsetUsrX = device->ScaleDownX(offsetDevX); + int offsetUsrY = device->ScaleDownY(offsetDevY); + + // Finally calc the window's location based on the frame's and its insets user space values. + usrX = parentUsrX + parentInsetsUsrX + offsetUsrX; + usrY = parentUsrY + parentInsetsUsrY + offsetUsrY; + } + + (env)->SetIntField(target, AwtComponent::xID, usrX); + (env)->SetIntField(target, AwtComponent::yID, usrY); SendComponentEvent(java_awt_event_ComponentEvent_COMPONENT_MOVED); env->DeleteLocalRef(target); @@ -1858,8 +2010,8 @@ MsgRouting AwtWindow::WmGetMinMaxInfo(LPMINMAXINFO lpmmi) if ((m_minSize.x == 0) && (m_minSize.y == 0)) { return r; } - lpmmi->ptMinTrackSize.x = m_minSize.x; - lpmmi->ptMinTrackSize.y = m_minSize.y; + lpmmi->ptMinTrackSize.x = ScaleUpX(m_minSize.x); + lpmmi->ptMinTrackSize.y = ScaleUpY(m_minSize.y); return mrConsume; } @@ -1922,8 +2074,13 @@ MsgRouting AwtWindow::WmSize(UINT type, int w, int h) UpdateSecurityWarningVisibility(); return mrDoDefault; } + + if (CheckIfOnNewScreenWithDifferentScale()) { // postpone if different DPI + return mrDoDefault; + } + // Check for the new screen and update the java peer - CheckIfOnNewScreen(false); // postpone if different DPI + CheckIfOnNewScreen(false); JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); if (env->EnsureLocalCapacity(1) < 0) @@ -1990,7 +2147,7 @@ MsgRouting AwtWindow::WmNcCalcSize(BOOL fCalcValidRects, return mrRetVal; } -MsgRouting AwtWindow::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) +MsgRouting AwtWindow::WmNcHitTest(int x, int y, LRESULT& retVal) { // If this window is blocked by modal dialog, return HTCLIENT for any point of it. // That prevents it to be moved or resized using the mouse. Disabling these @@ -2124,13 +2281,6 @@ void AwtWindow::SetResizable(BOOL isResizable) RedrawNonClient(); } -// SetWindowPos flags to cause frame edge to be recalculated -static const UINT SwpFrameChangeFlags = - SWP_FRAMECHANGED | /* causes WM_NCCALCSIZE to be called */ - SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | - SWP_NOACTIVATE | SWP_NOCOPYBITS | - SWP_NOREPOSITION | SWP_NOSENDCHANGING; - // // Forces WM_NCCALCSIZE to be called to recalculate // window border (updates insets) without redrawing it @@ -2163,10 +2313,9 @@ int AwtWindow::GetScreenImOn() { } /* - * Check to see if we've been moved onto another screen. - * If so, update internal data, surfaces, etc. + * Check to see if we've been moved onto another screen with different scale. */ -void AwtWindow::CheckIfOnNewScreen(BOOL force) { +BOOL AwtWindow::CheckIfOnNewScreenWithDifferentScale() { int curScrn = GetScreenImOn(); if (curScrn != m_screenNum) { // we've been moved @@ -2176,33 +2325,55 @@ void AwtWindow::CheckIfOnNewScreen(BOOL force) { Devices::InstanceAccess devices; AwtWin32GraphicsDevice* oldDevice = devices->GetDevice(m_screenNum); AwtWin32GraphicsDevice* newDevice = devices->GetDevice(curScrn); - if (!force && m_winSizeMove && oldDevice && newDevice) { + if (m_winSizeMove && oldDevice && newDevice) { if (oldDevice->GetScaleX() != newDevice->GetScaleX() - || oldDevice->GetScaleY() != newDevice->GetScaleY()) { + || oldDevice->GetScaleY() != newDevice->GetScaleY()) { // scales are different, wait for WM_DPICHANGED - return; + return TRUE; } } + } + return FALSE; +} + +UINT AwtWindow::GetCurrentWmSizeType() { + return SIZENORMAL; +} + +/* + * Check to see if we've been moved onto another screen. + * If so, update internal data, surfaces, etc. + */ +BOOL AwtWindow::CheckIfOnNewScreen(BOOL force) { + int curScrn = GetScreenImOn(); + + if (curScrn != m_screenNum) { // we've been moved + if (!force && CheckIfOnNewScreenWithDifferentScale()) { + // scales are different, wait for WM_DPICHANGED + return TRUE; + } JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jclass peerCls = env->GetObjectClass(m_peerObject); DASSERT(peerCls); - CHECK_NULL(peerCls); + CHECK_NULL_RETURN(peerCls, TRUE); jmethodID draggedID = env->GetMethodID(peerCls, "draggedToNewScreen", "()V"); DASSERT(draggedID); if (draggedID == NULL) { env->DeleteLocalRef(peerCls); - return; + return TRUE; } env->CallVoidMethod(m_peerObject, draggedID); m_screenNum = curScrn; env->DeleteLocalRef(peerCls); + return TRUE; } + return FALSE; } // The shared code is not ready to the top-level window which crosses a few @@ -2344,7 +2515,25 @@ AwtWindow::_RequestWindowFocus(void *param) return result; } -void AwtWindow::_ToFront(void *param) +void AwtWindow::ToFront() { + if (::IsWindow(GetHWnd())) { + UINT flags = SWP_NOMOVE|SWP_NOSIZE; + BOOL focusable = IsFocusableWindow(); + BOOL autoRequestFocus = IsAutoRequestFocus(); + + if (!focusable || !autoRequestFocus) + { + flags = flags|SWP_NOACTIVATE; + } + ::SetWindowPos(GetHWnd(), HWND_TOP, 0, 0, 0, 0, flags); + if (focusable && autoRequestFocus) + { + ::SetForegroundWindow(GetHWnd()); + } + } +} + +void AwtWindow::_ToFront(void *param, BOOL wait) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -2357,24 +2546,20 @@ void AwtWindow::_ToFront(void *param) w = (AwtWindow *)pData; if (::IsWindow(w->GetHWnd())) { - UINT flags = SWP_NOMOVE|SWP_NOSIZE; - BOOL focusable = w->IsFocusableWindow(); - BOOL autoRequestFocus = w->IsAutoRequestFocus(); - - if (!focusable || !autoRequestFocus) - { - flags = flags|SWP_NOACTIVATE; - } - ::SetWindowPos(w->GetHWnd(), HWND_TOP, 0, 0, 0, 0, flags); - if (focusable && autoRequestFocus) - { - ::SetForegroundWindow(w->GetHWnd()); + if (wait) { + w->SendMessage(WM_AWT_WINDOW_TOFRONT, 0, 0); + } else { + w->ToFront(); } } ret: env->DeleteGlobalRef(self); } +static void _ToFrontWait(void *param) { + AwtWindow::_ToFront(param, TRUE); +} + void AwtWindow::_ToBack(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -3250,6 +3435,31 @@ void AwtWindow::_SetOpaque(void* param) delete os; } +void AwtWindow::_SetRoundedCorners(void *param) { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + RoundedCornersStruct *rcs = (RoundedCornersStruct *)param; + jobject self = rcs->window; + + PDATA pData; + AwtWindow *window; + JNI_CHECK_PEER_GOTO(self, ret); + window = (AwtWindow *)pData; + + DwmSetWindowAttribute(window->GetHWnd(), DWMWA_WINDOW_CORNER_PREFERENCE, &rcs->type, sizeof(DWM_WINDOW_CORNER_PREFERENCE)); + + if (rcs->isBorderColor) { + jint red = (rcs->borderColor >> 16) & 0xff; + jint green = (rcs->borderColor >> 8) & 0xff; + jint blue = (rcs->borderColor >> 0) & 0xff; + COLORREF borderColor = RGB(red, green, blue); + DwmSetWindowAttribute(window->GetHWnd(), DWMWA_BORDER_COLOR, &borderColor, sizeof(COLORREF)); + } + ret: + env->DeleteGlobalRef(self); + delete rcs; +} + void AwtWindow::_UpdateWindow(void* param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -3364,12 +3574,18 @@ Java_java_awt_Window_initIDs(JNIEnv *env, jclass cls) env->GetFieldID(cls, "securityWarningWidth", "I")); CHECK_NULL(AwtWindow::securityWarningHeightID = env->GetFieldID(cls, "securityWarningHeight", "I")); + CHECK_NULL(AwtWindow::customTitleBarHitTestID = + env->GetFieldID(cls, "customTitleBarHitTest", "I")); + CHECK_NULL(AwtWindow::customTitleBarHitTestQueryID = + env->GetFieldID(cls, "customTitleBarHitTestQuery", "I")); CHECK_NULL(AwtWindow::getWarningStringMID = env->GetMethodID(cls, "getWarningString", "()Ljava/lang/String;")); CHECK_NULL(AwtWindow::autoRequestFocusID = env->GetFieldID(cls, "autoRequestFocus", "Z")); CHECK_NULL(AwtWindow::calculateSecurityWarningPositionMID = env->GetMethodID(cls, "calculateSecurityWarningPosition", "(DDDD)Ljava/awt/geom/Point2D;")); + CHECK_NULL(AwtWindow::internalCustomTitleBarHeightMID = + env->GetMethodID(cls, "internalCustomTitleBarHeight", "()F")); jclass windowTypeClass = env->FindClass("java/awt/Window$Type"); CHECK_NULL(windowTypeClass); @@ -3399,6 +3615,8 @@ Java_sun_awt_windows_WWindowPeer_initIDs(JNIEnv *env, jclass cls) { TRY; + CHECK_NULL(AwtWindow::sysInsetsID = env->GetFieldID(cls, "sysInsets", "Ljava/awt/Insets;")); + AwtWindow::windowTypeID = env->GetFieldID(cls, "windowType", "Ljava/awt/Window$Type;"); @@ -3420,7 +3638,7 @@ Java_sun_awt_windows_WWindowPeer__1toFront(JNIEnv *env, jobject self) { TRY; - AwtToolkit::GetInstance().SyncCall(AwtWindow::_ToFront, + AwtToolkit::GetInstance().SyncCall(_ToFrontWait, env->NewGlobalRef(self)); // global ref is deleted in _ToFront() @@ -4038,6 +4256,28 @@ Java_sun_awt_windows_WWindowPeer_repositionSecurityWarning(JNIEnv *env, CATCH_BAD_ALLOC; } +/* + * Class: sun_awt_windows_WWindowPeer + * Method: setRoundedCorners + * Signature: (IZI)V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WWindowPeer_setRoundedCorners(JNIEnv *env, jobject self, jint type, jboolean isBorderColor, jint borderColor) +{ + TRY; + + RoundedCornersStruct *rcs = new RoundedCornersStruct; + rcs->window = env->NewGlobalRef(self); + rcs->type = (DWM_WINDOW_CORNER_PREFERENCE)type; + rcs->isBorderColor = isBorderColor; + rcs->borderColor = borderColor; + + AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetRoundedCorners, rcs); + // global refs and rcs are deleted in _SetRoundedCorners + + CATCH_BAD_ALLOC; +} + /* * Class: sun_awt_windows_WLightweightFramePeer * Method: overrideNativeHandle diff --git a/src/java.desktop/windows/native/libawt/windows/awt_Window.h b/src/java.desktop/windows/native/libawt/windows/awt_Window.h index 5b0b8ba2ae49..989c429adf48 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_Window.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_Window.h @@ -56,6 +56,8 @@ class AwtWindow : public AwtCanvas { static jfieldID autoRequestFocusID; static jfieldID securityWarningWidthID; static jfieldID securityWarningHeightID; + static jfieldID customTitleBarHitTestID; + static jfieldID customTitleBarHitTestQueryID; /* sun.awt.windows.WWindowPeer field and method IDs */ static jfieldID windowTypeID; @@ -65,6 +67,9 @@ class AwtWindow : public AwtCanvas { static jmethodID getWarningStringMID; static jmethodID calculateSecurityWarningPositionMID; static jmethodID windowTypeNameMID; + static jmethodID internalCustomTitleBarHeightMID; + + static jfieldID sysInsetsID; AwtWindow(); virtual ~AwtWindow(); @@ -131,7 +136,9 @@ class AwtWindow : public AwtCanvas { virtual void RecalcNonClient(); virtual void RedrawNonClient(); virtual int GetScreenImOn(); - virtual void CheckIfOnNewScreen(BOOL force); + virtual BOOL CheckIfOnNewScreen(BOOL force); + virtual BOOL CheckIfOnNewScreenWithDifferentScale(); + virtual UINT GetCurrentWmSizeType(); virtual void Grab(); virtual void Ungrab(); virtual void Ungrab(BOOL doPost); @@ -168,6 +175,7 @@ class AwtWindow : public AwtCanvas { virtual MsgRouting WmClose(); virtual MsgRouting WmDestroy(); virtual MsgRouting WmShowWindow(BOOL show, UINT status); + virtual MsgRouting WmEraseBkgnd(HDC hDC, BOOL& didErase); virtual MsgRouting WmGetMinMaxInfo(LPMINMAXINFO lpmmi); virtual MsgRouting WmMove(int x, int y); virtual MsgRouting WmSize(UINT type, int w, int h); @@ -178,7 +186,7 @@ class AwtWindow : public AwtCanvas { virtual MsgRouting WmSettingChange(UINT wFlag, LPCTSTR pszSection); virtual MsgRouting WmNcCalcSize(BOOL fCalcValidRects, LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal); - virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); + virtual MsgRouting WmNcHitTest(int x, int y, LRESULT& retVal); virtual MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); virtual MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal); virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); @@ -215,13 +223,15 @@ class AwtWindow : public AwtCanvas { void UpdateWindow(JNIEnv* env, jintArray data, int width, int height, HBITMAP hNewBitmap = NULL); + void ToFront(); + INLINE virtual BOOL IsTopLevel() { return TRUE; } static AwtWindow * GetGrabbedWindow() { return m_grabbedWindow; } static void FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags); // some methods invoked on Toolkit thread - static void _ToFront(void *param); + static void _ToFront(void *param, BOOL wait); static void _ToBack(void *param); static void _Grab(void *param); static void _Ungrab(void *param); @@ -244,6 +254,7 @@ class AwtWindow : public AwtCanvas { static void _SetFullScreenExclusiveModeState(void* param); static void _GetNativeWindowSize(void* param); static void _OverrideHandle(void *param); + static void _SetRoundedCorners(void* param); inline static BOOL IsResizing() { return sm_resizing; @@ -279,6 +290,7 @@ class AwtWindow : public AwtCanvas { BOOL m_isRetainingHierarchyZOrder; // Is this a window that shouldn't change z-order of any window // from its hierarchy when shown. Currently applied to instances of // javax/swing/Popup$HeavyWeightWindow class. + BOOL m_isIgnoringMouseEvents; // Make window transparent for mouse events (used for JCEF) // SetTranslucency() is the setter for the following two fields BYTE m_opacity; // The opacity level. == 0xff by default (when opacity mode is disabled) @@ -389,6 +401,13 @@ class AwtWindow : public AwtCanvas { inline Type GetType() { return m_windowType; } + // SetWindowPos flags to cause frame edge to be recalculated + static const UINT SwpFrameChangeFlags = + SWP_FRAMECHANGED | /* causes WM_NCCALCSIZE to be called */ + SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | + SWP_NOACTIVATE | SWP_NOCOPYBITS | + SWP_NOREPOSITION | SWP_NOSENDCHANGING; + private: int m_screenNum; diff --git a/src/java.desktop/windows/native/libawt/windows/awt_ole.h b/src/java.desktop/windows/native/libawt/windows/awt_ole.h index 7a57e8c13295..7f761171dd36 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_ole.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_ole.h @@ -180,4 +180,24 @@ struct CLogEntryPoint0 { #define _VE _variant_t() #define _VB(b) _variant_t(bool(b)) +struct OLEHolder +{ + OLEHolder() + : m_hr(::OleInitialize(NULL)) + { + if (SUCCEEDED(m_hr)) { + STRACE(_T("{OLE")); + } + } + + ~OLEHolder(){ + if (SUCCEEDED(m_hr)) { + ::OleUninitialize(); + STRACE(_T("}OLE")); + } + } + operator bool() const { return TRUE==SUCCEEDED(m_hr); } + HRESULT m_hr; +}; + #endif//AWT_OLE_H diff --git a/src/java.desktop/windows/native/libawt/windows/awtmsg.h b/src/java.desktop/windows/native/libawt/windows/awtmsg.h index 3ec527c98e22..f8a8a53ab096 100644 --- a/src/java.desktop/windows/native/libawt/windows/awtmsg.h +++ b/src/java.desktop/windows/native/libawt/windows/awtmsg.h @@ -207,6 +207,7 @@ enum { WM_AWT_COMPONENT_HIDE, WM_AWT_COMPONENT_SETFOCUS, WM_AWT_WINDOW_SETACTIVE, + WM_AWT_WINDOW_TOFRONT, WM_AWT_LIST_SETMULTISELECT, WM_AWT_HANDLE_EVENT, WM_AWT_RESHAPE_COMPONENT, diff --git a/src/java.desktop/windows/native/libawt/windows/jbr_CustomTitleBarControls.cpp b/src/java.desktop/windows/native/libawt/windows/jbr_CustomTitleBarControls.cpp new file mode 100644 index 000000000000..c22454443908 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/jbr_CustomTitleBarControls.cpp @@ -0,0 +1,582 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// Created by nikita.gubarkov on 26.01.2023. + +#define GDIPVER 0x0110 +#include +#include +#include +using namespace Gdiplus; + +#include "jbr_CustomTitleBarControls.h" + +namespace CustomTitleBarControlsSupport { + static CriticalSection criticalSection; + + using State = CustomTitleBarControls::State; + using Type = CustomTitleBarControls::Type; + using ButtonColors = ARGB[2][(int)State::UNKNOWN]; // [Background/Foreground][State] + static constexpr ARGB BC_INHERIT = 0x00ffffff; // Transparent white means inherit + + static constexpr ButtonColors DEFAULT_COLORS_WIN11[3] = { // Light/Dark/Close + // NORMAL // HOVERED // PRESSED // DISABLED // INACTIVE // + {{BC_INHERIT, 0x0A000000, 0x06000000, BC_INHERIT, BC_INHERIT}, // Light background + {0xFF000000, 0xFF000000, 0xFF000000, 0x33000000, 0x60000000}}, // Light foreground + {{BC_INHERIT, 0x0FFFFFFF, 0x0BFEFEFE, BC_INHERIT, BC_INHERIT}, // Dark background + {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x33FFFFFF, 0x60FFFFFF}}, // Dark foreground + {{BC_INHERIT, 0xFFC42B1C, 0xE5C32B1B, BC_INHERIT, BC_INHERIT}, // Close background + {BC_INHERIT, 0xFFFFFFFF, 0xFFFFFFFF, BC_INHERIT, BC_INHERIT}}, // Close foreground + }; + + static constexpr ButtonColors DEFAULT_COLORS_WIN10[3] = { // Light/Dark/Close + // NORMAL // HOVERED // PRESSED // DISABLED // INACTIVE // + {{BC_INHERIT, 0x1A000000, 0x33000000, BC_INHERIT, BC_INHERIT}, // Light background + {0xFF000000, 0xFF000000, 0xFF000000, 0x33000000, 0x60000000}}, // Light foreground + {{BC_INHERIT, 0x1AFEFEFE, 0x33FFFFFF, BC_INHERIT, BC_INHERIT}, // Dark background + {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x33FFFFFF, 0x60FFFFFF}}, // Dark foreground + {{BC_INHERIT, 0xFFE81123, 0x99E71022, BC_INHERIT, BC_INHERIT}, // Close background + {BC_INHERIT, 0xFFFFFFFF, 0xFFFFFFFF, BC_INHERIT, BC_INHERIT}}, // Close foreground + }; + + static void PaintIconWin11(Type type, Graphics& g, float scale, SolidBrush* mask) { + float size = 10.0f * scale; + GraphicsPath p {}; + switch (type) { + case Type::CLOSE:{ + float o = 0.3f; + Pen pen(mask, 1.04f * scale); + p.AddLine(o, o, size-o, size-o); + p.CloseFigure(); + p.AddLine(size-o, o, o, size-o); + g.DrawPath(&pen, &p); + if (scale < 1.5f) { + g.SetCompositingMode(CompositingModeSourceOver); + g.DrawPath(&pen, &p); + } + } return; + case Type::MINIMIZE:{ + float t = (int) (4.0f * scale); + if (scale > 2 && ((int) (2.0f * scale)) % 2 == 1) t += 0.5f; + p.AddArc(0.0f, t, scale, scale, 90, 180); + p.AddArc(size-scale, t, scale, scale, 270, 180); + } break; + case Type::RESTORE:{ + float r = 6.0f * scale, d = 3.0f * scale, o = 2.0f * scale; + float a = 19.4712206f; // asin(1/3) in degrees + p.AddArc(o, 0.0f, d, d, 180+a, 90-a); + p.AddArc(size-r, 0.0f, r, r, 270, 90); + p.AddArc(size-d, size-d-o, d, d, 0, 90-a); + d = 4.0f * scale; + p.AddArc(size-(r+d)/2.0f, (r-d)/2.0f, d, d, 0, -90); + p.CloseFigure(); + }{ + size = (int) (8.0f * scale); + float r = 3.0f * scale, d = 1.0f * scale, t = (r-d)/2.0f, o = (r+d)/2.0f, y = 10.0f * scale - size; + p.AddArc(0.0f, y, r, r, 180, 90); + p.AddArc(size-r, y, r, r, 270, 90); + p.AddArc(size-r, size-r+y, r, r, 0, 90); + p.AddArc(0.0f, size-r+y, r, r, 90, 90); + p.CloseFigure(); + p.AddArc(t, t+y, d, d, 180, 90); + p.AddArc(size-o, t+y, d, d, 270, 90); + p.AddArc(size-o, size-o+y, d, d, 0, 90); + p.AddArc(t, size-o+y, d, d, 90, 90); + p.CloseFigure(); + } break; + case Type::MAXIMIZE:{ + float r = 3.0f * scale, d = 1.0f * scale, t = (r-d)/2.0f, o = (r+d)/2.0f; + p.AddArc(0.0f, 0.0f, r, r, 180, 90); + p.AddArc(size-r, 0.0f, r, r, 270, 90); + p.AddArc(size-r, size-r, r, r, 0, 90); + p.AddArc(0.0f, size-r, r, r, 90, 90); + p.CloseFigure(); + p.AddArc(t, t, d, d, 180, 90); + p.AddArc(size-o, t, d, d, 270, 90); + p.AddArc(size-o, size-o, d, d, 0, 90); + p.AddArc(t, size-o, d, d, 90, 90); + p.CloseFigure(); + } break; + } + g.FillPath(mask, &p); + } + + static void PaintIconWin10(Type type, Graphics& g, float scale, SolidBrush* mask) { + SolidBrush clear(0xff000000); + g.SetSmoothingMode(SmoothingModeNone); + float size = 10.0f * scale; + switch (type) { + case Type::CLOSE:{ + float o = scale * 0.35f; + Pen pen(mask, scale); + g.DrawLine(&pen, o, o, size-o, size-o); + g.DrawLine(&pen, size-o, o, o, size-o); + } break; + case Type::MINIMIZE:{ + float t = (int) (4.0f * scale); + g.FillRectangle(mask, 0.0f, t, size, scale); + } break; + case Type::RESTORE:{ + float r = (int) (8.0f * scale), t = (int) scale; + g.FillRectangle(mask, size-r, 0.0f, r, r); + g.FillRectangle(&clear, size-r+t, t, r-t*2.0f, r-t*2.0f); + g.FillRectangle(mask, 0.0f, size-r, r, r); + g.FillRectangle(&clear, t, size-r+t, r-t*2.0f, r-t*2.0f); + } break; + case Type::MAXIMIZE:{ + float t = (int) scale; + g.FillRectangle(mask, 0.0f, 0.0f, size, size); + g.FillRectangle(&clear, t, t, size-t*2.0f, size-t*2.0f); + } break; + } + } + + static void (*PaintIcon)(Type type, Graphics& g, float scale, SolidBrush* mask); + static const ButtonColors* DEFAULT_COLORS; + + static Color GetColor(Type type, State state, bool foreground, bool dark, const ButtonColors& override) { + if (type == Type::CLOSE) { + ARGB result = DEFAULT_COLORS[2][(int)foreground][(int)state]; + if (result != BC_INHERIT) return result; + } + ARGB result = override[(int)foreground][(int)state]; + if (result != BC_INHERIT) return result; + return DEFAULT_COLORS[(int)dark][(int)foreground][(int)state]; + } + + static Bitmap* CreateIcon(Type type, float scale) { + int size = (int) (10.0f * scale + 0.5f); // All icons are 10x10px at 100% scale + int stride = ((size * 3 + 3) / 4) * 4; + BYTE* bitmapData = new BYTE[size * stride]; + Bitmap* bitmap = ::new Bitmap(size, size, stride, PixelFormat24bppRGB, bitmapData); + SolidBrush mask(0xffffffff); + Graphics g(bitmap); + g.SetCompositingMode(CompositingModeSourceCopy); + g.SetSmoothingMode(SmoothingModeAntiAlias8x8); + g.SetPixelOffsetMode(PixelOffsetModeHalf); + g.Clear(0xff000000); + PaintIcon(type, g, scale, &mask); + return bitmap; + } + + static constexpr int ICON_SCALES = 7; + static constexpr float ICON_SCALE_MAP[ICON_SCALES][2] = { + {1.0f, 1.0f}, + {1.25f, 1.2f}, + {1.5f, 1.5f}, + {2.0f, 2.0f}, + {2.5f, 2.4f}, + {3.0f, 3.0f}, + {4.0f, 4.0f}, + }; + static Bitmap* ICON_CACHE[(int) Type::UNKNOWN][ICON_SCALES] {}; + + static Bitmap* GetIcon(Type type, float scale, int scaleId) { + CriticalSection::Lock lock(criticalSection); + Bitmap*& cached = ICON_CACHE[(int) type][scaleId]; + if (!cached) cached = CreateIcon(type, scale); + return cached; + } + + static Bitmap* GetIcon(Type type, float scale) { + int i = ICON_SCALES-1; + while (i > 0) { + if (scale >= ICON_SCALE_MAP[i][0]) break; + else i--; + } + scale = ICON_SCALE_MAP[i][1]; + return GetIcon(type, scale, i); + } + + enum class Availability { + UNKNOWN, + AVAILABLE, + UNAVAILABLE + }; + static volatile Availability availability = Availability::UNKNOWN; + static constexpr LPCTSTR CLASS = L"JBRCustomTitleBarControls"; + static jmethodID jmUpdateInsets = nullptr; + + static bool IsAvailable() { + if (availability != Availability::UNKNOWN) { + return availability == Availability::AVAILABLE; + } + CriticalSection::Lock lock(criticalSection); + if (availability != Availability::UNKNOWN) { + return availability == Availability::AVAILABLE; + } + + ULONG_PTR startupToken; + GdiplusStartupInput input; + JNIEnv *env; + bool win11OrNewer; + jclass jcWindow; + + // Init GDI+ + if (GdiplusStartup(&startupToken, &input, nullptr) != Ok) { + goto fail; + } + + // Choose Win10/11 style + env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + win11OrNewer = (bool) JNU_GetStaticFieldByName(env, nullptr, "sun/awt/windows/WFramePeer", "WIN11_OR_NEWER", "Z").z; + if (win11OrNewer) { + PaintIcon = PaintIconWin11; + DEFAULT_COLORS = DEFAULT_COLORS_WIN11; + } else { + PaintIcon = PaintIconWin10; + DEFAULT_COLORS = DEFAULT_COLORS_WIN10; + } + + // Find internalCustomTitleBarUpdateInsets java method + jcWindow = env->FindClass("java/awt/Window"); + if (!jcWindow) goto fail; + jmUpdateInsets = env->GetMethodID(jcWindow, "internalCustomTitleBarUpdateInsets", "(FF)V"); + env->DeleteLocalRef(jcWindow); + if (!jmUpdateInsets) goto fail; + + // Register class + WNDCLASSEX wc; + wc.cbSize = sizeof(WNDCLASSEX); + wc.style = 0L; + wc.lpfnWndProc = (WNDPROC)DefWindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = AwtToolkit::GetInstance().GetModuleHandle(); + wc.hIcon = nullptr; + wc.hCursor = nullptr; + wc.hbrBackground = nullptr; + wc.lpszMenuName = nullptr; + wc.lpszClassName = CLASS; + wc.hIconSm = nullptr; + RegisterClassEx(&wc); + + availability = Availability::AVAILABLE; + return true; + + fail: + availability = Availability::UNAVAILABLE; + return false; + } +} +using namespace CustomTitleBarControlsSupport; +extern BOOL AppsUseLightThemeCached; + +// === CustomTitleBarControls implementation === + +class CustomTitleBarControls::Resources { +public: + + const SIZE size; + HDC hdc; + BYTE* bitmapData; + Bitmap* bitmap; + HBITMAP hbitmap; + Graphics* graphics; + + Resources(SIZE s, HDC hdcComp) : + size(s) { + bitmapData = new BYTE[s.cx * s.cy * 4]; + bitmap = ::new Bitmap(s.cx, s.cy, s.cx * 4, PixelFormat32bppPARGB, bitmapData); + bitmap->GetHBITMAP(Color(0), &hbitmap); + hdc = CreateCompatibleDC(hdcComp); + SelectObject(hdc, hbitmap); + graphics = Graphics::FromHDC(hdc); + } + + ~Resources() { + delete graphics; + DeleteDC(hdc); + DeleteObject(hbitmap); + ::delete bitmap; + delete bitmapData; + } +}; + +class CustomTitleBarControls::Style { + + static jobject GetProperty(JNIEnv* env, jobject properties, LPCWSTR key) { + jstring jkey = JNU_NewStringPlatform(env, key); + jobject value = JNU_CallMethodByName(env, nullptr, properties, "get", "(Ljava/lang/Object;)Ljava/lang/Object;", jkey).l; + env->DeleteLocalRef(jkey); + return value; + } + + static void UnwrapProperty(JNIEnv* env, jobject properties, LPCWSTR key, const char* instanceof, + const char* unwrapMethod, const char* unwrapSignature, jvalue& result) { + jobject value = GetProperty(env, properties, key); + if (value) { + if (JNU_IsInstanceOfByName(env, value, instanceof) == 1) { + result = JNU_CallMethodByName(env, nullptr, value, unwrapMethod, unwrapSignature); + } + env->DeleteLocalRef(value); + } + } + + static int GetBooleanProperty(JNIEnv* env, jobject properties, LPCWSTR key) { // null -> -1 + jvalue result; + result.i = -1; + UnwrapProperty(env, properties, key, "java/lang/Boolean", "booleanValue", "()Z", result); + return (int) result.i; + } + + static float GetNumberProperty(JNIEnv* env, jobject properties, LPCWSTR key) { // null -> -1 + jvalue result; + result.f = -1; + UnwrapProperty(env, properties, key, "java/lang/Number", "floatValue", "()F", result); + return (float) result.f; + } + + static ARGB GetColorProperty(JNIEnv* env, jobject properties, LPCWSTR key) { // null -> BC_INHERIT + jvalue result; + result.i = BC_INHERIT; + UnwrapProperty(env, properties, key, "java/awt/Color", "getRGB", "()I", result); + return (ARGB) result.i; + } + +public: + float height {0}, width {0}; + int dark {0}; + ButtonColors colors {}; + + bool Update(jobject target, JNIEnv* env) { + jobject titleBar = JNU_GetFieldByName(env, nullptr, target, "customTitleBar", "Ljava/awt/Window$CustomTitleBar;").l; + if (!titleBar) return false; + jobject properties = JNU_CallMethodByName(env, nullptr, titleBar, "getProperties", "()Ljava/util/Map;").l; + bool visible = true; + if (properties) { + if (GetBooleanProperty(env, properties, L"controls.visible") == 0) { + visible = false; + } else { + height = JNU_CallMethodByName(env, nullptr, titleBar, "getHeight", "()F").f; + width = GetNumberProperty(env, properties, L"controls.width"); + dark = GetBooleanProperty(env, properties, L"controls.dark"); + // Get colors + #define GET_STATE_COLOR(NAME, PROPERTY) \ + colors[0][(int)State::NAME] = GetColorProperty(env, properties, L"controls.background." PROPERTY); \ + colors[1][(int)State::NAME] = GetColorProperty(env, properties, L"controls.foreground." PROPERTY) + GET_STATE_COLOR(NORMAL, L"normal"); + GET_STATE_COLOR(HOVERED, L"hovered"); + GET_STATE_COLOR(PRESSED, L"pressed"); + GET_STATE_COLOR(DISABLED, L"disabled"); + GET_STATE_COLOR(INACTIVE, L"inactive"); + } + env->DeleteLocalRef(properties); + } + env->DeleteLocalRef(titleBar); + return visible; + } +}; + +void CustomTitleBarControls::Refresh(CustomTitleBarControls*& controls, HWND parent, jobject target, JNIEnv* env) { + Style style; + if (IsAvailable() && style.Update(target, env)) { + if (controls) *controls->style = style; + else controls = new CustomTitleBarControls(parent, env->NewWeakGlobalRef(target), style); + controls->Update(); + } else if (controls) { + delete controls; + controls = nullptr; + } +} + +CustomTitleBarControls::CustomTitleBarControls(HWND parent, jweak target, const Style& style) { + this->parent = parent; + this->target = target; + hwnd = CreateWindowExW(WS_EX_LAYERED | WS_EX_TRANSPARENT, CLASS, L"", + WS_CHILD | WS_VISIBLE, + 0, 0, 0, 0, + parent, nullptr, AwtToolkit::GetInstance().GetModuleHandle(), nullptr); + hit = HTNOWHERE; + pressed = false; + windowState = State::NORMAL; + resources = nullptr; + this->style = new Style(style); +} + +CustomTitleBarControls::~CustomTitleBarControls() { + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = env->NewLocalRef(this->target); + if (target) { + env->CallVoidMethod(target, jmUpdateInsets, 0.0f, 0.0f); + env->DeleteLocalRef(target); + } + env->DeleteWeakGlobalRef(this->target); + DestroyWindow(hwnd); + delete resources; + delete style; +} + +void CustomTitleBarControls::PaintButton(Type type, State state, int x, int width, float scale, bool dark) { + Graphics& g = *resources->graphics; + + // Paint background + Color background = GetColor(type, state, false, dark, style->colors); + if (background.GetA() > 0) { + SolidBrush brush(background); + g.FillRectangle(&brush, x, 0, width, resources->size.cy); + } + + // Paint icon + Color foreground = GetColor(type, state, true, dark, style->colors); + float c[4] = {(float)foreground.GetA() / 255.0f, + (float)foreground.GetR() / 255.0f, + (float)foreground.GetG() / 255.0f, + (float)foreground.GetB() / 255.0f}; + ColorMatrix colorMatrix = { + 0.0f, 0.0f, 0.0f, c[0], 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + c[1], c[2], c[3], 0.0f, 1.0f}; + Bitmap* i = GetIcon(type, scale); + int w = (int) i->GetWidth(), h = (int) i->GetHeight(); + ImageAttributes imageAttributes; + imageAttributes.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap); + g.DrawImage(i, Rect(x + (width - w) / 2, (resources->size.cy - h) / 2, w, h), 0, 0, w, h, UnitPixel, &imageAttributes); +} + +#define LOAD_STYLE_BITS() \ +DWORD styleBits = (DWORD) GetWindowLong(parent, GWL_STYLE); \ +DWORD exStyleBits = (DWORD) GetWindowLong(parent, GWL_EXSTYLE); \ +bool allButtons = styleBits & (WS_MINIMIZEBOX | WS_MAXIMIZEBOX); \ +bool ltr = !(exStyleBits & WS_EX_LAYOUTRTL) + +void CustomTitleBarControls::Update(State windowState) { + LOAD_STYLE_BITS(); + + // Calculate size + float userWidth; + if (style->width > 0.0f) { + userWidth = style->width; + } else { + userWidth = allButtons ? 141 : 32; + } + UINT dpi = AwtToolkit::GetDpiForWindow(hwnd); + float scale = (float) dpi / 96.0f; + SIZE newSize {(int) (userWidth * scale), (int) (style->height * scale)}; + + // Recreate resources if size has changed + if (!resources || resources->size.cx != newSize.cx || resources->size.cy != newSize.cy) { + delete resources; + HDC hdcComp = GetDC(hwnd); + resources = new Resources(newSize, hdcComp); + ReleaseDC(hwnd, hdcComp); + } + + // Calculate states + if (windowState != State::UNKNOWN) this->windowState = windowState; + State minState = this->windowState, maxState = minState, closeState = minState; + if (hit != HTNOWHERE) { + State& s = hit == HTMINBUTTON ? minState : hit == HTMAXBUTTON ? maxState : closeState; + s = pressed ? State::PRESSED : State::HOVERED; + } + if (!(styleBits & WS_MINIMIZEBOX)) minState = State::DISABLED; + if (!(styleBits & WS_MAXIMIZEBOX)) maxState = State::DISABLED; + + bool dark = style->dark != -1 ? (bool) style->dark : !AppsUseLightThemeCached; + + // Paint buttons + resources->graphics->Clear(0); + if (allButtons) { + int w = newSize.cx / 3; + Type maxType = IsZoomed(parent) ? Type::RESTORE : Type::MAXIMIZE; + if (ltr) { + PaintButton(Type::MINIMIZE, minState, 0, w, scale, dark); + PaintButton(maxType, maxState, w, w, scale, dark); + PaintButton(Type::CLOSE, closeState, w*2, newSize.cx-w*2, scale, dark); + } else { + PaintButton(Type::CLOSE, closeState, 0, newSize.cx-w*2, scale, dark); + PaintButton(maxType, maxState, newSize.cx-w*2, w, scale, dark); + PaintButton(Type::MINIMIZE, minState, newSize.cx-w, w, scale, dark); + } + } else { + PaintButton(Type::CLOSE, closeState, 0, newSize.cx, scale, dark); + } + + // Update window + POINT position {0, 0}, ptSrc {0, 0}; + if (ltr) { + RECT parentRect; + GetClientRect(parent, &parentRect); + position.x = parentRect.right - newSize.cx; + } + + BLENDFUNCTION blend; + blend.SourceConstantAlpha = 255; + blend.AlphaFormat = AC_SRC_ALPHA; + blend.BlendOp = AC_SRC_OVER; + blend.BlendFlags = 0; + + HDC hdcDst = GetDC(nullptr); + SetWindowPos(hwnd, HWND_TOP, position.x, position.y, newSize.cx, newSize.cy, 0); + UpdateLayeredWindow(hwnd, hdcDst, &position, &newSize, resources->hdc, &ptSrc, 0, &blend, ULW_ALPHA); + ReleaseDC(nullptr, hdcDst); + + // Update insets + JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = env->NewLocalRef(this->target); + if (target) { + env->CallVoidMethod(target, jmUpdateInsets, !ltr ? userWidth : 0.0f, ltr ? userWidth : 0.0f); + env->DeleteLocalRef(target); + } +} + +LRESULT CustomTitleBarControls::Hit(HitType type, int ncx, int ncy) { + LRESULT newHit = HTNOWHERE; + if (type != HitType::RESET) { + RECT rect; + GetWindowRect(hwnd, &rect); + if (ncx >= rect.left && ncx <= rect.right && ncy >= rect.top && ncy <= rect.bottom) { + LOAD_STYLE_BITS(); + newHit = HTCLOSE; + if (allButtons) { + int w = (rect.right - rect.left) / 3; + ncx -= rect.left; + if (!ltr) ncx = rect.right - rect.left - ncx; + if (ncx < w) newHit = HTMINBUTTON; + else if (ncx < w*2) newHit = HTMAXBUTTON; + } + } + } + if (type == HitType::TEST) return newHit; + if (newHit != hit || type == HitType::PRESS || type == HitType::RELEASE) { + LRESULT oldHit = hit; + hit = newHit; + if (type == HitType::PRESS) pressed = true; + else if (type == HitType::RELEASE || newHit != oldHit) { + if (!pressed && type == HitType::RELEASE) newHit = HTNOWHERE; // Cancel action + pressed = false; + } + Update(); + + TRACKMOUSEEVENT track; + track.cbSize = sizeof(TRACKMOUSEEVENT); + track.dwFlags = TME_LEAVE | TME_NONCLIENT; + track.hwndTrack = parent; + TrackMouseEvent(&track); + } + return newHit; +} diff --git a/src/java.desktop/windows/native/libawt/windows/jbr_CustomTitleBarControls.h b/src/java.desktop/windows/native/libawt/windows/jbr_CustomTitleBarControls.h new file mode 100644 index 000000000000..43d5581d8b82 --- /dev/null +++ b/src/java.desktop/windows/native/libawt/windows/jbr_CustomTitleBarControls.h @@ -0,0 +1,84 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// Created by nikita.gubarkov on 26.01.2023. + +#ifndef JBR_CUSTOMTITLEBARCONTROLS_H +#define JBR_CUSTOMTITLEBARCONTROLS_H + +#include "awt_Toolkit.h" + +class CustomTitleBarControls { +public: + + enum class State { + NORMAL, + HOVERED, // "Hot" in Windows theme terminology + PRESSED, // "Pushed" in Windows theme terminology + DISABLED, + INACTIVE, // Didn't find this state in Windows, it represents button in inactive window + UNKNOWN + }; + + enum class Type { + MINIMIZE, + MAXIMIZE, + RESTORE, + CLOSE, + UNKNOWN + }; + + enum class HitType { + RESET, + TEST, + MOVE, + PRESS, + RELEASE + }; + +private: + class Resources; + class Style; + + jweak target; + HWND parent, hwnd; + Resources* resources; + Style* style; + LRESULT hit; + bool pressed; + State windowState; + + CustomTitleBarControls(HWND parent, jweak target, const Style& style); + void PaintButton(Type type, State state, int x, int width, float scale, bool dark); + +public: + static void Refresh(CustomTitleBarControls*& controls, HWND parent, jobject target, JNIEnv* env); + void Update(State windowState = State::UNKNOWN); + LRESULT Hit(HitType type, int ncx, int ncy); // HTNOWHERE / HTMINBUTTON / HTMAXBUTTON / HTCLOSE + ~CustomTitleBarControls(); + +}; + +#endif //JBR_CUSTOMTITLEBARCONTROLS_H diff --git a/src/java.desktop/windows/native/libfontmanager/fontpath.c b/src/java.desktop/windows/native/libfontmanager/fontpath.c index ecb02e4f6020..cd3b5629bdeb 100644 --- a/src/java.desktop/windows/native/libfontmanager/fontpath.c +++ b/src/java.desktop/windows/native/libfontmanager/fontpath.c @@ -666,3 +666,90 @@ Java_sun_awt_Win32FontManager_populateFontFileNameMap0 ReleaseDC(NULL, screenDC); screenDC = NULL; } + +typedef struct SupportedCharsetsInfo { + JNIEnv *env; + jobject supportedCharsets; +} SupportedCharsetsInfo; + +static jclass byteClassID = NULL; +static jmethodID valueOfMID = NULL; +static jmethodID putIfAbsentMID = NULL; + +static int CALLBACK StoreSupportedCharset(ENUMLOGFONTEXW *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam) +{ + SupportedCharsetsInfo* info = (SupportedCharsetsInfo*) lParam; + JNIEnv *env = info->env; + jstring fullName; + jobject charset; + + fullName = (*env)->NewString(env, lpelfe->elfFullName, (jsize)wcslen((LPWSTR)lpelfe->elfFullName)); + if (fullName == NULL) { + return 1; + } + + charset = (*env)->CallStaticObjectMethod(env, byteClassID, valueOfMID, (jbyte)(lpelfe->elfLogFont.lfCharSet)); + (*env)->CallObjectMethod(env, info->supportedCharsets, putIfAbsentMID, fullName, charset); + + return 1; +} + +JNIEXPORT void JNICALL +Java_sun_font_TrueTypeFont_getSupportedCharsetsForFamily +(JNIEnv *env, jclass obj, jstring familyName, jobject supportedCharsets) +{ + int nameLen; + LOGFONTW lfw; + HDC screenDC; + SupportedCharsetsInfo info; + jclass byteClassIDLocal, mapClassIDLocal; + + if (byteClassID == NULL) { + byteClassIDLocal = (*env)->FindClass(env, "java/lang/Byte"); + if (byteClassIDLocal == NULL) { + return; + } + byteClassID = (*env)->NewGlobalRef(env, byteClassIDLocal); + if (byteClassID == NULL) { + return; + } + } + if (valueOfMID == NULL) { + valueOfMID = (*env)->GetStaticMethodID(env, byteClassID, "valueOf", "(B)Ljava/lang/Byte;"); + if (valueOfMID == NULL) { + return; + } + } + if (putIfAbsentMID == NULL) { + mapClassIDLocal = (*env)->FindClass(env, "java/util/Map"); + if (mapClassIDLocal == NULL) { + return; + } + putIfAbsentMID = (*env)->GetMethodID(env, mapClassIDLocal, "putIfAbsent", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + if (putIfAbsentMID == NULL) { + return; + } + } + + info.env = env; + info.supportedCharsets = supportedCharsets; + + memset(&lfw, 0, sizeof(lfw)); + lfw.lfCharSet = DEFAULT_CHARSET; + nameLen = (*env)->GetStringLength(env, familyName); + if (nameLen >= (sizeof(lfw.lfFaceName) / sizeof(lfw.lfFaceName[0]))) { + return; + } + (*env)->GetStringRegion(env, familyName, 0, nameLen, lfw.lfFaceName); + lfw.lfFaceName[nameLen] = '\0'; + + screenDC = GetDC(NULL); + if (screenDC == NULL) { + return; + } + + EnumFontFamiliesExW(screenDC, &lfw, (FONTENUMPROCW)StoreSupportedCharset, (LPARAM)(&info), 0L); + + ReleaseDC(NULL, screenDC); +} \ No newline at end of file diff --git a/src/java.desktop/windows/native/libfontmanager/lcdglyph.c b/src/java.desktop/windows/native/libfontmanager/lcdglyph.c index 5e7015855b84..4fbdd6f3055e 100644 --- a/src/java.desktop/windows/native/libfontmanager/lcdglyph.c +++ b/src/java.desktop/windows/native/libfontmanager/lcdglyph.c @@ -165,7 +165,7 @@ JNIEXPORT jlong JNICALL Java_sun_font_FileFontStrike__1getGlyphImageFromWindows (JNIEnv *env, jobject unused, jstring fontFamily, jint style, jint size, jint glyphCode, jboolean fm, - jint fontDataSize) { + jint rotation, jbyte charset, jint fontDataSize) { GLYPHMETRICS glyphMetrics; LOGFONTW lf; @@ -222,11 +222,12 @@ Java_sun_font_FileFontStrike__1getGlyphImageFromWindows lf.lfHeight = -size; lf.lfWeight = (style & 1) ? FW_BOLD : FW_NORMAL; lf.lfItalic = (style & 2) ? 0xff : 0; - lf.lfCharSet = DEFAULT_CHARSET; + lf.lfCharSet = (BYTE) charset; lf.lfQuality = CLEARTYPE_QUALITY; lf.lfOutPrecision = OUT_TT_PRECIS; lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf.lfPitchAndFamily = DEFAULT_PITCH; + lf.lfEscapement = lf.lfOrientation = 900 * rotation; nameLen = (*env)->GetStringLength(env, fontFamily); name = (LPWSTR)alloca((nameLen+1)*2); @@ -367,7 +368,17 @@ Java_sun_font_FileFontStrike__1getGlyphImageFromWindows if (fm) { x += 1; } - y = topLeftY - textMetric.tmAscent; + if (rotation == 1) { + x -= textMetric.tmAscent; + } else if (rotation == 3) { + x += textMetric.tmAscent; + } + y = topLeftY; + if (rotation == 0) { + y -= textMetric.tmAscent; + } else if (rotation == 2) { + y += textMetric.tmAscent; + } err = ExtTextOutW(hMemoryDC, x, y, ETO_GLYPH_INDEX|ETO_OPAQUE, (LPRECT)&rect, (LPCWSTR)&glyphCode, 1, NULL); if (err == 0) { @@ -436,6 +447,9 @@ Java_sun_font_FileFontStrike__1getGlyphImageFromWindows glyphInfo->width -= 1; // must subtract 1 } glyphInfo->height = height; + glyphInfo->subpixelResolutionX = 1; + glyphInfo->subpixelResolutionY = 1; + glyphInfo->format = sun_font_StrikeCache_PIXEL_FORMAT_LCD; glyphInfo->advanceX = advanceX; glyphInfo->advanceY = advanceY; glyphInfo->topLeftX = (float)(topLeftX-1); diff --git a/src/java.desktop/windows/native/libfontmanager/lcdglyphDW.cpp b/src/java.desktop/windows/native/libfontmanager/lcdglyphDW.cpp new file mode 100644 index 000000000000..2b537b6341bd --- /dev/null +++ b/src/java.desktop/windows/native/libfontmanager/lcdglyphDW.cpp @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2016 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "fontscalerdefs.h" + +extern "C" { + +#define FREE \ + if (target != NULL) { \ + target->Release(); \ + }\ + if (params != NULL) { \ + params->Release(); \ + }\ + if (defaultParams != NULL) { \ + defaultParams->Release(); \ + }\ + if (face != NULL) { \ + face->Release(); \ + }\ + if (font != NULL) { \ + font->Release(); \ + }\ + if (interop != NULL) { \ + interop->Release(); \ + }\ + if (factory != NULL) { \ + factory->Release(); \ + } + +#define FREE_AND_RETURN \ + FREE\ + return (jlong)0; + +typedef HRESULT (WINAPI *DWriteCreateFactoryType)(DWRITE_FACTORY_TYPE, REFIID, IUnknown**); + +static BOOL checkedForDirectWriteAvailability = FALSE; +static DWriteCreateFactoryType fDWriteCreateFactory = NULL; + +JNIEXPORT jboolean JNICALL +Java_sun_font_FileFontStrike_isDirectWriteAvailable(JNIEnv *env, jclass unused) { + if (!checkedForDirectWriteAvailability) { + checkedForDirectWriteAvailability = TRUE; + HMODULE hDwrite = JDK_LoadSystemLibrary("Dwrite.dll"); + if (hDwrite) { + fDWriteCreateFactory = (DWriteCreateFactoryType)GetProcAddress(hDwrite, "DWriteCreateFactory"); + } + } + return fDWriteCreateFactory != NULL ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jlong JNICALL +Java_sun_font_FileFontStrike__1getGlyphImageFromWindowsUsingDirectWrite +(JNIEnv *env, jobject unused, jstring fontFamily, jint style, jint size, jint glyphCode, jint rotation, + jint measuringMode, jint renderingMode, jfloat clearTypeLevel, jfloat enhancedContrast, jfloat gamma, jint pixelGeometry, + jbyte charset) { + // variables cleared by FREE macro + IDWriteFactory* factory = NULL; + IDWriteGdiInterop* interop = NULL; + IDWriteFont* font = NULL; + IDWriteFontFace* face = NULL; + IDWriteRenderingParams* defaultParams = NULL; + IDWriteRenderingParams* params = NULL; + IDWriteBitmapRenderTarget* target = NULL; + + LOGFONTW lf; + memset(&lf, 0, sizeof(LOGFONTW)); + lf.lfWeight = (style & 1) ? FW_BOLD : FW_NORMAL; + lf.lfItalic = (style & 2) ? TRUE : FALSE; + lf.lfCharSet = (BYTE) charset; + + int nameLen = env->GetStringLength(fontFamily); + if (nameLen >= (sizeof(lf.lfFaceName) / sizeof(lf.lfFaceName[0]))) { + FREE_AND_RETURN + } + env->GetStringRegion(fontFamily, 0, nameLen, lf.lfFaceName); + lf.lfFaceName[nameLen] = '\0'; + + if (fDWriteCreateFactory == NULL) { + FREE_AND_RETURN + } + HRESULT hr = (*fDWriteCreateFactory)(DWRITE_FACTORY_TYPE_SHARED, + __uuidof(IDWriteFactory), + reinterpret_cast(&factory)); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = factory->GetGdiInterop(&interop); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = interop->CreateFontFromLOGFONT(&lf, &font); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = font->CreateFontFace(&face); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = factory->CreateRenderingParams(&defaultParams); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = factory->CreateCustomRenderingParams( + gamma > 0 && gamma <= 256 ? gamma : defaultParams->GetGamma(), + enhancedContrast >= 0 ? enhancedContrast : defaultParams->GetEnhancedContrast(), + clearTypeLevel >= 0 && clearTypeLevel <= 1 ? clearTypeLevel : defaultParams->GetClearTypeLevel(), + pixelGeometry >= 0 && pixelGeometry <= 2 ? (DWRITE_PIXEL_GEOMETRY)pixelGeometry : defaultParams->GetPixelGeometry(), + renderingMode >= 0 && renderingMode <= 6 ? (DWRITE_RENDERING_MODE)renderingMode : defaultParams->GetRenderingMode(), + ¶ms); + if (FAILED(hr)) { + FREE_AND_RETURN + } + + UINT16 indices[] = {(UINT16)glyphCode}; + FLOAT advances[] = {0}; + DWRITE_GLYPH_OFFSET offsets[] = {{0, 0}}; + DWRITE_GLYPH_RUN glyphRun; + glyphRun.fontFace = face; + glyphRun.fontEmSize = (FLOAT)size; + glyphRun.glyphCount = 1; + glyphRun.glyphIndices = indices; + glyphRun.glyphAdvances = advances; + glyphRun.glyphOffsets = offsets; + glyphRun.isSideways = FALSE; + glyphRun.bidiLevel = 0; + + DWRITE_FONT_METRICS fontMetrics; + face->GetMetrics(&fontMetrics); + FLOAT pxPerDU = ((FLOAT)size) / fontMetrics.designUnitsPerEm; + + DWRITE_GLYPH_METRICS metrics[1]; + hr = face->GetDesignGlyphMetrics(indices, 1, metrics, FALSE); + if (FAILED(hr)) { + FREE_AND_RETURN + } + + // trying to derive required bitmap size from glyph metrics (adding several spare pixels on each border) + // if that will fail, we'll perform a second attempt based on the output of DrawGlyphRun + int width = (int)((metrics[0].advanceWidth - metrics[0].leftSideBearing - metrics[0].rightSideBearing) * pxPerDU) + 10; + int height = (int)((metrics[0].advanceHeight - metrics[0].topSideBearing - metrics[0].bottomSideBearing) * pxPerDU) + 10; + int x = (int)(-metrics[0].leftSideBearing * pxPerDU) + 5; + int y = (int)((metrics[0].verticalOriginY - metrics[0].topSideBearing) * pxPerDU) + 5; + float advance = (float)((int)(metrics[0].advanceWidth * pxPerDU + 0.5)); + RECT bbRect; + + DWRITE_MATRIX mx; + switch (rotation) { + case 0: mx.m11 = mx.m22 = 1; mx.m12 = mx.m21 = mx.dx = mx.dy = 0; break; + case 1: mx.m11 = mx.m22 = 0; mx.m12 = -1; mx.m21 = 1; mx.dx = 0; mx.dy = (float)width; break; + case 2: mx.m11 = mx.m22 = -1; mx.m12 = mx.m21 = 0; mx.dx = (float)width; mx.dy = (float)height; break; + case 3: mx.m11 = mx.m22 = 0; mx.m12 = 1; mx.m21 = -1; mx.dx = (float)height; mx.dy = 0; + } + if (rotation == 1 || rotation == 3) { + int tmp = width; + width = height; + height = tmp; + } + float xTransformed = mx.m11 * x - mx.m12 * y + mx.dx; + float yTransformed = -mx.m21 * x + mx.m22 * y + mx.dy; + + for (int attempt = 0; attempt < 2 && target == NULL; attempt++) { + hr = interop->CreateBitmapRenderTarget(NULL, width, height, &target); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = target->SetCurrentTransform(&mx); + if (FAILED(hr)) { + FREE_AND_RETURN + } + hr = target->DrawGlyphRun((FLOAT)x, + (FLOAT)y, + measuringMode >= 0 && measuringMode <= 2 ? (DWRITE_MEASURING_MODE)measuringMode : DWRITE_MEASURING_MODE_NATURAL, + &glyphRun, + params, + RGB(255,255,255), + &bbRect); + if (FAILED(hr) || bbRect.left > bbRect.right || bbRect.top > bbRect.bottom + || attempt > 0 && (bbRect.left < 0 || bbRect.top < 0 || bbRect.right > width || bbRect.bottom > height)) { + FREE_AND_RETURN + } + if (bbRect.left < 0 || bbRect.top < 0 || bbRect.right > width || bbRect.bottom > height) { + target->Release(); + target = NULL; + if (bbRect.right > width) width = bbRect.right; + if (bbRect.bottom > height) height = bbRect.bottom; + if (bbRect.left < 0) { + width -= bbRect.left; + switch (rotation) { + case 0: x -= bbRect.left; break; + case 1: y -= bbRect.left; break; + case 2: x += bbRect.left; break; + case 3: y += bbRect.left; + } + } + if (bbRect.top < 0) { + height -= bbRect.top; + switch (rotation) { + case 0: y -= bbRect.top; break; + case 1: x += bbRect.top; break; + case 2: y += bbRect.top; break; + case 3: x -= bbRect.top; + } + } + } + } + + HDC glyphDC = target->GetMemoryDC(); + HGDIOBJ glyphBitmap = GetCurrentObject(glyphDC, OBJ_BITMAP); + if (glyphBitmap == NULL) { + FREE_AND_RETURN + } + DIBSECTION dibSection; + if (GetObject(glyphBitmap, sizeof(DIBSECTION), &dibSection) == 0) { + FREE_AND_RETURN + } + + int glyphWidth = bbRect.right - bbRect.left; + int glyphHeight = bbRect.bottom - bbRect.top; + int glyphBytesWidth = glyphWidth * 3; + GlyphInfo* glyphInfo = (GlyphInfo*)SAFE_SIZE_STRUCT_ALLOC(malloc, sizeof(GlyphInfo), glyphBytesWidth, glyphHeight); + if (glyphInfo == NULL) { + FREE_AND_RETURN + } + glyphInfo->managed = UNMANAGED_GLYPH; + glyphInfo->cellInfo = NULL; + glyphInfo->image = (unsigned char*)glyphInfo+sizeof(GlyphInfo); + glyphInfo->rowBytes = glyphBytesWidth; + glyphInfo->width = glyphWidth; + glyphInfo->height = glyphHeight; + glyphInfo->subpixelResolutionX = 1; + glyphInfo->subpixelResolutionY = 1; + glyphInfo->format = sun_font_StrikeCache_PIXEL_FORMAT_LCD; + glyphInfo->advanceX = rotation == 0 ? advance : rotation == 2 ? -advance : 0; + glyphInfo->advanceY = rotation == 3 ? advance : rotation == 1 ? -advance : 0; + glyphInfo->topLeftX = bbRect.left - xTransformed; + glyphInfo->topLeftY = bbRect.top - yTransformed; + + int srcRowBytes = width * 4; + unsigned char* srcPtr = (unsigned char*) dibSection.dsBm.bmBits + srcRowBytes * bbRect.top; + unsigned char* destPtr = glyphInfo->image; + for (int y = 0; y < glyphHeight; y++) { + srcPtr += bbRect.left * 4; + for (int x = 0; x < glyphWidth; x++) { + // converting from BGRA to RGB + unsigned char b = *srcPtr++; + unsigned char g = *srcPtr++; + unsigned char r = *srcPtr++; + srcPtr++; + *destPtr++ = r; + *destPtr++ = g; + *destPtr++ = b; + } + srcPtr += (width - bbRect.right) * 4; + } + + FREE + return ptr_to_jlong(glyphInfo); +} + +} // extern "C" \ No newline at end of file diff --git a/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java b/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java index cb630223c49b..356a661d729c 100644 --- a/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java +++ b/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java @@ -294,15 +294,16 @@ static void processEvent(AWTEvent theEvent) { case MouseEvent.MOUSE_MOVED: case MouseEvent.MOUSE_DRAGGED: case FocusEvent.FOCUS_GAINED: + case WindowEvent.WINDOW_ACTIVATED: case WindowEvent.WINDOW_DEACTIVATED: queueComponentEvent((ComponentEvent) theEvent); break; - case WindowEvent.WINDOW_ACTIVATED: - // Dialogs fire WINDOW_ACTIVATED and FOCUS_GAINED events - // before WINDOW_OPENED so we need to add topLevelListeners - // for the dialog when it is first activated to get a - // focus gained event for the focus component in the dialog. + case WindowEvent.WINDOW_GAINED_FOCUS: + // WINDOW_GAINED_FOCUS, WINDOW_ACTIVATED and FOCUS_GAINED events + // are fired before WINDOW_OPENED so we need to add topLevelListeners + // for the window when it is first focused to get a + // focus gained event for the focus component in it. if (theEvent instanceof ComponentEvent) { ComponentEvent ce = (ComponentEvent)theEvent; if (ce.getComponent() instanceof Window) { @@ -313,7 +314,6 @@ static void processEvent(AWTEvent theEvent) { EventQueueMonitor.addTopLevelWindow(ce.getComponent()); } } - queueComponentEvent((ComponentEvent) theEvent); break; // handle WINDOW_OPENED and WINDOW_CLOSED events synchronously diff --git a/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java b/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java index d0a6dac40c86..c8914ea002ac 100644 --- a/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java +++ b/src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java @@ -211,14 +211,17 @@ protected void close(long fd) throws IOException { // checks for the file. private File createAttachFile(int pid) throws IOException { String fn = ".attach_pid" + pid; - String path = "/proc/" + pid + "/cwd/" + fn; - File f = new File(path); - try { - f.createNewFile(); - } catch (IOException x) { - f = new File(tmpdir, fn); - f.createNewFile(); + if (!attachOnlyInTmp()) { + String path = "/proc/" + pid + "/cwd/" + fn; + File f = new File(path); + try { + f.createNewFile(); + return f; + } catch (IOException x) { + } } + File f = new File(tmpdir, fn); + f.createNewFile(); return f; } diff --git a/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java b/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java index 81d4fd259ed0..98b754048b61 100644 --- a/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java +++ b/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java @@ -221,16 +221,19 @@ private File findSocketFile(int pid, int ns_pid) throws IOException { // checks for the file. private File createAttachFile(int pid, int ns_pid) throws IOException { String fn = ".attach_pid" + ns_pid; - String path = "/proc/" + pid + "/cwd/" + fn; - File f = new File(path); - try { - // Do not canonicalize the file path, or we will fail to attach to a VM in a container. - f.createNewFile(); - } catch (IOException x) { - String root = findTargetProcessTmpDirectory(pid, ns_pid); - f = new File(root, fn); - f.createNewFile(); + if (!attachOnlyInTmp()) { + String path = "/proc/" + pid + "/cwd/" + fn; + File f = new File(path); + try { + // Do not canonicalize the file path, or we will fail to attach to a VM in a container. + f.createNewFile(); + return f; + } catch (IOException x) { + } } + String root = findTargetProcessTmpDirectory(pid, ns_pid); + File f = new File(root, fn); + f.createNewFile(); return f; } diff --git a/src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java b/src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java index 93656cdf5138..f6962104c8e6 100644 --- a/src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java +++ b/src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java @@ -498,4 +498,12 @@ protected static void checkNulls(Object... args) { } } } + + boolean attachOnlyInTmp() { + try { + return Boolean.getBoolean("sun.tools.attach.tmp.only"); + } catch (Exception e) { + return false; + } + } } diff --git a/src/jetbrains.api/src/com/jetbrains/AccessibleAnnouncer.java b/src/jetbrains.api/src/com/jetbrains/AccessibleAnnouncer.java new file mode 100644 index 000000000000..19afe948c270 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/AccessibleAnnouncer.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import javax.accessibility.Accessible; + +/** + * This interface provides the ability to speak a given string using screen readers. + * + */ +public interface AccessibleAnnouncer { + + /*CONST sun.swing.AccessibleAnnouncer.ANNOUNCE_**/ + + /** + * This method makes an announcement with the specified priority from an accessible to which the announcing relates + * + * @param a an accessible to which the announcing relates + * @param str string for announcing + * @param priority priority for announcing + */ + void announce(Accessible a, final String str, final int priority); +} diff --git a/src/jetbrains.api/src/com/jetbrains/CustomWindowDecoration.java b/src/jetbrains.api/src/com/jetbrains/CustomWindowDecoration.java new file mode 100644 index 000000000000..6ec882571c09 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/CustomWindowDecoration.java @@ -0,0 +1,85 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.util.List; +import java.util.Map; + +/** + * Custom window decoration allows merging of window content with native title bar, + * which is usually done by treating title bar as part of client area, but with some + * special behavior like dragging or maximizing on double click. + * @implNote Behavior is platform-dependent, only macOS and Windows are supported. + */ +@Deprecated(forRemoval=true) +public interface CustomWindowDecoration { + + /*CONST java.awt.Window.*_HIT_SPOT*/ + /*CONST java.awt.Window.*_BUTTON*/ + /*CONST java.awt.Window.MENU_BAR*/ + /*CONST java.awt.Window.DRAGGABLE_AREA*/ + + /** + * Turn custom decoration on or off, {@link #setCustomDecorationTitleBarHeight(Window, int)} + * must be called to configure title bar height. + */ + void setCustomDecorationEnabled(Window window, boolean enabled); + /** + * @see #setCustomDecorationEnabled(Window, boolean) + */ + boolean isCustomDecorationEnabled(Window window); + + /** + * Set list of hit test spots for a custom decoration. + * Hit test spot is a special area inside custom-decorated title bar. + * Each hit spot type has its own (probably platform-specific) behavior: + *

            + *
          • {@link #NO_HIT_SPOT} - default title bar area, can be dragged to move a window, maximizes on double-click
          • + *
          • {@link #OTHER_HIT_SPOT} - generic hit spot, window cannot be moved with drag or maximized on double-click
          • + *
          • {@link #MINIMIZE_BUTTON} - like {@link #OTHER_HIT_SPOT} but displays tooltip on Windows when hovered
          • + *
          • {@link #MAXIMIZE_BUTTON} - like {@link #OTHER_HIT_SPOT} but displays tooltip / snap layout menu on Windows when hovered
          • + *
          • {@link #CLOSE_BUTTON} - like {@link #OTHER_HIT_SPOT} but displays tooltip on Windows when hovered
          • + *
          • {@link #MENU_BAR} - currently no different from {@link #OTHER_HIT_SPOT}
          • + *
          • {@link #DRAGGABLE_AREA} - special type, moves window when dragged, but doesn't maximize on double-click
          • + *
          + * @param spots pairs of hit spot shapes with corresponding types. + * @implNote Hit spots are tested in sequence, so in case of overlapping areas, first found wins. + */ + void setCustomDecorationHitTestSpots(Window window, List> spots); + /** + * @see #setCustomDecorationHitTestSpots(Window, List) + */ + List> getCustomDecorationHitTestSpots(Window window); + + /** + * Set height of custom window decoration, won't take effect until custom decoration + * is enabled via {@link #setCustomDecorationEnabled(Window, boolean)}. + */ + void setCustomDecorationTitleBarHeight(Window window, int height); + /** + * @see #setCustomDecorationTitleBarHeight(Window, int) + */ + int getCustomDecorationTitleBarHeight(Window window); +} diff --git a/src/jetbrains.api/src/com/jetbrains/DesktopActions.java b/src/jetbrains.api/src/com/jetbrains/DesktopActions.java new file mode 100644 index 000000000000..f2efcb477a26 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/DesktopActions.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.io.File; +import java.io.IOException; +import java.net.URI; + +public interface DesktopActions { + + void setHandler(Handler handler); + + interface Handler { + default void open(File file) throws IOException { throw new UnsupportedOperationException(); } + default void edit(File file) throws IOException { throw new UnsupportedOperationException(); } + default void print(File file) throws IOException { throw new UnsupportedOperationException(); } + default void mail(URI mailtoURL) throws IOException { throw new UnsupportedOperationException(); } + default void browse(URI uri) throws IOException { throw new UnsupportedOperationException(); } + } + +} diff --git a/src/jetbrains.api/src/com/jetbrains/ExtendedGlyphCache.java b/src/jetbrains.api/src/com/jetbrains/ExtendedGlyphCache.java new file mode 100644 index 000000000000..32f000d43d71 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/ExtendedGlyphCache.java @@ -0,0 +1,33 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; + +@Deprecated(forRemoval=true) +public interface ExtendedGlyphCache { + Dimension getSubpixelResolution(); +} diff --git a/src/jetbrains.api/src/com/jetbrains/FontExtensions.java b/src/jetbrains.api/src/com/jetbrains/FontExtensions.java new file mode 100644 index 000000000000..9c4a6cc679c6 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/FontExtensions.java @@ -0,0 +1,106 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.io.Serial; +import java.util.Arrays; +import java.util.Map; +import java.util.Optional; +import java.util.TreeMap; + +public interface FontExtensions { + public static final int FEATURE_ON = 1; + public static final int FEATURE_OFF = 0; + + /** + * The list of all supported features. For feature's description look at + * documentation
          + * The following features: KERN, LIGA, CALT are missing intentionally. These features will be added automatically + * by adding {@link java.awt.font.TextAttribute} to {@link java.awt.Font}: + *
            + *
          • Attribute {@link java.awt.font.TextAttribute#KERNING} manages KERN feature
          • + *
          • Attribute {@link java.awt.font.TextAttribute#LIGATURES} manages LIGA and CALT features
          • + *
          + */ + enum FeatureTag { + AALT, ABVF, ABVM, ABVS, AFRC, AKHN, BLWF, BLWM, BLWS, CASE, CCMP, CFAR, CHWS, CJCT, CLIG, CPCT, CPSP, CSWH, CURS, + CV01, CV02, CV03, CV04, CV05, CV06, CV07, CV08, CV09, CV10, CV11, CV12, CV13, CV14, CV15, CV16, CV17, CV18, CV19, + CV20, CV21, CV22, CV23, CV24, CV25, CV26, CV27, CV28, CV29, CV30, CV31, CV32, CV33, CV34, CV35, CV36, CV37, CV38, + CV39, CV40, CV41, CV42, CV43, CV44, CV45, CV46, CV47, CV48, CV49, CV50, CV51, CV52, CV53, CV54, CV55, CV56, CV57, + CV58, CV59, CV60, CV61, CV62, CV63, CV64, CV65, CV66, CV67, CV68, CV69, CV70, CV71, CV72, CV73, CV74, CV75, CV76, + CV77, CV78, CV79, CV80, CV81, CV82, CV83, CV84, CV85, CV86, CV87, CV88, CV89, CV90, CV91, CV92, CV93, CV94, CV95, + CV96, CV97, CV98, CV99, C2PC, C2SC, DIST, DLIG, DNOM, DTLS, EXPT, FALT, FIN2, FIN3, FINA, FLAC, FRAC, FWID, HALF, + HALN, HALT, HIST, HKNA, HLIG, HNGL, HOJO, HWID, INIT, ISOL, ITAL, JALT, JP78, JP83, JP90, JP04, LFBD, LJMO, LNUM, + LOCL, LTRA, LTRM, MARK, MED2, MEDI, MGRK, MKMK, MSET, NALT, NLCK, NUKT, NUMR, ONUM, OPBD, ORDN, ORNM, PALT, PCAP, + PKNA, PNUM, PREF, PRES, PSTF, PSTS, PWID, QWID, RAND, RCLT, RKRF, RLIG, RPHF, RTBD, RTLA, RTLM, RUBY, RVRN, SALT, + SINF, SIZE, SMCP, SMPL, SS01, SS02, SS03, SS04, SS05, SS06, SS07, SS08, SS09, SS10, SS11, SS12, SS13, SS14, SS15, + SS16, SS17, SS18, SS19, SS20, SSTY, STCH, SUBS, SUPS, SWSH, TITL, TJMO, TNAM, TNUM, TRAD, TWID, UNIC, VALT, VATU, + VCHW, VERT, VHAL, VJMO, VKNA, VKRN, VPAL, VRT2, VRTR, ZERO; + + public String getName() { + return toString().toLowerCase(); + } + + public static Optional getFeatureTag(String str) { + try { + return Optional.of(FeatureTag.valueOf(str.toUpperCase())); + } catch (IllegalArgumentException ignored) { + return Optional.empty(); + } + } + } + + final class Features extends TreeMap { + @Serial + private static final long serialVersionUID = 1L; + + public Features(Map map) { + super(map); + } + + public Features(FontExtensions.FeatureTag... features) { + Arrays.stream(features).forEach(tag -> put(tag, FontExtensions.FEATURE_ON)); + } + + private TreeMap getAsTreeMap() { + TreeMap res = new TreeMap<>(); + forEach((tag, value) -> res.put(tag.getName(), value)); + return res; + } + } + + /** + * This method derives a new {@link java.awt.Font} object with certain set of {@link FeatureTag} + * and correspoinding values + * + * @param font basic font + * @param features set of OpenType's features wrapped inside {@link Features} + */ + Font deriveFontWithFeatures(Font font, Features features); + + Dimension getSubpixelResolution(); +} \ No newline at end of file diff --git a/src/jetbrains.api/src/com/jetbrains/FontMetricsAccessor.java b/src/jetbrains.api/src/com/jetbrains/FontMetricsAccessor.java new file mode 100644 index 000000000000..90d2a3c7a486 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/FontMetricsAccessor.java @@ -0,0 +1,128 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.image.BufferedImage; + +/** + * Provides convenience methods to access {@link FontMetrics} instances, and obtain character advances from them without + * rounding. Also provides an (unsafe) way to override character advances in those instances with arbitrary specified + * values. + */ +public interface FontMetricsAccessor { + /** + * Returns a {@link FontMetrics} instance for the given {@link Font} and {@link FontRenderContext}. This is supposed + * to be the same instance as returned by the public API methods ({@link Graphics#getFontMetrics()}, + * {@link Graphics#getFontMetrics(Font)} and {@link Component#getFontMetrics(Font)}) in the same context. + */ + FontMetrics getMetrics(Font font, FontRenderContext context); + + /** + * Returns not rounded value for the character's advance. It's not accessible directly via public + * {@link FontMetrics} API, one can only extract it from one of the {@code getStringBounds} methods' output. + */ + float codePointWidth(FontMetrics metrics, int codePoint); + + /** + * Allows to override advance values returned by the specified {@link FontMetrics} instance. It's not generally + * guaranteed the invocation of this method actually has the desired effect. One can verify whether it's the case + * using {@link #hasOverride(FontMetrics)} method. + *

          + * A subsequent invocation of this method will override any previous invocations. Passing {@code null} as the + * {@code overrider} value will remove any override, if it was set up previously. + *

          + * While this method operates on a specific {@link FontMetrics} instance, it's expected that overriding will have + * effect regardless of the method font metrics are accessed, for all future character advance requests. This is + * feasible, as JDK implementation generally uses the same cached {@link FontMetrics} instance in identical + * contexts. + *

          + * The method doesn't provides any concurrency guarantees, i.e. the override isn't guaranteed to be immediately + * visible for font metrics readers in other threads. + *

          + * WARNING. This method can break the consistency of a UI application, as previously calculated/returned advance + * values can already be used/cached by some UI components. It's the calling code's responsibility to remediate such + * consequences (e.g. re-validating all components which use the relevant font might be required). + */ + void setOverride(FontMetrics metrics, Overrider overrider); + + /** + * Tells whether character advances returned by the specified {@link FontMetrics} instance are overridden using the + * previous {@link #setOverride(FontMetrics, Overrider)} call. + */ + boolean hasOverride(FontMetrics metrics); + + /** + * Removes all overrides set previously by {@link #setOverride(FontMetrics, Overrider)} invocations. + */ + void removeAllOverrides(); + + /** + * @see #setOverride(FontMetrics, Overrider) + */ + interface Overrider { + /** + * Returning {@code NaN} means the default (not overridden) value should be used. + */ + float charWidth(int codePoint); + } + + class __Fallback implements FontMetricsAccessor { + private final Graphics2D g; + + __Fallback() { + g = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB).createGraphics(); + } + + @Override + public FontMetrics getMetrics(Font font, FontRenderContext context) { + synchronized (g) { + g.setTransform(context.getTransform()); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, context.getAntiAliasingHint()); + g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, context.getFractionalMetricsHint()); + return g.getFontMetrics(font); + } + } + + @Override + public float codePointWidth(FontMetrics metrics, int codePoint) { + String s = new String(new int[]{codePoint}, 0, 1); + return (float) metrics.getFont().getStringBounds(s, metrics.getFontRenderContext()).getWidth(); + } + + @Override + public void setOverride(FontMetrics metrics, Overrider overrider) {} + + @Override + public boolean hasOverride(FontMetrics metrics) { + return false; + } + + @Override + public void removeAllOverrides() {} + } +} diff --git a/src/jetbrains.api/src/com/jetbrains/FontOpenTypeFeatures.java b/src/jetbrains.api/src/com/jetbrains/FontOpenTypeFeatures.java new file mode 100644 index 000000000000..01559a4dec81 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/FontOpenTypeFeatures.java @@ -0,0 +1,39 @@ +/* + * Copyright 2024 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.util.Set; + +@Deprecated(forRemoval=true) +public interface FontOpenTypeFeatures { + /** + * This method returns set of OpenType's features converted to String supported by current font + * + * @param font basic font + */ + Set getAvailableFeatures(Font font); +} diff --git a/src/jetbrains.api/src/com/jetbrains/GraphicsUtils.java b/src/jetbrains.api/src/com/jetbrains/GraphicsUtils.java new file mode 100644 index 000000000000..902b0421f0f2 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/GraphicsUtils.java @@ -0,0 +1,38 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.awt.geom.Rectangle2D; + +public interface GraphicsUtils { + Graphics2D createConstrainableGraphics(Graphics2D graphics2D, + ConstrainableGraphics2D constrainable); + + public interface ConstrainableGraphics2D { + Object getDestination(); + void constrain(Rectangle2D region); + void constrain(int x, int y, int w, int h); + } +} diff --git a/src/jetbrains.api/src/com/jetbrains/JBR.java b/src/jetbrains.api/src/com/jetbrains/JBR.java new file mode 100644 index 000000000000..bbfc953a5b44 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/JBR.java @@ -0,0 +1,133 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.lang.invoke.MethodHandles; +import java.lang.reflect.InvocationTargetException; + +/** + * This class is an entry point into JBR API. + * JBR API is a collection of services, classes, interfaces, etc., + * which require tight interaction with JRE and therefore are implemented inside JBR. + *

          JBR API consists of two parts:
          + *
            + *
          • Client side - {@code jetbrains.api} module, mostly containing interfaces
          • + *
          • JBR side - actual implementation code inside JBR
          • + *
          + * Client and JBR side are linked dynamically at runtime and do not have to be of the same version. + * In some cases (e.g. running on different JRE or old JBR) system will not be able to find + * implementation for some services, so you'll need a fallback behavior for that case. + *

          Simple usage example:

          + *
          {@code
          + * if (JBR.isSomeServiceSupported()) {
          + *     JBR.getSomeService().doSomething();
          + * } else {
          + *     planB();
          + * }
          + * }
          + * @implNote JBR API is initialized on first access to this class (in static initializer). + * Actual implementation is linked on demand, when corresponding service is requested by client. + */ +public class JBR { + + private static final ServiceApi api; + private static final Exception bootstrapException; + static { + ServiceApi a = null; + Exception exception = null; + try { + a = (ServiceApi) Class.forName("com.jetbrains.bootstrap.JBRApiBootstrap") + .getMethod("bootstrap", MethodHandles.Lookup.class) + .invoke(null, MethodHandles.lookup()); + } catch (InvocationTargetException e) { + Throwable t = e.getCause(); + if (t instanceof Error error) throw error; + else throw new Error(t); + } catch (IllegalAccessException | NoSuchMethodException | ClassNotFoundException e) { + exception = e; + } + api = a; + bootstrapException = exception; + } + + private JBR() {} + + private static T getService(Class interFace, FallbackSupplier fallback) { + T service = getService(interFace); + try { + return service != null ? service : fallback != null ? fallback.get() : null; + } catch (Throwable ignore) { + return null; + } + } + + static T getService(Class interFace) { + return api == null ? null : api.getService(interFace); + } + + /** + * @return true when running on JBR which implements JBR API + */ + public static boolean isAvailable() { + return api != null; + } + + /** + * @return JBR API version in form {@code JBR.MAJOR.MINOR.PATCH} + * @implNote This is an API version, which comes with client application, + * it has nothing to do with JRE it runs on. + */ + public static String getApiVersion() { + return "/*API_VERSION*/"; + } + + /** + * Internal API interface, contains most basic methods for communication between client and JBR. + */ + private interface ServiceApi { + + T getService(Class interFace); + } + + @FunctionalInterface + private interface FallbackSupplier { + T get() throws Throwable; + } + + // ========================== Generated metadata ========================== + + /** + * Generated client-side metadata, needed by JBR when linking the implementation. + */ + private static final class Metadata { + private static final String[] KNOWN_SERVICES = {/*KNOWN_SERVICES*/}; + private static final String[] KNOWN_PROXIES = {/*KNOWN_PROXIES*/}; + } + + // ======================= Generated static methods ======================= + + /*GENERATED_METHODS*/ +} diff --git a/src/jetbrains.api/src/com/jetbrains/JBRFileDialog.java b/src/jetbrains.api/src/com/jetbrains/JBRFileDialog.java new file mode 100644 index 000000000000..1a9446a161a9 --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/JBRFileDialog.java @@ -0,0 +1,61 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; + +public interface JBRFileDialog { + + /*CONST com.jetbrains.desktop.JBRFileDialog.*_HINT*/ + + static JBRFileDialog get(FileDialog dialog) { + if (JBRFileDialogService.INSTANCE == null) return null; + else return JBRFileDialogService.INSTANCE.getFileDialog(dialog); + } + + /** + * Set JBR-specific file dialog hints: + *
            + *
          • SELECT_FILES_HINT, SELECT_DIRECTORIES_HINT - Whether to select files, directories or both + * (used when common file dialogs are enabled on Windows, or on macOS), + * both unset bits are treated as a default platform-specific behavior
          • + *
          • CREATE_DIRECTORIES_HINT - Whether to allow creating directories or not (used on macOS)
          • + *
          + */ + void setHints(int hints); + + /** + * @see #setHints(int) + */ + int getHints(); + + void setLocalizationStrings(String openButtonText, String selectFolderButtonText); +} + +interface JBRFileDialogService { + JBRFileDialogService INSTANCE = JBR.getService(JBRFileDialogService.class); + JBRFileDialog getFileDialog(FileDialog dialog); +} diff --git a/src/jetbrains.api/src/com/jetbrains/Jstack.java b/src/jetbrains.api/src/com/jetbrains/Jstack.java new file mode 100644 index 000000000000..702e8a808e9f --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/Jstack.java @@ -0,0 +1,46 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.util.function.Supplier; + +public interface Jstack { + /** + * Specifies a supplier of additional information to be included into + * the output of {@code jstack}. The String supplied will be included + * as-is with no header surrounded only with line breaks. + * + * {@code infoSupplier} will be invoked on an unspecified thread that + * must not be left blocked for a long time. + * + * Only one supplier is allowed, so subsequent calls to + * {@code includeInfoFrom} will overwrite the previously specified supplier. + * + * @param infoSupplier a supplier of {@code String} values to be + * included into jstack's output. If {@code null}, + * then the previously registered supplier is removed + * (if any) and no extra info will be included. + */ + void includeInfoFrom(Supplier infoSupplier); +} diff --git a/src/jetbrains.api/src/com/jetbrains/ProjectorUtils.java b/src/jetbrains.api/src/com/jetbrains/ProjectorUtils.java new file mode 100644 index 000000000000..2cddfac79b0b --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/ProjectorUtils.java @@ -0,0 +1,32 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.util.function.Supplier; + +public interface ProjectorUtils { + void setLocalGraphicsEnvironmentProvider(Supplier geProvider); + void overrideGraphicsEnvironment(GraphicsEnvironment overriddenGE); +} diff --git a/src/jetbrains.api/src/com/jetbrains/RoundedCornersManager.java b/src/jetbrains.api/src/com/jetbrains/RoundedCornersManager.java new file mode 100644 index 000000000000..4810631e9a8b --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/RoundedCornersManager.java @@ -0,0 +1,46 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.Window; + +/** + * This manager allows decorate awt Window with rounded corners. + * Appearance depends from operating system. + */ +public interface RoundedCornersManager { + /** + * @param params for macOS is Float object with radius or + * Array with {Float for radius, Integer for border width, java.awt.Color for border color}. + * + * @param params for Windows 11 is String with values: + * "default" - let the system decide whether or not to round window corners, + * "none" - never round window corners, + * "full" - round the corners if appropriate, + * "small" - round the corners if appropriate, with a small radius. + */ + void setRoundedCorners(Window window, Object params); +} diff --git a/src/jetbrains.api/src/com/jetbrains/WindowDecorations.java b/src/jetbrains.api/src/com/jetbrains/WindowDecorations.java new file mode 100644 index 000000000000..06c523f3082c --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/WindowDecorations.java @@ -0,0 +1,177 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.*; +import java.util.Map; + +/** + * Window decorations consist of title bar, window controls and border. + * @see WindowDecorations.CustomTitleBar + */ +public interface WindowDecorations { + + /** + * If {@code customTitleBar} is not null, system-provided title bar is removed and client area is extended to the + * top of the frame with window controls painted over the client area. + * {@code customTitleBar=null} resets to the default appearance with system-provided title bar. + * @see CustomTitleBar + * @see #createCustomTitleBar() + */ + void setCustomTitleBar(Frame frame, CustomTitleBar customTitleBar); + + /** + * If {@code customTitleBar} is not null, system-provided title bar is removed and client area is extended to the + * top of the dialog with window controls painted over the client area. + * {@code customTitleBar=null} resets to the default appearance with system-provided title bar. + * @see CustomTitleBar + * @see #createCustomTitleBar() + */ + void setCustomTitleBar(Dialog dialog, CustomTitleBar customTitleBar); + + /** + * You must {@linkplain CustomTitleBar#setHeight(float) set title bar height} before adding it to a window. + * @see CustomTitleBar + * @see #setCustomTitleBar(Frame, CustomTitleBar) + * @see #setCustomTitleBar(Dialog, CustomTitleBar) + */ + CustomTitleBar createCustomTitleBar(); + + /** + * Custom title bar allows merging of window content with native title bar, + * which is done by treating title bar as part of client area, but with some + * special behavior like dragging or maximizing on double click. + * Custom title bar has {@linkplain CustomTitleBar#getHeight() height} and controls. + * @implNote Behavior is platform-dependent, only macOS and Windows are supported. + * @see #setCustomTitleBar(Frame, CustomTitleBar) + */ + interface CustomTitleBar { + + /** + * @return title bar height, measured in pixels from the top of client area, i.e. excluding top frame border. + */ + float getHeight(); + + /** + * @param height title bar height, measured in pixels from the top of client area, + * i.e. excluding top frame border. Must be > 0. + */ + void setHeight(float height); + + /** + * @see #putProperty(String, Object) + */ + Map getProperties(); + + /** + * @see #putProperty(String, Object) + */ + void putProperties(Map m); + + /** + * Windows & macOS properties: + *
            + *
          • {@code controls.visible} : {@link Boolean} - whether title bar controls + * (minimize/maximize/close buttons) are visible, default = true.
          • + *
          + * Windows properties: + *
            + *
          • {@code controls.width} : {@link Number} - width of block of buttons (not individual buttons). + * Note that dialogs have only one button, while frames usually have 3 of them.
          • + *
          • {@code controls.dark} : {@link Boolean} - whether to use dark or light color theme + * (light or dark icons respectively).
          • + *
          • {@code controls..} : {@link Color} - precise control over button colors, + * where {@code } is one of: + *
            • {@code foreground}
            • {@code background}
            + * and {@code } is one of: + *
              + *
            • {@code normal}
            • + *
            • {@code hovered}
            • + *
            • {@code pressed}
            • + *
            • {@code disabled}
            • + *
            • {@code inactive}
            • + *
            + *
          + */ + void putProperty(String key, Object value); + + /** + * @return space occupied by title bar controls on the left (px) + */ + float getLeftInset(); + /** + * @return space occupied by title bar controls on the right (px) + */ + float getRightInset(); + + /** + * By default, any component which has no cursor or mouse event listeners set is considered transparent for + * native title bar actions. That is, dragging simple JPanel in title bar area will drag the + * window, but dragging a JButton will not. Adding mouse listener to a component will prevent any native actions + * inside bounds of that component. + *

          + * This method gives you precise control of whether to allow native title bar actions or not. + *

            + *
          • {@code client=true} means that mouse is currently over a client area. Native title bar behavior is disabled.
          • + *
          • {@code client=false} means that mouse is currently over a non-client area. Native title bar behavior is enabled.
          • + *
          + * Intended usage: + *
            + *
          • This method must be called in response to all {@linkplain java.awt.event.MouseEvent mouse events} + * except {@link java.awt.event.MouseEvent#MOUSE_EXITED} and {@link java.awt.event.MouseEvent#MOUSE_WHEEL}.
          • + *
          • This method is called per-event, i.e. when component has multiple listeners, you only need to call it once.
          • + *
          • If this method hadn't been called, title bar behavior is reverted back to default upon processing the event.
          • + *
          + * Note that hit test value is relevant only for title bar area, e.g. calling + * {@code forceHitTest(false)} will not make window draggable via non-title bar area. + * + *

          Example:

          + * Suppose you have a {@code JPanel} in the title bar area. You want it to respond to right-click for + * some popup menu, but also retain native drag and double-click behavior. + *
          +         *     CustomTitleBar titlebar = ...;
          +         *     JPanel panel = ...;
          +         *     MouseAdapter adapter = new MouseAdapter() {
          +         *         private void hit() { titlebar.forceHitTest(false); }
          +         *         public void mouseClicked(MouseEvent e) {
          +         *             hit();
          +         *             if (e.getButton() == MouseEvent.BUTTON3) ...;
          +         *         }
          +         *         public void mousePressed(MouseEvent e) { hit(); }
          +         *         public void mouseReleased(MouseEvent e) { hit(); }
          +         *         public void mouseEntered(MouseEvent e) { hit(); }
          +         *         public void mouseDragged(MouseEvent e) { hit(); }
          +         *         public void mouseMoved(MouseEvent e) { hit(); }
          +         *     };
          +         *     panel.addMouseListener(adapter);
          +         *     panel.addMouseMotionListener(adapter);
          +         * 
          + */ + void forceHitTest(boolean client); + + Window getContainingWindow(); + } +} diff --git a/src/jetbrains.api/src/com/jetbrains/WindowMove.java b/src/jetbrains.api/src/com/jetbrains/WindowMove.java new file mode 100644 index 000000000000..60d80c80c4db --- /dev/null +++ b/src/jetbrains.api/src/com/jetbrains/WindowMove.java @@ -0,0 +1,53 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import java.awt.Window; + +public interface WindowMove { + /** + * Starts moving the top-level parent window of the given window together with the mouse pointer. + * The intended use is to facilitate the implementation of window management similar to the way + * it is done natively on the platform. + * + * Preconditions for calling this method: + *
            + *
          • WM supports _NET_WM_MOVE_RESIZE (this is checked automatically when an implementation + * of this interface is obtained).
          • + *
          • Mouse pointer is within this window's bounds.
          • + *
          • The mouse button specified by {@code mouseButton} is pressed.
          • + *
          + * + * Calling this method will make the window start moving together with the mouse pointer until + * the specified mouse button is released or Esc is pressed. The conditions for cancelling + * the move may differ between WMs. + * + * @param mouseButton indicates the mouse button that was pressed to start moving the window; + * must be one of {@code MouseEvent.BUTTON1}, {@code MouseEvent.BUTTON2}, + * or {@code MouseEvent.BUTTON3}. + */ + void startMovingTogetherWithMouse(Window window, int mouseButton); +} diff --git a/src/jetbrains.api/src/module-info.java b/src/jetbrains.api/src/module-info.java new file mode 100644 index 000000000000..e103e1b859b6 --- /dev/null +++ b/src/jetbrains.api/src/module-info.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +module jetbrains.api { + exports com.jetbrains; + + requires static transitive java.desktop; +} \ No newline at end of file diff --git a/src/jetbrains.api/tools/CheckVersion.java b/src/jetbrains.api/tools/CheckVersion.java new file mode 100644 index 000000000000..6cd7e01b90df --- /dev/null +++ b/src/jetbrains.api/tools/CheckVersion.java @@ -0,0 +1,127 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.function.Function; + +public class CheckVersion { + private static final Map> FILE_TRANSFORMERS = Map.of( + "com/jetbrains/JBR.java", c -> { + // Exclude API version from hash calculation + int versionMethodIndex = c.indexOf("getApiVersion()"); + int versionStartIndex = c.indexOf("\"", versionMethodIndex) + 1; + int versionEndIndex = c.indexOf("\"", versionStartIndex); + return c.substring(0, versionStartIndex) + c.substring(versionEndIndex); + } + ); + + private static Path gensrc; + + /** + *
            + *
          • $0 - absolute path to {@code JetBrainsRuntime/src/jetbrains.api} dir
          • + *
          • $1 - absolute path to gensrc dir ({@code JetBrainsRuntime/build//jbr-api/gensrc})
          • + *
          • $2 - true if hash mismatch is an error
          • + *
          + */ + public static void main(String[] args) throws IOException, NoSuchAlgorithmException { + Path versionFile = Path.of(args[0]).resolve("version.properties"); + gensrc = Path.of(args[1]); + boolean error = args[2].equals("true"); + + Properties props = new Properties(); + props.load(Files.newInputStream(versionFile)); + String hash = SourceHash.calculate(); + + if (hash.equals(props.getProperty("HASH"))) return; + System.err.println("================================================================================"); + if (error) { + System.err.println("Error: jetbrains.api code was changed, hash and API version must be updated in " + versionFile); + } else { + System.err.println("Warning: jetbrains.api code was changed, " + + "update hash and increment API version in " + versionFile + " before committing these changes"); + } + System.err.println("HASH = " + hash); + if (!error) System.err.println("DO NOT COMMIT YOUR CHANGES WITH THIS WARNING"); + System.err.println("================================================================================"); + if (error) System.exit(-1); + } + + private static class SourceHash { + + private static String calculate() throws NoSuchAlgorithmException, IOException { + MessageDigest hash = MessageDigest.getInstance("MD5"); + calculate(gensrc, hash); + byte[] digest = hash.digest(); + StringBuilder result = new StringBuilder(); + for (byte b : digest) { + result.append(String.format("%X", b)); + } + return result.toString(); + } + + private static void calculate(Path dir, MessageDigest hash) throws IOException { + for (Entry f : findFiles(dir)) { + hash.update(f.name.getBytes(StandardCharsets.UTF_8)); + hash.update(f.content.getBytes(StandardCharsets.UTF_8)); + } + } + + private static List findFiles(Path dir) throws IOException { + List files = new ArrayList<>(); + FileVisitor fileFinder = new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + try { + Path rel = dir.relativize(file); + StringBuilder name = new StringBuilder(); + for (int i = 0; i < rel.getNameCount(); i++) { + if (!name.isEmpty()) name.append('/'); + name.append(rel.getName(i)); + } + String content = Files.readString(file); + String fileName = name.toString(); + files.add(new Entry(FILE_TRANSFORMERS.getOrDefault(fileName, c -> c).apply(content), fileName)); + return FileVisitResult.CONTINUE; + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + }; + Files.walkFileTree(dir, fileFinder); + files.sort(Comparator.comparing(Entry::name)); + return files; + } + + private record Entry(String content, String name) {} + } +} diff --git a/src/jetbrains.api/tools/Gensrc.java b/src/jetbrains.api/tools/Gensrc.java new file mode 100644 index 000000000000..698be1640549 --- /dev/null +++ b/src/jetbrains.api/tools/Gensrc.java @@ -0,0 +1,311 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.nio.file.StandardOpenOption.*; +import static java.util.regex.Pattern.compile; + +/** + * Codegen script for {@code jetbrains.api} module. + * It produces "main" {@link com.jetbrains.JBR} class from template by + * inspecting interfaces and implementation code and inserting + * static utility methods for public services as well as some metadata + * needed by JBR at runtime. + */ +public class Gensrc { + + private static Path srcroot, src, gensrc; + private static String apiVersion; + private static JBRModules modules; + + /** + *
            + *
          • $0 - absolute path to {@code JetBrainsRuntime/src} dir
          • + *
          • $1 - absolute path to jbr-api output dir ({@code JetBrainsRuntime/build//jbr-api})
          • + *
          • $2 - {@code JBR} part of API version
          • + *
          + */ + public static void main(String[] args) throws IOException { + srcroot = Path.of(args[0]); + Path module = srcroot.resolve("jetbrains.api"); + src = module.resolve("src"); + Path output = Path.of(args[1]); + gensrc = output.resolve("gensrc"); + Files.createDirectories(gensrc); + + Properties props = new Properties(); + props.load(Files.newInputStream(module.resolve("version.properties"))); + apiVersion = args[2] + "." + props.getProperty("VERSION"); + Files.writeString(output.resolve("jbr-api.version"), apiVersion, + CREATE, WRITE, TRUNCATE_EXISTING); + + modules = new JBRModules(); + generateFiles(); + } + + private static void generateFiles() throws IOException { + Files.walkFileTree(src, new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + try { + Path rel = src.relativize(file); + Path output = gensrc.resolve(rel); + Files.createDirectories(output.getParent()); + String content = generateContent(file.getFileName().toString(), Files.readString(file)); + Files.writeString(output, content, CREATE, WRITE, TRUNCATE_EXISTING); + return FileVisitResult.CONTINUE; + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + }); + } + + private static String generateContent(String fileName, String content) throws IOException { + return switch (fileName) { + case "JBR.java" -> JBR.generate(content); + default -> generate(content); + }; + } + + private static String generate(String content) throws IOException { + Pattern pattern = compile("/\\*CONST ((?:[a-zA-Z0-9]+\\.)+)([a-zA-Z0-9_*]+)\\s*\\*/"); + for (;;) { + Matcher matcher = pattern.matcher(content); + if (!matcher.find()) return content; + String placeholder = matcher.group(0), file = matcher.group(1), name = matcher.group(2); + file = file.substring(0, file.length() - 1).replace('.', '/') + ".java"; + List statements = new ArrayList<>(); + for (Path module : modules.paths) { + Path f = module.resolve("share/classes").resolve(file); + if (Files.exists(f)) { + Pattern namePattern = compile(name.replaceAll("\\*", "\\\\w+")); + Pattern statementPattern = compile( + "((?:(?:MODS) ){2,3})([a-zA-Z0-9]+) (FIELD(?:, FIELD)*);" + .replaceAll("MODS", "public|protected|private|static|final") + .replaceAll("FIELD", "\\\\w+ = [\\\\w\"']+ ") + .replaceAll(" ", "\\\\s+") + .replaceAll(" ", "\\\\s*") + ); + Matcher statementMatcher = statementPattern.matcher(Files.readString(f)); + while (statementMatcher.find()) { + String mods = statementMatcher.group(1); + if (!mods.contains("static") || !mods.contains("final")) continue; + for (String s : statementMatcher.group(3).split(",")) { + s = s.strip(); + String nm = s.substring(0, s.indexOf('=')).strip(); + if (!namePattern.matcher(nm).matches()) continue; + statements.add("public static final " + statementMatcher.group(2) + " " + s + ";"); + } + } + break; + } + } + if (statements.isEmpty()) throw new RuntimeException("Constant not found: " + placeholder); + content = replaceTemplate(content, placeholder, statements, true); + } + } + + private static String findRegex(String src, Pattern regex) { + Matcher matcher = regex.matcher(src); + if (!matcher.find()) throw new IllegalArgumentException("Regex not found: " + regex.pattern()); + return matcher.group(1); + } + + private static String replaceTemplate(String src, String placeholder, Iterable statements, boolean compact) { + int placeholderIndex = src.indexOf(placeholder); + int indent = 0; + while (placeholderIndex - indent >= 1 && src.charAt(placeholderIndex - indent - 1) == ' ') indent++; + int nextLineIndex = src.indexOf('\n', placeholderIndex + placeholder.length()) + 1; + if (nextLineIndex == 0) nextLineIndex = placeholderIndex + placeholder.length(); + String before = src.substring(0, placeholderIndex - indent), after = src.substring(nextLineIndex); + StringBuilder sb = new StringBuilder(before); + boolean firstStatement = true; + for (String s : statements) { + if (!firstStatement && !compact) sb.append('\n'); + sb.append(s.indent(indent)); + firstStatement = false; + } + sb.append(after); + return sb.toString(); + } + + /** + * Code for generating {@link com.jetbrains.JBR} class. + */ + private static class JBR { + + private static String generate(String content) { + Service[] interfaces = findPublicServiceInterfaces(); + List statements = new ArrayList<>(); + for (Service i : interfaces) statements.add(generateMethodsForService(i)); + content = replaceTemplate(content, "/*GENERATED_METHODS*/", statements, false); + content = content.replace("/*KNOWN_SERVICES*/", + modules.services.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(", "))); + content = content.replace("/*KNOWN_PROXIES*/", + modules.proxies.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(", "))); + content = content.replace("/*API_VERSION*/", apiVersion); + return content; + } + + private static Service[] findPublicServiceInterfaces() { + Pattern javadocPattern = Pattern.compile("/\\*\\*((?:.|\n)*?)\\s*\\*/"); + Pattern deprecatedPattern = Pattern.compile("@Deprecated( *\\(.*?forRemoval *= *true.*?\\))?"); + return modules.services.stream() + .map(fullName -> { + if (fullName.indexOf('$') != -1) return null; // Only top level services can be public + Path path = src.resolve(fullName.replace('.', '/') + ".java"); + if (!Files.exists(path)) return null; + String name = fullName.substring(fullName.lastIndexOf('.') + 1); + try { + String content = Files.readString(path); + int indexOfDeclaration = content.indexOf("public interface " + name); + if (indexOfDeclaration == -1) return null; + Matcher javadocMatcher = javadocPattern.matcher(content.substring(0, indexOfDeclaration)); + String javadoc; + int javadocEnd; + if (javadocMatcher.find()) { + javadoc = javadocMatcher.group(1); + javadocEnd = javadocMatcher.end(); + } else { + javadoc = ""; + javadocEnd = 0; + } + Matcher deprecatedMatcher = deprecatedPattern.matcher(content.substring(javadocEnd, indexOfDeclaration)); + Status status; + if (!deprecatedMatcher.find()) status = Status.NORMAL; + else if (deprecatedMatcher.group(1) == null) status = Status.DEPRECATED; + else status = Status.FOR_REMOVAL; + return new Service(name, javadoc, status, content.contains("__Fallback")); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }) + .filter(Objects::nonNull).toArray(Service[]::new); + } + + private static String generateMethodsForService(Service service) { + return """ + private static class $__Holder { + private static final $ INSTANCE = getService($.class, ); + } + /** + * @return true if current runtime has implementation for all methods in {@link $} + * and its dependencies (can fully implement given service). + * @see #get$() + */ + public static boolean is$Supported() { + return $__Holder.INSTANCE != null; + } + /** + * @return full implementation of {@link $} service if any, or {@code null} otherwise + */ + public static $ get$() { + return $__Holder.INSTANCE; + } + """ + .replace("", service.hasFallback ? "$.__Fallback::new" : "null") + .replaceAll("\\$", service.name) + .replace("", service.javadoc) + .replaceAll("", service.status.text); + } + + private enum Status { + NORMAL(""), + DEPRECATED("\n@Deprecated"), + FOR_REMOVAL("\n@Deprecated(forRemoval=true)\n@SuppressWarnings(\"removal\")"); + + private final String text; + Status(String text) { this.text = text; } + } + + private record Service(String name, String javadoc, Status status, boolean hasFallback) {} + } + + /** + * Finds and analyzes JBR API implementation modules and collects proxy definitions. + */ + private static class JBRModules { + + private final Path[] paths; + private final Set proxies = new HashSet<>(), services = new HashSet<>(); + + private JBRModules() throws IOException { + String[] moduleNames = findJBRApiModules(); + paths = findPotentialJBRApiContributorModules(); + for (String moduleName : moduleNames) { + Path module = findJBRApiModuleFile(moduleName, paths); + findInModule(Files.readString(module)); + } + } + + private void findInModule(String content) { + Pattern servicePattern = compile("(service|proxy|twoWayProxy)\\s*\\(([^,)]+)"); + Matcher matcher = servicePattern.matcher(content); + while (matcher.find()) { + String type = matcher.group(1); + String interfaceName = extractFromStringLiteral(matcher.group(2)); + if (type.equals("service")) services.add(interfaceName); + else proxies.add(interfaceName); + } + } + + private static String extractFromStringLiteral(String value) { + value = value.strip(); + return value.substring(1, value.length() - 1); + } + + private static Path findJBRApiModuleFile(String module, Path[] potentialPaths) throws FileNotFoundException { + for (Path p : potentialPaths) { + Path m = p.resolve("share/classes").resolve(module + ".java"); + if (Files.exists(m)) return m; + } + throw new FileNotFoundException("JBR API module file not found: " + module); + } + + private static String[] findJBRApiModules() throws IOException { + String bootstrap = Files.readString( + srcroot.resolve("java.base/share/classes/com/jetbrains/bootstrap/JBRApiBootstrap.java")); + Pattern modulePattern = compile("\"([^\"]+)"); + return Stream.of(findRegex(bootstrap, compile("MODULES *=([^;]+)")).split(",")) + .map(m -> findRegex(m, modulePattern).replace('.', '/')).toArray(String[]::new); + } + + private static Path[] findPotentialJBRApiContributorModules() throws IOException { + return Files.list(srcroot) + .filter(p -> Files.exists(p.resolve("share/classes/com/jetbrains"))).toArray(Path[]::new); + } + } +} diff --git a/src/jetbrains.api/version.properties b/src/jetbrains.api/version.properties new file mode 100644 index 000000000000..3e3cfb693615 --- /dev/null +++ b/src/jetbrains.api/version.properties @@ -0,0 +1,14 @@ +# When any changes are made to jetbrains.api module, hash and version value MUST be updated in this file. +# Version has the following format: MAJOR.MINOR.PATCH +# +# How to increment JBR API version? +# 1. For small changes if no public API was changed (e.g. only javadoc changes) - increment PATCH +# 2. When only new API is added, or some existing API was @Deprecated - increment MINOR, reset PATCH to 0 +# 3. For major backwards incompatible API changes - increment MAJOR, reset MINOR and PATCH to 0 + +VERSION = 0.0.17 + +# Hash is used to track changes to jetbrains.api, so you would not forget to update version when needed. +# When you make any changes, "make jbr-api" will fail and ask you to update hash and version number here. + +HASH = 40633C1FDDD2A6D1FBA8F1A36E84FB8 diff --git a/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.properties b/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.properties new file mode 100644 index 000000000000..cb8a53650903 --- /dev/null +++ b/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.properties @@ -0,0 +1,42 @@ +# Version + +version=1 + +# Component Font Mappings + + +serif.plain.latin-1=-b&h-droidserif-medium-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.bold.latin-1=-b&h-droidserif-demibold-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.italic.latin-1=-b&h-droidserif-medium-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.bolditalic.latin-1=-b&h-droidserif-demibold-i-normal--*-%d-*-*-p-*-iso8859-1 + +sansserif.plain.latin-1=-b&h-droidsans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bold.latin-1=-b&h-droidsans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.italic.latin-1=-b&h-droidsans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bolditalic.latin-1=-b&h-droidsans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 + +monospaced.plain.latin-1=-b&h-droidsansmono-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bold.latin-1=-b&h-droidsansmono-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.italic.latin-1=-b&h-droidsansmono-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bolditalic.latin-1=-b&h-droidsansmono-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1 + +dialog.plain.latin-1=-b&h-droidsans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bold.latin-1=-b&h-droidsans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.italic.latin-1=-b&h-droidsans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bolditalic.latin-1=-b&h-droidsans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 + +dialoginput.plain.latin-1=-b&h-droidsansmono-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bold.latin-1=-b&h-droidsansmono-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.italic.latin-1=-b&h-droidsansmono-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bolditalic.latin-1=-b&h-droidsansmono-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1 + +# Search Sequences + +sequence.allfonts=latin-1 + +# Exclusion Ranges + +# Font File Names + + + diff --git a/test/hotspot/jtreg/jbCtwProblemList.txt b/test/hotspot/jtreg/jbCtwProblemList.txt new file mode 100644 index 000000000000..c13102a4ed5d --- /dev/null +++ b/test/hotspot/jtreg/jbCtwProblemList.txt @@ -0,0 +1 @@ +jb/applications/ctw/lib_3rd_party_rt.java JBR-6832 linux-all,windows-all \ No newline at end of file diff --git a/test/hotspot/jtreg/jbMuslProblemList.txt b/test/hotspot/jtreg/jbMuslProblemList.txt new file mode 100644 index 000000000000..7d9eec75ef65 --- /dev/null +++ b/test/hotspot/jtreg/jbMuslProblemList.txt @@ -0,0 +1,32 @@ +############################################################################# + +# :hotspot_runtime + +runtime/8176717/TestInheritFD.java JBR-6974 linux-all + +############################################################################# + +# :hotspot_serviceability + +serviceability/dcmd/framework/HelpTest.java JBR-6974 linux-all +serviceability/dcmd/framework/InvalidCommandTest.java JBR-6974 linux-all +serviceability/dcmd/framework/VMVersionTest.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcCapacityTest.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcCauseTest01.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcCauseTest02.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcCauseTest03.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcNewTest.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcTest01.java JBR-6974 linux-all +serviceability/tmtools/jstat/GcTest02.java JBR-6974 linux-all + +############################################################################# + +# :vmTestbase_* + +############################################################################# + +vmTestbase/nsk/aod/AttachProvider/AttachProvider01/AttachProvider01.java JBR-6970 linux-all +vmTestbase/nsk/aod/VirtualMachine/VirtualMachine05/VirtualMachine05.java JBR-6970 linux-all +vmTestbase/nsk/aod/VirtualMachineDescriptor/VirtualMachineDescriptor01/VirtualMachineDescriptor01.java JBR-6970 linux-all + + diff --git a/test/hotspot/jtreg/jbProblemList.txt b/test/hotspot/jtreg/jbProblemList.txt new file mode 100644 index 000000000000..cc532663a263 --- /dev/null +++ b/test/hotspot/jtreg/jbProblemList.txt @@ -0,0 +1,301 @@ +# +# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +############################################################################# +# +# List of quarantined tests -- tests that should not be run by default, because +# they may fail due to known reason. The reason (CR#) must be mandatory specified. +# +# List items are testnames followed by labels, all MUST BE commented +# as to why they are here and use a label: +# generic-all Problems on all platforms +# generic-ARCH Where ARCH is one of: x64, i586, ppc64, ppc64le, s390x etc. +# OSNAME-all Where OSNAME is one of: linux, windows, macosx, aix +# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. macosx-x64 +# OSNAME-REV Specific on to one OSNAME and REV, e.g. macosx-10.7.4 +# +# More than one label is allowed but must be on the same line. +# +############################################################################# + +# gtest + +gtest/AsyncLogGtest.java initial_run generic-all +gtest/MetaspaceGtests.java#reclaim-none-ndebug initial_run generic-all +gtest/LargePageGtests.java#use-large-pages-sysV initial_run linux-all +gtest/LargePageGtests.java#use-large-pages-1G initial_run linux-all +gtest/GTestWrapper.java initial_run generic-all +gtest/MetaspaceUtilsGtests.java initial_run generic-all +gtest/MetaspaceGtests.java#balanced-no-ccs initial_run generic-all +gtest/MetaspaceGtests.java#balanced-with-guards JBR-5718 generic-all +gtest/MetaspaceGtests.java#default-debug JBR-5718 generic-all +gtest/MetaspaceGtests.java#reclaim-aggressive-debug JBR-5718 generic-all +gtest/MetaspaceGtests.java#reclaim-none-debug JBR-5718 generic-all +gtest/MetaspaceGtests.java#reclaim-aggressive-ndebug initial_run generic-all +gtest/LargePageGtests.java#use-large-pages initial_run linux-all,windows-all + +gtest/NativeHeapTrimmerGtest.java JBR-5718 generic-all +gtest/NMTGtests.java#nmt-detail JBR-5718 generic-all +gtest/NMTGtests.java#nmt-off JBR-5718 generic-all +gtest/NMTGtests.java#nmt-summary JBR-5718 generic-all + +gc/stress/TestReclaimStringsLeaksMemory.java initial_run windows-all + +gc/shenandoah/TestAllocObjects.java#aggressive initial_run generic-all +gc/shenandoah/TestAllocObjects.java#iu-aggressive initial_run generic-all +gc/shenandoah/mxbeans/TestChurnNotifications.java#aggressive initial_run generic-all +gc/shenandoah/mxbeans/TestChurnNotifications.java#iu initial_run linux-x64 + +# :hotspot_compiler + +compiler/ciReplay/TestSAServer.java 8029528 generic-all +compiler/compilercontrol/jcmd/ClearDirectivesFileStackTest.java 8225370 generic-all +compiler/jvmci/compilerToVM/GetFlagValueTest.java 8204459 generic-all +compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/NativeCallTest.java 8262901 macosx-aarch64 + +compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java 8190680 generic-all + +compiler/runtime/Test8168712.java 8211769,8211771 generic-ppc64,generic-ppc64le,linux-s390x +compiler/loopopts/TestUnreachableInnerLoop.java 8288981 linux-s390x + +compiler/rtm/locking/TestRTMAbortRatio.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestRTMAbortThreshold.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestRTMAfterNonRTMDeopt.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestRTMDeoptOnHighAbortRatio.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestRTMDeoptOnLowAbortRatio.java 8183263,8307907 generic-x64,generic-i586,aix-ppc64 +compiler/rtm/locking/TestRTMLockingCalculationDelay.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestRTMLockingThreshold.java 8183263,8307907 generic-x64,generic-i586,aix-ppc64 +compiler/rtm/locking/TestRTMSpinLoopCount.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestUseRTMDeopt.java 8183263 generic-x64,generic-i586 +compiler/rtm/locking/TestUseRTMXendForLockBusy.java 8183263,8307907 generic-x64,generic-i586,aix-ppc64 +compiler/rtm/print/TestPrintPreciseRTMLockingStatistics.java 8183263,8307907 generic-x64,generic-i586,aix-ppc64 + +compiler/c2/Test8004741.java 8235801 generic-all +compiler/c2/irTests/TestDuplicateBackedge.java 8318904 generic-all + +compiler/codecache/jmx/PoolsIndependenceTest.java 8264632 macosx-all + +compiler/vectorapi/VectorLogicalOpIdentityTest.java 8302459 linux-x64,windows-x64 + +compiler/jvmci/TestUncaughtErrorInCompileMethod.java 8309073 generic-all + +compiler/vectorapi/VectorCastShape64Test.java initial_run generic-aarch64 +compiler/vectorapi/VectorRebracket128Test.java initial_run generic-aarch64 + +############################################################################# + +# :hotspot_gc + +gc/epsilon/TestMemoryMXBeans.java 8206434 generic-all +gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java 8156755 generic-all +gc/g1/logging/TestG1LoggingFailure.java 8169634 generic-all +gc/g1/humongousObjects/TestHeapCounters.java 8178918 generic-all +gc/stress/gclocker/TestExcessGCLockerCollections.java 8229120 generic-all +gc/stress/gclocker/TestGCLockerWithParallel.java 8180622 generic-all +gc/stress/gclocker/TestGCLockerWithG1.java 8180622 generic-all +gc/stress/gclocker/TestGCLockerWithShenandoah.java initial_run generic-all +gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java 8192647 generic-all + +gc/stress/gcold/TestGCOldWithShenandoah.java initial_run windows-all + +gc/TestAllocHumongousFragment.java#iu-aggressive 8298781 generic-all + +############################################################################# + +# :hotspot_runtime + +runtime/cds/appcds/jigsaw/modulepath/ModulePathAndCP_JFR.java 8253437 windows-x64 +runtime/cds/CheckDefaultArchiveFile.java JBR-4227 generic-all +runtime/jni/terminatedThread/TestTerminatedThread.java 8219652 aix-ppc64 +runtime/handshake/HandshakeSuspendExitTest.java 8294313 generic-all +runtime/os/TestTracePageSizes.java#no-options 8267460 linux-aarch64 +runtime/os/TestTracePageSizes.java#explicit-large-page-size 8267460 linux-aarch64 +runtime/os/TestTracePageSizes.java#compiler-options 8267460 linux-aarch64 +runtime/os/TestTracePageSizes.java#G1 8267460 linux-aarch64 +runtime/os/TestTracePageSizes.java#Parallel 8267460 linux-aarch64 +runtime/os/TestTracePageSizes.java#Serial 8267460 linux-aarch64 +runtime/ErrorHandling/CreateCoredumpOnCrash.java 8267433 macosx-x64 +runtime/vthread/TestObjectAllocationSampleEvent.java 8297286 generic-all +runtime/StackGuardPages/TestStackGuardPages.java 8303612 linux-all 8293452 +runtime/StackGuardPages/TestStackGuardPagesNative.java 8303612 linux-all +runtime/ErrorHandling/TestDwarf.java 8305489 linux-all +runtime/ErrorHandling/MachCodeFramesInErrorFile.java 8313315,JBR-6289 linux-ppc64le,windows-aarch64 + +applications/jcstress/copy.java 8229852 linux-all + +containers/docker/TestJcmd.java 8278102 linux-all + +runtime/memory/ReserveMemory.java initial_run windows-aarch64 +runtime/memory/ReadFromNoaccessArea.java initial_run windows-aarch64 + +runtime/cds/appcds/methodHandles/MethodHandlesInvokersTest.java initial_run generic-all +runtime/cds/appcds/methodHandles/MethodHandlesCastFailureTest.java initial_run generic-all +runtime/cds/appcds/methodHandles/MethodHandlesGeneralTest.java initial_run generic-all +runtime/ReservedStack/ReservedStackTestCompiler.java initial_run windows-aarch64 +runtime/cds/appcds/dynamicArchive/CDSStreamTestDriver.java initial_run generic-all +runtime/ErrorHandling/CreateCoredumpOnCrash.java initial_run windows-aarch64 +runtime/ReservedStack/ReservedStackTest.java initial_run windows-aarch64 +runtime/cds/appcds/methodHandles/MethodHandlesPermuteArgumentsTest.java initial_run generic-all +runtime/cds/appcds/methodHandles/MethodHandlesAsCollectorTest.java initial_run generic-all +runtime/cds/SharedBaseAddress.java initial_run generic-all +runtime/cds/appcds/methodHandles/MethodHandlesSpreadArgumentsTest.java initial_run generic-all +containers/docker/TestJcmd.java 8278102 linux-all +containers/docker/TestMemoryAwareness.java 8303470 linux-all + +############################################################################# + +# :hotspot_serviceability + +serviceability/sa/sadebugd/DebugdConnectTest.java 8239062,8270326 macosx-x64,macosx-aarch64 +serviceability/sa/TestRevPtrsForInvokeDynamic.java 8241235 generic-all + +serviceability/jvmti/ModuleAwareAgents/ThreadStart/MAAThreadStart.java 8225354 windows-all +serviceability/jvmti/vthread/GetSetLocalTest/GetSetLocalTest.java 8286836 generic-all +serviceability/jvmti/RedefineClasses/RedefineSharedClassJFR.java JBR-6245 generic-all +serviceability/dcmd/gc/RunFinalizationTest.java 8227120 linux-all,windows-x64 + +serviceability/sa/ClhsdbCDSCore.java 8294316,8267433 macosx-x64 +serviceability/sa/ClhsdbFindPC.java#xcomp-core 8294316,8267433 macosx-x64 +serviceability/sa/ClhsdbFindPC.java#no-xcomp-core 8294316,8267433 macosx-x64,linux_aarch64 +serviceability/sa/ClhsdbPmap.java#core 8294316,8267433 macosx-x64 +serviceability/sa/ClhsdbPstack.java#core 8294316,8267433 macosx-x64 +serviceability/sa/TestJmapCore.java 8294316,8267433 macosx-x64 +serviceability/sa/TestJmapCoreMetaspace.java 8294316,8267433 macosx-x64 + +serviceability/attach/ConcAttachTest.java 8290043 linux-all +serviceability/jvmti/RedefineClasses/TestMultipleClasses.java initial_run windows-all +serviceability/jvmti/SetBreakpoint/TestManyBreakpoints.java initial_run generic-aarch64 + +serviceability/dcmd/gc/RunFinalizationTest.java 8227120 linux-all,windows-x64,aix-ppc64 + +serviceability/sa/ClhsdbJstackXcompStress.java initial_run windows-all + +serviceability/sa/ClhsdbCDSCore.java 8267433 macosx-x64 +serviceability/sa/ClhsdbPrintAs.java initial_run generic-all +serviceability/sa/ClhsdbFindPC.java#id1 initial_run generic-all +serviceability/sa/ClhsdbFindPC.java#id2 initial_run generic-all +serviceability/sa/ClhsdbFindPC.java#id3 initial_run generic-all +serviceability/sa/ClhsdbFindPC.java#no-xcomp-process 8269881 generic-all 8277079 +serviceability/sa/ClhsdbFindPC.java#xcomp-core 8267433,JBR-6259 macosx-x64,windows-aarch64 +serviceability/sa/ClhsdbFindPC.java#no-xcomp-core 8267433,JBR-6259 macosx-x64,linux_aarch64,windows-aarch64 + +serviceability/sa/ClhsdbCDSJstackPrintAll.java initial_run windows-aarch64 +serviceability/sa/TestClhsdbJstackLock.java initial_run windows-aarch64 +serviceability/sa/ClhsdbSource.java initial_run windows-aarch64 +serviceability/sa/ClhsdbJdis.java initial_run windows-aarch64 +serviceability/sa/TestJhsdbJstackLock.java initial_run windows-aarch64 +serviceability/sa/ClhsdbCDSCore.java initial_run generic-aarch64 +serviceability/sa/ClhsdbJstack.java#id1 initial_run windows-aarch64 +serviceability/sa/ClhsdbPmap.java#core 8267433,JBR-6259 macosx-x64,windows-aarch64 +serviceability/sa/ClhsdbPstack.java#core 8267433,JBR-6259 macosx-x64,windows-aarch64 + +serviceability/sa/ClhsdbPstack.java#id1 initial_run generic-aarch64 +serviceability/sa/ClhsdbPmap.java#id1 initial_run generic-all +serviceability/sa/ClhsdbWhere.java initial_run windows-aarch64 +serviceability/sa/ClhsdbDumpheap.java initial_run windows-aarch64 +serviceability/attach/ConcAttachTest.java 8290043 linux-all + +############################################################################# + +# :hotspot_misc + +############################################################################# + + +############################################################################# + +# :vmTestbase_* + +############################################################################# + +vmTestbase/nsk/monitoring/MemoryPoolMBean/isCollectionUsageThresholdExceeded/isexceeded003/TestDescription.java 8153598 generic-all +vmTestbase/nsk/monitoring/MemoryPoolMBean/isUsageThresholdExceeded/isexceeded002/TestDescription.java 8153598 generic-all +vmTestbase/nsk/monitoring/MemoryPoolMBean/isUsageThresholdExceeded/isexceeded004/TestDescription.java 8153598 generic-all +vmTestbase/nsk/monitoring/MemoryPoolMBean/isUsageThresholdExceeded/isexceeded005/TestDescription.java 8153598 generic-all + +vmTestbase/nsk/jdb/options/listconnectors/listconnectors001/listconnectors001.java initial_run windows-all + +vmTestbase/nsk/jdi/LaunchingConnector/launch/launch001/TestDescription.java initial_run windows-all +vmTestbase/nsk/jdi/LaunchingConnector/launch/launch003/TestDescription.java initial_run windows-all +vmTestbase/nsk/jdi/LaunchingConnector/launchnosuspend/launchnosuspend001/TestDescription.java initial_run windows-all + +vmTestbase/nsk/jdi/ThreadReference/stop/stop001/TestDescription.java 7034630 generic-all +vmTestbase/nsk/jdi/ReferenceType/instances/instances002/instances002.java initial_run linux-all + +vmTestbase/nsk/jdi/VirtualMachine/allThreads/allthreads001/TestDescription.java JBR-6530 macosx-all + +vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 8208250 generic-all +vmTestbase/metaspace/gc/firstGC_50m/TestDescription.java 8208250 generic-all +vmTestbase/metaspace/gc/firstGC_99m/TestDescription.java 8208250 generic-all +vmTestbase/metaspace/gc/firstGC_default/TestDescription.java 8208250 generic-all + +vmTestbase/nsk/jvmti/AttachOnDemand/attach045/TestDescription.java 8202971 generic-all +vmTestbase/nsk/jvmti/scenarios/jni_interception/JI05/ji05t001/TestDescription.java 8219652 aix-ppc64 +vmTestbase/nsk/jvmti/scenarios/jni_interception/JI06/ji06t001/TestDescription.java 8219652 aix-ppc64 +vmTestbase/nsk/jvmti/SetJNIFunctionTable/setjniftab001/TestDescription.java 8219652 aix-ppc64 +vmTestbase/nsk/jvmti/scenarios/capability/CM03/cm03t001/TestDescription.java 8073470 linux-all +vmTestbase/nsk/jvmti/InterruptThread/intrpthrd003/TestDescription.java 8288911 macosx-x64 + +vmTestbase/nsk/jvmti/scenarios/sampling/SP04/sp04t001/TestDescription.java initial_run windows-x64 +vmTestbase/nsk/jvmti/scenarios/sampling/SP04/sp04t002/TestDescription.java initial_run windows-x64 +vmTestbase/nsk/jvmti/scenarios/sampling/SP05/sp05t003/TestDescription.java initial_run generic-all + +vmTestbase/gc/lock/jni/jnilock002/TestDescription.java 8192647 generic-all + +vmTestbase/jit/escape/LockCoarsening/LockCoarsening001.java 8148743 generic-all +vmTestbase/jit/escape/LockCoarsening/LockCoarsening002.java 8208259 generic-all + +vmTestbase/jit/misctests/fpustack/GraphApplet.java linux-x64 + +vmTestbase/vm/mlvm/hiddenloader/stress/byteMutation/Test.java initial_run windows-all +vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java 8013267 generic-all +vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java 8257761 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java 8013267 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java 8013267 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java 8013267 generic-all + +vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn001/forceEarlyReturn001.java 7199837 generic-all + +vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi005/TestDescription.java 8076494 windows-x64 + +### initial_runs + +gc/shenandoah/mxbeans/TestChurnNotifications.java#aggressive NO_BUG macosx_all + +runtime/cds/appcds/TestDumpClassListSource.java NO_BUG generic_all +runtime/cds/appcds/CommandLineFlagCombo.java NO_BUG generic_all +runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveNoDefaultArchive.java NO_BUG generic_all +runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java NO_BUG generic_all +runtime/cds/CheckDefaultArchiveFile.java NO_BUG generic_all + +serviceability/jvmti/SetBreakpoint/TestManyBreakpoints.java NO_BUG linux_aarch64 +vmTestbase/nsk/stress/thread/thread008.java initial_run windows-all +compiler/vectorapi/VectorRebracket128Test.java NO_BUG linux_aarch64 + +vmTestbase/nsk/sysdict/vm/stress/btree/btree001/btree001.java initial_run windows-aarch64 +vmTestbase/nsk/sysdict/vm/stress/btree/btree005/btree005.java initial_run windows-aarch64 +vmTestbase/nsk/sysdict/vm/stress/btree/btree009/btree009.java initial_run windows-aarch64 + +testlibrary_tests/ir_framework/tests/TestDTestAndExclude.java initial_run windows-all + +jb/applications/ctw/plugins_cucumber_java_lib_cucumber_java.java JBR-6084 windows-all \ No newline at end of file diff --git a/test/hotspot/jtreg/runtime/CommandLine/ObsoleteFlagErrorMessage.java b/test/hotspot/jtreg/runtime/CommandLine/ObsoleteFlagErrorMessage.java index 1dc1cd9976b1..f9c611fc0164 100644 --- a/test/hotspot/jtreg/runtime/CommandLine/ObsoleteFlagErrorMessage.java +++ b/test/hotspot/jtreg/runtime/CommandLine/ObsoleteFlagErrorMessage.java @@ -42,6 +42,7 @@ public static void main(String[] args) throws Exception { // Case 1: Newly obsolete flags with extra junk appended should not be treated as newly obsolete (8060449) ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:-IgnoreUnrecognizedVMOptions", "-XX:" + flag + "PlusJunk", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); @@ -50,6 +51,7 @@ public static void main(String[] args) throws Exception { // Case 2: Newly obsolete flags should be recognized as newly obsolete (8073989) ProcessBuilder pb2 = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:-IgnoreUnrecognizedVMOptions", "-XX:+" + flag, "-version"); OutputAnalyzer output2 = new OutputAnalyzer(pb2.start()); diff --git a/test/hotspot/jtreg/runtime/JBR-3923/Test.java b/test/hotspot/jtreg/runtime/JBR-3923/Test.java new file mode 100644 index 000000000000..435413e62557 --- /dev/null +++ b/test/hotspot/jtreg/runtime/JBR-3923/Test.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Verify that C1 compiler does not crash on a particular + * Kotlin suspend fun + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @compile Test.java + * @run main Test + */ + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import java.util.*; + +public class Test { + public static void main(String[] args) throws Exception { + String jarFile = System.getProperty("test.src") + "/testcase.jar"; + + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder("-cp", jarFile, + "-XX:+UnlockDiagnosticVMOptions", + "-Xcomp", + "-XX:CompileCommand=compileonly,MainKt::test", + "MainKt"); + + new OutputAnalyzer(pb.start()) + .shouldContain("Success") + .shouldNotContain("Internal Error") + .shouldHaveExitValue(0); + } +} + +/* + * The code in testcase.jar is produced by running + * $ kotlinc Main.kt -include-runtime -d testcase.jar + * on this Kotlin code: + suspend fun yield(s: String) { + println("Success"); + System.exit(0) + } + + suspend fun test(s: String) { + while (true) { + yield(s) + } + } + + suspend fun main() { + test("") + } + */ diff --git a/test/hotspot/jtreg/runtime/JBR-3923/testcase.jar b/test/hotspot/jtreg/runtime/JBR-3923/testcase.jar new file mode 100644 index 000000000000..f9838d4f1059 Binary files /dev/null and b/test/hotspot/jtreg/runtime/JBR-3923/testcase.jar differ diff --git a/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/LoadLibraryUnicode.java b/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/LoadLibraryUnicode.java new file mode 100644 index 000000000000..5ce5d4a193bf --- /dev/null +++ b/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/LoadLibraryUnicode.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.Platform; +import jdk.test.lib.Asserts; + +public class LoadLibraryUnicode { + + static native int giveANumber(); + + // Use non-Latin characters from basic (\u1889) and supplementary (\uD844\uDDD9) Unicode planes + private static final String NON_LATIN_PATH_NAME = "ka-\u1889-supp-\uD844\uDDD9"; + + private static String toPlatformLibraryName(String name) { + return (Platform.isWindows() ? "" : "lib") + name + "." + Platform.sharedLibraryExt(); + } + + public static void verifySystemLoad() throws Exception { + final String osDependentLibraryFileName = toPlatformLibraryName("LoadLibraryUnicode"); + + String testNativePath = LoadLibraryUnicodeTest.getSystemProperty("test.nativepath"); + Path origLibraryPath = Paths.get(testNativePath).resolve(osDependentLibraryFileName); + + Path currentDirPath = Paths.get(".").toAbsolutePath(); + Path newLibraryPath = currentDirPath.resolve(NON_LATIN_PATH_NAME); + Files.createDirectory(newLibraryPath); + newLibraryPath = newLibraryPath.resolve(osDependentLibraryFileName); + + System.out.println(String.format("Copying '%s' to '%s'", origLibraryPath, newLibraryPath)); + Files.copy(origLibraryPath, newLibraryPath); + + System.out.println(String.format("Loading '%s'", newLibraryPath)); + System.load(newLibraryPath.toString()); + + final int retval = giveANumber(); + Asserts.assertEquals(retval, 42); + } + + public static void verifyExceptionMessage() throws Exception { + Path currentDirPath = Paths.get(".").toAbsolutePath(); + Path newLibraryPath = currentDirPath.resolve(NON_LATIN_PATH_NAME).resolve("non-existent-library"); + + System.out.println(String.format("Loading '%s'", newLibraryPath)); + try { + System.load(newLibraryPath.toString()); + } catch(UnsatisfiedLinkError e) { + // The name of the library may have been corrupted by encoding/decoding it improperly. + // Verify that it is still the same. + Asserts.assertTrue(e.getMessage().contains(NON_LATIN_PATH_NAME)); + } + } + + public static void main(String[] args) throws Exception { + verifySystemLoad(); + verifyExceptionMessage(); + } +} diff --git a/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/LoadLibraryUnicodeTest.java b/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/LoadLibraryUnicodeTest.java new file mode 100644 index 000000000000..8597525d8c46 --- /dev/null +++ b/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/LoadLibraryUnicodeTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8195129 + * @summary regression test for 8195129, + * verifies the ability to System.load() from a location containing non-Latin characters + * @requires (os.family == "windows") | (os.family == "mac") | (os.family == "linux") + * @library /test/lib + * @build LoadLibraryUnicode + * @run main/native LoadLibraryUnicodeTest + */ + +import jdk.test.lib.process.ProcessTools; + +public class LoadLibraryUnicodeTest { + + public static void main(String args[]) throws Exception { + String nativePathSetting = "-Dtest.nativepath=" + getSystemProperty("test.nativepath"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(nativePathSetting, LoadLibraryUnicode.class.getName()); + pb.environment().put("LC_ALL", "en_US.UTF-8"); + ProcessTools.executeProcess(pb) + .outputTo(System.out) + .errorTo(System.err) + .shouldHaveExitValue(0); + } + + // Utility method to retrieve and validate system properties + public static String getSystemProperty(String propertyName) throws Error { + String systemProperty = System.getProperty(propertyName, "").trim(); + System.out.println(propertyName + " = " + systemProperty); + if (systemProperty.isEmpty()) { + throw new Error("TESTBUG: property " + propertyName + " is empty"); + } + return systemProperty; + } +} diff --git a/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/libLoadLibraryUnicode.c b/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/libLoadLibraryUnicode.c new file mode 100644 index 000000000000..0be407773faa --- /dev/null +++ b/test/hotspot/jtreg/runtime/jni/loadLibraryUnicode/libLoadLibraryUnicode.c @@ -0,0 +1,29 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include + +JNIEXPORT jint JNICALL +Java_LoadLibraryUnicode_giveANumber(JNIEnv *env) { + return 42; +} diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 4ffc4bde90c4..12d03de2bad7 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -647,6 +647,8 @@ javax/sound/sampled/Clip/ClipFlushCrash.java 8308395 linux-x64 # jdk_swing +javax/swing/JComboBox/bug4890345.java JBR-5799 windows-all + javax/swing/plaf/basic/BasicTextUI/8001470/bug8001470.java 8233177 linux-all,windows-all javax/swing/JFrame/MaximizeWindowTest.java 8321289 linux-all diff --git a/test/jdk/TEST.ROOT b/test/jdk/TEST.ROOT index 25ef8250e4d4..701168914ae8 100644 --- a/test/jdk/TEST.ROOT +++ b/test/jdk/TEST.ROOT @@ -11,7 +11,7 @@ # # A test flagged with cgroups uses cgroups. # -# Notes on "client" keywords : headful sound printer multimon +# Notes on "client" keywords : headful sound printer multimon # =========================================================== # # These keywords are there to help with test selection so that @@ -31,7 +31,7 @@ # Tests may not fail if there is none, instead just silently return. # But they also may legitimately throw an Exception depending on the test. # Also printer tests are not necessarily headful, but some are, and some are automated. -# +# # "sound". Similarly, not all sound tests require audio devices, but many do. # A test flagged with key "sound" needs audio devices on the system. # Also they are not necessarily "headful", since they don't require a display etc. @@ -43,7 +43,7 @@ # tests which require two displays connected. keys=headful sound printer multimon \ - i18n intermittent randomness jfr cgroups + i18n intermittent randomness jfr cgroups dtrace # Tests that must run in othervm mode othervm.dirs=java/awt java/beans javax/accessibility javax/imageio javax/sound javax/swing javax/print \ @@ -102,7 +102,8 @@ requires.properties= \ docker.support \ release.implementor \ jdk.containerized \ - jdk.foreign.linker + jdk.foreign.linker \ + display.XWayland # Minimum jtreg version requiredVersion=7.3.1+1 diff --git a/test/jdk/TEST.groups b/test/jdk/TEST.groups index fa868699aab3..6eaf1dfdb666 100644 --- a/test/jdk/TEST.groups +++ b/test/jdk/TEST.groups @@ -426,6 +426,9 @@ jfc_demo = \ jdk_editpad = \ jdk/editpad +jbr_all = \ + jb + jdk_desktop = \ :jdk_desktop_part1 \ :jdk_desktop_part2 \ @@ -440,7 +443,8 @@ jdk_desktop_part1 = \ :jdk_editpad \ :jfc_demo \ :jdk_accessibility \ - :jdk_beans + :jdk_beans \ + :jbr_all jdk_desktop_part2 = \ :jdk_awt \ @@ -455,6 +459,134 @@ jdk_desktop_part3 = \ java/awt/datatransfer \ java/awt/Window +jbr_all = \ + jb + +jbr_desktop_part11 = \ + :jdk_desktop_part1 \ + -:jdk_swing \ + -javax/sound + +jbr_desktop_part12 = \ + :jdk_swing \ + -javax/swing/JButton \ + -javax/swing/JCheckBox \ + -javax/swing/JColorChooser \ + -javax/swing/JComboBox \ + -javax/swing/JComponent \ + -javax/swing/JDesktopPane \ + -javax/swing/JDialog \ + -javax/swing/JEditorPane \ + -javax/swing/JFileChooser \ + -javax/swing/JFormattedTextField \ + -javax/swing/JFrame \ + -javax/swing/JInternalFrame \ + -javax/swing/JLabel \ + -javax/swing/JLayer \ + -javax/swing/JLightweightFrame \ + -javax/swing/JList \ + -javax/swing/JMenu \ + -javax/swing/JMenuBar \ + -javax/swing/JMenuItem \ + -javax/swing/JOptionPane \ + -javax/swing/JPasswordField \ + -javax/swing/JPopupMenu \ + -javax/swing/JProgressBar \ + -javax/swing/JRadioButton \ + -javax/swing/JRootPane \ + -javax/swing/JScrollBar \ + -javax/swing/JScrollPane \ + -javax/swing/JSlider \ + -javax/swing/JSpinner \ + -javax/swing/JSplitPane \ + -javax/swing/JTabbedPane \ + -javax/swing/JTable \ + -javax/swing/JTableHeader \ + -javax/swing/JTextArea \ + -javax/swing/JTextField \ + -javax/swing/JTextPane \ + -javax/swing/JToolBar \ + -javax/swing/JToolTip \ + -javax/swing/JTree \ + -javax/swing/JViewport \ + -javax/swing/JWindow + +jbr_desktop_part13 = \ + javax/swing/JButton \ + javax/swing/JCheckBox \ + javax/swing/JColorChooser \ + javax/swing/JComboBox \ + javax/swing/JComponent \ + javax/swing/JDesktopPane \ + javax/swing/JDialog \ + javax/swing/JEditorPane \ + javax/swing/JFileChooser \ + javax/swing/JFormattedTextField \ + javax/swing/JFrame \ + javax/swing/JInternalFrame \ + javax/swing/JLabel \ + javax/swing/JLayer \ + javax/swing/JLightweightFrame \ + javax/swing/JList \ + javax/swing/JMenu \ + javax/swing/JMenuBar \ + javax/swing/JMenuItem \ + javax/swing/JOptionPane \ + javax/swing/JPasswordField \ + javax/swing/JPopupMenu \ + javax/swing/JProgressBar \ + javax/swing/JRadioButton \ + javax/swing/JRootPane \ + javax/swing/JScrollBar \ + javax/swing/JScrollPane \ + javax/swing/JSlider \ + javax/swing/JSpinner \ + javax/swing/JSplitPane \ + javax/swing/JTabbedPane \ + javax/swing/JTable \ + javax/swing/JTableHeader \ + javax/swing/JTextArea \ + javax/swing/JTextField \ + javax/swing/JTextPane \ + javax/swing/JToolBar \ + javax/swing/JToolTip \ + javax/swing/JTree \ + javax/swing/JViewport \ + javax/swing/JWindow + +jbr_desktop_part14 = \ + javax/sound + +jbr_desktop_part21 = \ + :jdk_desktop_part2 \ + -java/awt/dnd \ + -java/awt/Focus \ + -java/awt/font \ + -java/awt/FullScreen \ + -java/awt/image \ + -java/awt/KeyboardFocusmanager \ + -java/awt/Mixing \ + -java/awt/print \ + -java/awt/PrintJob + +jbr_desktop_part22 = \ + java/awt/dnd \ + java/awt/Focus \ + java/awt/font \ + java/awt/FullScreen \ + java/awt/image \ + java/awt/KeyboardFocusmanager \ + java/awt/Mixing \ + java/awt/print \ + java/awt/PrintJob + +jbr_desktop_part31 = \ + :jdk_desktop_part3 \ + -java/awt/Modal + +jbr_desktop_part32 = \ + java/awt/Modal + # SwingSet3 tests. jdk_client_sanity = \ sanity/client/SwingSet diff --git a/test/jdk/java/awt/Debug/X11Trace.java b/test/jdk/java/awt/Debug/X11Trace.java new file mode 100644 index 000000000000..54a1e5688f7b --- /dev/null +++ b/test/jdk/java/awt/Debug/X11Trace.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies the -Dsun.awt.x11.trace option + * @requires (os.family == "linux") + * @library /test/lib + * @run main X11Trace + */ + +import java.awt.AWTException; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import java.lang.reflect.InvocationTargetException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.util.stream.Stream; + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class X11Trace { + public static void main(String[] args) throws Exception { + if (args.length > 0 && args[0].equals("runtest")) { + runTest(); + } else { + OutputAnalyzer oa = new OutputAnalyzer( + ProcessTools.createTestJavaProcessBuilder("-Dsun.awt.x11.trace=log,timestamp,stats,td=0", X11Trace.class.getName(), "runtest") + .start()); + oa.shouldContain("held AWT lock for").shouldContain("AWT Lock usage statistics").shouldHaveExitValue(0); + + oa = new OutputAnalyzer( + ProcessTools.createTestJavaProcessBuilder("-Dsun.awt.x11.trace=log", X11Trace.class.getName(), "runtest") + .start()); + oa.shouldContain("held AWT lock for").shouldNotContain("AWT Lock usage statistics").shouldHaveExitValue(0); + + oa = new OutputAnalyzer( + ProcessTools.createTestJavaProcessBuilder("-Dsun.awt.x11.trace=log,timestamp,stats,td=0,out:mylog", X11Trace.class.getName(), "runtest") + .start()); + oa.shouldHaveExitValue(0).stderrShouldBeEmpty(); + + final String logFileContents = Files.readString(Paths.get("mylog")); + OutputAnalyzer logOA = new OutputAnalyzer(logFileContents); + logOA.shouldContain("held AWT lock for").shouldContain("AWT Lock usage statistics"); + } + } + + public static void delay(int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) { + } + } + + public static void runTest() { + runSwing(() -> { + final JFrame frame = new JFrame("test"); + frame.setVisible(true); + delay(500); + frame.dispose(); + }); + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException e) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } +} + diff --git a/test/jdk/java/awt/Desktop/8064934/bug8064934.java b/test/jdk/java/awt/Desktop/8064934/bug8064934.java index f3a6b4658ad3..c085e23ee64c 100644 --- a/test/jdk/java/awt/Desktop/8064934/bug8064934.java +++ b/test/jdk/java/awt/Desktop/8064934/bug8064934.java @@ -34,6 +34,7 @@ */ import jdk.test.lib.Platform; import java.awt.*; +import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import java.security.AccessController; @@ -43,6 +44,8 @@ public class bug8064934 { private static final String NO_ASSOCIATION_ERROR_MESSAGE = "Error message: No application is associated with" + " the specified file for this operation."; + private static int SLEEP_TIME = 1000; + public static void main(String[] args) { // This test is intended only for Windows if (!AccessController.doPrivileged((PrivilegedAction) Platform::isWindows)) { @@ -70,6 +73,12 @@ public static void main(String[] args) { throw new RuntimeException("Can not create temp file"); } desktop.open(file); + try { + pressESC(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } catch (IOException ioe) { String errorMessage = ioe.getMessage().trim(); if (errorMessage != null && !errorMessage.endsWith(NO_ASSOCIATION_ERROR_MESSAGE)) { @@ -85,4 +94,12 @@ public static void main(String[] args) { System.out.println("Test PASSED!"); } + + private static void pressESC() throws Exception { + Thread.sleep(SLEEP_TIME); + + Robot robot = new Robot(); + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); + } } diff --git a/test/jdk/java/awt/Focus/6981400/Test2.java b/test/jdk/java/awt/Focus/6981400/Test2.java deleted file mode 100644 index acb61577599e..000000000000 --- a/test/jdk/java/awt/Focus/6981400/Test2.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @key headful - * @bug 6981400 - * @summary Tabbing between textfiled do not work properly when ALT+TAB - * @author anton.tarasov - * @library ../../regtesthelpers - * @build Util - * @run main Test2 - */ - -// A focus request made after a char is typed ahead shouldn't affect the char's target component. - -import java.awt.*; -import java.awt.event.*; -import test.java.awt.regtesthelpers.Util; - -public class Test2 { - static Frame f = new Frame("frame"); - static TextArea t0 = new TextArea(1, 10) { public String toString() { return "[TA-0]";} }; - static TextArea t1 = new TextArea(1, 10) { public String toString() { return "[TA-1]";} }; - static TextArea t2 = new TextArea(1, 10) { public String toString() { return "[TA-2]";} }; - - static volatile boolean passed = true; - - static Robot robot; - - public static void main(String[] args) { - Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { - public void eventDispatched(AWTEvent e) { - System.out.println(e); - if (e.getID() == KeyEvent.KEY_TYPED) { - if (e.getSource() != t1) { - passed = false; - throw new RuntimeException("Test failed: the key event has wrong source: " + e); - } - } - } - }, FocusEvent.FOCUS_EVENT_MASK | KeyEvent.KEY_EVENT_MASK); - - try { - robot = new Robot(); - } catch (AWTException ex) { - throw new RuntimeException("Error: can't create Robot"); - } - - f.add(t0); - f.add(t1); - f.add(t2); - - f.setLayout(new FlowLayout()); - f.pack(); - - t0.addFocusListener(new FocusAdapter() { - public void focusLost(FocusEvent e) { - try { - Thread.sleep(3000); - } catch (Exception ex) {} - } - }); - - // The request shouldn't affect the key event delivery. - new Thread(new Runnable() { - public void run() { - try { - Thread.sleep(2000); - } catch (Exception ex) {} - System.out.println("requesting focus to " + t2); - t2.requestFocus(); - } - }).start(); - - - f.setVisible(true); - Util.waitForIdle(robot); - - test(); - - if (passed) System.out.println("\nTest passed."); - } - - static void test() { - Util.clickOnComp(t1, robot); - - // The key event should be eventually delivered to t1. - robot.delay(50); - robot.keyPress(KeyEvent.VK_A); - robot.delay(50); - robot.keyRelease(KeyEvent.VK_A); - - Util.waitForIdle(robot); - } -} - diff --git a/test/jdk/java/awt/Focus/RowToleranceTransitivityTest.java b/test/jdk/java/awt/Focus/RowToleranceTransitivityTest.java index 099e81a1ab0d..1a6d85ec0f0a 100644 --- a/test/jdk/java/awt/Focus/RowToleranceTransitivityTest.java +++ b/test/jdk/java/awt/Focus/RowToleranceTransitivityTest.java @@ -130,14 +130,12 @@ public void focusGained(FocusEvent e) { static void test() throws Exception { robot.delay(500); - // Set focus on the first component to start traversal - if (!setFocusOn(ft, new Runnable() { - public void run() { - clickOn(ft); - } - })) { - System.out.println("Couldn't set focus on " + ft); - throw new RuntimeException("Test couldn't be performed."); + clickOn(ft); + + robot.delay(500); + + if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != ft) { + throw new RuntimeException("Cannot set initial focus"); } robot.delay(500); @@ -146,6 +144,7 @@ public void run() { if (!setFocusOn(cb, new Runnable() { public void run() { robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); } })) { System.out.println("Focus got stuck while traversing."); diff --git a/test/jdk/java/awt/Frame/DisposeStressTest/DisposeStressTest.java b/test/jdk/java/awt/Frame/DisposeStressTest/DisposeStressTest.java index bbce964fd1fd..a4aca9cb7ecc 100644 --- a/test/jdk/java/awt/Frame/DisposeStressTest/DisposeStressTest.java +++ b/test/jdk/java/awt/Frame/DisposeStressTest/DisposeStressTest.java @@ -27,7 +27,7 @@ @bug 4051487 4145670 @summary Tests that disposing of an empty Frame or a Frame with a MenuBar while it is being created does not crash the VM. - @run main/timeout=7200 DisposeStressTest + @run main/timeout=600 DisposeStressTest */ import java.awt.Frame; @@ -39,6 +39,7 @@ public class DisposeStressTest { public static void main(final String[] args) { for (int i = 0; i < 1000; i++) { + System.out.println("i = " + i); Frame f = new Frame(); f.setBounds(10, 10, 10, 10); f.show(); diff --git a/test/jdk/java/awt/Frame/FrameVisible/FrameContentAppearanceTest.java b/test/jdk/java/awt/Frame/FrameVisible/FrameContentAppearanceTest.java new file mode 100644 index 000000000000..7148e397c287 --- /dev/null +++ b/test/jdk/java/awt/Frame/FrameVisible/FrameContentAppearanceTest.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + * @key headful + * @summary check that Frame content does appear when the frame becomes visible + * @requires (os.family == "mac") + * @run main/othervm -Dsun.java2d.opengl=true FrameContentAppearanceTest + * @run main/othervm -Dsun.java2d.metal=true -Dsun.java2d.metal.displaySync=true FrameContentAppearanceTest + * @run main/othervm -Dsun.java2d.metal=true -Dsun.java2d.metal.displaySync=false FrameContentAppearanceTest + */ + +import java.awt.Color; +import java.awt.EventQueue; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.RenderingHints; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.util.concurrent.CountDownLatch; + +public class FrameContentAppearanceTest extends Frame { + interface Painter { + void paint(Graphics g); + } + enum ColorType {PRIM, BG, OTHER} + static BufferedImage img; + private static final int SIZE = 200; + private static final Color PRIM_COL = Color.BLUE; + private static final Color BG_COL = Color.RED; + private static final int COL_TOLERANCE = 15; + private static final int FAIL_TOLERANCE = 10; + private static final int OGL_FAIL_TOLERANCE = 25; + private static final int COUNT = 100; + + private static Robot r; + protected CountDownLatch latch = new CountDownLatch(1); + private final Painter painter; + public FrameContentAppearanceTest(Painter painter) { + this.painter = painter; + } + + @Override + public void paint(Graphics g) { + super.paint(g); + painter.paint(g); + latch.countDown(); + } + + private void UI() { + setBackground(BG_COL); + setSize(SIZE, SIZE); + setResizable(false); + setLocation(50, 50); + setVisible(true); + } + + private static ColorType checkColor(Color c1) { + if (Math.abs(PRIM_COL.getRed() - c1.getRed()) + + Math.abs(PRIM_COL.getGreen() - c1.getGreen()) + + Math.abs(PRIM_COL.getBlue() - c1.getBlue()) < COL_TOLERANCE) + { + return ColorType.PRIM; + } + if (Math.abs(BG_COL.getRed() - c1.getRed()) + + Math.abs(BG_COL.getGreen() - c1.getGreen()) + + Math.abs(BG_COL.getBlue() - c1.getBlue()) < COL_TOLERANCE) + { + return ColorType.BG; + } + return ColorType.OTHER; + } + + protected ColorType doTest() throws Exception { + r.waitForIdle(); + EventQueue.invokeAndWait(this::UI); + r.waitForIdle(); + Toolkit.getDefaultToolkit().sync(); + latch.await(); + r.waitForIdle(); + Point loc = getLocationOnScreen(); + Color c = r.getPixelColor(loc.x + SIZE / 2, loc.y + SIZE / 2); + + dispose(); + return checkColor(c); + } + + public static void main(String[] args) throws Exception { + String rendering = "Unknown graphics pipeline"; + boolean isOpenGL = false; + if ("true".equalsIgnoreCase(System.getProperty("sun.java2d.opengl"))) { + rendering = "OpenGL"; + isOpenGL = true; + } else if ("true".equalsIgnoreCase(System.getProperty("sun.java2d.metal"))) { + rendering = "Metal"; + if ("false".equalsIgnoreCase(System.getProperty("sun.java2d.metal.displaySync"))) { + rendering += " displaySync=false"; + } else { + rendering += " displaySync=true"; + } + } + r = new Robot(); + img = new BufferedImage(SIZE, SIZE, BufferedImage.TYPE_INT_RGB); + Graphics2D g2 = img.createGraphics(); + g2.setColor(PRIM_COL); + g2.fillRect(0, 0, SIZE, SIZE); + g2.dispose(); + + int imgFailCount = 0; + int rectFailCount = 0; + int ovalFailCount = 0; + int aaOvalFailCount = 0; + int noFrameCount = 0; + + for (int i = 0; i < COUNT; i++) { + ColorType imgTestRes = (new FrameContentAppearanceTest((Graphics g) -> + g.drawImage(img, 0, 0, null))).doTest(); + imgFailCount += imgTestRes == ColorType.BG ? 1 : 0; + noFrameCount += imgTestRes == ColorType.OTHER ? 1 : 0; + + ColorType rectTestRes = (new FrameContentAppearanceTest((Graphics g) -> { + g.setColor(Color.BLUE); + g.fillRect(0, 0, SIZE, SIZE); + })).doTest(); + rectFailCount += rectTestRes == ColorType.BG ? 1 : 0; + noFrameCount += rectTestRes == ColorType.OTHER ? 1 : 0; + + ColorType ovalTestRes = (new FrameContentAppearanceTest((Graphics g) -> { + g.setColor(Color.BLUE); + g.fillOval(0, 0, SIZE, SIZE); + })).doTest(); + ovalFailCount += ovalTestRes == ColorType.BG ? 1 : 0; + noFrameCount += ovalTestRes == ColorType.OTHER ? 1 : 0; + + ColorType aaOvalTestRes = (new FrameContentAppearanceTest((Graphics g) -> { + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setColor(Color.BLUE); + g.fillOval(0, 0, SIZE, SIZE); + })).doTest(); + aaOvalFailCount += aaOvalTestRes == ColorType.BG ? 1 : 0; + noFrameCount += aaOvalTestRes == ColorType.OTHER ? 1 : 0; + } + + if (imgFailCount > 0 || rectFailCount > 0 || ovalFailCount > 0 || aaOvalFailCount > 0 || noFrameCount > 0) { + String report = rendering + "\n" + + ((imgFailCount > 0) ? imgFailCount + " image rendering failure(s)\n" : "") + + ((rectFailCount > 0) ? rectFailCount + " rect rendering failure(s)\n" : "") + + ((ovalFailCount > 0) ? ovalFailCount + " oval rendering failure(s)\n" : "") + + ((aaOvalFailCount > 0) ? aaOvalFailCount + " aa oval rendering failure(s)\n" : "") + + ((noFrameCount > 0) ? noFrameCount + " no frame failure(s)\n" : ""); + + int failTolerance = isOpenGL ? OGL_FAIL_TOLERANCE : FAIL_TOLERANCE; + if (imgFailCount > failTolerance || rectFailCount > failTolerance || + ovalFailCount > failTolerance || aaOvalFailCount > failTolerance || + noFrameCount > failTolerance) + { + throw new RuntimeException("\nFailed:\n" + report); + } else { + System.out.println("Passed. Failures below the tolerance(" + failTolerance + "):\n" + report); + } + } else { + System.out.println(rendering + "\nPassed"); + } + } +} diff --git a/test/jdk/java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java b/test/jdk/java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java index 97cd75b90f92..ddebb7be7582 100644 --- a/test/jdk/java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java +++ b/test/jdk/java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java @@ -23,13 +23,16 @@ import java.awt.AWTException; import java.awt.Color; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.DisplayMode; import java.awt.Frame; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Insets; +import java.awt.Point; import java.awt.Robot; +import java.awt.Toolkit; import java.awt.Window; import java.awt.image.BufferedImage; @@ -50,9 +53,14 @@ public static void main(final String[] args) { .getLocalGraphicsEnvironment(); final GraphicsDevice[] devices = ge.getScreenDevices(); + final Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor( + new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB), + new Point(0, 0), "transparent cursor"); + final Window wGreen = new Frame(); wGreen.setBackground(Color.GREEN); wGreen.setSize(300, 300); + wGreen.setCursor(transparentCursor); wGreen.setVisible(true); sleep(); final Insets iGreen = wGreen.getInsets(); @@ -61,6 +69,7 @@ public static void main(final String[] args) { final Window wRed = new Frame(); wRed.setBackground(Color.RED); wRed.setSize(300, 300); + wRed.setCursor(transparentCursor); wRed.setVisible(true); sleep(); final Insets iRed = wGreen.getInsets(); @@ -129,13 +138,18 @@ private static void testColor(final Window w, final Color color) { passed = false; return; } + int cRGB = color.getRGB(); final BufferedImage bi = r.createScreenCapture(w.getBounds()); for (int y = 0; y < bi.getHeight(); y++) { for (int x = 0; x < bi.getWidth(); x++) { - if (bi.getRGB(x, y) != color.getRGB()) { + int bRGB = bi.getRGB(x, y); + if (Math.abs((bRGB&0xFF) - (cRGB&0xFF)) > 1 || + Math.abs((bRGB&0xFF00)>>8 - (cRGB&0xFF00)>>8) > 1 || + Math.abs((bRGB&0xFF0000)>>16 - (cRGB&0xFF0000)>>16) > 1) + { System.err.println( "Incorrect pixel at " + x + "x" + y + " : " + - Integer.toHexString(bi.getRGB(x, y)) + + Integer.toHexString(bRGB) + " ,expected : " + Integer.toHexString( color.getRGB())); passed = false; diff --git a/test/jdk/java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java b/test/jdk/java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java index f5f77d47319d..29a3c9b95c8f 100644 --- a/test/jdk/java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java +++ b/test/jdk/java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java @@ -72,6 +72,10 @@ public void paint(Graphics g) { GraphicsConfiguration frameGC = frame.getGraphicsConfiguration(); Rectangle frameBounds = frame.getBounds(); + // Retrieve default screen device again, + // as setDisplayMode() or setFullScreenWindow() + // may have caused display reconfiguration. + gd = ge.getDefaultScreenDevice(); GraphicsConfiguration screenGC = gd.getDefaultConfiguration(); Rectangle screenBounds = screenGC.getBounds(); diff --git a/test/jdk/java/awt/Graphics2D/MetalLayerColorTest.java b/test/jdk/java/awt/Graphics2D/MetalLayerColorTest.java new file mode 100755 index 000000000000..6d8d5361967c --- /dev/null +++ b/test/jdk/java/awt/Graphics2D/MetalLayerColorTest.java @@ -0,0 +1,542 @@ +/* + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.geom.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.*; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import javax.imageio.ImageIO; +import javax.swing.*; + +/** + * @test + * @key headful + * @bug 8311165 + * @requires os.family == "mac" + * @summary [macosx] compares displayed colors versus input colors on macos opengl or metal pipelines. + * @run main/othervm -Dsun.java2d.uiScale=1.0 -Dsun.java2d.opengl=true MetalLayerColorTest + * @run main/othervm -Dsun.java2d.uiScale=1.0 -Dsun.java2d.metal=true MetalLayerColorTest + * @run main/othervm -Dsun.java2d.uiScale=1.0 -Dsun.java2d.metal=true -Dsun.java2d.metal.colorMatching=true MetalLayerColorTest + * @author lbourges + * + * + * Expected results: + * As opengl is the reference implementation on MacOS since 20 years, it uses directly sRGB values (no color matching). + * If the monitor is using display P3, colors are displayed as sRGB colors => color differences are important ! + * + * With MacOS Monitor profile 'sRGB': + * Java2D pipeline: OpenGL + * COLOR_TOLERANCE: 5 + * Stats: delta[729] sum: 0 avg: 0.0 [0 | 0] + * Max colors: 729 + * Bad colors: 0 + * + * With MacOS Monitor profile 'XDR Display P3 (1600 nits)': + * Java2D pipeline: OpenGL + * COLOR_TOLERANCE: 5 + * OpenGL pipeline enabled on screen 1 + * Stats: delta[729] sum: 16534 avg: 22.68 [0 | 96] + * Max colors: 729 + * Bad colors: 615 + + * + * For the apple Metal pipeline, CAMetalLayer was converting sRGB to monitor color space (color matching) until 2023.06. + * A new system property has been introduced to enable back color matching (disabled by default to mimic opengl output) + * + * With MacOS Monitor profile 'sRGB': + * Java2D pipeline: Metal + * COLOR_TOLERANCE: 5 + * Stats: delta[729] sum: 0 avg: 0.0 [0 | 0] + * Max colors: 729 + * Bad colors: 0 + * + * With MacOS Monitor profile 'Display P3 (1600 nits)' -Dsun.java2d.metal.colorMatching=true (before 2023.06.28): + * Java2D pipeline: Metal + * COLOR_TOLERANCE: 5 + * Metal pipeline enabled on screen 1 + * Stats: delta[729] sum: 389 avg: 0.533 [0 | 5] + * Max colors: 729 + * Bad colors: 0 + * + * With MacOS Monitor profile 'Display P3 (1600 nits)' -Dsun.java2d.metal.colorMatching=false (new default on 2023.06.28): + * Java2D pipeline: Metal + * COLOR_TOLERANCE: 5 + * Metal pipeline enabled on screen 1 + * Stats: delta[729] sum: 16534 avg: 22.68 [0 | 96] + * Max colors: 729 + * Bad colors: 615 + * + * With this fix, the metal pipeline renders colors like opengl pipeline (without any color matching) on XDR display. + */ +public class MetalLayerColorTest { + + private final static boolean TRACE_MARKER = false; + private final static boolean TRACE = false; + + private final static int BW = 30; + private final static int BH = 30; + + private final static int MW = BW / 2; + private final static int MH = BH / 2; + + private final static int M = 2; + private final static int M2 = M * 2; + + private final static int CYCLE_DELAY = (1000 / 60); + private final static int MAX_MEASURE_CYCLES = 2000 / CYCLE_DELAY; + private final static int COUNT = 60; + + private final static int COLOR_N_STEP = 8; + private final static int COLOR_STEP = 256 / COLOR_N_STEP; + + private final static int COLOR_TOLERANCE = 5; + + private static final Color GRAY_50 = new Color(192, 192, 192); + + private final static Color[] palette; + + private final static Color[] marker = new Color[] { + Color.BLUE, + Color.GREEN, + Color.RED + }; + + static { + if (TRACE) { + System.out.println("Marker colors: " + Arrays.toString(marker)); + } + + final ArrayList colors = new ArrayList<>(); + + for (int b = 0; b <= 256; b += COLOR_STEP) { + for (int g = 0; g <= 256; g += COLOR_STEP) { + for (int r = 0; r <= 256; r += COLOR_STEP) { + colors.add(new Color(clamp(r), clamp(g), clamp(b))); + } + } + } + palette = colors.toArray(new Color[0]); + if (TRACE) { + System.out.println("Palette colors: " + Arrays.toString(palette)); + } + } + + private final static int N = palette.length; + + private static final Blocks blocks = new Blocks(N, BW, BH); + + static class Blocks { + + private final float[] bx; + private final float[] by; + private final int n; + + private final float bw; + private final float bh; + final float width; + final float height; + + Blocks(int n, float bw, float bh) { + this.n = n; + this.bw = bw; + this.bh = bh; + bx = new float[n]; + by = new float[n]; + + final int rows = (int) Math.ceil(Math.sqrt((n * bh) / bw)); + + this.width = (rows + 2) * bw; + this.height = (rows + 2) * bh; + + if (TRACE) { + System.out.println("width: " + width); + System.out.println("height: " + height); + } + + for (int i = 0, x = 1, y = 1; i < n; i++) { + bx[i] = x * bw; + by[i] = y * bh; + if (x++ >= rows) { + x = 1; + y++; + } + } + } + + void render(Graphics2D g2d) { + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); + + g2d.setBackground(GRAY_50); + g2d.clearRect(0, 0, (int) Math.ceil(width), (int) Math.ceil(height)); + + for (int i = 0; i < n; i++) { + g2d.setColor(palette[i % N]); + g2d.fillRect((int) (bx[i] + M), (int) (by[i] + M), BW - M2, BH - M2); + } + } + + int test(final BufferedImage image) { + int res = 0; + + final StatLong stats = new StatLong("delta"); + + for (int i = 0; i < n; i++) { + final Color exp = palette[i % N]; + final Color c = new Color(image.getRGB((int) (bx[i] + MW), (int) (by[i] + MH))); + + final int delta = delta(c, exp, TRACE); + if (delta <= COLOR_TOLERANCE) { + if (TRACE) { + System.out.println("Same color["+i+"]."); + } + } else { + res++; + if (TRACE) { + System.out.println("Diff color["+i+"] !"); + } + } + stats.add(delta); + } + System.out.println("Stats: "+stats.toString()); + + return res; + } + } + + static class PerfMeter { + + private String name; + + private JPanel panel; + private AtomicInteger markerIdx = new AtomicInteger(0); + private AtomicLong markerPaintTime = new AtomicLong(0); + + PerfMeter(String name) { + this.name = name; + } + + PerfMeter exec() throws Exception { + final CountDownLatch latchFrame = new CountDownLatch(1); + + final JFrame f = new JFrame( + "Java2D @ " + (IS_RDR_METAL ? "Metal" : "OpenGL") + ); + f.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + latchFrame.countDown(); + } + }); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + + panel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + + final int idx = markerIdx.get(); + + final Graphics2D g2d = (Graphics2D) g.create(); + try { + blocks.render(g2d); + + for (int i = 0; i < marker.length; i++) { + final int midx = (idx + i) % marker.length; + final Color mcol = marker[midx]; + + if (TRACE_MARKER) { + System.out.println("paintComponent() [idx = " + midx + "] (RGB) = (" + + mcol.getRed() + "," + + mcol.getGreen() + "," + + mcol.getBlue() + ")"); + } + g2d.setColor(mcol); + g2d.fillRect(i * BW, 0, BW, BH); + } + markerPaintTime.set(System.nanoTime()); + sync(); + } finally { + g2d.dispose(); + } + } + }; + + panel.setPreferredSize(new Dimension((int) blocks.width, (int) blocks.height)); + panel.setBackground(Color.BLACK); + f.add(panel); + f.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); + f.pack(); + + // Disable double-buffering: + RepaintManager.currentManager(f).setDoubleBufferingEnabled(false); + + f.setVisible(true); + } + }); + + final Robot robot = new Robot(); + int cycle = 0; + int frame = 0; + + while (frame < COUNT) { + sync(); + + if (markerPaintTime.getAndSet(0) > 0) { + final Container parent = panel.getTopLevelAncestor(); + final Insets insets = parent.getInsets(); + final int x0 = parent.getX() + insets.left; + final int y0 = parent.getY() + insets.top; + + final int w = panel.getWidth() + insets.right; + final int h = panel.getHeight() + insets.bottom; + + boolean markersFound = true; + + final int idx = markerIdx.get(); + if (TRACE_MARKER) { + System.out.println("expected marker idx: " + idx); + } + + for (int i = 0; i < marker.length; i++) { + final int midx = (idx + i) % marker.length; + final Color exp = marker[midx]; + final Color c = robot.getPixelColor(x0 + MW + i * BW, y0 + MH); + + if (delta(c, exp, TRACE_MARKER) <= COLOR_TOLERANCE) { + if (TRACE_MARKER) { + System.out.println("Same color["+midx+"]."); + } + } else { + markersFound = false; + if (TRACE_MARKER) { + System.out.println("Diff color["+midx+"] !"); + } + break; + } + } + + if (markersFound) { + if (TRACE_MARKER) { + System.out.println("All markers match."); + } + + final AffineTransform tx = parent.getGraphicsConfiguration().getDefaultTransform(); + + final Rectangle windowRect = new Rectangle( + (int) (x0 * tx.getScaleX()), (int) (y0 * tx.getScaleY()), + (int) (w * tx.getScaleX()), (int) (h * tx.getScaleY())); + + if (frame == 0) { + if (TRACE) { + System.out.println("parent: " + parent); + System.out.println("insets: " + insets); + System.out.println("tx: " + tx); + + System.out.println("windowRect: " + windowRect); + } + final BufferedImage capture = robot.createScreenCapture(windowRect); + + if (TRACE) { + System.out.println("image width: " + capture.getWidth()); + System.out.println("image height: " + capture.getHeight()); + } + + ImageIO.write(capture, "png", new File("capture_" + + ((IS_RDR_METAL ? (IS_RDR_METAL_CM ? "metal_cm1" : "metal_cm0") : "opengl")) +".png") + ); + + final int res = blocks.test(capture); + + System.out.println("Max colors: " + N); + System.out.println("Bad colors: " + res); + + if (false) { + break; + } + } + + frame++; + markerIdx.accumulateAndGet(marker.length, (x, y) -> (x + 1) % y); + } + } + // always repaint: + panel.getParent().repaint(); + + try { + Thread.sleep(CYCLE_DELAY); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + if (cycle >= MAX_MEASURE_CYCLES) { + System.out.println("Max cycle : " + cycle); + break; + } + cycle++; + } // while + + SwingUtilities.invokeAndWait(() -> { + f.setVisible(false); + f.dispose(); + }); + latchFrame.await(); + return this; + } + } + + private static boolean IS_RDR_METAL = false; + private static boolean IS_RDR_METAL_CM = false; + + public static void main(String[] args) { + if (System.getProperty("sun.java2d.opengl") == null && System.getProperty("sun.java2d.metal") == null) { + System.setProperty("sun.java2d.metal", "true"); // default + } + + IS_RDR_METAL = "true".equalsIgnoreCase(System.getProperty("sun.java2d.metal")); + + if ("true".equalsIgnoreCase(System.getProperty("sun.java2d.opengl"))) { + IS_RDR_METAL = false; + } + System.out.println("Java2D pipeline: " + (IS_RDR_METAL ? "Metal" : "OpenGL")); + + if (IS_RDR_METAL) { + IS_RDR_METAL_CM = !"false".equalsIgnoreCase(System.getProperty("sun.java2d.metal.colorMatching")); + System.out.println("IS_RDR_METAL_CM: " + IS_RDR_METAL_CM); + } + + System.out.println("COLOR_TOLERANCE: " + COLOR_TOLERANCE); + + try { + new PerfMeter("FlatBoxAA").exec(); + } catch (Exception e) { + new RuntimeException("Test failed.", e); + } + } + + // --- Utility methods --- + private static void sync() { + Toolkit.getDefaultToolkit().sync(); + } + + private static int clamp(final int v) { + return Math.max(0, Math.min(v, 255)); + } + + private static int delta(final Color c, final Color exp, final boolean dump) { + final int dr = Math.abs(c.getRed() - exp.getRed()); + final int dg = Math.abs(c.getGreen() - exp.getGreen()); + final int db = Math.abs(c.getBlue() - exp.getBlue()); + + final int delta = Math.max(Math.max(dr, dg), db); + + if (dump && (delta > COLOR_TOLERANCE)) { + System.out.println("Expected: (RGB) = (" + exp.getRed() + "," + exp.getGreen() + "," + exp.getBlue() + ")"); + System.out.println("Color: (RGB) = (" + c.getRed() + "," + c.getGreen() + "," + c.getBlue() + ")"); + System.out.println("Delta col (RGB) = (" + dr + "," + dg + "," + db + ")"); + System.out.println("Delta: = " + delta); + } + return delta; + } + + private static boolean isAlmostEqual(final Color c, final Color exp, final boolean dump) { + return (delta(c, exp, dump) <= COLOR_TOLERANCE); + } + + /** + * Statistics as long values + */ + final static class StatLong { + + public final String name; + public long count = 0L; + public long sum = 0L; + public long min = Integer.MAX_VALUE; + public long max = Integer.MIN_VALUE; + + public StatLong(final String name) { + this.name = name; + } + + public void reset() { + count = 0L; + sum = 0L; + min = Integer.MAX_VALUE; + max = Integer.MIN_VALUE; + } + + public void add(final int val) { + count++; + sum += val; + if (val < min) { + min = val; + } + if (val > max) { + max = val; + } + } + + public void add(final long val) { + count++; + sum += val; + if (val < min) { + min = val; + } + if (val > max) { + max = val; + } + } + + @Override + public String toString() { + return toString(new StringBuilder(128)).toString(); + } + + public final StringBuilder toString(final StringBuilder sb) { + sb.append(name).append('[').append(count); + sb.append("] sum: ").append(sum).append(" avg: "); + sb.append(trimTo3Digits(((double) sum) / count)); + sb.append(" [").append(min).append(" | ").append(max).append("]"); + return sb; + } + + /** + * Adjust the given double value to keep only 3 decimal digits + * + * @param value value to adjust + * @return double value with only 3 decimal digits + */ + public static double trimTo3Digits(final double value) { + return ((long) (1e3d * value)) / 1e3d; + } + } + +} diff --git a/test/jdk/java/awt/GraphicsDevice/CheckDisplayModes.java b/test/jdk/java/awt/GraphicsDevice/CheckDisplayModes.java index 3d909e2185e8..ffc98dcda1ae 100644 --- a/test/jdk/java/awt/GraphicsDevice/CheckDisplayModes.java +++ b/test/jdk/java/awt/GraphicsDevice/CheckDisplayModes.java @@ -41,28 +41,36 @@ public static void main(String[] args) { continue; } DisplayMode defaultDisplayMode = graphicDevice.getDisplayMode(); + System.out.println("Initial Display mode: " + defaultDisplayMode); checkDisplayMode(defaultDisplayMode); graphicDevice.setDisplayMode(defaultDisplayMode); - DisplayMode[] displayModes = graphicDevice.getDisplayModes(); - boolean isDefaultDisplayModeIncluded = false; - for (DisplayMode displayMode : displayModes) { - checkDisplayMode(displayMode); - graphicDevice.setDisplayMode(displayMode); - if (defaultDisplayMode.equals(displayMode)) { - isDefaultDisplayModeIncluded = true; + try { + DisplayMode[] displayModes = graphicDevice.getDisplayModes(); + boolean isDefaultDisplayModeIncluded = false; + for (DisplayMode displayMode : displayModes) { + checkDisplayMode(displayMode); + graphicDevice.setDisplayMode(displayMode); + System.out.println("\tDisplay mode changed to " + displayMode); + if (defaultDisplayMode.equals(displayMode)) { + isDefaultDisplayModeIncluded = true; + } } - } - if (!isDefaultDisplayModeIncluded) { - throw new RuntimeException("Default display mode is not included"); + if (!isDefaultDisplayModeIncluded) { + throw new RuntimeException("Default display mode is not included"); + } + } finally { + System.out.println("Restoring display mode to " + defaultDisplayMode); + graphicDevice.setDisplayMode(defaultDisplayMode); + System.out.println("Display mode restored " + defaultDisplayMode); } } } static void checkDisplayMode(DisplayMode displayMode) { if (displayMode == null || displayMode.getWidth() <= 1 || displayMode.getHeight() <= 1) { - throw new RuntimeException("invalid display mode"); + throw new RuntimeException("invalid display mode" + displayMode); } } } diff --git a/test/jdk/java/awt/GraphicsDevice/DisplayModes/ExtraAllocationTest.java b/test/jdk/java/awt/GraphicsDevice/DisplayModes/ExtraAllocationTest.java new file mode 100644 index 000000000000..892939f3502b --- /dev/null +++ b/test/jdk/java/awt/GraphicsDevice/DisplayModes/ExtraAllocationTest.java @@ -0,0 +1,113 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Dimension; +import java.awt.DisplayMode; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.lang.reflect.InvocationTargetException; +import java.nio.file.Path; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import jdk.jfr.Recording; +import java.io.IOException; +import jdk.jfr.consumer.RecordedEvent; +import jdk.jfr.consumer.RecordedFrame; +import jdk.jfr.consumer.RecordingFile; + +/* + * @test + * @key headful + * + * @summary Test verifies that there is no extra allocation after display mode switch + * + * @run main/othervm -Xmx750M ExtraAllocationTest + */ + +public class ExtraAllocationTest { + private static final int MAX_MODES = 10; + private static final int W = 500; + private static final int H = 500; + static JFrame f = null; + static long th = ((long) W * H * 32) / (8 * 2); + public static void main(String[] args) throws InterruptedException, InvocationTargetException, + IOException + { + Recording recording = new Recording(); + recording.enable("jdk.ObjectAllocationOutsideTLAB"); + recording.start(); + SwingUtilities.invokeAndWait(() -> { + f = new JFrame(); + f.add(new JPanel()); + f.setPreferredSize(new Dimension(W, H)); + f.pack(); + f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + f.setVisible(true); + }); + + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice d = ge.getDefaultScreenDevice(); + + final DisplayMode originalDisplayMode = d.getDisplayMode(); + + if (d.isDisplayChangeSupported()) { + DisplayMode[] modes = d.getDisplayModes(); + int modesCount = Math.min(modes.length, MAX_MODES); + + for (int i = 0; i < modesCount; i++) { + DisplayMode mode = modes[i]; + try { + d.setDisplayMode(mode); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } finally { + d.setDisplayMode(originalDisplayMode); + } + Thread.sleep(2000); + } + } + f.setVisible(false); + f.dispose(); + Thread.sleep(1000); + Path path = Path.of("recording.jfr"); + recording.dump(path); + recording.close(); + + for (RecordedEvent event : RecordingFile.readAllEvents(path)) { + if ("jdk.ObjectAllocationOutsideTLAB".equalsIgnoreCase(event.getEventType().getName())) { + for (RecordedFrame recordedFrame :event.getStackTrace().getFrames()) { + if (recordedFrame.isJavaFrame() && + "java.awt.image.DataBufferInt".equals( + recordedFrame.getMethod().getType().getName()) && + event.getLong("allocationSize") > th) + { + throw new RuntimeException("Extra allocation detected: " + + event.getLong("allocationSize")); + } + } + } + } + } +} diff --git a/test/jdk/java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java b/test/jdk/java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java index 5679f81b7da3..321460f8d38d 100644 --- a/test/jdk/java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java +++ b/test/jdk/java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java @@ -33,6 +33,7 @@ import java.awt.GraphicsEnvironment; public class UnknownRefrshRateTest { + private static final int MAX_MODES = 10; public static void main(String[] args) throws Exception { @@ -50,7 +51,9 @@ public static void main(String[] args) throws Exception { DisplayMode[] modes = d.getDisplayModes(); System.out.println("There are " + modes.length + " modes."); try { - for (int i=0; i frames = new ArrayList<>(); + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + AtomicReference displayChangedRef = new AtomicReference<>(false); + + SunGraphicsEnvironment env = + (SunGraphicsEnvironment)SunGraphicsEnvironment.getLocalGraphicsEnvironment(); + env.addDisplayChangedListener(new DisplayChangedListener() { + @Override + public void displayChanged() { + displayChangedRef.set(true); + } + + @Override + public void paletteChanged() { + } + }); + + final GraphicsDevice[] devices = ge.getScreenDevices(); + final CountDownLatch initLatch = new CountDownLatch(devices.length); + + + SwingUtilities.invokeLater(() -> { + for (int i = 0; i < devices.length; i++) { + GraphicsDevice device = devices[i]; + Rectangle bounds = device.getDefaultConfiguration().getBounds(); + JFrame frame = new JFrame("Monitor " + (i + 1)); + frame.addComponentListener(new ComponentAdapter() { + @Override + public void componentShown(ComponentEvent e) { + initLatch.countDown(); + } + }); + + JPanel panel = new JPanel(); + panel.setPreferredSize(new Dimension(300, 200)); + frame.add(panel); + frame.setBounds(bounds); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.pack(); + frames.add(frame); + frame.setVisible(true); + } + }); + + initLatch.await(); + + CountDownLatch popupLatch = new CountDownLatch(frames.size()); + + SwingUtilities.invokeLater(() -> { + for (int i = 0; i < frames.size(); i++) { + final JFrame frame = frames.get(i); + JPopupMenu popupMenu = new JPopupMenu(); + popupMenu.addPopupMenuListener(new PopupMenuListener() { + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + popupLatch.countDown(); + } + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + } + @Override + public void popupMenuCanceled(PopupMenuEvent e) { + } + }); + popupMenu.add(new JMenuItem("Popup Menu Item" + (i + 1))); + popupMenu.show(frame, 50, 50); + } + }); + + popupLatch.await(); + SwingUtilities.invokeLater(() -> frames.forEach(Window::dispose)); + if (displayChangedRef.get()) { + throw new RuntimeException("displayChanged() has been called"); + } + } +} \ No newline at end of file diff --git a/test/jdk/java/awt/Insets/DialogInsets.java b/test/jdk/java/awt/Insets/DialogInsets.java new file mode 100644 index 000000000000..95dcc61a6572 --- /dev/null +++ b/test/jdk/java/awt/Insets/DialogInsets.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @key headful + * @summary Verifies that JDialog's insets are the same every time the dialog is created. + * @requires (os.family == "linux") + * @run main DialogInsets + */ + +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.Timer; +import javax.swing.WindowConstants; +import java.awt.Frame; +import java.awt.Insets; +import java.awt.Robot; +import java.awt.event.ActionEvent; +import java.lang.reflect.InvocationTargetException; + +public class DialogInsets { + private static Robot robot; + private static Insets insets; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + + final JFrame frame = new JFrame("Test Dialog Demo"); + frame.setBounds(100, 100, 400, 300); + frame.setVisible(true); + + robot.delay(300); + + for (int i = 0; i < 16; i++) { + runSwing(() -> showDialog(frame)); + robot.delay(300); + } + + runSwing( () -> frame.dispose() ); + } + + private static void showDialog(Frame parent) { + final JLabel content = new JLabel("test label", SwingConstants.CENTER); + final JDialog dialog = new JDialog(parent, "Test Dialog", true); + + if (insets == null) { + // Slow down the first time in order to increase the chance to get the right insets. + robot.delay(300); + } + + dialog.setContentPane(content); + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dialog.setResizable(false); + dialog.pack(); + + final Insets localInsets = dialog.getInsets(); + System.out.println(localInsets); + + if (insets == null) { + insets = localInsets; + } else if (!insets.equals(localInsets)) { + throw new RuntimeException("insets differ (" + insets + " before, " + localInsets + " now)"); + } + + final Timer closeTimer = new Timer(300, (ActionEvent event) -> { dialog.setVisible(false); dialog.dispose(); } ); + closeTimer.setRepeats(false); + closeTimer.start(); + + dialog.setLocationRelativeTo(parent); + dialog.setVisible(true); + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException ignored) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } +} diff --git a/test/jdk/java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java b/test/jdk/java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java index 5772bfd5f581..f7e4f51d4375 100644 --- a/test/jdk/java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java +++ b/test/jdk/java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java @@ -116,15 +116,6 @@ public void focusGained(FocusEvent e) { b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.err.println("B pressed"); - - EventQueue.invokeLater(new Runnable() { - public void run() { - waitTillShown(d); - TestDialogTypeAhead.this.d.toFront(); - TestDialogTypeAhead.this.moveMouseOver(d); - } - }); - d.setVisible(true); } }); @@ -152,6 +143,9 @@ public void start () robot.keyPress(KeyEvent.VK_SPACE); robot.keyRelease(KeyEvent.VK_SPACE); + waitTillShown(d); + d.toFront(); + moveMouseOver(d); try { robotSema.doWait(1000); diff --git a/test/jdk/java/awt/List/ActionAfterRemove/ActionAfterRemove.java b/test/jdk/java/awt/List/ActionAfterRemove/ActionAfterRemove.java index 1ac4331ffddb..4483b1a7b3cb 100644 --- a/test/jdk/java/awt/List/ActionAfterRemove/ActionAfterRemove.java +++ b/test/jdk/java/awt/List/ActionAfterRemove/ActionAfterRemove.java @@ -35,12 +35,13 @@ import java.awt.*; import java.awt.event.*; import test.java.awt.regtesthelpers.Util; +import javax.swing.SwingUtilities; public class ActionAfterRemove { private static volatile boolean passed = true; - public static final void main(String args[]) + public static final void main(String args[]) throws Exception { // In order to handle all uncaught exceptions in the EDT final Thread.UncaughtExceptionHandler eh = new Thread.UncaughtExceptionHandler() @@ -53,20 +54,22 @@ public void uncaughtException(Thread t, Throwable e) } }; - final Frame frame = new Frame(); final List list = new List(); Robot robot = null; + SwingUtilities.invokeAndWait(() -> { + final Frame frame = new Frame(); - list.add("will be removed"); - frame.add(list); + list.add("will be removed"); + frame.add(list); - frame.setLayout(new FlowLayout()); - frame.setBounds(100,100,300,300); - frame.setVisible(true); + frame.setLayout(new FlowLayout()); + frame.setBounds(100, 100, 300, 300); + frame.setVisible(true); - list.select(0); - list.remove(0); + list.select(0); + list.remove(0); + }); try{ robot = new Robot(); diff --git a/test/jdk/java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java b/test/jdk/java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java index 6d9dd73454f7..250b044450a9 100644 --- a/test/jdk/java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java +++ b/test/jdk/java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java @@ -42,6 +42,7 @@ public class ComponentIsNotDrawnAfterRemoveAddTest { private final Frame frame; private final Panel panel; private final ArrayList compList = new ArrayList(); + private final int PAUSE = 3000; public ComponentIsNotDrawnAfterRemoveAddTest() { frame = new Frame("ComponentIsNotDrawnAfterRemoveAddTest"); @@ -93,7 +94,7 @@ public ComponentIsNotDrawnAfterRemoveAddTest() { private void runTest() { try { - doSleep(1500); + doSleep(PAUSE); checkTestableComponents(); for (int i = 0; i < 5; i++) { @@ -104,7 +105,7 @@ private void runTest() { frame.validate(); frame.add(panel); - doSleep(1500); + doSleep(PAUSE); checkTestableComponents(); } } finally { diff --git a/test/jdk/java/awt/TextArea/DisposeTest/TestDispose.java b/test/jdk/java/awt/TextArea/DisposeTest/TestDispose.java index 1c5482b92817..81d49c2f7792 100644 --- a/test/jdk/java/awt/TextArea/DisposeTest/TestDispose.java +++ b/test/jdk/java/awt/TextArea/DisposeTest/TestDispose.java @@ -38,12 +38,15 @@ import java.awt.TextArea; import java.awt.Robot; import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class TestDispose { + public static final int TIMEOUT = 30; + public static Frame frame = null; public static TextArea textArea = null; public static volatile Process worker = null; @@ -57,33 +60,33 @@ public void testDispose() throws InvocationTargetException, ex.printStackTrace(); throw new RuntimeException("Unexpected failure"); } + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new JFrame("Test"); + textArea = new TextArea("editable textArea"); + textArea.setEditable(true); + // textArea.setEditable(false); // this testcase passes if textArea is non-editable - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - frame = new JFrame("Test"); - - textArea = new TextArea("editable textArea"); - textArea.setEditable(true); - // textArea.setEditable(false); // this testcase passes if textArea is non-editable - - frame.setLayout(new FlowLayout()); - frame.add(textArea); - - frame.pack(); - frame.setVisible(true); - } - }); - robot.waitForIdle(); + frame.setLayout(new FlowLayout()); + frame.add(textArea); - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - frame.dispose(); - } - }); - robot.waitForIdle(); + frame.pack(); + frame.setVisible(true); + } + }); + robot.waitForIdle(); + } finally { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame.dispose(); + } + }); + robot.waitForIdle(); + } } public static void main(String[] args) throws Exception{ @@ -94,10 +97,21 @@ public void run() { } }); - System.out.println(System.getProperty("java.home")+"/bin/java TestDispose workprocess"); - worker = Runtime.getRuntime().exec(System.getProperty("java.home")+"/bin/java TestDispose workprocess"); - worker.waitFor(); - return; + System.out.println(System.getProperty("java.home") + "/bin/java -cp " + + System.getProperty("java.class.path") + " " + TestDispose.class.getName() + " workprocess"); + worker = new ProcessBuilder(System.getProperty("java.home")+"/bin/java", + "-cp", System.getProperty("java.class.path"), TestDispose.class.getName(), "workprocess") + .redirectError(ProcessBuilder.Redirect.INHERIT) + .start(); + if(worker.waitFor(TIMEOUT, TimeUnit.SECONDS)) { + if(worker.exitValue() != 0) { + throw new RuntimeException("TEST ERROR: subprocess has finished abnormally"); + } + System.out.println("TEST PASSED"); + return; + } else { + throw new RuntimeException("TEST FAILED: subprocess has not finished for " + TIMEOUT + " sec"); + } } TestDispose app = new TestDispose(); diff --git a/test/jdk/java/awt/TextArea/TextAreaEditing/TextAreaEditing.java b/test/jdk/java/awt/TextArea/TextAreaEditing/TextAreaEditing.java index 71d5d25c9135..1c798ca9b10f 100644 --- a/test/jdk/java/awt/TextArea/TextAreaEditing/TextAreaEditing.java +++ b/test/jdk/java/awt/TextArea/TextAreaEditing/TextAreaEditing.java @@ -34,37 +34,43 @@ import java.awt.Frame; import java.awt.Robot; import java.awt.TextArea; -import java.awt.AWTException; import java.awt.event.KeyEvent; +import java.lang.reflect.InvocationTargetException; + import test.java.awt.regtesthelpers.Util; +import javax.swing.*; + public class TextAreaEditing { final static Robot robot = Util.createRobot(); - private int testFailCount; - private boolean isTestFail; - private StringBuilder testFailMessage; - - private Frame mainFrame; - private TextArea textArea; - - private TextAreaEditing() { - testFailMessage = new StringBuilder(); - mainFrame = new Frame(); - mainFrame.setSize(200, 200); - - textArea = new TextArea(); - mainFrame.add(textArea); - mainFrame.setVisible(true); + private volatile int testFailCount = 0; + private volatile boolean isTestFail = false; + private final StringBuilder testFailMessage = new StringBuilder(); + + private Frame mainFrame = null; + private TextArea textArea = null; + + private TextAreaEditing() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + mainFrame = new Frame(); + mainFrame.setSize(200, 200); + + textArea = new TextArea(); + mainFrame.add(textArea); + mainFrame.setVisible(true); + }); } - private void dispose() { - if (mainFrame != null) { - mainFrame.dispose(); - } + private void dispose() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + if (mainFrame != null) { + mainFrame.dispose(); + } + }); } - public static void main(String[] s) { + public static void main(String[] s) throws InterruptedException, InvocationTargetException { TextAreaEditing textArea = new TextAreaEditing(); textArea.testReplaceRange(); textArea.testInsert(); @@ -74,79 +80,90 @@ public static void main(String[] s) { textArea.dispose(); } - private void testReplaceRange() { - textArea.setText(null); - textArea.replaceRange("Replace", 0, 0); - textArea.setText(null); - checkTest(""); + private void testReplaceRange() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + textArea.setText(null); + textArea.replaceRange("Replace", 0, 0); + textArea.setText(null); + checkTest(""); - textArea.setText("SetText"); - textArea.replaceRange("Replace", 0, 3); - checkTest("ReplaceText"); + textArea.setText("SetText"); + textArea.replaceRange("Replace", 0, 3); + checkTest("ReplaceText"); - textArea.replaceRange("String", textArea.getText().length(), - textArea.getText().length()); - checkTest("ReplaceTextString"); + textArea.replaceRange("String", textArea.getText().length(), + textArea.getText().length()); + checkTest("ReplaceTextString"); - textArea.replaceRange("String", 0, 0); - checkTest("StringReplaceTextString"); + textArea.replaceRange("String", 0, 0); + checkTest("StringReplaceTextString"); - textArea.replaceRange("replaceRange", 0, textArea.getText().length()); - checkTest("replaceRange"); + textArea.replaceRange("replaceRange", 0, textArea.getText().length()); + checkTest("replaceRange"); + }); } - private void testInsert() { - textArea.setText(null); - textArea.insert("Insert", 0); - textArea.setText(""); - checkTest(""); + private void testInsert() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + textArea.setText(null); + textArea.insert("Insert", 0); + textArea.setText(""); + checkTest(""); - textArea.setText("SetText"); - textArea.insert("Insert", 3); - checkTest("SetInsertText"); + textArea.setText("SetText"); + textArea.insert("Insert", 3); + checkTest("SetInsertText"); - textArea.insert("Insert", 0); - checkTest("InsertSetInsertText"); + textArea.insert("Insert", 0); + checkTest("InsertSetInsertText"); - textArea.insert("Insert", textArea.getText().length()); - checkTest("InsertSetInsertTextInsert"); + textArea.insert("Insert", textArea.getText().length()); + checkTest("InsertSetInsertTextInsert"); + }); } - private void testAppend() { - textArea.setText(null); - textArea.append("Append"); - textArea.setText(null); - checkTest(""); - - textArea.setText("SetText"); - textArea.append("Append"); - checkTest("SetTextAppend"); - - textArea.append(""); - checkTest("SetTextAppend"); - textArea.setText(""); - checkTest(""); + private void testAppend() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + textArea.setText(null); + textArea.append("Append"); + textArea.setText(null); + checkTest(""); + + textArea.setText("SetText"); + textArea.append("Append"); + checkTest("SetTextAppend"); + + textArea.append(""); + checkTest("SetTextAppend"); + textArea.setText(""); + checkTest(""); + }); } - private void testSetText() { - textArea.setText(null); - textArea.requestFocus(); + private void testSetText() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + textArea.setText(null); + textArea.requestFocus(); + }); Util.clickOnComp(textArea, robot); Util.waitForIdle(robot); robot.keyPress(KeyEvent.VK_A); robot.delay(5); robot.keyRelease(KeyEvent.VK_A); Util.waitForIdle(robot); - textArea.setText(null); - checkTest(""); - textArea.setText("CaseSensitive"); - checkTest("CaseSensitive"); - textArea.setText("caseSensitive"); - checkTest("caseSensitive"); - + SwingUtilities.invokeAndWait(() -> { + textArea.setText(null); + checkTest(""); + textArea.setText("CaseSensitive"); + checkTest("CaseSensitive"); + textArea.setText("caseSensitive"); + checkTest("caseSensitive"); + }); } private void checkTest(String str) { + assert SwingUtilities.isEventDispatchThread(); + if (str != null && !str.equals(textArea.getText())) { testFailMessage.append("TestFail line : "); testFailMessage.append(Thread.currentThread().getStackTrace()[2]. @@ -161,7 +178,7 @@ private void checkTest(String str) { } } - private void checkFailures() { + private void checkFailures() throws InterruptedException, InvocationTargetException { if (isTestFail) { testFailMessage.insert(0, "Test Fail count : " + testFailCount + System.getProperty("line.separator")); diff --git a/test/jdk/java/awt/TextField/DisposeTest/TestDispose.java b/test/jdk/java/awt/TextField/DisposeTest/TestDispose.java index ee697ad22b93..c810135b176f 100644 --- a/test/jdk/java/awt/TextField/DisposeTest/TestDispose.java +++ b/test/jdk/java/awt/TextField/DisposeTest/TestDispose.java @@ -38,12 +38,15 @@ import java.awt.TextField; import java.awt.Robot; import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class TestDispose { + public static final int TIMEOUT = 30; + public static Frame frame = null; public static TextField textField = null; public static volatile Process worker = null; @@ -58,31 +61,33 @@ public void testDispose() throws InvocationTargetException, throw new RuntimeException("Unexpected failure"); } - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - frame = new JFrame("Test"); + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new JFrame("Test"); - textField = new TextField("editable textArea"); - textField.setEditable(true); - // textField.setEditable(false); // this testcase passes if textField is non-editable + textField = new TextField("editable textArea"); + textField.setEditable(true); + // textField.setEditable(false); // this testcase passes if textField is non-editable - frame.setLayout(new FlowLayout()); - frame.add(textField); + frame.setLayout(new FlowLayout()); + frame.add(textField); - frame.pack(); - frame.setVisible(true); - } - }); - robot.waitForIdle(); - - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - frame.dispose(); - } - }); - robot.waitForIdle(); + frame.pack(); + frame.setVisible(true); + } + }); + robot.waitForIdle(); + } finally { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame.dispose(); + } + }); + robot.waitForIdle(); + } } @@ -94,10 +99,21 @@ public void run() { } }); - System.out.println(System.getProperty("java.home")+"/bin/java TestDispose workprocess"); - worker = Runtime.getRuntime().exec(System.getProperty("java.home")+"/bin/java TestDispose workprocess"); - worker.waitFor(); - return; + System.out.println(System.getProperty("java.home") + "/bin/java -cp " + + System.getProperty("java.class.path") + " " + TestDispose.class.getName() + " workprocess"); + worker = new ProcessBuilder(System.getProperty("java.home")+"/bin/java", + "-cp", System.getProperty("java.class.path"), TestDispose.class.getName(), "workprocess") + .redirectError(ProcessBuilder.Redirect.INHERIT) + .start(); + if(worker.waitFor(TIMEOUT, TimeUnit.SECONDS)) { + if(worker.exitValue() != 0) { + throw new RuntimeException("TEST ERROR: subprocess has finished abnormally"); + } + System.out.println("TEST PASSED"); + return; + } else { + throw new RuntimeException("TEST FAILED: subprocess has not finished for " + TIMEOUT + " sec"); + } } TestDispose app = new TestDispose(); diff --git a/test/jdk/java/awt/Toolkit/SunDisplayChangerLeakTest/SunDisplayChangerLeakTest.java b/test/jdk/java/awt/Toolkit/SunDisplayChangerLeakTest/SunDisplayChangerLeakTest.java new file mode 100644 index 000000000000..102a06c041c3 --- /dev/null +++ b/test/jdk/java/awt/Toolkit/SunDisplayChangerLeakTest/SunDisplayChangerLeakTest.java @@ -0,0 +1,125 @@ +/* + * Copyright 2017-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import sun.awt.DisplayChangedListener; +import sun.awt.image.BufferedImageGraphicsConfig; +import sun.awt.image.SunVolatileImage; +import sun.java2d.SunGraphicsEnvironment; + +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.VolatileImage; +import java.util.*; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +/* + * https://youtrack.jetbrains.com/issue/JRE-577 + * @test + * @summary SunDisplayChanger should not prevent listeners from gc'ing + * @author anton.tarasov + * @modules java.desktop/sun.awt java.desktop/sun.awt.image java.desktop/sun.java2d + * @run main/othervm -Xmx64m -Dswing.bufferPerWindow=true SunDisplayChangerLeakTest +*/ +public class SunDisplayChangerLeakTest { + static int frameCountDown = 20; + static final Map STRONG_MAP = new HashMap<>(); + static final GraphicsConfiguration BI_GC = BufferedImageGraphicsConfig.getConfig(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)); + + static volatile boolean passed; + + /** + * Shows a frame, then refs its back buffer. + */ + static void showFrame(CountDownLatch latch) { + JFrame frame = new JFrame("frame") { + @Override + public VolatileImage createVolatileImage(int w, int h) { + // Back the frame buffer by BufferedImage so that it's allocated in RAM + VolatileImage img = new SunVolatileImage(BI_GC, w, h, Transparency.TRANSLUCENT, new ImageCapabilities(false)); + STRONG_MAP.put(img, null); + + EventQueue.invokeLater(() -> { + dispose(); // release the frame buffer + latch.countDown(); + }); + return img; + } + }; + frame.setSize(500, 500); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + + public static void main(String[] args) throws InterruptedException { + while(--frameCountDown >= 0) { + CountDownLatch latch = new CountDownLatch(1); + EventQueue.invokeLater(() -> showFrame(latch)); + latch.await(); + } + + SunGraphicsEnvironment env = (SunGraphicsEnvironment)SunGraphicsEnvironment.getLocalGraphicsEnvironment(); + DisplayChangedListener strongRef; + env.addDisplayChangedListener(strongRef = new DisplayChangedListener() { + @Override + public void displayChanged() { + // Now we're in the process of iterating over a local copy of the DisplayChangedListener's internal map. + // Let's force OOME and make sure the local copy doesn't prevent the listeners from gc'ing. + + int strongSize = STRONG_MAP.size(); + System.out.println("strong size: " + strongSize); + + // Release the images + Map weakMap = new WeakHashMap<>(STRONG_MAP); + STRONG_MAP.clear(); + + List garbage = new ArrayList<>(); + try { + while (true) { + garbage.add(new int[1000000]); + } + } catch (OutOfMemoryError e) { + garbage.clear(); + System.out.println("OutOfMemoryError"); + } + int weakSize = weakMap.size(); + System.out.println("weak size: " + weakSize); + + passed = weakSize < strongSize; + } + + @Override + public void paletteChanged() { + System.out.println(new int[1000]); + } + }); + assert strongRef != null; // make it "used" to please javac + + // call the above listener + env.displayChanged(); + + if (!passed) throw new RuntimeException("Test FAILED"); + + System.out.println("Test PASSED"); + } +} diff --git a/test/jdk/java/awt/Window/Grab/GrabTest.java b/test/jdk/java/awt/Window/Grab/GrabTest.java index b173477c164c..a859accf7e57 100644 --- a/test/jdk/java/awt/Window/Grab/GrabTest.java +++ b/test/jdk/java/awt/Window/Grab/GrabTest.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -137,6 +138,10 @@ public void mousePressed(MouseEvent e) { Util.waitForIdle(robot); robot.delay(500); test(); + + frame.dispose(); + f1.dispose(); + f.dispose(); } public static void test() { @@ -192,6 +197,7 @@ public static void test() { robot.delay(500); Util.clickOnTitle(f1, robot); + robot.delay(100); Util.waitForIdle(robot); if (!ungrabbed) { diff --git a/test/jdk/java/awt/Window/WindowAppearanceTest/WindowAppearanceTest.java b/test/jdk/java/awt/Window/WindowAppearanceTest/WindowAppearanceTest.java new file mode 100644 index 000000000000..6de0fe207964 --- /dev/null +++ b/test/jdk/java/awt/Window/WindowAppearanceTest/WindowAppearanceTest.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @key headful + * @bug 8265445 + * @summary [macosx] window appearance test + * @author Alexey Ushakov + * @run main WindowAppearanceTest + * @requires (os.family == "mac") + */ + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.lang.reflect.InvocationTargetException; +import javax.swing.*; + +public class WindowAppearanceTest +{ + private static final int TD = 10; + // Colors for unfocused/focused frames + private static final Color [] darkSystemGrays = { + new Color(58, 58, 60), new Color(40, 37, 48), new Color(96, 93, 99)}; + private static final Color [] lightSystemGrays = { + new Color(242, 242, 247), new Color(230, 228, 232)}; + static WindowAppearanceTest theTest; + private Robot robot; + private JFrame frame; + private JRootPane rootPane; + + private int DELAY = 1000; + + public WindowAppearanceTest() { + try { + robot = new Robot(); + } catch (AWTException ex) { + throw new RuntimeException(ex); + } + } + + public void performTest() { + + runSwing(() -> { + frame = new JFrame(""); + frame.setBounds(100, 100, 300, 150); + rootPane = frame.getRootPane(); + JComponent contentPane = (JComponent) frame.getContentPane(); + JPanel comp = new JPanel(); + contentPane.add(comp); + comp.setBackground(Color.RED); + frame.setVisible(true); + }); + + robot.delay(DELAY); + runSwing(() -> rootPane.putClientProperty("apple.awt.windowTitleVisible", false)); + runSwing(() -> rootPane.putClientProperty("apple.awt.windowAppearance", "NSAppearanceNameVibrantDark")); + robot.delay(DELAY); + + validateColor(darkSystemGrays); + + runSwing(() -> rootPane.putClientProperty("apple.awt.windowAppearance", "NSAppearanceNameVibrantLight")); + robot.delay(DELAY); + + validateColor(lightSystemGrays); + + runSwing(() -> frame.dispose()); + + frame = null; + rootPane = null; + } + + private Color getTestPixel(int x, int y) { + Rectangle bounds = frame.getBounds(); + BufferedImage screenImage = robot.createScreenCapture(bounds); + int rgb = screenImage.getRGB(x, y); + int red = (rgb >> 16) & 0xFF; + int green = (rgb >> 8) & 0xFF; + int blue = rgb & 0xFF; + Color c = new Color(red, green, blue); + return c; + } + + private void validateColor(Color[] colors) { + for (int px = 140; px < 160; px++) { + for (int py = 5; py < 20; py++) { + Color c = getTestPixel(px, py); + boolean invalid = true; + for (Color color : colors) { + if (validateColor(c, color)) { + invalid = false; + break; + } else { + System.out.println(color + " does not pass"); + } + } + if (invalid) { + throw new RuntimeException("Test failed. Incorrect color " + + c + " at (" + px + "," + py + ")"); + } + } + } + } + + private boolean validateColor(Color c, Color expected) { + return Math.abs(c.getRed() - expected.getRed()) <= TD && + Math.abs(c.getGreen() - expected.getGreen()) <= TD && + Math.abs(c.getBlue() - expected.getBlue()) <= TD; + } + + public void dispose() { + if (frame != null) { + frame.dispose(); + frame = null; + } + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException e) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + public static void main(String[] args) { + if (!System.getProperty("os.name").contains("OS X")) { + System.out.println("This test is for MacOS only. Automatically passed on other platforms."); + return; + } + + try { + runSwing(() -> theTest = new WindowAppearanceTest()); + theTest.performTest(); + } finally { + if (theTest != null) { + runSwing(() -> theTest.dispose()); + } + } + } +} diff --git a/test/jdk/java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java b/test/jdk/java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java index ff2a9344f45d..314a3ca9b4fc 100644 --- a/test/jdk/java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java +++ b/test/jdk/java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java @@ -29,6 +29,7 @@ * Note: the test requires GNOME Shell window manager and will automatically * pass with any other WM. * @requires (os.family == "linux") + * @requires !display.XWayland * @run main WindowTitleVisibleTestLinuxGnome */ diff --git a/test/jdk/java/awt/a11y/AccessibleAnnouncerTest.java b/test/jdk/java/awt/a11y/AccessibleAnnouncerTest.java new file mode 100644 index 000000000000..0dcaff6c3f98 --- /dev/null +++ b/test/jdk/java/awt/a11y/AccessibleAnnouncerTest.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Test implementation of accessibility announcing + * @key headful + * @modules java.desktop/sun.swing:+open + * @run main/othervm/manual -Xcheck:jni AccessibleAnnouncerTest false + * @run main/othervm/manual -Xcheck:jni AccessibleAnnouncerTest true + */ + +import sun.swing.AccessibleAnnouncer; +import javax.accessibility.Accessible; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.ActionEvent; +import java.awt.Rectangle; +import java.util.concurrent.CountDownLatch; +import java.lang.Thread; + +public class AccessibleAnnouncerTest extends AccessibleComponentTest { + + private final boolean useFrameAsAnnouncer; + + private AccessibleAnnouncerTest(final boolean useFrameAsAnnouncer) { + super(); + this.useFrameAsAnnouncer = useFrameAsAnnouncer; + } + + + @java.lang.Override + public CountDownLatch createCountDownLatch() { + return new CountDownLatch(1); + } + + private static void announce(final Accessible accessible, final String str, final int priority) { + try { + AccessibleAnnouncer.announce(accessible, str, priority); + } catch (final Exception e) { + e.printStackTrace(); + } + } + + void createTest() { + INSTRUCTIONS = "INSTRUCTIONS:\n" + + "Check announcing.\n\n" + + "Turn screen reader on, and Tab to the say button and press it.\n\n" + + "If you can hear text from text field tab further and press PASS, otherwise press FAIL.\n"; + ; + + JPanel frame = new JPanel(); + + JButton button = new JButton("Say"); + button.setPreferredSize(new Dimension(100, 35)); + JTextField textField = new JTextField("This is text"); + + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String str = textField.getText(); + announce(useFrameAsAnnouncer ? frame : null, str, AccessibleAnnouncer.ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT); + } + }); + + frame.setLayout(new FlowLayout()); + frame.add(textField); + frame.add(button); + exceptionString = "Accessible announcer test failed!"; + super.createUI(frame, "Accessible Anouncer test (useFrameAsAnnouncer=" + useFrameAsAnnouncer + ")"); + } + + void createPriorityTest() { + String firstMessage = "This is first message"; + String secondMessage = "This is second message"; + INSTRUCTIONS = "INSTRUCTIONS:\n" + + "Check announcing priority.\n\n" + + "Turn screen reader on, and Tab to the say button and press.\n\n" + + "If you can hear \"" + firstMessage + + "\" and \"" + secondMessage + + "\" tab further and press PASS, otherwise press FAIL.\n";; + + JPanel frame = new JPanel(); + + JButton button = new JButton("Say"); + button.setPreferredSize(new Dimension(100, 35)); + + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + announce(useFrameAsAnnouncer ? frame : null, firstMessage, AccessibleAnnouncer.ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT); + try { + Thread.sleep(3000); + announce(useFrameAsAnnouncer ? frame : null, "You must not hear this message.", AccessibleAnnouncer.ANNOUNCE_WITHOUT_INTERRUPTING_CURRENT_OUTPUT); + announce(useFrameAsAnnouncer ? frame : null, secondMessage, AccessibleAnnouncer.ANNOUNCE_WITH_INTERRUPTING_CURRENT_OUTPUT); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); + + frame.setLayout(new FlowLayout()); + frame.add(button); + exceptionString = "Accessible announcer priority test failed!"; + super.createUI(frame, "Accessible Anouncer test (useFrameAsAnnouncer=" + useFrameAsAnnouncer + ")"); + } + + public static void main(String[] args) throws Exception { + final boolean useFrameAsAnnouncer = (args.length > 0) && ("true".equals(args[0])); + AccessibleAnnouncerTest test = new AccessibleAnnouncerTest(useFrameAsAnnouncer); + + countDownLatch = test.createCountDownLatch(); + SwingUtilities.invokeLater(test::createTest); + countDownLatch.await(); + + if (!testResult) { + throw new RuntimeException(a11yTest.exceptionString); + } + + countDownLatch = test.createCountDownLatch(); + SwingUtilities.invokeLater(test::createPriorityTest); + countDownLatch.await(); + + if (!testResult) { + throw new RuntimeException(a11yTest.exceptionString); + } + } +} diff --git a/test/jdk/java/awt/a11y/AccessibleJComboBoxVoiceOverTest.java b/test/jdk/java/awt/a11y/AccessibleJComboBoxVoiceOverTest.java new file mode 100644 index 000000000000..37f74c4ca190 --- /dev/null +++ b/test/jdk/java/awt/a11y/AccessibleJComboBoxVoiceOverTest.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Test for VoiceOver-specific issues of JComboBox + * @author dmitry.drobotov@jetbrains.com + * @run main/manual AccessibleJComboBoxVoiceOverTest + * @requires (os.family == "mac") + */ + +import javax.swing.JComboBox; +import javax.swing.JPanel; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; +import java.awt.FlowLayout; +import java.util.concurrent.CountDownLatch; + +public class AccessibleJComboBoxVoiceOverTest extends AccessibleComponentTest { + + @java.lang.Override + public CountDownLatch createCountDownLatch() { + return new CountDownLatch(1); + } + + void createCombobox() { + INSTRUCTIONS = """ + INSTRUCTIONS: + Check VoiceOver-specific issues of JComboBox. + + Turn VoiceOver on, and Tab to the combo box. + + Use VO+Space shortcut to open the combo box and select a new item. + Move keyboard focus away from the combo box using Shift+Tab and then back to the combo box by Tab. + Repeat the same step with VoiceOver cursor navigation using VO+Left and VO+Right. + + If in both cases VoiceOver reads the newly selected value, press PASS, otherwise press FAIL."""; + + JPanel frame = new JPanel(); + + String[] NAMES = {"One", "Two", "Three", "Four", "Five"}; + JComboBox combo = new JComboBox<>(NAMES); + + JLabel label = new JLabel("This is combobox:"); + label.setLabelFor(combo); + + frame.setLayout(new FlowLayout()); + frame.add(label); + frame.add(combo); + exceptionString = "AccessibleJComboBoxVoiceOver test failed!"; + super.createUI(frame, "AccessibleJComboBoxVoiceOverTest"); + } + + public static void main(String[] args) throws Exception { + AccessibleJComboBoxVoiceOverTest test = new AccessibleJComboBoxVoiceOverTest(); + + countDownLatch = test.createCountDownLatch(); + SwingUtilities.invokeLater(test::createCombobox); + countDownLatch.await(); + + if (!testResult) { + throw new RuntimeException(a11yTest.exceptionString); + } + } +} diff --git a/test/jdk/java/awt/dnd/BadSerializationTest/badAction b/test/jdk/java/awt/dnd/BadSerializationTest/badAction index c02632cabfd9..33a2cb34f476 100644 Binary files a/test/jdk/java/awt/dnd/BadSerializationTest/badAction and b/test/jdk/java/awt/dnd/BadSerializationTest/badAction differ diff --git a/test/jdk/java/awt/dnd/BadSerializationTest/good b/test/jdk/java/awt/dnd/BadSerializationTest/good index 523df353a1aa..7d675e5deb31 100644 Binary files a/test/jdk/java/awt/dnd/BadSerializationTest/good and b/test/jdk/java/awt/dnd/BadSerializationTest/good differ diff --git a/test/jdk/java/awt/dnd/BadSerializationTest/noEvents b/test/jdk/java/awt/dnd/BadSerializationTest/noEvents index a45ba168c71d..d74d6e878150 100644 Binary files a/test/jdk/java/awt/dnd/BadSerializationTest/noEvents and b/test/jdk/java/awt/dnd/BadSerializationTest/noEvents differ diff --git a/test/jdk/java/awt/dnd/BadSerializationTest/nullComponent b/test/jdk/java/awt/dnd/BadSerializationTest/nullComponent index 63aee01cc2ce..26007f780c01 100644 Binary files a/test/jdk/java/awt/dnd/BadSerializationTest/nullComponent and b/test/jdk/java/awt/dnd/BadSerializationTest/nullComponent differ diff --git a/test/jdk/java/awt/dnd/BadSerializationTest/nullDragSource b/test/jdk/java/awt/dnd/BadSerializationTest/nullDragSource index a483f7106a8a..d1ce8ae524bc 100644 Binary files a/test/jdk/java/awt/dnd/BadSerializationTest/nullDragSource and b/test/jdk/java/awt/dnd/BadSerializationTest/nullDragSource differ diff --git a/test/jdk/java/awt/dnd/BadSerializationTest/nullOrigin b/test/jdk/java/awt/dnd/BadSerializationTest/nullOrigin index 5af1996e74b3..2df8258a582e 100644 Binary files a/test/jdk/java/awt/dnd/BadSerializationTest/nullOrigin and b/test/jdk/java/awt/dnd/BadSerializationTest/nullOrigin differ diff --git a/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html b/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html new file mode 100644 index 000000000000..e6f7dcb9d5d6 --- /dev/null +++ b/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html @@ -0,0 +1,43 @@ + + + + + + AcceleratorTest + + + +

          AcceleratorTest
          Bug ID:

          + +

          See the dialog box (usually in upper left corner) for instructions

          + + + + diff --git a/test/jdk/java/awt/event/KeyEvent/DeadKey/DeadKeySystemAssertionDialog.java b/test/jdk/java/awt/event/KeyEvent/DeadKey/DeadKeySystemAssertionDialog.java index ad7f01fc2075..e25915463a12 100644 --- a/test/jdk/java/awt/event/KeyEvent/DeadKey/DeadKeySystemAssertionDialog.java +++ b/test/jdk/java/awt/event/KeyEvent/DeadKey/DeadKeySystemAssertionDialog.java @@ -21,6 +21,7 @@ * questions. */ +import java.awt.EventQueue; import java.awt.Frame; import java.awt.Robot; import java.awt.TextField; @@ -36,29 +37,48 @@ public class DeadKeySystemAssertionDialog { + private static Robot robot; + private static Frame frame; + private static TextField textField; + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); - Frame frame = new Frame(); - frame.setSize(300, 200); + try { + EventQueue.invokeAndWait(DeadKeySystemAssertionDialog::initUI); - TextField textField = new TextField(); - frame.add(textField); + robot.waitForIdle(); + textField.requestFocus(); + robot.waitForIdle(); - Robot robot = new Robot(); - robot.setAutoDelay(50); + if (!textField.isFocusOwner()) { + throw new RuntimeException("TEST ERROR: Text field isn't a focus owner. Can't continue test"); + } - frame.setVisible(true); - robot.waitForIdle(); + // Check that the system assertion dialog does not block Java + robot.keyPress(KeyEvent.VK_A); + robot.keyRelease(KeyEvent.VK_A); + robot.waitForIdle(); + } finally { + EventQueue.invokeAndWait(DeadKeySystemAssertionDialog::disposeUI); + } + } - textField.requestFocus(); - robot.waitForIdle(); + private static void initUI() { + frame = new Frame(); + frame.setSize(300, 200); + + textField = new TextField(); + frame.add(textField); - // Check that the system assertion dialog does not block Java - robot.keyPress(KeyEvent.VK_A); - robot.keyRelease(KeyEvent.VK_A); - robot.waitForIdle(); + frame.setVisible(true); + } - frame.setVisible(false); - frame.dispose(); + private static void disposeUI() { + if (frame != null) { + frame.dispose(); + } } + } diff --git a/test/jdk/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java b/test/jdk/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java index 58a72aa87676..6c6a2350b526 100644 --- a/test/jdk/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java +++ b/test/jdk/java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java @@ -96,6 +96,9 @@ public void keyPressed(KeyEvent ke) { } public static void test() { + r.keyPress(KeyEvent.VK_END); + r.keyRelease(KeyEvent.VK_END); + r.keyPress(KeyEvent.VK_SHIFT); r.keyPress(KeyEvent.VK_META); diff --git a/test/jdk/java/awt/font/Emoji/ComplexEmoji.java b/test/jdk/java/awt/font/Emoji/ComplexEmoji.java new file mode 100644 index 000000000000..2b107535bad7 --- /dev/null +++ b/test/jdk/java/awt/font/Emoji/ComplexEmoji.java @@ -0,0 +1,144 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @key headful + * @bug 8269806 + * @summary Checks that complex emoji are rendered with proper shaping. + */ + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.stream.Stream; + +public class ComplexEmoji { + private static final int IMG_WIDTH = 60; + private static final int IMG_HEIGHT = 20; + + private static final String[] EMOJI = { + "\ud83d\udd25", // Fire + "\u2764\ufe0f", // Heart + color variation selector + "\ud83e\udd18\ud83c\udffb", // Horns sign - white hand + "\ud83d\udc41\ufe0f\u200d\ud83d\udde8\ufe0f", // Eye in speech bubble - ZWJ sequence + "\uD83C\uDDE6\uD83C\uDDF6", // Antarctica flag + "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f", // England flag - tag sequence + }; + + public static void main(String[] args) { + requireFont("Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji"); + + // Platform-specific tricks + if (System.getProperty("os.name").toLowerCase().contains("windows")) { + EMOJI[4] = EMOJI[5] = null; // Flags and tags are not supported on Windows + } + + BufferedImage img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); + String errors = ""; + for (int i = 0; i < EMOJI.length; i++) { + String emoji = EMOJI[i]; + if (emoji == null) { + continue; + } + drawEmoji(img, emoji); + String error = checkEmoji(img); + if (error != null) { + errors += "\n#" + i + ": " + error; + try { + ImageIO.write(img, "PNG", new File("ComplexEmoji" + i + ".png")); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + if (!errors.isEmpty()) { + throw new RuntimeException(errors); + } + } + + private static void drawEmoji(Image img, String emoji) { + Graphics g = img.getGraphics(); + g.setColor(Color.white); + g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); + g.setFont(new Font(Font.DIALOG, Font.PLAIN, 12)); + // Try to trick shaper by prepending "A" letter + // White on white will not be visible anyway + g.drawString("A" + emoji, 2, 15); + g.dispose(); + } + + private static String checkEmoji(BufferedImage img) { + Point min = new Point(Integer.MAX_VALUE, Integer.MAX_VALUE); + Point max = new Point(Integer.MIN_VALUE, Integer.MIN_VALUE); + for (int x = 0; x < IMG_WIDTH; x++) { + for (int y = 0; y < IMG_HEIGHT; y++) { + int rgb = img.getRGB(x, y); + if (rgb != -1) { + if (x < min.x) { + min.x = x; + } + if (y < min.y) { + min.y = y; + } + if (x > max.x) { + max.x = x; + } + if (y > max.y) { + max.y = y; + } + } + } + } + if (min.x >= max.x || min.y >= max.y) { + return "Empty image"; + } + int width = max.x - min.x + 1; + int height = max.y - min.y + 1; + double ratio = (double) width / (double) height; + if (ratio > 1.5) { + return "Too wide image, is there few glyphs instead of one?"; + } + return null; + } + + private static void requireFont(String macOS, String windows, String linux) { + String os = System.getProperty("os.name").toLowerCase(); + String font; + if (os.contains("mac")) { + font = macOS; + } else if (os.contains("windows")) { + font = windows; + } else if (os.contains("linux")) { + font = linux; + } else { + return; + } + String[] fs = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + if (Stream.of(fs).noneMatch(s -> s.equals(font))) { + throw new Error("Required font not found: " + font); + } + } +} diff --git a/test/jdk/java/awt/font/Emoji/EmojiVariation.java b/test/jdk/java/awt/font/Emoji/EmojiVariation.java new file mode 100644 index 000000000000..3446b7d98d56 --- /dev/null +++ b/test/jdk/java/awt/font/Emoji/EmojiVariation.java @@ -0,0 +1,188 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @key headful + * @bug 8269806 + * @summary Checks that variation selectors work. + */ + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING; +import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_OFF; + +public class EmojiVariation { + private static final int IMG_WIDTH = 100; + private static final int IMG_HEIGHT = 50; + + private static final Color SYMBOL_COLOR = Color.MAGENTA; + + // These emoji must be monochrome by default + private static final String[] SYMBOLS = { + "\u00a9","\u00ae","\u203c","\u2049","\u2122","\u2139","\u2194","\u2195","\u2196","\u2197","\u2198","\u2199", + "\u21a9","\u21aa","\u2328","\u23cf","\u23ed","\u23ee","\u23ef","\u23f1","\u23f2","\u23f8","\u23f9","\u23fa", + "\u24c2","\u25aa","\u25ab","\u25b6","\u25c0","\u25fb","\u25fc","\u2600","\u2601","\u2602","\u2603","\u2604", + "\u260e","\u2611","\u2618","\u261d","\u2620","\u2622","\u2623","\u2626","\u262a","\u262e","\u262f","\u2638", + "\u2639","\u263a","\u2640","\u2642","\u265f","\u2660","\u2663","\u2665","\u2666","\u2668","\u267b","\u267e", + "\u2692","\u2694","\u2695","\u2696","\u2697","\u2699","\u269b","\u269c","\u26a0","\u26b0","\u26b1","\u26c8", + "\u26cf","\u26d1","\u26d3","\u26e9","\u26f0","\u26f1","\u26f4","\u26f7","\u26f8","\u26f9","\u2702","\u2708", + "\u2709","\u270c","\u270d","\u270f","\u2712","\u2714","\u2716","\u271d","\u2721","\u2733","\u2734","\u2744", + "\u2747","\u2763","\u2764","\u27a1","\u2934","\u2935","\u2b05","\u2b06","\u2b07","\u3030","\u303d","\u3297", + "\u3299","\ud83c\udd70","\ud83c\udd71","\ud83c\udd7e","\ud83c\udd7f","\ud83c\ude02","\ud83c\ude37", + "\ud83c\udf21","\ud83c\udf24","\ud83c\udf25","\ud83c\udf26","\ud83c\udf27","\ud83c\udf28","\ud83c\udf29", + "\ud83c\udf2a","\ud83c\udf2b","\ud83c\udf2c","\ud83c\udf36","\ud83c\udf7d","\ud83c\udf96","\ud83c\udf97", + "\ud83c\udf99","\ud83c\udf9a","\ud83c\udf9b","\ud83c\udf9e","\ud83c\udf9f","\ud83c\udfcb","\ud83c\udfcc", + "\ud83c\udfcd","\ud83c\udfce","\ud83c\udfd4","\ud83c\udfd5","\ud83c\udfd6","\ud83c\udfd7","\ud83c\udfd8", + "\ud83c\udfd9","\ud83c\udfda","\ud83c\udfdb","\ud83c\udfdc","\ud83c\udfdd","\ud83c\udfde","\ud83c\udfdf", + "\ud83c\udff3","\ud83c\udff5","\ud83c\udff7","\ud83d\udc3f","\ud83d\udc41","\ud83d\udcfd","\ud83d\udd49", + "\ud83d\udd4a","\ud83d\udd6f","\ud83d\udd70","\ud83d\udd73","\ud83d\udd74","\ud83d\udd75","\ud83d\udd76", + "\ud83d\udd77","\ud83d\udd78","\ud83d\udd79","\ud83d\udd87","\ud83d\udd8a","\ud83d\udd8b","\ud83d\udd8c", + "\ud83d\udd8d","\ud83d\udd90","\ud83d\udda5","\ud83d\udda8","\ud83d\uddb1","\ud83d\uddb2","\ud83d\uddbc", + "\ud83d\uddc2","\ud83d\uddc3","\ud83d\uddc4","\ud83d\uddd1","\ud83d\uddd2","\ud83d\uddd3","\ud83d\udddc", + "\ud83d\udddd","\ud83d\uddde","\ud83d\udde1","\ud83d\udde3","\ud83d\udde8","\ud83d\uddef","\ud83d\uddf3", + "\ud83d\uddfa","\ud83d\udecb","\ud83d\udecd","\ud83d\udece","\ud83d\udecf","\ud83d\udee0","\ud83d\udee1", + "\ud83d\udee2","\ud83d\udee3","\ud83d\udee4","\ud83d\udee5","\ud83d\udee9","\ud83d\udef0","\ud83d\udef3", + }; + + private enum Variation { + DEFAULT(false, ""), + MONO(false, "\ufe0e"), + COLOR(true, "\ufe0f"); + + final boolean colorByDefault; + final String suffix; + + Variation(boolean colorByDefault, String suffix) { + this.colorByDefault = colorByDefault; + this.suffix = suffix; + } + } + + public static void main(String[] args) { + requireFont("Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji"); + requireFont("Zapf Dingbats", "Segoe UI Symbol", "DejaVu Sans"); + + // Platform-specific tricks + if (System.getProperty("os.name").toLowerCase().contains("linux")) { + // Many emoji on Linux don't have monochrome variants + Arrays.fill(SYMBOLS, 16, 25, null); + Arrays.fill(SYMBOLS, 71, 82, null); + Arrays.fill(SYMBOLS, 105, SYMBOLS.length, null); + } else if (System.getProperty("os.name").toLowerCase().contains("mac")) { + // Many emoji on macOS don't have monochrome variants + Arrays.fill(SYMBOLS, 16, 24, null); + Arrays.fill(SYMBOLS, 69, 82, null); + Arrays.fill(SYMBOLS, 115, SYMBOLS.length, null); + } + + BufferedImage img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); + String errors = ""; + for (String s : SYMBOLS) { + if (s == null) { + continue; + } + errors += test(img, s, Variation.DEFAULT); + errors += test(img, s, Variation.MONO); + errors += test(img, s, Variation.COLOR); + } + if (!errors.isEmpty()) { + throw new RuntimeException(errors); + } + } + + private static String test(BufferedImage img, String symbol, Variation variation) { + draw(img, symbol + variation.suffix); + String error = check(img, variation.colorByDefault); + if (error != null) { + String name = symbol.chars().mapToObj(c -> { + String s = Integer.toHexString(c); + return "0".repeat(4 - s.length()) + s; + }).collect(Collectors.joining("-")) + "-" + variation; + try { + ImageIO.write(img, "PNG", new File("EmojiVariation-" + name + ".png")); + } catch (IOException e) { + e.printStackTrace(); + } + return "\n" + name + ": " + error; + } + return ""; + } + + private static void draw(Image img, String symbol) { + Graphics2D g = (Graphics2D) img.getGraphics(); + g.setColor(Color.white); + g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); + g.setFont(new Font(Font.DIALOG, Font.PLAIN, 50)); + g.setRenderingHint(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_OFF); + g.setColor(SYMBOL_COLOR); + g.drawString(symbol, 2, 42); + g.dispose(); + } + + private static String check(BufferedImage img, boolean expectColor) { + boolean rendered = false; + boolean color = false; + for (int x = 0; x < IMG_WIDTH; x++) { + for (int y = 0; y < IMG_HEIGHT; y++) { + int rgb = img.getRGB(x, y); + if (rgb != Color.white.getRGB()) { + rendered = true; + if (rgb != SYMBOL_COLOR.getRGB()) color = true; + } + } + } + if (!rendered) { + return "Empty image"; + } else if (color != expectColor) { + return expectColor ? "Expected color but rendered mono" : "Expected mono but rendered color"; + } + return null; + } + + private static void requireFont(String macOS, String windows, String linux) { + String os = System.getProperty("os.name").toLowerCase(); + String font; + if (os.contains("mac")) { + font = macOS; + } else if (os.contains("windows")) { + font = windows; + } else if (os.contains("linux")) { + font = linux; + } else { + return; + } + String[] fs = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + if (Stream.of(fs).noneMatch(s -> s.equals(font))) { + throw new Error("Required font not found: " + font); + } + } +} diff --git a/test/jdk/java/awt/font/MacEmoji.java b/test/jdk/java/awt/font/Emoji/MacEmoji.java similarity index 99% rename from test/jdk/java/awt/font/MacEmoji.java rename to test/jdk/java/awt/font/Emoji/MacEmoji.java index 198db5c107fb..8f62e22e4da4 100644 --- a/test/jdk/java/awt/font/MacEmoji.java +++ b/test/jdk/java/awt/font/Emoji/MacEmoji.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 JetBrains s.r.o. + * Copyright 2021-2023 JetBrains s.r.o. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/test/jdk/java/awt/font/Emoji/OutlineTextRendererEmoji.java b/test/jdk/java/awt/font/Emoji/OutlineTextRendererEmoji.java new file mode 100644 index 000000000000..9fd71c1789e3 --- /dev/null +++ b/test/jdk/java/awt/font/Emoji/OutlineTextRendererEmoji.java @@ -0,0 +1,200 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @key headful + * @bug 8269806 + * @summary Checks that emoji rendered via glyph cache and bypassing it look similar. + */ + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.stream.Stream; + +import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING; +import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_ON; + +public class OutlineTextRendererEmoji { + private static final int IMG_WIDTH = 84; + private static final int IMG_HEIGHT = 84; + private static final int EMOJI_X = 0; + private static final int EMOJI_Y = 70; + private static final int FONT_SIZE = 70; + private static final String EMOJI = "\ud83d\udd25"; // Fire + + private static final int WINDOW_SIZE = 12; // In pixels + private static final double THRESHOLD = 0.98; + + public static void main(String[] args) throws Exception { + requireFont("Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji"); + + BufferedImage small = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); + BufferedImage rescaled = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); + BufferedImage big = new BufferedImage(IMG_WIDTH*2, IMG_HEIGHT*2, BufferedImage.TYPE_INT_RGB); + drawEmoji(small, EMOJI_X, EMOJI_Y, FONT_SIZE); + drawEmoji(big, EMOJI_X*2, EMOJI_Y*2, FONT_SIZE*2); + checkEmoji(small, big, rescaled); + } + + private static void drawEmoji(Image img, int x, int y, int size) { + Graphics2D g = (Graphics2D) img.getGraphics(); + g.setColor(Color.white); + g.fillRect(0, 0, img.getWidth(null), img.getHeight(null)); + g.setFont(new Font(Font.DIALOG, Font.PLAIN, size)); + g.setRenderingHint(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON); + g.drawString(EMOJI, x, y); + g.dispose(); + } + + private static void checkEmoji(BufferedImage small, BufferedImage big, BufferedImage rescaled) throws Exception { + Graphics2D g2d = rescaled.createGraphics(); + g2d.drawImage(big.getScaledInstance(small.getWidth(), small.getHeight(), Image.SCALE_SMOOTH), 0, 0, null); + g2d.dispose(); + + double ssim = SSIM.calculate(small, rescaled, WINDOW_SIZE); + System.out.println("SSIM is " + ssim); + + if (ssim < THRESHOLD) { + ImageIO.write(small, "PNG", new File("OutlineTextRendererEmoji-small.png")); + ImageIO.write(big, "PNG", new File("OutlineTextRendererEmoji-big.png")); + ImageIO.write(rescaled, "PNG", new File("OutlineTextRendererEmoji-rescaled.png")); + throw new Exception("Images mismatch: " + ssim); + } + } + + private static class SSIM { + private static double calculate(BufferedImage a, BufferedImage b, int windowSize) { + if (a.getWidth() != b.getWidth() || a.getHeight() != b.getHeight()) { + throw new IllegalArgumentException("Images must have same size"); + } + if (a.getWidth() % windowSize != 0 || a.getHeight() % windowSize != 0) { + throw new IllegalArgumentException("Image sizes must be multiple of windowSize"); + } + + final double K1 = 0.01, K2 = 0.03; + final double L = 255; // dynamic range per component (2^8 - 1) + final double c1 = Math.pow(L * K1, 2); + final double c2 = Math.pow(L * K2, 2); + + double result = 0, alpha = 0; + int windows = 0; + for (int y = 0; y <= a.getHeight() - windowSize; y++) { + for (int x = 0; x <= a.getWidth() - windowSize; x++) { + + // Calculate averages + double[] avgA = vec(), avgB = vec(); + for (int py = 0; py < windowSize; py++) { + for (int px = 0; px < windowSize; px++) { + avgA = add(avgA, vec(a.getRGB(x + px, y + py))); + avgB = add(avgB, vec(b.getRGB(x + px, y + py))); + } + } + avgA = div(avgA, windowSize * windowSize); + avgB = div(avgB, windowSize * windowSize); + + // Calculate variance and covariance + double[] varA = vec(), varB = vec(), cov = vec(); + for (int py = 0; py < windowSize; py++) { + for (int px = 0; px < windowSize; px++) { + double[] da = sub(avgA, vec(a.getRGB(x + px, y + py))); + double[] db = sub(avgB, vec(b.getRGB(x + px, y + py))); + varA = add(varA, mul(da, da)); + varB = add(varB, mul(db, db)); + cov = add(cov, mul(da, db)); + } + } + varA = div(varA, windowSize * windowSize); + varB = div(varB, windowSize * windowSize); + cov = div(cov, windowSize * windowSize); + + // Calculate ssim + double[] ssim = vec(); + for (int i = 0; i < 4; i++) { + ssim[i] = ( + (2 * avgA[i] * avgB[i] + c1) * (2 * cov[i] + c2) + ) / ( + (avgA[i]*avgA[i] + avgB[i]*avgB[i] + c1) * (varA[i] + varB[i] + c2) + ); + } + + result += ssim[0] + ssim[1] + ssim[2]; + alpha += ssim[3]; + windows++; + } + } + if (alpha == windows) { + result /= 3.0; + } else { + result = (result + alpha) / 4.0; + } + return result / (double) windows; + } + + private static double[] vec(double... v) { + if (v.length == 0) { + return new double[4]; + } else if (v.length == 1) { + return new double[] {v[0],v[0],v[0],v[0]}; + } else { + return v; + } + } + private static double[] vec(int color) { + return vec(color & 0xff, (color >> 8) & 0xff, (color >> 16) & 0xff, (color >> 24) & 0xff); + } + + interface Op { double apply(double a, double b); } + private static double[] apply(Op op, double[] a, double... b) { + b = vec(b); + double[] r = new double[4]; + for (int i = 0; i < 4; i++) r[i] = op.apply(a[i], b[i]); + return r; + } + + private static double[] add(double[] a, double... b) { return apply((i, j) -> i + j, a, b); } + private static double[] sub(double[] a, double... b) { return apply((i, j) -> i - j, a, b); } + private static double[] mul(double[] a, double... b) { return apply((i, j) -> i * j, a, b); } + private static double[] div(double[] a, double... b) { return apply((i, j) -> i / j, a, b); } + } + + private static void requireFont(String macOS, String windows, String linux) { + String os = System.getProperty("os.name").toLowerCase(); + String font; + if (os.contains("mac")) { + font = macOS; + } else if (os.contains("windows")) { + font = windows; + } else if (os.contains("linux")) { + font = linux; + } else { + return; + } + String[] fs = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + if (Stream.of(fs).noneMatch(s -> s.equals(font))) { + throw new Error("Required font not found: " + font); + } + } +} diff --git a/test/jdk/java/awt/font/FontNames/FCCompositeTest.java b/test/jdk/java/awt/font/FontNames/FCCompositeTest.java index 63ac9872da8b..08385ee56fda 100644 --- a/test/jdk/java/awt/font/FontNames/FCCompositeTest.java +++ b/test/jdk/java/awt/font/FontNames/FCCompositeTest.java @@ -64,8 +64,8 @@ private static void test(int index) { System.out.println("WARNING: Not CompositeFont"); return; } - PhysicalFont pf = ((CompositeFont)f2d).getSlotFont(0); - fullName = pf.getFontName(Locale.ENGLISH); + Font2D slot = ((CompositeFont)f2d).getSlotFont(0); + fullName = slot.getFontName(Locale.ENGLISH); System.out.println("PF="+fullName); String[] command = {"fc-match", diff --git a/test/jdk/java/awt/font/Italic/SFNSItalicTest.java b/test/jdk/java/awt/font/Italic/SFNSItalicTest.java new file mode 100644 index 000000000000..ae83a2e2a87c --- /dev/null +++ b/test/jdk/java/awt/font/Italic/SFNSItalicTest.java @@ -0,0 +1,104 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary SFNS italic font inclination on macOS + * @requires os.family == "mac" + */ + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.Point2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.List; +import java.util.ArrayList; + +public class SFNSItalicTest { + /** + * 0.2 is a default inclination for italic fonts, see {@link sun.font.CFont#createStrike} + */ + private static final double TARGET_INCLINATION = 0.2; + private static final double TARGET_INCLINATION_ERROR = 0.01; + private static final char SYMBOL = 'I'; + private static final Font FONT = new Font(".SFNS-Regular", Font.ITALIC, 16); + private static final int IMAGE_WIDTH = 20; + private static final int IMAGE_HEIGHT = 20; + private static final int GLYPH_X = 6; + private static final int GLYPH_Y = 16; + + public static void main(String[] args) throws Exception { + BufferedImage image = createImage(); + double inclination = getInclination(image); + if (inclination < TARGET_INCLINATION - TARGET_INCLINATION_ERROR || + inclination > TARGET_INCLINATION + TARGET_INCLINATION_ERROR) { + File file = new File( "SFNS-italic.png"); + ImageIO.write(image, "PNG", file); + throw new RuntimeException("Incorrect inclination. Expected: " + TARGET_INCLINATION + "+-" + + TARGET_INCLINATION_ERROR + ", Actual: " + inclination + ", see " + file); + } + } + + private static BufferedImage createImage() { + BufferedImage image = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB); + Graphics2D g = image.createGraphics(); + g.setColor(Color.black); + g.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); + g.setColor(Color.white); + g.setFont(FONT); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g.drawString(String.valueOf(SYMBOL), GLYPH_X, GLYPH_Y); + g.dispose(); + return image; + } + + private static double getInclination(BufferedImage image) { + List points = new ArrayList<>(IMAGE_HEIGHT); + double mx = 0, my = 0; + for (int y = 0; y < image.getHeight(); y++) { + double totalWeight = 0; + double weightedX = 0; + for (int x = 0; x < image.getWidth(); x++) { + double weight = (image.getRGB(x, y) & 0xFF) / 255.0; + weightedX += x * weight; + totalWeight += weight; + } + double x = weightedX / totalWeight; + if (Double.isFinite(x)) { + mx += x; + my += y; + points.add(new Point2D.Double(x, y)); + } + } + mx /= points.size(); + my /= points.size(); + double xySum = 0; + double y2Sum = 0; + for (Point2D p : points) { + xySum += (p.getX() - mx) * (p.getY() - my); + y2Sum += Math.pow(p.getY() - my, 2); + } + return -xySum / y2Sum; + } +} diff --git a/test/jdk/java/awt/hidpi/ClientAreaOriginWindowsTest.java b/test/jdk/java/awt/hidpi/ClientAreaOriginWindowsTest.java new file mode 100644 index 000000000000..bf539dcda0be --- /dev/null +++ b/test/jdk/java/awt/hidpi/ClientAreaOriginWindowsTest.java @@ -0,0 +1,193 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.concurrent.CountDownLatch; +import java.util.function.Function; + +/* @test + * bug JRE-604 + * @summary Tests that the frame's client area origin is correctly positioned in the frame. + * @author Anton Tarasov + * @requires (os.family == "windows") + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=1.25 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=1.5 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=1.75 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.0 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.25 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.5 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.75 + * -Dsun.java2d.d3d=false + * ClientAreaOriginWindowsTest + */ +// +// Notes: +// 1) -Dsun.java2d.d3d=false is the current IDEA (ver. 181) mode. +// 2) The JDK build should contain the fix for JRE-573 for the test to pass. +// +public class ClientAreaOriginWindowsTest { + static final int F_WIDTH = 300; + static final int F_HEIGHT = 200; + + static final Color COLOR_BG = Color.green; + static final Color COLOR_OUTLINE = Color.red; + static final Color COLOR_FG = Color.blue; + + static volatile JFrame frame; + static volatile Timer timer; + + static volatile CountDownLatch latch = new CountDownLatch(1); + static volatile boolean framePainted = false; + + public static void main(String[] args) throws InterruptedException { + EventQueue.invokeLater(() -> show()); + + timer = new Timer(100, (event) -> { + Point loc; + try { + loc = frame.getContentPane().getLocationOnScreen(); + } catch (IllegalComponentStateException e) { + latch.countDown(); + return; + } + Rectangle rect = new Rectangle(loc.x - 1, loc.y - 1, 6, 6); + Robot robot; + try { + robot = new Robot(); + } catch (AWTException e) { + throw new RuntimeException(e); + } + BufferedImage capture = robot.createScreenCapture(rect); + int width = capture.getWidth(); + int height = capture.getHeight(); + + // First, check the frame's client area is painted, otherwise bounce. + Color fgPixel = new Color(capture.getRGB(width - 2, height - 2)); + if (!COLOR_FG.equals(fgPixel)) { + latch.countDown(); + return; + } + framePainted = true; + + Function check = (isXaxis) -> { + StringBuilder err = new StringBuilder(); + boolean hasOutline = false; + boolean hasBg = false; + boolean hasFg = false; + + for (int i = (isXaxis ? width - 1 : height - 1); i >= 0; i--) { + int x = isXaxis ? i : width - 1; + int y = isXaxis ? height - 1 : i; + Color c = new Color(capture.getRGB(x, y)); + hasOutline = c.equals(COLOR_OUTLINE) || hasOutline; + // assuming the frame's border system color is not COLOR_BG/COLOR_BG_FALLBACK. + hasBg = c.equals(COLOR_BG) || hasBg; + hasFg = c.equals(COLOR_FG) || hasFg; + } + String axis = isXaxis ? "X-axis" : "Y-axis"; + if (!hasOutline) err.append("no outline pixel by " + axis); + if (hasBg) err.append("; has background pixels by " + axis); + if (!hasFg) err.append("; no foreground pixels by " + axis); + return err.toString(); + }; + + String xAxis = check.apply(true); + String yAxis = check.apply(false); + + if (xAxis.length() > 0 || yAxis.length() > 0) { + StringBuilder err = new StringBuilder(). + append(xAxis). + append("; "). + append(yAxis); + throw new RuntimeException("Test FAILED: " + err); + } + latch.countDown(); + }); + timer.setRepeats(false); + + latch.await(); + latch = new CountDownLatch(1); + + while (!framePainted) { + timer.start(); + latch.await(); + if (!framePainted) latch = new CountDownLatch(1); + } + + System.out.println("Test PASSED"); + } + + static void show() { + frame = new JFrame("frame"); + frame.setLocationRelativeTo(null); + frame.setBackground(COLOR_BG); + frame.getContentPane().setBackground(COLOR_BG); + + JPanel panel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D)g; + AffineTransform tx = g2d.getTransform(); + double pixelX = 1 / tx.getScaleX(); + double pixelY = 1 / tx.getScaleY(); + + g2d.setColor(COLOR_OUTLINE); + g2d.fill(new Rectangle2D.Double(0, 0, F_WIDTH, F_HEIGHT)); + g2d.setColor(COLOR_FG); + g2d.fill(new Rectangle2D.Double(pixelX, pixelY, F_WIDTH - pixelX * 2, F_HEIGHT - pixelY * 2)); + } + + @Override + public Dimension getPreferredSize() { + return new Dimension(F_WIDTH, F_HEIGHT); + } + }; + + // Backs the main frame with black color. + JFrame bgFrame = new JFrame("bg_frame"); + bgFrame.setUndecorated(true); + bgFrame.setSize(F_WIDTH * 2, F_HEIGHT * 2); + bgFrame.setLocationRelativeTo(null); + bgFrame.setAlwaysOnTop(true); + JPanel cp = new JPanel(); + cp.setOpaque(true); + cp.setBackground(Color.black); + bgFrame.setContentPane(cp); + bgFrame.setVisible(true); + + frame.add(panel); + frame.pack(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocationRelativeTo(null); + frame.setAlwaysOnTop(true); + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowActivated(WindowEvent e) { + latch.countDown(); + } + }); + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/test/jdk/java/awt/hidpi/DrawOnFrameGraphicsTest.java b/test/jdk/java/awt/hidpi/DrawOnFrameGraphicsTest.java new file mode 100644 index 000000000000..061a79a3368e --- /dev/null +++ b/test/jdk/java/awt/hidpi/DrawOnFrameGraphicsTest.java @@ -0,0 +1,176 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.image.BufferedImage; +import java.util.concurrent.CountDownLatch; + +/* @test + * bug JRE-681 + * @summary Tests that drawing directly into frame's graphics doesn't shift relative to the frame's content. + * @author Anton Tarasov + * @requires (os.family == "windows") + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=1.25 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=1.5 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=1.75 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.0 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.25 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.5 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true + * -Dsun.java2d.uiScale=2.75 + * -Dsun.java2d.d3d=false + * DrawOnFrameGraphicsTest + */ +// Note: -Dsun.java2d.d3d=false is the current IDEA mode. +public class DrawOnFrameGraphicsTest { + static final int F_WIDTH = 300; + static final int F_HEIGHT = 200; + + static final Color FRAME_BG = Color.GREEN; + static final Color RECT_COLOR_1 = Color.RED; + static final Color RECT_COLOR_2 = Color.BLUE; + static final int RECT_SIZE = 20; + + static final Rectangle rect = new Rectangle(F_WIDTH/2 - RECT_SIZE/2, F_HEIGHT/2 - RECT_SIZE/2, RECT_SIZE, RECT_SIZE); + static JFrame frame; + static JComponent comp; + + static volatile CountDownLatch latch = new CountDownLatch(1); + static volatile boolean framePainted = false; + + static Robot robot; + + public static void main(String[] args) throws AWTException, InterruptedException { + try { + robot = new Robot(); + } catch (AWTException e) { + throw new RuntimeException(e); + } + + EventQueue.invokeLater(DrawOnFrameGraphicsTest::show); + + Timer timer = new Timer(100, (event) -> { + Point loc; + try { + loc = frame.getContentPane().getLocationOnScreen(); + } catch (IllegalComponentStateException e) { + latch.countDown(); + return; + } + BufferedImage capture = robot.createScreenCapture( + new Rectangle(loc.x + 50, loc.y + 50, 1, 1)); + Color pixel = new Color(capture.getRGB(0, 0)); + framePainted = FRAME_BG.equals(pixel); + + latch.countDown(); + return; + }); + + timer.setRepeats(false); + latch.await(); // wait for ACTIVATED + latch = new CountDownLatch(1); + + //noinspection Duplicates + while (!framePainted) { + timer.start(); + latch.await(); + latch = new CountDownLatch(1); + } + + // + // Draw on the frame + // + EventQueue.invokeLater(DrawOnFrameGraphicsTest::draw); + latch.await(); + + // + // Take the capture of the colored rect with some extra space + // + Point pt = comp.getLocationOnScreen(); + BufferedImage capture = robot.createScreenCapture( + new Rectangle(pt.x + rect.x - 5, pt.y + rect.y - 5, + rect.width + 10, rect.height + 10)); + + // + // Test RECT_COLOR_1 is fully covered with RECT_COLOR_2 + // + boolean hasRectColor2 = false; + for (int x=0; x text; - private static WeakReference p; + private static JTextField text; + private static WeakReference textWeakRef; + private static JPanel panel; private static JButton button; public static void init() throws Throwable { @@ -61,16 +62,17 @@ public void run() { button = new JButton("Test"); p1.add(button); frame.add(p1); - text = new WeakReference(new JTextField("Text")); - p = new WeakReference(new JPanel(new FlowLayout())); - p.get().add(text.get()); - frame.add(p.get()); + text = new JTextField("Text"); + textWeakRef = new WeakReference(text); + panel = new JPanel(new FlowLayout()); + panel.add(text); + frame.add(panel); frame.setBounds(500, 400, 200, 200); frame.setVisible(true); } }); - Util.focusComponent(text.get(), 500); + Util.focusComponent(text, 500); Util.clickOnComp(button, new Robot()); //References to objects testes for memory leak are stored in Util. //Need to clean them @@ -79,13 +81,16 @@ public void run() { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { - frame.remove(p.get()); + frame.remove(panel); } }); + final int sleepTime = text.getCaret().getBlinkRate() * 2; + text = null; + panel = null; Util.waitForIdle(null); //After the next caret blink it automatically TextField references - Thread.sleep(text.get().getCaret().getBlinkRate() * 2); + Thread.sleep(sleepTime); Util.waitForIdle(null); try { @@ -106,7 +111,7 @@ public static void assertGC() throws Throwable { } } alloc = null; - if (text.get() != null) { + if (textWeakRef.get() != null) { throw new Exception("Test failed: JTextField was not collected"); } } diff --git a/test/jdk/java/awt/image/VolatileImage/GradientPaints.java b/test/jdk/java/awt/image/VolatileImage/GradientPaints.java index c856276cdced..ba802f518c7e 100644 --- a/test/jdk/java/awt/image/VolatileImage/GradientPaints.java +++ b/test/jdk/java/awt/image/VolatileImage/GradientPaints.java @@ -39,7 +39,9 @@ import java.awt.image.*; import java.io.File; import java.util.Arrays; +import java.util.concurrent.CountDownLatch; import javax.imageio.ImageIO; +import javax.swing.SwingUtilities; public class GradientPaints extends Canvas { @@ -68,8 +70,8 @@ public class GradientPaints extends Canvas { (int)(TESTW * TESTH * 0.18); private static final int ALLOWED_MISMATCHES_RADIAL = (int)(TESTW * TESTH * 0.45); + private static final int ALLOWED_RENDER_ATTEMPTS = 5; - private static boolean done; private static boolean verbose; private static final Color[] COLORS = { @@ -83,8 +85,8 @@ public class GradientPaints extends Canvas { new Color(128, 128, 128), }; - private static enum PaintType {BASIC, LINEAR, RADIAL}; - private static enum XformType {IDENTITY, TRANSLATE, SCALE, SHEAR, ROTATE}; + private enum PaintType {BASIC, LINEAR, RADIAL} + private enum XformType {IDENTITY, TRANSLATE, SCALE, SHEAR, ROTATE} private static final int[] numStopsArray = {2, 4, 7}; private static final Object[] hints = { RenderingHints.VALUE_ANTIALIAS_OFF, @@ -92,35 +94,14 @@ private static enum XformType {IDENTITY, TRANSLATE, SCALE, SHEAR, ROTATE}; }; public void paint(Graphics g) { - synchronized (this) { - if (!done) { - done = true; - notifyAll(); - } - } - } - - private void testOne(BufferedImage refImg, VolatileImage testImg) { - Graphics2D gref = refImg.createGraphics(); - Graphics2D gtest = testImg.createGraphics(); - Paint paint = - makePaint(PaintType.RADIAL, CycleMethod.REPEAT, - ColorSpaceType.SRGB, XformType.IDENTITY, 7); - Object aahint = hints[0]; - renderTest(gref, paint, aahint); - renderTest(gtest, paint, aahint); - Toolkit.getDefaultToolkit().sync(); - compareImages(refImg, testImg.getSnapshot(), - TOLERANCE, 0, ""); - gref.dispose(); - gtest.dispose(); + painted.countDown(); } private void testAll(Graphics gscreen, - BufferedImage refImg, VolatileImage testImg) + BufferedImage refImg, VolatileImage testImg, GraphicsConfiguration gc) { Graphics2D gref = refImg.createGraphics(); - Graphics2D gtest = testImg.createGraphics(); + testImg.validate(gc); for (PaintType paintType : PaintType.values()) { for (CycleMethod cycleMethod : CycleMethod.values()) { for (ColorSpaceType colorSpace : ColorSpaceType.values()) { @@ -138,16 +119,32 @@ private void testAll(Graphics gscreen, " numStops=" + numStops + " aa=" + aahint; renderTest(gref, paint, aahint); - renderTest(gtest, paint, aahint); - gscreen.drawImage(testImg, 0, 0, null); - Toolkit.getDefaultToolkit().sync(); - int allowedMismatches = - paintType == PaintType.RADIAL ? - ALLOWED_MISMATCHES_RADIAL : - ALLOWED_MISMATCHES_LINEAR; - compareImages(refImg, testImg.getSnapshot(), - TOLERANCE, allowedMismatches, - msg); + int allowedMismatches = paintType == PaintType.RADIAL ? + ALLOWED_MISMATCHES_RADIAL : ALLOWED_MISMATCHES_LINEAR; + int attempt = 0; + while (true) { + Graphics2D gtest = testImg.createGraphics(); + renderTest(gtest, paint, aahint); + gscreen.drawImage(testImg, 0, 0, null); + Toolkit.getDefaultToolkit().sync(); + gtest.dispose(); + BufferedImage snapshot = testImg.getSnapshot(); + if (testImg.contentsLost() && + testImg.validate(gc) != VolatileImage.IMAGE_OK) + { + if (attempt++ >= ALLOWED_RENDER_ATTEMPTS) { + throw new RuntimeException("Cannot render to VI"); + } + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + continue; + } + compareImages(refImg, snapshot, allowedMismatches, msg); + break; + } } } } @@ -155,7 +152,6 @@ private void testAll(Graphics gscreen, } } gref.dispose(); - gtest.dispose(); } private Paint makePaint(PaintType paintType, @@ -172,7 +168,6 @@ private Paint makePaint(PaintType paintType, int focusX = ctrX + 20; int focusY = ctrY + 20; float radius = 100.0f; - Paint paint; AffineTransform transform; Color[] colors = Arrays.copyOf(COLORS, numStops); @@ -181,57 +176,30 @@ private Paint makePaint(PaintType paintType, fractions[i] = ((float)i) / (fractions.length-1); } - switch (xformType) { - default: - case IDENTITY: - transform = new AffineTransform(); - break; - case TRANSLATE: - transform = AffineTransform.getTranslateInstance(2, 2); - break; - case SCALE: - transform = AffineTransform.getScaleInstance(1.2, 1.4); - break; - case SHEAR: - transform = AffineTransform.getShearInstance(0.1, 0.1); - break; - case ROTATE: - transform = AffineTransform.getRotateInstance(Math.PI / 4, - getWidth()/2, - getHeight()/2); - break; - } - - switch (paintType) { - case BASIC: - boolean cyclic = (cycleMethod != CycleMethod.NO_CYCLE); - paint = - new GradientPaint(startX, startY, Color.RED, - endX, endY, Color.BLUE, cyclic); - break; + transform = switch (xformType) { + case IDENTITY -> new AffineTransform(); + case TRANSLATE -> AffineTransform.getTranslateInstance(2, 2); + case SCALE -> AffineTransform.getScaleInstance(1.2, 1.4); + case SHEAR -> AffineTransform.getShearInstance(0.1, 0.1); + case ROTATE -> AffineTransform.getRotateInstance(Math.PI / 4, + getWidth() >> 1, getHeight() >> 1); + }; - default: - case LINEAR: - paint = - new LinearGradientPaint(new Point2D.Float(startX, startY), - new Point2D.Float(endX, endY), - fractions, colors, - cycleMethod, colorSpace, - transform); - break; - - case RADIAL: - paint = - new RadialGradientPaint(new Point2D.Float(ctrX, ctrY), - radius, - new Point2D.Float(focusX, focusY), - fractions, colors, - cycleMethod, colorSpace, - transform); - break; - } - - return paint; + return switch (paintType) { + case BASIC -> new GradientPaint(startX, startY, Color.RED, + endX, endY, Color.BLUE, (cycleMethod != CycleMethod.NO_CYCLE)); + case LINEAR -> new LinearGradientPaint(new Point2D.Float(startX, startY), + new Point2D.Float(endX, endY), + fractions, colors, + cycleMethod, colorSpace, + transform); + case RADIAL -> new RadialGradientPaint(new Point2D.Float(ctrX, ctrY), + radius, + new Point2D.Float(focusX, focusY), + fractions, colors, + cycleMethod, colorSpace, + transform); + }; } private void renderTest(Graphics2D g2d, Paint p, Object aahint) { @@ -248,7 +216,7 @@ public Dimension getPreferredSize() { private static void compareImages(BufferedImage refImg, BufferedImage testImg, - int tolerance, int allowedMismatches, + int allowedMismatches, String msg) { int numMismatches = 0; @@ -261,7 +229,7 @@ private static void compareImages(BufferedImage refImg, for (int x = x1; x < x2; x++) { Color expected = new Color(refImg.getRGB(x, y)); Color actual = new Color(testImg.getRGB(x, y)); - if (!isSameColor(expected, actual, tolerance)) { + if (!isSameColor(expected, actual)) { numMismatches++; } } @@ -277,6 +245,7 @@ private static void compareImages(BufferedImage refImg, ImageIO.write(testImg, "png", new File("GradientPaints.cap.png")); } catch (Exception e) { + e.printStackTrace(); } if (!verbose) { System.err.println(msg); @@ -285,53 +254,49 @@ private static void compareImages(BufferedImage refImg, numMismatches + ") exceeds limit (" + allowedMismatches + - ") with tolerance=" + - tolerance); + ") with tolerance=" + TOLERANCE); } } - private static boolean isSameColor(Color c1, Color c2, int e) { + private static boolean isSameColor(Color c1, Color c2) { int r1 = c1.getRed(); int g1 = c1.getGreen(); int b1 = c1.getBlue(); int r2 = c2.getRed(); int g2 = c2.getGreen(); int b2 = c2.getBlue(); - int rmin = Math.max(r2-e, 0); - int gmin = Math.max(g2-e, 0); - int bmin = Math.max(b2-e, 0); - int rmax = Math.min(r2+e, 255); - int gmax = Math.min(g2+e, 255); - int bmax = Math.min(b2+e, 255); - if (r1 >= rmin && r1 <= rmax && - g1 >= gmin && g1 <= gmax && - b1 >= bmin && b1 <= bmax) - { - return true; - } - return false; + int rmin = Math.max(r2- TOLERANCE, 0); + int gmin = Math.max(g2- TOLERANCE, 0); + int bmin = Math.max(b2- TOLERANCE, 0); + int rmax = Math.min(r2+ TOLERANCE, 255); + int gmax = Math.min(g2+ TOLERANCE, 255); + int bmax = Math.min(b2+ TOLERANCE, 255); + return r1 >= rmin && r1 <= rmax && + g1 >= gmin && g1 <= gmax && + b1 >= bmin && b1 <= bmax; } + static CountDownLatch painted = new CountDownLatch(1); + static Frame frame = null; + public static void main(String[] args) { if (args.length == 1 && args[0].equals("-verbose")) { verbose = true; } GradientPaints test = new GradientPaints(); - Frame frame = new Frame(); - frame.add(test); - frame.pack(); - frame.setVisible(true); + SwingUtilities.invokeLater(() -> { + frame = new Frame(); + frame.add(test); + frame.pack(); + frame.setVisible(true); + }); // Wait until the component's been painted - synchronized (test) { - while (!done) { - try { - test.wait(); - } catch (InterruptedException e) { - throw new RuntimeException("Failed: Interrupted"); - } - } + try { + painted.await(); + } catch (InterruptedException e) { + throw new RuntimeException("Failed: Interrupted"); } GraphicsConfiguration gc = frame.getGraphicsConfiguration(); @@ -345,10 +310,9 @@ public static void main(String[] args) { BufferedImage refImg = new BufferedImage(TESTW, TESTH, BufferedImage.TYPE_INT_RGB); VolatileImage testImg = frame.createVolatileImage(TESTW, TESTH); - testImg.validate(gc); try { - test.testAll(test.getGraphics(), refImg, testImg); + test.testAll(test.getGraphics(), refImg, testImg, gc); } finally { frame.dispose(); } diff --git a/test/jdk/java/awt/keyboard/AllKeyCode/AllKeyCode.java b/test/jdk/java/awt/keyboard/AllKeyCode/AllKeyCode.java index d014b4bd99b5..03d177e1f323 100644 --- a/test/jdk/java/awt/keyboard/AllKeyCode/AllKeyCode.java +++ b/test/jdk/java/awt/keyboard/AllKeyCode/AllKeyCode.java @@ -31,19 +31,26 @@ */ import java.awt.AWTException; +import java.awt.Frame; import java.awt.Robot; +import java.awt.TextArea; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; -import java.awt.Frame; -import java.awt.TextArea; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; public class AllKeyCode extends Frame { + private static final int PAUSE = 2000; + private static Frame frame; private static TextArea textArea; private static KeyListener keyListener; private static int allKeyArr[]; - private static int keyPressedIndex; + private static volatile int keyPressed; + private static CountDownLatch keyPressedLatch; + private static volatile boolean allKeysWerePressed = true; + private static volatile boolean keyCodesAreCorrect = true; AllKeyCode() { AllKeyCode.allKeyArr = new int[] { @@ -135,16 +142,19 @@ public class AllKeyCode extends Frame { KeyEvent.VK_F8, KeyEvent.VK_F9, KeyEvent.VK_F10, - KeyEvent.VK_F11, + // F11 is mapped to "Show Desktop" macOS system shortcut by default, so skip it + // KeyEvent.VK_F11, KeyEvent.VK_F12, KeyEvent.VK_DELETE, - KeyEvent.VK_HELP, + // MacOS handles the event corresponding to HELP and this affects the next key pressing + // KeyEvent.VK_HELP, KeyEvent.VK_META, KeyEvent.VK_BACK_QUOTE, KeyEvent.VK_QUOTE, KeyEvent.VK_F13, - KeyEvent.VK_F14, - KeyEvent.VK_F15, + // MacOS handles events corresponding to F14/15 and does not send them to runtime in case of non-Apple keyboard + // KeyEvent.VK_F14, + // KeyEvent.VK_F15, KeyEvent.VK_F16, KeyEvent.VK_F17, KeyEvent.VK_F18, @@ -152,7 +162,7 @@ public class AllKeyCode extends Frame { KeyEvent.VK_F20, }; - keyPressedIndex = -1; + keyPressed = -1; } private void createAndShowGUI() { @@ -171,9 +181,17 @@ public void keyTyped(KeyEvent ke) { @Override public void keyPressed(KeyEvent ke) { - if (allKeyArr[keyPressedIndex] != ke.getKeyCode()) { - throw new RuntimeException("Wrong keycode received"); + if (keyPressed != ke.getKeyCode()) { + // MacOS doesn't distinguish between ALT and ALT_GRAPH keys, + // and JetBrains runtime also does not, please see JBR-1108 for more info. + // Here we have incompatibility between JetBrains and OpenJDK runtime, + // as OpenJDK generates different key codes for these keys. + if ((keyPressed != KeyEvent.VK_ALT_GRAPH) || (ke.getKeyCode() != KeyEvent.VK_ALT)) { + System.err.println("Wrong keycode received: " + keyPressed + " != " + ke.getKeyCode()); + keyCodesAreCorrect = false; + } } + keyPressedLatch.countDown(); } @Override @@ -181,6 +199,7 @@ public void keyReleased(KeyEvent ke) { } }); frame.setVisible(true); + textArea.requestFocus(); } private void removeListener() { @@ -198,16 +217,21 @@ public void dispose() { } } - public void generateFunctionKeyPress() { + public void generateFunctionKeyPress() throws InterruptedException { try { Robot robot = new Robot(); robot.waitForIdle(); for (int i = 0; i < allKeyArr.length; i++) { - keyPressedIndex = i; - robot.keyPress(allKeyArr[i]); - robot.keyRelease(allKeyArr[i]); + keyPressedLatch = new CountDownLatch(1); + keyPressed = allKeyArr[i]; + robot.keyPress(keyPressed); + robot.keyRelease(keyPressed); robot.waitForIdle(); + if(!keyPressedLatch.await(PAUSE, TimeUnit.MILLISECONDS)) { + System.err.println("Key was not pressed: " + keyPressed); + allKeysWerePressed = false; + }; } removeListener(); @@ -216,12 +240,18 @@ public void generateFunctionKeyPress() { } } - public static void main(String args[]) { + public static void main(String args[]) throws InterruptedException { AllKeyCode allKeyObj = new AllKeyCode(); allKeyObj.createAndShowGUI(); + Thread.sleep(PAUSE); allKeyObj.generateFunctionKeyPress(); + Thread.sleep(PAUSE); allKeyObj.dispose(); - System.out.println("Test Passed"); + if(keyCodesAreCorrect && allKeysWerePressed) { + System.out.println("Test Passed"); + } else { + throw new RuntimeException("Test Failed"); + } } } diff --git a/test/jdk/java/io/Serializable/font/FontSerialization.java b/test/jdk/java/io/Serializable/font/FontSerialization.java new file mode 100644 index 000000000000..7e2166c2a1ec --- /dev/null +++ b/test/jdk/java/io/Serializable/font/FontSerialization.java @@ -0,0 +1,71 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary check serialization and backward compatibility of Font + */ + +import java.awt.*; +import java.io.*; +import java.util.Base64; + +public class FontSerialization { + + /** Read the Font object from Base64 string. */ + private static Font fontDeserialization(String s) throws IOException, ClassNotFoundException { + byte[] data = Base64.getDecoder().decode(s); + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data)); + Font font = (Font) ois.readObject(); + ois.close(); + return font; + } + + /** Write the Font to a Base64 string. */ + private static String fontSerialization(Font o) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(o); + oos.close(); + return Base64.getEncoder().encodeToString(baos.toByteArray()); + } + + private static void checkFont(String data, String name) throws IOException, ClassNotFoundException { + Font font = fontDeserialization(data); + if (!font.getFontName().equals(name)) { + throw new Error("deserialized Font name doesn't match"); + } + Font reconstructedFont = fontDeserialization(fontSerialization(font)); + if ((reconstructedFont.hashCode() != font.hashCode()) || (!reconstructedFont.equals(font))) { + throw new Error("secondarily deserialized Font doesn't match with original"); + } + } + + public static void main(String[] args) throws Exception { + checkFont("rO0ABXNyAA1qYXZhLmF3dC5Gb250xaE15szeVnMDAAZJABlmb250U2VyaWFsaXplZERhdGFWZXJzaW9uRgAJcG9pbnRTaXplSQAEc2l6ZUkABXN0eWxlTAAUZlJlcXVlc3RlZEF0dHJpYnV0ZXN0ABVMamF2YS91dGlsL0hhc2h0YWJsZTtMAARuYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7eHAAAAABP4AAAAAAAAEAAAAAcHQAC0RlamFWdSBTYW5zeA==", "DejaVu Sans"); + checkFont("rO0ABXNyAA1qYXZhLmF3dC5Gb250xaE15szeVnMDAAZJABlmb250U2VyaWFsaXplZERhdGFWZXJzaW9uRgAJcG9pbnRTaXplSQAEc2l6ZUkABXN0eWxlTAAUZlJlcXVlc3RlZEF0dHJpYnV0ZXN0ABVMamF2YS91dGlsL0hhc2h0YWJsZTtMAARuYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7eHAAAAABP4AAAAAAAAEAAAAAcHQAD0Ryb2lkIFNhbnMgTW9ub3g=", "Droid Sans Mono"); + checkFont("rO0ABXNyAA1qYXZhLmF3dC5Gb250xaE15szeVnMDAAZJABlmb250U2VyaWFsaXplZERhdGFWZXJzaW9uRgAJcG9pbnRTaXplSQAEc2l6ZUkABXN0eWxlTAAUZlJlcXVlc3RlZEF0dHJpYnV0ZXN0ABVMamF2YS91dGlsL0hhc2h0YWJsZTtMAARuYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7eHAAAAABP4AAAAAAAAEAAAAAcHQAEUZpcmEgQ29kZSBSZWd1bGFyeA==", "Fira Code Regular"); + checkFont("rO0ABXNyAA1qYXZhLmF3dC5Gb250xaE15szeVnMDAAZJABlmb250U2VyaWFsaXplZERhdGFWZXJzaW9uRgAJcG9pbnRTaXplSQAEc2l6ZUkABXN0eWxlTAAUZlJlcXVlc3RlZEF0dHJpYnV0ZXN0ABVMamF2YS91dGlsL0hhc2h0YWJsZTtMAARuYW1ldAASTGphdmEvbGFuZy9TdHJpbmc7eHAAAAABP4AAAAAAAAEAAAAAcHQAFUpldEJyYWlucyBNb25vIEl0YWxpY3g=", "JetBrains Mono Italic"); + } + +} diff --git a/test/jdk/java/nio/file/Path/PathOps.java b/test/jdk/java/nio/file/Path/PathOps.java index a2d9dd69f99e..d0d463ace080 100644 --- a/test/jdk/java/nio/file/Path/PathOps.java +++ b/test/jdk/java/nio/file/Path/PathOps.java @@ -1509,10 +1509,10 @@ static void doWindowsTests() { .invalid(); test("foo\u0000\bar") .invalid(); - test("C:\\foo ") // trailing space - .invalid(); + test("C:\\foo ") + .string("C:\\foo ");// trailing space test("C:\\foo \\bar") - .invalid(); + .string("C:\\foo \\bar"); //test("C:\\foo.") // trailing dot //.invalid(); //test("C:\\foo...\\bar") diff --git a/test/jdk/java/nio/file/Path/TrailingSpace.java b/test/jdk/java/nio/file/Path/TrailingSpace.java new file mode 100644 index 000000000000..9172f809a403 --- /dev/null +++ b/test/jdk/java/nio/file/Path/TrailingSpace.java @@ -0,0 +1,65 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8190546 + * @summary Verifies that a path name that ends with a space can be + * successfully created. + */ + +import java.nio.file.Path; +import java.nio.file.Files; +import java.io.IOException; + +public class TrailingSpace { + static void testResolve(String parent, String... paths) { + final Path p = Path.of(parent, paths); + System.out.println("Path successfully created: " + p); + } + + static void testResolve(String path) { + final Path p = Path.of(path); + System.out.println("Path successfully created: " + p); + } + + static void testDelete(String path) throws IOException { + final Path p = Files.createDirectories(Path.of(path)); + Files.delete(p); + } + + public static void main(String args[]) throws IOException { + testResolve("./", "ends-with-space "); + testResolve("ends-with-space "); + testResolve("1", "2", "ends-with-space ", "3"); + testResolve("1\\2\\ends-with-space \\3"); + testResolve("1/2/ends-with-space /3"); + testResolve("1/2/ends-with-space \\3"); + testResolve("ends-with-space /"); + testResolve("ends-with-space ///"); + testResolve("ends-with-space \\"); + testResolve("ends-with-space \\\\\\"); + + testDelete("ends-with-space "); + testDelete("ends-with-space-1 \\"); + } +} diff --git a/test/jdk/java/nio/file/WatchService/JNIChecks.java b/test/jdk/java/nio/file/WatchService/JNIChecks.java new file mode 100644 index 000000000000..d8a7a8c05c6e --- /dev/null +++ b/test/jdk/java/nio/file/WatchService/JNIChecks.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021, 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Run several WatchService tests with -Xcheck:jni to check for + * warnings. + * @requires os.family == "mac" + * @library /test/lib + * @build UpdateInterference DeleteInterference LotsOfCancels LotsOfCloses + * @run main JNIChecks + */ + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class JNIChecks { + + public static void main(String[] args) throws Exception { + { + System.out.println("Test 1: UpdateInterference"); + final OutputAnalyzer oa = ProcessTools.executeTestJvm("-Xcheck:jni", UpdateInterference.class.getName()); + oa.shouldNotContain("WARNING").shouldHaveExitValue(0); + } + + { + System.out.println("Test 2: DeleteInterference"); + final OutputAnalyzer oa = ProcessTools.executeTestJvm("-Xcheck:jni", DeleteInterference.class.getName()); + oa.shouldNotContain("WARNING").shouldHaveExitValue(0); + } + + { + System.out.println("Test 3: LotsOfCancels"); + final OutputAnalyzer oa = ProcessTools.executeTestJvm("-Xcheck:jni", LotsOfCancels.class.getName()); + oa.shouldNotContain("WARNING").shouldHaveExitValue(0); + } + + { + System.out.println("Test 4: LotsOfCloses"); + final OutputAnalyzer oa = ProcessTools.executeTestJvm("-Xcheck:jni", LotsOfCloses.class.getName()); + oa.shouldNotContain("WARNING").shouldHaveExitValue(0); + } + } +} diff --git a/test/jdk/java/nio/file/WatchService/Move.java b/test/jdk/java/nio/file/WatchService/Move.java new file mode 100644 index 000000000000..413e17f52501 --- /dev/null +++ b/test/jdk/java/nio/file/WatchService/Move.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2021, 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies that Files.move() of a directory hierarchy is correctly + * reported by WatchService. + * @requires os.family == "mac" + * @library .. + * @run main Move + */ + +import java.nio.file.*; +import static java.nio.file.StandardWatchEventKinds.*; +import java.nio.file.attribute.*; +import java.io.*; +import java.util.*; +import java.util.concurrent.TimeUnit; +import com.sun.nio.file.ExtendedWatchEventModifier; + +public class Move { + + static void checkKey(WatchKey key, Path dir) { + if (!key.isValid()) + throw new RuntimeException("Key is not valid"); + if (key.watchable() != dir) + throw new RuntimeException("Unexpected watchable"); + } + + static void takeExpectedKey(WatchService watcher, WatchKey expected) { + System.out.println("take events..."); + WatchKey key; + try { + key = watcher.take(); + } catch (InterruptedException x) { + // not expected + throw new RuntimeException(x); + } + if (key != expected) + throw new RuntimeException("removed unexpected key"); + } + + static void dumpEvents(final List> events) { + System.out.println("Got events: "); + for(WatchEvent event : events) { + System.out.println(event.kind() + " for '" + event.context() + "' count = " + event.count()); + } + } + + static void assertHasEvent(final List> events, final Path path, final WatchEvent.Kind kind) { + for (final WatchEvent event : events) { + if (event.context().equals(path) && event.kind().equals(kind)) { + if (event.count() != 1) { + throw new RuntimeException("Expected count 1 for event " + event); + } + return; + } + } + + throw new RuntimeException("Didn't find event " + kind + " for path '" + path + "'"); + } + + /** + * Verifies move of a directory sub-tree with and without FILE_TREE option. + */ + static void testMoveSubtree(final Path dir) throws IOException { + final FileSystem fs = FileSystems.getDefault(); + final WatchService rootWatcher = fs.newWatchService(); + final WatchService subtreeWatcher = fs.newWatchService(); + try { + Path path = dir.resolve("root"); + Files.createDirectory(path); + System.out.println("Created " + path); + + path = dir.resolve("root").resolve("subdir").resolve("1").resolve("2").resolve("3"); + Files.createDirectories(path); + System.out.println("Created " + path); + + path = dir.resolve("root").resolve("subdir").resolve("1").resolve("file1"); + Files.createFile(path); + + path = dir.resolve("root").resolve("subdir").resolve("1").resolve("2").resolve("3").resolve("file3"); + Files.createFile(path); + + // register with both watch services (different events) + System.out.println("register for different events"); + final WatchKey rootKey = dir.resolve(dir.resolve("root")).register(rootWatcher, + new WatchEvent.Kind[]{ ENTRY_CREATE, ENTRY_DELETE }); + final WatchKey subtreeKey = dir.resolve(dir.resolve("root")).register(subtreeWatcher, + new WatchEvent.Kind[]{ ENTRY_CREATE, ENTRY_DELETE }, ExtendedWatchEventModifier.FILE_TREE); + + if (rootKey == subtreeKey) + throw new RuntimeException("keys should be different"); + + System.out.println("Move root/subdir/1/2 -> root/subdir/2.moved"); + Files.move(dir.resolve("root").resolve("subdir").resolve("1").resolve("2"), + dir.resolve("root").resolve("subdir").resolve("2.moved")); + + // Check that changes in a subdirectory were not noticed by the root directory watcher + { + final WatchKey key = rootWatcher.poll(); + if (key != null) + throw new RuntimeException("key not expected"); + } + + // Check that the moved subtree has become a series of DELETE/CREATE events + { + takeExpectedKey(subtreeWatcher, subtreeKey); + final List> events = subtreeKey.pollEvents(); + dumpEvents(events); + + assertHasEvent(events, Path.of("subdir").resolve("1").resolve("2").resolve("3").resolve("file3"), ENTRY_DELETE); + assertHasEvent(events, Path.of("subdir").resolve("1").resolve("2").resolve("3"), ENTRY_DELETE); + assertHasEvent(events, Path.of("subdir").resolve("1").resolve("2"), ENTRY_DELETE); + assertHasEvent(events, Path.of("subdir").resolve("2.moved"), ENTRY_CREATE); + assertHasEvent(events, Path.of("subdir").resolve("2.moved").resolve("3"), ENTRY_CREATE); + assertHasEvent(events, Path.of("subdir").resolve("2.moved").resolve("3").resolve("file3"), ENTRY_CREATE); + if (events.size() > 6) { + throw new RuntimeException("Too many events"); + } + } + rootKey.reset(); + subtreeKey.reset(); + + System.out.println("Move root/subdir/2.moved -> root/2"); + Files.move(dir.resolve("root").resolve("subdir").resolve("2.moved"), + dir.resolve("root").resolve("2")); + + // Check that the root directory watcher has noticed one new directory. + { + takeExpectedKey(rootWatcher, rootKey); + final List> events = rootKey.pollEvents(); + dumpEvents(events); + assertHasEvent(events, Path.of("2"), ENTRY_CREATE); + if (events.size() > 1) { + throw new RuntimeException("Too many events"); + } + } + + // Check the recursive root directory watcher + { + takeExpectedKey(subtreeWatcher, subtreeKey); + final List> events = subtreeKey.pollEvents(); + dumpEvents(events); + + assertHasEvent(events, Path.of("subdir").resolve("2.moved").resolve("3").resolve("file3"), ENTRY_DELETE); + assertHasEvent(events, Path.of("subdir").resolve("2.moved").resolve("3"), ENTRY_DELETE); + assertHasEvent(events, Path.of("subdir").resolve("2.moved"), ENTRY_DELETE); + assertHasEvent(events, Path.of("2"), ENTRY_CREATE); + assertHasEvent(events, Path.of("2").resolve("3"), ENTRY_CREATE); + assertHasEvent(events, Path.of("2").resolve("3").resolve("file3"), ENTRY_CREATE); + if (events.size() > 6) { + throw new RuntimeException("Too many events"); + } + } + } finally { + rootWatcher.close(); + subtreeWatcher.close(); + } + } + + /** + * Verifies quickly deleting a file and creating a directory with the same name (and back) + * is recognized by WatchService. + */ + static void testMoveFileToDirectory(final Path dir) throws IOException { + final FileSystem fs = FileSystems.getDefault(); + try (final WatchService watcher = fs.newWatchService()) { + Files.createDirectory(dir.resolve("dir")); + Files.createFile(dir.resolve("file")); + + final WatchKey key = dir.register(watcher, new WatchEvent.Kind[]{ENTRY_CREATE, ENTRY_DELETE}); + + for (int i = 0; i < 4; i++) { + System.out.println("Iteration " + i); + Files.delete(dir.resolve("dir")); + Files.delete(dir.resolve("file")); + if (i % 2 == 1) { + Files.createDirectory(dir.resolve("dir")); + Files.createFile(dir.resolve("file")); + } else { + Files.createDirectory(dir.resolve("file")); + Files.createFile(dir.resolve("dir")); + } + + takeExpectedKey(watcher, key); + final List> events = key.pollEvents(); + dumpEvents(events); + + final long countDirCreated = events.stream().filter( + event -> event.context().equals(Path.of("dir")) && event.kind().equals(ENTRY_CREATE)).count(); + final long countDirDeleted = events.stream().filter( + event -> event.context().equals(Path.of("dir")) && event.kind().equals(ENTRY_DELETE)).count(); + final long countFileCreated = events.stream().filter( + event -> event.context().equals(Path.of("file")) && event.kind().equals(ENTRY_CREATE)).count(); + final long countFileDeleted = events.stream().filter( + event -> event.context().equals(Path.of("file")) && event.kind().equals(ENTRY_DELETE)).count(); + if (countDirCreated != 1) throw new RuntimeException("Not one CREATE for dir"); + if (countDirDeleted != 1) throw new RuntimeException("Not one DELETE for dir"); + if (countFileCreated != 1) throw new RuntimeException("Not one CREATE for file"); + if (countFileDeleted != 1) throw new RuntimeException("Not one DELETE for file"); + + key.reset(); + } + } + } + + public static void main(String[] args) throws IOException { + Path dir = TestUtil.createTemporaryDirectory(); + try { + testMoveSubtree(dir); + } catch(UnsupportedOperationException e) { + System.out.println("FILE_TREE watching is not supported; test considered passed"); + } finally { + TestUtil.removeAll(dir); + } + + dir = TestUtil.createTemporaryDirectory(); + try { + testMoveFileToDirectory(dir); + } catch(UnsupportedOperationException e) { + System.out.println("FILE_TREE watching is not supported; test considered passed"); + } finally { + TestUtil.removeAll(dir); + } + } +} diff --git a/test/jdk/java/nio/file/WatchService/WithSecurityManager.java b/test/jdk/java/nio/file/WatchService/WithSecurityManager.java index 14cab2054409..2a1746326b02 100644 --- a/test/jdk/java/nio/file/WatchService/WithSecurityManager.java +++ b/test/jdk/java/nio/file/WatchService/WithSecurityManager.java @@ -21,7 +21,8 @@ * questions. */ -/* @test +/* @ignore + * @test * @bug 4313887 * @summary Unit test for Watchable#register's permission checks * @modules jdk.unsupported diff --git a/test/jdk/javax/swing/AbstractButton/6711682/bug6711682.java b/test/jdk/javax/swing/AbstractButton/6711682/bug6711682.java index f509b550da11..7a97f5509e68 100644 --- a/test/jdk/javax/swing/AbstractButton/6711682/bug6711682.java +++ b/test/jdk/javax/swing/AbstractButton/6711682/bug6711682.java @@ -55,10 +55,8 @@ public void run() { } }); robot.waitForIdle(); - Point l = table.getLocationOnScreen(); - int h = table.getRowHeight(); for (int i = 0; i < 3; i++) { - robot.mouseMove(l.x + 5, l.y + 5 + i * h); + moveMouseToRow(robot, table, i); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); } @@ -75,7 +73,7 @@ public void run() { } } for (int i = 2; i >= 0; i--) { - robot.mouseMove(l.x + 5, l.y + 5 + i * h); + moveMouseToRow(robot, table, i); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); } @@ -91,6 +89,17 @@ public void run() { } } + private static void moveMouseToRow(Robot robot, JTable table, int row) { + Point l = table.getLocationOnScreen(); + Rectangle cellRect = table.getCellRect(row, 0, false); + if (cellRect.width == 0 || cellRect.height == 0) { + throw new RuntimeException("table.getCellRect() returned unusable data"); + } + int x = l.x + cellRect.x + cellRect.width / 2; + int y = l.y + cellRect.y + cellRect.height / 2; + robot.mouseMove(x, y); + } + private static void createAndShowGUI() { editorCb = new JCheckBox(); rendererCb = new JCheckBox(); diff --git a/test/jdk/javax/swing/BoxLayout/NPECheckRequests/NPECheckRequests.java b/test/jdk/javax/swing/BoxLayout/NPECheckRequests/NPECheckRequests.java new file mode 100644 index 000000000000..d696b0387303 --- /dev/null +++ b/test/jdk/javax/swing/BoxLayout/NPECheckRequests/NPECheckRequests.java @@ -0,0 +1,107 @@ +/* + * Copyright 2024 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary BoxLayout doesn't ignore invisible components + * @key headful + * @run main NPECheckRequests + */ + +import java.awt.BorderLayout; +import java.lang.reflect.InvocationTargetException; +import java.awt.Dimension; +import java.util.logging.Logger; +import javax.swing.BoxLayout; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +public class NPECheckRequests { + private static final Logger LOG = Logger.getLogger(NPECheckRequests.class.getName()); + JFrame frame; + JPanel p; + BrokenComponent foo; + + public void init() { + frame = new JFrame() { + @Override + public void validate() { + try { + super.validate(); + } catch (BrokenComponentException e) { + if (foo.broken) { + LOG.info("Caught BrokenComponentException in JFrame.validate() - expected, ignored"); + } else { + throw e; + } + } + } + }; + p = new JPanel(); + BoxLayout boxLayout = new BoxLayout(p, BoxLayout.X_AXIS); + p.setLayout(boxLayout); + foo = new BrokenComponent(); + p.add(foo); + frame.setLayout(new BorderLayout()); + frame.add(p, BorderLayout.CENTER); + try { + frame.pack(); + } catch (BrokenComponentException ignored) { + LOG.info("Caught BrokenComponentException in JFrame.pack() - expected, ignored"); + } + } + + public void start() { + foo.broken = false; + // check that the layout isn't in a broken state because of that exception + frame.pack(); + } + + public static void main(String[] args) throws InterruptedException, + InvocationTargetException { + NPECheckRequests test = new NPECheckRequests(); + SwingUtilities.invokeAndWait(test::init); + SwingUtilities.invokeAndWait(test::start); + } + + private class BrokenComponent extends JPanel { + + boolean broken = true; + + @Override + public Dimension getPreferredSize() { + if (broken) { + throw new BrokenComponentException(); + } + return super.getPreferredSize(); + } + } + + private static class BrokenComponentException extends RuntimeException { + BrokenComponentException() { + super("Broken component"); + } + } + +} diff --git a/test/jdk/javax/swing/JButton/bug4490179.java b/test/jdk/javax/swing/JButton/bug4490179.java index 94b141e50302..8e1e4b07331e 100644 --- a/test/jdk/javax/swing/JButton/bug4490179.java +++ b/test/jdk/javax/swing/JButton/bug4490179.java @@ -80,11 +80,11 @@ public void actionPerformed(ActionEvent e) { robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); - if (!passed) { throw new RuntimeException("Test Failed"); } } finally { + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); SwingUtilities.invokeAndWait(() -> { if (frame != null) { frame.dispose(); diff --git a/test/jdk/javax/swing/JEditorPane/JEditorPaneFontFallback.java b/test/jdk/javax/swing/JEditorPane/JEditorPaneFontFallback.java new file mode 100644 index 000000000000..1f5f92e5ad60 --- /dev/null +++ b/test/jdk/javax/swing/JEditorPane/JEditorPaneFontFallback.java @@ -0,0 +1,114 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8185261 + * @summary Tests that font fallback works reliably in JEditorPane + * @key headful + */ + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; + +public class JEditorPaneFontFallback { + public static final char CHINESE_CHAR = '\u4e2d'; + + public static void main(String[] args) throws Exception { + String fontFamily = findSuitableFont(); + if (fontFamily == null) { + System.out.println("No suitable fonts, test cannot be performed"); + return; + } + System.out.println("Fount font: " + fontFamily); + BufferedImage img1 = renderJEditorPaneInSubprocess(fontFamily, false); + BufferedImage img2 = renderJEditorPaneInSubprocess(fontFamily, true); + if (!imagesAreEqual(img1, img2)) { + throw new RuntimeException("Unexpected rendering in JEditorPane"); + } + } + + private static String findSuitableFont() { + String[] familyNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + for (String familyName : familyNames) { + if (!familyName.contains("'") && !familyName.contains("<") && !familyName.contains("&")) { + Font font = new Font(familyName, Font.PLAIN, 1); + if (!font.canDisplay(CHINESE_CHAR)) return familyName; + } + } + return null; + } + + private static boolean imagesAreEqual(BufferedImage i1, BufferedImage i2) { + if (i1.getWidth() != i2.getWidth() || i1.getHeight() != i2.getHeight()) return false; + for (int i = 0; i < i1.getWidth(); i++) { + for (int j = 0; j < i1.getHeight(); j++) { + if (i1.getRGB(i, j) != i2.getRGB(i, j)) { + return false; + } + } + } + return true; + } + + private static BufferedImage renderJEditorPaneInSubprocess(String fontFamilyName, boolean afterFontInfoCaching) + throws Exception { + String tmpFileName = "image.png"; + int exitCode = Runtime.getRuntime().exec(new String[]{ + System.getProperty("java.home") + File.separator + "bin" + File.separator + "java", + "-cp", + System.getProperty("test.classes", "."), + JEditorPaneRenderer.class.getName(), + fontFamilyName, + Boolean.toString(afterFontInfoCaching), + tmpFileName + }).waitFor(); + if (exitCode != 0) { + throw new RuntimeException("Sub-process exited abnormally: " + exitCode); + } + return ImageIO.read(new File(tmpFileName)); + } +} + +class JEditorPaneRenderer { + private static final int FONT_SIZE = 12; + private static final int WIDTH = 20; + private static final int HEIGHT = 20; + + public static void main(String[] args) throws Exception { + String fontFamily = args[0]; + JEditorPane pane = new JEditorPane("text/html", + "" + JEditorPaneFontFallback.CHINESE_CHAR + ""); + pane.setSize(WIDTH, HEIGHT); + if (Boolean.parseBoolean(args[1])) pane.getFontMetrics(new Font(fontFamily, Font.PLAIN, FONT_SIZE)); + BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); + Graphics2D g = img.createGraphics(); + pane.paint(g); + g.dispose(); + ImageIO.write(img, "png", new File(args[2])); + } +} \ No newline at end of file diff --git a/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.html b/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.html new file mode 100644 index 000000000000..a57d0072ef25 --- /dev/null +++ b/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.html @@ -0,0 +1,10 @@ + + + + + +A B C D E F G H I J K L M N O P Q R S T U V W X Y Z + + \ No newline at end of file diff --git a/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.java b/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.java new file mode 100644 index 000000000000..0fd97a209874 --- /dev/null +++ b/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.java @@ -0,0 +1,167 @@ +/* + * Copyright 2017-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.awt.AWTAccessor; +import javax.swing.*; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.image.ColorModel; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CountDownLatch; + +/* + * @test + * bug JRE-210 + * @summary JEditorPane's font metrics to honour switching to different GC scale + * @author anton.tarasov + * @requires (os.family == "windows") + * @run main JEditorPaneGCSwitchTest + */ +public class JEditorPaneGCSwitchTest { + static JEditorPane editorPane; + static JFrame frame; + volatile static CountDownLatch latch; + final static Map scale2size = new HashMap<>(2); + + static void initGUI() { + editorPane = new JEditorPane() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + } + }; + try { + // This HTML text has different bounds when put into GC's with different scales + editorPane.setPage(JEditorPaneGCSwitchTest.class.getResource("JEditorPaneGCSwitchTest.html")); + } catch (IOException e) { + throw new RuntimeException(e); + } + editorPane.addPropertyChangeListener("page", (e) -> { + if (frame != null) frame.dispose(); + frame = new JFrame("frame"); + frame.add(editorPane); + frame.pack(); + frame.setVisible(true); + latch.countDown(); + }); + } + + static void testSize(final float scale) { + // Emulate showing on a device with the provided scale + AWTAccessor.getComponentAccessor().setGraphicsConfiguration(editorPane, new MyGraphicsConfiguration(scale)); + + EventQueue.invokeLater(() -> { + Dimension d = editorPane.getPreferredSize(); + System.out.println(scale + " : " + d); + scale2size.put(scale, d); + latch.countDown(); + }); + } + + static void runSync(Runnable r) { + try { + latch = new CountDownLatch(1); + SwingUtilities.invokeLater(() -> r.run()); + latch.await(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public static void main(String[] args) { + /* + * 1. Recreate the editor b/w device switch + */ + runSync(() -> initGUI()); + + runSync(() -> testSize(1f)); + + runSync(() -> initGUI()); + + runSync(() -> testSize(2f)); + + if (scale2size.get(1f).equals(scale2size.get(2f))) { + throw new RuntimeException("Test FAILED: [1] expected different editor size per scale!"); + } + + /* + * 2. Keep the editor shown b/w device switch + */ + scale2size.clear(); + + runSync(() -> initGUI()); + + runSync(() -> testSize(1f)); + + runSync(() -> testSize(2f)); + + frame.dispose(); + + if (scale2size.get(1f).equals(scale2size.get(2f))) { + throw new RuntimeException("Test FAILED: [2] expected different editor size per scale!"); + } + System.out.println("Test PASSED"); + } + + static class MyGraphicsConfiguration extends GraphicsConfiguration { + GraphicsConfiguration delegate; + float scale; + + public MyGraphicsConfiguration(float scale) { + this.delegate = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); + this.scale = scale; + } + + @Override + public GraphicsDevice getDevice() { + return delegate.getDevice(); + } + + @Override + public ColorModel getColorModel() { + return delegate.getColorModel(); + } + + @Override + public ColorModel getColorModel(int transparency) { + return delegate.getColorModel(transparency); + } + + @Override + public AffineTransform getDefaultTransform() { + return AffineTransform.getScaleInstance(scale, scale); + } + + @Override + public AffineTransform getNormalizingTransform() { + return delegate.getNormalizingTransform(); + } + + @Override + public Rectangle getBounds() { + return delegate.getBounds(); + } + } +} diff --git a/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest_i18n.java b/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest_i18n.java new file mode 100644 index 000000000000..1157414c7979 --- /dev/null +++ b/test/jdk/javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest_i18n.java @@ -0,0 +1,47 @@ +/* + * Copyright 2017-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.awt.AWTAccessor; +import javax.swing.*; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.image.ColorModel; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CountDownLatch; + +/* + * @test + * bug JRE-210 + * @summary JEditorPane's font metrics to honour switching to different GC scale + * @author anton.tarasov + * @requires (os.family == "windows") + * @run main/othervm -Dsun.font.layoutengine=icu -Di18n=true JEditorPaneGCSwitchTest_i18n + */ +// -Dsun.font.layoutengine=icu is used while Harfbuzz crashes with i18n +public class JEditorPaneGCSwitchTest_i18n extends JPanel { + public static void main(String[] args) throws InterruptedException { + JEditorPaneGCSwitchTest.main(null); + } +} \ No newline at end of file diff --git a/test/jdk/javax/swing/JEditorPane/JEditorPanePreferredSizeTest/JEditorPanePreferredSizeTest.java b/test/jdk/javax/swing/JEditorPane/JEditorPanePreferredSizeTest/JEditorPanePreferredSizeTest.java new file mode 100644 index 000000000000..15611c5ea4e9 --- /dev/null +++ b/test/jdk/javax/swing/JEditorPane/JEditorPanePreferredSizeTest/JEditorPanePreferredSizeTest.java @@ -0,0 +1,28 @@ +import javax.swing.*; +import java.awt.*; +import java.lang.reflect.InvocationTargetException; + +/* @test + * bug JRE-934 + * @summary Diff viewer errors are not visible on HiDPI Linux (fixed by JDK-8231084) + * @run main JEditorPanePreferredSizeTest + */ +public class JEditorPanePreferredSizeTest { + public static void main(String[] args) throws InvocationTargetException, InterruptedException { + final Dimension size = new Dimension(0, 0); + SwingUtilities.invokeAndWait(() -> { + JEditorPane myEditorPane = new JEditorPane("text/html", "text"); + myEditorPane.setBorder(null); + // triggers initial BasicTextUI layout + myEditorPane.getPreferredSize(); + // triggers BasicTextUI.modelChanged(), font here should be different from component's default font + myEditorPane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); + + size.setSize(myEditorPane.getPreferredSize()); + }); + if (size.width <= 0 || size.height <= 0) { + throw new RuntimeException("Test FAILED: bad preferred size: " + size); + } + System.out.println("Test PASSED"); + } +} \ No newline at end of file diff --git a/test/jdk/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java b/test/jdk/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java index 51838d6c9cf4..21ea5f97b82b 100644 --- a/test/jdk/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java +++ b/test/jdk/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java @@ -257,20 +257,23 @@ public void doStep() { System.out.println("Request focus on " + target); final Component c = target.getEditor().getEditorComponent(); - c.addFocusListener(new FocusListener() { - @Override - public void focusGained(FocusEvent e) { - SwingUtilities.invokeLater(focusHandler); - } - - @Override - public void focusLost(FocusEvent e) { - - } - }); - - c.requestFocus(); - + if (c.isFocusOwner()) { + SwingUtilities.invokeLater(focusHandler); + } else { + c.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + SwingUtilities.invokeLater(focusHandler); + } + + @Override + public void focusLost(FocusEvent e) { + + } + }); + + c.requestFocus(); + } } public Step nextStep() { diff --git a/test/jdk/jb/build/CDSArchivesTest.sh b/test/jdk/jb/build/CDSArchivesTest.sh new file mode 100644 index 000000000000..a8100cb066c0 --- /dev/null +++ b/test/jdk/jb/build/CDSArchivesTest.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -x + +# @test +# @summary CDSArchivesTest.sh checks jsa files exist in jbrsdk distributions, jbr distributions are skipped +# @run shell CDSArchivesTest.sh + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +IMPLEMENTOR_VERSION=$(cat ${TESTJAVA}/release | grep "IMPLEMENTOR_VERSION" | cut -d"=" -f2) + +echo "Checking ${IMPLEMENTOR_VERSION}" +if [ "${IMPLEMENTOR_VERSION}" != *"JBRSDK"* ]; then + echo "Test executed for JBRSDK only" + echo "skipping the test" + exit 0 +fi + +FIND="/usr/bin/find" +files=$(${FIND} ${TESTJAVA} -name "*.jsa") +ls -l $files +if [ $? != 0 ]; then + echo "Command failed." + exit 1 +elif [ -z "$files" ]; then + echo "*** FAILED *** jsa-files not found" + echo "\n*** FAILED *** Test failed" + exit 1 +fi +echo "\nTest passed" diff --git a/test/jdk/jb/build/CheckDocLintTest.java b/test/jdk/jb/build/CheckDocLintTest.java new file mode 100644 index 000000000000..e4cb65e85a7d --- /dev/null +++ b/test/jdk/jb/build/CheckDocLintTest.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @summary regression test for JBR-4169 add the module jdk.javadoc + * @run main CheckDocLintTest + */ + +public class CheckDocLintTest { + + static final String CLASS_NAMES[] = { + "jdk.javadoc.internal.doclint.DocLint", + "com.sun.tools.doclint.DocLint" + }; + + public static void main(String[] args) { + Class klass; + boolean failed = false; + for (String klassName : CLASS_NAMES) + try { + klass = Class.forName(klassName); + System.out.println(klass + " exists"); + } catch(ClassNotFoundException e) { + System.out.println("*** " + klassName + " does not exist"); + failed = true; + } + if (failed) { + throw new RuntimeException("Test failed"); + } + System.out.println("Test passed"); + } +} diff --git a/test/jdk/jb/build/CheckJBRModules.java b/test/jdk/jb/build/CheckJBRModules.java new file mode 100644 index 000000000000..681692ffd67a --- /dev/null +++ b/test/jdk/jb/build/CheckJBRModules.java @@ -0,0 +1,106 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +/** + * @test + * @requires !vm.graal.enabled + * @summary Verifies the list of available modules + * @library /test/lib + * @run main CheckJBRModules + */ +public class CheckJBRModules { + static final String moduleNames[] = { + "java.base", + "java.compiler", + "java.datatransfer", + "java.desktop", + "java.instrument", + "java.logging", + "java.management", + "java.management.rmi", + "java.naming", + "java.net.http", + "java.prefs", + "java.rmi", + "java.scripting", + "java.se", + "java.security.jgss", + "java.security.sasl", + "java.smartcardio", + "java.sql", + "java.sql.rowset", + "java.transaction.xa", + "java.xml", + "java.xml.crypto", + "jdk.accessibility", + "jdk.attach", + "jdk.charsets", + "jdk.compiler", + "jdk.crypto.cryptoki", + "jdk.crypto.ec", + "jdk.dynalink", + "jdk.httpserver", + "jdk.internal.ed", + "jdk.internal.le", + "jdk.internal.vm.ci", + "jdk.javadoc", + "jdk.jdi", + "jdk.jdwp.agent", + "jdk.jfr", + "jdk.jsobject", + "jdk.localedata", + "jdk.management", + "jdk.management.agent", + "jdk.management.jfr", + "jdk.naming.dns", + "jdk.naming.rmi", + "jdk.net", + "jdk.sctp", + "jdk.security.auth", + "jdk.security.jgss", + "jdk.unsupported", + "jdk.unsupported.desktop", + "jdk.xml.dom", + "jdk.zipfs", + "jdk.hotspot.agent", + "jdk.jcmd" }; + + public static void main(String args[]) throws Exception { + final OutputAnalyzer oa = exec("--list-modules").shouldHaveExitValue(0); + for(String moduleName : moduleNames) { + oa.shouldContain(moduleName); + } + } + + /** + * java args... returning the OutputAnalyzer to analyzer the output + */ + private static OutputAnalyzer exec(String... args) throws Exception { + return ProcessTools.executeTestJava(args) + .outputTo(System.out) + .errorTo(System.out); + } +} diff --git a/test/jdk/jb/build/CheckJBRModulesWindows.java b/test/jdk/jb/build/CheckJBRModulesWindows.java new file mode 100644 index 000000000000..46c494f11a93 --- /dev/null +++ b/test/jdk/jb/build/CheckJBRModulesWindows.java @@ -0,0 +1,53 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +/** + * @test + * @requires !vm.graal.enabled + * @requires (os.family == "windows") + * @summary Verifies the list of available modules specific to Windows + * @library /test/lib + * @run main CheckJBRModulesWindows + */ +public class CheckJBRModulesWindows { + static final String moduleNames[] = { "jdk.crypto.mscapi" }; + + public static void main(String args[]) throws Exception { + final OutputAnalyzer oa = exec("--list-modules").shouldHaveExitValue(0); + for(String moduleName : moduleNames) { + oa.shouldContain(moduleName); + } + } + + /** + * java args... returning the OutputAnalyzer to analyzer the output + */ + private static OutputAnalyzer exec(String... args) throws Exception { + return ProcessTools.executeTestJava(args) + .outputTo(System.out) + .errorTo(System.out); + } +} diff --git a/test/jdk/jb/build/JARFileCreatedByTest.java b/test/jdk/jb/build/JARFileCreatedByTest.java new file mode 100644 index 000000000000..36ee92c1081e --- /dev/null +++ b/test/jdk/jb/build/JARFileCreatedByTest.java @@ -0,0 +1,110 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.jar.JarInputStream; +import java.util.jar.Manifest; +import static java.nio.file.FileVisitResult.CONTINUE; + +/** + * @test + * @summary Regression test for JBR-4297. Verifies the attribute + * Created-By in all jar files included into JRE this test is running on + * @run main JARFileCreatedByTest + */ + +public class JARFileCreatedByTest { + private static final String expectedValue = "JetBrains"; + private static final String checkedAttr = "Created-By"; + private static boolean isFailed = false; + + public static void main(String[] args) throws IOException { + Path jrePath = Paths.get(System.getProperty("java.home")); + + for (Path jarFile : new Finder(jrePath, "*.jar").files) { + try { + checkJARManifest(jarFile); + } catch (RuntimeException e) { + e.printStackTrace(); + isFailed = true; + } + } + if (isFailed) throw new RuntimeException("JARFileCreatedByTest failed"); + } + + private static void checkJARManifest(Path jarFile) throws IOException { + + System.out.println("Checking JAR:" + jarFile); + + JarInputStream jarStream = new JarInputStream(new FileInputStream(jarFile.toFile())); + Manifest mf = jarStream.getManifest(); + + System.out.println("Checking attribute: " + checkedAttr); + String createdByValue = mf.getMainAttributes().getValue(checkedAttr); + + if (!createdByValue.contains(expectedValue)) + throw new RuntimeException("\"" + checkedAttr + "\"" + " contains unexpected value \"" + createdByValue + "\""); + } + + private static class Finder extends SimpleFileVisitor { + + private final PathMatcher matcher; + ArrayList files = new ArrayList<>(); + + Finder(Path rootDir, String pattern) throws IOException { + matcher = FileSystems.getDefault() + .getPathMatcher("glob:" + pattern); + Files.walkFileTree(rootDir, this); + } + + void find(Path file) { + Path name = file.getFileName(); + if (name != null && matcher.matches(name)) { + files.add(file); + System.out.println(file); + } + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + find(file); + return CONTINUE; + } + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { + find(dir); + return CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException exc) { + System.err.println(exc); + return CONTINUE; + } + } +} diff --git a/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsRealEnv.java b/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsRealEnv.java new file mode 100644 index 000000000000..858c06c647c9 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsRealEnv.java @@ -0,0 +1,112 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.Objects; + +/** + * @test + * @summary ResolveSymbolsTest verifies that all JBR symbols are successfully resolved in the environment where + * the test is run + * @requires (os.family == "linux") + * @run main ResolveSymbolsRealEnv + */ + +public class ResolveSymbolsRealEnv extends ResolveSymbolsTestBase { + + /** + * Run and parse output of ldd. + * Example: + * $ ldd /usr/bin/ls + * linux-vdso.so.1 (0x00007fff07744000) + * libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f073f4b2000) + * libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f073f200000) + * libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f073f169000) + * /lib64/ld-linux-x86-64.so.2 (0x00007f073f51c000) + * + * The function returns a list with "/lib/x86_64-linux-gnu/libselinux.so.1", "/lib/x86_64-linux-gnu/libc.so.6", + * "/lib/x86_64-linux-gnu/libpcre2-8.so.0" and "/lib64/ld-linux-x86-64.so.2" + */ + private List getDependencies(Path path) throws IOException, InterruptedException { + Process process = Runtime.getRuntime().exec("ldd " + path); + + List result = new BufferedReader(new InputStreamReader(process.getInputStream())) + .lines() + .map(line -> { + // parse expressions like "libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f931b000000)" + String[] columns = line.split("=>"); + if (columns.length >= 2) { + return columns[1].strip().split("\\s+")[0]; + } + // something like this "/lib64/ld-linux-x86-64.so.2 (0x00007f073f51c000)" is expected + if (line.contains("ld-linux")) { + return line.trim().split("\\s+")[0]; + } + return null; + }) + .filter(Objects::nonNull) + .map(Paths::get) + .toList(); + + if (process.waitFor() != 0) { + return null; + } + + return result; + } + + protected List getExternalSymbols() throws IOException { + return getJbrBinaries().stream() + .flatMap(path -> { + try { + return getDependencies(path).stream(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException("Failed to get the JBR dependencies from " + path, e); + } + }) + .distinct() + .map(path -> { + try { + System.out.println("Dumping symbols for " + path); + return runReadElf(path); + } catch (IOException | InterruptedException e) { + throw new RuntimeException("Failed to read elf for " + path, e); + } + }) + .filter(Objects::nonNull) + .flatMap(s -> parseElf(s).stream()) + .filter(elfSymbol -> symbolsFilter(elfSymbol, "")) + .filter(elfSymbol -> !elfSymbol.sectionNumber.equals("UND")) + .map(elfSymbol -> elfSymbol.name) + .toList(); + } + + public static void main(String[] args) throws IOException, InterruptedException { + new ResolveSymbolsRealEnv().doTest(); + } +} diff --git a/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsTestBase.java b/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsTestBase.java new file mode 100644 index 000000000000..056a1e5eaacb --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsTestBase.java @@ -0,0 +1,223 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +abstract class ResolveSymbolsTestBase { + protected static class ElfSymbol { + String name; + String type; + String bind; + String sectionNumber; + } + + protected static void checkReadElf() throws IOException, InterruptedException { + Process process = Runtime.getRuntime().exec("readelf --version"); + if (process.waitFor() != 0) { + throw new RuntimeException("Failed to run readelf"); + } + } + + protected static String runReadElf(Path path) throws IOException, InterruptedException { + Process process = Runtime.getRuntime().exec("readelf --wide --dyn-syms " + path); + String output = new BufferedReader( + new InputStreamReader(process.getInputStream())).lines().collect(Collectors.joining("\n")); + if (process.waitFor() != 0) { + return null; + } + return output; + } + + /* Parses the output ofr linux readelf(binutils) that tools like: + * $ readelf -W --dyn-syms myLib.so + * + * Symbol table '.dynsym' contains 97 entries: + * Num: Value Size Type Bind Vis Ndx Name + * 6: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + * 7: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND __cxa_end_catch + * 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.17 (2) + * 28: 0000000000003594 28 FUNC WEAK DEFAULT 11 _ZNK9__gnu_cxx13new_allocatorISsE8max_sizeEv + * + * + * Columns description: + * Num - The symbol number + * Value - The address of the Symbol + * Size - The size of the symbol + * Type - symbol type: Func = Function, Object, File (source file name), Section = memory section, Notype = untyped + * absolute symbol or undefined + * Bind - GLOBAL binding means the symbol is visible outside the file. LOCAL binding is visible only in the file. + * WEAK is like global, the symbol can be overridden. + * Vis - Symbols can be default, protected, hidden or internal. + * Ndx - The section number the symbol is in. ABS means absolute: not adjusted to any section address's relocation + * Name - symbol name + */ + protected static List parseElf(String readElfData) { + readElfData = readElfData + // handle default version with @@ like clock_gettime@@GLIBC_2.17 + // see https://sourceware.org/binutils/docs/ld/VERSION.html + .replaceAll("@@", "@") + // Values like ": %d", ": %d" make it harder to parse the table + // see https://github.com/bminor/binutils-gdb/blob/master/binutils/readelf.c + .replaceAll(": ", "OS_SPECIFIC_") + .replaceAll(": ", "UNKNOWN_") + .replaceAll(": ", "PROCESSOR_SPECIFIC_"); + String[] lines = readElfData.split("\n"); + + int i = 0; + while (i < lines.length && !lines[i].contains("'.dynsym'")) { + ++i; + } + ++i; + if (i >= lines.length) { + throw new RuntimeException("readelf: no dynsym table"); + } + + List tableHeaders = Arrays.asList(lines[i].split("\\s+")); + final int nameCol = tableHeaders.indexOf("Name"); + final int typeCol = tableHeaders.indexOf("Type"); + final int bindCol = tableHeaders.indexOf("Bind"); + final int ndxCol = tableHeaders.indexOf("Ndx"); + final int lastCol = Collections.max(Arrays.asList(nameCol, typeCol, bindCol, ndxCol)); + if (nameCol == -1 || typeCol == -1 || bindCol == -1 || ndxCol == -1) { + throw new RuntimeException("readelf: the dynsym must have Type, Bind and Ndx columns, but it has " + tableHeaders); + } + ++i; + if (i >= lines.length) { + throw new RuntimeException("readelf: dynsym table is empty"); + } + + List result = new ArrayList<>(); + for (; i < lines.length; ++i) { + if (lines[i].isBlank()) { + return result; + } + + String[] row = lines[i].split("\\s+"); + if (lastCol >= row.length) { + // that probably means that the name attribute is empty + continue; + } + ElfSymbol symbol = new ElfSymbol(); + symbol.name = row[nameCol]; + symbol.type = row[typeCol]; + symbol.bind = row[bindCol]; + symbol.sectionNumber = row[ndxCol]; + result.add(symbol); + } + + return result; + } + + /** + * Get external to JBR symbols + */ + protected abstract List getExternalSymbols() throws IOException; + + protected void doTest() throws IOException, InterruptedException { + checkReadElf(); + + Set definedSymbols = new HashSet<>(getExternalSymbols()); + System.out.println("Collecting external symbols: " + definedSymbols.size() + " found"); + + // ========================= Collect symbols in JBR ========================= + List binaries = getJbrBinaries(); + + // A map (Library name) -> (List of imported symbols) + Map> importedSymbols = new HashMap<>(); + for (Path path : binaries) { + String elfData = runReadElf(path); + if (elfData == null) { + // the candidate doesn't have elf. + continue; + } + List elfSymbols = parseElf(elfData); + for (ElfSymbol symbol : elfSymbols) { + if (!symbolsFilter(symbol, path.getFileName().toString())) { + continue; + } + if (symbol.sectionNumber.equals("UND")) { + importedSymbols.computeIfAbsent(path.toString(), s -> new ArrayList<>()).add(symbol.name); + } else { + definedSymbols.add(symbol.name); + } + } + } + + // ========================= Try to resolve JBR symbols ========================= + List errors = new ArrayList<>(); + for (Map.Entry> file : importedSymbols.entrySet()) { + System.out.print("Resolving symbols in " + file.getKey() + "..."); + List unresolved = new ArrayList<>(); + for (String symbol : file.getValue()) { + if (!definedSymbols.contains(symbol)) { + unresolved.add(symbol); + } + } + System.out.println(" " + (file.getValue().size() - unresolved.size()) + " resolved" + + (unresolved.isEmpty() ? "" : ", " + unresolved.size() + " failed")); + if (!unresolved.isEmpty()) { + errors.add(file.getKey() + ":\n" + String.join("\n", unresolved)); + } + } + + if (!errors.isEmpty()) { + throw new RuntimeException("Failed to resolve symbols in " + + errors.size() + " files:\n" + String.join("\n\n", errors) + "\n"); + } + } + + protected static boolean symbolsFilter(ElfSymbol symbol, String fileName) { + // check for exceptions: + // https://src.fedoraproject.org/rpms/chromium/blob/f32/f/chromium-84.0.4147.89-epel7-old-cups.patch + // the symbols avaliability is checked in runtime + if (fileName.equals("libcef.so") && symbol.name.equals("httpConnect2")) { + return false; + } + + // the value STT_GNU_IFUNC is 10. + // OS_SPECIFIC_10 is supposed to be IFUNC but for some reason it might not get identified by readelf on CentOS 7 + // see https://github.com/bminor/binutils-gdb/blob/9a20cccbcd8d69288fbce51707ef43c21fa62ce2/binutils/readelf.c#L13224C16-L13224C29 + return !symbol.name.isEmpty() && + (symbol.type.equals("FUNC") || symbol.type.equals("IFUNC") || symbol.type.equals("OS_SPECIFIC_10")) && + (symbol.bind.equals("WEAK") || symbol.bind.equals("GLOBAL")); + } + + protected static List getJbrBinaries() throws IOException { + String javaHome = System.getProperty("java.home"); + List binaries; + try (Stream walk = Files.walk(Paths.get(javaHome))) { + binaries = walk + .filter(path -> !Files.isDirectory(path)) + .filter(path -> Files.isExecutable(path) || path.toString().endsWith(".so")).toList(); + } + return binaries; + } +} diff --git a/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsTestMinEnv.java b/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsTestMinEnv.java new file mode 100644 index 000000000000..32d0abce54bb --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/ResolveSymbolsTestMinEnv.java @@ -0,0 +1,103 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.stream.Stream; + +/** + * @test + * @summary ResolveSymbolsTest verifies that the set of imported symbols is + * limited by the predefined symbols list. + * + * @comment What the test actually does? + * - It dumps all available in some environment symbols(hereinafter - external symbols). + * - Dumps all exported from JBR symbols. Dumps all imported by JBR symbols and checks + * for their presence in the JBR or environment. + * + * From what environment comes the external symbols? + * They are from the Docker images used to build JBR and Docker images for JCEF. + * + * How the symbols in the dataset are taken? + * There are scripts used for that: jb/build/externalLibs/aarch64/dump_aarch64.sh and + * jb/build/externalLibs/x86_64/dump_x86_64.sh + * + * JBR got a new dependency. How to update the test data? + * - Run a docker container made from the corresponding image in jb/project/docker + * - Find the library whose symbols are missing. This utilities might help: + * $ ldconfig -p | grep libNameImLookingFor + * $ ldd nameOfJbrLibrary + * $ yum whatprovides *libXcursor* + * + * - Dump ELF: + * $ echo Library: $lib_path >> $lib_name.txt + * $ echo Package: $(rpm -q --whatprovides $lib_path) >> $lib_name.txt + * $ echo >> $lib_name.txt + * $ readelf --wide --dyn-syms $lib_path >> $lib_name.txt + * Put $lib_name.txt to the corresponding directory jb/build/externalLibs/aarch64 or + * jb/build/externalLibs/x86_64 + * + * @requires (os.family == "linux") + * @run main ResolveSymbolsTestMinEnv + */ + +public class ResolveSymbolsTestMinEnv extends ResolveSymbolsTestBase { + + private static String getArch() { + String arch = System.getProperty("os.arch"); + if (arch.equals("x86_64") || arch.equals("amd64")) { + return "x86_64"; + } else if (arch.equals("aarch64")) { + return "aarch64"; + } + throw new RuntimeException("Unknown os.arch: " + arch); + } + + protected List getExternalSymbols() throws IOException { + List result = new ArrayList<>(); + + String libsPath = Objects.requireNonNull(ResolveSymbolsTestMinEnv.class.getResource("externalLibs/" + getArch())).getPath(); + try (Stream stream = Files.list(Paths.get(libsPath))) { + stream.filter(path -> path.toString().endsWith(".txt")).forEach(path -> { + try { + List symbols = parseElf(Files.readString(path)).stream() + .filter(elfSymbol -> ResolveSymbolsTestMinEnv.symbolsFilter(elfSymbol, path.getFileName().toString())) + .filter(elfSymbol -> !elfSymbol.sectionNumber.equals("UND")) + .map(elfSymbol -> elfSymbol.name) + .toList(); + result.addAll(symbols); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + } + return result; + } + + public static void main(String[] args) throws IOException, InterruptedException { + new ResolveSymbolsTestMinEnv().doTest(); + } +} diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/dump_aarch64.sh b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/dump_aarch64.sh new file mode 100644 index 000000000000..8efa08d7d2ad --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/dump_aarch64.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e + +mkdir -p dump_output && cd dump_output && rm -rf * +libs=( + /lib64/ld-linux-aarch64.so.1 + /lib64/libasound.so.2 + /lib64/libatk-1.0.so.0 + /lib64/libatk-bridge-2.0.so.0 + /lib64/libatspi.so.0 + /lib64/libc.so.6 + /lib64/libcairo.so.2 + /lib64/libcups.so.2 + /lib64/libdbus-1.so.3 + /lib64/libdl.so.2 + /lib64/libdrm.so.2 + /lib64/libexpat.so.1 + /lib64/libfreetype.so.6 + /lib64/libgbm.so.1 + /lib64/libgcc_s.so.1 + /lib64/libgio-2.0.so.0 + /lib64/libglib-2.0.so.0 + /lib64/libgobject-2.0.so.0 + /lib64/libm.so.6 + /lib64/libnspr4.so + /lib64/libnss3.so + /lib64/libnssutil3.so + /lib64/libpango-1.0.so.0 + /lib64/libpthread.so.0 + /lib64/librt.so.1 + /lib64/libsmime3.so + /lib64/libX11.so + /lib64/libxcb.so.1 + /lib64/libXcomposite.so.1 + /lib64/libXcursor.so.1 + /lib64/libXdamage.so.1 + /lib64/libXext.so.6 + /lib64/libXfixes.so.3 + /lib64/libXi.so.6 + /lib64/libxkbcommon.so.0 + /lib64/libXrandr.so.2 + /lib64/libXrender.so.1 + /lib64/libXtst.so.6 + /lib64/libXxf86vm.so.1 + /lib64/libz.so.1 + /lib64/libwayland-cursor.so.0 +) + +for lib_path in "${libs[@]}" +do + if ! test -f "$lib_path"; then + echo "Failed: $lib_path not found" + exit 1 + fi + + lib_name=$(basename -- "$lib_path") + lib_package=$(rpm -q --whatprovides "$lib_path") + echo "Processing $lib_name from $lib_package..." + echo "Library: $lib_path" >> "$lib_name.txt" + echo "Package: $lib_package" >> "$lib_name.txt" + echo "" >> "$lib_name.txt" + + readelf --wide --dyn-syms "$lib_path" >> "$lib_name.txt" +done diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/ld-linux-aarch64.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/ld-linux-aarch64.so.1.txt new file mode 100644 index 000000000000..4cb932019815 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/ld-linux-aarch64.so.1.txt @@ -0,0 +1,35 @@ +Library: /lib64/ld-linux-aarch64.so.1 +Package: glibc-2.17-326.el7_9.aarch64 + + +Symbol table '.dynsym' contains 29 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000b60 0 SECTION LOCAL DEFAULT 11 + 2: 000000000002fba0 0 SECTION LOCAL DEFAULT 16 + 3: 0000000000010d64 28 FUNC GLOBAL DEFAULT 11 _dl_get_tls_static_info@@GLIBC_PRIVATE + 4: 000000000002fc40 8 OBJECT GLOBAL DEFAULT 16 __pointer_chk_guard@@GLIBC_PRIVATE + 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 6: 0000000000015b80 80 FUNC WEAK DEFAULT 11 free@@GLIBC_2.17 + 7: 0000000000015bd0 120 FUNC WEAK DEFAULT 11 realloc@@GLIBC_2.17 + 8: 0000000000031058 4 OBJECT WEAK DEFAULT 20 _dl_starting_up@@GLIBC_PRIVATE + 9: 0000000000011008 240 FUNC GLOBAL DEFAULT 11 _dl_allocate_tls@@GLIBC_PRIVATE + 10: 0000000000031138 40 OBJECT GLOBAL DEFAULT 20 _r_debug@@GLIBC_2.17 + 11: 000000000002fdc0 8 OBJECT GLOBAL DEFAULT 16 __libc_stack_end@@GLIBC_2.17 + 12: 0000000000015a28 280 FUNC WEAK DEFAULT 11 __libc_memalign@@GLIBC_2.17 + 13: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 + 14: 00000000000110f8 196 FUNC GLOBAL DEFAULT 11 _dl_deallocate_tls@@GLIBC_PRIVATE + 15: 0000000000015b4c 52 FUNC WEAK DEFAULT 11 calloc@@GLIBC_2.17 + 16: 0000000000031060 8 OBJECT GLOBAL DEFAULT 20 _dl_argv@@GLIBC_PRIVATE + 17: 00000000000105a8 1012 FUNC GLOBAL DEFAULT 11 _dl_mcount@@GLIBC_2.17 + 18: 0000000000010d14 80 FUNC GLOBAL DEFAULT 11 _dl_tls_setup@@GLIBC_PRIVATE + 19: 000000000000ec80 4 FUNC GLOBAL DEFAULT 11 _dl_debug_state@@GLIBC_PRIVATE + 20: 0000000000030000 4088 OBJECT GLOBAL DEFAULT 19 _rtld_global@@GLIBC_PRIVATE + 21: 000000000001144c 72 FUNC GLOBAL DEFAULT 11 __tls_get_addr@@GLIBC_2.17 + 22: 0000000000011858 168 FUNC GLOBAL DEFAULT 11 _dl_make_stack_executable@@GLIBC_PRIVATE + 23: 0000000000015b40 12 FUNC WEAK DEFAULT 11 malloc@@GLIBC_2.17 + 24: 0000000000010e34 468 FUNC GLOBAL DEFAULT 11 _dl_allocate_tls_init@@GLIBC_PRIVATE + 25: 000000000002fc48 304 OBJECT GLOBAL DEFAULT 16 _rtld_global_ro@@GLIBC_PRIVATE + 26: 000000000002fd78 8 OBJECT GLOBAL DEFAULT 16 __stack_chk_guard@@GLIBC_2.17 + 27: 000000000002fdd0 4 OBJECT GLOBAL DEFAULT 16 __libc_enable_secure@@GLIBC_PRIVATE + 28: 00000000000087c0 1440 FUNC GLOBAL DEFAULT 11 _dl_rtld_di_serinfo@@GLIBC_PRIVATE diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libX11.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libX11.so.txt new file mode 100644 index 000000000000..22fefdb00629 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libX11.so.txt @@ -0,0 +1,1389 @@ +Library: /lib64/libX11.so +Package: libX11-devel-1.6.7-4.el7_9.aarch64 + + +Symbol table '.dynsym' contains 1383 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000001b6a0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000014f0b8 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam_r@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbstowcs@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readv@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbtowc@GLIBC_2.17 (2) + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_file_descriptor + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresuid@GLIBC_2.17 (2) + 23: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.17 (2) + 26: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.17 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connect + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.17 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_generate_id + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.17 (3) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (2) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fdelt_chk@GLIBC_2.17 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncpy_chk@GLIBC_2.17 (2) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connect_to_display_with_auth_info + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_writev + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopen@GLIBC_2.17 (2) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.17 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.17 (2) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.17 (2) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewind@GLIBC_2.17 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.17 (2) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_reply64 + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 71: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 72: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (2) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (2) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.17 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.17 (2) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_queued_event + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.17 (2) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wctomb@GLIBC_2.17 (2) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_wait_for_reply64 + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_event + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_pton@GLIBC_2.17 (2) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcat_chk@GLIBC_2.17 (2) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.17 (2) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_get_mb_cur_max@GLIBC_2.17 (2) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.17 (2) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.17 (2) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_maximum_request_length + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (2) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_take_socket + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (2) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (2) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_wait_for_event + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (2) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.17 (2) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_disconnect + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connection_has_error + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.17 (2) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.17 (2) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (2) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (2) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresgid@GLIBC_2.17 (2) + 115: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.17 (2) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_setup + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.17 (2) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 122: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.17 (2) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.17 (2) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (2) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (2) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.17 (2) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (2) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (2) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mblen@GLIBC_2.17 (2) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.17 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (2) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (2) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.17 (2) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.17 (2) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.17 (2) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_parse_display + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ferror@GLIBC_2.17 (2) + 141: 000000000005ec70 176 FUNC GLOBAL DEFAULT 11 _XCloseLC + 142: 0000000000031968 8 FUNC GLOBAL DEFAULT 11 XProtocolVersion + 143: 000000000008d66c 92 FUNC GLOBAL DEFAULT 11 _XkbGetConverters + 144: 000000000007c6b8 824 FUNC GLOBAL DEFAULT 11 _XomGetFontDataFromFontSet + 145: 0000000000057cf4 40 FUNC GLOBAL DEFAULT 11 _Xwcslen + 146: 0000000000095684 2056 FUNC GLOBAL DEFAULT 11 _XkbReadGetGeometryReply + 147: 00000000000211b8 832 FUNC GLOBAL DEFAULT 11 _XUpdateGCCache + 148: 0000000000081244 440 FUNC GLOBAL DEFAULT 11 XcmsRGBiToRGB + 149: 0000000000026c34 496 FUNC GLOBAL DEFAULT 11 XGeometry + 150: 000000000002078c 156 FUNC GLOBAL DEFAULT 11 XConvertSelection + 151: 0000000000041ab8 184 FUNC GLOBAL DEFAULT 11 XSetAuthorization + 152: 0000000000029044 212 FUNC GLOBAL DEFAULT 11 XGetPointerControl + 153: 000000000006df10 32 FUNC GLOBAL DEFAULT 11 _XimDecodeLocalIMAttr + 154: 0000000000031ca0 108 FUNC GLOBAL DEFAULT 11 XMapSubwindows + 155: 000000000007259c 24 FUNC GLOBAL DEFAULT 11 _XimWrite + 156: 000000000003ce1c 8 FUNC GLOBAL DEFAULT 11 XSetZoomHints + 157: 0000000000085654 44 FUNC GLOBAL DEFAULT 11 XcmsQueryColor + 158: 000000000004f4fc 336 FUNC GLOBAL DEFAULT 11 XGetICValues + 159: 000000000002031c 532 FUNC GLOBAL DEFAULT 11 XSaveContext + 160: 0000000000023fa0 324 FUNC GLOBAL DEFAULT 11 XFillArc + 161: 0000000000070dbc 516 FUNC GLOBAL DEFAULT 11 _XimThaiOpenIM + 162: 0000000000053334 216 FUNC GLOBAL DEFAULT 11 _XlcDestroyLocaleDataBase + 163: 000000000009555c 296 FUNC GLOBAL DEFAULT 11 XkbFindOverlayForKey + 164: 000000000003f48c 584 FUNC GLOBAL DEFAULT 11 XTextWidth16 + 165: 0000000000031aa8 8 FUNC GLOBAL DEFAULT 11 XPlanesOfScreen + 166: 0000000000065044 4 FUNC GLOBAL DEFAULT 11 _XimProcError + 167: 0000000000082fa0 636 FUNC GLOBAL DEFAULT 11 _XcmsCIELabQueryMaxLCRGB + 168: 000000000008d360 52 FUNC GLOBAL DEFAULT 11 XkbNoteControlsChanges + 169: 00000000000319b0 8 FUNC GLOBAL DEFAULT 11 XBitmapUnit + 170: 0000000000031ee8 8 FUNC GLOBAL DEFAULT 11 XExtendedMaxRequestSize + 171: 000000000003b990 16 FUNC GLOBAL DEFAULT 11 XEmptyRegion + 172: 000000000009ae4c 632 FUNC GLOBAL DEFAULT 11 XkbAllocServerMap + 173: 0000000000057e14 28 FUNC GLOBAL DEFAULT 11 _Xwcstombs + 174: 000000000007b680 48 FUNC GLOBAL DEFAULT 11 _Xutf8GenericDrawString + 175: 000000000009ea58 524 FUNC GLOBAL DEFAULT 11 XkbAddDeviceLedInfo + 176: 0000000000153fa0 144 OBJECT GLOBAL DEFAULT 23 _XcmsRegColorSpaces + 177: 0000000000086024 804 FUNC GLOBAL DEFAULT 11 XcmsAllocNamedColor + 178: 000000000002a058 112 FUNC GLOBAL DEFAULT 11 XGetWindowAttributes + 179: 000000000008e784 228 FUNC GLOBAL DEFAULT 11 XkbGetKeySyms + 180: 0000000000032020 256 FUNC GLOBAL DEFAULT 11 XSetModifierMapping + 181: 000000000009b974 704 FUNC GLOBAL DEFAULT 11 XkbAddKeyType + 182: 000000000005f7f8 28 FUNC GLOBAL DEFAULT 11 XmbTextEscapement + 183: 000000000003cd40 220 FUNC GLOBAL DEFAULT 11 XSetWMHints + 184: 000000000007ad38 24 FUNC GLOBAL DEFAULT 11 _XInitOM + 185: 000000000007d058 320 FUNC GLOBAL DEFAULT 11 XcmsCreateCCC + 186: 0000000000151758 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketINET6Funcs + 187: 000000000004fc80 688 FUNC GLOBAL DEFAULT 11 KeySymToUcs4 + 188: 000000000004fb60 16 FUNC GLOBAL DEFAULT 11 XLocaleOfIM + 189: 000000000002197c 300 FUNC GLOBAL DEFAULT 11 _XTryShapeBitmapCursor + 190: 000000000002a1e0 280 FUNC GLOBAL DEFAULT 11 XGetWMProtocols + 191: 0000000000094530 72 FUNC GLOBAL DEFAULT 11 XkbGetNamedIndicator + 192: 000000000004a5c0 672 FUNC GLOBAL DEFAULT 11 XrmQGetSearchResource + 193: 000000000003b748 244 FUNC GLOBAL DEFAULT 11 XShrinkRegion + 194: 000000000003c8c8 128 FUNC GLOBAL DEFAULT 11 XSetForeground + 195: 0000000000043404 172 FUNC GLOBAL DEFAULT 11 _XAsyncErrorHandler + 196: 0000000000154920 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 197: 0000000000038390 132 FUNC GLOBAL DEFAULT 11 XrmUniqueQuark + 198: 000000000002df3c 100 FUNC GLOBAL DEFAULT 11 _XFreeAtomTable + 199: 000000000002d0e0 252 FUNC GLOBAL DEFAULT 11 _XSetImage + 200: 000000000007af04 48 FUNC GLOBAL DEFAULT 11 _Xutf8GenericDrawImageString + 201: 000000000002a3bc 244 FUNC GLOBAL DEFAULT 11 XGrabKeyboard + 202: 000000000006e258 208 FUNC GLOBAL DEFAULT 11 _XimGetCurrentICValues + 203: 0000000000154358 8 OBJECT GLOBAL DEFAULT 24 _XFreeMutex_fn + 204: 0000000000071e58 80 FUNC GLOBAL DEFAULT 11 _XimTransRead + 205: 000000000003b288 48 FUNC GLOBAL DEFAULT 11 XDestroyRegion + 206: 0000000000040128 60 FUNC GLOBAL DEFAULT 11 XFreeStringList + 207: 000000000001edc4 172 FUNC GLOBAL DEFAULT 11 XChangeGC + 208: 0000000000085738 520 FUNC GLOBAL DEFAULT 11 _XcmsSetGetColor + 209: 00000000000726e4 24 FUNC GLOBAL DEFAULT 11 _XimFlush + 210: 000000000003d6bc 280 FUNC GLOBAL DEFAULT 11 XSetPointerMapping + 211: 000000000002f82c 88 FUNC GLOBAL DEFAULT 11 _XLookupKeysym + 212: 0000000000085940 468 FUNC GLOBAL DEFAULT 11 _XcmsSetGetColors + 213: 000000000007745c 152 FUNC GLOBAL DEFAULT 11 _XlcUtf8Loader + 214: 0000000000053b04 328 FUNC GLOBAL DEFAULT 11 xlocaledir + 215: 0000000000050f5c 432 FUNC GLOBAL DEFAULT 11 _XlcParseCharSet + 216: 000000000003626c 12 FUNC GLOBAL DEFAULT 11 XAllocSizeHints + 217: 000000000004d714 16 FUNC GLOBAL DEFAULT 11 _XimXTransIsLocal + 218: 0000000000051f68 28 FUNC GLOBAL DEFAULT 11 _XlcCloseConverter + 219: 000000000008d6c8 68 FUNC GLOBAL DEFAULT 11 _XkbGetCharset + 220: 000000000002cde4 500 FUNC GLOBAL DEFAULT 11 XCreateImage + 221: 0000000000091248 88 FUNC GLOBAL DEFAULT 11 _XkbGetReadBufferPtr + 222: 00000000000446c4 108 FUNC GLOBAL DEFAULT 11 _XDeq + 223: 0000000000022898 300 FUNC GLOBAL DEFAULT 11 XDrawPoint + 224: 0000000000083720 484 FUNC GLOBAL DEFAULT 11 XcmsCIELuvToCIEuvY + 225: 000000000008b3f8 448 FUNC GLOBAL DEFAULT 11 XkbKeysymToModifiers + 226: 0000000000094bc8 112 FUNC GLOBAL DEFAULT 11 XkbForceBell + 227: 000000000006daf0 112 FUNC GLOBAL DEFAULT 11 _XimEncodeLocalICAttr + 228: 0000000000065600 120 FUNC GLOBAL DEFAULT 11 _XimErrorCallback + 229: 0000000000043dd0 92 FUNC GLOBAL DEFAULT 11 _XRead32 + 230: 0000000000064da4 168 FUNC GLOBAL DEFAULT 11 _XimProcSyncReply + 231: 00000000000223cc 460 FUNC GLOBAL DEFAULT 11 XDrawArcs + 232: 0000000000065bfc 464 FUNC GLOBAL DEFAULT 11 _Ximctstowcs + 233: 000000000003ffd8 336 FUNC GLOBAL DEFAULT 11 XTextPropertyToStringList + 234: 000000000001ec50 132 FUNC GLOBAL DEFAULT 11 XChangeActivePointerGrab + 235: 0000000000041150 156 FUNC GLOBAL DEFAULT 11 XWithdrawWindow + 236: 000000000006228c 1188 FUNC GLOBAL DEFAULT 11 _XimProtoCreateIC + 237: 000000000002350c 440 FUNC GLOBAL DEFAULT 11 XGetErrorText + 238: 000000000004568c 228 FUNC GLOBAL DEFAULT 11 _XGetRequest + 239: 0000000000044e58 68 FUNC GLOBAL DEFAULT 11 _XDefaultError + 240: 0000000000031a78 8 FUNC GLOBAL DEFAULT 11 XDefaultGCOfScreen + 241: 000000000008b5b8 244 FUNC GLOBAL DEFAULT 11 XLookupKeysym + 242: 00000000000305cc 368 FUNC GLOBAL DEFAULT 11 XListInstalledColormaps + 243: 000000000004f8bc 48 FUNC GLOBAL DEFAULT 11 XwcLookupString + 244: 0000000000034c5c 2632 FUNC GLOBAL DEFAULT 11 XPolygonRegion + 245: 0000000000085680 52 FUNC GLOBAL DEFAULT 11 XcmsQueryColors + 246: 0000000000031a58 8 FUNC GLOBAL DEFAULT 11 XBlackPixelOfScreen + 247: 00000000000850b8 220 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMaxLC + 248: 0000000000115b18 7 OBJECT GLOBAL DEFAULT 13 _XcmsTekHVC_prefix + 249: 0000000000058528 40 FUNC GLOBAL DEFAULT 11 _XwcTextListToTextProperty + 250: 000000000009b1dc 136 FUNC GLOBAL DEFAULT 11 XkbCopyKeyTypes + 251: 0000000000062a70 24 FUNC GLOBAL DEFAULT 11 _XimCheckDataSize + 252: 000000000009c6f0 284 FUNC GLOBAL DEFAULT 11 XkbFreeClientMap + 253: 0000000000072584 24 FUNC GLOBAL DEFAULT 11 _XimShutdown + 254: 000000000008f5ac 24 FUNC GLOBAL DEFAULT 11 XkbGetKeyboard + 255: 000000000009ce54 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomRows + 256: 00000000000981d8 568 FUNC GLOBAL DEFAULT 11 XkbSetDeviceButtonActions + 257: 0000000000020ca4 332 FUNC GLOBAL DEFAULT 11 XCreateBitmapFromData + 258: 000000000008d160 512 FUNC GLOBAL DEFAULT 11 XkbSetControls + 259: 0000000000095fd0 324 FUNC GLOBAL DEFAULT 11 XkbGetNamedGeometry + 260: 0000000000087b1c 224 FUNC GLOBAL DEFAULT 11 _XcmsInitScrnInfo + 261: 00000000000569a4 48 FUNC GLOBAL DEFAULT 11 _XlcDeInitLoader + 262: 000000000009cd1c 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOutlines + 263: 000000000008affc 676 FUNC GLOBAL DEFAULT 11 XKeycodeToKeysym + 264: 0000000000029ae8 360 FUNC GLOBAL DEFAULT 11 XGetStandardColormap + 265: 0000000000040b3c 416 FUNC GLOBAL DEFAULT 11 XMatchVisualInfo + 266: 0000000000064d08 40 FUNC GLOBAL DEFAULT 11 _XimICOfXICID + 267: 000000000006f16c 528 FUNC GLOBAL DEFAULT 11 _XimDecodeICATTRIBUTE + 268: 0000000000077734 268 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultTextEscapement + 269: 0000000000044730 8 FUNC GLOBAL DEFAULT 11 _XUnknownWireEvent + 270: 0000000000057d1c 248 FUNC GLOBAL DEFAULT 11 _Xlcwcstombs + 271: 000000000008e868 228 FUNC GLOBAL DEFAULT 11 XkbGetKeyBehaviors + 272: 0000000000085ff8 44 FUNC GLOBAL DEFAULT 11 XcmsAllocColor + 273: 000000000006f37c 488 FUNC GLOBAL DEFAULT 11 _XimEncodeIMATTRIBUTE + 274: 0000000000031acc 8 FUNC GLOBAL DEFAULT 11 XDoesSaveUnders + 275: 000000000004a164 212 FUNC GLOBAL DEFAULT 11 XrmCombineFileDatabase + 276: 000000000009e918 320 FUNC GLOBAL DEFAULT 11 XkbFreeKeyboard + 277: 000000000003496c 144 FUNC GLOBAL DEFAULT 11 XListPixmapFormats + 278: 00000000000434f8 268 FUNC GLOBAL DEFAULT 11 _XGetAsyncReply + 279: 0000000000154248 0 NOTYPE GLOBAL DEFAULT 23 _edata + 280: 000000000007f948 444 FUNC GLOBAL DEFAULT 11 _XcmsTekHVCQueryMaxVCRGB + 281: 0000000000087fd8 148 FUNC GLOBAL DEFAULT 11 _XcmsCubeRoot + 282: 00000000000389a0 296 FUNC GLOBAL DEFAULT 11 XQueryBestCursor + 283: 00000000000318b8 20 FUNC GLOBAL DEFAULT 11 XWhitePixel + 284: 00000000000237fc 1500 FUNC GLOBAL DEFAULT 11 _XEventToWire + 285: 0000000000026b34 128 FUNC GLOBAL DEFAULT 11 XSetGraphicsExposures + 286: 0000000000026ab4 128 FUNC GLOBAL DEFAULT 11 XSetFillStyle + 287: 0000000000088078 112 FUNC GLOBAL DEFAULT 11 _XcmsSquareRoot + 288: 000000000005e9a4 92 FUNC GLOBAL DEFAULT 11 _XlcRemoveLoader + 289: 0000000000026390 100 FUNC GLOBAL DEFAULT 11 _XFreeExtData + 290: 00000000000963d4 2148 FUNC GLOBAL DEFAULT 11 XkbSetGeometry + 291: 0000000000056f0c 48 FUNC GLOBAL DEFAULT 11 _XwcFreeStringList + 292: 000000000001b6a0 0 FUNC GLOBAL DEFAULT 9 _init + 293: 0000000000020084 128 FUNC GLOBAL DEFAULT 11 XClearWindow + 294: 0000000000036418 88 FUNC GLOBAL DEFAULT 11 XPutBackEvent + 295: 000000000007e610 672 FUNC GLOBAL DEFAULT 11 XcmsTekHVCToCIEuvY + 296: 0000000000031a98 8 FUNC GLOBAL DEFAULT 11 XWidthMMOfScreen + 297: 000000000007cd58 312 FUNC GLOBAL DEFAULT 11 XcmsAddColorSpace + 298: 0000000000030058 584 FUNC GLOBAL DEFAULT 11 XKeysymToString + 299: 0000000000044294 368 FUNC GLOBAL DEFAULT 11 XAddConnectionWatch + 300: 00000000000222f0 220 FUNC GLOBAL DEFAULT 11 XDrawArc + 301: 000000000001ebd4 108 FUNC GLOBAL DEFAULT 11 XSetAccessControl + 302: 000000000006d25c 24 FUNC GLOBAL DEFAULT 11 _XimSetICResourceList + 303: 0000000000090d54 476 FUNC GLOBAL DEFAULT 11 XkbNoteNameChanges + 304: 000000000009cd5c 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomShapes + 305: 00000000000220d4 124 FUNC GLOBAL DEFAULT 11 XDeleteProperty + 306: 000000000002f634 224 FUNC GLOBAL DEFAULT 11 _XKeyInitialize + 307: 0000000000053274 28 FUNC GLOBAL DEFAULT 11 _XlcGetResource + 308: 0000000000154068 8 OBJECT GLOBAL DEFAULT 23 _XcmsDIColorSpaces + 309: 00000000000229c4 828 FUNC GLOBAL DEFAULT 11 XDrawPoints + 310: 00000000000292d4 340 FUNC GLOBAL DEFAULT 11 XGetKeyboardMapping + 311: 000000000007859c 288 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultDrawImageString + 312: 0000000000054f28 4 FUNC GLOBAL DEFAULT 11 _XlcDbg_printValue + 313: 0000000000031a50 8 FUNC GLOBAL DEFAULT 11 XRootWindowOfScreen + 314: 0000000000089b6c 64 FUNC GLOBAL DEFAULT 11 XkbGetXlibControls + 315: 0000000000032440 156 FUNC GLOBAL DEFAULT 11 XNextEvent + 316: 0000000000085268 8 FUNC GLOBAL DEFAULT 11 XcmsScreenWhitePointOfCCC + 317: 000000000009e830 52 FUNC GLOBAL DEFAULT 11 XkbFreeControls + 318: 000000000002a55c 276 FUNC GLOBAL DEFAULT 11 XGrabPointer + 319: 000000000007256c 24 FUNC GLOBAL DEFAULT 11 _XimConnect + 320: 0000000000057ff4 28 FUNC GLOBAL DEFAULT 11 _Xmbstoutf8 + 321: 0000000000085724 20 FUNC GLOBAL DEFAULT 11 XcmsSetWhiteAdjustProc + 322: 0000000000044738 8 FUNC GLOBAL DEFAULT 11 _XUnknownWireEventCookie + 323: 000000000009bed0 1432 FUNC GLOBAL DEFAULT 11 XkbChangeKeycodeRange + 324: 0000000000045084 188 FUNC GLOBAL DEFAULT 11 _XStoreEventCookie + 325: 000000000003c09c 228 FUNC GLOBAL DEFAULT 11 XScreenResourceString + 326: 0000000000153610 64 OBJECT GLOBAL DEFAULT 23 _XimTransportRec + 327: 000000000004069c 108 FUNC GLOBAL DEFAULT 11 XUnmapWindow + 328: 0000000000095e8c 324 FUNC GLOBAL DEFAULT 11 XkbGetGeometry + 329: 0000000000115b30 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIExyY_prefix + 330: 0000000000081870 516 FUNC GLOBAL DEFAULT 11 XcmsCIELabToCIEXYZ + 331: 00000000000899f0 256 FUNC GLOBAL DEFAULT 11 XkbLatchGroup + 332: 000000000003b8f4 156 FUNC GLOBAL DEFAULT 11 XXorRegion + 333: 000000000004f7e8 8 FUNC GLOBAL DEFAULT 11 XIMOfIC + 334: 000000000003c428 168 FUNC GLOBAL DEFAULT 11 XSetClipOrigin + 335: 00000000000385e0 252 FUNC GLOBAL DEFAULT 11 XQueryColor + 336: 000000000002d398 36 FUNC GLOBAL DEFAULT 11 XFindOnExtensionList + 337: 0000000000089f68 432 FUNC GLOBAL DEFAULT 11 XkbGetState + 338: 0000000000065f80 428 FUNC GLOBAL DEFAULT 11 _XimProtoWcLookupString + 339: 000000000002b31c 636 FUNC GLOBAL DEFAULT 11 XDrawImageString16 + 340: 000000000009f180 288 OBJECT GLOBAL DEFAULT 13 _Xevent_to_mask + 341: 00000000000282f4 8 FUNC GLOBAL DEFAULT 11 XGetNormalHints + 342: 0000000000081c40 668 FUNC GLOBAL DEFAULT 11 XcmsCIELabClipL + 343: 000000000002d470 180 FUNC GLOBAL DEFAULT 11 XESetCopyGC + 344: 000000000002dc7c 180 FUNC GLOBAL DEFAULT 11 XESetErrorString + 345: 00000000000845b0 1004 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMaxC + 346: 0000000000049fe0 136 FUNC GLOBAL DEFAULT 11 XrmPutLineResource + 347: 000000000002a0c8 280 FUNC GLOBAL DEFAULT 11 XGetWMColormapWindows + 348: 0000000000039390 300 FUNC GLOBAL DEFAULT 11 XQueryBestTile + 349: 0000000000077e64 336 FUNC GLOBAL DEFAULT 11 _XwcDefaultTextPerCharExtents + 350: 000000000008794c 128 FUNC GLOBAL DEFAULT 11 _XcmsCopyPointerArray + 351: 000000000003073c 336 FUNC GLOBAL DEFAULT 11 XListProperties + 352: 000000000009cce4 28 FUNC GLOBAL DEFAULT 11 XkbFreeGeomPoints + 353: 000000000004f96c 308 FUNC GLOBAL DEFAULT 11 _XCopyToArg + 354: 00000000000427c4 448 FUNC GLOBAL DEFAULT 11 _XSend + 355: 00000000000849d0 1068 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMaxL + 356: 000000000005e2f4 540 FUNC GLOBAL DEFAULT 11 _XlcAddUtf8LocaleConverters + 357: 00000000000324dc 368 FUNC GLOBAL DEFAULT 11 XCreateOC + 358: 000000000003fbf8 512 FUNC GLOBAL DEFAULT 11 XTextWidth + 359: 0000000000031d78 308 FUNC GLOBAL DEFAULT 11 XMaskEvent + 360: 000000000007cfc4 148 FUNC GLOBAL DEFAULT 11 XcmsDefaultCCC + 361: 0000000000071c00 232 FUNC GLOBAL DEFAULT 11 _XimXConf + 362: 00000000000852ec 172 FUNC GLOBAL DEFAULT 11 XcmsQueryBlack + 363: 000000000002462c 548 FUNC GLOBAL DEFAULT 11 XFillRectangles + 364: 000000000002699c 16 FUNC GLOBAL DEFAULT 11 XExtentsOfFontSet + 365: 00000000000578e8 304 FUNC GLOBAL DEFAULT 11 _Xlcmbtowc + 366: 0000000000031980 8 FUNC GLOBAL DEFAULT 11 XDisplayString + 367: 0000000000043e2c 128 FUNC GLOBAL DEFAULT 11 _XSetLastRequestRead + 368: 00000000000356a4 1468 FUNC GLOBAL DEFAULT 11 XDrawText16 + 369: 0000000000095290 716 FUNC GLOBAL DEFAULT 11 XkbComputeSectionBounds + 370: 0000000000056edc 24 FUNC GLOBAL DEFAULT 11 _XwcTextPropertyToTextList + 371: 0000000000072094 56 FUNC GLOBAL DEFAULT 11 _XimFreeTransIntrCallback + 372: 0000000000072148 200 FUNC GLOBAL DEFAULT 11 _XimTransConf + 373: 0000000000031970 8 FUNC GLOBAL DEFAULT 11 XProtocolRevision + 374: 0000000000071ce8 120 FUNC GLOBAL DEFAULT 11 _XimTransCallDispatcher + 375: 0000000000040d98 352 FUNC GLOBAL DEFAULT 11 _XProcessWindowAttributes + 376: 000000000003b0a0 108 FUNC GLOBAL DEFAULT 11 XCreateRegion + 377: 000000000007becc 36 FUNC GLOBAL DEFAULT 11 _XwcGenericTextExtents + 378: 000000000003da04 132 FUNC GLOBAL DEFAULT 11 XSetSelectionOwner + 379: 0000000000021714 16 FUNC GLOBAL DEFAULT 11 XFlushGC + 380: 0000000000077fb4 336 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultTextPerCharExtents + 381: 000000000008edb4 364 FUNC GLOBAL DEFAULT 11 XkbGetMapChanges + 382: 0000000000115b10 5 OBJECT GLOBAL DEFAULT 13 _XcmsRGBi_prefix + 383: 00000000000319c8 8 FUNC GLOBAL DEFAULT 11 XImageByteOrder + 384: 000000000007fc08 424 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxVSamples + 385: 000000000002495c 76 FUNC GLOBAL DEFAULT 11 XFlush + 386: 0000000000029e9c 444 FUNC GLOBAL DEFAULT 11 _XGetWindowAttributes + 387: 000000000003d370 144 FUNC GLOBAL DEFAULT 11 _XlcMapOSLocaleName + 388: 000000000007d67c 648 FUNC GLOBAL DEFAULT 11 _XcmsDDConvertColors + 389: 000000000003976c 972 FUNC GLOBAL DEFAULT 11 XReadBitmapFileData + 390: 000000000002f884 692 FUNC GLOBAL DEFAULT 11 _XTranslateKey + 391: 000000000009050c 2120 FUNC GLOBAL DEFAULT 11 XkbChangeNames + 392: 000000000005e8d0 212 FUNC GLOBAL DEFAULT 11 _XlcDefaultMapModifiers + 393: 000000000003bd64 176 FUNC GLOBAL DEFAULT 11 _XRegisterFilterByType + 394: 000000000002224c 108 FUNC GLOBAL DEFAULT 11 XDestroyWindow + 395: 0000000000064d30 116 FUNC GLOBAL DEFAULT 11 _XimSetEventMaskCallback + 396: 000000000003eaf4 212 FUNC GLOBAL DEFAULT 11 XSync + 397: 000000000003d0a4 284 FUNC GLOBAL DEFAULT 11 XSetStandardProperties + 398: 00000000000282ec 8 FUNC GLOBAL DEFAULT 11 XGetZoomHints + 399: 00000000000282fc 392 FUNC GLOBAL DEFAULT 11 XGetIconSizes + 400: 000000000006d28c 24 FUNC GLOBAL DEFAULT 11 _XimSetInnerICResourceList + 401: 0000000000091150 40 FUNC GLOBAL DEFAULT 11 _XkbReadCopyData32 + 402: 000000000007cc70 232 FUNC GLOBAL DEFAULT 11 _XomInitConverter + 403: 0000000000051570 108 FUNC GLOBAL DEFAULT 11 _XlcGetCharSetWithSide + 404: 000000000004fbf4 140 FUNC GLOBAL DEFAULT 11 XUnregisterIMInstantiateCallback + 405: 0000000000020648 324 FUNC GLOBAL DEFAULT 11 XDeleteContext + 406: 0000000000064ebc 236 FUNC GLOBAL DEFAULT 11 _XimForwardEventCallback + 407: 0000000000031d0c 108 FUNC GLOBAL DEFAULT 11 XMapWindow + 408: 0000000000031b68 24 FUNC GLOBAL DEFAULT 11 XPutPixel + 409: 000000000003f1ac 736 FUNC GLOBAL DEFAULT 11 XTextExtents16 + 410: 0000000000031a80 8 FUNC GLOBAL DEFAULT 11 XDefaultVisualOfScreen + 411: 00000000001524d0 96 OBJECT GLOBAL DEFAULT 23 _XimImSportRec + 412: 000000000004f81c 44 FUNC GLOBAL DEFAULT 11 XwcResetIC + 413: 000000000002d1dc 268 FUNC GLOBAL DEFAULT 11 XInitExtension + 414: 0000000000031aa0 8 FUNC GLOBAL DEFAULT 11 XHeightMMOfScreen + 415: 0000000000031a60 8 FUNC GLOBAL DEFAULT 11 XWhitePixelOfScreen + 416: 000000000005f204 144 FUNC GLOBAL DEFAULT 11 _XlcCountVaList + 417: 000000000004029c 120 FUNC GLOBAL DEFAULT 11 XUndefineCursor + 418: 000000000003e5e8 964 FUNC GLOBAL DEFAULT 11 XStringToKeysym + 419: 00000000000269ac 8 FUNC GLOBAL DEFAULT 11 XFreeFontSet + 420: 0000000000083230 220 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMaxLC + 421: 0000000000097758 564 FUNC GLOBAL DEFAULT 11 XkbGetDeviceInfoChanges + 422: 000000000001fbd8 124 FUNC GLOBAL DEFAULT 11 XChangeSaveSet + 423: 000000000006d88c 408 FUNC GLOBAL DEFAULT 11 _XimSetICDefaults + 424: 000000000006a1f0 2004 FUNC GLOBAL DEFAULT 11 _XimLocalOpenIM + 425: 000000000006fbe0 772 FUNC GLOBAL DEFAULT 11 _XimGetAttributeID + 426: 000000000002695c 8 FUNC GLOBAL DEFAULT 11 XBaseFontNameListOfFontSet + 427: 000000000008ef20 1676 FUNC GLOBAL DEFAULT 11 XkbGetKeyboardByName + 428: 000000000009cdb8 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOverlayRows + 429: 0000000000057820 200 FUNC GLOBAL DEFAULT 11 _XrmDefaultInitParseInfo + 430: 000000000001f4a8 412 FUNC GLOBAL DEFAULT 11 XCheckTypedWindowEvent + 431: 0000000000029c50 228 FUNC GLOBAL DEFAULT 11 XGetTextProperty + 432: 0000000000021e14 224 FUNC GLOBAL DEFAULT 11 XCreatePixmap + 433: 0000000000049cc0 276 FUNC GLOBAL DEFAULT 11 XrmPutResource + 434: 000000000003d884 384 FUNC GLOBAL DEFAULT 11 XSetRGBColormaps + 435: 0000000000027f34 248 FUNC GLOBAL DEFAULT 11 XAllocColor + 436: 0000000000032d08 16 FUNC GLOBAL DEFAULT 11 XLocaleOfOM + 437: 000000000009d248 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomRows + 438: 000000000009b0c4 280 FUNC GLOBAL DEFAULT 11 XkbCopyKeyType + 439: 000000000005fb38 252 FUNC GLOBAL DEFAULT 11 XwcDrawText + 440: 0000000000051f84 28 FUNC GLOBAL DEFAULT 11 _XlcConvert + 441: 000000000003db1c 240 FUNC GLOBAL DEFAULT 11 XSetState + 442: 0000000000051d5c 524 FUNC GLOBAL DEFAULT 11 _XlcOpenConverter + 443: 00000000000257c8 484 FUNC GLOBAL DEFAULT 11 XLoadQueryFont + 444: 0000000000151678 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketUNIXFuncs + 445: 000000000008ec78 316 FUNC GLOBAL DEFAULT 11 XkbGetKeyVirtualModMap + 446: 000000000003dfac 228 FUNC GLOBAL DEFAULT 11 XFetchBuffer + 447: 00000000000318d4 8 FUNC GLOBAL DEFAULT 11 XQLength + 448: 000000000005ea00 132 FUNC GLOBAL DEFAULT 11 _XlcAddLoader + 449: 000000000008abe4 412 FUNC GLOBAL DEFAULT 11 XkbTranslateKeyCode + 450: 000000000007f2a8 828 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxC + 451: 00000000000726fc 372 FUNC GLOBAL DEFAULT 11 _XimFilterWaitEvent + 452: 0000000000031958 8 FUNC GLOBAL DEFAULT 11 XScreenCount + 453: 00000000000269b4 128 FUNC GLOBAL DEFAULT 11 XSetArcMode + 454: 000000000009948c 1512 FUNC GLOBAL DEFAULT 11 XkbChangeTypesOfKey + 455: 000000000003d4f0 324 FUNC GLOBAL DEFAULT 11 XSetWMSizeHints + 456: 0000000000028190 348 FUNC GLOBAL DEFAULT 11 XGetWMHints + 457: 0000000000025e44 204 FUNC GLOBAL DEFAULT 11 XFreeFontInfo + 458: 000000000001eb50 132 FUNC GLOBAL DEFAULT 11 XSetWindowBorder + 459: 00000000000855a8 172 FUNC GLOBAL DEFAULT 11 XcmsQueryWhite + 460: 00000000000663e4 60 FUNC GLOBAL DEFAULT 11 _XimFreeProtoIntrCallback + 461: 000000000007f5f8 840 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxV + 462: 000000000002a670 100 FUNC GLOBAL DEFAULT 11 XGrabServer + 463: 000000000007aed4 48 FUNC GLOBAL DEFAULT 11 _XwcGenericDrawImageString + 464: 0000000000065428 472 FUNC GLOBAL DEFAULT 11 _XimTriggerNotify + 465: 000000000008c628 716 FUNC GLOBAL DEFAULT 11 XkbSetCompatMap + 466: 000000000001fc64 156 FUNC GLOBAL DEFAULT 11 XChangeWindowAttributes + 467: 00000000000880f0 120 FUNC GLOBAL DEFAULT 11 _XcmsGetElement + 468: 000000000006c4b0 152 FUNC GLOBAL DEFAULT 11 _XimLocalSetICValues + 469: 0000000000090fac 96 FUNC GLOBAL DEFAULT 11 _XkbSkipReadBufferData + 470: 0000000000021fe4 108 FUNC GLOBAL DEFAULT 11 XCreateFontCursor + 471: 0000000000044210 132 FUNC GLOBAL DEFAULT 11 XProcessInternalConnection + 472: 00000000000875a8 780 FUNC GLOBAL DEFAULT 11 _XcmsResolveColorString + 473: 0000000000026984 12 FUNC GLOBAL DEFAULT 11 XDirectionalDependentDrawing + 474: 00000000000948e4 292 FUNC GLOBAL DEFAULT 11 XkbForceDeviceBell + 475: 0000000000031a20 8 FUNC GLOBAL DEFAULT 11 XLastKnownRequestProcessed + 476: 000000000002903c 8 FUNC GLOBAL DEFAULT 11 XGetWMNormalHints + 477: 000000000002090c 160 FUNC GLOBAL DEFAULT 11 XCopyColormapAndFree + 478: 000000000005efc8 108 FUNC GLOBAL DEFAULT 11 XwcTextListToTextProperty + 479: 000000000002fd74 376 FUNC GLOBAL DEFAULT 11 XRebindKeysym + 480: 0000000000026204 120 FUNC GLOBAL DEFAULT 11 XFreeColormap + 481: 0000000000084e28 636 FUNC GLOBAL DEFAULT 11 _XcmsCIELuvQueryMaxLCRGB + 482: 000000000003d634 8 FUNC GLOBAL DEFAULT 11 XSetWMNormalHints + 483: 000000000009e8c0 48 FUNC GLOBAL DEFAULT 11 XkbFreeIndicatorMaps + 484: 00000000000927c4 736 FUNC GLOBAL DEFAULT 11 XkbNoteMapChanges + 485: 0000000000057c64 20 FUNC GLOBAL DEFAULT 11 _Xwctomb + 486: 000000000009e7d4 92 FUNC GLOBAL DEFAULT 11 XkbAllocControls + 487: 000000000007ac40 248 FUNC GLOBAL DEFAULT 11 _XomGenericOpenOM + 488: 000000000005f4a8 224 FUNC GLOBAL DEFAULT 11 _XlcSetValues + 489: 0000000000077628 268 FUNC GLOBAL DEFAULT 11 _XwcDefaultTextEscapement + 490: 000000000008b804 4 FUNC GLOBAL DEFAULT 11 XkbTranslateKey + 491: 0000000000154920 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 492: 000000000008a7fc 332 FUNC GLOBAL DEFAULT 11 XkbGetPerClientControls + 493: 00000000000856b4 92 FUNC GLOBAL DEFAULT 11 XcmsSetWhitePoint + 494: 0000000000035c60 1548 FUNC GLOBAL DEFAULT 11 XDrawText + 495: 000000000009cdf8 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOverlays + 496: 0000000000051634 392 FUNC GLOBAL DEFAULT 11 _XlcGetCSValues + 497: 0000000000043374 68 FUNC GLOBAL DEFAULT 11 _XReadPad + 498: 0000000000027870 272 FUNC GLOBAL DEFAULT 11 XGetDefault + 499: 000000000008a27c 332 FUNC GLOBAL DEFAULT 11 XkbGetDetectableAutoRepeat + 500: 000000000004f88c 48 FUNC GLOBAL DEFAULT 11 XmbLookupString + 501: 000000000008bd6c 572 FUNC GLOBAL DEFAULT 11 XkbTranslateKeySym + 502: 0000000000069440 128 FUNC GLOBAL DEFAULT 11 _XimLocalGetICValues + 503: 000000000002ab14 288 FUNC GLOBAL DEFAULT 11 XIfEvent + 504: 0000000000044740 8 FUNC GLOBAL DEFAULT 11 _XUnknownCopyEventCookie + 505: 0000000000066448 3556 FUNC GLOBAL DEFAULT 11 _XimProtoEventToWire + 506: 0000000000070fc0 100 FUNC GLOBAL DEFAULT 11 _XimThaiCloseIM + 507: 0000000000091178 92 FUNC GLOBAL DEFAULT 11 _XkbReadBufferCopy32 + 508: 000000000006db60 692 FUNC GLOBAL DEFAULT 11 _XimSetICValueData + 509: 0000000000154360 8 OBJECT GLOBAL DEFAULT 24 _XCreateMutex_fn + 510: 0000000000084170 1048 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMinL + 511: 000000000009da60 184 FUNC GLOBAL DEFAULT 11 XkbAddGeomRow + 512: 000000000006b09c 584 FUNC GLOBAL DEFAULT 11 _XimLocalUtf8LookupString + 513: 0000000000031904 20 FUNC GLOBAL DEFAULT 11 XDisplayWidthMM + 514: 0000000000085260 8 FUNC GLOBAL DEFAULT 11 XcmsScreenNumberOfCCC + 515: 000000000008cd5c 216 FUNC GLOBAL DEFAULT 11 XkbChangeEnabledControls + 516: 000000000004d6c4 80 FUNC GLOBAL DEFAULT 11 _XimXTransCloseForCloning + 517: 00000000000209ac 524 FUNC GLOBAL DEFAULT 11 XCopyGC + 518: 000000000008fdd8 1844 FUNC GLOBAL DEFAULT 11 XkbSetNames + 519: 0000000000088168 344 FUNC GLOBAL DEFAULT 11 _XcmsGetProperty + 520: 000000000009d6e8 284 FUNC GLOBAL DEFAULT 11 XkbAddGeomColor + 521: 0000000000025500 200 FUNC GLOBAL DEFAULT 11 XFreeFont + 522: 000000000009e418 684 FUNC GLOBAL DEFAULT 11 XkbAllocNames + 523: 0000000000031b80 24 FUNC GLOBAL DEFAULT 11 XSubImage + 524: 000000000009ed5c 196 FUNC GLOBAL DEFAULT 11 XkbAllocDeviceInfo + 525: 0000000000115b28 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIELab_prefix + 526: 000000000008e94c 196 FUNC GLOBAL DEFAULT 11 XkbGetVirtualMods + 527: 000000000003b148 320 FUNC GLOBAL DEFAULT 11 XSetRegion + 528: 0000000000022150 144 FUNC GLOBAL DEFAULT 11 XListDepths + 529: 000000000005e174 120 FUNC GLOBAL DEFAULT 11 _Utf8GetConvByName + 530: 000000000003fdf8 480 FUNC GLOBAL DEFAULT 11 _XTextHeight + 531: 00000000000a3a00 43716 OBJECT GLOBAL DEFAULT 13 _XkeyTable + 532: 000000000002d740 180 FUNC GLOBAL DEFAULT 11 XESetFreeFont + 533: 0000000000044504 52 FUNC GLOBAL DEFAULT 11 _XIsEventCookie + 534: 0000000000154048 8 OBJECT GLOBAL DEFAULT 23 _XcmsDDColorSpaces + 535: 000000000005fc50 28 FUNC GLOBAL DEFAULT 11 XwcDrawImageString + 536: 000000000004f64c 336 FUNC GLOBAL DEFAULT 11 XSetICValues + 537: 0000000000022598 328 FUNC GLOBAL DEFAULT 11 XDrawLine + 538: 0000000000040398 108 FUNC GLOBAL DEFAULT 11 XUngrabKeyboard + 539: 00000000000321d0 392 FUNC GLOBAL DEFAULT 11 XInsertModifiermapEntry + 540: 00000000000863a0 108 FUNC GLOBAL DEFAULT 11 _XcmsAddCmapRec + 541: 000000000005f7c0 28 FUNC GLOBAL DEFAULT 11 XmbDrawString + 542: 000000000009d1d8 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOverlayKeys + 543: 0000000000085cac 84 FUNC GLOBAL DEFAULT 11 _XcmsRGB_to_XColor + 544: 000000000003be14 124 FUNC GLOBAL DEFAULT 11 _XUnregisterFilter + 545: 0000000000154248 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 546: 000000000003b83c 184 FUNC GLOBAL DEFAULT 11 XSubtractRegion + 547: 00000000000879cc 4 FUNC GLOBAL DEFAULT 11 _XcmsFreePointerArray + 548: 000000000004533c 168 FUNC GLOBAL DEFAULT 11 _XVIDtoVisual + 549: 00000000000570b0 144 FUNC GLOBAL DEFAULT 11 _XlcCreateLC + 550: 000000000006ed88 588 FUNC GLOBAL DEFAULT 11 _XimMakeICAttrIDList + 551: 0000000000057c78 28 FUNC GLOBAL DEFAULT 11 _Xmbstowcs + 552: 000000000006b2ec 464 FUNC GLOBAL DEFAULT 11 _XimLcctstowcs + 553: 000000000002678c 440 FUNC GLOBAL DEFAULT 11 XCreateFontSet + 554: 000000000004e99c 56 FUNC GLOBAL DEFAULT 11 _XimXTransOpenCOTSClient + 555: 00000000000288d0 760 FUNC GLOBAL DEFAULT 11 XGetImage + 556: 0000000000031890 20 FUNC GLOBAL DEFAULT 11 XDefaultGC + 557: 000000000003629c 12 FUNC GLOBAL DEFAULT 11 XAllocIconSize + 558: 0000000000089de0 392 FUNC GLOBAL DEFAULT 11 XkbComputeEffectiveMap + 559: 0000000000040ef8 280 FUNC GLOBAL DEFAULT 11 XCreateWindow + 560: 0000000000031940 24 FUNC GLOBAL DEFAULT 11 XDisplayCells + 561: 0000000000085b14 128 FUNC GLOBAL DEFAULT 11 XcmsStoreColor + 562: 0000000000154908 8 OBJECT GLOBAL DEFAULT 24 _XIOErrorFunction + 563: 000000000002f768 196 FUNC GLOBAL DEFAULT 11 _XKeysymToKeycode + 564: 0000000000071d64 104 FUNC GLOBAL DEFAULT 11 _XimTransRegisterDispatcher + 565: 00000000000236c4 156 FUNC GLOBAL DEFAULT 11 XSetErrorHandler + 566: 0000000000040314 132 FUNC GLOBAL DEFAULT 11 XUngrabButton + 567: 000000000009c468 648 FUNC GLOBAL DEFAULT 11 XkbResizeKeyActions + 568: 000000000008b6ac 344 FUNC GLOBAL DEFAULT 11 XkbLookupKeySym + 569: 0000000000020104 168 FUNC GLOBAL DEFAULT 11 XMoveResizeWindow + 570: 0000000000085710 20 FUNC GLOBAL DEFAULT 11 XcmsSetCompressionProc + 571: 000000000005e510 484 FUNC GLOBAL DEFAULT 11 _XlcAddGB18030LocaleConverters + 572: 0000000000031ab0 12 FUNC GLOBAL DEFAULT 11 XCellsOfScreen + 573: 000000000009c80c 244 FUNC GLOBAL DEFAULT 11 XkbFreeServerMap + 574: 0000000000037920 40 FUNC GLOBAL DEFAULT 11 _XReverse_Bytes + 575: 000000000007847c 288 FUNC GLOBAL DEFAULT 11 _XwcDefaultDrawImageString + 576: 000000000001f31c 396 FUNC GLOBAL DEFAULT 11 XCheckTypedEvent + 577: 0000000000153dc8 48 OBJECT GLOBAL DEFAULT 23 XcmsRGBColorSpace + 578: 000000000003ce2c 236 FUNC GLOBAL DEFAULT 11 XSetIconSizes + 579: 0000000000040630 108 FUNC GLOBAL DEFAULT 11 XUnmapSubwindows + 580: 000000000007d36c 496 FUNC GLOBAL DEFAULT 11 _XcmsDIConvertColors + 581: 0000000000031a48 8 FUNC GLOBAL DEFAULT 11 XDisplayOfScreen + 582: 000000000005f0f8 152 FUNC GLOBAL DEFAULT 11 _XlcCopyFromArg + 583: 000000000001e774 124 FUNC GLOBAL DEFAULT 11 XAllowEvents + 584: 000000000004d5cc 28 FUNC GLOBAL DEFAULT 11 _XimXTransBytesReadable + 585: 0000000000021aa8 468 FUNC GLOBAL DEFAULT 11 XCreateGlyphCursor + 586: 0000000000065dd4 428 FUNC GLOBAL DEFAULT 11 _XimProtoMbLookupString + 587: 000000000008a534 352 FUNC GLOBAL DEFAULT 11 XkbGetAutoResetControls + 588: 000000000002a834 356 FUNC GLOBAL DEFAULT 11 XRemoveHost + 589: 00000000000517bc 384 FUNC GLOBAL DEFAULT 11 _XlcCreateDefaultCharSet + 590: 000000000005e6f4 100 FUNC GLOBAL DEFAULT 11 _XlcCompareISOLatin1 + 591: 000000000009d444 340 FUNC GLOBAL DEFAULT 11 XkbAddGeomProperty + 592: 0000000000060dc0 16 FUNC GLOBAL DEFAULT 11 _XimReregisterFilter + 593: 00000000000317c8 124 FUNC GLOBAL DEFAULT 11 XLowerWindow + 594: 0000000000087c50 40 FUNC GLOBAL DEFAULT 11 _XcmsGetIntensityMap + 595: 0000000000038cd0 336 FUNC GLOBAL DEFAULT 11 XQueryPointer + 596: 000000000009df6c 388 FUNC GLOBAL DEFAULT 11 XkbAddGeomOverlayRow + 597: 00000000000910cc 92 FUNC GLOBAL DEFAULT 11 _XkbReadBufferCopyKeySyms + 598: 0000000000042d00 172 FUNC GLOBAL DEFAULT 11 _XAllocIDs + 599: 000000000005eea4 92 FUNC GLOBAL DEFAULT 11 XwcTextPropertyToTextList + 600: 000000000004a9b0 188 FUNC GLOBAL DEFAULT 11 XrmGetResource + 601: 000000000002740c 524 FUNC GLOBAL DEFAULT 11 XAllocNamedColor + 602: 0000000000094f1c 232 FUNC GLOBAL DEFAULT 11 XkbComputeShapeTop + 603: 0000000000069f48 188 FUNC GLOBAL DEFAULT 11 _XimCheckIfLocalProcessing + 604: 0000000000070ca0 284 FUNC GLOBAL DEFAULT 11 _XimThaiIMFree + 605: 0000000000081090 436 FUNC GLOBAL DEFAULT 11 XcmsRGBToRGBi + 606: 000000000002a4b0 172 FUNC GLOBAL DEFAULT 11 XGrabKey + 607: 0000000000031bb0 100 FUNC GLOBAL DEFAULT 11 XNoOp + 608: 0000000000031960 8 FUNC GLOBAL DEFAULT 11 XServerVendor + 609: 0000000000057efc 248 FUNC GLOBAL DEFAULT 11 _Xlcmbstoutf8 + 610: 00000000001540b0 48 OBJECT GLOBAL DEFAULT 23 XcmsCIEuvYColorSpace + 611: 0000000000070350 1236 FUNC GLOBAL DEFAULT 11 _XimThaiFilter + 612: 000000000008927c 76 FUNC GLOBAL DEFAULT 11 XkbLibraryVersion + 613: 00000000000388c8 216 FUNC GLOBAL DEFAULT 11 XQueryColors + 614: 000000000002dbc8 180 FUNC GLOBAL DEFAULT 11 XESetError + 615: 000000000007d198 96 FUNC GLOBAL DEFAULT 11 XcmsFreeCCC + 616: 00000000000805fc 864 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToRGBi + 617: 0000000000071ddc 124 FUNC GLOBAL DEFAULT 11 _XimTransWrite + 618: 00000000000326c8 8 FUNC GLOBAL DEFAULT 11 XOMOfOC + 619: 0000000000097f98 568 FUNC GLOBAL DEFAULT 11 XkbChangeDeviceInfo + 620: 00000000001542b8 8 OBJECT GLOBAL DEFAULT 24 _XFreeDisplayLock_fn + 621: 0000000000036284 12 FUNC GLOBAL DEFAULT 11 XAllocWMHints + 622: 00000000000453e4 24 FUNC GLOBAL DEFAULT 11 XFree + 623: 0000000000029718 568 FUNC GLOBAL DEFAULT 11 XGetRGBColormaps + 624: 0000000000080970 184 FUNC GLOBAL DEFAULT 11 XcmsRGBiToCIEXYZ + 625: 000000000006dfdc 104 FUNC GLOBAL DEFAULT 11 _XimDecodeLocalICAttr + 626: 000000000005f0d4 36 FUNC GLOBAL DEFAULT 11 XDefaultString + 627: 0000000000077a40 308 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultTextExtents + 628: 00000000001548f8 8 OBJECT GLOBAL DEFAULT 24 _XHeadOfDisplayList + 629: 000000000007f108 400 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMinV + 630: 0000000000022d00 328 FUNC GLOBAL DEFAULT 11 XDrawRectangle + 631: 000000000004d63c 28 FUNC GLOBAL DEFAULT 11 _XimXTransWritev + 632: 000000000003d63c 128 FUNC GLOBAL DEFAULT 11 XSetPlaneMask + 633: 0000000000085398 176 FUNC GLOBAL DEFAULT 11 XcmsQueryBlue + 634: 000000000001fd00 140 FUNC GLOBAL DEFAULT 11 XResizeWindow + 635: 0000000000092b24 84 FUNC GLOBAL DEFAULT 11 XkbIgnoreExtension + 636: 000000000004d7b4 144 FUNC GLOBAL DEFAULT 11 _XimXTransGetPeerAddr + 637: 00000000000887a8 408 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToCIEuvY + 638: 0000000000033fe8 848 FUNC GLOBAL DEFAULT 11 XParseColor + 639: 000000000002cfd8 264 FUNC GLOBAL DEFAULT 11 XInitImage + 640: 00000000000813fc 168 FUNC GLOBAL DEFAULT 11 _XcmsLRGB_InitScrnDefault + 641: 0000000000154920 0 NOTYPE GLOBAL DEFAULT 24 _end + 642: 0000000000031a88 8 FUNC GLOBAL DEFAULT 11 XWidthOfScreen + 643: 000000000009a830 880 FUNC GLOBAL DEFAULT 11 XkbUpdateMapFromCore + 644: 00000000000725b4 280 FUNC GLOBAL DEFAULT 11 _XimRead + 645: 0000000000154070 64 OBJECT GLOBAL DEFAULT 23 _XcmsDIColorSpacesInit + 646: 0000000000031438 328 FUNC GLOBAL DEFAULT 11 XInitThreads + 647: 0000000000092b78 2036 FUNC GLOBAL DEFAULT 11 XkbUseExtension + 648: 0000000000042a90 456 FUNC GLOBAL DEFAULT 11 _XReadEvents + 649: 000000000005f190 116 FUNC GLOBAL DEFAULT 11 _XlcCopyToArg + 650: 000000000001ed40 132 FUNC GLOBAL DEFAULT 11 XSetWindowColormap + 651: 000000000004a390 164 FUNC GLOBAL DEFAULT 11 XrmPutFileDatabase + 652: 000000000002c464 124 FUNC GLOBAL DEFAULT 11 _XGetBitsPerPixel + 653: 000000000008b9a0 648 FUNC GLOBAL DEFAULT 11 XRefreshKeyboardMapping + 654: 0000000000045140 304 FUNC GLOBAL DEFAULT 11 _XEnq + 655: 000000000007761c 12 FUNC GLOBAL DEFAULT 11 _XmbDefaultTextEscapement + 656: 000000000002acb4 132 FUNC GLOBAL DEFAULT 11 _XimGetLocaleCode + 657: 0000000000031860 8 FUNC GLOBAL DEFAULT 11 XDefaultScreen + 658: 000000000003df20 112 FUNC GLOBAL DEFAULT 11 XSetWMProtocols + 659: 0000000000041708 836 FUNC GLOBAL DEFAULT 11 XWriteBitmapFile + 660: 0000000000151838 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketTCPFuncs + 661: 000000000003c6ac 140 FUNC GLOBAL DEFAULT 11 XSetClipRectangles + 662: 000000000003219c 52 FUNC GLOBAL DEFAULT 11 XFreeModifiermap + 663: 0000000000041510 504 FUNC GLOBAL DEFAULT 11 XSetWMProperties + 664: 000000000009d598 336 FUNC GLOBAL DEFAULT 11 XkbAddGeomKeyAlias + 665: 0000000000020eb8 288 FUNC GLOBAL DEFAULT 11 XCreatePixmapCursor + 666: 000000000003199c 20 FUNC GLOBAL DEFAULT 11 XDefaultColormap + 667: 000000000007fe70 292 FUNC GLOBAL DEFAULT 11 XcmsFormatOfPrefix + 668: 00000000000255c8 512 FUNC GLOBAL DEFAULT 11 _XF86LoadQueryLocaleFont + 669: 0000000000078104 140 FUNC GLOBAL DEFAULT 11 _XmbDefaultDrawString + 670: 000000000009ef24 0 FUNC GLOBAL DEFAULT 12 _fini + 671: 000000000008e5bc 228 FUNC GLOBAL DEFAULT 11 XkbGetKeyTypes + 672: 0000000000093ee4 448 FUNC GLOBAL DEFAULT 11 XkbGetIndicatorMap + 673: 000000000002d5d8 180 FUNC GLOBAL DEFAULT 11 XESetFreeGC + 674: 0000000000071d60 4 FUNC GLOBAL DEFAULT 11 _XimTransFlush + 675: 000000000006efd4 408 FUNC GLOBAL DEFAULT 11 _XimDecodeIMATTRIBUTE + 676: 000000000007bc04 20 FUNC GLOBAL DEFAULT 11 _Xutf8GenericTextEscapement + 677: 00000000000326d0 344 FUNC GLOBAL DEFAULT 11 XSetOCValues + 678: 000000000007a300 440 FUNC GLOBAL DEFAULT 11 read_EncodingInfo + 679: 0000000000083d88 976 FUNC GLOBAL DEFAULT 11 XcmsCIELuvClipLuv + 680: 000000000001e938 84 FUNC GLOBAL DEFAULT 11 XAutoRepeatOn + 681: 0000000000081660 496 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToCIELab + 682: 000000000004a238 344 FUNC GLOBAL DEFAULT 11 XrmEnumerateDatabase + 683: 0000000000085d00 112 FUNC GLOBAL DEFAULT 11 _XColor_to_XcmsRGB + 684: 00000000000319b8 8 FUNC GLOBAL DEFAULT 11 XBitmapBitOrder + 685: 0000000000053c4c 508 FUNC GLOBAL DEFAULT 11 _XlcFileName + 686: 000000000009ec64 248 FUNC GLOBAL DEFAULT 11 XkbResizeDeviceButtonActions + 687: 0000000000058500 40 FUNC GLOBAL DEFAULT 11 _XmbTextListToTextProperty + 688: 000000000008a948 316 FUNC GLOBAL DEFAULT 11 XkbOpenDisplay + 689: 0000000000063c30 8 FUNC GLOBAL DEFAULT 11 _XimGetMyEndian + 690: 000000000006d3e0 64 FUNC GLOBAL DEFAULT 11 _XimCheckIMMode + 691: 000000000004f928 68 FUNC GLOBAL DEFAULT 11 _XIMCompileResourceList + 692: 000000000001fe7c 112 FUNC GLOBAL DEFAULT 11 XCirculateSubwindowsUp + 693: 0000000000064e68 84 FUNC GLOBAL DEFAULT 11 _XimSyncCallback + 694: 0000000000060e3c 88 FUNC GLOBAL DEFAULT 11 _XimUnregisterServerFilter + 695: 0000000000023760 156 FUNC GLOBAL DEFAULT 11 XSetIOErrorHandler + 696: 000000000007e900 220 FUNC GLOBAL DEFAULT 11 _XcmsTekHVC_CheckModify + 697: 00000000000726cc 24 FUNC GLOBAL DEFAULT 11 _XimRegisterDispatcher + 698: 000000000003de98 8 FUNC GLOBAL DEFAULT 11 XSetWMName + 699: 000000000005fc34 28 FUNC GLOBAL DEFAULT 11 XwcDrawString + 700: 0000000000068a0c 464 FUNC GLOBAL DEFAULT 11 _XimUnRegisterIMInstantiateCallback + 701: 0000000000045508 184 FUNC GLOBAL DEFAULT 11 _XGetHostname + 702: 000000000003dd54 124 FUNC GLOBAL DEFAULT 11 XSetTile + 703: 000000000006e328 196 FUNC GLOBAL DEFAULT 11 _XimSetCurrentICValues + 704: 000000000003d1f0 252 FUNC GLOBAL DEFAULT 11 XSetClassHint + 705: 000000000004a0d8 140 FUNC GLOBAL DEFAULT 11 XrmGetFileDatabase + 706: 0000000000053e48 600 FUNC GLOBAL DEFAULT 11 _XlcResolveLocaleName + 707: 0000000000044ea4 380 FUNC GLOBAL DEFAULT 11 _XError + 708: 000000000007ed80 896 FUNC GLOBAL DEFAULT 11 XcmsTekHVCClipVC + 709: 0000000000091128 40 FUNC GLOBAL DEFAULT 11 _XkbWriteCopyKeySyms + 710: 0000000000154248 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 711: 000000000005e758 148 FUNC GLOBAL DEFAULT 11 _XlcNCompareISOLatin1 + 712: 000000000009abe8 612 FUNC GLOBAL DEFAULT 11 XkbAllocClientMap + 713: 000000000008c44c 476 FUNC GLOBAL DEFAULT 11 XkbGetCompatMap + 714: 000000000004faf8 96 FUNC GLOBAL DEFAULT 11 XCloseIM + 715: 0000000000032828 344 FUNC GLOBAL DEFAULT 11 XGetOCValues + 716: 0000000000097d38 608 FUNC GLOBAL DEFAULT 11 XkbSetDeviceInfo + 717: 0000000000038e20 300 FUNC GLOBAL DEFAULT 11 XQueryBestStipple + 718: 000000000003e098 60 FUNC GLOBAL DEFAULT 11 XStoreBuffer + 719: 000000000005ee10 56 FUNC GLOBAL DEFAULT 11 _XrmInitParseInfo + 720: 0000000000115b38 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIEuvY_prefix + 721: 00000000001548f0 8 OBJECT GLOBAL DEFAULT 24 _qfree + 722: 000000000002e414 328 FUNC GLOBAL DEFAULT 11 XInternAtom + 723: 0000000000098c18 360 FUNC GLOBAL DEFAULT 11 XkbInitCanonicalKeyTypes + 724: 0000000000154100 48 OBJECT GLOBAL DEFAULT 23 XcmsCIExyYColorSpace + 725: 000000000001eae4 108 FUNC GLOBAL DEFAULT 11 XBell + 726: 0000000000026324 108 FUNC GLOBAL DEFAULT 11 XFreeCursor + 727: 000000000009254c 564 FUNC GLOBAL DEFAULT 11 XkbChangeMap + 728: 00000000000782c8 312 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultDrawString + 729: 0000000000088ae8 464 FUNC GLOBAL DEFAULT 11 XcmsCIEuvYToCIEXYZ + 730: 000000000009d130 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomColors + 731: 000000000004f1b4 344 FUNC GLOBAL DEFAULT 11 XGetIMValues + 732: 000000000001f894 836 FUNC GLOBAL DEFAULT 11 XChangeProperty + 733: 000000000007dab8 1284 FUNC GLOBAL DEFAULT 11 XcmsConvertColors + 734: 000000000003e0dc 168 FUNC GLOBAL DEFAULT 11 XStoreColor + 735: 0000000000040404 132 FUNC GLOBAL DEFAULT 11 XUngrabKey + 736: 0000000000040708 1076 FUNC GLOBAL DEFAULT 11 XGetVisualInfo + 737: 000000000008eb44 308 FUNC GLOBAL DEFAULT 11 XkbGetKeyModifierMap + 738: 0000000000044d74 228 FUNC GLOBAL DEFAULT 11 _XDefaultIOError + 739: 000000000004aa6c 100 FUNC GLOBAL DEFAULT 11 XrmLocaleOfDatabase + 740: 000000000001ffd8 172 FUNC GLOBAL DEFAULT 11 XClearArea + 741: 00000000000973f8 400 FUNC GLOBAL DEFAULT 11 XkbNoteDeviceChanges + 742: 000000000008c95c 212 FUNC GLOBAL DEFAULT 11 XkbSetAutoRepeatRate + 743: 0000000000068ca0 744 FUNC GLOBAL DEFAULT 11 _XimOpenIM + 744: 000000000003bac8 160 FUNC GLOBAL DEFAULT 11 XPointInRegion + 745: 00000000000886c0 220 FUNC GLOBAL DEFAULT 11 _XcmsArcTangent + 746: 0000000000153ec8 48 OBJECT GLOBAL DEFAULT 23 XcmsCIELuvColorSpace + 747: 000000000009a1ec 192 FUNC GLOBAL DEFAULT 11 XkbUpdateActionVirtualMods + 748: 000000000009d114 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomProps + 749: 0000000000065bf4 8 FUNC GLOBAL DEFAULT 11 _Ximctstombs + 750: 000000000002fcd8 156 FUNC GLOBAL DEFAULT 11 _XLookupString + 751: 000000000001ec40 8 FUNC GLOBAL DEFAULT 11 XEnableAccessControl + 752: 000000000007afb4 1644 FUNC GLOBAL DEFAULT 11 _XomGenericDrawString + 753: 0000000000115b20 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIELuv_prefix + 754: 000000000006417c 2136 FUNC GLOBAL DEFAULT 11 _XimProtoOpenIM + 755: 000000000001efc0 432 FUNC GLOBAL DEFAULT 11 XCheckIfEvent + 756: 00000000000897e0 272 FUNC GLOBAL DEFAULT 11 XkbLatchModifiers + 757: 000000000006b4bc 8 FUNC GLOBAL DEFAULT 11 _XimLcctstoutf8 + 758: 000000000008b2a0 344 FUNC GLOBAL DEFAULT 11 XKeysymToKeycode + 759: 0000000000041010 320 FUNC GLOBAL DEFAULT 11 XWindowEvent + 760: 000000000009e864 92 FUNC GLOBAL DEFAULT 11 XkbAllocIndicatorMaps + 761: 00000000000452d8 40 FUNC GLOBAL DEFAULT 11 _XAllocTemp + 762: 000000000009cca4 28 FUNC GLOBAL DEFAULT 11 XkbFreeGeomKeyAliases + 763: 000000000009ee20 260 FUNC GLOBAL DEFAULT 11 XkbFreeDeviceInfo + 764: 000000000003d1c0 48 FUNC GLOBAL DEFAULT 11 XSetTransientForHint + 765: 000000000002f55c 216 FUNC GLOBAL DEFAULT 11 _XRefreshKeyboardMapping + 766: 000000000006d36c 116 FUNC GLOBAL DEFAULT 11 _XimSetIMMode + 767: 000000000001e98c 80 FUNC GLOBAL DEFAULT 11 XAutoRepeatOff + 768: 000000000009cfb4 352 FUNC GLOBAL DEFAULT 11 XkbFreeGeometry + 769: 0000000000040164 312 FUNC GLOBAL DEFAULT 11 XTranslateCoordinates + 770: 00000000000318f0 20 FUNC GLOBAL DEFAULT 11 XDisplayHeight + 771: 0000000000154158 8 OBJECT GLOBAL DEFAULT 23 _XkbInternAtomFunc + 772: 000000000002a9f0 88 FUNC GLOBAL DEFAULT 11 XRemoveHosts + 773: 000000000001e9dc 132 FUNC GLOBAL DEFAULT 11 XSetWindowBackground + 774: 000000000004ea0c 304 FUNC GLOBAL DEFAULT 11 _XimXTransConnect + 775: 000000000002167c 152 FUNC GLOBAL DEFAULT 11 _XFlushGCCache + 776: 0000000000093d5c 392 FUNC GLOBAL DEFAULT 11 _XkbReadGetIndicatorMapReply + 777: 000000000001fd8c 124 FUNC GLOBAL DEFAULT 11 XCirculateSubwindows + 778: 000000000008bfa8 612 FUNC GLOBAL DEFAULT 11 XLookupString + 779: 000000000006e1c8 80 FUNC GLOBAL DEFAULT 11 _XimGetCurrentIMValues + 780: 000000000002c4e0 268 FUNC GLOBAL DEFAULT 11 _XInitImageFuncPtrs + 781: 000000000003c204 292 FUNC GLOBAL DEFAULT 11 XSendEvent + 782: 000000000009a2ac 400 FUNC GLOBAL DEFAULT 11 XkbUpdateKeyTypeVirtualMods + 783: 000000000003192c 20 FUNC GLOBAL DEFAULT 11 XDisplayPlanes + 784: 0000000000036278 12 FUNC GLOBAL DEFAULT 11 XAllocStandardColormap + 785: 0000000000070bac 244 FUNC GLOBAL DEFAULT 11 _XimCheckIfThaiProcessing + 786: 0000000000021c7c 408 FUNC GLOBAL DEFAULT 11 XCreatePixmapFromBitmapData + 787: 0000000000087bfc 84 FUNC GLOBAL DEFAULT 11 _XcmsFreeIntensityMaps + 788: 000000000009e0f0 332 FUNC GLOBAL DEFAULT 11 XkbAddGeomOverlay + 789: 000000000007b650 48 FUNC GLOBAL DEFAULT 11 _XwcGenericDrawString + 790: 000000000006612c 428 FUNC GLOBAL DEFAULT 11 _XimProtoUtf8LookupString + 791: 0000000000038318 60 FUNC GLOBAL DEFAULT 11 XrmStringToQuark + 792: 0000000000153f28 48 OBJECT GLOBAL DEFAULT 23 XcmsUNDEFINEDColorSpace + 793: 0000000000086924 268 FUNC GLOBAL DEFAULT 11 XcmsCCCOfColormap + 794: 000000000008ea10 308 FUNC GLOBAL DEFAULT 11 XkbGetKeyExplicitComponents + 795: 000000000004f8ec 60 FUNC GLOBAL DEFAULT 11 Xutf8LookupString + 796: 000000000008e6a0 228 FUNC GLOBAL DEFAULT 11 XkbGetKeyActions + 797: 000000000003cc1c 292 FUNC GLOBAL DEFAULT 11 XSetSizeHints + 798: 0000000000031a68 8 FUNC GLOBAL DEFAULT 11 XDefaultColormapOfScreen + 799: 0000000000077840 204 FUNC GLOBAL DEFAULT 11 _XmbDefaultTextExtents + 800: 0000000000098660 1464 FUNC GLOBAL DEFAULT 11 XkbListComponents + 801: 000000000003f6d4 632 FUNC GLOBAL DEFAULT 11 _XTextHeight16 + 802: 0000000000026990 12 FUNC GLOBAL DEFAULT 11 XContextualDrawing + 803: 0000000000054da4 388 FUNC GLOBAL DEFAULT 11 _XlcParse_scopemaps + 804: 00000000000709b8 500 FUNC GLOBAL DEFAULT 11 _XimThaiCreateIC + 805: 0000000000031b98 24 FUNC GLOBAL DEFAULT 11 XAddPixel + 806: 000000000004d510 188 FUNC GLOBAL DEFAULT 11 _XimXTransSetOption + 807: 0000000000094764 72 FUNC GLOBAL DEFAULT 11 XkbSetNamedIndicator + 808: 000000000002707c 380 FUNC GLOBAL DEFAULT 11 XGetAtomName + 809: 000000000002ded0 108 FUNC GLOBAL DEFAULT 11 XInstallColormap + 810: 000000000004d844 8 FUNC GLOBAL DEFAULT 11 _XimXTransGetConnectionNumber + 811: 000000000003ce24 8 FUNC GLOBAL DEFAULT 11 XSetNormalHints + 812: 0000000000051520 80 FUNC GLOBAL DEFAULT 11 _XlcGetCharSet + 813: 0000000000037eb4 1124 FUNC GLOBAL DEFAULT 11 _XrmInternalStringToQuark + 814: 00000000000892c8 380 FUNC GLOBAL DEFAULT 11 XkbSelectEvents + 815: 000000000003466c 216 FUNC GLOBAL DEFAULT 11 XPeekEvent + 816: 000000000005f6c4 252 FUNC GLOBAL DEFAULT 11 XmbDrawText + 817: 0000000000042dcc 1184 FUNC GLOBAL DEFAULT 11 _XReply + 818: 0000000000056ec4 24 FUNC GLOBAL DEFAULT 11 _XmbTextPropertyToTextList + 819: 0000000000083ac8 668 FUNC GLOBAL DEFAULT 11 XcmsCIELuvClipL + 820: 0000000000039650 120 FUNC GLOBAL DEFAULT 11 XRaiseWindow + 821: 0000000000060684 460 FUNC GLOBAL DEFAULT 11 _XimCbDispatch + 822: 0000000000085250 8 FUNC GLOBAL DEFAULT 11 XcmsDisplayOfCCC + 823: 000000000002d8a8 144 FUNC GLOBAL DEFAULT 11 XESetWireToEvent + 824: 000000000003cb9c 128 FUNC GLOBAL DEFAULT 11 XSetFunction + 825: 0000000000051c64 248 FUNC GLOBAL DEFAULT 11 _XlcSetConverter + 826: 00000000000240e4 588 FUNC GLOBAL DEFAULT 11 XFillArcs + 827: 000000000003df90 28 FUNC GLOBAL DEFAULT 11 XRotateBuffers + 828: 0000000000093c34 296 FUNC GLOBAL DEFAULT 11 XkbGetIndicatorState + 829: 000000000003030c 704 FUNC GLOBAL DEFAULT 11 XListHosts + 830: 000000000003b5a0 152 FUNC GLOBAL DEFAULT 11 XUnionRectWithRegion + 831: 0000000000099a74 88 FUNC GLOBAL DEFAULT 11 XkbVirtualModsToReal + 832: 0000000000027c70 364 FUNC GLOBAL DEFAULT 11 XGetGCValues + 833: 000000000003e9ac 328 FUNC GLOBAL DEFAULT 11 XStringListToTextProperty + 834: 000000000004b1c0 520 FUNC GLOBAL DEFAULT 11 _XDefaultOpenIM + 835: 00000000000910a4 40 FUNC GLOBAL DEFAULT 11 _XkbReadCopyKeySyms + 836: 000000000004d84c 148 FUNC GLOBAL DEFAULT 11 _XimXTransGetHostname + 837: 0000000000153df8 48 OBJECT GLOBAL DEFAULT 23 XcmsRGBiColorSpace + 838: 000000000007fb18 228 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxVC + 839: 0000000000094a08 316 FUNC GLOBAL DEFAULT 11 XkbDeviceBellEvent + 840: 000000000002d7f4 180 FUNC GLOBAL DEFAULT 11 XESetCloseDisplay + 841: 0000000000097b60 472 FUNC GLOBAL DEFAULT 11 XkbGetDeviceLedInfo + 842: 000000000009d22c 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOutlines + 843: 0000000000154368 8 OBJECT GLOBAL DEFAULT 24 _Xglobal_lock + 844: 00000000000441a0 112 FUNC GLOBAL DEFAULT 11 _XProcessInternalConnection + 845: 000000000003ddd0 168 FUNC GLOBAL DEFAULT 11 XSetTSOrigin + 846: 0000000000026978 12 FUNC GLOBAL DEFAULT 11 XContextDependentDrawing + 847: 00000000000455c0 204 FUNC GLOBAL DEFAULT 11 _XScreenOfWindow + 848: 000000000003d7d4 176 FUNC GLOBAL DEFAULT 11 XChangeKeyboardMapping + 849: 00000000000234dc 48 FUNC GLOBAL DEFAULT 11 XGetErrorDatabaseText + 850: 0000000000057094 28 FUNC GLOBAL DEFAULT 11 _XlcDestroyLC + 851: 000000000005fb08 48 FUNC GLOBAL DEFAULT 11 Xutf8TextPerCharExtents + 852: 0000000000094b44 132 FUNC GLOBAL DEFAULT 11 XkbBell + 853: 000000000005f99c 252 FUNC GLOBAL DEFAULT 11 Xutf8DrawText + 854: 0000000000028810 192 FUNC GLOBAL DEFAULT 11 XGetInputFocus + 855: 0000000000153d98 24 OBJECT GLOBAL DEFAULT 23 XcmsLinearRGBFunctionSet + 856: 0000000000040cdc 188 FUNC GLOBAL DEFAULT 11 XWarpPointer + 857: 000000000001e080 24 FUNC GLOBAL DEFAULT 11 _XEatData + 858: 0000000000082728 1004 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMaxC + 859: 0000000000031adc 8 FUNC GLOBAL DEFAULT 11 XEventMaskOfScreen + 860: 0000000000037948 1084 FUNC GLOBAL DEFAULT 11 XPutImage + 861: 00000000000851b0 160 FUNC GLOBAL DEFAULT 11 XcmsCIELuvWhiteShiftColors + 862: 000000000007ea08 308 FUNC GLOBAL DEFAULT 11 XcmsTekHVCClipC + 863: 0000000000027ddc 344 FUNC GLOBAL DEFAULT 11 XGetGeometry + 864: 0000000000154150 8 OBJECT GLOBAL DEFAULT 23 _XkbGetAtomNameFunc + 865: 0000000000028c10 244 FUNC GLOBAL DEFAULT 11 XGetKeyboardControl + 866: 0000000000082b48 1068 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMaxL + 867: 0000000000151a00 8 OBJECT GLOBAL DEFAULT 23 _XlcGenericMethods + 868: 000000000004f79c 40 FUNC GLOBAL DEFAULT 11 XSetICFocus + 869: 000000000002d2e8 152 FUNC GLOBAL DEFAULT 11 XAddExtension + 870: 000000000003490c 96 FUNC GLOBAL DEFAULT 11 XPending + 871: 000000000003e560 136 FUNC GLOBAL DEFAULT 11 _XInitKeysymDB + 872: 000000000002642c 176 FUNC GLOBAL DEFAULT 11 XFreeGC + 873: 0000000000038414 160 FUNC GLOBAL DEFAULT 11 XrmQuarkToString + 874: 000000000006a004 384 FUNC GLOBAL DEFAULT 11 _XimLocalIMFree + 875: 0000000000031a90 8 FUNC GLOBAL DEFAULT 11 XHeightOfScreen + 876: 000000000009d184 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomSections + 877: 00000000000265b4 28 FUNC GLOBAL DEFAULT 11 XActivateScreenSaver + 878: 00000000000681d0 820 FUNC GLOBAL DEFAULT 11 _XimExtension + 879: 00000000001542c0 8 OBJECT GLOBAL DEFAULT 24 _XInitDisplayLock_fn + 880: 0000000000029118 444 FUNC GLOBAL DEFAULT 11 XGetPointerMapping + 881: 00000000000690f0 848 FUNC GLOBAL DEFAULT 11 _XimLocalFilter + 882: 0000000000022e48 548 FUNC GLOBAL DEFAULT 11 XDrawRectangles + 883: 000000000009e8f0 40 FUNC GLOBAL DEFAULT 11 XkbAllocKeyboard + 884: 000000000006df30 172 FUNC GLOBAL DEFAULT 11 _XimGetIMValueData + 885: 000000000008e520 156 FUNC GLOBAL DEFAULT 11 XkbGetMap + 886: 0000000000020530 280 FUNC GLOBAL DEFAULT 11 XFindContext + 887: 000000000007eb3c 576 FUNC GLOBAL DEFAULT 11 XcmsTekHVCClipV + 888: 0000000000085270 8 FUNC GLOBAL DEFAULT 11 XcmsClientWhitePointOfCCC + 889: 000000000002fb38 416 FUNC GLOBAL DEFAULT 11 _XTranslateKeySym + 890: 0000000000029d44 8 FUNC GLOBAL DEFAULT 11 XGetWMClientMachine + 891: 00000000000515dc 88 FUNC GLOBAL DEFAULT 11 _XlcAddCharSet + 892: 0000000000031ee0 8 FUNC GLOBAL DEFAULT 11 XVisualIDFromVisual + 893: 000000000009d9f0 112 FUNC GLOBAL DEFAULT 11 XkbAddGeomKey + 894: 0000000000071fd4 192 FUNC GLOBAL DEFAULT 11 _XimTransInternalConnection + 895: 000000000004d620 28 FUNC GLOBAL DEFAULT 11 _XimXTransReadv + 896: 000000000002d3bc 180 FUNC GLOBAL DEFAULT 11 XESetCreateGC + 897: 0000000000045020 100 FUNC GLOBAL DEFAULT 11 _XIOError + 898: 000000000003ecc8 632 FUNC GLOBAL DEFAULT 11 XDrawString16 + 899: 000000000003b10c 60 FUNC GLOBAL DEFAULT 11 XClipBox + 900: 0000000000094c38 120 FUNC GLOBAL DEFAULT 11 XkbBellEvent + 901: 000000000007bc18 656 FUNC GLOBAL DEFAULT 11 _XomGenericTextExtents + 902: 0000000000085258 8 FUNC GLOBAL DEFAULT 11 XcmsVisualOfCCC + 903: 0000000000057c50 20 FUNC GLOBAL DEFAULT 11 _Xmblen + 904: 0000000000056f3c 344 FUNC GLOBAL DEFAULT 11 _XGetLCValues + 905: 0000000000057c34 28 FUNC GLOBAL DEFAULT 11 _Xmbtowc + 906: 000000000002d384 20 FUNC GLOBAL DEFAULT 11 XAddToExtensionList + 907: 000000000009ce1c 28 FUNC GLOBAL DEFAULT 11 XkbFreeGeomKeys + 908: 0000000000068fe4 208 FUNC GLOBAL DEFAULT 11 _XimServerDestroy + 909: 0000000000092aa4 128 FUNC GLOBAL DEFAULT 11 _XkbNoteCoreMapChanges + 910: 0000000000031eb4 8 FUNC GLOBAL DEFAULT 11 XResourceManagerString + 911: 000000000004d724 144 FUNC GLOBAL DEFAULT 11 _XimXTransGetMyAddr + 912: 000000000007bbf0 20 FUNC GLOBAL DEFAULT 11 _XwcGenericTextEscapement + 913: 000000000007ce90 308 FUNC GLOBAL DEFAULT 11 XcmsAddFunctionSet + 914: 0000000000043ca4 64 FUNC GLOBAL DEFAULT 11 _XPollfdCacheInit + 915: 0000000000066420 40 FUNC GLOBAL DEFAULT 11 _XimDispatchInit + 916: 0000000000153e78 48 OBJECT GLOBAL DEFAULT 23 XcmsCIELabColorSpace + 917: 000000000003bfec 176 FUNC GLOBAL DEFAULT 11 XRotateWindowProperties + 918: 0000000000081f00 976 FUNC GLOBAL DEFAULT 11 XcmsCIELabClipLab + 919: 000000000006e3ec 336 FUNC GLOBAL DEFAULT 11 _XimInitialResourceInfo + 920: 0000000000031ac4 8 FUNC GLOBAL DEFAULT 11 XMaxCmapsOfScreen + 921: 000000000002d68c 180 FUNC GLOBAL DEFAULT 11 XESetCreateFont + 922: 0000000000044634 144 FUNC GLOBAL DEFAULT 11 _XCopyEventCookie + 923: 0000000000030d2c 84 FUNC GLOBAL DEFAULT 11 XUnlockDisplay + 924: 000000000007aea4 48 FUNC GLOBAL DEFAULT 11 _XmbGenericDrawImageString + 925: 0000000000153c60 48 OBJECT GLOBAL DEFAULT 23 XcmsTekHVCColorSpace + 926: 000000000001ecd4 108 FUNC GLOBAL DEFAULT 11 XSetCloseDownMode + 927: 000000000003cf18 396 FUNC GLOBAL DEFAULT 11 XSetCommand + 928: 0000000000031580 584 FUNC GLOBAL DEFAULT 11 XLookupColor + 929: 0000000000020828 228 FUNC GLOBAL DEFAULT 11 XCopyArea + 930: 000000000003e184 352 FUNC GLOBAL DEFAULT 11 XStoreColors + 931: 0000000000029a08 224 FUNC GLOBAL DEFAULT 11 XGetScreenSaver + 932: 0000000000023dd8 228 FUNC GLOBAL DEFAULT 11 XFetchName + 933: 000000000003c180 132 FUNC GLOBAL DEFAULT 11 XSelectInput + 934: 000000000004f7f0 44 FUNC GLOBAL DEFAULT 11 XmbResetIC + 935: 000000000008a694 360 FUNC GLOBAL DEFAULT 11 XkbSetPerClientControls + 936: 000000000005ef5c 108 FUNC GLOBAL DEFAULT 11 XmbTextListToTextProperty + 937: 000000000002627c 168 FUNC GLOBAL DEFAULT 11 XFreeColors + 938: 000000000007d55c 288 FUNC GLOBAL DEFAULT 11 _XcmsEqualWhitePts + 939: 0000000000033a44 1444 FUNC GLOBAL DEFAULT 11 XrmParseCommand + 940: 000000000006883c 464 FUNC GLOBAL DEFAULT 11 _XimRegisterIMInstantiateCallback + 941: 000000000005f034 108 FUNC GLOBAL DEFAULT 11 Xutf8TextListToTextProperty + 942: 000000000009e38c 140 FUNC GLOBAL DEFAULT 11 XkbFreeCompatMap + 943: 0000000000039bf0 176 FUNC GLOBAL DEFAULT 11 XRecolorCursor + 944: 0000000000097588 464 FUNC GLOBAL DEFAULT 11 XkbGetDeviceInfo + 945: 000000000006da44 172 FUNC GLOBAL DEFAULT 11 _XimSetIMValueData + 946: 0000000000038c10 192 FUNC GLOBAL DEFAULT 11 XQueryKeymap + 947: 0000000000089444 652 FUNC GLOBAL DEFAULT 11 XkbSelectEventDetails + 948: 0000000000043eac 280 FUNC GLOBAL DEFAULT 11 _XRegisterInternalConnection + 949: 000000000006d338 52 FUNC GLOBAL DEFAULT 11 _XimGetResourceListRec + 950: 0000000000031eac 8 FUNC GLOBAL DEFAULT 11 XMaxRequestSize + 951: 000000000005edf4 28 FUNC GLOBAL DEFAULT 11 XSupportsLocale + 952: 000000000007bef0 36 FUNC GLOBAL DEFAULT 11 _Xutf8GenericTextExtents + 953: 000000000009cc80 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomProperties + 954: 0000000000031a28 16 FUNC GLOBAL DEFAULT 11 XScreenOfDisplay + 955: 000000000005fab4 28 FUNC GLOBAL DEFAULT 11 Xutf8DrawImageString + 956: 0000000000028670 416 FUNC GLOBAL DEFAULT 11 XGetClassHint + 957: 000000000009ccc0 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomColors + 958: 000000000009d298 428 FUNC GLOBAL DEFAULT 11 XkbAllocGeometry + 959: 000000000005f0a0 52 FUNC GLOBAL DEFAULT 11 XwcFreeStringList + 960: 000000000003187c 20 FUNC GLOBAL DEFAULT 11 XDefaultVisual + 961: 0000000000040558 108 FUNC GLOBAL DEFAULT 11 XUninstallColormap + 962: 000000000006ec9c 236 FUNC GLOBAL DEFAULT 11 _XimMakeIMAttrIDList + 963: 00000000000302a0 108 FUNC GLOBAL DEFAULT 11 XKillClient + 964: 000000000008ad80 228 FUNC GLOBAL DEFAULT 11 _XkbReloadDpy + 965: 0000000000064e4c 28 FUNC GLOBAL DEFAULT 11 _XimRespSyncReply + 966: 0000000000030c68 196 FUNC GLOBAL DEFAULT 11 XLockDisplay + 967: 00000000000329e8 104 FUNC GLOBAL DEFAULT 11 XCloseOM + 968: 000000000003b400 416 FUNC GLOBAL DEFAULT 11 XUnionRegion + 969: 0000000000065678 340 FUNC GLOBAL DEFAULT 11 _XimError + 970: 000000000007c4f8 96 FUNC GLOBAL DEFAULT 11 _XmbGenericTextPerCharExtents + 971: 0000000000031ef0 304 FUNC GLOBAL DEFAULT 11 XGetModifierMapping + 972: 0000000000087c78 864 FUNC GLOBAL DEFAULT 11 XcmsLookupColor + 973: 0000000000085b94 264 FUNC GLOBAL DEFAULT 11 XcmsStoreColors + 974: 0000000000085d70 100 FUNC GLOBAL DEFAULT 11 _XcmsResolveColor + 975: 000000000009ce9c 204 FUNC GLOBAL DEFAULT 11 XkbFreeGeomDoodads + 976: 0000000000115b08 4 OBJECT GLOBAL DEFAULT 13 _XcmsRGB_prefix + 977: 000000000005f3c8 224 FUNC GLOBAL DEFAULT 11 _XlcGetValues + 978: 0000000000049824 64 FUNC GLOBAL DEFAULT 11 XrmInitialize + 979: 000000000006d248 20 FUNC GLOBAL DEFAULT 11 _XimSetIMResourceList + 980: 00000000000657cc 232 FUNC GLOBAL DEFAULT 11 _XimRegisterTriggerKeysCallback + 981: 000000000009d1f4 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomDoodads + 982: 000000000009de48 292 FUNC GLOBAL DEFAULT 11 XkbAddGeomOverlayKey + 983: 000000000008ae64 408 FUNC GLOBAL DEFAULT 11 XkbKeycodeToKeysym + 984: 00000000000540bc 864 FUNC GLOBAL DEFAULT 11 _XlcLocaleDirName + 985: 000000000003d400 240 FUNC GLOBAL DEFAULT 11 XSetLineAttributes + 986: 0000000000049864 92 FUNC GLOBAL DEFAULT 11 XrmGetDatabase + 987: 000000000005441c 1132 FUNC GLOBAL DEFAULT 11 _XlcLocaleLibDirName + 988: 00000000000947ac 312 FUNC GLOBAL DEFAULT 11 XkbDeviceBell + 989: 000000000005ed64 144 FUNC GLOBAL DEFAULT 11 XSetLocaleModifiers + 990: 0000000000032120 124 FUNC GLOBAL DEFAULT 11 XNewModifiermap + 991: 00000000000405c4 108 FUNC GLOBAL DEFAULT 11 XUnloadFont + 992: 0000000000088cb8 232 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToCIExyY + 993: 0000000000154918 8 OBJECT GLOBAL DEFAULT 24 _Xi18n_lock + 994: 0000000000028d04 400 FUNC GLOBAL DEFAULT 11 XGetMotionEvents + 995: 000000000008f700 1316 FUNC GLOBAL DEFAULT 11 _XkbReadGetNamesReply + 996: 000000000008aa84 84 FUNC GLOBAL DEFAULT 11 XkbSetAtomFuncs + 997: 000000000008d924 2712 FUNC GLOBAL DEFAULT 11 _XkbReadGetMapReply + 998: 0000000000088940 60 FUNC GLOBAL DEFAULT 11 _XcmsCIEuvY_ValidSpec + 999: 0000000000030aac 56 FUNC GLOBAL DEFAULT 11 XFreeExtensionList + 1000: 0000000000092240 780 FUNC GLOBAL DEFAULT 11 XkbSetMap + 1001: 0000000000086d38 120 FUNC GLOBAL DEFAULT 11 _XcmsCopyISOLatin1Lowered + 1002: 0000000000154340 8 OBJECT GLOBAL DEFAULT 24 _Xthread_self_fn + 1003: 000000000001ec48 8 FUNC GLOBAL DEFAULT 11 XDisableAccessControl + 1004: 000000000003b9a0 296 FUNC GLOBAL DEFAULT 11 XEqualRegion + 1005: 0000000000034a80 132 FUNC GLOBAL DEFAULT 11 XSetWindowBorderPixmap + 1006: 0000000000068f88 92 FUNC GLOBAL DEFAULT 11 _XimDestroyIMStructureList + 1007: 00000000000404f4 100 FUNC GLOBAL DEFAULT 11 XUngrabServer + 1008: 000000000009798c 468 FUNC GLOBAL DEFAULT 11 XkbGetDeviceButtonActions + 1009: 0000000000088500 364 FUNC GLOBAL DEFAULT 11 _XcmsCosine + 1010: 0000000000062a88 48 FUNC GLOBAL DEFAULT 11 _XimSetHeader + 1011: 0000000000034744 352 FUNC GLOBAL DEFAULT 11 XPeekIfEvent + 1012: 000000000005f384 68 FUNC GLOBAL DEFAULT 11 _XlcCompileResourceList + 1013: 0000000000045474 148 FUNC GLOBAL DEFAULT 11 _XData32 + 1014: 00000000000498c0 188 FUNC GLOBAL DEFAULT 11 XrmStringToQuarkList + 1015: 0000000000029d3c 8 FUNC GLOBAL DEFAULT 11 XGetWMIconName + 1016: 0000000000085e10 60 FUNC GLOBAL DEFAULT 11 _XUnresolveColor + 1017: 0000000000153f68 48 OBJECT GLOBAL DEFAULT 23 XcmsCIEXYZColorSpace + 1018: 0000000000078400 124 FUNC GLOBAL DEFAULT 11 _XmbDefaultDrawImageString + 1019: 000000000004fb58 8 FUNC GLOBAL DEFAULT 11 XDisplayOfIM + 1020: 000000000004faa0 88 FUNC GLOBAL DEFAULT 11 XOpenIM + 1021: 000000000008a3c8 364 FUNC GLOBAL DEFAULT 11 XkbSetAutoResetControls + 1022: 0000000000083938 364 FUNC GLOBAL DEFAULT 11 XcmsCIELuvClipuv + 1023: 000000000003ef40 620 FUNC GLOBAL DEFAULT 11 XDrawString + 1024: 0000000000081ab0 364 FUNC GLOBAL DEFAULT 11 XcmsCIELabClipab + 1025: 000000000006da24 32 FUNC GLOBAL DEFAULT 11 _XimEncodeLocalIMAttr + 1026: 0000000000020df0 200 FUNC GLOBAL DEFAULT 11 XCreateColormap + 1027: 00000000000822e8 1048 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMinL + 1028: 000000000002802c 356 FUNC GLOBAL DEFAULT 11 XGetSizeHints + 1029: 000000000005f7dc 28 FUNC GLOBAL DEFAULT 11 XmbDrawImageString + 1030: 000000000005110c 736 FUNC GLOBAL DEFAULT 11 _XlcAddCT + 1031: 000000000001f7f8 156 FUNC GLOBAL DEFAULT 11 XChangePointerControl + 1032: 000000000004aad0 196 FUNC GLOBAL DEFAULT 11 XrmDestroyDatabase + 1033: 00000000000319c0 8 FUNC GLOBAL DEFAULT 11 XBitmapPad + 1034: 00000000000896d0 272 FUNC GLOBAL DEFAULT 11 XkbLockModifiers + 1035: 00000000000440b4 236 FUNC GLOBAL DEFAULT 11 XInternalConnectionNumbers + 1036: 0000000000039df4 660 FUNC GLOBAL DEFAULT 11 XReconfigureWMWindow + 1037: 00000000000411ec 804 FUNC GLOBAL DEFAULT 11 XWMGeometry + 1038: 000000000008c20c 576 FUNC GLOBAL DEFAULT 11 _XkbReadGetCompatMapReply + 1039: 0000000000083570 396 FUNC GLOBAL DEFAULT 11 XcmsCIEuvYToCIELuv + 1040: 000000000005ee48 92 FUNC GLOBAL DEFAULT 11 XmbTextPropertyToTextList + 1041: 000000000006984c 136 FUNC GLOBAL DEFAULT 11 _XimLocalSetIMValues + 1042: 000000000005ef00 92 FUNC GLOBAL DEFAULT 11 Xutf8TextPropertyToTextList + 1043: 0000000000029950 184 FUNC GLOBAL DEFAULT 11 XGetSelectionOwner + 1044: 000000000003dc0c 204 FUNC GLOBAL DEFAULT 11 XSetStandardColormap + 1045: 0000000000031b38 24 FUNC GLOBAL DEFAULT 11 XDestroyImage + 1046: 000000000009b264 1808 FUNC GLOBAL DEFAULT 11 XkbResizeKeyType + 1047: 00000000001516e8 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketLocalFuncs + 1048: 0000000000031978 8 FUNC GLOBAL DEFAULT 11 XVendorRelease + 1049: 00000000000323b4 140 FUNC GLOBAL DEFAULT 11 XMoveWindow + 1050: 0000000000030ae4 388 FUNC GLOBAL DEFAULT 11 XLoadFont + 1051: 000000000003d2ec 132 FUNC GLOBAL DEFAULT 11 XSetInputFocus + 1052: 0000000000089bb4 556 FUNC GLOBAL DEFAULT 11 XkbSetDebuggingFlags + 1053: 0000000000044748 8 FUNC GLOBAL DEFAULT 11 _XUnknownNativeEvent + 1054: 0000000000064fa8 104 FUNC GLOBAL DEFAULT 11 _XimGetWindowEventmask + 1055: 000000000006597c 632 FUNC GLOBAL DEFAULT 11 _XimCommitCallback + 1056: 00000000000513ec 308 FUNC GLOBAL DEFAULT 11 _XlcInitCTInfo + 1057: 000000000005fc6c 28 FUNC GLOBAL DEFAULT 11 XwcTextEscapement + 1058: 00000000000770a0 956 FUNC GLOBAL DEFAULT 11 _XlcGenericLoader + 1059: 0000000000095004 652 FUNC GLOBAL DEFAULT 11 XkbComputeRowBounds + 1060: 0000000000057b3c 248 FUNC GLOBAL DEFAULT 11 _Xlcmbstowcs + 1061: 0000000000025f10 664 FUNC GLOBAL DEFAULT 11 XListFonts + 1062: 00000000000222b8 56 FUNC GLOBAL DEFAULT 11 XDisplayName + 1063: 000000000006d274 24 FUNC GLOBAL DEFAULT 11 _XimSetInnerIMResourceList + 1064: 00000000000319d0 80 FUNC GLOBAL DEFAULT 11 XNextRequest + 1065: 00000000000265d0 28 FUNC GLOBAL DEFAULT 11 XResetScreenSaver + 1066: 000000000003c738 264 FUNC GLOBAL DEFAULT 11 XSetDashes + 1067: 000000000004c9cc 432 FUNC GLOBAL DEFAULT 11 _XDefaultOpenOM + 1068: 000000000007bbdc 20 FUNC GLOBAL DEFAULT 11 _XmbGenericTextEscapement + 1069: 000000000003ec60 104 FUNC GLOBAL DEFAULT 11 XSetAfterFunction + 1070: 000000000009cd80 28 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOverlayKeys + 1071: 000000000006b2e4 8 FUNC GLOBAL DEFAULT 11 _XimLcctstombs + 1072: 0000000000087a78 164 FUNC GLOBAL DEFAULT 11 _XcmsInitDefaultCCCs + 1073: 0000000000026a34 128 FUNC GLOBAL DEFAULT 11 XSetFillRule + 1074: 000000000009d1a0 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOverlays + 1075: 00000000000697d8 116 FUNC GLOBAL DEFAULT 11 _XimLocalGetIMValues + 1076: 0000000000026944 24 FUNC GLOBAL DEFAULT 11 XFontsOfFontSet + 1077: 000000000003c948 596 FUNC GLOBAL DEFAULT 11 XSetFontPath + 1078: 000000000008bcf8 116 FUNC GLOBAL DEFAULT 11 XkbToControl + 1079: 000000000009d27c 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomKeys + 1080: 000000000005f294 240 FUNC GLOBAL DEFAULT 11 _XlcVaToArgList + 1081: 0000000000031988 20 FUNC GLOBAL DEFAULT 11 XDefaultDepth + 1082: 00000000000891c0 188 FUNC GLOBAL DEFAULT 11 XkbQueryExtension + 1083: 000000000005ea84 492 FUNC GLOBAL DEFAULT 11 _XOpenLC + 1084: 0000000000154910 4 OBJECT GLOBAL DEFAULT 24 _Xdebug + 1085: 000000000004d4b8 88 FUNC GLOBAL DEFAULT 11 _XimXTransFreeConnInfo + 1086: 000000000004fb70 132 FUNC GLOBAL DEFAULT 11 XRegisterIMInstantiateCallback + 1087: 00000000000911fc 76 FUNC GLOBAL DEFAULT 11 _XkbPeekAtReadBuffer + 1088: 0000000000154348 8 OBJECT GLOBAL DEFAULT 24 _XUnlockMutex_fn + 1089: 000000000003de78 32 FUNC GLOBAL DEFAULT 11 XSetTextProperty + 1090: 0000000000057e8c 112 FUNC GLOBAL DEFAULT 11 _Xwcsncmp + 1091: 000000000008bc28 208 FUNC GLOBAL DEFAULT 11 XkbLookupKeyBinding + 1092: 000000000008b808 408 FUNC GLOBAL DEFAULT 11 XkbRefreshKeyboardMapping + 1093: 000000000007bea8 36 FUNC GLOBAL DEFAULT 11 _XmbGenericTextExtents + 1094: 00000000000264dc 108 FUNC GLOBAL DEFAULT 11 XFreePixmap + 1095: 000000000006d2f0 72 FUNC GLOBAL DEFAULT 11 _XimGetResourceListRecByQuark + 1096: 0000000000031abc 8 FUNC GLOBAL DEFAULT 11 XMinCmapsOfScreen + 1097: 00000000000867d4 160 FUNC GLOBAL DEFAULT 11 _XcmsCopyCmapRecAndFree + 1098: 0000000000049dd4 248 FUNC GLOBAL DEFAULT 11 XrmQPutStringResource + 1099: 00000000000384b4 300 FUNC GLOBAL DEFAULT 11 XQueryBestSize + 1100: 000000000002c410 84 FUNC GLOBAL DEFAULT 11 _XGetScanlinePad + 1101: 000000000001e098 56 FUNC GLOBAL DEFAULT 11 _XEatDataWords + 1102: 0000000000043ce4 44 FUNC GLOBAL DEFAULT 11 _XPollfdCacheAdd + 1103: 0000000000057e30 92 FUNC GLOBAL DEFAULT 11 _Xwcscmp + 1104: 000000000002a998 88 FUNC GLOBAL DEFAULT 11 XAddHosts + 1105: 0000000000042ca4 92 FUNC GLOBAL DEFAULT 11 _XAllocID + 1106: 00000000000394bc 404 FUNC GLOBAL DEFAULT 11 XQueryTree + 1107: 00000000000279d8 536 FUNC GLOBAL DEFAULT 11 XGetFontPath + 1108: 0000000000049a80 372 FUNC GLOBAL DEFAULT 11 XrmCombineDatabase + 1109: 000000000009a43c 1012 FUNC GLOBAL DEFAULT 11 XkbApplyVirtualModChanges + 1110: 00000000000362a8 368 FUNC GLOBAL DEFAULT 11 _XPutBackEvent + 1111: 000000000003c3a8 128 FUNC GLOBAL DEFAULT 11 XSetClipMask + 1112: 000000000003c328 128 FUNC GLOBAL DEFAULT 11 XSetBackground + 1113: 000000000004f05c 344 FUNC GLOBAL DEFAULT 11 XSetIMValues + 1114: 00000000000265ec 416 FUNC GLOBAL DEFAULT 11 _XParseBaseFontNameList + 1115: 0000000000115b40 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIEXYZ_prefix + 1116: 000000000008fc24 436 FUNC GLOBAL DEFAULT 11 XkbGetNames + 1117: 0000000000040488 108 FUNC GLOBAL DEFAULT 11 XUngrabPointer + 1118: 00000000000263f4 56 FUNC GLOBAL DEFAULT 11 XFreeEventData + 1119: 000000000003bb68 284 FUNC GLOBAL DEFAULT 11 XRectInRegion + 1120: 00000000000271f8 532 FUNC GLOBAL DEFAULT 11 XGetAtomNames + 1121: 0000000000026548 108 FUNC GLOBAL DEFAULT 11 XForceScreenSaver + 1122: 000000000009bc34 668 FUNC GLOBAL DEFAULT 11 XkbResizeKeySyms + 1123: 0000000000049ecc 276 FUNC GLOBAL DEFAULT 11 XrmPutStringResource + 1124: 0000000000083328 160 FUNC GLOBAL DEFAULT 11 XcmsCIELabWhiteShiftColors + 1125: 000000000004f47c 128 FUNC GLOBAL DEFAULT 11 XDestroyIC + 1126: 0000000000085dd4 60 FUNC GLOBAL DEFAULT 11 _XcmsUnresolveColor + 1127: 0000000000020bb8 236 FUNC GLOBAL DEFAULT 11 XCopyPlane + 1128: 0000000000098d80 1804 FUNC GLOBAL DEFAULT 11 XkbKeyTypesForCoreSymbols + 1129: 000000000006f564 1660 FUNC GLOBAL DEFAULT 11 _XimEncodeICATTRIBUTE + 1130: 000000000007c9f0 640 FUNC GLOBAL DEFAULT 11 _XomConvert + 1131: 000000000002306c 548 FUNC GLOBAL DEFAULT 11 XDrawSegments + 1132: 0000000000038f4c 548 FUNC GLOBAL DEFAULT 11 XQueryTextExtents16 + 1133: 000000000004a068 112 FUNC GLOBAL DEFAULT 11 XrmGetStringDatabase + 1134: 000000000002b598 616 FUNC GLOBAL DEFAULT 11 XDrawImageString + 1135: 0000000000060dd0 108 FUNC GLOBAL DEFAULT 11 _XimRegisterServerFilter + 1136: 0000000000049bfc 196 FUNC GLOBAL DEFAULT 11 XrmQPutResource + 1137: 000000000004f848 68 FUNC GLOBAL DEFAULT 11 Xutf8ResetIC + 1138: 000000000008ce34 812 FUNC GLOBAL DEFAULT 11 XkbGetControls + 1139: 000000000006ae68 564 FUNC GLOBAL DEFAULT 11 _XimLocalWcLookupString + 1140: 00000000000349fc 132 FUNC GLOBAL DEFAULT 11 XSetWindowBackgroundPixmap + 1141: 000000000002a6d4 352 FUNC GLOBAL DEFAULT 11 XAddHost + 1142: 000000000005fad0 28 FUNC GLOBAL DEFAULT 11 Xutf8TextEscapement + 1143: 000000000004997c 260 FUNC GLOBAL DEFAULT 11 XrmStringToBindingQuarkList + 1144: 000000000009ce78 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomSections + 1145: 0000000000031ad4 8 FUNC GLOBAL DEFAULT 11 XDoesBackingStore + 1146: 0000000000154900 8 OBJECT GLOBAL DEFAULT 24 _XErrorFunction + 1147: 0000000000090f30 124 FUNC GLOBAL DEFAULT 11 _XkbInitReadBuffer + 1148: 0000000000044750 1572 FUNC GLOBAL DEFAULT 11 _XWireToEvent + 1149: 00000000000912a0 88 FUNC GLOBAL DEFAULT 11 _XkbFreeReadBuffer + 1150: 00000000000911d4 40 FUNC GLOBAL DEFAULT 11 _XkbWriteCopyData32 + 1151: 0000000000069610 456 FUNC GLOBAL DEFAULT 11 _XimLocalCreateIC + 1152: 00000000000453fc 120 FUNC GLOBAL DEFAULT 11 _XFreeEventCookies + 1153: 000000000007dfbc 88 FUNC GLOBAL DEFAULT 11 _XcmsRegFormatOfPrefix + 1154: 000000000002feec 244 FUNC GLOBAL DEFAULT 11 _XKeysymToModifiers + 1155: 0000000000065048 440 FUNC GLOBAL DEFAULT 11 _XimSync + 1156: 000000000005fc88 28 FUNC GLOBAL DEFAULT 11 XwcTextExtents + 1157: 000000000009d210 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomSectionDoodads + 1158: 00000000000343b0 700 FUNC GLOBAL DEFAULT 11 XParseGeometry + 1159: 00000000000540a0 28 FUNC GLOBAL DEFAULT 11 _XlcResolveI18NPath + 1160: 000000000006d510 704 FUNC GLOBAL DEFAULT 11 _XimCheckICMode + 1161: 000000000002d938 152 FUNC GLOBAL DEFAULT 11 XESetWireToEventCookie + 1162: 0000000000024330 456 FUNC GLOBAL DEFAULT 11 XFillPolygon + 1163: 0000000000086a30 52 FUNC GLOBAL DEFAULT 11 XcmsSetCCCOfColormap + 1164: 000000000007e268 832 FUNC GLOBAL DEFAULT 11 XcmsCIEuvYToTekHVC + 1165: 0000000000031ec4 28 FUNC GLOBAL DEFAULT 11 XDisplayKeycodes + 1166: 000000000009db18 456 FUNC GLOBAL DEFAULT 11 XkbAddGeomSection + 1167: 00000000000318dc 20 FUNC GLOBAL DEFAULT 11 XDisplayWidth + 1168: 000000000001f170 428 FUNC GLOBAL DEFAULT 11 XCheckMaskEvent + 1169: 0000000000026964 20 FUNC GLOBAL DEFAULT 11 XLocaleOfFontSet + 1170: 000000000003e2e4 112 FUNC GLOBAL DEFAULT 11 XStoreName + 1171: 0000000000029d34 8 FUNC GLOBAL DEFAULT 11 XGetWMName + 1172: 0000000000044e9c 8 FUNC GLOBAL DEFAULT 11 _XDefaultWireError + 1173: 000000000002d9d0 152 FUNC GLOBAL DEFAULT 11 XESetCopyEventCookie + 1174: 0000000000088f7c 572 FUNC GLOBAL DEFAULT 11 XcmsCIExyYToCIEXYZ + 1175: 000000000009d1bc 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOverlayRows + 1176: 00000000000912f8 264 FUNC GLOBAL DEFAULT 11 _XkbGetReadBufferCountedString + 1177: 000000000005e1ec 264 FUNC GLOBAL DEFAULT 11 _XlcAddUtf8Converters + 1178: 0000000000028484 248 FUNC GLOBAL DEFAULT 11 XGetCommand + 1179: 000000000003deb0 112 FUNC GLOBAL DEFAULT 11 XSetWMColormapWindows + 1180: 000000000001fc54 8 FUNC GLOBAL DEFAULT 11 XAddToSaveSet + 1181: 0000000000063f28 432 FUNC GLOBAL DEFAULT 11 _XimProtoIMFree + 1182: 0000000000088348 356 FUNC GLOBAL DEFAULT 11 _XcmsSine + 1183: 0000000000154920 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 1184: 000000000003ebe4 124 FUNC GLOBAL DEFAULT 11 XSynchronize + 1185: 000000000005e7ec 228 FUNC GLOBAL DEFAULT 11 _XlcValidModSyntax + 1186: 0000000000094e0c 272 FUNC GLOBAL DEFAULT 11 XkbComputeShapeBounds + 1187: 0000000000031ebc 8 FUNC GLOBAL DEFAULT 11 XDisplayMotionBufferSize + 1188: 000000000002dd30 180 FUNC GLOBAL DEFAULT 11 XESetPrintErrorValues + 1189: 000000000004e9d4 56 FUNC GLOBAL DEFAULT 11 _XimXTransOpenCLTSClient + 1190: 0000000000098574 236 FUNC GLOBAL DEFAULT 11 XkbFreeComponentList + 1191: 000000000005ed20 68 FUNC GLOBAL DEFAULT 11 _XlcCurrentLC + 1192: 000000000003e354 112 FUNC GLOBAL DEFAULT 11 XSetIconName + 1193: 0000000000038ac8 328 FUNC GLOBAL DEFAULT 11 XQueryExtension + 1194: 000000000003dea0 8 FUNC GLOBAL DEFAULT 11 XSetWMIconName + 1195: 00000000000898f0 256 FUNC GLOBAL DEFAULT 11 XkbLockGroup + 1196: 00000000000690b4 60 FUNC GLOBAL DEFAULT 11 _XInitIM + 1197: 000000000002da68 144 FUNC GLOBAL DEFAULT 11 XESetEventToWire + 1198: 0000000000056968 60 FUNC GLOBAL DEFAULT 11 _XlcInitLoader + 1199: 0000000000154038 16 OBJECT GLOBAL DEFAULT 23 _XcmsSCCFuncSetsInit + 1200: 0000000000045270 104 FUNC GLOBAL DEFAULT 11 _XAllocScratch + 1201: 000000000005f814 28 FUNC GLOBAL DEFAULT 11 XmbTextExtents + 1202: 0000000000051fa0 32 FUNC GLOBAL DEFAULT 11 _XlcResetConverter + 1203: 0000000000057cac 72 FUNC GLOBAL DEFAULT 11 _Xwcsncpy + 1204: 00000000000330b0 2452 FUNC GLOBAL DEFAULT 11 XOpenDisplay + 1205: 000000000003bf24 200 FUNC GLOBAL DEFAULT 11 XRestackWindows + 1206: 0000000000031ae4 84 FUNC GLOBAL DEFAULT 11 XScreenNumberOfScreen + 1207: 000000000009e6c4 272 FUNC GLOBAL DEFAULT 11 XkbFreeNames + 1208: 000000000009dce0 360 FUNC GLOBAL DEFAULT 11 XkbAddGeomDoodad + 1209: 0000000000042c58 76 FUNC GLOBAL DEFAULT 11 _XFlush + 1210: 00000000000259ac 1176 FUNC GLOBAL DEFAULT 11 XListFontsWithInfo + 1211: 000000000002b1a8 372 FUNC GLOBAL DEFAULT 11 _XimLookupUTF8Text + 1212: 00000000000217bc 228 FUNC GLOBAL DEFAULT 11 _XNoticeCreateBitmap + 1213: 000000000007c558 96 FUNC GLOBAL DEFAULT 11 _XwcGenericTextPerCharExtents + 1214: 000000000003dcd8 124 FUNC GLOBAL DEFAULT 11 XSetStipple + 1215: 000000000005fa98 28 FUNC GLOBAL DEFAULT 11 Xutf8DrawString + 1216: 000000000006d420 240 FUNC GLOBAL DEFAULT 11 _XimSetICMode + 1217: 0000000000057a18 292 FUNC GLOBAL DEFAULT 11 _Xlcwctomb + 1218: 00000000000254bc 68 FUNC GLOBAL DEFAULT 11 _XF86BigfontFreeFontMetrics + 1219: 000000000009d804 180 FUNC GLOBAL DEFAULT 11 XkbAddGeomOutline + 1220: 0000000000038354 60 FUNC GLOBAL DEFAULT 11 XrmPermStringToQuark + 1221: 000000000001e630 324 FUNC GLOBAL DEFAULT 11 XAllocColorCells + 1222: 0000000000028bc8 72 FUNC GLOBAL DEFAULT 11 XGetSubImage + 1223: 0000000000021724 8 FUNC GLOBAL DEFAULT 11 XGContextFromGC + 1224: 0000000000057c94 24 FUNC GLOBAL DEFAULT 11 _Xwcscpy + 1225: 000000000007fdb8 184 FUNC GLOBAL DEFAULT 11 XcmsTekHVCWhiteShiftColors + 1226: 000000000004d5e8 28 FUNC GLOBAL DEFAULT 11 _XimXTransRead + 1227: 000000000002daf8 208 FUNC GLOBAL DEFAULT 11 XESetWireToError + 1228: 00000000000226e0 440 FUNC GLOBAL DEFAULT 11 XDrawLines + 1229: 000000000003c840 136 FUNC GLOBAL DEFAULT 11 XSetFont + 1230: 0000000000023ebc 228 FUNC GLOBAL DEFAULT 11 XGetIconName + 1231: 0000000000032a50 344 FUNC GLOBAL DEFAULT 11 XSetOMValues + 1232: 000000000002857c 244 FUNC GLOBAL DEFAULT 11 XGetTransientForHint + 1233: 0000000000031a38 16 FUNC GLOBAL DEFAULT 11 XDefaultScreenOfDisplay + 1234: 000000000002adc8 504 FUNC GLOBAL DEFAULT 11 _XimLookupMBText + 1235: 0000000000058550 40 FUNC GLOBAL DEFAULT 11 _Xutf8TextListToTextProperty + 1236: 000000000003184c 20 FUNC GLOBAL DEFAULT 11 XRootWindow + 1237: 000000000002afc0 488 FUNC GLOBAL DEFAULT 11 _XimLookupWCText + 1238: 0000000000031844 8 FUNC GLOBAL DEFAULT 11 XConnectionNumber + 1239: 00000000000981d0 8 FUNC GLOBAL DEFAULT 11 XkbSetDeviceLedInfo + 1240: 0000000000032d00 8 FUNC GLOBAL DEFAULT 11 XDisplayOfOM + 1241: 0000000000027c28 72 FUNC GLOBAL DEFAULT 11 XGetFontProperty + 1242: 000000000007c5b8 96 FUNC GLOBAL DEFAULT 11 _Xutf8GenericTextPerCharExtents + 1243: 0000000000032980 104 FUNC GLOBAL DEFAULT 11 XOpenOM + 1244: 0000000000028e94 424 FUNC GLOBAL DEFAULT 11 XGetWMSizeHints + 1245: 0000000000039b38 184 FUNC GLOBAL DEFAULT 11 XReadBitmapFile + 1246: 000000000003be90 148 FUNC GLOBAL DEFAULT 11 XReparentWindow + 1247: 0000000000086874 176 FUNC GLOBAL DEFAULT 11 _XcmsDeleteCmapRec + 1248: 0000000000045300 60 FUNC GLOBAL DEFAULT 11 _XFreeTemp + 1249: 000000000006de14 252 FUNC GLOBAL DEFAULT 11 _XimCheckLocalInputStyle + 1250: 0000000000073640 472 FUNC GLOBAL DEFAULT 11 _XlcDefaultLoader + 1251: 000000000005f830 48 FUNC GLOBAL DEFAULT 11 XmbTextPerCharExtents + 1252: 000000000006e218 64 FUNC GLOBAL DEFAULT 11 _XimSetCurrentIMValues + 1253: 000000000004ef44 280 FUNC GLOBAL DEFAULT 11 XVaCreateNestedList + 1254: 000000000004d674 80 FUNC GLOBAL DEFAULT 11 _XimXTransClose + 1255: 000000000004326c 264 FUNC GLOBAL DEFAULT 11 _XRead + 1256: 0000000000044538 252 FUNC GLOBAL DEFAULT 11 _XFetchEventCookie + 1257: 0000000000026bb4 128 FUNC GLOBAL DEFAULT 11 XSetSubwindowMode + 1258: 0000000000032ba8 344 FUNC GLOBAL DEFAULT 11 XGetOMValues + 1259: 000000000005faec 28 FUNC GLOBAL DEFAULT 11 Xutf8TextExtents + 1260: 000000000001fe08 116 FUNC GLOBAL DEFAULT 11 XCirculateSubwindowsDown + 1261: 0000000000039ca0 340 FUNC GLOBAL DEFAULT 11 XConfigureWindow + 1262: 000000000003e0d4 8 FUNC GLOBAL DEFAULT 11 XStoreBytes + 1263: 0000000000044404 256 FUNC GLOBAL DEFAULT 11 XRemoveConnectionWatch + 1264: 000000000002d380 4 FUNC GLOBAL DEFAULT 11 XEHeadOfExtensionList + 1265: 0000000000049bf4 8 FUNC GLOBAL DEFAULT 11 XrmMergeDatabases + 1266: 0000000000041b70 412 FUNC GLOBAL DEFAULT 11 _XConnectXCB + 1267: 000000000004a434 396 FUNC GLOBAL DEFAULT 11 XrmQGetSearchList + 1268: 0000000000151b90 8 OBJECT GLOBAL DEFAULT 23 _XlcPublicMethods + 1269: 00000000000318cc 8 FUNC GLOBAL DEFAULT 11 XAllPlanes + 1270: 0000000000154050 24 OBJECT GLOBAL DEFAULT 23 _XcmsDDColorSpacesInit + 1271: 0000000000099acc 1824 FUNC GLOBAL DEFAULT 11 XkbApplyCompatMapToKey + 1272: 000000000002d524 180 FUNC GLOBAL DEFAULT 11 XESetFlushGC + 1273: 0000000000065010 52 FUNC GLOBAL DEFAULT 11 _XimFreeCommitInfo + 1274: 0000000000039170 544 FUNC GLOBAL DEFAULT 11 XQueryTextExtents + 1275: 000000000009100c 152 FUNC GLOBAL DEFAULT 11 _XkbCopyFromReadBuffer + 1276: 0000000000025418 164 FUNC GLOBAL DEFAULT 11 XQueryFont + 1277: 00000000000214f8 388 FUNC GLOBAL DEFAULT 11 XCreateGC + 1278: 0000000000154030 8 OBJECT GLOBAL DEFAULT 23 _XcmsSCCFuncSets + 1279: 000000000004d658 28 FUNC GLOBAL DEFAULT 11 _XimXTransDisconnect + 1280: 000000000006d7d0 188 FUNC GLOBAL DEFAULT 11 _XimSetLocalIMDefaults + 1281: 0000000000071dcc 16 FUNC GLOBAL DEFAULT 11 _XimTransFilterWaitEvent + 1282: 0000000000085448 176 FUNC GLOBAL DEFAULT 11 XcmsQueryGreen + 1283: 00000000000318a4 20 FUNC GLOBAL DEFAULT 11 XBlackPixel + 1284: 000000000007d1f8 248 FUNC GLOBAL DEFAULT 11 _XcmsConvertColorsWithWhitePt + 1285: 000000000002dde4 236 FUNC GLOBAL DEFAULT 11 XESetBeforeFlush + 1286: 000000000009d8b8 312 FUNC GLOBAL DEFAULT 11 XkbAddGeomShape + 1287: 0000000000024850 268 FUNC GLOBAL DEFAULT 11 XFilterEvent + 1288: 000000000004a860 336 FUNC GLOBAL DEFAULT 11 XrmQGetResource + 1289: 000000000002a2f8 196 FUNC GLOBAL DEFAULT 11 XGrabButton + 1290: 0000000000085278 116 FUNC GLOBAL DEFAULT 11 XcmsPrefixOfFormat + 1291: 00000000000244f8 308 FUNC GLOBAL DEFAULT 11 XFillRectangle + 1292: 000000000006e044 388 FUNC GLOBAL DEFAULT 11 _XimGetICValueData + 1293: 0000000000065404 36 FUNC GLOBAL DEFAULT 11 _XimForwardEvent + 1294: 000000000005f860 316 FUNC GLOBAL DEFAULT 11 Xutf8SetWMProperties + 1295: 000000000002aa48 204 FUNC GLOBAL DEFAULT 11 XIconifyWindow + 1296: 0000000000068bdc 196 FUNC GLOBAL DEFAULT 11 _XimResetIMInstantiateCallback + 1297: 000000000001f644 436 FUNC GLOBAL DEFAULT 11 XCheckWindowEvent + 1298: 00000000000879d0 168 FUNC GLOBAL DEFAULT 11 _XcmsPushPointerArray + 1299: 00000000001517c8 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketINETFuncs + 1300: 0000000000078190 312 FUNC GLOBAL DEFAULT 11 _XwcDefaultDrawString + 1301: 0000000000089bac 8 FUNC GLOBAL DEFAULT 11 XkbXlibControlsImplemented + 1302: 000000000001feec 236 FUNC GLOBAL DEFAULT 11 XCloseDisplay + 1303: 00000000000940a4 544 FUNC GLOBAL DEFAULT 11 XkbSetIndicatorMap + 1304: 0000000000041d0c 100 FUNC GLOBAL DEFAULT 11 _XFreeX11XCBStructure + 1305: 0000000000037e48 108 FUNC GLOBAL DEFAULT 11 Xpermalloc + 1306: 0000000000043604 208 FUNC GLOBAL DEFAULT 11 _XGetAsyncData + 1307: 000000000008cc68 244 FUNC GLOBAL DEFAULT 11 XkbSetIgnoreLockMods + 1308: 0000000000032d18 872 FUNC GLOBAL DEFAULT 11 _XFreeDisplayStructure + 1309: 00000000000434b0 72 FUNC GLOBAL DEFAULT 11 _XDeqAsyncHandler + 1310: 0000000000022050 132 FUNC GLOBAL DEFAULT 11 XDefineCursor + 1311: 0000000000066368 124 FUNC GLOBAL DEFAULT 11 _XimRegProtoIntrCallback + 1312: 000000000009d14c 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomKeyAliases + 1313: 0000000000077b74 752 FUNC GLOBAL DEFAULT 11 _XmbDefaultTextPerCharExtents + 1314: 000000000006c4a8 8 FUNC GLOBAL DEFAULT 11 _XimParseStringFile + 1315: 000000000002f714 84 FUNC GLOBAL DEFAULT 11 _XKeycodeToKeysym + 1316: 000000000006d2a4 76 FUNC GLOBAL DEFAULT 11 _XimCheckCreateICValues + 1317: 000000000007790c 308 FUNC GLOBAL DEFAULT 11 _XwcDefaultTextExtents + 1318: 0000000000042984 176 FUNC GLOBAL DEFAULT 11 _XEventsQueued + 1319: 000000000003bcbc 168 FUNC GLOBAL DEFAULT 11 _XRegisterFilterByMask + 1320: 0000000000043fc4 240 FUNC GLOBAL DEFAULT 11 _XUnregisterInternalConnection + 1321: 000000000008e448 216 FUNC GLOBAL DEFAULT 11 XkbGetUpdatedMap + 1322: 000000000003b2b8 160 FUNC GLOBAL DEFAULT 11 XOffsetRegion + 1323: 000000000008a118 356 FUNC GLOBAL DEFAULT 11 XkbSetDetectableAutoRepeat + 1324: 000000000005340c 940 FUNC GLOBAL DEFAULT 11 _XlcCreateLocaleDataBase + 1325: 000000000009d168 28 FUNC GLOBAL DEFAULT 11 XkbAllocGeomShapes + 1326: 0000000000031918 20 FUNC GLOBAL DEFAULT 11 XDisplayHeightMM + 1327: 0000000000032358 92 FUNC GLOBAL DEFAULT 11 XDeleteModifiermapEntry + 1328: 00000000000261a8 92 FUNC GLOBAL DEFAULT 11 XFreeFontNames + 1329: 000000000003e3c4 412 FUNC GLOBAL DEFAULT 11 XStoreNamedColor + 1330: 0000000000027bf0 56 FUNC GLOBAL DEFAULT 11 XFreeFontPath + 1331: 0000000000031c14 140 FUNC GLOBAL DEFAULT 11 XMapRaised + 1332: 0000000000027980 88 FUNC GLOBAL DEFAULT 11 XGetEventData + 1333: 000000000004ab94 120 FUNC GLOBAL DEFAULT 11 XrmSetDatabase + 1334: 000000000003088c 544 FUNC GLOBAL DEFAULT 11 XListExtensions + 1335: 000000000003f94c 684 FUNC GLOBAL DEFAULT 11 XTextExtents + 1336: 000000000003c4d0 476 FUNC GLOBAL DEFAULT 11 _XSetClipRectangles + 1337: 00000000000854f8 176 FUNC GLOBAL DEFAULT 11 XcmsQueryRed + 1338: 000000000001ea60 132 FUNC GLOBAL DEFAULT 11 XSetWindowBorderWidth + 1339: 0000000000031868 20 FUNC GLOBAL DEFAULT 11 XDefaultRootWindow + 1340: 0000000000043d10 56 FUNC GLOBAL DEFAULT 11 _XPollfdCacheDel + 1341: 0000000000021ef4 240 FUNC GLOBAL DEFAULT 11 XCreateSimpleWindow + 1342: 000000000003264c 124 FUNC GLOBAL DEFAULT 11 XDestroyOC + 1343: 0000000000056ef4 24 FUNC GLOBAL DEFAULT 11 _Xutf8TextPropertyToTextList + 1344: 000000000003e090 8 FUNC GLOBAL DEFAULT 11 XFetchBytes + 1345: 000000000002ad38 144 FUNC GLOBAL DEFAULT 11 _XimGetCharCode + 1346: 000000000001fc5c 8 FUNC GLOBAL DEFAULT 11 XRemoveFromSaveSet + 1347: 00000000000348a4 104 FUNC GLOBAL DEFAULT 11 XEventsQueued + 1348: 000000000006722c 3720 FUNC GLOBAL DEFAULT 11 _XimProtoWireToEvent + 1349: 000000000009e23c 336 FUNC GLOBAL DEFAULT 11 XkbAllocCompatMap + 1350: 000000000003dea8 8 FUNC GLOBAL DEFAULT 11 XSetWMClientMachine + 1351: 000000000004f30c 368 FUNC GLOBAL DEFAULT 11 XCreateIC + 1352: 000000000003b358 168 FUNC GLOBAL DEFAULT 11 XIntersectRegion + 1353: 0000000000085e50 60 FUNC GLOBAL DEFAULT 11 _XcmsCIEXYZ_ValidSpec + 1354: 00000000000218a0 220 FUNC GLOBAL DEFAULT 11 _XNoticePutBitmap + 1355: 000000000004f7c4 36 FUNC GLOBAL DEFAULT 11 XUnsetICFocus + 1356: 0000000000089af0 124 FUNC GLOBAL DEFAULT 11 XkbSetXlibControls + 1357: 000000000003da88 148 FUNC GLOBAL DEFAULT 11 XSetScreenSaver + 1358: 0000000000154350 8 OBJECT GLOBAL DEFAULT 24 _XLockMutex_fn + 1359: 0000000000031b50 24 FUNC GLOBAL DEFAULT 11 XGetPixel + 1360: 000000000008cb74 244 FUNC GLOBAL DEFAULT 11 XkbSetServerInternalMods + 1361: 000000000004d604 28 FUNC GLOBAL DEFAULT 11 _XimXTransWrite + 1362: 0000000000065dcc 8 FUNC GLOBAL DEFAULT 11 _Ximctstoutf8 + 1363: 000000000001ee70 336 FUNC GLOBAL DEFAULT 11 XChangeKeyboardControl + 1364: 000000000007b620 48 FUNC GLOBAL DEFAULT 11 _XmbGenericDrawString + 1365: 0000000000029428 752 FUNC GLOBAL DEFAULT 11 XGetWindowProperty + 1366: 000000000001e7f0 328 FUNC GLOBAL DEFAULT 11 XAllocColorPlanes + 1367: 0000000000036290 12 FUNC GLOBAL DEFAULT 11 XAllocClassHint + 1368: 000000000008ca30 324 FUNC GLOBAL DEFAULT 11 XkbGetAutoRepeatRate + 1369: 000000000002e55c 624 FUNC GLOBAL DEFAULT 11 XInternAtoms + 1370: 000000000009d264 24 FUNC GLOBAL DEFAULT 11 XkbAllocGeomPoints + 1371: 0000000000031a70 8 FUNC GLOBAL DEFAULT 11 XDefaultDepthOfScreen + 1372: 0000000000053290 164 FUNC GLOBAL DEFAULT 11 _XlcGetLocaleDataBase + 1373: 000000000005f588 316 FUNC GLOBAL DEFAULT 11 XmbSetWMProperties + 1374: 00000000000221e0 108 FUNC GLOBAL DEFAULT 11 XDestroySubwindows + 1375: 000000000005fca4 48 FUNC GLOBAL DEFAULT 11 XwcTextPerCharExtents + 1376: 000000000006ab8c 732 FUNC GLOBAL DEFAULT 11 _XimLocalMbLookupString + 1377: 000000000002eea0 776 FUNC GLOBAL DEFAULT 11 XConvertCase + 1378: 0000000000060ce4 120 FUNC GLOBAL DEFAULT 11 _XimRegisterFilter + 1379: 0000000000060d5c 100 FUNC GLOBAL DEFAULT 11 _XimUnregisterFilter + 1380: 000000000002e18c 324 FUNC GLOBAL DEFAULT 11 _XUpdateAtomCache + 1381: 0000000000094578 492 FUNC GLOBAL DEFAULT 11 XkbSetNamedDeviceIndicator + 1382: 00000000000942c4 620 FUNC GLOBAL DEFAULT 11 XkbGetNamedDeviceIndicator diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXcomposite.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXcomposite.so.1.txt new file mode 100644 index 000000000000..ba1c83d6f947 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXcomposite.so.1.txt @@ -0,0 +1,50 @@ +Library: /lib64/libXcomposite.so.1 +Package: libXcomposite-0.4.4-4.1.el7.aarch64 + + +Symbol table '.dynsym' contains 44 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000cf0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd88 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 4: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 10: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 19: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 20: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 21: 0000000000020080 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 22: 0000000000001954 0 FUNC GLOBAL DEFAULT 12 _fini + 23: 000000000000131c 80 FUNC GLOBAL DEFAULT 11 XCompositeQueryVersion + 24: 0000000000020060 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 25: 000000000000156c 168 FUNC GLOBAL DEFAULT 11 XCompositeUnredirectSubwindows + 26: 0000000000000cf0 0 FUNC GLOBAL DEFAULT 9 _init + 27: 0000000000020060 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 28: 0000000000020080 0 NOTYPE GLOBAL DEFAULT 23 _end + 29: 0000000000020080 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 30: 0000000000001614 204 FUNC GLOBAL DEFAULT 11 XCompositeCreateRegionFromBorderClip + 31: 00000000000014c4 168 FUNC GLOBAL DEFAULT 11 XCompositeUnredirectWindow + 32: 0000000000001968 10 OBJECT GLOBAL DEFAULT 13 XCompositeExtensionName + 33: 0000000000020060 0 NOTYPE GLOBAL DEFAULT 22 _edata + 34: 0000000000020068 24 OBJECT GLOBAL DEFAULT 23 XCompositeExtensionInfo + 35: 000000000000136c 8 FUNC GLOBAL DEFAULT 11 XCompositeVersion + 36: 00000000000012c8 84 FUNC GLOBAL DEFAULT 11 XCompositeQueryExtension + 37: 00000000000016e0 204 FUNC GLOBAL DEFAULT 11 XCompositeNameWindowPixmap + 38: 0000000000020080 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 39: 000000000000102c 668 FUNC GLOBAL DEFAULT 11 XCompositeFindDisplay + 40: 0000000000001374 168 FUNC GLOBAL DEFAULT 11 XCompositeRedirectWindow + 41: 00000000000018b8 156 FUNC GLOBAL DEFAULT 11 XCompositeReleaseOverlayWindow + 42: 00000000000017ac 268 FUNC GLOBAL DEFAULT 11 XCompositeGetOverlayWindow + 43: 000000000000141c 168 FUNC GLOBAL DEFAULT 11 XCompositeRedirectSubwindows diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXcursor.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXcursor.so.1.txt new file mode 100644 index 000000000000..834e49e90025 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXcursor.so.1.txt @@ -0,0 +1,141 @@ +Library: /lib64/libXcursor.so.1 +Package: libXcursor-1.1.15-1.el7.aarch64 + + +Symbol table '.dynsym' contains 135 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000025a0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd70 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetDefault + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreatePicture + 9: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitImage + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQueryExtension + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFixesSetCursorName + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreePixmap + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateCursor + 22: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.17 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmapCursor + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateAnimCursor + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryFont + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreePicture + 29: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 30: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.17 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQueryVersion + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInternAtom + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (2) + 40: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindStandardFormat + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeFontInfo + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XLoadFont + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateGC + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (2) + 49: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XPutImage + 53: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeCursor + 55: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeGC + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 58: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putchar@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateImage + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmap + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 64: 0000000000005328 172 FUNC GLOBAL DEFAULT 11 XcursorXcFileLoadImage + 65: 0000000000005910 1276 FUNC GLOBAL DEFAULT 11 XcursorXcFileSave + 66: 000000000000485c 28 FUNC GLOBAL DEFAULT 11 XcursorGetThemeCore + 67: 0000000000004f90 4 FUNC GLOBAL DEFAULT 11 XcursorImageDestroy + 68: 00000000000061f0 96 FUNC GLOBAL DEFAULT 11 XcursorFilenameLoadImages + 69: 00000000000047b0 28 FUNC GLOBAL DEFAULT 11 XcursorGetDefaultSize + 70: 0000000000002fd0 48 FUNC GLOBAL DEFAULT 11 XcursorAnimateNext + 71: 00000000000047cc 116 FUNC GLOBAL DEFAULT 11 XcursorSetTheme + 72: 0000000000006300 136 FUNC GLOBAL DEFAULT 11 XcursorFilenameSaveImages + 73: 0000000000006d78 48 FUNC GLOBAL DEFAULT 11 XcursorShapeLoadImages + 74: 0000000000003c24 204 FUNC GLOBAL DEFAULT 11 XcursorImagesLoadCursors + 75: 0000000000004878 40 FUNC GLOBAL DEFAULT 11 XcursorSetThemeCore + 76: 0000000000006e94 236 FUNC GLOBAL DEFAULT 11 XcursorLibraryLoadCursors + 77: 0000000000004f00 144 FUNC GLOBAL DEFAULT 11 XcursorImageCreate + 78: 00000000000073ec 288 FUNC GLOBAL DEFAULT 11 XcursorNoticeCreateBitmap + 79: 0000000000006250 76 FUNC GLOBAL DEFAULT 11 XcursorFilenameLoadAllImages + 80: 0000000000002e8c 72 FUNC GLOBAL DEFAULT 11 XcursorCursorsCreate + 81: 00000000000077c0 284 FUNC GLOBAL DEFAULT 11 XcursorTryShapeBitmapCursor + 82: 0000000000006c94 48 FUNC GLOBAL DEFAULT 11 XcursorShapeLoadImage + 83: 00000000000078dc 0 FUNC GLOBAL DEFAULT 12 _fini + 84: 000000000000515c 124 FUNC GLOBAL DEFAULT 11 XcursorImagesDestroy + 85: 0000000000006da8 188 FUNC GLOBAL DEFAULT 11 XcursorLibraryLoadCursor + 86: 0000000000003e80 84 FUNC GLOBAL DEFAULT 11 XcursorFilenameLoadCursors + 87: 0000000000005f0c 128 FUNC GLOBAL DEFAULT 11 XcursorFileLoadAllImages + 88: 0000000000005f8c 140 FUNC GLOBAL DEFAULT 11 XcursorFileLoad + 89: 0000000000004764 36 FUNC GLOBAL DEFAULT 11 XcursorSupportsAnim + 90: 0000000000020318 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 91: 00000000000025a0 0 FUNC GLOBAL DEFAULT 9 _init + 92: 0000000000006800 268 FUNC GLOBAL DEFAULT 11 XcursorLibraryShape + 93: 0000000000020318 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 94: 000000000000750c 180 FUNC GLOBAL DEFAULT 11 XcursorImageHash + 95: 000000000000629c 100 FUNC GLOBAL DEFAULT 11 XcursorFilenameLoad + 96: 0000000000003fc0 108 FUNC GLOBAL DEFAULT 11 _XcursorCreateFontCursor + 97: 0000000000002f98 56 FUNC GLOBAL DEFAULT 11 XcursorAnimateDestroy + 98: 0000000000006190 96 FUNC GLOBAL DEFAULT 11 XcursorFilenameLoadImage + 99: 0000000000006cc4 180 FUNC GLOBAL DEFAULT 11 XcursorLibraryLoadImages + 100: 0000000000002ed4 136 FUNC GLOBAL DEFAULT 11 XcursorCursorsDestroy + 101: 0000000000005e8c 128 FUNC GLOBAL DEFAULT 11 XcursorFileLoadImages + 102: 0000000000002f5c 60 FUNC GLOBAL DEFAULT 11 XcursorAnimateCreate + 103: 0000000000005660 688 FUNC GLOBAL DEFAULT 11 XcursorXcFileLoad + 104: 00000000000202f8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 105: 0000000000006018 220 FUNC GLOBAL DEFAULT 11 XcursorFileSaveImages + 106: 0000000000005228 92 FUNC GLOBAL DEFAULT 11 XcursorCommentCreate + 107: 00000000000070d8 788 FUNC GLOBAL DEFAULT 11 XcursorTryShapeCursor + 108: 0000000000003cf0 304 FUNC GLOBAL DEFAULT 11 XcursorImagesLoadCursor + 109: 0000000000004840 28 FUNC GLOBAL DEFAULT 11 XcursorGetTheme + 110: 0000000000005520 320 FUNC GLOBAL DEFAULT 11 XcursorXcFileLoadAllImages + 111: 00000000000075c0 512 FUNC GLOBAL DEFAULT 11 XcursorNoticePutBitmap + 112: 0000000000003000 3108 FUNC GLOBAL DEFAULT 11 XcursorImageLoadCursor + 113: 00000000000067a8 88 FUNC GLOBAL DEFAULT 11 XcursorLibraryPath + 114: 0000000000005288 48 FUNC GLOBAL DEFAULT 11 XcursorCommentsCreate + 115: 0000000000005e0c 128 FUNC GLOBAL DEFAULT 11 XcursorFileLoadImage + 116: 00000000000202f8 0 NOTYPE GLOBAL DEFAULT 22 _edata + 117: 00000000000060f4 156 FUNC GLOBAL DEFAULT 11 XcursorFileSave + 118: 0000000000004214 1324 FUNC GLOBAL DEFAULT 11 _XcursorGetDisplayInfo + 119: 00000000000051d8 80 FUNC GLOBAL DEFAULT 11 XcursorImagesSetName + 120: 0000000000006bf8 156 FUNC GLOBAL DEFAULT 11 XcursorLibraryLoadImage + 121: 0000000000003e20 96 FUNC GLOBAL DEFAULT 11 XcursorFilenameLoadCursor + 122: 00000000000052b8 112 FUNC GLOBAL DEFAULT 11 XcursorCommentsDestroy + 123: 0000000000005128 52 FUNC GLOBAL DEFAULT 11 XcursorImagesCreate + 124: 0000000000004740 36 FUNC GLOBAL DEFAULT 11 XcursorSupportsARGB + 125: 0000000000020318 0 NOTYPE GLOBAL DEFAULT 23 _end + 126: 0000000000003ed4 236 FUNC GLOBAL DEFAULT 11 _XcursorCreateGlyphCursor + 127: 0000000000006f80 48 FUNC GLOBAL DEFAULT 11 XcursorShapeLoadCursors + 128: 0000000000006e64 48 FUNC GLOBAL DEFAULT 11 XcursorShapeLoadCursor + 129: 0000000000020318 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 130: 0000000000006388 160 FUNC GLOBAL DEFAULT 11 XcursorFilenameSave + 131: 0000000000005284 4 FUNC GLOBAL DEFAULT 11 XcursorCommentDestroy + 132: 00000000000053d4 332 FUNC GLOBAL DEFAULT 11 XcursorXcFileLoadImages + 133: 00000000000202f8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 134: 0000000000004788 40 FUNC GLOBAL DEFAULT 11 XcursorSetDefaultSize diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXdamage.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXdamage.so.1.txt new file mode 100644 index 000000000000..38a20344573d --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXdamage.so.1.txt @@ -0,0 +1,48 @@ +Library: /lib64/libXdamage.so.1 +Package: libXdamage-1.1.4-4.1.el7.aarch64 + + +Symbol table '.dynsym' contains 42 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000c60 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd78 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetEventToWire + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEvent + 6: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 11: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 17: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 22: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 23: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 24: 0000000000020098 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 25: 0000000000001810 0 FUNC GLOBAL DEFAULT 12 _fini + 26: 0000000000001820 7 OBJECT GLOBAL DEFAULT 13 XDamageExtensionName + 27: 0000000000020078 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 28: 0000000000020080 24 OBJECT GLOBAL DEFAULT 23 XDamageExtensionInfo + 29: 0000000000000c60 0 FUNC GLOBAL DEFAULT 9 _init + 30: 0000000000020078 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 31: 0000000000020098 0 NOTYPE GLOBAL DEFAULT 23 _end + 32: 0000000000020098 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 33: 0000000000001534 224 FUNC GLOBAL DEFAULT 11 XDamageCreate + 34: 0000000000001614 156 FUNC GLOBAL DEFAULT 11 XDamageDestroy + 35: 00000000000016b0 184 FUNC GLOBAL DEFAULT 11 XDamageSubtract + 36: 0000000000020078 0 NOTYPE GLOBAL DEFAULT 22 _edata + 37: 0000000000001490 84 FUNC GLOBAL DEFAULT 11 XDamageQueryExtension + 38: 0000000000000fcc 748 FUNC GLOBAL DEFAULT 11 XDamageFindDisplay + 39: 00000000000014e4 80 FUNC GLOBAL DEFAULT 11 XDamageQueryVersion + 40: 0000000000020098 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 41: 0000000000001768 168 FUNC GLOBAL DEFAULT 11 XDamageAdd diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXext.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXext.so.6.txt new file mode 100644 index 000000000000..d752f316deb4 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXext.so.6.txt @@ -0,0 +1,209 @@ +Library: /lib64/libXext.so.6 +Package: libXext-1.3.3-3.el7.aarch64 + + +Symbol table '.dynsym' contains 203 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000003498 0 SECTION LOCAL DEFAULT 9 + 2: 000000000002fd50 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetEventToWire + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCreateFont + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEvent + 10: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetFreeGC + 13: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetFlushGC + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCreateGC + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XInitImageFuncPtrs + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XAllocScratch + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetVisualInfo + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCopyGC + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetErrorDatabaseText + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 29: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 30: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetBitsPerPixel + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryExtension + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetScanlinePad + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 38: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XIfEvent + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetFreeFont + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XVIDtoVisual + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetErrorString + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 47: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetError + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFlush + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 54: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 55: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFlushGCCache + 57: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 59: 000000000000b1e4 564 FUNC GLOBAL DEFAULT 11 XSyncAwait + 60: 0000000000004888 384 FUNC GLOBAL DEFAULT 11 XagCreateEmbeddedApplicationGroup + 61: 000000000000533c 1468 FUNC GLOBAL DEFAULT 11 XeviGetVisualInfo + 62: 000000000000ac7c 52 FUNC GLOBAL DEFAULT 11 XSyncValueGreaterOrEqual + 63: 000000000000a54c 16 FUNC GLOBAL DEFAULT 11 XSyncIntToValue + 64: 0000000000003498 0 FUNC GLOBAL DEFAULT 9 _init + 65: 0000000000003ffc 192 FUNC GLOBAL DEFAULT 11 DPMSDisable + 66: 000000000000b838 160 FUNC GLOBAL DEFAULT 11 XSyncValueSubtract + 67: 0000000000003f3c 192 FUNC GLOBAL DEFAULT 11 DPMSEnable + 68: 0000000000030818 4 OBJECT GLOBAL DEFAULT 24 XTestInputActionType + 69: 0000000000008c08 36 FUNC GLOBAL DEFAULT 11 XShmQueryExtension + 70: 0000000000003a90 328 FUNC GLOBAL DEFAULT 11 DPMSGetVersion + 71: 000000000000ba6c 348 FUNC GLOBAL DEFAULT 11 XTestFakeInput + 72: 000000000000cf78 264 FUNC GLOBAL DEFAULT 11 XdbeAllocateBackBufferName + 73: 00000000000041a4 320 FUNC GLOBAL DEFAULT 11 DPMSInfo + 74: 0000000000006540 464 FUNC GLOBAL DEFAULT 11 XmbufGetWindowAttributes + 75: 000000000000bbc8 216 FUNC GLOBAL DEFAULT 11 XTestGetInput + 76: 00000000000044a0 284 FUNC GLOBAL DEFAULT 11 XMITMiscGetBugMode + 77: 000000000000bd70 208 FUNC GLOBAL DEFAULT 11 XTestReset + 78: 000000000000b680 280 FUNC GLOBAL DEFAULT 11 XSyncChangeAlarm + 79: 000000000000d080 216 FUNC GLOBAL DEFAULT 11 XdbeDeallocateBackBufferName + 80: 000000000000ad10 8 FUNC GLOBAL DEFAULT 11 XSyncValueIsNegative + 81: 0000000000005a50 104 FUNC GLOBAL DEFAULT 11 XLbxQueryExtension + 82: 000000000000be40 272 FUNC GLOBAL DEFAULT 11 XTestQueryInputSize + 83: 0000000000009ff0 220 FUNC GLOBAL DEFAULT 11 XSyncTriggerFence + 84: 00000000000051f4 328 FUNC GLOBAL DEFAULT 11 XeviQueryVersion + 85: 0000000000006ac8 512 FUNC GLOBAL DEFAULT 11 XmbufGetScreenInfo + 86: 0000000000007b3c 84 FUNC GLOBAL DEFAULT 11 XShapeQueryExtension + 87: 000000000000ad40 8 FUNC GLOBAL DEFAULT 11 XSyncValueLow32 + 88: 000000000000a55c 12 FUNC GLOBAL DEFAULT 11 XSyncIntsToValue + 89: 000000000000b798 160 FUNC GLOBAL DEFAULT 11 XSyncValueAdd + 90: 00000000000074bc 828 FUNC GLOBAL DEFAULT 11 XSecurityGenerateAuthorization + 91: 0000000000003cf4 252 FUNC GLOBAL DEFAULT 11 DPMSSetTimeouts + 92: 0000000000007b90 328 FUNC GLOBAL DEFAULT 11 XShapeQueryVersion + 93: 0000000000009598 340 FUNC GLOBAL DEFAULT 11 XShmCreatePixmap + 94: 000000000000644c 244 FUNC GLOBAL DEFAULT 11 XmbufDisplayBuffers + 95: 0000000000030550 4 OBJECT GLOBAL DEFAULT 23 XTestFakeAckType + 96: 0000000000008100 272 FUNC GLOBAL DEFAULT 11 XShapeCombineShape + 97: 00000000000043cc 212 FUNC GLOBAL DEFAULT 11 XMITMiscSetBugMode + 98: 0000000000006234 352 FUNC GLOBAL DEFAULT 11 XmbufCreateBuffers + 99: 0000000000004c10 996 FUNC GLOBAL DEFAULT 11 XagGetApplicationGroupAttributes + 100: 0000000000003df0 332 FUNC GLOBAL DEFAULT 11 DPMSGetTimeouts + 101: 0000000000007368 324 FUNC GLOBAL DEFAULT 11 XSecurityQueryExtension + 102: 000000000000a934 340 FUNC GLOBAL DEFAULT 11 XSyncQueryCounter + 103: 000000000000dea0 624 FUNC GLOBAL DEFAULT 11 XextAddDisplay + 104: 0000000000009bd0 220 FUNC GLOBAL DEFAULT 11 XSyncDestroyAlarm + 105: 000000000000b0d8 268 FUNC GLOBAL DEFAULT 11 XSyncChangeCounter + 106: 00000000000051d0 36 FUNC GLOBAL DEFAULT 11 XeviQueryExtension + 107: 000000000000e34c 88 FUNC GLOBAL DEFAULT 11 XMissingExtension + 108: 0000000000006710 300 FUNC GLOBAL DEFAULT 11 XmbufChangeWindowAttributes + 109: 000000000000d460 728 FUNC GLOBAL DEFAULT 11 XdbeGetVisualInfo + 110: 000000000000aa88 396 FUNC GLOBAL DEFAULT 11 XSyncQueryAlarm + 111: 0000000000008c2c 44 FUNC GLOBAL DEFAULT 11 XShmGetEventBase + 112: 0000000000030670 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 113: 000000000000acb0 52 FUNC GLOBAL DEFAULT 11 XSyncValueLessOrEqual + 114: 000000000000e22c 236 FUNC GLOBAL DEFAULT 11 XextFindDisplay + 115: 0000000000030670 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 116: 00000000000082f0 468 FUNC GLOBAL DEFAULT 11 XShapeQueryExtents + 117: 0000000000008210 224 FUNC GLOBAL DEFAULT 11 XShapeOffsetShape + 118: 000000000000ce34 324 FUNC GLOBAL DEFAULT 11 XdbeQueryExtension + 119: 000000000000d738 60 FUNC GLOBAL DEFAULT 11 XdbeFreeVisualInfo + 120: 00000000000084c4 216 FUNC GLOBAL DEFAULT 11 XShapeSelectInput + 121: 0000000000004b38 216 FUNC GLOBAL DEFAULT 11 XagDestroyApplicationGroup + 122: 000000000000ddac 128 FUNC GLOBAL DEFAULT 11 XGEQueryVersion + 123: 000000000000a1a8 220 FUNC GLOBAL DEFAULT 11 XSyncDestroyFence + 124: 0000000000008c58 348 FUNC GLOBAL DEFAULT 11 XShmQueryVersion + 125: 000000000000b55c 292 FUNC GLOBAL DEFAULT 11 XSyncCreateAlarm + 126: 0000000000009cac 232 FUNC GLOBAL DEFAULT 11 XSyncSetPriority + 127: 000000000000ace4 44 FUNC GLOBAL DEFAULT 11 XSyncValueEqual + 128: 0000000000003a3c 84 FUNC GLOBAL DEFAULT 11 DPMSQueryExtension + 129: 000000000000a284 336 FUNC GLOBAL DEFAULT 11 XSyncQueryFence + 130: 0000000000005138 16 FUNC GLOBAL DEFAULT 11 XagCreateAssociation + 131: 000000000000ad34 12 FUNC GLOBAL DEFAULT 11 XSyncValueIsPositive + 132: 0000000000004ff4 324 FUNC GLOBAL DEFAULT 11 XagQueryApplicationGroup + 133: 000000000000e318 52 FUNC GLOBAL DEFAULT 11 XSetExtensionErrorHandler + 134: 000000000000683c 352 FUNC GLOBAL DEFAULT 11 XmbufGetBufferAttributes + 135: 000000000000b8ec 16 FUNC GLOBAL DEFAULT 11 XSyncMinValue + 136: 000000000000d2e0 192 FUNC GLOBAL DEFAULT 11 XdbeBeginIdiom + 137: 0000000000005148 8 FUNC GLOBAL DEFAULT 11 XagDestroyAssociation + 138: 000000000000c4bc 172 FUNC GLOBAL DEFAULT 11 XTestFlush + 139: 0000000000009d94 336 FUNC GLOBAL DEFAULT 11 XSyncGetPriority + 140: 0000000000004a08 304 FUNC GLOBAL DEFAULT 11 XagCreateNonembeddedApplicationGroup + 141: 000000000000920c 428 FUNC GLOBAL DEFAULT 11 XShmPutImage + 142: 00000000000074ac 12 FUNC GLOBAL DEFAULT 11 XSecurityAllocXauth + 143: 0000000000004734 340 FUNC GLOBAL DEFAULT 11 XagQueryVersion + 144: 0000000000009af4 220 FUNC GLOBAL DEFAULT 11 XSyncDestroyCounter + 145: 00000000000086d0 564 FUNC GLOBAL DEFAULT 11 XShapeGetRectangles + 146: 0000000000009ee4 268 FUNC GLOBAL DEFAULT 11 XSyncCreateFence + 147: 0000000000008ff8 220 FUNC GLOBAL DEFAULT 11 XShmDetach + 148: 000000000000afcc 268 FUNC GLOBAL DEFAULT 11 XSyncSetCounter + 149: 000000000000ac48 52 FUNC GLOBAL DEFAULT 11 XSyncValueLessThan + 150: 000000000000c2f4 20 FUNC GLOBAL DEFAULT 11 XTestPressButton + 151: 000000000000c308 436 FUNC GLOBAL DEFAULT 11 XTestMovePointer + 152: 0000000000030860 0 NOTYPE GLOBAL DEFAULT 24 _end + 153: 0000000000007cd8 464 FUNC GLOBAL DEFAULT 11 XShapeCombineRegion + 154: 000000000000ac14 52 FUNC GLOBAL DEFAULT 11 XSyncValueGreaterThan + 155: 0000000000005ae4 328 FUNC GLOBAL DEFAULT 11 XLbxQueryVersion + 156: 000000000000a3d4 376 FUNC GLOBAL DEFAULT 11 XSyncAwaitFence + 157: 0000000000030860 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 158: 000000000000e3a4 0 FUNC GLOBAL DEFAULT 12 _fini + 159: 0000000000007ea8 348 FUNC GLOBAL DEFAULT 11 XShapeCombineRectangles + 160: 000000000000de68 40 FUNC GLOBAL DEFAULT 11 XextCreateExtension + 161: 000000000000c9b0 812 FUNC GLOBAL DEFAULT 11 XcupStoreColors + 162: 000000000000d774 344 FUNC GLOBAL DEFAULT 11 XdbeGetBackBufferAttributes + 163: 00000000000077f8 216 FUNC GLOBAL DEFAULT 11 XSecurityRevokeAuthorization + 164: 0000000000030860 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 165: 0000000000006fb4 252 FUNC GLOBAL DEFAULT 11 XmbufClearBufferArea + 166: 0000000000005ab8 44 FUNC GLOBAL DEFAULT 11 XLbxGetEventBase + 167: 00000000000093b8 480 FUNC GLOBAL DEFAULT 11 XShmGetImage + 168: 0000000000030670 0 NOTYPE GLOBAL DEFAULT 23 _edata + 169: 000000000000bca0 208 FUNC GLOBAL DEFAULT 11 XTestStopInput + 170: 000000000000a0cc 220 FUNC GLOBAL DEFAULT 11 XSyncResetFence + 171: 0000000000008ef4 260 FUNC GLOBAL DEFAULT 11 XShmAttach + 172: 0000000000006cc8 748 FUNC GLOBAL DEFAULT 11 XmbufCreateStereoWindow + 173: 00000000000060ec 328 FUNC GLOBAL DEFAULT 11 XmbufGetVersion + 174: 000000000000d158 392 FUNC GLOBAL DEFAULT 11 XdbeSwapBuffers + 175: 000000000000d3a0 192 FUNC GLOBAL DEFAULT 11 XdbeEndIdiom + 176: 0000000000006394 184 FUNC GLOBAL DEFAULT 11 XmbufDestroyBuffers + 177: 000000000000dd48 100 FUNC GLOBAL DEFAULT 11 XGEQueryExtension + 178: 0000000000008004 252 FUNC GLOBAL DEFAULT 11 XShapeCombineMask + 179: 000000000000ad18 28 FUNC GLOBAL DEFAULT 11 XSyncValueIsZero + 180: 000000000000aedc 240 FUNC GLOBAL DEFAULT 11 XSyncCreateCounter + 181: 0000000000003bd8 284 FUNC GLOBAL DEFAULT 11 DPMSCapable + 182: 000000000000a6e0 596 FUNC GLOBAL DEFAULT 11 XSyncListSystemCounters + 183: 000000000000699c 300 FUNC GLOBAL DEFAULT 11 XmbufChangeBufferAttributes + 184: 000000000000c750 608 FUNC GLOBAL DEFAULT 11 XcupGetReservedColormapEntries + 185: 00000000000099dc 96 FUNC GLOBAL DEFAULT 11 XSyncQueryExtension + 186: 0000000000006098 84 FUNC GLOBAL DEFAULT 11 XmbufQueryExtension + 187: 0000000000030860 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 188: 0000000000004378 84 FUNC GLOBAL DEFAULT 11 XMITMiscQueryExtension + 189: 000000000000859c 308 FUNC GLOBAL DEFAULT 11 XShapeInputSelected + 190: 00000000000074b8 4 FUNC GLOBAL DEFAULT 11 XSecurityFreeXauth + 191: 00000000000090d4 312 FUNC GLOBAL DEFAULT 11 XShmCreateImage + 192: 00000000000040bc 232 FUNC GLOBAL DEFAULT 11 DPMSForceLevel + 193: 000000000000ad48 4 FUNC GLOBAL DEFAULT 11 XSyncValueHigh32 + 194: 000000000000c2dc 24 FUNC GLOBAL DEFAULT 11 XTestPressKey + 195: 0000000000009a3c 124 FUNC GLOBAL DEFAULT 11 XSyncInitialize + 196: 0000000000008db4 320 FUNC GLOBAL DEFAULT 11 XShmPixmapFormat + 197: 000000000000e110 284 FUNC GLOBAL DEFAULT 11 XextRemoveDisplay + 198: 0000000000030858 8 OBJECT GLOBAL DEFAULT 24 _XExtensionErrorFunction + 199: 0000000000009ab8 60 FUNC GLOBAL DEFAULT 11 XSyncFreeSystemCounterList + 200: 000000000000b8d8 20 FUNC GLOBAL DEFAULT 11 XSyncMaxValue + 201: 000000000000de90 16 FUNC GLOBAL DEFAULT 11 XextDestroyExtension + 202: 000000000000c5fc 340 FUNC GLOBAL DEFAULT 11 XcupQueryVersion diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXfixes.so.3.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXfixes.so.3.txt new file mode 100644 index 000000000000..020d78291fb4 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXfixes.so.3.txt @@ -0,0 +1,87 @@ +Library: /lib64/libXfixes.so.3 +Package: libXfixes-5.0.3-1.el7.aarch64 + + +Symbol table '.dynsym' contains 81 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001510 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd88 0 SECTION LOCAL DEFAULT 17 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetEventToWire + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEvent + 9: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 16: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 17: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 24: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 29: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 31: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 34: 0000000000002dd0 184 FUNC GLOBAL DEFAULT 11 XFixesTranslateRegion + 35: 0000000000002e88 168 FUNC GLOBAL DEFAULT 11 XFixesRegionExtents + 36: 00000000000030f8 68 FUNC GLOBAL DEFAULT 11 XFixesFetchRegion + 37: 0000000000003528 184 FUNC GLOBAL DEFAULT 11 XFixesSelectSelectionInput + 38: 0000000000003390 216 FUNC GLOBAL DEFAULT 11 XFixesExpandRegion + 39: 0000000000001e6c 280 FUNC GLOBAL DEFAULT 11 XFixesChangeCursorByName + 40: 0000000000003c80 80 FUNC GLOBAL DEFAULT 11 XFixesQueryVersion + 41: 0000000000003cd8 0 FUNC GLOBAL DEFAULT 12 _fini + 42: 0000000000002cfc 212 FUNC GLOBAL DEFAULT 11 XFixesInvertRegion + 43: 00000000000200f8 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 44: 00000000000024b4 204 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromBitmap + 45: 0000000000002898 404 FUNC GLOBAL DEFAULT 11 XFixesSetRegion + 46: 0000000000002308 428 FUNC GLOBAL DEFAULT 11 XFixesCreateRegion + 47: 00000000000027fc 156 FUNC GLOBAL DEFAULT 11 XFixesDestroyRegion + 48: 00000000000018b0 636 FUNC GLOBAL DEFAULT 11 XFixesGetCursorImage + 49: 0000000000001b2c 280 FUNC GLOBAL DEFAULT 11 XFixesSetCursorName + 50: 0000000000001808 168 FUNC GLOBAL DEFAULT 11 XFixesSelectCursorInput + 51: 0000000000002a2c 168 FUNC GLOBAL DEFAULT 11 XFixesCopyRegion + 52: 0000000000002b8c 184 FUNC GLOBAL DEFAULT 11 XFixesIntersectRegion + 53: 0000000000002260 168 FUNC GLOBAL DEFAULT 11 XFixesDestroyPointerBarrier + 54: 000000000000202c 168 FUNC GLOBAL DEFAULT 11 XFixesShowCursor + 55: 0000000000001f84 168 FUNC GLOBAL DEFAULT 11 XFixesHideCursor + 56: 00000000000200f8 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 57: 0000000000001c44 376 FUNC GLOBAL DEFAULT 11 XFixesGetCursorName + 58: 00000000000200d0 7 OBJECT GLOBAL DEFAULT 22 XFixesExtensionName + 59: 0000000000003cd0 8 FUNC GLOBAL DEFAULT 11 XFixesVersion + 60: 00000000000020d4 396 FUNC GLOBAL DEFAULT 11 XFixesCreatePointerBarrier + 61: 000000000000313c 196 FUNC GLOBAL DEFAULT 11 XFixesSetGCClipRegion + 62: 00000000000200d8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 63: 00000000000200f8 0 NOTYPE GLOBAL DEFAULT 23 _end + 64: 0000000000003c2c 84 FUNC GLOBAL DEFAULT 11 XFixesQueryExtension + 65: 0000000000003704 756 FUNC GLOBAL DEFAULT 11 XFixesFindDisplay + 66: 0000000000001dbc 176 FUNC GLOBAL DEFAULT 11 XFixesChangeCursor + 67: 0000000000003200 208 FUNC GLOBAL DEFAULT 11 XFixesSetWindowShapeRegion + 68: 0000000000002730 204 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromPicture + 69: 00000000000200e0 24 OBJECT GLOBAL DEFAULT 23 XFixesExtensionInfo + 70: 00000000000032d0 192 FUNC GLOBAL DEFAULT 11 XFixesSetPictureClipRegion + 71: 0000000000002f30 456 FUNC GLOBAL DEFAULT 11 XFixesFetchRegionAndBounds + 72: 00000000000200d8 0 NOTYPE GLOBAL DEFAULT 22 _edata + 73: 0000000000002c44 184 FUNC GLOBAL DEFAULT 11 XFixesSubtractRegion + 74: 0000000000002ad4 184 FUNC GLOBAL DEFAULT 11 XFixesUnionRegion + 75: 0000000000002660 208 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromGC + 76: 0000000000003468 192 FUNC GLOBAL DEFAULT 11 XFixesChangeSaveSet + 77: 0000000000002580 224 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromWindow + 78: 00000000000200f8 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 79: 0000000000001510 0 FUNC GLOBAL DEFAULT 9 _init + 80: 00000000000200d8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXi.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXi.so.6.txt new file mode 100644 index 000000000000..ed145353ee24 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXi.so.6.txt @@ -0,0 +1,141 @@ +Library: /lib64/libXi.so.6 +Package: libXi-1.7.9-1.el7.aarch64 + + +Symbol table '.dynsym' contains 135 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000020a0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd70 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCopyEventCookie + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XUnknownNativeEvent + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEventCookie + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextDestroyExtension + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetErrorDatabaseText + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 25: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 26: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryExtension + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextCreateExtension + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 36: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 39: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 42: 0000000000006d6c 364 FUNC GLOBAL DEFAULT 11 XSetDeviceValuators + 43: 000000000000406c 388 FUNC GLOBAL DEFAULT 11 XGetDeviceButtonMapping + 44: 000000000000b18c 28 FUNC GLOBAL DEFAULT 11 XIUngrabFocusIn + 45: 000000000000b478 788 FUNC GLOBAL DEFAULT 11 XIChangeProperty + 46: 000000000000a34c 84 FUNC GLOBAL DEFAULT 11 XIQueryVersion + 47: 000000000000c9ec 84 FUNC GLOBAL DEFAULT 11 XIBarrierReleasePointer + 48: 000000000000b14c 36 FUNC GLOBAL DEFAULT 11 XIUngrabKeycode + 49: 0000000000008b0c 44 FUNC GLOBAL DEFAULT 11 _xibadmode + 50: 00000000000057f0 4 FUNC GLOBAL DEFAULT 11 XFreeDeviceMotionEvents + 51: 0000000000006afc 4 FUNC GLOBAL DEFAULT 11 XFreeDeviceState + 52: 00000000000074ac 280 FUNC GLOBAL DEFAULT 11 XUngrabDeviceButton + 53: 000000000000b170 28 FUNC GLOBAL DEFAULT 11 XIUngrabEnter + 54: 0000000000008ae0 44 FUNC GLOBAL DEFAULT 11 _xibadevent + 55: 0000000000009e94 644 FUNC GLOBAL DEFAULT 11 XIGrabDevice + 56: 0000000000005d68 652 FUNC GLOBAL DEFAULT 11 XGetSelectedExtensionEvents + 57: 0000000000003238 336 FUNC GLOBAL DEFAULT 11 XChangeDeviceKeyMapping + 58: 000000000000c5b0 228 FUNC GLOBAL DEFAULT 11 XIDefineCursor + 59: 000000000000aff8 88 FUNC GLOBAL DEFAULT 11 XIGrabFocusIn + 60: 0000000000008ab4 44 FUNC GLOBAL DEFAULT 11 _xibadclass + 61: 000000000000af38 96 FUNC GLOBAL DEFAULT 11 XIGrabKeycode + 62: 0000000000006c00 364 FUNC GLOBAL DEFAULT 11 XSetDeviceButtonMapping + 63: 00000000000041f0 312 FUNC GLOBAL DEFAULT 11 XIGetClientPointer + 64: 000000000000ca40 0 FUNC GLOBAL DEFAULT 12 _fini + 65: 0000000000004ffc 420 FUNC GLOBAL DEFAULT 11 XGetDeviceModifierMapping + 66: 000000000000a774 228 FUNC GLOBAL DEFAULT 11 XISetFocus + 67: 0000000000008cb4 32 FUNC GLOBAL DEFAULT 11 _XiGetDevicePresenceNotifyEvent + 68: 0000000000002cf8 1088 FUNC GLOBAL DEFAULT 11 XChangeFeedbackControl + 69: 0000000000020250 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 70: 000000000000ba3c 836 FUNC GLOBAL DEFAULT 11 XISelectEvents + 71: 00000000000046cc 784 FUNC GLOBAL DEFAULT 11 XGetDeviceProperty + 72: 000000000000a118 208 FUNC GLOBAL DEFAULT 11 XIUngrabDevice + 73: 0000000000008b38 44 FUNC GLOBAL DEFAULT 11 _xidevicebusy + 74: 000000000000a3a0 908 FUNC GLOBAL DEFAULT 11 XIQueryDevice + 75: 00000000000020a0 0 FUNC GLOBAL DEFAULT 9 _init + 76: 000000000000af98 96 FUNC GLOBAL DEFAULT 11 XIGrabEnter + 77: 0000000000006ed8 300 FUNC GLOBAL DEFAULT 11 XSetDeviceModifierMapping + 78: 00000000000057f4 368 FUNC GLOBAL DEFAULT 11 XGrabDevice + 79: 0000000000020250 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 80: 0000000000009dd0 12 FUNC GLOBAL DEFAULT 11 XIAllowEvents + 81: 0000000000002888 1136 FUNC GLOBAL DEFAULT 11 XChangeDeviceControl + 82: 0000000000007004 268 FUNC GLOBAL DEFAULT 11 XSetDeviceMode + 83: 0000000000003388 284 FUNC GLOBAL DEFAULT 11 XChangePointerDevice + 84: 00000000000034a4 264 FUNC GLOBAL DEFAULT 11 XChangeDeviceDontPropagateList + 85: 0000000000002530 856 FUNC GLOBAL DEFAULT 11 XChangeDeviceProperty + 86: 000000000000b050 216 FUNC GLOBAL DEFAULT 11 XIGrabTouchBegin + 87: 00000000000049dc 1112 FUNC GLOBAL DEFAULT 11 XGetFeedbackControl + 88: 000000000000c270 832 FUNC GLOBAL DEFAULT 11 XIChangeHierarchy + 89: 000000000000545c 184 FUNC GLOBAL DEFAULT 11 XGetExtensionVersion + 90: 000000000000aed0 104 FUNC GLOBAL DEFAULT 11 XIGrabButton + 91: 00000000000051a0 444 FUNC GLOBAL DEFAULT 11 XGetDeviceDontPropagateList + 92: 000000000000c034 208 FUNC GLOBAL DEFAULT 11 XISetClientPointer + 93: 0000000000005c3c 300 FUNC GLOBAL DEFAULT 11 XGetDeviceFocus + 94: 0000000000006480 368 FUNC GLOBAL DEFAULT 11 XListDeviceProperties + 95: 0000000000006474 12 FUNC GLOBAL DEFAULT 11 XFreeDeviceList + 96: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 97: 0000000000005ff4 1152 FUNC GLOBAL DEFAULT 11 XListInputDevices + 98: 00000000000073d8 212 FUNC GLOBAL DEFAULT 11 XUngrabDevice + 99: 0000000000008a8c 40 FUNC GLOBAL DEFAULT 11 _xibaddevice + 100: 0000000000004e38 452 FUNC GLOBAL DEFAULT 11 XGetDeviceKeyMapping + 101: 0000000000005964 356 FUNC GLOBAL DEFAULT 11 XGrabDeviceButton + 102: 000000000000bd80 692 FUNC GLOBAL DEFAULT 11 XIGetSelectedEvents + 103: 0000000000009ddc 184 FUNC GLOBAL DEFAULT 11 XIAllowTouchEvents + 104: 000000000000b260 356 FUNC GLOBAL DEFAULT 11 XIListProperties + 105: 0000000000005ac8 372 FUNC GLOBAL DEFAULT 11 XGrabDeviceKey + 106: 000000000000a72c 72 FUNC GLOBAL DEFAULT 11 XIFreeDeviceInfo + 107: 0000000000005514 732 FUNC GLOBAL DEFAULT 11 XGetDeviceMotionEvents + 108: 0000000000004328 928 FUNC GLOBAL DEFAULT 11 XGetDeviceControl + 109: 0000000000007110 472 FUNC GLOBAL DEFAULT 11 XSendExtensionEvent + 110: 0000000000002448 232 FUNC GLOBAL DEFAULT 11 XAllowDeviceEvents + 111: 0000000000004e34 4 FUNC GLOBAL DEFAULT 11 XFreeFeedbackList + 112: 0000000000003738 240 FUNC GLOBAL DEFAULT 11 XDeviceBell + 113: 000000000000c694 8 FUNC GLOBAL DEFAULT 11 XIUndefineCursor + 114: 000000000000c6a0 584 FUNC GLOBAL DEFAULT 11 XIQueryPointer + 115: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 23 _edata + 116: 000000000000c8f0 252 FUNC GLOBAL DEFAULT 11 XIBarrierReleasePointers + 117: 00000000000065f0 440 FUNC GLOBAL DEFAULT 11 XOpenDevice + 118: 000000000000b128 36 FUNC GLOBAL DEFAULT 11 XIUngrabButton + 119: 0000000000006b00 256 FUNC GLOBAL DEFAULT 11 XSelectExtensionEvent + 120: 0000000000003680 184 FUNC GLOBAL DEFAULT 11 XDeleteDeviceProperty + 121: 000000000000c108 348 FUNC GLOBAL DEFAULT 11 XIWarpPointer + 122: 00000000000067a8 852 FUNC GLOBAL DEFAULT 11 XQueryDeviceState + 123: 0000000000020250 0 NOTYPE GLOBAL DEFAULT 24 _end + 124: 0000000000003138 256 FUNC GLOBAL DEFAULT 11 XChangeKeyboardDevice + 125: 000000000000a858 308 FUNC GLOBAL DEFAULT 11 XIGetFocus + 126: 0000000000020250 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 127: 00000000000046c8 4 FUNC GLOBAL DEFAULT 11 XFreeDeviceControl + 128: 00000000000035ac 212 FUNC GLOBAL DEFAULT 11 XCloseDevice + 129: 000000000000b3c4 180 FUNC GLOBAL DEFAULT 11 XIDeleteProperty + 130: 000000000000b78c 688 FUNC GLOBAL DEFAULT 11 XIGetProperty + 131: 000000000000b1a8 184 FUNC GLOBAL DEFAULT 11 XIUngrabTouchBegin + 132: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 133: 00000000000075c4 280 FUNC GLOBAL DEFAULT 11 XUngrabDeviceKey + 134: 00000000000072e8 240 FUNC GLOBAL DEFAULT 11 XSetDeviceFocus diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXrandr.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXrandr.so.2.txt new file mode 100644 index 000000000000..b740de2c8cd7 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXrandr.so.2.txt @@ -0,0 +1,119 @@ +Library: /lib64/libXrandr.so.2 +Package: libXrandr-1.5.1-2.el7.aarch64 + + +Symbol table '.dynsym' contains 113 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001c28 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd80 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XDeqAsyncHandler + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 19: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetSubpixelOrder + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetAsyncReply + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 29: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 31: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 34: 0000000000003e28 4 FUNC GLOBAL DEFAULT 11 XRRFreeGamma + 35: 000000000000488c 532 FUNC GLOBAL DEFAULT 11 XRRCreateMode + 36: 000000000000791c 860 FUNC GLOBAL DEFAULT 11 XRRGetMonitors + 37: 0000000000002624 72 FUNC GLOBAL DEFAULT 11 XRRRootToScreen + 38: 0000000000005b5c 796 FUNC GLOBAL DEFAULT 11 XRRGetOutputProperty + 39: 0000000000005718 896 FUNC GLOBAL DEFAULT 11 XRRChangeOutputProperty + 40: 0000000000004fb0 4 FUNC GLOBAL DEFAULT 11 XRRFreeOutputInfo + 41: 0000000000006430 8 FUNC GLOBAL DEFAULT 11 XRRGetScreenResources + 42: 0000000000007e6c 64 FUNC GLOBAL DEFAULT 11 XRRAllocateMonitor + 43: 0000000000003e2c 416 FUNC GLOBAL DEFAULT 11 XRRSetCrtcTransform + 44: 0000000000007600 796 FUNC GLOBAL DEFAULT 11 XRRGetProviderProperty + 45: 0000000000006870 688 FUNC GLOBAL DEFAULT 11 XRRGetProviderInfo + 46: 0000000000006b20 4 FUNC GLOBAL DEFAULT 11 XRRFreeProviderInfo + 47: 00000000000029f4 468 FUNC GLOBAL DEFAULT 11 XRRUpdateConfiguration + 48: 000000000000669c 464 FUNC GLOBAL DEFAULT 11 XRRGetProviderResources + 49: 0000000000004b58 196 FUNC GLOBAL DEFAULT 11 XRRAddOutputMode + 50: 0000000000005578 416 FUNC GLOBAL DEFAULT 11 XRRConfigureOutputProperty + 51: 0000000000005220 404 FUNC GLOBAL DEFAULT 11 XRRListOutputProperties + 52: 0000000000007eb0 0 FUNC GLOBAL DEFAULT 12 _fini + 53: 0000000000002ff8 16 FUNC GLOBAL DEFAULT 11 XRRConfigSizes + 54: 0000000000003604 12 FUNC GLOBAL DEFAULT 11 XRRSetScreenConfig + 55: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 56: 0000000000005a98 196 FUNC GLOBAL DEFAULT 11 XRRDeleteOutputProperty + 57: 0000000000003078 16 FUNC GLOBAL DEFAULT 11 XRRConfigCurrentConfiguration + 58: 0000000000003068 16 FUNC GLOBAL DEFAULT 11 XRRConfigTimes + 59: 0000000000007da8 196 FUNC GLOBAL DEFAULT 11 XRRDeleteMonitor + 60: 0000000000003fcc 1288 FUNC GLOBAL DEFAULT 11 XRRGetCrtcTransform + 61: 0000000000006e58 452 FUNC GLOBAL DEFAULT 11 XRRQueryProviderProperty + 62: 0000000000001c28 0 FUNC GLOBAL DEFAULT 9 _init + 63: 0000000000006444 356 FUNC GLOBAL DEFAULT 11 XRRGetScreenSizeRange + 64: 000000000000468c 4 FUNC GLOBAL DEFAULT 11 XRRFreePanning + 65: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 66: 000000000000701c 416 FUNC GLOBAL DEFAULT 11 XRRConfigureProviderProperty + 67: 00000000000026e4 412 FUNC GLOBAL DEFAULT 11 XRRQueryVersion + 68: 0000000000004aa0 184 FUNC GLOBAL DEFAULT 11 XRRDestroyMode + 69: 0000000000003088 8 FUNC GLOBAL DEFAULT 11 XRRConfigCurrentRate + 70: 0000000000003008 96 FUNC GLOBAL DEFAULT 11 XRRConfigRates + 71: 00000000000053b4 452 FUNC GLOBAL DEFAULT 11 XRRQueryOutputProperty + 72: 0000000000004ce4 716 FUNC GLOBAL DEFAULT 11 XRRGetOutputInfo + 73: 0000000000003090 200 FUNC GLOBAL DEFAULT 11 XRRRotations + 74: 0000000000004fb4 292 FUNC GLOBAL DEFAULT 11 XRRSetOutputPrimary + 75: 0000000000020160 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 76: 00000000000071bc 896 FUNC GLOBAL DEFAULT 11 XRRChangeProviderProperty + 77: 0000000000003384 140 FUNC GLOBAL DEFAULT 11 XRRGetScreenInfo + 78: 0000000000002fe8 16 FUNC GLOBAL DEFAULT 11 XRRConfigRotations + 79: 0000000000003858 4 FUNC GLOBAL DEFAULT 11 XRRFreeCrtcInfo + 80: 00000000000044d4 440 FUNC GLOBAL DEFAULT 11 XRRGetPanning + 81: 0000000000003158 184 FUNC GLOBAL DEFAULT 11 XRRSizes + 82: 0000000000006b24 208 FUNC GLOBAL DEFAULT 11 XRRSetProviderOutputSource + 83: 0000000000002928 204 FUNC GLOBAL DEFAULT 11 XRRSelectInput + 84: 00000000000032c0 196 FUNC GLOBAL DEFAULT 11 XRRTimes + 85: 0000000000020160 0 NOTYPE GLOBAL DEFAULT 23 _edata + 86: 0000000000003ad8 100 FUNC GLOBAL DEFAULT 11 XRRAllocGamma + 87: 00000000000039d8 256 FUNC GLOBAL DEFAULT 11 XRRGetCrtcGammaSize + 88: 0000000000007c78 304 FUNC GLOBAL DEFAULT 11 XRRSetMonitor + 89: 00000000000050d8 328 FUNC GLOBAL DEFAULT 11 XRRGetOutputPrimary + 90: 000000000000753c 196 FUNC GLOBAL DEFAULT 11 XRRDeleteProviderProperty + 91: 0000000000006438 8 FUNC GLOBAL DEFAULT 11 XRRGetScreenResourcesCurrent + 92: 00000000000065a8 244 FUNC GLOBAL DEFAULT 11 XRRSetScreenSize + 93: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 24 _end + 94: 0000000000007eac 4 FUNC GLOBAL DEFAULT 11 XRRFreeMonitors + 95: 0000000000003610 584 FUNC GLOBAL DEFAULT 11 XRRGetCrtcInfo + 96: 000000000000266c 84 FUNC GLOBAL DEFAULT 11 XRRQueryExtension + 97: 0000000000006440 4 FUNC GLOBAL DEFAULT 11 XRRFreeScreenResources + 98: 000000000000385c 380 FUNC GLOBAL DEFAULT 11 XRRSetCrtcConfig + 99: 0000000000003b3c 432 FUNC GLOBAL DEFAULT 11 XRRGetCrtcGamma + 100: 0000000000003410 4 FUNC GLOBAL DEFAULT 11 XRRFreeScreenConfigInfo + 101: 000000000000686c 4 FUNC GLOBAL DEFAULT 11 XRRFreeProviderResources + 102: 0000000000003210 176 FUNC GLOBAL DEFAULT 11 XRRRates + 103: 0000000000004690 380 FUNC GLOBAL DEFAULT 11 XRRSetPanning + 104: 0000000000004ce0 4 FUNC GLOBAL DEFAULT 11 XRRFreeModeInfo + 105: 0000000000004c1c 196 FUNC GLOBAL DEFAULT 11 XRRDeleteOutputMode + 106: 0000000000020180 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 107: 000000000000480c 128 FUNC GLOBAL DEFAULT 11 XRRAllocModeInfo + 108: 0000000000006cc4 404 FUNC GLOBAL DEFAULT 11 XRRListProviderProperties + 109: 0000000000003414 496 FUNC GLOBAL DEFAULT 11 XRRSetScreenConfigAndRate + 110: 0000000000003cec 316 FUNC GLOBAL DEFAULT 11 XRRSetCrtcGamma + 111: 0000000000006bf4 208 FUNC GLOBAL DEFAULT 11 XRRSetProviderOffloadSink + 112: 0000000000020160 0 NOTYPE GLOBAL DEFAULT 24 __bss_start diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXrender.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXrender.so.1.txt new file mode 100644 index 000000000000..aa480000265b --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXrender.so.1.txt @@ -0,0 +1,107 @@ +Library: /lib64/libXrender.so.1 +Package: libXrender-0.9.10-1.el7.aarch64 + + +Symbol table '.dynsym' contains 101 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001a08 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd88 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFlush + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XNextRequest + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XDeqAsyncHandler + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreePixmap + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFreeTemp + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XAllocTemp + 23: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 24: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetErrorHandler + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 27: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSync + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetAsyncReply + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XVIDtoVisual + 33: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 38: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 40: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 41: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XParseColor + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmap + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 45: 0000000000002dc4 208 FUNC GLOBAL DEFAULT 11 XRenderCreateGlyphSet + 46: 00000000000072d8 112 FUNC GLOBAL DEFAULT 11 XRenderQuerySubpixelOrder + 47: 00000000000049d4 340 FUNC GLOBAL DEFAULT 11 XRenderSetPictureClipRegion + 48: 00000000000022f0 232 FUNC GLOBAL DEFAULT 11 XRenderCreateCursor + 49: 0000000000005a20 644 FUNC GLOBAL DEFAULT 11 XRenderCompositeTrapezoids + 50: 0000000000002c50 372 FUNC GLOBAL DEFAULT 11 XRenderSetPictureFilter + 51: 00000000000076bc 532 FUNC GLOBAL DEFAULT 11 XRenderQueryPictIndexValues + 52: 0000000000007468 548 FUNC GLOBAL DEFAULT 11 XRenderFindFormat + 53: 0000000000004b28 236 FUNC GLOBAL DEFAULT 11 XRenderSetPictureTransform + 54: 00000000000078d0 0 FUNC GLOBAL DEFAULT 12 _fini + 55: 000000000000619c 652 FUNC GLOBAL DEFAULT 11 XRenderCompositeTriFan + 56: 0000000000004d98 616 FUNC GLOBAL DEFAULT 11 XRenderCreateLinearGradient + 57: 0000000000005f40 604 FUNC GLOBAL DEFAULT 11 XRenderCompositeTriStrip + 58: 0000000000020258 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 59: 000000000000388c 640 FUNC GLOBAL DEFAULT 11 XRenderCompositeString32 + 60: 00000000000021e0 272 FUNC GLOBAL DEFAULT 11 XRenderComposite + 61: 00000000000073c0 168 FUNC GLOBAL DEFAULT 11 XRenderFindVisualFormat + 62: 0000000000020240 24 OBJECT GLOBAL DEFAULT 24 XRenderExtensionInfo + 63: 0000000000005000 632 FUNC GLOBAL DEFAULT 11 XRenderCreateRadialGradient + 64: 0000000000002960 752 FUNC GLOBAL DEFAULT 11 XRenderQueryFilters + 65: 0000000000004858 200 FUNC GLOBAL DEFAULT 11 XRenderChangePicture + 66: 0000000000002710 592 FUNC GLOBAL DEFAULT 11 XRenderFillRectangles + 67: 0000000000004740 280 FUNC GLOBAL DEFAULT 11 XRenderCreatePicture + 68: 0000000000002f60 156 FUNC GLOBAL DEFAULT 11 XRenderFreeGlyphSet + 69: 0000000000002e94 204 FUNC GLOBAL DEFAULT 11 XRenderReferenceGlyphSet + 70: 0000000000020258 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 71: 000000000000768c 48 FUNC GLOBAL DEFAULT 11 XRenderFindStandardFormat + 72: 00000000000054e8 1320 FUNC GLOBAL DEFAULT 11 XRenderCompositeDoublePoly + 73: 0000000000004150 796 FUNC GLOBAL DEFAULT 11 XRenderCompositeText32 + 74: 0000000000003600 652 FUNC GLOBAL DEFAULT 11 XRenderCompositeString16 + 75: 00000000000023d8 376 FUNC GLOBAL DEFAULT 11 XRenderCreateAnimCursor + 76: 0000000000007260 120 FUNC GLOBAL DEFAULT 11 XRenderQueryVersion + 77: 0000000000003224 352 FUNC GLOBAL DEFAULT 11 XRenderFreeGlyphs + 78: 0000000000003b0c 792 FUNC GLOBAL DEFAULT 11 XRenderCompositeText8 + 79: 0000000000005ca4 668 FUNC GLOBAL DEFAULT 11 XRenderCompositeTriangles + 80: 00000000000065bc 1024 FUNC GLOBAL DEFAULT 11 XRenderFindDisplay + 81: 0000000000007348 120 FUNC GLOBAL DEFAULT 11 XRenderSetSubpixelOrder + 82: 0000000000020230 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 83: 0000000000001dc8 564 FUNC GLOBAL DEFAULT 11 XRenderAddTraps + 84: 0000000000005278 608 FUNC GLOBAL DEFAULT 11 XRenderCreateConicalGradient + 85: 0000000000004920 180 FUNC GLOBAL DEFAULT 11 XRenderSetPictureClipRectangles + 86: 0000000000020258 0 NOTYPE GLOBAL DEFAULT 24 _end + 87: 0000000000003384 636 FUNC GLOBAL DEFAULT 11 XRenderCompositeString8 + 88: 0000000000006b04 84 FUNC GLOBAL DEFAULT 11 XRenderQueryExtension + 89: 0000000000003e24 812 FUNC GLOBAL DEFAULT 11 XRenderCompositeText16 + 90: 0000000000020230 0 NOTYPE GLOBAL DEFAULT 23 _edata + 91: 0000000000004cb0 232 FUNC GLOBAL DEFAULT 11 XRenderCreateSolidFill + 92: 0000000000004c14 156 FUNC GLOBAL DEFAULT 11 XRenderFreePicture + 93: 0000000000002ffc 552 FUNC GLOBAL DEFAULT 11 XRenderAddGlyphs + 94: 0000000000002550 448 FUNC GLOBAL DEFAULT 11 XRenderFillRectangle + 95: 0000000000001ffc 484 FUNC GLOBAL DEFAULT 11 XRenderParseColor + 96: 0000000000020258 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 97: 0000000000001a08 0 FUNC GLOBAL DEFAULT 9 _init + 98: 0000000000020230 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 99: 0000000000006b58 1800 FUNC GLOBAL DEFAULT 11 XRenderQueryFormats + 100: 0000000000020228 7 OBJECT GLOBAL DEFAULT 23 XRenderExtensionName diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXtst.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXtst.so.6.txt new file mode 100644 index 000000000000..50ff666fbaf2 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXtst.so.6.txt @@ -0,0 +1,79 @@ +Library: /lib64/libXtst.so.6 +Package: libXtst-1.2.3-1.el7.aarch64 + + +Symbol table '.dynsym' contains 73 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001400 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd88 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 4: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 6: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XPending + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XDeqAsyncHandler + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetErrorDatabaseText + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 20: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 21: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryExtension + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetAsyncData + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextCreateExtension + 30: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 31: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 35: 00000000000037c4 8 FUNC GLOBAL DEFAULT 11 XTestCompareCurrentCursorWithWindow + 36: 00000000000021cc 352 FUNC GLOBAL DEFAULT 11 XRecordQueryVersion + 37: 0000000000004348 0 FUNC GLOBAL DEFAULT 12 _fini + 38: 0000000000002708 172 FUNC GLOBAL DEFAULT 11 XRecordFreeState + 39: 0000000000003b14 272 FUNC GLOBAL DEFAULT 11 XTestFakeRelativeMotionEvent + 40: 00000000000201e8 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 41: 0000000000002ba4 356 FUNC GLOBAL DEFAULT 11 XRecordFreeData + 42: 00000000000041bc 216 FUNC GLOBAL DEFAULT 11 XTestGrabControl + 43: 00000000000042a4 164 FUNC GLOBAL DEFAULT 11 XTestDiscard + 44: 000000000000352c 352 FUNC GLOBAL DEFAULT 11 XTestQueryExtension + 45: 00000000000038d8 268 FUNC GLOBAL DEFAULT 11 XTestFakeButtonEvent + 46: 00000000000037cc 268 FUNC GLOBAL DEFAULT 11 XTestFakeKeyEvent + 47: 0000000000002ef4 520 FUNC GLOBAL DEFAULT 11 XRecordEnableContextAsync + 48: 000000000000368c 312 FUNC GLOBAL DEFAULT 11 XTestCompareCursorWithWindow + 49: 0000000000003f00 360 FUNC GLOBAL DEFAULT 11 XTestFakeProximityEvent + 50: 00000000000201e8 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 51: 0000000000002488 360 FUNC GLOBAL DEFAULT 11 XRecordRegisterClients + 52: 00000000000031d8 216 FUNC GLOBAL DEFAULT 11 XRecordFreeContext + 53: 00000000000039e4 304 FUNC GLOBAL DEFAULT 11 XTestFakeMotionEvent + 54: 00000000000025f0 280 FUNC GLOBAL DEFAULT 11 XRecordUnregisterClients + 55: 0000000000002d08 492 FUNC GLOBAL DEFAULT 11 XRecordEnableContext + 56: 0000000000003100 216 FUNC GLOBAL DEFAULT 11 XRecordDisableContext + 57: 000000000000232c 336 FUNC GLOBAL DEFAULT 11 XRecordCreateContext + 58: 000000000000247c 12 FUNC GLOBAL DEFAULT 11 XRecordAllocRange + 59: 00000000000201a8 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 60: 0000000000004068 340 FUNC GLOBAL DEFAULT 11 XTestFakeDeviceMotionEvent + 61: 0000000000003d90 368 FUNC GLOBAL DEFAULT 11 XTestFakeDeviceButtonEvent + 62: 00000000000201e8 0 NOTYPE GLOBAL DEFAULT 24 _end + 63: 00000000000021bc 16 FUNC GLOBAL DEFAULT 11 XRecordIdBaseMask + 64: 0000000000004294 8 FUNC GLOBAL DEFAULT 11 XTestSetGContextOfGC + 65: 00000000000030fc 4 FUNC GLOBAL DEFAULT 11 XRecordProcessReplies + 66: 000000000000429c 8 FUNC GLOBAL DEFAULT 11 XTestSetVisualIDOfVisual + 67: 00000000000201a8 0 NOTYPE GLOBAL DEFAULT 23 _edata + 68: 00000000000201e8 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 69: 0000000000001400 0 FUNC GLOBAL DEFAULT 9 _init + 70: 00000000000201a8 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 71: 0000000000003c24 364 FUNC GLOBAL DEFAULT 11 XTestFakeDeviceKeyEvent + 72: 00000000000027b4 1008 FUNC GLOBAL DEFAULT 11 XRecordGetContext diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXxf86vm.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXxf86vm.so.1.txt new file mode 100644 index 000000000000..88838648df1c --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libXxf86vm.so.1.txt @@ -0,0 +1,62 @@ +Library: /lib64/libXxf86vm.so.1 +Package: libXxf86vm-1.1.4-1.el7.aarch64 + + +Symbol table '.dynsym' contains 56 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000fa8 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fda0 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFlush + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextCreateExtension + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 22: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 25: 0000000000020120 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 26: 000000000000307c 404 FUNC GLOBAL DEFAULT 11 XF86VidModeGetViewPort + 27: 0000000000001670 368 FUNC GLOBAL DEFAULT 11 XF86VidModeGetGamma + 28: 0000000000003a68 0 FUNC GLOBAL DEFAULT 12 _fini + 29: 0000000000020100 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 30: 00000000000012cc 76 FUNC GLOBAL DEFAULT 11 XF86VidModeQueryExtension + 31: 000000000000330c 456 FUNC GLOBAL DEFAULT 11 XF86VidModeGetDotClocks + 32: 0000000000000fa8 0 FUNC GLOBAL DEFAULT 9 _init + 33: 0000000000002164 624 FUNC GLOBAL DEFAULT 11 XF86VidModeDeleteModeLine + 34: 0000000000020100 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 35: 0000000000003210 252 FUNC GLOBAL DEFAULT 11 XF86VidModeSetViewPort + 36: 0000000000020120 0 NOTYPE GLOBAL DEFAULT 24 _end + 37: 0000000000020120 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 38: 0000000000001de0 900 FUNC GLOBAL DEFAULT 11 XF86VidModeAddModeLine + 39: 00000000000013e8 348 FUNC GLOBAL DEFAULT 11 XF86VidModeQueryVersion + 40: 0000000000001a58 904 FUNC GLOBAL DEFAULT 11 XF86VidModeGetAllModeLines + 41: 0000000000001544 288 FUNC GLOBAL DEFAULT 11 XF86VidModeSetGamma + 42: 0000000000003634 416 FUNC GLOBAL DEFAULT 11 XF86VidModeGetGammaRamp + 43: 00000000000017e4 628 FUNC GLOBAL DEFAULT 11 XF86VidModeGetModeLine + 44: 00000000000029cc 676 FUNC GLOBAL DEFAULT 11 XF86VidModeSwitchToMode + 45: 0000000000020100 0 NOTYPE GLOBAL DEFAULT 23 _edata + 46: 00000000000037d4 332 FUNC GLOBAL DEFAULT 11 XF86VidModeGetGammaRampSize + 47: 0000000000002d54 804 FUNC GLOBAL DEFAULT 11 XF86VidModeGetMonitor + 48: 00000000000023d4 608 FUNC GLOBAL DEFAULT 11 XF86VidModeModModeLine + 49: 00000000000028e8 228 FUNC GLOBAL DEFAULT 11 XF86VidModeSwitchMode + 50: 0000000000002c70 228 FUNC GLOBAL DEFAULT 11 XF86VidModeLockModeSwitch + 51: 0000000000002634 692 FUNC GLOBAL DEFAULT 11 XF86VidModeValidateModeLine + 52: 0000000000020120 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 53: 00000000000034d4 352 FUNC GLOBAL DEFAULT 11 XF86VidModeSetGammaRamp + 54: 0000000000001318 208 FUNC GLOBAL DEFAULT 11 XF86VidModeSetClientVersion + 55: 0000000000003920 328 FUNC GLOBAL DEFAULT 11 XF86VidModeGetPermissions diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libasound.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libasound.so.2.txt new file mode 100644 index 000000000000..7d167f293582 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libasound.so.2.txt @@ -0,0 +1,1850 @@ +Library: /lib64/libasound.so.2 +Package: alsa-lib-1.1.8-1.el7.aarch64 + + +Symbol table '.dynsym' contains 1844 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000002cf80 0 SECTION LOCAL DEFAULT 10 + 2: 0000000000109f10 0 SECTION LOCAL DEFAULT 17 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (10) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (10) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.17 (10) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.17 (11) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtok@GLIBC_2.17 (10) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (10) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (10) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.17 (11) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (10) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (10) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (10) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dladdr@GLIBC_2.17 (12) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.17 (10) + 16: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.17 (10) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strnlen@GLIBC_2.17 (10) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.17 (10) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semctl@GLIBC_2.17 (10) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.17 (11) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.17 (10) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semget@GLIBC_2.17 (10) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.17 (10) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.17 (11) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftell@GLIBC_2.17 (10) + 27: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (10) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (10) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.17 (10) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (10) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (10) + 32: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (10) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (10) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.17 (12) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.17 (10) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.17 (11) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.17 (11) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.17 (11) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (10) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.17 (12) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND snprintf@GLIBC_2.17 (10) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND log10@GLIBC_2.17 (13) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.17 (10) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.17 (10) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.17 (10) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrt@GLIBC_2.17 (13) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (10) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.17 (10) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (10) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (10) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semop@GLIBC_2.17 (10) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (10) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (10) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.17 (10) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (10) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (10) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlerror@GLIBC_2.17 (12) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.17 (10) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.17 (12) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrtf@GLIBC_2.17 (13) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (11) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.17 (10) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (10) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND popen@GLIBC_2.17 (10) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.17 (10) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.17 (11) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (10) + 68: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.17 (10) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.17 (10) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (10) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (10) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.17 (10) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.17 (11) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.17 (10) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.17 (11) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (10) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (10) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (10) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (10) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.17 (10) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (10) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND system@GLIBC_2.17 (11) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (10) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND versionsort@GLIBC_2.17 (10) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (10) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (10) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (11) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (11) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.17 (11) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (10) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.17 (11) + 92: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 93: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (14) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (11) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.17 (11) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.17 (10) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.17 (10) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (10) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.17 (10) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (10) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pow@GLIBC_2.17 (13) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (10) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (10) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (10) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.17 (10) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uselocale@GLIBC_2.17 (10) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freelocale@GLIBC_2.17 (10) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (10) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrnam_r@GLIBC_2.17 (10) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (10) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (10) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.17 (10) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmget@GLIBC_2.17 (10) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND scandir@GLIBC_2.17 (10) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.17 (11) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.17 (10) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.17 (10) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nanosleep@GLIBC_2.17 (11) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.17 (11) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (11) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (10) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __isoc99_vfscanf@GLIBC_2.17 (10) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (10) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (11) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (10) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (10) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (10) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND log@GLIBC_2.17 (13) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (11) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (10) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.17 (11) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mlock@GLIBC_2.17 (10) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (11) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.17 (10) + 135: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __poll_chk@GLIBC_2.17 (10) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (10) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsid@GLIBC_2.17 (10) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (10) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND usleep@GLIBC_2.17 (10) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __isoc99_sscanf@GLIBC_2.17 (10) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exp@GLIBC_2.17 (13) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socketpair@GLIBC_2.17 (10) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (10) + 145: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.17 (11) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (10) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (11) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (10) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (10) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chown@GLIBC_2.17 (10) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (11) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (11) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.17 (11) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (10) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND newlocale@GLIBC_2.17 (10) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (10) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __open_2@GLIBC_2.17 (10) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.17 (10) + 160: 00000000000ab920 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_open_rom_file@@ALSA_0.9 + 161: 000000000003ba54 68 FUNC GLOBAL DEFAULT 12 snd_dlsym@@ALSA_0.9 + 162: 00000000000a7bf4 8 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_sizeof@@ALSA_0.9 + 163: 0000000000032830 80 FUNC GLOBAL DEFAULT 12 snd_config_test_id@@ALSA_0.9 + 164: 0000000000035860 1564 FUNC GLOBAL DEFAULT 12 snd_config_hook_load@@ALSA_0.9 + 165: 000000000004d518 8 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_sizeof@@ALSA_0.9 + 166: 00000000000a3514 116 FUNC GLOBAL DEFAULT 12 snd_hwdep_close@@ALSA_0.9 + 167: 000000000004a828 116 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_new@@ALSA_0.9 + 168: 0000000000043100 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_id@@ALSA_0.9 + 169: 000000000004b670 60 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_get_callback_private@@ALSA_0.9 + 170: 000000000003c440 108 FUNC GLOBAL DEFAULT 12 snd_card_load@@ALSA_0.9 + 171: 000000000011186f 1 OBJECT GLOBAL DEFAULT 26 _snd_func_private_string_dlsym_config_evaluate_001@@ALSA_0.9 + 172: 000000000009d4d8 164 FUNC GLOBAL DEFAULT 12 snd_timer_poll_descriptors@@ALSA_0.9 + 173: 00000000000ab29c 12 FUNC GLOBAL DEFAULT 12 snd_midi_event_reset_decode@@ALSA_0.9 + 174: 0000000000043270 96 FUNC GLOBAL DEFAULT 12 snd_ctl_event_malloc@@ALSA_0.9 + 175: 0000000000065f44 164 FUNC GLOBAL DEFAULT 12 snd_pcm_format_size@@ALSA_0.9 + 176: 000000000004ac3c 64 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_value@@ALSA_0.9 + 177: 00000000000a363c 164 FUNC GLOBAL DEFAULT 12 snd_hwdep_poll_descriptors@@ALSA_0.9 + 178: 00000000000ab8f8 8 FUNC GLOBAL DEFAULT 12 snd_instr_fm_free@@ALSA_0.9 + 179: 000000000004cb18 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_capture_switch@@ALSA_0.9 + 180: 00000000000578a8 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_access_last@@ALSA_0.9 + 181: 00000000000584ec 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9 + 182: 00000000000a79cc 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_set_queue@@ALSA_0.9 + 183: 000000000005cacc 420 FUNC GLOBAL DEFAULT 12 snd_pcm_chmap_print@@ALSA_0.9 + 184: 000000000003fc14 8 FUNC GLOBAL DEFAULT 12 snd_hctl_ctl@@ALSA_0.9 + 185: 00000000000a7654 20 FUNC GLOBAL DEFAULT 12 snd_seq_get_port_info@@ALSA_0.9 + 186: 00000000000840d0 160 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_search_scope@@ALSA_0.9 + 187: 0000000000057ad8 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_channels_near@@ALSA_0.9 + 188: 0000000000043350 60 FUNC GLOBAL DEFAULT 12 snd_ctl_event_get_type@@ALSA_0.9 + 189: 000000000009c9b8 500 FUNC GLOBAL DEFAULT 12 _snd_pcm_mmap_emul_open@@ALSA_0.9 + 190: 0000000000043fe8 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_item_name@@ALSA_0.9 + 191: 000000000003f288 60 FUNC GLOBAL DEFAULT 12 snd_hctl_async@@ALSA_0.9 + 192: 00000000000a67f4 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_name@@ALSA_0.9 + 193: 0000000000040520 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_name@@ALSA_0.9 + 194: 0000000000056738 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_dump@@ALSA_0.9 + 195: 0000000000056930 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_is_block_transfer@@ALSA_0.9 + 196: 00000000000a76c4 72 FUNC GLOBAL DEFAULT 12 snd_seq_query_next_port@@ALSA_0.9 + 197: 0000000000057a4c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels_min@@ALSA_0.9.0rc4 + 198: 000000000005b780 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels_min@ALSA_0.9 + 199: 0000000000098b78 1524 FUNC GLOBAL DEFAULT 12 _snd_pcm_softvol_open@@ALSA_0.9 + 200: 0000000000043528 152 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_id@@ALSA_0.9 + 201: 0000000000031048 124 FUNC GLOBAL DEFAULT 12 snd_config_topdir@@ALSA_0.9 + 202: 000000000004bde0 100 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_is_active@@ALSA_0.9 + 203: 000000000003f2c4 60 FUNC GLOBAL DEFAULT 12 snd_hctl_poll_descriptors_count@@ALSA_0.9 + 204: 00000000000a651c 60 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_get_queues@@ALSA_0.9 + 205: 0000000000057a94 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_min@@ALSA_0.9 + 206: 000000000009da40 96 FUNC GLOBAL DEFAULT 12 snd_timer_params_malloc@@ALSA_0.9 + 207: 000000000004b320 80 FUNC GLOBAL DEFAULT 12 snd_mixer_first_elem@@ALSA_0.9 + 208: 00000000000ab8d8 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_cluster@@ALSA_0.9 + 209: 00000000000a5e14 60 FUNC GLOBAL DEFAULT 12 snd_seq_name@@ALSA_0.9 + 210: 0000000000038ba0 8 FUNC GLOBAL DEFAULT 12 snd_func_iadd@@ALSA_0.9 + 211: 0000000000031c74 164 FUNC GLOBAL DEFAULT 12 snd_config_make@@ALSA_0.9 + 212: 00000000000ab894 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_cmd@@ALSA_0.9 + 213: 0000000000043074 12 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_clear@@ALSA_0.9 + 214: 0000000000044620 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_numid@@ALSA_0.9 + 215: 00000000000b2640 188 FUNC GLOBAL DEFAULT 12 snd_tplg_free@@ALSA_0.9 + 216: 00000000000328d8 132 FUNC GLOBAL DEFAULT 12 snd_config_update_free@@ALSA_0.9 + 217: 00000000000a90e8 80 FUNC GLOBAL DEFAULT 12 snd_seq_set_queue_timer@@ALSA_0.9 + 218: 000000000004a52c 8 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_empty@@ALSA_0.9 + 219: 00000000000b2390 308 FUNC GLOBAL DEFAULT 12 snd_tplg_build@@ALSA_0.9 + 220: 000000000003acdc 28 FUNC GLOBAL DEFAULT 12 snd_output_flush@@ALSA_0.9 + 221: 00000000000a8c0c 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_get_skew_base@@ALSA_0.9 + 222: 000000000006617c 84 FUNC GLOBAL DEFAULT 12 snd_pcm_format_silence_16@@ALSA_0.9 + 223: 00000000000a1280 188 FUNC GLOBAL DEFAULT 12 snd_rawmidi_open@@ALSA_0.9 + 224: 0000000000111886 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_lfloat_open_dlsym_pcm_001@@ALSA_0.9 + 225: 00000000000a6d24 96 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_malloc@@ALSA_0.9 + 226: 0000000000044b00 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_byte@@ALSA_0.9 + 227: 0000000000099ed4 60 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_params_reset@@ALSA_0.9 + 228: 00000000000a06f0 8 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_sizeof@@ALSA_0.9 + 229: 000000000009f5a4 96 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_malloc@@ALSA_0.9 + 230: 000000000009e080 60 FUNC GLOBAL DEFAULT 12 snd_timer_status_get_lost@@ALSA_0.9 + 231: 0000000000055ac0 332 FUNC GLOBAL DEFAULT 12 snd_pcm_avail_delay@@ALSA_0.9 + 232: 0000000000031fe0 84 FUNC GLOBAL DEFAULT 12 snd_config_set_pointer@@ALSA_0.9 + 233: 000000000009d7b8 8 FUNC GLOBAL DEFAULT 12 snd_timer_info_sizeof@@ALSA_0.9 + 234: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9 + 235: 00000000000ab8a4 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_name@@ALSA_0.9 + 236: 000000000009d57c 96 FUNC GLOBAL DEFAULT 12 snd_timer_poll_descriptors_revents@@ALSA_0.9 + 237: 00000000000ab288 20 FUNC GLOBAL DEFAULT 12 snd_midi_event_reset_encode@@ALSA_0.9 + 238: 00000000000a1640 68 FUNC GLOBAL DEFAULT 12 snd_rawmidi_drop@@ALSA_0.9 + 239: 000000000005820c 108 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_period_size_near@@ALSA_0.9 + 240: 00000000000a8f40 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_get_id@@ALSA_0.9 + 241: 00000000000a6e44 56 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_addr@@ALSA_0.9 + 242: 00000000000442c4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_index@@ALSA_0.9 + 243: 000000000004bffc 164 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_volume_range@@ALSA_0.9 + 244: 00000000000568ac 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_is_batch@@ALSA_0.9 + 245: 000000000004b9c8 240 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_register@@ALSA_0.9 + 246: 000000000004bb94 148 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_id@@ALSA_0.9 + 247: 0000000000111879 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_alaw_open_dlsym_pcm_001@@ALSA_0.9 + 248: 000000000004b370 88 FUNC GLOBAL DEFAULT 12 snd_mixer_last_elem@@ALSA_0.9 + 249: 000000000009bdf8 456 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_create@@ALSA_0.9 + 250: 00000000000a35c4 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_type@@ALSA_0.9 + 251: 000000000004d120 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_switch@@ALSA_0.9 + 252: 00000000000373b4 156 FUNC GLOBAL DEFAULT 12 snd_config_update_ref@@ALSA_0.9 + 253: 000000000003bfd0 268 FUNC GLOBAL DEFAULT 12 snd_receive_fd@@ALSA_0.9 + 254: 000000000011188b 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_asym_open_dlsym_pcm_001@@ALSA_0.9 + 255: 00000000000405d4 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_set_callback_private@@ALSA_0.9 + 256: 000000000004c3f8 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_playback_switch@@ALSA_0.9 + 257: 000000000005704c 48 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_any@@ALSA_0.9 + 258: 00000000000781dc 464 FUNC GLOBAL DEFAULT 12 snd_pcm_plug_open@@ALSA_0.9 + 259: 000000000003c14c 116 FUNC GLOBAL DEFAULT 12 snd_shm_area_destroy@@ALSA_0.9 + 260: 0000000000041c68 72 FUNC GLOBAL DEFAULT 12 snd_ctl_rawmidi_info@@ALSA_0.9 + 261: 000000000003f5cc 88 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_prev@@ALSA_0.9 + 262: 000000000004a49c 144 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_detach@@ALSA_0.9 + 263: 0000000000041a2c 72 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_lock@@ALSA_0.9 + 264: 00000000000596a0 84 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_tstamp@@ALSA_0.9 + 265: 000000000003f9cc 60 FUNC GLOBAL DEFAULT 12 snd_hctl_get_callback_private@@ALSA_0.9 + 266: 00000000000924b8 152 FUNC GLOBAL DEFAULT 12 snd_pcm_direct_poll_descriptors@@ALSA_0.9 + 267: 00000000000a9b7c 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_channel@@ALSA_0.9 + 268: 000000000004d654 80 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_set_name@@ALSA_0.9 + 269: 00000000000ab880 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_copy@@ALSA_0.9 + 270: 00000000000a223c 436 FUNC GLOBAL DEFAULT 12 _snd_rawmidi_hw_open@@ALSA_0.9 + 271: 00000000000a9bf4 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_tag@@ALSA_0.9 + 272: 0000000000059a20 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_device@@ALSA_0.9 + 273: 0000000000043010 96 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_malloc@@ALSA_0.9 + 274: 0000000000053db4 120 FUNC GLOBAL DEFAULT 12 snd_pcm_link@@ALSA_0.9 + 275: 00000000000a7714 96 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_malloc@@ALSA_0.9 + 276: 0000000000057eac 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time@@ALSA_0.9 + 277: 00000000000aa214 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_get_output_room@@ALSA_0.9 + 278: 0000000000059220 8 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_xfer_align@@ALSA_0.9 + 279: 0000000000052b5c 120 FUNC GLOBAL DEFAULT 12 snd_pcm_async@@ALSA_0.9 + 280: 0000000000036d9c 1468 FUNC GLOBAL DEFAULT 12 snd_config_update_r@@ALSA_0.9 + 281: 00000000000a91b0 244 FUNC GLOBAL DEFAULT 12 snd_seq_event_output_buffer@@ALSA_0.9 + 282: 0000000000065e90 16 FUNC GLOBAL DEFAULT 12 snd_pcm_format_float@@ALSA_0.9 + 283: 00000000000a03f0 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_stream@@ALSA_0.9 + 284: 00000000000a9f2c 136 FUNC GLOBAL DEFAULT 12 snd_seq_drop_input@@ALSA_0.9 + 285: 00000000000a4028 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_get_index@@ALSA_0.9 + 286: 0000000000057420 76 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_copy@@ALSA_0.9 + 287: 0000000000057be0 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_last@@ALSA_0.9.0rc4 + 288: 000000000005c410 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_last@ALSA_0.9 + 289: 000000000004444c 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_name@@ALSA_0.9 + 290: 0000000000058180 140 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_minmax@@ALSA_0.9 + 291: 00000000000588f8 12 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_tick_time@@ALSA_0.9 + 292: 000000000004b508 60 FUNC GLOBAL DEFAULT 12 snd_mixer_set_callback@@ALSA_0.9 + 293: 0000000000111608 8 OBJECT GLOBAL DEFAULT 25 snd_err_msg@@ALSA_0.9 + 294: 00000000000387a4 208 FUNC GLOBAL DEFAULT 12 snd_func_igetenv@@ALSA_0.9 + 295: 0000000000043394 96 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_malloc@@ALSA_0.9 + 296: 000000000004b814 60 FUNC GLOBAL DEFAULT 12 snd_mixer_class_get_event@@ALSA_0.9 + 297: 0000000000057b1c 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_rate_min@@ALSA_0.9 + 298: 0000000000046918 2448 FUNC GLOBAL DEFAULT 12 snd_sctl_build@@ALSA_0.9 + 299: 0000000000054d40 136 FUNC GLOBAL DEFAULT 12 snd_pcm_bytes_to_frames@@ALSA_0.9 + 300: 000000000009d9cc 108 FUNC GLOBAL DEFAULT 12 snd_timer_info@@ALSA_0.9 + 301: 00000000000aa604 196 FUNC GLOBAL DEFAULT 12 snd_seq_create_simple_port@@ALSA_0.9 + 302: 000000000003295c 68 FUNC GLOBAL DEFAULT 12 snd_config_iterator_first@@ALSA_0.9 + 303: 0000000000040d00 60 FUNC GLOBAL DEFAULT 12 snd_ctl_type@@ALSA_0.9 + 304: 000000000004d4a8 112 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_enum_item@@ALSA_0.9 + 305: 00000000000a99d0 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_channel@@ALSA_0.9 + 306: 0000000000038874 812 FUNC GLOBAL DEFAULT 12 snd_func_concat@@ALSA_0.9 + 307: 0000000000041488 136 FUNC GLOBAL DEFAULT 12 snd_ctl_add_bytes_elem_set@@ALSA_0.9 + 308: 0000000000066128 84 FUNC GLOBAL DEFAULT 12 snd_pcm_format_silence_32@@ALSA_0.9 + 309: 000000000011187d 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_multi_open_dlsym_pcm_001@@ALSA_0.9 + 310: 00000000000431f0 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_mixername@@ALSA_0.9 + 311: 0000000000044584 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_compare@@ALSA_0.9 + 312: 00000000000a3ac0 168 FUNC GLOBAL DEFAULT 12 snd_hwdep_write@@ALSA_0.9 + 313: 00000000000a40dc 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_get_image@@ALSA_0.9 + 314: 0000000000064b1c 796 FUNC GLOBAL DEFAULT 12 snd_pcm_query_chmaps_from_hw@@ALSA_0.9 + 315: 00000000000a64c8 84 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_copy@@ALSA_0.9 + 316: 0000000000043410 100 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_copy@@ALSA_0.9 + 317: 000000000009f69c 4 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_tid@@ALSA_0.9 + 318: 00000000000aa490 36 FUNC GLOBAL DEFAULT 12 snd_seq_unset_bit@@ALSA_0.9 + 319: 00000000000a6d84 4 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_free@@ALSA_0.9 + 320: 0000000000041ddc 432 FUNC GLOBAL DEFAULT 12 snd_ctl_wait@@ALSA_0.9 + 321: 0000000000058014 108 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_period_size_max@@ALSA_0.9 + 322: 000000000003bed8 248 FUNC GLOBAL DEFAULT 12 snd_send_fd@@ALSA_0.9 + 323: 000000000007e07c 760 FUNC GLOBAL DEFAULT 12 snd_pcm_file_open@@ALSA_0.9 + 324: 0000000000054850 464 FUNC GLOBAL DEFAULT 12 snd_pcm_dump_hw_setup@@ALSA_0.9 + 325: 00000000000ab86c 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_sizeof@@ALSA_0.9 + 326: 000000000003914c 420 FUNC GLOBAL DEFAULT 12 snd_func_card_id@@ALSA_0.9 + 327: 000000000004474c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_index@@ALSA_0.9 + 328: 0000000000031d40 56 FUNC GLOBAL DEFAULT 12 snd_config_make_compound@@ALSA_0.9 + 329: 00000000000a8d38 104 FUNC GLOBAL DEFAULT 12 snd_seq_get_queue_tempo@@ALSA_0.9 + 330: 00000000000a7a08 92 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_set_exclusive@@ALSA_0.9 + 331: 00000000000a9958 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_time@@ALSA_0.9 + 332: 000000000009f6a8 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_card@@ALSA_0.9 + 333: 00000000000550a4 100 FUNC GLOBAL DEFAULT 12 snd_pcm_open_lconf@@ALSA_0.9 + 334: 000000000004c500 140 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_dB@@ALSA_0.9 + 335: 000000000004bea8 100 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_playback_channel@@ALSA_0.9 + 336: 000000000003c0dc 92 FUNC GLOBAL DEFAULT 12 snd_shm_area_create@@ALSA_0.9 + 337: 0000000000074908 1228 FUNC GLOBAL DEFAULT 12 snd_pcm_rate_open@@ALSA_0.9 + 338: 00000000000a8df8 96 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_malloc@@ALSA_0.9 + 339: 000000000004ae4c 304 FUNC GLOBAL DEFAULT 12 snd_mixer_close@@ALSA_0.9 + 340: 000000000003f24c 60 FUNC GLOBAL DEFAULT 12 snd_hctl_nonblock@@ALSA_0.9 + 341: 00000000000a7494 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_timestamp_queue@@ALSA_0.9 + 342: 0000000000057f20 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_period_time_first@@ALSA_0.9 + 343: 0000000000058ec8 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_xrun_mode@@ALSA_0.9 + 344: 0000000000058588 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9 + 345: 0000000000057768 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_malloc@@ALSA_0.9 + 346: 000000000009e26c 156 FUNC GLOBAL DEFAULT 12 snd_timer_read@@ALSA_0.9 + 347: 00000000000a382c 56 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_free@@ALSA_0.9 + 348: 00000000000416d4 220 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_add_iec958@@ALSA_0.9 + 349: 00000000000842e4 124 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_get_now@@ALSA_0.9 + 350: 0000000000055e94 336 FUNC GLOBAL DEFAULT 12 snd_pcm_areas_silence@@ALSA_0.9 + 351: 0000000000057b94 36 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_minmax@@ALSA_0.9 + 352: 0000000000059518 8 FUNC GLOBAL DEFAULT 12 snd_pcm_status_sizeof@@ALSA_0.9 + 353: 00000000000b0930 168 FUNC GLOBAL DEFAULT 12 snd_use_case_mgr_reload@@ALSA_0.9 + 354: 0000000000057884 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_access@@ALSA_0.9 + 355: 0000000000030110 64 FUNC GLOBAL DEFAULT 12 snd_shm_area_destructor@@ALSA_0.9 + 356: 00000000000a66d4 96 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_malloc@@ALSA_0.9 + 357: 00000000000a0594 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_subdevices_avail@@ALSA_0.9 + 358: 0000000000042de4 244 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_add_integer64@@ALSA_0.9 + 359: 00000000000a40a0 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_get_length@@ALSA_0.9 + 360: 000000000009fa3c 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_get_card@@ALSA_0.9 + 361: 000000000003980c 1120 FUNC GLOBAL DEFAULT 12 snd_func_pcm_args_by_class@@ALSA_0.9 + 362: 00000000000a00f4 104 FUNC GLOBAL DEFAULT 12 snd_rawmidi_poll_descriptors@@ALSA_0.9 + 363: 0000000000038098 124 FUNC GLOBAL DEFAULT 12 snd_config_get_bool_ascii@@ALSA_0.9 + 364: 0000000000043948 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_type@@ALSA_0.9 + 365: 0000000000045c28 336 FUNC GLOBAL DEFAULT 12 _snd_ctl_hw_open@@ALSA_0.9 + 366: 00000000000b09d8 24 FUNC GLOBAL DEFAULT 12 snd_use_case_mgr_close@@ALSA_0.9 + 367: 00000000000ab630 572 FUNC GLOBAL DEFAULT 12 snd_midi_event_decode@@ALSA_0.9 + 368: 00000000000aaad0 112 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_pool_input@@ALSA_0.9 + 369: 000000000003f954 60 FUNC GLOBAL DEFAULT 12 snd_hctl_set_callback@@ALSA_0.9 + 370: 00000000000590cc 8 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_sleep_min@@ALSA_0.9 + 371: 0000000000057218 8 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_sizeof@@ALSA_0.9 + 372: 0000000000032154 88 FUNC GLOBAL DEFAULT 12 snd_config_get_integer@@ALSA_0.9 + 373: 00000000000a38e4 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_get_device@@ALSA_0.9 + 374: 00000000000a8ff4 80 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_set_id@@ALSA_0.9 + 375: 00000000000a8148 4 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_free@@ALSA_0.9 + 376: 00000000000a8284 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_get_flags@@ALSA_0.9 + 377: 000000000005b890 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_size_min@ALSA_0.9 + 378: 00000000000579f0 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_subformat_last@@ALSA_0.9.0rc4 + 379: 000000000005c360 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_subformat_last@ALSA_0.9 + 380: 0000000000057fa8 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_size_min@@ALSA_0.9.0rc4 + 381: 000000000009dba0 64 FUNC GLOBAL DEFAULT 12 snd_timer_params_get_auto_start@@ALSA_0.9 + 382: 0000000000058fec 144 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_tstamp_type@@ALSA_0.9 + 383: 00000000000559b8 264 FUNC GLOBAL DEFAULT 12 snd_pcm_avail@@ALSA_0.9 + 384: 00000000000590d4 12 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_sleep_min@@ALSA_0.9 + 385: 0000000000043070 4 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_free@@ALSA_0.9 + 386: 00000000000a2938 552 FUNC GLOBAL DEFAULT 12 snd_rawmidi_virtual_open@@ALSA_0.9 + 387: 000000000007a9a4 2688 FUNC GLOBAL DEFAULT 12 _snd_pcm_multi_open@@ALSA_0.9 + 388: 000000000011188a 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_dsnoop_open_dlsym_pcm_001@@ALSA_0.9 + 389: 00000000000a886c 4 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_free@@ALSA_0.9 + 390: 000000000003f3e4 100 FUNC GLOBAL DEFAULT 12 snd_hctl_close@@ALSA_0.9 + 391: 0000000000058a24 292 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_current@@ALSA_0.9 + 392: 00000000000a605c 140 FUNC GLOBAL DEFAULT 12 snd_seq_close@@ALSA_0.9 + 393: 0000000000043984 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_readable@@ALSA_0.9 + 394: 000000000005796c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_format_mask@@ALSA_0.9 + 395: 0000000000056abc 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_can_pause@@ALSA_0.9 + 396: 00000000000ab278 16 FUNC GLOBAL DEFAULT 12 snd_midi_event_no_status@@ALSA_0.9 + 397: 00000000000a4064 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_get_name@@ALSA_0.9 + 398: 0000000000057ed4 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_max@@ALSA_0.9 + 399: 0000000000044d8c 104 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_set_bytes@@ALSA_0.9 + 400: 000000000009fd10 368 FUNC GLOBAL DEFAULT 12 snd_timer_query_hw_open@@ALSA_0.9 + 401: 0000000000036030 304 FUNC GLOBAL DEFAULT 12 snd_config_search_definition@@ALSA_0.9 + 402: 000000000009c034 68 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_avail@@ALSA_0.9 + 403: 00000000000aa440 80 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_event_filter_add@@ALSA_0.9 + 404: 00000000000b0a64 1020 FUNC GLOBAL DEFAULT 12 snd_use_case_get_list@@ALSA_0.9 + 405: 00000000000a3600 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_poll_descriptors_count@@ALSA_0.9 + 406: 0000000000058514 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9.0rc4 + 407: 000000000009faf0 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_set_subdevice@@ALSA_0.9 + 408: 00000000000ab8b4 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_format@@ALSA_0.9 + 409: 000000000005c580 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_last@ALSA_0.9 + 410: 0000000000111884 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_hooks_open_dlsym_pcm_001@@ALSA_0.9 + 411: 00000000000a9c30 428 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events@@ALSA_0.9 + 412: 000000000004b948 64 FUNC GLOBAL DEFAULT 12 snd_mixer_class_set_private_free@@ALSA_0.9 + 413: 0000000000058500 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9 + 414: 00000000000427d0 92 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_copy@@ALSA_0.9 + 415: 0000000000055940 120 FUNC GLOBAL DEFAULT 12 snd_pcm_avail_update@@ALSA_0.9 + 416: 000000000004313c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_driver@@ALSA_0.9 + 417: 00000000000a8020 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_set_type@@ALSA_0.9 + 418: 00000000000ab8e8 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_type@@ALSA_0.9 + 419: 0000000000057484 52 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_test@@ALSA_0.9 + 420: 00000000000a69fc 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_event_lost@@ALSA_0.9 + 421: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.0 + 422: 00000000000569b4 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_is_monotonic@@ALSA_0.9 + 423: 00000000000a0040 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_type@@ALSA_0.9 + 424: 0000000000056fc8 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_fifo_size@@ALSA_0.9 + 425: 00000000000584a0 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_min@@ALSA_0.9 + 426: 0000000000059238 72 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_start_threshold@@ALSA_0.9 + 427: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.3 + 428: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.5 + 429: 000000000009df04 96 FUNC GLOBAL DEFAULT 12 snd_timer_status_malloc@@ALSA_0.9 + 430: 000000000005f70c 432 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_param_dump@@ALSA_0.9 + 431: 000000000009f94c 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_get_class@@ALSA_0.9 + 432: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.7 + 433: 00000000000573bc 96 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_malloc@@ALSA_0.9 + 434: 00000000000a8570 80 FUNC GLOBAL DEFAULT 12 snd_seq_get_queue_info@@ALSA_0.9 + 435: 00000000000a3fbc 108 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_copy@@ALSA_0.9 + 436: 00000000000ab5a0 144 FUNC GLOBAL DEFAULT 12 snd_midi_event_encode@@ALSA_0.9 + 437: 000000000005733c 60 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_set@@ALSA_0.9 + 438: 0000000000084600 96 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_malloc@@ALSA_0.9 + 439: 0000000000042b60 244 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_add_integer@@ALSA_0.9 + 440: 0000000000031f00 84 FUNC GLOBAL DEFAULT 12 snd_config_set_real@@ALSA_0.9 + 441: 00000000000a7668 92 FUNC GLOBAL DEFAULT 12 snd_seq_set_port_info@@ALSA_0.9 + 442: 00000000000579e0 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_subformat_first@@ALSA_0.9.0rc4 + 443: 0000000000057e5c 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_period_time@@ALSA_0.9 + 444: 000000000005bf80 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_subformat_first@ALSA_0.9 + 445: 000000000009c028 12 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_set_state@@ALSA_0.9 + 446: 000000000003b734 52 FUNC GLOBAL DEFAULT 12 snd_lib_error_set_local@@ALSA_0.9 + 447: 000000000009d5dc 132 FUNC GLOBAL DEFAULT 12 snd_timer_nonblock@@ALSA_0.9 + 448: 0000000000058ce0 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_boundary@@ALSA_0.9 + 449: 00000000000547e4 36 FUNC GLOBAL DEFAULT 12 snd_pcm_tstamp_type_name@@ALSA_0.9 + 450: 000000000004d3c8 112 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_enum_item_name@@ALSA_0.9 + 451: 000000000009df9c 108 FUNC GLOBAL DEFAULT 12 snd_timer_status_copy@@ALSA_0.9 + 452: 000000000005895c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9.0rc4 + 453: 000000000005c634 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_last@ALSA_0.9 + 454: 00000000000a1418 8 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_sizeof@@ALSA_0.9 + 455: 00000000000a9080 104 FUNC GLOBAL DEFAULT 12 snd_seq_get_queue_timer@@ALSA_0.9 + 456: 000000000009f3b8 176 FUNC GLOBAL DEFAULT 12 snd_timer_query_open@@ALSA_0.9 + 457: 000000000005865c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size@@ALSA_0.9 + 458: 0000000000111873 1 OBJECT GLOBAL DEFAULT 26 __snd_ctl_shm_open_dlsym_control_001@@ALSA_0.9 + 459: 0000000000048dec 1332 FUNC GLOBAL DEFAULT 12 _snd_ctl_shm_open@@ALSA_0.9 + 460: 00000000000a8f7c 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_get_resolution@@ALSA_0.9 + 461: 0000000000056ebc 144 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate_numden@@ALSA_0.9 + 462: 00000000000aab48 228 FUNC GLOBAL DEFAULT 12 snd_seq_sync_output_queue@@ALSA_0.9 + 463: 00000000000a8bd0 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_get_skew@@ALSA_0.9 + 464: 000000000011188d 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_softvol_open_dlsym_pcm_001@@ALSA_0.9 + 465: 000000000003900c 144 FUNC GLOBAL DEFAULT 12 snd_func_card_inum@@ALSA_0.9 + 466: 00000000000679f4 700 FUNC GLOBAL DEFAULT 12 snd_pcm_munmap@@ALSA_0.9 + 467: 000000000003f33c 60 FUNC GLOBAL DEFAULT 12 snd_hctl_poll_descriptors_revents@@ALSA_0.9 + 468: 000000000004cd00 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_ask_capture_dB_vol@@ALSA_0.9 + 469: 0000000000065fe8 320 FUNC GLOBAL DEFAULT 12 snd_pcm_format_silence_64@@ALSA_0.9 + 470: 000000000004aa68 44 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_free@@ALSA_0.9 + 471: 0000000000057a80 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels@@ALSA_0.9 + 472: 000000000011186a 1 OBJECT GLOBAL DEFAULT 26 _snd_func_private_pcm_subdevice_dlsym_config_evaluate_001@@ALSA_0.9 + 473: 00000000000a0648 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_set_stream@@ALSA_0.9 + 474: 0000000000058910 12 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9.0rc4 + 475: 000000000009dddc 60 FUNC GLOBAL DEFAULT 12 snd_timer_params_get_queue_size@@ALSA_0.9 + 476: 000000000005bcd4 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_tick_time_max@ALSA_0.9 + 477: 00000000000329ec 8 FUNC GLOBAL DEFAULT 12 snd_config_iterator_entry@@ALSA_0.9 + 478: 000000000011186d 1 OBJECT GLOBAL DEFAULT 26 _snd_func_card_id_dlsym_config_evaluate_001@@ALSA_0.9 + 479: 000000000011188e 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_mmap_emul_open_dlsym_pcm_001@@ALSA_0.9 + 480: 0000000000058f0c 144 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_tstamp_mode@@ALSA_0.9 + 481: 00000000000a805c 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_set_index@@ALSA_0.9 + 482: 0000000000044a94 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_enumerated@@ALSA_0.9 + 483: 00000000000583bc 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_max@@ALSA_0.9 + 484: 00000000000a991c 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_queue@@ALSA_0.9 + 485: 0000000000055370 216 FUNC GLOBAL DEFAULT 12 snd_pcm_close@@ALSA_0.9 + 486: 0000000000058748 136 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_minmax@@ALSA_0.9 + 487: 0000000000059d94 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_set_stream@@ALSA_0.9 + 488: 0000000000055c0c 648 FUNC GLOBAL DEFAULT 12 snd_pcm_area_silence@@ALSA_0.9 + 489: 0000000000059c00 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_subclass@@ALSA_0.9 + 490: 00000000000aa2c8 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_set_output_pool@@ALSA_0.9 + 491: 0000000000044950 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_boolean@@ALSA_0.9 + 492: 00000000000a9a0c 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_event_type@@ALSA_0.9 + 493: 00000000000867a0 436 FUNC GLOBAL DEFAULT 12 snd_pcm_lfloat_open@@ALSA_0.9 + 494: 0000000000081f88 1504 FUNC GLOBAL DEFAULT 12 _snd_pcm_share_open@@ALSA_0.9 + 495: 000000000011187a 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_adpcm_open_dlsym_pcm_001@@ALSA_0.9 + 496: 0000000000041a74 72 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_unlock@@ALSA_0.9 + 497: 000000000009f8c4 76 FUNC GLOBAL DEFAULT 12 snd_timer_id_copy@@ALSA_0.9 + 498: 0000000000057a4c 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_channels_min@@ALSA_0.9 + 499: 00000000000a63b4 80 FUNC GLOBAL DEFAULT 12 snd_seq_get_output_buffer_size@@ALSA_0.9 + 500: 0000000000050e7c 100 FUNC GLOBAL DEFAULT 12 snd_mixer_sbasic_info@@ALSA_0.9 + 501: 00000000000a7814 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_get_dest@@ALSA_0.9 + 502: 00000000000a85c0 80 FUNC GLOBAL DEFAULT 12 snd_seq_set_queue_info@@ALSA_0.9 + 503: 00000000000353d0 72 FUNC GLOBAL DEFAULT 12 snd_config_evaluate@@ALSA_0.9 + 504: 00000000000a36e0 96 FUNC GLOBAL DEFAULT 12 snd_hwdep_poll_descriptors_revents@@ALSA_0.9 + 505: 000000000009dc84 100 FUNC GLOBAL DEFAULT 12 snd_timer_params_set_early_event@@ALSA_0.9 + 506: 00000000000a085c 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_get_buffer_size@@ALSA_0.9 + 507: 00000000000aa8fc 124 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_name@@ALSA_0.9 + 508: 0000000000041c20 72 FUNC GLOBAL DEFAULT 12 snd_ctl_rawmidi_next_device@@ALSA_0.9 + 509: 0000000000053e2c 80 FUNC GLOBAL DEFAULT 12 snd_pcm_unlink@@ALSA_0.9 + 510: 00000000000843dc 40 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_set_name@@ALSA_0.9 + 511: 00000000000b2538 8 FUNC GLOBAL DEFAULT 12 snd_tplg_verbose@@ALSA_0.9 + 512: 00000000000aa28c 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_get_input_free@@ALSA_0.9 + 513: 000000000005ca60 36 FUNC GLOBAL DEFAULT 12 snd_pcm_chmap_type_name@@ALSA_0.9 + 514: 0000000000058450 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9.0rc4 + 515: 000000000005b948 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_time_min@ALSA_0.9 + 516: 00000000000a8304 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_set_owner@@ALSA_0.9 + 517: 00000000000579b8 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_subformat@@ALSA_0.9 + 518: 000000000005b55c 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_time@ALSA_0.9 + 519: 0000000000057e5c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_time@@ALSA_0.9.0rc4 + 520: 0000000000057c64 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate_resample@@ALSA_0.9 + 521: 0000000000040398 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_hctl@@ALSA_0.9 + 522: 000000000004a89c 460 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_add@@ALSA_0.9 + 523: 00000000000572d0 12 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_none@@ALSA_0.9 + 524: 0000000000040598 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_set_callback@@ALSA_0.9 + 525: 000000000009d660 116 FUNC GLOBAL DEFAULT 12 snd_timer_async@@ALSA_0.9 + 526: 0000000000066524 1708 FUNC GLOBAL DEFAULT 12 snd_pcm_parse_control_id@@ALSA_0.9 + 527: 000000000004d584 92 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_copy@@ALSA_0.9 + 528: 000000000011188c 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_iec958_open_dlsym_pcm_001@@ALSA_0.9 + 529: 00000000000ab900 8 FUNC GLOBAL DEFAULT 12 snd_instr_fm_convert_to_stream@@ALSA_0.9 + 530: 000000000003f574 88 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_next@@ALSA_0.9 + 531: 000000000003a490 188 FUNC GLOBAL DEFAULT 12 snd_input_scanf@@ALSA_0.9 + 532: 00000000000a80e8 96 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_malloc@@ALSA_0.9 + 533: 0000000000057abc 28 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_minmax@@ALSA_0.9 + 534: 00000000000a3d94 92 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_copy@@ALSA_0.9 + 535: 00000000000ab918 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_open_rom@@ALSA_0.9 + 536: 00000000000a8a54 8 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_sizeof@@ALSA_0.9 + 537: 00000000000a7ea8 64 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_exclusive@@ALSA_0.9 + 538: 0000000000059b88 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_subdevice_name@@ALSA_0.9 + 539: 00000000000a7c60 108 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_copy@@ALSA_0.9 + 540: 00000000000a6f30 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_read_use@@ALSA_0.9 + 541: 00000000000a6870 64 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_error_bounce@@ALSA_0.9 + 542: 00000000000583d0 36 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_minmax@@ALSA_0.9 + 543: 0000000000054a20 400 FUNC GLOBAL DEFAULT 12 snd_pcm_dump_sw_setup@@ALSA_0.9 + 544: 00000000000aa868 148 FUNC GLOBAL DEFAULT 12 snd_seq_disconnect_to@@ALSA_0.9 + 545: 000000000009dda0 60 FUNC GLOBAL DEFAULT 12 snd_timer_params_set_queue_size@@ALSA_0.9 + 546: 000000000004af7c 208 FUNC GLOBAL DEFAULT 12 snd_mixer_set_compare@@ALSA_0.9 + 547: 00000000000430c4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_card@@ALSA_0.9 + 548: 000000000009d918 60 FUNC GLOBAL DEFAULT 12 snd_timer_info_get_id@@ALSA_0.9 + 549: 00000000000a38a8 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_get_card@@ALSA_0.9 + 550: 000000000009fe80 272 FUNC GLOBAL DEFAULT 12 _snd_timer_query_hw_open@@ALSA_0.9 + 551: 000000000009e008 60 FUNC GLOBAL DEFAULT 12 snd_timer_status_get_timestamp@@ALSA_0.9 + 552: 00000000000423a8 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_numid@@ALSA_0.9 + 553: 00000000000a875c 168 FUNC GLOBAL DEFAULT 12 snd_seq_set_queue_usage@@ALSA_0.9 + 554: 000000000004b77c 92 FUNC GLOBAL DEFAULT 12 snd_mixer_class_copy@@ALSA_0.9 + 555: 00000000000578b8 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_access_mask@@ALSA_0.9 + 556: 00000000000aa750 148 FUNC GLOBAL DEFAULT 12 snd_seq_connect_to@@ALSA_0.9 + 557: 000000000009e134 108 FUNC GLOBAL DEFAULT 12 snd_timer_status@@ALSA_0.9 + 558: 00000000000a8e58 4 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_free@@ALSA_0.9 + 559: 00000000000b0810 288 FUNC GLOBAL DEFAULT 12 snd_use_case_mgr_open@@ALSA_0.9 + 560: 000000000004195c 104 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_tlv_write@@ALSA_0.9 + 561: 00000000000571a0 60 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_set@@ALSA_0.9 + 562: 000000000004282c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_get_numid@@ALSA_0.9 + 563: 0000000000053a7c 284 FUNC GLOBAL DEFAULT 12 snd_pcm_rewind@@ALSA_0.9 + 564: 0000000000058d24 176 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_start_mode@@ALSA_0.9 + 565: 00000000000a7520 172 FUNC GLOBAL DEFAULT 12 snd_seq_delete_port@@ALSA_0.9 + 566: 00000000000900ec 2152 FUNC GLOBAL DEFAULT 12 snd_pcm_dsnoop_open@@ALSA_0.9 + 567: 00000000000ab2cc 112 FUNC GLOBAL DEFAULT 12 snd_midi_event_resize_buffer@@ALSA_0.9 + 568: 000000000005b724 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_tick_time@ALSA_0.9 + 569: 00000000000588f8 12 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_tick_time@@ALSA_0.9.0rc4 + 570: 000000000005bf28 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_format_first@ALSA_0.9 + 571: 000000000005794c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_format_first@@ALSA_0.9.0rc4 + 572: 00000000000410d0 124 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list@@ALSA_0.9 + 573: 0000000000111880 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_null_open_dlsym_pcm_001@@ALSA_0.9 + 574: 00000000000574d8 60 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_set@@ALSA_0.9 + 575: 0000000000057280 4 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_free@@ALSA_0.9 + 576: 00000000000436ac 120 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_device@@ALSA_0.9 + 577: 00000000000a7bfc 96 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_malloc@@ALSA_0.9 + 578: 0000000000035418 1096 FUNC GLOBAL DEFAULT 12 snd_config_expand@@ALSA_0.9 + 579: 00000000000a7380 92 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_port_specified@@ALSA_0.9 + 580: 00000000000a7fa4 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_set_port@@ALSA_0.9 + 581: 0000000000084fd0 920 FUNC GLOBAL DEFAULT 12 _snd_pcm_hooks_open@@ALSA_0.9 + 582: 0000000000038ba8 8 FUNC GLOBAL DEFAULT 12 snd_func_imul@@ALSA_0.9 + 583: 00000000000ab2a8 36 FUNC GLOBAL DEFAULT 12 snd_midi_event_init@@ALSA_0.9 + 584: 000000000004b5bc 60 FUNC GLOBAL DEFAULT 12 snd_mixer_get_count@@ALSA_0.9 + 585: 000000000007f0ec 468 FUNC GLOBAL DEFAULT 12 _snd_pcm_null_open@@ALSA_0.9 + 586: 0000000000056c48 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_is_joint_duplex@@ALSA_0.9 + 587: 00000000000599dc 68 FUNC GLOBAL DEFAULT 12 snd_pcm_info_copy@@ALSA_0.9 + 588: 000000000004d520 96 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_malloc@@ALSA_0.9 + 589: 0000000000059a5c 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_subdevice@@ALSA_0.9 + 590: 000000000005795c 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_format_last@@ALSA_0.9 + 591: 0000000000057e04 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_wakeup@@ALSA_0.9 + 592: 00000000000a8b1c 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_get_queue@@ALSA_0.9 + 593: 00000000000a84cc 164 FUNC GLOBAL DEFAULT 12 snd_seq_free_queue@@ALSA_0.9 + 594: 000000000003f4c8 84 FUNC GLOBAL DEFAULT 12 snd_hctl_first_elem@@ALSA_0.9 + 595: 00000000000598f8 60 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_avail_max@@ALSA_0.9 + 596: 000000000004c374 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_playback_dB@@ALSA_0.9 + 597: 0000000000057b80 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_max@@ALSA_0.9 + 598: 00000000000aa0f4 108 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_copy@@ALSA_0.9 + 599: 000000000006f9c0 620 FUNC GLOBAL DEFAULT 12 _snd_pcm_mulaw_open@@ALSA_0.9 + 600: 000000000009f6d0 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_resolution_max@@ALSA_0.9 + 601: 000000000004b6e8 8 FUNC GLOBAL DEFAULT 12 snd_mixer_class_sizeof@@ALSA_0.9 + 602: 0000000000065e1c 56 FUNC GLOBAL DEFAULT 12 snd_pcm_format_signed@@ALSA_0.9 + 603: 00000000000ab8bc 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_alias@@ALSA_0.9 + 604: 00000000000aa37c 80 FUNC GLOBAL DEFAULT 12 snd_seq_get_client_pool@@ALSA_0.9 + 605: 00000000000404e4 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_subdevice@@ALSA_0.9 + 606: 0000000000031d30 8 FUNC GLOBAL DEFAULT 12 snd_config_make_string@@ALSA_0.9 + 607: 000000000009f604 56 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_free@@ALSA_0.9 + 608: 000000000004ac7c 192 FUNC GLOBAL DEFAULT 12 snd_mixer_class_register@@ALSA_0.9 + 609: 00000000000440b8 80 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_dimension@@ALSA_0.9.3 + 610: 00000000000a6558 60 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_get_clients@@ALSA_0.9 + 611: 00000000000a8c48 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_set_tempo@@ALSA_0.9 + 612: 0000000000057bb8 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_rate_near@@ALSA_0.9 + 613: 000000000008a1a4 616 FUNC GLOBAL DEFAULT 12 snd_pcm_ladspa_open@@ALSA_0.9 + 614: 000000000009f6c0 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_resolution@@ALSA_0.9 + 615: 00000000000a74d0 80 FUNC GLOBAL DEFAULT 12 snd_seq_create_port@@ALSA_0.9 + 616: 000000000007f2c0 448 FUNC GLOBAL DEFAULT 12 _snd_pcm_empty_open@@ALSA_0.9 + 617: 000000000005ca84 36 FUNC GLOBAL DEFAULT 12 snd_pcm_chmap_name@@ALSA_0.9 + 618: 0000000000058e18 176 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_xrun_mode@@ALSA_0.9 + 619: 000000000009e1e4 68 FUNC GLOBAL DEFAULT 12 snd_timer_stop@@ALSA_0.9 + 620: 00000000000586dc 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_max@@ALSA_0.9 + 621: 0000000000059604 84 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_trigger_tstamp@@ALSA_0.9 + 622: 00000000000ab910 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_open@@ALSA_0.9 + 623: 00000000000ab908 8 FUNC GLOBAL DEFAULT 12 snd_instr_fm_convert_from_stream@@ALSA_0.9 + 624: 00000000000401b4 164 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_tlv_read@@ALSA_0.9 + 625: 0000000000058898 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9.0rc4 + 626: 000000000009e308 60 FUNC GLOBAL DEFAULT 12 snd_timer_info_get_ticks@@ALSA_0.9 + 627: 000000000005c5dc 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_last@ALSA_0.9 + 628: 0000000000042410 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_interface@@ALSA_0.9 + 629: 00000000000a3f1c 8 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_sizeof@@ALSA_0.9 + 630: 00000000000aa9f0 112 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_pool_output@@ALSA_0.9 + 631: 0000000000043bc4 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_tlv_commandable@@ALSA_0.9 + 632: 0000000000047450 520 FUNC GLOBAL DEFAULT 12 snd_ctl_ascii_elem_id_get@@ALSA_0.9 + 633: 0000000000111888 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_dmix_open_dlsym_pcm_001@@ALSA_0.9 + 634: 00000000000ab89c 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_len@@ALSA_0.9 + 635: 00000000000a6e7c 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_name@@ALSA_0.9 + 636: 00000000000439c4 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_writable@@ALSA_0.9 + 637: 00000000000a8b94 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_get_ppq@@ALSA_0.9 + 638: 0000000000076650 208 FUNC GLOBAL DEFAULT 12 _snd_pcm_rate_linear_open@@ALSA_0.9 + 639: 00000000000a6b70 112 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_set_event_filter@@ALSA_0.9 + 640: 000000000004b0e4 192 FUNC GLOBAL DEFAULT 12 snd_mixer_poll_descriptors@@ALSA_0.9 + 641: 000000000004c608 140 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_dB_all@@ALSA_0.9 + 642: 0000000000111862 1 OBJECT GLOBAL DEFAULT 26 _snd_func_igetenv_dlsym_config_evaluate_001@@ALSA_0.9 + 643: 00000000000ab884 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_id@@ALSA_0.9 + 644: 0000000000058528 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_buffer_size@@ALSA_0.9 + 645: 00000000000a06f8 96 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_malloc@@ALSA_0.9 + 646: 000000000004c200 120 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_ask_playback_vol_dB@@ALSA_0.9 + 647: 00000000000529f4 60 FUNC GLOBAL DEFAULT 12 snd_pcm_name@@ALSA_0.9 + 648: 00000000000ab8dc 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_cmd@@ALSA_0.9 + 649: 00000000000577c8 4 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_free@@ALSA_0.9 + 650: 000000000005707c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_sizeof@@ALSA_0.9 + 651: 00000000000434ec 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_count@@ALSA_0.9 + 652: 000000000009d7c0 96 FUNC GLOBAL DEFAULT 12 snd_timer_info_malloc@@ALSA_0.9 + 653: 0000000000043ed4 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_step64@@ALSA_0.9 + 654: 000000000011187c 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_plug_open_dlsym_pcm_001@@ALSA_0.9 + 655: 00000000000444c8 8 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_sizeof@@ALSA_0.9 + 656: 000000000005c308 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_format_last@ALSA_0.9 + 657: 00000000000591d0 80 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_period_event@@ALSA_0.9 + 658: 000000000005795c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_format_last@@ALSA_0.9.0rc4 + 659: 00000000000a9884 92 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_copy@@ALSA_0.9 + 660: 00000000000341e4 84 FUNC GLOBAL DEFAULT 12 snd_config_unref@@ALSA_0.9 + 661: 000000000009d224 176 FUNC GLOBAL DEFAULT 12 snd_timer_open@@ALSA_0.9 + 662: 0000000000111892 1 OBJECT GLOBAL DEFAULT 26 __snd_rawmidi_virtual_open_dlsym_rawmidi_001@@ALSA_0.9 + 663: 00000000000424e0 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_subdevice@@ALSA_0.9 + 664: 0000000000059584 68 FUNC GLOBAL DEFAULT 12 snd_pcm_status_copy@@ALSA_0.9 + 665: 00000000000aa4f8 48 FUNC GLOBAL DEFAULT 12 snd_seq_change_bit@@ALSA_0.9 + 666: 000000000005836c 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_periods_max@@ALSA_0.9 + 667: 0000000000044534 12 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_clear@@ALSA_0.9 + 668: 000000000006e4e8 8 FUNC GLOBAL DEFAULT 12 snd_pcm_route_load_ttable@@ALSA_0.9 + 669: 0000000000035e7c 436 FUNC GLOBAL DEFAULT 12 snd_config_hook_load_for_all_cards@@ALSA_0.9 + 670: 000000000009d8dc 60 FUNC GLOBAL DEFAULT 12 snd_timer_info_get_card@@ALSA_0.9 + 671: 000000000009d990 60 FUNC GLOBAL DEFAULT 12 snd_timer_info_get_resolution@@ALSA_0.9 + 672: 000000000004a3c0 148 FUNC GLOBAL DEFAULT 12 snd_mixer_open@@ALSA_0.9 + 673: 00000000000425b0 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_index@@ALSA_0.9 + 674: 0000000000066224 548 FUNC GLOBAL DEFAULT 12 snd_pcm_format_set_silence@@ALSA_0.9 + 675: 0000000000054750 20 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_name@@ALSA_0.9 + 676: 000000000005930c 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9.0rc4 + 677: 0000000000031e24 56 FUNC GLOBAL DEFAULT 12 snd_config_imake_pointer@@ALSA_0.9 + 678: 000000000005c848 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_stop_threshold@ALSA_0.9 + 679: 000000000009f4bc 116 FUNC GLOBAL DEFAULT 12 snd_timer_query_close@@ALSA_0.9 + 680: 0000000000041abc 72 FUNC GLOBAL DEFAULT 12 snd_ctl_hwdep_next_device@@ALSA_0.9 + 681: 0000000000054678 216 FUNC GLOBAL DEFAULT 12 snd_pcm_format_value@@ALSA_0.9 + 682: 000000000005a23c 252 FUNC GLOBAL DEFAULT 12 snd_async_add_pcm_handler@@ALSA_0.9 + 683: 00000000000709c4 620 FUNC GLOBAL DEFAULT 12 _snd_pcm_alaw_open@@ALSA_0.9 + 684: 0000000000042958 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_get_index@@ALSA_0.9 + 685: 000000000003ccc0 676 FUNC GLOBAL DEFAULT 12 snd_tlv_convert_to_dB@@ALSA_0.9 + 686: 0000000000081870 1816 FUNC GLOBAL DEFAULT 12 snd_pcm_share_open@@ALSA_0.9 + 687: 00000000000b1238 2048 FUNC GLOBAL DEFAULT 12 snd_use_case_set@@ALSA_0.9 + 688: 00000000000a81cc 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_get_name@@ALSA_0.9 + 689: 0000000000058278 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_period_size_first@@ALSA_0.9 + 690: 00000000000ab960 8 FUNC GLOBAL DEFAULT 12 snd_instr_simple_convert_from_stream@@ALSA_0.9 + 691: 000000000004bc7c 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_index@@ALSA_0.9 + 692: 00000000000a6fa8 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_midi_channels@@ALSA_0.9 + 693: 0000000000031d20 8 FUNC GLOBAL DEFAULT 12 snd_config_make_integer64@@ALSA_0.9 + 694: 000000000009ff90 116 FUNC GLOBAL DEFAULT 12 snd_rawmidi_close@@ALSA_0.9 + 695: 000000000004b850 60 FUNC GLOBAL DEFAULT 12 snd_mixer_class_get_private@@ALSA_0.9 + 696: 0000000000046474 856 FUNC GLOBAL DEFAULT 12 snd_sctl_install@@ALSA_0.9 + 697: 00000000000a8ac0 92 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_copy@@ALSA_0.9 + 698: 000000000005b3a0 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_access@ALSA_0.9 + 699: 0000000000057810 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_access@@ALSA_0.9.0rc4 + 700: 0000000000056bc4 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_is_half_duplex@@ALSA_0.9 + 701: 0000000000048a2c 960 FUNC GLOBAL DEFAULT 12 snd_ctl_shm_open@@ALSA_0.9 + 702: 000000000009dad8 100 FUNC GLOBAL DEFAULT 12 snd_timer_params_copy@@ALSA_0.9 + 703: 00000000000a3998 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_get_iface@@ALSA_0.9 + 704: 00000000000a7d44 56 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_root@@ALSA_0.9 + 705: 000000000009dd28 60 FUNC GLOBAL DEFAULT 12 snd_timer_params_set_ticks@@ALSA_0.9 + 706: 0000000000058528 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_size@@ALSA_0.9.0rc4 + 707: 000000000005b6cc 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_size@ALSA_0.9 + 708: 000000000011187b 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_rate_open_dlsym_pcm_001@@ALSA_0.9 + 709: 0000000000111894 1 OBJECT GLOBAL DEFAULT 26 __snd_seq_hw_open_dlsym_seq_001@@ALSA_0.9 + 710: 000000000009f7b8 108 FUNC GLOBAL DEFAULT 12 snd_timer_query_status@@ALSA_0.9.0 + 711: 0000000000041b94 72 FUNC GLOBAL DEFAULT 12 snd_ctl_pcm_info@@ALSA_0.9 + 712: 0000000000065f20 36 FUNC GLOBAL DEFAULT 12 snd_pcm_format_physical_width@@ALSA_0.9 + 713: 00000000000a3e68 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_get_num_dsps@@ALSA_0.9 + 714: 0000000000085368 60 FUNC GLOBAL DEFAULT 12 snd_pcm_hook_get_pcm@@ALSA_0.9 + 715: 000000000005cc98 408 FUNC GLOBAL DEFAULT 12 snd_pcm_chmap_parse_string@@ALSA_0.9 + 716: 0000000000032f74 352 FUNC GLOBAL DEFAULT 12 snd_config_searchva@@ALSA_0.9 + 717: 000000000003f51c 88 FUNC GLOBAL DEFAULT 12 snd_hctl_last_elem@@ALSA_0.9 + 718: 000000000004c848 128 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_capture_channel@@ALSA_0.9 + 719: 0000000000057fa8 108 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_period_size_min@@ALSA_0.9 + 720: 00000000000a6734 4 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_free@@ALSA_0.9 + 721: 00000000000a660c 60 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_get_cur_clients@@ALSA_0.9 + 722: 00000000000a89e0 116 FUNC GLOBAL DEFAULT 12 snd_seq_get_queue_status@@ALSA_0.9 + 723: 0000000000044540 68 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_copy@@ALSA_0.9 + 724: 00000000000441d4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_interface@@ALSA_0.9 + 725: 0000000000084404 8 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_get_name@@ALSA_0.9 + 726: 00000000000432ec 100 FUNC GLOBAL DEFAULT 12 snd_ctl_event_copy@@ALSA_0.9 + 727: 000000000005bbc4 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_periods_max@ALSA_0.9 + 728: 000000000005836c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_periods_max@@ALSA_0.9.0rc4 + 729: 0000000000041860 88 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_write@@ALSA_0.9 + 730: 0000000000053e7c 172 FUNC GLOBAL DEFAULT 12 snd_pcm_poll_descriptors_count@@ALSA_0.9 + 731: 000000000011186e 1 OBJECT GLOBAL DEFAULT 26 _snd_func_private_card_driver_dlsym_config_evaluate_001@@ALSA_0.9 + 732: 000000000009d328 156 FUNC GLOBAL DEFAULT 12 snd_timer_close@@ALSA_0.9 + 733: 000000000004b544 60 FUNC GLOBAL DEFAULT 12 snd_mixer_set_callback_private@@ALSA_0.9 + 734: 00000000000ab874 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_malloc@@ALSA_0.9 + 735: 00000000000595c8 60 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_state@@ALSA_0.9 + 736: 00000000000a69c0 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_num_ports@@ALSA_0.9 + 737: 00000000000aa19c 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_get_output_pool@@ALSA_0.9 + 738: 00000000000a6970 80 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_event_filter_clear@@ALSA_0.9 + 739: 0000000000059b10 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_id@@ALSA_0.9 + 740: 0000000000054e5c 136 FUNC GLOBAL DEFAULT 12 snd_pcm_bytes_to_samples@@ALSA_0.9 + 741: 0000000000043ac4 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_owner@@ALSA_0.9 + 742: 000000000008c930 2436 FUNC GLOBAL DEFAULT 12 snd_pcm_dmix_open@@ALSA_0.9 + 743: 00000000000540b8 36 FUNC GLOBAL DEFAULT 12 snd_pcm_stream_name@@ALSA_0.9 + 744: 000000000005db40 208 FUNC GLOBAL DEFAULT 12 snd_pcm_get_params@@ALSA_0.9 + 745: 00000000000a8fb8 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_set_type@@ALSA_0.9 + 746: 00000000000aa4b4 68 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_event_filter_del@@ALSA_0.9 + 747: 000000000007c794 1288 FUNC GLOBAL DEFAULT 12 _snd_pcm_shm_open@@ALSA_0.9 + 748: 0000000000055108 156 FUNC GLOBAL DEFAULT 12 snd_pcm_open_fallback@@ALSA_0.9 + 749: 00000000000a14b8 92 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_copy@@ALSA_0.9 + 750: 000000000005c524 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_last@ALSA_0.9 + 751: 000000000009f680 28 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_set_tid@@ALSA_0.9 + 752: 000000000005841c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_last@@ALSA_0.9.0rc4 + 753: 0000000000057f20 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_first@@ALSA_0.9.0rc4 + 754: 000000000005c08c 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_first@ALSA_0.9 + 755: 000000000003ae58 180 FUNC GLOBAL DEFAULT 12 snd_output_buffer_open@@ALSA_0.9 + 756: 0000000000042238 80 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_alloc_space@@ALSA_0.9 + 757: 0000000000057bf4 112 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_resample@@ALSA_0.9 + 758: 0000000000057938 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_format@@ALSA_0.9 + 759: 0000000000058c30 8 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_sizeof@@ALSA_0.9 + 760: 000000000009f6b8 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_name@@ALSA_0.9 + 761: 0000000000058838 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9 + 762: 0000000000031bd8 64 FUNC GLOBAL DEFAULT 12 snd_config_top@@ALSA_0.9 + 763: 0000000000084e4c 388 FUNC GLOBAL DEFAULT 12 snd_pcm_hooks_open@@ALSA_0.9 + 764: 000000000004424c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_subdevice@@ALSA_0.9 + 765: 00000000000433f8 24 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_clear@@ALSA_0.9 + 766: 00000000000a7a64 92 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_set_time_update@@ALSA_0.9 + 767: 0000000000040e80 116 FUNC GLOBAL DEFAULT 12 snd_ctl_async@@ALSA_0.9 + 768: 00000000000a5564 236 FUNC GLOBAL DEFAULT 12 _snd_seq_hw_open@@ALSA_0.9 + 769: 0000000000057870 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_access@@ALSA_0.9 + 770: 00000000000a4118 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_set_index@@ALSA_0.9 + 771: 0000000000054100 332 FUNC GLOBAL DEFAULT 12 snd_pcm_writei@@ALSA_0.9 + 772: 0000000000059520 96 FUNC GLOBAL DEFAULT 12 snd_pcm_status_malloc@@ALSA_0.9 + 773: 000000000005b4a8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels@ALSA_0.9 + 774: 0000000000057a3c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4 + 775: 000000000005424c 332 FUNC GLOBAL DEFAULT 12 snd_pcm_writen@@ALSA_0.9 + 776: 000000000006f810 432 FUNC GLOBAL DEFAULT 12 snd_pcm_mulaw_open@@ALSA_0.9 + 777: 00000000000a645c 8 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_sizeof@@ALSA_0.9 + 778: 000000000004c944 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_capture_dB_range@@ALSA_0.9 + 779: 00000000000ab8d4 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_id@@ALSA_0.9 + 780: 000000000004b8c8 64 FUNC GLOBAL DEFAULT 12 snd_mixer_class_set_event@@ALSA_0.9 + 781: 00000000000a9818 8 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_sizeof@@ALSA_0.9 + 782: 00000000000579e0 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_subformat_first@@ALSA_0.9 + 783: 0000000000043634 120 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_interface@@ALSA_0.9 + 784: 00000000000a7850 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_get_queue@@ALSA_0.9 + 785: 00000000000a6ab8 92 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_set_broadcast_filter@@ALSA_0.9 + 786: 0000000000111877 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_route_open_dlsym_pcm_001@@ALSA_0.9 + 787: 00000000000a9994 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_dest@@ALSA_0.9 + 788: 000000000003c1c0 444 FUNC GLOBAL DEFAULT 12 snd_user_file@@ALSA_0.9 + 789: 000000000004c58c 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_volume_all@@ALSA_0.9 + 790: 00000000000a86b4 168 FUNC GLOBAL DEFAULT 12 snd_seq_get_queue_usage@@ALSA_0.9 + 791: 000000000005c2b0 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_access_last@ALSA_0.9 + 792: 00000000000578a8 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_access_last@@ALSA_0.9.0rc4 + 793: 00000000000578c8 76 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_access_mask@@ALSA_0.9 + 794: 0000000000057220 96 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_malloc@@ALSA_0.9 + 795: 000000000003f18c 132 FUNC GLOBAL DEFAULT 12 snd_hctl_open@@ALSA_0.9 + 796: 00000000000a619c 248 FUNC GLOBAL DEFAULT 12 snd_seq_poll_descriptors@@ALSA_0.9 + 797: 00000000000a41f0 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_set_image@@ALSA_0.9 + 798: 0000000000040610 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_callback_private@@ALSA_0.9 + 799: 0000000000095f2c 568 FUNC GLOBAL DEFAULT 12 snd_pcm_iec958_open@@ALSA_0.9 + 800: 0000000000054be4 232 FUNC GLOBAL DEFAULT 12 snd_pcm_status_dump@@ALSA_0.9 + 801: 0000000000058910 12 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9 + 802: 00000000000ab948 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_convert_from_stream@@ALSA_0.9 + 803: 000000000004d1a4 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_switch_all@@ALSA_0.9 + 804: 00000000000a8190 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_get_queue@@ALSA_0.9 + 805: 0000000000057f34 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_last@@ALSA_0.9.0rc4 + 806: 000000000005c46c 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_last@ALSA_0.9 + 807: 0000000000057ec0 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_min@@ALSA_0.9 + 808: 000000000004c0f8 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_playback_volume_joined@@ALSA_0.9 + 809: 000000000003f990 60 FUNC GLOBAL DEFAULT 12 snd_hctl_set_callback_private@@ALSA_0.9 + 810: 0000000000086170 1160 FUNC GLOBAL DEFAULT 12 snd_pcm_lfloat_convert_integer_float@@ALSA_0.9 + 811: 00000000000654c4 696 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_open@@ALSA_0.9 + 812: 0000000000111872 1 OBJECT GLOBAL DEFAULT 26 __snd_ctl_hw_open_dlsym_control_001@@ALSA_0.9 + 813: 000000000004ad3c 128 FUNC GLOBAL DEFAULT 12 snd_mixer_class_unregister@@ALSA_0.9 + 814: 00000000000a133c 88 FUNC GLOBAL DEFAULT 12 snd_rawmidi_open_lconf@@ALSA_0.9 + 815: 000000000006e4e0 8 FUNC GLOBAL DEFAULT 12 snd_pcm_route_determine_ttable@@ALSA_0.9 + 816: 0000000000043724 120 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_subdevice@@ALSA_0.9 + 817: 00000000000593e4 80 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9 + 818: 00000000000a7290 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_type@@ALSA_0.9 + 819: 0000000000053f28 172 FUNC GLOBAL DEFAULT 12 snd_pcm_poll_descriptors@@ALSA_0.9 + 820: 000000000005892c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time@@ALSA_0.9 + 821: 00000000000434b0 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_used@@ALSA_0.9 + 822: 00000000000570e8 76 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_copy@@ALSA_0.9 + 823: 0000000000061db8 692 FUNC GLOBAL DEFAULT 12 snd_spcm_init_duplex@@ALSA_0.9 + 824: 000000000004bd84 92 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_channel_name@@ALSA_0.9 + 825: 00000000000421ac 76 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_iface_name@@ALSA_0.9 + 826: 000000000005746c 12 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_none@@ALSA_0.9 + 827: 0000000000041cb0 68 FUNC GLOBAL DEFAULT 12 snd_ctl_rawmidi_prefer_subdevice@@ALSA_0.9 + 828: 000000000004be44 100 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_is_playback_mono@@ALSA_0.9 + 829: 0000000000057b58 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate@@ALSA_0.9 + 830: 0000000000059a98 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_stream@@ALSA_0.9 + 831: 000000000005c740 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_avail_min@ALSA_0.9 + 832: 0000000000059138 80 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_avail_min@@ALSA_0.9.0rc4 + 833: 0000000000057e98 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_period_time@@ALSA_0.9 + 834: 0000000000059d58 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_set_subdevice@@ALSA_0.9 + 835: 00000000000a04a4 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_id@@ALSA_0.9 + 836: 0000000000043904 68 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_copy@@ALSA_0.9 + 837: 00000000000a16c8 156 FUNC GLOBAL DEFAULT 12 snd_rawmidi_write@@ALSA_0.9 + 838: 0000000000057b08 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_rate@@ALSA_0.9 + 839: 0000000000041088 72 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info@@ALSA_0.9 + 840: 000000000004d284 100 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_is_enum_playback@@ALSA_0.9 + 841: 00000000000a75cc 136 FUNC GLOBAL DEFAULT 12 snd_seq_get_any_port_info@@ALSA_0.9 + 842: 00000000000a6684 72 FUNC GLOBAL DEFAULT 12 snd_seq_system_info@@ALSA_0.9 + 843: 00000000000a92a4 188 FUNC GLOBAL DEFAULT 12 snd_seq_event_output_direct@@ALSA_0.9 + 844: 000000000004a798 136 FUNC GLOBAL DEFAULT 12 snd_mixer_get_hctl@@ALSA_0.9 + 845: 0000000000058394 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods@@ALSA_0.9 + 846: 00000000000a70dc 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_timestamp_real@@ALSA_0.9 + 847: 000000000004cac0 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_capture_volume_joined@@ALSA_0.9 + 848: 0000000000035144 28 FUNC GLOBAL DEFAULT 12 snd_config_copy@@ALSA_0.9 + 849: 000000000009bcd0 204 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_set_param_minmax@@ALSA_0.9 + 850: 0000000000031d38 8 FUNC GLOBAL DEFAULT 12 snd_config_make_pointer@@ALSA_0.9 + 851: 000000000003c138 20 FUNC GLOBAL DEFAULT 12 snd_shm_area_share@@ALSA_0.9 + 852: 0000000000044108 52 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_dimension@@ALSA_0.9 + 853: 00000000000ab87c 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_free@@ALSA_0.9 + 854: 000000000005794c 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_format_first@@ALSA_0.9 + 855: 0000000000056ccc 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_can_sync_start@@ALSA_0.9 + 856: 000000000006b418 432 FUNC GLOBAL DEFAULT 12 snd_pcm_linear_open@@ALSA_0.9 + 857: 00000000000aab40 4 FUNC GLOBAL DEFAULT 12 snd_seq_reset_pool_output@@ALSA_0.9 + 858: 00000000000a1420 96 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_malloc@@ALSA_0.9 + 859: 000000000005bd64 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_near@ALSA_0.9 + 860: 0000000000057bb8 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_near@@ALSA_0.9.0rc4 + 861: 0000000000059cb4 104 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_sync@@ALSA_0.9 + 862: 000000000009d400 60 FUNC GLOBAL DEFAULT 12 snd_timer_type@@ALSA_0.9 + 863: 0000000000092038 1028 FUNC GLOBAL DEFAULT 12 snd_pcm_direct_slave_recover@@ALSA_0.9 + 864: 000000000005b9fc 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_tick_time_min@ALSA_0.9 + 865: 0000000000053b98 256 FUNC GLOBAL DEFAULT 12 snd_pcm_forwardable@@ALSA_0.9 + 866: 0000000000058904 12 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9.0rc4 + 867: 0000000000049d94 228 FUNC GLOBAL DEFAULT 12 snd_ctl_ext_create@@ALSA_0.9 + 868: 000000000005741c 4 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_free@@ALSA_0.9 + 869: 0000000000031e5c 80 FUNC GLOBAL DEFAULT 12 snd_config_set_integer@@ALSA_0.9 + 870: 000000000007eed0 540 FUNC GLOBAL DEFAULT 12 snd_pcm_null_open@@ALSA_0.9 + 871: 000000000006e4f0 1892 FUNC GLOBAL DEFAULT 12 _snd_pcm_route_open@@ALSA_0.9 + 872: 00000000000583a8 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_min@@ALSA_0.9 + 873: 000000000003acc0 28 FUNC GLOBAL DEFAULT 12 snd_output_putc@@ALSA_0.9 + 874: 00000000000418b8 164 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_tlv_read@@ALSA_0.9 + 875: 00000000000a094c 80 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_set_no_active_sensing@@ALSA_0.9 + 876: 0000000000058898 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9 + 877: 00000000000a0910 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_get_avail_min@@ALSA_0.9 + 878: 00000000000a6c7c 88 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_info@@ALSA_0.9 + 879: 000000000005bab0 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate_max@ALSA_0.9 + 880: 000000000005bed0 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_access_first@ALSA_0.9 + 881: 0000000000057898 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_access_first@@ALSA_0.9.0rc4 + 882: 0000000000057b30 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate_max@@ALSA_0.9.0rc4 + 883: 000000000004b228 248 FUNC GLOBAL DEFAULT 12 snd_mixer_wait@@ALSA_0.9 + 884: 0000000000111610 8 OBJECT GLOBAL DEFAULT 25 snd_lib_error@@ALSA_0.9 + 885: 000000000004bf84 120 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_playback_dB_range@@ALSA_0.9 + 886: 0000000000054bb0 52 FUNC GLOBAL DEFAULT 12 snd_pcm_dump_setup@@ALSA_0.9 + 887: 00000000000a794c 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_set_sender@@ALSA_0.9 + 888: 00000000000a939c 184 FUNC GLOBAL DEFAULT 12 snd_seq_drain_output@@ALSA_0.9 + 889: 0000000000058344 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_periods@@ALSA_0.9.0rc4 + 890: 0000000000057af8 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_last@@ALSA_0.9.0rc4 + 891: 000000000005c3b8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_last@ALSA_0.9 + 892: 000000000005b614 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_periods@ALSA_0.9 + 893: 00000000000572dc 12 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_any@@ALSA_0.9 + 894: 00000000000a6378 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_id@@ALSA_0.9 + 895: 00000000000535b0 256 FUNC GLOBAL DEFAULT 12 snd_pcm_start@@ALSA_0.9 + 896: 000000000009bfc0 104 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_mmap_areas@@ALSA_0.9 + 897: 000000000009de90 108 FUNC GLOBAL DEFAULT 12 snd_timer_params@@ALSA_0.9 + 898: 00000000000a6eb8 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_capability@@ALSA_0.9 + 899: 00000000000579f0 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_subformat_last@@ALSA_0.9 + 900: 0000000000032bec 248 FUNC GLOBAL DEFAULT 12 snd_config_search@@ALSA_0.9 + 901: 0000000000099f10 120 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_set_slave_param_list@@ALSA_0.9 + 902: 0000000000111878 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_mulaw_open_dlsym_pcm_001@@ALSA_0.9 + 903: 000000000004cc20 100 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_capture_group@@ALSA_0.9 + 904: 00000000000531bc 140 FUNC GLOBAL DEFAULT 12 snd_pcm_resume@@ALSA_0.9 + 905: 0000000000099c0c 704 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_create@@ALSA_0.9 + 906: 000000000003aca4 28 FUNC GLOBAL DEFAULT 12 snd_output_puts@@ALSA_0.9 + 907: 000000000009f468 84 FUNC GLOBAL DEFAULT 12 snd_timer_query_open_lconf@@ALSA_0.9 + 908: 00000000000a37c4 8 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_sizeof@@ALSA_0.9 + 909: 000000000003b328 60 FUNC GLOBAL DEFAULT 12 snd_async_handler_get_signo@@ALSA_0.9 + 910: 000000000003d3e0 136 FUNC GLOBAL DEFAULT 12 snd_ctl_convert_to_dB@@ALSA_0.9 + 911: 0000000000034338 268 FUNC GLOBAL DEFAULT 12 snd_config_substitute@@ALSA_0.9 + 912: 000000000003a6ec 264 FUNC GLOBAL DEFAULT 12 snd_input_buffer_open@@ALSA_0.9 + 913: 0000000000037450 324 FUNC GLOBAL DEFAULT 12 snd_config_searcha_hooks@@ALSA_0.9 + 914: 00000000000433f4 4 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_free@@ALSA_0.9 + 915: 00000000000a64c4 4 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_free@@ALSA_0.9 + 916: 00000000000597c4 108 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_audio_htstamp_report@@ALSA_0.9 + 917: 000000000005c978 72 FUNC GLOBAL DEFAULT 12 snd_pcm_free_chmaps@@ALSA_0.9 + 918: 00000000000325f0 576 FUNC GLOBAL DEFAULT 12 snd_config_get_ascii@@ALSA_0.9 + 919: 00000000000a1514 72 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_get_tstamp@@ALSA_0.9 + 920: 00000000000a2b60 568 FUNC GLOBAL DEFAULT 12 _snd_rawmidi_virtual_open@@ALSA_0.9 + 921: 000000000009f910 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_set_class@@ALSA_0.9 + 922: 00000000000a3588 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_name@@ALSA_0.9 + 923: 000000000004b1a4 132 FUNC GLOBAL DEFAULT 12 snd_mixer_poll_descriptors_revents@@ALSA_0.9 + 924: 0000000000038d54 372 FUNC GLOBAL DEFAULT 12 snd_determine_driver@@ALSA_0.9 + 925: 00000000000a892c 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_get_tick_time@@ALSA_0.9 + 926: 0000000000057d2c 84 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_export_buffer@@ALSA_0.9 + 927: 00000000000449bc 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_integer@@ALSA_0.9 + 928: 00000000000428a4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_get_device@@ALSA_0.9 + 929: 0000000000058344 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_periods@@ALSA_0.9 + 930: 0000000000056b40 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_can_resume@@ALSA_0.9 + 931: 00000000000392f0 420 FUNC GLOBAL DEFAULT 12 snd_func_card_name@@ALSA_0.9 + 932: 00000000000a4680 452 FUNC GLOBAL DEFAULT 12 _snd_hwdep_hw_open@@ALSA_0.9 + 933: 0000000000031d28 8 FUNC GLOBAL DEFAULT 12 snd_config_make_real@@ALSA_0.9 + 934: 00000000000a8a5c 96 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_malloc@@ALSA_0.9 + 935: 00000000000a5e8c 204 FUNC GLOBAL DEFAULT 12 snd_seq_open@@ALSA_0.9 + 936: 0000000000111863 1 OBJECT GLOBAL DEFAULT 26 _snd_func_pcm_args_by_class_dlsym_config_evaluate_001@@ALSA_0.9 + 937: 00000000000415e4 240 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_add_enumerated@@ALSA_0.9 + 938: 000000000005d2d8 2152 FUNC GLOBAL DEFAULT 12 snd_pcm_set_params@@ALSA_0.9 + 939: 00000000000a029c 96 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_malloc@@ALSA_0.9 + 940: 00000000000a099c 64 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_get_no_active_sensing@@ALSA_0.9 + 941: 0000000000058944 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_minmax@@ALSA_0.9 + 942: 0000000000059830 80 FUNC GLOBAL DEFAULT 12 snd_pcm_status_set_audio_htstamp_config@@ALSA_0.9 + 943: 00000000000404a8 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_device@@ALSA_0.9 + 944: 00000000000594d4 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_silence_size@@ALSA_0.9.0rc4 + 945: 000000000005c8f8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_silence_size@ALSA_0.9 + 946: 00000000000547c0 36 FUNC GLOBAL DEFAULT 12 snd_pcm_tstamp_mode_name@@ALSA_0.9 + 947: 000000000009bbf4 60 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_params_reset@@ALSA_0.9 + 948: 00000000000a83c0 100 FUNC GLOBAL DEFAULT 12 snd_seq_create_queue@@ALSA_0.9 + 949: 00000000000a8ec8 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_get_queue@@ALSA_0.9 + 950: 0000000000059434 160 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_silence_size@@ALSA_0.9 + 951: 00000000000445c4 92 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_id@@ALSA_0.9 + 952: 0000000000084424 240 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_s16_open@@ALSA_0.9 + 953: 0000000000059c3c 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_subdevices_count@@ALSA_0.9 + 954: 0000000000043178 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_name@@ALSA_0.9 + 955: 0000000000043f40 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_items@@ALSA_0.9 + 956: 00000000000a395c 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_get_name@@ALSA_0.9 + 957: 00000000000a7254 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_capability@@ALSA_0.9 + 958: 000000000009dc44 64 FUNC GLOBAL DEFAULT 12 snd_timer_params_get_exclusive@@ALSA_0.9.0 + 959: 000000000005714c 52 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_test@@ALSA_0.9 + 960: 00000000000a7194 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_port@@ALSA_0.9 + 961: 0000000000031c18 92 FUNC GLOBAL DEFAULT 12 snd_config_remove@@ALSA_0.9 + 962: 00000000000a711c 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_timestamp_queue@@ALSA_0.9 + 963: 0000000000031d18 8 FUNC GLOBAL DEFAULT 12 snd_config_make_integer@@ALSA_0.9 + 964: 00000000000a1d48 1268 FUNC GLOBAL DEFAULT 12 snd_rawmidi_hw_open@@ALSA_0.9 + 965: 00000000000a9ac0 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_queue@@ALSA_0.9 + 966: 0000000000044a28 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_integer64@@ALSA_0.9 + 967: 000000000009fab4 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_get_device@@ALSA_0.9 + 968: 000000000005a150 176 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap_commit@@ALSA_0.9 + 969: 0000000000059970 8 FUNC GLOBAL DEFAULT 12 snd_pcm_info_sizeof@@ALSA_0.9 + 970: 0000000000042f8c 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_set_name@@ALSA_0.9 + 971: 000000000005895c 8 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9 + 972: 000000000004bafc 152 FUNC GLOBAL DEFAULT 12 snd_mixer_find_selem@@ALSA_0.9 + 973: 0000000000032e38 316 FUNC GLOBAL DEFAULT 12 snd_config_searcha@@ALSA_0.9 + 974: 0000000000054ee4 148 FUNC GLOBAL DEFAULT 12 snd_pcm_samples_to_bytes@@ALSA_0.9 + 975: 0000000000040d3c 112 FUNC GLOBAL DEFAULT 12 snd_ctl_close@@ALSA_0.9 + 976: 0000000000052eb8 160 FUNC GLOBAL DEFAULT 12 snd_pcm_state@@ALSA_0.9 + 977: 00000000000b2540 256 FUNC GLOBAL DEFAULT 12 snd_tplg_new@@ALSA_0.9 + 978: 00000000000537b0 184 FUNC GLOBAL DEFAULT 12 snd_pcm_drain@@ALSA_0.9 + 979: 00000000000ab8cc 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_follow_alias@@ALSA_0.9 + 980: 0000000000040cc4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_name@@ALSA_0.9 + 981: 0000000000069a8c 396 FUNC GLOBAL DEFAULT 12 snd_pcm_copy_open@@ALSA_0.9 + 982: 0000000000057b6c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_min@@ALSA_0.9 + 983: 000000000009db3c 100 FUNC GLOBAL DEFAULT 12 snd_timer_params_set_auto_start@@ALSA_0.9 + 984: 0000000000058114 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_max@@ALSA_0.9 + 985: 000000000003cad8 488 FUNC GLOBAL DEFAULT 12 snd_tlv_get_dB_range@@ALSA_0.9 + 986: 0000000000044398 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_interface@@ALSA_0.9 + 987: 0000000000043a04 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_volatile@@ALSA_0.9 + 988: 000000000008a40c 940 FUNC GLOBAL DEFAULT 12 _snd_pcm_ladspa_open@@ALSA_0.9 + 989: 000000000007c3b0 996 FUNC GLOBAL DEFAULT 12 snd_pcm_shm_open@@ALSA_0.9 + 990: 0000000000044b6c 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_boolean@@ALSA_0.9 + 991: 000000000009f6c8 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_resolution_min@@ALSA_0.9 + 992: 0000000000058464 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9 + 993: 00000000000ab8f4 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_follow_alias@@ALSA_0.9 + 994: 00000000000a790c 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_get_time_real@@ALSA_0.9 + 995: 000000000009f824 8 FUNC GLOBAL DEFAULT 12 snd_timer_id_sizeof@@ALSA_0.9 + 996: 0000000000059ad4 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_card@@ALSA_0.9 + 997: 00000000000a3a7c 68 FUNC GLOBAL DEFAULT 12 snd_hwdep_ioctl@@ALSA_0.9 + 998: 000000000003c6bc 196 FUNC GLOBAL DEFAULT 12 snd_card_get_name@@ALSA_0.9 + 999: 00000000000a05d0 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_set_device@@ALSA_0.9 + 1000: 0000000000086660 4 FUNC GLOBAL DEFAULT 12 snd_pcm_lfloat_put_s32_index@@ALSA_0.9 + 1001: 0000000000111865 1 OBJECT GLOBAL DEFAULT 26 _snd_func_datadir_dlsym_config_evaluate_001@@ALSA_0.9 + 1002: 00000000000584ec 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9.0rc4 + 1003: 000000000005be34 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_near@ALSA_0.9 + 1004: 00000000000ab938 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_load@@ALSA_0.9 + 1005: 00000000000a7b1c 72 FUNC GLOBAL DEFAULT 12 snd_seq_get_port_subscription@@ALSA_0.9 + 1006: 000000000003c780 196 FUNC GLOBAL DEFAULT 12 snd_card_get_longname@@ALSA_0.9 + 1007: 000000000004b6f0 96 FUNC GLOBAL DEFAULT 12 snd_mixer_class_malloc@@ALSA_0.9 + 1008: 00000000000a3ee0 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_get_chip_ready@@ALSA_0.9 + 1009: 0000000000034758 92 FUNC GLOBAL DEFAULT 12 snd_config_save@@ALSA_0.9 + 1010: 000000000004485c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_device@@ALSA_0.9 + 1011: 000000000005482c 36 FUNC GLOBAL DEFAULT 12 snd_pcm_type_name@@ALSA_0.9.0 + 1012: 0000000000057140 12 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_any@@ALSA_0.9 + 1013: 0000000000043e68 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_max64@@ALSA_0.9 + 1014: 00000000000a0790 84 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_copy@@ALSA_0.9 + 1015: 0000000000032ce4 340 FUNC GLOBAL DEFAULT 12 snd_config_searchv@@ALSA_0.9 + 1016: 000000000005c4c8 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_last@ALSA_0.9 + 1017: 00000000000582d8 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_last@@ALSA_0.9.0rc4 + 1018: 0000000000058670 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_min@@ALSA_0.9 + 1019: 00000000000aa7e4 132 FUNC GLOBAL DEFAULT 12 snd_seq_disconnect_from@@ALSA_0.9 + 1020: 000000000004cd7c 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_capture_volume@@ALSA_0.9 + 1021: 00000000000403d4 92 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_id@@ALSA_0.9 + 1022: 00000000000a7158 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_client@@ALSA_0.9 + 1023: 0000000000111875 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_copy_open_dlsym_pcm_001@@ALSA_0.9 + 1024: 0000000000052bd4 76 FUNC GLOBAL DEFAULT 12 snd_pcm_info@@ALSA_0.9 + 1025: 00000000000427b8 4 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_free@@ALSA_0.9 + 1026: 0000000000041044 68 FUNC GLOBAL DEFAULT 12 snd_ctl_subscribe_events@@ALSA_0.9 + 1027: 000000000004b480 136 FUNC GLOBAL DEFAULT 12 snd_mixer_handle_events@@ALSA_0.9 + 1028: 0000000000057478 12 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_any@@ALSA_0.9 + 1029: 000000000004d5e0 56 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_get_name@@ALSA_0.9 + 1030: 00000000000a6a38 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_set_client@@ALSA_0.9 + 1031: 0000000000111860 1 OBJECT GLOBAL DEFAULT 26 _snd_config_hook_load_for_all_cards_dlsym_config_hook_001@@ALSA_0.9 + 1032: 0000000000044410 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_subdevice@@ALSA_0.9 + 1033: 000000000009bbec 8 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_delete@@ALSA_0.9 + 1034: 000000000003fa10 516 FUNC GLOBAL DEFAULT 12 snd_hctl_wait@@ALSA_0.9 + 1035: 0000000000034024 12 FUNC GLOBAL DEFAULT 12 snd_config_load_override@@ALSA_0.9 + 1036: 0000000000040100 180 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_write@@ALSA_0.9 + 1037: 0000000000057e84 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_time_max@@ALSA_0.9.0rc4 + 1038: 0000000000058648 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_buffer_size@@ALSA_0.9 + 1039: 000000000005bb0c 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_time_max@ALSA_0.9 + 1040: 000000000009d858 68 FUNC GLOBAL DEFAULT 12 snd_timer_info_copy@@ALSA_0.9 + 1041: 0000000000053868 276 FUNC GLOBAL DEFAULT 12 snd_pcm_pause@@ALSA_0.9 + 1042: 00000000000a3f24 96 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_malloc@@ALSA_0.9 + 1043: 000000000004c47c 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_volume@@ALSA_0.9 + 1044: 0000000000067098 148 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap_readi@@ALSA_0.9 + 1045: 000000000005bfd8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_first@ALSA_0.9 + 1046: 0000000000057ae8 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_first@@ALSA_0.9.0rc4 + 1047: 000000000009d6d4 228 FUNC GLOBAL DEFAULT 12 snd_async_add_timer_handler@@ALSA_0.9 + 1048: 0000000000042080 84 FUNC GLOBAL DEFAULT 12 snd_ctl_open_lconf@@ALSA_0.9 + 1049: 000000000006577c 1696 FUNC GLOBAL DEFAULT 12 _snd_pcm_hw_open@@ALSA_0.9 + 1050: 0000000000042994 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_set_numid@@ALSA_0.9 + 1051: 000000000004114c 88 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info@@ALSA_0.9 + 1052: 00000000000321ac 100 FUNC GLOBAL DEFAULT 12 snd_config_get_integer64@@ALSA_0.9 + 1053: 00000000000a3f84 56 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_free@@ALSA_0.9 + 1054: 000000000005c9c0 40 FUNC GLOBAL DEFAULT 12 snd_pcm_get_chmap@@ALSA_0.9 + 1055: 00000000000a03b4 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_subdevice@@ALSA_0.9 + 1056: 000000000005894c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9.0rc4 + 1057: 000000000005be9c 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_near@ALSA_0.9 + 1058: 000000000006712c 148 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap_readn@@ALSA_0.9 + 1059: 00000000000783ac 1224 FUNC GLOBAL DEFAULT 12 _snd_pcm_plug_open@@ALSA_0.9 + 1060: 000000000009e0f8 60 FUNC GLOBAL DEFAULT 12 snd_timer_status_get_queue@@ALSA_0.9 + 1061: 00000000000428e0 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_get_subdevice@@ALSA_0.9 + 1062: 000000000004adbc 84 FUNC GLOBAL DEFAULT 12 snd_mixer_load@@ALSA_0.9 + 1063: 0000000000044288 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_name@@ALSA_0.9 + 1064: 0000000000040430 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_numid@@ALSA_0.9 + 1065: 000000000003c848 404 FUNC GLOBAL DEFAULT 12 snd_tlv_parse_dB_info@@ALSA_0.9 + 1066: 00000000000a3cf4 8 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_sizeof@@ALSA_0.9 + 1067: 000000000009df64 56 FUNC GLOBAL DEFAULT 12 snd_timer_status_free@@ALSA_0.9 + 1068: 000000000004c8c8 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_capture_volume_range@@ALSA_0.9 + 1069: 00000000000a7e6c 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_queue@@ALSA_0.9 + 1070: 0000000000057084 96 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_malloc@@ALSA_0.9 + 1071: 0000000000059280 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_start_threshold@@ALSA_0.9.0rc4 + 1072: 000000000005c7f0 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_start_threshold@ALSA_0.9 + 1073: 000000000004b6ac 60 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_get_type@@ALSA_0.9 + 1074: 00000000000a6a74 68 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_set_name@@ALSA_0.9 + 1075: 00000000000a6648 60 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_get_cur_queues@@ALSA_0.9 + 1076: 000000000005973c 68 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_audio_htstamp@@ALSA_0.9 + 1077: 0000000000058358 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_periods_min@@ALSA_0.9 + 1078: 0000000000032314 100 FUNC GLOBAL DEFAULT 12 snd_config_get_string@@ALSA_0.9 + 1079: 000000000005841c 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_periods_last@@ALSA_0.9 + 1080: 00000000000444d0 96 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_malloc@@ALSA_0.9 + 1081: 00000000000a5f58 100 FUNC GLOBAL DEFAULT 12 snd_seq_open_lconf@@ALSA_0.9 + 1082: 000000000009eaf0 592 FUNC GLOBAL DEFAULT 12 _snd_timer_hw_open@@ALSA_0.9 + 1083: 00000000000856b0 724 FUNC GLOBAL DEFAULT 12 _snd_pcm_hook_ctl_elems_install@@ALSA_0.9 + 1084: 0000000000058430 12 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_integer@@ALSA_0.9 + 1085: 00000000000ab8e0 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_len@@ALSA_0.9 + 1086: 00000000000a8c84 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_set_ppq@@ALSA_0.9 + 1087: 000000000005c950 40 FUNC GLOBAL DEFAULT 12 snd_pcm_query_chmaps@@ALSA_0.9 + 1088: 0000000000060110 76 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_refine@@ALSA_0.9 + 1089: 00000000000a9044 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_set_resolution@@ALSA_0.9 + 1090: 00000000000402f8 160 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_tlv_command@@ALSA_0.9 + 1091: 00000000000aa6c8 4 FUNC GLOBAL DEFAULT 12 snd_seq_delete_simple_port@@ALSA_0.9 + 1092: 000000000006e160 896 FUNC GLOBAL DEFAULT 12 snd_pcm_route_open@@ALSA_0.9 + 1093: 0000000000042618 60 FUNC GLOBAL DEFAULT 12 _snd_ctl_poll_descriptor@@ALSA_0.9 + 1094: 00000000000a0294 8 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_sizeof@@ALSA_0.9 + 1095: 000000000009f74c 108 FUNC GLOBAL DEFAULT 12 snd_timer_query_params@@ALSA_0.9.0 + 1096: 0000000000057f34 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_period_time_last@@ALSA_0.9 + 1097: 000000000009de18 60 FUNC GLOBAL DEFAULT 12 snd_timer_params_set_filter@@ALSA_0.9.0 + 1098: 00000000000841ec 124 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_get_channels@@ALSA_0.9 + 1099: 00000000000a98e0 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_condition@@ALSA_0.9 + 1100: 000000000009e044 60 FUNC GLOBAL DEFAULT 12 snd_timer_status_get_resolution@@ALSA_0.9 + 1101: 0000000000057ee8 36 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_minmax@@ALSA_0.9 + 1102: 00000000000a6594 60 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_get_ports@@ALSA_0.9 + 1103: 00000000000b22e0 176 FUNC GLOBAL DEFAULT 12 snd_tplg_add_object@@ALSA_0.9 + 1104: 000000000008e72c 2372 FUNC GLOBAL DEFAULT 12 snd_pcm_dshare_open@@ALSA_0.9 + 1105: 00000000000a6b14 92 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_set_error_bounce@@ALSA_0.9 + 1106: 00000000000685b4 148 FUNC GLOBAL DEFAULT 12 snd_pcm_generic_real_htimestamp@@ALSA_0.9 + 1107: 0000000000111890 1 OBJECT GLOBAL DEFAULT 26 __snd_timer_query_hw_open_dlsym_timer_query_001@@ALSA_0.9 + 1108: 0000000000043c7c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_count@@ALSA_0.9 + 1109: 0000000000044cb0 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_enumerated@@ALSA_0.9 + 1110: 0000000000057180 32 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_empty@@ALSA_0.9 + 1111: 000000000009d954 60 FUNC GLOBAL DEFAULT 12 snd_timer_info_get_name@@ALSA_0.9 + 1112: 000000000004c9c0 168 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_volume_range@@ALSA_0.9 + 1113: 0000000000041808 88 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_read@@ALSA_0.9 + 1114: 00000000000382cc 264 FUNC GLOBAL DEFAULT 12 snd_config_get_ctl_iface@@ALSA_0.9 + 1115: 0000000000032274 160 FUNC GLOBAL DEFAULT 12 snd_config_get_ireal@@ALSA_0.9 + 1116: 00000000000a9bb8 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_event_type@@ALSA_0.9 + 1117: 0000000000058278 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_first@@ALSA_0.9.0rc4 + 1118: 00000000000a042c 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_card@@ALSA_0.9 + 1119: 000000000005c0e8 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_first@ALSA_0.9 + 1120: 000000000009f88c 56 FUNC GLOBAL DEFAULT 12 snd_timer_id_free@@ALSA_0.9 + 1121: 000000000008441c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_set_callback_private@@ALSA_0.9 + 1122: 00000000000ab1b8 136 FUNC GLOBAL DEFAULT 12 snd_midi_event_new@@ALSA_0.9 + 1123: 000000000004046c 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_interface@@ALSA_0.9 + 1124: 00000000000333fc 240 FUNC GLOBAL DEFAULT 12 snd_config_delete@@ALSA_0.9 + 1125: 000000000004abfc 64 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_info@@ALSA_0.9 + 1126: 00000000000ab8e4 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_name@@ALSA_0.9 + 1127: 0000000000044788 92 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_id@@ALSA_0.9 + 1128: 0000000000057914 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_format@@ALSA_0.9.0rc4 + 1129: 0000000000044df4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_bytes@@ALSA_0.9 + 1130: 00000000000a68ec 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_pid@@ALSA_0.9 + 1131: 000000000005b3f8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_format@ALSA_0.9 + 1132: 00000000000590e0 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_avail_min@@ALSA_0.9 + 1133: 00000000000a0004 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_name@@ALSA_0.9 + 1134: 00000000000a71d0 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_addr@@ALSA_0.9 + 1135: 0000000000039c6c 452 FUNC GLOBAL DEFAULT 12 snd_func_private_pcm_subdevice@@ALSA_0.9 + 1136: 000000000007e374 1316 FUNC GLOBAL DEFAULT 12 _snd_pcm_file_open@@ALSA_0.9 + 1137: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.0rc4 + 1138: 0000000000043b44 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_tlv_readable@@ALSA_0.9 + 1139: 00000000000aab44 4 FUNC GLOBAL DEFAULT 12 snd_seq_reset_pool_input@@ALSA_0.9 + 1140: 0000000000059138 80 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_avail_min@@ALSA_0.9 + 1141: 0000000000099f88 192 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_set_slave_param_minmax@@ALSA_0.9 + 1142: 000000000003e5b8 1116 FUNC GLOBAL DEFAULT 12 snd_device_name_hint@@ALSA_0.9 + 1143: 00000000000a8244 64 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_get_locked@@ALSA_0.9 + 1144: 000000000004d018 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_volume_all@@ALSA_0.9 + 1145: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.0rc8 + 1146: 000000000007a5d4 976 FUNC GLOBAL DEFAULT 12 snd_pcm_multi_open@@ALSA_0.9 + 1147: 00000000000a0334 68 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_copy@@ALSA_0.9 + 1148: 00000000000a8208 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_get_owner@@ALSA_0.9 + 1149: 00000000000596f4 72 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_htstamp@@ALSA_0.9.0rc8 + 1150: 0000000000111882 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_share_open_dlsym_pcm_001@@ALSA_0.9 + 1151: 0000000000056650 232 FUNC GLOBAL DEFAULT 12 snd_pcm_areas_copy_wrap@@ALSA_0.9 + 1152: 000000000004d580 4 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_free@@ALSA_0.9 + 1153: 00000000000419c4 104 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_tlv_command@@ALSA_0.9 + 1154: 000000000004231c 140 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_id@@ALSA_0.9 + 1155: 0000000000042f14 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_set_device@@ALSA_0.9 + 1156: 0000000000057a10 44 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_subformat_mask@@ALSA_0.9 + 1157: 0000000000074dd4 704 FUNC GLOBAL DEFAULT 12 _snd_pcm_rate_open@@ALSA_0.9 + 1158: 00000000000a3d5c 56 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_free@@ALSA_0.9 + 1159: 0000000000053c98 284 FUNC GLOBAL DEFAULT 12 snd_pcm_forward@@ALSA_0.9.0rc8 + 1160: 00000000000a7c5c 4 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_free@@ALSA_0.9 + 1161: 0000000000056380 720 FUNC GLOBAL DEFAULT 12 snd_pcm_areas_copy@@ALSA_0.9 + 1162: 000000000005479c 36 FUNC GLOBAL DEFAULT 12 snd_pcm_xrun_mode_name@@ALSA_0.9 + 1163: 0000000000059880 60 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_delay@@ALSA_0.9 + 1164: 00000000000a8424 160 FUNC GLOBAL DEFAULT 12 snd_seq_alloc_named_queue@@ALSA_0.9 + 1165: 0000000000058358 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_periods_min@@ALSA_0.9.0rc4 + 1166: 000000000005b8ec 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_periods_min@ALSA_0.9 + 1167: 0000000000066f70 148 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap_writei@@ALSA_0.9 + 1168: 0000000000038bb0 112 FUNC GLOBAL DEFAULT 12 snd_func_datadir@@ALSA_0.9 + 1169: 00000000000b1c60 1664 FUNC GLOBAL DEFAULT 12 snd_tplg_build_file@@ALSA_0.9 + 1170: 000000000004cc84 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_ask_capture_vol_dB@@ALSA_0.9 + 1171: 000000000003f624 104 FUNC GLOBAL DEFAULT 12 snd_hctl_find_elem@@ALSA_0.9 + 1172: 000000000004435c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_numid@@ALSA_0.9 + 1173: 0000000000059658 72 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_trigger_htstamp@@ALSA_0.9.0rc8 + 1174: 000000000004b750 44 FUNC GLOBAL DEFAULT 12 snd_mixer_class_free@@ALSA_0.9 + 1175: 0000000000058c9c 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_copy@@ALSA_0.9 + 1176: 00000000000a67b8 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_type@@ALSA_0.9 + 1177: 00000000000a6be0 144 FUNC GLOBAL DEFAULT 12 snd_seq_get_any_client_info@@ALSA_0.9 + 1178: 000000000004d220 100 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_is_enumerated@@ALSA_0.9 + 1179: 00000000000448d4 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_name@@ALSA_0.9 + 1180: 0000000000067004 148 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap_writen@@ALSA_0.9 + 1181: 000000000004d6a4 60 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_set_index@@ALSA_0.9 + 1182: 0000000000111868 1 OBJECT GLOBAL DEFAULT 26 _snd_func_getenv_dlsym_config_evaluate_001@@ALSA_0.9 + 1183: 000000000009e1a0 68 FUNC GLOBAL DEFAULT 12 snd_timer_start@@ALSA_0.9 + 1184: 000000000004ce00 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_capture_dB@@ALSA_0.9 + 1185: 0000000000058954 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9.0rc4 + 1186: 000000000005c254 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_first@ALSA_0.9 + 1187: 000000000004c7cc 124 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_is_capture_mono@@ALSA_0.9 + 1188: 00000000000b252c 12 FUNC GLOBAL DEFAULT 12 snd_tplg_set_version@@ALSA_0.9 + 1189: 00000000000a0898 120 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_set_avail_min@@ALSA_0.9 + 1190: 00000000000685a8 12 FUNC GLOBAL DEFAULT 12 snd_pcm_generic_htimestamp@@ALSA_0.9 + 1191: 0000000000058338 12 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_integer@@ALSA_0.9 + 1192: 0000000000083c38 1076 FUNC GLOBAL DEFAULT 12 _snd_pcm_meter_open@@ALSA_0.9 + 1193: 00000000000a5e50 60 FUNC GLOBAL DEFAULT 12 snd_seq_type@@ALSA_0.9 + 1194: 0000000000041bdc 68 FUNC GLOBAL DEFAULT 12 snd_ctl_pcm_prefer_subdevice@@ALSA_0.9 + 1195: 0000000000044e30 76 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_iec958@@ALSA_0.9 + 1196: 0000000000057a6c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_channels@@ALSA_0.9 + 1197: 0000000000086608 88 FUNC GLOBAL DEFAULT 12 snd_pcm_lfloat_get_s32_index@@ALSA_0.9 + 1198: 0000000000042fcc 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_set_index@@ALSA_0.9 + 1199: 0000000000084514 236 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_s16_get_channel_buffer@@ALSA_0.9 + 1200: 0000000000094f90 516 FUNC GLOBAL DEFAULT 12 _snd_pcm_asym_open@@ALSA_0.9 + 1201: 00000000000a3740 132 FUNC GLOBAL DEFAULT 12 snd_hwdep_nonblock@@ALSA_0.9 + 1202: 0000000000057cbc 112 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_export_buffer@@ALSA_0.9 + 1203: 000000000009fa78 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_set_device@@ALSA_0.9 + 1204: 0000000000043fac 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_item@@ALSA_0.9 + 1205: 000000000003d468 152 FUNC GLOBAL DEFAULT 12 snd_ctl_convert_from_dB@@ALSA_0.9 + 1206: 00000000000a6404 88 FUNC GLOBAL DEFAULT 12 snd_seq_get_input_buffer_size@@ALSA_0.9 + 1207: 00000000000a9794 64 FUNC GLOBAL DEFAULT 12 snd_seq_drop_output_buffer@@ALSA_0.9 + 1208: 0000000000057924 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_format@@ALSA_0.9 + 1209: 0000000000038c20 308 FUNC GLOBAL DEFAULT 12 snd_func_private_string@@ALSA_0.9 + 1210: 000000000004055c 60 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_get_index@@ALSA_0.9 + 1211: 0000000000058c38 96 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_malloc@@ALSA_0.9 + 1212: 000000000004388c 8 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_sizeof@@ALSA_0.9 + 1213: 00000000000a1598 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_get_xruns@@ALSA_0.9 + 1214: 0000000000042548 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_name@@ALSA_0.9 + 1215: 000000000005907c 80 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_tstamp_type@@ALSA_0.9 + 1216: 00000000000aa41c 36 FUNC GLOBAL DEFAULT 12 snd_seq_set_bit@@ALSA_0.9 + 1217: 0000000000071c68 620 FUNC GLOBAL DEFAULT 12 _snd_pcm_adpcm_open@@ALSA_0.9 + 1218: 00000000000a7778 100 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_copy@@ALSA_0.9 + 1219: 00000000000599d8 4 FUNC GLOBAL DEFAULT 12 snd_pcm_info_free@@ALSA_0.9 + 1220: 000000000005731c 32 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_empty@@ALSA_0.9 + 1221: 000000000005848c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time@@ALSA_0.9 + 1222: 000000000009e0bc 60 FUNC GLOBAL DEFAULT 12 snd_timer_status_get_overrun@@ALSA_0.9 + 1223: 00000000000cf7e8 1024 OBJECT GLOBAL DEFAULT 14 snd_seq_event_types@@ALSA_0.9 + 1224: 000000000003f68c 712 FUNC GLOBAL DEFAULT 12 snd_hctl_load@@ALSA_0.9 + 1225: 0000000000058094 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size@@ALSA_0.9 + 1226: 00000000000574b8 32 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_empty@@ALSA_0.9 + 1227: 00000000000a7d7c 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_type@@ALSA_0.9 + 1228: 0000000000065e54 32 FUNC GLOBAL DEFAULT 12 snd_pcm_format_unsigned@@ALSA_0.9 + 1229: 0000000000054764 20 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_description@@ALSA_0.9 + 1230: 00000000000ab8ac 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_type@@ALSA_0.9 + 1231: 0000000000034030 164 FUNC GLOBAL DEFAULT 12 snd_config_imake_string@@ALSA_0.9 + 1232: 0000000000065ea0 60 FUNC GLOBAL DEFAULT 12 snd_pcm_format_little_endian@@ALSA_0.9 + 1233: 0000000000044898 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_subdevice@@ALSA_0.9 + 1234: 00000000000aa0f0 4 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_free@@ALSA_0.9 + 1235: 0000000000031db0 56 FUNC GLOBAL DEFAULT 12 snd_config_imake_integer64@@ALSA_0.9 + 1236: 00000000000a1684 68 FUNC GLOBAL DEFAULT 12 snd_rawmidi_drain@@ALSA_0.9 + 1237: 00000000000a7bac 72 FUNC GLOBAL DEFAULT 12 snd_seq_unsubscribe_port@@ALSA_0.9 + 1238: 0000000000096164 1532 FUNC GLOBAL DEFAULT 12 _snd_pcm_iec958_open@@ALSA_0.9 + 1239: 000000000005797c 44 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_format_mask@@ALSA_0.9 + 1240: 0000000000052aa8 180 FUNC GLOBAL DEFAULT 12 snd_pcm_nonblock@@ALSA_0.9 + 1241: 00000000000a6464 96 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_malloc@@ALSA_0.9 + 1242: 000000000005930c 68 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9 + 1243: 00000000000aa250 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_get_output_free@@ALSA_0.9 + 1244: 0000000000059bc4 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_class@@ALSA_0.9 + 1245: 0000000000059780 68 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_driver_htstamp@@ALSA_0.9 + 1246: 0000000000058f9c 80 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9 + 1247: 000000000003b7b8 12 FUNC GLOBAL DEFAULT 12 snd_asoundlib_version@@ALSA_0.9 + 1248: 000000000004b908 64 FUNC GLOBAL DEFAULT 12 snd_mixer_class_set_private@@ALSA_0.9 + 1249: 0000000000057898 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_access_first@@ALSA_0.9 + 1250: 00000000000a9820 96 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_malloc@@ALSA_0.9 + 1251: 0000000000058964 192 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_min_align@@ALSA_0.9 + 1252: 0000000000033f18 12 FUNC GLOBAL DEFAULT 12 snd_config_load@@ALSA_0.9 + 1253: 000000000009c078 52 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_hw_avail@@ALSA_0.9 + 1254: 0000000000041cf4 80 FUNC GLOBAL DEFAULT 12 snd_ctl_set_power_state@@ALSA_0.9 + 1255: 00000000000a6294 96 FUNC GLOBAL DEFAULT 12 snd_seq_poll_descriptors_revents@@ALSA_0.9 + 1256: 0000000000059188 72 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_period_event@@ALSA_0.9 + 1257: 0000000000042288 44 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_free_space@@ALSA_0.9 + 1258: 0000000000084268 124 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_get_rate@@ALSA_0.9 + 1259: 00000000000a9afc 64 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_time@@ALSA_0.9 + 1260: 0000000000032210 100 FUNC GLOBAL DEFAULT 12 snd_config_get_real@@ALSA_0.9 + 1261: 0000000000058904 12 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9 + 1262: 000000000005be68 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_near@ALSA_0.9 + 1263: 00000000000587d0 104 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9.0rc4 + 1264: 00000000000a8b58 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_get_tempo@@ALSA_0.9 + 1265: 00000000000ab940 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_convert_to_stream@@ALSA_0.9 + 1266: 00000000000b0e60 696 FUNC GLOBAL DEFAULT 12 snd_use_case_get@@ALSA_0.9 + 1267: 00000000000a9360 60 FUNC GLOBAL DEFAULT 12 snd_seq_event_output_pending@@ALSA_0.9 + 1268: 000000000004a820 8 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_get_private@@ALSA_0.9 + 1269: 000000000009d2d4 84 FUNC GLOBAL DEFAULT 12 snd_timer_open_lconf@@ALSA_0.9 + 1270: 000000000009bc30 160 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_set_param_list@@ALSA_0.9 + 1271: 0000000000043d90 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_step@@ALSA_0.9 + 1272: 0000000000058514 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9 + 1273: 00000000000a3920 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_get_id@@ALSA_0.9 + 1274: 0000000000053354 256 FUNC GLOBAL DEFAULT 12 snd_pcm_prepare@@ALSA_0.9 + 1275: 0000000000065efc 4 FUNC GLOBAL DEFAULT 12 snd_pcm_format_cpu_endian@@ALSA_0.9 + 1276: 0000000000057af8 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_channels_last@@ALSA_0.9 + 1277: 0000000000043a84 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_locked@@ALSA_0.9 + 1278: 000000000005a200 60 FUNC GLOBAL DEFAULT 12 _snd_pcm_poll_descriptor@@ALSA_0.9 + 1279: 00000000000329a0 8 FUNC GLOBAL DEFAULT 12 snd_config_iterator_next@@ALSA_0.9 + 1280: 00000000000447e4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_numid@@ALSA_0.9 + 1281: 000000000004379c 120 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_name@@ALSA_0.9 + 1282: 000000000003c37c 8 FUNC GLOBAL DEFAULT 12 snd_names_list@@ALSA_0.9 + 1283: 000000000009dbe0 100 FUNC GLOBAL DEFAULT 12 snd_timer_params_set_exclusive@@ALSA_0.9.0 + 1284: 0000000000111861 1 OBJECT GLOBAL DEFAULT 26 _snd_config_hook_load_dlsym_config_hook_001@@ALSA_0.9 + 1285: 000000000003a568 28 FUNC GLOBAL DEFAULT 12 snd_input_getc@@ALSA_0.9 + 1286: 0000000000111881 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_empty_open_dlsym_pcm_001@@ALSA_0.9 + 1287: 000000000009fa00 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_set_card@@ALSA_0.9 + 1288: 0000000000044c44 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_integer64@@ALSA_0.9 + 1289: 00000000000585e8 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9.0rc4 + 1290: 000000000005bc7c 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_size_max@ALSA_0.9 + 1291: 00000000000342b4 132 FUNC GLOBAL DEFAULT 12 snd_config_delete_compound_members@@ALSA_0.9 + 1292: 000000000004322c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_components@@ALSA_0.9 + 1293: 000000000004c0a0 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_playback_volume@@ALSA_0.9 + 1294: 0000000000111867 1 OBJECT GLOBAL DEFAULT 26 _snd_func_refer_dlsym_config_evaluate_001@@ALSA_0.9 + 1295: 000000000004ce84 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_capture_switch@@ALSA_0.9 + 1296: 00000000000a77dc 56 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_get_sender@@ALSA_0.9 + 1297: 00000000000ab33c 612 FUNC GLOBAL DEFAULT 12 snd_midi_event_encode_byte@@ALSA_0.9 + 1298: 00000000000a00b8 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_poll_descriptors_count@@ALSA_0.9 + 1299: 0000000000059c78 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_subdevices_avail@@ALSA_0.9 + 1300: 00000000000a8804 8 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_sizeof@@ALSA_0.9 + 1301: 000000000005893c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_max@@ALSA_0.9 + 1302: 000000000004b634 60 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_set_callback_private@@ALSA_0.9 + 1303: 00000000000a9880 4 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_free@@ALSA_0.9 + 1304: 000000000005891c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_tick_time@@ALSA_0.9 + 1305: 0000000000031f54 140 FUNC GLOBAL DEFAULT 12 snd_config_set_string@@ALSA_0.9 + 1306: 000000000004d094 140 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_dB_all@@ALSA_0.9 + 1307: 0000000000111718 8 OBJECT GLOBAL DEFAULT 26 snd_config@@ALSA_0.9 + 1308: 0000000000059580 4 FUNC GLOBAL DEFAULT 12 snd_pcm_status_free@@ALSA_0.9 + 1309: 000000000006b5c8 612 FUNC GLOBAL DEFAULT 12 _snd_pcm_linear_open@@ALSA_0.9 + 1310: 0000000000054dc8 148 FUNC GLOBAL DEFAULT 12 snd_pcm_frames_to_bytes@@ALSA_0.9 + 1311: 000000000009f530 108 FUNC GLOBAL DEFAULT 12 snd_timer_query_next_device@@ALSA_0.9 + 1312: 00000000000594d4 68 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_silence_size@@ALSA_0.9 + 1313: 000000000004b5f8 60 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_set_callback@@ALSA_0.9 + 1314: 00000000000a7ac0 92 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_set_time_real@@ALSA_0.9 + 1315: 00000000000330d4 556 FUNC GLOBAL DEFAULT 12 snd_config_search_alias@@ALSA_0.9 + 1316: 000000000008547c 252 FUNC GLOBAL DEFAULT 12 snd_pcm_hook_add@@ALSA_0.9 + 1317: 000000000003a54c 28 FUNC GLOBAL DEFAULT 12 snd_input_gets@@ALSA_0.9 + 1318: 00000000000ab930 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_free@@ALSA_0.9 + 1319: 000000000004c694 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_switch@@ALSA_0.9 + 1320: 00000000000aa088 8 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_sizeof@@ALSA_0.9 + 1321: 000000000003a458 56 FUNC GLOBAL DEFAULT 12 snd_input_close@@ALSA_0.9 + 1322: 00000000000a3c04 120 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status@@ALSA_0.9 + 1323: 000000000004448c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_index@@ALSA_0.9 + 1324: 00000000000a9ddc 136 FUNC GLOBAL DEFAULT 12 snd_seq_drop_output@@ALSA_0.9 + 1325: 0000000000044054 100 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_dimensions@@ALSA_0.9.3 + 1326: 00000000000a7f68 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_set_client@@ALSA_0.9 + 1327: 000000000005c690 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_tstamp_mode@ALSA_0.9 + 1328: 0000000000058f9c 80 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9.0rc4 + 1329: 0000000000042160 76 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_type_name@@ALSA_0.9 + 1330: 000000000003cf70 992 FUNC GLOBAL DEFAULT 12 snd_tlv_convert_from_dB@@ALSA_0.9 + 1331: 0000000000111871 1 OBJECT GLOBAL DEFAULT 26 _snd_func_card_inum_dlsym_config_evaluate_001@@ALSA_0.9 + 1332: 00000000000584c8 36 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_minmax@@ALSA_0.9 + 1333: 000000000003821c 176 FUNC GLOBAL DEFAULT 12 snd_config_get_ctl_iface_ascii@@ALSA_0.9 + 1334: 0000000000042ed8 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_set_interface@@ALSA_0.9 + 1335: 00000000000a4154 96 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_set_name@@ALSA_0.9 + 1336: 00000000000aa528 24 FUNC GLOBAL DEFAULT 12 snd_seq_get_bit@@ALSA_0.9 + 1337: 00000000000582d8 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_period_size_last@@ALSA_0.9 + 1338: 00000000000443d4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_device@@ALSA_0.9 + 1339: 000000000011188f 1 OBJECT GLOBAL DEFAULT 26 __snd_timer_hw_open_dlsym_timer_001@@ALSA_0.9 + 1340: 000000000004b580 60 FUNC GLOBAL DEFAULT 12 snd_mixer_get_callback_private@@ALSA_0.9 + 1341: 00000000000a65d0 60 FUNC GLOBAL DEFAULT 12 snd_seq_system_info_get_channels@@ALSA_0.9 + 1342: 000000000003adc4 128 FUNC GLOBAL DEFAULT 12 snd_output_stdio_open@@ALSA_0.9 + 1343: 0000000000058b48 232 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_dump@@ALSA_0.9 + 1344: 000000000009a180 152 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_set_param_link@@ALSA_0.9 + 1345: 00000000000a0468 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_flags@@ALSA_0.9 + 1346: 000000000005b7d8 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate_min@ALSA_0.9 + 1347: 00000000000a3c7c 120 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_load@@ALSA_0.9 + 1348: 0000000000057b1c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate_min@@ALSA_0.9.0rc4 + 1349: 000000000009dce8 64 FUNC GLOBAL DEFAULT 12 snd_timer_params_get_early_event@@ALSA_0.9 + 1350: 0000000000043d24 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_max@@ALSA_0.9 + 1351: 00000000000472a8 56 FUNC GLOBAL DEFAULT 12 snd_sctl_free@@ALSA_0.9 + 1352: 00000000000a8abc 4 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_free@@ALSA_0.9 + 1353: 00000000000ab8c4 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_data@@ALSA_0.9 + 1354: 0000000000031eac 84 FUNC GLOBAL DEFAULT 12 snd_config_set_integer64@@ALSA_0.9 + 1355: 00000000000435c0 116 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_numid@@ALSA_0.9 + 1356: 000000000005cc70 40 FUNC GLOBAL DEFAULT 12 snd_pcm_chmap_from_string@@ALSA_0.9 + 1357: 00000000000a060c 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_set_subdevice@@ALSA_0.9 + 1358: 000000000009daa0 56 FUNC GLOBAL DEFAULT 12 snd_timer_params_free@@ALSA_0.9 + 1359: 0000000000059228 16 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_xfer_align@@ALSA_0.9.0rc4 + 1360: 000000000005c798 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_xfer_align@ALSA_0.9 + 1361: 0000000000056d50 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_can_disable_period_wakeup@@ALSA_0.9 + 1362: 000000000004ae10 60 FUNC GLOBAL DEFAULT 12 snd_mixer_free@@ALSA_0.9 + 1363: 0000000000111885 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_hook_ctl_elems_install_dlsym_pcm_001@@ALSA_0.9 + 1364: 000000000004bf0c 120 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_playback_volume_range@@ALSA_0.9 + 1365: 00000000000a3a10 108 FUNC GLOBAL DEFAULT 12 snd_hwdep_info@@ALSA_0.9 + 1366: 000000000003e574 68 FUNC GLOBAL DEFAULT 12 snd_device_name_free_hint@@ALSA_0.9 + 1367: 0000000000042f50 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_set_subdevice@@ALSA_0.9 + 1368: 0000000000052fbc 252 FUNC GLOBAL DEFAULT 12 snd_pcm_hwsync@@ALSA_0.9 + 1369: 00000000000a8340 68 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_set_locked@@ALSA_0.9 + 1370: 00000000000ab958 8 FUNC GLOBAL DEFAULT 12 snd_instr_simple_convert_to_stream@@ALSA_0.9 + 1371: 00000000000592c4 72 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_stop_threshold@@ALSA_0.9 + 1372: 0000000000111889 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_dshare_open_dlsym_pcm_001@@ALSA_0.9 + 1373: 000000000009dd64 60 FUNC GLOBAL DEFAULT 12 snd_timer_params_get_ticks@@ALSA_0.9 + 1374: 0000000000057b44 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_rate@@ALSA_0.9 + 1375: 0000000000056828 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_is_double@@ALSA_0.9 + 1376: 000000000003909c 176 FUNC GLOBAL DEFAULT 12 snd_func_card_driver@@ALSA_0.9 + 1377: 00000000000a155c 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_get_avail@@ALSA_0.9 + 1378: 0000000000111893 1 OBJECT GLOBAL DEFAULT 26 __snd_hwdep_hw_open_dlsym_hwdep_001@@ALSA_0.9 + 1379: 0000000000031d78 56 FUNC GLOBAL DEFAULT 12 snd_config_imake_integer@@ALSA_0.9 + 1380: 000000000009f988 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_set_sclass@@ALSA_0.9 + 1381: 0000000000044530 4 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_free@@ALSA_0.9 + 1382: 00000000000b011c 92 FUNC GLOBAL DEFAULT 12 snd_use_case_free_list@@ALSA_0.9 + 1383: 000000000009243c 124 FUNC GLOBAL DEFAULT 12 snd_pcm_direct_client_chk_xrun@@ALSA_0.9 + 1384: 00000000000a37cc 96 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_malloc@@ALSA_0.9 + 1385: 0000000000041b04 72 FUNC GLOBAL DEFAULT 12 snd_ctl_hwdep_info@@ALSA_0.9 + 1386: 00000000000a94a0 280 FUNC GLOBAL DEFAULT 12 snd_seq_extract_output@@ALSA_0.9 + 1387: 00000000000432d0 4 FUNC GLOBAL DEFAULT 12 snd_ctl_event_free@@ALSA_0.9 + 1388: 000000000003ae44 20 FUNC GLOBAL DEFAULT 12 snd_output_buffer_string@@ALSA_0.9 + 1389: 00000000000a7d08 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_port@@ALSA_0.9 + 1390: 0000000000058408 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_first@@ALSA_0.9.0rc4 + 1391: 000000000005c144 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_first@ALSA_0.9 + 1392: 00000000000a6830 64 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_broadcast_filter@@ALSA_0.9 + 1393: 00000000000ab88c 8 FUNC GLOBAL DEFAULT 12 snd_instr_header_get_cluster@@ALSA_0.9 + 1394: 00000000000a8cc0 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_set_skew@@ALSA_0.9 + 1395: 0000000000043b84 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_tlv_writable@@ALSA_0.9 + 1396: 000000000003ac70 52 FUNC GLOBAL DEFAULT 12 snd_output_vprintf@@ALSA_0.9 + 1397: 00000000000a9a84 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_condition@@ALSA_0.9 + 1398: 000000000009e228 68 FUNC GLOBAL DEFAULT 12 snd_timer_continue@@ALSA_0.9 + 1399: 00000000000a34c0 84 FUNC GLOBAL DEFAULT 12 snd_hwdep_open_lconf@@ALSA_0.9 + 1400: 000000000003c520 412 FUNC GLOBAL DEFAULT 12 snd_card_get_index@@ALSA_0.9 + 1401: 0000000000084170 124 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_get_bufsize@@ALSA_0.9 + 1402: 0000000000042750 8 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_sizeof@@ALSA_0.9 + 1403: 000000000005be00 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_near@ALSA_0.9 + 1404: 00000000000a89a4 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_get_status@@ALSA_0.9 + 1405: 00000000000583f4 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_periods_near@@ALSA_0.9.0rc4 + 1406: 00000000000b1118 288 FUNC GLOBAL DEFAULT 12 snd_use_case_geti@@ALSA_0.9 + 1407: 0000000000083aa4 404 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_open@@ALSA_0.9 + 1408: 000000000004d350 120 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_enum_items@@ALSA_0.9 + 1409: 00000000000a0378 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_device@@ALSA_0.9 + 1410: 000000000011187e 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_shm_open_dlsym_pcm_001@@ALSA_0.9 + 1411: 00000000000a07e4 120 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_set_buffer_size@@ALSA_0.9 + 1412: 0000000000044e7c 68 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_iec958@@ALSA_0.9 + 1413: 00000000000a6d88 68 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_copy@@ALSA_0.9 + 1414: 000000000005843c 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_buffer_time@@ALSA_0.9 + 1415: 0000000000044914 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_index@@ALSA_0.9 + 1416: 0000000000044698 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_device@@ALSA_0.9 + 1417: 00000000000432d4 24 FUNC GLOBAL DEFAULT 12 snd_ctl_event_clear@@ALSA_0.9 + 1418: 00000000000a1480 56 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status_free@@ALSA_0.9 + 1419: 0000000000057d80 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_wakeup@@ALSA_0.9 + 1420: 0000000000057f48 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_period_size@@ALSA_0.9 + 1421: 00000000000a3e2c 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_get_id@@ALSA_0.9 + 1422: 00000000000a3b68 156 FUNC GLOBAL DEFAULT 12 snd_hwdep_read@@ALSA_0.9 + 1423: 0000000000043b04 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_user@@ALSA_0.9 + 1424: 00000000000340d4 272 FUNC GLOBAL DEFAULT 12 snd_config_imake_safe_string@@ALSA_0.9 + 1425: 000000000003258c 100 FUNC GLOBAL DEFAULT 12 snd_config_get_pointer@@ALSA_0.9 + 1426: 0000000000031de8 60 FUNC GLOBAL DEFAULT 12 snd_config_imake_real@@ALSA_0.9 + 1427: 0000000000071ac4 420 FUNC GLOBAL DEFAULT 12 snd_pcm_adpcm_open@@ALSA_0.9 + 1428: 0000000000067298 1884 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap@@ALSA_0.9 + 1429: 0000000000044710 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_name@@ALSA_0.9 + 1430: 00000000000a7308 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_midi_voices@@ALSA_0.9 + 1431: 00000000000a6dcc 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_client@@ALSA_0.9 + 1432: 0000000000037920 264 FUNC GLOBAL DEFAULT 12 snd_config_search_hooks@@ALSA_0.9 + 1433: 000000000009e888 616 FUNC GLOBAL DEFAULT 12 snd_timer_hw_open@@ALSA_0.9 + 1434: 000000000003b3dc 72 FUNC GLOBAL DEFAULT 12 snd_strerror@@ALSA_0.9 + 1435: 0000000000057e84 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_period_time_max@@ALSA_0.9 + 1436: 000000000005c1a0 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_first@ALSA_0.9 + 1437: 00000000000a677c 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_client@@ALSA_0.9 + 1438: 0000000000058500 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9.0rc4 + 1439: 00000000000a798c 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_set_dest@@ALSA_0.9 + 1440: 00000000000530b8 260 FUNC GLOBAL DEFAULT 12 snd_pcm_delay@@ALSA_0.9 + 1441: 000000000003c384 4 FUNC GLOBAL DEFAULT 12 snd_names_list_free@@ALSA_0.9 + 1442: 0000000000057134 12 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_none@@ALSA_0.9 + 1443: 0000000000054fd8 204 FUNC GLOBAL DEFAULT 12 snd_pcm_open@@ALSA_0.9 + 1444: 000000000003ea14 236 FUNC GLOBAL DEFAULT 12 snd_device_name_get_hint@@ALSA_0.9 + 1445: 000000000008440c 8 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_set_ops@@ALSA_0.9 + 1446: 0000000000057810 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_access@@ALSA_0.9 + 1447: 00000000000ab928 8 FUNC GLOBAL DEFAULT 12 snd_instr_iwffff_close@@ALSA_0.9 + 1448: 00000000000a9144 8 FUNC GLOBAL DEFAULT 12 snd_seq_free_event@@ALSA_0.9 + 1449: 00000000000a3864 68 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_copy@@ALSA_0.9 + 1450: 0000000000059978 96 FUNC GLOBAL DEFAULT 12 snd_pcm_info_malloc@@ALSA_0.9 + 1451: 000000000004b04c 152 FUNC GLOBAL DEFAULT 12 snd_mixer_poll_descriptors_count@@ALSA_0.9 + 1452: 0000000000043268 8 FUNC GLOBAL DEFAULT 12 snd_ctl_event_sizeof@@ALSA_0.9 + 1453: 00000000000a68b0 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_card@@ALSA_0.9 + 1454: 00000000000580a8 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_min@@ALSA_0.9 + 1455: 0000000000043a44 64 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_inactive@@ALSA_0.9 + 1456: 0000000000057f0c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_near@@ALSA_0.9.0rc4 + 1457: 0000000000084360 124 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_get_boundary@@ALSA_0.9 + 1458: 000000000005bd98 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_time_near@ALSA_0.9 + 1459: 0000000000057bcc 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_rate_first@@ALSA_0.9 + 1460: 0000000000111887 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_ladspa_open_dlsym_pcm_001@@ALSA_0.9 + 1461: 0000000000058450 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9 + 1462: 0000000000059280 68 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_start_threshold@@ALSA_0.9 + 1463: 00000000000536b0 256 FUNC GLOBAL DEFAULT 12 snd_pcm_drop@@ALSA_0.9 + 1464: 0000000000031b88 80 FUNC GLOBAL DEFAULT 12 snd_config_get_id@@ALSA_0.9 + 1465: 0000000000050f10 36 FUNC GLOBAL DEFAULT 12 snd_mixer_sbasic_set_private@@ALSA_0.9 + 1466: 000000000003ba50 4 FUNC GLOBAL DEFAULT 12 snd_dlclose@@ALSA_0.9 + 1467: 0000000000056dd4 224 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_supports_audio_ts_type@@ALSA_0.9 + 1468: 0000000000032034 288 FUNC GLOBAL DEFAULT 12 snd_config_set_ascii@@ALSA_0.9 + 1469: 000000000009f82c 96 FUNC GLOBAL DEFAULT 12 snd_timer_id_malloc@@ALSA_0.9 + 1470: 0000000000058380 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_periods@@ALSA_0.9 + 1471: 00000000000a8384 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_set_flags@@ALSA_0.9 + 1472: 0000000000057a3c 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_channels@@ALSA_0.9 + 1473: 00000000000ab240 56 FUNC GLOBAL DEFAULT 12 snd_midi_event_free@@ALSA_0.9 + 1474: 00000000000a814c 68 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_copy@@ALSA_0.9 + 1475: 0000000000041d94 72 FUNC GLOBAL DEFAULT 12 snd_ctl_read@@ALSA_0.9 + 1476: 000000000009da38 8 FUNC GLOBAL DEFAULT 12 snd_timer_params_sizeof@@ALSA_0.9 + 1477: 000000000004b424 92 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_prev@@ALSA_0.9 + 1478: 000000000004a618 104 FUNC GLOBAL DEFAULT 12 snd_mixer_attach@@ALSA_0.9 + 1479: 000000000005ba58 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels_max@ALSA_0.9 + 1480: 000000000009de54 60 FUNC GLOBAL DEFAULT 12 snd_timer_params_get_filter@@ALSA_0.9.0 + 1481: 0000000000057a5c 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels_max@@ALSA_0.9.0rc4 + 1482: 0000000000086954 624 FUNC GLOBAL DEFAULT 12 _snd_pcm_lfloat_open@@ALSA_0.9 + 1483: 0000000000043080 68 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_copy@@ALSA_0.9 + 1484: 0000000000059b4c 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_get_name@@ALSA_0.9 + 1485: 000000000005d140 408 FUNC GLOBAL DEFAULT 12 snd_pcm_recover@@ALSA_0.9 + 1486: 00000000000a15d4 108 FUNC GLOBAL DEFAULT 12 snd_rawmidi_status@@ALSA_0.9 + 1487: 00000000000570e4 4 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_free@@ALSA_0.9 + 1488: 0000000000055fe4 924 FUNC GLOBAL DEFAULT 12 snd_pcm_area_copy@@ALSA_0.9 + 1489: 0000000000043814 120 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_get_index@@ALSA_0.9 + 1490: 000000000005843c 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_time@@ALSA_0.9.0rc4 + 1491: 000000000005b670 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_time@ALSA_0.9 + 1492: 000000000004465c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_interface@@ALSA_0.9 + 1493: 000000000009d43c 96 FUNC GLOBAL DEFAULT 12 snd_async_handler_get_timer@@ALSA_0.9 + 1494: 00000000000a8870 68 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_copy@@ALSA_0.9 + 1495: 0000000000057aa8 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_max@@ALSA_0.9 + 1496: 0000000000044bd8 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_integer@@ALSA_0.9 + 1497: 000000000005b5b8 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_size@ALSA_0.9 + 1498: 0000000000057e70 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_time_min@@ALSA_0.9.0rc4 + 1499: 000000000005b834 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_time_min@ALSA_0.9 + 1500: 0000000000057f48 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_size@@ALSA_0.9.0rc4 + 1501: 0000000000041f8c 68 FUNC GLOBAL DEFAULT 12 snd_async_handler_get_ctl@@ALSA_0.9 + 1502: 00000000000a6d1c 8 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_sizeof@@ALSA_0.9 + 1503: 000000000006206c 124 FUNC GLOBAL DEFAULT 12 snd_spcm_init_get_params@@ALSA_0.9 + 1504: 00000000000427bc 20 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_clear@@ALSA_0.9 + 1505: 00000000000aa3cc 80 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_pool@@ALSA_0.9 + 1506: 00000000000438f4 4 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_free@@ALSA_0.9 + 1507: 000000000009f59c 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_sizeof@@ALSA_0.9 + 1508: 000000000003f378 108 FUNC GLOBAL DEFAULT 12 snd_hctl_free@@ALSA_0.9 + 1509: 0000000000040dac 96 FUNC GLOBAL DEFAULT 12 snd_ctl_nonblock@@ALSA_0.9 + 1510: 0000000000050ee0 48 FUNC GLOBAL DEFAULT 12 snd_mixer_sbasic_get_private@@ALSA_0.9 + 1511: 000000000005a96c 1908 FUNC GLOBAL DEFAULT 12 snd_pcm_slave_conf@@ALSA_0.9 + 1512: 000000000009a0c0 192 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_set_param_minmax@@ALSA_0.9 + 1513: 000000000003a5a0 204 FUNC GLOBAL DEFAULT 12 snd_input_stdio_attach@@ALSA_0.9 + 1514: 0000000000041d44 80 FUNC GLOBAL DEFAULT 12 snd_ctl_get_power_state@@ALSA_0.9 + 1515: 00000000000a7f28 64 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_time_real@@ALSA_0.9 + 1516: 00000000000579a8 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_subformat@@ALSA_0.9.0rc4 + 1517: 000000000005b450 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_subformat@ALSA_0.9 + 1518: 00000000000567a4 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_can_mmap_sample_resolution@@ALSA_0.9 + 1519: 0000000000052c20 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_free@@ALSA_0.9 + 1520: 0000000000040fd0 116 FUNC GLOBAL DEFAULT 12 snd_ctl_poll_descriptors_revents@@ALSA_0.9 + 1521: 00000000000a9a48 60 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_get_tag@@ALSA_0.9 + 1522: 00000000000446d4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_get_subdevice@@ALSA_0.9 + 1523: 0000000000056f4c 124 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_sbits@@ALSA_0.9 + 1524: 00000000000a3cfc 96 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_malloc@@ALSA_0.9 + 1525: 000000000004c150 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_playback_switch@@ALSA_0.9 + 1526: 00000000000a72cc 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_midi_channels@@ALSA_0.9 + 1527: 00000000000a7e30 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_addr@@ALSA_0.9 + 1528: 000000000008f070 504 FUNC GLOBAL DEFAULT 12 _snd_pcm_dshare_open@@ALSA_0.9 + 1529: 00000000000a01bc 216 FUNC GLOBAL DEFAULT 12 snd_rawmidi_nonblock@@ALSA_0.9 + 1530: 0000000000111870 1 OBJECT GLOBAL DEFAULT 26 _snd_func_card_name_dlsym_config_evaluate_001@@ALSA_0.9 + 1531: 000000000004bcd4 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_common_volume@@ALSA_0.9 + 1532: 00000000000587d0 104 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9 + 1533: 0000000000043dfc 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_min64@@ALSA_0.9 + 1534: 000000000004413c 92 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_id@@ALSA_0.9 + 1535: 0000000000090954 504 FUNC GLOBAL DEFAULT 12 _snd_pcm_dsnoop_open@@ALSA_0.9 + 1536: 0000000000056eb4 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_supports_audio_wallclock_ts@@ALSA_0.9 + 1537: 000000000005bd30 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_near@ALSA_0.9 + 1538: 0000000000057ad8 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_channels_near@@ALSA_0.9.0rc4 + 1539: 0000000000040258 160 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_tlv_write@@ALSA_0.9 + 1540: 00000000000a3df0 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_get_version@@ALSA_0.9 + 1541: 0000000000058954 8 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9 + 1542: 000000000009d89c 64 FUNC GLOBAL DEFAULT 12 snd_timer_info_is_slave@@ALSA_0.9 + 1543: 00000000000a0684 108 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info@@ALSA_0.9 + 1544: 00000000000a770c 8 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_sizeof@@ALSA_0.9 + 1545: 0000000000043008 8 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_sizeof@@ALSA_0.9 + 1546: 000000000003d358 136 FUNC GLOBAL DEFAULT 12 snd_ctl_get_dB_range@@ALSA_0.9 + 1547: 0000000000037594 352 FUNC GLOBAL DEFAULT 12 snd_config_searchva_hooks@@ALSA_0.9 + 1548: 00000000000aa6cc 132 FUNC GLOBAL DEFAULT 12 snd_seq_connect_from@@ALSA_0.9 + 1549: 00000000000571dc 60 FUNC GLOBAL DEFAULT 12 snd_pcm_access_mask_reset@@ALSA_0.9 + 1550: 0000000000111891 1 OBJECT GLOBAL DEFAULT 26 __snd_rawmidi_hw_open_dlsym_rawmidi_001@@ALSA_0.9 + 1551: 00000000000a7438 92 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_timestamp_real@@ALSA_0.9 + 1552: 00000000000a7210 68 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_name@@ALSA_0.9 + 1553: 0000000000043c04 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_is_indirect@@ALSA_0.9 + 1554: 00000000000a8098 72 FUNC GLOBAL DEFAULT 12 snd_seq_query_port_subscribers@@ALSA_0.9 + 1555: 0000000000047b68 8 FUNC GLOBAL DEFAULT 12 snd_ctl_ascii_elem_id_parse@@ALSA_0.9 + 1556: 00000000000a95b8 252 FUNC GLOBAL DEFAULT 12 snd_seq_event_input@@ALSA_0.9 + 1557: 00000000000383d4 976 FUNC GLOBAL DEFAULT 12 snd_func_getenv@@ALSA_0.9 + 1558: 00000000000a8f04 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_get_type@@ALSA_0.9 + 1559: 00000000000afff0 300 FUNC GLOBAL DEFAULT 12 snd_use_case_identifier@@ALSA_0.9 + 1560: 000000000004338c 8 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_sizeof@@ALSA_0.9 + 1561: 00000000000a9454 76 FUNC GLOBAL DEFAULT 12 snd_seq_event_output@@ALSA_0.9 + 1562: 000000000004b7d8 60 FUNC GLOBAL DEFAULT 12 snd_mixer_class_get_mixer@@ALSA_0.9 + 1563: 0000000000070814 432 FUNC GLOBAL DEFAULT 12 snd_pcm_alaw_open@@ALSA_0.9 + 1564: 0000000000059f10 192 FUNC GLOBAL DEFAULT 12 snd_pcm_mmap_begin@@ALSA_0.9 + 1565: 00000000000a051c 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_subdevice_name@@ALSA_0.9 + 1566: 00000000000a04e0 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_name@@ALSA_0.9 + 1567: 000000000005c9e8 120 FUNC GLOBAL DEFAULT 12 snd_pcm_set_chmap@@ALSA_0.9 + 1568: 000000000004c1a8 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_playback_switch_joined@@ALSA_0.9 + 1569: 0000000000053fd4 228 FUNC GLOBAL DEFAULT 12 snd_pcm_poll_descriptors_revents@@ALSA_0.9 + 1570: 0000000000057b30 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_rate_max@@ALSA_0.9 + 1571: 000000000003b364 60 FUNC GLOBAL DEFAULT 12 snd_async_handler_get_fd@@ALSA_0.9 + 1572: 000000000004a730 104 FUNC GLOBAL DEFAULT 12 snd_mixer_detach_hctl@@ALSA_0.9 + 1573: 000000000008d2b4 588 FUNC GLOBAL DEFAULT 12 _snd_pcm_dmix_open@@ALSA_0.9 + 1574: 000000000003f4b8 16 FUNC GLOBAL DEFAULT 12 snd_hctl_compare_fast@@ALSA_0.9 + 1575: 00000000000a62f4 132 FUNC GLOBAL DEFAULT 12 snd_seq_nonblock@@ALSA_0.9 + 1576: 00000000000a007c 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_stream@@ALSA_0.9 + 1577: 0000000000054654 36 FUNC GLOBAL DEFAULT 12 snd_pcm_format_description@@ALSA_0.9 + 1578: 0000000000085578 84 FUNC GLOBAL DEFAULT 12 snd_pcm_hook_remove@@ALSA_0.9 + 1579: 0000000000050f34 36 FUNC GLOBAL DEFAULT 12 snd_mixer_sbasic_set_private_free@@ALSA_0.9 + 1580: 00000000000a1764 160 FUNC GLOBAL DEFAULT 12 snd_rawmidi_read@@ALSA_0.9 + 1581: 0000000000057558 528 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_current@@ALSA_0.9 + 1582: 00000000000329f4 252 FUNC GLOBAL DEFAULT 12 snd_config_set_id@@ALSA_0.9 + 1583: 00000000000a015c 96 FUNC GLOBAL DEFAULT 12 snd_rawmidi_poll_descriptors_revents@@ALSA_0.9 + 1584: 0000000000042868 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_get_interface@@ALSA_0.9 + 1585: 0000000000085cfc 1124 FUNC GLOBAL DEFAULT 12 snd_pcm_lfloat_convert_float_integer@@ALSA_0.9 + 1586: 0000000000037358 92 FUNC GLOBAL DEFAULT 12 snd_config_update@@ALSA_0.9 + 1587: 0000000000111864 1 OBJECT GLOBAL DEFAULT 26 _snd_func_pcm_id_dlsym_config_evaluate_001@@ALSA_0.9 + 1588: 000000000009d3c4 60 FUNC GLOBAL DEFAULT 12 snd_timer_name@@ALSA_0.9 + 1589: 000000000004a680 176 FUNC GLOBAL DEFAULT 12 snd_mixer_detach@@ALSA_0.9 + 1590: 00000000000a7020 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_synth_voices@@ALSA_0.9 + 1591: 000000000009bd9c 92 FUNC GLOBAL DEFAULT 12 snd_pcm_ioplug_reinit_status@@ALSA_0.9 + 1592: 000000000003ba44 12 FUNC GLOBAL DEFAULT 12 snd_dlopen@ALSA_0.9 + 1593: 000000000003b8c8 380 FUNC GLOBAL DEFAULT 12 snd_dlopen@@ALSA_1.1.6 + 1594: 0000000000059d1c 60 FUNC GLOBAL DEFAULT 12 snd_pcm_info_set_device@@ALSA_0.9 + 1595: 00000000000a78cc 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_get_time_update@@ALSA_0.9 + 1596: 00000000000a82c0 68 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_set_name@@ALSA_0.9 + 1597: 0000000000057ae8 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_channels_first@@ALSA_0.9 + 1598: 0000000000057bcc 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_first@@ALSA_0.9.0rc4 + 1599: 000000000005c030 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_rate_first@ALSA_0.9 + 1600: 00000000000a8df0 8 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_sizeof@@ALSA_0.9 + 1601: 0000000000031a80 256 FUNC GLOBAL DEFAULT 12 snd_config_get_type_ascii@@ALSA_0.9 + 1602: 0000000000039494 888 FUNC GLOBAL DEFAULT 12 snd_func_pcm_id@@ALSA_0.9 + 1603: 0000000000054630 36 FUNC GLOBAL DEFAULT 12 snd_pcm_format_name@@ALSA_0.9 + 1604: 00000000000a7344 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_synth_voices@@ALSA_0.9 + 1605: 00000000000a705c 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_port_specified@@ALSA_0.9 + 1606: 000000000005894c 8 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9 + 1607: 000000000003b768 80 FUNC GLOBAL DEFAULT 12 snd_lib_error_set_handler@@ALSA_0.9 + 1608: 000000000009a048 120 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_set_param_list@@ALSA_0.9 + 1609: 000000000003b16c 444 FUNC GLOBAL DEFAULT 12 snd_async_del_handler@@ALSA_0.9 + 1610: 000000000004d2e8 104 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_is_enum_capture@@ALSA_0.9 + 1611: 0000000000057550 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_sizeof@@ALSA_0.9 + 1612: 0000000000098914 612 FUNC GLOBAL DEFAULT 12 snd_pcm_softvol_open@@ALSA_0.9 + 1613: 000000000004c718 180 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_playback_switch_all@@ALSA_0.9 + 1614: 0000000000111869 1 OBJECT GLOBAL DEFAULT 26 _snd_func_iadd_dlsym_config_evaluate_001@@ALSA_0.9 + 1615: 0000000000042478 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_device@@ALSA_0.9 + 1616: 00000000000a8cfc 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_tempo_set_skew_base@@ALSA_0.9 + 1617: 000000000011187f 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_file_open_dlsym_pcm_001@@ALSA_0.9 + 1618: 0000000000054ccc 116 FUNC GLOBAL DEFAULT 12 snd_pcm_dump@@ALSA_0.9 + 1619: 000000000003ff98 180 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_info@@ALSA_0.9 + 1620: 00000000000420d4 140 FUNC GLOBAL DEFAULT 12 snd_ctl_open_fallback@@ALSA_0.9 + 1621: 00000000000329a8 68 FUNC GLOBAL DEFAULT 12 snd_config_iterator_end@@ALSA_0.9 + 1622: 00000000000585e8 96 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9 + 1623: 000000000004cb70 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_capture_switch_joined@@ALSA_0.9 + 1624: 00000000000a66cc 8 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_sizeof@@ALSA_0.9 + 1625: 00000000000aa584 128 FUNC GLOBAL DEFAULT 12 snd_seq_control_queue@@ALSA_0.9 + 1626: 00000000000b09f0 116 FUNC GLOBAL DEFAULT 12 snd_use_case_mgr_reset@@ALSA_0.9 + 1627: 00000000000a7fe0 64 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_set_root@@ALSA_0.9 + 1628: 00000000000a88f0 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_get_events@@ALSA_0.9 + 1629: 00000000000a8e5c 108 FUNC GLOBAL DEFAULT 12 snd_seq_queue_timer_copy@@ALSA_0.9 + 1630: 0000000000053248 268 FUNC GLOBAL DEFAULT 12 snd_pcm_htimestamp@@ALSA_0.9 + 1631: 0000000000057378 60 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_reset@@ALSA_0.9 + 1632: 0000000000058dd4 68 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_start_mode@@ALSA_0.9 + 1633: 00000000000a88b4 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_get_queue@@ALSA_0.9 + 1634: 000000000004ca68 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_capture_volume@@ALSA_0.9 + 1635: 00000000000a6ef4 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_type@@ALSA_0.9 + 1636: 0000000000052e0c 172 FUNC GLOBAL DEFAULT 12 snd_pcm_status@@ALSA_0.9 + 1637: 0000000000043894 96 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_malloc@@ALSA_0.9 + 1638: 0000000000065edc 32 FUNC GLOBAL DEFAULT 12 snd_pcm_format_big_endian@@ALSA_0.9 + 1639: 000000000003a584 28 FUNC GLOBAL DEFAULT 12 snd_input_ungetc@@ALSA_0.9 + 1640: 0000000000040ef4 92 FUNC GLOBAL DEFAULT 12 snd_ctl_poll_descriptors_count@@ALSA_0.9 + 1641: 000000000003a66c 128 FUNC GLOBAL DEFAULT 12 snd_input_stdio_open@@ALSA_0.9 + 1642: 0000000000052c8c 384 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params@@ALSA_0.9 + 1643: 0000000000057514 60 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_reset@@ALSA_0.9 + 1644: 000000000003fa08 8 FUNC GLOBAL DEFAULT 12 snd_hctl_get_count@@ALSA_0.9 + 1645: 0000000000052a30 60 FUNC GLOBAL DEFAULT 12 snd_pcm_type@@ALSA_0.9 + 1646: 000000000005b500 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate@ALSA_0.9 + 1647: 0000000000057b08 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_rate@@ALSA_0.9.0rc4 + 1648: 000000000003afa4 456 FUNC GLOBAL DEFAULT 12 snd_async_add_handler@@ALSA_0.9 + 1649: 000000000005bdcc 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_near@ALSA_0.9 + 1650: 0000000000111866 1 OBJECT GLOBAL DEFAULT 26 _snd_func_imul_dlsym_config_evaluate_001@@ALSA_0.9 + 1651: 000000000005820c 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_period_size_near@@ALSA_0.9.0rc4 + 1652: 000000000003f300 60 FUNC GLOBAL DEFAULT 12 snd_hctl_poll_descriptors@@ALSA_0.9 + 1653: 000000000004c278 120 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_ask_playback_dB_vol@@ALSA_0.9 + 1654: 0000000000057284 76 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_copy@@ALSA_0.9 + 1655: 0000000000064a68 52 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_fast_tstamp@@ALSA_0.9 + 1656: 0000000000054398 332 FUNC GLOBAL DEFAULT 12 snd_pcm_readi@@ALSA_0.9 + 1657: 00000000000a0758 56 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_free@@ALSA_0.9 + 1658: 00000000000558e8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_wait@@ALSA_0.9 + 1659: 0000000000111876 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_linear_open_dlsym_pcm_001@@ALSA_0.9 + 1660: 00000000000544e4 332 FUNC GLOBAL DEFAULT 12 snd_pcm_readn@@ALSA_0.9 + 1661: 0000000000043c40 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_owner@@ALSA_0.9 + 1662: 00000000000a7b64 72 FUNC GLOBAL DEFAULT 12 snd_seq_subscribe_port@@ALSA_0.9 + 1663: 00000000000a6fe4 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_midi_voices@@ALSA_0.9 + 1664: 0000000000059934 60 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_overrange@@ALSA_0.9 + 1665: 000000000005bb68 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_size_max@ALSA_0.9 + 1666: 0000000000058014 108 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_period_size_max@@ALSA_0.9.0rc4 + 1667: 00000000000a7ccc 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_client@@ALSA_0.9 + 1668: 00000000000a6cd4 72 FUNC GLOBAL DEFAULT 12 snd_seq_query_next_client@@ALSA_0.9 + 1669: 00000000000ab8f0 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_alias@@ALSA_0.9 + 1670: 00000000000a6f6c 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_write_use@@ALSA_0.9 + 1671: 000000000004cbc8 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_capture_switch_exclusive@@ALSA_0.9 + 1672: 0000000000111874 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_hw_open_dlsym_pcm_001@@ALSA_0.9 + 1673: 000000000004aa94 360 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_remove@@ALSA_0.9 + 1674: 0000000000044300 92 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_set_id@@ALSA_0.9 + 1675: 000000000004004c 180 FUNC GLOBAL DEFAULT 12 snd_hctl_elem_read@@ALSA_0.9 + 1676: 0000000000044210 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_device@@ALSA_0.9 + 1677: 0000000000044d1c 112 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_byte@@ALSA_0.9 + 1678: 00000000000a7db8 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_index@@ALSA_0.9 + 1679: 0000000000038ec8 324 FUNC GLOBAL DEFAULT 12 snd_func_private_card_driver@@ALSA_0.9 + 1680: 000000000009d820 56 FUNC GLOBAL DEFAULT 12 snd_timer_info_free@@ALSA_0.9 + 1681: 000000000009f63c 68 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_copy@@ALSA_0.9 + 1682: 00000000000a51d4 912 FUNC GLOBAL DEFAULT 12 snd_seq_hw_open@@ALSA_0.9 + 1683: 00000000000a3ea4 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_status_get_dsp_loaded@@ALSA_0.9 + 1684: 000000000003ab7c 56 FUNC GLOBAL DEFAULT 12 snd_output_close@@ALSA_0.9 + 1685: 0000000000041510 212 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_add_boolean@@ALSA_0.9 + 1686: 0000000000042654 252 FUNC GLOBAL DEFAULT 12 snd_async_add_ctl_handler@@ALSA_0.9 + 1687: 000000000004bab8 68 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_compare@@ALSA_0.9 + 1688: 000000000003c4ac 116 FUNC GLOBAL DEFAULT 12 snd_card_next@@ALSA_0.9 + 1689: 0000000000058588 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9.0rc4 + 1690: 000000000005b9a4 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_size_min@ALSA_0.9 + 1691: 000000000011186b 1 OBJECT GLOBAL DEFAULT 26 _snd_func_concat_dlsym_config_evaluate_001@@ALSA_0.9 + 1692: 0000000000084414 8 FUNC GLOBAL DEFAULT 12 snd_pcm_scope_get_callback_private@@ALSA_0.9 + 1693: 00000000000aac2c 492 FUNC GLOBAL DEFAULT 12 snd_seq_parse_address@@ALSA_0.9 + 1694: 000000000003fc1c 892 FUNC GLOBAL DEFAULT 12 snd_hctl_handle_events@@ALSA_0.9 + 1695: 0000000000057be0 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_rate_last@@ALSA_0.9 + 1696: 00000000000a9fb4 212 FUNC GLOBAL DEFAULT 12 snd_seq_set_input_buffer_size@@ALSA_0.9 + 1697: 0000000000111883 1 OBJECT GLOBAL DEFAULT 26 __snd_pcm_meter_open_dlsym_pcm_001@@ALSA_0.9 + 1698: 00000000000a41b4 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_dsp_image_set_length@@ALSA_0.9 + 1699: 00000000000583f4 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_periods_near@@ALSA_0.9 + 1700: 00000000000a914c 100 FUNC GLOBAL DEFAULT 12 snd_seq_event_length@@ALSA_0.9 + 1701: 0000000000058934 8 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_tick_time_min@@ALSA_0.9 + 1702: 0000000000040f50 128 FUNC GLOBAL DEFAULT 12 snd_ctl_poll_descriptors@@ALSA_0.9 + 1703: 000000000009defc 8 FUNC GLOBAL DEFAULT 12 snd_timer_status_sizeof@@ALSA_0.9 + 1704: 000000000003f10c 128 FUNC GLOBAL DEFAULT 12 snd_hctl_open_ctl@@ALSA_0.9 + 1705: 0000000000049e78 8 FUNC GLOBAL DEFAULT 12 snd_ctl_ext_delete@@ALSA_0.9 + 1706: 000000000004cf08 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_volume@@ALSA_0.9 + 1707: 00000000000aa340 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_set_output_room@@ALSA_0.9 + 1708: 00000000000573b4 8 FUNC GLOBAL DEFAULT 12 snd_pcm_subformat_mask_sizeof@@ALSA_0.9 + 1709: 00000000000a9b3c 64 FUNC GLOBAL DEFAULT 12 snd_seq_remove_events_set_dest@@ALSA_0.9 + 1710: 00000000000b24c4 104 FUNC GLOBAL DEFAULT 12 snd_tplg_set_manifest_data@@ALSA_0.9 + 1711: 000000000004c2f0 132 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_playback_volume@@ALSA_0.9 + 1712: 00000000000584b4 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_time_max@@ALSA_0.9 + 1713: 00000000000a880c 96 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_malloc@@ALSA_0.9 + 1714: 0000000000057f0c 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_period_time_near@@ALSA_0.9 + 1715: 0000000000065e74 28 FUNC GLOBAL DEFAULT 12 snd_pcm_format_linear@@ALSA_0.9 + 1716: 0000000000054778 36 FUNC GLOBAL DEFAULT 12 snd_pcm_start_mode_name@@ALSA_0.9 + 1717: 0000000000058408 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_set_periods_first@@ALSA_0.9 + 1718: 00000000000a3410 176 FUNC GLOBAL DEFAULT 12 snd_hwdep_open@@ALSA_0.9 + 1719: 00000000000a39d4 60 FUNC GLOBAL DEFAULT 12 snd_hwdep_info_set_device@@ALSA_0.9 + 1720: 00000000000a84c4 8 FUNC GLOBAL DEFAULT 12 snd_seq_alloc_queue@@ALSA_0.9 + 1721: 000000000009f9c4 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_get_sclass@@ALSA_0.9 + 1722: 00000000000a8968 60 FUNC GLOBAL DEFAULT 12 snd_seq_queue_status_get_real_time@@ALSA_0.9 + 1723: 000000000004d438 112 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_enum_item@@ALSA_0.9 + 1724: 0000000000032880 88 FUNC GLOBAL DEFAULT 12 snd_config_ref@@ALSA_0.9 + 1725: 000000000003f448 112 FUNC GLOBAL DEFAULT 12 snd_hctl_set_compare@@ALSA_0.9 + 1726: 00000000000577cc 68 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_copy@@ALSA_0.9 + 1727: 00000000000aa090 96 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_malloc@@ALSA_0.9 + 1728: 0000000000034238 124 FUNC GLOBAL DEFAULT 12 snd_config_update_free_global@@ALSA_0.9 + 1729: 00000000000421f8 64 FUNC GLOBAL DEFAULT 12 snd_ctl_event_type_name@@ALSA_0.9 + 1730: 000000000009d49c 60 FUNC GLOBAL DEFAULT 12 snd_timer_poll_descriptors_count@@ALSA_0.9 + 1731: 00000000000a6c70 12 FUNC GLOBAL DEFAULT 12 snd_seq_get_client_info@@ALSA_0.9 + 1732: 0000000000059228 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_sw_params_get_xfer_align@@ALSA_0.9 + 1733: 000000000005caa8 36 FUNC GLOBAL DEFAULT 12 snd_pcm_chmap_long_name@@ALSA_0.9 + 1734: 000000000004b3c8 92 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_next@@ALSA_0.9 + 1735: 0000000000033300 252 FUNC GLOBAL DEFAULT 12 snd_config_add@@ALSA_0.9 + 1736: 000000000003f210 60 FUNC GLOBAL DEFAULT 12 snd_hctl_name@@ALSA_0.9 + 1737: 00000000000a97d4 68 FUNC GLOBAL DEFAULT 12 snd_seq_drop_input_buffer@@ALSA_0.9 + 1738: 0000000000099ecc 8 FUNC GLOBAL DEFAULT 12 snd_pcm_extplug_delete@@ALSA_0.9 + 1739: 00000000000a7ee8 64 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_time_update@@ALSA_0.9 + 1740: 0000000000044820 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_value_set_interface@@ALSA_0.9 + 1741: 00000000000534b4 252 FUNC GLOBAL DEFAULT 12 snd_pcm_reset@@ALSA_0.9 + 1742: 00000000000aa1d8 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_get_input_pool@@ALSA_0.9 + 1743: 0000000000043cb8 108 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_min@@ALSA_0.9 + 1744: 00000000000438f8 12 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_clear@@ALSA_0.9 + 1745: 000000000004bd2c 88 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_has_common_switch@@ALSA_0.9 + 1746: 00000000000ab8ec 4 FUNC GLOBAL DEFAULT 12 snd_instr_header_set_format@@ALSA_0.9 + 1747: 0000000000052a6c 60 FUNC GLOBAL DEFAULT 12 snd_pcm_stream@@ALSA_0.9 + 1748: 00000000000540dc 36 FUNC GLOBAL DEFAULT 12 snd_pcm_access_name@@ALSA_0.9 + 1749: 00000000000a788c 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_get_exclusive@@ALSA_0.9 + 1750: 00000000000431b4 60 FUNC GLOBAL DEFAULT 12 snd_ctl_card_info_get_longname@@ALSA_0.9 + 1751: 000000000008406c 100 FUNC GLOBAL DEFAULT 12 snd_pcm_meter_add_scope@@ALSA_0.9 + 1752: 00000000000a0558 60 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_get_subdevices_count@@ALSA_0.9 + 1753: 000000000009f6d8 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_clients@@ALSA_0.9 + 1754: 000000000004bc28 84 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_get_name@@ALSA_0.9 + 1755: 0000000000041b4c 72 FUNC GLOBAL DEFAULT 12 snd_ctl_pcm_next_device@@ALSA_0.9 + 1756: 0000000000038114 264 FUNC GLOBAL DEFAULT 12 snd_config_get_bool@@ALSA_0.9 + 1757: 00000000000417b0 88 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_remove@@ALSA_0.9 + 1758: 000000000004b988 64 FUNC GLOBAL DEFAULT 12 snd_mixer_class_set_compare@@ALSA_0.9 + 1759: 00000000000ab950 8 FUNC GLOBAL DEFAULT 12 snd_instr_simple_free@@ALSA_0.9 + 1760: 0000000000065f00 32 FUNC GLOBAL DEFAULT 12 snd_pcm_format_width@@ALSA_0.9 + 1761: 000000000005c1fc 88 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_first@ALSA_0.9 + 1762: 0000000000058838 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9.0rc4 + 1763: 000000000011186c 1 OBJECT GLOBAL DEFAULT 26 _snd_func_card_driver_dlsym_config_evaluate_001@@ALSA_0.9 + 1764: 0000000000031b80 8 FUNC GLOBAL DEFAULT 12 snd_config_get_type@@ALSA_0.9 + 1765: 0000000000059350 148 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_set_silence_threshold@@ALSA_0.9 + 1766: 0000000000047b70 1304 FUNC GLOBAL DEFAULT 12 snd_ctl_ascii_value_parse@@ALSA_0.9 + 1767: 00000000000a6928 72 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_get_event_filter@@ALSA_0.9 + 1768: 00000000000a8da0 80 FUNC GLOBAL DEFAULT 12 snd_seq_set_queue_tempo@@ALSA_0.9 + 1769: 00000000000a9e64 200 FUNC GLOBAL DEFAULT 12 snd_seq_set_output_buffer_size@@ALSA_0.9 + 1770: 0000000000085408 60 FUNC GLOBAL DEFAULT 12 snd_pcm_hook_set_private@@ALSA_0.9 + 1771: 00000000000a02fc 56 FUNC GLOBAL DEFAULT 12 snd_rawmidi_info_free@@ALSA_0.9 + 1772: 00000000000579cc 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_subformat@@ALSA_0.9 + 1773: 0000000000041fd0 176 FUNC GLOBAL DEFAULT 12 snd_ctl_open@@ALSA_0.9 + 1774: 0000000000066448 220 FUNC GLOBAL DEFAULT 12 snd_pcm_build_linear_format@@ALSA_0.9 + 1775: 0000000000057a5c 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_channels_max@@ALSA_0.9 + 1776: 00000000000579a8 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_subformat@@ALSA_0.9 + 1777: 00000000000a6e08 60 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_port@@ALSA_0.9 + 1778: 00000000000aaa60 112 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_pool_output_room@@ALSA_0.9 + 1779: 0000000000056a38 132 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_can_overrange@@ALSA_0.9 + 1780: 00000000000422b4 104 FUNC GLOBAL DEFAULT 12 snd_ctl_event_elem_get_mask@@ALSA_0.9 + 1781: 00000000000661d0 84 FUNC GLOBAL DEFAULT 12 snd_pcm_format_silence@@ALSA_0.9 + 1782: 00000000000a8610 164 FUNC GLOBAL DEFAULT 12 snd_seq_query_named_queue@@ALSA_0.9 + 1783: 00000000000a1394 132 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params_current@@ALSA_0.9 + 1784: 00000000000412a8 148 FUNC GLOBAL DEFAULT 12 snd_ctl_add_boolean_elem_set@@ALSA_0.9 + 1785: 0000000000053454 96 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params@@ALSA_0.9 + 1786: 00000000000aa160 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_get_client@@ALSA_0.9 + 1787: 000000000004291c 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_get_name@@ALSA_0.9 + 1788: 000000000003acf8 204 FUNC GLOBAL DEFAULT 12 snd_output_stdio_attach@@ALSA_0.9 + 1789: 000000000009f6e0 108 FUNC GLOBAL DEFAULT 12 snd_timer_query_info@@ALSA_0.9.0 + 1790: 000000000003abb4 188 FUNC GLOBAL DEFAULT 12 snd_output_printf@@ALSA_0.9 + 1791: 000000000003b3a0 60 FUNC GLOBAL DEFAULT 12 snd_async_handler_get_callback_private@@ALSA_0.9 + 1792: 0000000000058c98 4 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_free@@ALSA_0.9 + 1793: 0000000000054f78 96 FUNC GLOBAL DEFAULT 12 snd_async_handler_get_pcm@@ALSA_0.9 + 1794: 00000000000a60e8 180 FUNC GLOBAL DEFAULT 12 snd_seq_poll_descriptors_count@@ALSA_0.9 + 1795: 000000000005bc20 92 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_time_max@ALSA_0.9 + 1796: 00000000000467cc 332 FUNC GLOBAL DEFAULT 12 snd_sctl_remove@@ALSA_0.9 + 1797: 000000000005397c 256 FUNC GLOBAL DEFAULT 12 snd_pcm_rewindable@@ALSA_0.9 + 1798: 0000000000044198 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_info_get_numid@@ALSA_0.9 + 1799: 0000000000061bcc 492 FUNC GLOBAL DEFAULT 12 snd_spcm_init@@ALSA_0.9 + 1800: 0000000000058464 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9.0rc4 + 1801: 000000000005c6e8 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_sleep_min@ALSA_0.9 + 1802: 00000000000590d4 12 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_sleep_min@@ALSA_0.9.0rc4 + 1803: 00000000000a80e0 8 FUNC GLOBAL DEFAULT 12 snd_seq_queue_info_sizeof@@ALSA_0.9 + 1804: 00000000000572e8 52 FUNC GLOBAL DEFAULT 12 snd_pcm_format_mask_test@@ALSA_0.9 + 1805: 000000000004cf8c 140 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_set_capture_dB@@ALSA_0.9 + 1806: 000000000004b88c 60 FUNC GLOBAL DEFAULT 12 snd_mixer_class_get_compare@@ALSA_0.9 + 1807: 0000000000058478 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_buffer_time@@ALSA_0.9 + 1808: 000000000009f6b0 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_id@@ALSA_0.9 + 1809: 0000000000058080 20 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_test_period_size@@ALSA_0.9 + 1810: 000000000004d618 60 FUNC GLOBAL DEFAULT 12 snd_mixer_selem_id_get_index@@ALSA_0.9 + 1811: 00000000000aa304 60 FUNC GLOBAL DEFAULT 12 snd_seq_client_pool_set_input_pool@@ALSA_0.9 + 1812: 0000000000042758 96 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_id_malloc@@ALSA_0.9 + 1813: 00000000000a6738 68 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_copy@@ALSA_0.9 + 1814: 00000000000853a4 60 FUNC GLOBAL DEFAULT 12 snd_pcm_hook_get_private@@ALSA_0.9 + 1815: 00000000000a9138 12 FUNC GLOBAL DEFAULT 12 snd_seq_create_event@@ALSA_0.9 + 1816: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_1.1.6 + 1817: 000000000004133c 332 FUNC GLOBAL DEFAULT 12 snd_ctl_add_enumerated_elem_set@@ALSA_0.9 + 1818: 000000000004a454 72 FUNC GLOBAL DEFAULT 12 snd_mixer_elem_attach@@ALSA_0.9 + 1819: 00000000000429d0 400 FUNC GLOBAL DEFAULT 12 snd_ctl_add_integer_elem_set@@ALSA_0.9 + 1820: 0000000000057a00 16 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_set_subformat_mask@@ALSA_0.9 + 1821: 0000000000043474 60 FUNC GLOBAL DEFAULT 12 snd_ctl_elem_list_set_offset@@ALSA_0.9 + 1822: 0000000000054808 36 FUNC GLOBAL DEFAULT 12 snd_pcm_state_name@@ALSA_0.9 + 1823: 00000000000593e4 80 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9.0rc4 + 1824: 0000000000069c18 508 FUNC GLOBAL DEFAULT 12 _snd_pcm_copy_open@@ALSA_0.9 + 1825: 000000000005c8a0 88 FUNC GLOBAL DEFAULT 12 snd_pcm_sw_params_get_silence_threshold@ALSA_0.9 + 1826: 0000000000057e70 20 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_period_time_min@@ALSA_0.9 + 1827: 00000000000aa540 68 FUNC GLOBAL DEFAULT 12 snd_seq_client_info_event_filter_check@@ALSA_0.9 + 1828: 000000000009f6a0 8 FUNC GLOBAL DEFAULT 12 snd_timer_ginfo_get_flags@@ALSA_0.9 + 1829: 00000000000aa978 120 FUNC GLOBAL DEFAULT 12 snd_seq_set_client_event_filter@@ALSA_0.9 + 1830: 00000000000a7774 4 FUNC GLOBAL DEFAULT 12 snd_seq_port_subscribe_free@@ALSA_0.9 + 1831: 00000000000459fc 556 FUNC GLOBAL DEFAULT 12 snd_ctl_hw_open@@ALSA_0.9 + 1832: 00000000000a709c 64 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_get_timestamping@@ALSA_0.9 + 1833: 00000000000598bc 60 FUNC GLOBAL DEFAULT 12 snd_pcm_status_get_avail@@ALSA_0.9 + 1834: 00000000000a09dc 164 FUNC GLOBAL DEFAULT 12 snd_rawmidi_params@@ALSA_0.9 + 1835: 000000000009fb2c 60 FUNC GLOBAL DEFAULT 12 snd_timer_id_get_subdevice@@ALSA_0.9 + 1836: 00000000000a7df4 60 FUNC GLOBAL DEFAULT 12 snd_seq_query_subscribe_get_num_subs@@ALSA_0.9 + 1837: 0000000000057914 16 FUNC GLOBAL DEFAULT 12 __snd_pcm_hw_params_get_format@@ALSA_0.9 + 1838: 0000000000042c54 400 FUNC GLOBAL DEFAULT 12 snd_ctl_add_integer64_elem_set@@ALSA_0.9 + 1839: 00000000000a44bc 452 FUNC GLOBAL DEFAULT 12 snd_hwdep_hw_open@@ALSA_0.9 + 1840: 00000000000a96b4 224 FUNC GLOBAL DEFAULT 12 snd_seq_event_input_pending@@ALSA_0.9 + 1841: 0000000000039e30 964 FUNC GLOBAL DEFAULT 12 snd_func_refer@@ALSA_0.9 + 1842: 00000000000a73dc 92 FUNC GLOBAL DEFAULT 12 snd_seq_port_info_set_timestamping@@ALSA_0.9 + 1843: 000000000004a534 228 FUNC GLOBAL DEFAULT 12 snd_mixer_attach_hctl@@ALSA_0.9 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatk-1.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatk-1.0.so.0.txt new file mode 100644 index 000000000000..1bc3f49a6ae1 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatk-1.0.so.0.txt @@ -0,0 +1,426 @@ +Library: /lib64/libatk-1.0.so.0 +Package: atk-2.28.1-2.el7.aarch64 + + +Symbol table '.dynsym' contains 420 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000a710 0 SECTION LOCAL DEFAULT 9 + 2: 000000000003ded0 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_new + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_property + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_append + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_remove_emission_hook + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_peek_pointer + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_unset + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_free_instance + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_get_nth + 20: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_free + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sized_new + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_new + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boxed + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_string + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_double + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_int + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__POINTER + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__BOOLEAN + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strlen + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bindtextdomain@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_add_prerequisite + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_remove_index + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__VOID + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind_textdomain_codeset@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_enum + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_sized_new + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_boolean + 60: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 61: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_enum + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_from_name + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__BOXED + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_string + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_length + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_string + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_add_emission_hook + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boolean + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_int_hash + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__UINT_POINTER + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_install_property + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_unref + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_enum + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_object + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_fundamentally_a + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_int_equal + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dgettext + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 102: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_notify + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_lookup + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.17 (2) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_object + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__INT + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 115: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_interface_static + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_is_a + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_create_instance + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_value_array + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.17 (2) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_parent + 125: 0000000000010dac 256 FUNC GLOBAL DEFAULT 11 atk_role_for_name + 126: 000000000000fb2c 148 FUNC GLOBAL DEFAULT 11 atk_object_get_n_accessible_children + 127: 0000000000019854 8 FUNC GLOBAL DEFAULT 11 atk_get_micro_version + 128: 000000000000bbc4 160 FUNC GLOBAL DEFAULT 11 atk_component_remove_focus_handler + 129: 0000000000012b78 188 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_relation_by_type + 130: 0000000000013248 184 FUNC GLOBAL DEFAULT 11 atk_selection_add_selection + 131: 0000000000017e70 264 FUNC GLOBAL DEFAULT 11 atk_text_get_bounded_ranges + 132: 000000000000f97c 140 FUNC GLOBAL DEFAULT 11 atk_object_get_name + 133: 0000000000015e04 168 FUNC GLOBAL DEFAULT 11 atk_table_set_row_description + 134: 000000000000e598 72 FUNC GLOBAL DEFAULT 11 atk_image_get_type + 135: 000000000001515c 176 FUNC GLOBAL DEFAULT 11 atk_table_get_column_header + 136: 000000000000e930 156 FUNC GLOBAL DEFAULT 11 atk_image_get_image_locale + 137: 0000000000010358 232 FUNC GLOBAL DEFAULT 11 atk_object_set_name + 138: 000000000001984c 8 FUNC GLOBAL DEFAULT 11 atk_get_minor_version + 139: 000000000000e67c 248 FUNC GLOBAL DEFAULT 11 atk_image_get_image_size + 140: 0000000000015424 176 FUNC GLOBAL DEFAULT 11 atk_table_get_row_header + 141: 0000000000013dfc 156 FUNC GLOBAL DEFAULT 11 atk_state_set_add_state + 142: 0000000000016dd0 280 FUNC GLOBAL DEFAULT 11 atk_text_get_string_at_offset + 143: 0000000000013e98 196 FUNC GLOBAL DEFAULT 11 atk_state_set_add_states + 144: 0000000000018068 220 FUNC GLOBAL DEFAULT 11 atk_text_attribute_get_name + 145: 000000000000b9d4 196 FUNC GLOBAL DEFAULT 11 atk_action_set_description + 146: 00000000000138c8 100 FUNC GLOBAL DEFAULT 11 atk_socket_new + 147: 00000000000134f8 188 FUNC GLOBAL DEFAULT 11 atk_selection_is_child_selected + 148: 000000000000e4ec 172 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_link_index + 149: 00000000000194ac 156 FUNC GLOBAL DEFAULT 11 atk_value_get_range + 150: 00000000000101cc 140 FUNC GLOBAL DEFAULT 11 atk_object_get_mdi_zorder + 151: 0000000000013d68 24 FUNC GLOBAL DEFAULT 11 atk_state_set_new + 152: 0000000000016148 156 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_column_header_cells + 153: 0000000000018c08 80 FUNC GLOBAL DEFAULT 11 atk_add_key_event_listener + 154: 0000000000015924 188 FUNC GLOBAL DEFAULT 11 atk_table_add_row_selection + 155: 0000000000015360 196 FUNC GLOBAL DEFAULT 11 atk_table_get_row_extent_at + 156: 000000000000d688 276 FUNC GLOBAL DEFAULT 11 atk_gobject_accessible_for_object + 157: 000000000000b528 144 FUNC GLOBAL DEFAULT 11 atk_action_get_type + 158: 0000000000013d80 124 FUNC GLOBAL DEFAULT 11 atk_state_set_is_empty + 159: 0000000000014d48 176 FUNC GLOBAL DEFAULT 11 atk_table_get_row_at_index + 160: 000000000000e774 188 FUNC GLOBAL DEFAULT 11 atk_image_set_image_description + 161: 0000000000018cd4 16 FUNC GLOBAL DEFAULT 11 atk_get_focus_object + 162: 0000000000040b98 0 NOTYPE GLOBAL DEFAULT 24 _end + 163: 0000000000018c58 52 FUNC GLOBAL DEFAULT 11 atk_remove_key_event_listener + 164: 000000000001392c 232 FUNC GLOBAL DEFAULT 11 atk_socket_embed + 165: 000000000000bac4 72 FUNC GLOBAL DEFAULT 11 atk_component_get_type + 166: 0000000000019130 244 FUNC GLOBAL DEFAULT 11 atk_value_get_minimum_value + 167: 00000000000114d0 100 FUNC GLOBAL DEFAULT 11 atk_plug_new + 168: 000000000001a1cc 108 FUNC GLOBAL DEFAULT 11 atk_key_event_type_get_type + 169: 00000000000121f4 220 FUNC GLOBAL DEFAULT 11 atk_relation_type_get_name + 170: 000000000000b5b8 184 FUNC GLOBAL DEFAULT 11 atk_action_do_action + 171: 000000000001985c 8 FUNC GLOBAL DEFAULT 11 atk_get_binary_age + 172: 000000000000d33c 168 FUNC GLOBAL DEFAULT 11 atk_editable_text_cut_text + 173: 000000000000d294 168 FUNC GLOBAL DEFAULT 11 atk_editable_text_copy_text + 174: 000000000000e2dc 72 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_type + 175: 0000000000012e94 292 FUNC GLOBAL DEFAULT 11 atk_relation_set_add_relation_by_type + 176: 0000000000015098 196 FUNC GLOBAL DEFAULT 11 atk_table_get_column_extent_at + 177: 0000000000011848 76 FUNC GLOBAL DEFAULT 11 atk_range_get_description + 178: 0000000000016bbc 268 FUNC GLOBAL DEFAULT 11 atk_text_get_text_at_offset + 179: 0000000000016004 164 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_type + 180: 0000000000014054 216 FUNC GLOBAL DEFAULT 11 atk_state_set_contains_states + 181: 000000000000f930 76 FUNC GLOBAL DEFAULT 11 atk_implementor_get_type + 182: 000000000000cd68 176 FUNC GLOBAL DEFAULT 11 atk_document_get_attribute_value + 183: 0000000000011534 152 FUNC GLOBAL DEFAULT 11 atk_plug_get_id + 184: 0000000000013a94 132 FUNC GLOBAL DEFAULT 11 atk_state_type_register + 185: 0000000000019224 244 FUNC GLOBAL DEFAULT 11 atk_value_get_minimum_increment + 186: 00000000000161e4 252 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_position + 187: 0000000000012fb8 384 FUNC GLOBAL DEFAULT 11 atk_relation_set_contains_target + 188: 0000000000015a9c 188 FUNC GLOBAL DEFAULT 11 atk_table_add_column_selection + 189: 0000000000015d5c 168 FUNC GLOBAL DEFAULT 11 atk_table_set_column_header + 190: 0000000000018f50 236 FUNC GLOBAL DEFAULT 11 atk_value_get_current_value + 191: 00000000000125dc 120 FUNC GLOBAL DEFAULT 11 atk_relation_get_target + 192: 000000000000b670 164 FUNC GLOBAL DEFAULT 11 atk_action_get_n_actions + 193: 000000000000d3e4 168 FUNC GLOBAL DEFAULT 11 atk_editable_text_delete_text + 194: 000000000000fbc0 160 FUNC GLOBAL DEFAULT 11 atk_object_ref_accessible_child + 195: 000000000000c550 164 FUNC GLOBAL DEFAULT 11 atk_component_grab_focus + 196: 0000000000019814 48 FUNC GLOBAL DEFAULT 11 atk_value_type_get_localized_name + 197: 000000000000c4a4 164 FUNC GLOBAL DEFAULT 11 atk_component_get_alpha + 198: 0000000000015cb4 168 FUNC GLOBAL DEFAULT 11 atk_table_set_column_description + 199: 000000000000dc14 156 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_uri + 200: 0000000000018bd0 56 FUNC GLOBAL DEFAULT 11 atk_remove_global_event_listener + 201: 0000000000040b98 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 202: 00000000000175f0 252 FUNC GLOBAL DEFAULT 11 atk_text_get_selection + 203: 0000000000040668 0 NOTYPE GLOBAL DEFAULT 23 _edata + 204: 0000000000012654 300 FUNC GLOBAL DEFAULT 11 atk_relation_add_target + 205: 000000000000c164 240 FUNC GLOBAL DEFAULT 11 atk_component_get_position + 206: 0000000000019ed8 108 FUNC GLOBAL DEFAULT 11 atk_layer_get_type + 207: 0000000000019fb0 108 FUNC GLOBAL DEFAULT 11 atk_state_type_get_type + 208: 000000000000dfa4 148 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_n_anchors + 209: 0000000000018918 28 FUNC GLOBAL DEFAULT 11 atk_focus_tracker_init + 210: 000000000000c890 72 FUNC GLOBAL DEFAULT 11 atk_rectangle_get_type + 211: 00000000000159e0 188 FUNC GLOBAL DEFAULT 11 atk_table_remove_row_selection + 212: 0000000000019728 236 FUNC GLOBAL DEFAULT 11 atk_value_type_get_name + 213: 0000000000013be4 312 FUNC GLOBAL DEFAULT 11 atk_state_type_for_name + 214: 000000000000d79c 140 FUNC GLOBAL DEFAULT 11 atk_gobject_accessible_get_object + 215: 00000000000112c4 100 FUNC GLOBAL DEFAULT 11 atk_object_factory_invalidate + 216: 0000000000010eac 320 FUNC GLOBAL DEFAULT 11 atk_object_add_relationship + 217: 0000000000016cc8 264 FUNC GLOBAL DEFAULT 11 atk_text_get_text_before_offset + 218: 000000000000cf78 156 FUNC GLOBAL DEFAULT 11 atk_document_get_page_count + 219: 0000000000011148 172 FUNC GLOBAL DEFAULT 11 atk_object_factory_get_type + 220: 0000000000010a04 184 FUNC GLOBAL DEFAULT 11 atk_object_notify_state_change + 221: 00000000000102e4 116 FUNC GLOBAL DEFAULT 11 atk_object_get_index_in_parent + 222: 0000000000019864 8 FUNC GLOBAL DEFAULT 11 atk_get_interface_age + 223: 0000000000019688 160 FUNC GLOBAL DEFAULT 11 atk_value_set_value + 224: 000000000000b714 176 FUNC GLOBAL DEFAULT 11 atk_action_get_description + 225: 0000000000014ea8 156 FUNC GLOBAL DEFAULT 11 atk_table_get_caption + 226: 000000000000d48c 160 FUNC GLOBAL DEFAULT 11 atk_editable_text_paste_text + 227: 0000000000019404 168 FUNC GLOBAL DEFAULT 11 atk_value_get_value_and_text + 228: 00000000000160a8 160 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_column_span + 229: 0000000000011908 72 FUNC GLOBAL DEFAULT 11 atk_registry_get_type + 230: 0000000000040668 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 231: 0000000000010c90 96 FUNC GLOBAL DEFAULT 11 atk_role_get_name + 232: 000000000001a160 108 FUNC GLOBAL DEFAULT 11 atk_text_clip_type_get_type + 233: 000000000001903c 244 FUNC GLOBAL DEFAULT 11 atk_value_get_maximum_value + 234: 0000000000015860 196 FUNC GLOBAL DEFAULT 11 atk_table_is_selected + 235: 000000000001a0f4 108 FUNC GLOBAL DEFAULT 11 atk_text_granularity_get_type + 236: 000000000000dcb0 160 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_object + 237: 000000000000d1d8 188 FUNC GLOBAL DEFAULT 11 atk_editable_text_insert_text + 238: 000000000001986c 164 FUNC GLOBAL DEFAULT 11 atk_window_get_type + 239: 000000000000e224 184 FUNC GLOBAL DEFAULT 11 atk_hyperlink_impl_get_hyperlink + 240: 0000000000017a04 300 FUNC GLOBAL DEFAULT 11 atk_text_get_range_extents + 241: 0000000000012974 204 FUNC GLOBAL DEFAULT 11 atk_relation_set_contains + 242: 0000000000010abc 184 FUNC GLOBAL DEFAULT 11 atk_implementor_ref_accessible + 243: 0000000000010d20 140 FUNC GLOBAL DEFAULT 11 atk_object_get_object_locale + 244: 0000000000011328 108 FUNC GLOBAL DEFAULT 11 atk_object_factory_get_accessible_type + 245: 000000000000c364 164 FUNC GLOBAL DEFAULT 11 atk_component_get_layer + 246: 0000000000010440 232 FUNC GLOBAL DEFAULT 11 atk_object_set_description + 247: 000000000000e448 164 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_n_links + 248: 00000000000169f8 188 FUNC GLOBAL DEFAULT 11 atk_text_get_character_at_offset + 249: 00000000000182c8 664 FUNC GLOBAL DEFAULT 11 atk_text_attribute_get_value + 250: 0000000000019318 236 FUNC GLOBAL DEFAULT 11 atk_value_set_current_value + 251: 000000000000ec5c 80 FUNC GLOBAL DEFAULT 11 atk_no_op_object_factory_get_type + 252: 0000000000013f5c 112 FUNC GLOBAL DEFAULT 11 atk_state_set_clear_states + 253: 0000000000013300 164 FUNC GLOBAL DEFAULT 11 atk_selection_clear_selection + 254: 0000000000012c34 284 FUNC GLOBAL DEFAULT 11 atk_relation_set_remove + 255: 000000000000fda4 148 FUNC GLOBAL DEFAULT 11 atk_object_get_role + 256: 0000000000019844 8 FUNC GLOBAL DEFAULT 11 atk_get_major_version + 257: 000000000000e5e0 156 FUNC GLOBAL DEFAULT 11 atk_image_get_image_description + 258: 0000000000040b98 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 259: 00000000000108a4 208 FUNC GLOBAL DEFAULT 11 atk_object_connect_property_change_handler + 260: 00000000000195ec 156 FUNC GLOBAL DEFAULT 11 atk_value_get_sub_ranges + 261: 00000000000105dc 212 FUNC GLOBAL DEFAULT 11 atk_object_set_role + 262: 000000000000d5c8 80 FUNC GLOBAL DEFAULT 11 atk_gobject_accessible_get_type + 263: 0000000000016f8c 356 FUNC GLOBAL DEFAULT 11 atk_text_get_character_extents + 264: 0000000000010258 140 FUNC GLOBAL DEFAULT 11 atk_object_ref_state_set + 265: 00000000000135b4 188 FUNC GLOBAL DEFAULT 11 atk_selection_remove_selection + 266: 0000000000018ce4 72 FUNC GLOBAL DEFAULT 11 atk_get_toolkit_name + 267: 00000000000142c0 248 FUNC GLOBAL DEFAULT 11 atk_state_set_or_sets + 268: 000000000000b7c4 176 FUNC GLOBAL DEFAULT 11 atk_action_get_name + 269: 000000000001a238 108 FUNC GLOBAL DEFAULT 11 atk_coord_type_get_type + 270: 000000000000c254 272 FUNC GLOBAL DEFAULT 11 atk_component_get_size + 271: 0000000000010528 180 FUNC GLOBAL DEFAULT 11 atk_object_set_parent + 272: 0000000000011728 84 FUNC GLOBAL DEFAULT 11 atk_range_new + 273: 000000000000c7cc 196 FUNC GLOBAL DEFAULT 11 atk_component_set_size + 274: 000000000000b874 176 FUNC GLOBAL DEFAULT 11 atk_action_get_localized_name + 275: 000000000000ce18 196 FUNC GLOBAL DEFAULT 11 atk_document_set_attribute_value + 276: 000000000000fc60 140 FUNC GLOBAL DEFAULT 11 atk_object_ref_relation_set + 277: 000000000000c5f4 252 FUNC GLOBAL DEFAULT 11 atk_component_set_extents + 278: 000000000001a310 0 FUNC GLOBAL DEFAULT 12 _fini + 279: 000000000000cb94 156 FUNC GLOBAL DEFAULT 11 atk_document_get_document + 280: 0000000000017554 156 FUNC GLOBAL DEFAULT 11 atk_text_get_n_selections + 281: 0000000000014b14 276 FUNC GLOBAL DEFAULT 11 atk_table_ref_at + 282: 0000000000013454 164 FUNC GLOBAL DEFAULT 11 atk_selection_get_selection_count + 283: 000000000000bb0c 184 FUNC GLOBAL DEFAULT 11 atk_component_add_focus_handler + 284: 0000000000015f54 160 FUNC GLOBAL DEFAULT 11 atk_table_set_summary + 285: 00000000000185c0 112 FUNC GLOBAL DEFAULT 11 atk_text_range_get_type + 286: 000000000000fa94 140 FUNC GLOBAL DEFAULT 11 atk_object_get_parent + 287: 00000000000166ec 72 FUNC GLOBAL DEFAULT 11 atk_text_get_type + 288: 000000000000e3a0 168 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_link + 289: 0000000000011a9c 84 FUNC GLOBAL DEFAULT 11 atk_registry_get_factory_type + 290: 000000000001282c 72 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_type + 291: 0000000000012780 100 FUNC GLOBAL DEFAULT 11 atk_relation_remove_target + 292: 0000000000017fcc 156 FUNC GLOBAL DEFAULT 11 atk_text_attribute_register + 293: 0000000000017488 204 FUNC GLOBAL DEFAULT 11 atk_text_get_offset_at_point + 294: 000000000000a710 0 FUNC GLOBAL DEFAULT 9 _init + 295: 000000000000b924 176 FUNC GLOBAL DEFAULT 11 atk_action_get_keybinding + 296: 00000000000119b0 236 FUNC GLOBAL DEFAULT 11 atk_registry_set_factory_type + 297: 000000000000e830 256 FUNC GLOBAL DEFAULT 11 atk_image_get_image_position + 298: 00000000000157a4 188 FUNC GLOBAL DEFAULT 11 atk_table_is_row_selected + 299: 0000000000018e2c 156 FUNC GLOBAL DEFAULT 11 atk_value_get_type + 300: 00000000000188d0 72 FUNC GLOBAL DEFAULT 11 atk_util_get_type + 301: 00000000000111f4 208 FUNC GLOBAL DEFAULT 11 atk_object_factory_create_accessible + 302: 0000000000016ee8 164 FUNC GLOBAL DEFAULT 11 atk_text_get_caret_offset + 303: 000000000000dba4 112 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_type + 304: 000000000000f04c 72 FUNC GLOBAL DEFAULT 11 atk_object_get_type + 305: 000000000000d014 72 FUNC GLOBAL DEFAULT 11 atk_editable_text_get_type + 306: 0000000000012158 156 FUNC GLOBAL DEFAULT 11 atk_relation_type_register + 307: 0000000000013138 156 FUNC GLOBAL DEFAULT 11 atk_selection_get_type + 308: 0000000000015eac 168 FUNC GLOBAL DEFAULT 11 atk_table_set_row_header + 309: 0000000000014888 156 FUNC GLOBAL DEFAULT 11 atk_table_get_type + 310: 00000000000162e0 164 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_row_span + 311: 0000000000019e08 100 FUNC GLOBAL DEFAULT 11 atk_hyperlink_state_flags_get_type + 312: 000000000000be1c 204 FUNC GLOBAL DEFAULT 11 atk_component_ref_accessible_at_point + 313: 0000000000010fec 316 FUNC GLOBAL DEFAULT 11 atk_object_remove_relationship + 314: 000000000001a01c 108 FUNC GLOBAL DEFAULT 11 atk_text_attribute_get_type + 315: 000000000000eb6c 140 FUNC GLOBAL DEFAULT 11 atk_no_op_object_new + 316: 0000000000013fcc 136 FUNC GLOBAL DEFAULT 11 atk_state_set_contains_state + 317: 00000000000133a4 176 FUNC GLOBAL DEFAULT 11 atk_selection_ref_selection + 318: 0000000000017f78 84 FUNC GLOBAL DEFAULT 11 atk_attribute_set_free + 319: 0000000000014f44 164 FUNC GLOBAL DEFAULT 11 atk_table_get_n_columns + 320: 0000000000040668 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 321: 00000000000177b0 188 FUNC GLOBAL DEFAULT 11 atk_text_remove_selection + 322: 0000000000018144 388 FUNC GLOBAL DEFAULT 11 atk_text_attribute_for_name + 323: 000000000001562c 188 FUNC GLOBAL DEFAULT 11 atk_table_get_selected_columns + 324: 00000000000156e8 188 FUNC GLOBAL DEFAULT 11 atk_table_is_column_selected + 325: 00000000000165d4 156 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_table + 326: 0000000000011b8c 172 FUNC GLOBAL DEFAULT 11 atk_get_default_registry + 327: 0000000000011674 72 FUNC GLOBAL DEFAULT 11 atk_range_free + 328: 000000000000fa08 140 FUNC GLOBAL DEFAULT 11 atk_object_get_description + 329: 0000000000018e1c 16 FUNC GLOBAL DEFAULT 11 atk_misc_get_instance + 330: 0000000000013d20 72 FUNC GLOBAL DEFAULT 11 atk_state_set_get_type + 331: 00000000000117d0 60 FUNC GLOBAL DEFAULT 11 atk_range_get_lower_limit + 332: 000000000000df0c 152 FUNC GLOBAL DEFAULT 11 atk_hyperlink_is_inline + 333: 0000000000013b18 204 FUNC GLOBAL DEFAULT 11 atk_state_type_get_name + 334: 0000000000018560 96 FUNC GLOBAL DEFAULT 11 atk_text_free_ranges + 335: 0000000000010974 144 FUNC GLOBAL DEFAULT 11 atk_object_remove_property_change_handler + 336: 000000000001013c 144 FUNC GLOBAL DEFAULT 11 atk_object_get_layer + 337: 0000000000013670 164 FUNC GLOBAL DEFAULT 11 atk_selection_select_all_selection + 338: 0000000000010b74 140 FUNC GLOBAL DEFAULT 11 atk_object_get_attributes + 339: 0000000000010cf0 48 FUNC GLOBAL DEFAULT 11 atk_role_get_localized_name + 340: 0000000000012d50 324 FUNC GLOBAL DEFAULT 11 atk_relation_set_add + 341: 0000000000018c8c 72 FUNC GLOBAL DEFAULT 11 atk_get_root + 342: 0000000000011d38 72 FUNC GLOBAL DEFAULT 11 atk_relation_get_type + 343: 000000000000cccc 156 FUNC GLOBAL DEFAULT 11 atk_document_get_attributes + 344: 000000000000cc30 156 FUNC GLOBAL DEFAULT 11 atk_document_get_locale + 345: 00000000000147a8 224 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_uri + 346: 000000000000cedc 156 FUNC GLOBAL DEFAULT 11 atk_document_get_current_page_number + 347: 000000000001520c 164 FUNC GLOBAL DEFAULT 11 atk_table_get_n_rows + 348: 0000000000019f44 108 FUNC GLOBAL DEFAULT 11 atk_relation_type_get_type + 349: 000000000001295c 24 FUNC GLOBAL DEFAULT 11 atk_relation_set_new + 350: 0000000000017948 188 FUNC GLOBAL DEFAULT 11 atk_text_set_caret_offset + 351: 00000000000173ec 156 FUNC GLOBAL DEFAULT 11 atk_text_get_character_count + 352: 000000000001412c 156 FUNC GLOBAL DEFAULT 11 atk_state_set_remove_state + 353: 00000000000122d0 388 FUNC GLOBAL DEFAULT 11 atk_relation_type_for_name + 354: 0000000000015570 188 FUNC GLOBAL DEFAULT 11 atk_table_get_selected_rows + 355: 000000000000d138 160 FUNC GLOBAL DEFAULT 11 atk_editable_text_set_text_contents + 356: 00000000000144b8 144 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_type + 357: 000000000001177c 84 FUNC GLOBAL DEFAULT 11 atk_range_copy + 358: 0000000000016924 212 FUNC GLOBAL DEFAULT 11 atk_text_get_text + 359: 00000000000176ec 196 FUNC GLOBAL DEFAULT 11 atk_text_add_selection + 360: 0000000000018d2c 72 FUNC GLOBAL DEFAULT 11 atk_get_toolkit_version + 361: 0000000000018dd4 36 FUNC GLOBAL DEFAULT 11 atk_misc_threads_enter + 362: 000000000001180c 60 FUNC GLOBAL DEFAULT 11 atk_range_get_upper_limit + 363: 000000000000dd50 148 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_end_index + 364: 000000000000fb20 8 FUNC GLOBAL DEFAULT 11 atk_object_peek_parent + 365: 00000000000145e8 224 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_mime_type + 366: 000000000000ecac 92 FUNC GLOBAL DEFAULT 11 atk_no_op_object_factory_new + 367: 0000000000014548 160 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_n_mime_types + 368: 000000000000d05c 220 FUNC GLOBAL DEFAULT 11 atk_editable_text_set_run_attributes + 369: 00000000000146c8 224 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_stream + 370: 000000000000e104 144 FUNC GLOBAL DEFAULT 11 atk_hyperlink_is_selected_link + 371: 000000000001a088 108 FUNC GLOBAL DEFAULT 11 atk_text_boundary_get_type + 372: 0000000000016404 156 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_row_header_cells + 373: 00000000000152b0 176 FUNC GLOBAL DEFAULT 11 atk_table_get_row_description + 374: 000000000000c6f0 220 FUNC GLOBAL DEFAULT 11 atk_component_set_position + 375: 0000000000012ac0 184 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_relation + 376: 000000000000e9ec 384 FUNC GLOBAL DEFAULT 11 atk_no_op_object_get_type + 377: 0000000000017254 252 FUNC GLOBAL DEFAULT 11 atk_text_get_run_attributes + 378: 00000000000164a0 308 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_row_column_span + 379: 000000000000fcec 184 FUNC GLOBAL DEFAULT 11 atk_role_register + 380: 0000000000018b64 108 FUNC GLOBAL DEFAULT 11 atk_add_global_event_listener + 381: 0000000000018d74 12 FUNC GLOBAL DEFAULT 11 atk_get_version + 382: 00000000000143b8 256 FUNC GLOBAL DEFAULT 11 atk_state_set_xor_sets + 383: 0000000000016ab4 264 FUNC GLOBAL DEFAULT 11 atk_text_get_text_after_offset + 384: 0000000000018df8 36 FUNC GLOBAL DEFAULT 11 atk_misc_threads_leave + 385: 00000000000116bc 108 FUNC GLOBAL DEFAULT 11 atk_range_get_type + 386: 0000000000012564 120 FUNC GLOBAL DEFAULT 11 atk_relation_get_relation_type + 387: 0000000000012454 272 FUNC GLOBAL DEFAULT 11 atk_relation_new + 388: 0000000000040ad8 8 OBJECT GLOBAL DEFAULT 24 atk_misc_instance + 389: 00000000000113e0 240 FUNC GLOBAL DEFAULT 11 atk_plug_get_type + 390: 0000000000017350 156 FUNC GLOBAL DEFAULT 11 atk_text_get_default_attributes + 391: 0000000000015b58 188 FUNC GLOBAL DEFAULT 11 atk_table_remove_column_selection + 392: 000000000000cafc 152 FUNC GLOBAL DEFAULT 11 atk_document_get_document_type + 393: 000000000001377c 240 FUNC GLOBAL DEFAULT 11 atk_socket_get_type + 394: 0000000000040b98 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 395: 0000000000013a14 128 FUNC GLOBAL DEFAULT 11 atk_socket_is_occupied + 396: 0000000000018a14 132 FUNC GLOBAL DEFAULT 11 atk_remove_focus_tracker + 397: 0000000000014fe8 176 FUNC GLOBAL DEFAULT 11 atk_table_get_column_description + 398: 0000000000011af0 156 FUNC GLOBAL DEFAULT 11 atk_registry_get_factory + 399: 0000000000012a40 128 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_n_relations + 400: 000000000000c98c 72 FUNC GLOBAL DEFAULT 11 atk_document_get_type + 401: 000000000000dde4 148 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_start_index + 402: 0000000000014df8 176 FUNC GLOBAL DEFAULT 11 atk_table_get_column_at_index + 403: 00000000000141c8 248 FUNC GLOBAL DEFAULT 11 atk_state_set_and_sets + 404: 000000000000de78 148 FUNC GLOBAL DEFAULT 11 atk_hyperlink_is_valid + 405: 000000000000bee8 288 FUNC GLOBAL DEFAULT 11 atk_component_get_extents + 406: 000000000001a2a4 108 FUNC GLOBAL DEFAULT 11 atk_value_type_get_type + 407: 0000000000010c00 144 FUNC GLOBAL DEFAULT 11 atk_object_initialize + 408: 0000000000015c14 160 FUNC GLOBAL DEFAULT 11 atk_table_set_caption + 409: 0000000000018d8c 72 FUNC GLOBAL DEFAULT 11 atk_misc_get_type + 410: 00000000000154d4 156 FUNC GLOBAL DEFAULT 11 atk_table_get_summary + 411: 000000000000e194 144 FUNC GLOBAL DEFAULT 11 atk_hyperlink_impl_get_type + 412: 000000000001786c 220 FUNC GLOBAL DEFAULT 11 atk_text_set_selection + 413: 000000000000bc64 220 FUNC GLOBAL DEFAULT 11 atk_component_contains + 414: 0000000000018a98 204 FUNC GLOBAL DEFAULT 11 atk_focus_tracker_notify + 415: 0000000000019e6c 108 FUNC GLOBAL DEFAULT 11 atk_role_get_type + 416: 0000000000018934 224 FUNC GLOBAL DEFAULT 11 atk_add_focus_tracker + 417: 0000000000014c28 288 FUNC GLOBAL DEFAULT 11 atk_table_get_index_at + 418: 0000000000019548 164 FUNC GLOBAL DEFAULT 11 atk_value_get_increment + 419: 000000000000c408 156 FUNC GLOBAL DEFAULT 11 atk_component_get_mdi_zorder diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatk-bridge-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatk-bridge-2.0.so.0.txt new file mode 100644 index 000000000000..1c4ee0feadea --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatk-bridge-2.0.so.0.txt @@ -0,0 +1,398 @@ +Library: /lib64/libatk-bridge-2.0.so.0 +Package: at-spi2-atk-2.26.2-1.el7.aarch64 + + +Symbol table '.dynsym' contains 392 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000009348 0 SECTION LOCAL DEFAULT 9 + 2: 000000000003fc30 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_data + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_impl_get_type + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_new + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_mdi_zorder + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__OBJECT + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_basic@LIBDBUS_1_3 (3) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_unref + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_locale + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_set_get_n_relations + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_unref@LIBDBUS_1_3 (3) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text_after_offset + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init_append@LIBDBUS_1_3 (3) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_add_main_entries + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_get_selection_count + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_reverse + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_add_match@LIBDBUS_1_3 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_full + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text_before_offset + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_add_key_event_listener + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_description + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_select_all_selection + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_ref_accessible_at_point + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 39: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_sender@LIBDBUS_1_3 (3) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_selection + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_append_basic@LIBDBUS_1_3 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_flush@LIBDBUS_1_3 (3) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_range_free + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_caret_offset + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_path@LIBDBUS_1_3 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_get_unique_name@LIBDBUS_1_3 (3) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_name + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_free + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_start_index + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_row_header_cells + 57: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handlers_disconnect_matched + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_increment + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_add_global_event_listener + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_at_index + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_add_row_selection + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_args@LIBDBUS_1_3 (3) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_print + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_minimum_increment + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_no_op_object_new + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sized_new + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_dbus_connection_setup_with_g_main + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_type + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_extent_at + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_set_main_context + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_type + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data_full + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_column_span + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_position + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_chunk_new + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_unix_user_function@LIBDBUS_1_3 (3) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_is_valid + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_header + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_role_get_name + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_offset_at_point + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_remove_row_selection + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_type + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_current_value + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_row_column_span + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_description + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_character_extents + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_attributes + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_unref + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkdir_with_parents + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_add_focus_tracker + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_set_notify@LIBDBUS_1_3 (3) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_header + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_remove_match@LIBDBUS_1_3 (3) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_transform + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (2) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strcasecmp + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_signature@LIBDBUS_1_3 (3) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_ref_accessible_child + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_plug_get_type + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_unref@LIBDBUS_1_3 (3) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_peek_head + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_close_container@LIBDBUS_1_3 (3) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_add_states + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_cut_text + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_get_relation_type + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_at_index + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_free@LIBDBUS_1_3 (3) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_add + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_do_action + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_return@LIBDBUS_1_3 (3) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_n_links + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_object + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_steal_reply@LIBDBUS_1_3 (3) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_current_page_number + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_type + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_position + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_grab_focus + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_runtime_dir + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_contains_state + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_set_no_reply@LIBDBUS_1_3 (3) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_set_value + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_request_name@LIBDBUS_1_3 (3) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_new + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_type + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_delete_text + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_push_tail + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_set_caret_offset + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_description + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply_and_block@LIBDBUS_1_3 (3) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_socket_get_type + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_n_rows + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_attach + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_register_fallback@LIBDBUS_1_3 (3) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_remove_global_event_listener + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_selected_rows + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_double + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_caption + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_next + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_clear_selection + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_range_get_upper_limit + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_remove_column_selection + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_equal + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_remove + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (2) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_paste_text + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.17 (2) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_index_at + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_uri + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_contains + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_summary + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_type + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_set_text_contents + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_n_columns + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_lock + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_table + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 191: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_warn_message + 193: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_n_accessible_children + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_get_toolkit_version + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_set_extents + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_add_seconds + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_default_attributes + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_n_anchors + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text_at_offset + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_add_selection + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_position + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_get_target + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_impl_get_hyperlink + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_end_index + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_is_selected + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_printf + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_remove + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_run_attributes + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_signal@LIBDBUS_1_3 (3) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_double + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_is_child_selected + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_maximum_value + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_concat + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_streamable_content_get_type + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_call@LIBDBUS_1_3 (3) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_fixed_array@LIBDBUS_1_3 (3) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_string + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply@LIBDBUS_1_3 (3) + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_next@LIBDBUS_1_3 (3) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_open_container@LIBDBUS_1_3 (3) + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_selected_columns + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_unregister_object_path@LIBDBUS_1_3 (3) + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_new_connection_function@LIBDBUS_1_3 (3) + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_type + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_query + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_range_get_lower_limit + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_localized_name + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_chunk_free + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.17 (2) + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_role + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_pointer + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_new + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_n_selections + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_dbus_server_setup_with_g_main + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value_holds + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_minimum_value + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_run + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_ref_selection + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_remove_selection + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_add_selection + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_isprint + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_link_index + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_alpha + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_add_column_selection + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_type + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_locale + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_n_actions + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_column_header_cells + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_nth_data + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_row_span + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_role_get_localized_name + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_set_get_relation + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_link + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_character_at_offset + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.17 (2) + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_new + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_unref + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_copy_text + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_bounded_ranges + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_get_char_validated + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_remove_filter@LIBDBUS_1_3 (3) + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_free + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_range_extents + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_set_current_value + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_index_in_parent + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_member@LIBDBUS_1_3 (3) + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_append_args_valist@LIBDBUS_1_3 (3) + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_string_at_offset + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_ref@LIBDBUS_1_3 (3) + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_get_root + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_is_empty + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_socket_is_occupied + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_init@LIBDBUS_1_3 (3) + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_parse + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_close@LIBDBUS_1_3 (3) + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_type + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 300: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_arg_type@LIBDBUS_1_3 (3) + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_is_row_selected + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_set_position + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_remove_key_event_listener + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_fundamentally_a + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 307: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_ref_relation_set + 308: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_is_initialized + 309: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_ref_at + 311: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_character_count + 312: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_unlock + 313: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 314: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_new + 315: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_remove_selection + 316: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_type + 317: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_insert_text + 318: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 319: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_recurse@LIBDBUS_1_3 (3) + 320: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_chunk_insert + 321: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_get_toolkit_name + 322: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boolean + 323: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 324: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_extent_at + 325: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_current_time + 326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send@LIBDBUS_1_3 (3) + 327: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_unref@LIBDBUS_1_3 (3) + 328: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 329: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_error@LIBDBUS_1_3 (3) + 330: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_size + 331: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_cancel@LIBDBUS_1_3 (3) + 332: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_register_object_path@LIBDBUS_1_3 (3) + 333: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_lookup + 334: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_interface@LIBDBUS_1_3 (3) + 335: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 336: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_init + 337: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_keybinding + 338: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit + 339: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_type + 340: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_data + 341: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init@LIBDBUS_1_3 (3) + 342: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_get_a11y_bus + 343: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_ignore_unknown_options + 344: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_attribute_value + 345: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_name + 346: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 347: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_value_and_text + 348: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_description + 349: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_quit + 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_add_filter@LIBDBUS_1_3 (3) + 351: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 352: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_description + 353: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_new + 354: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 355: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_append_args@LIBDBUS_1_3 (3) + 356: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup_extended + 357: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 358: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_layer + 359: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_page_count + 360: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_get_type + 361: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_type@LIBDBUS_1_3 (3) + 362: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 363: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_to_string + 364: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_range + 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_pop_head + 366: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strchr + 367: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uint + 368: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_remove_focus_tracker + 369: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 370: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkdtemp + 371: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_size + 372: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_add_state + 373: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_set_size + 374: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_attribute_set_free + 375: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 376: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (2) + 377: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_attributes + 378: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_object_locale + 379: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_validate + 380: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_get_type + 381: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_set_selection + 382: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_extents + 383: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 384: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_foreach + 385: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 386: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_ref_state_set + 387: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_is_column_selected + 388: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_listen@LIBDBUS_1_3 (3) + 389: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_parent + 390: 000000000000d408 1200 FUNC GLOBAL DEFAULT 11 atk_bridge_adaptor_init + 391: 000000000000d8b8 632 FUNC GLOBAL DEFAULT 11 atk_bridge_adaptor_cleanup diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatspi.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatspi.so.0.txt new file mode 100644 index 000000000000..38a4af5316c5 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libatspi.so.0.txt @@ -0,0 +1,616 @@ +Library: /lib64/libatspi.so.0 +Package: at-spi2-core-2.28.0-1.el7.aarch64 + + +Symbol table '.dynsym' contains 610 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000e718 0 SECTION LOCAL DEFAULT 9 + 2: 000000000004dbe8 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unref + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_data@LIBDBUS_1_3 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (3) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_get@LIBDBUS_1_3 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_basic@LIBDBUS_1_3 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_unref@LIBDBUS_1_3 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init_append@LIBDBUS_1_3 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_is_method_call@LIBDBUS_1_3 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_get_data@LIBDBUS_1_3 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_add_match@LIBDBUS_1_3 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_get_dispatch_status@LIBDBUS_1_3 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_sender@LIBDBUS_1_3 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_set_error_const@LIBDBUS_1_3 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_append_basic@LIBDBUS_1_3 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_timeout_functions@LIBDBUS_1_3 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_path@LIBDBUS_1_3 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_timeout_functions@LIBDBUS_1_3 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_get_unique_name@LIBDBUS_1_3 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_get_is_connected@LIBDBUS_1_3 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_wakeup + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_flags@LIBDBUS_1_3 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_unset + 36: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (3) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_destination@LIBDBUS_1_3 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 40: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (3) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_ref@LIBDBUS_1_3 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_args@LIBDBUS_1_3 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sized_new + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boxed + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_set_size + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_signature@LIBDBUS_1_3 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_data@LIBDBUS_1_3 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_set_notify@LIBDBUS_1_3 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_new + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_remove_match@LIBDBUS_1_3 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_string + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_signature@LIBDBUS_1_3 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_unref@LIBDBUS_1_3 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_close_container@LIBDBUS_1_3 (2) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_read_write_dispatch@LIBDBUS_1_3 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_default + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_source_new + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_free@LIBDBUS_1_3 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_return@LIBDBUS_1_3 (2) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_steal_reply@LIBDBUS_1_3 (2) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_remove + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strlen + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (3) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strrchr + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_error_name@LIBDBUS_1_3 (2) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_push_tail + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_allocate_data_slot@LIBDBUS_1_3 (2) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_unix_fd@LIBDBUS_1_3 (2) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (3) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply_and_block@LIBDBUS_1_3 (2) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_enabled@LIBDBUS_1_3 (2) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_attach + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_get_interval@LIBDBUS_1_3 (2) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_instance + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_next + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_copy + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_get_data@LIBDBUS_1_3 (2) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_equal + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (3) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.17 (3) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_create_watch + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XOpenDisplay + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (3) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new_with_free_func + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 115: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 116: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_set_data@LIBDBUS_1_3 (2) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_size + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_signal@LIBDBUS_1_3 (2) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_call@LIBDBUS_1_3 (2) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_instance_private + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_fixed_array@LIBDBUS_1_3 (2) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply@LIBDBUS_1_3 (2) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unix_new + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_next@LIBDBUS_1_3 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_open_container@LIBDBUS_1_3 (2) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_set_size + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_boxed + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (3) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_get_enabled@LIBDBUS_1_3 (2) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (3) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_boxed + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (3) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInternAtom + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_new + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_run_dispose + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value_holds + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_run + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata_full + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_handle@LIBDBUS_1_3 (2) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_new + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_string + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_allocate_data_slot@LIBDBUS_1_3 (2) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_member@LIBDBUS_1_3 (2) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_wakeup_main_function@LIBDBUS_1_3 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_watch_functions@LIBDBUS_1_3 (2) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_ref@LIBDBUS_1_3 (2) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_ref + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_init@LIBDBUS_1_3 (2) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XDefaultRootWindow + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_close@LIBDBUS_1_3 (2) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_handle@LIBDBUS_1_3 (2) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_arg_type@LIBDBUS_1_3 (2) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_register@LIBDBUS_1_3 (2) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_set_error@LIBDBUS_1_3 (2) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_get_data@LIBDBUS_1_3 (2) + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_is_set@LIBDBUS_1_3 (2) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_ref@LIBDBUS_1_3 (2) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_free_data_slot@LIBDBUS_1_3 (2) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_recurse@LIBDBUS_1_3 (2) + 185: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send@LIBDBUS_1_3 (2) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_unref@LIBDBUS_1_3 (2) + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_type + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_cancel@LIBDBUS_1_3 (2) + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_clear_error + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_data@LIBDBUS_1_3 (2) + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_interface@LIBDBUS_1_3 (2) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_init + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.17 (3) + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init@LIBDBUS_1_3 (2) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __isoc99_sscanf@GLIBC_2.17 (3) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_quit + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_add_filter@LIBDBUS_1_3 (2) + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_append_args@LIBDBUS_1_3 (2) + 205: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_set_data@LIBDBUS_1_3 (2) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error_literal + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_is_signal@LIBDBUS_1_3 (2) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetWindowProperty + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_free@LIBDBUS_1_3 (2) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_type@LIBDBUS_1_3 (2) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strndup + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_pop_head + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_watch_functions@LIBDBUS_1_3 (2) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCloseDisplay + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_open_private@LIBDBUS_1_3 (2) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_dispatch@LIBDBUS_1_3 (2) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_interface_static + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_is_a + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_object + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_depth + 225: 00000000000205bc 532 FUNC GLOBAL DEFAULT 11 dbind_send_and_allow_reentry + 226: 0000000000014fcc 164 FUNC GLOBAL DEFAULT 11 atspi_editable_text_cut_text + 227: 000000000000fcf8 68 FUNC GLOBAL DEFAULT 11 atspi_locale_type_get_type + 228: 0000000000018f30 16 FUNC GLOBAL DEFAULT 11 atspi_is_initialized + 229: 0000000000017ed8 188 FUNC GLOBAL DEFAULT 11 atspi_image_get_image_extents + 230: 0000000000014a9c 160 FUNC GLOBAL DEFAULT 11 atspi_document_get_locale + 231: 000000000001add4 256 FUNC GLOBAL DEFAULT 11 _atspi_dbus_send_with_reply_and_block + 232: 0000000000050b08 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_action + 233: 0000000000012958 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_text_iface + 234: 000000000001b5bc 24 FUNC GLOBAL DEFAULT 11 _atspi_set_allow_sync + 235: 00000000000136d0 304 FUNC GLOBAL DEFAULT 11 atspi_collection_get_matches_from + 236: 00000000000207d0 616 FUNC GLOBAL DEFAULT 11 dbind_method_call_reentrant_va + 237: 000000000001f0bc 416 FUNC GLOBAL DEFAULT 11 atspi_text_get_text_attributes + 238: 0000000000014d0c 156 FUNC GLOBAL DEFAULT 11 atspi_document_get_current_page_number + 239: 0000000000015d68 64 FUNC GLOBAL DEFAULT 11 _atspi_reregister_event_listeners + 240: 0000000000010cbc 152 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_toolkit_version + 241: 00000000000129a8 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_value + 242: 00000000000192b4 372 FUNC GLOBAL DEFAULT 11 _atspi_dbus_set_interfaces + 243: 00000000000175e0 148 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_type + 244: 0000000000012320 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_action_iface + 245: 0000000000017674 84 FUNC GLOBAL DEFAULT 11 _atspi_hyperlink_new + 246: 0000000000010894 472 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_relation_set + 247: 000000000001cfc0 72 FUNC GLOBAL DEFAULT 11 atspi_selection_get_type + 248: 000000000001ce80 160 FUNC GLOBAL DEFAULT 11 atspi_selection_select_all + 249: 000000000001fd18 216 FUNC GLOBAL DEFAULT 11 atspi_text_get_bounded_ranges + 250: 000000000001324c 64 FUNC GLOBAL DEFAULT 11 _atspi_application_new + 251: 0000000000013b08 276 FUNC GLOBAL DEFAULT 11 atspi_component_get_extents + 252: 000000000001e810 116 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_column_header_cells + 253: 0000000000012818 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_table + 254: 00000000000138f4 108 FUNC GLOBAL DEFAULT 11 atspi_rect_get_type + 255: 0000000000012410 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_component + 256: 000000000001ff4c 112 FUNC GLOBAL DEFAULT 11 atspi_text_add_selection + 257: 000000000001ec5c 160 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_table + 258: 0000000000050ae8 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_dec + 259: 000000000001dda0 120 FUNC GLOBAL DEFAULT 11 atspi_table_get_column_header + 260: 0000000000010410 704 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_type + 261: 0000000000010ec4 140 FUNC GLOBAL DEFAULT 11 _atspi_accessible_new + 262: 0000000000011cfc 212 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_attributes + 263: 000000000001fc2c 236 FUNC GLOBAL DEFAULT 11 atspi_text_get_range_extents + 264: 000000000001d100 140 FUNC GLOBAL DEFAULT 11 atspi_state_set_get_type + 265: 0000000000050a54 4 OBJECT GLOBAL DEFAULT 23 _dbus_gmain_connection_slot + 266: 000000000001bf1c 88 FUNC GLOBAL DEFAULT 11 atspi_get_desktop_list + 267: 000000000001d834 120 FUNC GLOBAL DEFAULT 11 atspi_table_get_accessible_at + 268: 0000000000019428 212 FUNC GLOBAL DEFAULT 11 _atspi_dbus_set_state + 269: 0000000000013588 328 FUNC GLOBAL DEFAULT 11 atspi_collection_get_matches_to + 270: 0000000000012a48 268 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_object_locale + 271: 0000000000017764 184 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_uri + 272: 000000000001f4c4 116 FUNC GLOBAL DEFAULT 11 atspi_text_get_default_attributes + 273: 0000000000017954 128 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_start_index + 274: 000000000001d9f4 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_column_at_index + 275: 0000000000050b20 8 OBJECT GLOBAL DEFAULT 23 atspi_path_root + 276: 000000000001c76c 112 FUNC GLOBAL DEFAULT 11 atspi_key_definition_get_type + 277: 0000000000010054 72 FUNC GLOBAL DEFAULT 11 atspi_key_synth_type_get_type + 278: 000000000001cbf0 164 FUNC GLOBAL DEFAULT 11 atspi_selection_select_child + 279: 000000000001e1e0 164 FUNC GLOBAL DEFAULT 11 atspi_table_add_row_selection + 280: 000000000001ef60 188 FUNC GLOBAL DEFAULT 11 atspi_text_get_text + 281: 000000000001dbe0 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_row_extent_at + 282: 000000000001b148 236 FUNC GLOBAL DEFAULT 11 atspi_set_main_context + 283: 0000000000013c1c 164 FUNC GLOBAL DEFAULT 11 atspi_component_get_position + 284: 0000000000050e00 0 NOTYPE GLOBAL DEFAULT 24 _end + 285: 00000000000122d0 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_action + 286: 000000000001d18c 120 FUNC GLOBAL DEFAULT 11 _atspi_state_set_new_internal + 287: 0000000000019c1c 484 FUNC GLOBAL DEFAULT 11 atspi_init + 288: 0000000000021aa8 688 FUNC GLOBAL DEFAULT 11 dbind_any_demarshal_va + 289: 000000000001202c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_text + 290: 0000000000050ac8 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_event_object + 291: 0000000000010a6c 180 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_localized_role_name + 292: 000000000001e924 116 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_row_header_cells + 293: 0000000000018e5c 76 FUNC GLOBAL DEFAULT 11 _atspi_get_live_refs + 294: 000000000001dff8 160 FUNC GLOBAL DEFAULT 11 atspi_table_get_n_selected_columns + 295: 0000000000010fe0 104 FUNC GLOBAL DEFAULT 11 atspi_accessible_clear_cache + 296: 000000000001ed48 52 FUNC GLOBAL DEFAULT 11 atspi_range_copy + 297: 000000000001dc84 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_column_extent_at + 298: 000000000001a4e0 84 FUNC GLOBAL DEFAULT 11 _atspi_dbus_return_accessible_from_iter + 299: 0000000000012d34 4 FUNC GLOBAL DEFAULT 11 atspi_action_get_description + 300: 000000000001c734 56 FUNC GLOBAL DEFAULT 11 _atspi_reregister_device_listeners + 301: 0000000000012bb8 60 FUNC GLOBAL DEFAULT 11 _atspi_accessible_unref_cache + 302: 000000000000fea4 72 FUNC GLOBAL DEFAULT 11 atspi_text_boundary_type_get_type + 303: 000000000001d5bc 156 FUNC GLOBAL DEFAULT 11 atspi_table_get_caption + 304: 000000000000ffc4 72 FUNC GLOBAL DEFAULT 11 atspi_key_event_type_get_type + 305: 00000000000116d4 164 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_description + 306: 00000000000160d0 608 FUNC GLOBAL DEFAULT 11 _atspi_send_event + 307: 0000000000020544 72 FUNC GLOBAL DEFAULT 11 atspi_value_get_type + 308: 0000000000017a54 160 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_is_valid + 309: 000000000001e5b0 164 FUNC GLOBAL DEFAULT 11 atspi_table_is_selected + 310: 000000000001204c 644 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_interfaces + 311: 00000000000103ec 36 FUNC GLOBAL DEFAULT 11 free_value + 312: 000000000001bf74 360 FUNC GLOBAL DEFAULT 11 atspi_register_keystroke_listener + 313: 0000000000015988 136 FUNC GLOBAL DEFAULT 11 callback_unref + 314: 00000000000119b4 224 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_role_name + 315: 0000000000014f50 124 FUNC GLOBAL DEFAULT 11 atspi_editable_text_copy_text + 316: 0000000000020060 188 FUNC GLOBAL DEFAULT 11 atspi_text_set_selection + 317: 000000000001009c 72 FUNC GLOBAL DEFAULT 11 atspi_modifier_type_get_type + 318: 00000000000112d8 208 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_child_count + 319: 0000000000012868 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_table_iface + 320: 0000000000016330 2120 FUNC GLOBAL DEFAULT 11 _atspi_dbus_handle_event + 321: 000000000001f7e4 260 FUNC GLOBAL DEFAULT 11 atspi_text_get_text_at_offset + 322: 000000000001d8ac 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_index_at + 323: 000000000001832c 584 FUNC GLOBAL DEFAULT 11 atspi_match_rule_new + 324: 0000000000020ba4 164 FUNC GLOBAL DEFAULT 11 dbind_emit_signal + 325: 000000000001cc94 164 FUNC GLOBAL DEFAULT 11 atspi_selection_deselect_selected_child + 326: 00000000000125a0 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_editable_text_iface + 327: 00000000000145b4 172 FUNC GLOBAL DEFAULT 11 atspi_device_listener_add_callback + 328: 00000000000101bc 72 FUNC GLOBAL DEFAULT 11 atspi_key_listener_sync_type_get_type + 329: 000000000001f6e0 260 FUNC GLOBAL DEFAULT 11 atspi_text_get_string_at_offset + 330: 0000000000012500 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_document_iface + 331: 000000000001e998 392 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_position + 332: 00000000000146cc 228 FUNC GLOBAL DEFAULT 11 atspi_device_listener_remove_callback + 333: 000000000001f408 184 FUNC GLOBAL DEFAULT 11 atspi_text_get_text_attribute_value + 334: 0000000000015114 164 FUNC GLOBAL DEFAULT 11 atspi_editable_text_paste_text + 335: 000000000001e654 72 FUNC GLOBAL DEFAULT 11 atspi_table_get_type + 336: 00000000000201fc 152 FUNC GLOBAL DEFAULT 11 atspi_value_get_current_value + 337: 0000000000015a68 92 FUNC GLOBAL DEFAULT 11 atspi_event_listener_new_simple + 338: 0000000000050ae0 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_device_event_listener + 339: 0000000000021698 1040 FUNC GLOBAL DEFAULT 11 dbind_any_demarshal + 340: 0000000000020d84 32 FUNC GLOBAL DEFAULT 11 dbind_find_c_alignment + 341: 000000000001cddc 164 FUNC GLOBAL DEFAULT 11 atspi_selection_is_child_selected + 342: 0000000000012b54 100 FUNC GLOBAL DEFAULT 11 _atspi_accessible_ref_cache + 343: 0000000000022098 36 FUNC GLOBAL DEFAULT 11 dbind_any_free + 344: 000000000001ad2c 168 FUNC GLOBAL DEFAULT 11 _atspi_dbus_call_partial + 345: 0000000000050ab0 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_image + 346: 0000000000012fcc 72 FUNC GLOBAL DEFAULT 11 atspi_action_get_type + 347: 0000000000050e00 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 348: 000000000001d57c 60 FUNC GLOBAL DEFAULT 11 atspi_state_set_remove + 349: 0000000000015070 164 FUNC GLOBAL DEFAULT 11 atspi_editable_text_delete_text + 350: 0000000000010b20 260 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_attributes_as_array + 351: 00000000000111bc 128 FUNC GLOBAL DEFAULT 11 _atspi_accessible_get_cache_mask + 352: 0000000000011f6c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_action + 353: 000000000001012c 72 FUNC GLOBAL DEFAULT 11 atspi_role_get_type + 354: 0000000000017d98 160 FUNC GLOBAL DEFAULT 11 atspi_image_get_image_size + 355: 0000000000015dd0 708 FUNC GLOBAL DEFAULT 11 atspi_event_listener_deregister_from_callback + 356: 0000000000050b44 0 NOTYPE GLOBAL DEFAULT 23 _edata + 357: 000000000001d388 128 FUNC GLOBAL DEFAULT 11 atspi_state_set_compare + 358: 0000000000012f28 164 FUNC GLOBAL DEFAULT 11 atspi_action_do_action + 359: 0000000000018ea8 136 FUNC GLOBAL DEFAULT 11 get_reference_from_iter + 360: 0000000000020168 148 FUNC GLOBAL DEFAULT 11 atspi_value_get_minimum_value + 361: 0000000000013dd0 112 FUNC GLOBAL DEFAULT 11 atspi_component_get_mdi_z_order + 362: 000000000001f25c 4 FUNC GLOBAL DEFAULT 11 atspi_text_get_attributes + 363: 0000000000012908 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_text + 364: 000000000001e470 320 FUNC GLOBAL DEFAULT 11 atspi_table_get_row_column_extents_at_index + 365: 00000000000124b0 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_document + 366: 000000000001e284 164 FUNC GLOBAL DEFAULT 11 atspi_table_add_column_selection + 367: 0000000000050de0 8 OBJECT GLOBAL DEFAULT 24 device_parent_class + 368: 000000000001e774 156 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_column_span + 369: 00000000000138c0 52 FUNC GLOBAL DEFAULT 11 atspi_point_copy + 370: 000000000001382c 72 FUNC GLOBAL DEFAULT 11 atspi_collection_get_type + 371: 0000000000014528 140 FUNC GLOBAL DEFAULT 11 atspi_device_listener_get_type + 372: 0000000000013470 44 FUNC GLOBAL DEFAULT 11 atspi_collection_is_ancestor_of + 373: 0000000000050df8 8 OBJECT GLOBAL DEFAULT 24 atspi_main_context + 374: 0000000000020c48 16 FUNC GLOBAL DEFAULT 11 dbind_set_timeout + 375: 00000000000176c8 156 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_n_anchors + 376: 00000000000139d0 184 FUNC GLOBAL DEFAULT 11 atspi_component_contains + 377: 0000000000050b44 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 378: 0000000000018574 720 FUNC GLOBAL DEFAULT 11 _atspi_match_rule_marshal + 379: 000000000001cadc 156 FUNC GLOBAL DEFAULT 11 atspi_selection_get_n_selected_children + 380: 000000000001d480 236 FUNC GLOBAL DEFAULT 11 atspi_state_set_get_states + 381: 000000000001eb20 316 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_row_column_span + 382: 0000000000014c70 156 FUNC GLOBAL DEFAULT 11 atspi_document_get_page_count + 383: 0000000000050b00 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_application + 384: 0000000000017894 192 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_index_range + 385: 000000000000fdcc 72 FUNC GLOBAL DEFAULT 11 atspi_collection_match_type_get_type + 386: 000000000001d2d8 60 FUNC GLOBAL DEFAULT 11 atspi_state_set_add + 387: 0000000000011fac 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_document + 388: 0000000000011048 372 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_process_id + 389: 0000000000011fbc 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_editable_text + 390: 0000000000020294 152 FUNC GLOBAL DEFAULT 11 atspi_value_get_maximum_value + 391: 0000000000050a68 8 OBJECT GLOBAL DEFAULT 23 old_cache_signal_type + 392: 000000000001d314 116 FUNC GLOBAL DEFAULT 11 atspi_state_set_new + 393: 0000000000014260 72 FUNC GLOBAL DEFAULT 11 atspi_component_get_type + 394: 0000000000050df0 8 OBJECT GLOBAL DEFAULT 24 atspi_main_loop + 395: 0000000000011778 360 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_parent + 396: 0000000000018188 140 FUNC GLOBAL DEFAULT 11 atspi_match_rule_get_type + 397: 000000000001db3c 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_column_description + 398: 00000000000114d0 296 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_index_in_parent + 399: 00000000000204ac 152 FUNC GLOBAL DEFAULT 11 atspi_value_get_minimum_increment + 400: 0000000000014b3c 184 FUNC GLOBAL DEFAULT 11 atspi_document_get_document_attribute_value + 401: 000000000001aed4 608 FUNC GLOBAL DEFAULT 11 _atspi_ref_accessible + 402: 000000000001dd28 120 FUNC GLOBAL DEFAULT 11 atspi_table_get_row_header + 403: 000000000001c640 244 FUNC GLOBAL DEFAULT 11 atspi_generate_mouse_event + 404: 000000000001ecfc 72 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_type + 405: 0000000000050e00 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 406: 000000000001e328 164 FUNC GLOBAL DEFAULT 11 atspi_table_remove_row_selection + 407: 0000000000013878 4 FUNC GLOBAL DEFAULT 11 atspi_rect_free + 408: 000000000002032c 384 FUNC GLOBAL DEFAULT 11 atspi_value_set_current_value + 409: 0000000000050ad8 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_document + 410: 000000000001d204 212 FUNC GLOBAL DEFAULT 11 atspi_state_set_set_by_name + 411: 0000000000050ad0 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_editable_text + 412: 0000000000011630 164 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_name + 413: 000000000001a6b8 180 FUNC GLOBAL DEFAULT 11 _atspi_dbus_return_hyperlink_from_message + 414: 000000000000fe5c 72 FUNC GLOBAL DEFAULT 11 atspi_component_layer_get_type + 415: 00000000000151b8 72 FUNC GLOBAL DEFAULT 11 atspi_editable_text_get_type + 416: 00000000000146b4 24 FUNC GLOBAL DEFAULT 11 atspi_device_listener_new_simple + 417: 000000000001b61c 464 FUNC GLOBAL DEFAULT 11 _atspi_dbus_call + 418: 000000000001beec 8 FUNC GLOBAL DEFAULT 11 atspi_get_desktop_count + 419: 0000000000016b78 112 FUNC GLOBAL DEFAULT 11 atspi_event_get_type + 420: 00000000000158d4 180 FUNC GLOBAL DEFAULT 11 callback_ref + 421: 000000000001edec 108 FUNC GLOBAL DEFAULT 11 atspi_range_get_type + 422: 000000000001ab4c 480 FUNC GLOBAL DEFAULT 11 _atspi_dbus_call_partial_va + 423: 000000000001fb70 188 FUNC GLOBAL DEFAULT 11 atspi_text_get_offset_at_point + 424: 000000000001c84c 128 FUNC GLOBAL DEFAULT 11 atspi_relation_get_target + 425: 0000000000011fec 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_image + 426: 0000000000012bf8 152 FUNC GLOBAL DEFAULT 11 atspi_action_get_n_actions + 427: 000000000001349c 236 FUNC GLOBAL DEFAULT 11 atspi_collection_get_matches + 428: 0000000000017e38 160 FUNC GLOBAL DEFAULT 11 atspi_image_get_image_position + 429: 000000000001d56c 16 FUNC GLOBAL DEFAULT 11 atspi_state_set_is_empty + 430: 0000000000013e40 108 FUNC GLOBAL DEFAULT 11 atspi_component_grab_focus + 431: 0000000000013a88 128 FUNC GLOBAL DEFAULT 11 atspi_component_get_accessible_at_point + 432: 000000000001123c 156 FUNC GLOBAL DEFAULT 11 _atspi_accessible_test_cache + 433: 0000000000013eac 112 FUNC GLOBAL DEFAULT 11 atspi_component_get_alpha + 434: 000000000001b5ac 16 FUNC GLOBAL DEFAULT 11 _atspi_get_allow_sync + 435: 0000000000018f40 56 FUNC GLOBAL DEFAULT 11 atspi_event_main + 436: 00000000000172ec 356 FUNC GLOBAL DEFAULT 11 atspi_dbus_connection_setup_with_g_main + 437: 000000000000ff34 72 FUNC GLOBAL DEFAULT 11 atspi_text_clip_type_get_type + 438: 00000000000220dc 0 FUNC GLOBAL DEFAULT 12 _fini + 439: 0000000000050b30 8 OBJECT GLOBAL DEFAULT 23 atspi_path_dec + 440: 000000000001bc90 44 FUNC GLOBAL DEFAULT 11 atspi_key_definition_free + 441: 0000000000017af8 156 FUNC GLOBAL DEFAULT 11 atspi_hypertext_get_n_links + 442: 000000000001b134 20 FUNC GLOBAL DEFAULT 11 atspi_set_timeout + 443: 000000000001eec8 152 FUNC GLOBAL DEFAULT 11 atspi_text_get_character_count + 444: 0000000000014100 188 FUNC GLOBAL DEFAULT 11 atspi_component_set_position + 445: 000000000001f5dc 260 FUNC GLOBAL DEFAULT 11 atspi_text_get_text_before_offset + 446: 000000000001f260 424 FUNC GLOBAL DEFAULT 11 atspi_text_get_attribute_run + 447: 0000000000019714 288 FUNC GLOBAL DEFAULT 11 _atspi_dbus_return_attribute_array_from_message + 448: 0000000000050a78 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_value + 449: 000000000001387c 68 FUNC GLOBAL DEFAULT 11 atspi_rect_copy + 450: 000000000001c328 272 FUNC GLOBAL DEFAULT 11 atspi_register_device_event_listener + 451: 000000000000feec 72 FUNC GLOBAL DEFAULT 11 atspi_text_granularity_get_type + 452: 000000000000ff7c 72 FUNC GLOBAL DEFAULT 11 atspi_state_type_get_type + 453: 0000000000014e94 188 FUNC GLOBAL DEFAULT 11 atspi_editable_text_insert_text + 454: 0000000000015d1c 36 FUNC GLOBAL DEFAULT 11 atspi_event_listener_register_full + 455: 0000000000014a18 16 FUNC GLOBAL DEFAULT 11 _atspi_device_listener_get_path + 456: 000000000001c8cc 140 FUNC GLOBAL DEFAULT 11 atspi_relation_get_type + 457: 0000000000017cb0 72 FUNC GLOBAL DEFAULT 11 atspi_hypertext_get_type + 458: 0000000000012d38 164 FUNC GLOBAL DEFAULT 11 atspi_action_get_key_binding + 459: 00000000000100e4 72 FUNC GLOBAL DEFAULT 11 atspi_relation_type_get_type + 460: 000000000000e718 0 FUNC GLOBAL DEFAULT 9 _init + 461: 0000000000012688 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_hypertext_iface + 462: 00000000000191ac 264 FUNC GLOBAL DEFAULT 11 _atspi_dbus_attribute_array_from_iter + 463: 0000000000015d4c 28 FUNC GLOBAL DEFAULT 11 atspi_event_listener_register + 464: 0000000000018dec 112 FUNC GLOBAL DEFAULT 11 _atspi_get_iface_num + 465: 000000000001e13c 164 FUNC GLOBAL DEFAULT 11 atspi_table_is_column_selected + 466: 000000000001fa90 224 FUNC GLOBAL DEFAULT 11 atspi_text_get_character_extents + 467: 00000000000129f8 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_value_iface + 468: 0000000000010e98 44 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_streamable_content + 469: 0000000000050b28 8 OBJECT GLOBAL DEFAULT 23 atspi_path_registry + 470: 000000000000fe14 72 FUNC GLOBAL DEFAULT 11 atspi_collection_tree_traversal_type_get_type + 471: 0000000000050a98 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_table + 472: 0000000000050b18 8 OBJECT GLOBAL DEFAULT 23 atspi_bus_registry + 473: 000000000001cf20 160 FUNC GLOBAL DEFAULT 11 atspi_selection_clear_selection + 474: 0000000000010d54 152 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_atspi_version + 475: 000000000000fd3c 72 FUNC GLOBAL DEFAULT 11 atspi_coord_type_get_type + 476: 0000000000012550 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_editable_text + 477: 00000000000147b0 616 FUNC GLOBAL DEFAULT 11 _atspi_dbus_handle_DeviceEvent + 478: 0000000000018038 72 FUNC GLOBAL DEFAULT 11 atspi_image_get_type + 479: 000000000001d44c 52 FUNC GLOBAL DEFAULT 11 atspi_state_set_equals + 480: 0000000000014660 84 FUNC GLOBAL DEFAULT 11 atspi_device_listener_new + 481: 000000000001bdfc 84 FUNC GLOBAL DEFAULT 11 atspi_key_definition_copy + 482: 000000000001f4c0 4 FUNC GLOBAL DEFAULT 11 atspi_text_get_attribute_value + 483: 00000000000113a8 296 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_child_at_index + 484: 0000000000050a48 8 OBJECT GLOBAL DEFAULT 23 str_parent + 485: 0000000000010f50 144 FUNC GLOBAL DEFAULT 11 atspi_accessible_set_cache_mask + 486: 0000000000013f1c 484 FUNC GLOBAL DEFAULT 11 atspi_component_set_extents + 487: 0000000000013d60 112 FUNC GLOBAL DEFAULT 11 atspi_component_get_layer + 488: 000000000001b324 648 FUNC GLOBAL DEFAULT 11 _atspi_dbus_update_cache_from_dict + 489: 0000000000017cfc 156 FUNC GLOBAL DEFAULT 11 atspi_image_get_image_description + 490: 0000000000050ab8 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_hypertext + 491: 0000000000012370 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_collection + 492: 000000000001b234 52 FUNC GLOBAL DEFAULT 11 _atspi_name_compat + 493: 000000000001fdf0 156 FUNC GLOBAL DEFAULT 11 atspi_text_get_n_selections + 494: 00000000000128b8 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_table_cell + 495: 0000000000050af8 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_collection + 496: 00000000000127c8 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_selection_iface + 497: 0000000000050a90 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_table_cell + 498: 0000000000012e80 4 FUNC GLOBAL DEFAULT 11 atspi_action_get_name + 499: 0000000000010dec 172 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_id + 500: 0000000000050b44 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 501: 0000000000011f7c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_application + 502: 000000000001cd38 164 FUNC GLOBAL DEFAULT 11 atspi_selection_deselect_child + 503: 000000000001fe8c 192 FUNC GLOBAL DEFAULT 11 atspi_text_get_selection + 504: 000000000001b268 188 FUNC GLOBAL DEFAULT 11 atspi_role_get_name + 505: 0000000000012c90 164 FUNC GLOBAL DEFAULT 11 atspi_action_get_action_description + 506: 0000000000011b74 392 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_state_set + 507: 0000000000012460 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_component_iface + 508: 0000000000014bf8 116 FUNC GLOBAL DEFAULT 11 atspi_document_get_document_attributes + 509: 00000000000220bc 32 FUNC GLOBAL DEFAULT 11 dbind_any_free_ptr + 510: 0000000000050b10 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_accessible + 511: 0000000000015848 140 FUNC GLOBAL DEFAULT 11 atspi_event_listener_get_type + 512: 000000000001a534 180 FUNC GLOBAL DEFAULT 11 _atspi_dbus_return_accessible_from_message + 513: 0000000000020ad8 204 FUNC GLOBAL DEFAULT 11 dbind_emit_signal_va + 514: 0000000000012e84 164 FUNC GLOBAL DEFAULT 11 atspi_action_get_localized_name + 515: 000000000001e884 160 FUNC GLOBAL DEFAULT 11 atspi_table_cell_get_row_span + 516: 000000000001a5e8 208 FUNC GLOBAL DEFAULT 11 _atspi_dbus_return_hyperlink_from_iter + 517: 000000000001e098 164 FUNC GLOBAL DEFAULT 11 atspi_table_is_row_selected + 518: 0000000000016094 28 FUNC GLOBAL DEFAULT 11 atspi_event_listener_deregister + 519: 0000000000012728 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_image_iface + 520: 0000000000014bf4 4 FUNC GLOBAL DEFAULT 11 atspi_document_get_attribute_value + 521: 000000000001b5d4 72 FUNC GLOBAL DEFAULT 11 _atspi_set_error_no_sync + 522: 000000000001c438 260 FUNC GLOBAL DEFAULT 11 atspi_deregister_device_event_listener + 523: 00000000000190a4 264 FUNC GLOBAL DEFAULT 11 _atspi_dbus_hash_from_iter + 524: 000000000001b7ec 764 FUNC GLOBAL DEFAULT 11 _atspi_dbus_get_property + 525: 0000000000011ffc 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_selection + 526: 000000000001e3cc 164 FUNC GLOBAL DEFAULT 11 atspi_table_remove_column_selection + 527: 000000000001203c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_value + 528: 000000000001de18 160 FUNC GLOBAL DEFAULT 11 atspi_table_get_n_selected_rows + 529: 0000000000014da8 72 FUNC GLOBAL DEFAULT 11 atspi_document_get_type + 530: 0000000000050a80 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_cache + 531: 00000000000126d8 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_image + 532: 0000000000011fcc 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_hypertext + 533: 0000000000015a10 88 FUNC GLOBAL DEFAULT 11 atspi_event_listener_new + 534: 0000000000013cc0 160 FUNC GLOBAL DEFAULT 11 atspi_component_get_size + 535: 000000000001781c 120 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_object + 536: 0000000000010c24 152 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_toolkit_name + 537: 0000000000050aa0 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_selection + 538: 0000000000050de8 4 OBJECT GLOBAL DEFAULT 24 atspi_no_cache + 539: 0000000000014c6c 4 FUNC GLOBAL DEFAULT 11 atspi_document_get_attributes + 540: 00000000000141bc 164 FUNC GLOBAL DEFAULT 11 atspi_component_set_size + 541: 000000000001d658 156 FUNC GLOBAL DEFAULT 11 atspi_table_get_summary + 542: 000000000001c958 232 FUNC GLOBAL DEFAULT 11 _atspi_relation_new_from_iter + 543: 000000000000fd84 72 FUNC GLOBAL DEFAULT 11 atspi_collection_sort_order_get_type + 544: 0000000000050ac0 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_hyperlink + 545: 00000000000123c0 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_collection_iface + 546: 00000000000195f4 288 FUNC GLOBAL DEFAULT 11 _atspi_dbus_return_hash_from_message + 547: 000000000001ee58 112 FUNC GLOBAL DEFAULT 11 atspi_text_range_get_type + 548: 0000000000012638 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_hypertext + 549: 000000000001200c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_table + 550: 000000000001ffbc 164 FUNC GLOBAL DEFAULT 11 atspi_text_remove_selection + 551: 00000000000194fc 12 FUNC GLOBAL DEFAULT 11 _atspi_error_quark + 552: 000000000001df58 160 FUNC GLOBAL DEFAULT 11 atspi_table_get_selected_columns + 553: 000000000001deb8 160 FUNC GLOBAL DEFAULT 11 atspi_table_get_selected_rows + 554: 000000000001bb50 140 FUNC GLOBAL DEFAULT 11 atspi_object_get_type + 555: 0000000000020a38 160 FUNC GLOBAL DEFAULT 11 dbind_method_call_reentrant + 556: 0000000000011f8c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_collection + 557: 0000000000050aa8 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_registry + 558: 000000000001201c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_table_cell + 559: 0000000000050a70 8 OBJECT GLOBAL DEFAULT 23 cache_signal_type + 560: 0000000000015ac4 600 FUNC GLOBAL DEFAULT 11 atspi_event_listener_register_from_callback_full + 561: 0000000000050a88 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_text + 562: 0000000000012ddc 164 FUNC GLOBAL DEFAULT 11 atspi_action_get_action_name + 563: 0000000000020fac 984 FUNC GLOBAL DEFAULT 11 dbind_any_marshal + 564: 000000000001c53c 260 FUNC GLOBAL DEFAULT 11 atspi_generate_keyboard_event + 565: 00000000000179d4 128 FUNC GLOBAL DEFAULT 11 atspi_hyperlink_get_end_index + 566: 0000000000017f94 164 FUNC GLOBAL DEFAULT 11 atspi_image_get_image_locale + 567: 000000000001c0dc 588 FUNC GLOBAL DEFAULT 11 atspi_deregister_keystroke_listener + 568: 000000000001f8e8 260 FUNC GLOBAL DEFAULT 11 atspi_text_get_text_after_offset + 569: 000000000001c838 8 FUNC GLOBAL DEFAULT 11 atspi_relation_get_relation_type + 570: 000000000001f01c 160 FUNC GLOBAL DEFAULT 11 atspi_text_get_caret_offset + 571: 00000000000118e0 212 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_role + 572: 00000000000115f8 56 FUNC GLOBAL DEFAULT 11 _atspi_accessible_add_cache + 573: 000000000002011c 72 FUNC GLOBAL DEFAULT 11 atspi_text_get_type + 574: 000000000001f538 164 FUNC GLOBAL DEFAULT 11 atspi_text_set_caret_offset + 575: 0000000000011fdc 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_hyperlink + 576: 0000000000011f9c 16 FUNC GLOBAL DEFAULT 11 atspi_accessible_is_component + 577: 0000000000011a94 224 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_application + 578: 000000000001da98 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_row_description + 579: 000000000001d6f4 160 FUNC GLOBAL DEFAULT 11 atspi_table_get_n_rows + 580: 0000000000050e00 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 581: 000000000001d408 68 FUNC GLOBAL DEFAULT 11 atspi_state_set_contains + 582: 0000000000013800 44 FUNC GLOBAL DEFAULT 11 atspi_collection_get_active_descendant + 583: 0000000000017450 324 FUNC GLOBAL DEFAULT 11 atspi_dbus_server_setup_with_g_main + 584: 0000000000012778 80 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_selection + 585: 0000000000019834 1000 FUNC GLOBAL DEFAULT 11 atspi_get_a11y_bus + 586: 0000000000010174 72 FUNC GLOBAL DEFAULT 11 atspi_cache_get_type + 587: 000000000001cb78 120 FUNC GLOBAL DEFAULT 11 atspi_selection_get_selected_child + 588: 0000000000013084 140 FUNC GLOBAL DEFAULT 11 atspi_application_get_type + 589: 0000000000050af0 8 OBJECT GLOBAL DEFAULT 23 atspi_interface_component + 590: 000000000001f9ec 164 FUNC GLOBAL DEFAULT 11 atspi_text_get_character_at_offset + 591: 000000000001d794 160 FUNC GLOBAL DEFAULT 11 atspi_table_get_n_columns + 592: 00000000000142bc 44 FUNC GLOBAL DEFAULT 11 atspi_device_event_free + 593: 0000000000018f78 16 FUNC GLOBAL DEFAULT 11 atspi_event_quit + 594: 00000000000125f0 72 FUNC GLOBAL DEFAULT 11 atspi_accessible_get_hyperlink + 595: 000000000001c840 12 FUNC GLOBAL DEFAULT 11 atspi_relation_get_n_targets + 596: 0000000000015d40 12 FUNC GLOBAL DEFAULT 11 atspi_event_listener_register_from_callback + 597: 000000000001d950 164 FUNC GLOBAL DEFAULT 11 atspi_table_get_row_at_index + 598: 0000000000017b94 120 FUNC GLOBAL DEFAULT 11 atspi_hypertext_get_link + 599: 000000000001bef4 40 FUNC GLOBAL DEFAULT 11 atspi_get_desktop + 600: 0000000000014df4 160 FUNC GLOBAL DEFAULT 11 atspi_editable_text_set_text_contents + 601: 0000000000014a28 112 FUNC GLOBAL DEFAULT 11 atspi_device_event_get_type + 602: 0000000000013960 112 FUNC GLOBAL DEFAULT 11 atspi_point_get_type + 603: 0000000000015da8 40 FUNC GLOBAL DEFAULT 11 atspi_event_listener_register_no_data + 604: 0000000000019e00 80 FUNC GLOBAL DEFAULT 11 _atspi_bus + 605: 000000000001000c 72 FUNC GLOBAL DEFAULT 11 atspi_event_type_get_type + 606: 0000000000017c0c 164 FUNC GLOBAL DEFAULT 11 atspi_hypertext_get_link_index + 607: 0000000000021384 788 FUNC GLOBAL DEFAULT 11 dbind_any_marshal_va + 608: 00000000000160b0 32 FUNC GLOBAL DEFAULT 11 atspi_event_listener_deregister_no_data + 609: 0000000000018f88 284 FUNC GLOBAL DEFAULT 11 atspi_exit diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libc.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libc.so.6.txt new file mode 100644 index 000000000000..19a6cc89b3b8 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libc.so.6.txt @@ -0,0 +1,2188 @@ +Library: /lib64/libc.so.6 +Package: glibc-2.17-326.el7_9.aarch64 + + +Symbol table '.dynsym' contains 2182 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000001ee10 0 SECTION LOCAL DEFAULT 12 + 2: 000000000017cbb0 0 SECTION LOCAL DEFAULT 22 + 3: 0000000000000000 0 OBJECT WEAK DEFAULT UND _dl_starting_up@GLIBC_PRIVATE (5) + 4: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global@GLIBC_PRIVATE (5) + 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __libc_enable_secure@GLIBC_PRIVATE (5) + 6: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (5) + 7: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __pointer_chk_guard@GLIBC_PRIVATE (5) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __tls_get_addr@GLIBC_2.17 (6) + 9: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _dl_argv@GLIBC_PRIVATE (5) + 10: 000000000006e7a0 408 FUNC GLOBAL DEFAULT 12 putwchar@@GLIBC_2.17 + 11: 000000000008debc 40 FUNC GLOBAL DEFAULT 12 __strspn_c1@@GLIBC_2.17 + 12: 00000000000f8884 28 FUNC GLOBAL DEFAULT 12 __gethostname_chk@@GLIBC_2.17 + 13: 000000000008dee4 40 FUNC GLOBAL DEFAULT 12 __strspn_c2@@GLIBC_2.17 + 14: 00000000000fdd2c 228 FUNC GLOBAL DEFAULT 12 setrpcent@@GLIBC_2.17 + 15: 00000000000928a0 12 FUNC GLOBAL DEFAULT 12 __wcstod_l@@GLIBC_2.17 + 16: 000000000008df0c 48 FUNC GLOBAL DEFAULT 12 __strspn_c3@@GLIBC_2.17 + 17: 00000000000df558 88 FUNC GLOBAL DEFAULT 12 epoll_create@@GLIBC_2.17 + 18: 00000000000c6940 24 FUNC WEAK DEFAULT 12 sched_get_priority_min@@GLIBC_2.17 + 19: 00000000000f88a0 28 FUNC GLOBAL DEFAULT 12 __getdomainname_chk@@GLIBC_2.17 + 20: 00000000000dfb20 24 FUNC GLOBAL DEFAULT 12 klogctl@@GLIBC_2.17 + 21: 000000000002eb2c 12 FUNC GLOBAL DEFAULT 12 __tolower_l@@GLIBC_2.17 + 22: 0000000000052308 132 FUNC GLOBAL DEFAULT 12 dprintf@@GLIBC_2.17 + 23: 00000000000aba58 128 FUNC WEAK DEFAULT 12 setuid@@GLIBC_2.17 + 24: 00000000000980c0 2100 FUNC GLOBAL DEFAULT 12 __wcscoll_l@@GLIBC_2.17 + 25: 00000000000e1f90 180 FUNC WEAK DEFAULT 12 iswalpha@@GLIBC_2.17 + 26: 00000000000d5a50 24 FUNC GLOBAL DEFAULT 12 __getrlimit@@GLIBC_PRIVATE + 27: 0000000000101388 132 FUNC GLOBAL DEFAULT 12 __internal_endnetgrent@@GLIBC_PRIVATE + 28: 00000000000d69c0 24 FUNC GLOBAL DEFAULT 12 chroot@@GLIBC_2.17 + 29: 000000000009b540 112 FUNC GLOBAL DEFAULT 12 __gettimeofday@@GLIBC_2.17 + 30: 0000000000075e20 68 FUNC GLOBAL DEFAULT 12 _IO_file_setbuf@@GLIBC_2.17 + 31: 00000000001828d0 4 OBJECT WEAK DEFAULT 34 daylight@@GLIBC_2.17 + 32: 000000000009ebc0 80 FUNC GLOBAL DEFAULT 12 getdate@@GLIBC_2.17 + 33: 00000000000f7c50 248 FUNC GLOBAL DEFAULT 12 __vswprintf_chk@@GLIBC_2.17 + 34: 00000000000ec67c 68 FUNC GLOBAL DEFAULT 12 pthread_cond_signal@@GLIBC_2.17 + 35: 00000000000778e0 1044 FUNC GLOBAL DEFAULT 12 _IO_file_fopen@@GLIBC_2.17 + 36: 000000000003a52c 12 FUNC WEAK DEFAULT 12 strtoull_l@@GLIBC_2.17 + 37: 0000000000114dc4 152 FUNC GLOBAL DEFAULT 12 xdr_short@@GLIBC_2.17 + 38: 00000000000dd98c 148 FUNC GLOBAL DEFAULT 12 lfind@@GLIBC_2.17 + 39: 000000000006c024 332 FUNC GLOBAL DEFAULT 12 _IO_padn@@GLIBC_2.17 + 40: 0000000000089878 1204 FUNC WEAK DEFAULT 12 strcasestr@@GLIBC_2.17 + 41: 00000000000aa9dc 668 FUNC GLOBAL DEFAULT 12 __libc_fork@@GLIBC_PRIVATE + 42: 0000000000115964 220 FUNC GLOBAL DEFAULT 12 xdr_int64_t@@GLIBC_2.17 + 43: 00000000000928a0 12 FUNC WEAK DEFAULT 12 wcstod_l@@GLIBC_2.17 + 44: 00000000000e0430 24 FUNC WEAK DEFAULT 12 socket@@GLIBC_2.17 + 45: 0000000000110f6c 340 FUNC GLOBAL DEFAULT 12 key_encryptsession_pk@@GLIBC_2.17 + 46: 000000000008ad2c 188 FUNC WEAK DEFAULT 12 argz_create@@GLIBC_2.17 + 47: 000000000006eb0c 60 FUNC GLOBAL DEFAULT 12 putchar_unlocked@@GLIBC_2.17 + 48: 0000000000107cdc 248 FUNC GLOBAL DEFAULT 12 xdr_pmaplist@@GLIBC_2.17 + 49: 00000000000f5ee8 60 FUNC GLOBAL DEFAULT 12 __stpcpy_chk@@GLIBC_2.17 + 50: 0000000000043d58 240 FUNC GLOBAL DEFAULT 12 __xpg_basename@@GLIBC_2.17 + 51: 00000000000f0280 196 FUNC GLOBAL DEFAULT 12 __res_init@@GLIBC_2.17 + 52: 00000000000f913c 28 FUNC GLOBAL DEFAULT 12 __ppoll_chk@@GLIBC_2.17 + 53: 00000000000e6154 632 FUNC WEAK DEFAULT 12 fgetsgent_r@@GLIBC_2.17 + 54: 0000000000073794 360 FUNC WEAK DEFAULT 12 getc@@GLIBC_2.17 + 55: 000000000008ed6c 216 FUNC WEAK DEFAULT 12 wcpncpy@@GLIBC_2.17 + 56: 000000000006fad0 552 FUNC GLOBAL DEFAULT 12 _IO_wdefault_xsputn@@GLIBC_2.17 + 57: 00000000000d6f00 52 FUNC GLOBAL DEFAULT 12 mkdtemp@@GLIBC_2.17 + 58: 0000000000039a94 64 FUNC WEAK DEFAULT 12 srand48_r@@GLIBC_2.17 + 59: 00000000000364d0 92 FUNC GLOBAL DEFAULT 12 sighold@@GLIBC_2.17 + 60: 00000000000c68a0 24 FUNC GLOBAL DEFAULT 12 __sched_getparam@@GLIBC_2.17 + 61: 0000000000083b70 28 FUNC GLOBAL DEFAULT 12 __default_morecore@@GLIBC_2.17 + 62: 00000000001002c8 100 FUNC GLOBAL DEFAULT 12 iruserok@@GLIBC_2.17 + 63: 00000000000474a4 148 FUNC GLOBAL DEFAULT 12 cuserid@@GLIBC_2.17 + 64: 00000000000343ec 24 FUNC WEAK DEFAULT 12 isnan@@GLIBC_2.17 + 65: 00000000000393b8 232 FUNC WEAK DEFAULT 12 setstate_r@@GLIBC_2.17 + 66: 000000000008ece8 100 FUNC GLOBAL DEFAULT 12 wmemset@@GLIBC_2.17 + 67: 00000000000766a4 20 FUNC GLOBAL DEFAULT 12 _IO_file_stat@@GLIBC_2.17 + 68: 000000000008b270 856 FUNC WEAK DEFAULT 12 argz_replace@@GLIBC_2.17 + 69: 00000000000ad834 92 FUNC WEAK DEFAULT 12 globfree64@@GLIBC_2.17 + 70: 00000000000ec0f8 20 FUNC WEAK DEFAULT 12 argp_usage@@GLIBC_2.17 + 71: 00000000000dfdf0 24 FUNC GLOBAL DEFAULT 12 timerfd_gettime@@GLIBC_2.17 + 72: 00000000000860e0 64 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_copy_string@@GLIBC_PRIVATE + 73: 000000000013e1e0 4 OBJECT GLOBAL DEFAULT 15 _sys_nerr@@GLIBC_2.17 + 74: 00000000000dfa20 24 FUNC GLOBAL DEFAULT 12 clock_adjtime@@GLIBC_2.17 + 75: 0000000000184f44 4 OBJECT GLOBAL DEFAULT 34 getdate_err@@GLIBC_2.17 + 76: 000000000008aee4 88 FUNC WEAK DEFAULT 12 argz_next@@GLIBC_2.17 + 77: 00000000000e41b0 744 FUNC GLOBAL DEFAULT 12 getspnam_r@@GLIBC_2.17 + 78: 00000000000aa9dc 668 FUNC GLOBAL DEFAULT 12 __fork@@GLIBC_2.17 + 79: 00000000000c6900 24 FUNC GLOBAL DEFAULT 12 __sched_yield@@GLIBC_2.17 + 80: 000000000009abdc 12 FUNC GLOBAL DEFAULT 12 __gmtime_r@@GLIBC_2.17 + 81: 000000000004294c 200 FUNC GLOBAL DEFAULT 12 l64a@@GLIBC_2.17 + 82: 0000000000077cf4 220 FUNC GLOBAL DEFAULT 12 _IO_file_attach@@GLIBC_2.17 + 83: 00000000000a5140 36 FUNC WEAK DEFAULT 12 wcsftime_l@@GLIBC_2.17 + 84: 000000000006be34 496 FUNC WEAK DEFAULT 12 gets@@GLIBC_2.17 + 85: 000000000006a6dc 396 FUNC WEAK DEFAULT 12 fflush@@GLIBC_2.17 + 86: 0000000000108cfc 108 FUNC GLOBAL DEFAULT 12 _authenticate@@GLIBC_2.17 + 87: 00000000000fda14 396 FUNC GLOBAL DEFAULT 12 getrpcbyname@@GLIBC_2.17 + 88: 000000000007582c 52 FUNC GLOBAL DEFAULT 12 putc_unlocked@@GLIBC_2.17 + 89: 00000000000db880 12 FUNC GLOBAL DEFAULT 12 hcreate@@GLIBC_2.17 + 90: 0000000000086324 24 FUNC GLOBAL DEFAULT 12 strcpy@@GLIBC_2.17 + 91: 000000000004285c 240 FUNC GLOBAL DEFAULT 12 a64l@@GLIBC_2.17 + 92: 0000000000114940 84 FUNC GLOBAL DEFAULT 12 xdr_long@@GLIBC_2.17 + 93: 00000000000354dc 172 FUNC WEAK DEFAULT 12 sigsuspend@@GLIBC_2.17 + 94: 00000000000214f0 4 FUNC GLOBAL DEFAULT 12 __libc_init_first@@GLIBC_2.17 + 95: 00000000000e0c40 24 FUNC WEAK DEFAULT 12 shmget@@GLIBC_2.17 + 96: 0000000000071ed0 324 FUNC GLOBAL DEFAULT 12 _IO_wdo_write@@GLIBC_2.17 + 97: 0000000000067db0 56 FUNC GLOBAL DEFAULT 12 getw@@GLIBC_2.17 + 98: 00000000000d6b20 540 FUNC GLOBAL DEFAULT 12 gethostid@@GLIBC_2.17 + 99: 0000000000038dec 20 FUNC GLOBAL DEFAULT 12 __cxa_at_quick_exit@@GLIBC_2.17 + 100: 000000000008a9a4 280 FUNC GLOBAL DEFAULT 12 __rawmemchr@@GLIBC_2.17 + 101: 0000000000067ef4 136 FUNC WEAK DEFAULT 12 flockfile@@GLIBC_2.17 + 102: 0000000000099268 156 FUNC WEAK DEFAULT 12 wcsncasecmp_l@@GLIBC_2.17 + 103: 000000000008ac94 60 FUNC WEAK DEFAULT 12 argz_add@@GLIBC_2.17 + 104: 00000000000dfae0 24 FUNC GLOBAL DEFAULT 12 inotify_init1@@GLIBC_2.17 + 105: 00000000000f54b4 736 FUNC GLOBAL DEFAULT 12 __backtrace_symbols@@GLIBC_2.17 + 106: 0000000000078568 700 FUNC GLOBAL DEFAULT 12 _IO_un_link@@GLIBC_2.17 + 107: 0000000000073f08 360 FUNC WEAK DEFAULT 12 vasprintf@@GLIBC_2.17 + 108: 000000000008fce4 20 FUNC GLOBAL DEFAULT 12 __wcstod_internal@@GLIBC_2.17 + 109: 000000000010e210 616 FUNC GLOBAL DEFAULT 12 authunix_create@@GLIBC_2.17 + 110: 00000000000e13c8 404 FUNC GLOBAL DEFAULT 12 _mcount@@GLIBC_2.18 + 111: 00000000000f8990 48 FUNC GLOBAL DEFAULT 12 __wcstombs_chk@@GLIBC_2.17 + 112: 000000000008ec08 208 FUNC GLOBAL DEFAULT 12 wmemcmp@@GLIBC_2.17 + 113: 0000000000106950 364 FUNC GLOBAL DEFAULT 12 __netlink_assert_response@@GLIBC_PRIVATE + 114: 000000000009abdc 12 FUNC WEAK DEFAULT 12 gmtime_r@@GLIBC_2.17 + 115: 00000000000d0620 24 FUNC WEAK DEFAULT 12 fchmod@@GLIBC_2.17 + 116: 00000000000f65f8 572 FUNC GLOBAL DEFAULT 12 __printf_chk@@GLIBC_2.17 + 117: 00000000000744b4 260 FUNC WEAK DEFAULT 12 obstack_vprintf@@GLIBC_2.17 + 118: 00000000000355bc 280 FUNC WEAK DEFAULT 12 sigwait@@GLIBC_2.17 + 119: 00000000000a76ec 220 FUNC GLOBAL DEFAULT 12 setgrent@@GLIBC_2.17 + 120: 00000000000f8540 488 FUNC GLOBAL DEFAULT 12 __fgetws_chk@@GLIBC_2.17 + 121: 00000000000ecbd4 416 FUNC GLOBAL DEFAULT 12 __register_atfork@@GLIBC_2.17 + 122: 00000000000e3350 112 FUNC WEAK DEFAULT 12 iswctype_l@@GLIBC_2.17 + 123: 00000000000e2970 156 FUNC WEAK DEFAULT 12 wctrans@@GLIBC_2.17 + 124: 00000000000d69a0 24 FUNC GLOBAL DEFAULT 12 acct@@GLIBC_2.17 + 125: 00000000000388fc 24 FUNC GLOBAL DEFAULT 12 exit@@GLIBC_2.17 + 126: 0000000000047930 21916 FUNC GLOBAL DEFAULT 12 _IO_vfprintf@@GLIBC_2.17 + 127: 00000000000ab080 568 FUNC GLOBAL DEFAULT 12 execl@@GLIBC_2.17 + 128: 00000000000c3e1c 24 FUNC WEAK DEFAULT 12 re_set_syntax@@GLIBC_2.17 + 129: 00000000000f9448 8 FUNC GLOBAL DEFAULT 12 htonl@@GLIBC_2.17 + 130: 00000000000ce4e8 4300 FUNC GLOBAL DEFAULT 12 wordexp@@GLIBC_2.17 + 131: 00000000000fc4f4 220 FUNC GLOBAL DEFAULT 12 endprotoent@@GLIBC_2.17 + 132: 00000000000fc044 744 FUNC GLOBAL DEFAULT 12 getprotobynumber_r@@GLIBC_2.17 + 133: 00000000000343c8 36 FUNC WEAK DEFAULT 12 isinf@@GLIBC_2.17 + 134: 000000000002e840 16 FUNC GLOBAL DEFAULT 12 __assert@@GLIBC_2.17 + 135: 0000000000075710 16 FUNC GLOBAL DEFAULT 12 clearerr_unlocked@@GLIBC_2.17 + 136: 000000000010b280 32 FUNC GLOBAL DEFAULT 12 xdr_keybuf@@GLIBC_2.17 + 137: 00000000000b22b0 776 FUNC GLOBAL DEFAULT 12 fnmatch@@GLIBC_2.17 + 138: 00000000000df788 20 FUNC GLOBAL DEFAULT 12 gnu_dev_major@@GLIBC_2.17 + 139: 000000000002eabc 16 FUNC GLOBAL DEFAULT 12 __islower_l@@GLIBC_2.17 + 140: 00000000000a5d9c 348 FUNC WEAK DEFAULT 12 readdir@@GLIBC_2.17 + 141: 0000000000115d24 80 FUNC GLOBAL DEFAULT 12 xdr_uint32_t@@GLIBC_2.17 + 142: 00000000000f9450 16 FUNC GLOBAL DEFAULT 12 htons@@GLIBC_2.17 + 143: 00000000000ac4c4 528 FUNC WEAK DEFAULT 12 pathconf@@GLIBC_2.17 + 144: 000000000003652c 92 FUNC GLOBAL DEFAULT 12 sigrelse@@GLIBC_2.17 + 145: 0000000000039ad4 80 FUNC WEAK DEFAULT 12 seed48_r@@GLIBC_2.17 + 146: 00000000000688f8 1232 FUNC GLOBAL DEFAULT 12 psiginfo@@GLIBC_2.17 + 147: 00000000000f3e90 1188 FUNC GLOBAL DEFAULT 12 __nss_hostname_digits_dots@@GLIBC_2.17 + 148: 00000000000aae38 16 FUNC GLOBAL DEFAULT 12 execv@@GLIBC_2.17 + 149: 0000000000052200 132 FUNC GLOBAL DEFAULT 12 sprintf@@GLIBC_2.17 + 150: 0000000000073c20 384 FUNC GLOBAL DEFAULT 12 _IO_putc@@GLIBC_2.17 + 151: 00000000000dfb80 24 FUNC GLOBAL DEFAULT 12 nfsservctl@@GLIBC_2.17 + 152: 000000000008b9c4 380 FUNC GLOBAL DEFAULT 12 envz_merge@@GLIBC_2.17 + 153: 00000000000a35d8 36 FUNC WEAK DEFAULT 12 strftime_l@@GLIBC_2.17 + 154: 000000000002c078 2224 FUNC GLOBAL DEFAULT 12 setlocale@@GLIBC_2.17 + 155: 0000000000089e44 884 FUNC GLOBAL DEFAULT 12 memfrob@@GLIBC_2.17 + 156: 000000000008f188 448 FUNC WEAK DEFAULT 12 mbrtowc@@GLIBC_2.17 + 157: 00000000000390dc 168 FUNC WEAK DEFAULT 12 srand@@GLIBC_2.17 + 158: 00000000000e2c3c 156 FUNC WEAK DEFAULT 12 iswcntrl_l@@GLIBC_2.17 + 159: 000000000011b444 244 FUNC WEAK DEFAULT 12 getutid_r@@GLIBC_2.17 + 160: 00000000000ab4e8 1188 FUNC WEAK DEFAULT 12 execvpe@@GLIBC_2.17 + 161: 00000000000e2044 176 FUNC WEAK DEFAULT 12 iswblank@@GLIBC_2.17 + 162: 0000000000085364 4 FUNC GLOBAL DEFAULT 12 tr_break@@GLIBC_2.17 + 163: 00000000000ecfa8 224 FUNC GLOBAL DEFAULT 12 __libc_pthread_init@@GLIBC_PRIVATE + 164: 00000000000f8380 448 FUNC GLOBAL DEFAULT 12 __vfwprintf_chk@@GLIBC_2.17 + 165: 000000000006de40 188 FUNC GLOBAL DEFAULT 12 fgetws_unlocked@@GLIBC_2.17 + 166: 00000000000d0d80 64 FUNC WEAK DEFAULT 12 __write@@GLIBC_2.17 + 167: 00000000000d6798 284 FUNC GLOBAL DEFAULT 12 __select@@GLIBC_2.17 + 168: 00000000000e273c 136 FUNC GLOBAL DEFAULT 12 towlower@@GLIBC_2.17 + 169: 00000000000d2120 648 FUNC WEAK DEFAULT 12 ttyname_r@@GLIBC_2.17 + 170: 000000000006ad30 8 FUNC GLOBAL DEFAULT 12 fopen@@GLIBC_2.17 + 171: 00000000000ca690 328 FUNC GLOBAL DEFAULT 12 gai_strerror@@GLIBC_2.17 + 172: 00000000000e38bc 532 FUNC GLOBAL DEFAULT 12 fgetspent@@GLIBC_2.17 + 173: 0000000000086e5c 520 FUNC GLOBAL DEFAULT 12 strsignal@@GLIBC_2.17 + 174: 000000000008e7b8 256 FUNC WEAK DEFAULT 12 wcsncpy@@GLIBC_2.17 + 175: 0000000000086a44 212 FUNC GLOBAL DEFAULT 12 strncmp@@GLIBC_2.17 + 176: 00000000000fbae4 980 FUNC GLOBAL DEFAULT 12 getnetbyname_r@@GLIBC_2.17 + 177: 000000000011323c 272 FUNC GLOBAL DEFAULT 12 svcfd_create@@GLIBC_2.17 + 178: 00000000000fc5d0 300 FUNC GLOBAL DEFAULT 12 getprotoent_r@@GLIBC_2.17 + 179: 00000000000d8650 24 FUNC WEAK DEFAULT 12 ftruncate@@GLIBC_2.17 + 180: 000000000010b3c0 112 FUNC GLOBAL DEFAULT 12 xdr_unixcred@@GLIBC_2.17 + 181: 000000000003080c 20 FUNC WEAK DEFAULT 12 dcngettext@@GLIBC_2.17 + 182: 0000000000107dd4 120 FUNC GLOBAL DEFAULT 12 xdr_rmtcallres@@GLIBC_2.17 + 183: 000000000006c7f8 564 FUNC GLOBAL DEFAULT 12 _IO_puts@@GLIBC_2.17 + 184: 00000000000ee480 280 FUNC GLOBAL DEFAULT 12 inet_nsap_addr@@GLIBC_2.17 + 185: 00000000000ed354 316 FUNC WEAK DEFAULT 12 inet_aton@@GLIBC_2.17 + 186: 00000000000d9118 248 FUNC GLOBAL DEFAULT 12 ttyslot@@GLIBC_2.17 + 187: 0000000000185238 8 OBJECT GLOBAL DEFAULT 34 __rcmd_errstr@@GLIBC_2.17 + 188: 00000000000ce48c 92 FUNC GLOBAL DEFAULT 12 wordfree@@GLIBC_2.17 + 189: 00000000000cf71c 148 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_addclose@@GLIBC_2.17 + 190: 00000000000a656c 96 FUNC GLOBAL DEFAULT 12 getdirentries@@GLIBC_2.17 + 191: 000000000007a740 88 FUNC GLOBAL DEFAULT 12 _IO_unsave_markers@@GLIBC_2.17 + 192: 00000000000792b4 108 FUNC GLOBAL DEFAULT 12 _IO_default_uflow@@GLIBC_2.17 + 193: 000000000003a590 20 FUNC GLOBAL DEFAULT 12 __strtold_internal@@GLIBC_2.17 + 194: 00000000000f79d4 64 FUNC GLOBAL DEFAULT 12 __wcpcpy_chk@@GLIBC_2.17 + 195: 0000000000180164 4 OBJECT GLOBAL DEFAULT 33 optind@@GLIBC_2.17 + 196: 000000000008dbf8 212 FUNC GLOBAL DEFAULT 12 __strcpy_small@@GLIBC_2.17 + 197: 000000000003984c 36 FUNC GLOBAL DEFAULT 12 erand48@@GLIBC_2.17 + 198: 00000000000a88f4 476 FUNC GLOBAL DEFAULT 12 __merge_grp@@GLIBC_PRIVATE + 199: 0000000000090538 12 FUNC WEAK DEFAULT 12 wcstoul_l@@GLIBC_2.17 + 200: 0000000000184fb0 8 OBJECT GLOBAL DEFAULT 34 argp_program_version@@GLIBC_2.17 + 201: 0000000000081500 432 FUNC GLOBAL DEFAULT 12 __libc_memalign@@GLIBC_2.17 + 202: 00000000000e0468 96 FUNC GLOBAL DEFAULT 12 isfdtype@@GLIBC_2.17 + 203: 00000000000d74bc 388 FUNC GLOBAL DEFAULT 12 getfsfile@@GLIBC_2.17 + 204: 000000000008dde0 52 FUNC GLOBAL DEFAULT 12 __strcspn_c1@@GLIBC_2.17 + 205: 000000000008de14 76 FUNC GLOBAL DEFAULT 12 __strcspn_c2@@GLIBC_2.17 + 206: 0000000000039938 12 FUNC GLOBAL DEFAULT 12 lcong48@@GLIBC_2.17 + 207: 00000000000a8f18 228 FUNC GLOBAL DEFAULT 12 getpwent@@GLIBC_2.17 + 208: 000000000008de60 92 FUNC GLOBAL DEFAULT 12 __strcspn_c3@@GLIBC_2.17 + 209: 00000000000c51b8 256 FUNC WEAK DEFAULT 12 re_match_2@@GLIBC_2.17 + 210: 00000000000f32b8 896 FUNC GLOBAL DEFAULT 12 __nss_next2@@GLIBC_PRIVATE + 211: 00000000001825f0 8 OBJECT WEAK DEFAULT 34 __free_hook@@GLIBC_2.17 + 212: 00000000000a745c 656 FUNC GLOBAL DEFAULT 12 putgrent@@GLIBC_2.17 + 213: 000000000008b114 92 FUNC WEAK DEFAULT 12 argz_stringify@@GLIBC_2.17 + 214: 00000000000fd804 300 FUNC GLOBAL DEFAULT 12 getservent_r@@GLIBC_2.17 + 215: 0000000000072e00 200 FUNC GLOBAL DEFAULT 12 open_wmemstream@@GLIBC_2.17 + 216: 0000000000105464 288 FUNC GLOBAL DEFAULT 12 inet6_opt_append@@GLIBC_2.17 + 217: 00000000000f4f20 92 FUNC WEAK DEFAULT 12 clock_getcpuclockid@@GLIBC_2.17 + 218: 00000000000fd644 228 FUNC GLOBAL DEFAULT 12 setservent@@GLIBC_2.17 + 219: 00000000000dfdb0 24 FUNC GLOBAL DEFAULT 12 timerfd_create@@GLIBC_2.17 + 220: 0000000000086d10 88 FUNC GLOBAL DEFAULT 12 strrchr@@GLIBC_2.17 + 221: 000000000011c7f0 304 FUNC WEAK DEFAULT 12 posix_openpt@@GLIBC_2.17 + 222: 00000000001124f8 76 FUNC GLOBAL DEFAULT 12 svcerr_systemerr@@GLIBC_2.17 + 223: 00000000000757c0 108 FUNC GLOBAL DEFAULT 12 fflush_unlocked@@GLIBC_2.17 + 224: 000000000002eacc 16 FUNC GLOBAL DEFAULT 12 __isgraph_l@@GLIBC_2.17 + 225: 00000000000f7bd8 120 FUNC GLOBAL DEFAULT 12 __swprintf_chk@@GLIBC_2.17 + 226: 000000000006ec4c 60 FUNC GLOBAL DEFAULT 12 vwprintf@@GLIBC_2.17 + 227: 00000000000aa24c 188 FUNC WEAK DEFAULT 12 wait@@GLIBC_2.17 + 228: 000000000006d014 452 FUNC WEAK DEFAULT 12 setbuffer@@GLIBC_2.17 + 229: 00000000000835dc 124 FUNC WEAK DEFAULT 12 posix_memalign@@GLIBC_2.17 + 230: 00000000000d005c 32 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setschedpolicy@@GLIBC_2.17 + 231: 0000000000104cac 408 FUNC GLOBAL DEFAULT 12 getipv4sourcefilter@@GLIBC_2.17 + 232: 00000000000f8190 496 FUNC GLOBAL DEFAULT 12 __vwprintf_chk@@GLIBC_2.17 + 233: 00000000000f9038 68 FUNC GLOBAL DEFAULT 12 __longjmp_chk@@GLIBC_2.17 + 234: 000000000006789c 116 FUNC GLOBAL DEFAULT 12 tempnam@@GLIBC_2.17 + 235: 000000000002e86c 28 FUNC GLOBAL DEFAULT 12 isalpha@@GLIBC_2.17 + 236: 0000000000085fa8 120 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_alloc_array@@GLIBC_PRIVATE + 237: 000000000003cd10 12 FUNC WEAK DEFAULT 12 strtof_l@@GLIBC_2.17 + 238: 00000000000df6c0 64 FUNC WEAK DEFAULT 12 llseek@@GLIBC_2.17 + 239: 00000000000d6e44 28 FUNC GLOBAL DEFAULT 12 revoke@@GLIBC_2.17 + 240: 00000000000c4700 388 FUNC GLOBAL DEFAULT 12 regexec@@GLIBC_2.17 + 241: 00000000000c4884 1124 FUNC WEAK DEFAULT 12 re_match@@GLIBC_2.17 + 242: 00000000000dc580 1236 FUNC WEAK DEFAULT 12 tdelete@@GLIBC_2.17 + 243: 00000000000d1558 52 FUNC WEAK DEFAULT 12 pipe@@GLIBC_2.17 + 244: 00000000000d2500 56 FUNC GLOBAL DEFAULT 12 readlinkat@@GLIBC_2.17 + 245: 00000000000f78f8 64 FUNC GLOBAL DEFAULT 12 __wctomb_chk@@GLIBC_2.17 + 246: 00000000000defe4 12 FUNC WEAK DEFAULT 12 get_avphys_pages@@GLIBC_2.17 + 247: 000000000010e478 444 FUNC GLOBAL DEFAULT 12 authunix_create_default@@GLIBC_2.17 + 248: 00000000000730c0 244 FUNC GLOBAL DEFAULT 12 _IO_ferror@@GLIBC_2.17 + 249: 00000000000fdba0 396 FUNC GLOBAL DEFAULT 12 getrpcbynumber@@GLIBC_2.17 + 250: 00000000000ac6d4 1712 FUNC GLOBAL DEFAULT 12 __sysconf@@GLIBC_2.17 + 251: 000000000008acd0 92 FUNC WEAK DEFAULT 12 argz_count@@GLIBC_2.17 + 252: 000000000008649c 68 FUNC GLOBAL DEFAULT 12 __strdup@@GLIBC_2.17 + 253: 00000000000f7580 96 FUNC GLOBAL DEFAULT 12 __readlink_chk@@GLIBC_2.17 + 254: 00000000000513d0 424 FUNC WEAK DEFAULT 12 register_printf_modifier@@GLIBC_2.17 + 255: 00000000000ef4a0 80 FUNC GLOBAL DEFAULT 12 __res_ninit@@GLIBC_2.17 + 256: 00000000000d6428 140 FUNC WEAK DEFAULT 12 setregid@@GLIBC_2.17 + 257: 00000000000d5824 180 FUNC WEAK DEFAULT 12 tcdrain@@GLIBC_2.17 + 258: 0000000000104e44 384 FUNC GLOBAL DEFAULT 12 setipv4sourcefilter@@GLIBC_2.17 + 259: 000000000008fd24 24 FUNC GLOBAL DEFAULT 12 wcstold@@GLIBC_2.17 + 260: 00000000000d5928 80 FUNC GLOBAL DEFAULT 12 cfmakeraw@@GLIBC_2.17 + 261: 0000000000067508 236 FUNC GLOBAL DEFAULT 12 perror@@GLIBC_2.17 + 262: 00000000000e0c00 24 FUNC WEAK DEFAULT 12 shmat@@GLIBC_2.17 + 263: 00000000000d5f8c 168 FUNC GLOBAL DEFAULT 12 __sbrk@@GLIBC_2.17 + 264: 000000000006c408 864 FUNC GLOBAL DEFAULT 12 _IO_proc_open@@GLIBC_2.17 + 265: 000000000007abf8 28 FUNC GLOBAL DEFAULT 12 _IO_str_pbackfail@@GLIBC_2.17 + 266: 0000000000180de0 16 OBJECT GLOBAL DEFAULT 33 __tzname@@GLIBC_2.17 + 267: 0000000000042a14 280 FUNC GLOBAL DEFAULT 12 rpmatch@@GLIBC_2.17 + 268: 00000000000f8868 28 FUNC GLOBAL DEFAULT 12 __getlogin_r_chk@@GLIBC_2.17 + 269: 00000000000687d8 132 FUNC GLOBAL DEFAULT 12 __isoc99_sscanf@@GLIBC_2.17 + 270: 00000000000d04e8 112 FUNC WEAK DEFAULT 12 statvfs64@@GLIBC_2.17 + 271: 0000000000180df0 8 OBJECT GLOBAL DEFAULT 33 __progname@@GLIBC_2.17 + 272: 0000000000082e54 540 FUNC WEAK DEFAULT 12 pvalloc@@GLIBC_2.17 + 273: 0000000000111aec 460 FUNC GLOBAL DEFAULT 12 __libc_rpc_getport@@GLIBC_PRIVATE + 274: 000000000002f098 20 FUNC WEAK DEFAULT 12 dcgettext@@GLIBC_2.17 + 275: 0000000000052060 132 FUNC WEAK DEFAULT 12 _IO_fprintf@@GLIBC_2.17 + 276: 0000000000072014 632 FUNC GLOBAL DEFAULT 12 _IO_wfile_overflow@@GLIBC_2.17 + 277: 0000000000109414 432 FUNC GLOBAL DEFAULT 12 registerrpc@@GLIBC_2.17 + 278: 0000000000085c74 268 FUNC GLOBAL DEFAULT 12 __libc_dynarray_emplace_enlarge@@GLIBC_PRIVATE + 279: 000000000008fca0 24 FUNC WEAK DEFAULT 12 wcstoll@@GLIBC_2.17 + 280: 00000000000cf9d4 12 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setpgroup@@GLIBC_2.17 + 281: 0000000000182cc0 8 OBJECT WEAK DEFAULT 34 _environ@@GLIBC_2.17 + 282: 00000000000db520 748 FUNC GLOBAL DEFAULT 12 qecvt_r@@GLIBC_2.17 + 283: 0000000000077dd0 412 FUNC GLOBAL DEFAULT 12 _IO_do_write@@GLIBC_2.17 + 284: 00000000000daec8 380 FUNC GLOBAL DEFAULT 12 ecvt_r@@GLIBC_2.17 + 285: 000000000011cff0 4 FUNC GLOBAL DEFAULT 12 getutxid@@GLIBC_2.17 + 286: 000000000008e468 44 FUNC WEAK DEFAULT 12 wcscat@@GLIBC_2.17 + 287: 0000000000078c8c 184 FUNC GLOBAL DEFAULT 12 _IO_switch_to_get_mode@@GLIBC_2.17 + 288: 00000000000f9100 32 FUNC GLOBAL DEFAULT 12 __fdelt_warn@@GLIBC_2.17 + 289: 000000000008f348 420 FUNC WEAK DEFAULT 12 wcrtomb@@GLIBC_2.17 + 290: 0000000000185318 8 OBJECT GLOBAL DEFAULT 34 __key_gendes_LOCAL@@GLIBC_2.17 + 291: 00000000000d52a0 68 FUNC GLOBAL DEFAULT 12 sync_file_range@@GLIBC_2.17 + 292: 0000000000034990 12 FUNC GLOBAL DEFAULT 12 __signbitf@@GLIBC_2.17 + 293: 00000000000faf90 464 FUNC GLOBAL DEFAULT 12 getnetbyaddr@@GLIBC_2.17 + 294: 00000000000dffd0 64 FUNC WEAK DEFAULT 12 connect@@GLIBC_2.17 + 295: 000000000008e8b8 80 FUNC GLOBAL DEFAULT 12 wcspbrk@@GLIBC_2.17 + 296: 00000000000343ec 24 FUNC GLOBAL DEFAULT 12 __isnan@@GLIBC_2.17 + 297: 0000000000000010 4 TLS GLOBAL DEFAULT 23 errno@@GLIBC_PRIVATE + 298: 00000000000d0adc 56 FUNC GLOBAL DEFAULT 12 __open64_2@@GLIBC_2.17 + 299: 0000000000035054 68 FUNC WEAK DEFAULT 12 _longjmp@@GLIBC_2.17 + 300: 000000000008b754 184 FUNC GLOBAL DEFAULT 12 envz_remove@@GLIBC_2.17 + 301: 0000000000030828 32 FUNC WEAK DEFAULT 12 ngettext@@GLIBC_2.17 + 302: 0000000000034908 136 FUNC WEAK DEFAULT 12 ldexpf@@GLIBC_2.17 + 303: 00000000000731b4 48 FUNC WEAK DEFAULT 12 fileno_unlocked@@GLIBC_2.17 + 304: 0000000000184f78 8 OBJECT GLOBAL DEFAULT 34 error_print_progname@@GLIBC_2.17 + 305: 0000000000034f60 16 FUNC GLOBAL DEFAULT 12 __signbitl@@GLIBC_2.17 + 306: 0000000000137048 16 OBJECT WEAK DEFAULT 15 in6addr_any@@GLIBC_2.17 + 307: 00000000000d83fc 192 FUNC GLOBAL DEFAULT 12 lutimes@@GLIBC_2.17 + 308: 0000000000088a68 200 FUNC WEAK DEFAULT 12 stpncpy@@GLIBC_2.17 + 309: 00000000000daa60 24 FUNC GLOBAL DEFAULT 12 munlock@@GLIBC_2.17 + 310: 00000000000d8650 24 FUNC WEAK DEFAULT 12 ftruncate64@@GLIBC_2.17 + 311: 00000000000a9188 396 FUNC GLOBAL DEFAULT 12 getpwuid@@GLIBC_2.17 + 312: 000000000011d018 432 FUNC WEAK DEFAULT 12 dl_iterate_phdr@@GLIBC_2.17 + 313: 00000000001113e8 268 FUNC GLOBAL DEFAULT 12 key_get_conv@@GLIBC_2.17 + 314: 00000000000f3638 180 FUNC GLOBAL DEFAULT 12 __nss_disable_nscd@@GLIBC_PRIVATE + 315: 00000000000a94cc 300 FUNC GLOBAL DEFAULT 12 getpwent_r@@GLIBC_2.17 + 316: 00000000000da904 60 FUNC WEAK DEFAULT 12 mmap64@@GLIBC_2.17 + 317: 00000000000d5130 24 FUNC GLOBAL DEFAULT 12 sendfile@@GLIBC_2.17 + 318: 00000000001057f8 112 FUNC GLOBAL DEFAULT 12 inet6_rth_init@@GLIBC_2.17 + 319: 0000000000034ea0 164 FUNC WEAK DEFAULT 12 ldexpl@@GLIBC_2.17 + 320: 000000000010564c 140 FUNC GLOBAL DEFAULT 12 inet6_opt_next@@GLIBC_2.17 + 321: 0000000000036140 84 FUNC GLOBAL DEFAULT 12 __libc_allocate_rtsig_private@@GLIBC_PRIVATE + 322: 000000000006e478 368 FUNC GLOBAL DEFAULT 12 ungetwc@@GLIBC_2.17 + 323: 000000000010a7b8 116 FUNC GLOBAL DEFAULT 12 ecb_crypt@@GLIBC_2.17 + 324: 000000000009749c 12 FUNC GLOBAL DEFAULT 12 __wcstof_l@@GLIBC_2.17 + 325: 00000000000a628c 20 FUNC GLOBAL DEFAULT 12 versionsort@@GLIBC_2.17 + 326: 0000000000114bf4 232 FUNC GLOBAL DEFAULT 12 xdr_longlong_t@@GLIBC_2.17 + 327: 00000000000dc510 112 FUNC WEAK DEFAULT 12 tfind@@GLIBC_2.17 + 328: 00000000000520e4 156 FUNC GLOBAL DEFAULT 12 _IO_printf@@GLIBC_2.17 + 329: 000000000008aee4 88 FUNC GLOBAL DEFAULT 12 __argz_next@@GLIBC_2.17 + 330: 000000000008ecd8 8 FUNC WEAK DEFAULT 12 wmemcpy@@GLIBC_2.17 + 331: 00000000000e07d8 220 FUNC GLOBAL DEFAULT 12 recvmmsg@@GLIBC_2.17 + 332: 00000000000d0450 96 FUNC GLOBAL DEFAULT 12 __fxstatat64@@GLIBC_2.17 + 333: 00000000000cf920 32 FUNC GLOBAL DEFAULT 12 posix_spawnattr_init@@GLIBC_2.17 + 334: 0000000000035b1c 40 FUNC GLOBAL DEFAULT 12 __sigismember@@GLIBC_2.17 + 335: 00000000000d1cf4 156 FUNC GLOBAL DEFAULT 12 get_current_dir_name@@GLIBC_2.17 + 336: 00000000000e0bc0 24 FUNC WEAK DEFAULT 12 semctl@@GLIBC_2.17 + 337: 0000000000075738 52 FUNC GLOBAL DEFAULT 12 fputc_unlocked@@GLIBC_2.17 + 338: 00000000000de10c 52 FUNC GLOBAL DEFAULT 12 verr@@GLIBC_2.17 + 339: 000000000008f4ec 52 FUNC WEAK DEFAULT 12 mbsrtowcs@@GLIBC_2.17 + 340: 00000000000fbeb8 396 FUNC GLOBAL DEFAULT 12 getprotobynumber@@GLIBC_2.17 + 341: 00000000000e5324 532 FUNC GLOBAL DEFAULT 12 fgetsgent@@GLIBC_2.17 + 342: 000000000010a4c4 272 FUNC GLOBAL DEFAULT 12 getsecretkey@@GLIBC_2.17 + 343: 00000000000f4804 148 FUNC GLOBAL DEFAULT 12 __nss_services_lookup2@@GLIBC_PRIVATE + 344: 00000000000d2574 56 FUNC GLOBAL DEFAULT 12 unlinkat@@GLIBC_2.17 + 345: 00000000001239b0 64 FUNC GLOBAL DEFAULT 14 __libc_thread_freeres@@GLIBC_PRIVATE + 346: 000000000002ea7c 16 FUNC WEAK DEFAULT 12 isalnum_l@@GLIBC_2.17 + 347: 000000000010a678 76 FUNC GLOBAL DEFAULT 12 xdr_authdes_verf@@GLIBC_2.17 + 348: 0000000000181380 224 OBJECT GLOBAL DEFAULT 33 _IO_2_1_stdin_@@GLIBC_2.17 + 349: 00000000000f9100 32 FUNC GLOBAL DEFAULT 12 __fdelt_chk@@GLIBC_2.17 + 350: 000000000003a538 20 FUNC GLOBAL DEFAULT 12 __strtof_internal@@GLIBC_2.17 + 351: 00000000000a5d2c 112 FUNC WEAK DEFAULT 12 closedir@@GLIBC_2.17 + 352: 00000000000a6ee0 252 FUNC GLOBAL DEFAULT 12 initgroups@@GLIBC_2.17 + 353: 00000000000f950c 92 FUNC GLOBAL DEFAULT 12 inet_ntoa@@GLIBC_2.17 + 354: 000000000009749c 12 FUNC WEAK DEFAULT 12 wcstof_l@@GLIBC_2.17 + 355: 000000000002e334 248 FUNC GLOBAL DEFAULT 12 __freelocale@@GLIBC_2.17 + 356: 00000000000ad890 7252 FUNC WEAK DEFAULT 12 glob64@@GLIBC_2.17 + 357: 00000000000f7f84 524 FUNC GLOBAL DEFAULT 12 __fwprintf_chk@@GLIBC_2.17 + 358: 0000000000107f5c 260 FUNC GLOBAL DEFAULT 12 pmap_rmtcall@@GLIBC_2.17 + 359: 0000000000073c20 384 FUNC WEAK DEFAULT 12 putc@@GLIBC_2.17 + 360: 00000000000aa9a0 60 FUNC WEAK DEFAULT 12 nanosleep@@GLIBC_2.17 + 361: 00000000000e3ecc 220 FUNC GLOBAL DEFAULT 12 setspent@@GLIBC_2.17 + 362: 00000000000d15e0 24 FUNC WEAK DEFAULT 12 fchdir@@GLIBC_2.17 + 363: 0000000000114ef4 140 FUNC GLOBAL DEFAULT 12 xdr_char@@GLIBC_2.17 + 364: 00000000000f5c84 208 FUNC GLOBAL DEFAULT 12 __mempcpy_chk@@GLIBC_2.17 + 365: 00000000000343c8 36 FUNC GLOBAL DEFAULT 12 __isinf@@GLIBC_2.17 + 366: 000000000006af24 224 FUNC GLOBAL DEFAULT 12 fopencookie@@GLIBC_2.17 + 367: 0000000000090180 12 FUNC WEAK DEFAULT 12 wcstoll_l@@GLIBC_2.17 + 368: 0000000000067f7c 160 FUNC WEAK DEFAULT 12 ftrylockfile@@GLIBC_2.17 + 369: 0000000000101e08 220 FUNC GLOBAL DEFAULT 12 endaliasent@@GLIBC_2.17 + 370: 000000000002ea8c 16 FUNC WEAK DEFAULT 12 isalpha_l@@GLIBC_2.17 + 371: 000000000006f3e0 404 FUNC GLOBAL DEFAULT 12 _IO_wdefault_pbackfail@@GLIBC_2.17 + 372: 0000000000075720 12 FUNC GLOBAL DEFAULT 12 feof_unlocked@@GLIBC_2.17 + 373: 00000000000f4a60 152 FUNC GLOBAL DEFAULT 12 __nss_passwd_lookup2@@GLIBC_PRIVATE + 374: 000000000002e9ec 28 FUNC GLOBAL DEFAULT 12 isblank@@GLIBC_2.17 + 375: 00000000000d8eb4 76 FUNC GLOBAL DEFAULT 12 getusershell@@GLIBC_2.17 + 376: 000000000011240c 84 FUNC GLOBAL DEFAULT 12 svc_sendreply@@GLIBC_2.17 + 377: 000000000002e42c 136 FUNC WEAK DEFAULT 12 uselocale@@GLIBC_2.17 + 378: 00000000000c52b8 264 FUNC WEAK DEFAULT 12 re_search_2@@GLIBC_2.17 + 379: 00000000000a7144 396 FUNC GLOBAL DEFAULT 12 getgrgid@@GLIBC_2.17 + 380: 0000000000035a78 164 FUNC GLOBAL DEFAULT 12 siginterrupt@@GLIBC_2.17 + 381: 00000000000df5b0 8 FUNC GLOBAL DEFAULT 12 epoll_wait@@GLIBC_2.17 + 382: 000000000006d6f4 408 FUNC GLOBAL DEFAULT 12 fputwc@@GLIBC_2.17 + 383: 00000000000de514 364 FUNC WEAK DEFAULT 12 error@@GLIBC_2.17 + 384: 00000000000d0244 52 FUNC GLOBAL DEFAULT 12 mkfifoat@@GLIBC_2.17 + 385: 00000000000fdeec 300 FUNC GLOBAL DEFAULT 12 getrpcent_r@@GLIBC_2.17 + 386: 00000000000dff08 28 FUNC WEAK DEFAULT 12 get_kernel_syms@@GLIBC_2.17 + 387: 000000000006b528 432 FUNC WEAK DEFAULT 12 ftell@@GLIBC_2.17 + 388: 00000000000ed1f8 348 FUNC GLOBAL DEFAULT 12 __inet_aton_exact@@GLIBC_PRIVATE + 389: 0000000000068064 544 FUNC GLOBAL DEFAULT 12 __isoc99_scanf@@GLIBC_2.17 + 390: 0000000000183fd8 568 OBJECT GLOBAL DEFAULT 34 _res@GLIBC_2.17 + 391: 00000000000f74b4 76 FUNC GLOBAL DEFAULT 12 __read_chk@@GLIBC_2.17 + 392: 00000000000ed5bc 2188 FUNC GLOBAL DEFAULT 12 inet_ntop@@GLIBC_2.17 + 393: 000000000003513c 176 FUNC WEAK DEFAULT 12 signal@@GLIBC_2.17 + 394: 0000000000086b18 504 FUNC GLOBAL DEFAULT 12 strncpy@@GLIBC_2.17 + 395: 00000000000f04e8 192 FUNC GLOBAL DEFAULT 12 __res_nclose@@GLIBC_2.17 + 396: 00000000000f8728 196 FUNC GLOBAL DEFAULT 12 __fgetws_unlocked_chk@@GLIBC_2.17 + 397: 00000000000d6718 104 FUNC GLOBAL DEFAULT 12 getdomainname@@GLIBC_2.17 + 398: 00000000000dfba0 24 FUNC WEAK DEFAULT 12 personality@@GLIBC_2.17 + 399: 000000000006c7f8 564 FUNC WEAK DEFAULT 12 puts@@GLIBC_2.17 + 400: 00000000000e3080 152 FUNC GLOBAL DEFAULT 12 __iswupper_l@@GLIBC_2.17 + 401: 0000000000038f48 36 FUNC GLOBAL DEFAULT 12 mbstowcs@@GLIBC_2.17 + 402: 00000000000f63d0 196 FUNC GLOBAL DEFAULT 12 __vsprintf_chk@@GLIBC_2.17 + 403: 000000000002db54 1524 FUNC GLOBAL DEFAULT 12 __newlocale@@GLIBC_2.17 + 404: 00000000000d5e00 72 FUNC GLOBAL DEFAULT 12 getpriority@@GLIBC_2.17 + 405: 0000000000043c3c 284 FUNC GLOBAL DEFAULT 12 getsubopt@@GLIBC_2.17 + 406: 00000000000aa9dc 668 FUNC WEAK DEFAULT 12 fork@@GLIBC_2.17 + 407: 00000000000d5978 212 FUNC GLOBAL DEFAULT 12 tcgetsid@@GLIBC_2.17 + 408: 0000000000067de8 52 FUNC GLOBAL DEFAULT 12 putw@@GLIBC_2.17 + 409: 00000000000ddf9c 368 FUNC GLOBAL DEFAULT 12 warnx@@GLIBC_2.17 + 410: 000000000006d1d8 628 FUNC GLOBAL DEFAULT 12 _IO_setvbuf@@GLIBC_2.17 + 411: 00000000001079cc 420 FUNC GLOBAL DEFAULT 12 pmap_unset@@GLIBC_2.17 + 412: 00000000000e2524 180 FUNC WEAK DEFAULT 12 iswspace@@GLIBC_2.17 + 413: 000000000011d5a8 56 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper_check@@GLIBC_2.17 + 414: 000000000011a7d8 28 FUNC GLOBAL DEFAULT 12 isastream@@GLIBC_2.17 + 415: 000000000006ee48 60 FUNC GLOBAL DEFAULT 12 vwscanf@@GLIBC_2.17 + 416: 000000000006defc 440 FUNC GLOBAL DEFAULT 12 fputws@@GLIBC_2.17 + 417: 00000000000353fc 148 FUNC WEAK DEFAULT 12 sigprocmask@@GLIBC_2.17 + 418: 0000000000079bbc 156 FUNC GLOBAL DEFAULT 12 _IO_sputbackc@@GLIBC_2.17 + 419: 000000000003a52c 12 FUNC WEAK DEFAULT 12 strtoul_l@@GLIBC_2.17 + 420: 00000000000df3c0 24 FUNC GLOBAL DEFAULT 12 listxattr@@GLIBC_2.17 + 421: 0000000000137038 16 OBJECT WEAK DEFAULT 15 in6addr_loopback@@GLIBC_2.17 + 422: 00000000000c459c 72 FUNC WEAK DEFAULT 12 regfree@@GLIBC_2.17 + 423: 0000000000039b24 68 FUNC WEAK DEFAULT 12 lcong48_r@@GLIBC_2.17 + 424: 00000000000c68a0 24 FUNC WEAK DEFAULT 12 sched_getparam@@GLIBC_2.17 + 425: 00000000000f94e0 44 FUNC GLOBAL DEFAULT 12 inet_netof@@GLIBC_2.17 + 426: 000000000002f0b4 16 FUNC WEAK DEFAULT 12 gettext@@GLIBC_2.17 + 427: 0000000000107360 656 FUNC GLOBAL DEFAULT 12 callrpc@@GLIBC_2.17 + 428: 00000000000aa408 224 FUNC WEAK DEFAULT 12 waitid@@GLIBC_2.17 + 429: 00000000000d84bc 188 FUNC WEAK DEFAULT 12 futimes@@GLIBC_2.17 + 430: 0000000000070448 264 FUNC GLOBAL DEFAULT 12 _IO_init_wmarker@@GLIBC_2.17 + 431: 0000000000035be4 112 FUNC GLOBAL DEFAULT 12 sigfillset@@GLIBC_2.17 + 432: 00000000000f0928 100 FUNC GLOBAL DEFAULT 12 __resolv_context_get_override@@GLIBC_PRIVATE + 433: 00000000000d7044 40 FUNC GLOBAL DEFAULT 12 gtty@@GLIBC_2.17 + 434: 000000000009b500 64 FUNC GLOBAL DEFAULT 12 time@@GLIBC_2.17 + 435: 00000000000df9c0 24 FUNC WEAK DEFAULT 12 ntp_adjtime@@GLIBC_2.17 + 436: 00000000000a7060 228 FUNC GLOBAL DEFAULT 12 getgrent@@GLIBC_2.17 + 437: 0000000000085d80 236 FUNC GLOBAL DEFAULT 12 __libc_dynarray_finalize@@GLIBC_PRIVATE + 438: 0000000000080c0c 308 FUNC GLOBAL DEFAULT 12 __libc_malloc@@GLIBC_2.17 + 439: 00000000000f7a14 28 FUNC GLOBAL DEFAULT 12 __wcsncpy_chk@@GLIBC_2.17 + 440: 00000000000a5ef8 492 FUNC WEAK DEFAULT 12 readdir_r@@GLIBC_2.17 + 441: 0000000000035fe8 312 FUNC GLOBAL DEFAULT 12 sigorset@@GLIBC_2.17 + 442: 000000000007a230 8 FUNC GLOBAL DEFAULT 12 _IO_flush_all@@GLIBC_2.17 + 443: 00000000000d639c 140 FUNC WEAK DEFAULT 12 setreuid@@GLIBC_2.17 + 444: 000000000005fbd0 48 FUNC WEAK DEFAULT 12 vfscanf@@GLIBC_2.17 + 445: 0000000000081500 432 FUNC WEAK DEFAULT 12 memalign@@GLIBC_2.17 + 446: 0000000000039944 12 FUNC GLOBAL DEFAULT 12 drand48_r@@GLIBC_2.17 + 447: 00000000000fb8d0 220 FUNC GLOBAL DEFAULT 12 endnetent@@GLIBC_2.17 + 448: 000000000006b374 436 FUNC GLOBAL DEFAULT 12 fsetpos64@@GLIBC_2.17 + 449: 00000000000dba18 512 FUNC GLOBAL DEFAULT 12 hsearch_r@@GLIBC_2.17 + 450: 00000000000f9158 20 FUNC GLOBAL DEFAULT 12 __stack_chk_fail@@GLIBC_2.17 + 451: 00000000000990d8 116 FUNC WEAK DEFAULT 12 wcscasecmp@@GLIBC_2.17 + 452: 0000000000072fcc 244 FUNC GLOBAL DEFAULT 12 _IO_feof@@GLIBC_2.17 + 453: 0000000000110b30 252 FUNC GLOBAL DEFAULT 12 key_setsecret@@GLIBC_2.17 + 454: 00000000000da794 368 FUNC GLOBAL DEFAULT 12 daemon@@GLIBC_2.17 + 455: 00000000000d0328 88 FUNC GLOBAL DEFAULT 12 __lxstat@@GLIBC_2.17 + 456: 0000000000116848 308 FUNC GLOBAL DEFAULT 12 svc_run@@GLIBC_2.17 + 457: 000000000006f574 136 FUNC GLOBAL DEFAULT 12 _IO_wdefault_finish@@GLIBC_2.17 + 458: 0000000000090538 12 FUNC GLOBAL DEFAULT 12 __wcstoul_l@@GLIBC_2.17 + 459: 00000000000e0c60 24 FUNC WEAK DEFAULT 12 shmctl@@GLIBC_2.17 + 460: 00000000000dfb00 24 FUNC GLOBAL DEFAULT 12 inotify_rm_watch@@GLIBC_2.17 + 461: 000000000006a6dc 396 FUNC GLOBAL DEFAULT 12 _IO_fflush@@GLIBC_2.17 + 462: 0000000000115a40 220 FUNC GLOBAL DEFAULT 12 xdr_quad_t@@GLIBC_2.17 + 463: 00000000000d2538 60 FUNC WEAK DEFAULT 12 unlink@@GLIBC_2.17 + 464: 000000000008f188 448 FUNC GLOBAL DEFAULT 12 __mbrtowc@@GLIBC_2.17 + 465: 000000000006e974 408 FUNC GLOBAL DEFAULT 12 putchar@@GLIBC_2.17 + 466: 0000000000116200 32 FUNC GLOBAL DEFAULT 12 xdrmem_create@@GLIBC_2.17 + 467: 00000000000ec890 68 FUNC GLOBAL DEFAULT 12 pthread_mutex_lock@@GLIBC_2.17 + 468: 00000000000e0070 24 FUNC WEAK DEFAULT 12 listen@@GLIBC_2.17 + 469: 0000000000075b04 188 FUNC WEAK DEFAULT 12 fgets_unlocked@@GLIBC_2.17 + 470: 00000000000e3ad0 1020 FUNC GLOBAL DEFAULT 12 putspent@@GLIBC_2.17 + 471: 0000000000115cd4 80 FUNC GLOBAL DEFAULT 12 xdr_int32_t@@GLIBC_2.17 + 472: 00000000000e0af0 72 FUNC WEAK DEFAULT 12 msgrcv@@GLIBC_2.17 + 473: 000000000010032c 64 FUNC GLOBAL DEFAULT 12 __ivaliduser@@GLIBC_2.17 + 474: 00000000000d6798 284 FUNC WEAK DEFAULT 12 select@@GLIBC_2.17 + 475: 00000000000fd930 228 FUNC GLOBAL DEFAULT 12 getrpcent@@GLIBC_2.17 + 476: 00000000000e23bc 180 FUNC WEAK DEFAULT 12 iswprint@@GLIBC_2.17 + 477: 00000000000e5944 300 FUNC GLOBAL DEFAULT 12 getsgent_r@@GLIBC_2.17 + 478: 00000000000e2a6c 156 FUNC GLOBAL DEFAULT 12 __iswalnum_l@@GLIBC_2.17 + 479: 00000000000d06d0 68 FUNC WEAK DEFAULT 12 mkdir@@GLIBC_2.17 + 480: 000000000002eaec 16 FUNC WEAK DEFAULT 12 ispunct_l@@GLIBC_2.17 + 481: 0000000000184fb8 8 OBJECT GLOBAL DEFAULT 34 argp_program_version_hook@@GLIBC_2.17 + 482: 00000000000752f4 44 FUNC GLOBAL DEFAULT 12 __libc_fatal@@GLIBC_PRIVATE + 483: 00000000000d0164 16 FUNC GLOBAL DEFAULT 12 __sched_cpualloc@@GLIBC_2.17 + 484: 00000000000e0c20 24 FUNC WEAK DEFAULT 12 shmdt@@GLIBC_2.17 + 485: 00000000000dfef0 24 FUNC GLOBAL DEFAULT 12 process_vm_writev@@GLIBC_2.17 + 486: 00000000000811b4 844 FUNC GLOBAL DEFAULT 12 realloc@@GLIBC_2.17 + 487: 00000000000cf650 68 FUNC WEAK DEFAULT 12 __pwrite64@@GLIBC_2.17 + 488: 00000000000d04d0 24 FUNC WEAK DEFAULT 12 fstatfs@@GLIBC_2.17 + 489: 000000000003924c 196 FUNC WEAK DEFAULT 12 setstate@@GLIBC_2.17 + 490: 0000000000138cb0 5 OBJECT GLOBAL DEFAULT 15 _libc_intl_domainname@@GLIBC_2.17 + 491: 0000000000103384 808 FUNC WEAK DEFAULT 12 if_nameindex@@GLIBC_2.17 + 492: 000000000013e1e4 4 OBJECT GLOBAL DEFAULT 15 h_nerr@@GLIBC_2.17 + 493: 000000000008ee4c 396 FUNC WEAK DEFAULT 12 btowc@@GLIBC_2.17 + 494: 000000000008b114 92 FUNC GLOBAL DEFAULT 12 __argz_stringify@@GLIBC_2.17 + 495: 000000000006d44c 352 FUNC GLOBAL DEFAULT 12 _IO_ungetc@@GLIBC_2.17 + 496: 00000000000a60e4 176 FUNC GLOBAL DEFAULT 12 rewinddir@@GLIBC_2.17 + 497: 000000000003a5a4 24 FUNC GLOBAL DEFAULT 12 strtold@@GLIBC_2.17 + 498: 00000000000703fc 76 FUNC GLOBAL DEFAULT 12 _IO_adjust_wcolumn@@GLIBC_2.17 + 499: 00000000000d6a00 56 FUNC WEAK DEFAULT 12 fsync@@GLIBC_2.17 + 500: 0000000000101ee4 300 FUNC GLOBAL DEFAULT 12 getaliasent_r@@GLIBC_2.17 + 501: 00000000000e2b08 156 FUNC GLOBAL DEFAULT 12 __iswalpha_l@@GLIBC_2.17 + 502: 000000000010b544 140 FUNC GLOBAL DEFAULT 12 xdr_key_netstres@@GLIBC_2.17 + 503: 00000000000df980 24 FUNC GLOBAL DEFAULT 12 prlimit@@GLIBC_2.17 + 504: 000000000009aae0 128 FUNC GLOBAL DEFAULT 12 clock@@GLIBC_2.17 + 505: 00000000000f8d6c 284 FUNC GLOBAL DEFAULT 12 __obstack_vprintf_chk@@GLIBC_2.17 + 506: 00000000000e27c4 132 FUNC GLOBAL DEFAULT 12 towupper@@GLIBC_2.17 + 507: 00000000000e06e4 40 FUNC GLOBAL DEFAULT 12 sockatmark@@GLIBC_2.17 + 508: 0000000000108724 108 FUNC GLOBAL DEFAULT 12 xdr_replymsg@@GLIBC_2.17 + 509: 000000000011a82c 28 FUNC GLOBAL DEFAULT 12 putmsg@@GLIBC_2.17 + 510: 0000000000036794 636 FUNC GLOBAL DEFAULT 12 abort@@GLIBC_2.17 + 511: 00000000001815b8 8 OBJECT GLOBAL DEFAULT 33 stdin@@GLIBC_2.17 + 512: 000000000007a238 696 FUNC GLOBAL DEFAULT 12 _IO_flush_all_linebuffered@@GLIBC_2.17 + 513: 0000000000114e5c 152 FUNC GLOBAL DEFAULT 12 xdr_u_short@@GLIBC_2.17 + 514: 0000000000039bec 24 FUNC WEAK DEFAULT 12 strtoll@@GLIBC_2.17 + 515: 00000000000aacc4 108 FUNC GLOBAL DEFAULT 12 _exit@@GLIBC_2.17 + 516: 0000000000112650 556 FUNC GLOBAL DEFAULT 12 svc_getreq_common@@GLIBC_2.17 + 517: 00000000000dfe30 24 FUNC GLOBAL DEFAULT 12 name_to_handle_at@@GLIBC_2.17 + 518: 000000000004484c 8 FUNC GLOBAL DEFAULT 12 wcstoumax@@GLIBC_2.17 + 519: 000000000006d5ac 184 FUNC WEAK DEFAULT 12 vsprintf@@GLIBC_2.17 + 520: 00000000000362e0 332 FUNC WEAK DEFAULT 12 sigwaitinfo@@GLIBC_2.17 + 521: 00000000000e1134 120 FUNC WEAK DEFAULT 12 moncontrol@@GLIBC_2.17 + 522: 00000000000f0370 376 FUNC GLOBAL DEFAULT 12 __res_iclose@@GLIBC_PRIVATE + 523: 00000000000e0450 24 FUNC WEAK DEFAULT 12 socketpair@@GLIBC_2.17 + 524: 0000000000038e28 36 FUNC GLOBAL DEFAULT 12 div@@GLIBC_2.17 + 525: 0000000000087cc4 412 FUNC GLOBAL DEFAULT 12 memchr@@GLIBC_2.17 + 526: 000000000003f250 12 FUNC GLOBAL DEFAULT 12 __strtod_l@@GLIBC_2.17 + 527: 0000000000086d68 52 FUNC GLOBAL DEFAULT 12 strpbrk@@GLIBC_2.17 + 528: 00000000000a63e4 392 FUNC GLOBAL DEFAULT 12 scandirat@@GLIBC_2.17 + 529: 000000000008e150 360 FUNC WEAK DEFAULT 12 memrchr@@GLIBC_2.17 + 530: 00000000000fe5e8 12 FUNC GLOBAL DEFAULT 12 ether_aton@@GLIBC_2.17 + 531: 00000000000db850 12 FUNC WEAK DEFAULT 12 hdestroy@@GLIBC_2.17 + 532: 00000000000d0d20 64 FUNC WEAK DEFAULT 12 __read@@GLIBC_2.17 + 533: 000000000002e984 52 FUNC GLOBAL DEFAULT 12 tolower@@GLIBC_2.17 + 534: 000000000006c768 144 FUNC GLOBAL DEFAULT 12 popen@@GLIBC_2.17 + 535: 00000000000810a8 268 FUNC WEAK DEFAULT 12 cfree@@GLIBC_2.17 + 536: 00000000001000a0 196 FUNC GLOBAL DEFAULT 12 ruserok_af@@GLIBC_2.17 + 537: 000000000002ea08 40 FUNC GLOBAL DEFAULT 12 _tolower@@GLIBC_2.17 + 538: 00000000000df0cc 124 FUNC WEAK DEFAULT 12 step@@GLIBC_2.17 + 539: 00000000000e2a0c 96 FUNC WEAK DEFAULT 12 towctrans@@GLIBC_2.17 + 540: 000000000002f098 20 FUNC GLOBAL DEFAULT 12 __dcgettext@@GLIBC_2.17 + 541: 00000000000df440 24 FUNC GLOBAL DEFAULT 12 lsetxattr@@GLIBC_2.17 + 542: 00000000000d8bf8 108 FUNC GLOBAL DEFAULT 12 setttyent@@GLIBC_2.17 + 543: 000000000009a258 132 FUNC GLOBAL DEFAULT 12 __isoc99_swscanf@@GLIBC_2.17 + 544: 0000000000083658 1276 FUNC WEAK DEFAULT 12 malloc_info@@GLIBC_2.17 + 545: 00000000000d0994 328 FUNC WEAK DEFAULT 12 __open64@@GLIBC_2.17 + 546: 00000000000abc70 4 FUNC GLOBAL DEFAULT 12 __bsd_getpgrp@@GLIBC_2.17 + 547: 00000000000e578c 220 FUNC GLOBAL DEFAULT 12 setsgent@@GLIBC_2.17 + 548: 00000000000ab98c 96 FUNC GLOBAL DEFAULT 12 getpid@@GLIBC_2.17 + 549: 0000000000035490 24 FUNC WEAK DEFAULT 12 kill@@GLIBC_2.17 + 550: 0000000000044860 168 FUNC WEAK DEFAULT 12 getcontext@@GLIBC_2.17 + 551: 000000000009a0bc 412 FUNC GLOBAL DEFAULT 12 __isoc99_vfwscanf@@GLIBC_2.17 + 552: 0000000000087064 80 FUNC GLOBAL DEFAULT 12 strspn@@GLIBC_2.17 + 553: 00000000000ec56c 68 FUNC GLOBAL DEFAULT 12 pthread_condattr_init@@GLIBC_2.17 + 554: 0000000000038e4c 36 FUNC WEAK DEFAULT 12 imaxdiv@@GLIBC_2.17 + 555: 0000000000180df8 8 OBJECT WEAK DEFAULT 33 program_invocation_name@@GLIBC_2.17 + 556: 00000000000d4f54 468 FUNC GLOBAL DEFAULT 12 posix_fallocate64@@GLIBC_2.17 + 557: 00000000001091c8 112 FUNC GLOBAL DEFAULT 12 svcraw_create@@GLIBC_2.17 + 558: 00000000000dfe10 24 FUNC GLOBAL DEFAULT 12 fanotify_init@@GLIBC_2.17 + 559: 00000000000c6920 24 FUNC GLOBAL DEFAULT 12 __sched_get_priority_max@@GLIBC_2.17 + 560: 000000000008afb8 84 FUNC WEAK DEFAULT 12 argz_extract@@GLIBC_2.17 + 561: 000000000002ee6c 556 FUNC WEAK DEFAULT 12 bind_textdomain_codeset@@GLIBC_2.17 + 562: 000000000006a868 504 FUNC GLOBAL DEFAULT 12 _IO_fgetpos64@@GLIBC_2.17 + 563: 000000000006a868 504 FUNC GLOBAL DEFAULT 12 fgetpos@@GLIBC_2.17 + 564: 000000000008649c 68 FUNC WEAK DEFAULT 12 strdup@@GLIBC_2.17 + 565: 0000000000116814 52 FUNC GLOBAL DEFAULT 12 svc_exit@@GLIBC_2.17 + 566: 00000000000d15a8 12 FUNC WEAK DEFAULT 12 creat64@@GLIBC_2.17 + 567: 000000000007576c 40 FUNC WEAK DEFAULT 12 getc_unlocked@@GLIBC_2.17 + 568: 00000000000ee1b4 716 FUNC WEAK DEFAULT 12 inet_pton@@GLIBC_2.17 + 569: 00000000000a1bc4 20 FUNC GLOBAL DEFAULT 12 strftime@@GLIBC_2.17 + 570: 0000000000074cb4 12 FUNC GLOBAL DEFAULT 12 __flbf@@GLIBC_2.17 + 571: 00000000000d1338 264 FUNC WEAK DEFAULT 12 lockf64@@GLIBC_2.17 + 572: 000000000006f2e8 56 FUNC GLOBAL DEFAULT 12 _IO_switch_to_main_wget_area@@GLIBC_2.17 + 573: 000000000011409c 580 FUNC GLOBAL DEFAULT 12 xencrypt@@GLIBC_2.17 + 574: 000000000011a848 28 FUNC GLOBAL DEFAULT 12 putpmsg@@GLIBC_2.17 + 575: 0000000000042308 120 FUNC GLOBAL DEFAULT 12 __libc_system@@GLIBC_PRIVATE + 576: 0000000000115e0c 152 FUNC GLOBAL DEFAULT 12 xdr_uint16_t@@GLIBC_2.17 + 577: 0000000000180de0 16 OBJECT WEAK DEFAULT 33 tzname@@GLIBC_2.17 + 578: 0000000000081aa0 620 FUNC GLOBAL DEFAULT 12 __libc_mallopt@@GLIBC_2.17 + 579: 0000000000035d5c 148 FUNC WEAK DEFAULT 12 sysv_signal@@GLIBC_2.17 + 580: 00000000000ec390 68 FUNC GLOBAL DEFAULT 12 pthread_attr_getschedparam@@GLIBC_2.17 + 581: 000000000003a0d4 12 FUNC WEAK DEFAULT 12 strtoll_l@@GLIBC_2.17 + 582: 00000000000d0174 4 FUNC GLOBAL DEFAULT 12 __sched_cpufree@@GLIBC_2.17 + 583: 00000000000d14b8 124 FUNC GLOBAL DEFAULT 12 __dup2@@GLIBC_2.17 + 584: 00000000000ec808 68 FUNC GLOBAL DEFAULT 12 pthread_mutex_destroy@@GLIBC_2.17 + 585: 000000000006d908 368 FUNC WEAK DEFAULT 12 fgetwc@@GLIBC_2.17 + 586: 00000000000d05dc 68 FUNC WEAK DEFAULT 12 chmod@@GLIBC_2.17 + 587: 00000000000d5c0c 128 FUNC GLOBAL DEFAULT 12 vlimit@@GLIBC_2.17 + 588: 00000000000d5f8c 168 FUNC WEAK DEFAULT 12 sbrk@@GLIBC_2.17 + 589: 000000000002e798 76 FUNC GLOBAL DEFAULT 12 __assert_fail@@GLIBC_2.17 + 590: 000000000010c9f8 600 FUNC GLOBAL DEFAULT 12 clntunix_create@@GLIBC_2.17 + 591: 00000000000e1edc 180 FUNC WEAK DEFAULT 12 iswalnum@@GLIBC_2.17 + 592: 000000000002ea58 8 FUNC WEAK DEFAULT 12 __toascii_l@@GLIBC_2.17 + 593: 000000000002ea7c 16 FUNC GLOBAL DEFAULT 12 __isalnum_l@@GLIBC_2.17 + 594: 00000000000520e4 156 FUNC GLOBAL DEFAULT 12 printf@@GLIBC_2.17 + 595: 00000000000d82e4 156 FUNC GLOBAL DEFAULT 12 __getmntent_r@@GLIBC_2.17 + 596: 00000000000fea40 72 FUNC GLOBAL DEFAULT 12 ether_ntoa_r@@GLIBC_2.17 + 597: 0000000000034404 24 FUNC WEAK DEFAULT 12 finite@@GLIBC_2.17 + 598: 00000000000dffd0 64 FUNC WEAK DEFAULT 12 __connect@@GLIBC_2.17 + 599: 0000000000038dd4 24 FUNC GLOBAL DEFAULT 12 quick_exit@@GLIBC_2.17 + 600: 00000000000fb540 448 FUNC GLOBAL DEFAULT 12 getnetbyname@@GLIBC_2.17 + 601: 00000000000d6ef0 16 FUNC GLOBAL DEFAULT 12 mkstemp@@GLIBC_2.17 + 602: 00000000000d1320 24 FUNC WEAK DEFAULT 12 flock@@GLIBC_2.17 + 603: 00000000000d04e8 112 FUNC GLOBAL DEFAULT 12 statvfs@@GLIBC_2.17 + 604: 00000000000de680 500 FUNC WEAK DEFAULT 12 error_at_line@@GLIBC_2.17 + 605: 0000000000073da0 336 FUNC GLOBAL DEFAULT 12 rewind@@GLIBC_2.17 + 606: 000000000008c628 2104 FUNC WEAK DEFAULT 12 strcoll_l@@GLIBC_2.17 + 607: 0000000000038e1c 12 FUNC GLOBAL DEFAULT 12 llabs@@GLIBC_2.17 + 608: 0000000000184978 24 OBJECT GLOBAL DEFAULT 34 _null_auth@@GLIBC_2.17 + 609: 000000000009abf8 12 FUNC WEAK DEFAULT 12 localtime_r@@GLIBC_2.17 + 610: 000000000008e504 92 FUNC GLOBAL DEFAULT 12 wcscspn@@GLIBC_2.17 + 611: 00000000000d5c8c 372 FUNC GLOBAL DEFAULT 12 vtimes@@GLIBC_2.17 + 612: 0000000000088a68 200 FUNC GLOBAL DEFAULT 12 __stpncpy@@GLIBC_2.17 + 613: 00000000000387d4 28 FUNC WEAK DEFAULT 12 __libc_secure_getenv@@GLIBC_PRIVATE + 614: 000000000003441c 40 FUNC WEAK DEFAULT 12 copysign@@GLIBC_2.17 + 615: 0000000000105584 144 FUNC GLOBAL DEFAULT 12 inet6_opt_finish@@GLIBC_2.17 + 616: 00000000000aa9a0 60 FUNC WEAK DEFAULT 12 __nanosleep@@GLIBC_2.17 + 617: 0000000000034fa0 8 FUNC GLOBAL DEFAULT 12 setjmp@@GLIBC_2.17 + 618: 0000000000034738 124 FUNC WEAK DEFAULT 12 modff@@GLIBC_2.17 + 619: 00000000000e2254 180 FUNC WEAK DEFAULT 12 iswlower@@GLIBC_2.17 + 620: 00000000000d4d50 272 FUNC GLOBAL DEFAULT 12 __poll@@GLIBC_2.17 + 621: 000000000002e930 28 FUNC GLOBAL DEFAULT 12 isspace@@GLIBC_2.17 + 622: 000000000003a578 24 FUNC GLOBAL DEFAULT 12 strtod@@GLIBC_2.17 + 623: 0000000000067838 100 FUNC GLOBAL DEFAULT 12 tmpnam_r@@GLIBC_2.17 + 624: 00000000000f87ec 28 FUNC GLOBAL DEFAULT 12 __confstr_chk@@GLIBC_2.17 + 625: 00000000000d52e4 204 FUNC GLOBAL DEFAULT 12 fallocate@@GLIBC_2.17 + 626: 00000000000e32a0 176 FUNC GLOBAL DEFAULT 12 __wctype_l@@GLIBC_2.17 + 627: 000000000011cfe4 4 FUNC GLOBAL DEFAULT 12 setutxent@@GLIBC_2.17 + 628: 000000000006dc68 472 FUNC GLOBAL DEFAULT 12 fgetws@@GLIBC_2.17 + 629: 0000000000090180 12 FUNC WEAK DEFAULT 12 __wcstoll_l@@GLIBC_2.17 + 630: 000000000002ea8c 16 FUNC GLOBAL DEFAULT 12 __isalpha_l@@GLIBC_2.17 + 631: 000000000003a54c 24 FUNC GLOBAL DEFAULT 12 strtof@@GLIBC_2.17 + 632: 00000000000e2cd8 156 FUNC WEAK DEFAULT 12 iswdigit_l@@GLIBC_2.17 + 633: 00000000000f7a90 272 FUNC GLOBAL DEFAULT 12 __wcsncat_chk@@GLIBC_2.17 + 634: 000000000009abe8 16 FUNC GLOBAL DEFAULT 12 gmtime@@GLIBC_2.17 + 635: 000000000002e42c 136 FUNC GLOBAL DEFAULT 12 __uselocale@@GLIBC_2.17 + 636: 000000000002db38 28 FUNC WEAK DEFAULT 12 __ctype_get_mb_cur_max@@GLIBC_2.17 + 637: 0000000000088958 168 FUNC GLOBAL DEFAULT 12 ffs@@GLIBC_2.17 + 638: 00000000000e2d74 156 FUNC GLOBAL DEFAULT 12 __iswlower_l@@GLIBC_2.17 + 639: 00000000001086d8 68 FUNC GLOBAL DEFAULT 12 xdr_opaque_auth@@GLIBC_2.17 + 640: 0000000000034a3c 264 FUNC WEAK DEFAULT 12 modfl@@GLIBC_2.17 + 641: 000000000008b80c 440 FUNC GLOBAL DEFAULT 12 envz_add@@GLIBC_2.17 + 642: 00000000000e5538 596 FUNC GLOBAL DEFAULT 12 putsgent@@GLIBC_2.17 + 643: 0000000000087b28 204 FUNC GLOBAL DEFAULT 12 strtok@@GLIBC_2.17 + 644: 000000000006ad30 8 FUNC GLOBAL DEFAULT 12 _IO_fopen@@GLIBC_2.17 + 645: 000000000011c9d8 40 FUNC WEAK DEFAULT 12 getpt@@GLIBC_2.17 + 646: 00000000000a93f0 220 FUNC GLOBAL DEFAULT 12 endpwent@@GLIBC_2.17 + 647: 0000000000039bec 24 FUNC GLOBAL DEFAULT 12 strtol@@GLIBC_2.17 + 648: 000000000003642c 164 FUNC WEAK DEFAULT 12 sigqueue@@GLIBC_2.17 + 649: 00000000000d43f0 256 FUNC GLOBAL DEFAULT 12 fts_close@@GLIBC_2.17 + 650: 00000000000d23a8 32 FUNC WEAK DEFAULT 12 isatty@@GLIBC_2.17 + 651: 00000000000d7b10 180 FUNC WEAK DEFAULT 12 setmntent@@GLIBC_2.17 + 652: 000000000010140c 296 FUNC GLOBAL DEFAULT 12 endnetgrent@@GLIBC_2.17 + 653: 00000000000d1df8 80 FUNC WEAK DEFAULT 12 lchown@@GLIBC_2.17 + 654: 00000000000da904 60 FUNC WEAK DEFAULT 12 mmap@@GLIBC_2.17 + 655: 0000000000076d88 68 FUNC GLOBAL DEFAULT 12 _IO_file_read@@GLIBC_2.17 + 656: 00000000000a8ce4 248 FUNC WEAK DEFAULT 12 getpw@@GLIBC_2.17 + 657: 0000000000105250 472 FUNC GLOBAL DEFAULT 12 setsourcefilter@@GLIBC_2.17 + 658: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 659: 00000000000e48f8 632 FUNC WEAK DEFAULT 12 fgetspent_r@@GLIBC_2.17 + 660: 00000000000c6900 24 FUNC WEAK DEFAULT 12 sched_yield@@GLIBC_2.17 + 661: 00000000000af5c4 228 FUNC WEAK DEFAULT 12 glob_pattern_p@@GLIBC_2.17 + 662: 0000000000039bec 24 FUNC WEAK DEFAULT 12 strtoq@@GLIBC_2.17 + 663: 000000000008e018 76 FUNC GLOBAL DEFAULT 12 __strsep_1c@@GLIBC_2.17 + 664: 00000000000f4f20 92 FUNC GLOBAL DEFAULT 12 __clock_getcpuclockid@@GLIBC_PRIVATE + 665: 000000000009914c 144 FUNC WEAK DEFAULT 12 wcsncasecmp@@GLIBC_2.17 + 666: 000000000009ab74 44 FUNC GLOBAL DEFAULT 12 ctime_r@@GLIBC_2.17 + 667: 0000000000038700 212 FUNC WEAK DEFAULT 12 clearenv@@GLIBC_2.17 + 668: 00000000000a7db0 992 FUNC GLOBAL DEFAULT 12 getgrnam_r@@GLIBC_2.17 + 669: 0000000000115bf8 220 FUNC GLOBAL DEFAULT 12 xdr_u_quad_t@@GLIBC_2.17 + 670: 00000000000e32a0 176 FUNC WEAK DEFAULT 12 wctype_l@@GLIBC_2.17 + 671: 00000000000d0558 112 FUNC GLOBAL DEFAULT 12 fstatvfs@@GLIBC_2.17 + 672: 00000000000356d4 92 FUNC WEAK DEFAULT 12 sigblock@@GLIBC_2.17 + 673: 00000000000e09dc 44 FUNC GLOBAL DEFAULT 12 __libc_sa_len@@GLIBC_2.17 + 674: 0000000000185310 8 OBJECT GLOBAL DEFAULT 34 __key_encryptsession_pk_LOCAL@@GLIBC_2.17 + 675: 0000000000086020 96 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_allocate@@GLIBC_PRIVATE + 676: 00000000000ec4e4 68 FUNC GLOBAL DEFAULT 12 pthread_attr_setscope@@GLIBC_2.17 + 677: 00000000000e3118 156 FUNC WEAK DEFAULT 12 iswxdigit_l@@GLIBC_2.17 + 678: 0000000000072fcc 244 FUNC WEAK DEFAULT 12 feof@@GLIBC_2.17 + 679: 0000000000113c40 572 FUNC GLOBAL DEFAULT 12 svcudp_create@@GLIBC_2.17 + 680: 000000000008aabc 352 FUNC WEAK DEFAULT 12 strchrnul@@GLIBC_2.17 + 681: 00000000000d6ea0 24 FUNC WEAK DEFAULT 12 swapoff@@GLIBC_2.17 + 682: 00000000000d9394 1488 FUNC GLOBAL DEFAULT 12 syslog@@GLIBC_2.17 + 683: 00000000000cf940 8 FUNC GLOBAL DEFAULT 12 posix_spawnattr_destroy@@GLIBC_2.17 + 684: 000000000003a52c 12 FUNC GLOBAL DEFAULT 12 __strtoul_l@@GLIBC_2.17 + 685: 00000000000d0e04 296 FUNC WEAK DEFAULT 12 eaccess@@GLIBC_2.17 + 686: 000000000006b374 436 FUNC GLOBAL DEFAULT 12 fsetpos@@GLIBC_2.17 + 687: 00000000000f7860 152 FUNC GLOBAL DEFAULT 12 __fread_unlocked_chk@@GLIBC_2.17 + 688: 00000000000cf5e0 68 FUNC WEAK DEFAULT 12 pread64@@GLIBC_2.17 + 689: 000000000010496c 356 FUNC GLOBAL DEFAULT 12 inet6_option_alloc@@GLIBC_2.17 + 690: 000000000009e510 64 FUNC GLOBAL DEFAULT 12 dysize@@GLIBC_2.17 + 691: 00000000000d244c 56 FUNC WEAK DEFAULT 12 symlink@@GLIBC_2.17 + 692: 00000000000e34ac 228 FUNC GLOBAL DEFAULT 12 getspent@@GLIBC_2.17 + 693: 000000000006f5fc 116 FUNC GLOBAL DEFAULT 12 _IO_wdefault_uflow@@GLIBC_2.17 + 694: 00000000000ec2c4 68 FUNC GLOBAL DEFAULT 12 pthread_attr_setdetachstate@@GLIBC_2.17 + 695: 00000000000df320 24 FUNC GLOBAL DEFAULT 12 fgetxattr@@GLIBC_2.17 + 696: 0000000000039554 260 FUNC WEAK DEFAULT 12 srandom_r@@GLIBC_2.17 + 697: 00000000000d8630 24 FUNC GLOBAL DEFAULT 12 truncate@@GLIBC_2.17 + 698: 000000000002e8f8 28 FUNC GLOBAL DEFAULT 12 isprint@@GLIBC_2.17 + 699: 00000000000816b0 696 FUNC GLOBAL DEFAULT 12 __libc_calloc@@GLIBC_2.17 + 700: 00000000000d4f38 28 FUNC GLOBAL DEFAULT 12 posix_fadvise@@GLIBC_2.17 + 701: 0000000000088ca8 44 FUNC WEAK DEFAULT 12 memccpy@@GLIBC_2.17 + 702: 00000000000df1ac 336 FUNC GLOBAL DEFAULT 12 getloadavg@@GLIBC_2.17 + 703: 00000000000aae48 568 FUNC GLOBAL DEFAULT 12 execle@@GLIBC_2.17 + 704: 00000000000a1bd8 20 FUNC GLOBAL DEFAULT 12 wcsftime@@GLIBC_2.17 + 705: 0000000000114808 8 FUNC GLOBAL DEFAULT 12 xdr_void@@GLIBC_2.17 + 706: 0000000000038e4c 36 FUNC GLOBAL DEFAULT 12 ldiv@@GLIBC_2.17 + 707: 00000000000f2bd0 344 FUNC GLOBAL DEFAULT 12 __nss_configure_lookup@@GLIBC_2.17 + 708: 00000000000d5438 132 FUNC GLOBAL DEFAULT 12 cfsetispeed@@GLIBC_2.17 + 709: 00000000000fea34 12 FUNC GLOBAL DEFAULT 12 ether_ntoa@@GLIBC_2.17 + 710: 000000000010b4dc 104 FUNC GLOBAL DEFAULT 12 xdr_key_netstarg@@GLIBC_2.17 + 711: 00000000000dfcd0 68 FUNC GLOBAL DEFAULT 12 tee@@GLIBC_2.17 + 712: 0000000000073794 360 FUNC WEAK DEFAULT 12 fgetc@@GLIBC_2.17 + 713: 000000000004fc40 288 FUNC GLOBAL DEFAULT 12 parse_printf_format@@GLIBC_2.17 + 714: 0000000000089d60 228 FUNC GLOBAL DEFAULT 12 strfry@@GLIBC_2.17 + 715: 000000000006d5ac 184 FUNC GLOBAL DEFAULT 12 _IO_vsprintf@@GLIBC_2.17 + 716: 00000000000d6ad8 72 FUNC GLOBAL DEFAULT 12 reboot@@GLIBC_2.17 + 717: 0000000000102280 744 FUNC GLOBAL DEFAULT 12 getaliasbyname_r@@GLIBC_2.17 + 718: 00000000000398e4 36 FUNC GLOBAL DEFAULT 12 jrand48@@GLIBC_2.17 + 719: 00000000000fa70c 1184 FUNC GLOBAL DEFAULT 12 gethostbyname_r@@GLIBC_2.17 + 720: 00000000000ab2c8 544 FUNC GLOBAL DEFAULT 12 execlp@@GLIBC_2.17 + 721: 000000000009a5d4 24 FUNC GLOBAL DEFAULT 12 c16rtomb@@GLIBC_2.17 + 722: 0000000000089d2c 52 FUNC GLOBAL DEFAULT 12 swab@@GLIBC_2.17 + 723: 000000000006801c 72 FUNC GLOBAL DEFAULT 12 _IO_funlockfile@@GLIBC_2.17 + 724: 0000000000067ef4 136 FUNC GLOBAL DEFAULT 12 _IO_flockfile@@GLIBC_2.17 + 725: 000000000008e064 108 FUNC GLOBAL DEFAULT 12 __strsep_2c@@GLIBC_2.17 + 726: 00000000000a6194 184 FUNC GLOBAL DEFAULT 12 seekdir@@GLIBC_2.17 + 727: 00000000000d6eb8 56 FUNC GLOBAL DEFAULT 12 __mktemp@@GLIBC_PRIVATE + 728: 000000000002ea60 12 FUNC WEAK DEFAULT 12 __isascii_l@@GLIBC_2.17 + 729: 000000000002ea6c 16 FUNC WEAK DEFAULT 12 isblank_l@@GLIBC_2.17 + 730: 00000000000a6278 20 FUNC WEAK DEFAULT 12 alphasort64@@GLIBC_2.17 + 731: 0000000000111cb8 456 FUNC GLOBAL DEFAULT 12 pmap_getport@@GLIBC_2.17 + 732: 00000000000449cc 360 FUNC WEAK DEFAULT 12 makecontext@@GLIBC_2.17 + 733: 00000000000d6a80 56 FUNC GLOBAL DEFAULT 12 fdatasync@@GLIBC_2.17 + 734: 000000000004fb00 316 FUNC WEAK DEFAULT 12 register_printf_specifier@@GLIBC_2.17 + 735: 000000000010c034 524 FUNC GLOBAL DEFAULT 12 authdes_getucred@@GLIBC_2.17 + 736: 00000000000d8630 24 FUNC WEAK DEFAULT 12 truncate64@@GLIBC_2.17 + 737: 000000000002eaec 16 FUNC GLOBAL DEFAULT 12 __ispunct_l@@GLIBC_2.17 + 738: 00000000000e2e10 156 FUNC GLOBAL DEFAULT 12 __iswgraph_l@@GLIBC_2.17 + 739: 000000000004483c 8 FUNC GLOBAL DEFAULT 12 strtoumax@@GLIBC_2.17 + 740: 00000000000e8e1c 492 FUNC WEAK DEFAULT 12 argp_failure@@GLIBC_2.17 + 741: 0000000000088b30 96 FUNC GLOBAL DEFAULT 12 __strcasecmp@@GLIBC_2.17 + 742: 000000000006aa60 472 FUNC WEAK DEFAULT 12 fgets@@GLIBC_2.17 + 743: 000000000005fbd0 48 FUNC GLOBAL DEFAULT 12 __vfscanf@@GLIBC_2.17 + 744: 00000000000d0cc8 56 FUNC GLOBAL DEFAULT 12 __openat64_2@@GLIBC_2.17 + 745: 00000000000e2900 112 FUNC GLOBAL DEFAULT 12 __iswctype@@GLIBC_2.17 + 746: 00000000000cf9a0 36 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setflags@@GLIBC_2.17 + 747: 00000000000fb9ac 312 FUNC GLOBAL DEFAULT 12 getnetent_r@@GLIBC_2.17 + 748: 00000000000f510c 168 FUNC WEAK DEFAULT 12 clock_nanosleep@@GLIBC_2.17 + 749: 00000000000c69f8 416 FUNC GLOBAL DEFAULT 12 sched_setaffinity@@GLIBC_2.17 + 750: 00000000000741e0 60 FUNC WEAK DEFAULT 12 vscanf@@GLIBC_2.17 + 751: 00000000000a8ffc 396 FUNC GLOBAL DEFAULT 12 getpwnam@@GLIBC_2.17 + 752: 00000000001047d4 408 FUNC GLOBAL DEFAULT 12 inet6_option_append@@GLIBC_2.17 + 753: 00000000000ab9f0 12 FUNC WEAK DEFAULT 12 getppid@@GLIBC_2.17 + 754: 00000000000816b0 696 FUNC WEAK DEFAULT 12 calloc@@GLIBC_2.17 + 755: 0000000000070654 136 FUNC GLOBAL DEFAULT 12 _IO_unsave_wmarkers@@GLIBC_2.17 + 756: 0000000000138d90 18 OBJECT GLOBAL DEFAULT 15 _nl_default_dirname@@GLIBC_2.17 + 757: 000000000011a7f4 28 FUNC GLOBAL DEFAULT 12 getmsg@@GLIBC_2.17 + 758: 000000000011d1c8 852 FUNC GLOBAL DEFAULT 12 _dl_addr@@GLIBC_PRIVATE + 759: 00000000000da9a0 64 FUNC WEAK DEFAULT 12 msync@@GLIBC_2.17 + 760: 0000000000067ebc 56 FUNC GLOBAL DEFAULT 12 renameat@@GLIBC_2.17 + 761: 0000000000079afc 52 FUNC GLOBAL DEFAULT 12 _IO_init@@GLIBC_2.17 + 762: 00000000000346b8 16 FUNC GLOBAL DEFAULT 12 __signbit@@GLIBC_2.17 + 763: 00000000000d51a0 96 FUNC GLOBAL DEFAULT 12 futimens@@GLIBC_2.17 + 764: 000000000009a8a4 284 FUNC WEAK DEFAULT 12 asctime_r@@GLIBC_2.17 + 765: 0000000000086784 252 FUNC GLOBAL DEFAULT 12 strlen@@GLIBC_2.17 + 766: 000000000002e334 248 FUNC WEAK DEFAULT 12 freelocale@@GLIBC_2.17 + 767: 00000000000f7ba0 28 FUNC GLOBAL DEFAULT 12 __wmemset_chk@@GLIBC_2.17 + 768: 0000000000039184 200 FUNC WEAK DEFAULT 12 initstate@@GLIBC_2.17 + 769: 000000000008e494 28 FUNC GLOBAL DEFAULT 12 wcschr@@GLIBC_2.17 + 770: 000000000002e968 28 FUNC GLOBAL DEFAULT 12 isxdigit@@GLIBC_2.17 + 771: 000000000009a388 588 FUNC GLOBAL DEFAULT 12 mbrtoc16@@GLIBC_2.17 + 772: 000000000006d44c 352 FUNC WEAK DEFAULT 12 ungetc@@GLIBC_2.17 + 773: 00000000000774f0 96 FUNC GLOBAL DEFAULT 12 _IO_file_init@@GLIBC_2.17 + 774: 000000000006f6e8 496 FUNC GLOBAL DEFAULT 12 __wuflow@@GLIBC_2.17 + 775: 00000000000d1338 264 FUNC GLOBAL DEFAULT 12 lockf@@GLIBC_2.17 + 776: 00000000000fe874 448 FUNC GLOBAL DEFAULT 12 ether_line@@GLIBC_2.17 + 777: 000000000010a5d4 164 FUNC GLOBAL DEFAULT 12 xdr_authdes_cred@@GLIBC_2.17 + 778: 00000000000f5018 120 FUNC GLOBAL DEFAULT 12 __clock_gettime@@GLIBC_PRIVATE + 779: 00000000000db110 52 FUNC GLOBAL DEFAULT 12 qecvt@@GLIBC_2.17 + 780: 00000000000e2900 112 FUNC WEAK DEFAULT 12 iswctype@@GLIBC_2.17 + 781: 000000000008f158 48 FUNC GLOBAL DEFAULT 12 __mbrlen@@GLIBC_2.17 + 782: 00000000000676fc 168 FUNC GLOBAL DEFAULT 12 tmpfile@@GLIBC_2.17 + 783: 00000000001011a8 116 FUNC GLOBAL DEFAULT 12 __internal_setnetgrent@@GLIBC_PRIVATE + 784: 0000000000115ea4 152 FUNC GLOBAL DEFAULT 12 xdr_int8_t@@GLIBC_2.17 + 785: 000000000008b5c8 176 FUNC GLOBAL DEFAULT 12 envz_entry@@GLIBC_2.17 + 786: 00000000000dfbc0 24 FUNC GLOBAL DEFAULT 12 pivot_root@@GLIBC_2.17 + 787: 00000000000e1ac4 1032 FUNC WEAK DEFAULT 12 sprofil@@GLIBC_2.17 + 788: 00000000000e322c 116 FUNC GLOBAL DEFAULT 12 __towupper_l@@GLIBC_2.17 + 789: 000000000010036c 1288 FUNC GLOBAL DEFAULT 12 rexec_af@@GLIBC_2.17 + 790: 0000000000181158 224 OBJECT GLOBAL DEFAULT 33 _IO_2_1_stdout_@@GLIBC_2.17 + 791: 0000000000112174 228 FUNC GLOBAL DEFAULT 12 xprt_unregister@@GLIBC_2.17 + 792: 000000000002db54 1524 FUNC WEAK DEFAULT 12 newlocale@@GLIBC_2.17 + 793: 0000000000106ce8 140 FUNC GLOBAL DEFAULT 12 xdr_authunix_parms@@GLIBC_2.17 + 794: 00000000000dc1a0 880 FUNC WEAK DEFAULT 12 tsearch@@GLIBC_2.17 + 795: 00000000001020f4 396 FUNC GLOBAL DEFAULT 12 getaliasbyname@@GLIBC_2.17 + 796: 00000000001125f8 88 FUNC GLOBAL DEFAULT 12 svcerr_progvers@@GLIBC_2.17 + 797: 000000000002eafc 16 FUNC WEAK DEFAULT 12 isspace_l@@GLIBC_2.17 + 798: 00000000001057a0 56 FUNC GLOBAL DEFAULT 12 inet6_opt_get_val@@GLIBC_2.17 + 799: 000000000008b00c 264 FUNC WEAK DEFAULT 12 argz_insert@@GLIBC_2.17 + 800: 00000000000351ec 148 FUNC WEAK DEFAULT 12 gsignal@@GLIBC_2.17 + 801: 00000000000fa258 1204 FUNC GLOBAL DEFAULT 12 gethostbyname2_r@@GLIBC_2.17 + 802: 0000000000038b5c 116 FUNC GLOBAL DEFAULT 12 __cxa_atexit@@GLIBC_2.17 + 803: 00000000000cf6e4 28 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_init@@GLIBC_2.17 + 804: 0000000000074c7c 16 FUNC GLOBAL DEFAULT 12 __fwriting@@GLIBC_2.17 + 805: 00000000000dfbe0 24 FUNC WEAK DEFAULT 12 prctl@@GLIBC_2.17 + 806: 00000000000da73c 28 FUNC GLOBAL DEFAULT 12 setlogmask@@GLIBC_2.17 + 807: 00000000000833cc 528 FUNC WEAK DEFAULT 12 malloc_stats@@GLIBC_2.17 + 808: 00000000000e344c 96 FUNC GLOBAL DEFAULT 12 __towctrans_l@@GLIBC_2.17 + 809: 000000000008e0d0 128 FUNC GLOBAL DEFAULT 12 __strsep_3c@@GLIBC_2.17 + 810: 00000000001150c4 152 FUNC GLOBAL DEFAULT 12 xdr_enum@@GLIBC_2.17 + 811: 000000000017e4d0 40 OBJECT GLOBAL DEFAULT 29 h_errlist@@GLIBC_2.17 + 812: 00000000000dfd20 24 FUNC GLOBAL DEFAULT 12 unshare@@GLIBC_2.17 + 813: 00000000000759d0 116 FUNC GLOBAL DEFAULT 12 fread_unlocked@@GLIBC_2.17 + 814: 00000000000d5f38 84 FUNC WEAK DEFAULT 12 brk@@GLIBC_2.17 + 815: 00000000000e0240 224 FUNC WEAK DEFAULT 12 send@@GLIBC_2.17 + 816: 000000000002eadc 16 FUNC WEAK DEFAULT 12 isprint_l@@GLIBC_2.17 + 817: 000000000009e4b0 24 FUNC WEAK DEFAULT 12 setitimer@@GLIBC_2.17 + 818: 00000000000e2a0c 96 FUNC GLOBAL DEFAULT 12 __towctrans@@GLIBC_2.17 + 819: 000000000006885c 156 FUNC GLOBAL DEFAULT 12 __isoc99_vsscanf@@GLIBC_2.17 + 820: 000000000017e010 520 OBJECT GLOBAL DEFAULT 29 sys_sigabbrev@@GLIBC_2.17 + 821: 0000000000044910 168 FUNC WEAK DEFAULT 12 setcontext@@GLIBC_2.17 + 822: 00000000000e3080 152 FUNC WEAK DEFAULT 12 iswupper_l@@GLIBC_2.17 + 823: 00000000000df8b8 64 FUNC GLOBAL DEFAULT 12 signalfd@@GLIBC_2.17 + 824: 0000000000035b9c 72 FUNC GLOBAL DEFAULT 12 sigemptyset@@GLIBC_2.17 + 825: 0000000000104ad0 228 FUNC GLOBAL DEFAULT 12 inet6_option_next@@GLIBC_2.17 + 826: 000000000011dee4 12 FUNC GLOBAL DEFAULT 12 _dl_sym@@GLIBC_PRIVATE + 827: 00000000000da480 480 FUNC GLOBAL DEFAULT 12 openlog@@GLIBC_2.17 + 828: 00000000000c9d0c 2372 FUNC GLOBAL DEFAULT 12 getaddrinfo@@GLIBC_2.17 + 829: 000000000007a4f0 288 FUNC GLOBAL DEFAULT 12 _IO_init_marker@@GLIBC_2.17 + 830: 0000000000075794 44 FUNC GLOBAL DEFAULT 12 getchar_unlocked@@GLIBC_2.17 + 831: 000000000011e404 92 FUNC GLOBAL DEFAULT 12 __res_maybe_init@GLIBC_PRIVATE + 832: 000000000008845c 372 FUNC GLOBAL DEFAULT 12 memset@@GLIBC_2.17 + 833: 00000000000deff0 220 FUNC GLOBAL DEFAULT 12 dirname@@GLIBC_2.17 + 834: 0000000000022a8c 12 FUNC GLOBAL DEFAULT 12 __gconv_get_alias_db@@GLIBC_PRIVATE + 835: 000000000002d970 348 FUNC GLOBAL DEFAULT 12 localeconv@@GLIBC_2.17 + 836: 00000000000d53b0 16 FUNC GLOBAL DEFAULT 12 cfgetospeed@@GLIBC_2.17 + 837: 00000000000d6134 200 FUNC WEAK DEFAULT 12 writev@@GLIBC_2.17 + 838: 0000000000079504 716 FUNC GLOBAL DEFAULT 12 _IO_default_xsgetn@@GLIBC_2.17 + 839: 000000000002e850 28 FUNC GLOBAL DEFAULT 12 isalnum@@GLIBC_2.17 + 840: 000000000011b0b8 168 FUNC WEAK DEFAULT 12 setutent@@GLIBC_2.17 + 841: 0000000000108814 280 FUNC GLOBAL DEFAULT 12 _seterr_reply@@GLIBC_2.17 + 842: 00000000000701a8 152 FUNC GLOBAL DEFAULT 12 _IO_switch_to_wget_mode@@GLIBC_2.17 + 843: 0000000000105868 68 FUNC GLOBAL DEFAULT 12 inet6_rth_add@@GLIBC_2.17 + 844: 000000000007576c 40 FUNC WEAK DEFAULT 12 fgetc_unlocked@@GLIBC_2.17 + 845: 000000000006ebcc 128 FUNC GLOBAL DEFAULT 12 swprintf@@GLIBC_2.17 + 846: 00000000000738fc 392 FUNC GLOBAL DEFAULT 12 getchar@@GLIBC_2.17 + 847: 00000000000ddde4 440 FUNC GLOBAL DEFAULT 12 warn@@GLIBC_2.17 + 848: 000000000011b38c 92 FUNC WEAK DEFAULT 12 getutid@@GLIBC_2.17 + 849: 000000000002aef8 16 FUNC GLOBAL DEFAULT 12 __gconv_get_cache@@GLIBC_PRIVATE + 850: 00000000000ad890 7252 FUNC GLOBAL DEFAULT 12 glob@@GLIBC_2.17 + 851: 00000000000875d8 1360 FUNC GLOBAL DEFAULT 12 strstr@@GLIBC_2.17 + 852: 00000000000e0be0 24 FUNC GLOBAL DEFAULT 12 semtimedop@@GLIBC_2.17 + 853: 000000000008fbb0 180 FUNC WEAK DEFAULT 12 wcsnlen@@GLIBC_2.17 + 854: 000000000008633c 88 FUNC GLOBAL DEFAULT 12 strcspn@@GLIBC_2.17 + 855: 000000000008fd3c 20 FUNC GLOBAL DEFAULT 12 __wcstof_internal@@GLIBC_2.17 + 856: 000000000002e8c0 28 FUNC GLOBAL DEFAULT 12 islower@@GLIBC_2.17 + 857: 00000000000d58f0 56 FUNC GLOBAL DEFAULT 12 tcsendbreak@@GLIBC_2.17 + 858: 00000000000a624c 8 FUNC GLOBAL DEFAULT 12 telldir@@GLIBC_2.17 + 859: 000000000003cd10 12 FUNC GLOBAL DEFAULT 12 __strtof_l@@GLIBC_2.17 + 860: 00000000000d5148 88 FUNC GLOBAL DEFAULT 12 utimensat@@GLIBC_2.17 + 861: 00000000000daab8 188 FUNC GLOBAL DEFAULT 12 fcvt@@GLIBC_2.17 + 862: 000000000006d014 452 FUNC GLOBAL DEFAULT 12 _IO_setbuffer@@GLIBC_2.17 + 863: 000000000007a908 4 FUNC GLOBAL DEFAULT 12 _IO_iter_file@@GLIBC_2.17 + 864: 00000000000d25ac 60 FUNC WEAK DEFAULT 12 rmdir@@GLIBC_2.17 + 865: 00000000000219d8 20 FUNC GLOBAL DEFAULT 12 __errno_location@@GLIBC_2.17 + 866: 00000000000d5588 400 FUNC GLOBAL DEFAULT 12 tcsetattr@@GLIBC_2.17 + 867: 000000000003a0d4 12 FUNC WEAK DEFAULT 12 __strtoll_l@@GLIBC_2.17 + 868: 00000000000dff90 24 FUNC WEAK DEFAULT 12 bind@@GLIBC_2.17 + 869: 0000000000073630 356 FUNC GLOBAL DEFAULT 12 fseek@@GLIBC_2.17 + 870: 00000000001095c4 140 FUNC GLOBAL DEFAULT 12 xdr_float@@GLIBC_2.17 + 871: 00000000000d15c0 24 FUNC WEAK DEFAULT 12 chdir@@GLIBC_2.17 + 872: 00000000000d0994 328 FUNC WEAK DEFAULT 12 open64@@GLIBC_2.17 + 873: 00000000000c5434 460 FUNC GLOBAL DEFAULT 12 confstr@@GLIBC_2.17 + 874: 00000000000854f8 148 FUNC GLOBAL DEFAULT 12 muntrace@@GLIBC_2.17 + 875: 00000000000d0d20 64 FUNC WEAK DEFAULT 12 read@@GLIBC_2.17 + 876: 0000000000105984 28 FUNC GLOBAL DEFAULT 12 inet6_rth_segments@@GLIBC_2.17 + 877: 0000000000087e60 1144 FUNC GLOBAL DEFAULT 12 memcmp@@GLIBC_2.17 + 878: 00000000000e4efc 228 FUNC GLOBAL DEFAULT 12 getsgent@@GLIBC_2.17 + 879: 000000000006daa4 400 FUNC GLOBAL DEFAULT 12 getwchar@@GLIBC_2.17 + 880: 00000000000d662c 16 FUNC WEAK DEFAULT 12 getpagesize@@GLIBC_2.17 + 881: 00000000001029e4 2228 FUNC GLOBAL DEFAULT 12 getnameinfo@@GLIBC_2.17 + 882: 0000000000116564 192 FUNC GLOBAL DEFAULT 12 xdr_sizeof@@GLIBC_2.17 + 883: 000000000002f0ac 8 FUNC WEAK DEFAULT 12 dgettext@@GLIBC_2.17 + 884: 000000000006b528 432 FUNC GLOBAL DEFAULT 12 _IO_ftell@@GLIBC_2.17 + 885: 000000000006e5e8 384 FUNC GLOBAL DEFAULT 12 putwc@@GLIBC_2.17 + 886: 00000000000f7500 28 FUNC GLOBAL DEFAULT 12 __pread_chk@@GLIBC_2.17 + 887: 0000000000052200 132 FUNC GLOBAL DEFAULT 12 _IO_sprintf@@GLIBC_2.17 + 888: 000000000007a90c 144 FUNC GLOBAL DEFAULT 12 _IO_list_lock@@GLIBC_2.17 + 889: 0000000000107668 368 FUNC GLOBAL DEFAULT 12 getrpcport@@GLIBC_2.17 + 890: 00000000000d9ebc 128 FUNC GLOBAL DEFAULT 12 __syslog_chk@@GLIBC_2.17 + 891: 00000000000a77c8 220 FUNC GLOBAL DEFAULT 12 endgrent@@GLIBC_2.17 + 892: 000000000009a9c0 288 FUNC GLOBAL DEFAULT 12 asctime@@GLIBC_2.17 + 893: 00000000000864e0 72 FUNC WEAK DEFAULT 12 strndup@@GLIBC_2.17 + 894: 00000000000dfaa0 24 FUNC GLOBAL DEFAULT 12 init_module@@GLIBC_2.17 + 895: 00000000000daa40 24 FUNC GLOBAL DEFAULT 12 mlock@@GLIBC_2.17 + 896: 000000000010ec8c 96 FUNC GLOBAL DEFAULT 12 clnt_sperrno@@GLIBC_2.17 + 897: 000000000010a118 236 FUNC GLOBAL DEFAULT 12 xdrrec_skiprecord@@GLIBC_2.17 + 898: 000000000008c628 2104 FUNC GLOBAL DEFAULT 12 __strcoll_l@@GLIBC_2.17 + 899: 000000000008f738 572 FUNC WEAK DEFAULT 12 mbsnrtowcs@@GLIBC_2.17 + 900: 00000000000f1e14 152 FUNC GLOBAL DEFAULT 12 __gai_sigqueue@@GLIBC_PRIVATE + 901: 000000000002e9b8 52 FUNC GLOBAL DEFAULT 12 toupper@@GLIBC_2.17 + 902: 00000000000e6090 196 FUNC WEAK DEFAULT 12 sgetsgent_r@@GLIBC_2.17 + 903: 0000000000038f6c 188 FUNC GLOBAL DEFAULT 12 mbtowc@@GLIBC_2.17 + 904: 00000000000fc410 228 FUNC GLOBAL DEFAULT 12 setprotoent@@GLIBC_2.17 + 905: 00000000000ab98c 96 FUNC GLOBAL DEFAULT 12 __getpid@@GLIBC_2.17 + 906: 00000000000df8f8 56 FUNC GLOBAL DEFAULT 12 eventfd@@GLIBC_2.17 + 907: 00000000001118d0 276 FUNC GLOBAL DEFAULT 12 netname2user@@GLIBC_2.17 + 908: 000000000002ea30 40 FUNC GLOBAL DEFAULT 12 _toupper@@GLIBC_2.17 + 909: 00000000000e0050 24 FUNC WEAK DEFAULT 12 getsockopt@@GLIBC_2.17 + 910: 000000000011304c 496 FUNC GLOBAL DEFAULT 12 svctcp_create@@GLIBC_2.17 + 911: 000000000006b98c 788 FUNC WEAK DEFAULT 12 getdelim@@GLIBC_2.17 + 912: 000000000006f358 136 FUNC GLOBAL DEFAULT 12 _IO_wsetb@@GLIBC_2.17 + 913: 00000000000a6fdc 132 FUNC GLOBAL DEFAULT 12 setgroups@@GLIBC_2.17 + 914: 00000000000df480 24 FUNC GLOBAL DEFAULT 12 setxattr@@GLIBC_2.17 + 915: 000000000010ecec 152 FUNC GLOBAL DEFAULT 12 clnt_perrno@@GLIBC_2.17 + 916: 00000000000791c4 232 FUNC GLOBAL DEFAULT 12 _IO_doallocbuf@@GLIBC_2.17 + 917: 0000000000039950 120 FUNC WEAK DEFAULT 12 erand48_r@@GLIBC_2.17 + 918: 0000000000039870 40 FUNC GLOBAL DEFAULT 12 lrand48@@GLIBC_2.17 + 919: 000000000011ca00 712 FUNC GLOBAL DEFAULT 12 grantpt@@GLIBC_2.17 + 920: 0000000000182ce0 8 OBJECT WEAK DEFAULT 34 ___brk_addr@@GLIBC_2.17 + 921: 00000000000f05a8 416 FUNC GLOBAL DEFAULT 12 __resolv_context_get@@GLIBC_PRIVATE + 922: 00000000000d1e88 664 FUNC GLOBAL DEFAULT 12 ttyname@@GLIBC_2.17 + 923: 000000000008f188 448 FUNC WEAK DEFAULT 12 mbrtoc32@@GLIBC_2.17 + 924: 00000000000885d0 196 FUNC GLOBAL DEFAULT 12 mempcpy@@GLIBC_2.17 + 925: 00000000000ec23c 68 FUNC GLOBAL DEFAULT 12 pthread_attr_init@@GLIBC_2.17 + 926: 00000000000ed088 280 FUNC GLOBAL DEFAULT 12 herror@@GLIBC_2.17 + 927: 00000000000c6820 20 FUNC GLOBAL DEFAULT 12 getopt@@GLIBC_2.17 + 928: 000000000008fccc 24 FUNC GLOBAL DEFAULT 12 wcstoul@@GLIBC_2.17 + 929: 000000000011c598 332 FUNC WEAK DEFAULT 12 utmpname@@GLIBC_2.17 + 930: 00000000000f73f0 196 FUNC GLOBAL DEFAULT 12 __fgets_unlocked_chk@@GLIBC_2.17 + 931: 000000000011ae44 60 FUNC GLOBAL DEFAULT 12 getlogin_r@@GLIBC_2.17 + 932: 000000000002eaac 16 FUNC WEAK DEFAULT 12 isdigit_l@@GLIBC_2.17 + 933: 00000000000524a4 22524 FUNC WEAK DEFAULT 12 vfwprintf@@GLIBC_2.17 + 934: 000000000006cb60 568 FUNC GLOBAL DEFAULT 12 _IO_seekoff@@GLIBC_2.17 + 935: 00000000000d7b10 180 FUNC GLOBAL DEFAULT 12 __setmntent@@GLIBC_2.17 + 936: 00000000000db88c 320 FUNC GLOBAL DEFAULT 12 hcreate_r@@GLIBC_2.17 + 937: 00000000000d58d8 12 FUNC GLOBAL DEFAULT 12 tcflow@@GLIBC_2.17 + 938: 000000000008fccc 24 FUNC WEAK DEFAULT 12 wcstouq@@GLIBC_2.17 + 939: 000000000007004c 188 FUNC GLOBAL DEFAULT 12 _IO_wdoallocbuf@@GLIBC_2.17 + 940: 0000000000100874 8 FUNC GLOBAL DEFAULT 12 rexec@@GLIBC_2.17 + 941: 00000000000e0b40 24 FUNC WEAK DEFAULT 12 msgget@@GLIBC_2.17 + 942: 000000000006edc4 132 FUNC GLOBAL DEFAULT 12 fwscanf@@GLIBC_2.17 + 943: 0000000000115d74 152 FUNC GLOBAL DEFAULT 12 xdr_int16_t@@GLIBC_2.17 + 944: 0000000000184d60 8 OBJECT GLOBAL DEFAULT 34 _dl_open_hook@@GLIBC_PRIVATE + 945: 00000000000f7630 28 FUNC GLOBAL DEFAULT 12 __getcwd_chk@@GLIBC_2.17 + 946: 00000000000d0654 124 FUNC GLOBAL DEFAULT 12 fchmodat@@GLIBC_2.17 + 947: 000000000008bb40 144 FUNC GLOBAL DEFAULT 12 envz_strip@@GLIBC_2.17 + 948: 00000000000d14b8 124 FUNC WEAK DEFAULT 12 dup2@@GLIBC_2.17 + 949: 0000000000072ec8 260 FUNC GLOBAL DEFAULT 12 clearerr@@GLIBC_2.17 + 950: 00000000000d1540 24 FUNC WEAK DEFAULT 12 dup3@@GLIBC_2.17 + 951: 00000000000ff618 2324 FUNC GLOBAL DEFAULT 12 rcmd_af@@GLIBC_2.17 + 952: 0000000000182cc0 8 OBJECT WEAK DEFAULT 34 environ@@GLIBC_2.17 + 953: 00000000000aa7a4 332 FUNC WEAK DEFAULT 12 pause@@GLIBC_2.17 + 954: 0000000000111fec 56 FUNC GLOBAL DEFAULT 12 __rpc_thread_svc_max_pollfd@@GLIBC_2.17 + 955: 0000000000085a24 136 FUNC GLOBAL DEFAULT 12 __libc_scratch_buffer_grow@@GLIBC_PRIVATE + 956: 00000000000385a8 344 FUNC WEAK DEFAULT 12 unsetenv@@GLIBC_2.17 + 957: 00000000000c6834 20 FUNC GLOBAL DEFAULT 12 __posix_getopt@@GLIBC_2.17 + 958: 00000000000397c8 92 FUNC GLOBAL DEFAULT 12 rand_r@@GLIBC_2.17 + 959: 0000000000034404 24 FUNC GLOBAL DEFAULT 12 __finite@@GLIBC_2.17 + 960: 000000000007acf4 16 FUNC GLOBAL DEFAULT 12 _IO_str_init_static@@GLIBC_2.17 + 961: 000000000009b4d0 48 FUNC WEAK DEFAULT 12 timelocal@@GLIBC_2.17 + 962: 000000000011631c 276 FUNC GLOBAL DEFAULT 12 xdr_pointer@@GLIBC_2.17 + 963: 000000000008b170 256 FUNC WEAK DEFAULT 12 argz_add_sep@@GLIBC_2.17 + 964: 000000000008efd8 356 FUNC GLOBAL DEFAULT 12 wctob@@GLIBC_2.17 + 965: 0000000000035054 68 FUNC WEAK DEFAULT 12 longjmp@@GLIBC_2.17 + 966: 00000000000d02d0 88 FUNC GLOBAL DEFAULT 12 __fxstat64@@GLIBC_2.17 + 967: 000000000009ec10 24 FUNC GLOBAL DEFAULT 12 strptime@@GLIBC_2.17 + 968: 0000000000076dcc 716 FUNC GLOBAL DEFAULT 12 _IO_file_xsputn@@GLIBC_2.17 + 969: 000000000010e99c 716 FUNC GLOBAL DEFAULT 12 clnt_sperror@@GLIBC_2.17 + 970: 00000000000df9c0 24 FUNC GLOBAL DEFAULT 12 __adjtimex@@GLIBC_2.17 + 971: 00000000000f6a40 496 FUNC GLOBAL DEFAULT 12 __vprintf_chk@@GLIBC_2.17 + 972: 00000000000e0410 24 FUNC WEAK DEFAULT 12 shutdown@@GLIBC_2.17 + 973: 000000000011a864 28 FUNC GLOBAL DEFAULT 12 fattach@@GLIBC_2.17 + 974: 00000000000dfeb0 24 FUNC GLOBAL DEFAULT 12 setns@@GLIBC_2.17 + 975: 000000000007428c 200 FUNC WEAK DEFAULT 12 vsnprintf@@GLIBC_2.17 + 976: 0000000000034fb0 8 FUNC GLOBAL DEFAULT 12 _setjmp@@GLIBC_2.17 + 977: 00000000000d4d50 272 FUNC WEAK DEFAULT 12 poll@@GLIBC_2.17 + 978: 0000000000080edc 460 FUNC WEAK DEFAULT 12 malloc_get_state@@GLIBC_2.17 + 979: 000000000011a810 28 FUNC GLOBAL DEFAULT 12 getpmsg@@GLIBC_2.17 + 980: 000000000006be2c 8 FUNC GLOBAL DEFAULT 12 _IO_getline@@GLIBC_2.17 + 981: 000000000011cfb0 52 FUNC GLOBAL DEFAULT 12 ptsname@@GLIBC_2.17 + 982: 00000000000aad60 216 FUNC GLOBAL DEFAULT 12 fexecve@@GLIBC_2.17 + 983: 00000000000c45e4 284 FUNC WEAK DEFAULT 12 re_comp@@GLIBC_2.17 + 984: 000000000010ec68 36 FUNC GLOBAL DEFAULT 12 clnt_perror@@GLIBC_2.17 + 985: 00000000000db144 64 FUNC GLOBAL DEFAULT 12 qgcvt@@GLIBC_2.17 + 986: 0000000000112460 76 FUNC GLOBAL DEFAULT 12 svcerr_noproc@@GLIBC_2.17 + 987: 00000000000f6834 524 FUNC GLOBAL DEFAULT 12 __fprintf_chk@@GLIBC_2.17 + 988: 00000000000dfe70 64 FUNC GLOBAL DEFAULT 12 open_by_handle_at@@GLIBC_2.17 + 989: 000000000007a650 16 FUNC GLOBAL DEFAULT 12 _IO_marker_difference@@GLIBC_2.17 + 990: 000000000008fc8c 20 FUNC GLOBAL DEFAULT 12 __wcstol_internal@@GLIBC_2.17 + 991: 0000000000067408 132 FUNC GLOBAL DEFAULT 12 _IO_sscanf@@GLIBC_2.17 + 992: 0000000000088c4c 92 FUNC GLOBAL DEFAULT 12 __strncasecmp_l@@GLIBC_2.17 + 993: 0000000000035c54 80 FUNC GLOBAL DEFAULT 12 sigaddset@@GLIBC_2.17 + 994: 000000000009ab60 20 FUNC GLOBAL DEFAULT 12 ctime@@GLIBC_2.17 + 995: 00000000000e25d8 176 FUNC WEAK DEFAULT 12 iswupper@@GLIBC_2.17 + 996: 00000000001125b0 72 FUNC GLOBAL DEFAULT 12 svcerr_noprog@@GLIBC_2.17 + 997: 00000000000d52e4 204 FUNC GLOBAL DEFAULT 12 fallocate64@@GLIBC_2.17 + 998: 000000000007a8f8 8 FUNC GLOBAL DEFAULT 12 _IO_iter_end@@GLIBC_2.17 + 999: 00000000000a72d0 396 FUNC GLOBAL DEFAULT 12 getgrnam@@GLIBC_2.17 + 1000: 00000000000f7974 32 FUNC GLOBAL DEFAULT 12 __wmemcpy_chk@@GLIBC_2.17 + 1001: 00000000000df9c0 24 FUNC WEAK DEFAULT 12 adjtimex@@GLIBC_2.17 + 1002: 00000000000ec8d4 68 FUNC GLOBAL DEFAULT 12 pthread_mutex_unlock@@GLIBC_2.17 + 1003: 00000000000d6700 24 FUNC GLOBAL DEFAULT 12 sethostname@@GLIBC_2.17 + 1004: 0000000000079144 128 FUNC GLOBAL DEFAULT 12 _IO_setb@@GLIBC_2.17 + 1005: 00000000000cf5e0 68 FUNC WEAK DEFAULT 12 __pread64@@GLIBC_2.17 + 1006: 0000000000084864 236 FUNC GLOBAL DEFAULT 12 mcheck@@GLIBC_2.17 + 1007: 000000000002ea6c 16 FUNC GLOBAL DEFAULT 12 __isblank_l@@GLIBC_2.17 + 1008: 0000000000116220 252 FUNC GLOBAL DEFAULT 12 xdr_reference@@GLIBC_2.17 + 1009: 00000000000a9944 844 FUNC GLOBAL DEFAULT 12 getpwuid_r@@GLIBC_2.17 + 1010: 00000000000fde10 220 FUNC GLOBAL DEFAULT 12 endrpcent@@GLIBC_2.17 + 1011: 00000000001119e4 132 FUNC GLOBAL DEFAULT 12 netname2host@@GLIBC_2.17 + 1012: 00000000000f9568 528 FUNC GLOBAL DEFAULT 12 inet_network@@GLIBC_2.17 + 1013: 000000000002eb44 44 FUNC WEAK DEFAULT 12 isctype@@GLIBC_2.17 + 1014: 0000000000037ee0 272 FUNC GLOBAL DEFAULT 12 putenv@@GLIBC_2.17 + 1015: 0000000000097790 224 FUNC GLOBAL DEFAULT 12 wcswidth@@GLIBC_2.17 + 1016: 00000000001077d8 500 FUNC GLOBAL DEFAULT 12 pmap_set@@GLIBC_2.17 + 1017: 00000000000d1de0 24 FUNC WEAK DEFAULT 12 fchown@@GLIBC_2.17 + 1018: 00000000000ec5b0 68 FUNC GLOBAL DEFAULT 12 pthread_cond_broadcast@@GLIBC_2.17 + 1019: 0000000000078824 648 FUNC GLOBAL DEFAULT 12 _IO_link_in@@GLIBC_2.17 + 1020: 00000000000e0a08 76 FUNC GLOBAL DEFAULT 12 ftok@@GLIBC_2.17 + 1021: 00000000001153bc 380 FUNC GLOBAL DEFAULT 12 xdr_netobj@@GLIBC_2.17 + 1022: 00000000000339bc 364 FUNC GLOBAL DEFAULT 12 catopen@@GLIBC_2.17 + 1023: 0000000000090538 12 FUNC WEAK DEFAULT 12 __wcstoull_l@@GLIBC_2.17 + 1024: 000000000004fc3c 4 FUNC WEAK DEFAULT 12 register_printf_function@@GLIBC_2.17 + 1025: 0000000000034fc0 84 FUNC GLOBAL DEFAULT 12 __sigsetjmp@@GLIBC_2.17 + 1026: 0000000000099ae4 544 FUNC GLOBAL DEFAULT 12 __isoc99_wscanf@@GLIBC_2.17 + 1027: 00000000000d61fc 208 FUNC GLOBAL DEFAULT 12 preadv64@@GLIBC_2.17 + 1028: 00000000001815b0 8 OBJECT GLOBAL DEFAULT 33 stdout@@GLIBC_2.17 + 1029: 0000000000088958 168 FUNC GLOBAL DEFAULT 12 __ffs@@GLIBC_2.17 + 1030: 00000000000f948c 84 FUNC WEAK DEFAULT 12 inet_makeaddr@@GLIBC_2.17 + 1031: 00000000000d87ec 876 FUNC GLOBAL DEFAULT 12 getttyent@@GLIBC_2.17 + 1032: 0000000000182ce0 8 OBJECT GLOBAL DEFAULT 34 __curbrk@@GLIBC_2.17 + 1033: 0000000000086120 48 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_create_failure@@GLIBC_PRIVATE + 1034: 00000000000f978c 488 FUNC GLOBAL DEFAULT 12 gethostbyaddr@@GLIBC_2.17 + 1035: 000000000006c768 144 FUNC GLOBAL DEFAULT 12 _IO_popen@@GLIBC_2.17 + 1036: 00000000000defd8 12 FUNC WEAK DEFAULT 12 get_phys_pages@@GLIBC_2.17 + 1037: 00000000000ea7f0 28 FUNC WEAK DEFAULT 12 argp_help@@GLIBC_2.17 + 1038: 00000000000731e4 384 FUNC GLOBAL DEFAULT 12 fputc@@GLIBC_2.17 + 1039: 00000000000345d0 84 FUNC WEAK DEFAULT 12 frexp@@GLIBC_2.17 + 1040: 00000000000e31b4 120 FUNC GLOBAL DEFAULT 12 __towlower_l@@GLIBC_2.17 + 1041: 000000000007a6a0 160 FUNC GLOBAL DEFAULT 12 _IO_seekmark@@GLIBC_2.17 + 1042: 00000000000fae58 312 FUNC GLOBAL DEFAULT 12 gethostent_r@@GLIBC_2.17 + 1043: 00000000000675f4 264 FUNC GLOBAL DEFAULT 12 psignal@@GLIBC_2.17 + 1044: 00000000000de140 52 FUNC GLOBAL DEFAULT 12 verrx@@GLIBC_2.17 + 1045: 000000000011ae80 28 FUNC GLOBAL DEFAULT 12 setlogin@@GLIBC_2.17 + 1046: 00000000000a628c 20 FUNC WEAK DEFAULT 12 versionsort64@@GLIBC_2.17 + 1047: 0000000000101534 520 FUNC GLOBAL DEFAULT 12 __internal_getnetgrent_r@@GLIBC_PRIVATE + 1048: 0000000000074640 356 FUNC WEAK DEFAULT 12 fseeko64@@GLIBC_2.17 + 1049: 000000000017d578 168 OBJECT GLOBAL DEFAULT 28 _IO_file_jumps@@GLIBC_2.17 + 1050: 00000000000df360 24 FUNC GLOBAL DEFAULT 12 fremovexattr@@GLIBC_2.17 + 1051: 00000000000f7938 60 FUNC GLOBAL DEFAULT 12 __wcscpy_chk@@GLIBC_2.17 + 1052: 0000000000082c68 492 FUNC GLOBAL DEFAULT 12 __libc_valloc@@GLIBC_2.17 + 1053: 00000000000dff08 28 FUNC WEAK DEFAULT 12 create_module@@GLIBC_2.17 + 1054: 00000000000e0088 224 FUNC WEAK DEFAULT 12 recv@@GLIBC_2.17 + 1055: 0000000000068448 500 FUNC GLOBAL DEFAULT 12 __isoc99_fscanf@@GLIBC_2.17 + 1056: 0000000000107638 48 FUNC GLOBAL DEFAULT 12 _rpc_dtablesize@@GLIBC_2.17 + 1057: 0000000000079c58 148 FUNC GLOBAL DEFAULT 12 _IO_sungetc@@GLIBC_2.17 + 1058: 00000000000abc80 24 FUNC GLOBAL DEFAULT 12 getsid@@GLIBC_2.17 + 1059: 00000000000d6eb8 56 FUNC WEAK DEFAULT 12 mktemp@@GLIBC_2.17 + 1060: 00000000000ed490 300 FUNC WEAK DEFAULT 12 inet_addr@@GLIBC_2.17 + 1061: 00000000000f8960 48 FUNC GLOBAL DEFAULT 12 __mbstowcs_chk@@GLIBC_2.17 + 1062: 00000000000d5a90 24 FUNC WEAK DEFAULT 12 getrusage@@GLIBC_2.17 + 1063: 0000000000075860 368 FUNC GLOBAL DEFAULT 12 _IO_peekc_locked@@GLIBC_2.17 + 1064: 000000000007a610 64 FUNC GLOBAL DEFAULT 12 _IO_remove_marker@@GLIBC_2.17 + 1065: 00000000000e08b4 212 FUNC GLOBAL DEFAULT 12 __sendmmsg@@GLIBC_PRIVATE + 1066: 0000000000180dd0 8 OBJECT WEAK DEFAULT 33 __malloc_hook@@GLIBC_2.17 + 1067: 000000000002eafc 16 FUNC GLOBAL DEFAULT 12 __isspace_l@@GLIBC_2.17 + 1068: 00000000000e2d74 156 FUNC WEAK DEFAULT 12 iswlower_l@@GLIBC_2.17 + 1069: 00000000000d44f0 1732 FUNC GLOBAL DEFAULT 12 fts_read@@GLIBC_2.17 + 1070: 00000000000d7338 388 FUNC GLOBAL DEFAULT 12 getfsspec@@GLIBC_2.17 + 1071: 0000000000039bd8 20 FUNC GLOBAL DEFAULT 12 __strtoll_internal@@GLIBC_2.17 + 1072: 00000000000e2308 180 FUNC WEAK DEFAULT 12 iswgraph@@GLIBC_2.17 + 1073: 00000000000d6f98 92 FUNC GLOBAL DEFAULT 12 ualarm@@GLIBC_2.17 + 1074: 00000000000dff08 28 FUNC WEAK DEFAULT 12 query_module@@GLIBC_2.17 + 1075: 00000000000f8bc0 128 FUNC GLOBAL DEFAULT 12 __dprintf_chk@@GLIBC_2.17 + 1076: 000000000006b004 448 FUNC WEAK DEFAULT 12 fputs@@GLIBC_2.17 + 1077: 00000000000cf700 28 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_destroy@@GLIBC_2.17 + 1078: 0000000000087bf4 188 FUNC WEAK DEFAULT 12 strtok_r@@GLIBC_2.17 + 1079: 00000000000fad7c 220 FUNC GLOBAL DEFAULT 12 endhostent@@GLIBC_2.17 + 1080: 00000000000ec6c0 68 FUNC GLOBAL DEFAULT 12 pthread_cond_wait@@GLIBC_2.17 + 1081: 000000000008af3c 124 FUNC GLOBAL DEFAULT 12 argz_delete@@GLIBC_2.17 + 1082: 000000000002eadc 16 FUNC GLOBAL DEFAULT 12 __isprint_l@@GLIBC_2.17 + 1083: 0000000000114994 144 FUNC GLOBAL DEFAULT 12 xdr_u_long@@GLIBC_2.17 + 1084: 000000000006f670 120 FUNC GLOBAL DEFAULT 12 __woverflow@@GLIBC_2.17 + 1085: 00000000000f79b4 32 FUNC GLOBAL DEFAULT 12 __wmempcpy_chk@@GLIBC_2.17 + 1086: 00000000000acd84 544 FUNC WEAK DEFAULT 12 fpathconf@@GLIBC_2.17 + 1087: 000000000002ea9c 16 FUNC WEAK DEFAULT 12 iscntrl_l@@GLIBC_2.17 + 1088: 00000000000c450c 144 FUNC WEAK DEFAULT 12 regerror@@GLIBC_2.17 + 1089: 0000000000086880 276 FUNC GLOBAL DEFAULT 12 strnlen@@GLIBC_2.17 + 1090: 0000000000039898 36 FUNC GLOBAL DEFAULT 12 nrand48@@GLIBC_2.17 + 1091: 00000000000e08b4 212 FUNC WEAK DEFAULT 12 sendmmsg@@GLIBC_2.17 + 1092: 00000000000e4084 300 FUNC GLOBAL DEFAULT 12 getspent_r@@GLIBC_2.17 + 1093: 000000000008ee44 8 FUNC WEAK DEFAULT 12 wmempcpy@@GLIBC_2.17 + 1094: 0000000000184fa8 8 OBJECT GLOBAL DEFAULT 34 argp_program_bug_address@@GLIBC_2.17 + 1095: 00000000000df6c0 64 FUNC WEAK DEFAULT 12 lseek@@GLIBC_2.17 + 1096: 00000000000abd90 152 FUNC WEAK DEFAULT 12 setresgid@@GLIBC_2.17 + 1097: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 + 1098: 0000000000115654 392 FUNC GLOBAL DEFAULT 12 xdr_string@@GLIBC_2.17 + 1099: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.18 + 1100: 000000000009e568 128 FUNC GLOBAL DEFAULT 12 ftime@@GLIBC_2.17 + 1101: 0000000000035a60 24 FUNC WEAK DEFAULT 12 sigaltstack@@GLIBC_2.17 + 1102: 000000000006d908 368 FUNC WEAK DEFAULT 12 getwc@@GLIBC_2.17 + 1103: 0000000000088cd4 196 FUNC GLOBAL DEFAULT 12 memcpy@@GLIBC_2.17 + 1104: 00000000000d8f00 60 FUNC GLOBAL DEFAULT 12 endusershell@@GLIBC_2.17 + 1105: 00000000000c6940 24 FUNC GLOBAL DEFAULT 12 __sched_get_priority_min@@GLIBC_2.17 + 1106: 00000000000d1c5c 152 FUNC GLOBAL DEFAULT 12 getwd@@GLIBC_2.17 + 1107: 000000000008f158 48 FUNC WEAK DEFAULT 12 mbrlen@@GLIBC_2.17 + 1108: 0000000000074954 704 FUNC GLOBAL DEFAULT 12 freopen64@@GLIBC_2.17 + 1109: 00000000000d007c 16 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setschedparam@@GLIBC_2.17 + 1110: 000000000009e5e8 1496 FUNC WEAK DEFAULT 12 getdate_r@@GLIBC_2.17 + 1111: 000000000006a17c 676 FUNC GLOBAL DEFAULT 12 fclose@@GLIBC_2.17 + 1112: 0000000000079cec 72 FUNC GLOBAL DEFAULT 12 _IO_adjust_column@@GLIBC_2.17 + 1113: 00000000000705a0 180 FUNC GLOBAL DEFAULT 12 _IO_seekwmark@@GLIBC_2.17 + 1114: 00000000000f2f68 848 FUNC GLOBAL DEFAULT 12 __nss_lookup@@GLIBC_PRIVATE + 1115: 000000000003578c 156 FUNC GLOBAL DEFAULT 12 __sigpause@@GLIBC_2.17 + 1116: 00000000000d0e04 296 FUNC WEAK DEFAULT 12 euidaccess@@GLIBC_2.17 + 1117: 00000000000d2484 52 FUNC GLOBAL DEFAULT 12 symlinkat@@GLIBC_2.17 + 1118: 00000000000397b4 20 FUNC GLOBAL DEFAULT 12 rand@@GLIBC_2.17 + 1119: 00000000000d68b4 236 FUNC WEAK DEFAULT 12 pselect@@GLIBC_2.17 + 1120: 00000000000ec998 68 FUNC GLOBAL DEFAULT 12 pthread_setcanceltype@@GLIBC_2.17 + 1121: 00000000000d5804 32 FUNC GLOBAL DEFAULT 12 tcsetpgrp@@GLIBC_2.17 + 1122: 00000000000f5afc 392 FUNC GLOBAL DEFAULT 12 __memmove_chk@@GLIBC_2.17 + 1123: 00000000000d336c 60 FUNC GLOBAL DEFAULT 12 nftw64@@GLIBC_2.17 + 1124: 000000000008e4b0 56 FUNC GLOBAL DEFAULT 12 wcscmp@@GLIBC_2.17 + 1125: 00000000000da960 24 FUNC WEAK DEFAULT 12 mprotect@@GLIBC_2.17 + 1126: 00000000000f75fc 52 FUNC GLOBAL DEFAULT 12 __getwd_chk@@GLIBC_2.17 + 1127: 0000000000088a00 72 FUNC WEAK DEFAULT 12 ffsl@@GLIBC_2.17 + 1128: 00000000000f2d28 576 FUNC GLOBAL DEFAULT 12 __nss_lookup_function@@GLIBC_PRIVATE + 1129: 00000000000d7694 212 FUNC GLOBAL DEFAULT 12 getmntent@@GLIBC_2.17 + 1130: 00000000000991dc 140 FUNC GLOBAL DEFAULT 12 __wcscasecmp_l@@GLIBC_2.17 + 1131: 000000000011def0 20 FUNC GLOBAL DEFAULT 12 __libc_dl_error_tsd@@GLIBC_PRIVATE + 1132: 0000000000039bd8 20 FUNC GLOBAL DEFAULT 12 __strtol_internal@@GLIBC_2.17 + 1133: 00000000000f650c 236 FUNC GLOBAL DEFAULT 12 __vsnprintf_chk@@GLIBC_2.17 + 1134: 00000000000d6f34 16 FUNC WEAK DEFAULT 12 mkostemp64@@GLIBC_2.17 + 1135: 00000000000a5140 36 FUNC GLOBAL DEFAULT 12 __wcsftime_l@@GLIBC_2.17 + 1136: 000000000006a04c 304 FUNC GLOBAL DEFAULT 12 _IO_file_doallocate@@GLIBC_2.17 + 1137: 00000000000ec7c4 68 FUNC GLOBAL DEFAULT 12 pthread_setschedparam@@GLIBC_2.17 + 1138: 0000000000039c18 24 FUNC GLOBAL DEFAULT 12 strtoul@@GLIBC_2.17 + 1139: 00000000000db9cc 76 FUNC GLOBAL DEFAULT 12 hdestroy_r@@GLIBC_2.17 + 1140: 000000000007553c 356 FUNC GLOBAL DEFAULT 12 fmemopen@@GLIBC_2.17 + 1141: 00000000000e3fa8 220 FUNC GLOBAL DEFAULT 12 endspent@@GLIBC_2.17 + 1142: 00000000000daaa0 24 FUNC GLOBAL DEFAULT 12 munlockall@@GLIBC_2.17 + 1143: 0000000000035828 96 FUNC WEAK DEFAULT 12 sigpause@@GLIBC_2.17 + 1144: 000000000011d004 20 FUNC GLOBAL DEFAULT 12 getutmp@@GLIBC_2.17 + 1145: 000000000011d004 20 FUNC GLOBAL DEFAULT 12 getutmpx@@GLIBC_2.17 + 1146: 000000000004d168 60 FUNC GLOBAL DEFAULT 12 vprintf@@GLIBC_2.17 + 1147: 00000000001148a8 152 FUNC GLOBAL DEFAULT 12 xdr_u_int@@GLIBC_2.17 + 1148: 00000000000e03f0 24 FUNC WEAK DEFAULT 12 setsockopt@@GLIBC_2.17 + 1149: 0000000000079320 384 FUNC GLOBAL DEFAULT 12 _IO_default_xsputn@@GLIBC_2.17 + 1150: 0000000000080c0c 308 FUNC GLOBAL DEFAULT 12 malloc@@GLIBC_2.17 + 1151: 00000000001852f8 24 OBJECT GLOBAL DEFAULT 34 svcauthdes_stats@@GLIBC_2.17 + 1152: 00000000000df930 32 FUNC GLOBAL DEFAULT 12 eventfd_read@@GLIBC_2.17 + 1153: 0000000000039c18 24 FUNC WEAK DEFAULT 12 strtouq@@GLIBC_2.17 + 1154: 00000000000d8f5c 444 FUNC GLOBAL DEFAULT 12 getpass@@GLIBC_2.17 + 1155: 00000000000daa20 24 FUNC WEAK DEFAULT 12 remap_file_pages@@GLIBC_2.17 + 1156: 0000000000035054 68 FUNC WEAK DEFAULT 12 siglongjmp@@GLIBC_2.17 + 1157: 000000000010b264 28 FUNC GLOBAL DEFAULT 12 xdr_keystatus@@GLIBC_2.17 + 1158: 00000000000dff08 28 FUNC WEAK DEFAULT 12 uselib@@GLIBC_2.17 + 1159: 0000000000035df0 192 FUNC GLOBAL DEFAULT 12 sigisemptyset@@GLIBC_2.17 + 1160: 0000000000042b2c 148 FUNC GLOBAL DEFAULT 12 strfmon@@GLIBC_2.17 + 1161: 000000000002e148 492 FUNC WEAK DEFAULT 12 duplocale@@GLIBC_2.17 + 1162: 0000000000035280 40 FUNC GLOBAL DEFAULT 12 killpg@@GLIBC_2.17 + 1163: 0000000000086150 44 FUNC GLOBAL DEFAULT 12 strcat@@GLIBC_2.17 + 1164: 0000000000114810 152 FUNC GLOBAL DEFAULT 12 xdr_int@@GLIBC_2.17 + 1165: 00000000000e070c 204 FUNC GLOBAL DEFAULT 12 accept4@@GLIBC_2.17 + 1166: 00000000000d05d0 12 FUNC WEAK DEFAULT 12 umask@@GLIBC_2.17 + 1167: 000000000009a2dc 172 FUNC GLOBAL DEFAULT 12 __isoc99_vswscanf@@GLIBC_2.17 + 1168: 0000000000088b30 96 FUNC WEAK DEFAULT 12 strcasecmp@@GLIBC_2.17 + 1169: 00000000000747a4 432 FUNC WEAK DEFAULT 12 ftello64@@GLIBC_2.17 + 1170: 00000000000a62dc 176 FUNC WEAK DEFAULT 12 fdopendir@@GLIBC_2.17 + 1171: 0000000000042380 1236 FUNC GLOBAL DEFAULT 12 realpath@@GLIBC_2.17 + 1172: 00000000000ec418 68 FUNC GLOBAL DEFAULT 12 pthread_attr_getschedpolicy@@GLIBC_2.17 + 1173: 0000000000034444 132 FUNC WEAK DEFAULT 12 modf@@GLIBC_2.17 + 1174: 00000000000747a4 432 FUNC GLOBAL DEFAULT 12 ftello@@GLIBC_2.17 + 1175: 000000000009e550 24 FUNC GLOBAL DEFAULT 12 timegm@@GLIBC_2.17 + 1176: 000000000011d808 148 FUNC GLOBAL DEFAULT 12 __libc_dlclose@@GLIBC_PRIVATE + 1177: 00000000000832c0 268 FUNC GLOBAL DEFAULT 12 __libc_mallinfo@@GLIBC_2.17 + 1178: 00000000000351ec 148 FUNC GLOBAL DEFAULT 12 raise@@GLIBC_2.17 + 1179: 00000000000d6570 188 FUNC GLOBAL DEFAULT 12 setegid@@GLIBC_2.17 + 1180: 00000000000f4f7c 156 FUNC GLOBAL DEFAULT 12 __clock_getres@@GLIBC_PRIVATE + 1181: 00000000000df770 24 FUNC GLOBAL DEFAULT 12 setfsgid@@GLIBC_2.17 + 1182: 0000000000081968 312 FUNC WEAK DEFAULT 12 malloc_usable_size@@GLIBC_2.17 + 1183: 0000000000070108 160 FUNC GLOBAL DEFAULT 12 _IO_wdefault_doallocate@@GLIBC_2.17 + 1184: 000000000002eaac 16 FUNC GLOBAL DEFAULT 12 __isdigit_l@@GLIBC_2.17 + 1185: 0000000000057f7c 31828 FUNC GLOBAL DEFAULT 12 _IO_vfscanf@@GLIBC_2.17 + 1186: 0000000000067e1c 92 FUNC GLOBAL DEFAULT 12 remove@@GLIBC_2.17 + 1187: 00000000000c68c0 24 FUNC WEAK DEFAULT 12 sched_setscheduler@@GLIBC_2.17 + 1188: 00000000000a5164 112 FUNC GLOBAL DEFAULT 12 timespec_get@@GLIBC_2.17 + 1189: 0000000000094ef0 12 FUNC WEAK DEFAULT 12 wcstold_l@@GLIBC_2.17 + 1190: 00000000000abc50 24 FUNC WEAK DEFAULT 12 setpgid@@GLIBC_2.17 + 1191: 0000000000081500 432 FUNC WEAK DEFAULT 12 aligned_alloc@@GLIBC_2.17 + 1192: 00000000000d0c90 56 FUNC GLOBAL DEFAULT 12 __openat_2@@GLIBC_2.17 + 1193: 00000000000e0010 24 FUNC WEAK DEFAULT 12 getpeername@@GLIBC_2.17 + 1194: 00000000000991dc 140 FUNC WEAK DEFAULT 12 wcscasecmp_l@@GLIBC_2.17 + 1195: 0000000000086394 264 FUNC GLOBAL DEFAULT 12 __strverscmp@@GLIBC_2.17 + 1196: 00000000000f7208 488 FUNC GLOBAL DEFAULT 12 __fgets_chk@@GLIBC_2.17 + 1197: 0000000000085f40 104 FUNC GLOBAL DEFAULT 12 __libc_dynarray_resize_clear@@GLIBC_PRIVATE + 1198: 00000000000f0344 20 FUNC GLOBAL DEFAULT 12 __res_state@@GLIBC_2.17 + 1199: 0000000000107b70 268 FUNC GLOBAL DEFAULT 12 pmap_getmaps@@GLIBC_2.17 + 1200: 00000000000864e0 72 FUNC GLOBAL DEFAULT 12 __strndup@@GLIBC_2.17 + 1201: 00000000000348a4 96 FUNC WEAK DEFAULT 12 frexpf@@GLIBC_2.17 + 1202: 000000000017d9d0 1080 OBJECT GLOBAL DEFAULT 29 sys_errlist@@GLIBC_2.17 + 1203: 0000000000184ef8 8 OBJECT GLOBAL DEFAULT 34 mallwatch@@GLIBC_2.17 + 1204: 000000000007a238 696 FUNC WEAK DEFAULT 12 _flushlbf@@GLIBC_2.17 + 1205: 000000000008f13c 28 FUNC WEAK DEFAULT 12 mbsinit@@GLIBC_2.17 + 1206: 00000000000e322c 116 FUNC WEAK DEFAULT 12 towupper_l@@GLIBC_2.17 + 1207: 00000000000f6160 264 FUNC GLOBAL DEFAULT 12 __strncpy_chk@@GLIBC_2.17 + 1208: 00000000000aba20 12 FUNC WEAK DEFAULT 12 getgid@@GLIBC_2.17 + 1209: 0000000000052284 132 FUNC WEAK DEFAULT 12 asprintf@@GLIBC_2.17 + 1210: 000000000009c8d4 580 FUNC WEAK DEFAULT 12 tzset@@GLIBC_2.17 + 1211: 00000000000cf650 68 FUNC GLOBAL DEFAULT 12 __libc_pwrite@@GLIBC_PRIVATE + 1212: 00000000000a8714 480 FUNC GLOBAL DEFAULT 12 __copy_grp@@GLIBC_PRIVATE + 1213: 00000000000c3da4 120 FUNC WEAK DEFAULT 12 re_compile_pattern@@GLIBC_2.17 + 1214: 0000000000034df0 160 FUNC WEAK DEFAULT 12 frexpl@@GLIBC_2.17 + 1215: 00000000000d0328 88 FUNC GLOBAL DEFAULT 12 __lxstat64@@GLIBC_2.17 + 1216: 00000000001139ec 596 FUNC GLOBAL DEFAULT 12 svcudp_bufcreate@@GLIBC_2.17 + 1217: 000000000010a204 244 FUNC GLOBAL DEFAULT 12 xdrrec_eof@@GLIBC_2.17 + 1218: 000000000002e94c 28 FUNC GLOBAL DEFAULT 12 isupper@@GLIBC_2.17 + 1219: 00000000000d9f3c 1348 FUNC GLOBAL DEFAULT 12 vsyslog@@GLIBC_2.17 + 1220: 00000000000d04d0 24 FUNC WEAK DEFAULT 12 fstatfs64@@GLIBC_2.17 + 1221: 00000000000865e8 412 FUNC GLOBAL DEFAULT 12 __strerror_r@@GLIBC_2.17 + 1222: 0000000000034704 24 FUNC WEAK DEFAULT 12 finitef@@GLIBC_2.17 + 1223: 000000000011b3e8 92 FUNC WEAK DEFAULT 12 getutline@@GLIBC_2.17 + 1224: 0000000000078f94 432 FUNC GLOBAL DEFAULT 12 __uflow@@GLIBC_2.17 + 1225: 00000000000df980 24 FUNC WEAK DEFAULT 12 prlimit64@@GLIBC_2.17 + 1226: 00000000000885d0 196 FUNC GLOBAL DEFAULT 12 __mempcpy@@GLIBC_2.17 + 1227: 000000000003a0d4 12 FUNC WEAK DEFAULT 12 strtol_l@@GLIBC_2.17 + 1228: 00000000000346ec 24 FUNC GLOBAL DEFAULT 12 __isnanf@@GLIBC_2.17 + 1229: 00000000000349f0 28 FUNC WEAK DEFAULT 12 finitel@@GLIBC_2.17 + 1230: 000000000002dae0 88 FUNC GLOBAL DEFAULT 12 __nl_langinfo_l@@GLIBC_2.17 + 1231: 0000000000112908 372 FUNC GLOBAL DEFAULT 12 svc_getreq_poll@@GLIBC_2.17 + 1232: 00000000000d00dc 136 FUNC GLOBAL DEFAULT 12 __sched_cpucount@@GLIBC_2.17 + 1233: 00000000000ec34c 68 FUNC GLOBAL DEFAULT 12 pthread_attr_setinheritsched@@GLIBC_2.17 + 1234: 000000000002dacc 20 FUNC GLOBAL DEFAULT 12 nl_langinfo@@GLIBC_2.17 + 1235: 0000000000185250 8 OBJECT GLOBAL DEFAULT 34 svc_pollfd@@GLIBC_2.17 + 1236: 000000000007428c 200 FUNC WEAK DEFAULT 12 __vsnprintf@@GLIBC_2.17 + 1237: 00000000000d716c 116 FUNC GLOBAL DEFAULT 12 setfsent@@GLIBC_2.17 + 1238: 00000000000349c8 40 FUNC GLOBAL DEFAULT 12 __isnanl@@GLIBC_2.17 + 1239: 00000000000d8254 144 FUNC WEAK DEFAULT 12 hasmntopt@@GLIBC_2.17 + 1240: 00000000000f4f7c 156 FUNC WEAK DEFAULT 12 clock_getres@@GLIBC_2.17 + 1241: 00000000000a5d20 12 FUNC WEAK DEFAULT 12 opendir@@GLIBC_2.17 + 1242: 0000000000036130 16 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmax@@GLIBC_2.17 + 1243: 000000000008e62c 172 FUNC GLOBAL DEFAULT 12 wcsncat@@GLIBC_2.17 + 1244: 00000000000fb160 992 FUNC GLOBAL DEFAULT 12 getnetbyaddr_r@@GLIBC_2.17 + 1245: 00000000000f8928 28 FUNC GLOBAL DEFAULT 12 __mbsrtowcs_chk@@GLIBC_2.17 + 1246: 000000000006aa60 472 FUNC GLOBAL DEFAULT 12 _IO_fgets@@GLIBC_2.17 + 1247: 00000000000fabac 236 FUNC GLOBAL DEFAULT 12 gethostent@@GLIBC_2.17 + 1248: 0000000000088800 344 FUNC WEAK DEFAULT 12 bzero@@GLIBC_2.17 + 1249: 00000000001852d8 32 OBJECT GLOBAL DEFAULT 34 rpc_createerr@@GLIBC_2.17 + 1250: 0000000000108060 1364 FUNC GLOBAL DEFAULT 12 clnt_broadcast@@GLIBC_2.17 + 1251: 0000000000035b44 44 FUNC GLOBAL DEFAULT 12 __sigaddset@@GLIBC_2.17 + 1252: 000000000018020c 4 OBJECT GLOBAL DEFAULT 33 argp_err_exit_status@@GLIBC_2.17 + 1253: 0000000000084768 252 FUNC GLOBAL DEFAULT 12 mcheck_check_all@@GLIBC_2.17 + 1254: 00000000000346c8 36 FUNC GLOBAL DEFAULT 12 __isinff@@GLIBC_2.17 + 1255: 00000000000ec528 68 FUNC GLOBAL DEFAULT 12 pthread_condattr_destroy@@GLIBC_2.17 + 1256: 0000000000182cc0 8 OBJECT GLOBAL DEFAULT 34 __environ@@GLIBC_2.17 + 1257: 00000000000d04b0 24 FUNC GLOBAL DEFAULT 12 __statfs@@GLIBC_2.17 + 1258: 00000000000e3590 396 FUNC GLOBAL DEFAULT 12 getspnam@@GLIBC_2.17 + 1259: 00000000000f7a30 96 FUNC GLOBAL DEFAULT 12 __wcscat_chk@@GLIBC_2.17 + 1260: 000000000010478c 16 FUNC GLOBAL DEFAULT 12 inet6_option_space@@GLIBC_2.17 + 1261: 00000000000d0278 88 FUNC GLOBAL DEFAULT 12 __xstat64@@GLIBC_2.17 + 1262: 00000000000a8484 656 FUNC WEAK DEFAULT 12 fgetgrent_r@@GLIBC_2.17 + 1263: 00000000000df610 68 FUNC WEAK DEFAULT 12 clone@@GLIBC_2.17 + 1264: 000000000002eb70 20 FUNC GLOBAL DEFAULT 12 __ctype_b_loc@@GLIBC_2.17 + 1265: 000000000003499c 44 FUNC GLOBAL DEFAULT 12 __isinfl@@GLIBC_2.17 + 1266: 00000000000e2f48 156 FUNC GLOBAL DEFAULT 12 __iswpunct_l@@GLIBC_2.17 + 1267: 0000000000035888 108 FUNC WEAK DEFAULT 12 __xpg_sigpause@@GLIBC_2.17 + 1268: 0000000000037de4 252 FUNC GLOBAL DEFAULT 12 getenv@@GLIBC_2.17 + 1269: 00000000000c6978 128 FUNC GLOBAL DEFAULT 12 sched_getaffinity@@GLIBC_2.17 + 1270: 0000000000067408 132 FUNC GLOBAL DEFAULT 12 sscanf@@GLIBC_2.17 + 1271: 00000000000e15b4 392 FUNC WEAK DEFAULT 12 profil@@GLIBC_2.17 + 1272: 00000000000d61fc 208 FUNC GLOBAL DEFAULT 12 preadv@@GLIBC_2.17 + 1273: 0000000000039a48 76 FUNC WEAK DEFAULT 12 jrand48_r@@GLIBC_2.17 + 1274: 00000000000abcf8 152 FUNC WEAK DEFAULT 12 setresuid@@GLIBC_2.17 + 1275: 00000000000d095c 56 FUNC GLOBAL DEFAULT 12 __open_2@@GLIBC_2.17 + 1276: 00000000000e0190 76 FUNC WEAK DEFAULT 12 recvfrom@@GLIBC_2.17 + 1277: 00000000000e1ecc 16 FUNC GLOBAL DEFAULT 12 __profile_frequency@@GLIBC_2.17 + 1278: 000000000008f974 572 FUNC WEAK DEFAULT 12 wcsnrtombs@@GLIBC_2.17 + 1279: 0000000000185258 128 OBJECT GLOBAL DEFAULT 34 svc_fdset@@GLIBC_2.17 + 1280: 0000000000100164 196 FUNC GLOBAL DEFAULT 12 ruserok@@GLIBC_2.17 + 1281: 0000000000085918 36 FUNC GLOBAL DEFAULT 12 _obstack_allocated_p@@GLIBC_2.17 + 1282: 00000000000d4bb4 48 FUNC GLOBAL DEFAULT 12 fts_set@@GLIBC_2.17 + 1283: 0000000000114cdc 232 FUNC GLOBAL DEFAULT 12 xdr_u_longlong_t@@GLIBC_2.17 + 1284: 00000000000d5e68 208 FUNC GLOBAL DEFAULT 12 nice@@GLIBC_2.17 + 1285: 00000000001142e0 580 FUNC GLOBAL DEFAULT 12 xdecrypt@@GLIBC_2.17 + 1286: 00000000000c43fc 272 FUNC WEAK DEFAULT 12 regcomp@@GLIBC_2.17 + 1287: 00000000000f916c 76 FUNC GLOBAL DEFAULT 12 __fortify_fail@@GLIBC_PRIVATE + 1288: 000000000009e490 24 FUNC WEAK DEFAULT 12 getitimer@@GLIBC_2.17 + 1289: 00000000000d074c 328 FUNC WEAK DEFAULT 12 __open@@GLIBC_2.17 + 1290: 000000000002e8dc 28 FUNC GLOBAL DEFAULT 12 isgraph@@GLIBC_2.17 + 1291: 0000000000184f68 8 OBJECT GLOBAL DEFAULT 34 optarg@@GLIBC_2.17 + 1292: 0000000000033bd8 124 FUNC GLOBAL DEFAULT 12 catclose@@GLIBC_2.17 + 1293: 0000000000110340 644 FUNC GLOBAL DEFAULT 12 clntudp_bufcreate@@GLIBC_2.17 + 1294: 00000000000fcb70 408 FUNC GLOBAL DEFAULT 12 getservbyname@@GLIBC_2.17 + 1295: 0000000000074c48 52 FUNC GLOBAL DEFAULT 12 __freading@@GLIBC_2.17 + 1296: 00000000001815a8 8 OBJECT GLOBAL DEFAULT 33 stderr@@GLIBC_2.17 + 1297: 0000000000097714 124 FUNC GLOBAL DEFAULT 12 wcwidth@@GLIBC_2.17 + 1298: 00000000000e0b60 24 FUNC WEAK DEFAULT 12 msgctl@@GLIBC_2.17 + 1299: 00000000000f9460 44 FUNC GLOBAL DEFAULT 12 inet_lnaof@@GLIBC_2.17 + 1300: 0000000000035ca4 80 FUNC GLOBAL DEFAULT 12 sigdelset@@GLIBC_2.17 + 1301: 00000000000d6050 28 FUNC WEAK DEFAULT 12 ioctl@@GLIBC_2.17 + 1302: 00000000000d6ac0 24 FUNC GLOBAL DEFAULT 12 syncfs@@GLIBC_2.17 + 1303: 0000000000021830 12 FUNC WEAK DEFAULT 12 gnu_get_libc_release@@GLIBC_2.17 + 1304: 00000000000d1e48 64 FUNC GLOBAL DEFAULT 12 fchownat@@GLIBC_2.17 + 1305: 00000000000aa4e8 116 FUNC GLOBAL DEFAULT 12 alarm@@GLIBC_2.17 + 1306: 0000000000180f30 224 OBJECT GLOBAL DEFAULT 33 _IO_2_1_stderr_@@GLIBC_2.17 + 1307: 00000000000702d0 156 FUNC GLOBAL DEFAULT 12 _IO_sputbackwc@@GLIBC_2.17 + 1308: 0000000000082e54 540 FUNC GLOBAL DEFAULT 12 __libc_pvalloc@@GLIBC_2.17 + 1309: 0000000000042308 120 FUNC WEAK DEFAULT 12 system@@GLIBC_2.17 + 1310: 000000000010b430 172 FUNC GLOBAL DEFAULT 12 xdr_getcredres@@GLIBC_2.17 + 1311: 0000000000090180 12 FUNC GLOBAL DEFAULT 12 __wcstol_l@@GLIBC_2.17 + 1312: 00000000000de174 124 FUNC GLOBAL DEFAULT 12 err@@GLIBC_2.17 + 1313: 00000000000672b4 48 FUNC WEAK DEFAULT 12 vfwscanf@@GLIBC_2.17 + 1314: 00000000000d8668 40 FUNC GLOBAL DEFAULT 12 chflags@@GLIBC_2.17 + 1315: 00000000000df5b8 52 FUNC GLOBAL DEFAULT 12 inotify_init@@GLIBC_2.17 + 1316: 00000000000fcd08 864 FUNC GLOBAL DEFAULT 12 getservbyname_r@@GLIBC_2.17 + 1317: 00000000000dfdd0 24 FUNC GLOBAL DEFAULT 12 timerfd_settime@@GLIBC_2.17 + 1318: 0000000000088a00 72 FUNC GLOBAL DEFAULT 12 ffsll@@GLIBC_2.17 + 1319: 000000000011501c 168 FUNC GLOBAL DEFAULT 12 xdr_bool@@GLIBC_2.17 + 1320: 000000000002eb44 44 FUNC GLOBAL DEFAULT 12 __isctype@@GLIBC_2.17 + 1321: 00000000000d5a70 24 FUNC WEAK DEFAULT 12 setrlimit64@@GLIBC_2.17 + 1322: 00000000000d0194 80 FUNC GLOBAL DEFAULT 12 sched_getcpu@@GLIBC_2.17 + 1323: 00000000000abb58 212 FUNC WEAK DEFAULT 12 group_member@@GLIBC_2.17 + 1324: 000000000006a868 504 FUNC GLOBAL DEFAULT 12 _IO_fgetpos@@GLIBC_2.17 + 1325: 0000000000078d44 60 FUNC GLOBAL DEFAULT 12 _IO_free_backup_area@@GLIBC_2.17 + 1326: 00000000000da940 24 FUNC WEAK DEFAULT 12 munmap@@GLIBC_2.17 + 1327: 00000000000cf970 32 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setsigdefault@@GLIBC_2.17 + 1328: 00000000000856a4 220 FUNC GLOBAL DEFAULT 12 _obstack_begin_1@@GLIBC_2.17 + 1329: 00000000000e5868 220 FUNC GLOBAL DEFAULT 12 endsgent@@GLIBC_2.17 + 1330: 00000000000a9c90 704 FUNC GLOBAL DEFAULT 12 _nss_files_parse_pwent@@GLIBC_PRIVATE + 1331: 00000000000a5b64 96 FUNC GLOBAL DEFAULT 12 ntp_gettimex@@GLIBC_2.17 + 1332: 00000000000aa3d4 28 FUNC WEAK DEFAULT 12 wait3@@GLIBC_2.17 + 1333: 00000000000f8808 68 FUNC GLOBAL DEFAULT 12 __getgroups_chk@@GLIBC_2.17 + 1334: 00000000000aa3f0 24 FUNC WEAK DEFAULT 12 wait4@@GLIBC_2.17 + 1335: 0000000000085780 408 FUNC GLOBAL DEFAULT 12 _obstack_newchunk@@GLIBC_2.17 + 1336: 00000000000df148 100 FUNC WEAK DEFAULT 12 advance@@GLIBC_2.17 + 1337: 0000000000105428 60 FUNC GLOBAL DEFAULT 12 inet6_opt_init@@GLIBC_2.17 + 1338: 0000000000181a34 4 OBJECT GLOBAL DEFAULT 34 __fpu_control@@GLIBC_2.17 + 1339: 00000000000f9df8 556 FUNC GLOBAL DEFAULT 12 gethostbyname@@GLIBC_2.17 + 1340: 00000000000f6494 120 FUNC GLOBAL DEFAULT 12 __snprintf_chk@@GLIBC_2.17 + 1341: 00000000000df6c0 64 FUNC WEAK DEFAULT 12 __lseek@@GLIBC_2.17 + 1342: 0000000000090180 12 FUNC WEAK DEFAULT 12 wcstol_l@@GLIBC_2.17 + 1343: 00000000000cf878 168 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_adddup2@@GLIBC_2.17 + 1344: 000000000018015c 4 OBJECT GLOBAL DEFAULT 33 optopt@@GLIBC_2.17 + 1345: 0000000000184f80 4 OBJECT GLOBAL DEFAULT 34 error_message_count@@GLIBC_2.17 + 1346: 000000000002ea9c 16 FUNC GLOBAL DEFAULT 12 __iscntrl_l@@GLIBC_2.17 + 1347: 00000000000d64b4 188 FUNC GLOBAL DEFAULT 12 seteuid@@GLIBC_2.17 + 1348: 00000000000d0714 56 FUNC GLOBAL DEFAULT 12 mkdirat@@GLIBC_2.17 + 1349: 000000000008e4e8 28 FUNC GLOBAL DEFAULT 12 wcscpy@@GLIBC_2.17 + 1350: 00000000000d14a0 24 FUNC WEAK DEFAULT 12 dup@@GLIBC_2.17 + 1351: 00000000000df750 24 FUNC GLOBAL DEFAULT 12 setfsuid@@GLIBC_2.17 + 1352: 0000000000184d68 8 OBJECT GLOBAL DEFAULT 34 __vdso_clock_gettime@@GLIBC_PRIVATE + 1353: 0000000000039a30 24 FUNC GLOBAL DEFAULT 12 mrand48_r@@GLIBC_2.17 + 1354: 0000000000041b40 188 FUNC GLOBAL DEFAULT 12 __strtod_nan@@GLIBC_PRIVATE + 1355: 00000000000ec748 56 FUNC GLOBAL DEFAULT 12 pthread_exit@@GLIBC_2.17 + 1356: 00000000000f5d54 404 FUNC GLOBAL DEFAULT 12 __memset_chk@@GLIBC_2.17 + 1357: 0000000000114f80 156 FUNC GLOBAL DEFAULT 12 xdr_u_char@@GLIBC_2.17 + 1358: 000000000006dc34 52 FUNC GLOBAL DEFAULT 12 getwchar_unlocked@@GLIBC_2.17 + 1359: 0000000000184f60 8 OBJECT GLOBAL DEFAULT 34 re_syntax_options@@GLIBC_2.17 + 1360: 000000000011cff8 4 FUNC GLOBAL DEFAULT 12 pututxline@@GLIBC_2.17 + 1361: 00000000000d8690 40 FUNC GLOBAL DEFAULT 12 fchflags@@GLIBC_2.17 + 1362: 00000000000f5090 124 FUNC WEAK DEFAULT 12 clock_settime@@GLIBC_2.17 + 1363: 000000000011a990 68 FUNC GLOBAL DEFAULT 12 getlogin@@GLIBC_2.17 + 1364: 00000000000e0a80 68 FUNC WEAK DEFAULT 12 msgsnd@@GLIBC_2.17 + 1365: 00000000000347b4 216 FUNC WEAK DEFAULT 12 scalbnf@@GLIBC_2.17 + 1366: 0000000000035eb0 312 FUNC GLOBAL DEFAULT 12 sigandset@@GLIBC_2.17 + 1367: 00000000000776e0 172 FUNC GLOBAL DEFAULT 12 _IO_file_finish@@GLIBC_2.17 + 1368: 00000000000c6960 24 FUNC WEAK DEFAULT 12 sched_rr_get_interval@@GLIBC_2.17 + 1369: 00000000000f098c 116 FUNC GLOBAL DEFAULT 12 __resolv_context_put@@GLIBC_PRIVATE + 1370: 00000000000aba40 24 FUNC WEAK DEFAULT 12 getgroups@@GLIBC_2.17 + 1371: 0000000000109650 252 FUNC GLOBAL DEFAULT 12 xdr_double@@GLIBC_2.17 + 1372: 0000000000034b50 568 FUNC WEAK DEFAULT 12 scalbnl@@GLIBC_2.17 + 1373: 00000000000d606c 200 FUNC WEAK DEFAULT 12 readv@@GLIBC_2.17 + 1374: 00000000000fff2c 8 FUNC GLOBAL DEFAULT 12 rcmd@@GLIBC_2.17 + 1375: 00000000000aba00 12 FUNC WEAK DEFAULT 12 getuid@@GLIBC_2.17 + 1376: 0000000000100228 160 FUNC GLOBAL DEFAULT 12 iruserok_af@@GLIBC_2.17 + 1377: 00000000000d24b8 72 FUNC WEAK DEFAULT 12 readlink@@GLIBC_2.17 + 1378: 00000000000dd8c0 204 FUNC GLOBAL DEFAULT 12 lsearch@@GLIBC_2.17 + 1379: 00000000000672e4 132 FUNC GLOBAL DEFAULT 12 fscanf@@GLIBC_2.17 + 1380: 0000000000181a50 8 OBJECT GLOBAL DEFAULT 34 __abort_msg@@GLIBC_PRIVATE + 1381: 00000000000d6f70 40 FUNC WEAK DEFAULT 12 mkostemps64@@GLIBC_2.17 + 1382: 00000000000fe5f4 292 FUNC GLOBAL DEFAULT 12 ether_aton_r@@GLIBC_2.17 + 1383: 000000000004fae0 32 FUNC GLOBAL DEFAULT 12 __printf_fp@@GLIBC_2.17 + 1384: 00000000000df730 24 FUNC WEAK DEFAULT 12 readahead@@GLIBC_2.17 + 1385: 0000000000111614 312 FUNC GLOBAL DEFAULT 12 host2netname@@GLIBC_2.17 + 1386: 00000000000dfb60 24 FUNC WEAK DEFAULT 12 mremap@@GLIBC_2.17 + 1387: 00000000000df460 24 FUNC GLOBAL DEFAULT 12 removexattr@@GLIBC_2.17 + 1388: 000000000006f320 56 FUNC GLOBAL DEFAULT 12 _IO_switch_to_wbackup_area@@GLIBC_2.17 + 1389: 0000000000107c7c 96 FUNC GLOBAL DEFAULT 12 xdr_pmap@@GLIBC_2.17 + 1390: 00000000000aad30 48 FUNC WEAK DEFAULT 12 execve@@GLIBC_2.17 + 1391: 00000000000fc32c 228 FUNC GLOBAL DEFAULT 12 getprotoent@@GLIBC_2.17 + 1392: 000000000007228c 396 FUNC GLOBAL DEFAULT 12 _IO_wfile_sync@@GLIBC_2.17 + 1393: 00000000000aba30 12 FUNC WEAK DEFAULT 12 getegid@@GLIBC_2.17 + 1394: 000000000011515c 220 FUNC GLOBAL DEFAULT 12 xdr_opaque@@GLIBC_2.17 + 1395: 0000000000085e6c 212 FUNC GLOBAL DEFAULT 12 __libc_dynarray_resize@@GLIBC_PRIVATE + 1396: 00000000000d5a70 24 FUNC WEAK DEFAULT 12 setrlimit@@GLIBC_2.17 + 1397: 00000000000c6848 12 FUNC GLOBAL DEFAULT 12 getopt_long@@GLIBC_2.17 + 1398: 000000000007778c 340 FUNC GLOBAL DEFAULT 12 _IO_file_open@@GLIBC_2.17 + 1399: 000000000009b5b0 24 FUNC WEAK DEFAULT 12 settimeofday@@GLIBC_2.17 + 1400: 0000000000073b64 184 FUNC GLOBAL DEFAULT 12 open_memstream@@GLIBC_2.17 + 1401: 00000000000d6034 28 FUNC GLOBAL DEFAULT 12 sstk@@GLIBC_2.17 + 1402: 00000000000abc30 24 FUNC WEAK DEFAULT 12 getpgid@@GLIBC_2.17 + 1403: 000000000011cffc 4 FUNC GLOBAL DEFAULT 12 utmpxname@@GLIBC_2.17 + 1404: 0000000000074cc0 116 FUNC GLOBAL DEFAULT 12 __fpurge@@GLIBC_2.17 + 1405: 000000000011de14 208 FUNC GLOBAL DEFAULT 12 _dl_vsym@@GLIBC_PRIVATE + 1406: 00000000000f6040 288 FUNC GLOBAL DEFAULT 12 __strncat_chk@@GLIBC_2.17 + 1407: 0000000000036130 16 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmax_private@@GLIBC_PRIVATE + 1408: 0000000000041a80 12 FUNC WEAK DEFAULT 12 strtold_l@@GLIBC_2.17 + 1409: 00000000000ddbb0 256 FUNC GLOBAL DEFAULT 12 vwarnx@@GLIBC_2.17 + 1410: 00000000000d008c 36 FUNC GLOBAL DEFAULT 12 posix_madvise@@GLIBC_2.17 + 1411: 00000000000cf9c4 16 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getpgroup@@GLIBC_2.17 + 1412: 000000000008dafc 252 FUNC GLOBAL DEFAULT 12 __mempcpy_small@@GLIBC_2.17 + 1413: 000000000006a868 504 FUNC GLOBAL DEFAULT 12 fgetpos64@@GLIBC_2.17 + 1414: 0000000000185240 4 OBJECT GLOBAL DEFAULT 34 rexecoptions@@GLIBC_2.17 + 1415: 000000000008617c 356 FUNC WEAK DEFAULT 12 index@@GLIBC_2.17 + 1416: 00000000000ab2b8 16 FUNC GLOBAL DEFAULT 12 execvp@@GLIBC_2.17 + 1417: 00000000000ec280 68 FUNC GLOBAL DEFAULT 12 pthread_attr_getdetachstate@@GLIBC_2.17 + 1418: 0000000000072418 552 FUNC GLOBAL DEFAULT 12 _IO_wfile_xsputn@@GLIBC_2.17 + 1419: 00000000000daa00 24 FUNC GLOBAL DEFAULT 12 mincore@@GLIBC_2.17 + 1420: 00000000000832c0 268 FUNC WEAK DEFAULT 12 mallinfo@@GLIBC_2.17 + 1421: 00000000000df498 96 FUNC WEAK DEFAULT 12 getauxval@@GLIBC_2.17 + 1422: 0000000000104788 4 FUNC GLOBAL DEFAULT 12 freeifaddrs@@GLIBC_2.17 + 1423: 000000000002e148 492 FUNC GLOBAL DEFAULT 12 __duplocale@@GLIBC_2.17 + 1424: 0000000000083070 592 FUNC WEAK DEFAULT 12 malloc_trim@@GLIBC_2.17 + 1425: 000000000007aa04 92 FUNC GLOBAL DEFAULT 12 _IO_str_underflow@@GLIBC_2.17 + 1426: 0000000000113e7c 372 FUNC GLOBAL DEFAULT 12 svcudp_enablecache@@GLIBC_2.17 + 1427: 0000000000099268 156 FUNC GLOBAL DEFAULT 12 __wcsncasecmp_l@@GLIBC_2.17 + 1428: 00000000000d2410 60 FUNC GLOBAL DEFAULT 12 linkat@@GLIBC_2.17 + 1429: 000000000007a798 296 FUNC GLOBAL DEFAULT 12 _IO_default_pbackfail@@GLIBC_2.17 + 1430: 00000000001057d8 32 FUNC GLOBAL DEFAULT 12 inet6_rth_space@@GLIBC_2.17 + 1431: 0000000000070240 144 FUNC GLOBAL DEFAULT 12 _IO_free_wbackup_area@@GLIBC_2.17 + 1432: 00000000000ec704 68 FUNC GLOBAL DEFAULT 12 pthread_cond_timedwait@@GLIBC_2.17 + 1433: 000000000006b374 436 FUNC GLOBAL DEFAULT 12 _IO_fsetpos@@GLIBC_2.17 + 1434: 00000000000a95f8 844 FUNC GLOBAL DEFAULT 12 getpwnam_r@@GLIBC_2.17 + 1435: 0000000000041a8c 176 FUNC GLOBAL DEFAULT 12 __strtof_nan@@GLIBC_PRIVATE + 1436: 0000000000073364 716 FUNC GLOBAL DEFAULT 12 freopen@@GLIBC_2.17 + 1437: 00000000000f510c 168 FUNC GLOBAL DEFAULT 12 __clock_nanosleep@@GLIBC_PRIVATE + 1438: 00000000000ec184 48 FUNC GLOBAL DEFAULT 12 __libc_alloca_cutoff@@GLIBC_PRIVATE + 1439: 0000000000180dc8 8 OBJECT WEAK DEFAULT 33 __realloc_hook@@GLIBC_2.17 + 1440: 00000000000e4fe0 396 FUNC GLOBAL DEFAULT 12 getsgnam@@GLIBC_2.17 + 1441: 0000000000088b90 108 FUNC WEAK DEFAULT 12 strncasecmp@@GLIBC_2.17 + 1442: 00000000000f5794 660 FUNC WEAK DEFAULT 12 backtrace_symbols_fd@@GLIBC_2.17 + 1443: 00000000000d0380 100 FUNC GLOBAL DEFAULT 12 __xmknod@@GLIBC_2.17 + 1444: 00000000000d86e4 28 FUNC GLOBAL DEFAULT 12 remque@@GLIBC_2.17 + 1445: 00000000000f7538 32 FUNC GLOBAL DEFAULT 12 __recv_chk@@GLIBC_2.17 + 1446: 00000000001058ac 216 FUNC GLOBAL DEFAULT 12 inet6_rth_reverse@@GLIBC_2.17 + 1447: 00000000000715c0 2320 FUNC GLOBAL DEFAULT 12 _IO_wfile_seekoff@@GLIBC_2.17 + 1448: 00000000000d7094 216 FUNC GLOBAL DEFAULT 12 ptrace@@GLIBC_2.17 + 1449: 00000000000e31b4 120 FUNC WEAK DEFAULT 12 towlower_l@@GLIBC_2.17 + 1450: 000000000010475c 44 FUNC GLOBAL DEFAULT 12 getifaddrs@@GLIBC_2.17 + 1451: 00000000000344c8 216 FUNC WEAK DEFAULT 12 scalbn@@GLIBC_2.17 + 1452: 000000000006e768 56 FUNC GLOBAL DEFAULT 12 putwc_unlocked@@GLIBC_2.17 + 1453: 0000000000000064 4 TLS GLOBAL DEFAULT 23 h_errno@GLIBC_PRIVATE + 1454: 0000000000052038 40 FUNC GLOBAL DEFAULT 12 printf_size_info@@GLIBC_2.17 + 1455: 0000000000103298 168 FUNC WEAK DEFAULT 12 if_nametoindex@@GLIBC_2.17 + 1456: 0000000000094ef0 12 FUNC GLOBAL DEFAULT 12 __wcstold_l@@GLIBC_2.17 + 1457: 000000000008fc8c 20 FUNC GLOBAL DEFAULT 12 __wcstoll_internal@@GLIBC_2.17 + 1458: 0000000000185178 72 OBJECT GLOBAL DEFAULT 34 _res_hconf@@GLIBC_2.17 + 1459: 00000000000d15a8 12 FUNC WEAK DEFAULT 12 creat@@GLIBC_2.17 + 1460: 0000000000086080 96 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_copy_bytes@@GLIBC_PRIVATE + 1461: 00000000000d02d0 88 FUNC GLOBAL DEFAULT 12 __fxstat@@GLIBC_2.17 + 1462: 0000000000077550 400 FUNC GLOBAL DEFAULT 12 _IO_file_close_it@@GLIBC_2.17 + 1463: 0000000000075dec 52 FUNC GLOBAL DEFAULT 12 _IO_file_close@@GLIBC_2.17 + 1464: 00000000001110c0 340 FUNC GLOBAL DEFAULT 12 key_decryptsession_pk@@GLIBC_2.17 + 1465: 0000000000086994 176 FUNC GLOBAL DEFAULT 12 strncat@@GLIBC_2.17 + 1466: 00000000000d5130 24 FUNC WEAK DEFAULT 12 sendfile64@@GLIBC_2.17 + 1467: 0000000000180214 4 OBJECT GLOBAL DEFAULT 33 __check_rhosts_file@@GLIBC_2.17 + 1468: 0000000000044844 8 FUNC GLOBAL DEFAULT 12 wcstoimax@@GLIBC_2.17 + 1469: 00000000000e0340 64 FUNC WEAK DEFAULT 12 sendmsg@@GLIBC_2.17 + 1470: 00000000000f5794 660 FUNC GLOBAL DEFAULT 12 __backtrace_symbols_fd@@GLIBC_2.17 + 1471: 00000000000d62cc 208 FUNC GLOBAL DEFAULT 12 pwritev@@GLIBC_2.17 + 1472: 0000000000089254 140 FUNC GLOBAL DEFAULT 12 __strsep_g@@GLIBC_2.17 + 1473: 0000000000039c18 24 FUNC WEAK DEFAULT 12 strtoull@@GLIBC_2.17 + 1474: 000000000006f8d8 504 FUNC GLOBAL DEFAULT 12 __wunderflow@@GLIBC_2.17 + 1475: 0000000000074ca0 20 FUNC GLOBAL DEFAULT 12 __fwritable@@GLIBC_2.17 + 1476: 000000000006a17c 676 FUNC GLOBAL DEFAULT 12 _IO_fclose@@GLIBC_2.17 + 1477: 00000000000d5aa8 356 FUNC WEAK DEFAULT 12 ulimit@@GLIBC_2.17 + 1478: 0000000000035d5c 148 FUNC GLOBAL DEFAULT 12 __sysv_signal@@GLIBC_2.17 + 1479: 00000000000f764c 28 FUNC GLOBAL DEFAULT 12 __realpath_chk@@GLIBC_2.17 + 1480: 00000000000745b8 132 FUNC WEAK DEFAULT 12 obstack_printf@@GLIBC_2.17 + 1481: 0000000000070df4 1584 FUNC GLOBAL DEFAULT 12 _IO_wfile_underflow@@GLIBC_2.17 + 1482: 00000000000cfff4 40 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getsigmask@@GLIBC_2.17 + 1483: 000000000006d88c 124 FUNC GLOBAL DEFAULT 12 fputwc_unlocked@@GLIBC_2.17 + 1484: 0000000000039824 40 FUNC GLOBAL DEFAULT 12 drand48@@GLIBC_2.17 + 1485: 000000000011e9dc 136 FUNC GLOBAL DEFAULT 12 __nss_passwd_lookup@@GLIBC_2.17 + 1486: 0000000000037ab0 812 FUNC WEAK DEFAULT 12 qsort_r@@GLIBC_2.17 + 1487: 00000000001147e4 36 FUNC GLOBAL DEFAULT 12 xdr_free@@GLIBC_2.17 + 1488: 00000000000f8e88 432 FUNC GLOBAL DEFAULT 12 __obstack_printf_chk@@GLIBC_2.17 + 1489: 00000000000731b4 48 FUNC GLOBAL DEFAULT 12 fileno@@GLIBC_2.17 + 1490: 000000000002eb1c 16 FUNC GLOBAL DEFAULT 12 __isxdigit_l@@GLIBC_2.17 + 1491: 0000000000073c1c 4 FUNC GLOBAL DEFAULT 12 pclose@@GLIBC_2.17 + 1492: 0000000000088800 344 FUNC GLOBAL DEFAULT 12 __bzero@@GLIBC_2.17 + 1493: 00000000000fac98 228 FUNC GLOBAL DEFAULT 12 sethostent@@GLIBC_2.17 + 1494: 00000000000c4ce8 1232 FUNC WEAK DEFAULT 12 re_search@@GLIBC_2.17 + 1495: 00000000001059a0 44 FUNC GLOBAL DEFAULT 12 inet6_rth_getaddr@@GLIBC_2.17 + 1496: 00000000000abc50 24 FUNC GLOBAL DEFAULT 12 __setpgid@@GLIBC_2.17 + 1497: 000000000002f0ac 8 FUNC GLOBAL DEFAULT 12 __dgettext@@GLIBC_2.17 + 1498: 00000000000d6668 148 FUNC WEAK DEFAULT 12 gethostname@@GLIBC_2.17 + 1499: 00000000000ec1b4 68 FUNC GLOBAL DEFAULT 12 pthread_equal@@GLIBC_2.17 + 1500: 00000000000d0558 112 FUNC WEAK DEFAULT 12 fstatvfs64@@GLIBC_2.17 + 1501: 00000000000e4850 168 FUNC WEAK DEFAULT 12 sgetspent_r@@GLIBC_2.17 + 1502: 00000000000df4f8 8 FUNC GLOBAL DEFAULT 12 __libc_ifunc_impl_list@@GLIBC_PRIVATE + 1503: 00000000000df610 68 FUNC GLOBAL DEFAULT 12 __clone@@GLIBC_2.17 + 1504: 00000000000d8380 124 FUNC WEAK DEFAULT 12 utimes@@GLIBC_2.17 + 1505: 00000000000ec84c 68 FUNC GLOBAL DEFAULT 12 pthread_mutex_init@@GLIBC_2.17 + 1506: 00000000000d6ff4 80 FUNC GLOBAL DEFAULT 12 usleep@@GLIBC_2.17 + 1507: 00000000000365d4 388 FUNC GLOBAL DEFAULT 12 sigset@@GLIBC_2.17 + 1508: 00000000000de874 28 FUNC GLOBAL DEFAULT 12 ustat@@GLIBC_2.17 + 1509: 00000000000d1d90 80 FUNC WEAK DEFAULT 12 chown@@GLIBC_2.17 + 1510: 00000000000e0988 84 FUNC GLOBAL DEFAULT 12 __cmsg_nxthdr@@GLIBC_2.17 + 1511: 00000000000859f8 44 FUNC GLOBAL DEFAULT 12 _obstack_memory_used@@GLIBC_2.17 + 1512: 00000000000811b4 844 FUNC GLOBAL DEFAULT 12 __libc_realloc@@GLIBC_2.17 + 1513: 00000000000dfc40 76 FUNC GLOBAL DEFAULT 12 splice@@GLIBC_2.17 + 1514: 00000000000cf9e0 8 FUNC GLOBAL DEFAULT 12 posix_spawn@@GLIBC_2.17 + 1515: 00000000000e2ba4 152 FUNC GLOBAL DEFAULT 12 __iswblank_l@@GLIBC_2.17 + 1516: 0000000000134420 36 OBJECT GLOBAL DEFAULT 15 _itoa_lower_digits@@GLIBC_PRIVATE + 1517: 000000000007036c 144 FUNC GLOBAL DEFAULT 12 _IO_sungetwc@@GLIBC_2.17 + 1518: 00000000000d15f8 1636 FUNC WEAK DEFAULT 12 getcwd@@GLIBC_2.17 + 1519: 000000000006b98c 788 FUNC WEAK DEFAULT 12 __getdelim@@GLIBC_2.17 + 1520: 000000000011468c 132 FUNC GLOBAL DEFAULT 12 xdr_vector@@GLIBC_2.17 + 1521: 00000000000df950 44 FUNC GLOBAL DEFAULT 12 eventfd_write@@GLIBC_2.17 + 1522: 0000000000180df8 8 OBJECT GLOBAL DEFAULT 33 __progname_full@@GLIBC_2.17 + 1523: 0000000000044b40 180 FUNC WEAK DEFAULT 12 swapcontext@@GLIBC_2.17 + 1524: 00000000000df3e0 24 FUNC GLOBAL DEFAULT 12 lgetxattr@@GLIBC_2.17 + 1525: 0000000000111f48 52 FUNC GLOBAL DEFAULT 12 __rpc_thread_svc_fdset@@GLIBC_2.17 + 1526: 0000000000184f70 4 OBJECT GLOBAL DEFAULT 34 error_one_per_line@@GLIBC_2.17 + 1527: 0000000000034704 24 FUNC GLOBAL DEFAULT 12 __finitef@@GLIBC_2.17 + 1528: 0000000000115f3c 152 FUNC GLOBAL DEFAULT 12 xdr_uint8_t@@GLIBC_2.17 + 1529: 00000000000988f4 2020 FUNC WEAK DEFAULT 12 wcsxfrm_l@@GLIBC_2.17 + 1530: 00000000001036ac 160 FUNC WEAK DEFAULT 12 if_indextoname@@GLIBC_2.17 + 1531: 000000000010dcb8 476 FUNC GLOBAL DEFAULT 12 authdes_pk_create@@GLIBC_2.17 + 1532: 00000000001124ac 76 FUNC GLOBAL DEFAULT 12 svcerr_decode@@GLIBC_2.17 + 1533: 000000000006f06c 132 FUNC GLOBAL DEFAULT 12 swscanf@@GLIBC_2.17 + 1534: 00000000000dfd60 68 FUNC GLOBAL DEFAULT 12 vmsplice@@GLIBC_2.17 + 1535: 000000000002183c 12 FUNC WEAK DEFAULT 12 gnu_get_libc_version@@GLIBC_2.17 + 1536: 000000000006b76c 544 FUNC WEAK DEFAULT 12 fwrite@@GLIBC_2.17 + 1537: 000000000011d000 4 FUNC GLOBAL DEFAULT 12 updwtmpx@@GLIBC_2.17 + 1538: 00000000000349f0 28 FUNC GLOBAL DEFAULT 12 __finitel@@GLIBC_2.17 + 1539: 000000000010b1d8 140 FUNC GLOBAL DEFAULT 12 des_setparity@@GLIBC_2.17 + 1540: 0000000000105074 476 FUNC GLOBAL DEFAULT 12 getsourcefilter@@GLIBC_2.17 + 1541: 000000000003471c 28 FUNC WEAK DEFAULT 12 copysignf@@GLIBC_2.17 + 1542: 000000000006b1c4 432 FUNC WEAK DEFAULT 12 fread@@GLIBC_2.17 + 1543: 00000000000f5a28 4 FUNC GLOBAL DEFAULT 12 __cyg_profile_func_enter@@GLIBC_2.17 + 1544: 00000000000346ec 24 FUNC WEAK DEFAULT 12 isnanf@@GLIBC_2.17 + 1545: 00000000000399c8 24 FUNC GLOBAL DEFAULT 12 lrand48_r@@GLIBC_2.17 + 1546: 00000000000db190 864 FUNC GLOBAL DEFAULT 12 qfcvt_r@@GLIBC_2.17 + 1547: 00000000000dabe8 724 FUNC GLOBAL DEFAULT 12 fcvt_r@@GLIBC_2.17 + 1548: 0000000000021f60 68 FUNC GLOBAL DEFAULT 12 iconv_close@@GLIBC_2.17 + 1549: 000000000009b540 112 FUNC WEAK DEFAULT 12 gettimeofday@@GLIBC_2.17 + 1550: 00000000000e2a6c 156 FUNC WEAK DEFAULT 12 iswalnum_l@@GLIBC_2.17 + 1551: 000000000009b5c8 328 FUNC WEAK DEFAULT 12 adjtime@@GLIBC_2.17 + 1552: 000000000010173c 244 FUNC WEAK DEFAULT 12 getnetgrent_r@@GLIBC_2.17 + 1553: 0000000000070550 80 FUNC GLOBAL DEFAULT 12 _IO_wmarker_delta@@GLIBC_2.17 + 1554: 00000000000d8c64 72 FUNC GLOBAL DEFAULT 12 endttyent@@GLIBC_2.17 + 1555: 0000000000039914 36 FUNC GLOBAL DEFAULT 12 seed48@@GLIBC_2.17 + 1556: 0000000000067e78 68 FUNC GLOBAL DEFAULT 12 rename@@GLIBC_2.17 + 1557: 0000000000034a0c 48 FUNC WEAK DEFAULT 12 copysignl@@GLIBC_2.17 + 1558: 00000000000353d0 44 FUNC WEAK DEFAULT 12 sigaction@@GLIBC_2.17 + 1559: 000000000010b720 492 FUNC GLOBAL DEFAULT 12 rtime@@GLIBC_2.17 + 1560: 00000000000349c8 40 FUNC WEAK DEFAULT 12 isnanl@@GLIBC_2.17 + 1561: 0000000000079b38 124 FUNC GLOBAL DEFAULT 12 _IO_default_finish@@GLIBC_2.17 + 1562: 00000000000d71e0 344 FUNC GLOBAL DEFAULT 12 getfsent@@GLIBC_2.17 + 1563: 00000000000dfa80 24 FUNC GLOBAL DEFAULT 12 epoll_ctl@@GLIBC_2.17 + 1564: 0000000000099d04 452 FUNC GLOBAL DEFAULT 12 __isoc99_vwscanf@@GLIBC_2.17 + 1565: 00000000000e3118 156 FUNC GLOBAL DEFAULT 12 __iswxdigit_l@@GLIBC_2.17 + 1566: 000000000002ebac 84 FUNC GLOBAL DEFAULT 12 __ctype_init@@GLIBC_PRIVATE + 1567: 000000000006b004 448 FUNC GLOBAL DEFAULT 12 _IO_fputs@@GLIBC_2.17 + 1568: 00000000000df9a0 24 FUNC GLOBAL DEFAULT 12 fanotify_mark@@GLIBC_2.17 + 1569: 00000000000da9e0 24 FUNC WEAK DEFAULT 12 madvise@@GLIBC_2.17 + 1570: 00000000000a8190 756 FUNC GLOBAL DEFAULT 12 _nss_files_parse_grent@@GLIBC_PRIVATE + 1571: 000000000011d580 40 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper@@GLIBC_2.17 + 1572: 0000000000113ff0 172 FUNC GLOBAL DEFAULT 12 passwd2des@@GLIBC_2.17 + 1573: 000000000011174c 388 FUNC GLOBAL DEFAULT 12 getnetname@@GLIBC_2.17 + 1574: 00000000000fb7ec 228 FUNC GLOBAL DEFAULT 12 setnetent@@GLIBC_2.17 + 1575: 0000000000035b70 44 FUNC GLOBAL DEFAULT 12 __sigdelset@@GLIBC_2.17 + 1576: 00000000000d6ef0 16 FUNC WEAK DEFAULT 12 mkstemp64@@GLIBC_2.17 + 1577: 000000000008dccc 276 FUNC GLOBAL DEFAULT 12 __stpcpy_small@@GLIBC_2.17 + 1578: 00000000000a6254 36 FUNC GLOBAL DEFAULT 12 scandir@@GLIBC_2.17 + 1579: 00000000000346c8 36 FUNC WEAK DEFAULT 12 isinff@@GLIBC_2.17 + 1580: 00000000000df79c 20 FUNC GLOBAL DEFAULT 12 gnu_dev_minor@@GLIBC_2.17 + 1581: 0000000000036120 16 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmin_private@@GLIBC_PRIVATE + 1582: 00000000000aba10 12 FUNC WEAK DEFAULT 12 geteuid@@GLIBC_2.17 + 1583: 0000000000035054 68 FUNC GLOBAL DEFAULT 12 __libc_siglongjmp@@GLIBC_PRIVATE + 1584: 00000000000abce0 24 FUNC GLOBAL DEFAULT 12 getresgid@@GLIBC_2.17 + 1585: 00000000000d04b0 24 FUNC WEAK DEFAULT 12 statfs@@GLIBC_2.17 + 1586: 00000000000fe718 348 FUNC GLOBAL DEFAULT 12 ether_hostton@@GLIBC_2.17 + 1587: 00000000000d6f44 44 FUNC WEAK DEFAULT 12 mkstemps64@@GLIBC_2.17 + 1588: 00000000000c6880 24 FUNC WEAK DEFAULT 12 sched_setparam@@GLIBC_2.17 + 1589: 00000000000e2b08 156 FUNC WEAK DEFAULT 12 iswalpha_l@@GLIBC_2.17 + 1590: 00000000000f5a2c 208 FUNC GLOBAL DEFAULT 12 __memcpy_chk@@GLIBC_2.17 + 1591: 00000000000390dc 168 FUNC WEAK DEFAULT 12 srandom@@GLIBC_2.17 + 1592: 00000000000dfc00 24 FUNC GLOBAL DEFAULT 12 quotactl@@GLIBC_2.17 + 1593: 00000000000e2fe4 156 FUNC GLOBAL DEFAULT 12 __iswspace_l@@GLIBC_2.17 + 1594: 00000000000fe300 744 FUNC GLOBAL DEFAULT 12 getrpcbynumber_r@@GLIBC_2.17 + 1595: 000000000003499c 44 FUNC WEAK DEFAULT 12 isinfl@@GLIBC_2.17 + 1596: 0000000000033c54 1908 FUNC GLOBAL DEFAULT 12 __open_catalog@@GLIBC_PRIVATE + 1597: 0000000000035cf4 68 FUNC GLOBAL DEFAULT 12 sigismember@@GLIBC_2.17 + 1598: 000000000006863c 412 FUNC GLOBAL DEFAULT 12 __isoc99_vfscanf@@GLIBC_2.17 + 1599: 00000000000d8b58 160 FUNC GLOBAL DEFAULT 12 getttynam@@GLIBC_2.17 + 1600: 0000000000036758 8 FUNC GLOBAL DEFAULT 12 atof@@GLIBC_2.17 + 1601: 00000000000c53c0 64 FUNC WEAK DEFAULT 12 re_set_registers@@GLIBC_2.17 + 1602: 00000000000f5018 120 FUNC WEAK DEFAULT 12 clock_gettime@@GLIBC_2.17 + 1603: 00000000000ec3d4 68 FUNC GLOBAL DEFAULT 12 pthread_attr_setschedparam@@GLIBC_2.17 + 1604: 0000000000088694 364 FUNC GLOBAL DEFAULT 12 bcopy@@GLIBC_2.17 + 1605: 0000000000073ef8 16 FUNC GLOBAL DEFAULT 12 setlinebuf@@GLIBC_2.17 + 1606: 00000000000f6268 224 FUNC GLOBAL DEFAULT 12 __stpncpy_chk@@GLIBC_2.17 + 1607: 00000000000e5a70 744 FUNC GLOBAL DEFAULT 12 getsgnam_r@@GLIBC_2.17 + 1608: 000000000008ea2c 280 FUNC WEAK DEFAULT 12 wcswcs@@GLIBC_2.17 + 1609: 0000000000036760 28 FUNC GLOBAL DEFAULT 12 atoi@@GLIBC_2.17 + 1610: 0000000000114a24 232 FUNC GLOBAL DEFAULT 12 xdr_hyper@@GLIBC_2.17 + 1611: 000000000008df9c 124 FUNC GLOBAL DEFAULT 12 __strtok_r_1c@@GLIBC_2.17 + 1612: 00000000000e2eac 156 FUNC GLOBAL DEFAULT 12 __iswprint_l@@GLIBC_2.17 + 1613: 000000000009e4c8 72 FUNC GLOBAL DEFAULT 12 stime@@GLIBC_2.17 + 1614: 00000000000a656c 96 FUNC WEAK DEFAULT 12 getdirentries64@@GLIBC_2.17 + 1615: 00000000000326d8 380 FUNC WEAK DEFAULT 12 textdomain@@GLIBC_2.17 + 1616: 00000000000d002c 16 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getschedparam@@GLIBC_2.17 + 1617: 00000000000c6920 24 FUNC WEAK DEFAULT 12 sched_get_priority_max@@GLIBC_2.17 + 1618: 00000000000d58e4 12 FUNC GLOBAL DEFAULT 12 tcflush@@GLIBC_2.17 + 1619: 000000000003677c 12 FUNC GLOBAL DEFAULT 12 atol@@GLIBC_2.17 + 1620: 00000000001056d8 200 FUNC GLOBAL DEFAULT 12 inet6_opt_find@@GLIBC_2.17 + 1621: 000000000008fccc 24 FUNC WEAK DEFAULT 12 wcstoull@@GLIBC_2.17 + 1622: 00000000000daa80 24 FUNC GLOBAL DEFAULT 12 mlockall@@GLIBC_2.17 + 1623: 000000000017de08 520 OBJECT GLOBAL DEFAULT 29 sys_siglist@@GLIBC_2.17 + 1624: 00000000000fea88 344 FUNC GLOBAL DEFAULT 12 ether_ntohost@@GLIBC_2.17 + 1625: 00000000000aa308 204 FUNC WEAK DEFAULT 12 waitpid@@GLIBC_2.17 + 1626: 00000000000d3354 24 FUNC WEAK DEFAULT 12 ftw64@@GLIBC_2.17 + 1627: 00000000000e2688 180 FUNC WEAK DEFAULT 12 iswxdigit@@GLIBC_2.17 + 1628: 00000000000d706c 40 FUNC GLOBAL DEFAULT 12 stty@@GLIBC_2.17 + 1629: 0000000000074d34 52 FUNC GLOBAL DEFAULT 12 __fpending@@GLIBC_2.17 + 1630: 000000000011ccc8 100 FUNC GLOBAL DEFAULT 12 unlockpt@@GLIBC_2.17 + 1631: 00000000000d1460 56 FUNC WEAK DEFAULT 12 close@@GLIBC_2.17 + 1632: 00000000000f88f0 28 FUNC GLOBAL DEFAULT 12 __mbsnrtowcs_chk@@GLIBC_2.17 + 1633: 0000000000086394 264 FUNC WEAK DEFAULT 12 strverscmp@@GLIBC_2.17 + 1634: 0000000000115538 284 FUNC GLOBAL DEFAULT 12 xdr_union@@GLIBC_2.17 + 1635: 00000000000f5324 400 FUNC WEAK DEFAULT 12 backtrace@@GLIBC_2.17 + 1636: 0000000000033b28 176 FUNC GLOBAL DEFAULT 12 catgets@@GLIBC_2.17 + 1637: 00000000000d001c 16 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getschedpolicy@@GLIBC_2.17 + 1638: 0000000000038e70 36 FUNC GLOBAL DEFAULT 12 lldiv@@GLIBC_2.17 + 1639: 00000000000ec954 68 FUNC WEAK DEFAULT 12 pthread_setcancelstate@@GLIBC_2.17 + 1640: 000000000011b2d8 180 FUNC WEAK DEFAULT 12 endutent@@GLIBC_2.17 + 1641: 00000000000677a4 148 FUNC GLOBAL DEFAULT 12 tmpnam@@GLIBC_2.17 + 1642: 00000000000ee598 176 FUNC GLOBAL DEFAULT 12 inet_nsap_ntoa@@GLIBC_2.17 + 1643: 000000000008e34c 284 FUNC GLOBAL DEFAULT 12 strerror_l@@GLIBC_2.17 + 1644: 00000000000d074c 328 FUNC WEAK DEFAULT 12 open@@GLIBC_2.17 + 1645: 00000000000dca54 3552 FUNC WEAK DEFAULT 12 twalk@@GLIBC_2.17 + 1646: 0000000000039908 12 FUNC GLOBAL DEFAULT 12 srand48@@GLIBC_2.17 + 1647: 000000000002eb38 12 FUNC WEAK DEFAULT 12 toupper_l@@GLIBC_2.17 + 1648: 000000000010d464 272 FUNC GLOBAL DEFAULT 12 svcunixfd_create@@GLIBC_2.17 + 1649: 00000000000d3354 24 FUNC GLOBAL DEFAULT 12 ftw@@GLIBC_2.17 + 1650: 000000000008fcb8 20 FUNC GLOBAL DEFAULT 12 __wcstoull_internal@@GLIBC_2.17 + 1651: 00000000000865e8 412 FUNC WEAK DEFAULT 12 strerror_r@@GLIBC_2.17 + 1652: 00000000000e371c 416 FUNC GLOBAL DEFAULT 12 sgetspent@@GLIBC_2.17 + 1653: 000000000007a8ec 12 FUNC GLOBAL DEFAULT 12 _IO_iter_begin@@GLIBC_2.17 + 1654: 00000000000ec780 68 FUNC GLOBAL DEFAULT 12 pthread_getschedparam@@GLIBC_2.17 + 1655: 00000000000f7684 476 FUNC GLOBAL DEFAULT 12 __fread_chk@@GLIBC_2.17 + 1656: 000000000008f348 420 FUNC WEAK DEFAULT 12 c32rtomb@@GLIBC_2.17 + 1657: 0000000000030820 8 FUNC WEAK DEFAULT 12 dngettext@@GLIBC_2.17 + 1658: 00000000000d6e60 24 FUNC GLOBAL DEFAULT 12 vhangup@@GLIBC_2.17 + 1659: 0000000000111f7c 56 FUNC GLOBAL DEFAULT 12 __rpc_thread_createerr@@GLIBC_2.17 + 1660: 0000000000110c2c 280 FUNC GLOBAL DEFAULT 12 key_secretkey_is_set@@GLIBC_2.17 + 1661: 000000000009ac04 16 FUNC GLOBAL DEFAULT 12 localtime@@GLIBC_2.17 + 1662: 000000000011cfec 4 FUNC GLOBAL DEFAULT 12 endutxent@@GLIBC_2.17 + 1663: 00000000000d6e80 24 FUNC WEAK DEFAULT 12 swapon@@GLIBC_2.17 + 1664: 00000000000df700 8 FUNC WEAK DEFAULT 12 umount@@GLIBC_2.17 + 1665: 00000000000df6c0 64 FUNC WEAK DEFAULT 12 lseek64@@GLIBC_2.17 + 1666: 00000000000f890c 28 FUNC GLOBAL DEFAULT 12 __wcsnrtombs_chk@@GLIBC_2.17 + 1667: 000000000007572c 12 FUNC GLOBAL DEFAULT 12 ferror_unlocked@@GLIBC_2.17 + 1668: 000000000009aba0 60 FUNC GLOBAL DEFAULT 12 difftime@@GLIBC_2.17 + 1669: 00000000000e33c0 140 FUNC WEAK DEFAULT 12 wctrans_l@@GLIBC_2.17 + 1670: 000000000008617c 356 FUNC GLOBAL DEFAULT 12 strchr@@GLIBC_2.17 + 1671: 00000000000dfa00 24 FUNC GLOBAL DEFAULT 12 capset@@GLIBC_2.17 + 1672: 00000000000aacc4 108 FUNC WEAK DEFAULT 12 _Exit@@GLIBC_2.17 + 1673: 00000000000df340 24 FUNC GLOBAL DEFAULT 12 flistxattr@@GLIBC_2.17 + 1674: 000000000010ed84 456 FUNC GLOBAL DEFAULT 12 clnt_spcreateerror@@GLIBC_2.17 + 1675: 000000000008593c 188 FUNC GLOBAL DEFAULT 12 obstack_free@@GLIBC_2.17 + 1676: 00000000000ec4a0 68 FUNC GLOBAL DEFAULT 12 pthread_attr_getscope@@GLIBC_2.17 + 1677: 0000000000102010 228 FUNC GLOBAL DEFAULT 12 getaliasent@@GLIBC_2.17 + 1678: 000000000017d9d0 1080 OBJECT GLOBAL DEFAULT 29 _sys_errlist@@GLIBC_2.17 + 1679: 0000000000035d38 28 FUNC WEAK DEFAULT 12 sigreturn@@GLIBC_2.17 + 1680: 00000000000ff460 440 FUNC GLOBAL DEFAULT 12 rresvport_af@@GLIBC_2.17 + 1681: 00000000000387d4 28 FUNC WEAK DEFAULT 12 secure_getenv@@GLIBC_2.17 + 1682: 0000000000036588 76 FUNC GLOBAL DEFAULT 12 sigignore@@GLIBC_2.17 + 1683: 00000000000e21a8 172 FUNC WEAK DEFAULT 12 iswdigit@@GLIBC_2.17 + 1684: 0000000000112578 56 FUNC GLOBAL DEFAULT 12 svcerr_weakauth@@GLIBC_2.17 + 1685: 00000000000e11ac 408 FUNC GLOBAL DEFAULT 12 __monstartup@@GLIBC_2.17 + 1686: 00000000000e20f4 180 FUNC WEAK DEFAULT 12 iswcntrl@@GLIBC_2.17 + 1687: 000000000007463c 4 FUNC WEAK DEFAULT 12 fcloseall@@GLIBC_2.17 + 1688: 00000000000f7d48 572 FUNC GLOBAL DEFAULT 12 __wprintf_chk@@GLIBC_2.17 + 1689: 00000000001828c8 8 OBJECT GLOBAL DEFAULT 34 __timezone@@GLIBC_2.17 + 1690: 000000000006801c 72 FUNC WEAK DEFAULT 12 funlockfile@@GLIBC_2.17 + 1691: 00000000000d7bc4 28 FUNC WEAK DEFAULT 12 endmntent@@GLIBC_2.17 + 1692: 0000000000052060 132 FUNC GLOBAL DEFAULT 12 fprintf@@GLIBC_2.17 + 1693: 00000000000e0030 24 FUNC WEAK DEFAULT 12 getsockname@@GLIBC_2.17 + 1694: 00000000000a6254 36 FUNC WEAK DEFAULT 12 scandir64@@GLIBC_2.17 + 1695: 00000000000d01e4 52 FUNC GLOBAL DEFAULT 12 utime@@GLIBC_2.17 + 1696: 00000000000db85c 36 FUNC GLOBAL DEFAULT 12 hsearch@@GLIBC_2.17 + 1697: 0000000000184e28 8 OBJECT GLOBAL DEFAULT 34 _nl_domain_bindings@@GLIBC_2.17 + 1698: 0000000000041c10 200 FUNC GLOBAL DEFAULT 12 __strtold_nan@@GLIBC_PRIVATE + 1699: 00000000000ea8b4 292 FUNC WEAK DEFAULT 12 argp_error@@GLIBC_2.17 + 1700: 000000000008df3c 44 FUNC GLOBAL DEFAULT 12 __strpbrk_c2@@GLIBC_2.17 + 1701: 0000000000038e00 16 FUNC GLOBAL DEFAULT 12 abs@@GLIBC_2.17 + 1702: 00000000000e03a0 76 FUNC WEAK DEFAULT 12 sendto@@GLIBC_2.17 + 1703: 000000000008df68 52 FUNC GLOBAL DEFAULT 12 __strpbrk_c3@@GLIBC_2.17 + 1704: 00000000000e2f48 156 FUNC WEAK DEFAULT 12 iswpunct_l@@GLIBC_2.17 + 1705: 00000000000d7be0 1652 FUNC WEAK DEFAULT 12 addmntent@@GLIBC_2.17 + 1706: 0000000000085aac 188 FUNC GLOBAL DEFAULT 12 __libc_scratch_buffer_grow_preserve@@GLIBC_PRIVATE + 1707: 000000000011c6e4 268 FUNC WEAK DEFAULT 12 updwtmp@@GLIBC_2.17 + 1708: 0000000000041a80 12 FUNC GLOBAL DEFAULT 12 __strtold_l@@GLIBC_2.17 + 1709: 00000000000f2520 968 FUNC GLOBAL DEFAULT 12 __nss_database_lookup@@GLIBC_2.17 + 1710: 000000000006f2b8 48 FUNC GLOBAL DEFAULT 12 _IO_least_wmarker@@GLIBC_2.17 + 1711: 00000000000aac80 68 FUNC WEAK DEFAULT 12 vfork@@GLIBC_2.17 + 1712: 0000000000086d10 88 FUNC WEAK DEFAULT 12 rindex@@GLIBC_2.17 + 1713: 00000000000446bc 376 FUNC GLOBAL DEFAULT 12 addseverity@@GLIBC_2.17 + 1714: 00000000000f9120 28 FUNC GLOBAL DEFAULT 12 __poll_chk@@GLIBC_2.17 + 1715: 00000000000dfa60 24 FUNC GLOBAL DEFAULT 12 epoll_create1@@GLIBC_2.17 + 1716: 0000000000112024 336 FUNC GLOBAL DEFAULT 12 xprt_register@@GLIBC_2.17 + 1717: 00000000000a78a4 300 FUNC GLOBAL DEFAULT 12 getgrent_r@@GLIBC_2.17 + 1718: 0000000000111214 212 FUNC GLOBAL DEFAULT 12 key_gendes@@GLIBC_2.17 + 1719: 00000000000f6c30 448 FUNC GLOBAL DEFAULT 12 __vfprintf_chk@@GLIBC_2.17 + 1720: 000000000009b4d0 48 FUNC GLOBAL DEFAULT 12 mktime@@GLIBC_2.17 + 1721: 0000000000038e94 180 FUNC GLOBAL DEFAULT 12 mblen@@GLIBC_2.17 + 1722: 00000000000dd834 140 FUNC WEAK DEFAULT 12 tdestroy@@GLIBC_2.17 + 1723: 00000000000df5ec 28 FUNC GLOBAL DEFAULT 12 sysctl@@GLIBC_2.17 + 1724: 00000000000df498 96 FUNC GLOBAL DEFAULT 12 __getauxval@@GLIBC_2.17 + 1725: 000000000010e634 872 FUNC GLOBAL DEFAULT 12 clnt_create@@GLIBC_2.17 + 1726: 00000000000a6278 20 FUNC GLOBAL DEFAULT 12 alphasort@@GLIBC_2.17 + 1727: 00000000001828c8 8 OBJECT WEAK DEFAULT 34 timezone@@GLIBC_2.17 + 1728: 0000000000107e4c 272 FUNC GLOBAL DEFAULT 12 xdr_rmtcall_args@@GLIBC_2.17 + 1729: 0000000000087bf4 188 FUNC GLOBAL DEFAULT 12 __strtok_r@@GLIBC_2.17 + 1730: 00000000001167f4 32 FUNC GLOBAL DEFAULT 12 xdrstdio_create@@GLIBC_2.17 + 1731: 0000000000081aa0 620 FUNC WEAK DEFAULT 12 mallopt@@GLIBC_2.17 + 1732: 0000000000044834 8 FUNC GLOBAL DEFAULT 12 strtoimax@@GLIBC_2.17 + 1733: 0000000000067da4 12 FUNC WEAK DEFAULT 12 getline@@GLIBC_2.17 + 1734: 00000000001825f8 8 OBJECT WEAK DEFAULT 34 __malloc_initialize_hook@@GLIBC_2.17 + 1735: 00000000000e2cd8 156 FUNC GLOBAL DEFAULT 12 __iswdigit_l@@GLIBC_2.17 + 1736: 0000000000088a48 32 FUNC GLOBAL DEFAULT 12 __stpcpy@@GLIBC_2.17 + 1737: 00000000000fe018 744 FUNC GLOBAL DEFAULT 12 getrpcbyname_r@@GLIBC_2.17 + 1738: 0000000000021d9c 452 FUNC GLOBAL DEFAULT 12 iconv@@GLIBC_2.17 + 1739: 0000000000110810 200 FUNC GLOBAL DEFAULT 12 get_myaddress@@GLIBC_2.17 + 1740: 0000000000038e10 12 FUNC WEAK DEFAULT 12 imaxabs@@GLIBC_2.17 + 1741: 0000000000180df0 8 OBJECT WEAK DEFAULT 33 program_invocation_short_name@@GLIBC_2.17 + 1742: 00000000000dff08 28 FUNC WEAK DEFAULT 12 bdflush@@GLIBC_2.17 + 1743: 00000000000d6f44 44 FUNC GLOBAL DEFAULT 12 mkstemps@@GLIBC_2.17 + 1744: 00000000000df420 24 FUNC GLOBAL DEFAULT 12 lremovexattr@@GLIBC_2.17 + 1745: 00000000000c3e34 208 FUNC WEAK DEFAULT 12 re_compile_fastmap@@GLIBC_2.17 + 1746: 00000000000d8f3c 32 FUNC GLOBAL DEFAULT 12 setusershell@@GLIBC_2.17 + 1747: 000000000006a420 700 FUNC GLOBAL DEFAULT 12 fdopen@@GLIBC_2.17 + 1748: 000000000007ad5c 828 FUNC GLOBAL DEFAULT 12 _IO_str_seekoff@@GLIBC_2.17 + 1749: 000000000017d230 168 OBJECT GLOBAL DEFAULT 28 _IO_wfile_jumps@@GLIBC_2.17 + 1750: 00000000000a5d9c 348 FUNC WEAK DEFAULT 12 readdir64@@GLIBC_2.17 + 1751: 0000000000112544 52 FUNC GLOBAL DEFAULT 12 svcerr_auth@@GLIBC_2.17 + 1752: 000000000010892c 968 FUNC GLOBAL DEFAULT 12 xdr_callmsg@@GLIBC_2.17 + 1753: 0000000000037ddc 8 FUNC GLOBAL DEFAULT 12 qsort@@GLIBC_2.17 + 1754: 0000000000042854 8 FUNC WEAK DEFAULT 12 canonicalize_file_name@@GLIBC_2.17 + 1755: 00000000000abc30 24 FUNC GLOBAL DEFAULT 12 __getpgid@@GLIBC_2.17 + 1756: 00000000000794a0 100 FUNC GLOBAL DEFAULT 12 _IO_sgetn@@GLIBC_2.17 + 1757: 00000000000219ec 944 FUNC GLOBAL DEFAULT 12 iconv_open@@GLIBC_2.17 + 1758: 00000000000dfed0 24 FUNC GLOBAL DEFAULT 12 process_vm_readv@@GLIBC_2.17 + 1759: 000000000003a564 20 FUNC GLOBAL DEFAULT 12 __strtod_internal@@GLIBC_2.17 + 1760: 0000000000043bc0 124 FUNC WEAK DEFAULT 12 strfmon_l@@GLIBC_2.17 + 1761: 000000000006b374 436 FUNC GLOBAL DEFAULT 12 _IO_fsetpos64@@GLIBC_2.17 + 1762: 00000000000398bc 40 FUNC GLOBAL DEFAULT 12 mrand48@@GLIBC_2.17 + 1763: 0000000000039028 36 FUNC GLOBAL DEFAULT 12 wcstombs@@GLIBC_2.17 + 1764: 00000000000cf990 16 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getflags@@GLIBC_2.17 + 1765: 00000000000dff50 64 FUNC WEAK DEFAULT 12 accept@@GLIBC_2.17 + 1766: 00000000000810a8 268 FUNC GLOBAL DEFAULT 12 __libc_free@@GLIBC_2.17 + 1767: 00000000000fa024 564 FUNC GLOBAL DEFAULT 12 gethostbyname2@@GLIBC_2.17 + 1768: 000000000011e844 136 FUNC GLOBAL DEFAULT 12 __nss_hosts_lookup@@GLIBC_2.17 + 1769: 000000000003a52c 12 FUNC WEAK DEFAULT 12 __strtoull_l@@GLIBC_2.17 + 1770: 000000000010a6c4 244 FUNC GLOBAL DEFAULT 12 cbc_crypt@@GLIBC_2.17 + 1771: 000000000007aa60 408 FUNC GLOBAL DEFAULT 12 _IO_str_overflow@@GLIBC_2.17 + 1772: 00000000000eb4a4 3080 FUNC WEAK DEFAULT 12 argp_parse@@GLIBC_2.17 + 1773: 00000000001825e8 8 OBJECT WEAK DEFAULT 34 __after_morecore_hook@@GLIBC_2.17 + 1774: 000000000008b678 220 FUNC GLOBAL DEFAULT 12 envz_get@@GLIBC_2.17 + 1775: 000000000010b2a0 32 FUNC GLOBAL DEFAULT 12 xdr_netnamestr@@GLIBC_2.17 + 1776: 000000000006ce50 452 FUNC GLOBAL DEFAULT 12 _IO_seekpos@@GLIBC_2.17 + 1777: 00000000000abcc0 24 FUNC GLOBAL DEFAULT 12 getresuid@@GLIBC_2.17 + 1778: 00000000000d9964 1368 FUNC GLOBAL DEFAULT 12 __vsyslog_chk@@GLIBC_2.17 + 1779: 00000000000d003c 32 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setsigmask@@GLIBC_2.17 + 1780: 00000000000ed1a0 88 FUNC GLOBAL DEFAULT 12 hstrerror@@GLIBC_2.17 + 1781: 0000000000089878 1204 FUNC GLOBAL DEFAULT 12 __strcasestr@@GLIBC_2.17 + 1782: 00000000000dfac0 24 FUNC GLOBAL DEFAULT 12 inotify_add_watch@@GLIBC_2.17 + 1783: 00000000000d04b0 24 FUNC WEAK DEFAULT 12 statfs64@@GLIBC_2.17 + 1784: 00000000000d5718 192 FUNC WEAK DEFAULT 12 tcgetattr@@GLIBC_2.17 + 1785: 000000000002ea58 8 FUNC GLOBAL DEFAULT 12 toascii@@GLIBC_2.17 + 1786: 0000000000106bbc 300 FUNC GLOBAL DEFAULT 12 authnone_create@@GLIBC_2.17 + 1787: 000000000006c170 584 FUNC GLOBAL DEFAULT 12 _IO_proc_close@@GLIBC_2.17 + 1788: 000000000002eb0c 16 FUNC WEAK DEFAULT 12 isupper_l@@GLIBC_2.17 + 1789: 000000000011cff4 4 FUNC GLOBAL DEFAULT 12 getutxline@@GLIBC_2.17 + 1790: 00000000000d6d3c 264 FUNC GLOBAL DEFAULT 12 sethostid@@GLIBC_2.17 + 1791: 00000000000676fc 168 FUNC WEAK DEFAULT 12 tmpfile64@@GLIBC_2.17 + 1792: 00000000000aa55c 584 FUNC WEAK DEFAULT 12 sleep@@GLIBC_2.17 + 1793: 0000000000097700 20 FUNC GLOBAL DEFAULT 12 wcsxfrm@@GLIBC_2.17 + 1794: 0000000000075c68 272 FUNC GLOBAL DEFAULT 12 _IO_file_sync@@GLIBC_2.17 + 1795: 00000000000aa1e8 100 FUNC WEAK DEFAULT 12 times@@GLIBC_2.17 + 1796: 000000000008ce60 3204 FUNC WEAK DEFAULT 12 strxfrm_l@@GLIBC_2.17 + 1797: 0000000000036140 84 FUNC GLOBAL DEFAULT 12 __libc_allocate_rtsig@@GLIBC_2.17 + 1798: 00000000000f88bc 52 FUNC GLOBAL DEFAULT 12 __wcrtomb_chk@@GLIBC_2.17 + 1799: 000000000002eb84 20 FUNC GLOBAL DEFAULT 12 __ctype_toupper_loc@@GLIBC_2.17 + 1800: 0000000000107258 264 FUNC GLOBAL DEFAULT 12 clntraw_create@@GLIBC_2.17 + 1801: 00000000000d62cc 208 FUNC GLOBAL DEFAULT 12 pwritev64@@GLIBC_2.17 + 1802: 00000000000d86b8 44 FUNC GLOBAL DEFAULT 12 insque@@GLIBC_2.17 + 1803: 00000000000d662c 16 FUNC GLOBAL DEFAULT 12 __getpagesize@@GLIBC_2.17 + 1804: 00000000000df7d4 228 FUNC GLOBAL DEFAULT 12 epoll_pwait@@GLIBC_2.17 + 1805: 0000000000082c68 492 FUNC WEAK DEFAULT 12 valloc@@GLIBC_2.17 + 1806: 00000000000f5f8c 180 FUNC GLOBAL DEFAULT 12 __strcpy_chk@@GLIBC_2.17 + 1807: 0000000000000064 4 TLS GLOBAL DEFAULT 23 __h_errno@@GLIBC_PRIVATE + 1808: 000000000002eb98 20 FUNC GLOBAL DEFAULT 12 __ctype_tolower_loc@@GLIBC_2.17 + 1809: 000000000011cfe8 4 FUNC GLOBAL DEFAULT 12 getutxent@@GLIBC_2.17 + 1810: 000000000007a99c 80 FUNC GLOBAL DEFAULT 12 _IO_list_unlock@@GLIBC_2.17 + 1811: 0000000000180dd8 8 OBJECT GLOBAL DEFAULT 33 obstack_alloc_failed_handler@@GLIBC_2.17 + 1812: 00000000000f8c40 300 FUNC GLOBAL DEFAULT 12 __vdprintf_chk@@GLIBC_2.17 + 1813: 000000000006e0b4 164 FUNC GLOBAL DEFAULT 12 fputws_unlocked@@GLIBC_2.17 + 1814: 0000000000114524 360 FUNC GLOBAL DEFAULT 12 xdr_array@@GLIBC_2.17 + 1815: 00000000000df400 24 FUNC GLOBAL DEFAULT 12 llistxattr@@GLIBC_2.17 + 1816: 00000000000f49c8 152 FUNC GLOBAL DEFAULT 12 __nss_group_lookup2@@GLIBC_PRIVATE + 1817: 0000000000038bd0 516 FUNC GLOBAL DEFAULT 12 __cxa_finalize@@GLIBC_2.17 + 1818: 0000000000036120 16 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmin@@GLIBC_2.17 + 1819: 00000000000df710 24 FUNC WEAK DEFAULT 12 umount2@@GLIBC_2.17 + 1820: 00000000000da760 52 FUNC GLOBAL DEFAULT 12 syscall@@GLIBC_2.17 + 1821: 00000000000354a8 52 FUNC GLOBAL DEFAULT 12 sigpending@@GLIBC_2.17 + 1822: 0000000000036a10 176 FUNC GLOBAL DEFAULT 12 bsearch@@GLIBC_2.17 + 1823: 000000000002e7e4 92 FUNC GLOBAL DEFAULT 12 __assert_perror_fail@@GLIBC_2.17 + 1824: 0000000000088c4c 92 FUNC WEAK DEFAULT 12 strncasecmp_l@@GLIBC_2.17 + 1825: 00000000000ca650 64 FUNC GLOBAL DEFAULT 12 freeaddrinfo@@GLIBC_2.17 + 1826: 00000000000f8a40 384 FUNC GLOBAL DEFAULT 12 __vasprintf_chk@@GLIBC_2.17 + 1827: 00000000000deba4 864 FUNC WEAK DEFAULT 12 get_nprocs@@GLIBC_2.17 + 1828: 000000000006d1d8 628 FUNC WEAK DEFAULT 12 setvbuf@@GLIBC_2.17 + 1829: 00000000000fc888 744 FUNC GLOBAL DEFAULT 12 getprotobyname_r@@GLIBC_2.17 + 1830: 000000000008e2b8 148 FUNC GLOBAL DEFAULT 12 __xpg_strerror_r@@GLIBC_2.17 + 1831: 00000000000988f4 2020 FUNC GLOBAL DEFAULT 12 __wcsxfrm_l@@GLIBC_2.17 + 1832: 00000000000f0748 480 FUNC GLOBAL DEFAULT 12 __resolv_context_get_preinit@@GLIBC_PRIVATE + 1833: 000000000006d664 144 FUNC WEAK DEFAULT 12 vsscanf@@GLIBC_2.17 + 1834: 0000000000085b68 216 FUNC GLOBAL DEFAULT 12 __libc_scratch_buffer_set_array_size@@GLIBC_PRIVATE + 1835: 00000000000a8ad0 532 FUNC GLOBAL DEFAULT 12 fgetpwent@@GLIBC_2.17 + 1836: 00000000000f9974 1156 FUNC GLOBAL DEFAULT 12 gethostbyaddr_r@@GLIBC_2.17 + 1837: 0000000000101d2c 220 FUNC GLOBAL DEFAULT 12 setaliasent@@GLIBC_2.17 + 1838: 00000000001085b4 116 FUNC GLOBAL DEFAULT 12 xdr_rejected_reply@@GLIBC_2.17 + 1839: 00000000000df9e0 24 FUNC GLOBAL DEFAULT 12 capget@@GLIBC_2.17 + 1840: 00000000000354dc 172 FUNC GLOBAL DEFAULT 12 __sigsuspend@@GLIBC_2.17 + 1841: 00000000000a5ef8 492 FUNC WEAK DEFAULT 12 readdir64_r@@GLIBC_2.17 + 1842: 000000000010a3bc 264 FUNC GLOBAL DEFAULT 12 getpublickey@@GLIBC_2.17 + 1843: 00000000000c68c0 24 FUNC GLOBAL DEFAULT 12 __sched_setscheduler@@GLIBC_2.17 + 1844: 0000000000111fb4 56 FUNC GLOBAL DEFAULT 12 __rpc_thread_svc_pollfd@@GLIBC_2.17 + 1845: 0000000000112338 212 FUNC GLOBAL DEFAULT 12 svc_unregister@@GLIBC_2.17 + 1846: 00000000000d3f20 1232 FUNC GLOBAL DEFAULT 12 fts_open@@GLIBC_2.17 + 1847: 00000000000abca0 24 FUNC WEAK DEFAULT 12 setsid@@GLIBC_2.17 + 1848: 000000000011b220 184 FUNC WEAK DEFAULT 12 pututline@@GLIBC_2.17 + 1849: 00000000000e516c 440 FUNC GLOBAL DEFAULT 12 sgetsgent@@GLIBC_2.17 + 1850: 0000000000000008 8 TLS GLOBAL DEFAULT 22 __resp@@GLIBC_PRIVATE + 1851: 000000000011ae9c 80 FUNC WEAK DEFAULT 12 getutent@@GLIBC_2.17 + 1852: 00000000000cf948 40 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getsigdefault@@GLIBC_2.17 + 1853: 00000000000e2e10 156 FUNC WEAK DEFAULT 12 iswgraph_l@@GLIBC_2.17 + 1854: 00000000000976ec 20 FUNC WEAK DEFAULT 12 wcscoll@@GLIBC_2.17 + 1855: 000000000005170c 280 FUNC WEAK DEFAULT 12 register_printf_type@@GLIBC_2.17 + 1856: 0000000000051830 2000 FUNC GLOBAL DEFAULT 12 printf_size@@GLIBC_2.17 + 1857: 00000000000ec1f8 68 FUNC GLOBAL DEFAULT 12 pthread_attr_destroy@@GLIBC_2.17 + 1858: 000000000008fcb8 20 FUNC GLOBAL DEFAULT 12 __wcstoul_internal@@GLIBC_2.17 + 1859: 00000000000399e0 80 FUNC WEAK DEFAULT 12 nrand48_r@@GLIBC_2.17 + 1860: 0000000000115b1c 220 FUNC GLOBAL DEFAULT 12 xdr_uint64_t@@GLIBC_2.17 + 1861: 000000000010d244 544 FUNC GLOBAL DEFAULT 12 svcunix_create@@GLIBC_2.17 + 1862: 00000000000353d0 44 FUNC WEAK DEFAULT 12 __sigaction@@GLIBC_2.17 + 1863: 00000000000e4498 952 FUNC GLOBAL DEFAULT 12 _nss_files_parse_spent@@GLIBC_PRIVATE + 1864: 00000000000d54bc 204 FUNC GLOBAL DEFAULT 12 cfsetspeed@@GLIBC_2.17 + 1865: 00000000000f7bbc 28 FUNC GLOBAL DEFAULT 12 __wcpncpy_chk@@GLIBC_2.17 + 1866: 0000000000122e44 148 FUNC GLOBAL DEFAULT 13 __libc_freeres@@GLIBC_2.17 + 1867: 00000000000d11a8 368 FUNC WEAK DEFAULT 12 fcntl@@GLIBC_2.17 + 1868: 000000000008e928 80 FUNC GLOBAL DEFAULT 12 wcsspn@@GLIBC_2.17 + 1869: 00000000000d5a50 24 FUNC WEAK DEFAULT 12 getrlimit64@@GLIBC_2.17 + 1870: 00000000000e2848 184 FUNC WEAK DEFAULT 12 wctype@@GLIBC_2.17 + 1871: 000000000010479c 56 FUNC GLOBAL DEFAULT 12 inet6_option_init@@GLIBC_2.17 + 1872: 00000000000e3350 112 FUNC GLOBAL DEFAULT 12 __iswctype_l@@GLIBC_2.17 + 1873: 00000000001100b4 652 FUNC GLOBAL DEFAULT 12 __libc_clntudp_bufcreate@@GLIBC_PRIVATE + 1874: 00000000000dab74 52 FUNC GLOBAL DEFAULT 12 ecvt@@GLIBC_2.17 + 1875: 00000000000f7994 32 FUNC GLOBAL DEFAULT 12 __wmemmove_chk@@GLIBC_2.17 + 1876: 00000000000f6348 124 FUNC GLOBAL DEFAULT 12 __sprintf_chk@@GLIBC_2.17 + 1877: 0000000000106d74 564 FUNC GLOBAL DEFAULT 12 bindresvport@@GLIBC_2.17 + 1878: 00000000000fff34 364 FUNC GLOBAL DEFAULT 12 rresvport@@GLIBC_2.17 + 1879: 0000000000052284 132 FUNC GLOBAL DEFAULT 12 __asprintf@@GLIBC_2.17 + 1880: 00000000000d53e0 88 FUNC GLOBAL DEFAULT 12 cfsetospeed@@GLIBC_2.17 + 1881: 0000000000072b74 400 FUNC GLOBAL DEFAULT 12 fwide@@GLIBC_2.17 + 1882: 0000000000088bfc 80 FUNC GLOBAL DEFAULT 12 __strcasecmp_l@@GLIBC_2.17 + 1883: 00000000000a79d0 992 FUNC GLOBAL DEFAULT 12 getgrgid_r@@GLIBC_2.17 + 1884: 00000000000ec638 68 FUNC GLOBAL DEFAULT 12 pthread_cond_init@@GLIBC_2.17 + 1885: 00000000000abc74 12 FUNC GLOBAL DEFAULT 12 setpgrp@@GLIBC_2.17 + 1886: 00000000000d53c0 32 FUNC GLOBAL DEFAULT 12 cfgetispeed@@GLIBC_2.17 + 1887: 000000000008e560 72 FUNC GLOBAL DEFAULT 12 wcsdup@@GLIBC_2.17 + 1888: 0000000000036788 12 FUNC GLOBAL DEFAULT 12 atoll@@GLIBC_2.17 + 1889: 000000000003513c 176 FUNC WEAK DEFAULT 12 bsd_signal@@GLIBC_2.17 + 1890: 000000000003a0d4 12 FUNC GLOBAL DEFAULT 12 __strtol_l@@GLIBC_2.17 + 1891: 000000000011cf98 24 FUNC WEAK DEFAULT 12 ptsname_r@@GLIBC_2.17 + 1892: 0000000000109fa8 368 FUNC GLOBAL DEFAULT 12 xdrrec_create@@GLIBC_2.17 + 1893: 00000000000f9778 20 FUNC GLOBAL DEFAULT 12 __h_errno_location@@GLIBC_2.17 + 1894: 00000000000df380 24 FUNC GLOBAL DEFAULT 12 fsetxattr@@GLIBC_2.17 + 1895: 00000000001059cc 224 FUNC GLOBAL DEFAULT 12 __inet6_scopeid_pton@@GLIBC_PRIVATE + 1896: 0000000000075ec8 1288 FUNC GLOBAL DEFAULT 12 _IO_file_seekoff@@GLIBC_2.17 + 1897: 0000000000067f7c 160 FUNC GLOBAL DEFAULT 12 _IO_ftrylockfile@@GLIBC_2.17 + 1898: 00000000000d1460 56 FUNC WEAK DEFAULT 12 __close@@GLIBC_2.17 + 1899: 000000000007a900 8 FUNC GLOBAL DEFAULT 12 _IO_iter_next@@GLIBC_2.17 + 1900: 00000000000d82e4 156 FUNC WEAK DEFAULT 12 getmntent_r@@GLIBC_2.17 + 1901: 0000000000038e10 12 FUNC GLOBAL DEFAULT 12 labs@@GLIBC_2.17 + 1902: 00000000000d23c8 72 FUNC WEAK DEFAULT 12 link@@GLIBC_2.17 + 1903: 0000000000180158 4 OBJECT GLOBAL DEFAULT 33 obstack_exit_failure@@GLIBC_2.17 + 1904: 00000000000a35d8 36 FUNC GLOBAL DEFAULT 12 __strftime_l@@GLIBC_2.17 + 1905: 000000000010b360 96 FUNC GLOBAL DEFAULT 12 xdr_cryptkeyres@@GLIBC_2.17 + 1906: 0000000000101830 992 FUNC GLOBAL DEFAULT 12 innetgr@@GLIBC_2.17 + 1907: 00000000000d0b50 320 FUNC WEAK DEFAULT 12 openat@@GLIBC_2.17 + 1908: 0000000000180f28 8 OBJECT GLOBAL DEFAULT 33 _IO_list_all@@GLIBC_2.17 + 1909: 00000000000d8578 176 FUNC GLOBAL DEFAULT 12 futimesat@@GLIBC_2.17 + 1910: 000000000006fcf8 852 FUNC GLOBAL DEFAULT 12 _IO_wdefault_xsgetn@@GLIBC_2.17 + 1911: 00000000000e2c3c 156 FUNC GLOBAL DEFAULT 12 __iswcntrl_l@@GLIBC_2.17 + 1912: 00000000000f751c 28 FUNC GLOBAL DEFAULT 12 __pread64_chk@@GLIBC_2.17 + 1913: 0000000000074070 368 FUNC WEAK DEFAULT 12 vdprintf@@GLIBC_2.17 + 1914: 000000000006eef8 212 FUNC WEAK DEFAULT 12 vswprintf@@GLIBC_2.17 + 1915: 000000000006bca0 396 FUNC GLOBAL DEFAULT 12 _IO_getline_info@@GLIBC_2.17 + 1916: 00000000001105c4 588 FUNC GLOBAL DEFAULT 12 clntudp_create@@GLIBC_2.17 + 1917: 00000000000a63e4 392 FUNC WEAK DEFAULT 12 scandirat64@@GLIBC_2.17 + 1918: 00000000000fc6fc 396 FUNC GLOBAL DEFAULT 12 getprotobyname@@GLIBC_2.17 + 1919: 00000000000a1bb8 12 FUNC WEAK DEFAULT 12 strptime_l@@GLIBC_2.17 + 1920: 000000000008ade8 252 FUNC WEAK DEFAULT 12 argz_create_sep@@GLIBC_2.17 + 1921: 000000000002eb2c 12 FUNC WEAK DEFAULT 12 tolower_l@@GLIBC_2.17 + 1922: 0000000000074d68 60 FUNC GLOBAL DEFAULT 12 __fsetlocking@@GLIBC_2.17 + 1923: 00000000000f5324 400 FUNC GLOBAL DEFAULT 12 __backtrace@@GLIBC_2.17 + 1924: 00000000000d0278 88 FUNC GLOBAL DEFAULT 12 __xstat@@GLIBC_2.17 + 1925: 00000000000980c0 2100 FUNC WEAK DEFAULT 12 wcscoll_l@@GLIBC_2.17 + 1926: 00000000000da9e0 24 FUNC GLOBAL DEFAULT 12 __madvise@@GLIBC_PRIVATE + 1927: 00000000000d5a50 24 FUNC WEAK DEFAULT 12 getrlimit@@GLIBC_2.17 + 1928: 0000000000035730 92 FUNC WEAK DEFAULT 12 sigsetmask@@GLIBC_2.17 + 1929: 0000000000067368 160 FUNC GLOBAL DEFAULT 12 scanf@@GLIBC_2.17 + 1930: 000000000002e8a4 28 FUNC GLOBAL DEFAULT 12 isdigit@@GLIBC_2.17 + 1931: 00000000000df3a0 24 FUNC GLOBAL DEFAULT 12 getxattr@@GLIBC_2.17 + 1932: 00000000000d0638 28 FUNC GLOBAL DEFAULT 12 lchmod@@GLIBC_2.17 + 1933: 0000000000110d44 276 FUNC GLOBAL DEFAULT 12 key_encryptsession@@GLIBC_2.17 + 1934: 000000000002e888 28 FUNC GLOBAL DEFAULT 12 iscntrl@@GLIBC_2.17 + 1935: 00000000000dfb40 24 FUNC WEAK DEFAULT 12 mount@@GLIBC_2.17 + 1936: 00000000000d663c 44 FUNC WEAK DEFAULT 12 getdtablesize@@GLIBC_2.17 + 1937: 00000000000394a0 180 FUNC WEAK DEFAULT 12 random_r@@GLIBC_2.17 + 1938: 000000000013e1e0 4 OBJECT GLOBAL DEFAULT 15 sys_nerr@@GLIBC_2.17 + 1939: 000000000002eb38 12 FUNC GLOBAL DEFAULT 12 __toupper_l@@GLIBC_2.17 + 1940: 00000000000e2470 180 FUNC WEAK DEFAULT 12 iswpunct@@GLIBC_2.17 + 1941: 00000000000de1f0 124 FUNC GLOBAL DEFAULT 12 errx@@GLIBC_2.17 + 1942: 0000000000088bfc 80 FUNC WEAK DEFAULT 12 strcasecmp_l@@GLIBC_2.17 + 1943: 000000000008eb44 196 FUNC GLOBAL DEFAULT 12 wmemchr@@GLIBC_2.17 + 1944: 00000000000882d8 388 FUNC GLOBAL DEFAULT 12 memmove@@GLIBC_2.17 + 1945: 00000000001112e8 256 FUNC GLOBAL DEFAULT 12 key_setnet@@GLIBC_2.17 + 1946: 00000000000766b8 188 FUNC GLOBAL DEFAULT 12 _IO_file_write@@GLIBC_2.17 + 1947: 00000000000aa1d0 24 FUNC WEAK DEFAULT 12 uname@@GLIBC_2.17 + 1948: 0000000000185248 4 OBJECT GLOBAL DEFAULT 34 svc_max_pollfd@@GLIBC_2.17 + 1949: 000000000011287c 140 FUNC GLOBAL DEFAULT 12 svc_getreqset@@GLIBC_2.17 + 1950: 000000000008fcf8 24 FUNC GLOBAL DEFAULT 12 wcstod@@GLIBC_2.17 + 1951: 0000000000184e30 4 OBJECT GLOBAL DEFAULT 34 _nl_msg_cat_cntr@@GLIBC_2.17 + 1952: 00000000000f7000 20 FUNC GLOBAL DEFAULT 12 __chk_fail@@GLIBC_2.17 + 1953: 00000000000cf9e8 8 FUNC GLOBAL DEFAULT 12 posix_spawnp@@GLIBC_2.17 + 1954: 0000000000068284 452 FUNC GLOBAL DEFAULT 12 __isoc99_vscanf@@GLIBC_2.17 + 1955: 0000000000084a48 204 FUNC GLOBAL DEFAULT 12 mprobe@@GLIBC_2.17 + 1956: 000000000008fd50 24 FUNC GLOBAL DEFAULT 12 wcstof@@GLIBC_2.17 + 1957: 00000000000f54b4 736 FUNC WEAK DEFAULT 12 backtrace_symbols@@GLIBC_2.17 + 1958: 00000000000782b0 512 FUNC GLOBAL DEFAULT 12 _IO_file_overflow@@GLIBC_2.17 + 1959: 00000000000f8944 28 FUNC GLOBAL DEFAULT 12 __wcsrtombs_chk@@GLIBC_2.17 + 1960: 000000000007a9ec 24 FUNC GLOBAL DEFAULT 12 _IO_list_resetlock@@GLIBC_2.17 + 1961: 00000000000e1388 64 FUNC GLOBAL DEFAULT 12 _mcleanup@@GLIBC_2.17 + 1962: 00000000000e33c0 140 FUNC GLOBAL DEFAULT 12 __wctrans_l@@GLIBC_2.17 + 1963: 000000000002eb1c 16 FUNC WEAK DEFAULT 12 isxdigit_l@@GLIBC_2.17 + 1964: 000000000006b76c 544 FUNC GLOBAL DEFAULT 12 _IO_fwrite@@GLIBC_2.17 + 1965: 0000000000036194 332 FUNC WEAK DEFAULT 12 sigtimedwait@@GLIBC_2.17 + 1966: 00000000000ec918 60 FUNC GLOBAL DEFAULT 12 pthread_self@@GLIBC_2.17 + 1967: 000000000008e978 180 FUNC GLOBAL DEFAULT 12 wcstok@@GLIBC_2.17 + 1968: 0000000000100b28 948 FUNC GLOBAL DEFAULT 12 ruserpass@@GLIBC_2.17 + 1969: 0000000000112258 224 FUNC GLOBAL DEFAULT 12 svc_register@@GLIBC_2.17 + 1970: 00000000000aa308 204 FUNC WEAK DEFAULT 12 __waitpid@@GLIBC_2.17 + 1971: 000000000008fca0 24 FUNC GLOBAL DEFAULT 12 wcstol@@GLIBC_2.17 + 1972: 00000000000fd728 220 FUNC GLOBAL DEFAULT 12 endservent@@GLIBC_2.17 + 1973: 000000000006ad30 8 FUNC WEAK DEFAULT 12 fopen64@@GLIBC_2.17 + 1974: 00000000000ec45c 68 FUNC GLOBAL DEFAULT 12 pthread_attr_setschedpolicy@@GLIBC_2.17 + 1975: 000000000006efcc 160 FUNC GLOBAL DEFAULT 12 vswscanf@@GLIBC_2.17 + 1976: 0000000000047460 68 FUNC GLOBAL DEFAULT 12 ctermid@@GLIBC_2.17 + 1977: 000000000011e954 136 FUNC GLOBAL DEFAULT 12 __nss_group_lookup@@GLIBC_2.17 + 1978: 00000000000cf5e0 68 FUNC WEAK DEFAULT 12 pread@@GLIBC_2.17 + 1979: 000000000008fc64 40 FUNC WEAK DEFAULT 12 wcschrnul@@GLIBC_2.17 + 1980: 000000000011d754 180 FUNC GLOBAL DEFAULT 12 __libc_dlsym@@GLIBC_PRIVATE + 1981: 00000000000d7bc4 28 FUNC GLOBAL DEFAULT 12 __endmntent@@GLIBC_2.17 + 1982: 000000000008fca0 24 FUNC WEAK DEFAULT 12 wcstoq@@GLIBC_2.17 + 1983: 00000000000cf650 68 FUNC WEAK DEFAULT 12 pwrite@@GLIBC_2.17 + 1984: 00000000000359f4 104 FUNC GLOBAL DEFAULT 12 sigstack@@GLIBC_2.17 + 1985: 00000000000d6f34 16 FUNC GLOBAL DEFAULT 12 mkostemp@@GLIBC_2.17 + 1986: 00000000000aac80 68 FUNC GLOBAL DEFAULT 12 __vfork@@GLIBC_2.17 + 1987: 0000000000074c8c 20 FUNC GLOBAL DEFAULT 12 __freadable@@GLIBC_2.17 + 1988: 0000000000089254 140 FUNC WEAK DEFAULT 12 strsep@@GLIBC_2.17 + 1989: 00000000000e2ba4 152 FUNC WEAK DEFAULT 12 iswblank_l@@GLIBC_2.17 + 1990: 00000000000d6f70 40 FUNC GLOBAL DEFAULT 12 mkostemps@@GLIBC_2.17 + 1991: 00000000000855d0 212 FUNC GLOBAL DEFAULT 12 _obstack_begin@@GLIBC_2.17 + 1992: 0000000000101c34 248 FUNC GLOBAL DEFAULT 12 getnetgrent@@GLIBC_2.17 + 1993: 0000000000077f6c 836 FUNC GLOBAL DEFAULT 12 _IO_file_underflow@@GLIBC_2.17 + 1994: 0000000000111558 188 FUNC GLOBAL DEFAULT 12 user2netname@@GLIBC_2.17 + 1995: 00000000001815c0 8 OBJECT GLOBAL DEFAULT 33 __morecore@@GLIBC_2.17 + 1996: 000000000002ec00 620 FUNC WEAK DEFAULT 12 bindtextdomain@@GLIBC_2.17 + 1997: 000000000008f520 536 FUNC WEAK DEFAULT 12 wcsrtombs@@GLIBC_2.17 + 1998: 000000000011e460 864 FUNC GLOBAL DEFAULT 12 __nss_next@@GLIBC_2.17 + 1999: 00000000000d0dc0 68 FUNC WEAK DEFAULT 12 access@@GLIBC_2.17 + 2000: 00000000000441c0 1276 FUNC GLOBAL DEFAULT 12 fmtmsg@@GLIBC_2.17 + 2001: 00000000000c68e0 24 FUNC GLOBAL DEFAULT 12 __sched_getscheduler@@GLIBC_2.17 + 2002: 00000000000db050 192 FUNC GLOBAL DEFAULT 12 qfcvt@@GLIBC_2.17 + 2003: 0000000000084950 248 FUNC GLOBAL DEFAULT 12 mcheck_pedantic@@GLIBC_2.17 + 2004: 0000000000085368 400 FUNC GLOBAL DEFAULT 12 mtrace@@GLIBC_2.17 + 2005: 00000000000a5b1c 72 FUNC GLOBAL DEFAULT 12 ntp_gettime@@GLIBC_2.17 + 2006: 0000000000073794 360 FUNC GLOBAL DEFAULT 12 _IO_getc@@GLIBC_2.17 + 2007: 00000000000d1590 24 FUNC WEAK DEFAULT 12 pipe2@@GLIBC_2.17 + 2008: 000000000008a5a8 1020 FUNC GLOBAL DEFAULT 12 memmem@@GLIBC_2.17 + 2009: 00000000000d0450 96 FUNC GLOBAL DEFAULT 12 __fxstatat@@GLIBC_2.17 + 2010: 0000000000074c14 52 FUNC GLOBAL DEFAULT 12 __fbufsize@@GLIBC_2.17 + 2011: 0000000000184f88 8 OBJECT GLOBAL DEFAULT 34 loc1@@GLIBC_2.17 + 2012: 000000000007a660 64 FUNC GLOBAL DEFAULT 12 _IO_marker_delta@@GLIBC_2.17 + 2013: 000000000008a9a4 280 FUNC WEAK DEFAULT 12 rawmemchr@@GLIBC_2.17 + 2014: 0000000000184f90 8 OBJECT GLOBAL DEFAULT 34 loc2@@GLIBC_2.17 + 2015: 00000000000d6a40 24 FUNC GLOBAL DEFAULT 12 sync@@GLIBC_2.17 + 2016: 0000000000087e60 1144 FUNC WEAK DEFAULT 12 bcmp@@GLIBC_2.17 + 2017: 00000000000a6e30 176 FUNC GLOBAL DEFAULT 12 getgrouplist@@GLIBC_2.17 + 2018: 00000000000dfc90 24 FUNC GLOBAL DEFAULT 12 sysinfo@@GLIBC_2.17 + 2019: 00000000000358f4 256 FUNC WEAK DEFAULT 12 sigvec@@GLIBC_2.17 + 2020: 000000000006da78 44 FUNC WEAK DEFAULT 12 getwc_unlocked@@GLIBC_2.17 + 2021: 0000000000180160 4 OBJECT GLOBAL DEFAULT 33 opterr@@GLIBC_2.17 + 2022: 0000000000112a7c 196 FUNC GLOBAL DEFAULT 12 svc_getreq@@GLIBC_2.17 + 2023: 000000000008ac1c 120 FUNC WEAK DEFAULT 12 argz_append@@GLIBC_2.17 + 2024: 00000000000abad8 128 FUNC WEAK DEFAULT 12 setgid@@GLIBC_2.17 + 2025: 000000000008279c 1228 FUNC WEAK DEFAULT 12 malloc_set_state@@GLIBC_2.17 + 2026: 00000000000edefc 696 FUNC GLOBAL DEFAULT 12 __inet_pton_length@@GLIBC_PRIVATE + 2027: 00000000000f5f24 104 FUNC GLOBAL DEFAULT 12 __strcat_chk@@GLIBC_2.17 + 2028: 000000000006ec88 156 FUNC GLOBAL DEFAULT 12 wprintf@@GLIBC_2.17 + 2029: 000000000008acd0 92 FUNC GLOBAL DEFAULT 12 __argz_count@@GLIBC_2.17 + 2030: 00000000000e4e28 212 FUNC WEAK DEFAULT 12 ulckpwdf@@GLIBC_2.17 + 2031: 00000000000d4be4 364 FUNC GLOBAL DEFAULT 12 fts_children@@GLIBC_2.17 + 2032: 00000000000fd200 864 FUNC GLOBAL DEFAULT 12 getservbyport_r@@GLIBC_2.17 + 2033: 0000000000087cb0 20 FUNC GLOBAL DEFAULT 12 strxfrm@@GLIBC_2.17 + 2034: 00000000000d0218 44 FUNC GLOBAL DEFAULT 12 mkfifo@@GLIBC_2.17 + 2035: 00000000000d0b50 320 FUNC WEAK DEFAULT 12 openat64@@GLIBC_2.17 + 2036: 00000000000c68e0 24 FUNC WEAK DEFAULT 12 sched_getscheduler@@GLIBC_2.17 + 2037: 00000000000d0f2c 396 FUNC GLOBAL DEFAULT 12 faccessat@@GLIBC_2.17 + 2038: 0000000000038914 104 FUNC WEAK DEFAULT 12 on_exit@@GLIBC_2.17 + 2039: 0000000000185320 8 OBJECT GLOBAL DEFAULT 34 __key_decryptsession_pk_LOCAL@@GLIBC_2.17 + 2040: 00000000000f0358 24 FUNC GLOBAL DEFAULT 12 __res_randomid@@GLIBC_2.17 + 2041: 0000000000073ef0 8 FUNC GLOBAL DEFAULT 12 setbuf@@GLIBC_2.17 + 2042: 0000000000075a44 192 FUNC GLOBAL DEFAULT 12 fwrite_unlocked@@GLIBC_2.17 + 2043: 00000000000862e0 48 FUNC GLOBAL DEFAULT 12 strcmp@@GLIBC_2.17 + 2044: 000000000006be34 496 FUNC GLOBAL DEFAULT 12 _IO_gets@@GLIBC_2.17 + 2045: 0000000000035054 68 FUNC GLOBAL DEFAULT 12 __libc_longjmp@@GLIBC_PRIVATE + 2046: 00000000000e0200 64 FUNC WEAK DEFAULT 12 recvmsg@@GLIBC_2.17 + 2047: 0000000000039c04 20 FUNC GLOBAL DEFAULT 12 __strtoull_internal@@GLIBC_2.17 + 2048: 00000000000e2fe4 156 FUNC WEAK DEFAULT 12 iswspace_l@@GLIBC_2.17 + 2049: 000000000002eabc 16 FUNC WEAK DEFAULT 12 islower_l@@GLIBC_2.17 + 2050: 0000000000078dec 424 FUNC GLOBAL DEFAULT 12 __underflow@@GLIBC_2.17 + 2051: 00000000000cf650 68 FUNC WEAK DEFAULT 12 pwrite64@@GLIBC_2.17 + 2052: 0000000000086528 192 FUNC GLOBAL DEFAULT 12 strerror@@GLIBC_2.17 + 2053: 00000000001157dc 392 FUNC GLOBAL DEFAULT 12 xdr_wrapstring@@GLIBC_2.17 + 2054: 00000000000f89c0 128 FUNC GLOBAL DEFAULT 12 __asprintf_chk@@GLIBC_2.17 + 2055: 0000000000043bc0 124 FUNC GLOBAL DEFAULT 12 __strfmon_l@@GLIBC_2.17 + 2056: 00000000000d57d8 44 FUNC GLOBAL DEFAULT 12 tcgetpgrp@@GLIBC_2.17 + 2057: 0000000000021634 460 FUNC GLOBAL DEFAULT 12 __libc_start_main@@GLIBC_2.17 + 2058: 000000000006da78 44 FUNC WEAK DEFAULT 12 fgetwc_unlocked@@GLIBC_2.17 + 2059: 00000000000a62d4 8 FUNC GLOBAL DEFAULT 12 dirfd@@GLIBC_2.17 + 2060: 00000000000e5d58 824 FUNC GLOBAL DEFAULT 12 _nss_files_parse_sgent@@GLIBC_PRIVATE + 2061: 000000000010871c 8 FUNC GLOBAL DEFAULT 12 xdr_des_block@@GLIBC_2.17 + 2062: 00000000000d336c 60 FUNC GLOBAL DEFAULT 12 nftw@@GLIBC_2.17 + 2063: 000000000010b300 96 FUNC GLOBAL DEFAULT 12 xdr_cryptkeyarg2@@GLIBC_2.17 + 2064: 0000000000108790 132 FUNC GLOBAL DEFAULT 12 xdr_callhdr@@GLIBC_2.17 + 2065: 00000000000a9314 220 FUNC GLOBAL DEFAULT 12 setpwent@@GLIBC_2.17 + 2066: 00000000000e2eac 156 FUNC WEAK DEFAULT 12 iswprint_l@@GLIBC_2.17 + 2067: 00000000000e0b80 24 FUNC WEAK DEFAULT 12 semop@@GLIBC_2.17 + 2068: 00000000000d7640 48 FUNC GLOBAL DEFAULT 12 endfsent@@GLIBC_2.17 + 2069: 000000000002eb0c 16 FUNC GLOBAL DEFAULT 12 __isupper_l@@GLIBC_2.17 + 2070: 000000000006ed24 160 FUNC GLOBAL DEFAULT 12 wscanf@@GLIBC_2.17 + 2071: 00000000000730c0 244 FUNC WEAK DEFAULT 12 ferror@@GLIBC_2.17 + 2072: 000000000011b160 192 FUNC WEAK DEFAULT 12 getutent_r@@GLIBC_2.17 + 2073: 0000000000184d80 8 OBJECT GLOBAL DEFAULT 34 __vdso_clock_getres@@GLIBC_PRIVATE + 2074: 000000000010da94 548 FUNC GLOBAL DEFAULT 12 authdes_create@@GLIBC_2.17 + 2075: 0000000000088a48 32 FUNC GLOBAL DEFAULT 12 stpcpy@@GLIBC_2.17 + 2076: 00000000000d4e60 216 FUNC GLOBAL DEFAULT 12 ppoll@@GLIBC_2.17 + 2077: 000000000008ce60 3204 FUNC GLOBAL DEFAULT 12 __strxfrm_l@@GLIBC_2.17 + 2078: 000000000011a880 28 FUNC GLOBAL DEFAULT 12 fdetach@@GLIBC_2.17 + 2079: 00000000000ec5f4 68 FUNC GLOBAL DEFAULT 12 pthread_cond_destroy@@GLIBC_2.17 + 2080: 0000000000034630 136 FUNC WEAK DEFAULT 12 ldexp@@GLIBC_2.17 + 2081: 00000000000a9f50 632 FUNC WEAK DEFAULT 12 fgetpwent_r@@GLIBC_2.17 + 2082: 00000000000aa24c 188 FUNC WEAK DEFAULT 12 __wait@@GLIBC_2.17 + 2083: 00000000000daba8 64 FUNC GLOBAL DEFAULT 12 gcvt@@GLIBC_2.17 + 2084: 000000000006eb48 132 FUNC WEAK DEFAULT 12 fwprintf@@GLIBC_2.17 + 2085: 0000000000115238 388 FUNC GLOBAL DEFAULT 12 xdr_bytes@@GLIBC_2.17 + 2086: 000000000003852c 124 FUNC WEAK DEFAULT 12 setenv@@GLIBC_2.17 + 2087: 00000000000d5e50 24 FUNC GLOBAL DEFAULT 12 setpriority@@GLIBC_2.17 + 2088: 000000000011d6b0 164 FUNC GLOBAL DEFAULT 12 __libc_dlopen_mode@@GLIBC_PRIVATE + 2089: 00000000000cf7b0 200 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_addopen@@GLIBC_2.17 + 2090: 000000000002dae0 88 FUNC WEAK DEFAULT 12 nl_langinfo_l@@GLIBC_2.17 + 2091: 000000000007997c 152 FUNC GLOBAL DEFAULT 12 _IO_default_doallocate@@GLIBC_2.17 + 2092: 0000000000022a80 12 FUNC GLOBAL DEFAULT 12 __gconv_get_modules_db@@GLIBC_PRIVATE + 2093: 00000000000f7558 40 FUNC GLOBAL DEFAULT 12 __recvfrom_chk@@GLIBC_2.17 + 2094: 000000000006b1c4 432 FUNC GLOBAL DEFAULT 12 _IO_fread@@GLIBC_2.17 + 2095: 00000000000a65cc 496 FUNC GLOBAL DEFAULT 12 fgetgrent@@GLIBC_2.17 + 2096: 00000000000d6780 24 FUNC GLOBAL DEFAULT 12 setdomainname@@GLIBC_2.17 + 2097: 00000000000d0d80 64 FUNC WEAK DEFAULT 12 write@@GLIBC_2.17 + 2098: 00000000000f5090 124 FUNC GLOBAL DEFAULT 12 __clock_settime@@GLIBC_PRIVATE + 2099: 00000000000fd068 408 FUNC GLOBAL DEFAULT 12 getservbyport@@GLIBC_2.17 + 2100: 0000000000103340 68 FUNC WEAK DEFAULT 12 if_freenameindex@@GLIBC_2.17 + 2101: 000000000003f250 12 FUNC WEAK DEFAULT 12 strtod_l@@GLIBC_2.17 + 2102: 00000000000fb700 236 FUNC GLOBAL DEFAULT 12 getnetent@@GLIBC_2.17 + 2103: 000000000008e5a8 132 FUNC WEAK DEFAULT 12 wcslen@@GLIBC_2.17 + 2104: 000000000011b538 196 FUNC WEAK DEFAULT 12 getutline_r@@GLIBC_2.17 + 2105: 00000000000d4f54 468 FUNC GLOBAL DEFAULT 12 posix_fallocate@@GLIBC_2.17 + 2106: 00000000000d1558 52 FUNC GLOBAL DEFAULT 12 __pipe@@GLIBC_2.17 + 2107: 0000000000074640 356 FUNC GLOBAL DEFAULT 12 fseeko@@GLIBC_2.17 + 2108: 000000000010a2f8 196 FUNC GLOBAL DEFAULT 12 xdrrec_endofrecord@@GLIBC_2.17 + 2109: 00000000000e4b74 692 FUNC WEAK DEFAULT 12 lckpwdf@@GLIBC_2.17 + 2110: 00000000000e344c 96 FUNC WEAK DEFAULT 12 towctrans_l@@GLIBC_2.17 + 2111: 0000000000105614 56 FUNC GLOBAL DEFAULT 12 inet6_opt_set_val@@GLIBC_2.17 + 2112: 0000000000047930 21916 FUNC GLOBAL DEFAULT 12 vfprintf@@GLIBC_2.17 + 2113: 0000000000086310 20 FUNC GLOBAL DEFAULT 12 strcoll@@GLIBC_2.17 + 2114: 000000000003513c 176 FUNC WEAK DEFAULT 12 ssignal@@GLIBC_2.17 + 2115: 0000000000039310 168 FUNC WEAK DEFAULT 12 random@@GLIBC_2.17 + 2116: 00000000000ad834 92 FUNC GLOBAL DEFAULT 12 globfree@@GLIBC_2.17 + 2117: 00000000000dfa40 24 FUNC GLOBAL DEFAULT 12 delete_module@@GLIBC_2.17 + 2118: 000000000008bbd0 44 FUNC GLOBAL DEFAULT 12 basename@@GLIBC_2.17 + 2119: 000000000017de08 520 OBJECT GLOBAL DEFAULT 29 _sys_siglist@@GLIBC_2.17 + 2120: 00000000000ea80c 168 FUNC WEAK DEFAULT 12 argp_state_help@@GLIBC_2.17 + 2121: 000000000008fd10 20 FUNC GLOBAL DEFAULT 12 __wcstold_internal@@GLIBC_2.17 + 2122: 00000000000f9448 8 FUNC WEAK DEFAULT 12 ntohl@@GLIBC_2.17 + 2123: 00000000000da660 220 FUNC GLOBAL DEFAULT 12 closelog@@GLIBC_2.17 + 2124: 00000000000c6864 12 FUNC GLOBAL DEFAULT 12 getopt_long_only@@GLIBC_2.17 + 2125: 00000000000abc68 8 FUNC GLOBAL DEFAULT 12 getpgrp@@GLIBC_2.17 + 2126: 000000000002ea60 12 FUNC GLOBAL DEFAULT 12 isascii@@GLIBC_2.17 + 2127: 00000000000def04 212 FUNC WEAK DEFAULT 12 get_nprocs_conf@@GLIBC_2.17 + 2128: 000000000008e6d8 224 FUNC GLOBAL DEFAULT 12 wcsncmp@@GLIBC_2.17 + 2129: 00000000000c5400 52 FUNC WEAK DEFAULT 12 re_exec@@GLIBC_2.17 + 2130: 000000000010ef4c 36 FUNC GLOBAL DEFAULT 12 clnt_pcreateerror@@GLIBC_2.17 + 2131: 00000000000e11ac 408 FUNC WEAK DEFAULT 12 monstartup@@GLIBC_2.17 + 2132: 00000000000f7668 28 FUNC GLOBAL DEFAULT 12 __ptsname_r_chk@@GLIBC_2.17 + 2133: 00000000000d11a8 368 FUNC WEAK DEFAULT 12 __fcntl@@GLIBC_2.17 + 2134: 00000000000f9450 16 FUNC WEAK DEFAULT 12 ntohs@@GLIBC_2.17 + 2135: 0000000000052180 128 FUNC WEAK DEFAULT 12 snprintf@@GLIBC_2.17 + 2136: 0000000000078d80 108 FUNC GLOBAL DEFAULT 12 __overflow@@GLIBC_2.17 + 2137: 0000000000099ec8 500 FUNC GLOBAL DEFAULT 12 __isoc99_fwscanf@@GLIBC_2.17 + 2138: 00000000000d4f38 28 FUNC GLOBAL DEFAULT 12 posix_fadvise64@@GLIBC_2.17 + 2139: 000000000010b2c0 64 FUNC GLOBAL DEFAULT 12 xdr_cryptkeyarg@@GLIBC_2.17 + 2140: 0000000000039c04 20 FUNC GLOBAL DEFAULT 12 __strtoul_internal@@GLIBC_2.17 + 2141: 000000000008ece0 8 FUNC WEAK DEFAULT 12 wmemmove@@GLIBC_2.17 + 2142: 00000000000ac6d4 1712 FUNC WEAK DEFAULT 12 sysconf@@GLIBC_2.17 + 2143: 00000000000f6df0 528 FUNC GLOBAL DEFAULT 12 __gets_chk@@GLIBC_2.17 + 2144: 000000000008593c 188 FUNC GLOBAL DEFAULT 12 _obstack_free@@GLIBC_2.17 + 2145: 000000000010121c 364 FUNC GLOBAL DEFAULT 12 setnetgrent@@GLIBC_2.17 + 2146: 00000000000df7b0 36 FUNC GLOBAL DEFAULT 12 gnu_dev_makedev@@GLIBC_2.17 + 2147: 0000000000114b0c 232 FUNC GLOBAL DEFAULT 12 xdr_u_hyper@@GLIBC_2.17 + 2148: 00000000000d03e4 108 FUNC GLOBAL DEFAULT 12 __xmknodat@@GLIBC_2.17 + 2149: 0000000000090538 12 FUNC WEAK DEFAULT 12 wcstoull_l@@GLIBC_2.17 + 2150: 0000000000104bb4 248 FUNC GLOBAL DEFAULT 12 inet6_option_find@@GLIBC_2.17 + 2151: 000000000006a420 700 FUNC GLOBAL DEFAULT 12 _IO_fdopen@@GLIBC_2.17 + 2152: 000000000002eacc 16 FUNC WEAK DEFAULT 12 isgraph_l@@GLIBC_2.17 + 2153: 00000000000fd560 228 FUNC GLOBAL DEFAULT 12 getservent@@GLIBC_2.17 + 2154: 000000000010f594 624 FUNC GLOBAL DEFAULT 12 clnttcp_create@@GLIBC_2.17 + 2155: 00000000000f884c 28 FUNC GLOBAL DEFAULT 12 __ttyname_r_chk@@GLIBC_2.17 + 2156: 000000000003904c 144 FUNC GLOBAL DEFAULT 12 wctomb@@GLIBC_2.17 + 2157: 0000000000184f98 8 OBJECT GLOBAL DEFAULT 34 locs@@GLIBC_2.17 + 2158: 0000000000075bc0 168 FUNC GLOBAL DEFAULT 12 fputs_unlocked@@GLIBC_2.17 + 2159: 0000000000180dc0 8 OBJECT WEAK DEFAULT 33 __memalign_hook@@GLIBC_2.17 + 2160: 0000000000035d54 8 FUNC GLOBAL DEFAULT 12 siggetmask@@GLIBC_2.17 + 2161: 000000000006e938 60 FUNC GLOBAL DEFAULT 12 putwchar_unlocked@@GLIBC_2.17 + 2162: 00000000000e0ba0 24 FUNC WEAK DEFAULT 12 semget@@GLIBC_2.17 + 2163: 00000000000a8ddc 316 FUNC GLOBAL DEFAULT 12 putpwent@@GLIBC_2.17 + 2164: 000000000007ad04 60 FUNC GLOBAL DEFAULT 12 _IO_str_init_readonly@@GLIBC_2.17 + 2165: 0000000000108628 176 FUNC GLOBAL DEFAULT 12 xdr_accepted_reply@@GLIBC_2.17 + 2166: 0000000000039658 348 FUNC WEAK DEFAULT 12 initstate_r@@GLIBC_2.17 + 2167: 000000000006d664 144 FUNC WEAK DEFAULT 12 __vsscanf@@GLIBC_2.17 + 2168: 000000000008ea2c 280 FUNC GLOBAL DEFAULT 12 wcsstr@@GLIBC_2.17 + 2169: 00000000000810a8 268 FUNC GLOBAL DEFAULT 12 free@@GLIBC_2.17 + 2170: 0000000000076434 8 FUNC GLOBAL DEFAULT 12 _IO_file_seek@@GLIBC_2.17 + 2171: 0000000000085c40 52 FUNC GLOBAL DEFAULT 12 __libc_dynarray_at_failure@@GLIBC_PRIVATE + 2172: 000000000002e914 28 FUNC GLOBAL DEFAULT 12 ispunct@@GLIBC_2.17 + 2173: 00000000001828d0 4 OBJECT GLOBAL DEFAULT 34 __daylight@@GLIBC_2.17 + 2174: 00000000000f5a28 4 FUNC GLOBAL DEFAULT 12 __cyg_profile_func_exit@@GLIBC_2.17 + 2175: 000000000008e908 32 FUNC GLOBAL DEFAULT 12 wcsrchr@@GLIBC_2.17 + 2176: 00000000000ec308 68 FUNC GLOBAL DEFAULT 12 pthread_attr_getinheritsched@@GLIBC_2.17 + 2177: 00000000000f75e0 28 FUNC GLOBAL DEFAULT 12 __readlinkat_chk@@GLIBC_2.17 + 2178: 00000000000f4898 152 FUNC GLOBAL DEFAULT 12 __nss_hosts_lookup2@@GLIBC_PRIVATE + 2179: 0000000000110e58 276 FUNC GLOBAL DEFAULT 12 key_decryptsession@@GLIBC_2.17 + 2180: 00000000000ddcb0 308 FUNC GLOBAL DEFAULT 12 vwarn@@GLIBC_2.17 + 2181: 000000000008ed4c 32 FUNC WEAK DEFAULT 12 wcpcpy@@GLIBC_2.17 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libcairo.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libcairo.so.2.txt new file mode 100644 index 000000000000..3fa0ebacf32f --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libcairo.so.2.txt @@ -0,0 +1,865 @@ +Library: /lib64/libcairo.so.2 +Package: cairo-1.15.12-4.el7.aarch64 + + +Symbol table '.dynsym' contains 859 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000131a8 0 SECTION LOCAL DEFAULT 9 + 2: 000000000013d738 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_picture + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite_glyphs_32 + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictscreen_next + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Set_Var_Design_Coordinates + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_composite32 + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryColors + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindVisualFormat + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND difftime@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_equal + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Set_Transform + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.17 (3) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_free_picture + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternDestroy + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_lookup + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXMakeCurrent + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XUnlockDisplay + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glEnable + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_valid@PNG15_0 (4) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Load_Sfnt_Table + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_error@PNG15_0 (4) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_depth_visuals_iterator + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_insert + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_rectangles + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite_glyphs_8 + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_expand_gray_1_2_4_to_8@PNG15_0 (4) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connection_has_error + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Set_Char_Size + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_composite_glyphs + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_contains_point + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindStandardFormat + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.17 (5) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternDuplicate + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Var_Design_Coordinates + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_bits + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glIsEnabled + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateLinearGradient + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (3) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_reply + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_remove + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Transform + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glBlendFuncSeparate + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewind@GLIBC_2.17 (2) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_fill + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_change_gc + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_fn@PNG15_0 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_maximum_request_length + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_get_mask_format + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Decompose + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternDel + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_detach + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_MM_Var + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Load_Glyph + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_add_triangles + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_info_struct@PNG15_0 (4) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_format + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_create_pixmap + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.17 (3) + 66: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 67: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDisable + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_stride + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeColormap + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_free_glyphs + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Bitmap_Convert + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.17 (3) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XExtendedMaxRequestSize + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateGlyphSet + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_radial_gradient + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glClear + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ctime_r@GLIBC_2.17 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictvisual_next + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddDouble + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictforminfo_next + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreatePicture + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glClearStencil + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddString + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_composite_glyphs_no_mask + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetClipMask + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glReadBuffer + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmCreatePixmap + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetPictureClipRectangles + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcFontMatch + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND hypot@GLIBC_2.17 (6) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreePicture + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND snprintf@GLIBC_2.17 (2) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXChooseFBConfig + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglQueryContext + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freelocale@GLIBC_2.17 (2) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflate + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod_l@GLIBC_2.17 (2) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGetError + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_intersect + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit_ + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_destroy_function + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_IHDR@PNG15_0 (4) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_extension_data + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_IHDR@PNG15_0 (4) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_free_gc + 108: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (7) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_init_rects + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_destroy + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glStencilFunc + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderChangePicture + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcConfigGetCurrent + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_image_reply + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetFTFace + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (2) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_write_end@PNG15_0 (4) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_get_image + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_put_image + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Done_FreeType + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreeGlyphs + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_tRNS_to_alpha@PNG15_0 (4) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderComposite + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_glyph_set + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Vector_Transform + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglGetCurrentContext + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Bitmap_New + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateWindow + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_data + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_io_ptr@PNG15_0 (4) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.17 (2) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_copy_area + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateColormap + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_query_version_reply + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.17 (2) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.17 (2) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glClearColor + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_longjmp_fn@PNG15_0 (4) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_image_data + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFillRectangle + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_info@PNG15_0 (4) + 147: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_prefetch_extension_data + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sincos@GLIBC_2.17 (6) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_write_info@PNG15_0 (4) + 151: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglMakeCurrent + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFillRectangles + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.17 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glReadPixels + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_wait_for_reply + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglGetProcAddress + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_prefetch_maximum_request_length + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_setup_roots_iterator + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_contains_rectangle + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglQueryString + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQuerySubpixelOrder + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_packing@PNG15_0 (4) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_init + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCopyArea + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND acos@GLIBC_2.17 (6) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_set_picture_transform + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.17 (2) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDrawBuffer + 172: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglGetCurrentSurface + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XDestroyWindow + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glActiveTexture + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 178: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND xcb_shm_id + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateEnd + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.17 (2) + 181: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fmod@GLIBC_2.17 (6) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetCurrentContext + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_free_glyph_set + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_filter + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_set_picture_filter + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Translate + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_repeat + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_conical_gradient + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_set_picture_clip_rectangles + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_copy + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_height + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictdepth_next + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXSwapBuffers + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glColorMask + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND frexp@GLIBC_2.17 (6) + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglSwapBuffers + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmGetImage + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFillRectangle + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_not_empty + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_setup + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_trapezoids + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateSolidFill + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glBlendFunc + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_palette_to_rgb@PNG15_0 (4) + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetString + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetPictureFilter + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncat_chk@GLIBC_2.17 (2) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ferror@GLIBC_2.17 (2) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_write_image@PNG15_0 (4) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglCreatePbufferSurface + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (2) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_create_pixmap_checked + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeTrapezoids + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeGC + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (3) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeTriStrip + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (2) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_send_request + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glBindTexture + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_depth + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetVisualFromFBConfig + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_image@PNG15_0 (4) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQueryVersion + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_error_ptr@PNG15_0 (4) + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_X11_Font_Format + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmQueryVersion + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_GlyphSlot_Embolden + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Library_SetLcdFilter + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XLockDisplay + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tan@GLIBC_2.17 (6) + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_fill_rectangles + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (3) + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_ref + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDepthMask + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateRadialGradient + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glStencilOp + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglDestroySurface + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreeGlyphSet + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_First_Char + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_unref + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XScreenNumberOfScreen + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Bitmap_Done + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime_r@GLIBC_2.17 (2) + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDeleteTextures + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.17 (2) + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Init_FreeType + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tmpfile@GLIBC_2.17 (2) + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_flush + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ldiv@GLIBC_2.17 (2) + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_thaw + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_rasterize_trapezoid + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND newlocale@GLIBC_2.17 (2) + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glPixelStorei + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_component_alpha + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGetIntegerv + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetCurrentDrawable + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property_value + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.17 (2) + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rand@GLIBC_2.17 (2) + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_detach_checked + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_n_rects + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __longjmp_chk@GLIBC_2.17 (2) + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_query_version + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmQueryExtension + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite_glyphs_16 + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_screens_iterator + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.17 (2) + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pow@GLIBC_2.17 (6) + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateGC + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_extents + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDrawElements + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_interlace_handling@PNG15_0 (4) + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_transform + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_version_reply + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_add_glyphs + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetInteger + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_end@PNG15_0 (4) + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFlush + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_change_picture + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.17 (2) + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property_reply + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glTexImage2D + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitImage + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_screen_allowed_depths_iterator + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_filler@PNG15_0 (4) + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.17 (5) + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddBool + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSync + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGet + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_read_struct@PNG15_0 (4) + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSendEvent + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __finite@GLIBC_2.17 (6) + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderAddGlyphs + 300: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XChangeGC + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetDefault + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindFormat + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (3) + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XPutImage + 307: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_image + 308: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDrawArrays + 309: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XNextRequest + 310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_format_supported_destination + 311: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_gray_to_rgb@PNG15_0 (4) + 312: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_reply + 313: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_clip_region32 + 314: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmAttach + 315: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_radial_gradient + 316: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (3) + 317: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glScissor + 318: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_blt + 319: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_freeze + 320: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeText32 + 321: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_solid_fill + 322: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_update_info@PNG15_0 (4) + 323: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 324: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 325: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_attach_checked + 326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrt@GLIBC_2.17 (6) + 327: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND xcb_render_id + 328: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_New_Face + 329: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sin@GLIBC_2.17 (6) + 330: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadEvents + 331: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_solid_fill + 332: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_linear_gradient + 333: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 334: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_packswap@PNG15_0 (4) + 335: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glTexSubImage2D + 336: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_create_gc + 337: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXQueryContext + 338: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_put_image + 339: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_subtract + 340: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 341: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 342: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_free_pixmap + 343: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetImage + 344: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcNameConstant + 345: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_discard_reply + 346: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAllocColor + 347: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGetString + 348: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.17 (2) + 349: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeText16 + 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 351: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 352: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_formats_iterator + 353: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_GlyphSlot_Oblique + 354: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_write_user_transform_fn@PNG15_0 (4) + 355: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_subpixels + 356: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_strip_16@PNG15_0 (4) + 357: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeText8 + 358: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcInitBringUptoDate + 359: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_attach + 360: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 361: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (2) + 362: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_request_check + 363: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Get_CBox + 364: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_generate_id + 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetClipRectangles + 366: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_width + 367: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmget@GLIBC_2.17 (2) + 368: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_input_focus + 369: 0000000000000000 0 FUNC GLOBAL DEFAULT UND modf@GLIBC_2.17 (6) + 370: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcConfigSubstitute + 371: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_screen_next + 372: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_fini + 373: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictdepth_visuals_iterator + 374: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_union + 375: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmPutImage + 376: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetErrorHandler + 377: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreePixmap + 378: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetProcAddress + 379: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 380: 0000000000000000 0 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.17 (2) + 381: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_user_transform_fn@PNG15_0 (4) + 382: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcDefaultSubstitute + 383: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_destroy_read_struct@PNG15_0 (4) + 384: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Glyph_Name + 385: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glViewport + 386: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property_value_length + 387: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictscreen_depths_iterator + 388: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite + 389: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_get_image_reply + 390: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMaxRequestSize + 391: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_destroy_write_struct@PNG15_0 (4) + 392: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_visualtype_next + 393: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Done_Face + 394: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddInteger + 395: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 396: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmap + 397: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetPictureTransform + 398: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_transform_point_3d + 399: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternCreate + 400: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_bKGD@PNG15_0 (4) + 401: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcFreeTypeCharIndex + 402: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_linear_gradient + 403: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 404: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 405: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.17 (5) + 406: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_translate + 407: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Render_Glyph + 408: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcat_chk@GLIBC_2.17 (2) + 409: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Next_Char + 410: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_write_struct@PNG15_0 (4) + 411: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glTexParameteri + 412: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 413: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_write_fn@PNG15_0 (4) + 414: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmDetach + 415: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_init_rect + 416: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_create + 417: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XEventsQueued + 418: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_component_alpha + 419: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 420: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_version + 421: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Var_Blend_Coordinates + 422: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poly_fill_rectangle + 423: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGenTextures + 424: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND xcb_big_requests_id + 425: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 426: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXQueryExtensionsString + 427: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetBool + 428: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglChooseConfig + 429: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_depth_next + 430: 000000000002dbf0 96 FUNC GLOBAL DEFAULT 11 cairo_device_finish + 431: 000000000002955c 84 FUNC GLOBAL DEFAULT 11 cairo_rectangle_list_destroy + 432: 000000000009f8d8 172 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_create_for_bitmap + 433: 0000000000061468 292 FUNC GLOBAL DEFAULT 11 cairo_recording_surface_create + 434: 0000000000052ab4 304 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_for_surface + 435: 0000000000067774 608 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_glyph_extents + 436: 000000000002f7d0 36 FUNC GLOBAL DEFAULT 11 cairo_font_options_get_subpixel_order + 437: 00000000000755c0 28 FUNC GLOBAL DEFAULT 11 cairo_surface_get_device_scale + 438: 0000000000082c6c 72 FUNC GLOBAL DEFAULT 11 cairo_set_line_join + 439: 00000000000df578 80 FUNC GLOBAL DEFAULT 11 cairo_svg_surface_create + 440: 0000000000076a7c 232 FUNC GLOBAL DEFAULT 11 cairo_surface_create_similar_image + 441: 0000000000084554 304 FUNC GLOBAL DEFAULT 11 cairo_text_extents + 442: 000000000002db98 88 FUNC GLOBAL DEFAULT 11 cairo_device_flush + 443: 00000000000b3784 32 FUNC GLOBAL DEFAULT 11 cairo_gl_device_set_thread_aware + 444: 0000000000083a90 72 FUNC GLOBAL DEFAULT 11 cairo_clip_preserve + 445: 00000000000754b8 264 FUNC GLOBAL DEFAULT 11 cairo_surface_set_device_scale + 446: 0000000000082e6c 72 FUNC GLOBAL DEFAULT 11 cairo_rotate + 447: 000000000009fd0c 64 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_display + 448: 00000000000830f4 72 FUNC GLOBAL DEFAULT 11 cairo_line_to + 449: 0000000000074568 24 FUNC GLOBAL DEFAULT 11 cairo_surface_get_device + 450: 000000000005ecb4 28 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_set_acquire + 451: 0000000000056ef8 64 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_surface + 452: 00000000000a6e60 292 FUNC GLOBAL DEFAULT 11 cairo_xcb_surface_set_drawable + 453: 0000000000053868 356 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_set_corner_color_rgba + 454: 0000000000064808 48 FUNC GLOBAL DEFAULT 11 cairo_region_is_empty + 455: 0000000000084418 44 FUNC GLOBAL DEFAULT 11 cairo_get_tolerance + 456: 0000000000082c24 72 FUNC GLOBAL DEFAULT 11 cairo_set_line_cap + 457: 000000000002dc50 260 FUNC GLOBAL DEFAULT 11 cairo_device_destroy + 458: 0000000000083a48 72 FUNC GLOBAL DEFAULT 11 cairo_clip + 459: 0000000000070850 112 FUNC GLOBAL DEFAULT 11 cairo_device_observer_print + 460: 000000000009fdc8 60 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_visual + 461: 0000000000082974 72 FUNC GLOBAL DEFAULT 11 cairo_set_source_rgba + 462: 0000000000074ba8 164 FUNC GLOBAL DEFAULT 11 cairo_surface_supports_mime_type + 463: 000000000005ed14 28 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_get_snapshot + 464: 0000000000064500 112 FUNC GLOBAL DEFAULT 11 cairo_region_union + 465: 000000000002de04 28 FUNC GLOBAL DEFAULT 11 cairo_device_set_user_data + 466: 000000000005328c 424 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_curve_to + 467: 000000000002f638 200 FUNC GLOBAL DEFAULT 11 cairo_font_options_equal + 468: 0000000000081fac 108 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_set_text_to_glyphs_func + 469: 000000000002f700 116 FUNC GLOBAL DEFAULT 11 cairo_font_options_hash + 470: 00000000000cd344 244 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_dsc_comment + 471: 00000000000680e8 208 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_text_extents + 472: 00000000000bd53c 56 FUNC GLOBAL DEFAULT 11 cairo_glx_device_get_display + 473: 0000000000053e6c 104 FUNC GLOBAL DEFAULT 11 cairo_pattern_set_extend + 474: 0000000000084684 428 FUNC GLOBAL DEFAULT 11 cairo_text_path + 475: 00000000000821e4 8 FUNC GLOBAL DEFAULT 11 cairo_version + 476: 0000000000051c50 72 FUNC GLOBAL DEFAULT 11 cairo_path_destroy + 477: 00000000000748d0 188 FUNC GLOBAL DEFAULT 11 cairo_surface_get_mime_data + 478: 000000000002dd54 136 FUNC GLOBAL DEFAULT 11 cairo_device_acquire + 479: 0000000000052fe4 316 FUNC GLOBAL DEFAULT 11 cairo_pattern_destroy + 480: 00000000000c2bd4 208 FUNC GLOBAL DEFAULT 11 cairo_script_surface_create_for_target + 481: 00000000000e01e8 416 FUNC GLOBAL DEFAULT 11 cairo_tee_surface_remove + 482: 0000000000082fd4 36 FUNC GLOBAL DEFAULT 11 cairo_device_to_user + 483: 000000000002f18c 36 FUNC GLOBAL DEFAULT 11 cairo_font_face_get_type + 484: 000000000002f1dc 8 FUNC GLOBAL DEFAULT 11 cairo_font_face_get_user_data + 485: 000000000009fd88 64 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_screen + 486: 000000000002f1d4 8 FUNC GLOBAL DEFAULT 11 cairo_font_face_status + 487: 000000000008405c 48 FUNC GLOBAL DEFAULT 11 cairo_get_scaled_font + 488: 0000000000053ed4 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_extend + 489: 000000000002f4d0 72 FUNC GLOBAL DEFAULT 11 cairo_font_options_destroy + 490: 0000000000083e94 72 FUNC GLOBAL DEFAULT 11 cairo_set_font_matrix + 491: 00000000000d7f18 132 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_set_page_label + 492: 00000000000e0388 188 FUNC GLOBAL DEFAULT 11 cairo_tee_surface_index + 493: 0000000000142fa8 0 NOTYPE GLOBAL DEFAULT 24 _end + 494: 00000000000a6c08 416 FUNC GLOBAL DEFAULT 11 cairo_xcb_surface_create_with_xrender_format + 495: 00000000000834dc 72 FUNC GLOBAL DEFAULT 11 cairo_paint + 496: 00000000000df65c 36 FUNC GLOBAL DEFAULT 11 cairo_svg_version_to_string + 497: 00000000000756d8 28 FUNC GLOBAL DEFAULT 11 cairo_surface_get_device_offset + 498: 00000000000826e4 124 FUNC GLOBAL DEFAULT 11 cairo_destroy + 499: 000000000007071c 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_finish_callback + 500: 00000000000cd1f4 100 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_get_eps + 501: 00000000000707cc 120 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_elapsed + 502: 0000000000081f40 108 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_set_render_glyph_func + 503: 00000000000bd0c4 60 FUNC GLOBAL DEFAULT 11 cairo_egl_device_get_display + 504: 000000000008313c 72 FUNC GLOBAL DEFAULT 11 cairo_curve_to + 505: 0000000000063fb0 96 FUNC GLOBAL DEFAULT 11 cairo_region_create_rectangle + 506: 0000000000083064 72 FUNC GLOBAL DEFAULT 11 cairo_new_sub_path + 507: 0000000000082b38 72 FUNC GLOBAL DEFAULT 11 cairo_set_antialias + 508: 0000000000066e3c 8 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_user_data + 509: 00000000000b03cc 76 FUNC GLOBAL DEFAULT 11 cairo_image_surface_create_from_png_stream + 510: 000000000008356c 116 FUNC GLOBAL DEFAULT 11 cairo_mask + 511: 000000000002f040 40 FUNC GLOBAL DEFAULT 11 cairo_font_face_reference + 512: 00000000000c2ca4 260 FUNC GLOBAL DEFAULT 11 cairo_script_from_recording_surface + 513: 0000000000083938 136 FUNC GLOBAL DEFAULT 11 cairo_stroke_extents + 514: 0000000000066e18 36 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_reference_count + 515: 00000000000689ac 44 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_scale_matrix + 516: 0000000000063d20 84 FUNC GLOBAL DEFAULT 11 cairo_region_create + 517: 00000000000d7f9c 108 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_set_thumbnail_size + 518: 000000000006407c 136 FUNC GLOBAL DEFAULT 11 cairo_region_destroy + 519: 0000000000057000 68 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_color_stop_count + 520: 0000000000040428 332 FUNC GLOBAL DEFAULT 11 cairo_matrix_invert + 521: 0000000000082084 88 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_get_init_func + 522: 00000000000838b8 128 FUNC GLOBAL DEFAULT 11 cairo_in_fill + 523: 0000000000082cfc 108 FUNC GLOBAL DEFAULT 11 cairo_get_dash_count + 524: 0000000000082b80 72 FUNC GLOBAL DEFAULT 11 cairo_set_fill_rule + 525: 0000000000057124 132 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_get_patch_count + 526: 0000000000082784 32 FUNC GLOBAL DEFAULT 11 cairo_get_reference_count + 527: 000000000002f8f4 84 FUNC GLOBAL DEFAULT 11 cairo_font_options_set_variations + 528: 00000000000bafa0 248 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_swapbuffers + 529: 0000000000082cb4 72 FUNC GLOBAL DEFAULT 11 cairo_set_dash + 530: 0000000000053148 28 FUNC GLOBAL DEFAULT 11 cairo_pattern_set_user_data + 531: 00000000000837a8 72 FUNC GLOBAL DEFAULT 11 cairo_copy_page + 532: 000000000009fe40 60 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_width + 533: 000000000007b168 720 FUNC GLOBAL DEFAULT 11 cairo_toy_font_face_create + 534: 000000000007062c 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_fill_callback + 535: 00000000000539cc 8 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_set_corner_color_rgb + 536: 00000000000bd5ac 196 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_create_for_window + 537: 00000000000dfff0 236 FUNC GLOBAL DEFAULT 11 cairo_tee_surface_add + 538: 0000000000083310 72 FUNC GLOBAL DEFAULT 11 cairo_rel_move_to + 539: 000000000003c6c4 104 FUNC GLOBAL DEFAULT 11 cairo_format_stride_for_width + 540: 0000000000082834 72 FUNC GLOBAL DEFAULT 11 cairo_push_group_with_content + 541: 00000000000763c0 112 FUNC GLOBAL DEFAULT 11 cairo_surface_show_page + 542: 00000000000570a8 124 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_radial_circles + 543: 00000000000d7de0 172 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_add_outline + 544: 00000000000c71b0 36 FUNC GLOBAL DEFAULT 11 cairo_ft_font_face_get_synthesize + 545: 0000000000082928 76 FUNC GLOBAL DEFAULT 11 cairo_set_source_rgb + 546: 0000000000056f38 200 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_color_stop_rgba + 547: 0000000000076334 140 FUNC GLOBAL DEFAULT 11 cairo_surface_copy_page + 548: 00000000000b02f8 212 FUNC GLOBAL DEFAULT 11 cairo_image_surface_create_from_png + 549: 00000000000752c8 76 FUNC GLOBAL DEFAULT 11 cairo_surface_flush + 550: 0000000000052fd4 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_type + 551: 0000000000075ca4 172 FUNC GLOBAL DEFAULT 11 cairo_surface_unmap_image + 552: 000000000002f1b0 36 FUNC GLOBAL DEFAULT 11 cairo_font_face_get_reference_count + 553: 0000000000083dd4 72 FUNC GLOBAL DEFAULT 11 cairo_set_font_face + 554: 0000000000074f50 412 FUNC GLOBAL DEFAULT 11 cairo_surface_destroy + 555: 00000000000c718c 36 FUNC GLOBAL DEFAULT 11 cairo_ft_font_face_unset_synthesize + 556: 000000000003c45c 56 FUNC GLOBAL DEFAULT 11 cairo_image_surface_get_height + 557: 000000000003c3b4 56 FUNC GLOBAL DEFAULT 11 cairo_image_surface_get_data + 558: 00000000000705b4 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_paint_callback + 559: 000000000009fd4c 60 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_drawable + 560: 00000000000c7000 192 FUNC GLOBAL DEFAULT 11 cairo_ft_font_face_create_for_pattern + 561: 0000000000096114 76 FUNC GLOBAL DEFAULT 11 cairo_xlib_device_debug_cap_xrender_version + 562: 00000000000534f8 736 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_end_patch + 563: 00000000000cd258 236 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_set_size + 564: 0000000000084c1c 48 FUNC GLOBAL DEFAULT 11 cairo_copy_path_flat + 565: 00000000000642b8 8 FUNC GLOBAL DEFAULT 11 cairo_region_status + 566: 000000000005ec98 28 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_get_callback_data + 567: 0000000000142fa8 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 568: 000000000003c424 56 FUNC GLOBAL DEFAULT 11 cairo_image_surface_get_width + 569: 000000000002dddc 32 FUNC GLOBAL DEFAULT 11 cairo_device_get_reference_count + 570: 0000000000053238 84 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_move_to + 571: 000000000002f538 256 FUNC GLOBAL DEFAULT 11 cairo_font_options_merge + 572: 0000000000053120 32 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_reference_count + 573: 000000000002f8d0 36 FUNC GLOBAL DEFAULT 11 cairo_font_options_get_hint_metrics + 574: 0000000000141898 0 NOTYPE GLOBAL DEFAULT 23 _edata + 575: 0000000000083524 72 FUNC GLOBAL DEFAULT 11 cairo_paint_with_alpha + 576: 00000000000709e8 80 FUNC GLOBAL DEFAULT 11 cairo_device_observer_fill_elapsed + 577: 00000000000828e0 72 FUNC GLOBAL DEFAULT 11 cairo_set_operator + 578: 000000000002d9e4 92 FUNC GLOBAL DEFAULT 11 cairo_device_reference + 579: 00000000000cd0e0 108 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_restrict_to_level + 580: 000000000004002c 52 FUNC GLOBAL DEFAULT 11 cairo_matrix_transform_distance + 581: 0000000000070990 80 FUNC GLOBAL DEFAULT 11 cairo_device_observer_mask_elapsed + 582: 0000000000082d68 44 FUNC GLOBAL DEFAULT 11 cairo_get_dash + 583: 0000000000083358 72 FUNC GLOBAL DEFAULT 11 cairo_rel_line_to + 584: 000000000008218c 88 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_get_unicode_to_glyph_func + 585: 0000000000083b9c 128 FUNC GLOBAL DEFAULT 11 cairo_in_clip + 586: 00000000000a3188 64 FUNC GLOBAL DEFAULT 11 cairo_xcb_device_debug_cap_xshm_version + 587: 00000000000837f0 72 FUNC GLOBAL DEFAULT 11 cairo_show_page + 588: 000000000008301c 72 FUNC GLOBAL DEFAULT 11 cairo_new_path + 589: 00000000000689d8 88 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_font_options + 590: 00000000000755dc 252 FUNC GLOBAL DEFAULT 11 cairo_surface_set_device_offset + 591: 00000000000539d4 776 FUNC GLOBAL DEFAULT 11 cairo_pattern_add_color_stop_rgba + 592: 00000000000835e0 168 FUNC GLOBAL DEFAULT 11 cairo_mask_surface + 593: 0000000000096160 44 FUNC GLOBAL DEFAULT 11 cairo_xlib_device_debug_set_precision + 594: 0000000000061e08 96 FUNC GLOBAL DEFAULT 11 cairo_recording_surface_get_extents + 595: 0000000000083838 128 FUNC GLOBAL DEFAULT 11 cairo_in_stroke + 596: 0000000000070a40 80 FUNC GLOBAL DEFAULT 11 cairo_device_observer_stroke_elapsed + 597: 0000000000066818 1536 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_create + 598: 0000000000057320 316 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_get_corner_color_rgba + 599: 00000000000756f4 188 FUNC GLOBAL DEFAULT 11 cairo_surface_set_fallback_resolution + 600: 00000000000bad78 320 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_create_for_texture + 601: 0000000000082efc 72 FUNC GLOBAL DEFAULT 11 cairo_set_matrix + 602: 0000000000141898 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 603: 00000000000825d0 112 FUNC GLOBAL DEFAULT 11 cairo_create + 604: 000000000008485c 44 FUNC GLOBAL DEFAULT 11 cairo_get_line_width + 605: 000000000006596c 36 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_type + 606: 0000000000052be4 308 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_linear + 607: 00000000000705f0 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_mask_callback + 608: 00000000000827a4 72 FUNC GLOBAL DEFAULT 11 cairo_save + 609: 00000000000764b0 140 FUNC GLOBAL DEFAULT 11 cairo_surface_mark_dirty + 610: 0000000000052f74 96 FUNC GLOBAL DEFAULT 11 cairo_pattern_reference + 611: 0000000000083688 72 FUNC GLOBAL DEFAULT 11 cairo_stroke + 612: 000000000002f874 28 FUNC GLOBAL DEFAULT 11 cairo_font_options_set_hint_style + 613: 00000000000c2b24 176 FUNC GLOBAL DEFAULT 11 cairo_script_surface_create + 614: 000000000003c494 56 FUNC GLOBAL DEFAULT 11 cairo_image_surface_get_stride + 615: 00000000000cd4ac 128 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_dsc_begin_page_setup + 616: 000000000003fdc0 132 FUNC GLOBAL DEFAULT 11 cairo_matrix_multiply + 617: 0000000000053164 212 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_begin_patch + 618: 0000000000053434 188 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_line_to + 619: 000000000002ddfc 8 FUNC GLOBAL DEFAULT 11 cairo_device_get_user_data + 620: 0000000000042c50 44 FUNC GLOBAL DEFAULT 11 cairo_glyph_allocate + 621: 000000000002f774 28 FUNC GLOBAL DEFAULT 11 cairo_font_options_set_antialias + 622: 00000000000d7cfc 36 FUNC GLOBAL DEFAULT 11 cairo_pdf_get_versions + 623: 000000000002f3f0 76 FUNC GLOBAL DEFAULT 11 cairo_font_options_create + 624: 0000000000083edc 48 FUNC GLOBAL DEFAULT 11 cairo_get_font_matrix + 625: 00000000000833a0 72 FUNC GLOBAL DEFAULT 11 cairo_rel_curve_to + 626: 0000000000052aac 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_rgb + 627: 000000000009fe04 60 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_depth + 628: 000000000005ecd0 44 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_get_acquire + 629: 0000000000070668 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_stroke_callback + 630: 000000000002f8b4 28 FUNC GLOBAL DEFAULT 11 cairo_font_options_set_hint_metrics + 631: 0000000000052e6c 264 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_mesh + 632: 00000000000706e0 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_flush_callback + 633: 0000000000142fa8 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 634: 0000000000052fdc 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_status + 635: 0000000000082eb4 72 FUNC GLOBAL DEFAULT 11 cairo_transform + 636: 0000000000084374 120 FUNC GLOBAL DEFAULT 11 cairo_glyph_path + 637: 0000000000065990 8 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_status + 638: 0000000000084cf0 8 FUNC GLOBAL DEFAULT 11 cairo_status + 639: 0000000000072224 416 FUNC GLOBAL DEFAULT 11 cairo_surface_create_for_rectangle + 640: 00000000000d7c80 124 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_restrict_to_version + 641: 00000000000820dc 88 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_get_render_glyph_func + 642: 0000000000070a98 80 FUNC GLOBAL DEFAULT 11 cairo_device_observer_glyphs_elapsed + 643: 000000000005ec80 24 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_set_callback_data + 644: 00000000000708c0 112 FUNC GLOBAL DEFAULT 11 cairo_device_observer_elapsed + 645: 00000000000848b4 44 FUNC GLOBAL DEFAULT 11 cairo_get_line_join + 646: 00000000000643e0 112 FUNC GLOBAL DEFAULT 11 cairo_region_intersect + 647: 0000000000063d74 420 FUNC GLOBAL DEFAULT 11 cairo_region_create_rectangles + 648: 0000000000052d18 340 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_radial + 649: 0000000000083b20 124 FUNC GLOBAL DEFAULT 11 cairo_clip_extents + 650: 000000000003c344 112 FUNC GLOBAL DEFAULT 11 cairo_image_surface_create + 651: 0000000000084888 44 FUNC GLOBAL DEFAULT 11 cairo_get_line_cap + 652: 00000000000cd170 36 FUNC GLOBAL DEFAULT 11 cairo_ps_level_to_string + 653: 000000000007489c 52 FUNC GLOBAL DEFAULT 11 cairo_surface_set_user_data + 654: 0000000000082d94 72 FUNC GLOBAL DEFAULT 11 cairo_set_miter_limit + 655: 000000000005ebb4 204 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_raster_source + 656: 00000000000bd000 196 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_create_for_egl + 657: 0000000000083760 72 FUNC GLOBAL DEFAULT 11 cairo_fill_preserve + 658: 000000000008267c 96 FUNC GLOBAL DEFAULT 11 cairo_reference + 659: 00000000000d7d44 156 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_set_size + 660: 000000000002f43c 140 FUNC GLOBAL DEFAULT 11 cairo_font_options_copy + 661: 000000000009faa0 212 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_set_size + 662: 000000000002f518 32 FUNC GLOBAL DEFAULT 11 cairo_font_options_status + 663: 0000000000066e64 68 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_extents + 664: 000000000003c3ec 56 FUNC GLOBAL DEFAULT 11 cairo_image_surface_get_format + 665: 0000000000076564 104 FUNC GLOBAL DEFAULT 11 cairo_surface_has_show_text_glyphs + 666: 0000000000040060 84 FUNC GLOBAL DEFAULT 11 cairo_matrix_transform_point + 667: 0000000000042c7c 4 FUNC GLOBAL DEFAULT 11 cairo_glyph_free + 668: 0000000000083f84 88 FUNC GLOBAL DEFAULT 11 cairo_get_font_options + 669: 00000000000e0e64 0 FUNC GLOBAL DEFAULT 12 _fini + 670: 000000000003fd70 80 FUNC GLOBAL DEFAULT 11 cairo_matrix_init_rotate + 671: 000000000008490c 48 FUNC GLOBAL DEFAULT 11 cairo_get_matrix + 672: 0000000000074798 100 FUNC GLOBAL DEFAULT 11 cairo_surface_reference + 673: 0000000000083cdc 152 FUNC GLOBAL DEFAULT 11 cairo_select_font_face + 674: 000000000006897c 48 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_ctm + 675: 0000000000084830 44 FUNC GLOBAL DEFAULT 11 cairo_get_fill_rule + 676: 00000000000baf50 40 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_get_width + 677: 0000000000053140 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_user_data + 678: 000000000006894c 48 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_font_matrix + 679: 0000000000082ddc 72 FUNC GLOBAL DEFAULT 11 cairo_translate + 680: 0000000000082134 88 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_get_text_to_glyphs_func + 681: 000000000007b518 88 FUNC GLOBAL DEFAULT 11 cairo_toy_font_face_get_weight + 682: 000000000002da54 36 FUNC GLOBAL DEFAULT 11 cairo_device_get_type + 683: 00000000000829bc 92 FUNC GLOBAL DEFAULT 11 cairo_set_source_surface + 684: 00000000000bd574 56 FUNC GLOBAL DEFAULT 11 cairo_glx_device_get_context + 685: 0000000000064248 112 FUNC GLOBAL DEFAULT 11 cairo_region_get_extents + 686: 00000000000df5c8 112 FUNC GLOBAL DEFAULT 11 cairo_svg_surface_restrict_to_version + 687: 000000000003fd2c 36 FUNC GLOBAL DEFAULT 11 cairo_matrix_init_translate + 688: 00000000000c2aa4 112 FUNC GLOBAL DEFAULT 11 cairo_script_write_comment + 689: 00000000000131a8 0 FUNC GLOBAL DEFAULT 9 _init + 690: 00000000000c72b0 104 FUNC GLOBAL DEFAULT 11 cairo_ft_scaled_font_unlock_face + 691: 00000000000babc0 440 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_create + 692: 0000000000082a8c 52 FUNC GLOBAL DEFAULT 11 cairo_pop_group_to_source + 693: 0000000000042c80 36 FUNC GLOBAL DEFAULT 11 cairo_text_cluster_allocate + 694: 000000000003fe44 104 FUNC GLOBAL DEFAULT 11 cairo_matrix_translate + 695: 000000000008287c 8 FUNC GLOBAL DEFAULT 11 cairo_push_group + 696: 0000000000081e6c 104 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_create + 697: 0000000000084c4c 164 FUNC GLOBAL DEFAULT 11 cairo_append_path + 698: 0000000000083ad8 72 FUNC GLOBAL DEFAULT 11 cairo_reset_clip + 699: 00000000000706a4 60 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_add_glyphs_callback + 700: 00000000000839c0 136 FUNC GLOBAL DEFAULT 11 cairo_fill_extents + 701: 00000000000cd14c 36 FUNC GLOBAL DEFAULT 11 cairo_ps_get_levels + 702: 00000000000a3270 44 FUNC GLOBAL DEFAULT 11 cairo_xcb_device_debug_set_precision + 703: 000000000002f948 8 FUNC GLOBAL DEFAULT 11 cairo_font_options_get_variations + 704: 000000000005ecfc 24 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_set_snapshot + 705: 00000000000747fc 36 FUNC GLOBAL DEFAULT 11 cairo_surface_get_reference_count + 706: 00000000000663b0 100 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_reference + 707: 00000000000df6ec 112 FUNC GLOBAL DEFAULT 11 cairo_svg_surface_get_document_unit + 708: 00000000000bcdd0 560 FUNC GLOBAL DEFAULT 11 cairo_egl_device_create + 709: 0000000000057044 100 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_linear_points + 710: 0000000000082f8c 36 FUNC GLOBAL DEFAULT 11 cairo_user_to_device + 711: 0000000000082e24 72 FUNC GLOBAL DEFAULT 11 cairo_scale + 712: 0000000000082768 28 FUNC GLOBAL DEFAULT 11 cairo_set_user_data + 713: 0000000000042ca4 4 FUNC GLOBAL DEFAULT 11 cairo_text_cluster_free + 714: 000000000008493c 48 FUNC GLOBAL DEFAULT 11 cairo_get_target + 715: 0000000000074a5c 332 FUNC GLOBAL DEFAULT 11 cairo_surface_set_mime_data + 716: 00000000000704c0 244 FUNC GLOBAL DEFAULT 11 cairo_surface_create_observer + 717: 0000000000083e4c 72 FUNC GLOBAL DEFAULT 11 cairo_set_font_size + 718: 0000000000053cdc 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_add_color_stop_rgb + 719: 000000000006494c 68 FUNC GLOBAL DEFAULT 11 cairo_region_equal + 720: 000000000002f1e4 32 FUNC GLOBAL DEFAULT 11 cairo_font_face_set_user_data + 721: 0000000000084450 44 FUNC GLOBAL DEFAULT 11 cairo_get_antialias + 722: 00000000000641a4 24 FUNC GLOBAL DEFAULT 11 cairo_region_num_rectangles + 723: 00000000000c71d4 220 FUNC GLOBAL DEFAULT 11 cairo_ft_scaled_font_lock_face + 724: 00000000000bd100 60 FUNC GLOBAL DEFAULT 11 cairo_egl_device_get_context + 725: 000000000003fd50 32 FUNC GLOBAL DEFAULT 11 cairo_matrix_init_scale + 726: 000000000009f768 368 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_create + 727: 00000000000c70c0 168 FUNC GLOBAL DEFAULT 11 cairo_ft_font_face_create_for_ft_face + 728: 00000000000844a8 172 FUNC GLOBAL DEFAULT 11 cairo_get_current_point + 729: 000000000008496c 592 FUNC GLOBAL DEFAULT 11 cairo_show_text + 730: 0000000000082018 108 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_set_unicode_to_glyph_func + 731: 00000000000641bc 140 FUNC GLOBAL DEFAULT 11 cairo_region_get_rectangle + 732: 0000000000070938 80 FUNC GLOBAL DEFAULT 11 cairo_device_observer_paint_elapsed + 733: 0000000000083184 188 FUNC GLOBAL DEFAULT 11 cairo_arc + 734: 0000000000083248 188 FUNC GLOBAL DEFAULT 11 cairo_arc_negative + 735: 0000000000075314 420 FUNC GLOBAL DEFAULT 11 cairo_surface_mark_dirty_rectangle + 736: 0000000000083f0c 120 FUNC GLOBAL DEFAULT 11 cairo_set_font_options + 737: 000000000002f7b4 28 FUNC GLOBAL DEFAULT 11 cairo_font_options_set_subpixel_order + 738: 0000000000056e24 212 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_rgba + 739: 00000000000cd038 80 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_create + 740: 0000000000082884 92 FUNC GLOBAL DEFAULT 11 cairo_pop_group + 741: 0000000000053dfc 104 FUNC GLOBAL DEFAULT 11 cairo_pattern_set_filter + 742: 000000000009f984 224 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_create_with_xrender_format + 743: 00000000000bd288 692 FUNC GLOBAL DEFAULT 11 cairo_glx_device_create + 744: 0000000000141898 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 745: 0000000000066e44 32 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_set_user_data + 746: 00000000000d7c30 80 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_create + 747: 0000000000082ff8 36 FUNC GLOBAL DEFAULT 11 cairo_device_to_user_distance + 748: 00000000000cd088 88 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_create_for_stream + 749: 000000000003fcd4 28 FUNC GLOBAL DEFAULT 11 cairo_matrix_init + 750: 000000000009618c 72 FUNC GLOBAL DEFAULT 11 cairo_xlib_device_debug_get_precision + 751: 0000000000082af0 72 FUNC GLOBAL DEFAULT 11 cairo_set_tolerance + 752: 00000000000a31c8 168 FUNC GLOBAL DEFAULT 11 cairo_xcb_device_debug_cap_xrender_version + 753: 0000000000066414 556 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_destroy + 754: 00000000000c2a2c 56 FUNC GLOBAL DEFAULT 11 cairo_script_create + 755: 00000000000648f0 92 FUNC GLOBAL DEFAULT 11 cairo_region_contains_point + 756: 00000000000c2a64 64 FUNC GLOBAL DEFAULT 11 cairo_script_create_for_stream + 757: 0000000000082a18 116 FUNC GLOBAL DEFAULT 11 cairo_set_source + 758: 00000000000b0190 224 FUNC GLOBAL DEFAULT 11 cairo_surface_write_to_png + 759: 0000000000083c4c 72 FUNC GLOBAL DEFAULT 11 cairo_tag_begin + 760: 000000000006484c 164 FUNC GLOBAL DEFAULT 11 cairo_region_contains_rectangle + 761: 0000000000067ba0 1352 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_text_to_glyphs + 762: 0000000000075844 28 FUNC GLOBAL DEFAULT 11 cairo_surface_get_fallback_resolution + 763: 0000000000081ed4 108 FUNC GLOBAL DEFAULT 11 cairo_user_font_face_set_init_func + 764: 0000000000053e64 8 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_filter + 765: 00000000000c7168 36 FUNC GLOBAL DEFAULT 11 cairo_ft_font_face_set_synthesize + 766: 0000000000074560 8 FUNC GLOBAL DEFAULT 11 cairo_surface_status + 767: 000000000003ff10 96 FUNC GLOBAL DEFAULT 11 cairo_matrix_rotate + 768: 000000000005ed48 28 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_get_copy + 769: 0000000000083e1c 48 FUNC GLOBAL DEFAULT 11 cairo_get_font_face + 770: 0000000000076d3c 364 FUNC GLOBAL DEFAULT 11 cairo_surface_map_to_image + 771: 000000000002f070 284 FUNC GLOBAL DEFAULT 11 cairo_font_face_destroy + 772: 000000000005ed30 24 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_set_copy + 773: 00000000000cd438 116 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_dsc_begin_setup + 774: 00000000000c2b1c 8 FUNC GLOBAL DEFAULT 11 cairo_script_get_mode + 775: 000000000005ed64 24 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_set_finish + 776: 000000000005745c 276 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_get_control_point + 777: 00000000000c2b14 8 FUNC GLOBAL DEFAULT 11 cairo_script_set_mode + 778: 000000000002befc 52 FUNC GLOBAL DEFAULT 11 cairo_debug_reset_static_data + 779: 0000000000064570 176 FUNC GLOBAL DEFAULT 11 cairo_region_union_rectangle + 780: 00000000000b0270 136 FUNC GLOBAL DEFAULT 11 cairo_surface_write_to_png_stream + 781: 00000000000df520 88 FUNC GLOBAL DEFAULT 11 cairo_svg_surface_create_for_stream + 782: 0000000000070758 116 FUNC GLOBAL DEFAULT 11 cairo_surface_observer_print + 783: 00000000000843ec 44 FUNC GLOBAL DEFAULT 11 cairo_get_operator + 784: 0000000000084bbc 48 FUNC GLOBAL DEFAULT 11 cairo_get_group_target + 785: 00000000000dff74 124 FUNC GLOBAL DEFAULT 11 cairo_tee_surface_create + 786: 00000000000529c8 228 FUNC GLOBAL DEFAULT 11 cairo_pattern_create_rgba + 787: 000000000002f890 36 FUNC GLOBAL DEFAULT 11 cairo_font_options_get_hint_style + 788: 000000000009fa64 60 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_xrender_format + 789: 00000000000a6878 700 FUNC GLOBAL DEFAULT 11 cairo_xcb_surface_create + 790: 00000000000642c0 112 FUNC GLOBAL DEFAULT 11 cairo_region_subtract + 791: 00000000000830ac 72 FUNC GLOBAL DEFAULT 11 cairo_move_to + 792: 00000000000df680 108 FUNC GLOBAL DEFAULT 11 cairo_svg_surface_set_document_unit + 793: 00000000000848e0 44 FUNC GLOBAL DEFAULT 11 cairo_get_miter_limit + 794: 0000000000083c1c 48 FUNC GLOBAL DEFAULT 11 cairo_copy_clip_rectangle_list + 795: 000000000008408c 148 FUNC GLOBAL DEFAULT 11 cairo_glyph_extents + 796: 000000000008447c 44 FUNC GLOBAL DEFAULT 11 cairo_has_current_point + 797: 000000000007b4c0 88 FUNC GLOBAL DEFAULT 11 cairo_toy_font_face_get_slant + 798: 000000000005ed7c 28 FUNC GLOBAL DEFAULT 11 cairo_raster_source_pattern_get_finish + 799: 00000000000a6da8 184 FUNC GLOBAL DEFAULT 11 cairo_xcb_surface_set_size + 800: 0000000000064104 160 FUNC GLOBAL DEFAULT 11 cairo_region_copy + 801: 0000000000064450 176 FUNC GLOBAL DEFAULT 11 cairo_region_intersect_rectangle + 802: 0000000000076b64 472 FUNC GLOBAL DEFAULT 11 cairo_surface_create_similar + 803: 000000000009fb74 408 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_set_drawable + 804: 000000000002da40 20 FUNC GLOBAL DEFAULT 11 cairo_device_status + 805: 0000000000064330 176 FUNC GLOBAL DEFAULT 11 cairo_region_subtract_rectangle + 806: 0000000000042a20 560 FUNC GLOBAL DEFAULT 11 cairo_status_to_string + 807: 0000000000083fdc 128 FUNC GLOBAL DEFAULT 11 cairo_set_scaled_font + 808: 0000000000083d74 96 FUNC GLOBAL DEFAULT 11 cairo_font_extents + 809: 00000000000df638 36 FUNC GLOBAL DEFAULT 11 cairo_svg_get_versions + 810: 0000000000053ce4 252 FUNC GLOBAL DEFAULT 11 cairo_pattern_set_matrix + 811: 000000000002da78 120 FUNC GLOBAL DEFAULT 11 cairo_device_release + 812: 0000000000082bc8 92 FUNC GLOBAL DEFAULT 11 cairo_set_line_width + 813: 0000000000061c6c 308 FUNC GLOBAL DEFAULT 11 cairo_recording_surface_ink_extents + 814: 00000000000821ec 12 FUNC GLOBAL DEFAULT 11 cairo_version_string + 815: 0000000000084bec 48 FUNC GLOBAL DEFAULT 11 cairo_copy_path + 816: 00000000000baf78 40 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_get_height + 817: 000000000008419c 472 FUNC GLOBAL DEFAULT 11 cairo_show_text_glyphs + 818: 00000000000d7e8c 140 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_set_metadata + 819: 00000000000d7d20 36 FUNC GLOBAL DEFAULT 11 cairo_pdf_version_to_string + 820: 0000000000064010 108 FUNC GLOBAL DEFAULT 11 cairo_region_reference + 821: 00000000000827ec 72 FUNC GLOBAL DEFAULT 11 cairo_restore + 822: 000000000003c72c 240 FUNC GLOBAL DEFAULT 11 cairo_image_surface_create_for_data + 823: 0000000000082f44 72 FUNC GLOBAL DEFAULT 11 cairo_identity_matrix + 824: 000000000009fe7c 60 FUNC GLOBAL DEFAULT 11 cairo_xlib_surface_get_height + 825: 00000000000a3168 32 FUNC GLOBAL DEFAULT 11 cairo_xcb_device_get_connection + 826: 000000000002f790 36 FUNC GLOBAL DEFAULT 11 cairo_font_options_get_antialias + 827: 0000000000082ac0 48 FUNC GLOBAL DEFAULT 11 cairo_get_source + 828: 0000000000053de0 28 FUNC GLOBAL DEFAULT 11 cairo_pattern_get_matrix + 829: 0000000000075254 116 FUNC GLOBAL DEFAULT 11 cairo_surface_finish + 830: 00000000000836d0 72 FUNC GLOBAL DEFAULT 11 cairo_stroke_preserve + 831: 00000000000d7bd8 88 FUNC GLOBAL DEFAULT 11 cairo_pdf_surface_create_for_stream + 832: 0000000000074558 8 FUNC GLOBAL DEFAULT 11 cairo_surface_get_content + 833: 0000000000142fa8 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 834: 0000000000074550 8 FUNC GLOBAL DEFAULT 11 cairo_surface_get_type + 835: 0000000000083478 100 FUNC GLOBAL DEFAULT 11 cairo_path_extents + 836: 0000000000064620 240 FUNC GLOBAL DEFAULT 11 cairo_region_xor + 837: 0000000000083718 72 FUNC GLOBAL DEFAULT 11 cairo_fill + 838: 0000000000064838 20 FUNC GLOBAL DEFAULT 11 cairo_region_translate + 839: 00000000000833e8 72 FUNC GLOBAL DEFAULT 11 cairo_rectangle + 840: 0000000000082fb0 36 FUNC GLOBAL DEFAULT 11 cairo_user_to_device_distance + 841: 00000000000cd194 96 FUNC GLOBAL DEFAULT 11 cairo_ps_surface_set_eps + 842: 000000000007b438 136 FUNC GLOBAL DEFAULT 11 cairo_toy_font_face_get_family + 843: 0000000000084120 124 FUNC GLOBAL DEFAULT 11 cairo_show_glyphs + 844: 0000000000068920 44 FUNC GLOBAL DEFAULT 11 cairo_scaled_font_get_font_face + 845: 000000000003fcb0 36 FUNC GLOBAL DEFAULT 11 cairo_matrix_init_identity + 846: 0000000000083430 72 FUNC GLOBAL DEFAULT 11 cairo_close_path + 847: 00000000000571a8 376 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_get_path + 848: 00000000000a329c 72 FUNC GLOBAL DEFAULT 11 cairo_xcb_device_debug_get_precision + 849: 00000000000537e0 136 FUNC GLOBAL DEFAULT 11 cairo_mesh_pattern_set_control_point + 850: 000000000003feac 100 FUNC GLOBAL DEFAULT 11 cairo_matrix_scale + 851: 0000000000082760 8 FUNC GLOBAL DEFAULT 11 cairo_get_user_data + 852: 0000000000064710 248 FUNC GLOBAL DEFAULT 11 cairo_region_xor_rectangle + 853: 0000000000083c94 72 FUNC GLOBAL DEFAULT 11 cairo_tag_end + 854: 00000000000c6fc4 60 FUNC GLOBAL DEFAULT 11 cairo_ft_font_options_substitute + 855: 00000000000a6b34 212 FUNC GLOBAL DEFAULT 11 cairo_xcb_surface_create_for_bitmap + 856: 0000000000074d94 172 FUNC GLOBAL DEFAULT 11 cairo_surface_get_font_options + 857: 000000000007487c 32 FUNC GLOBAL DEFAULT 11 cairo_surface_get_user_data + 858: 00000000000baeb8 152 FUNC GLOBAL DEFAULT 11 cairo_gl_surface_set_size diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libcups.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libcups.so.2.txt new file mode 100644 index 000000000000..46484ccecd2b --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libcups.so.2.txt @@ -0,0 +1,688 @@ +Library: /lib64/libcups.so.2 +Package: cups-libs-1.6.3-52.el7_9.aarch64 + + +Symbol table '.dynsym' contains 682 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000011ab0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000007c100 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_close@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND srandom@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ERR_error_string@libcrypto.so.10 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.17 (4) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit2_ + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_resolver_free + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_client_new + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchmod@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BIO_ctrl@libcrypto.so.10 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_set_cipher_list@libssl.so.10 (5) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_free@libssl.so.10 (5) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.17 (2) + 26: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND GSS_C_NT_HOSTBASED_SERVICE@gssapi_krb5_2_MIT (6) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_name_join + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execlp@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.17 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_load_error_strings@libssl.so.10 (5) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (4) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime@GLIBC_2.17 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.17 (4) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_record_browser_new + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_client_free + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND umask@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (4) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND RAND_seed@libcrypto.so.10 (3) + 45: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (7) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflate + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_address_snprint + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lockf@GLIBC_2.17 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sleep@GLIBC_2.17 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_write@libssl.so.10 (5) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_free@libssl.so.10 (5) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_release_buffer@gssapi_krb5_2_MIT (6) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_new@libssl.so.10 (5) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyname@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_open@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strdup@GLIBC_2.17 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (4) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fmod@GLIBC_2.17 (8) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_new@libssl.so.10 (5) + 68: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateEnd + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_set_bio@libssl.so.10 (5) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_init_sec_context@gssapi_krb5_2_MIT (6) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (2) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.17 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wait@GLIBC_2.17 (4) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.17 (2) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvfrom@GLIBC_2.17 (4) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (4) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (4) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.17 (4) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_ctrl@libssl.so.10 (5) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (2) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND crc32 + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_quit + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (2) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (2) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.17 (2) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflate + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (2) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.17 (2) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_browser_new + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit2_ + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.17 (2) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.17 (2) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_unlock@GLIBC_2.17 (4) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkstemp@GLIBC_2.17 (2) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (2) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_set_func + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.17 (4) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.17 (2) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_string_list_get_pair + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_shutdown@libssl.so.10 (5) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.17 (4) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.17 (2) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.17 (2) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateEnd + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BIO_new@libcrypto.so.10 (3) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv@GLIBC_2.17 (2) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_read@libssl.so.10 (5) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (2) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_import_name@gssapi_krb5_2_MIT (6) + 115: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.17 (2) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir_r@GLIBC_2.17 (2) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_library_init@libssl.so.10 (5) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.17 (2) + 120: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (2) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid@GLIBC_2.17 (2) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.17 (4) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_pending@libssl.so.10 (5) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.17 (2) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ERR_get_error@libcrypto.so.10 (3) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.17 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (4) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.17 (2) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.17 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_string_list_find + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_record_browser_free + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoll@GLIBC_2.17 (2) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (2) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND symlink@GLIBC_2.17 (2) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.17 (4) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_get + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_connect@libssl.so.10 (5) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.17 (2) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_delete_sec_context@gssapi_krb5_2_MIT (6) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.17 (2) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (4) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSLv23_client_method@libssl.so.10 (5) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getservbyname@GLIBC_2.17 (2) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (2) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.17 (4) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_init@GLIBC_2.17 (2) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (4) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_rdlock@GLIBC_2.17 (4) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tcgetattr@GLIBC_2.17 (2) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.17 (2) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_get_SSL_CTX@libssl.so.10 (5) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.17 (2) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (4) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewinddir@GLIBC_2.17 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_iterate + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tcsetattr@GLIBC_2.17 (2) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_resolver_new + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_wrlock@GLIBC_2.17 (4) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (2) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.17 (2) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_new + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_free + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.17 (2) + 173: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_release_name@gssapi_krb5_2_MIT (6) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (2) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendto@GLIBC_2.17 (4) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_browser_free + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.17 (2) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.17 (2) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND random@GLIBC_2.17 (2) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.17 (4) + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (4) + 185: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.17 (4) + 187: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 188: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_init@GLIBC_2.17 (4) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 191: 000000000004b914 140 FUNC GLOBAL DEFAULT 11 cupsCancelJob2 + 192: 0000000000026770 136 FUNC GLOBAL DEFAULT 11 cupsFileStdout + 193: 0000000000017cac 64 FUNC GLOBAL DEFAULT 11 cupsArrayCount + 194: 000000000003f738 56 FUNC GLOBAL DEFAULT 11 ppdOpen2 + 195: 0000000000027534 196 FUNC GLOBAL DEFAULT 11 cupsPutFile + 196: 0000000000044230 468 FUNC GLOBAL DEFAULT 11 _pwgMediaForPWG + 197: 0000000000048478 380 FUNC GLOBAL DEFAULT 11 _cupsSNMPWalk + 198: 00000000000186c4 108 FUNC GLOBAL DEFAULT 11 cupsArrayPrev + 199: 000000000002bb9c 416 FUNC GLOBAL DEFAULT 11 httpAddrLookup + 200: 000000000003630c 84 FUNC GLOBAL DEFAULT 11 _cupsMessageNew + 201: 0000000000031864 92 FUNC GLOBAL DEFAULT 11 ippGetVersion + 202: 000000000003cf1c 10144 FUNC GLOBAL DEFAULT 11 _ppdOpen + 203: 00000000000285e8 64 FUNC GLOBAL DEFAULT 11 httpGetBlocking + 204: 0000000000028cc4 252 FUNC GLOBAL DEFAULT 11 httpInitialize + 205: 000000000002ddc8 440 FUNC GLOBAL DEFAULT 11 httpGetDateTime + 206: 000000000002b2ec 180 FUNC GLOBAL DEFAULT 11 httpEncryption + 207: 0000000000027700 60 FUNC GLOBAL DEFAULT 11 _cupsGlobalLock + 208: 000000000002f8cc 184 FUNC GLOBAL DEFAULT 11 ippAddBooleans + 209: 000000000001f0a0 56 FUNC GLOBAL DEFAULT 11 cupsCancelDestJob + 210: 0000000000023580 60 FUNC GLOBAL DEFAULT 11 ppdEmit + 211: 0000000000038c10 2124 FUNC GLOBAL DEFAULT 11 cupsMarkOptions + 212: 0000000000025878 120 FUNC GLOBAL DEFAULT 11 cupsFileLock + 213: 0000000000049400 52 FUNC GLOBAL DEFAULT 11 _cupsRWLockWrite + 214: 000000000002fe00 220 FUNC GLOBAL DEFAULT 11 ippAddRanges + 215: 0000000000031d20 108 FUNC GLOBAL DEFAULT 11 ippSetGroupTag + 216: 0000000000044e28 548 FUNC GLOBAL DEFAULT 11 _cupsSetHTTPError + 217: 00000000000324cc 2340 FUNC GLOBAL DEFAULT 11 ippReadIO + 218: 0000000000048b08 196 FUNC GLOBAL DEFAULT 11 _cups_strncasecmp + 219: 0000000000034744 88 FUNC GLOBAL DEFAULT 11 ippPort + 220: 00000000000491ec 124 FUNC GLOBAL DEFAULT 11 cupsTempFile + 221: 0000000000043228 688 FUNC GLOBAL DEFAULT 11 _pwgInputSlotForSource + 222: 0000000000029d44 156 FUNC GLOBAL DEFAULT 11 httpWait + 223: 0000000000021bd8 580 FUNC GLOBAL DEFAULT 11 cupsCopyDestInfo + 224: 000000000003864c 120 FUNC GLOBAL DEFAULT 11 ppdMarkOption + 225: 000000000003b348 720 FUNC GLOBAL DEFAULT 11 ppdPageSize + 226: 00000000000475a4 212 FUNC GLOBAL DEFAULT 11 _cupsSNMPOIDToString + 227: 000000000001566c 2588 FUNC GLOBAL DEFAULT 11 cupsAdminGetServerSettings + 228: 0000000000018334 84 FUNC GLOBAL DEFAULT 11 cupsArrayIndex + 229: 0000000000031154 252 FUNC GLOBAL DEFAULT 11 ippFindNextAttribute + 230: 000000000002ff90 240 FUNC GLOBAL DEFAULT 11 ippAddResolutions + 231: 0000000000043bfc 372 FUNC GLOBAL DEFAULT 11 _pwgGenerateSize + 232: 0000000000045f70 548 FUNC GLOBAL DEFAULT 11 cupsSideChannelSNMPWalk + 233: 000000000002e658 132 FUNC GLOBAL DEFAULT 11 httpSeparate + 234: 0000000000049468 88 FUNC GLOBAL DEFAULT 11 _cupsThreadCreate + 235: 0000000000047678 140 FUNC GLOBAL DEFAULT 11 _cupsSNMPOpen + 236: 000000000002c2f0 60 FUNC GLOBAL DEFAULT 11 httpAddrConnect + 237: 000000000002b1fc 60 FUNC GLOBAL DEFAULT 11 httpReconnect + 238: 0000000000043e3c 964 FUNC GLOBAL DEFAULT 11 _pwgMediaForPPD + 239: 0000000000048c68 120 FUNC GLOBAL DEFAULT 11 _cups_strlcpy + 240: 000000000003892c 564 FUNC GLOBAL DEFAULT 11 _ppdParseOptions + 241: 0000000000035050 404 FUNC GLOBAL DEFAULT 11 ippTagValue + 242: 0000000000028334 68 FUNC GLOBAL DEFAULT 11 httpCopyCredentials + 243: 0000000000028728 224 FUNC GLOBAL DEFAULT 11 httpGetLength2 + 244: 000000000003fd08 3020 FUNC GLOBAL DEFAULT 11 _ppdCacheCreateWithFile + 245: 0000000000031ae0 172 FUNC GLOBAL DEFAULT 11 ippSetBoolean + 246: 0000000000030080 84 FUNC GLOBAL DEFAULT 11 ippAddSeparator + 247: 000000000002fa18 184 FUNC GLOBAL DEFAULT 11 ippAddCollections + 248: 000000000004bf1c 244 FUNC GLOBAL DEFAULT 11 cupsGetDefault2 + 249: 000000000004cf70 312 FUNC GLOBAL DEFAULT 11 cupsGetServerPPD + 250: 000000000001cf44 1172 FUNC GLOBAL DEFAULT 11 cupsConnectDest + 251: 000000000002df80 1752 FUNC GLOBAL DEFAULT 11 httpSeparateURI + 252: 00000000000288f0 852 FUNC GLOBAL DEFAULT 11 httpGetSubField2 + 253: 0000000000028040 60 FUNC GLOBAL DEFAULT 11 _httpBIOMethods + 254: 0000000000048630 280 FUNC GLOBAL DEFAULT 11 _cupsStrAlloc + 255: 0000000000080f90 0 NOTYPE GLOBAL DEFAULT 24 _end + 256: 000000000003a244 180 FUNC GLOBAL DEFAULT 11 httpMD5 + 257: 0000000000025dec 696 FUNC GLOBAL DEFAULT 11 cupsFilePrintf + 258: 0000000000019e00 260 FUNC GLOBAL DEFAULT 11 cupsBackendReport + 259: 0000000000021fdc 280 FUNC GLOBAL DEFAULT 11 cupsGetDestMediaBySize + 260: 000000000003f8d0 56 FUNC GLOBAL DEFAULT 11 ppdOpenFile + 261: 00000000000227b8 220 FUNC GLOBAL DEFAULT 11 ppdEmitJCLEnd + 262: 00000000000408d4 5280 FUNC GLOBAL DEFAULT 11 _ppdCacheCreateWithPPD + 263: 0000000000026838 112 FUNC GLOBAL DEFAULT 11 cupsFileUnlock + 264: 000000000003cd64 128 FUNC GLOBAL DEFAULT 11 ppdErrorString + 265: 0000000000031ed0 68 FUNC GLOBAL DEFAULT 11 ippSetOperation + 266: 000000000001daac 1380 FUNC GLOBAL DEFAULT 11 _cupsGetDests + 267: 000000000003626c 56 FUNC GLOBAL DEFAULT 11 cupsLangDefault + 268: 000000000001d3d8 180 FUNC GLOBAL DEFAULT 11 cupsFreeDests + 269: 000000000003cde4 224 FUNC GLOBAL DEFAULT 11 _ppdGetEncoding + 270: 000000000002b6dc 216 FUNC GLOBAL DEFAULT 11 httpAddrEqual + 271: 0000000000031300 104 FUNC GLOBAL DEFAULT 11 ippGetBoolean + 272: 0000000000036a60 96 FUNC GLOBAL DEFAULT 11 _ppdFreeLanguages + 273: 0000000000080df4 4 OBJECT GLOBAL DEFAULT 23 _cups_debug_fd + 274: 0000000000017cec 96 FUNC GLOBAL DEFAULT 11 cupsArrayCurrent + 275: 0000000000031684 140 FUNC GLOBAL DEFAULT 11 ippGetResolution + 276: 0000000000031750 72 FUNC GLOBAL DEFAULT 11 ippGetStatusCode + 277: 0000000000037250 176 FUNC GLOBAL DEFAULT 11 ppdLocalizeAttr + 278: 0000000000017c0c 160 FUNC GLOBAL DEFAULT 11 cupsArrayClear + 279: 0000000000023abc 96 FUNC GLOBAL DEFAULT 11 _ippFindOption + 280: 0000000000029198 64 FUNC GLOBAL DEFAULT 11 httpSetExpect + 281: 0000000000028378 56 FUNC GLOBAL DEFAULT 11 _httpCreateCredentials + 282: 0000000000021eb0 300 FUNC GLOBAL DEFAULT 11 cupsGetDestMediaByName + 283: 000000000004b9a0 92 FUNC GLOBAL DEFAULT 11 cupsCancelJob + 284: 000000000003cadc 648 FUNC GLOBAL DEFAULT 11 ppdClose + 285: 000000000003f770 168 FUNC GLOBAL DEFAULT 11 ppdOpenFd + 286: 000000000002fb74 168 FUNC GLOBAL DEFAULT 11 ippAddIntegers + 287: 0000000000045524 800 FUNC GLOBAL DEFAULT 11 cupsDoIORequest + 288: 000000000003585c 404 FUNC GLOBAL DEFAULT 11 _cupsSetLocale + 289: 000000000002b9d4 456 FUNC GLOBAL DEFAULT 11 httpAddrString + 290: 000000000002b498 64 FUNC GLOBAL DEFAULT 11 _httpTLSSetOptions + 291: 000000000001e558 200 FUNC GLOBAL DEFAULT 11 cupsSetDefaultDest + 292: 0000000000026674 136 FUNC GLOBAL DEFAULT 11 cupsFileStderr + 293: 0000000000042bd8 144 FUNC GLOBAL DEFAULT 11 _ppdCacheGetType + 294: 0000000000029c90 180 FUNC GLOBAL DEFAULT 11 httpUpdate + 295: 0000000000044418 824 FUNC GLOBAL DEFAULT 11 _pwgInitSize + 296: 0000000000014d14 2392 FUNC GLOBAL DEFAULT 11 cupsAdminExportSamba + 297: 0000000000048bcc 156 FUNC GLOBAL DEFAULT 11 _cups_strlcat + 298: 00000000000362a4 104 FUNC GLOBAL DEFAULT 11 _cupsMessageLookup + 299: 00000000000262bc 260 FUNC GLOBAL DEFAULT 11 cupsFileRead + 300: 000000000004bc8c 192 FUNC GLOBAL DEFAULT 11 cupsFreeJobs + 301: 00000000000268a8 356 FUNC GLOBAL DEFAULT 11 cupsFileWrite + 302: 000000000002ea48 92 FUNC GLOBAL DEFAULT 11 _httpEncodeURI + 303: 000000000002b238 124 FUNC GLOBAL DEFAULT 11 httpConnectEncrypt + 304: 0000000000031418 108 FUNC GLOBAL DEFAULT 11 ippGetDate + 305: 000000000002b638 164 FUNC GLOBAL DEFAULT 11 httpAddrAny + 306: 00000000000295bc 212 FUNC GLOBAL DEFAULT 11 _httpWait + 307: 00000000000351e4 404 FUNC GLOBAL DEFAULT 11 _cupsLangPrintError + 308: 000000000002cd48 948 FUNC GLOBAL DEFAULT 11 httpAssembleURI + 309: 0000000000044924 116 FUNC GLOBAL DEFAULT 11 _cupsNextDelay + 310: 000000000002f848 132 FUNC GLOBAL DEFAULT 11 ippAddBoolean + 311: 0000000000029520 156 FUNC GLOBAL DEFAULT 11 httpSetTimeout + 312: 0000000000049d74 812 FUNC GLOBAL DEFAULT 11 _cupsGetPassword + 313: 000000000001b97c 88 FUNC GLOBAL DEFAULT 11 ppdNextCustomParam + 314: 0000000000037cf0 260 FUNC GLOBAL DEFAULT 11 ppdFindOption + 315: 0000000000030ed4 224 FUNC GLOBAL DEFAULT 11 ippDeleteAttribute + 316: 0000000000035578 476 FUNC GLOBAL DEFAULT 11 _cupsLangPrintf + 317: 00000000000492f4 56 FUNC GLOBAL DEFAULT 11 _cupsMutexInit + 318: 0000000000035754 264 FUNC GLOBAL DEFAULT 11 _cupsLangPuts + 319: 00000000000258f0 72 FUNC GLOBAL DEFAULT 11 cupsFileNumber + 320: 000000000002da04 84 FUNC GLOBAL DEFAULT 11 httpDecode64 + 321: 000000000004b02c 152 FUNC GLOBAL DEFAULT 11 cupsSetEncryption + 322: 0000000000049bc8 428 FUNC GLOBAL DEFAULT 11 cupsUTF32ToUTF8 + 323: 000000000001864c 120 FUNC GLOBAL DEFAULT 11 cupsArrayNext + 324: 00000000000493cc 52 FUNC GLOBAL DEFAULT 11 _cupsRWLockRead + 325: 0000000000042b48 144 FUNC GLOBAL DEFAULT 11 _ppdCacheGetSource + 326: 000000000003887c 88 FUNC GLOBAL DEFAULT 11 ppdFirstOption + 327: 0000000000049434 52 FUNC GLOBAL DEFAULT 11 _cupsRWUnlock + 328: 000000000004b9fc 520 FUNC GLOBAL DEFAULT 11 cupsCreateJob + 329: 000000000002da58 480 FUNC GLOBAL DEFAULT 11 httpEncode64_2 + 330: 0000000000049268 140 FUNC GLOBAL DEFAULT 11 cupsTempFile2 + 331: 000000000002792c 60 FUNC GLOBAL DEFAULT 11 _cupsGlobalUnlock + 332: 0000000000080f90 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 333: 0000000000017d4c 212 FUNC GLOBAL DEFAULT 11 cupsArrayDelete + 334: 000000000002fd6c 148 FUNC GLOBAL DEFAULT 11 ippAddRange + 335: 000000000004cce8 128 FUNC GLOBAL DEFAULT 11 cupsGetPPD2 + 336: 00000000000260a4 208 FUNC GLOBAL DEFAULT 11 cupsFilePutChar + 337: 000000000004a708 100 FUNC GLOBAL DEFAULT 11 cupsSetPasswordCB + 338: 0000000000047ce0 72 FUNC GLOBAL DEFAULT 11 _cupsSNMPSetDebug + 339: 0000000000036ac0 416 FUNC GLOBAL DEFAULT 11 _ppdGetLanguages + 340: 000000000004c750 1312 FUNC GLOBAL DEFAULT 11 cupsGetPPD3 + 341: 000000000004c048 1716 FUNC GLOBAL DEFAULT 11 cupsGetJobs2 + 342: 0000000000080e6c 0 NOTYPE GLOBAL DEFAULT 23 _edata + 343: 000000000004a538 96 FUNC GLOBAL DEFAULT 11 cupsGetPassword + 344: 000000000001d52c 352 FUNC GLOBAL DEFAULT 11 cupsAddDest + 345: 0000000000035be4 136 FUNC GLOBAL DEFAULT 11 cupsLangFlush + 346: 00000000000283b0 112 FUNC GLOBAL DEFAULT 11 _httpDisconnect + 347: 0000000000045ba0 372 FUNC GLOBAL DEFAULT 11 cupsSideChannelWrite + 348: 0000000000045940 60 FUNC GLOBAL DEFAULT 11 cupsDoRequest + 349: 000000000003cec4 88 FUNC GLOBAL DEFAULT 11 ppdLastError + 350: 0000000000036c60 120 FUNC GLOBAL DEFAULT 11 _ppdHashName + 351: 0000000000018388 96 FUNC GLOBAL DEFAULT 11 cupsArrayInsert + 352: 000000000004d0a8 508 FUNC GLOBAL DEFAULT 11 cupsStartDocument + 353: 000000000003f908 72 FUNC GLOBAL DEFAULT 11 ppdSetConformance + 354: 000000000003682c 176 FUNC GLOBAL DEFAULT 11 _cupsLangString + 355: 0000000000033ca0 276 FUNC GLOBAL DEFAULT 11 ippErrorString + 356: 0000000000037b78 168 FUNC GLOBAL DEFAULT 11 ppdLocalizeMarkerName + 357: 000000000002ae80 60 FUNC GLOBAL DEFAULT 11 httpOptions + 358: 000000000002a600 68 FUNC GLOBAL DEFAULT 11 httpRead + 359: 0000000000031368 104 FUNC GLOBAL DEFAULT 11 ippGetCollection + 360: 0000000000080df0 4 OBJECT GLOBAL DEFAULT 23 _cups_debug_level + 361: 0000000000036cd8 356 FUNC GLOBAL DEFAULT 11 _ppdLocalizedAttr + 362: 000000000003f6c0 120 FUNC GLOBAL DEFAULT 11 ppdOpen + 363: 0000000000030300 672 FUNC GLOBAL DEFAULT 11 ippAddStrings + 364: 000000000003163c 72 FUNC GLOBAL DEFAULT 11 ippGetRequestId + 365: 000000000002d67c 428 FUNC GLOBAL DEFAULT 11 _httpAssembleUUID + 366: 00000000000239a4 220 FUNC GLOBAL DEFAULT 11 ppdEmitFd + 367: 0000000000080e6c 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 368: 00000000000305a0 1376 FUNC GLOBAL DEFAULT 11 ippCopyAttribute + 369: 0000000000043930 316 FUNC GLOBAL DEFAULT 11 _pwgFormatInches + 370: 0000000000017ba8 100 FUNC GLOBAL DEFAULT 11 cupsArrayAdd + 371: 000000000003479c 72 FUNC GLOBAL DEFAULT 11 ippSetPort + 372: 0000000000017f98 352 FUNC GLOBAL DEFAULT 11 cupsArrayFind + 373: 000000000002b838 184 FUNC GLOBAL DEFAULT 11 httpAddrLocalhost + 374: 0000000000025b5c 520 FUNC GLOBAL DEFAULT 11 cupsFileOpen + 375: 000000000004d588 96 FUNC GLOBAL DEFAULT 11 cupsPrintFile2 + 376: 0000000000039f14 108 FUNC GLOBAL DEFAULT 11 _cupsMD5Init + 377: 000000000002bed0 268 FUNC GLOBAL DEFAULT 11 httpGetHostname + 378: 00000000000293b8 216 FUNC GLOBAL DEFAULT 11 httpClose + 379: 000000000003228c 576 FUNC GLOBAL DEFAULT 11 ippSetValueTag + 380: 0000000000048ea8 588 FUNC GLOBAL DEFAULT 11 _cupsStrScand + 381: 0000000000047494 144 FUNC GLOBAL DEFAULT 11 _cupsSNMPIsOID + 382: 000000000002648c 488 FUNC GLOBAL DEFAULT 11 cupsFileSeek + 383: 00000000000347e4 96 FUNC GLOBAL DEFAULT 11 ippTagString + 384: 0000000000042398 180 FUNC GLOBAL DEFAULT 11 _ppdCacheGetOutputBin + 385: 0000000000045980 536 FUNC GLOBAL DEFAULT 11 cupsSideChannelRead + 386: 000000000002b050 428 FUNC GLOBAL DEFAULT 11 httpReconnect2 + 387: 00000000000318f8 88 FUNC GLOBAL DEFAULT 11 ippNextAttribute + 388: 000000000001919c 448 FUNC GLOBAL DEFAULT 11 _cupsSetNegotiateAuthString + 389: 0000000000018544 68 FUNC GLOBAL DEFAULT 11 cupsArrayNew + 390: 0000000000022200 300 FUNC GLOBAL DEFAULT 11 cupsDirRead + 391: 000000000002e778 636 FUNC GLOBAL DEFAULT 11 httpStatus + 392: 0000000000016088 5800 FUNC GLOBAL DEFAULT 11 cupsAdminSetServerSettings + 393: 000000000002f810 56 FUNC GLOBAL DEFAULT 11 _cupsBufferRelease + 394: 000000000002d4ec 400 FUNC GLOBAL DEFAULT 11 httpAssembleURIf + 395: 00000000000387c0 188 FUNC GLOBAL DEFAULT 11 ppdMarkDefaults + 396: 0000000000031a10 208 FUNC GLOBAL DEFAULT 11 ippNewRequest + 397: 00000000000487d0 224 FUNC GLOBAL DEFAULT 11 _cupsStrFree + 398: 000000000002528c 424 FUNC GLOBAL DEFAULT 11 cupsFileGetLine + 399: 000000000001ee34 60 FUNC GLOBAL DEFAULT 11 cupsGetDests + 400: 0000000000036360 940 FUNC GLOBAL DEFAULT 11 _cupsMessageLoad + 401: 0000000000029de0 56 FUNC GLOBAL DEFAULT 11 httpCheck + 402: 0000000000028f34 360 FUNC GLOBAL DEFAULT 11 httpSetAuthString + 403: 00000000000180f8 344 FUNC GLOBAL DEFAULT 11 _cupsArrayAddStrings + 404: 00000000000286b0 120 FUNC GLOBAL DEFAULT 11 httpGetField + 405: 0000000000045d20 172 FUNC GLOBAL DEFAULT 11 cupsSideChannelDoRequest + 406: 00000000000488b0 120 FUNC GLOBAL DEFAULT 11 _cupsStrRetain + 407: 0000000000036e3c 1044 FUNC GLOBAL DEFAULT 11 ppdLocalize + 408: 000000000001ea90 68 FUNC GLOBAL DEFAULT 11 cupsSetDests + 409: 0000000000049360 52 FUNC GLOBAL DEFAULT 11 _cupsMutexUnlock + 410: 0000000000043d70 204 FUNC GLOBAL DEFAULT 11 _pwgMediaForLegacy + 411: 000000000001f0d8 488 FUNC GLOBAL DEFAULT 11 cupsCloseDestJob + 412: 0000000000031950 192 FUNC GLOBAL DEFAULT 11 ippNew + 413: 00000000000291d8 328 FUNC GLOBAL DEFAULT 11 httpSetField + 414: 0000000000031e3c 148 FUNC GLOBAL DEFAULT 11 ippSetName + 415: 0000000000048a14 80 FUNC GLOBAL DEFAULT 11 _cups_strcpy + 416: 0000000000034308 348 FUNC GLOBAL DEFAULT 11 ippOpValue + 417: 0000000000024f44 176 FUNC GLOBAL DEFAULT 11 cupsFileFlush + 418: 0000000000018730 348 FUNC GLOBAL DEFAULT 11 cupsArrayRemove + 419: 0000000000080f90 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 420: 00000000000220f4 108 FUNC GLOBAL DEFAULT 11 cupsDirClose + 421: 0000000000031484 64 FUNC GLOBAL DEFAULT 11 ippGetGroupTag + 422: 000000000004a598 148 FUNC GLOBAL DEFAULT 11 cupsGetPassword2 + 423: 000000000004504c 912 FUNC GLOBAL DEFAULT 11 cupsSendRequest + 424: 000000000004a680 136 FUNC GLOBAL DEFAULT 11 cupsSetCredentials + 425: 000000000002adcc 60 FUNC GLOBAL DEFAULT 11 httpDelete + 426: 0000000000034844 1680 FUNC GLOBAL DEFAULT 11 ippAttributeString + 427: 0000000000031250 96 FUNC GLOBAL DEFAULT 11 ippFindAttribute + 428: 0000000000031d8c 176 FUNC GLOBAL DEFAULT 11 ippSetInteger + 429: 000000000004aa94 116 FUNC GLOBAL DEFAULT 11 cupsSetUser + 430: 000000000002773c 496 FUNC GLOBAL DEFAULT 11 _cupsGlobals + 431: 0000000000035ae4 88 FUNC GLOBAL DEFAULT 11 cupsLangEncoding + 432: 000000000002bd3c 404 FUNC GLOBAL DEFAULT 11 httpGetHostByName + 433: 000000000002559c 732 FUNC GLOBAL DEFAULT 11 cupsFileGetConf + 434: 000000000002f764 172 FUNC GLOBAL DEFAULT 11 _cupsBufferGet + 435: 000000000003a424 924 FUNC GLOBAL DEFAULT 11 cupsNotifySubject + 436: 0000000000028468 132 FUNC GLOBAL DEFAULT 11 httpFlushWrite + 437: 0000000000044c64 452 FUNC GLOBAL DEFAULT 11 cupsGetResponse + 438: 0000000000044b00 356 FUNC GLOBAL DEFAULT 11 _cupsConnect + 439: 0000000000018978 64 FUNC GLOBAL DEFAULT 11 cupsArrayUserData + 440: 0000000000035bb0 52 FUNC GLOBAL DEFAULT 11 _cupsMessageFree + 441: 0000000000028274 104 FUNC GLOBAL DEFAULT 11 httpBlocking + 442: 000000000001b698 260 FUNC GLOBAL DEFAULT 11 ppdConflicts + 443: 0000000000044a6c 148 FUNC GLOBAL DEFAULT 11 cupsReadResponseData + 444: 000000000004d520 104 FUNC GLOBAL DEFAULT 11 cupsPrintFile + 445: 0000000000049550 548 FUNC GLOBAL DEFAULT 11 cupsCharsetToUTF8 + 446: 00000000000472dc 144 FUNC GLOBAL DEFAULT 11 _cupsSNMPCopyOID + 447: 00000000000453dc 328 FUNC GLOBAL DEFAULT 11 cupsWriteRequestData + 448: 00000000000241c4 124 FUNC GLOBAL DEFAULT 11 cupsEncodeOptions + 449: 000000000001f2c0 472 FUNC GLOBAL DEFAULT 11 cupsCreateDestJob + 450: 00000000000434d8 740 FUNC GLOBAL DEFAULT 11 _pwgMediaTypeForType + 451: 00000000000388d4 88 FUNC GLOBAL DEFAULT 11 ppdNextOption + 452: 000000000004bc04 136 FUNC GLOBAL DEFAULT 11 cupsFinishDocument + 453: 000000000004d64c 0 FUNC GLOBAL DEFAULT 12 _fini + 454: 0000000000024934 796 FUNC GLOBAL DEFAULT 11 _cupsFileCheck + 455: 000000000004932c 52 FUNC GLOBAL DEFAULT 11 _cupsMutexLock + 456: 000000000004aa40 84 FUNC GLOBAL DEFAULT 11 cupsSetServerCertCB + 457: 000000000001888c 124 FUNC GLOBAL DEFAULT 11 cupsArrayRestore + 458: 000000000004b11c 92 FUNC GLOBAL DEFAULT 11 _cupsGSSServiceName + 459: 000000000001ee70 560 FUNC GLOBAL DEFAULT 11 cupsGetNamedDest + 460: 0000000000026fec 488 FUNC GLOBAL DEFAULT 11 cupsGetFd + 461: 0000000000037c20 208 FUNC GLOBAL DEFAULT 11 ppdFindChoice + 462: 00000000000472a8 52 FUNC GLOBAL DEFAULT 11 _cupsSNMPClose + 463: 0000000000022160 160 FUNC GLOBAL DEFAULT 11 cupsDirOpen + 464: 000000000003ab94 120 FUNC GLOBAL DEFAULT 11 cupsGetOption + 465: 000000000002fedc 180 FUNC GLOBAL DEFAULT 11 ippAddResolution + 466: 000000000003baa4 84 FUNC GLOBAL DEFAULT 11 ppdPageWidth + 467: 000000000002c384 1672 FUNC GLOBAL DEFAULT 11 httpAddrGetList + 468: 0000000000028628 64 FUNC GLOBAL DEFAULT 11 httpGetCookie + 469: 000000000002d828 476 FUNC GLOBAL DEFAULT 11 httpDecode64_2 + 470: 00000000000263c0 204 FUNC GLOBAL DEFAULT 11 cupsFileRewind + 471: 00000000000428d0 584 FUNC GLOBAL DEFAULT 11 _ppdCacheGetSize + 472: 0000000000024d6c 72 FUNC GLOBAL DEFAULT 11 cupsFileEOF + 473: 00000000000494c0 144 FUNC GLOBAL DEFAULT 11 _cupsCharmapFlush + 474: 0000000000048a64 164 FUNC GLOBAL DEFAULT 11 _cups_strcasecmp + 475: 00000000000198d8 300 FUNC GLOBAL DEFAULT 11 cupsBackChannelRead + 476: 00000000000490f4 248 FUNC GLOBAL DEFAULT 11 cupsTempFd + 477: 000000000002b96c 104 FUNC GLOBAL DEFAULT 11 _httpAddrSetPort + 478: 0000000000039f80 364 FUNC GLOBAL DEFAULT 11 _cupsMD5Append + 479: 0000000000032188 260 FUNC GLOBAL DEFAULT 11 ippSetString + 480: 00000000000313d0 72 FUNC GLOBAL DEFAULT 11 ippGetCount + 481: 0000000000014418 2300 FUNC GLOBAL DEFAULT 11 cupsAdminCreateWindowsPPD + 482: 0000000000011ab0 0 FUNC GLOBAL DEFAULT 9 _init + 483: 0000000000030bb0 216 FUNC GLOBAL DEFAULT 11 ippDateToTime + 484: 00000000000223bc 964 FUNC GLOBAL DEFAULT 11 ppdCollect2 + 485: 00000000000437bc 352 FUNC GLOBAL DEFAULT 11 _pwgPageSizeForMedia + 486: 0000000000041d80 180 FUNC GLOBAL DEFAULT 11 _ppdCacheGetBin + 487: 0000000000025434 360 FUNC GLOBAL DEFAULT 11 cupsFileGets + 488: 0000000000031798 140 FUNC GLOBAL DEFAULT 11 ippGetString + 489: 0000000000035c6c 1536 FUNC GLOBAL DEFAULT 11 cupsLangGet + 490: 000000000002b7b4 132 FUNC GLOBAL DEFAULT 11 httpAddrLength + 491: 0000000000035a8c 88 FUNC GLOBAL DEFAULT 11 _cupsEncodingName + 492: 00000000000271d4 224 FUNC GLOBAL DEFAULT 11 cupsGetFile + 493: 0000000000028860 72 FUNC GLOBAL DEFAULT 11 httpGetState + 494: 000000000003b640 1124 FUNC GLOBAL DEFAULT 11 ppdPageSizeLimits + 495: 0000000000018908 112 FUNC GLOBAL DEFAULT 11 cupsArraySave + 496: 000000000003b044 192 FUNC GLOBAL DEFAULT 11 cupsRemoveOption + 497: 0000000000028420 72 FUNC GLOBAL DEFAULT 11 httpError + 498: 0000000000025938 548 FUNC GLOBAL DEFAULT 11 cupsFileOpenFd + 499: 000000000004cc70 120 FUNC GLOBAL DEFAULT 11 cupsGetPPD + 500: 000000000004d5e8 100 FUNC GLOBAL DEFAULT 11 cupsPrintFiles + 501: 000000000002b454 68 FUNC GLOBAL DEFAULT 11 httpWrite + 502: 0000000000026174 328 FUNC GLOBAL DEFAULT 11 cupsFilePuts + 503: 000000000003a978 352 FUNC GLOBAL DEFAULT 11 cupsAddOption + 504: 0000000000049774 648 FUNC GLOBAL DEFAULT 11 cupsUTF8ToCharset + 505: 000000000003a2f8 300 FUNC GLOBAL DEFAULT 11 httpMD5Final + 506: 000000000004c010 56 FUNC GLOBAL DEFAULT 11 cupsGetDefault + 507: 00000000000266fc 116 FUNC GLOBAL DEFAULT 11 cupsFileStdin + 508: 0000000000037300 2168 FUNC GLOBAL DEFAULT 11 ppdLocalizeIPPReason + 509: 00000000000448e0 68 FUNC GLOBAL DEFAULT 11 cupsLastErrorString + 510: 000000000002232c 80 FUNC GLOBAL DEFAULT 11 cupsDirRewind + 511: 0000000000024c50 220 FUNC GLOBAL DEFAULT 11 _cupsFileCheckFilter + 512: 0000000000026b2c 1216 FUNC GLOBAL DEFAULT 11 cupsGetDevices + 513: 00000000000314c4 108 FUNC GLOBAL DEFAULT 11 ippGetInteger + 514: 00000000000282dc 88 FUNC GLOBAL DEFAULT 11 httpClearCookie + 515: 000000000002dc38 100 FUNC GLOBAL DEFAULT 11 httpEncode64 + 516: 00000000000182a4 72 FUNC GLOBAL DEFAULT 11 cupsArrayGetIndex + 517: 00000000000300d4 556 FUNC GLOBAL DEFAULT 11 ippAddString + 518: 000000000003ac0c 1080 FUNC GLOBAL DEFAULT 11 cupsParseOptions + 519: 00000000000318c0 56 FUNC GLOBAL DEFAULT 11 ippLength + 520: 000000000004af74 96 FUNC GLOBAL DEFAULT 11 cupsEncryption + 521: 0000000000022780 56 FUNC GLOBAL DEFAULT 11 ppdCollect + 522: 000000000001935c 1404 FUNC GLOBAL DEFAULT 11 cupsDoAuthentication + 523: 0000000000028808 88 FUNC GLOBAL DEFAULT 11 httpGetLength + 524: 000000000001ad20 2424 FUNC GLOBAL DEFAULT 11 cupsResolveConflicts + 525: 0000000000018b78 1212 FUNC GLOBAL DEFAULT 11 _ppdNormalizeMakeAndModel + 526: 0000000000029124 116 FUNC GLOBAL DEFAULT 11 httpSetCookie + 527: 00000000000272b4 640 FUNC GLOBAL DEFAULT 11 cupsPutFd + 528: 000000000002ae08 60 FUNC GLOBAL DEFAULT 11 httpGet + 529: 0000000000080e6c 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 530: 000000000002dc9c 216 FUNC GLOBAL DEFAULT 11 httpGetDateString2 + 531: 000000000001d48c 160 FUNC GLOBAL DEFAULT 11 cupsGetDest + 532: 0000000000025d64 136 FUNC GLOBAL DEFAULT 11 cupsFilePeekChar + 533: 000000000004a7d8 616 FUNC GLOBAL DEFAULT 11 cupsSetServer + 534: 0000000000022894 3144 FUNC GLOBAL DEFAULT 11 ppdEmitString + 535: 0000000000021e1c 148 FUNC GLOBAL DEFAULT 11 cupsFreeDestInfo + 536: 0000000000048928 236 FUNC GLOBAL DEFAULT 11 _cupsStrStatistics + 537: 0000000000047524 128 FUNC GLOBAL DEFAULT 11 _cupsSNMPIsOIDPrefixed + 538: 0000000000027f8c 180 FUNC GLOBAL DEFAULT 11 httpAddCredential + 539: 0000000000024db4 400 FUNC GLOBAL DEFAULT 11 cupsFileFind + 540: 0000000000032018 228 FUNC GLOBAL DEFAULT 11 ippSetResolution + 541: 000000000001abb8 360 FUNC GLOBAL DEFAULT 11 cupsGetConflicts + 542: 0000000000032144 68 FUNC GLOBAL DEFAULT 11 ippSetStatusCode + 543: 0000000000030fb4 224 FUNC GLOBAL DEFAULT 11 ippAddOctetString + 544: 0000000000042268 304 FUNC GLOBAL DEFAULT 11 _ppdCacheGetMediaType + 545: 0000000000031094 192 FUNC GLOBAL DEFAULT 11 ippDeleteValues + 546: 000000000002973c 636 FUNC GLOBAL DEFAULT 11 httpGets + 547: 000000000002fcbc 176 FUNC GLOBAL DEFAULT 11 ippAddInteger + 548: 000000000002eaa4 1180 FUNC GLOBAL DEFAULT 11 _httpResolveURI + 549: 0000000000045dcc 420 FUNC GLOBAL DEFAULT 11 cupsSideChannelSNMPGet + 550: 000000000002f984 148 FUNC GLOBAL DEFAULT 11 ippAddCollection + 551: 0000000000034464 736 FUNC GLOBAL DEFAULT 11 ippEnumValue + 552: 0000000000032df0 104 FUNC GLOBAL DEFAULT 11 ippRead + 553: 000000000001b890 148 FUNC GLOBAL DEFAULT 11 ppdFindCustomParam + 554: 00000000000284ec 52 FUNC GLOBAL DEFAULT 11 _httpFreeCredentials + 555: 000000000001b924 88 FUNC GLOBAL DEFAULT 11 ppdFirstCustomParam + 556: 000000000004b0c4 88 FUNC GLOBAL DEFAULT 11 cupsUser + 557: 00000000000315b8 132 FUNC GLOBAL DEFAULT 11 ippGetRange + 558: 000000000001d974 312 FUNC GLOBAL DEFAULT 11 _cupsGetDestResource + 559: 000000000002b418 60 FUNC GLOBAL DEFAULT 11 httpTrace + 560: 000000000004cd68 520 FUNC GLOBAL DEFAULT 11 cupsGetPrinters + 561: 00000000000214b8 1824 FUNC GLOBAL DEFAULT 11 cupsCopyDestConflicts + 562: 0000000000024d2c 64 FUNC GLOBAL DEFAULT 11 cupsFileCompression + 563: 000000000002e9f4 84 FUNC GLOBAL DEFAULT 11 _httpDecodeURI + 564: 0000000000031f14 192 FUNC GLOBAL DEFAULT 11 ippSetRange + 565: 0000000000028668 72 FUNC GLOBAL DEFAULT 11 httpGetFd + 566: 0000000000031570 72 FUNC GLOBAL DEFAULT 11 ippGetOperation + 567: 000000000002909c 136 FUNC GLOBAL DEFAULT 11 httpSetCredentials + 568: 000000000003baf8 84 FUNC GLOBAL DEFAULT 11 ppdPageLength + 569: 00000000000312b0 80 FUNC GLOBAL DEFAULT 11 ippFirstAttribute + 570: 0000000000033bd8 104 FUNC GLOBAL DEFAULT 11 ippWrite + 571: 00000000000385c0 140 FUNC GLOBAL DEFAULT 11 ppdIsMarked + 572: 0000000000031fd4 68 FUNC GLOBAL DEFAULT 11 ippSetRequestId + 573: 0000000000041e34 396 FUNC GLOBAL DEFAULT 11 _ppdCacheGetFinishingOptions + 574: 0000000000018ab0 200 FUNC GLOBAL DEFAULT 11 ppdFindNextAttr + 575: 0000000000029e18 628 FUNC GLOBAL DEFAULT 11 _httpPeek + 576: 0000000000049394 56 FUNC GLOBAL DEFAULT 11 _cupsRWInit + 577: 000000000002a800 508 FUNC GLOBAL DEFAULT 11 httpPrintf + 578: 000000000002b3a0 60 FUNC GLOBAL DEFAULT 11 httpPost + 579: 0000000000031530 64 FUNC GLOBAL DEFAULT 11 ippGetName + 580: 000000000001e364 176 FUNC GLOBAL DEFAULT 11 cupsRemoveDest + 581: 0000000000031824 64 FUNC GLOBAL DEFAULT 11 ippGetValueTag + 582: 0000000000028c7c 72 FUNC GLOBAL DEFAULT 11 httpGetVersion + 583: 00000000000183e8 92 FUNC GLOBAL DEFAULT 11 cupsArrayLast + 584: 0000000000029490 144 FUNC GLOBAL DEFAULT 11 httpSetLength + 585: 00000000000299b8 728 FUNC GLOBAL DEFAULT 11 _httpUpdate + 586: 0000000000032f18 180 FUNC GLOBAL DEFAULT 11 ippTimeToDate + 587: 0000000000033f0c 228 FUNC GLOBAL DEFAULT 11 ippOpString + 588: 000000000004afd4 88 FUNC GLOBAL DEFAULT 11 cupsServer + 589: 000000000004244c 1136 FUNC GLOBAL DEFAULT 11 _ppdCacheGetPageSize + 590: 0000000000047e38 1600 FUNC GLOBAL DEFAULT 11 _cupsSNMPWrite + 591: 0000000000041fc0 316 FUNC GLOBAL DEFAULT 11 _ppdCacheGetFinishingValues + 592: 00000000000420fc 364 FUNC GLOBAL DEFAULT 11 _ppdCacheGetInputSlot + 593: 000000000004c6fc 84 FUNC GLOBAL DEFAULT 11 cupsGetJobs + 594: 0000000000035378 512 FUNC GLOBAL DEFAULT 11 _cupsLangPrintFilter + 595: 00000000000185c4 136 FUNC GLOBAL DEFAULT 11 _cupsArrayNewStrings + 596: 00000000000288a8 72 FUNC GLOBAL DEFAULT 11 httpGetStatus + 597: 0000000000019a10 396 FUNC GLOBAL DEFAULT 11 cupsBackChannelWrite + 598: 000000000003f818 184 FUNC GLOBAL DEFAULT 11 _ppdOpenFile + 599: 0000000000042c68 1472 FUNC GLOBAL DEFAULT 11 _ppdCacheWriteFile + 600: 000000000002fc1c 160 FUNC GLOBAL DEFAULT 11 ippAddOutOfBand + 601: 000000000002c32c 88 FUNC GLOBAL DEFAULT 11 httpAddrFreeList + 602: 000000000001e414 324 FUNC GLOBAL DEFAULT 11 cupsCopyDest + 603: 000000000001ead4 180 FUNC GLOBAL DEFAULT 11 _cupsUserDefault + 604: 000000000002a524 220 FUNC GLOBAL DEFAULT 11 httpFlush + 605: 0000000000035b3c 116 FUNC GLOBAL DEFAULT 11 cupsLangFree + 606: 000000000002fad0 164 FUNC GLOBAL DEFAULT 11 ippAddDate + 607: 000000000003b104 580 FUNC GLOBAL DEFAULT 11 _cupsGet1284Values + 608: 0000000000043a6c 220 FUNC GLOBAL DEFAULT 11 _pwgFormatMillimeters + 609: 000000000002dd74 84 FUNC GLOBAL DEFAULT 11 httpGetDateString + 610: 000000000001f498 144 FUNC GLOBAL DEFAULT 11 cupsFinishDestDocument + 611: 000000000004736c 296 FUNC GLOBAL DEFAULT 11 _cupsSNMPDefaultCommunity + 612: 00000000000235bc 1000 FUNC GLOBAL DEFAULT 11 ppdEmitJCL + 613: 000000000003fb4c 444 FUNC GLOBAL DEFAULT 11 _ppdCacheDestroy + 614: 000000000001b79c 128 FUNC GLOBAL DEFAULT 11 ppdInstallableConflict + 615: 0000000000026a0c 288 FUNC GLOBAL DEFAULT 11 cupsFilePutConf + 616: 0000000000031b8c 208 FUNC GLOBAL DEFAULT 11 ippSetCollection + 617: 0000000000030c88 200 FUNC GLOBAL DEFAULT 11 ippDelete + 618: 0000000000038564 92 FUNC GLOBAL DEFAULT 11 ppdFindMarkedChoice + 619: 000000000002bfdc 788 FUNC GLOBAL DEFAULT 11 httpAddrConnect2 + 620: 0000000000033ff0 792 FUNC GLOBAL DEFAULT 11 ippEnumString + 621: 000000000004489c 68 FUNC GLOBAL DEFAULT 11 cupsLastError + 622: 0000000000032e58 92 FUNC GLOBAL DEFAULT 11 ippReadFile + 623: 000000000002e6dc 156 FUNC GLOBAL DEFAULT 11 httpSeparate2 + 624: 0000000000021064 1108 FUNC GLOBAL DEFAULT 11 cupsCheckDestSupported + 625: 000000000003a7c0 132 FUNC GLOBAL DEFAULT 11 cupsNotifyText + 626: 0000000000031c5c 196 FUNC GLOBAL DEFAULT 11 ippSetDate + 627: 0000000000029320 152 FUNC GLOBAL DEFAULT 11 httpClearFields + 628: 0000000000028dc0 372 FUNC GLOBAL DEFAULT 11 _httpCreate + 629: 00000000000499fc 460 FUNC GLOBAL DEFAULT 11 cupsUTF8ToUTF32 + 630: 0000000000047d28 272 FUNC GLOBAL DEFAULT 11 _cupsSNMPStringToOID + 631: 000000000001fbb4 212 FUNC GLOBAL DEFAULT 11 cupsLocalizeDestValue + 632: 000000000004a76c 108 FUNC GLOBAL DEFAULT 11 cupsSetPasswordCB2 + 633: 0000000000018588 60 FUNC GLOBAL DEFAULT 11 cupsArrayNew2 + 634: 00000000000285a8 64 FUNC GLOBAL DEFAULT 11 httpGetAuthString + 635: 00000000000189b8 248 FUNC GLOBAL DEFAULT 11 ppdFindAttr + 636: 0000000000045844 252 FUNC GLOBAL DEFAULT 11 cupsDoFileRequest + 637: 0000000000028c44 56 FUNC GLOBAL DEFAULT 11 httpGetSubField + 638: 0000000000032fcc 3084 FUNC GLOBAL DEFAULT 11 ippWriteIO + 639: 0000000000044750 332 FUNC GLOBAL DEFAULT 11 _pwgMediaForSize + 640: 000000000003aad8 188 FUNC GLOBAL DEFAULT 11 cupsFreeOptions + 641: 0000000000018444 256 FUNC GLOBAL DEFAULT 11 cupsArrayNew3 + 642: 00000000000251f0 156 FUNC GLOBAL DEFAULT 11 cupsFileGetChar + 643: 000000000004d2a4 636 FUNC GLOBAL DEFAULT 11 cupsPrintFiles2 + 644: 00000000000267f8 64 FUNC GLOBAL DEFAULT 11 cupsFileTell + 645: 0000000000080f90 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 646: 000000000002b8f0 124 FUNC GLOBAL DEFAULT 11 _httpAddrPort + 647: 000000000002ae44 60 FUNC GLOBAL DEFAULT 11 httpHead + 648: 000000000004ab08 1132 FUNC GLOBAL DEFAULT 11 _cupsSetDefaults + 649: 000000000002a08c 1176 FUNC GLOBAL DEFAULT 11 httpRead2 + 650: 00000000000182ec 72 FUNC GLOBAL DEFAULT 11 cupsArrayGetInsert + 651: 0000000000033c40 96 FUNC GLOBAL DEFAULT 11 ippWriteFile + 652: 000000000001e620 1136 FUNC GLOBAL DEFAULT 11 cupsSetDests2 + 653: 000000000001b81c 116 FUNC GLOBAL DEFAULT 11 ppdFindCustomOption + 654: 0000000000019cb0 336 FUNC GLOBAL DEFAULT 11 cupsBackendDeviceURI + 655: 000000000003a0ec 220 FUNC GLOBAL DEFAULT 11 _cupsMD5Finish + 656: 000000000003a1c8 124 FUNC GLOBAL DEFAULT 11 httpMD5String + 657: 0000000000048ce0 456 FUNC GLOBAL DEFAULT 11 _cupsStrFormatd + 658: 0000000000047704 1492 FUNC GLOBAL DEFAULT 11 _cupsSNMPRead + 659: 000000000001eb88 684 FUNC GLOBAL DEFAULT 11 cupsGetDests2 + 660: 000000000001fb08 172 FUNC GLOBAL DEFAULT 11 cupsLocalizeDestOption + 661: 0000000000048748 136 FUNC GLOBAL DEFAULT 11 _cupsStrFlush + 662: 000000000002b3dc 60 FUNC GLOBAL DEFAULT 11 httpPut + 663: 0000000000031710 64 FUNC GLOBAL DEFAULT 11 ippGetState + 664: 0000000000044998 212 FUNC GLOBAL DEFAULT 11 _cupsSetError + 665: 0000000000032eb4 100 FUNC GLOBAL DEFAULT 11 ippSetVersion + 666: 0000000000028520 136 FUNC GLOBAL DEFAULT 11 httpFreeCredentials + 667: 0000000000018250 84 FUNC GLOBAL DEFAULT 11 cupsArrayFirst + 668: 000000000001e010 852 FUNC GLOBAL DEFAULT 11 cupsEnumDests + 669: 00000000000320fc 72 FUNC GLOBAL DEFAULT 11 ippSetState + 670: 0000000000030b00 176 FUNC GLOBAL DEFAULT 11 ippCopyAttributes + 671: 0000000000017e20 376 FUNC GLOBAL DEFAULT 11 cupsArrayDup + 672: 000000000004bd4c 464 FUNC GLOBAL DEFAULT 11 cupsGetClasses + 673: 0000000000023b1c 1704 FUNC GLOBAL DEFAULT 11 cupsEncodeOptions2 + 674: 0000000000033db4 344 FUNC GLOBAL DEFAULT 11 ippErrorValue + 675: 000000000002a644 444 FUNC GLOBAL DEFAULT 11 httpWrite2 + 676: 000000000002b4d8 352 FUNC GLOBAL DEFAULT 11 dnsReloadResolver + 677: 0000000000024ff4 508 FUNC GLOBAL DEFAULT 11 cupsFileClose + 678: 000000000002b2b4 56 FUNC GLOBAL DEFAULT 11 httpConnect + 679: 000000000001f528 472 FUNC GLOBAL DEFAULT 11 cupsStartDestDocument + 680: 00000000000234dc 164 FUNC GLOBAL DEFAULT 11 ppdEmitAfterOrder + 681: 000000000004a62c 84 FUNC GLOBAL DEFAULT 11 cupsSetClientCertCB diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdbus-1.so.3.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdbus-1.so.3.txt new file mode 100644 index 000000000000..acd5f1b90005 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdbus-1.so.3.txt @@ -0,0 +1,654 @@ +Library: /lib64/libdbus-1.so.3 +Package: dbus-libs-1.10.24-15.el7.aarch64 + + +Symbol table '.dynsym' contains 648 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000c6d8 0 SECTION LOCAL DEFAULT 10 + 2: 000000000005f868 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (4) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam_r@GLIBC_2.17 (4) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (4) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.17 (4) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.17 (4) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.17 (5) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.17 (4) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (4) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (4) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.17 (5) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sd_is_socket@LIBSYSTEMD_209 (6) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.17 (4) + 15: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.17 (4) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.17 (4) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigprocmask@GLIBC_2.17 (4) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (4) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresuid@GLIBC_2.17 (4) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.17 (4) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setenv@GLIBC_2.17 (4) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.17 (5) + 24: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (4) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.17 (4) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (4) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (4) + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (4) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.17 (4) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.17 (5) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.17 (5) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.17 (4) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (4) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (4) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.17 (5) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (4) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (4) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.17 (4) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (4) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (4) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.17 (4) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (5) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncpy_chk@GLIBC_2.17 (4) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_destroy@GLIBC_2.17 (5) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.17 (4) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sd_listen_fds@LIBSYSTEMD_209 (6) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.17 (4) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.17 (5) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (4) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchmod@GLIBC_2.17 (4) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.17 (5) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.17 (5) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (4) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execv@GLIBC_2.17 (4) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (4) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (4) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (4) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (4) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (5) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (5) + 64: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 65: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (7) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (5) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (4) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (4) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execvp@GLIBC_2.17 (4) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (4) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (4) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.17 (4) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (4) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (4) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_getres@GLIBC_2.17 (4) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsprintf_chk@GLIBC_2.17 (4) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (4) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.17 (4) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrouplist@GLIBC_2.17 (4) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.17 (5) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nanosleep@GLIBC_2.17 (5) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.17 (5) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (5) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_init@GLIBC_2.17 (5) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.17 (4) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept4@GLIBC_2.17 (4) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (4) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (5) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (4) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (4) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (5) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dirfd@GLIBC_2.17 (4) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.17 (5) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unsetenv@GLIBC_2.17 (4) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.17 (4) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.17 (4) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.17 (4) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (5) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresgid@GLIBC_2.17 (4) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.17 (4) + 101: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_setclock@GLIBC_2.17 (5) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (4) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.17 (4) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir_r@GLIBC_2.17 (4) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socketpair@GLIBC_2.17 (4) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.17 (4) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaddset@GLIBC_2.17 (4) + 109: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clearenv@GLIBC_2.17 (4) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.17 (5) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (5) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (4) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (4) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (5) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.17 (4) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (5) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.17 (5) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (4) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.17 (4) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.17 (5) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.17 (4) + 123: 0000000000036248 188 FUNC GLOBAL DEFAULT 12 _dbus_concat_dir_and_file@@LIBDBUS_PRIVATE_1.10.24 + 124: 00000000000240b4 444 FUNC GLOBAL DEFAULT 12 dbus_message_new_error@@LIBDBUS_1_3 + 125: 0000000000030df0 92 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_string@@LIBDBUS_PRIVATE_1.10.24 + 126: 000000000002f700 8 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_new@@LIBDBUS_PRIVATE_1.10.24 + 127: 00000000000341c4 276 FUNC GLOBAL DEFAULT 12 _dbus_string_replace_len@@LIBDBUS_PRIVATE_1.10.24 + 128: 0000000000033e40 236 FUNC GLOBAL DEFAULT 12 _dbus_string_append_printf_valist@@LIBDBUS_PRIVATE_1.10.24 + 129: 000000000001895c 128 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_message_unix_fds@@LIBDBUS_1_3 + 130: 0000000000031f24 56 FUNC GLOBAL DEFAULT 12 _dbus_list_pop_first@@LIBDBUS_PRIVATE_1.10.24 + 131: 0000000000023850 72 FUNC GLOBAL DEFAULT 12 dbus_message_has_interface@@LIBDBUS_1_3 + 132: 0000000000031f94 120 FUNC GLOBAL DEFAULT 12 _dbus_list_copy@@LIBDBUS_PRIVATE_1.10.24 + 133: 000000000001b61c 432 FUNC GLOBAL DEFAULT 12 _dbus_header_set_field_basic@@LIBDBUS_PRIVATE_1.10.24 + 134: 0000000000035900 104 FUNC GLOBAL DEFAULT 12 _dbus_pipe_write@@LIBDBUS_PRIVATE_1.10.24 + 135: 000000000002bf04 164 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_next@@LIBDBUS_1_3 + 136: 00000000000125c8 592 FUNC GLOBAL DEFAULT 12 dbus_bus_request_name@@LIBDBUS_1_3 + 137: 000000000003a360 112 FUNC GLOBAL DEFAULT 12 _dbus_is_a_number@@LIBDBUS_PRIVATE_1.10.24 + 138: 0000000000028c84 216 FUNC GLOBAL DEFAULT 12 dbus_server_set_auth_mechanisms@@LIBDBUS_1_3 + 139: 0000000000016674 224 FUNC GLOBAL DEFAULT 12 dbus_connection_send@@LIBDBUS_1_3 + 140: 0000000000028d5c 16 FUNC GLOBAL DEFAULT 12 dbus_server_allocate_data_slot@@LIBDBUS_1_3 + 141: 0000000000033120 100 FUNC GLOBAL DEFAULT 12 dbus_shutdown@@LIBDBUS_1_3 + 142: 000000000002bfa8 152 FUNC GLOBAL DEFAULT 12 dbus_signature_validate@@LIBDBUS_1_3 + 143: 000000000002fda4 212 FUNC GLOBAL DEFAULT 12 dbus_watch_handle@@LIBDBUS_1_3 + 144: 0000000000028b48 316 FUNC GLOBAL DEFAULT 12 dbus_server_set_timeout_functions@@LIBDBUS_1_3 + 145: 0000000000020638 448 FUNC GLOBAL DEFAULT 12 dbus_message_copy@@LIBDBUS_1_3 + 146: 0000000000029af0 124 FUNC GLOBAL DEFAULT 12 _dbus_create_uuid@@LIBDBUS_PRIVATE_1.10.24 + 147: 0000000000027454 240 FUNC GLOBAL DEFAULT 12 dbus_pending_call_steal_reply@@LIBDBUS_1_3 + 148: 0000000000060ec8 8 OBJECT GLOBAL DEFAULT 24 _dbus_no_memory_message@@LIBDBUS_PRIVATE_1.10.24 + 149: 00000000000250b4 72 FUNC GLOBAL DEFAULT 12 dbus_message_free_data_slot@@LIBDBUS_1_3 + 150: 00000000000284dc 172 FUNC GLOBAL DEFAULT 12 dbus_server_ref@@LIBDBUS_1_3 + 151: 00000000000271b0 36 FUNC GLOBAL DEFAULT 12 _dbus_pending_call_ref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 152: 00000000000342d8 196 FUNC GLOBAL DEFAULT 12 _dbus_string_find_eol@@LIBDBUS_PRIVATE_1.10.24 + 153: 000000000000ea9c 1256 FUNC GLOBAL DEFAULT 12 dbus_parse_address@@LIBDBUS_1_3 + 154: 000000000003460c 104 FUNC GLOBAL DEFAULT 12 _dbus_string_skip_blank@@LIBDBUS_PRIVATE_1.10.24 + 155: 0000000000028db4 264 FUNC GLOBAL DEFAULT 12 dbus_server_set_data@@LIBDBUS_1_3 + 156: 000000000003384c 52 FUNC GLOBAL DEFAULT 12 _dbus_string_init_const@@LIBDBUS_PRIVATE_1.10.24 + 157: 0000000000024270 480 FUNC GLOBAL DEFAULT 12 dbus_message_new_error_printf@@LIBDBUS_1_3 + 158: 00000000000115ac 48 FUNC GLOBAL DEFAULT 12 _dbus_auth_set_credentials@@LIBDBUS_PRIVATE_1.10.24 + 159: 000000000002c3c8 284 FUNC GLOBAL DEFAULT 12 dbus_validate_path@@LIBDBUS_1_3 + 160: 000000000001c314 172 FUNC GLOBAL DEFAULT 12 _dbus_marshal_byteswap@@LIBDBUS_PRIVATE_1.10.24 + 161: 00000000000338c4 160 FUNC GLOBAL DEFAULT 12 _dbus_string_compact@@LIBDBUS_PRIVATE_1.10.24 + 162: 000000000003486c 124 FUNC GLOBAL DEFAULT 12 _dbus_string_equal@@LIBDBUS_PRIVATE_1.10.24 + 163: 0000000000032b9c 308 FUNC GLOBAL DEFAULT 12 _dbus_type_to_string@@LIBDBUS_PRIVATE_1.10.24 + 164: 00000000000190ec 8 FUNC GLOBAL DEFAULT 12 _dbus_credentials_get_pid@@LIBDBUS_PRIVATE_1.10.24 + 165: 0000000000013c60 8 FUNC GLOBAL DEFAULT 12 _dbus_connection_set_pending_fds_function@@LIBDBUS_PRIVATE_1.10.24 + 166: 0000000000031e38 80 FUNC GLOBAL DEFAULT 12 _dbus_list_find_last@@LIBDBUS_PRIVATE_1.10.24 + 167: 00000000000307d8 116 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_remove_int@@LIBDBUS_PRIVATE_1.10.24 + 168: 00000000000208f0 100 FUNC GLOBAL DEFAULT 12 dbus_message_get_type@@LIBDBUS_1_3 + 169: 0000000000017708 144 FUNC GLOBAL DEFAULT 12 dbus_connection_read_write_dispatch@@LIBDBUS_1_3 + 170: 00000000000348e8 124 FUNC GLOBAL DEFAULT 12 _dbus_string_equal_len@@LIBDBUS_PRIVATE_1.10.24 + 171: 0000000000034964 128 FUNC GLOBAL DEFAULT 12 _dbus_string_equal_substring@@LIBDBUS_PRIVATE_1.10.24 + 172: 0000000000036124 24 FUNC GLOBAL DEFAULT 12 _dbus_atomic_dec@@LIBDBUS_PRIVATE_1.10.24 + 173: 0000000000012038 12 FUNC GLOBAL DEFAULT 12 dbus_bus_get_private@@LIBDBUS_1_3 + 174: 0000000000027f28 4 FUNC GLOBAL DEFAULT 12 _dbus_server_ref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 175: 000000000001202c 12 FUNC GLOBAL DEFAULT 12 dbus_bus_get@@LIBDBUS_1_3 + 176: 000000000002fa18 80 FUNC GLOBAL DEFAULT 12 dbus_watch_get_fd@@LIBDBUS_1_3 + 177: 0000000000017bc8 288 FUNC GLOBAL DEFAULT 12 dbus_connection_try_register_object_path@@LIBDBUS_1_3 + 178: 0000000000011358 16 FUNC GLOBAL DEFAULT 12 _dbus_auth_bytes_sent@@LIBDBUS_PRIVATE_1.10.24 + 179: 0000000000038628 404 FUNC GLOBAL DEFAULT 12 _dbus_printf_string_upper_bound@@LIBDBUS_PRIVATE_1.10.24 + 180: 000000000002fd44 96 FUNC GLOBAL DEFAULT 12 dbus_watch_get_enabled@@LIBDBUS_1_3 + 181: 000000000003a904 124 FUNC GLOBAL DEFAULT 12 _dbus_username_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 182: 000000000003610c 24 FUNC GLOBAL DEFAULT 12 _dbus_atomic_inc@@LIBDBUS_PRIVATE_1.10.24 + 183: 0000000000034588 132 FUNC GLOBAL DEFAULT 12 _dbus_string_find_blank@@LIBDBUS_PRIVATE_1.10.24 + 184: 00000000000340b8 24 FUNC GLOBAL DEFAULT 12 _dbus_string_copy@@LIBDBUS_PRIVATE_1.10.24 + 185: 0000000000032040 104 FUNC GLOBAL DEFAULT 12 _dbus_list_foreach@@LIBDBUS_PRIVATE_1.10.24 + 186: 0000000000013c68 184 FUNC GLOBAL DEFAULT 12 dbus_connection_ref@@LIBDBUS_1_3 + 187: 00000000000313e8 112 FUNC GLOBAL DEFAULT 12 _dbus_uuid_encode@@LIBDBUS_PRIVATE_1.10.24 + 188: 000000000001d87c 148 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_write_basic@@LIBDBUS_PRIVATE_1.10.24 + 189: 0000000000011334 36 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_bytes_to_send@@LIBDBUS_PRIVATE_1.10.24 + 190: 00000000000340a0 24 FUNC GLOBAL DEFAULT 12 _dbus_string_delete@@LIBDBUS_PRIVATE_1.10.24 + 191: 000000000001cae8 164 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_read_fixed_multi@@LIBDBUS_PRIVATE_1.10.24 + 192: 00000000000294dc 780 FUNC GLOBAL DEFAULT 12 _dbus_server_new_for_tcp_socket@@LIBDBUS_PRIVATE_1.10.24 + 193: 00000000000306e0 44 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_lookup_string@@LIBDBUS_PRIVATE_1.10.24 + 194: 0000000000016d88 184 FUNC GLOBAL DEFAULT 12 dbus_connection_open_private@@LIBDBUS_1_3 + 195: 0000000000018ae8 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_received_size@@LIBDBUS_1_3 + 196: 0000000000027964 140 FUNC GLOBAL DEFAULT 12 dbus_pending_call_get_data@@LIBDBUS_1_3 + 197: 00000000000363c4 12 FUNC GLOBAL DEFAULT 12 _dbus_exit@@LIBDBUS_PRIVATE_1.10.24 + 198: 000000000001d62c 44 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_init_values_only@@LIBDBUS_PRIVATE_1.10.24 + 199: 0000000000018ec8 16 FUNC GLOBAL DEFAULT 12 _dbus_credentials_ref@@LIBDBUS_PRIVATE_1.10.24 + 200: 0000000000014404 184 FUNC GLOBAL DEFAULT 12 dbus_connection_set_wakeup_main_function@@LIBDBUS_1_3 + 201: 0000000000031334 180 FUNC GLOBAL DEFAULT 12 _dbus_generate_uuid@@LIBDBUS_PRIVATE_1.10.24 + 202: 000000000003200c 52 FUNC GLOBAL DEFAULT 12 _dbus_list_get_length@@LIBDBUS_PRIVATE_1.10.24 + 203: 0000000000027f20 8 FUNC GLOBAL DEFAULT 12 _dbus_server_toggle_all_watches@@LIBDBUS_PRIVATE_1.10.24 + 204: 0000000000010e8c 192 FUNC GLOBAL DEFAULT 12 _dbus_auth_unref@@LIBDBUS_PRIVATE_1.10.24 + 205: 000000000002f63c 120 FUNC GLOBAL DEFAULT 12 _dbus_watch_new@@LIBDBUS_PRIVATE_1.10.24 + 206: 0000000000033004 52 FUNC GLOBAL DEFAULT 12 dbus_realloc@@LIBDBUS_1_3 + 207: 0000000000022f2c 248 FUNC GLOBAL DEFAULT 12 dbus_message_append_args@@LIBDBUS_1_3 + 208: 0000000000033a44 168 FUNC GLOBAL DEFAULT 12 _dbus_string_steal_data@@LIBDBUS_PRIVATE_1.10.24 + 209: 0000000000015d0c 736 FUNC GLOBAL DEFAULT 12 dbus_connection_send_with_reply@@LIBDBUS_1_3 + 210: 0000000000016818 224 FUNC GLOBAL DEFAULT 12 dbus_connection_close@@LIBDBUS_1_3 + 211: 00000000000330d0 80 FUNC GLOBAL DEFAULT 12 _dbus_register_shutdown_func@@LIBDBUS_PRIVATE_1.10.24 + 212: 000000000003b0a4 216 FUNC GLOBAL DEFAULT 12 _dbus_string_parse_int@@LIBDBUS_PRIVATE_1.10.24 + 213: 0000000000014018 132 FUNC GLOBAL DEFAULT 12 dbus_connection_set_exit_on_disconnect@@LIBDBUS_1_3 + 214: 0000000000033bb0 4 FUNC GLOBAL DEFAULT 12 _dbus_string_set_length@@LIBDBUS_PRIVATE_1.10.24 + 215: 000000000001e304 664 FUNC GLOBAL DEFAULT 12 _dbus_validate_signature_with_reason@@LIBDBUS_PRIVATE_1.10.24 + 216: 0000000000024cd8 60 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_return_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 217: 0000000000020c08 184 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_arg_type@@LIBDBUS_1_3 + 218: 0000000000012f88 244 FUNC GLOBAL DEFAULT 12 dbus_bus_remove_match@@LIBDBUS_1_3 + 219: 0000000000013390 160 FUNC GLOBAL DEFAULT 12 _dbus_connection_unlock@@LIBDBUS_PRIVATE_1.10.24 + 220: 000000000003b470 24 FUNC GLOBAL DEFAULT 12 _dbus_error_from_system_errno@@LIBDBUS_PRIVATE_1.10.24 + 221: 0000000000013c34 36 FUNC GLOBAL DEFAULT 12 _dbus_connection_ref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 222: 0000000000023304 128 FUNC GLOBAL DEFAULT 12 dbus_message_set_auto_start@@LIBDBUS_1_3 + 223: 0000000000018f2c 64 FUNC GLOBAL DEFAULT 12 _dbus_credentials_new_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 224: 0000000000021af8 324 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_element_count@@LIBDBUS_1_3 + 225: 0000000000024ba0 132 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_unref@@LIBDBUS_PRIVATE_1.10.24 + 226: 0000000000031a1c 116 FUNC GLOBAL DEFAULT 12 _dbus_list_get_stats@@LIBDBUS_PRIVATE_1.10.24 + 227: 0000000000031e88 64 FUNC GLOBAL DEFAULT 12 _dbus_list_remove_last@@LIBDBUS_PRIVATE_1.10.24 + 228: 0000000000033ba4 12 FUNC GLOBAL DEFAULT 12 _dbus_string_shorten@@LIBDBUS_PRIVATE_1.10.24 + 229: 0000000000012a5c 604 FUNC GLOBAL DEFAULT 12 dbus_bus_name_has_owner@@LIBDBUS_1_3 + 230: 000000000001be1c 220 FUNC GLOBAL DEFAULT 12 _dbus_header_delete_field@@LIBDBUS_PRIVATE_1.10.24 + 231: 000000000001844c 416 FUNC GLOBAL DEFAULT 12 dbus_connection_list_registered@@LIBDBUS_1_3 + 232: 0000000000027284 88 FUNC GLOBAL DEFAULT 12 dbus_pending_call_ref@@LIBDBUS_1_3 + 233: 0000000000022538 824 FUNC GLOBAL DEFAULT 12 dbus_message_iter_open_container@@LIBDBUS_1_3 + 234: 0000000000033828 36 FUNC GLOBAL DEFAULT 12 _dbus_string_init_const_len@@LIBDBUS_PRIVATE_1.10.24 + 235: 0000000000018ed8 84 FUNC GLOBAL DEFAULT 12 _dbus_credentials_unref@@LIBDBUS_PRIVATE_1.10.24 + 236: 0000000000030f24 292 FUNC GLOBAL DEFAULT 12 _dbus_warn@@LIBDBUS_PRIVATE_1.10.24 + 237: 00000000000341a8 24 FUNC GLOBAL DEFAULT 12 _dbus_string_move@@LIBDBUS_PRIVATE_1.10.24 + 238: 000000000002c040 176 FUNC GLOBAL DEFAULT 12 dbus_signature_validate_single@@LIBDBUS_1_3 + 239: 0000000000019b28 144 FUNC GLOBAL DEFAULT 12 dbus_move_error@@LIBDBUS_1_3 + 240: 0000000000035110 92 FUNC GLOBAL DEFAULT 12 _dbus_string_validate_nul@@LIBDBUS_PRIVATE_1.10.24 + 241: 0000000000030488 32 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_init@@LIBDBUS_PRIVATE_1.10.24 + 242: 0000000000014120 240 FUNC GLOBAL DEFAULT 12 dbus_connection_free_preallocated_send@@LIBDBUS_1_3 + 243: 0000000000024c24 24 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_buffer@@LIBDBUS_PRIVATE_1.10.24 + 244: 0000000000012408 448 FUNC GLOBAL DEFAULT 12 dbus_bus_get_id@@LIBDBUS_1_3 + 245: 000000000002fac0 8 FUNC GLOBAL DEFAULT 12 _dbus_watch_get_pollable@@LIBDBUS_PRIVATE_1.10.24 + 246: 00000000000185ec 16 FUNC GLOBAL DEFAULT 12 dbus_connection_allocate_data_slot@@LIBDBUS_1_3 + 247: 0000000000010dac 208 FUNC GLOBAL DEFAULT 12 _dbus_auth_server_new@@LIBDBUS_PRIVATE_1.10.24 + 248: 0000000000017828 128 FUNC GLOBAL DEFAULT 12 dbus_connection_set_allow_anonymous@@LIBDBUS_1_3 + 249: 000000000002f6c4 16 FUNC GLOBAL DEFAULT 12 _dbus_watch_invalidate@@LIBDBUS_PRIVATE_1.10.24 + 250: 0000000000023998 156 FUNC GLOBAL DEFAULT 12 dbus_message_get_member@@LIBDBUS_1_3 + 251: 0000000000023898 256 FUNC GLOBAL DEFAULT 12 dbus_message_set_member@@LIBDBUS_1_3 + 252: 0000000000033184 112 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_new@@LIBDBUS_PRIVATE_1.10.24 + 253: 000000000003331c 36 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_dealloc@@LIBDBUS_PRIVATE_1.10.24 + 254: 00000000000250fc 272 FUNC GLOBAL DEFAULT 12 dbus_message_set_data@@LIBDBUS_1_3 + 255: 0000000000024b90 16 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_ref@@LIBDBUS_PRIVATE_1.10.24 + 256: 0000000000025044 12 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_is_corrupted@@LIBDBUS_PRIVATE_1.10.24 + 257: 00000000000304a8 140 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_next@@LIBDBUS_PRIVATE_1.10.24 + 258: 0000000000024830 188 FUNC GLOBAL DEFAULT 12 dbus_message_has_sender@@LIBDBUS_1_3 + 259: 00000000000234f8 156 FUNC GLOBAL DEFAULT 12 dbus_message_get_path@@LIBDBUS_1_3 + 260: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS LIBDBUS_PRIVATE_1.10.24 + 261: 0000000000036148 16 FUNC GLOBAL DEFAULT 12 _dbus_poll@@LIBDBUS_PRIVATE_1.10.24 + 262: 000000000000f024 236 FUNC GLOBAL DEFAULT 12 dbus_address_unescape_value@@LIBDBUS_1_3 + 263: 00000000000309f0 8 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_free_preallocated_entry@@LIBDBUS_PRIVATE_1.10.24 + 264: 00000000000207f8 248 FUNC GLOBAL DEFAULT 12 dbus_message_ref@@LIBDBUS_1_3 + 265: 0000000000034674 84 FUNC GLOBAL DEFAULT 12 _dbus_string_skip_white@@LIBDBUS_PRIVATE_1.10.24 + 266: 0000000000017924 320 FUNC GLOBAL DEFAULT 12 dbus_connection_add_filter@@LIBDBUS_1_3 + 267: 00000000000144bc 184 FUNC GLOBAL DEFAULT 12 dbus_connection_set_dispatch_status_function@@LIBDBUS_1_3 + 268: 0000000000030768 112 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_remove_string@@LIBDBUS_PRIVATE_1.10.24 + 269: 0000000000028588 200 FUNC GLOBAL DEFAULT 12 dbus_server_unref@@LIBDBUS_1_3 + 270: 0000000000030d70 128 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_string_preallocated@@LIBDBUS_PRIVATE_1.10.24 + 271: 0000000000018838 24 FUNC GLOBAL DEFAULT 12 dbus_connection_set_change_sigpipe@@LIBDBUS_1_3 + 272: 0000000000018b74 128 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_received_unix_fds@@LIBDBUS_1_3 + 273: 0000000000010e7c 16 FUNC GLOBAL DEFAULT 12 _dbus_auth_ref@@LIBDBUS_PRIVATE_1.10.24 + 274: 0000000000011368 24 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_buffer@@LIBDBUS_PRIVATE_1.10.24 + 275: 0000000000034c9c 472 FUNC GLOBAL DEFAULT 12 _dbus_string_hex_decode@@LIBDBUS_PRIVATE_1.10.24 + 276: 0000000000033b7c 40 FUNC GLOBAL DEFAULT 12 _dbus_string_lengthen@@LIBDBUS_PRIVATE_1.10.24 + 277: 0000000000022870 400 FUNC GLOBAL DEFAULT 12 dbus_message_iter_close_container@@LIBDBUS_1_3 + 278: 00000000000230a0 508 FUNC GLOBAL DEFAULT 12 dbus_message_new_signal@@LIBDBUS_1_3 + 279: 00000000000347dc 144 FUNC GLOBAL DEFAULT 12 _dbus_string_chop_white@@LIBDBUS_PRIVATE_1.10.24 + 280: 0000000000017ea8 288 FUNC GLOBAL DEFAULT 12 dbus_connection_try_register_fallback@@LIBDBUS_1_3 + 281: 0000000000019220 40 FUNC GLOBAL DEFAULT 12 _dbus_credentials_are_anonymous@@LIBDBUS_PRIVATE_1.10.24 + 282: 00000000000162bc 328 FUNC GLOBAL DEFAULT 12 dbus_connection_return_message@@LIBDBUS_1_3 + 283: 000000000002506c 8 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_max_message_size@@LIBDBUS_PRIVATE_1.10.24 + 284: 000000000001d074 120 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_get_signature@@LIBDBUS_PRIVATE_1.10.24 + 285: 0000000000027664 248 FUNC GLOBAL DEFAULT 12 _dbus_pending_call_new_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 286: 000000000002fc00 112 FUNC GLOBAL DEFAULT 12 _dbus_watch_unref@@LIBDBUS_PRIVATE_1.10.24 + 287: 000000000001ca78 60 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_read_basic@@LIBDBUS_PRIVATE_1.10.24 + 288: 000000000000ea04 152 FUNC GLOBAL DEFAULT 12 dbus_address_entry_get_value@@LIBDBUS_1_3 + 289: 00000000000235dc 216 FUNC GLOBAL DEFAULT 12 dbus_message_get_path_decomposed@@LIBDBUS_1_3 + 290: 0000000000021ea8 1028 FUNC GLOBAL DEFAULT 12 dbus_message_iter_append_basic@@LIBDBUS_1_3 + 291: 0000000000028ebc 164 FUNC GLOBAL DEFAULT 12 dbus_server_get_data@@LIBDBUS_1_3 + 292: 00000000000387bc 156 FUNC GLOBAL DEFAULT 12 _dbus_get_tmpdir@@LIBDBUS_PRIVATE_1.10.24 + 293: 00000000000115dc 8 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_identity@@LIBDBUS_PRIVATE_1.10.24 + 294: 000000000003070c 48 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_lookup_int@@LIBDBUS_PRIVATE_1.10.24 + 295: 0000000000036da4 140 FUNC GLOBAL DEFAULT 12 _dbus_ensure_directory@@LIBDBUS_PRIVATE_1.10.24 + 296: 0000000000033fe0 116 FUNC GLOBAL DEFAULT 12 _dbus_string_append_len@@LIBDBUS_PRIVATE_1.10.24 + 297: 00000000000198e4 256 FUNC GLOBAL DEFAULT 12 dbus_error_has_name@@LIBDBUS_1_3 + 298: 00000000000215c0 336 FUNC GLOBAL DEFAULT 12 dbus_message_get_args@@LIBDBUS_1_3 + 299: 0000000000023594 72 FUNC GLOBAL DEFAULT 12 dbus_message_has_path@@LIBDBUS_1_3 + 300: 00000000000344b4 20 FUNC GLOBAL DEFAULT 12 _dbus_string_find@@LIBDBUS_PRIVATE_1.10.24 + 301: 00000000000214a0 288 FUNC GLOBAL DEFAULT 12 dbus_message_get_args_valist@@LIBDBUS_1_3 + 302: 00000000000344c8 192 FUNC GLOBAL DEFAULT 12 _dbus_string_split_on_byte@@LIBDBUS_PRIVATE_1.10.24 + 303: 0000000000024690 228 FUNC GLOBAL DEFAULT 12 dbus_message_is_error@@LIBDBUS_1_3 + 304: 000000000002ce50 12 FUNC GLOBAL DEFAULT 12 dbus_timeout_get_enabled@@LIBDBUS_1_3 + 305: 0000000000018644 300 FUNC GLOBAL DEFAULT 12 dbus_connection_set_data@@LIBDBUS_1_3 + 306: 0000000000035c6c 52 FUNC GLOBAL DEFAULT 12 _dbus_write_socket_with_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 307: 00000000000190fc 8 FUNC GLOBAL DEFAULT 12 _dbus_credentials_get_windows_sid@@LIBDBUS_PRIVATE_1.10.24 + 308: 0000000000014c20 216 FUNC GLOBAL DEFAULT 12 dbus_connection_set_windows_user_function@@LIBDBUS_1_3 + 309: 0000000000034bb4 232 FUNC GLOBAL DEFAULT 12 _dbus_string_hex_encode@@LIBDBUS_PRIVATE_1.10.24 + 310: 0000000000037370 112 FUNC GLOBAL DEFAULT 12 _dbus_close@@LIBDBUS_PRIVATE_1.10.24 + 311: 00000000000359a4 260 FUNC GLOBAL DEFAULT 12 _dbus_ensure_standard_fds@@LIBDBUS_PRIVATE_1.10.24 + 312: 0000000000032fdc 12 FUNC GLOBAL DEFAULT 12 dbus_malloc@@LIBDBUS_1_3 + 313: 00000000000303c8 192 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_unref@@LIBDBUS_PRIVATE_1.10.24 + 314: 0000000000031b24 60 FUNC GLOBAL DEFAULT 12 _dbus_list_append@@LIBDBUS_PRIVATE_1.10.24 + 315: 0000000000023fd0 228 FUNC GLOBAL DEFAULT 12 dbus_message_new_method_return@@LIBDBUS_1_3 + 316: 000000000002d03c 8 FUNC GLOBAL DEFAULT 12 dbus_threads_init_default@@LIBDBUS_1_3 + 317: 00000000000333e8 8 FUNC GLOBAL DEFAULT 12 _dbus_pipe_init_stdout@@LIBDBUS_PRIVATE_1.10.24 + 318: 0000000000032fe8 16 FUNC GLOBAL DEFAULT 12 dbus_malloc0@@LIBDBUS_1_3 + 319: 0000000000031ec8 20 FUNC GLOBAL DEFAULT 12 _dbus_list_get_last@@LIBDBUS_PRIVATE_1.10.24 + 320: 0000000000031c54 88 FUNC GLOBAL DEFAULT 12 _dbus_list_insert_before_link@@LIBDBUS_PRIVATE_1.10.24 + 321: 000000000003613c 12 FUNC GLOBAL DEFAULT 12 _dbus_atomic_get@@LIBDBUS_PRIVATE_1.10.24 + 322: 0000000000031ba8 44 FUNC GLOBAL DEFAULT 12 _dbus_list_append_link@@LIBDBUS_PRIVATE_1.10.24 + 323: 0000000000018a68 128 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_received_size@@LIBDBUS_1_3 + 324: 0000000000013d20 144 FUNC GLOBAL DEFAULT 12 dbus_connection_get_is_connected@@LIBDBUS_1_3 + 325: 0000000000032588 44 FUNC GLOBAL DEFAULT 12 _dbus_marshal_read_uint32@@LIBDBUS_PRIVATE_1.10.24 + 326: 0000000000036e30 120 FUNC GLOBAL DEFAULT 12 _dbus_create_directory@@LIBDBUS_PRIVATE_1.10.24 + 327: 000000000003b4d0 24 FUNC GLOBAL DEFAULT 12 _dbus_strerror_from_errno@@LIBDBUS_PRIVATE_1.10.24 + 328: 0000000000019074 120 FUNC GLOBAL DEFAULT 12 _dbus_credentials_include@@LIBDBUS_PRIVATE_1.10.24 + 329: 0000000000028a0c 316 FUNC GLOBAL DEFAULT 12 dbus_server_set_watch_functions@@LIBDBUS_1_3 + 330: 0000000000060ec0 8 OBJECT GLOBAL DEFAULT 24 _dbus_return_if_fail_warning_format@@LIBDBUS_PRIVATE_1.10.24 + 331: 000000000002ce34 28 FUNC GLOBAL DEFAULT 12 dbus_timeout_handle@@LIBDBUS_1_3 + 332: 0000000000032f8c 4 FUNC GLOBAL DEFAULT 12 _dbus_verbose_bytes_of_string@@LIBDBUS_PRIVATE_1.10.24 + 333: 0000000000013c58 8 FUNC GLOBAL DEFAULT 12 _dbus_connection_get_pending_fds_count@@LIBDBUS_PRIVATE_1.10.24 + 334: 0000000000013f50 200 FUNC GLOBAL DEFAULT 12 dbus_connection_can_send_type@@LIBDBUS_1_3 + 335: 0000000000023afc 256 FUNC GLOBAL DEFAULT 12 dbus_message_set_error_name@@LIBDBUS_1_3 + 336: 0000000000019a48 224 FUNC GLOBAL DEFAULT 12 dbus_set_error_const@@LIBDBUS_1_3 + 337: 000000000001e0d0 104 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_write_fixed_multi@@LIBDBUS_PRIVATE_1.10.24 + 338: 0000000000016240 124 FUNC GLOBAL DEFAULT 12 dbus_connection_flush@@LIBDBUS_1_3 + 339: 0000000000033820 8 FUNC GLOBAL DEFAULT 12 _dbus_string_init@@LIBDBUS_PRIVATE_1.10.24 + 340: 0000000000025904 40 FUNC GLOBAL DEFAULT 12 dbus_get_version@@LIBDBUS_1_3 + 341: 0000000000031e28 16 FUNC GLOBAL DEFAULT 12 _dbus_list_get_last_link@@LIBDBUS_PRIVATE_1.10.24 + 342: 0000000000021ca8 296 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_fixed_array@@LIBDBUS_1_3 + 343: 00000000000152fc 232 FUNC GLOBAL DEFAULT 12 dbus_connection_borrow_message@@LIBDBUS_1_3 + 344: 0000000000031a94 4 FUNC GLOBAL DEFAULT 12 _dbus_list_free_link@@LIBDBUS_PRIVATE_1.10.24 + 345: 0000000000014b3c 228 FUNC GLOBAL DEFAULT 12 dbus_connection_get_windows_user@@LIBDBUS_1_3 + 346: 0000000000035188 580 FUNC GLOBAL DEFAULT 12 _dbus_file_get_contents@@LIBDBUS_PRIVATE_1.10.24 + 347: 000000000002ccd4 68 FUNC GLOBAL DEFAULT 12 dbus_timeout_set_data@@LIBDBUS_1_3 + 348: 0000000000028650 200 FUNC GLOBAL DEFAULT 12 dbus_server_disconnect@@LIBDBUS_1_3 + 349: 0000000000036304 192 FUNC GLOBAL DEFAULT 12 _dbus_sleep_milliseconds@@LIBDBUS_PRIVATE_1.10.24 + 350: 000000000002527c 132 FUNC GLOBAL DEFAULT 12 dbus_message_type_from_string@@LIBDBUS_1_3 + 351: 0000000000017fc8 448 FUNC GLOBAL DEFAULT 12 dbus_connection_register_fallback@@LIBDBUS_1_3 + 352: 00000000000199e4 100 FUNC GLOBAL DEFAULT 12 dbus_error_is_set@@LIBDBUS_1_3 + 353: 0000000000016404 348 FUNC GLOBAL DEFAULT 12 dbus_connection_steal_borrowed_message@@LIBDBUS_1_3 + 354: 000000000003b32c 156 FUNC GLOBAL DEFAULT 12 _dbus_generate_random_ascii@@LIBDBUS_PRIVATE_1.10.24 + 355: 0000000000018bf4 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_received_unix_fds@@LIBDBUS_1_3 + 356: 000000000001409c 132 FUNC GLOBAL DEFAULT 12 dbus_connection_preallocate_send@@LIBDBUS_1_3 + 357: 000000000002fac8 92 FUNC GLOBAL DEFAULT 12 dbus_watch_get_flags@@LIBDBUS_1_3 + 358: 00000000000302d8 224 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_new@@LIBDBUS_PRIVATE_1.10.24 + 359: 0000000000018850 128 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_message_size@@LIBDBUS_1_3 + 360: 000000000003062c 12 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_uintptr_key@@LIBDBUS_PRIVATE_1.10.24 + 361: 00000000000194c0 264 FUNC GLOBAL DEFAULT 12 _dbus_credentials_to_string_append@@LIBDBUS_PRIVATE_1.10.24 + 362: 0000000000014350 180 FUNC GLOBAL DEFAULT 12 dbus_connection_set_timeout_functions@@LIBDBUS_1_3 + 363: 0000000000032260 60 FUNC GLOBAL DEFAULT 12 _dbus_marshal_set_uint32@@LIBDBUS_PRIVATE_1.10.24 + 364: 000000000002cabc 24 FUNC GLOBAL DEFAULT 12 _dbus_timeout_set_enabled@@LIBDBUS_PRIVATE_1.10.24 + 365: 000000000002f6b4 16 FUNC GLOBAL DEFAULT 12 _dbus_watch_ref@@LIBDBUS_PRIVATE_1.10.24 + 366: 000000000002bdec 172 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_get_signature@@LIBDBUS_1_3 + 367: 0000000000031cf0 92 FUNC GLOBAL DEFAULT 12 _dbus_list_unlink@@LIBDBUS_PRIVATE_1.10.24 + 368: 000000000002c604 288 FUNC GLOBAL DEFAULT 12 dbus_validate_member@@LIBDBUS_1_3 + 369: 00000000000320a8 24 FUNC GLOBAL DEFAULT 12 _dbus_list_length_is_one@@LIBDBUS_PRIVATE_1.10.24 + 370: 00000000000308bc 152 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_int@@LIBDBUS_PRIVATE_1.10.24 + 371: 000000000002781c 116 FUNC GLOBAL DEFAULT 12 dbus_pending_call_unref@@LIBDBUS_1_3 + 372: 00000000000341c0 4 FUNC GLOBAL DEFAULT 12 _dbus_string_copy_len@@LIBDBUS_PRIVATE_1.10.24 + 373: 000000000002ccc4 8 FUNC GLOBAL DEFAULT 12 dbus_timeout_get_interval@@LIBDBUS_1_3 + 374: 0000000000033b60 28 FUNC GLOBAL DEFAULT 12 _dbus_string_copy_to_buffer_with_nul@@LIBDBUS_PRIVATE_1.10.24 + 375: 000000000001dfb4 284 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_set_basic@@LIBDBUS_PRIVATE_1.10.24 + 376: 0000000000031eec 56 FUNC GLOBAL DEFAULT 12 _dbus_list_pop_first_link@@LIBDBUS_PRIVATE_1.10.24 + 377: 0000000000021dd0 216 FUNC GLOBAL DEFAULT 12 dbus_message_iter_init_append@@LIBDBUS_1_3 + 378: 000000000001429c 180 FUNC GLOBAL DEFAULT 12 dbus_connection_set_watch_functions@@LIBDBUS_1_3 + 379: 000000000002ca40 100 FUNC GLOBAL DEFAULT 12 _dbus_timeout_new@@LIBDBUS_PRIVATE_1.10.24 + 380: 0000000000022b6c 960 FUNC GLOBAL DEFAULT 12 dbus_message_append_args_valist@@LIBDBUS_1_3 + 381: 0000000000033970 128 FUNC GLOBAL DEFAULT 12 _dbus_string_insert_bytes@@LIBDBUS_PRIVATE_1.10.24 + 382: 0000000000034f5c 436 FUNC GLOBAL DEFAULT 12 _dbus_string_validate_utf8@@LIBDBUS_PRIVATE_1.10.24 + 383: 0000000000024d14 776 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_queue_messages@@LIBDBUS_PRIVATE_1.10.24 + 384: 0000000000010f4c 196 FUNC GLOBAL DEFAULT 12 _dbus_auth_client_new@@LIBDBUS_PRIVATE_1.10.24 + 385: 0000000000030534 48 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_remove_entry@@LIBDBUS_PRIVATE_1.10.24 + 386: 000000000002520c 112 FUNC GLOBAL DEFAULT 12 dbus_message_get_data@@LIBDBUS_1_3 + 387: 00000000000244f0 208 FUNC GLOBAL DEFAULT 12 dbus_message_is_method_call@@LIBDBUS_1_3 + 388: 00000000000190f4 8 FUNC GLOBAL DEFAULT 12 _dbus_credentials_get_unix_uid@@LIBDBUS_PRIVATE_1.10.24 + 389: 0000000000032f90 40 FUNC GLOBAL DEFAULT 12 _dbus_first_type_in_signature@@LIBDBUS_PRIVATE_1.10.24 + 390: 0000000000018d0c 240 FUNC GLOBAL DEFAULT 12 _dbus_connection_get_stats@@LIBDBUS_PRIVATE_1.10.24 + 391: 0000000000011010 72 FUNC GLOBAL DEFAULT 12 _dbus_auth_set_mechanisms@@LIBDBUS_PRIVATE_1.10.24 + 392: 00000000000222ac 652 FUNC GLOBAL DEFAULT 12 dbus_message_iter_append_fixed_array@@LIBDBUS_1_3 + 393: 0000000000018c80 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_outgoing_size@@LIBDBUS_1_3 + 394: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS LIBDBUS_1_3 + 395: 000000000001f250 4 FUNC GLOBAL DEFAULT 12 _dbus_validate_error_name@@LIBDBUS_PRIVATE_1.10.24 + 396: 0000000000033c4c 140 FUNC GLOBAL DEFAULT 12 _dbus_string_append@@LIBDBUS_PRIVATE_1.10.24 + 397: 0000000000024774 188 FUNC GLOBAL DEFAULT 12 dbus_message_has_destination@@LIBDBUS_1_3 + 398: 00000000000193c8 80 FUNC GLOBAL DEFAULT 12 _dbus_credentials_clear@@LIBDBUS_PRIVATE_1.10.24 + 399: 0000000000025300 96 FUNC GLOBAL DEFAULT 12 dbus_message_type_to_string@@LIBDBUS_1_3 + 400: 0000000000019460 96 FUNC GLOBAL DEFAULT 12 _dbus_credentials_same_user@@LIBDBUS_PRIVATE_1.10.24 + 401: 0000000000023384 116 FUNC GLOBAL DEFAULT 12 dbus_message_get_auto_start@@LIBDBUS_1_3 + 402: 0000000000035f98 24 FUNC GLOBAL DEFAULT 12 _dbus_getpid@@LIBDBUS_PRIVATE_1.10.24 + 403: 0000000000035fc8 24 FUNC GLOBAL DEFAULT 12 _dbus_geteuid@@LIBDBUS_PRIVATE_1.10.24 + 404: 0000000000014210 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_dispatch_status@@LIBDBUS_1_3 + 405: 000000000003439c 280 FUNC GLOBAL DEFAULT 12 _dbus_string_find_to@@LIBDBUS_PRIVATE_1.10.24 + 406: 0000000000016cd0 184 FUNC GLOBAL DEFAULT 12 dbus_connection_open@@LIBDBUS_1_3 + 407: 0000000000020cc0 2016 FUNC GLOBAL DEFAULT 12 _dbus_message_iter_get_args_valist@@LIBDBUS_PRIVATE_1.10.24 + 408: 0000000000017a64 356 FUNC GLOBAL DEFAULT 12 dbus_connection_remove_filter@@LIBDBUS_1_3 + 409: 00000000000309e8 8 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_preallocate_entry@@LIBDBUS_PRIVATE_1.10.24 + 410: 0000000000011058 732 FUNC GLOBAL DEFAULT 12 _dbus_auth_do_work@@LIBDBUS_PRIVATE_1.10.24 + 411: 000000000001d794 232 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_unrecurse@@LIBDBUS_PRIVATE_1.10.24 + 412: 00000000000272dc 188 FUNC GLOBAL DEFAULT 12 dbus_pending_call_set_notify@@LIBDBUS_1_3 + 413: 0000000000033880 68 FUNC GLOBAL DEFAULT 12 _dbus_string_free@@LIBDBUS_PRIVATE_1.10.24 + 414: 000000000001c9f8 80 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_get_current_type@@LIBDBUS_PRIVATE_1.10.24 + 415: 00000000000389c0 412 FUNC GLOBAL DEFAULT 12 _dbus_lookup_user_bus@@LIBDBUS_PRIVATE_1.10.24 + 416: 0000000000031d4c 36 FUNC GLOBAL DEFAULT 12 _dbus_list_remove_link@@LIBDBUS_PRIVATE_1.10.24 + 417: 0000000000035aa8 100 FUNC GLOBAL DEFAULT 12 _dbus_write_socket@@LIBDBUS_PRIVATE_1.10.24 + 418: 000000000001e59c 192 FUNC GLOBAL DEFAULT 12 _dbus_validate_path@@LIBDBUS_PRIVATE_1.10.24 + 419: 0000000000011380 16 FUNC GLOBAL DEFAULT 12 _dbus_auth_return_buffer@@LIBDBUS_PRIVATE_1.10.24 + 420: 0000000000031d70 88 FUNC GLOBAL DEFAULT 12 _dbus_list_remove@@LIBDBUS_PRIVATE_1.10.24 + 421: 0000000000038c7c 100 FUNC GLOBAL DEFAULT 12 _dbus_delete_directory@@LIBDBUS_PRIVATE_1.10.24 + 422: 0000000000023ab4 72 FUNC GLOBAL DEFAULT 12 dbus_message_has_member@@LIBDBUS_1_3 + 423: 000000000002cab4 8 FUNC GLOBAL DEFAULT 12 _dbus_timeout_set_interval@@LIBDBUS_PRIVATE_1.10.24 + 424: 0000000000035d9c 212 FUNC GLOBAL DEFAULT 12 _dbus_read@@LIBDBUS_PRIVATE_1.10.24 + 425: 0000000000027544 56 FUNC GLOBAL DEFAULT 12 dbus_pending_call_block@@LIBDBUS_1_3 + 426: 0000000000028834 188 FUNC GLOBAL DEFAULT 12 dbus_server_get_id@@LIBDBUS_1_3 + 427: 000000000003a3d0 380 FUNC GLOBAL DEFAULT 12 _dbus_user_database_lookup@@LIBDBUS_PRIVATE_1.10.24 + 428: 0000000000033cd8 64 FUNC GLOBAL DEFAULT 12 _dbus_string_init_from_string@@LIBDBUS_PRIVATE_1.10.24 + 429: 0000000000031a90 4 FUNC GLOBAL DEFAULT 12 _dbus_list_alloc_link@@LIBDBUS_PRIVATE_1.10.24 + 430: 0000000000022a00 364 FUNC GLOBAL DEFAULT 12 dbus_message_iter_abandon_container@@LIBDBUS_1_3 + 431: 0000000000035e70 4 FUNC GLOBAL DEFAULT 12 _dbus_read_socket@@LIBDBUS_PRIVATE_1.10.24 + 432: 0000000000025540 352 FUNC GLOBAL DEFAULT 12 dbus_message_demarshal@@LIBDBUS_1_3 + 433: 000000000000ef84 160 FUNC GLOBAL DEFAULT 12 dbus_address_escape_value@@LIBDBUS_1_3 + 434: 00000000000148dc 296 FUNC GLOBAL DEFAULT 12 dbus_connection_get_adt_audit_session_data@@LIBDBUS_1_3 + 435: 0000000000033038 72 FUNC GLOBAL DEFAULT 12 dbus_free_string_array@@LIBDBUS_1_3 + 436: 000000000002cd18 88 FUNC GLOBAL DEFAULT 12 _dbus_timeout_unref@@LIBDBUS_PRIVATE_1.10.24 + 437: 000000000000e9c4 56 FUNC GLOBAL DEFAULT 12 dbus_address_entries_free@@LIBDBUS_1_3 + 438: 0000000000011390 28 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_unused_bytes@@LIBDBUS_PRIVATE_1.10.24 + 439: 00000000000277d8 68 FUNC GLOBAL DEFAULT 12 _dbus_pending_call_unref_and_unlock@@LIBDBUS_PRIVATE_1.10.24 + 440: 000000000002f708 332 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_set_functions@@LIBDBUS_PRIVATE_1.10.24 + 441: 00000000000245c0 208 FUNC GLOBAL DEFAULT 12 dbus_message_is_signal@@LIBDBUS_1_3 + 442: 000000000002f62c 16 FUNC GLOBAL DEFAULT 12 _dbus_watch_set_oom_last_time@@LIBDBUS_PRIVATE_1.10.24 + 443: 00000000000331f4 60 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_free@@LIBDBUS_PRIVATE_1.10.24 + 444: 0000000000025360 480 FUNC GLOBAL DEFAULT 12 dbus_message_marshal@@LIBDBUS_1_3 + 445: 000000000003b17c 216 FUNC GLOBAL DEFAULT 12 _dbus_string_parse_uint@@LIBDBUS_PRIVATE_1.10.24 + 446: 0000000000023d98 156 FUNC GLOBAL DEFAULT 12 dbus_message_get_destination@@LIBDBUS_1_3 + 447: 00000000000219d8 288 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_basic@@LIBDBUS_1_3 + 448: 0000000000031bd4 128 FUNC GLOBAL DEFAULT 12 _dbus_list_insert_after@@LIBDBUS_PRIVATE_1.10.24 + 449: 00000000000250a4 16 FUNC GLOBAL DEFAULT 12 dbus_message_allocate_data_slot@@LIBDBUS_1_3 + 450: 0000000000018770 200 FUNC GLOBAL DEFAULT 12 dbus_connection_get_data@@LIBDBUS_1_3 + 451: 000000000001c9b8 64 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_init_types_only@@LIBDBUS_PRIVATE_1.10.24 + 452: 0000000000017ce8 448 FUNC GLOBAL DEFAULT 12 dbus_connection_register_object_path@@LIBDBUS_1_3 + 453: 0000000000031a98 140 FUNC GLOBAL DEFAULT 12 _dbus_list_prepend@@LIBDBUS_PRIVATE_1.10.24 + 454: 000000000003af2c 188 FUNC GLOBAL DEFAULT 12 _dbus_string_append_int@@LIBDBUS_PRIVATE_1.10.24 + 455: 0000000000012818 580 FUNC GLOBAL DEFAULT 12 dbus_bus_release_name@@LIBDBUS_1_3 + 456: 00000000000256a0 232 FUNC GLOBAL DEFAULT 12 dbus_message_demarshal_bytes_needed@@LIBDBUS_1_3 + 457: 000000000001b858 128 FUNC GLOBAL DEFAULT 12 _dbus_header_get_field_raw@@LIBDBUS_PRIVATE_1.10.24 + 458: 00000000000349e4 88 FUNC GLOBAL DEFAULT 12 _dbus_string_equal_c_str@@LIBDBUS_PRIVATE_1.10.24 + 459: 0000000000015fec 596 FUNC GLOBAL DEFAULT 12 dbus_connection_send_with_reply_and_block@@LIBDBUS_1_3 + 460: 0000000000014714 228 FUNC GLOBAL DEFAULT 12 dbus_connection_get_unix_user@@LIBDBUS_1_3 + 461: 000000000003afe8 188 FUNC GLOBAL DEFAULT 12 _dbus_string_append_uint@@LIBDBUS_PRIVATE_1.10.24 + 462: 00000000000156a8 652 FUNC GLOBAL DEFAULT 12 dbus_connection_send_preallocated@@LIBDBUS_1_3 + 463: 0000000000014ea4 56 FUNC GLOBAL DEFAULT 12 _dbus_connection_unref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 464: 0000000000034f1c 64 FUNC GLOBAL DEFAULT 12 _dbus_string_toupper_ascii@@LIBDBUS_PRIVATE_1.10.24 + 465: 0000000000013db0 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_is_authenticated@@LIBDBUS_1_3 + 466: 00000000000121c8 576 FUNC GLOBAL DEFAULT 12 dbus_bus_get_unix_user@@LIBDBUS_1_3 + 467: 0000000000021710 264 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_element_type@@LIBDBUS_1_3 + 468: 000000000002c964 220 FUNC GLOBAL DEFAULT 12 dbus_validate_utf8@@LIBDBUS_1_3 + 469: 000000000001f2b4 52 FUNC GLOBAL DEFAULT 12 _dbus_validate_signature@@LIBDBUS_PRIVATE_1.10.24 + 470: 000000000002fb80 128 FUNC GLOBAL DEFAULT 12 dbus_watch_set_data@@LIBDBUS_1_3 + 471: 00000000000178a8 124 FUNC GLOBAL DEFAULT 12 dbus_connection_set_route_peer_messages@@LIBDBUS_1_3 + 472: 000000000001c980 56 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_init@@LIBDBUS_PRIVATE_1.10.24 + 473: 0000000000033414 12 FUNC GLOBAL DEFAULT 12 _dbus_pipe_invalidate@@LIBDBUS_PRIVATE_1.10.24 + 474: 000000000003a21c 56 FUNC GLOBAL DEFAULT 12 _dbus_group_info_free_allocated@@LIBDBUS_PRIVATE_1.10.24 + 475: 0000000000027398 64 FUNC GLOBAL DEFAULT 12 dbus_pending_call_cancel@@LIBDBUS_1_3 + 476: 0000000000029a24 204 FUNC GLOBAL DEFAULT 12 dbus_internal_do_not_use_get_uuid@@LIBDBUS_1_3 + 477: 000000000001f094 276 FUNC GLOBAL DEFAULT 12 _dbus_validate_interface@@LIBDBUS_PRIVATE_1.10.24 + 478: 00000000000361d4 116 FUNC GLOBAL DEFAULT 12 _dbus_get_real_time@@LIBDBUS_PRIVATE_1.10.24 + 479: 0000000000031dc8 88 FUNC GLOBAL DEFAULT 12 _dbus_list_clear@@LIBDBUS_PRIVATE_1.10.24 + 480: 000000000002c1c8 172 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_recurse@@LIBDBUS_1_3 + 481: 0000000000031e20 8 FUNC GLOBAL DEFAULT 12 _dbus_list_get_first_link@@LIBDBUS_PRIVATE_1.10.24 + 482: 0000000000023c98 256 FUNC GLOBAL DEFAULT 12 dbus_message_set_destination@@LIBDBUS_1_3 + 483: 000000000001cc94 76 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_next@@LIBDBUS_PRIVATE_1.10.24 + 484: 0000000000012044 236 FUNC GLOBAL DEFAULT 12 dbus_bus_set_unique_name@@LIBDBUS_1_3 + 485: 000000000003a324 52 FUNC GLOBAL DEFAULT 12 _dbus_user_info_free_allocated@@LIBDBUS_PRIVATE_1.10.24 + 486: 00000000000191dc 68 FUNC GLOBAL DEFAULT 12 _dbus_credentials_are_empty@@LIBDBUS_PRIVATE_1.10.24 + 487: 0000000000033230 236 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_alloc@@LIBDBUS_PRIVATE_1.10.24 + 488: 000000000002f9cc 76 FUNC GLOBAL DEFAULT 12 dbus_watch_get_unix_fd@@LIBDBUS_1_3 + 489: 000000000001f254 48 FUNC GLOBAL DEFAULT 12 _dbus_validate_bus_name@@LIBDBUS_PRIVATE_1.10.24 + 490: 000000000001fa14 540 FUNC GLOBAL DEFAULT 12 dbus_message_unref@@LIBDBUS_1_3 + 491: 000000000001ecb0 216 FUNC GLOBAL DEFAULT 12 _dbus_validate_body_with_reason@@LIBDBUS_PRIVATE_1.10.24 + 492: 000000000003a6e0 48 FUNC GLOBAL DEFAULT 12 _dbus_user_database_get_uid@@LIBDBUS_PRIVATE_1.10.24 + 493: 000000000002cccc 8 FUNC GLOBAL DEFAULT 12 dbus_timeout_get_data@@LIBDBUS_1_3 + 494: 0000000000019818 72 FUNC GLOBAL DEFAULT 12 dbus_error_init@@LIBDBUS_1_3 + 495: 0000000000024c4c 140 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 496: 00000000000384b8 368 FUNC GLOBAL DEFAULT 12 _dbus_socketpair@@LIBDBUS_PRIVATE_1.10.24 + 497: 0000000000021818 204 FUNC GLOBAL DEFAULT 12 dbus_message_iter_recurse@@LIBDBUS_1_3 + 498: 0000000000019bb8 292 FUNC GLOBAL DEFAULT 12 _dbus_set_error_valist@@LIBDBUS_PRIVATE_1.10.24 + 499: 000000000001ca48 16 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_get_element_type@@LIBDBUS_PRIVATE_1.10.24 + 500: 0000000000023024 124 FUNC GLOBAL DEFAULT 12 dbus_message_set_no_reply@@LIBDBUS_1_3 + 501: 0000000000014a04 216 FUNC GLOBAL DEFAULT 12 dbus_connection_set_unix_user_function@@LIBDBUS_1_3 + 502: 0000000000025804 104 FUNC GLOBAL DEFAULT 12 dbus_message_get_allow_interactive_authorization@@LIBDBUS_1_3 + 503: 000000000001e138 20 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_write_reader@@LIBDBUS_PRIVATE_1.10.24 + 504: 000000000002fd08 60 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_remove_watch@@LIBDBUS_PRIVATE_1.10.24 + 505: 000000000001cb8c 264 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_recurse@@LIBDBUS_PRIVATE_1.10.24 + 506: 0000000000027f2c 88 FUNC GLOBAL DEFAULT 12 _dbus_server_unref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 507: 0000000000036eb4 72 FUNC GLOBAL DEFAULT 12 _dbus_fd_set_close_on_exec@@LIBDBUS_PRIVATE_1.10.24 + 508: 00000000000113ac 24 FUNC GLOBAL DEFAULT 12 _dbus_auth_delete_unused_bytes@@LIBDBUS_PRIVATE_1.10.24 + 509: 000000000002586c 152 FUNC GLOBAL DEFAULT 12 dbus_get_local_machine_id@@LIBDBUS_1_3 + 510: 000000000001ff6c 20 FUNC GLOBAL DEFAULT 12 _dbus_message_get_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 511: 000000000003acfc 28 FUNC GLOBAL DEFAULT 12 _dbus_clearenv@@LIBDBUS_PRIVATE_1.10.24 + 512: 000000000001701c 1484 FUNC GLOBAL DEFAULT 12 dbus_connection_dispatch@@LIBDBUS_1_3 + 513: 000000000002ced4 12 FUNC GLOBAL DEFAULT 12 _dbus_rmutex_unlock@@LIBDBUS_PRIVATE_1.10.24 + 514: 00000000000201c0 288 FUNC GLOBAL DEFAULT 12 dbus_message_set_reply_serial@@LIBDBUS_1_3 + 515: 0000000000031048 320 FUNC GLOBAL DEFAULT 12 _dbus_warn_check_failed@@LIBDBUS_PRIVATE_1.10.24 + 516: 00000000000273d8 124 FUNC GLOBAL DEFAULT 12 dbus_pending_call_get_completed@@LIBDBUS_1_3 + 517: 00000000000339f0 84 FUNC GLOBAL DEFAULT 12 _dbus_string_insert_byte@@LIBDBUS_PRIVATE_1.10.24 + 518: 000000000001ae2c 12 FUNC GLOBAL DEFAULT 12 _dbus_header_get_byte_order@@LIBDBUS_PRIVATE_1.10.24 + 519: 0000000000023bfc 156 FUNC GLOBAL DEFAULT 12 dbus_message_get_error_name@@LIBDBUS_1_3 + 520: 0000000000033400 20 FUNC GLOBAL DEFAULT 12 _dbus_pipe_is_stdout_or_stderr@@LIBDBUS_PRIVATE_1.10.24 + 521: 0000000000034edc 64 FUNC GLOBAL DEFAULT 12 _dbus_string_tolower_ascii@@LIBDBUS_PRIVATE_1.10.24 + 522: 000000000001d0ec 44 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_init@@LIBDBUS_PRIVATE_1.10.24 + 523: 000000000002f854 84 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_free@@LIBDBUS_PRIVATE_1.10.24 + 524: 0000000000024c3c 16 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_return_buffer@@LIBDBUS_PRIVATE_1.10.24 + 525: 000000000002bde0 12 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_get_current_type@@LIBDBUS_1_3 + 526: 0000000000012e90 248 FUNC GLOBAL DEFAULT 12 dbus_bus_add_match@@LIBDBUS_1_3 + 527: 0000000000013ec8 136 FUNC GLOBAL DEFAULT 12 dbus_connection_get_server_id@@LIBDBUS_1_3 + 528: 000000000002c124 164 FUNC GLOBAL DEFAULT 12 dbus_type_is_container@@LIBDBUS_1_3 + 529: 0000000000030638 12 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_string_key@@LIBDBUS_PRIVATE_1.10.24 + 530: 0000000000031edc 16 FUNC GLOBAL DEFAULT 12 _dbus_list_get_first@@LIBDBUS_PRIVATE_1.10.24 + 531: 0000000000021c3c 108 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_array_len@@LIBDBUS_1_3 + 532: 000000000002c318 176 FUNC GLOBAL DEFAULT 12 dbus_type_is_fixed@@LIBDBUS_1_3 + 533: 000000000002f620 12 FUNC GLOBAL DEFAULT 12 _dbus_watch_get_oom_last_time@@LIBDBUS_PRIVATE_1.10.24 + 534: 00000000000153e4 256 FUNC GLOBAL DEFAULT 12 dbus_connection_unref@@LIBDBUS_1_3 + 535: 0000000000038b7c 4 FUNC GLOBAL DEFAULT 12 _dbus_flush_caches@@LIBDBUS_PRIVATE_1.10.24 + 536: 0000000000014574 276 FUNC GLOBAL DEFAULT 12 dbus_connection_get_socket@@LIBDBUS_1_3 + 537: 0000000000018e88 64 FUNC GLOBAL DEFAULT 12 _dbus_credentials_new@@LIBDBUS_PRIVATE_1.10.24 + 538: 0000000000020a98 184 FUNC GLOBAL DEFAULT 12 dbus_message_iter_has_next@@LIBDBUS_1_3 + 539: 0000000000019cdc 324 FUNC GLOBAL DEFAULT 12 dbus_set_error@@LIBDBUS_1_3 + 540: 0000000000018188 348 FUNC GLOBAL DEFAULT 12 dbus_connection_unregister_object_path@@LIBDBUS_1_3 + 541: 0000000000019418 72 FUNC GLOBAL DEFAULT 12 _dbus_credentials_copy@@LIBDBUS_PRIVATE_1.10.24 + 542: 0000000000030954 148 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_uintptr@@LIBDBUS_PRIVATE_1.10.24 + 543: 0000000000012cb8 472 FUNC GLOBAL DEFAULT 12 dbus_bus_start_service_by_name@@LIBDBUS_1_3 + 544: 00000000000185fc 72 FUNC GLOBAL DEFAULT 12 dbus_connection_free_data_slot@@LIBDBUS_1_3 + 545: 000000000002821c 704 FUNC GLOBAL DEFAULT 12 dbus_server_listen@@LIBDBUS_1_3 + 546: 000000000002c724 288 FUNC GLOBAL DEFAULT 12 dbus_validate_error_name@@LIBDBUS_1_3 + 547: 000000000003a580 20 FUNC GLOBAL DEFAULT 12 _dbus_user_database_unlock_system@@LIBDBUS_PRIVATE_1.10.24 + 548: 0000000000035968 60 FUNC GLOBAL DEFAULT 12 _dbus_pipe_close@@LIBDBUS_PRIVATE_1.10.24 + 549: 0000000000024450 160 FUNC GLOBAL DEFAULT 12 dbus_message_get_signature@@LIBDBUS_1_3 + 550: 0000000000033f2c 180 FUNC GLOBAL DEFAULT 12 _dbus_string_append_printf@@LIBDBUS_PRIVATE_1.10.24 + 551: 0000000000025788 124 FUNC GLOBAL DEFAULT 12 dbus_message_set_allow_interactive_authorization@@LIBDBUS_1_3 + 552: 000000000002c274 164 FUNC GLOBAL DEFAULT 12 dbus_type_is_basic@@LIBDBUS_1_3 + 553: 00000000000135ec 136 FUNC GLOBAL DEFAULT 12 dbus_connection_has_messages_to_send@@LIBDBUS_1_3 + 554: 00000000000333f0 16 FUNC GLOBAL DEFAULT 12 _dbus_pipe_is_valid@@LIBDBUS_PRIVATE_1.10.24 + 555: 0000000000028718 140 FUNC GLOBAL DEFAULT 12 dbus_server_get_is_connected@@LIBDBUS_1_3 + 556: 0000000000013360 48 FUNC GLOBAL DEFAULT 12 _dbus_connection_lock@@LIBDBUS_PRIVATE_1.10.24 + 557: 000000000001911c 192 FUNC GLOBAL DEFAULT 12 _dbus_credentials_are_superset@@LIBDBUS_PRIVATE_1.10.24 + 558: 0000000000013e3c 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_is_anonymous@@LIBDBUS_1_3 + 559: 000000000001160c 32 FUNC GLOBAL DEFAULT 12 _dbus_auth_set_context@@LIBDBUS_PRIVATE_1.10.24 + 560: 0000000000012130 152 FUNC GLOBAL DEFAULT 12 dbus_bus_get_unique_name@@LIBDBUS_1_3 + 561: 0000000000036158 124 FUNC GLOBAL DEFAULT 12 _dbus_get_monotonic_time@@LIBDBUS_PRIVATE_1.10.24 + 562: 000000000003471c 192 FUNC GLOBAL DEFAULT 12 _dbus_string_pop_line@@LIBDBUS_PRIVATE_1.10.24 + 563: 000000000001d658 160 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_recurse@@LIBDBUS_PRIVATE_1.10.24 + 564: 00000000000237b4 156 FUNC GLOBAL DEFAULT 12 dbus_message_get_interface@@LIBDBUS_1_3 + 565: 0000000000017798 144 FUNC GLOBAL DEFAULT 12 dbus_connection_read_write@@LIBDBUS_1_3 + 566: 0000000000020954 324 FUNC GLOBAL DEFAULT 12 dbus_message_iter_init@@LIBDBUS_1_3 + 567: 00000000000218e4 244 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_signature@@LIBDBUS_1_3 + 568: 000000000000e9fc 8 FUNC GLOBAL DEFAULT 12 dbus_address_entry_get_method@@LIBDBUS_1_3 + 569: 0000000000014688 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_unix_fd@@LIBDBUS_1_3 + 570: 00000000000288f0 184 FUNC GLOBAL DEFAULT 12 dbus_server_set_new_connection_function@@LIBDBUS_1_3 + 571: 00000000000363d0 40 FUNC GLOBAL DEFAULT 12 _dbus_strerror@@LIBDBUS_PRIVATE_1.10.24 + 572: 0000000000018f6c 12 FUNC GLOBAL DEFAULT 12 _dbus_credentials_add_pid@@LIBDBUS_PRIVATE_1.10.24 + 573: 0000000000019860 132 FUNC GLOBAL DEFAULT 12 dbus_error_free@@LIBDBUS_1_3 + 574: 00000000000147f8 228 FUNC GLOBAL DEFAULT 12 dbus_connection_get_unix_process_id@@LIBDBUS_1_3 + 575: 0000000000027890 212 FUNC GLOBAL DEFAULT 12 dbus_pending_call_set_data@@LIBDBUS_1_3 + 576: 000000000002042c 524 FUNC GLOBAL DEFAULT 12 dbus_message_new_method_call@@LIBDBUS_1_3 + 577: 0000000000018f78 12 FUNC GLOBAL DEFAULT 12 _dbus_credentials_add_unix_uid@@LIBDBUS_PRIVATE_1.10.24 + 578: 0000000000020b50 184 FUNC GLOBAL DEFAULT 12 dbus_message_iter_next@@LIBDBUS_1_3 + 579: 00000000000202e0 160 FUNC GLOBAL DEFAULT 12 dbus_message_get_reply_serial@@LIBDBUS_1_3 + 580: 000000000001df20 148 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_delete@@LIBDBUS_PRIVATE_1.10.24 + 581: 0000000000034054 76 FUNC GLOBAL DEFAULT 12 _dbus_string_append_byte@@LIBDBUS_PRIVATE_1.10.24 + 582: 000000000003073c 44 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_lookup_uintptr@@LIBDBUS_PRIVATE_1.10.24 + 583: 000000000001f284 48 FUNC GLOBAL DEFAULT 12 _dbus_validate_bus_namespace@@LIBDBUS_PRIVATE_1.10.24 + 584: 000000000003b3c8 168 FUNC GLOBAL DEFAULT 12 _dbus_error_from_errno@@LIBDBUS_PRIVATE_1.10.24 + 585: 0000000000032ff8 12 FUNC GLOBAL DEFAULT 12 dbus_free@@LIBDBUS_1_3 + 586: 00000000000305c8 12 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_value@@LIBDBUS_PRIVATE_1.10.24 + 587: 00000000000312ec 72 FUNC GLOBAL DEFAULT 12 _dbus_string_array_contains@@LIBDBUS_PRIVATE_1.10.24 + 588: 0000000000031f5c 56 FUNC GLOBAL DEFAULT 12 _dbus_list_pop_last@@LIBDBUS_PRIVATE_1.10.24 + 589: 000000000002757c 108 FUNC GLOBAL DEFAULT 12 dbus_pending_call_allocate_data_slot@@LIBDBUS_1_3 + 590: 0000000000031188 80 FUNC GLOBAL DEFAULT 12 _dbus_strdup@@LIBDBUS_PRIVATE_1.10.24 + 591: 0000000000023e34 256 FUNC GLOBAL DEFAULT 12 dbus_message_set_sender@@LIBDBUS_1_3 + 592: 0000000000023f34 156 FUNC GLOBAL DEFAULT 12 dbus_message_get_sender@@LIBDBUS_1_3 + 593: 0000000000034a3c 88 FUNC GLOBAL DEFAULT 12 _dbus_string_starts_with_c_str@@LIBDBUS_PRIVATE_1.10.24 + 594: 0000000000031cac 68 FUNC GLOBAL DEFAULT 12 _dbus_list_insert_after_link@@LIBDBUS_PRIVATE_1.10.24 + 595: 000000000003ac60 56 FUNC GLOBAL DEFAULT 12 _dbus_getenv@@LIBDBUS_PRIVATE_1.10.24 + 596: 000000000002cebc 12 FUNC GLOBAL DEFAULT 12 _dbus_rmutex_lock@@LIBDBUS_PRIVATE_1.10.24 + 597: 000000000002502c 8 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_pop_message@@LIBDBUS_PRIVATE_1.10.24 + 598: 0000000000024aec 164 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_new@@LIBDBUS_PRIVATE_1.10.24 + 599: 0000000000036030 40 FUNC GLOBAL DEFAULT 12 _dbus_append_user_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 600: 000000000002fc70 152 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_add_watch@@LIBDBUS_PRIVATE_1.10.24 + 601: 000000000001f1a8 168 FUNC GLOBAL DEFAULT 12 _dbus_validate_member@@LIBDBUS_PRIVATE_1.10.24 + 602: 000000000003ad18 532 FUNC GLOBAL DEFAULT 12 _dbus_split_paths_and_append@@LIBDBUS_PRIVATE_1.10.24 + 603: 0000000000016560 144 FUNC GLOBAL DEFAULT 12 dbus_connection_pop_message@@LIBDBUS_1_3 + 604: 0000000000014adc 96 FUNC GLOBAL DEFAULT 12 _dbus_connection_get_linux_security_label@@LIBDBUS_PRIVATE_1.10.24 + 605: 000000000003a980 124 FUNC GLOBAL DEFAULT 12 _dbus_homedir_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 606: 0000000000020380 172 FUNC GLOBAL DEFAULT 12 dbus_message_new@@LIBDBUS_1_3 + 607: 00000000000287a4 144 FUNC GLOBAL DEFAULT 12 dbus_server_get_address@@LIBDBUS_1_3 + 608: 00000000000182e4 360 FUNC GLOBAL DEFAULT 12 dbus_connection_get_object_path_data@@LIBDBUS_1_3 + 609: 00000000000249a8 308 FUNC GLOBAL DEFAULT 12 dbus_set_error_from_message@@LIBDBUS_1_3 + 610: 0000000000038d70 352 FUNC GLOBAL DEFAULT 12 _dbus_close_all@@LIBDBUS_PRIVATE_1.10.24 + 611: 0000000000030e4c 8 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_get_n_entries@@LIBDBUS_PRIVATE_1.10.24 + 612: 000000000002be98 108 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_get_element_type@@LIBDBUS_1_3 + 613: 0000000000030620 12 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_int_key@@LIBDBUS_PRIVATE_1.10.24 + 614: 000000000002fb24 92 FUNC GLOBAL DEFAULT 12 dbus_watch_get_data@@LIBDBUS_1_3 + 615: 000000000002c844 288 FUNC GLOBAL DEFAULT 12 dbus_validate_bus_name@@LIBDBUS_1_3 + 616: 000000000003a8c8 60 FUNC GLOBAL DEFAULT 12 _dbus_user_database_get_system@@LIBDBUS_PRIVATE_1.10.24 + 617: 0000000000031b60 72 FUNC GLOBAL DEFAULT 12 _dbus_list_prepend_link@@LIBDBUS_PRIVATE_1.10.24 + 618: 00000000000275e8 124 FUNC GLOBAL DEFAULT 12 dbus_pending_call_free_data_slot@@LIBDBUS_1_3 + 619: 000000000001194c 612 FUNC GLOBAL DEFAULT 12 dbus_bus_register@@LIBDBUS_1_3 + 620: 000000000002c4e4 288 FUNC GLOBAL DEFAULT 12 dbus_validate_interface@@LIBDBUS_1_3 + 621: 00000000000373e0 4 FUNC GLOBAL DEFAULT 12 _dbus_close_socket@@LIBDBUS_PRIVATE_1.10.24 + 622: 000000000003a54c 52 FUNC GLOBAL DEFAULT 12 _dbus_user_database_lock_system@@LIBDBUS_PRIVATE_1.10.24 + 623: 0000000000024adc 16 FUNC GLOBAL DEFAULT 12 dbus_message_contains_unix_fds@@LIBDBUS_1_3 + 624: 0000000000028d6c 72 FUNC GLOBAL DEFAULT 12 dbus_server_free_data_slot@@LIBDBUS_1_3 + 625: 000000000002fa68 80 FUNC GLOBAL DEFAULT 12 dbus_watch_get_socket@@LIBDBUS_1_3 + 626: 00000000000333e0 8 FUNC GLOBAL DEFAULT 12 _dbus_pipe_init@@LIBDBUS_PRIVATE_1.10.24 + 627: 000000000002cf4c 240 FUNC GLOBAL DEFAULT 12 dbus_threads_init@@LIBDBUS_1_3 + 628: 0000000000020120 60 FUNC GLOBAL DEFAULT 12 dbus_message_lock@@LIBDBUS_1_3 + 629: 0000000000018f84 72 FUNC GLOBAL DEFAULT 12 _dbus_credentials_add_windows_sid@@LIBDBUS_PRIVATE_1.10.24 + 630: 00000000000383f8 156 FUNC GLOBAL DEFAULT 12 _dbus_dup@@LIBDBUS_PRIVATE_1.10.24 + 631: 00000000000233f8 256 FUNC GLOBAL DEFAULT 12 dbus_message_set_path@@LIBDBUS_1_3 + 632: 000000000003588c 116 FUNC GLOBAL DEFAULT 12 _dbus_delete_file@@LIBDBUS_PRIVATE_1.10.24 + 633: 000000000003084c 112 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_remove_uintptr@@LIBDBUS_PRIVATE_1.10.24 + 634: 00000000000236b4 256 FUNC GLOBAL DEFAULT 12 dbus_message_set_interface@@LIBDBUS_1_3 + 635: 000000000002bdcc 20 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_init@@LIBDBUS_1_3 + 636: 00000000000189dc 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_message_unix_fds@@LIBDBUS_1_3 + 637: 00000000000188d0 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_message_size@@LIBDBUS_1_3 + 638: 000000000003ac2c 52 FUNC GLOBAL DEFAULT 12 dbus_setenv@@LIBDBUS_1_3 + 639: 00000000000248ec 188 FUNC GLOBAL DEFAULT 12 dbus_message_has_signature@@LIBDBUS_1_3 + 640: 0000000000033aec 96 FUNC GLOBAL DEFAULT 12 _dbus_string_copy_data@@LIBDBUS_PRIVATE_1.10.24 + 641: 0000000000018dfc 140 FUNC GLOBAL DEFAULT 12 dbus_connection_get_outgoing_unix_fds@@LIBDBUS_1_3 + 642: 000000000003aaa4 56 FUNC GLOBAL DEFAULT 12 _dbus_user_database_get_username@@LIBDBUS_PRIVATE_1.10.24 + 643: 0000000000035fb0 24 FUNC GLOBAL DEFAULT 12 _dbus_getuid@@LIBDBUS_PRIVATE_1.10.24 + 644: 000000000002015c 100 FUNC GLOBAL DEFAULT 12 dbus_message_get_serial@@LIBDBUS_1_3 + 645: 000000000001ff80 116 FUNC GLOBAL DEFAULT 12 dbus_message_set_serial@@LIBDBUS_1_3 + 646: 000000000002c0f0 52 FUNC GLOBAL DEFAULT 12 dbus_type_is_valid@@LIBDBUS_1_3 + 647: 000000000002329c 104 FUNC GLOBAL DEFAULT 12 dbus_message_get_no_reply@@LIBDBUS_1_3 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdl.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdl.so.2.txt new file mode 100644 index 000000000000..0006e16ac56a --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdl.so.2.txt @@ -0,0 +1,47 @@ +Library: /lib64/libdl.so.2 +Package: glibc-2.17-326.el7_9.aarch64 + + +Symbol table '.dynsym' contains 41 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000cc0 0 SECTION LOCAL DEFAULT 11 + 2: 000000000001fd38 0 SECTION LOCAL DEFAULT 21 + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_key_create + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_getspecific + 6: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (4) + 7: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _libc_intl_domainname@GLIBC_2.17 (4) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (4) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __asprintf@GLIBC_2.17 (4) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (4) + 11: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 12: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.17 (4) + 13: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (5) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (4) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (4) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_vsym@GLIBC_PRIVATE (6) + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_once + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_addr@GLIBC_PRIVATE (6) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (4) + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.17 (4) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_sym@GLIBC_PRIVATE (6) + 22: 0000000000000000 0 OBJECT WEAK DEFAULT UND environ@GLIBC_2.17 (4) + 23: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_rtld_di_serinfo@GLIBC_PRIVATE (5) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __dcgettext@GLIBC_2.17 (4) + 26: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 27: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_setspecific + 28: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global@GLIBC_PRIVATE (5) + 29: 0000000000001100 140 FUNC GLOBAL DEFAULT 13 dlsym@@GLIBC_2.17 + 30: 00000000000016c8 48 FUNC GLOBAL DEFAULT 13 dladdr@@GLIBC_2.17 + 31: 00000000000016f8 100 FUNC GLOBAL DEFAULT 13 dladdr1@@GLIBC_2.17 + 32: 00000000000019d0 96 FUNC GLOBAL DEFAULT 13 dlmopen@@GLIBC_2.17 + 33: 00000000000011c0 140 FUNC WEAK DEFAULT 13 dlvsym@@GLIBC_2.17 + 34: 0000000000001398 508 FUNC GLOBAL DEFAULT 13 dlerror@@GLIBC_2.17 + 35: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 36: 0000000000001090 64 FUNC GLOBAL DEFAULT 13 dlclose@@GLIBC_2.17 + 37: 000000000000188c 92 FUNC GLOBAL DEFAULT 13 dlinfo@@GLIBC_2.17 + 38: 0000000000001014 92 FUNC GLOBAL DEFAULT 13 dlopen@@GLIBC_2.17 + 39: 00000000000200c0 8 OBJECT GLOBAL DEFAULT 26 _dlfcn_hook@@GLIBC_PRIVATE + 40: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdrm.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdrm.so.2.txt new file mode 100644 index 000000000000..21ae3fedcc98 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libdrm.so.2.txt @@ -0,0 +1,265 @@ +Library: /lib64/libdrm.so.2 +Package: libdrm-2.4.97-2.el7.aarch64 + + +Symbol table '.dynsym' contains 259 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000003c50 0 SECTION LOCAL DEFAULT 9 + 2: 000000000002fd80 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (2) + 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vasprintf_chk@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpagesize@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fscanf@GLIBC_2.17 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 36: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 37: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.17 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.17 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND log2@GLIBC_2.17 (4) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (2) + 49: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND usleep@GLIBC_2.17 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realpath@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 55: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (2) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getdelim@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.17 (2) + 61: 0000000000009e38 136 FUNC GLOBAL DEFAULT 11 drmSLCreate + 62: 0000000000008c88 8 FUNC GLOBAL DEFAULT 11 drmGetRenderDeviceNameFromFd + 63: 00000000000073b0 104 FUNC GLOBAL DEFAULT 11 drmAgpSize + 64: 00000000000099b8 40 FUNC GLOBAL DEFAULT 11 drmHashCreate + 65: 000000000000bdc0 116 FUNC GLOBAL DEFAULT 11 drmModePageFlipTarget + 66: 000000000000c68c 60 FUNC GLOBAL DEFAULT 11 drmModeAtomicFree + 67: 000000000000aa04 12 FUNC GLOBAL DEFAULT 11 drmModeFreeCrtc + 68: 0000000000007418 104 FUNC GLOBAL DEFAULT 11 drmAgpMemoryUsed + 69: 0000000000009634 100 FUNC GLOBAL DEFAULT 11 drmSyncobjImportSyncFile + 70: 000000000000b744 64 FUNC GLOBAL DEFAULT 11 drmModeFreeProperty + 71: 0000000000007558 112 FUNC GLOBAL DEFAULT 11 drmAgpDeviceId + 72: 000000000000b028 260 FUNC GLOBAL DEFAULT 11 drmModeGetCrtc + 73: 0000000000009f68 408 FUNC GLOBAL DEFAULT 11 drmSLInsert + 74: 000000000000c378 64 FUNC GLOBAL DEFAULT 11 drmModeFreeObjectProperties + 75: 0000000000009acc 188 FUNC GLOBAL DEFAULT 11 drmHashInsert + 76: 000000000000cad4 152 FUNC GLOBAL DEFAULT 11 drmModeCreateLease + 77: 000000000000b414 8 FUNC GLOBAL DEFAULT 11 drmModeGetConnector + 78: 0000000000006bf8 132 FUNC GLOBAL DEFAULT 11 drmGetContextFlags + 79: 00000000000089c4 12 FUNC GLOBAL DEFAULT 11 drmSetMaster + 80: 0000000000006080 116 FUNC GLOBAL DEFAULT 11 drmRmMap + 81: 000000000000cb6c 240 FUNC GLOBAL DEFAULT 11 drmModeListLessees + 82: 0000000000009ec0 168 FUNC GLOBAL DEFAULT 11 drmSLDestroy + 83: 000000000000649c 8 FUNC GLOBAL DEFAULT 11 drmUnmap + 84: 000000000000be34 164 FUNC GLOBAL DEFAULT 11 drmModeSetPlane + 85: 0000000000005d74 84 FUNC GLOBAL DEFAULT 11 drmSetClientCap + 86: 0000000000006f48 44 FUNC GLOBAL DEFAULT 11 drmAgpAcquire + 87: 0000000000005818 16 FUNC GLOBAL DEFAULT 11 drmGetHashTable + 88: 000000000000bbb8 404 FUNC GLOBAL DEFAULT 11 drmHandleEvent + 89: 0000000000003c50 0 FUNC GLOBAL DEFAULT 9 _init + 90: 00000000000086f0 56 FUNC GLOBAL DEFAULT 11 drmCommandRead + 91: 00000000000064a4 296 FUNC GLOBAL DEFAULT 11 drmGetBufInfo + 92: 000000000000a414 44 FUNC GLOBAL DEFAULT 11 drmSLFirst + 93: 0000000000005f08 120 FUNC GLOBAL DEFAULT 11 drmGetMagic + 94: 0000000000006770 236 FUNC GLOBAL DEFAULT 11 drmDMA + 95: 000000000000a100 364 FUNC GLOBAL DEFAULT 11 drmSLDelete + 96: 0000000000007480 104 FUNC GLOBAL DEFAULT 11 drmAgpMemoryAvail + 97: 0000000000009b88 140 FUNC GLOBAL DEFAULT 11 drmHashDelete + 98: 0000000000009d54 68 FUNC GLOBAL DEFAULT 11 drmRandom + 99: 000000000000c5d0 12 FUNC GLOBAL DEFAULT 11 drmModeAtomicSetCursor + 100: 000000000000c040 56 FUNC GLOBAL DEFAULT 11 drmModeFreePlane + 101: 0000000000009554 116 FUNC GLOBAL DEFAULT 11 drmSyncobjHandleToFD + 102: 000000000000b54c 504 FUNC GLOBAL DEFAULT 11 drmModeGetProperty + 103: 000000000000935c 316 FUNC GLOBAL DEFAULT 11 drmGetDeviceNameFromFd2 + 104: 0000000000006fa0 100 FUNC GLOBAL DEFAULT 11 drmAgpEnable + 105: 0000000000006d58 100 FUNC GLOBAL DEFAULT 11 drmDestroyDrawable + 106: 0000000000008c90 188 FUNC GLOBAL DEFAULT 11 drmDevicesEqual + 107: 000000000000aea0 48 FUNC GLOBAL DEFAULT 11 drmModeAddFB2 + 108: 000000000000c1a4 56 FUNC GLOBAL DEFAULT 11 drmModeFreePlaneResources + 109: 0000000000007be4 108 FUNC GLOBAL DEFAULT 11 drmGetContextTag + 110: 000000000000aa60 4 FUNC GLOBAL DEFAULT 11 drmModeFreeEncoder + 111: 000000000000cd4c 124 FUNC GLOBAL DEFAULT 11 drmModeRevokeLease + 112: 0000000000005fe4 156 FUNC GLOBAL DEFAULT 11 drmAddMap + 113: 0000000000008ac0 228 FUNC GLOBAL DEFAULT 11 drmGetNodeTypeFromFd + 114: 0000000000007adc 124 FUNC GLOBAL DEFAULT 11 drmGetInterruptFromBusID + 115: 0000000000006928 84 FUNC GLOBAL DEFAULT 11 drmUnlock + 116: 00000000000059c0 132 FUNC GLOBAL DEFAULT 11 drmOpenControl + 117: 000000000000685c 204 FUNC GLOBAL DEFAULT 11 drmGetLock + 118: 00000000000074e8 112 FUNC GLOBAL DEFAULT 11 drmAgpVendorId + 119: 0000000000007268 120 FUNC GLOBAL DEFAULT 11 drmAgpVersionMinor + 120: 0000000000007ee0 816 FUNC GLOBAL DEFAULT 11 drmGetStats + 121: 000000000000bed8 360 FUNC GLOBAL DEFAULT 11 drmModeGetPlane + 122: 0000000000007808 312 FUNC GLOBAL DEFAULT 11 drmError + 123: 000000000000c078 300 FUNC GLOBAL DEFAULT 11 drmModeGetPlaneResources + 124: 000000000000b274 132 FUNC GLOBAL DEFAULT 11 drmModeSetCursor2 + 125: 00000000000072e0 104 FUNC GLOBAL DEFAULT 11 drmAgpGetMode + 126: 000000000000ad2c 156 FUNC GLOBAL DEFAULT 11 drmModeAddFB + 127: 000000000000b12c 200 FUNC GLOBAL DEFAULT 11 drmModeSetCrtc + 128: 0000000000009c14 116 FUNC GLOBAL DEFAULT 11 drmHashNext + 129: 00000000000097a4 92 FUNC GLOBAL DEFAULT 11 drmSyncobjReset + 130: 0000000000009714 144 FUNC GLOBAL DEFAULT 11 drmSyncobjWait + 131: 000000000000a26c 124 FUNC GLOBAL DEFAULT 11 drmSLLookup + 132: 0000000000005dc8 4 FUNC GLOBAL DEFAULT 11 drmFreeBusid + 133: 0000000000009a68 100 FUNC GLOBAL DEFAULT 11 drmHashLookup + 134: 00000000000054e8 16 FUNC GLOBAL DEFAULT 11 drmSetServerInfo + 135: 0000000000006dbc 116 FUNC GLOBAL DEFAULT 11 drmUpdateDrawableInfo + 136: 0000000000005828 12 FUNC GLOBAL DEFAULT 11 drmMalloc + 137: 000000000000aa10 80 FUNC GLOBAL DEFAULT 11 drmModeFreeConnector + 138: 00000000000066fc 116 FUNC GLOBAL DEFAULT 11 drmUnmapBufs + 139: 000000000000c9d0 160 FUNC GLOBAL DEFAULT 11 drmModeCreatePropertyBlob + 140: 000000000000b784 252 FUNC GLOBAL DEFAULT 11 drmModeGetPropertyBlob + 141: 0000000000005f80 100 FUNC GLOBAL DEFAULT 11 drmAuthMagic + 142: 0000000000009498 104 FUNC GLOBAL DEFAULT 11 drmSyncobjCreate + 143: 00000000000075c8 128 FUNC GLOBAL DEFAULT 11 drmScatterGatherAlloc + 144: 000000000000bd4c 116 FUNC GLOBAL DEFAULT 11 drmModePageFlip + 145: 00000000000054f8 392 FUNC GLOBAL DEFAULT 11 drmMsg + 146: 0000000000007348 104 FUNC GLOBAL DEFAULT 11 drmAgpBase + 147: 0000000000008ba4 116 FUNC GLOBAL DEFAULT 11 drmPrimeHandleToFD + 148: 0000000000005c7c 96 FUNC GLOBAL DEFAULT 11 drmAvailable + 149: 00000000000089dc 228 FUNC GLOBAL DEFAULT 11 drmGetDeviceNameFromFd + 150: 00000000000063e4 184 FUNC GLOBAL DEFAULT 11 drmMap + 151: 00000000000099e0 136 FUNC GLOBAL DEFAULT 11 drmHashDestroy + 152: 000000000000b880 56 FUNC GLOBAL DEFAULT 11 drmModeFreePropertyBlob + 153: 0000000000009698 124 FUNC GLOBAL DEFAULT 11 drmSyncobjExportSyncFile + 154: 000000000000b2f8 124 FUNC GLOBAL DEFAULT 11 drmModeMoveCursor + 155: 000000000000afb8 112 FUNC GLOBAL DEFAULT 11 drmModeDirtyFB + 156: 00000000000302a0 0 NOTYPE GLOBAL DEFAULT 22 _edata + 157: 0000000000009d3c 24 FUNC GLOBAL DEFAULT 11 drmRandomDestroy + 158: 000000000000aed0 52 FUNC GLOBAL DEFAULT 11 drmModeRmFB + 159: 000000000000a9f8 12 FUNC GLOBAL DEFAULT 11 drmModeFreeFB + 160: 0000000000006ce4 116 FUNC GLOBAL DEFAULT 11 drmCreateDrawable + 161: 000000000000b374 160 FUNC GLOBAL DEFAULT 11 drmModeGetEncoder + 162: 0000000000006c7c 104 FUNC GLOBAL DEFAULT 11 drmDestroyContext + 163: 0000000000005d08 108 FUNC GLOBAL DEFAULT 11 drmGetCap + 164: 0000000000005880 108 FUNC GLOBAL DEFAULT 11 drmIoctl + 165: 0000000000005ac8 72 FUNC GLOBAL DEFAULT 11 drmFreeVersion + 166: 0000000000008c80 8 FUNC GLOBAL DEFAULT 11 drmGetPrimaryDeviceNameFromFd + 167: 0000000000007c50 116 FUNC GLOBAL DEFAULT 11 drmAddContextPrivateMapping + 168: 000000000000a3c8 76 FUNC GLOBAL DEFAULT 11 drmSLNext + 169: 000000000000cc5c 240 FUNC GLOBAL DEFAULT 11 drmModeGetLease + 170: 0000000000007bc0 36 FUNC GLOBAL DEFAULT 11 drmDelContextTag + 171: 0000000000009c88 44 FUNC GLOBAL DEFAULT 11 drmHashFirst + 172: 000000000000b4b8 148 FUNC GLOBAL DEFAULT 11 drmModeDetachMode + 173: 00000000000060f4 136 FUNC GLOBAL DEFAULT 11 drmAddBufs + 174: 000000000000a2e8 224 FUNC GLOBAL DEFAULT 11 drmSLLookupNeighbors + 175: 0000000000005b10 364 FUNC GLOBAL DEFAULT 11 drmGetVersion + 176: 000000000000b424 148 FUNC GLOBAL DEFAULT 11 drmModeAttachMode + 177: 0000000000007b58 104 FUNC GLOBAL DEFAULT 11 drmAddContextTag + 178: 0000000000007004 160 FUNC GLOBAL DEFAULT 11 drmAgpAlloc + 179: 000000000000af04 180 FUNC GLOBAL DEFAULT 11 drmModeGetFB + 180: 0000000000008f6c 584 FUNC GLOBAL DEFAULT 11 drmGetDevice2 + 181: 0000000000005cdc 44 FUNC GLOBAL DEFAULT 11 drmGetLibVersion + 182: 00000000000076b4 340 FUNC GLOBAL DEFAULT 11 drmWaitVBlank + 183: 00000000000091c0 392 FUNC GLOBAL DEFAULT 11 drmGetDevices2 + 184: 0000000000007648 108 FUNC GLOBAL DEFAULT 11 drmScatterGatherFree + 185: 0000000000006f74 44 FUNC GLOBAL DEFAULT 11 drmAgpRelease + 186: 000000000000b924 428 FUNC GLOBAL DEFAULT 11 drmCheckModesettingSupported + 187: 0000000000008c18 104 FUNC GLOBAL DEFAULT 11 drmPrimeFDToHandle + 188: 00000000000088f8 204 FUNC GLOBAL DEFAULT 11 drmCloseOnce + 189: 000000000000c1dc 412 FUNC GLOBAL DEFAULT 11 drmModeObjectGetProperties + 190: 000000000000697c 280 FUNC GLOBAL DEFAULT 11 drmGetReservedContextList + 191: 000000000000617c 336 FUNC GLOBAL DEFAULT 11 drmMarkBufs + 192: 0000000000030c58 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 193: 000000000000c5bc 20 FUNC GLOBAL DEFAULT 11 drmModeAtomicGetCursor + 194: 0000000000006e30 156 FUNC GLOBAL DEFAULT 11 drmCrtcGetSequence + 195: 0000000000006a94 4 FUNC GLOBAL DEFAULT 11 drmFreeReservedContextList + 196: 000000000000c5dc 176 FUNC GLOBAL DEFAULT 11 drmModeAtomicAddProperty + 197: 0000000000007940 108 FUNC GLOBAL DEFAULT 11 drmCtlInstHandler + 198: 00000000000089d0 12 FUNC GLOBAL DEFAULT 11 drmDropMaster + 199: 000000000000c4fc 192 FUNC GLOBAL DEFAULT 11 drmModeAtomicMerge + 200: 0000000000005e84 132 FUNC GLOBAL DEFAULT 11 drmSetBusid + 201: 000000000000ca70 100 FUNC GLOBAL DEFAULT 11 drmModeDestroyPropertyBlob + 202: 000000000000adc8 216 FUNC GLOBAL DEFAULT 11 drmModeAddFB2WithModifiers + 203: 000000000000bb44 116 FUNC GLOBAL DEFAULT 11 drmModeCrtcSetGamma + 204: 0000000000009cb4 136 FUNC GLOBAL DEFAULT 11 drmRandomCreate + 205: 00000000000062cc 112 FUNC GLOBAL DEFAULT 11 drmFreeBufs + 206: 0000000000007184 108 FUNC GLOBAL DEFAULT 11 drmAgpUnbind + 207: 000000000000b1f4 128 FUNC GLOBAL DEFAULT 11 drmModeSetCursor + 208: 0000000000007e20 192 FUNC GLOBAL DEFAULT 11 drmGetClient + 209: 00000000000070a4 116 FUNC GLOBAL DEFAULT 11 drmAgpFree + 210: 000000000000a99c 12 FUNC GLOBAL DEFAULT 11 drmModeFreeModeInfo + 211: 00000000000086b4 8 FUNC GLOBAL DEFAULT 11 drmOpen + 212: 0000000000008210 172 FUNC GLOBAL DEFAULT 11 drmSetInterfaceVersion + 213: 000000000000c6c8 776 FUNC GLOBAL DEFAULT 11 drmModeAtomicCommit + 214: 0000000000009d98 48 FUNC GLOBAL DEFAULT 11 drmRandomDouble + 215: 00000000000088e8 16 FUNC GLOBAL DEFAULT 11 drmOpenOnce + 216: 000000000000b41c 8 FUNC GLOBAL DEFAULT 11 drmModeGetConnectorCurrent + 217: 0000000000005a44 132 FUNC GLOBAL DEFAULT 11 drmOpenRender + 218: 0000000000008798 336 FUNC GLOBAL DEFAULT 11 drmOpenOnceWithType + 219: 0000000000007118 108 FUNC GLOBAL DEFAULT 11 drmAgpBind + 220: 0000000000007d4c 212 FUNC GLOBAL DEFAULT 11 drmGetMap + 221: 00000000000302a0 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 222: 00000000000071f0 120 FUNC GLOBAL DEFAULT 11 drmAgpVersionMajor + 223: 00000000000082bc 1016 FUNC GLOBAL DEFAULT 11 drmOpenWithType + 224: 0000000000008d4c 216 FUNC GLOBAL DEFAULT 11 drmFreeDevice + 225: 00000000000065cc 304 FUNC GLOBAL DEFAULT 11 drmMapBufs + 226: 00000000000302a0 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 227: 0000000000008728 56 FUNC GLOBAL DEFAULT 11 drmCommandWrite + 228: 0000000000006b74 132 FUNC GLOBAL DEFAULT 11 drmSetContextFlags + 229: 0000000000007a18 196 FUNC GLOBAL DEFAULT 11 drmFinish + 230: 0000000000030c58 0 NOTYPE GLOBAL DEFAULT 23 _end + 231: 00000000000058ec 212 FUNC GLOBAL DEFAULT 11 drmGetEntry + 232: 000000000000a9a8 80 FUNC GLOBAL DEFAULT 11 drmModeFreeResources + 233: 0000000000007cc4 136 FUNC GLOBAL DEFAULT 11 drmGetContextPrivateMapping + 234: 00000000000095c8 108 FUNC GLOBAL DEFAULT 11 drmSyncobjFDToHandle + 235: 00000000000086bc 52 FUNC GLOBAL DEFAULT 11 drmCommandNone + 236: 0000000000030c58 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 237: 00000000000091b4 12 FUNC GLOBAL DEFAULT 11 drmGetDevice + 238: 0000000000009500 84 FUNC GLOBAL DEFAULT 11 drmSyncobjDestroy + 239: 0000000000006a98 116 FUNC GLOBAL DEFAULT 11 drmCreateContext + 240: 0000000000008f1c 80 FUNC GLOBAL DEFAULT 11 drmFreeDevices + 241: 0000000000009800 92 FUNC GLOBAL DEFAULT 11 drmSyncobjSignal + 242: 0000000000006b0c 104 FUNC GLOBAL DEFAULT 11 drmSwitchToContext + 243: 000000000000c454 168 FUNC GLOBAL DEFAULT 11 drmModeAtomicDuplicate + 244: 0000000000008760 56 FUNC GLOBAL DEFAULT 11 drmCommandWriteRead + 245: 0000000000030c58 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 246: 000000000000a440 368 FUNC GLOBAL DEFAULT 11 drmSLDump + 247: 0000000000005dcc 184 FUNC GLOBAL DEFAULT 11 drmGetBusid + 248: 0000000000006ecc 124 FUNC GLOBAL DEFAULT 11 drmCrtcQueueSequence + 249: 000000000000bad0 116 FUNC GLOBAL DEFAULT 11 drmModeCrtcGetGamma + 250: 0000000000009348 20 FUNC GLOBAL DEFAULT 11 drmGetDevices + 251: 000000000000b8b8 108 FUNC GLOBAL DEFAULT 11 drmModeConnectorSetProperty + 252: 000000000000aa64 712 FUNC GLOBAL DEFAULT 11 drmModeGetResources + 253: 000000000000c3b8 116 FUNC GLOBAL DEFAULT 11 drmModeObjectSetProperty + 254: 0000000000005834 4 FUNC GLOBAL DEFAULT 11 drmFree + 255: 000000000000cdc8 0 FUNC GLOBAL DEFAULT 12 _fini + 256: 00000000000079ac 108 FUNC GLOBAL DEFAULT 11 drmCtlUninstHandler + 257: 000000000000c42c 40 FUNC GLOBAL DEFAULT 11 drmModeAtomicAlloc + 258: 000000000000633c 168 FUNC GLOBAL DEFAULT 11 drmClose diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libexpat.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libexpat.so.1.txt new file mode 100644 index 000000000000..2e05b31ab86c --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libexpat.so.1.txt @@ -0,0 +1,117 @@ +Library: /lib64/libexpat.so.1 +Package: expat-2.1.0-15.el7_9.aarch64 + + +Symbol table '.dynsym' contains 111 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000003d48 0 SECTION LOCAL DEFAULT 9 + 2: 000000000003e0f0 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 6: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rand@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND srand@GLIBC_2.17 (2) + 19: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (2) + 21: 0000000000018c68 700 FUNC GLOBAL DEFAULT 11 XmlInitUnknownEncoding + 22: 000000000000cd88 28 FUNC GLOBAL DEFAULT 11 XML_FreeContentModel + 23: 000000000000c454 8 FUNC GLOBAL DEFAULT 11 XML_SetEndDoctypeDeclHandler + 24: 000000000000cc24 64 FUNC GLOBAL DEFAULT 11 XML_GetParsingStatus + 25: 0000000000018f34 16 FUNC GLOBAL DEFAULT 11 XmlGetUtf16InternalEncoding + 26: 000000000000cdc0 32 FUNC GLOBAL DEFAULT 11 XML_MemRealloc + 27: 0000000000018f44 120 FUNC GLOBAL DEFAULT 11 XmlInitEncoding + 28: 000000000000ce54 12 FUNC GLOBAL DEFAULT 11 XML_ExpatVersion + 29: 000000000000c500 36 FUNC GLOBAL DEFAULT 11 XML_SetHashSalt + 30: 000000000000c44c 8 FUNC GLOBAL DEFAULT 11 XML_SetStartDoctypeDeclHandler + 31: 000000000000bca0 1624 FUNC GLOBAL DEFAULT 11 XML_ExternalEntityParserCreate + 32: 000000000000c694 672 FUNC GLOBAL DEFAULT 11 XML_GetBuffer + 33: 000000000000cd3c 76 FUNC GLOBAL DEFAULT 11 XML_GetCurrentColumnNumber + 34: 000000000000c41c 8 FUNC GLOBAL DEFAULT 11 XML_SetEndCdataSectionHandler + 35: 000000000000c414 8 FUNC GLOBAL DEFAULT 11 XML_SetStartCdataSectionHandler + 36: 000000000000cc90 36 FUNC GLOBAL DEFAULT 11 XML_GetCurrentByteCount + 37: 000000000000cdfc 52 FUNC GLOBAL DEFAULT 11 XML_DefaultCurrent + 38: 000000000001913c 32 FUNC GLOBAL DEFAULT 11 XmlInitUnknownEncodingNS + 39: 000000000000ce60 36 FUNC GLOBAL DEFAULT 11 XML_ExpatVersionInfo + 40: 0000000000018c04 92 FUNC GLOBAL DEFAULT 11 XmlUtf16Encode + 41: 000000000000ccb4 56 FUNC GLOBAL DEFAULT 11 XML_GetInputContext + 42: 000000000000c490 8 FUNC GLOBAL DEFAULT 11 XML_SetExternalEntityRefHandler + 43: 000000000000c3c4 8 FUNC GLOBAL DEFAULT 11 XML_GetSpecifiedAttributeCount + 44: 000000000000c350 32 FUNC GLOBAL DEFAULT 11 XML_SetUserData + 45: 000000000000ce30 36 FUNC GLOBAL DEFAULT 11 XML_ErrorString + 46: 000000000000c3d4 12 FUNC GLOBAL DEFAULT 11 XML_SetElementHandler + 47: 000000000000c46c 12 FUNC GLOBAL DEFAULT 11 XML_SetNamespaceDeclHandler + 48: 000000000001b0ec 0 FUNC GLOBAL DEFAULT 12 _fini + 49: 0000000000018c60 8 FUNC GLOBAL DEFAULT 11 XmlSizeOfUnknownEncoding + 50: 000000000000c3cc 8 FUNC GLOBAL DEFAULT 11 XML_GetIdAttributeIndex + 51: 000000000000c4c4 8 FUNC GLOBAL DEFAULT 11 XML_SetAttlistDeclHandler + 52: 000000000000c330 32 FUNC GLOBAL DEFAULT 11 XML_SetReturnNSTriplet + 53: 000000000000c4b0 12 FUNC GLOBAL DEFAULT 11 XML_SetUnknownEncodingHandler + 54: 000000000000c408 12 FUNC GLOBAL DEFAULT 11 XML_SetCdataSectionHandler + 55: 00000000000400c8 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 56: 00000000000190c8 116 FUNC GLOBAL DEFAULT 11 XmlParseXmlDeclNS + 57: 000000000000c440 12 FUNC GLOBAL DEFAULT 11 XML_SetDoctypeDeclHandler + 58: 000000000000c424 12 FUNC GLOBAL DEFAULT 11 XML_SetDefaultHandler + 59: 0000000000003d48 0 FUNC GLOBAL DEFAULT 9 _init + 60: 000000000001b0d4 24 FUNC GLOBAL DEFAULT 11 XmlPrologStateInitExternalEntity + 61: 00000000000400c8 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 62: 000000000000c3f0 8 FUNC GLOBAL DEFAULT 11 XML_SetCharacterDataHandler + 63: 000000000000bc44 12 FUNC GLOBAL DEFAULT 11 XML_ParserCreate + 64: 0000000000019030 16 FUNC GLOBAL DEFAULT 11 XmlGetUtf8InternalEncodingNS + 65: 000000000000c4dc 36 FUNC GLOBAL DEFAULT 11 XML_SetParamEntityParsing + 66: 000000000000cde0 28 FUNC GLOBAL DEFAULT 11 XML_MemFree + 67: 000000000000c4bc 8 FUNC GLOBAL DEFAULT 11 XML_SetElementDeclHandler + 68: 000000000000cda4 28 FUNC GLOBAL DEFAULT 11 XML_MemMalloc + 69: 000000000000c478 8 FUNC GLOBAL DEFAULT 11 XML_SetStartNamespaceDeclHandler + 70: 0000000000019040 16 FUNC GLOBAL DEFAULT 11 XmlGetUtf16InternalEncodingNS + 71: 000000000000c524 368 FUNC GLOBAL DEFAULT 11 XML_ParseBuffer + 72: 000000000000c300 48 FUNC GLOBAL DEFAULT 11 XML_UseForeignDTD + 73: 000000000000b674 92 FUNC GLOBAL DEFAULT 11 XML_SetEncoding + 74: 000000000000c2f8 8 FUNC GLOBAL DEFAULT 11 XML_UseParserAsHandlerArg + 75: 000000000000c480 8 FUNC GLOBAL DEFAULT 11 XML_SetEndNamespaceDeclHandler + 76: 000000000000c3e8 8 FUNC GLOBAL DEFAULT 11 XML_SetEndElementHandler + 77: 000000000000ccec 80 FUNC GLOBAL DEFAULT 11 XML_GetCurrentLineNumber + 78: 000000000000c4d4 8 FUNC GLOBAL DEFAULT 11 XML_SetXmlDeclHandler + 79: 000000000000c3f8 8 FUNC GLOBAL DEFAULT 11 XML_SetProcessingInstructionHandler + 80: 00000000000400c0 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 81: 0000000000018a0c 196 FUNC GLOBAL DEFAULT 11 XmlUtf8Encode + 82: 000000000000c3e0 8 FUNC GLOBAL DEFAULT 11 XML_SetStartElementHandler + 83: 000000000000c4a8 8 FUNC GLOBAL DEFAULT 11 XML_SetSkippedEntityHandler + 84: 000000000000cb40 228 FUNC GLOBAL DEFAULT 11 XML_ResumeParser + 85: 000000000000c4cc 8 FUNC GLOBAL DEFAULT 11 XML_SetEntityDeclHandler + 86: 000000000000b6d0 596 FUNC GLOBAL DEFAULT 11 XML_ParserFree + 87: 000000000000c488 8 FUNC GLOBAL DEFAULT 11 XML_SetNotStandaloneHandler + 88: 000000000000bc3c 8 FUNC GLOBAL DEFAULT 11 XML_ParserCreate_MM + 89: 000000000000bc50 80 FUNC GLOBAL DEFAULT 11 XML_ParserCreateNS + 90: 00000000000400c0 0 NOTYPE GLOBAL DEFAULT 22 _edata + 91: 000000000000c45c 8 FUNC GLOBAL DEFAULT 11 XML_SetUnparsedEntityDeclHandler + 92: 000000000000c370 76 FUNC GLOBAL DEFAULT 11 XML_SetBase + 93: 000000000000c3bc 8 FUNC GLOBAL DEFAULT 11 XML_GetBase + 94: 0000000000018f24 16 FUNC GLOBAL DEFAULT 11 XmlGetUtf8InternalEncoding + 95: 000000000000c498 16 FUNC GLOBAL DEFAULT 11 XML_SetExternalEntityRefHandlerArg + 96: 000000000001b0b4 32 FUNC GLOBAL DEFAULT 11 XmlPrologStateInit + 97: 00000000000400c8 0 NOTYPE GLOBAL DEFAULT 23 _end + 98: 000000000000c400 8 FUNC GLOBAL DEFAULT 11 XML_SetCommentHandler + 99: 0000000000018fbc 116 FUNC GLOBAL DEFAULT 11 XmlParseXmlDecl + 100: 000000000000cac8 120 FUNC GLOBAL DEFAULT 11 XML_StopParser + 101: 000000000000cc64 8 FUNC GLOBAL DEFAULT 11 XML_GetErrorCode + 102: 000000000000ce84 16 FUNC GLOBAL DEFAULT 11 XML_GetFeatureList + 103: 000000000000c430 16 FUNC GLOBAL DEFAULT 11 XML_SetDefaultHandlerExpand + 104: 00000000000400c8 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 105: 000000000000c934 404 FUNC GLOBAL DEFAULT 11 XML_Parse + 106: 0000000000019050 120 FUNC GLOBAL DEFAULT 11 XmlInitEncodingNS + 107: 000000000000b36c 776 FUNC GLOBAL DEFAULT 11 XML_ParserReset + 108: 000000000000c464 8 FUNC GLOBAL DEFAULT 11 XML_SetNotationDeclHandler + 109: 00000000000400c0 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 110: 000000000000cc6c 36 FUNC GLOBAL DEFAULT 11 XML_GetCurrentByteIndex diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libfreetype.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libfreetype.so.6.txt new file mode 100644 index 000000000000..41b9b800a565 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libfreetype.so.6.txt @@ -0,0 +1,711 @@ +Library: /lib64/libfreetype.so.6 +Package: freetype-2.8-14.el7_9.1.aarch64 + + +Symbol table '.dynsym' contains 705 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000125b0 0 SECTION LOCAL DEFAULT 9 + 2: 00000000000ca3f8 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_IHDR@PNG15_0 (3) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_palette_to_rgb@PNG15_0 (3) + 10: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflate + 12: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_read_struct@PNG15_0 (3) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_filler@PNG15_0 (3) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_interlace_handling@PNG15_0 (3) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BZ2_bzDecompressInit + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_image@PNG15_0 (3) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BZ2_bzDecompressEnd + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_packing@PNG15_0 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_valid@PNG15_0 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_end@PNG15_0 (3) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_gray_to_rgb@PNG15_0 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_info@PNG15_0 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_error_ptr@PNG15_0 (3) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 35: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 36: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateEnd + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_io_ptr@PNG15_0 (3) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat64@GLIBC_2.17 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BZ2_bzDecompress + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_fn@PNG15_0 (3) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_update_info@PNG15_0 (3) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_error@PNG15_0 (3) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_user_transform_fn@PNG15_0 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __longjmp_chk@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_strip_16@PNG15_0 (3) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_info_struct@PNG15_0 (3) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_tRNS_to_alpha@PNG15_0 (3) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (2) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit2_ + 59: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open64@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateReset + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 64: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap64@GLIBC_2.17 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_destroy_read_struct@PNG15_0 (3) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_longjmp_fn@PNG15_0 (3) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_expand_gray_1_2_4_to_8@PNG15_0 (3) + 71: 00000000000cfa38 40 OBJECT GLOBAL DEFAULT 19 af_arab_script_class + 72: 00000000000cf380 40 OBJECT GLOBAL DEFAULT 19 af_sinh_script_class + 73: 000000000006f9bc 172 FUNC GLOBAL DEFAULT 11 FTC_Manager_Lookup_Size + 74: 000000000001ec44 344 FUNC GLOBAL DEFAULT 11 FT_CMap_Done + 75: 000000000001ed9c 312 FUNC GLOBAL DEFAULT 11 FT_CMap_New + 76: 000000000001ebb4 144 FUNC GLOBAL DEFAULT 11 ft_hash_str_init + 77: 00000000000cfca0 32 OBJECT GLOBAL DEFAULT 19 t1_cmap_classes + 78: 0000000000086bc8 20 OBJECT GLOBAL DEFAULT 13 af_latn_dflt_style_class + 79: 0000000000086fb8 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_ordn_style_class + 80: 00000000000cf830 40 OBJECT GLOBAL DEFAULT 19 af_deva_script_class + 81: 000000000001f994 48 FUNC GLOBAL DEFAULT 11 FT_List_Add + 82: 000000000001c210 84 FUNC GLOBAL DEFAULT 11 FT_Tan + 83: 00000000000cf560 40 OBJECT GLOBAL DEFAULT 19 af_latp_script_class + 84: 000000000001a574 72 FUNC GLOBAL DEFAULT 11 FT_Outline_Translate + 85: 0000000000023770 228 FUNC GLOBAL DEFAULT 11 FT_Glyph_Copy + 86: 00000000000cfb00 120 OBJECT GLOBAL DEFAULT 19 ft_smooth_lcdv_renderer_class + 87: 000000000001e7d8 528 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CheckPoints + 88: 000000000001d084 44 FUNC GLOBAL DEFAULT 11 ft_glyphslot_set_bitmap + 89: 00000000000ce188 64 OBJECT GLOBAL DEFAULT 19 af_latin_writing_system_class + 90: 00000000000870c0 20 OBJECT GLOBAL DEFAULT 13 af_bamu_dflt_style_class + 91: 0000000000086e50 20 OBJECT GLOBAL DEFAULT 13 af_grek_c2cp_style_class + 92: 0000000000027980 160 FUNC GLOBAL DEFAULT 11 FT_Get_WinFNT_Header + 93: 0000000000018fc0 140 FUNC GLOBAL DEFAULT 11 FT_Select_Charmap + 94: 00000000000125b0 0 FUNC GLOBAL DEFAULT 9 _init + 95: 00000000000257f0 60 FUNC GLOBAL DEFAULT 11 FT_Stroker_Set + 96: 00000000000cfa88 120 OBJECT GLOBAL DEFAULT 19 ft_raster1_renderer_class + 97: 00000000000cea70 24 OBJECT GLOBAL DEFAULT 19 t1_decoder_funcs + 98: 000000000001fdfc 128 FUNC GLOBAL DEFAULT 11 FT_List_Finalize + 99: 00000000000cf628 40 OBJECT GLOBAL DEFAULT 19 af_khmr_script_class + 100: 00000000000cf8d0 40 OBJECT GLOBAL DEFAULT 19 af_cher_script_class + 101: 00000000000cf740 40 OBJECT GLOBAL DEFAULT 19 af_goth_script_class + 102: 0000000000023b7c 136 FUNC GLOBAL DEFAULT 11 FT_TrueTypeGX_Validate + 103: 0000000000023254 88 FUNC GLOBAL DEFAULT 11 FT_Get_Gasp + 104: 0000000000018d34 168 FUNC GLOBAL DEFAULT 11 FT_Set_Pixel_Sizes + 105: 00000000000ceb70 72 OBJECT GLOBAL DEFAULT 19 psnames_module_class + 106: 0000000000086b98 20 OBJECT GLOBAL DEFAULT 13 af_latp_dflt_style_class + 107: 00000000000cf3d0 40 OBJECT GLOBAL DEFAULT 19 af_saur_script_class + 108: 000000000001a754 132 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_Bitmap + 109: 00000000000863c0 56 OBJECT GLOBAL DEFAULT 13 af_knda_nonbase_uniranges + 110: 000000000001c60c 76 FUNC GLOBAL DEFAULT 11 FT_Angle_Diff + 111: 0000000000077644 288 FUNC GLOBAL DEFAULT 11 FT_Gzip_Uncompress + 112: 0000000000086408 16 OBJECT GLOBAL DEFAULT 13 af_kali_nonbase_uniranges + 113: 0000000000086af0 20 OBJECT GLOBAL DEFAULT 13 af_orkh_dflt_style_class + 114: 000000000001a424 192 FUNC GLOBAL DEFAULT 11 FT_Outline_Copy + 115: 0000000000086560 16 OBJECT GLOBAL DEFAULT 13 af_glag_nonbase_uniranges + 116: 0000000000086e38 20 OBJECT GLOBAL DEFAULT 13 af_grek_c2sc_style_class + 117: 000000000001a5bc 184 FUNC GLOBAL DEFAULT 11 FT_Outline_Reverse + 118: 00000000000cdfb0 72 OBJECT GLOBAL DEFAULT 19 sfnt_module_class + 119: 0000000000018890 640 FUNC GLOBAL DEFAULT 11 FT_Request_Metrics + 120: 000000000001c0b4 112 FUNC GLOBAL DEFAULT 11 FT_Atan2 + 121: 0000000000086b68 20 OBJECT GLOBAL DEFAULT 13 af_mlym_dflt_style_class + 122: 00000000000cf2b8 40 OBJECT GLOBAL DEFAULT 19 af_thai_script_class + 123: 0000000000086ec8 20 OBJECT GLOBAL DEFAULT 13 af_ethi_dflt_style_class + 124: 000000000001aa38 944 FUNC GLOBAL DEFAULT 11 FT_Outline_EmboldenXY + 125: 00000000000cf448 40 OBJECT GLOBAL DEFAULT 19 af_orkh_script_class + 126: 000000000001e188 308 FUNC GLOBAL DEFAULT 11 FT_Stream_EnterFrame + 127: 0000000000026a64 496 FUNC GLOBAL DEFAULT 11 FT_Stroker_EndSubPath + 128: 0000000000085ff8 8 OBJECT GLOBAL DEFAULT 13 af_olck_nonbase_uniranges + 129: 0000000000017de0 220 FUNC GLOBAL DEFAULT 11 FT_Matrix_Multiply + 130: 00000000000244b0 16 FUNC GLOBAL DEFAULT 11 FT_OpenType_Free + 131: 0000000000086f10 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_dflt_style_class + 132: 000000000001ce18 72 FUNC GLOBAL DEFAULT 11 FT_Stream_Free + 133: 0000000000017cb8 84 FUNC GLOBAL DEFAULT 11 FT_MulDiv_No_Round + 134: 00000000000190b0 68 FUNC GLOBAL DEFAULT 11 FT_Get_Char_Index + 135: 00000000000cf538 40 OBJECT GLOBAL DEFAULT 19 af_lisu_script_class + 136: 0000000000086a60 20 OBJECT GLOBAL DEFAULT 13 af_sund_dflt_style_class + 137: 0000000000018f28 152 FUNC GLOBAL DEFAULT 11 FT_Get_Track_Kerning + 138: 0000000000022914 112 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Done + 139: 00000000000260b0 2384 FUNC GLOBAL DEFAULT 11 FT_Stroker_CubicTo + 140: 0000000000086650 56 OBJECT GLOBAL DEFAULT 13 af_deva_uniranges + 141: 0000000000086688 40 OBJECT GLOBAL DEFAULT 13 af_cyrl_nonbase_uniranges + 142: 000000000006f9b8 4 FUNC GLOBAL DEFAULT 11 FTC_Manager_Lookup_Face + 143: 0000000000086d60 20 OBJECT GLOBAL DEFAULT 13 af_gujr_dflt_style_class + 144: 0000000000086788 16 OBJECT GLOBAL DEFAULT 13 af_cakm_uniranges + 145: 000000000001b250 72 FUNC GLOBAL DEFAULT 11 FT_Stream_GetULong + 146: 0000000000086370 8 OBJECT GLOBAL DEFAULT 13 af_khms_nonbase_uniranges + 147: 00000000000865d0 40 OBJECT GLOBAL DEFAULT 13 af_ethi_uniranges + 148: 00000000000172dc 64 FUNC GLOBAL DEFAULT 11 FT_Add_Default_Modules + 149: 000000000001b15c 52 FUNC GLOBAL DEFAULT 11 FT_Stream_GetUShortLE + 150: 0000000000086c28 20 OBJECT GLOBAL DEFAULT 13 af_latn_smcp_style_class + 151: 0000000000086d00 20 OBJECT GLOBAL DEFAULT 13 af_knda_dflt_style_class + 152: 0000000000086dd8 20 OBJECT GLOBAL DEFAULT 13 af_grek_smcp_style_class + 153: 000000000001eae4 208 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CheckSubGlyphs + 154: 000000000001bef0 228 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadULongLE + 155: 0000000000023ca8 8 FUNC GLOBAL DEFAULT 11 FT_Library_SetLcdFilterWeights + 156: 0000000000023c14 128 FUNC GLOBAL DEFAULT 11 FT_ClassicKern_Validate + 157: 00000000000cf768 40 OBJECT GLOBAL DEFAULT 19 af_glag_script_class + 158: 000000000001d864 152 FUNC GLOBAL DEFAULT 11 ft_glyphslot_alloc_bitmap + 159: 000000000001be10 224 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadLong + 160: 000000000001a3a4 128 FUNC GLOBAL DEFAULT 11 FT_Outline_Check + 161: 0000000000085d98 56 OBJECT GLOBAL DEFAULT 13 af_orya_nonbase_uniranges + 162: 00000000000869d0 20 OBJECT GLOBAL DEFAULT 13 af_vaii_dflt_style_class + 163: 00000000000cea10 72 OBJECT GLOBAL DEFAULT 19 psaux_module_class + 164: 00000000000cde10 104 OBJECT GLOBAL DEFAULT 19 tt_cmap6_class_rec + 165: 00000000000277a4 124 FUNC GLOBAL DEFAULT 11 FT_Get_PS_Font_Info + 166: 000000000001eed4 360 FUNC GLOBAL DEFAULT 11 FT_Outline_New_Internal + 167: 0000000000086118 112 OBJECT GLOBAL DEFAULT 13 af_latp_uniranges + 168: 000000000001cc80 116 FUNC GLOBAL DEFAULT 11 ft_hash_str_free + 169: 0000000000085e60 16 OBJECT GLOBAL DEFAULT 13 af_thai_uniranges + 170: 000000000006ece4 20 FUNC GLOBAL DEFAULT 11 FTC_CMapCache_New + 171: 00000000000cf650 40 OBJECT GLOBAL DEFAULT 19 af_knda_script_class + 172: 0000000000086e98 20 OBJECT GLOBAL DEFAULT 13 af_geok_dflt_style_class + 173: 0000000000089938 55997 OBJECT GLOBAL DEFAULT 13 ft_adobe_glyph_list + 174: 000000000001b0c8 40 FUNC GLOBAL DEFAULT 11 FT_Stream_GetChar + 175: 0000000000085e28 8 OBJECT GLOBAL DEFAULT 13 af_tfng_nonbase_uniranges + 176: 00000000000cfb78 120 OBJECT GLOBAL DEFAULT 19 ft_smooth_lcd_renderer_class + 177: 0000000000023720 80 FUNC GLOBAL DEFAULT 11 FT_Done_Glyph + 178: 0000000000033908 220 FUNC GLOBAL DEFAULT 11 TT_New_Context + 179: 0000000000019dfc 40 FUNC GLOBAL DEFAULT 11 FT_Reference_Library + 180: 00000000000ce248 64 OBJECT GLOBAL DEFAULT 19 af_cjk_writing_system_class + 181: 00000000000cf5d8 40 OBJECT GLOBAL DEFAULT 19 af_lao_script_class + 182: 000000000001af94 156 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadAt + 183: 0000000000085ee8 32 OBJECT GLOBAL DEFAULT 13 af_taml_nonbase_uniranges + 184: 000000000001c5f4 24 FUNC GLOBAL DEFAULT 11 FT_Vector_From_Polar + 185: 000000000006e92c 952 FUNC GLOBAL DEFAULT 11 FTC_SBitCache_LookupScaler + 186: 00000000000cc818 192 OBJECT GLOBAL DEFAULT 19 t1cid_driver_class + 187: 0000000000086ce8 20 OBJECT GLOBAL DEFAULT 13 af_khmr_dflt_style_class + 188: 000000000001c264 344 FUNC GLOBAL DEFAULT 11 FT_Vector_Rotate + 189: 00000000000174e4 104 FUNC GLOBAL DEFAULT 11 FT_Init_FreeType + 190: 0000000000077b14 360 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenLZW + 191: 00000000000cf1a0 40 OBJECT GLOBAL DEFAULT 19 af_hani_script_class + 192: 0000000000086418 16 OBJECT GLOBAL DEFAULT 13 af_kali_uniranges + 193: 0000000000018578 20 FUNC GLOBAL DEFAULT 11 ft_validator_error + 194: 0000000000085fb8 16 OBJECT GLOBAL DEFAULT 13 af_osma_uniranges + 195: 00000000000275b0 128 FUNC GLOBAL DEFAULT 11 FT_GlyphSlot_Oblique + 196: 0000000000018438 124 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Add + 197: 0000000000086818 16 OBJECT GLOBAL DEFAULT 13 af_avst_nonbase_uniranges + 198: 000000000001c4b4 76 FUNC GLOBAL DEFAULT 11 FT_Hypot + 199: 0000000000086cd0 20 OBJECT GLOBAL DEFAULT 13 af_khms_dflt_style_class + 200: 00000000000cf470 40 OBJECT GLOBAL DEFAULT 19 af_olck_script_class + 201: 00000000000866e8 16 OBJECT GLOBAL DEFAULT 13 af_cprt_uniranges + 202: 00000000000ce1c8 64 OBJECT GLOBAL DEFAULT 19 af_indic_writing_system_class + 203: 000000000001b42c 204 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadUShort + 204: 0000000000085f08 16 OBJECT GLOBAL DEFAULT 13 af_taml_uniranges + 205: 0000000000085e40 32 OBJECT GLOBAL DEFAULT 13 af_thai_nonbase_uniranges + 206: 0000000000086030 16 OBJECT GLOBAL DEFAULT 13 af_nkoo_uniranges + 207: 00000000000cf808 40 OBJECT GLOBAL DEFAULT 19 af_dsrt_script_class + 208: 000000000001f288 740 FUNC GLOBAL DEFAULT 11 FT_Raccess_Get_DataOffsets + 209: 000000000001d024 96 FUNC GLOBAL DEFAULT 11 ft_glyphslot_free_bitmap + 210: 0000000000086d30 20 OBJECT GLOBAL DEFAULT 13 af_hebr_dflt_style_class + 211: 0000000000086f70 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_smcp_style_class + 212: 0000000000022838 220 FUNC GLOBAL DEFAULT 11 FT_GlyphSlot_Own_Bitmap + 213: 000000000001fd84 120 FUNC GLOBAL DEFAULT 11 FT_List_Iterate + 214: 0000000000085d88 16 OBJECT GLOBAL DEFAULT 13 af_sylo_uniranges + 215: 0000000000077a88 40 FUNC GLOBAL DEFAULT 11 ft_lzwstate_reset + 216: 00000000000ce630 72 OBJECT GLOBAL DEFAULT 19 otv_module_class + 217: 0000000000019f4c 1112 FUNC GLOBAL DEFAULT 11 FT_Outline_Decompose + 218: 00000000000cf6f0 40 OBJECT GLOBAL DEFAULT 19 af_gujr_script_class + 219: 00000000000183b4 60 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Rewind + 220: 0000000000026c54 156 FUNC GLOBAL DEFAULT 11 FT_Stroker_GetBorderCounts + 221: 0000000000021840 328 FUNC GLOBAL DEFAULT 11 FT_Done_Library + 222: 000000000001fb78 224 FUNC GLOBAL DEFAULT 11 FT_Done_Size + 223: 0000000000085f48 24 OBJECT GLOBAL DEFAULT 13 af_sinh_nonbase_uniranges + 224: 00000000000860a8 32 OBJECT GLOBAL DEFAULT 13 af_mymr_uniranges + 225: 000000000002307c 168 FUNC GLOBAL DEFAULT 11 FT_Get_CID_From_Glyph_Index + 226: 00000000000870d8 20 OBJECT GLOBAL DEFAULT 13 af_avst_dflt_style_class + 227: 00000000000869b8 20 OBJECT GLOBAL DEFAULT 13 af_limb_dflt_style_class + 228: 0000000000086188 8 OBJECT GLOBAL DEFAULT 13 af_latb_nonbase_uniranges + 229: 00000000000cd1b0 192 OBJECT GLOBAL DEFAULT 19 pcf_driver_class + 230: 0000000000019b1c 80 FUNC GLOBAL DEFAULT 11 FT_Lookup_Renderer + 231: 000000000001d980 368 FUNC GLOBAL DEFAULT 11 FT_New_GlyphSlot + 232: 00000000000193d4 216 FUNC GLOBAL DEFAULT 11 FT_Get_Glyph_Name + 233: 0000000000085dd0 16 OBJECT GLOBAL DEFAULT 13 af_orya_uniranges + 234: 0000000000086378 16 OBJECT GLOBAL DEFAULT 13 af_khms_uniranges + 235: 00000000000182c0 28 FUNC GLOBAL DEFAULT 11 ft_corner_orientation + 236: 00000000000cecb8 72 OBJECT GLOBAL DEFAULT 19 autofit_module_class + 237: 0000000000086ca0 20 OBJECT GLOBAL DEFAULT 13 af_latn_c2cp_style_class + 238: 0000000000021314 128 FUNC GLOBAL DEFAULT 11 FT_New_Memory_Face + 239: 0000000000086d18 20 OBJECT GLOBAL DEFAULT 13 af_kali_dflt_style_class + 240: 00000000000cf920 40 OBJECT GLOBAL DEFAULT 19 af_cans_script_class + 241: 00000000000975f8 512 OBJECT GLOBAL DEFAULT 13 t1_standard_encoding + 242: 00000000000184d8 40 FUNC GLOBAL DEFAULT 11 ft_hash_num_lookup + 243: 00000000000242e4 140 FUNC GLOBAL DEFAULT 11 FT_Get_MM_Blend_Coordinates + 244: 00000000000d07c8 0 NOTYPE GLOBAL DEFAULT 22 _edata + 245: 000000000001b124 56 FUNC GLOBAL DEFAULT 11 FT_Stream_GetShort + 246: 000000000002fd94 11004 FUNC GLOBAL DEFAULT 11 TT_RunIns + 247: 00000000000cf7e0 40 OBJECT GLOBAL DEFAULT 19 af_ethi_script_class + 248: 000000000001fc58 64 FUNC GLOBAL DEFAULT 11 FT_List_Up + 249: 00000000000865f8 8 OBJECT GLOBAL DEFAULT 13 af_dsrt_nonbase_uniranges + 250: 000000000001876c 100 FUNC GLOBAL DEFAULT 11 ft_synthesize_vertical_metrics + 251: 00000000000cf498 40 OBJECT GLOBAL DEFAULT 19 af_none_script_class + 252: 0000000000024124 224 FUNC GLOBAL DEFAULT 11 FT_Set_MM_Blend_Coordinates + 253: 000000000001ae34 32 FUNC GLOBAL DEFAULT 11 FT_Stream_Close + 254: 0000000000019ec4 136 FUNC GLOBAL DEFAULT 11 FT_Get_SubGlyph_Info + 255: 0000000000086470 48 OBJECT GLOBAL DEFAULT 13 af_guru_nonbase_uniranges + 256: 00000000000243fc 180 FUNC GLOBAL DEFAULT 11 FT_OpenType_Validate + 257: 0000000000086360 16 OBJECT GLOBAL DEFAULT 13 af_lao_uniranges + 258: 0000000000019a9c 80 FUNC GLOBAL DEFAULT 11 FT_Face_GetCharsOfVariant + 259: 0000000000023fb8 224 FUNC GLOBAL DEFAULT 11 FT_Set_Var_Design_Coordinates + 260: 00000000000ce158 32 OBJECT GLOBAL DEFAULT 19 af_autofitter_interface + 261: 0000000000086110 8 OBJECT GLOBAL DEFAULT 13 af_latp_nonbase_uniranges + 262: 000000000006e58c 20 FUNC GLOBAL DEFAULT 11 FTC_SBitCache_New + 263: 000000000002215c 472 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Copy + 264: 000000000002139c 468 FUNC GLOBAL DEFAULT 11 FT_Remove_Module + 265: 00000000000195a0 164 FUNC GLOBAL DEFAULT 11 FT_Load_Sfnt_Table + 266: 000000000001bb94 228 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadULong + 267: 0000000000086ef8 20 OBJECT GLOBAL DEFAULT 13 af_deva_dflt_style_class + 268: 0000000000086e68 20 OBJECT GLOBAL DEFAULT 13 af_goth_dflt_style_class + 269: 000000000001bfd4 224 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadLongLE + 270: 0000000000026cf0 192 FUNC GLOBAL DEFAULT 11 FT_Stroker_GetCounts + 271: 00000000000cf308 40 OBJECT GLOBAL DEFAULT 19 af_tavt_script_class + 272: 0000000000086c88 20 OBJECT GLOBAL DEFAULT 13 af_latn_c2sc_style_class + 273: 0000000000019534 108 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_Table + 274: 000000000001a860 88 FUNC GLOBAL DEFAULT 11 FT_Outline_Transform + 275: 0000000000085ea8 48 OBJECT GLOBAL DEFAULT 13 af_tavt_nonbase_uniranges + 276: 00000000000cf268 40 OBJECT GLOBAL DEFAULT 19 af_vaii_script_class + 277: 00000000000184b4 36 FUNC GLOBAL DEFAULT 11 ft_hash_str_lookup + 278: 00000000000865c0 16 OBJECT GLOBAL DEFAULT 13 af_ethi_nonbase_uniranges + 279: 0000000000087048 20 OBJECT GLOBAL DEFAULT 13 af_cari_dflt_style_class + 280: 00000000000864a0 16 OBJECT GLOBAL DEFAULT 13 af_guru_uniranges + 281: 000000000001e744 148 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CreateExtra + 282: 000000000001f050 144 FUNC GLOBAL DEFAULT 11 ft_hash_num_init + 283: 0000000000086eb0 20 OBJECT GLOBAL DEFAULT 13 af_geor_dflt_style_class + 284: 0000000000019df0 12 FUNC GLOBAL DEFAULT 11 ft_property_string_set + 285: 0000000000019aec 48 FUNC GLOBAL DEFAULT 11 FT_Activate_Size + 286: 0000000000018c8c 168 FUNC GLOBAL DEFAULT 11 FT_Set_Char_Size + 287: 0000000000086570 24 OBJECT GLOBAL DEFAULT 13 af_glag_uniranges + 288: 0000000000019924 136 FUNC GLOBAL DEFAULT 11 FT_Face_GetCharVariantIndex + 289: 0000000000086970 20 OBJECT GLOBAL DEFAULT 13 af_tibt_dflt_style_class + 290: 000000000001b044 132 FUNC GLOBAL DEFAULT 11 FT_Stream_TryRead + 291: 00000000000172ac 28 FUNC GLOBAL DEFAULT 11 FT_Done_Memory + 292: 0000000000086c40 20 OBJECT GLOBAL DEFAULT 13 af_latn_sinf_style_class + 293: 0000000000086df0 20 OBJECT GLOBAL DEFAULT 13 af_grek_sinf_style_class + 294: 0000000000086548 8 OBJECT GLOBAL DEFAULT 13 af_goth_nonbase_uniranges + 295: 000000000001daf0 148 FUNC GLOBAL DEFAULT 11 FT_Done_GlyphSlot + 296: 0000000000086fe8 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_c2cp_style_class + 297: 0000000000022fdc 160 FUNC GLOBAL DEFAULT 11 FT_Get_CID_Is_Internally_CID_Keyed + 298: 00000000000cf1f0 40 OBJECT GLOBAL DEFAULT 19 af_sylo_script_class + 299: 0000000000085fc8 8 OBJECT GLOBAL DEFAULT 13 af_osge_nonbase_uniranges + 300: 00000000000278fc 132 FUNC GLOBAL DEFAULT 11 FT_Get_PS_Font_Value + 301: 0000000000085e98 16 OBJECT GLOBAL DEFAULT 13 af_telu_uniranges + 302: 000000000001ff44 188 FUNC GLOBAL DEFAULT 11 FT_Done_Face + 303: 0000000000086010 8 OBJECT GLOBAL DEFAULT 13 af_none_nonbase_uniranges + 304: 0000000000023ca4 4 FUNC GLOBAL DEFAULT 11 ft_lcd_filter_fir + 305: 000000000001c124 84 FUNC GLOBAL DEFAULT 11 FT_Vector_Unit + 306: 0000000000086dc0 20 OBJECT GLOBAL DEFAULT 13 af_grek_subs_style_class + 307: 00000000000cdd40 104 OBJECT GLOBAL DEFAULT 19 tt_cmap10_class_rec + 308: 000000000001b2e4 72 FUNC GLOBAL DEFAULT 11 FT_Stream_GetULongLE + 309: 00000000000cf948 40 OBJECT GLOBAL DEFAULT 19 af_cakm_script_class + 310: 0000000000086958 20 OBJECT GLOBAL DEFAULT 13 af_hani_dflt_style_class + 311: 00000000000256e8 28 FUNC GLOBAL DEFAULT 11 FT_Outline_GetOutsideBorder + 312: 0000000000086948 16 OBJECT GLOBAL DEFAULT 13 af_adlm_uniranges + 313: 00000000000ce970 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_expert_class_rec + 314: 00000000000cde78 104 OBJECT GLOBAL DEFAULT 19 tt_cmap4_class_rec + 315: 0000000000086238 264 OBJECT GLOBAL DEFAULT 13 af_latn_uniranges + 316: 000000000006f79c 500 FUNC GLOBAL DEFAULT 11 FTC_Manager_RemoveFaceID + 317: 000000000001c178 76 FUNC GLOBAL DEFAULT 11 FT_Cos + 318: 000000000001b298 76 FUNC GLOBAL DEFAULT 11 FT_Stream_GetLong + 319: 00000000000ca4c0 64 OBJECT GLOBAL DEFAULT 19 ft_outline_glyph_class + 320: 0000000000086708 16 OBJECT GLOBAL DEFAULT 13 af_copt_uniranges + 321: 000000000006f990 40 FUNC GLOBAL DEFAULT 11 FTC_Node_Unref + 322: 0000000000023e00 132 FUNC GLOBAL DEFAULT 11 FT_Get_Multi_Master + 323: 0000000000019b74 244 FUNC GLOBAL DEFAULT 11 FT_Render_Glyph_Internal + 324: 0000000000022f04 216 FUNC GLOBAL DEFAULT 11 FT_Get_CID_Registry_Ordering_Supplement + 325: 000000000001b030 20 FUNC GLOBAL DEFAULT 11 FT_Stream_Read + 326: 0000000000023c94 16 FUNC GLOBAL DEFAULT 11 FT_ClassicKern_Free + 327: 0000000000086fd0 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_c2sc_style_class + 328: 0000000000085de0 32 OBJECT GLOBAL DEFAULT 13 af_limb_nonbase_uniranges + 329: 0000000000085e70 40 OBJECT GLOBAL DEFAULT 13 af_telu_nonbase_uniranges + 330: 0000000000087030 20 OBJECT GLOBAL DEFAULT 13 af_cher_dflt_style_class + 331: 000000000001c6b8 128 FUNC GLOBAL DEFAULT 11 ft_mem_alloc + 332: 0000000000018b10 136 FUNC GLOBAL DEFAULT 11 FT_Select_Size + 333: 00000000000ce530 72 OBJECT GLOBAL DEFAULT 19 gxv_module_class + 334: 0000000000019c90 132 FUNC GLOBAL DEFAULT 11 FT_Get_Module + 335: 0000000000018b98 244 FUNC GLOBAL DEFAULT 11 FT_Request_Size + 336: 000000000006f0ac 748 FUNC GLOBAL DEFAULT 11 FTC_CMapCache_Lookup + 337: 0000000000018ddc 332 FUNC GLOBAL DEFAULT 11 FT_Get_Kerning + 338: 0000000000085fb0 8 OBJECT GLOBAL DEFAULT 13 af_osma_nonbase_uniranges + 339: 0000000000069f7c 28 FUNC GLOBAL DEFAULT 11 ps_hints_apply + 340: 00000000000cf678 40 OBJECT GLOBAL DEFAULT 19 af_kali_script_class + 341: 0000000000086b50 20 OBJECT GLOBAL DEFAULT 13 af_mymr_dflt_style_class + 342: 00000000000d07d0 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 343: 000000000006f64c 228 FUNC GLOBAL DEFAULT 11 FTC_Manager_Done + 344: 000000000006df64 16 FUNC GLOBAL DEFAULT 11 FTC_ImageCache_New + 345: 00000000000cca78 80 OBJECT GLOBAL DEFAULT 19 pfr_cmap_class_rec + 346: 00000000000cf178 40 OBJECT GLOBAL DEFAULT 19 af_writing_system_classes + 347: 0000000000085f18 24 OBJECT GLOBAL DEFAULT 13 af_sund_nonbase_uniranges + 348: 0000000000086f88 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_sinf_style_class + 349: 0000000000023160 60 FUNC GLOBAL DEFAULT 11 FT_Get_X11_Font_Format + 350: 0000000000086100 16 OBJECT GLOBAL DEFAULT 13 af_lisu_uniranges + 351: 00000000000cf358 40 OBJECT GLOBAL DEFAULT 19 af_sund_script_class + 352: 000000000001cba4 28 FUNC GLOBAL DEFAULT 11 ft_mem_free + 353: 00000000000d07c8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 354: 000000000001855c 20 FUNC GLOBAL DEFAULT 11 ft_validator_init + 355: 0000000000021fc4 192 FUNC GLOBAL DEFAULT 11 FT_Get_BDF_Charset_ID + 356: 000000000001e69c 168 FUNC GLOBAL DEFAULT 11 ft_mem_realloc + 357: 0000000000023c04 16 FUNC GLOBAL DEFAULT 11 FT_TrueTypeGX_Free + 358: 0000000000085d50 16 OBJECT GLOBAL DEFAULT 13 af_tibt_uniranges + 359: 000000000001c1c4 76 FUNC GLOBAL DEFAULT 11 FT_Sin + 360: 0000000000086a30 20 OBJECT GLOBAL DEFAULT 13 af_tavt_dflt_style_class + 361: 000000000001af74 24 FUNC GLOBAL DEFAULT 11 FT_Stream_Skip + 362: 0000000000086d90 20 OBJECT GLOBAL DEFAULT 13 af_grek_titl_style_class + 363: 00000000000191c4 156 FUNC GLOBAL DEFAULT 11 FT_Get_First_Char + 364: 000000000001806c 168 FUNC GLOBAL DEFAULT 11 FT_Vector_Transform_Scaled + 365: 000000000001b4f8 640 FUNC GLOBAL DEFAULT 11 FT_Raccess_Get_HeaderInfo + 366: 0000000000086020 16 OBJECT GLOBAL DEFAULT 13 af_nkoo_nonbase_uniranges + 367: 0000000000026ef4 56 FUNC GLOBAL DEFAULT 11 FT_Stroker_Export + 368: 000000000001f83c 144 FUNC GLOBAL DEFAULT 11 ft_mem_dup + 369: 0000000000023980 508 FUNC GLOBAL DEFAULT 11 FT_Glyph_To_Bitmap + 370: 000000000001cc44 60 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Done + 371: 0000000000086000 16 OBJECT GLOBAL DEFAULT 13 af_olck_uniranges + 372: 00000000000cf9c0 40 OBJECT GLOBAL DEFAULT 19 af_bamu_script_class + 373: 000000000001b778 208 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadShort + 374: 0000000000086828 16 OBJECT GLOBAL DEFAULT 13 af_avst_uniranges + 375: 0000000000086550 16 OBJECT GLOBAL DEFAULT 13 af_goth_uniranges + 376: 00000000000cced8 192 OBJECT GLOBAL DEFAULT 19 t42_driver_class + 377: 000000000001b20c 68 FUNC GLOBAL DEFAULT 11 FT_Stream_GetOffset + 378: 000000000001aeb0 196 FUNC GLOBAL DEFAULT 11 FT_Raccess_Guess + 379: 000000000001f270 24 FUNC GLOBAL DEFAULT 11 ft_hash_num_insert + 380: 00000000000cbd98 80 OBJECT GLOBAL DEFAULT 19 cff_cmap_unicode_class_rec + 381: 000000000001c738 112 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_New + 382: 0000000000086c58 20 OBJECT GLOBAL DEFAULT 13 af_latn_pcap_style_class + 383: 0000000000086e08 20 OBJECT GLOBAL DEFAULT 13 af_grek_pcap_style_class + 384: 0000000000027630 372 FUNC GLOBAL DEFAULT 11 FT_GlyphSlot_Embolden + 385: 0000000000026a00 100 FUNC GLOBAL DEFAULT 11 FT_Stroker_BeginSubPath + 386: 0000000000085f30 24 OBJECT GLOBAL DEFAULT 13 af_sund_uniranges + 387: 0000000000086a48 20 OBJECT GLOBAL DEFAULT 13 af_taml_dflt_style_class + 388: 0000000000077c7c 132 FUNC GLOBAL DEFAULT 11 ft_lzwstate_done + 389: 0000000000085fe8 16 OBJECT GLOBAL DEFAULT 13 af_orkh_uniranges + 390: 0000000000086ac0 20 OBJECT GLOBAL DEFAULT 13 af_osma_dflt_style_class + 391: 00000000000cd058 192 OBJECT GLOBAL DEFAULT 19 winfnt_driver_class + 392: 00000000000863b0 16 OBJECT GLOBAL DEFAULT 13 af_khmr_uniranges + 393: 0000000000025a68 1608 FUNC GLOBAL DEFAULT 11 FT_Stroker_ConicTo + 394: 00000000000cbde8 80 OBJECT GLOBAL DEFAULT 19 cff_cmap_encoding_class_rec + 395: 00000000000ceac8 104 OBJECT GLOBAL DEFAULT 19 ps_parser_funcs + 396: 0000000000024204 224 FUNC GLOBAL DEFAULT 11 FT_Set_Var_Blend_Coordinates + 397: 000000000001d5a4 368 FUNC GLOBAL DEFAULT 11 FT_Get_Advances + 398: 0000000000087078 20 OBJECT GLOBAL DEFAULT 13 af_cakm_dflt_style_class + 399: 00000000000cf4e8 40 OBJECT GLOBAL DEFAULT 19 af_mymr_script_class + 400: 000000000001c500 244 FUNC GLOBAL DEFAULT 11 FT_Vector_Polarize + 401: 0000000000086a00 20 OBJECT GLOBAL DEFAULT 13 af_thai_dflt_style_class + 402: 0000000000023f08 176 FUNC GLOBAL DEFAULT 11 FT_Set_MM_Design_Coordinates + 403: 0000000000026f2c 968 FUNC GLOBAL DEFAULT 11 FT_Stroker_ParseOutline + 404: 0000000000085ed8 16 OBJECT GLOBAL DEFAULT 13 af_tavt_uniranges + 405: 00000000000cea88 64 OBJECT GLOBAL DEFAULT 19 t1_builder_funcs + 406: 0000000000086808 16 OBJECT GLOBAL DEFAULT 13 af_bamu_uniranges + 407: 000000000001d0b0 1268 FUNC GLOBAL DEFAULT 11 FT_Load_Glyph + 408: 000000000001f25c 20 FUNC GLOBAL DEFAULT 11 ft_hash_str_insert + 409: 000000000001af8c 8 FUNC GLOBAL DEFAULT 11 FT_Stream_Pos + 410: 00000000000cf1c8 40 OBJECT GLOBAL DEFAULT 19 af_tibt_script_class + 411: 000000000001e0a4 152 FUNC GLOBAL DEFAULT 11 FT_Outline_Done_Internal + 412: 00000000000258f0 376 FUNC GLOBAL DEFAULT 11 FT_Stroker_LineTo + 413: 00000000000cf3f8 40 OBJECT GLOBAL DEFAULT 19 af_osma_script_class + 414: 0000000000086b38 20 OBJECT GLOBAL DEFAULT 13 af_nkoo_dflt_style_class + 415: 0000000000086e80 20 OBJECT GLOBAL DEFAULT 13 af_glag_dflt_style_class + 416: 0000000000086bb0 20 OBJECT GLOBAL DEFAULT 13 af_latb_dflt_style_class + 417: 0000000000085fe0 8 OBJECT GLOBAL DEFAULT 13 af_orkh_nonbase_uniranges + 418: 0000000000018634 36 FUNC GLOBAL DEFAULT 11 FT_Reference_Face + 419: 00000000000869a0 20 OBJECT GLOBAL DEFAULT 13 af_orya_dflt_style_class + 420: 0000000000018500 92 FUNC GLOBAL DEFAULT 11 ft_service_list_lookup + 421: 0000000000083bb0 96 OBJECT GLOBAL DEFAULT 13 tt_default_graphics_state + 422: 00000000000870a8 20 OBJECT GLOBAL DEFAULT 13 af_beng_dflt_style_class + 423: 00000000000cdad8 192 OBJECT GLOBAL DEFAULT 19 bdf_driver_class + 424: 0000000000086590 24 OBJECT GLOBAL DEFAULT 13 af_geok_uniranges + 425: 000000000001ade8 8 FUNC GLOBAL DEFAULT 11 FT_Outline_Embolden + 426: 0000000000086a18 20 OBJECT GLOBAL DEFAULT 13 af_telu_dflt_style_class + 427: 0000000000017268 68 FUNC GLOBAL DEFAULT 11 FT_New_Memory + 428: 00000000000866e0 8 OBJECT GLOBAL DEFAULT 13 af_cprt_nonbase_uniranges + 429: 00000000000cf5b0 40 OBJECT GLOBAL DEFAULT 19 af_latn_script_class + 430: 00000000000864e0 16 OBJECT GLOBAL DEFAULT 13 af_gujr_uniranges + 431: 000000000001f8cc 88 FUNC GLOBAL DEFAULT 11 ft_mem_strdup + 432: 0000000000086a90 20 OBJECT GLOBAL DEFAULT 13 af_shaw_dflt_style_class + 433: 00000000000867f8 16 OBJECT GLOBAL DEFAULT 13 af_bamu_nonbase_uniranges + 434: 0000000000086d48 20 OBJECT GLOBAL DEFAULT 13 af_guru_dflt_style_class + 435: 000000000001904c 100 FUNC GLOBAL DEFAULT 11 FT_Get_Charmap_Index + 436: 00000000000973f8 512 OBJECT GLOBAL DEFAULT 13 t1_expert_encoding + 437: 000000000001f6d4 360 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_LangTag + 438: 00000000000cf218 40 OBJECT GLOBAL DEFAULT 19 af_orya_script_class + 439: 000000000001cb00 164 FUNC GLOBAL DEFAULT 11 FT_New_Library + 440: 00000000000ced00 680 OBJECT GLOBAL DEFAULT 19 af_style_classes + 441: 0000000000086988 20 OBJECT GLOBAL DEFAULT 13 af_sylo_dflt_style_class + 442: 0000000000086838 16 OBJECT GLOBAL DEFAULT 13 af_armn_nonbase_uniranges + 443: 00000000000869e8 20 OBJECT GLOBAL DEFAULT 13 af_tfng_dflt_style_class + 444: 00000000000ca500 64 OBJECT GLOBAL DEFAULT 19 ft_bitmap_glyph_class + 445: 000000000001f924 72 FUNC GLOBAL DEFAULT 11 ft_mem_strcpyn + 446: 000000000001fc98 236 FUNC GLOBAL DEFAULT 11 FT_Set_Renderer + 447: 0000000000086770 24 OBJECT GLOBAL DEFAULT 13 af_cakm_nonbase_uniranges + 448: 0000000000086fa0 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_pcap_style_class + 449: 000000000001e59c 256 FUNC GLOBAL DEFAULT 11 ft_mem_qrealloc + 450: 0000000000027820 96 FUNC GLOBAL DEFAULT 11 FT_Has_PS_Glyph_Names + 451: 0000000000019260 216 FUNC GLOBAL DEFAULT 11 FT_Face_Properties + 452: 0000000000017bb0 16 FUNC GLOBAL DEFAULT 11 FT_RoundFix + 453: 000000000001fb10 48 FUNC GLOBAL DEFAULT 11 FT_List_Insert + 454: 0000000000017d9c 68 FUNC GLOBAL DEFAULT 11 FT_DivFix + 455: 000000000001b914 208 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadShortLE + 456: 0000000000087120 20 OBJECT GLOBAL DEFAULT 13 af_adlm_dflt_style_class + 457: 00000000000870f0 20 OBJECT GLOBAL DEFAULT 13 af_armn_dflt_style_class + 458: 000000000001b190 56 FUNC GLOBAL DEFAULT 11 FT_Stream_GetShortLE + 459: 000000000002461c 136 FUNC GLOBAL DEFAULT 11 FT_Get_PFR_Kerning + 460: 00000000000246a4 104 FUNC GLOBAL DEFAULT 11 FT_Get_PFR_Advance + 461: 0000000000086c10 20 OBJECT GLOBAL DEFAULT 13 af_latn_subs_style_class + 462: 00000000000864f0 64 OBJECT GLOBAL DEFAULT 13 af_grek_nonbase_uniranges + 463: 00000000000650d0 76 FUNC GLOBAL DEFAULT 11 af_shaper_buf_create + 464: 00000000000172cc 8 FUNC GLOBAL DEFAULT 11 FT_Trace_Get_Count + 465: 000000000001c658 96 FUNC GLOBAL DEFAULT 11 ft_mem_qalloc + 466: 0000000000085f70 8 OBJECT GLOBAL DEFAULT 13 af_shaw_nonbase_uniranges + 467: 0000000000086cb8 20 OBJECT GLOBAL DEFAULT 13 af_lao_dflt_style_class + 468: 0000000000025704 200 FUNC GLOBAL DEFAULT 11 FT_Stroker_New + 469: 0000000000027880 124 FUNC GLOBAL DEFAULT 11 FT_Get_PS_Font_Private + 470: 000000000001a674 224 FUNC GLOBAL DEFAULT 11 FT_Outline_Render + 471: 00000000000cdee0 104 OBJECT GLOBAL DEFAULT 19 tt_cmap2_class_rec + 472: 0000000000017ebc 164 FUNC GLOBAL DEFAULT 11 FT_Matrix_Invert + 473: 00000000000196fc 144 FUNC GLOBAL DEFAULT 11 FT_Get_CMap_Language_ID + 474: 0000000000017bc0 16 FUNC GLOBAL DEFAULT 11 FT_CeilFix + 475: 00000000000cf290 40 OBJECT GLOBAL DEFAULT 19 af_tfng_script_class + 476: 0000000000086040 104 OBJECT GLOBAL DEFAULT 13 af_mymr_nonbase_uniranges + 477: 0000000000086b80 20 OBJECT GLOBAL DEFAULT 13 af_lisu_dflt_style_class + 478: 000000000006df74 756 FUNC GLOBAL DEFAULT 11 FTC_ImageCache_Lookup + 479: 0000000000063d10 8 FUNC GLOBAL DEFAULT 11 af_shaper_get_coverage + 480: 000000000001a7d8 136 FUNC GLOBAL DEFAULT 11 FT_Vector_Transform + 481: 000000000002210c 40 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Init + 482: 0000000000019644 184 FUNC GLOBAL DEFAULT 11 FT_Sfnt_Table_Info + 483: 00000000000ce920 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_custom_class_rec + 484: 00000000000860e8 16 OBJECT GLOBAL DEFAULT 13 af_mlym_uniranges + 485: 00000000000cf7b8 40 OBJECT GLOBAL DEFAULT 19 af_geor_script_class + 486: 0000000000086740 16 OBJECT GLOBAL DEFAULT 13 af_cari_uniranges + 487: 00000000000865b0 16 OBJECT GLOBAL DEFAULT 13 af_geor_uniranges + 488: 00000000000ce348 48 OBJECT GLOBAL DEFAULT 19 ft_grays_raster + 489: 000000000007870c 448 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenBzip2 + 490: 00000000000cf970 40 OBJECT GLOBAL DEFAULT 19 af_buhd_script_class + 491: 00000000000cea58 24 OBJECT GLOBAL DEFAULT 19 afm_parser_funcs + 492: 000000000001d714 260 FUNC GLOBAL DEFAULT 11 FT_Get_Advance + 493: 0000000000018658 276 FUNC GLOBAL DEFAULT 11 FT_Match_Size + 494: 0000000000086900 56 OBJECT GLOBAL DEFAULT 13 af_arab_uniranges + 495: 000000000001ae54 92 FUNC GLOBAL DEFAULT 11 FT_Stream_Seek + 496: 00000000000cf9e8 40 OBJECT GLOBAL DEFAULT 19 af_avst_script_class + 497: 000000000001e150 56 FUNC GLOBAL DEFAULT 11 FT_Stream_ReleaseFrame + 498: 0000000000017bd0 8 FUNC GLOBAL DEFAULT 11 FT_FloorFix + 499: 0000000000085e18 16 OBJECT GLOBAL DEFAULT 13 af_vaii_uniranges + 500: 00000000000172d4 8 FUNC GLOBAL DEFAULT 11 FT_Trace_Get_Name + 501: 0000000000023cb0 8 FUNC GLOBAL DEFAULT 11 FT_Library_SetLcdFilter + 502: 00000000000861b0 136 OBJECT GLOBAL DEFAULT 13 af_latn_nonbase_uniranges + 503: 0000000000018570 8 FUNC GLOBAL DEFAULT 11 ft_validator_run + 504: 000000000001981c 156 FUNC GLOBAL DEFAULT 11 FT_Set_Charmap + 505: 000000000001b9e4 216 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadUOffset + 506: 000000000001a8b8 384 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_Orientation + 507: 0000000000087108 20 OBJECT GLOBAL DEFAULT 13 af_arab_dflt_style_class + 508: 0000000000097b08 516 OBJECT GLOBAL DEFAULT 13 ft_mac_names + 509: 0000000000086be0 20 OBJECT GLOBAL DEFAULT 13 af_latn_titl_style_class + 510: 0000000000086b20 20 OBJECT GLOBAL DEFAULT 13 af_none_dflt_style_class + 511: 0000000000086b08 20 OBJECT GLOBAL DEFAULT 13 af_olck_dflt_style_class + 512: 00000000000d07d0 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 513: 0000000000086f58 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_subs_style_class + 514: 0000000000024370 140 FUNC GLOBAL DEFAULT 11 FT_Get_Var_Blend_Coordinates + 515: 000000000006ecf8 272 FUNC GLOBAL DEFAULT 11 FTC_Manager_LookupSize + 516: 0000000000086ee0 20 OBJECT GLOBAL DEFAULT 13 af_dsrt_dflt_style_class + 517: 0000000000086aa8 20 OBJECT GLOBAL DEFAULT 13 af_saur_dflt_style_class + 518: 0000000000021394 8 FUNC GLOBAL DEFAULT 11 FT_Open_Face + 519: 0000000000019de4 12 FUNC GLOBAL DEFAULT 11 FT_Property_Get + 520: 00000000000866b0 48 OBJECT GLOBAL DEFAULT 13 af_cyrl_uniranges + 521: 00000000000867b8 48 OBJECT GLOBAL DEFAULT 13 af_beng_nonbase_uniranges + 522: 0000000000077d50 1008 FUNC GLOBAL DEFAULT 11 ft_lzwstate_io + 523: 0000000000019c68 40 FUNC GLOBAL DEFAULT 11 FT_Render_Glyph + 524: 0000000000087138 1984 OBJECT GLOBAL DEFAULT 13 af_blue_stringsets + 525: 00000000000865a8 8 OBJECT GLOBAL DEFAULT 13 af_geor_nonbase_uniranges + 526: 00000000000cf600 40 OBJECT GLOBAL DEFAULT 19 af_khms_script_class + 527: 0000000000019a04 72 FUNC GLOBAL DEFAULT 11 FT_Face_GetVariantSelectors + 528: 00000000000cdc08 104 OBJECT GLOBAL DEFAULT 19 tt_cmap14_class_rec + 529: 0000000000023124 60 FUNC GLOBAL DEFAULT 11 FT_Get_Font_Format + 530: 0000000000086e20 20 OBJECT GLOBAL DEFAULT 13 af_grek_ordn_style_class + 531: 000000000001ccf4 292 FUNC GLOBAL DEFAULT 11 FT_Stream_New + 532: 000000000001731c 456 FUNC GLOBAL DEFAULT 11 FT_Set_Default_Properties + 533: 0000000000022084 136 FUNC GLOBAL DEFAULT 11 FT_Get_BDF_Property + 534: 0000000000086750 8 OBJECT GLOBAL DEFAULT 13 af_cans_nonbase_uniranges + 535: 0000000000087060 20 OBJECT GLOBAL DEFAULT 13 af_cans_dflt_style_class + 536: 00000000000187d0 192 FUNC GLOBAL DEFAULT 11 FT_Select_Metrics + 537: 0000000000022984 1408 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Embolden + 538: 00000000000cfa10 40 OBJECT GLOBAL DEFAULT 19 af_armn_script_class + 539: 0000000000087000 20 OBJECT GLOBAL DEFAULT 13 af_cprt_dflt_style_class + 540: 00000000000867e8 16 OBJECT GLOBAL DEFAULT 13 af_beng_uniranges + 541: 000000000001858c 168 FUNC GLOBAL DEFAULT 11 FT_Set_Transform + 542: 00000000000866f8 16 OBJECT GLOBAL DEFAULT 13 af_copt_nonbase_uniranges + 543: 000000000001a4e4 144 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_CBox + 544: 00000000000cf4c0 40 OBJECT GLOBAL DEFAULT 19 af_nkoo_script_class + 545: 00000000000172c8 4 FUNC GLOBAL DEFAULT 11 ft_debug_init + 546: 00000000000244c0 8 FUNC GLOBAL DEFAULT 11 FT_Face_CheckTrueTypePatents + 547: 0000000000085f78 16 OBJECT GLOBAL DEFAULT 13 af_shaw_uniranges + 548: 0000000000086bf8 20 OBJECT GLOBAL DEFAULT 13 af_latn_sups_style_class + 549: 0000000000086da8 20 OBJECT GLOBAL DEFAULT 13 af_grek_sups_style_class + 550: 00000000000256cc 28 FUNC GLOBAL DEFAULT 11 FT_Outline_GetInsideBorder + 551: 00000000000ce208 64 OBJECT GLOBAL DEFAULT 19 af_dummy_writing_system_class + 552: 00000000000cbbe0 192 OBJECT GLOBAL DEFAULT 19 cff_driver_class + 553: 00000000000244c8 8 FUNC GLOBAL DEFAULT 11 FT_Face_SetUnpatentedHinting + 554: 0000000000086a78 20 OBJECT GLOBAL DEFAULT 13 af_sinh_dflt_style_class + 555: 0000000000086610 64 OBJECT GLOBAL DEFAULT 13 af_deva_nonbase_uniranges + 556: 00000000000170bc 428 FUNC GLOBAL DEFAULT 11 FT_Stream_Open + 557: 0000000000086428 48 OBJECT GLOBAL DEFAULT 13 af_hebr_nonbase_uniranges + 558: 00000000000cf3a8 40 OBJECT GLOBAL DEFAULT 19 af_shaw_script_class + 559: 00000000000cf240 40 OBJECT GLOBAL DEFAULT 19 af_limb_script_class + 560: 0000000000021df4 464 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_BBox + 561: 0000000000065124 352 FUNC GLOBAL DEFAULT 11 af_shaper_get_cluster + 562: 00000000000cfa60 40 OBJECT GLOBAL DEFAULT 19 af_adlm_script_class + 563: 0000000000027438 376 FUNC GLOBAL DEFAULT 11 FT_Glyph_StrokeBorder + 564: 00000000000235d0 112 FUNC GLOBAL DEFAULT 11 FT_Glyph_Transform + 565: 000000000001cf00 184 FUNC GLOBAL DEFAULT 11 FT_Attach_Stream + 566: 000000000001978c 144 FUNC GLOBAL DEFAULT 11 FT_Get_CMap_Format + 567: 0000000000019e24 60 FUNC GLOBAL DEFAULT 11 FT_Library_Version + 568: 0000000000017bd8 88 FUNC GLOBAL DEFAULT 11 FT_MulDiv + 569: 00000000000d07d0 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 570: 000000000001adf0 40 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_Name_Count + 571: 0000000000077360 740 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenGzip + 572: 0000000000086f28 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_titl_style_class + 573: 0000000000019dd8 12 FUNC GLOBAL DEFAULT 11 FT_Property_Set + 574: 0000000000086738 8 OBJECT GLOBAL DEFAULT 13 af_cari_nonbase_uniranges + 575: 00000000000cf330 40 OBJECT GLOBAL DEFAULT 19 af_taml_script_class + 576: 00000000000cf2e0 40 OBJECT GLOBAL DEFAULT 19 af_telu_script_class + 577: 0000000000086758 24 OBJECT GLOBAL DEFAULT 13 af_cans_uniranges + 578: 0000000000086588 8 OBJECT GLOBAL DEFAULT 13 af_geok_nonbase_uniranges + 579: 000000000001f96c 40 FUNC GLOBAL DEFAULT 11 FT_List_Find + 580: 0000000000018114 428 FUNC GLOBAL DEFAULT 11 FT_Vector_NormLen + 581: 00000000000cf858 40 OBJECT GLOBAL DEFAULT 19 af_cyrl_script_class + 582: 00000000000ce2e8 48 OBJECT GLOBAL DEFAULT 19 ft_standard_raster + 583: 000000000001cbc0 132 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Reset + 584: 0000000000086798 16 OBJECT GLOBAL DEFAULT 13 af_buhd_nonbase_uniranges + 585: 0000000000019e7c 72 FUNC GLOBAL DEFAULT 11 FT_Get_TrueType_Engine_Type + 586: 0000000000086458 24 OBJECT GLOBAL DEFAULT 13 af_hebr_uniranges + 587: 000000000001754c 56 FUNC GLOBAL DEFAULT 11 FT_Done_FreeType + 588: 000000000001e9e8 252 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CopyPoints + 589: 0000000000086d78 20 OBJECT GLOBAL DEFAULT 13 af_grek_dflt_style_class + 590: 00000000000864b0 48 OBJECT GLOBAL DEFAULT 13 af_gujr_nonbase_uniranges + 591: 000000000006511c 8 FUNC GLOBAL DEFAULT 11 af_shaper_buf_destroy + 592: 00000000000cf880 40 OBJECT GLOBAL DEFAULT 19 af_cprt_script_class + 593: 00000000000cf510 40 OBJECT GLOBAL DEFAULT 19 af_mlym_script_class + 594: 00000000000cf420 40 OBJECT GLOBAL DEFAULT 19 af_osge_script_class + 595: 000000000006ef64 220 FUNC GLOBAL DEFAULT 11 FTC_Manager_LookupFace + 596: 000000000001f9c4 332 FUNC GLOBAL DEFAULT 11 FT_New_Size + 597: 0000000000086848 24 OBJECT GLOBAL DEFAULT 13 af_armn_uniranges + 598: 0000000000085e00 16 OBJECT GLOBAL DEFAULT 13 af_limb_uniranges + 599: 00000000000cf8a8 40 OBJECT GLOBAL DEFAULT 19 af_copt_script_class + 600: 0000000000019b6c 8 FUNC GLOBAL DEFAULT 11 FT_Get_Renderer + 601: 0000000000086f40 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_sups_style_class + 602: 00000000000199ac 88 FUNC GLOBAL DEFAULT 11 FT_Face_GetCharVariantIsDefault + 603: 0000000000087090 20 OBJECT GLOBAL DEFAULT 13 af_buhd_dflt_style_class + 604: 0000000000086720 24 OBJECT GLOBAL DEFAULT 13 af_cher_uniranges + 605: 0000000000085bf0 24 OBJECT GLOBAL DEFAULT 13 af_hani_nonbase_uniranges + 606: 000000000001b0f0 52 FUNC GLOBAL DEFAULT 11 FT_Stream_GetUShort + 607: 00000000000860c8 32 OBJECT GLOBAL DEFAULT 13 af_mlym_nonbase_uniranges + 608: 00000000000182dc 216 FUNC GLOBAL DEFAULT 11 ft_corner_is_flat + 609: 0000000000024098 140 FUNC GLOBAL DEFAULT 11 FT_Get_Var_Design_Coordinates + 610: 0000000000085e10 8 OBJECT GLOBAL DEFAULT 13 af_vaii_nonbase_uniranges + 611: 00000000000cf790 40 OBJECT GLOBAL DEFAULT 19 af_geok_script_class + 612: 00000000000cdf48 104 OBJECT GLOBAL DEFAULT 19 tt_cmap0_class_rec + 613: 000000000001e2bc 60 FUNC GLOBAL DEFAULT 11 FT_Stream_ExtractFrame + 614: 00000000000257cc 36 FUNC GLOBAL DEFAULT 11 FT_Stroker_Rewind + 615: 0000000000086018 8 OBJECT GLOBAL DEFAULT 13 af_none_uniranges + 616: 00000000000cf718 40 OBJECT GLOBAL DEFAULT 19 af_grek_script_class + 617: 0000000000086718 8 OBJECT GLOBAL DEFAULT 13 af_cher_nonbase_uniranges + 618: 00000000000977f8 782 OBJECT GLOBAL DEFAULT 13 ft_sid_names + 619: 000000000001babc 216 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadOffset + 620: 00000000000860f8 8 OBJECT GLOBAL DEFAULT 13 af_lisu_nonbase_uniranges + 621: 0000000000085d00 80 OBJECT GLOBAL DEFAULT 13 af_tibt_nonbase_uniranges + 622: 0000000000086600 16 OBJECT GLOBAL DEFAULT 13 af_dsrt_uniranges + 623: 0000000000021570 720 FUNC GLOBAL DEFAULT 11 FT_Add_Module + 624: 000000000006e268 804 FUNC GLOBAL DEFAULT 11 FTC_ImageCache_LookupScaler + 625: 000000000002455c 192 FUNC GLOBAL DEFAULT 11 FT_Get_PFR_Metrics + 626: 0000000000085f88 24 OBJECT GLOBAL DEFAULT 13 af_saur_nonbase_uniranges + 627: 00000000000cc9a0 192 OBJECT GLOBAL DEFAULT 19 pfr_driver_class + 628: 0000000000097d10 3696 OBJECT GLOBAL DEFAULT 13 ft_standard_glyph_names + 629: 000000000001e334 616 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadFields + 630: 00000000000ceb30 32 OBJECT GLOBAL DEFAULT 19 ps_table_funcs + 631: 00000000000183f0 72 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Prepare + 632: 0000000000086ad8 20 OBJECT GLOBAL DEFAULT 13 af_osge_dflt_style_class + 633: 0000000000085fd0 16 OBJECT GLOBAL DEFAULT 13 af_osge_uniranges + 634: 00000000000d07d0 0 NOTYPE GLOBAL DEFAULT 23 _end + 635: 000000000001f56c 360 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_Name + 636: 00000000000ce288 72 OBJECT GLOBAL DEFAULT 19 pshinter_module_class + 637: 0000000000023640 224 FUNC GLOBAL DEFAULT 11 FT_Glyph_Get_CBox + 638: 0000000000019e60 28 FUNC GLOBAL DEFAULT 11 FT_Set_Debug_Hook + 639: 00000000000cf8f8 40 OBJECT GLOBAL DEFAULT 19 af_cari_script_class + 640: 00000000000863f8 16 OBJECT GLOBAL DEFAULT 13 af_knda_uniranges + 641: 000000000001cfb8 108 FUNC GLOBAL DEFAULT 11 FT_Attach_File + 642: 00000000000cf588 40 OBJECT GLOBAL DEFAULT 19 af_latb_script_class + 643: 00000000000cb050 192 OBJECT GLOBAL DEFAULT 19 t1_driver_class + 644: 000000000001e13c 20 FUNC GLOBAL DEFAULT 11 FT_Outline_Done + 645: 0000000000086860 160 OBJECT GLOBAL DEFAULT 13 af_arab_nonbase_uniranges + 646: 0000000000085f60 16 OBJECT GLOBAL DEFAULT 13 af_sinh_uniranges + 647: 00000000000867a8 16 OBJECT GLOBAL DEFAULT 13 af_buhd_uniranges + 648: 000000000002319c 184 FUNC GLOBAL DEFAULT 11 FT_Get_FSType_Flags + 649: 00000000000cf6c8 40 OBJECT GLOBAL DEFAULT 19 af_guru_script_class + 650: 0000000000023854 300 FUNC GLOBAL DEFAULT 11 FT_Get_Glyph + 651: 000000000001ae18 28 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenMemory + 652: 00000000000194ac 136 FUNC GLOBAL DEFAULT 11 FT_Get_Postscript_Name + 653: 000000000001f03c 20 FUNC GLOBAL DEFAULT 11 FT_Outline_New + 654: 0000000000023e84 132 FUNC GLOBAL DEFAULT 11 FT_Get_MM_Var + 655: 000000000001b1c8 68 FUNC GLOBAL DEFAULT 11 FT_Stream_GetUOffset + 656: 000000000001d818 76 FUNC GLOBAL DEFAULT 11 FT_Load_Char + 657: 00000000000190f4 208 FUNC GLOBAL DEFAULT 11 FT_Get_Next_Char + 658: 000000000001e2f8 60 FUNC GLOBAL DEFAULT 11 FT_Stream_ExitFrame + 659: 00000000000ca5b0 192 OBJECT GLOBAL DEFAULT 19 tt_driver_class + 660: 0000000000065284 72 FUNC GLOBAL DEFAULT 11 af_shaper_get_elem + 661: 0000000000086938 16 OBJECT GLOBAL DEFAULT 13 af_adlm_nonbase_uniranges + 662: 0000000000085fa0 16 OBJECT GLOBAL DEFAULT 13 af_saur_uniranges + 663: 00000000000ce8d0 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_unicode_class_rec + 664: 00000000000cf6a0 40 OBJECT GLOBAL DEFAULT 19 af_hebr_script_class + 665: 0000000000019a4c 80 FUNC GLOBAL DEFAULT 11 FT_Face_GetVariantsOfChar + 666: 0000000000019338 156 FUNC GLOBAL DEFAULT 11 FT_Get_Name_Index + 667: 00000000000cdc70 104 OBJECT GLOBAL DEFAULT 19 tt_cmap13_class_rec + 668: 000000000001b848 204 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadUShortLE + 669: 00000000000cdcd8 104 OBJECT GLOBAL DEFAULT 19 tt_cmap12_class_rec + 670: 000000000001b378 180 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadChar + 671: 0000000000086388 40 OBJECT GLOBAL DEFAULT 13 af_khmr_nonbase_uniranges + 672: 00000000000207ec 112 FUNC GLOBAL DEFAULT 11 FT_New_Face + 673: 0000000000087018 20 OBJECT GLOBAL DEFAULT 13 af_copt_dflt_style_class + 674: 0000000000022334 1284 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Convert + 675: 000000000002582c 196 FUNC GLOBAL DEFAULT 11 FT_Stroker_Done + 676: 0000000000086c70 20 OBJECT GLOBAL DEFAULT 13 af_latn_ordn_style_class + 677: 000000000001b32c 76 FUNC GLOBAL DEFAULT 11 FT_Stream_GetLongLE + 678: 00000000000cdda8 104 OBJECT GLOBAL DEFAULT 19 tt_cmap8_class_rec + 679: 00000000000272f4 324 FUNC GLOBAL DEFAULT 11 FT_Glyph_Stroke + 680: 000000000006f730 108 FUNC GLOBAL DEFAULT 11 FTC_Manager_Reset + 681: 0000000000026db0 324 FUNC GLOBAL DEFAULT 11 FT_Stroker_ExportBorder + 682: 00000000000cfbf0 120 OBJECT GLOBAL DEFAULT 19 ft_smooth_renderer_class + 683: 0000000000022134 40 FUNC GLOBAL DEFAULT 11 FT_Bitmap_New + 684: 0000000000085d60 40 OBJECT GLOBAL DEFAULT 13 af_sylo_nonbase_uniranges + 685: 000000000001fb40 56 FUNC GLOBAL DEFAULT 11 FT_List_Remove + 686: 000000000006f4ec 352 FUNC GLOBAL DEFAULT 11 FTC_Manager_New + 687: 0000000000017d0c 20 FUNC GLOBAL DEFAULT 11 FT_MulFix + 688: 00000000000cefa8 464 OBJECT GLOBAL DEFAULT 19 af_script_classes + 689: 0000000000086340 32 OBJECT GLOBAL DEFAULT 13 af_lao_nonbase_uniranges + 690: 00000000000d07c8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 691: 0000000000086190 32 OBJECT GLOBAL DEFAULT 13 af_latb_uniranges + 692: 0000000000083018 0 FUNC GLOBAL DEFAULT 12 _fini + 693: 0000000000086530 24 OBJECT GLOBAL DEFAULT 13 af_grek_uniranges + 694: 000000000001c3bc 248 FUNC GLOBAL DEFAULT 11 FT_Vector_Length + 695: 0000000000085e30 16 OBJECT GLOBAL DEFAULT 13 af_tfng_uniranges + 696: 00000000000cf998 40 OBJECT GLOBAL DEFAULT 19 af_beng_script_class + 697: 0000000000085c08 248 OBJECT GLOBAL DEFAULT 13 af_hani_uniranges + 698: 0000000000017f60 268 FUNC GLOBAL DEFAULT 11 FT_Matrix_Multiply_Scaled + 699: 000000000006e5a0 908 FUNC GLOBAL DEFAULT 11 FTC_SBitCache_Lookup + 700: 00000000000ce9c0 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_standard_class_rec + 701: 00000000000878f8 5161 OBJECT GLOBAL DEFAULT 13 af_blue_strings + 702: 0000000000019d14 32 FUNC GLOBAL DEFAULT 11 FT_Get_Module_Interface + 703: 0000000000019d34 164 FUNC GLOBAL DEFAULT 11 ft_module_get_service + 704: 0000000000077ab0 100 FUNC GLOBAL DEFAULT 11 ft_lzwstate_init diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgbm.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgbm.so.1.txt new file mode 100644 index 000000000000..dfacc36fb794 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgbm.so.1.txt @@ -0,0 +1,128 @@ +Library: /lib64/libgbm.so.1 +Package: mesa-libgbm-18.3.4-12.el7_9.aarch64 + + +Symbol table '.dynsym' contains 122 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000002538 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fa60 0 SECTION LOCAL DEFAULT 18 + 3: 00000000000203c0 0 NOTYPE LOCAL DEFAULT 24 __bss_start__ + 4: 00000000000203c8 0 NOTYPE LOCAL DEFAULT 24 _bss_end__ + 5: 00000000000203c0 0 NOTYPE LOCAL DEFAULT 23 _edata + 6: 00000000000203c8 0 NOTYPE LOCAL DEFAULT 24 __bss_end__ + 7: 00000000000203c8 0 NOTYPE LOCAL DEFAULT 24 _end + 8: 00000000000203c8 0 NOTYPE LOCAL DEFAULT 24 __end__ + 9: 00000000000203c0 0 NOTYPE LOCAL DEFAULT 24 __bss_start + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetBuffer + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetErrorCode + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND program_invocation_name@GLIBC_2.17 (2) + 15: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmFreeVersion + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ParserCreate + 19: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetCurrentLineNumber + 22: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.17 (3) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.17 (3) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 27: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __progname_full@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_resource_get_user_data + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND alphasort@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlerror@GLIBC_2.17 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.17 (3) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (4) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_resource_instance_of + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetCurrentColumnNumber + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ParserFree + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_SetUserData + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetDevice2 + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_Parse + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.17 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (2) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (4) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 50: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 51: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (5) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ParseBuffer + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __asprintf_chk@GLIBC_2.17 (2) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pow@GLIBC_2.17 (6) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetVersion + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND scandir@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.17 (2) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmFreeDevices + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strspn@GLIBC_2.17 (2) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ErrorString + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fnmatch@GLIBC_2.17 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (4) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_SetElementHandler + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (4) + 72: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 73: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND wl_buffer_interface + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetDevices2 + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetDeviceNameFromFd2 + 78: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (4) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmFreeDevice + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (4) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmCommandWriteRead + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (4) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmIoctl + 86: 000000000000335c 28 FUNC GLOBAL DEFAULT 11 gbm_surface_destroy + 87: 0000000000003378 28 FUNC GLOBAL DEFAULT 11 gbm_surface_lock_front_buffer + 88: 0000000000003180 12 FUNC GLOBAL DEFAULT 11 gbm_bo_set_user_data + 89: 00000000000088c4 0 FUNC GLOBAL DEFAULT 12 _fini + 90: 0000000000003288 72 FUNC GLOBAL DEFAULT 11 gbm_bo_map + 91: 000000000000318c 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_user_data + 92: 00000000000033b0 28 FUNC GLOBAL DEFAULT 11 gbm_surface_has_free_buffers + 93: 00000000000030c8 28 FUNC GLOBAL DEFAULT 11 gbm_bo_get_offset + 94: 00000000000030f4 28 FUNC GLOBAL DEFAULT 11 gbm_bo_get_fd + 95: 0000000000002c40 24 FUNC GLOBAL DEFAULT 11 gbm_device_get_format_modifier_plane_count + 96: 0000000000002538 0 FUNC GLOBAL DEFAULT 9 _init + 97: 000000000000312c 28 FUNC GLOBAL DEFAULT 11 gbm_bo_get_handle_for_plane + 98: 0000000000002c58 40 FUNC GLOBAL DEFAULT 11 gbm_device_destroy + 99: 0000000000003394 28 FUNC GLOBAL DEFAULT 11 gbm_surface_release_buffer + 100: 00000000000031d0 68 FUNC GLOBAL DEFAULT 11 gbm_bo_create + 101: 00000000000032ec 32 FUNC GLOBAL DEFAULT 11 gbm_surface_create + 102: 0000000000002cb4 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_format + 103: 0000000000002c88 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_height + 104: 00000000000030e4 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_device + 105: 0000000000003214 92 FUNC GLOBAL DEFAULT 11 gbm_bo_create_with_modifiers + 106: 0000000000003110 28 FUNC GLOBAL DEFAULT 11 gbm_bo_get_plane_count + 107: 0000000000002b58 192 FUNC GLOBAL DEFAULT 11 gbm_create_device + 108: 0000000000002c80 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_width + 109: 0000000000002c18 8 FUNC GLOBAL DEFAULT 11 gbm_device_get_fd + 110: 00000000000030ec 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_handle + 111: 0000000000002cac 8 FUNC GLOBAL DEFAULT 11 gbm_bo_get_stride + 112: 0000000000003164 28 FUNC GLOBAL DEFAULT 11 gbm_bo_write + 113: 0000000000002c28 24 FUNC GLOBAL DEFAULT 11 gbm_device_is_format_supported + 114: 0000000000003148 28 FUNC GLOBAL DEFAULT 11 gbm_bo_get_modifier + 115: 00000000000032d0 28 FUNC GLOBAL DEFAULT 11 gbm_bo_unmap + 116: 0000000000002cbc 1036 FUNC GLOBAL DEFAULT 11 gbm_bo_get_bpp + 117: 000000000000330c 80 FUNC GLOBAL DEFAULT 11 gbm_surface_create_with_modifiers + 118: 0000000000002c20 8 FUNC GLOBAL DEFAULT 11 gbm_device_get_backend_name + 119: 0000000000002c90 28 FUNC GLOBAL DEFAULT 11 gbm_bo_get_stride_for_plane + 120: 0000000000003194 60 FUNC GLOBAL DEFAULT 11 gbm_bo_destroy + 121: 0000000000003270 24 FUNC GLOBAL DEFAULT 11 gbm_bo_import diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgcc_s.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgcc_s.so.1.txt new file mode 100644 index 000000000000..5097333f46a0 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgcc_s.so.1.txt @@ -0,0 +1,163 @@ +Library: /lib64/libgcc_s.so.1 +Package: libgcc-4.8.5-44.el7.aarch64 + + +Symbol table '.dynsym' contains 157 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000025f8 0 SECTION LOCAL DEFAULT 10 + 2: 000000000002fda8 0 SECTION LOCAL DEFAULT 20 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (14) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (14) + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_key_create + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (14) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (14) + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_getspecific + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (14) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (14) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (14) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_key_create + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (14) + 16: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_once + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dl_iterate_phdr@GLIBC_2.17 (14) + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_setspecific + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (14) + 20: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 22: 0000000000000000 0 FUNC WEAK DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (14) + 23: 0000000000000000 0 FUNC WEAK DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (14) + 24: 0000000000002ed0 36 FUNC GLOBAL DEFAULT 12 __mulvsi3@@GCC_3.0 + 25: 000000000000a898 648 FUNC GLOBAL DEFAULT 12 __floatuntitf@@GCC_4.2.0 + 26: 0000000000008538 352 FUNC GLOBAL DEFAULT 12 __letf2@@GCC_3.0 + 27: 0000000000005b24 1136 FUNC GLOBAL DEFAULT 12 __modti3@@GCC_3.0 + 28: 0000000000005278 8 FUNC GLOBAL DEFAULT 12 __bswapdi2@@GCC_4.3.0 + 29: 0000000000009c54 96 FUNC GLOBAL DEFAULT 12 __unordtf2@@GCC_4.5.0 + 30: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.0 + 31: 000000000000fd7c 368 FUNC GLOBAL DEFAULT 12 __emutls_get_address@@GCC_4.3.0 + 32: 00000000000079d4 2304 FUNC GLOBAL DEFAULT 12 __divtf3@@GCC_3.0 + 33: 0000000000002c28 52 FUNC GLOBAL DEFAULT 12 __ucmpti2@@GCC_3.0 + 34: 000000000000d6bc 280 FUNC GLOBAL DEFAULT 12 __frame_state_for@@GLIBC_2.0 + 35: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.3 + 36: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.4 + 37: 0000000000002cd0 52 FUNC GLOBAL DEFAULT 12 __addvdi3@@GCC_3.0 + 38: 0000000000002bb4 64 FUNC GLOBAL DEFAULT 12 __ashrti3@@GCC_3.0 + 39: 0000000000002d38 128 FUNC GLOBAL DEFAULT 12 __addvti3@@GCC_3.4.4 + 40: 0000000000003478 36 FUNC GLOBAL DEFAULT 12 __paritydi2@@GCC_3.4 + 41: 000000000000349c 40 FUNC GLOBAL DEFAULT 12 __parityti2@@GCC_3.4 + 42: 0000000000002b74 64 FUNC GLOBAL DEFAULT 12 __ashlti3@@GCC_3.0 + 43: 0000000000009e60 152 FUNC GLOBAL DEFAULT 12 __floatsitf@@GCC_3.0 + 44: 000000000000da90 288 FUNC GLOBAL DEFAULT 12 _Unwind_Resume@@GCC_3.0 + 45: 000000000000dcf0 208 FUNC GLOBAL DEFAULT 12 _Unwind_Backtrace@@GCC_3.3 + 46: 00000000000038f8 720 FUNC GLOBAL DEFAULT 12 __muldc3@@GCC_4.0.0 + 47: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.4.2 + 48: 0000000000003be0 2192 FUNC GLOBAL DEFAULT 12 __multc3@@GCC_4.0.0 + 49: 00000000000082d4 252 FUNC GLOBAL DEFAULT 12 __eqtf2@@GCC_3.0 + 50: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.4.4 + 51: 0000000000002b1c 24 FUNC GLOBAL DEFAULT 12 __negti2@@GCC_3.0 + 52: 0000000000003514 80 FUNC GLOBAL DEFAULT 12 __powidf2@@GCC_4.0.0 + 53: 0000000000003570 156 FUNC GLOBAL DEFAULT 12 __powitf2@@GCC_4.0.0 + 54: 0000000000003268 80 FUNC GLOBAL DEFAULT 12 __clzdi2@@GCC_3.4 + 55: 00000000000032b8 108 FUNC GLOBAL DEFAULT 12 __clzti2@@GCC_3.4 + 56: 0000000000005f94 1084 FUNC GLOBAL DEFAULT 12 __udivti3@@GCC_3.0 + 57: 000000000000a1b4 140 FUNC GLOBAL DEFAULT 12 __floatditf@@GCC_3.0 + 58: 0000000000005490 128 FUNC GLOBAL DEFAULT 12 __floattisf@@GCC_3.0 + 59: 000000000000b044 788 FUNC GLOBAL DEFAULT 12 __trunctfdf2@@GCC_3.0 + 60: 000000000000ab20 264 FUNC GLOBAL DEFAULT 12 __extendsftf2@@GCC_3.0 + 61: 000000000000a0c0 244 FUNC GLOBAL DEFAULT 12 __fixunstfdi@@GCC_3.0 + 62: 000000000000b6fc 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetLanguageSpecificData@@GCC_3.0 + 63: 000000000000b70c 36 FUNC GLOBAL DEFAULT 12 _Unwind_FindEnclosingFunction@@GCC_3.3 + 64: 000000000000b6e0 20 FUNC GLOBAL DEFAULT 12 _Unwind_GetIPInfo@@GCC_4.2.0 + 65: 000000000000a488 360 FUNC GLOBAL DEFAULT 12 __fixunstfti@@GCC_3.0 + 66: 000000000000f590 300 FUNC GLOBAL DEFAULT 12 __deregister_frame_info_bases@@GCC_3.0 + 67: 00000000000031b4 84 FUNC GLOBAL DEFAULT 12 __ffsdi2@@GCC_3.0 + 68: 0000000000003208 96 FUNC GLOBAL DEFAULT 12 __ffsti2@@GCC_3.0 + 69: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.5.0 + 70: 000000000000b730 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetDataRelBase@@GCC_3.0 + 71: 00000000000046e0 536 FUNC GLOBAL DEFAULT 12 __divdc3@@GCC_4.0.0 + 72: 0000000000004910 2348 FUNC GLOBAL DEFAULT 12 __divtc3@@GCC_4.0.0 + 73: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.2.0 + 74: 0000000000002ea4 44 FUNC GLOBAL DEFAULT 12 __mulvdi3@@GCC_3.0 + 75: 0000000000002ef4 512 FUNC GLOBAL DEFAULT 12 __mulvti3@@GCC_3.4.4 + 76: 0000000000002c80 32 FUNC GLOBAL DEFAULT 12 __absvsi2@@GCC_3.0 + 77: 000000000000f564 44 FUNC GLOBAL DEFAULT 12 __register_frame_table@@GLIBC_2.0 + 78: 0000000000009034 3104 FUNC GLOBAL DEFAULT 12 __subtf3@@GCC_3.0 + 79: 0000000000008ddc 600 FUNC GLOBAL DEFAULT 12 __negtf2@@GCC_3.0 + 80: 000000000000f4bc 156 FUNC GLOBAL DEFAULT 12 __register_frame_info_table_bases@@GCC_3.0 + 81: 0000000000005520 128 FUNC GLOBAL DEFAULT 12 __floattidf@@GCC_3.0 + 82: 000000000000b704 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetRegionStart@@GCC_3.0 + 83: 000000000000a5f0 680 FUNC GLOBAL DEFAULT 12 __floattitf@@GCC_3.0 + 84: 000000000000f6e4 508 FUNC GLOBAL DEFAULT 12 _Unwind_Find_FDE@@GCC_3.0 + 85: 000000000000b6f4 8 FUNC GLOBAL DEFAULT 12 _Unwind_SetIP@@GCC_3.0 + 86: 000000000000b6d8 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetIP@@GCC_3.0 + 87: 00000000000063d0 1056 FUNC GLOBAL DEFAULT 12 __umodti3@@GCC_3.0 + 88: 000000000000f3d4 156 FUNC GLOBAL DEFAULT 12 __register_frame_info_bases@@GCC_3.0 + 89: 0000000000002dec 52 FUNC GLOBAL DEFAULT 12 __subvsi3@@GCC_3.0 + 90: 00000000000053b0 60 FUNC GLOBAL DEFAULT 12 __fixsfti@@GCC_3.0 + 91: 0000000000006dd0 3076 FUNC GLOBAL DEFAULT 12 __addtf3@@GCC_3.0 + 92: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.3.0 + 93: 0000000000003128 52 FUNC GLOBAL DEFAULT 12 __negvsi2@@GCC_3.0 + 94: 0000000000002c60 32 FUNC GLOBAL DEFAULT 12 __absvdi2@@GCC_3.0 + 95: 0000000000002ca0 48 FUNC GLOBAL DEFAULT 12 __absvti2@@GCC_3.4.4 + 96: 0000000000002ac4 88 FUNC GLOBAL DEFAULT 12 __multi3@@GCC_3.0 + 97: 000000000000dccc 36 FUNC GLOBAL DEFAULT 12 _Unwind_DeleteException@@GCC_3.0 + 98: 0000000000002b34 64 FUNC GLOBAL DEFAULT 12 __lshrti3@@GCC_3.0 + 99: 000000000000b674 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetCFA@@GCC_3.3 + 100: 000000000000b358 4 FUNC GLOBAL DEFAULT 12 __enable_execute_stack@@GCC_3.4.2 + 101: 00000000000033e8 52 FUNC GLOBAL DEFAULT 12 __popcountdi2@@GCC_3.4 + 102: 000000000000341c 92 FUNC GLOBAL DEFAULT 12 __popcountti2@@GCC_3.4 + 103: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.0.0 + 104: 00000000000082d4 252 FUNC GLOBAL DEFAULT 12 __netf2@@GCC_3.0 + 105: 0000000000002c5c 4 FUNC GLOBAL DEFAULT 12 __clear_cache@@GCC_3.0 + 106: 0000000000009ef8 128 FUNC GLOBAL DEFAULT 12 __floatunsitf@@GCC_4.2.0 + 107: 0000000000009cb4 244 FUNC GLOBAL DEFAULT 12 __fixtfsi@@GCC_3.0 + 108: 00000000000053ec 60 FUNC GLOBAL DEFAULT 12 __fixdfti@@GCC_3.0 + 109: 0000000000002bf4 52 FUNC GLOBAL DEFAULT 12 __cmpti2@@GCC_3.0 + 110: 000000000000ac28 272 FUNC GLOBAL DEFAULT 12 __extenddftf2@@GCC_3.0 + 111: 0000000000005270 8 FUNC GLOBAL DEFAULT 12 __bswapsi2@@GCC_4.3.0 + 112: 000000000000d7dc 412 FUNC GLOBAL DEFAULT 12 _Unwind_RaiseException@@GCC_3.0 + 113: 000000000000a240 124 FUNC GLOBAL DEFAULT 12 __floatunditf@@GCC_4.2.0 + 114: 00000000000055b0 92 FUNC GLOBAL DEFAULT 12 __floatuntisf@@GCC_4.2.0 + 115: 0000000000002d04 52 FUNC GLOBAL DEFAULT 12 __addvsi3@@GCC_3.0 + 116: 00000000000083d0 360 FUNC GLOBAL DEFAULT 12 __gttf2@@GCC_3.0 + 117: 000000000000f6c0 36 FUNC GLOBAL DEFAULT 12 __deregister_frame@@GLIBC_2.0 + 118: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.3.1 + 119: 0000000000003324 84 FUNC GLOBAL DEFAULT 12 __ctzdi2@@GCC_3.4 + 120: 0000000000005690 1172 FUNC GLOBAL DEFAULT 12 __divti3@@GCC_3.0 + 121: 0000000000003620 720 FUNC GLOBAL DEFAULT 12 __mulsc3@@GCC_4.0.0 + 122: 0000000000003378 112 FUNC GLOBAL DEFAULT 12 __ctzti2@@GCC_3.4 + 123: 000000000000f47c 64 FUNC GLOBAL DEFAULT 12 __register_frame@@GLIBC_2.0 + 124: 000000000000f558 12 FUNC GLOBAL DEFAULT 12 __register_frame_info_table@@GLIBC_2.0 + 125: 00000000000034c4 80 FUNC GLOBAL DEFAULT 12 __powisf2@@GCC_4.0.0 + 126: 0000000000005280 84 FUNC GLOBAL DEFAULT 12 __clrsbdi2@@GCC_4.7.0 + 127: 00000000000052d4 124 FUNC GLOBAL DEFAULT 12 __clrsbti2@@GCC_4.7.0 + 128: 00000000000083d0 360 FUNC GLOBAL DEFAULT 12 __getf2@@GCC_3.0 + 129: 0000000000005350 40 FUNC GLOBAL DEFAULT 12 __fixunssfdi@@GCC_3.0 + 130: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.7.0 + 131: 000000000000ad38 780 FUNC GLOBAL DEFAULT 12 __trunctfsf2@@GCC_3.0 + 132: 0000000000008698 1860 FUNC GLOBAL DEFAULT 12 __multf3@@GCC_3.0 + 133: 000000000000dbb0 284 FUNC GLOBAL DEFAULT 12 _Unwind_Resume_or_Rethrow@@GCC_3.3 + 134: 000000000000feec 64 FUNC GLOBAL DEFAULT 12 __emutls_register_common@@GCC_4.3.0 + 135: 0000000000005428 36 FUNC GLOBAL DEFAULT 12 __fixunssfti@@GCC_3.0 + 136: 0000000000002db8 52 FUNC GLOBAL DEFAULT 12 __subvdi3@@GCC_3.0 + 137: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.0 + 138: 0000000000002e20 132 FUNC GLOBAL DEFAULT 12 __subvti3@@GCC_3.4.4 + 139: 0000000000009f78 328 FUNC GLOBAL DEFAULT 12 __fixtfdi@@GCC_3.0 + 140: 000000000000f470 12 FUNC GLOBAL DEFAULT 12 __register_frame_info@@GLIBC_2.0 + 141: 00000000000067f8 1256 FUNC GLOBAL DEFAULT 12 __udivmodti4@@GCC_3.0 + 142: 00000000000030f4 52 FUNC GLOBAL DEFAULT 12 __negvdi2@@GCC_3.0 + 143: 000000000000a2bc 460 FUNC GLOBAL DEFAULT 12 __fixtfti@@GCC_3.0 + 144: 000000000000315c 88 FUNC GLOBAL DEFAULT 12 __negvti2@@GCC_3.4.4 + 145: 000000000000f6bc 4 FUNC GLOBAL DEFAULT 12 __deregister_frame_info@@GLIBC_2.0 + 146: 0000000000008538 352 FUNC GLOBAL DEFAULT 12 __lttf2@@GCC_3.0 + 147: 0000000000005380 40 FUNC GLOBAL DEFAULT 12 __fixunsdfdi@@GCC_3.0 + 148: 000000000000fa78 644 FUNC GLOBAL DEFAULT 12 __gcc_personality_v0@@GCC_3.3.1 + 149: 0000000000005460 32 FUNC GLOBAL DEFAULT 12 __fixunsdfti@@GCC_3.0 + 150: 0000000000009da8 184 FUNC GLOBAL DEFAULT 12 __fixunstfsi@@GCC_3.0 + 151: 000000000000b67c 92 FUNC GLOBAL DEFAULT 12 _Unwind_SetGR@@GCC_3.0 + 152: 00000000000044c0 536 FUNC GLOBAL DEFAULT 12 __divsc3@@GCC_4.0.0 + 153: 0000000000005620 92 FUNC GLOBAL DEFAULT 12 __floatuntidf@@GCC_4.2.0 + 154: 000000000000b618 92 FUNC GLOBAL DEFAULT 12 _Unwind_GetGR@@GCC_3.0 + 155: 000000000000b738 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetTextRelBase@@GCC_3.0 + 156: 000000000000d978 280 FUNC GLOBAL DEFAULT 12 _Unwind_ForcedUnwind@@GCC_3.0 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgio-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgio-2.0.so.0.txt new file mode 100644 index 000000000000..03bbad90880c --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgio-2.0.so.0.txt @@ -0,0 +1,2921 @@ +Library: /lib64/libgio-2.0.so.0 +Package: glib2-2.56.1-9.el7_9.aarch64 + + +Symbol table '.dynsym' contains 2915 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000358b8 0 SECTION LOCAL DEFAULT 9 + 2: 00000000001bb7b8 0 SECTION LOCAL DEFAULT 20 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_object + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_validate + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_module_get_type + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_update + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_new_full + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_move + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_pop_thread_default + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_memdup + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND kill@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_is_variant + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND if_nametoindex@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_objv + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int64 + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_new + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_get_first_value + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_get_string + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_string + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_value + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sort + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_sort + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_bytestring + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_remove + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkdir_with_parents + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_take_ref + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_new_table@MOUNT_2.19 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_clear + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_unset + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_priority + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdupv + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_parsed + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_shutdown + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_get_dirname + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_is_absolute + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_uint16 + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_run_dispose + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_string + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_command_line_sync + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_find + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_new + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_has_key + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__ENUM + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_get_data + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_free + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateReset + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_get_builtin_optmap@MOUNT_2.19 (3) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND link@GLIBC_2.17 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_string + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __gcc_personality_v0@GCC_3.3.1 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_va + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__BOOLEAN + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unlink + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_new + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_push_tail + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcspn@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_override_property + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_keys + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_iconv_open + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_objv + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_string_list + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.17 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_values + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_equal + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_byte + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_prepend + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_new + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_module_use + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dir_close + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_of_type + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchmod@GLIBC_2.17 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.17 (2) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_value + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_set_size + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_shell_parse_argv + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_new + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getfilecon_raw + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_lock + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND flistxattr@GLIBC_2.17 (2) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_ignore_unknown_options + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateEnd + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_add + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unix_open_pipe + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_string + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_ref_sink + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_freeze_notify + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strtoll + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam@GLIBC_2.17 (2) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_children + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_time_val_from_iso8601 + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_double + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_modify_unix_fd + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dir_read_name + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_get_basename + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_int32 + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_is_dict_entry + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_open + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_string + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_from_name + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_strv + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_dup_string + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_quit + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unix_new + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_add + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_get_size + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new_with_free_func + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_is_empty + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_new_valist + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_data + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_print + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getmntent_r@GLIBC_2.17 (2) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_byteswap + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_signature + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_lookup_extended + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_string + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_free + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.17 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_schar + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_new + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_new + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind_textdomain_codeset@GLIBC_2.17 (2) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_steal_all + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_random_int + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.17 (2) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_init + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_add_value + 141: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_pointer + 143: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lchown@GLIBC_2.17 (2) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_instance_private + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_enum + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_object + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit_by_name + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateGetHeader@ZLIB_1.2.2 (5) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_type + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND openat@GLIBC_2.17 (2) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.17 (2) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup_extended + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.17 (2) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_keys_as_array + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_new + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_aton@GLIBC_2.17 (2) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND splice@GLIBC_2.17 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_to_utf8 + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_clear_error + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_get_fstype@MOUNT_2.19 (3) + 168: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND in6addr_any@GLIBC_2.17 (2) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boolean + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chown@GLIBC_2.17 (2) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_normal_form + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_unlock + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __read_chk@GLIBC_2.17 (2) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_boolean + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_keys + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.17 (2) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (2) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_double + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (2) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_close + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_enum + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_property + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_get_time + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_child_watch_add + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_string + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getservbyname@GLIBC_2.17 (2) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflate + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_foreach + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_remove_key + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove_index + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__VARIANT + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename_valist + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_length + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freecon + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_copy + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_broadcast + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit_ + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data_full + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc_n + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_set_data_full + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_from_data + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_unref + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_poll + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_to_uri + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_printerr + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_remove_range + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_environ_getenv + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_first + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_convert + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unix_set_fd_nonblocking + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_new + 217: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (6) + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free_full + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopendir@GLIBC_2.17 (2) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_rm_watch@GLIBC_2.17 (2) + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_command_line_async + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_size + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uint + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_optstr_get_flags@MOUNT_2.19 (3) + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_condition_get_type + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_bytestring_array + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_free + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_is_a + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_print + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_string_list + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_gtype + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_tokenize_and_fold + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_variant + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_end + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (2) + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND symlink@GLIBC_2.17 (2) + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new_with_free_func + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_install_property + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_insert_value + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_unprocessed + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_unref + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_uint + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_ref + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_move_to_front + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_new_tuple + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unsetenv + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.17 (7) + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_new_file + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_filename_charsets + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_set_marshal + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_free_full + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_contains + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_foreach + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_casefold + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__STRING + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_next + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_remove_index + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstatat@GLIBC_2.17 (2) + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_insert_before + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_unescape_segment + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (2) + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_end_parse + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_parse_strv + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hostname_is_ip_address + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_async_with_pipes + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_insert + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.17 (2) + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.17 (2) + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_uint16 + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hostname_is_non_ascii + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_clear + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dcgettext + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_copy + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_access + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.17 (2) + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_printf_escaped + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_dict_entry + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_has_group + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_notify + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_sized_new + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_new + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_close_pid + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_strv + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_language_names + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_new + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strndup + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_unref + 300: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setfilecon_raw + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit2_ + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_int + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.17 (2) + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_equal + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_error + 307: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new_valist + 308: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handler_find + 309: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_read_line + 311: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_replace_literal + 312: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgetfilecon_raw + 313: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_system_config_dirs + 314: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_length + 315: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 316: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_read_link + 317: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_private_set + 318: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_system_data_dirs + 319: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_from_utf8 + 320: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boolean + 321: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 322: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_init + 323: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_classify + 324: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_get_digest + 325: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove_all + 326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.17 (2) + 327: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_clear + 328: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflate + 329: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.17 (2) + 330: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0_n + 331: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_accumulator_first_wins + 332: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_next + 333: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_data + 334: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_floating + 335: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hostname_to_ascii + 336: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 337: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib_gettext + 338: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 339: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 340: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_sink + 341: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_gtype + 342: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup@GLIBC_2.17 (2) + 343: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref + 344: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_child_value + 345: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_next + 346: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boxed + 347: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 348: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_parse + 349: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_utf8_skip + 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_unref + 351: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_ref + 352: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_invoke_full + 353: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_length + 354: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_uint64 + 355: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 356: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 357: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_get_length + 358: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_set_size + 359: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_int32 + 360: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_len + 361: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_locale_string + 362: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_get_target@MOUNT_2.19 (3) + 363: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_new + 364: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_lock + 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_free_iter@MOUNT_2.19 (3) + 366: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_steal + 367: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_remove_group + 368: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_fundamentally_a + 369: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new_take + 370: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_remove + 371: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_free + 372: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_time_new_from_timeval_local + 373: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_name + 374: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_propagate_prefixed_error + 375: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_string + 376: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 377: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (2) + 378: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_ulong + 379: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_write_chars + 380: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_end_iter + 381: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 382: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_array + 383: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emitv + 384: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 385: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_new_iter@MOUNT_2.19 (3) + 386: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handlers_disconnect_matched + 387: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_string + 388: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_new + 389: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new_static + 390: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateEnd + 391: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_pton@GLIBC_2.17 (2) + 392: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmmsg@GLIBC_2.17 (2) + 393: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 394: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strstr_len + 395: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_environ_setenv + 396: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_release + 397: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_copy + 398: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkstemp_full + 399: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_checked_ + 400: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_add_weak_pointer + 401: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmmsg@GLIBC_2.17 (2) + 402: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_boolean + 403: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_iteration + 404: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_insert_vals + 405: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 406: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_size + 407: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fnmatch@GLIBC_2.17 (2) + 408: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 409: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_next + 410: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_find_program_in_path + 411: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_unref + 412: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_remove + 413: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_from_bytes + 414: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_init + 415: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_trylock + 416: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateReset + 417: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_summary + 418: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_prev + 419: 0000000000000000 0 FUNC GLOBAL DEFAULT UND endservent@GLIBC_2.17 (2) + 420: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_fundamental + 421: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_get_contents + 422: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 423: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_key + 424: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_last + 425: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_free + 426: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_start_group + 427: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_pointer + 428: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.17 (2) + 429: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_parse_scheme + 430: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_unlock + 431: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_module_unuse + 432: 0000000000000000 0 FUNC GLOBAL DEFAULT UND endmntent@GLIBC_2.17 (2) + 433: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 434: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_get_value_by_nick + 435: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data + 436: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_variant + 437: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_ref + 438: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_shell_quote + 439: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_double + 440: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_boolean + 441: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_current_source + 442: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 443: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_insert + 444: 0000000000000000 0 FUNC GLOBAL DEFAULT UND remove@GLIBC_2.17 (2) + 445: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_new_literal + 446: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (2) + 447: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_to_data + 448: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_propagate_error + 449: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_uint64 + 450: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_loop + 451: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new_seconds + 452: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_get_ready_time + 453: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_push_thread_default + 454: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_init + 455: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_string_is_valid + 456: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_install_properties + 457: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_free + 458: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_uri_escaped + 459: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_add_watch@GLIBC_2.17 (2) + 460: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (2) + 461: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_uchar + 462: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_environ + 463: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_fixed_array + 464: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref_thread_default + 465: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_copy_deep + 466: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek + 467: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_element + 468: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_begin_iter + 469: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_lookup + 470: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get + 471: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_ref + 472: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (7) + 473: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_vprintf + 474: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_uint32 + 475: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.17 (2) + 476: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.17 (7) + 477: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_remove + 478: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND in6addr_loopback@GLIBC_2.17 (2) + 479: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_newv + 480: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_snprintf + 481: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_lock + 482: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_append + 483: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_source_new + 484: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (7) + 485: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_accumulator_true_handled + 486: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_config_dir + 487: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (2) + 488: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_init + 489: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_try_string + 490: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_ensure + 491: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_enum + 492: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_close + 493: 0000000000000000 0 FUNC GLOBAL DEFAULT UND is_selinux_enabled + 494: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_end + 495: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_compare + 496: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_unescape_string + 497: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_free_table@MOUNT_2.19 (3) + 498: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.17 (2) + 499: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_compute_checksum_for_string + 500: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_boolean + 501: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_set_max_threads + 502: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 503: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_get_char + 504: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get + 505: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_object_path + 506: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_concat + 507: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateSetHeader@ZLIB_1.2.2 (5) + 508: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.17 (7) + 509: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_pointer + 510: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set + 511: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_boxed + 512: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove_link + 513: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_set + 514: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_default + 515: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_insert_sorted + 516: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_get_type + 517: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 518: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_new + 519: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error + 520: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_wait + 521: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_free + 522: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_set_size + 523: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __h_errno_location@GLIBC_2.17 (7) + 524: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrgid_r@GLIBC_2.17 (2) + 525: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 526: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_ref + 527: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.17 (2) + 528: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 529: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 530: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free_1 + 531: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_add_group + 532: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uint64 + 533: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __dn_expand@GLIBC_2.17 (8) + 534: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_variant + 535: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_cmpnum + 536: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_init + 537: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_unref + 538: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_init + 539: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_variant + 540: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.17 (2) + 541: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_container + 542: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_unref + 543: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 544: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (7) + 545: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_get_type + 546: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_locale_string_list + 547: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_prepend_c + 548: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_matches + 549: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcngettext@GLIBC_2.17 (2) + 550: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 551: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_display_basename + 552: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_get + 553: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_value + 554: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_handle + 555: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 556: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 557: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_dummy_callback + 558: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_impl + 559: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handler_disconnect + 560: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_child_watch_source_new + 561: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_int_hash + 562: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setxattr@GLIBC_2.17 (2) + 563: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_new + 564: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new_full + 565: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_init@GLIBC_2.17 (2) + 566: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_symbol + 567: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_ascii_table + 568: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_parse_debug_string + 569: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_check_format_string + 570: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_parse + 571: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strpbrk@GLIBC_2.17 (2) + 572: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_default_interface_peek + 573: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_clear + 574: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_equal + 575: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 576: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchomp + 577: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_sort + 578: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 579: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_new + 580: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_bytestring + 581: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_invoke + 582: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_last + 583: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.17 (2) + 584: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 585: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_table_parse_fstab@MOUNT_2.19 (3) + 586: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_open_tmp + 587: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.17 (2) + 588: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_prgname + 589: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_has_handler_pending + 590: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_get_fstab_path@MOUNT_2.19 (3) + 591: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_sized_new + 592: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_flags + 593: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_create_watch + 594: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 595: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_iconv + 596: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_object_path + 597: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_nnodes + 598: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unix_fd_source_new + 599: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_remove + 600: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_convert_error_quark + 601: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_unref + 602: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_bytestring_array + 603: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_object + 604: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 605: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_iter_at_pos + 606: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_groups + 607: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_has_prefix + 608: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_get_context + 609: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_ref + 610: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_get_type + 611: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_schar + 612: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name + 613: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_child + 614: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_uint64 + 615: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_free + 616: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_new + 617: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_from_uri + 618: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new + 619: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchug + 620: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_lookup + 621: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_remove + 622: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (2) + 623: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_data + 624: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 625: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove + 626: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_get_type + 627: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strjoinv + 628: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_variant + 629: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_replace + 630: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.17 (7) + 631: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 632: 0000000000000000 0 FUNC GLOBAL DEFAULT UND raise@GLIBC_2.17 (7) + 633: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_add_prerequisite + 634: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.17 (2) + 635: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_iconv_close + 636: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_split + 637: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_insert_sorted + 638: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handler_is_connected + 639: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_boolean + 640: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_setenv + 641: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_int16 + 642: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_load_from_file + 643: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_va + 644: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_peek_string + 645: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 646: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_get_position + 647: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_boxed + 648: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_remove_weak_pointer + 649: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_tuple + 650: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strncasecmp + 651: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_contains + 652: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_copy + 653: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __uflow@GLIBC_2.17 (2) + 654: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_n_children + 655: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 656: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_sort + 657: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_new + 658: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.17 (2) + 659: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_unref + 660: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_tolower + 661: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 662: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.17 (2) + 663: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_ref + 664: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (2) + 665: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_invoke + 666: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__VOID + 667: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_collate_key + 668: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_init@GLIBC_2.17 (2) + 669: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_signal + 670: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_add_child_source + 671: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 672: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_lookup_value + 673: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_self + 674: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_append + 675: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_locale_to_utf8 + 676: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.17 (2) + 677: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_reverse + 678: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_1 + 679: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_interface_install_property + 680: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_byte + 681: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get + 682: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_double + 683: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_escape_string + 684: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_data_dir + 685: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_is_end + 686: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 687: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 688: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 689: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_random_int_range + 690: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_flags + 691: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 692: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_int16 + 693: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_find_property + 694: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 695: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 696: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_strv + 697: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_int64 + 698: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_boxed + 699: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_get_length + 700: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_data_as_bytes + 701: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_skip_root + 702: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_unref + 703: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit_ + 704: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.17 (7) + 705: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.17 (2) + 706: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_supported + 707: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (2) + 708: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 709: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 710: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_base64_encode + 711: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_async + 712: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 713: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_unlock + 714: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_strdup_options@MOUNT_2.19 (3) + 715: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit2_ + 716: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_set_sort_function + 717: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove_index_fast + 718: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_print_string + 719: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_query_unix_fd + 720: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_add_full + 721: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_set_size + 722: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 723: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_replace_qdata + 724: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error_literal + 725: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 726: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_new + 727: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 728: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 729: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_insert_c + 730: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_object + 731: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_peek_head + 732: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_lock + 733: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (2) + 734: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename + 735: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_unref + 736: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_monotonic_time + 737: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_has_regular_mtab@MOUNT_2.19 (3) + 738: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_get_contents + 739: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata_full + 740: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_unref + 741: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_name + 742: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_get_bytes + 743: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (2) + 744: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_set_contents + 745: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_xdigit_value + 746: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__OBJECT + 747: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_position + 748: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_is_empty + 749: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_get_source@MOUNT_2.19 (3) + 750: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unref + 751: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 752: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_remove_unix_fd + 753: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 754: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_flush + 755: 0000000000000000 0 FUNC GLOBAL DEFAULT UND statfs@GLIBC_2.17 (2) + 756: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_add + 757: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_ready_time + 758: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 759: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_open + 760: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 761: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strerror + 762: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_lookup + 763: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_table_next_fs@MOUNT_2.19 (3) + 764: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_unlock + 765: 0000000000000000 0 FUNC GLOBAL DEFAULT UND llistxattr@GLIBC_2.17 (2) + 766: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_ulong + 767: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_uint + 768: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_concat + 769: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_int64 + 770: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lgetfilecon_raw + 771: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_type_string + 772: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 773: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_path + 774: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.17 (2) + 775: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_acquire + 776: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message + 777: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_set_translation_domain + 778: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_usleep + 779: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (2) + 780: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_closure_by_id + 781: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_init1@GLIBC_2.17 (2) + 782: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_get_type + 783: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_new + 784: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_error + 785: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.17 (7) + 786: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_close + 787: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_attach + 788: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_home_dir + 789: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_element_stack + 790: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_is_destroyed + 791: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name_from_instance + 792: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 793: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_notify_by_pspec + 794: 0000000000000000 0 FUNC GLOBAL DEFAULT UND utimes@GLIBC_2.17 (2) + 795: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_free + 796: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_uint32 + 797: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uchar + 798: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 799: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_warn_message + 800: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_object + 801: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_current_time + 802: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_copy + 803: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchown@GLIBC_2.17 (2) + 804: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 805: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_nclose@GLIBC_2.17 (2) + 806: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 807: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 808: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_has_suffix + 809: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_foreach + 810: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek_parent + 811: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_unref + 812: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkstemp + 813: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_clear + 814: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_fixed_array + 815: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value_holds + 816: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 817: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_take_string + 818: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dngettext + 819: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc_n + 820: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_generic + 821: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_add + 822: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_description + 823: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.17 (7) + 824: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_cache_dir + 825: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_table_parse_mtab@MOUNT_2.19 (3) + 826: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 827: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_new + 828: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_add_unix_fd + 829: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_next_value + 830: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int64 + 831: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_string + 832: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_gtype + 833: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_ulong + 834: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_special_dir + 835: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strdown + 836: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_property + 837: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 838: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach_remove + 839: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_push + 840: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_add_entries + 841: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.17 (7) + 842: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 843: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_get_gtype + 844: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_hash + 845: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_signature + 846: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_interface_static + 847: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_to_string + 848: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_error_quark + 849: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_main_group + 850: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 851: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_display_name + 852: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dgettext + 853: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 854: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_bytestring + 855: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (7) + 856: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_sort_changed + 857: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_private_get + 858: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_run + 859: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove + 860: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getxattr@GLIBC_2.17 (2) + 861: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (7) + 862: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_parse_error_quark + 863: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgetxattr@GLIBC_2.17 (2) + 864: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_is_tuple + 865: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_prefix_error + 866: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _Unwind_Resume@GCC_3.0 (9) + 867: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_collect_attributes + 868: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_thaw_notify + 869: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_nquery@GLIBC_2.17 (8) + 870: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listxattr@GLIBC_2.17 (2) + 871: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_ninit@GLIBC_2.17 (2) + 872: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_full + 873: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_unref + 874: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (2) + 875: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 876: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_new + 877: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 878: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 879: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 880: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 881: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 882: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 883: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_prgname + 884: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strjoin + 885: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 886: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new + 887: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_variant + 888: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.17 (2) + 889: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (7) + 890: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_runtime_dir + 891: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dir_open + 892: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_test + 893: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_variant + 894: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_string + 895: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 896: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_get_type + 897: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_equal + 898: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 899: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (7) + 900: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_handle + 901: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.17 (2) + 902: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_environ_unsetenv + 903: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lgetxattr@GLIBC_2.17 (2) + 904: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strcasecmp + 905: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 906: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_load_from_data + 907: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_pop_head + 908: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 909: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strlcpy + 910: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib__private__ + 911: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_flags + 912: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_check_exit_status + 913: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_get_thread_default + 914: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_clear + 915: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_current_dir + 916: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_error_quark + 917: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_help_enabled + 918: 00000000000c05a0 1012 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_for_bus_sync + 919: 00000000000eed4c 156 FUNC GLOBAL DEFAULT 11 g_test_dbus_get_type + 920: 000000000005f084 264 FUNC GLOBAL DEFAULT 11 g_file_info_get_symbolic_icon + 921: 00000000000c0b98 100 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_authorize_authenticated_peer + 922: 00000000000939b0 428 FUNC GLOBAL DEFAULT 11 g_subprocess_new + 923: 000000000007e560 284 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_lookup + 924: 00000000000a3180 212 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_database + 925: 0000000000095884 120 FUNC GLOBAL DEFAULT 11 g_socket_service_start + 926: 000000000008f670 256 FUNC GLOBAL DEFAULT 11 g_socket_control_message_deserialize + 927: 0000000000073eac 60 FUNC GLOBAL DEFAULT 11 g_network_address_new + 928: 000000000007ea80 56 FUNC GLOBAL DEFAULT 11 g_resolver_free_addresses + 929: 00000000000b8abc 28 FUNC GLOBAL DEFAULT 11 g_menu_model_iterate_item_links + 930: 00000000000b30f4 224 FUNC GLOBAL DEFAULT 11 g_action_group_action_state_changed + 931: 0000000000124d60 12 FUNC GLOBAL DEFAULT 11 g_settings_list_children + 932: 0000000000074a18 128 FUNC GLOBAL DEFAULT 11 g_network_address_get_port + 933: 0000000000066384 220 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_loopback + 934: 000000000005dd28 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_uint64 + 935: 000000000010788c 284 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_get + 936: 000000000012323c 308 FUNC GLOBAL DEFAULT 11 g_settings_new_full + 937: 0000000000097108 160 FUNC GLOBAL DEFAULT 11 g_task_set_task_data + 938: 00000000000b08e0 12 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_environ + 939: 000000000004e604 160 FUNC GLOBAL DEFAULT 11 g_file_get_parent + 940: 000000000007f590 56 FUNC GLOBAL DEFAULT 11 g_resolver_free_targets + 941: 00000000000ad9b4 144 FUNC GLOBAL DEFAULT 11 g_application_set_option_context_description + 942: 00000000000685b0 196 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_flowinfo + 943: 00000000000a3e50 360 FUNC GLOBAL DEFAULT 11 g_dtls_connection_shutdown_async + 944: 000000000005a95c 276 FUNC GLOBAL DEFAULT 11 g_file_icon_get_type + 945: 0000000000075dcc 116 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_set_networks + 946: 000000000006a970 164 FUNC GLOBAL DEFAULT 11 g_input_stream_read_bytes + 947: 000000000005c68c 140 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_unref + 948: 00000000001248d0 208 FUNC GLOBAL DEFAULT 11 g_settings_reset + 949: 000000000007f7c8 160 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_records_finish + 950: 00000000000862b8 132 FUNC GLOBAL DEFAULT 11 g_socket_get_keepalive + 951: 00000000000865ac 128 FUNC GLOBAL DEFAULT 11 g_socket_get_family + 952: 00000000000a2880 160 FUNC GLOBAL DEFAULT 11 g_tls_password_set_description + 953: 000000000010e0ec 128 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_get_fd + 954: 000000000009cac0 224 FUNC GLOBAL DEFAULT 11 g_tls_certificate_new_from_files + 955: 000000000003f0ac 240 FUNC GLOBAL DEFAULT 11 g_cancellable_reset + 956: 000000000005e008 268 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_object + 957: 000000000010e290 132 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_get_close_fd + 958: 00000000000aa018 108 FUNC GLOBAL DEFAULT 11 g_bus_name_owner_flags_get_type + 959: 00000000000b2884 168 FUNC GLOBAL DEFAULT 11 g_action_group_has_action + 960: 00000000000e4758 260 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_error_valist + 961: 00000000000dcf24 124 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_finish + 962: 00000000000adb18 60 FUNC GLOBAL DEFAULT 11 g_application_id_is_valid + 963: 00000000000b3e24 296 FUNC GLOBAL DEFAULT 11 g_simple_action_group_get_type + 964: 00000000000642c8 176 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_set_close_base_stream + 965: 0000000000080a28 240 FUNC GLOBAL DEFAULT 11 g_resource_open_stream + 966: 00000000000d1784 420 FUNC GLOBAL DEFAULT 11 g_dbus_connection_register_object_with_closures + 967: 00000000000be53c 208 FUNC GLOBAL DEFAULT 11 g_dbus_generate_guid + 968: 00000000000eef54 128 FUNC GLOBAL DEFAULT 11 g_test_dbus_get_bus_address + 969: 0000000000124720 24 FUNC GLOBAL DEFAULT 11 g_settings_apply + 970: 00000000000a000c 568 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_issuer_async + 971: 00000000000959bc 40 FUNC GLOBAL DEFAULT 11 g_srv_target_free + 972: 000000000009e64c 56 FUNC GLOBAL DEFAULT 11 g_tls_error_quark + 973: 0000000000075b58 252 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_add_network + 974: 00000000000b9a28 24 FUNC GLOBAL DEFAULT 11 g_menu_new + 975: 00000000000a9c4c 108 FUNC GLOBAL DEFAULT 11 g_resource_flags_get_type + 976: 00000000000a96d0 108 FUNC GLOBAL DEFAULT 11 g_file_type_get_type + 977: 00000000000b08ec 152 FUNC GLOBAL DEFAULT 11 g_application_command_line_getenv + 978: 00000000000ab1ec 168 FUNC GLOBAL DEFAULT 11 g_list_model_get_item + 979: 0000000000089d08 248 FUNC GLOBAL DEFAULT 11 g_socket_get_broadcast + 980: 000000000004439c 160 FUNC GLOBAL DEFAULT 11 g_data_input_stream_set_byte_order + 981: 000000000008ba70 132 FUNC GLOBAL DEFAULT 11 g_socket_address_get_native_size + 982: 0000000000061608 156 FUNC GLOBAL DEFAULT 11 g_file_monitor_get_type + 983: 0000000000071b20 128 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_size + 984: 0000000000108fb4 108 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_free + 985: 0000000000055c14 88 FUNC GLOBAL DEFAULT 11 g_file_new_for_path + 986: 00000000000a3fb8 304 FUNC GLOBAL DEFAULT 11 g_dtls_connection_shutdown_finish + 987: 000000000007ef34 236 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_name_finish + 988: 000000000007c4b0 212 FUNC GLOBAL DEFAULT 11 g_proxy_connect + 989: 00000000000674b0 216 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_to_string + 990: 0000000000069a24 340 FUNC GLOBAL DEFAULT 11 g_input_stream_close_finish + 991: 000000000006f764 160 FUNC GLOBAL DEFAULT 11 g_mount_can_eject + 992: 000000000005f4c8 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_etag + 993: 00000000001c3e98 0 NOTYPE GLOBAL DEFAULT 27 __bss_end__ + 994: 00000000000e3060 128 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_lookup + 995: 000000000009a608 112 FUNC GLOBAL DEFAULT 11 g_themed_icon_new_with_default_fallbacks + 996: 00000000000a9448 108 FUNC GLOBAL DEFAULT 11 g_mount_mount_flags_get_type + 997: 00000000000b97a4 140 FUNC GLOBAL DEFAULT 11 g_menu_item_get_type + 998: 000000000005ea74 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_file_type + 999: 00000000000724fc 24 FUNC GLOBAL DEFAULT 11 g_mount_operation_new + 1000: 000000000003f5b0 292 FUNC GLOBAL DEFAULT 11 g_cancellable_connect + 1001: 00000000000b8974 28 FUNC GLOBAL DEFAULT 11 g_menu_model_get_n_items + 1002: 0000000000051648 288 FUNC GLOBAL DEFAULT 11 g_file_open_readwrite_finish + 1003: 00000000000b60cc 144 FUNC GLOBAL DEFAULT 11 g_action_get_type + 1004: 000000000009426c 180 FUNC GLOBAL DEFAULT 11 g_subprocess_get_status + 1005: 00000000000d2148 668 FUNC GLOBAL DEFAULT 11 g_dbus_connection_register_subtree + 1006: 00000000000427e4 332 FUNC GLOBAL DEFAULT 11 g_credentials_is_same_user + 1007: 00000000000aa600 108 FUNC GLOBAL DEFAULT 11 g_dbus_send_message_flags_get_type + 1008: 000000000007ac10 172 FUNC GLOBAL DEFAULT 11 g_permission_acquire_async + 1009: 000000000003aa98 92 FUNC GLOBAL DEFAULT 11 g_app_launch_context_unsetenv + 1010: 0000000000057164 352 FUNC GLOBAL DEFAULT 11 g_file_stop_mountable_finish + 1011: 0000000000086b48 12 FUNC GLOBAL DEFAULT 11 g_socket_leave_multicast_group_ssm + 1012: 000000000008d85c 84 FUNC GLOBAL DEFAULT 11 g_socket_client_set_proxy_resolver + 1013: 00000000000b4188 80 FUNC GLOBAL DEFAULT 11 g_remote_action_group_activate_action_full + 1014: 0000000000123858 412 FUNC GLOBAL DEFAULT 11 g_settings_set_enum + 1015: 000000000009bbe0 176 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_default_database + 1016: 0000000000094178 124 FUNC GLOBAL DEFAULT 11 g_subprocess_send_signal + 1017: 00000000000acd60 296 FUNC GLOBAL DEFAULT 11 g_application_get_type + 1018: 00000000000b4da4 612 FUNC GLOBAL DEFAULT 11 g_dbus_connection_export_action_group + 1019: 000000000009d620 144 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_type + 1020: 0000000000071ba0 128 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_data_size + 1021: 0000000000068674 196 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_scope_id + 1022: 0000000000123b70 412 FUNC GLOBAL DEFAULT 11 g_settings_set_flags + 1023: 00000000000455d0 352 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_upto_async + 1024: 0000000000079008 508 FUNC GLOBAL DEFAULT 11 g_output_stream_splice_async + 1025: 000000000010a6a0 188 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_compare + 1026: 000000000004b510 128 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_get_icon + 1027: 00000000000a6838 160 FUNC GLOBAL DEFAULT 11 g_volume_get_icon + 1028: 0000000000072b24 160 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_choice + 1029: 00000000000e8e94 112 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_flush + 1030: 0000000000064240 136 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_get_close_base_stream + 1031: 00000000000b3534 64 FUNC GLOBAL DEFAULT 11 g_action_map_remove_action + 1032: 000000000006b268 56 FUNC GLOBAL DEFAULT 11 g_io_error_quark + 1033: 0000000000062d50 300 FUNC GLOBAL DEFAULT 11 g_file_output_stream_query_info_async + 1034: 000000000005ed54 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_name + 1035: 000000000009f1a0 668 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_chain_async + 1036: 000000000008d58c 36 FUNC GLOBAL DEFAULT 11 g_socket_client_set_timeout + 1037: 00000000000aaedc 108 FUNC GLOBAL DEFAULT 11 g_network_connectivity_get_type + 1038: 00000000000b0cf8 128 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_exit_status + 1039: 00000000000bf4e8 1836 FUNC GLOBAL DEFAULT 11 g_dbus_is_supported_address + 1040: 00000000000574bc 472 FUNC GLOBAL DEFAULT 11 g_file_load_bytes + 1041: 0000000000044c08 232 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_uint64 + 1042: 000000000004e1ac 160 FUNC GLOBAL DEFAULT 11 g_file_get_path + 1043: 0000000000086b54 188 FUNC GLOBAL DEFAULT 11 g_socket_get_available_bytes + 1044: 0000000000044cf0 504 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line + 1045: 0000000000053254 396 FUNC GLOBAL DEFAULT 11 g_file_query_writable_namespaces + 1046: 00000000000bd540 244 FUNC GLOBAL DEFAULT 11 g_notification_add_button + 1047: 000000000008d4f4 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_protocol + 1048: 00000000000902a4 24 FUNC GLOBAL DEFAULT 11 g_socket_listener_new + 1049: 00000000000ef180 1308 FUNC GLOBAL DEFAULT 11 g_test_dbus_up + 1050: 00000000000579d4 284 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_dup + 1051: 000000000011fed0 76 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_summary + 1052: 000000000005138c 288 FUNC GLOBAL DEFAULT 11 g_file_replace_finish + 1053: 00000000000adb54 124 FUNC GLOBAL DEFAULT 11 g_application_new + 1054: 0000000000103bbc 332 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_action_name + 1055: 000000000007e67c 188 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_lookup_finish + 1056: 0000000000056d84 344 FUNC GLOBAL DEFAULT 11 g_file_measure_disk_usage_async + 1057: 000000000005ebe4 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_is_backup + 1058: 000000000007838c 288 FUNC GLOBAL DEFAULT 11 g_output_stream_close_finish + 1059: 0000000000057424 152 FUNC GLOBAL DEFAULT 11 g_file_supports_thread_contexts + 1060: 0000000000051218 372 FUNC GLOBAL DEFAULT 11 g_file_replace_contents_bytes_async + 1061: 0000000000042930 152 FUNC GLOBAL DEFAULT 11 g_credentials_get_native + 1062: 00000000000b2e78 200 FUNC GLOBAL DEFAULT 11 g_action_group_action_added + 1063: 00000000000aab7c 108 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_flags_get_type + 1064: 000000000011ef9c 32 FUNC GLOBAL DEFAULT 11 g_settings_list_relocatable_schemas + 1065: 0000000000051e08 272 FUNC GLOBAL DEFAULT 11 g_file_make_directory + 1066: 000000000006ffe4 352 FUNC GLOBAL DEFAULT 11 g_mount_remount_finish + 1067: 00000000000b9f3c 244 FUNC GLOBAL DEFAULT 11 g_menu_item_get_attribute_value + 1068: 00000000000aafb4 144 FUNC GLOBAL DEFAULT 11 g_list_model_get_type + 1069: 0000000000090998 444 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_socket + 1070: 000000000006f624 160 FUNC GLOBAL DEFAULT 11 g_mount_get_drive + 1071: 0000000000125668 544 FUNC GLOBAL DEFAULT 11 g_settings_create_action + 1072: 000000000007958c 428 FUNC GLOBAL DEFAULT 11 g_output_stream_write_all + 1073: 00000000000d58d8 184 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_destination + 1074: 00000000000ef090 168 FUNC GLOBAL DEFAULT 11 g_test_dbus_stop + 1075: 000000000011ff1c 76 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_description + 1076: 00000000000a9298 108 FUNC GLOBAL DEFAULT 11 g_file_attribute_status_get_type + 1077: 00000000000e4400 428 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_dbus_error + 1078: 0000000000065f60 176 FUNC GLOBAL DEFAULT 11 g_inet_address_new_loopback + 1079: 000000000004ab38 124 FUNC GLOBAL DEFAULT 11 g_emblem_get_origin + 1080: 00000000000d9a5c 124 FUNC GLOBAL DEFAULT 11 g_bus_watch_name_with_closures + 1081: 00000000000976b0 124 FUNC GLOBAL DEFAULT 11 g_task_get_source_tag + 1082: 000000000004f544 236 FUNC GLOBAL DEFAULT 11 g_file_query_info_async + 1083: 0000000000040284 40 FUNC GLOBAL DEFAULT 11 g_charset_converter_set_use_fallback + 1084: 0000000000050970 208 FUNC GLOBAL DEFAULT 11 g_file_read_async + 1085: 00000000000809e8 64 FUNC GLOBAL DEFAULT 11 g_resource_load + 1086: 00000000000f9314 1292 FUNC GLOBAL DEFAULT 11 g_file_monitor_source_handle_event + 1087: 0000000000046144 232 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_uint16 + 1088: 00000000000d5524 216 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_path + 1089: 00000000000ab774 232 FUNC GLOBAL DEFAULT 11 g_list_store_get_type + 1090: 000000000005eec4 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_edit_name + 1091: 0000000000039560 304 FUNC GLOBAL DEFAULT 11 g_app_info_equal + 1092: 0000000000045d30 136 FUNC GLOBAL DEFAULT 11 g_data_output_stream_new + 1093: 0000000000097224 172 FUNC GLOBAL DEFAULT 11 g_task_set_check_cancellable + 1094: 000000000005a008 132 FUNC GLOBAL DEFAULT 11 g_file_enumerator_has_pending + 1095: 00000000000e35d4 128 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_lookup_interface + 1096: 00000000000e8078 56 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_object_path + 1097: 0000000000039f84 304 FUNC GLOBAL DEFAULT 11 g_app_info_remove_supports_type + 1098: 0000000000067608 128 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_address + 1099: 00000000000aad98 108 FUNC GLOBAL DEFAULT 11 g_test_dbus_flags_get_type + 1100: 00000000000b4064 124 FUNC GLOBAL DEFAULT 11 g_simple_action_group_remove + 1101: 000000000011ff68 84 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_value_type + 1102: 00000000000bf0e4 180 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_stream + 1103: 00000000000408f8 292 FUNC GLOBAL DEFAULT 11 g_converter_convert + 1104: 00000000000726ac 156 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_password + 1105: 00000000000595a0 548 FUNC GLOBAL DEFAULT 11 g_file_enumerator_next_files_async + 1106: 000000000008af20 380 FUNC GLOBAL DEFAULT 11 g_socket_set_multicast_ttl + 1107: 000000000009a428 252 FUNC GLOBAL DEFAULT 11 g_themed_icon_new_from_names + 1108: 0000000000104fcc 200 FUNC GLOBAL DEFAULT 11 g_content_type_is_a + 1109: 0000000000105664 736 FUNC GLOBAL DEFAULT 11 g_content_type_guess + 1110: 00000000000d4a78 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_reply_serial + 1111: 00000000000e9c68 56 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_object_path + 1112: 000000000003d1a4 280 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_peek + 1113: 00000000000986a0 160 FUNC GLOBAL DEFAULT 11 g_task_had_error + 1114: 0000000000052840 308 FUNC GLOBAL DEFAULT 11 g_file_delete_finish + 1115: 000000000008ef74 216 FUNC GLOBAL DEFAULT 11 g_socket_connection_connect_finish + 1116: 00000000001249a4 180 FUNC GLOBAL DEFAULT 11 g_settings_is_writable + 1117: 00000000000d55fc 292 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_signal + 1118: 000000000006dc88 332 FUNC GLOBAL DEFAULT 11 g_io_stream_close_async + 1119: 000000000007a5bc 392 FUNC GLOBAL DEFAULT 11 g_output_stream_write_all_async + 1120: 0000000000092190 84 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_stdin_fd + 1121: 000000000007fb98 536 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_name_async + 1122: 00000000000aa6d8 108 FUNC GLOBAL DEFAULT 11 g_dbus_message_byte_order_get_type + 1123: 000000000008b2c0 488 FUNC GLOBAL DEFAULT 11 g_socket_bind + 1124: 00000000001c2130 0 NOTYPE GLOBAL DEFAULT 26 _edata + 1125: 000000000009813c 172 FUNC GLOBAL DEFAULT 11 g_task_return_boolean + 1126: 0000000000104f0c 192 FUNC GLOBAL DEFAULT 11 g_content_type_equals + 1127: 00000000001079a8 128 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_get_length + 1128: 0000000000082fe8 120 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_handle_cancellation + 1129: 0000000000089630 316 FUNC GLOBAL DEFAULT 11 g_socket_get_option + 1130: 000000000011d998 188 FUNC GLOBAL DEFAULT 11 g_settings_backend_writable_changed + 1131: 00000000000572c4 352 FUNC GLOBAL DEFAULT 11 g_file_poll_mountable_finish + 1132: 00000000000967c8 164 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_set_ignore_hosts + 1133: 0000000000105bf4 156 FUNC GLOBAL DEFAULT 11 g_file_descriptor_based_get_fd + 1134: 00000000000b9d2c 204 FUNC GLOBAL DEFAULT 11 g_menu_item_set_attribute + 1135: 000000000009f9a8 512 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_for_handle_async + 1136: 000000000010a804 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_fs_type + 1137: 00000000000a8fac 100 FUNC GLOBAL DEFAULT 11 g_app_info_create_flags_get_type + 1138: 000000000006bd94 96 FUNC GLOBAL DEFAULT 11 g_io_extension_point_lookup + 1139: 000000000008f4d8 132 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_level + 1140: 0000000000103ab0 144 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_has_key + 1141: 00000000000358b8 0 FUNC GLOBAL DEFAULT 9 _init + 1142: 00000000000b2f40 200 FUNC GLOBAL DEFAULT 11 g_action_group_action_removed + 1143: 000000000008e29c 4 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_uri_finish + 1144: 00000000000ba330 16 FUNC GLOBAL DEFAULT 11 g_menu_item_set_section + 1145: 000000000007e2c4 144 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_get_type + 1146: 00000000000e7544 132 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_properties + 1147: 0000000000086b30 12 FUNC GLOBAL DEFAULT 11 g_socket_leave_multicast_group + 1148: 00000000000e8b3c 508 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_remove_interface + 1149: 00000000000d9ad8 124 FUNC GLOBAL DEFAULT 11 g_bus_watch_name_on_connection_with_closures + 1150: 00000000000ba6a4 84 FUNC GLOBAL DEFAULT 11 g_menu_item_new_section + 1151: 00000000000b82a0 76 FUNC GLOBAL DEFAULT 11 g_simple_action_new_stateful + 1152: 0000000000063b84 292 FUNC GLOBAL DEFAULT 11 g_file_io_stream_query_info + 1153: 000000000011eb44 112 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_type + 1154: 000000000009baf4 156 FUNC GLOBAL DEFAULT 11 g_tls_backend_supports_tls + 1155: 0000000000105098 104 FUNC GLOBAL DEFAULT 11 g_content_type_is_unknown + 1156: 00000000001020cc 12 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_is_hidden + 1157: 00000000001244a0 52 FUNC GLOBAL DEFAULT 11 g_settings_set_uint64 + 1158: 0000000000047b84 184 FUNC GLOBAL DEFAULT 11 g_drive_can_start_degraded + 1159: 000000000003b244 208 FUNC GLOBAL DEFAULT 11 g_async_initable_init_async + 1160: 00000000000ec3b4 144 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_flags + 1161: 00000000000d0474 124 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_guid + 1162: 00000000000ad924 144 FUNC GLOBAL DEFAULT 11 g_application_set_option_context_summary + 1163: 0000000000051a54 288 FUNC GLOBAL DEFAULT 11 g_file_replace_readwrite_finish + 1164: 0000000000082f24 196 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new + 1165: 00000000000d4b80 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_interface + 1166: 00000000000972d0 124 FUNC GLOBAL DEFAULT 11 g_task_set_source_tag + 1167: 00000000000b6338 160 FUNC GLOBAL DEFAULT 11 g_action_get_state_type + 1168: 00000000000bda5c 204 FUNC GLOBAL DEFAULT 11 g_notification_set_default_action_and_target + 1169: 000000000010a268 40 FUNC GLOBAL DEFAULT 11 g_unix_mounts_changed_since + 1170: 00000000000a7af0 132 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_mounts + 1171: 0000000000058bcc 88 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_new + 1172: 00000000000aab10 108 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_flags_get_type + 1173: 00000000000ba758 20 FUNC GLOBAL DEFAULT 11 g_menu_append_section + 1174: 00000000000ae2e8 176 FUNC GLOBAL DEFAULT 11 g_application_get_is_remote + 1175: 00000000000aa960 108 FUNC GLOBAL DEFAULT 11 g_tls_password_flags_get_type + 1176: 000000000010adb0 32 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_can_eject + 1177: 00000000000a6c2c 184 FUNC GLOBAL DEFAULT 11 g_volume_can_eject + 1178: 000000000008f3d4 132 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_type + 1179: 0000000000103498 124 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_startup_wm_class + 1180: 000000000005d34c 288 FUNC GLOBAL DEFAULT 11 g_file_info_remove_attribute + 1181: 000000000009bcc4 52 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_client_connection_type + 1182: 000000000008322c 124 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_op_res_gpointer + 1183: 00000000000b99a8 12 FUNC GLOBAL DEFAULT 11 g_menu_append_item + 1184: 000000000007ec90 488 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_service_async + 1185: 00000000000b29d4 168 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_state_type + 1186: 00000000000525e8 272 FUNC GLOBAL DEFAULT 11 g_file_delete + 1187: 0000000000086c10 384 FUNC GLOBAL DEFAULT 11 g_socket_shutdown + 1188: 00000000000d9b54 304 FUNC GLOBAL DEFAULT 11 g_bus_unwatch_name + 1189: 00000000000e80e8 136 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_interface + 1190: 00000000000dca34 360 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_cached_property + 1191: 00000000000452a8 120 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_until_finish + 1192: 00000000000e3a98 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_connection + 1193: 0000000000047c3c 352 FUNC GLOBAL DEFAULT 11 g_drive_start_finish + 1194: 000000000006cd0c 368 FUNC GLOBAL DEFAULT 11 g_io_scheduler_job_send_to_mainloop + 1195: 0000000000075058 88 FUNC GLOBAL DEFAULT 11 g_network_monitor_can_reach_async + 1196: 00000000000ddf48 48 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_sync + 1197: 00000000000b8198 148 FUNC GLOBAL DEFAULT 11 g_simple_action_set_state_hint + 1198: 0000000000055818 364 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable_with_operation_finish + 1199: 000000000011e93c 188 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_unref + 1200: 0000000000089e00 356 FUNC GLOBAL DEFAULT 11 g_socket_get_multicast_loopback + 1201: 00000000000b7574 232 FUNC GLOBAL DEFAULT 11 g_property_action_get_type + 1202: 00000000000b2d90 232 FUNC GLOBAL DEFAULT 11 g_action_group_activate_action + 1203: 0000000000076d7c 152 FUNC GLOBAL DEFAULT 11 g_network_service_set_scheme + 1204: 0000000000082c38 196 FUNC GLOBAL DEFAULT 11 g_seekable_truncate + 1205: 0000000000047270 188 FUNC GLOBAL DEFAULT 11 g_drive_can_poll_for_media + 1206: 0000000000064c68 868 FUNC GLOBAL DEFAULT 11 g_icon_to_string + 1207: 00000000000502e4 312 FUNC GLOBAL DEFAULT 11 g_file_replace + 1208: 00000000000aa744 108 FUNC GLOBAL DEFAULT 11 g_application_flags_get_type + 1209: 00000000000ebaa4 496 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_sync + 1210: 00000000000bd2c4 132 FUNC GLOBAL DEFAULT 11 g_notification_set_urgent + 1211: 000000000007b340 160 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_is_readable + 1212: 000000000010d59c 176 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_set_close_fd + 1213: 0000000000124c04 336 FUNC GLOBAL DEFAULT 11 g_settings_get_child + 1214: 00000000000e0f40 112 FUNC GLOBAL DEFAULT 11 g_dbus_arg_info_unref + 1215: 0000000000047f80 352 FUNC GLOBAL DEFAULT 11 g_drive_stop_finish + 1216: 00000000000d742c 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_locked + 1217: 000000000012303c 208 FUNC GLOBAL DEFAULT 11 g_settings_new_with_backend + 1218: 000000000006fd0c 364 FUNC GLOBAL DEFAULT 11 g_mount_unmount_with_operation_finish + 1219: 000000000003b448 180 FUNC GLOBAL DEFAULT 11 g_async_initable_newv_async + 1220: 000000000004d8f0 364 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable_with_operation + 1221: 00000000000d4120 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_message_type + 1222: 000000000007fa0c 396 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_name + 1223: 00000000000abc70 268 FUNC GLOBAL DEFAULT 11 g_list_store_append + 1224: 00000000000b3f64 132 FUNC GLOBAL DEFAULT 11 g_simple_action_group_lookup + 1225: 000000000007bd58 276 FUNC GLOBAL DEFAULT 11 g_pollable_source_new_full + 1226: 000000000004f074 276 FUNC GLOBAL DEFAULT 11 g_file_query_info + 1227: 00000000000a6994 160 FUNC GLOBAL DEFAULT 11 g_volume_get_uuid + 1228: 00000000000ddf78 4 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_with_unix_fd_list + 1229: 000000000006533c 840 FUNC GLOBAL DEFAULT 11 g_icon_deserialize + 1230: 0000000000052afc 208 FUNC GLOBAL DEFAULT 11 g_file_trash_async + 1231: 0000000000096954 180 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_set_uri_proxy + 1232: 00000000000b0984 48 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_is_remote + 1233: 000000000004630c 224 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_uint32 + 1234: 00000000000d419c 220 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_message_type + 1235: 0000000000099258 172 FUNC GLOBAL DEFAULT 11 g_tcp_wrapper_connection_get_type + 1236: 00000000000682dc 60 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_new + 1237: 000000000003c72c 252 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_get_type + 1238: 0000000000070d04 24 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_new + 1239: 0000000000102a0c 92 FUNC GLOBAL DEFAULT 11 g_app_info_get_default_for_uri_scheme + 1240: 00000000000426b8 300 FUNC GLOBAL DEFAULT 11 g_credentials_to_string + 1241: 000000000003e3a4 128 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_get_auto_grow + 1242: 00000000000767d0 128 FUNC GLOBAL DEFAULT 11 g_network_service_get_protocol + 1243: 000000000007d04c 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_password + 1244: 000000000008d530 80 FUNC GLOBAL DEFAULT 11 g_socket_client_set_local_address + 1245: 000000000008d62c 36 FUNC GLOBAL DEFAULT 11 g_socket_client_set_tls_validation_flags + 1246: 00000000000e3fe0 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_parameters + 1247: 00000000000a6798 160 FUNC GLOBAL DEFAULT 11 g_volume_get_name + 1248: 0000000000044ee8 120 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_utf8 + 1249: 00000000000d1c30 68 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call + 1250: 0000000000089354 28 FUNC GLOBAL DEFAULT 11 g_socket_send_messages + 1251: 00000000001021c0 8 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_filename + 1252: 00000000000b2bcc 168 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_state + 1253: 000000000009a7f0 304 FUNC GLOBAL DEFAULT 11 g_themed_icon_prepend_name + 1254: 00000000000600e4 260 FUNC GLOBAL DEFAULT 11 g_file_info_set_symlink_target + 1255: 000000000005d5c0 236 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_status + 1256: 000000000006f070 292 FUNC GLOBAL DEFAULT 11 g_mount_guess_content_type + 1257: 000000000003ebd4 100 FUNC GLOBAL DEFAULT 11 g_bytes_icon_new + 1258: 0000000000079330 128 FUNC GLOBAL DEFAULT 11 g_output_stream_clear_pending + 1259: 000000000003f1b0 92 FUNC GLOBAL DEFAULT 11 g_cancellable_set_error_if_cancelled + 1260: 000000000006bd8c 8 FUNC GLOBAL DEFAULT 11 g_io_modules_scan_all_in_directory + 1261: 000000000008d2fc 192 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_host_async + 1262: 000000000006930c 156 FUNC GLOBAL DEFAULT 11 g_input_stream_get_type + 1263: 000000000006c3e4 8 FUNC GLOBAL DEFAULT 11 g_io_extension_ref_class + 1264: 0000000000052bcc 288 FUNC GLOBAL DEFAULT 11 g_file_trash_finish + 1265: 00000000000d213c 4 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_with_unix_fd_list + 1266: 00000000000469ac 268 FUNC GLOBAL DEFAULT 11 g_drive_poll_for_media + 1267: 000000000007be88 28 FUNC GLOBAL DEFAULT 11 g_pollable_stream_write + 1268: 000000000006db74 276 FUNC GLOBAL DEFAULT 11 g_io_stream_set_pending + 1269: 000000000005a3b8 148 FUNC GLOBAL DEFAULT 11 g_file_enumerator_get_child + 1270: 0000000000055e84 88 FUNC GLOBAL DEFAULT 11 g_file_parse_name + 1271: 00000000000a97a8 108 FUNC GLOBAL DEFAULT 11 g_file_monitor_event_get_type + 1272: 0000000000069d94 504 FUNC GLOBAL DEFAULT 11 g_input_stream_read_async + 1273: 00000000000a98ec 108 FUNC GLOBAL DEFAULT 11 g_password_save_get_type + 1274: 00000000000b7ce8 328 FUNC GLOBAL DEFAULT 11 g_simple_action_set_state + 1275: 00000000000a5ff8 84 FUNC GLOBAL DEFAULT 11 g_vfs_get_local + 1276: 00000000000bf43c 172 FUNC GLOBAL DEFAULT 11 g_dbus_is_address + 1277: 00000000000af900 136 FUNC GLOBAL DEFAULT 11 g_application_get_is_busy + 1278: 00000000000a2800 128 FUNC GLOBAL DEFAULT 11 g_tls_password_get_description + 1279: 000000000005eb2c 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_is_hidden + 1280: 00000000000b2b24 168 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_enabled + 1281: 00000000000aa66c 108 FUNC GLOBAL DEFAULT 11 g_credentials_type_get_type + 1282: 00000000000959e4 108 FUNC GLOBAL DEFAULT 11 g_srv_target_get_type + 1283: 000000000010b6a0 8 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_abstract_names_supported + 1284: 00000000000784ac 132 FUNC GLOBAL DEFAULT 11 g_output_stream_is_closed + 1285: 00000000000ba5b4 20 FUNC GLOBAL DEFAULT 11 g_menu_prepend + 1286: 00000000001026c4 176 FUNC GLOBAL DEFAULT 11 g_app_info_get_all_for_type + 1287: 00000000001020d8 232 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_new + 1288: 00000000000a5ba4 364 FUNC GLOBAL DEFAULT 11 g_vfs_get_file_for_uri + 1289: 000000000008f32c 92 FUNC GLOBAL DEFAULT 11 g_socket_connection_factory_create_connection + 1290: 0000000000068318 408 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_new_from_string + 1291: 00000000000ddf80 4 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_with_unix_fd_list_sync + 1292: 00000000000b8de8 76 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_name + 1293: 000000000008d5e8 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_tls + 1294: 00000000000451b8 120 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_finish + 1295: 00000000000ebe68 124 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_finish + 1296: 000000000003f20c 340 FUNC GLOBAL DEFAULT 11 g_cancellable_make_pollfd + 1297: 0000000000063de8 192 FUNC GLOBAL DEFAULT 11 g_file_io_stream_get_etag + 1298: 000000000008a9fc 296 FUNC GLOBAL DEFAULT 11 g_socket_set_keepalive + 1299: 000000000004dde0 268 FUNC GLOBAL DEFAULT 11 g_file_poll_mountable + 1300: 0000000000093d34 168 FUNC GLOBAL DEFAULT 11 g_subprocess_get_stderr_pipe + 1301: 00000000000c81a0 172 FUNC GLOBAL DEFAULT 11 g_dbus_error_strip_remote_error + 1302: 00000000000940ec 68 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_check + 1303: 000000000005dc5c 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_int32 + 1304: 000000000008b92c 132 FUNC GLOBAL DEFAULT 11 g_socket_address_get_family + 1305: 0000000000044310 140 FUNC GLOBAL DEFAULT 11 g_data_input_stream_new + 1306: 0000000000087368 260 FUNC GLOBAL DEFAULT 11 g_socket_condition_check + 1307: 00000000000e39a0 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_property_info + 1308: 000000000007b820 160 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_is_writable + 1309: 000000000007fdb0 24 FUNC GLOBAL DEFAULT 11 g_resource_ref + 1310: 0000000000044644 128 FUNC GLOBAL DEFAULT 11 g_data_input_stream_get_newline_type + 1311: 0000000000055984 328 FUNC GLOBAL DEFAULT 11 g_file_monitor_directory + 1312: 000000000007bc90 200 FUNC GLOBAL DEFAULT 11 g_pollable_source_new + 1313: 0000000000057f48 108 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_get_type + 1314: 00000000000789c4 132 FUNC GLOBAL DEFAULT 11 g_output_stream_has_pending + 1315: 0000000000055594 292 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable + 1316: 0000000000106498 116 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_credentials_finish + 1317: 00000000000d00bc 276 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_for_address_sync + 1318: 00000000000e6184 272 FUNC GLOBAL DEFAULT 11 g_dbus_server_stop + 1319: 00000000000a46dc 180 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_validation_flags + 1320: 000000000010a4fc 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_get_mount_path + 1321: 000000000006c3ec 8 FUNC GLOBAL DEFAULT 11 g_io_extension_get_type + 1322: 0000000000105094 4 FUNC GLOBAL DEFAULT 11 g_content_type_is_mime_type + 1323: 0000000000107e30 24 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_new + 1324: 0000000000046f20 160 FUNC GLOBAL DEFAULT 11 g_drive_is_media_check_automatic + 1325: 0000000000102a68 336 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_implementations + 1326: 0000000000072fcc 172 FUNC GLOBAL DEFAULT 11 g_native_socket_address_get_type + 1327: 000000000012310c 304 FUNC GLOBAL DEFAULT 11 g_settings_new_with_backend_and_path + 1328: 0000000000074e44 88 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_network_available + 1329: 00000000000d63e8 212 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_arg0 + 1330: 00000000000aa528 108 FUNC GLOBAL DEFAULT 11 g_dbus_server_flags_get_type + 1331: 0000000000084240 172 FUNC GLOBAL DEFAULT 11 g_simple_async_report_gerror_in_idle + 1332: 000000000008ac9c 256 FUNC GLOBAL DEFAULT 11 g_socket_set_broadcast + 1333: 000000000009672c 156 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_set_default_proxy + 1334: 0000000000105f64 760 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_fd + 1335: 00000000000d3f54 140 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_type + 1336: 00000000000924bc 428 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_spawn + 1337: 000000000005d860 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_string + 1338: 000000000008d4d0 36 FUNC GLOBAL DEFAULT 11 g_socket_client_set_socket_type + 1339: 00000000000aa084 108 FUNC GLOBAL DEFAULT 11 g_bus_name_watcher_flags_get_type + 1340: 00000000000a1fac 416 FUNC GLOBAL DEFAULT 11 g_tls_interaction_request_certificate_finish + 1341: 000000000008e2d4 144 FUNC GLOBAL DEFAULT 11 g_socket_connectable_get_type + 1342: 0000000000106dec 172 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_get_type + 1343: 00000000000ead04 336 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_type + 1344: 00000000001249a0 4 FUNC GLOBAL DEFAULT 11 g_settings_sync + 1345: 00000000000e0bf0 32 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_ref + 1346: 000000000011fd50 112 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_type + 1347: 000000000009e1e0 136 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_require_close_notify + 1348: 0000000000094134 68 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_check_finish + 1349: 00000000000984dc 200 FUNC GLOBAL DEFAULT 11 g_task_return_new_error + 1350: 00000000000e3f64 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_message + 1351: 0000000000042284 252 FUNC GLOBAL DEFAULT 11 g_converter_output_stream_get_type + 1352: 0000000000080cf8 380 FUNC GLOBAL DEFAULT 11 g_resource_enumerate_children + 1353: 0000000000067708 392 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_matches + 1354: 00000000000662b4 208 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_any + 1355: 00000000001244d4 52 FUNC GLOBAL DEFAULT 11 g_settings_get_double + 1356: 000000000003a808 184 FUNC GLOBAL DEFAULT 11 g_app_info_can_delete + 1357: 0000000000124000 196 FUNC GLOBAL DEFAULT 11 g_settings_set + 1358: 00000000000ef6b0 412 FUNC GLOBAL DEFAULT 11 g_test_dbus_down + 1359: 0000000000124d6c 116 FUNC GLOBAL DEFAULT 11 g_settings_get_range + 1360: 000000000005f244 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_size + 1361: 000000000009da58 132 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_use_system_certdb + 1362: 000000000007afc8 128 FUNC GLOBAL DEFAULT 11 g_permission_get_can_acquire + 1363: 00000000000943e8 192 FUNC GLOBAL DEFAULT 11 g_subprocess_get_if_exited + 1364: 000000000008d500 36 FUNC GLOBAL DEFAULT 11 g_socket_client_set_protocol + 1365: 000000000010a290 40 FUNC GLOBAL DEFAULT 11 g_unix_mount_points_changed_since + 1366: 00000000000507b8 296 FUNC GLOBAL DEFAULT 11 g_file_replace_readwrite + 1367: 000000000006d590 76 FUNC GLOBAL DEFAULT 11 g_io_stream_get_output_stream + 1368: 00000000000e94e0 144 FUNC GLOBAL DEFAULT 11 g_dbus_object_proxy_get_connection + 1369: 00000000000a1a44 416 FUNC GLOBAL DEFAULT 11 g_tls_interaction_ask_password_finish + 1370: 00000000000847b8 148 FUNC GLOBAL DEFAULT 11 g_simple_io_stream_get_type + 1371: 00000000000a9880 108 FUNC GLOBAL DEFAULT 11 g_ask_password_flags_get_type + 1372: 000000000009bb90 80 FUNC GLOBAL DEFAULT 11 g_tls_backend_supports_dtls + 1373: 00000000000a127c 524 FUNC GLOBAL DEFAULT 11 g_tls_interaction_ask_password_async + 1374: 0000000000047d9c 184 FUNC GLOBAL DEFAULT 11 g_drive_can_stop + 1375: 00000000000894b0 384 FUNC GLOBAL DEFAULT 11 g_socket_get_credentials + 1376: 00000000000a6504 296 FUNC GLOBAL DEFAULT 11 g_volume_mount + 1377: 00000000000a9d24 108 FUNC GLOBAL DEFAULT 11 g_socket_family_get_type + 1378: 0000000000062168 436 FUNC GLOBAL DEFAULT 11 g_filename_completer_get_completion_suffix + 1379: 00000000000d5cfc 184 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_error_name + 1380: 0000000000105df4 368 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_fd + 1381: 00000000000863bc 208 FUNC GLOBAL DEFAULT 11 g_socket_set_listen_backlog + 1382: 0000000000063ca8 320 FUNC GLOBAL DEFAULT 11 g_file_io_stream_query_info_finish + 1383: 00000000000a608c 424 FUNC GLOBAL DEFAULT 11 g_vfs_register_uri_scheme + 1384: 0000000000055c6c 88 FUNC GLOBAL DEFAULT 11 g_file_new_for_uri + 1385: 00000000000d7600 496 FUNC GLOBAL DEFAULT 11 g_dbus_message_copy + 1386: 00000000000a2dd8 164 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_type + 1387: 00000000000dcfa0 580 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_sync + 1388: 000000000008be64 132 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_get_type + 1389: 00000000000e2ca0 376 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_generate_xml + 1390: 0000000000052444 420 FUNC GLOBAL DEFAULT 11 g_file_make_symbolic_link + 1391: 00000000000d0734 136 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_peer_credentials + 1392: 000000000005ee0c 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_display_name + 1393: 00000000000ddefc 56 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call + 1394: 0000000000070e30 108 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_add_data + 1395: 0000000000105b64 144 FUNC GLOBAL DEFAULT 11 g_file_descriptor_based_get_type + 1396: 00000000000ba1c4 264 FUNC GLOBAL DEFAULT 11 g_menu_item_get_link + 1397: 00000000000a0244 364 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_issuer_finish + 1398: 00000000000a7020 352 FUNC GLOBAL DEFAULT 11 g_volume_eject_finish + 1399: 00000000000b0828 144 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_options_dict + 1400: 000000000003b4fc 208 FUNC GLOBAL DEFAULT 11 g_async_initable_new_valist_async + 1401: 0000000000089000 164 FUNC GLOBAL DEFAULT 11 g_socket_condition_wait + 1402: 00000000000dcd34 496 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new + 1403: 00000000000b9830 364 FUNC GLOBAL DEFAULT 11 g_menu_insert_item + 1404: 00000000000567a4 480 FUNC GLOBAL DEFAULT 11 g_file_replace_contents + 1405: 00000000001021d8 8 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_generic_name + 1406: 000000000007cf50 192 FUNC GLOBAL DEFAULT 11 g_proxy_address_new + 1407: 000000000006884c 144 FUNC GLOBAL DEFAULT 11 g_initable_get_type + 1408: 00000000001033f0 168 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_lookup_get_default_for_uri_scheme + 1409: 00000000000edd84 104 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_new + 1410: 000000000006c9e8 288 FUNC GLOBAL DEFAULT 11 g_io_scheduler_push_job + 1411: 000000000003efe4 160 FUNC GLOBAL DEFAULT 11 g_cancellable_pop_current + 1412: 00000000000a24ac 148 FUNC GLOBAL DEFAULT 11 g_tls_password_get_value + 1413: 00000000000b6668 220 FUNC GLOBAL DEFAULT 11 g_action_activate + 1414: 000000000005df04 216 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute + 1415: 00000000001052b0 80 FUNC GLOBAL DEFAULT 11 g_content_type_get_mime_type + 1416: 000000000006b840 112 FUNC GLOBAL DEFAULT 11 g_io_module_new + 1417: 000000000006bdf4 8 FUNC GLOBAL DEFAULT 11 g_io_extension_point_set_required_type + 1418: 000000000011ebb4 176 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_new_from_directory + 1419: 00000000000a2cf0 160 FUNC GLOBAL DEFAULT 11 g_tls_server_connection_get_type + 1420: 00000000000e5f3c 124 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_guid + 1421: 00000000000b3f4c 24 FUNC GLOBAL DEFAULT 11 g_simple_action_group_new + 1422: 00000000000464cc 224 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_uint64 + 1423: 0000000000079204 300 FUNC GLOBAL DEFAULT 11 g_output_stream_close_async + 1424: 00000000000b34b4 64 FUNC GLOBAL DEFAULT 11 g_action_map_lookup_action + 1425: 000000000004a600 232 FUNC GLOBAL DEFAULT 11 g_emblem_get_type + 1426: 000000000006fe78 364 FUNC GLOBAL DEFAULT 11 g_mount_eject_with_operation_finish + 1427: 000000000008ec84 480 FUNC GLOBAL DEFAULT 11 g_socket_connection_connect_async + 1428: 0000000000051960 244 FUNC GLOBAL DEFAULT 11 g_file_replace_readwrite_async + 1429: 0000000000060328 396 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_new + 1430: 00000000000ae810 224 FUNC GLOBAL DEFAULT 11 g_application_activate + 1431: 00000000000e7644 168 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_connection + 1432: 000000000005fab0 260 FUNC GLOBAL DEFAULT 11 g_file_info_set_edit_name + 1433: 00000000000b9178 76 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_name + 1434: 00000000000c0b80 24 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_new + 1435: 000000000007acbc 160 FUNC GLOBAL DEFAULT 11 g_permission_acquire_finish + 1436: 00000000000e60b0 212 FUNC GLOBAL DEFAULT 11 g_dbus_server_start + 1437: 000000000010335c 148 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_lookup_get_type + 1438: 000000000008d5bc 44 FUNC GLOBAL DEFAULT 11 g_socket_client_set_enable_proxy + 1439: 00000000000dd6a4 164 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_name_owner + 1440: 0000000000124368 52 FUNC GLOBAL DEFAULT 11 g_settings_set_int + 1441: 0000000000059e30 340 FUNC GLOBAL DEFAULT 11 g_file_enumerator_close_finish + 1442: 0000000000124438 52 FUNC GLOBAL DEFAULT 11 g_settings_set_uint + 1443: 00000000000c804c 340 FUNC GLOBAL DEFAULT 11 g_dbus_error_set_dbus_error + 1444: 000000000005310c 328 FUNC GLOBAL DEFAULT 11 g_file_query_settable_attributes + 1445: 000000000009a6f4 252 FUNC GLOBAL DEFAULT 11 g_themed_icon_append_name + 1446: 00000000000d4cb8 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_member + 1447: 00000000000aa30c 108 FUNC GLOBAL DEFAULT 11 g_dbus_message_type_get_type + 1448: 0000000000095ad0 8 FUNC GLOBAL DEFAULT 11 g_srv_target_get_port + 1449: 00000000000ddc5c 204 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_set_interface_info + 1450: 000000000010abe8 32 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_can_eject + 1451: 00000000000cd49c 284 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flush_sync + 1452: 00000000000aa234 108 FUNC GLOBAL DEFAULT 11 g_dbus_capability_flags_get_type + 1453: 0000000000051578 208 FUNC GLOBAL DEFAULT 11 g_file_open_readwrite_async + 1454: 00000000000a91c0 108 FUNC GLOBAL DEFAULT 11 g_file_attribute_type_get_type + 1455: 00000000000e2650 112 FUNC GLOBAL DEFAULT 11 g_dbus_signal_info_get_type + 1456: 000000000010b67c 12 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_address_type + 1457: 0000000000078f20 232 FUNC GLOBAL DEFAULT 11 g_output_stream_write_bytes_async + 1458: 0000000000050624 268 FUNC GLOBAL DEFAULT 11 g_file_create_readwrite + 1459: 000000000008376c 316 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_error_va + 1460: 0000000000094890 396 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_finish + 1461: 0000000000070e9c 72 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_new_from_data + 1462: 00000000000561f8 280 FUNC GLOBAL DEFAULT 11 g_file_query_default_handler + 1463: 000000000004a6e8 328 FUNC GLOBAL DEFAULT 11 g_emblem_new + 1464: 000000000003ab38 268 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_display + 1465: 0000000000066820 168 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_node_local + 1466: 00000000000b2c74 284 FUNC GLOBAL DEFAULT 11 g_action_group_change_action_state + 1467: 0000000000039b74 248 FUNC GLOBAL DEFAULT 11 g_app_info_set_as_last_used_for_type + 1468: 0000000000072aa4 128 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_choice + 1469: 000000000011d6f4 208 FUNC GLOBAL DEFAULT 11 g_settings_backend_changed + 1470: 00000000000d5720 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_sender + 1471: 00000000000b292c 168 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_parameter_type + 1472: 00000000000a9dfc 108 FUNC GLOBAL DEFAULT 11 g_socket_msg_flags_get_type + 1473: 0000000000074e2c 24 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_default + 1474: 00000000001021c8 8 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_categories + 1475: 00000000001c3e98 0 NOTYPE GLOBAL DEFAULT 27 _bss_end__ + 1476: 0000000000042d6c 752 FUNC GLOBAL DEFAULT 11 g_datagram_based_receive_messages + 1477: 000000000005ddf4 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_int64 + 1478: 000000000004e42c 160 FUNC GLOBAL DEFAULT 11 g_file_hash + 1479: 000000000007adfc 172 FUNC GLOBAL DEFAULT 11 g_permission_release_async + 1480: 000000000004fadc 248 FUNC GLOBAL DEFAULT 11 g_file_find_enclosing_mount + 1481: 00000000000966f4 56 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_new + 1482: 00000000000d25bc 184 FUNC GLOBAL DEFAULT 11 g_bus_get_sync + 1483: 000000000003e1c0 280 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_set_buffer_size + 1484: 00000000000a7610 140 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_type + 1485: 00000000000a7b74 208 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_volume_for_uuid + 1486: 000000000003f7b4 160 FUNC GLOBAL DEFAULT 11 g_cancellable_source_new + 1487: 00000000000d4c00 184 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_interface + 1488: 00000000000a68d8 188 FUNC GLOBAL DEFAULT 11 g_volume_get_symbolic_icon + 1489: 00000000000c824c 764 FUNC GLOBAL DEFAULT 11 g_dbus_error_encode_gerror + 1490: 000000000004fc54 208 FUNC GLOBAL DEFAULT 11 g_file_find_enclosing_mount_async + 1491: 0000000000079dc0 220 FUNC GLOBAL DEFAULT 11 g_output_stream_close + 1492: 00000000000ae264 132 FUNC GLOBAL DEFAULT 11 g_application_get_is_registered + 1493: 000000000003a160 160 FUNC GLOBAL DEFAULT 11 g_app_info_get_icon + 1494: 000000000009a678 124 FUNC GLOBAL DEFAULT 11 g_themed_icon_get_names + 1495: 000000000006a57c 476 FUNC GLOBAL DEFAULT 11 g_input_stream_read + 1496: 00000000000d489c 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_unix_fd_list + 1497: 00000000000dbb18 336 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_type + 1498: 00000000001245d8 92 FUNC GLOBAL DEFAULT 11 g_settings_set_strv + 1499: 0000000000045f14 128 FUNC GLOBAL DEFAULT 11 g_data_output_stream_get_byte_order + 1500: 0000000000105a38 296 FUNC GLOBAL DEFAULT 11 g_content_type_guess_for_tree + 1501: 0000000000047450 352 FUNC GLOBAL DEFAULT 11 g_drive_eject_finish + 1502: 000000000003af3c 44 FUNC GLOBAL DEFAULT 11 g_app_info_monitor_get + 1503: 000000000011ed34 484 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_list_schemas + 1504: 00000000000cd384 280 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flush_finish + 1505: 000000000003ca68 328 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_set_buffer_size + 1506: 00000000000bd9a0 188 FUNC GLOBAL DEFAULT 11 g_notification_set_default_action + 1507: 0000000000045f94 200 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_byte + 1508: 00000000000a8e14 232 FUNC GLOBAL DEFAULT 11 g_zlib_decompressor_get_type + 1509: 00000000000551a4 292 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable + 1510: 00000000000b31d4 104 FUNC GLOBAL DEFAULT 11 g_action_group_query_action + 1511: 00000000000e11b8 136 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_unref + 1512: 0000000000045070 328 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_until_async + 1513: 0000000000077de4 288 FUNC GLOBAL DEFAULT 11 g_output_stream_write_finish + 1514: 00000000000ba568 76 FUNC GLOBAL DEFAULT 11 g_menu_insert + 1515: 0000000000081468 48 FUNC GLOBAL DEFAULT 11 g_static_resource_init + 1516: 00000000000e405c 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_user_data + 1517: 0000000000095ae8 360 FUNC GLOBAL DEFAULT 11 g_srv_target_list_sort + 1518: 00000000000d5db4 180 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_signature + 1519: 0000000000057004 352 FUNC GLOBAL DEFAULT 11 g_file_start_mountable_finish + 1520: 00000000000e7fe8 144 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_type + 1521: 00000000000985a4 252 FUNC GLOBAL DEFAULT 11 g_task_return_error_if_cancelled + 1522: 000000000010b688 24 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_is_abstract + 1523: 000000000003b6d0 144 FUNC GLOBAL DEFAULT 11 g_async_result_get_type + 1524: 0000000000083f00 268 FUNC GLOBAL DEFAULT 11 g_simple_async_result_run_in_thread + 1525: 000000000003b7fc 160 FUNC GLOBAL DEFAULT 11 g_async_result_get_source_object + 1526: 000000000007826c 288 FUNC GLOBAL DEFAULT 11 g_output_stream_flush_finish + 1527: 0000000000105300 196 FUNC GLOBAL DEFAULT 11 g_content_type_get_generic_icon_name + 1528: 00000000000a62b0 288 FUNC GLOBAL DEFAULT 11 g_vfs_unregister_uri_scheme + 1529: 00000000000a95f8 108 FUNC GLOBAL DEFAULT 11 g_file_copy_flags_get_type + 1530: 0000000000092238 84 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_stdout_fd + 1531: 0000000000090ecc 1652 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_any_inet_port + 1532: 000000000006f388 160 FUNC GLOBAL DEFAULT 11 g_mount_get_icon + 1533: 000000000008f55c 132 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_msg_type + 1534: 00000000000944a8 228 FUNC GLOBAL DEFAULT 11 g_subprocess_get_exit_status + 1535: 00000000000a2ad0 160 FUNC GLOBAL DEFAULT 11 g_tls_password_set_warning + 1536: 0000000000051cd4 308 FUNC GLOBAL DEFAULT 11 g_file_copy_finish + 1537: 0000000000078a48 276 FUNC GLOBAL DEFAULT 11 g_output_stream_set_pending + 1538: 00000000000a59b8 156 FUNC GLOBAL DEFAULT 11 g_vfs_get_type + 1539: 0000000000124300 52 FUNC GLOBAL DEFAULT 11 g_settings_set_string + 1540: 00000000000b5008 4 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unexport_action_group + 1541: 00000000000cd2f0 148 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_capabilities + 1542: 00000000000d1928 776 FUNC GLOBAL DEFAULT 11 g_dbus_connection_emit_signal + 1543: 00000000000af760 216 FUNC GLOBAL DEFAULT 11 g_application_unmark_busy + 1544: 000000000003e424 168 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_set_auto_grow + 1545: 0000000000095ac8 8 FUNC GLOBAL DEFAULT 11 g_srv_target_get_hostname + 1546: 000000000011f568 364 FUNC GLOBAL DEFAULT 11 g_settings_schema_list_children + 1547: 00000000000a907c 108 FUNC GLOBAL DEFAULT 11 g_converter_result_get_type + 1548: 0000000000093c8c 168 FUNC GLOBAL DEFAULT 11 g_subprocess_get_stdout_pipe + 1549: 00000000000e2504 108 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_get_type + 1550: 00000000000aa594 108 FUNC GLOBAL DEFAULT 11 g_dbus_signal_flags_get_type + 1551: 0000000000124334 52 FUNC GLOBAL DEFAULT 11 g_settings_get_int + 1552: 0000000000068a48 208 FUNC GLOBAL DEFAULT 11 g_initable_new_valist + 1553: 00000000000d03f4 128 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_exit_on_close + 1554: 000000000009d148 136 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_set_server_identity + 1555: 00000000000ada44 212 FUNC GLOBAL DEFAULT 11 g_application_set_action_group + 1556: 00000000001c2130 0 NOTYPE GLOBAL DEFAULT 27 __bss_start + 1557: 0000000000077f84 240 FUNC GLOBAL DEFAULT 11 g_output_stream_write_all_finish + 1558: 000000000004732c 292 FUNC GLOBAL DEFAULT 11 g_drive_eject + 1559: 000000000011ffbc 384 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_range + 1560: 0000000000066524 244 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_site_local + 1561: 0000000000102788 644 FUNC GLOBAL DEFAULT 11 g_app_info_get_default_for_type + 1562: 0000000000106ea0 72 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_new + 1563: 00000000000426a0 24 FUNC GLOBAL DEFAULT 11 g_credentials_new + 1564: 000000000003a404 196 FUNC GLOBAL DEFAULT 11 g_app_info_launch_uris + 1565: 0000000000060808 192 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_enumerate_namespace + 1566: 00000000000832a8 140 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_op_res_gssize + 1567: 000000000009c30c 128 FUNC GLOBAL DEFAULT 11 g_tls_certificate_get_type + 1568: 000000000011f004 440 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_lookup + 1569: 000000000010d64c 132 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_get_close_fd + 1570: 000000000011f808 8 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_id + 1571: 000000000009458c 200 FUNC GLOBAL DEFAULT 11 g_subprocess_get_if_signaled + 1572: 000000000010a954 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_is_loopback + 1573: 0000000000076850 128 FUNC GLOBAL DEFAULT 11 g_network_service_get_domain + 1574: 00000000000ba744 20 FUNC GLOBAL DEFAULT 11 g_menu_prepend_section + 1575: 0000000000050e0c 288 FUNC GLOBAL DEFAULT 11 g_file_append_to_finish + 1576: 000000000005f708 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_is_hidden + 1577: 0000000000045db8 160 FUNC GLOBAL DEFAULT 11 g_data_output_stream_set_byte_order + 1578: 00000000000867c0 128 FUNC GLOBAL DEFAULT 11 g_socket_get_fd + 1579: 0000000000062fa0 320 FUNC GLOBAL DEFAULT 11 g_file_output_stream_query_info_finish + 1580: 000000000012446c 52 FUNC GLOBAL DEFAULT 11 g_settings_get_uint64 + 1581: 00000000000b09b4 356 FUNC GLOBAL DEFAULT 11 g_application_command_line_print + 1582: 000000000005aa70 140 FUNC GLOBAL DEFAULT 11 g_file_icon_new + 1583: 00000000000a2920 144 FUNC GLOBAL DEFAULT 11 g_tls_password_get_warning + 1584: 0000000000058c24 164 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_ref + 1585: 0000000000090208 156 FUNC GLOBAL DEFAULT 11 g_socket_listener_get_type + 1586: 000000000004ef54 288 FUNC GLOBAL DEFAULT 11 g_file_enumerate_children_finish + 1587: 0000000000098dac 252 FUNC GLOBAL DEFAULT 11 g_tcp_connection_get_type + 1588: 000000000007992c 168 FUNC GLOBAL DEFAULT 11 g_output_stream_printf + 1589: 00000000000aa378 108 FUNC GLOBAL DEFAULT 11 g_dbus_message_flags_get_type + 1590: 00000000000aff48 372 FUNC GLOBAL DEFAULT 11 g_application_unbind_busy_property + 1591: 000000000005cad8 420 FUNC GLOBAL DEFAULT 11 g_file_info_copy_into + 1592: 000000000007c718 160 FUNC GLOBAL DEFAULT 11 g_proxy_supports_hostname + 1593: 00000000000e7454 192 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_vtable + 1594: 00000000000d42f4 220 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_flags + 1595: 000000000008484c 56 FUNC GLOBAL DEFAULT 11 g_simple_io_stream_new + 1596: 000000000010970c 112 FUNC GLOBAL DEFAULT 11 g_unix_mount_entry_get_type + 1597: 00000000000566c4 20 FUNC GLOBAL DEFAULT 11 g_file_load_contents_async + 1598: 000000000006a758 360 FUNC GLOBAL DEFAULT 11 g_input_stream_read_all + 1599: 0000000000086974 136 FUNC GLOBAL DEFAULT 11 g_socket_is_connected + 1600: 00000000000aa3e4 108 FUNC GLOBAL DEFAULT 11 g_dbus_message_header_field_get_type + 1601: 00000000000ebc94 468 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new + 1602: 000000000008361c 184 FUNC GLOBAL DEFAULT 11 g_simple_async_result_take_error + 1603: 00000000000b6948 392 FUNC GLOBAL DEFAULT 11 g_action_print_detailed_name + 1604: 0000000000050d34 216 FUNC GLOBAL DEFAULT 11 g_file_append_to_async + 1605: 00000000000e1038 120 FUNC GLOBAL DEFAULT 11 g_dbus_signal_info_unref + 1606: 0000000000064aa0 144 FUNC GLOBAL DEFAULT 11 g_icon_get_type + 1607: 0000000000058da4 312 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_add + 1608: 000000000008f0cc 12 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_local_address + 1609: 00000000000923ec 208 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_spawnv + 1610: 0000000000107d8c 12 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_get_fd_list + 1611: 000000000009badc 24 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_default + 1612: 0000000000066778 168 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_link_local + 1613: 00000000000768d0 136 FUNC GLOBAL DEFAULT 11 g_network_service_get_scheme + 1614: 00000000000b3008 236 FUNC GLOBAL DEFAULT 11 g_action_group_action_enabled_changed + 1615: 000000000008d4c4 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_socket_type + 1616: 0000000000039d9c 304 FUNC GLOBAL DEFAULT 11 g_app_info_add_supports_type + 1617: 00000000000be418 136 FUNC GLOBAL DEFAULT 11 g_dbus_is_member_name + 1618: 000000000003ccf8 156 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_new_sized + 1619: 000000000005cf78 212 FUNC GLOBAL DEFAULT 11 g_file_info_has_attribute + 1620: 000000000003a2c4 160 FUNC GLOBAL DEFAULT 11 g_app_info_supports_uris + 1621: 00000000000a398c 180 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_rehandshake_mode + 1622: 00000000000a9814 108 FUNC GLOBAL DEFAULT 11 g_io_error_enum_get_type + 1623: 000000000005d794 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_object + 1624: 000000000003aaf4 68 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_environment + 1625: 00000000000e9cd8 136 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_object + 1626: 00000000000834c4 192 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_from_error + 1627: 0000000000095ad8 8 FUNC GLOBAL DEFAULT 11 g_srv_target_get_priority + 1628: 00000000000920a0 156 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_flags + 1629: 00000000000d2144 4 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_with_unix_fd_list_sync + 1630: 00000000000466b0 144 FUNC GLOBAL DEFAULT 11 g_drive_get_type + 1631: 00000000000a5644 292 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get + 1632: 00000000000b999c 12 FUNC GLOBAL DEFAULT 11 g_menu_prepend_item + 1633: 000000000009d310 184 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_accepted_cas + 1634: 000000000008ebd8 172 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_type + 1635: 0000000000074f48 80 FUNC GLOBAL DEFAULT 11 g_network_monitor_can_reach + 1636: 0000000000055bac 104 FUNC GLOBAL DEFAULT 11 g_file_monitor + 1637: 000000000007b2a4 156 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_can_poll + 1638: 0000000000107074 128 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_get_credentials + 1639: 000000000007be6c 28 FUNC GLOBAL DEFAULT 11 g_pollable_stream_read + 1640: 0000000000109020 148 FUNC GLOBAL DEFAULT 11 g_unix_mount_copy + 1641: 00000000000b67e0 360 FUNC GLOBAL DEFAULT 11 g_action_parse_detailed_name + 1642: 00000000000aaaa4 108 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_flags_get_type + 1643: 000000000007b940 168 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_create_source + 1644: 000000000008e400 180 FUNC GLOBAL DEFAULT 11 g_socket_connectable_proxy_enumerate + 1645: 0000000000065d78 160 FUNC GLOBAL DEFAULT 11 g_inet_address_get_type + 1646: 00000000000c7548 476 FUNC GLOBAL DEFAULT 11 g_dbus_error_register_error_domain + 1647: 000000000007c470 64 FUNC GLOBAL DEFAULT 11 g_proxy_get_default_for_protocol + 1648: 00000000000ec444 156 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_name_owner + 1649: 000000000009947c 128 FUNC GLOBAL DEFAULT 11 g_tcp_wrapper_connection_get_base_io_stream + 1650: 00000000000610f0 300 FUNC GLOBAL DEFAULT 11 g_file_input_stream_query_info_async + 1651: 00000000000853ac 332 FUNC GLOBAL DEFAULT 11 g_socket_get_type + 1652: 0000000000045320 484 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_upto + 1653: 000000000010764c 212 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_peek_fds + 1654: 00000000000cf480 580 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message_with_reply_sync + 1655: 000000000009d084 196 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_server_identity + 1656: 000000000006ec70 360 FUNC GLOBAL DEFAULT 11 g_mount_unmount_with_operation + 1657: 0000000000039ecc 184 FUNC GLOBAL DEFAULT 11 g_app_info_can_remove_supports_type + 1658: 000000000009f5a8 304 FUNC GLOBAL DEFAULT 11 g_tls_database_create_certificate_handle + 1659: 00000000000a3850 180 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_require_close_notify + 1660: 000000000004ecc8 276 FUNC GLOBAL DEFAULT 11 g_file_enumerate_children + 1661: 0000000000040240 68 FUNC GLOBAL DEFAULT 11 g_charset_converter_new + 1662: 000000000004d784 364 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable_with_operation + 1663: 00000000000d4d38 184 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_member + 1664: 000000000011fdc0 188 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_key + 1665: 00000000000793b0 476 FUNC GLOBAL DEFAULT 11 g_output_stream_write + 1666: 0000000000107720 364 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_append + 1667: 00000000000a4818 196 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_server_identity + 1668: 000000000011ea70 100 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_ref + 1669: 0000000000045504 204 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_until + 1670: 000000000006dfe8 128 FUNC GLOBAL DEFAULT 11 g_io_stream_clear_pending + 1671: 000000000004478c 236 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_int16 + 1672: 00000000000ee248 492 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_export_uniquely + 1673: 000000000011db10 328 FUNC GLOBAL DEFAULT 11 g_settings_backend_flatten_tree + 1674: 000000000008f0d8 96 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_remote_address + 1675: 00000000000a90e8 108 FUNC GLOBAL DEFAULT 11 g_data_stream_byte_order_get_type + 1676: 0000000000088518 452 FUNC GLOBAL DEFAULT 11 g_socket_send_with_blocking + 1677: 00000000000a9304 108 FUNC GLOBAL DEFAULT 11 g_file_query_info_flags_get_type + 1678: 00000000000a9370 108 FUNC GLOBAL DEFAULT 11 g_file_create_flags_get_type + 1679: 00000000000c09cc 140 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_get_type + 1680: 00000000000ae398 184 FUNC GLOBAL DEFAULT 11 g_application_get_dbus_connection + 1681: 00000000000a4964 184 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_accepted_cas + 1682: 000000000003f360 88 FUNC GLOBAL DEFAULT 11 g_cancellable_get_fd + 1683: 00000000000869fc 296 FUNC GLOBAL DEFAULT 11 g_socket_listen + 1684: 000000000006b6a0 124 FUNC GLOBAL DEFAULT 11 g_io_module_scope_block + 1685: 0000000000039730 160 FUNC GLOBAL DEFAULT 11 g_app_info_get_name + 1686: 000000000009e458 160 FUNC GLOBAL DEFAULT 11 g_tls_connection_handshake + 1687: 00000000000c0bfc 96 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_allow_mechanism + 1688: 0000000000109e44 40 FUNC GLOBAL DEFAULT 11 g_unix_mounts_get + 1689: 000000000007d028 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_destination_hostname + 1690: 000000000003aa2c 108 FUNC GLOBAL DEFAULT 11 g_app_launch_context_setenv + 1691: 00000000000d5f40 388 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_body + 1692: 00000000000a40e8 368 FUNC GLOBAL DEFAULT 11 g_dtls_connection_close + 1693: 0000000000042a10 220 FUNC GLOBAL DEFAULT 11 g_credentials_get_unix_user + 1694: 00000000000d57a0 184 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_sender + 1695: 000000000010ab50 76 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_icon + 1696: 000000000003d35c 392 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_read_byte + 1697: 00000000000f9820 148 FUNC GLOBAL DEFAULT 11 g_local_file_monitor_get_type + 1698: 000000000007ad5c 160 FUNC GLOBAL DEFAULT 11 g_permission_release + 1699: 000000000004ffbc 268 FUNC GLOBAL DEFAULT 11 g_file_append_to + 1700: 00000000000e6328 156 FUNC GLOBAL DEFAULT 11 g_dbus_interface_get_info + 1701: 00000000000ba320 16 FUNC GLOBAL DEFAULT 11 g_menu_item_set_submenu + 1702: 00000000000ba5dc 84 FUNC GLOBAL DEFAULT 11 g_menu_item_new_submenu + 1703: 000000000010b37c 252 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_type + 1704: 000000000006a1d0 448 FUNC GLOBAL DEFAULT 11 g_input_stream_skip_async + 1705: 0000000000054e08 296 FUNC GLOBAL DEFAULT 11 g_file_set_attributes_finish + 1706: 00000000000aa8f4 108 FUNC GLOBAL DEFAULT 11 g_tls_rehandshake_mode_get_type + 1707: 000000000009e06c 192 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_peer_certificate + 1708: 000000000006f4e4 160 FUNC GLOBAL DEFAULT 11 g_mount_get_uuid + 1709: 00000000000d83b4 464 FUNC GLOBAL DEFAULT 11 g_bus_own_name_on_connection + 1710: 00000000000cd630 280 FUNC GLOBAL DEFAULT 11 g_dbus_connection_close_finish + 1711: 00000000001c3e98 0 NOTYPE GLOBAL DEFAULT 27 _end + 1712: 00000000000e43f4 8 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_value + 1713: 000000000007b508 440 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_read_nonblocking + 1714: 000000000009013c 204 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_socket_async + 1715: 00000000000892e4 112 FUNC GLOBAL DEFAULT 11 g_socket_send_to + 1716: 00000000000aad2c 108 FUNC GLOBAL DEFAULT 11 g_socket_listener_event_get_type + 1717: 000000000008e298 4 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_service_finish + 1718: 0000000000098740 124 FUNC GLOBAL DEFAULT 11 g_task_get_completed + 1719: 000000000004f3c0 176 FUNC GLOBAL DEFAULT 11 g_file_query_exists + 1720: 0000000000091eec 140 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_get_type + 1721: 000000000005650c 440 FUNC GLOBAL DEFAULT 11 g_file_load_partial_contents_finish + 1722: 0000000000053920 348 FUNC GLOBAL DEFAULT 11 g_file_set_attributes_from_info + 1723: 00000000000a26a4 128 FUNC GLOBAL DEFAULT 11 g_tls_password_get_flags + 1724: 00000000000e78e8 144 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_object_path + 1725: 00000000000e7224 176 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_set_flags + 1726: 00000000000e3a1c 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_method_name + 1727: 000000000004b78c 280 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_new + 1728: 0000000000106ee8 196 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_new_with_credentials + 1729: 00000000001073e0 24 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_new + 1730: 000000000010a7b0 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_device_path + 1731: 000000000009e5ac 160 FUNC GLOBAL DEFAULT 11 g_tls_connection_handshake_finish + 1732: 00000000000957e4 160 FUNC GLOBAL DEFAULT 11 g_socket_service_is_active + 1733: 0000000000086188 172 FUNC GLOBAL DEFAULT 11 g_socket_set_blocking + 1734: 0000000000041680 156 FUNC GLOBAL DEFAULT 11 g_converter_input_stream_new + 1735: 00000000000c7724 64 FUNC GLOBAL DEFAULT 11 g_dbus_error_quark + 1736: 0000000000071a18 112 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_new + 1737: 00000000000a9664 108 FUNC GLOBAL DEFAULT 11 g_file_monitor_flags_get_type + 1738: 000000000010a9e4 160 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_icon + 1739: 000000000006f2e8 160 FUNC GLOBAL DEFAULT 11 g_mount_get_name + 1740: 00000000000d10c8 368 FUNC GLOBAL DEFAULT 11 g_dbus_connection_signal_unsubscribe + 1741: 000000000004e2ec 160 FUNC GLOBAL DEFAULT 11 g_file_get_parse_name + 1742: 00000000000b8990 28 FUNC GLOBAL DEFAULT 11 g_menu_model_iterate_item_attributes + 1743: 00000000000ccb94 188 FUNC GLOBAL DEFAULT 11 g_dbus_connection_start_message_processing + 1744: 0000000000090cc0 124 FUNC GLOBAL DEFAULT 11 g_socket_listener_set_backlog + 1745: 000000000010a348 48 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_get + 1746: 000000000007d034 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_destination_port + 1747: 0000000000062798 252 FUNC GLOBAL DEFAULT 11 g_file_output_stream_get_type + 1748: 000000000012bfd4 0 FUNC GLOBAL DEFAULT 12 _fini + 1749: 0000000000095ae0 8 FUNC GLOBAL DEFAULT 11 g_srv_target_get_weight + 1750: 0000000000054f78 56 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_uint32 + 1751: 00000000000d653c 1380 FUNC GLOBAL DEFAULT 11 g_dbus_message_to_blob + 1752: 000000000009239c 80 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_child_setup + 1753: 000000000003a364 160 FUNC GLOBAL DEFAULT 11 g_app_info_supports_files + 1754: 0000000000083060 124 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_source_tag + 1755: 0000000000056edc 296 FUNC GLOBAL DEFAULT 11 g_file_measure_disk_usage_finish + 1756: 00000000000c7f0c 320 FUNC GLOBAL DEFAULT 11 g_dbus_error_set_dbus_error_valist + 1757: 000000000010a5f8 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_is_readonly + 1758: 0000000000079af8 268 FUNC GLOBAL DEFAULT 11 g_output_stream_flush + 1759: 00000000001024f4 176 FUNC GLOBAL DEFAULT 11 g_app_info_get_recommended_for_type + 1760: 0000000000083e3c 196 FUNC GLOBAL DEFAULT 11 g_simple_async_result_complete_in_idle + 1761: 000000000010d4a8 128 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_get_fd + 1762: 000000000006e920 312 FUNC GLOBAL DEFAULT 11 g_loadable_icon_load_finish + 1763: 0000000000091fc0 80 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_environ + 1764: 000000000011e9f8 120 FUNC GLOBAL DEFAULT 11 g_settings_schema_unref + 1765: 0000000000080cdc 28 FUNC GLOBAL DEFAULT 11 g_resource_get_info + 1766: 000000000010ab9c 76 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_symbolic_icon + 1767: 0000000000074ef4 84 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_connectivity + 1768: 0000000000098ea8 52 FUNC GLOBAL DEFAULT 11 g_tcp_connection_set_graceful_disconnect + 1769: 00000000000a2540 172 FUNC GLOBAL DEFAULT 11 g_tls_password_set_value_full + 1770: 00000000000a6ce4 184 FUNC GLOBAL DEFAULT 11 g_volume_should_automount + 1771: 00000000000a11e0 156 FUNC GLOBAL DEFAULT 11 g_tls_interaction_get_type + 1772: 00000000000d62d0 104 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_error_valist + 1773: 0000000000057af0 252 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_unref + 1774: 0000000000059cf0 320 FUNC GLOBAL DEFAULT 11 g_file_enumerator_next_files_finish + 1775: 0000000000073ee8 140 FUNC GLOBAL DEFAULT 11 g_network_address_new_loopback + 1776: 00000000000704d0 192 FUNC GLOBAL DEFAULT 11 g_mount_unshadow + 1777: 00000000000d64bc 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_num_unix_fds + 1778: 0000000000042380 156 FUNC GLOBAL DEFAULT 11 g_converter_output_stream_new + 1779: 00000000000d2140 4 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_with_unix_fd_list_finish + 1780: 000000000003a804 4 FUNC GLOBAL DEFAULT 11 g_app_info_launch_default_for_uri_finish + 1781: 0000000000055058 332 FUNC GLOBAL DEFAULT 11 g_file_mount_mountable_finish + 1782: 000000000005d278 212 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_type + 1783: 000000000006cc64 168 FUNC GLOBAL DEFAULT 11 g_io_scheduler_cancel_all_jobs + 1784: 000000000007ee78 104 FUNC GLOBAL DEFAULT 11 g_resolver_get_default + 1785: 000000000003f19c 20 FUNC GLOBAL DEFAULT 11 g_cancellable_is_cancelled + 1786: 00000000000750b0 72 FUNC GLOBAL DEFAULT 11 g_network_monitor_can_reach_finish + 1787: 000000000009c900 320 FUNC GLOBAL DEFAULT 11 g_tls_certificate_new_from_pem + 1788: 0000000000067ee4 252 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_type + 1789: 0000000000107344 156 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_get_type + 1790: 000000000003e140 128 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_get_buffer_size + 1791: 00000000000d4af8 136 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_reply_serial + 1792: 00000000000d6aa0 136 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_num_unix_fds + 1793: 000000000003edf8 156 FUNC GLOBAL DEFAULT 11 g_cancellable_get_type + 1794: 000000000004e10c 160 FUNC GLOBAL DEFAULT 11 g_file_get_basename + 1795: 0000000000092334 104 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_fd + 1796: 00000000000e5d50 368 FUNC GLOBAL DEFAULT 11 g_dbus_server_new_sync + 1797: 00000000000886dc 28 FUNC GLOBAL DEFAULT 11 g_socket_send + 1798: 00000000000d60c4 524 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_error_literal + 1799: 00000000000465ac 260 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_string + 1800: 0000000000054a0c 684 FUNC GLOBAL DEFAULT 11 g_file_move + 1801: 00000000000b9710 148 FUNC GLOBAL DEFAULT 11 g_menu_get_type + 1802: 000000000007bea4 260 FUNC GLOBAL DEFAULT 11 g_pollable_stream_write_all + 1803: 00000000000d3fe0 24 FUNC GLOBAL DEFAULT 11 g_dbus_message_new + 1804: 0000000000044960 224 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_int32 + 1805: 00000000000b8e34 76 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_value + 1806: 00000000001c2130 0 NOTYPE GLOBAL DEFAULT 27 __bss_start__ + 1807: 00000000000bcf5c 180 FUNC GLOBAL DEFAULT 11 g_notification_set_title + 1808: 000000000011dc58 220 FUNC GLOBAL DEFAULT 11 g_settings_backend_changed_tree + 1809: 000000000008d5f4 44 FUNC GLOBAL DEFAULT 11 g_socket_client_set_tls + 1810: 000000000010a858 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_options + 1811: 0000000000083a38 396 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_error + 1812: 0000000000066218 28 FUNC GLOBAL DEFAULT 11 g_inet_address_get_native_size + 1813: 00000000000a0b10 56 FUNC GLOBAL DEFAULT 11 g_tls_file_database_new + 1814: 0000000000102774 20 FUNC GLOBAL DEFAULT 11 g_app_info_reset_type_associations + 1815: 00000000000b63d8 336 FUNC GLOBAL DEFAULT 11 g_action_change_state + 1816: 000000000003c9e8 128 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_get_buffer_size + 1817: 0000000000105558 8 FUNC GLOBAL DEFAULT 11 g_content_type_get_symbolic_icon + 1818: 00000000000d8840 676 FUNC GLOBAL DEFAULT 11 g_bus_unown_name + 1819: 00000000000b05c0 156 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_type + 1820: 00000000000e80b0 56 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_interfaces + 1821: 0000000000067388 296 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_new_from_string + 1822: 000000000007b204 160 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_get_type + 1823: 00000000000b822c 116 FUNC GLOBAL DEFAULT 11 g_simple_action_new + 1824: 0000000000075a10 328 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_get_type + 1825: 0000000000056a08 284 FUNC GLOBAL DEFAULT 11 g_file_replace_contents_finish + 1826: 0000000000086840 308 FUNC GLOBAL DEFAULT 11 g_socket_get_local_address + 1827: 00000000000ba6f8 76 FUNC GLOBAL DEFAULT 11 g_menu_insert_section + 1828: 000000000008ee70 260 FUNC GLOBAL DEFAULT 11 g_socket_connection_connect + 1829: 000000000005c62c 96 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_ref + 1830: 0000000000097814 184 FUNC GLOBAL DEFAULT 11 g_task_attach_source + 1831: 000000000008d3bc 192 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_uri_async + 1832: 000000000004e6a4 308 FUNC GLOBAL DEFAULT 11 g_file_has_parent + 1833: 000000000008850c 12 FUNC GLOBAL DEFAULT 11 g_socket_receive_with_blocking + 1834: 0000000000040868 144 FUNC GLOBAL DEFAULT 11 g_converter_get_type + 1835: 00000000000397d0 192 FUNC GLOBAL DEFAULT 11 g_app_info_get_display_name + 1836: 00000000000cf21c 280 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message_with_reply_finish + 1837: 00000000000433ac 320 FUNC GLOBAL DEFAULT 11 g_datagram_based_create_source + 1838: 00000000000ad3c8 632 FUNC GLOBAL DEFAULT 11 g_application_add_main_option_entries + 1839: 00000000000b61f8 160 FUNC GLOBAL DEFAULT 11 g_action_get_name + 1840: 0000000000039c6c 304 FUNC GLOBAL DEFAULT 11 g_app_info_set_as_default_for_extension + 1841: 00000000000e0b50 32 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_ref + 1842: 0000000000082b98 160 FUNC GLOBAL DEFAULT 11 g_seekable_can_truncate + 1843: 000000000004f630 288 FUNC GLOBAL DEFAULT 11 g_file_query_info_finish + 1844: 000000000007f304 472 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_service + 1845: 00000000000471b8 184 FUNC GLOBAL DEFAULT 11 g_drive_can_eject + 1846: 00000000000d5e68 216 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_signature + 1847: 000000000007f8f0 56 FUNC GLOBAL DEFAULT 11 g_resolver_error_quark + 1848: 0000000000086fe0 16 FUNC GLOBAL DEFAULT 11 g_socket_is_closed + 1849: 0000000000094a1c 488 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate + 1850: 000000000008a154 392 FUNC GLOBAL DEFAULT 11 g_socket_check_connect_result + 1851: 00000000000e38a8 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_interface_name + 1852: 0000000000094748 328 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_async + 1853: 000000000009ce60 160 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_type + 1854: 00000000000693a8 320 FUNC GLOBAL DEFAULT 11 g_input_stream_read_finish + 1855: 000000000009e4f8 180 FUNC GLOBAL DEFAULT 11 g_tls_connection_handshake_async + 1856: 000000000008662c 128 FUNC GLOBAL DEFAULT 11 g_socket_get_socket_type + 1857: 000000000008ee64 12 FUNC GLOBAL DEFAULT 11 g_socket_connection_is_connected + 1858: 0000000000107ff8 100 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_append_fd + 1859: 00000000000a4a88 160 FUNC GLOBAL DEFAULT 11 g_dtls_server_connection_get_type + 1860: 000000000005d92c 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_byte_string + 1861: 000000000011c4f4 816 FUNC GLOBAL DEFAULT 11 g_keyfile_settings_backend_new + 1862: 00000000000718e8 304 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_type + 1863: 0000000000093b5c 136 FUNC GLOBAL DEFAULT 11 g_subprocess_get_identifier + 1864: 00000000000d3ff8 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_byte_order + 1865: 00000000000ab294 132 FUNC GLOBAL DEFAULT 11 g_list_model_get_object + 1866: 000000000011f28c 8 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_path + 1867: 0000000000070e00 48 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_new_from_bytes + 1868: 0000000000059504 156 FUNC GLOBAL DEFAULT 11 g_file_enumerator_get_type + 1869: 000000000004fd24 288 FUNC GLOBAL DEFAULT 11 g_file_find_enclosing_mount_finish + 1870: 0000000000062024 140 FUNC GLOBAL DEFAULT 11 g_filename_completer_get_type + 1871: 00000000000b89c8 244 FUNC GLOBAL DEFAULT 11 g_menu_model_get_item_attribute + 1872: 000000000010a37c 140 FUNC GLOBAL DEFAULT 11 g_unix_mount_compare + 1873: 00000000000b34f4 64 FUNC GLOBAL DEFAULT 11 g_action_map_add_action + 1874: 000000000009ee40 720 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_chain + 1875: 00000000000bce74 108 FUNC GLOBAL DEFAULT 11 g_notification_new + 1876: 0000000000072984 128 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_password_save + 1877: 000000000010a900 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_is_user_mountable + 1878: 000000000005fcd0 284 FUNC GLOBAL DEFAULT 11 g_file_info_set_symbolic_icon + 1879: 0000000000062150 24 FUNC GLOBAL DEFAULT 11 g_filename_completer_new + 1880: 0000000000061340 320 FUNC GLOBAL DEFAULT 11 g_file_input_stream_query_info_finish + 1881: 000000000006fbac 352 FUNC GLOBAL DEFAULT 11 g_mount_eject_finish + 1882: 00000000001073f8 372 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_new_from_array + 1883: 00000000000e43fc 4 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_value_with_unix_fd_list + 1884: 00000000000e7978 732 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_export + 1885: 0000000000106e98 8 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_is_supported + 1886: 000000000011ef7c 32 FUNC GLOBAL DEFAULT 11 g_settings_list_schemas + 1887: 00000000000ee108 168 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_get_connection + 1888: 000000000003e044 252 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_get_type + 1889: 00000000000c04bc 228 FUNC GLOBAL DEFAULT 11 g_dbus_address_escape_value + 1890: 00000000000ba340 92 FUNC GLOBAL DEFAULT 11 g_menu_item_set_action_and_target_value + 1891: 00000000000597c4 376 FUNC GLOBAL DEFAULT 11 g_file_enumerator_close_async + 1892: 0000000000097ee4 216 FUNC GLOBAL DEFAULT 11 g_task_propagate_pointer + 1893: 0000000000090c88 56 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_finish + 1894: 00000000000a73d8 172 FUNC GLOBAL DEFAULT 11 g_volume_enumerate_identifiers + 1895: 00000000000e0b70 32 FUNC GLOBAL DEFAULT 11 g_dbus_method_info_ref + 1896: 000000000004fe44 248 FUNC GLOBAL DEFAULT 11 g_file_read + 1897: 0000000000045730 120 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_upto_finish + 1898: 00000000000bb910 476 FUNC GLOBAL DEFAULT 11 g_dbus_connection_export_menu_model + 1899: 0000000000052cec 360 FUNC GLOBAL DEFAULT 11 g_file_set_display_name + 1900: 000000000010ab14 60 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_name + 1901: 000000000009db90 220 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_database + 1902: 00000000000c73b0 408 FUNC GLOBAL DEFAULT 11 g_dbus_error_register_error + 1903: 00000000000e875c 264 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_set_object_path + 1904: 0000000000124738 24 FUNC GLOBAL DEFAULT 11 g_settings_revert + 1905: 00000000000a0a70 160 FUNC GLOBAL DEFAULT 11 g_tls_file_database_get_type + 1906: 000000000005d4ec 212 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_status + 1907: 000000000005cc7c 144 FUNC GLOBAL DEFAULT 11 g_file_info_dup + 1908: 00000000000d4918 352 FUNC GLOBAL DEFAULT 11 g_dbus_message_bytes_needed + 1909: 000000000004a830 348 FUNC GLOBAL DEFAULT 11 g_emblem_new_with_origin + 1910: 000000000004b6a0 236 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_add_emblem + 1911: 0000000000056098 352 FUNC GLOBAL DEFAULT 11 g_file_mount_enclosing_volume_finish + 1912: 0000000000066618 184 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_multicast + 1913: 000000000004605c 232 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_int16 + 1914: 00000000000ee434 284 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_is_exported + 1915: 000000000005fbb4 284 FUNC GLOBAL DEFAULT 11 g_file_info_set_icon + 1916: 000000000007aea8 160 FUNC GLOBAL DEFAULT 11 g_permission_release_finish + 1917: 000000000005d774 32 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_as_string + 1918: 000000000005d46c 128 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_data + 1919: 00000000000a6a34 160 FUNC GLOBAL DEFAULT 11 g_volume_get_drive + 1920: 000000000004b610 144 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_clear_emblems + 1921: 00000000000a8364 232 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_get_type + 1922: 000000000009edbc 132 FUNC GLOBAL DEFAULT 11 g_tls_database_get_type + 1923: 000000000009bd2c 160 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_dtls_client_connection_type + 1924: 0000000000082e3c 232 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_type + 1925: 0000000000109efc 136 FUNC GLOBAL DEFAULT 11 g_unix_mount_for + 1926: 000000000010a9a8 60 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_name + 1927: 000000000006980c 216 FUNC GLOBAL DEFAULT 11 g_input_stream_read_bytes_finish + 1928: 00000000000958fc 120 FUNC GLOBAL DEFAULT 11 g_socket_service_stop + 1929: 0000000000056028 112 FUNC GLOBAL DEFAULT 11 g_file_new_for_commandline_arg_and_cwd + 1930: 0000000000094320 200 FUNC GLOBAL DEFAULT 11 g_subprocess_get_successful + 1931: 000000000006f234 180 FUNC GLOBAL DEFAULT 11 g_mount_get_default_location + 1932: 00000000000a848c 124 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_get_file_info + 1933: 000000000009f6d8 576 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_for_handle + 1934: 00000000000d7568 152 FUNC GLOBAL DEFAULT 11 g_dbus_message_lock + 1935: 0000000000054fe8 56 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_uint64 + 1936: 0000000000081044 344 FUNC GLOBAL DEFAULT 11 g_resources_lookup_data + 1937: 00000000000b0768 192 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_arguments + 1938: 00000000000d4074 172 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_byte_order + 1939: 00000000000d87b8 136 FUNC GLOBAL DEFAULT 11 g_bus_own_name_on_connection_with_closures + 1940: 00000000000d45b4 292 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_header + 1941: 000000000008d4a0 36 FUNC GLOBAL DEFAULT 11 g_socket_client_set_family + 1942: 0000000000043690 508 FUNC GLOBAL DEFAULT 11 g_datagram_based_condition_wait + 1943: 0000000000103514 144 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_string + 1944: 00000000000e0b90 32 FUNC GLOBAL DEFAULT 11 g_dbus_signal_info_ref + 1945: 0000000000102bb8 1504 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_search + 1946: 00000000000a1be4 524 FUNC GLOBAL DEFAULT 11 g_tls_interaction_invoke_request_certificate + 1947: 0000000000097634 124 FUNC GLOBAL DEFAULT 11 g_task_get_return_on_cancel + 1948: 0000000000051b74 352 FUNC GLOBAL DEFAULT 11 g_file_copy_async + 1949: 000000000009dd30 220 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_certificate + 1950: 00000000000921e4 84 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_stdout_file_path + 1951: 00000000000b27e8 156 FUNC GLOBAL DEFAULT 11 g_action_group_list_actions + 1952: 00000000000e3728 140 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_type + 1953: 000000000011ed14 32 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_get_default + 1954: 0000000000070d1c 228 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_add_bytes + 1955: 00000000001236dc 380 FUNC GLOBAL DEFAULT 11 g_settings_get_enum + 1956: 0000000000047e54 300 FUNC GLOBAL DEFAULT 11 g_drive_stop + 1957: 0000000000078074 216 FUNC GLOBAL DEFAULT 11 g_output_stream_write_bytes_finish + 1958: 00000000000aa888 108 FUNC GLOBAL DEFAULT 11 g_tls_authentication_mode_get_type + 1959: 00000000000ab0c8 144 FUNC GLOBAL DEFAULT 11 g_list_model_get_item_type + 1960: 0000000000107fa0 88 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_steal_fds + 1961: 00000000000a57c0 184 FUNC GLOBAL DEFAULT 11 g_volume_monitor_adopt_orphan_mount + 1962: 00000000000ec218 124 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_for_bus_finish + 1963: 0000000000086d90 392 FUNC GLOBAL DEFAULT 11 g_socket_close + 1964: 00000000000444bc 160 FUNC GLOBAL DEFAULT 11 g_data_input_stream_set_newline_type + 1965: 00000000000e3268 196 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_lookup_property + 1966: 000000000007f250 180 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_address_finish + 1967: 00000000001098b8 164 FUNC GLOBAL DEFAULT 11 g_unix_is_system_fs_type + 1968: 000000000007b0c8 280 FUNC GLOBAL DEFAULT 11 g_permission_impl_update + 1969: 0000000000090570 1064 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_inet_port + 1970: 00000000001242c8 56 FUNC GLOBAL DEFAULT 11 g_settings_get_string + 1971: 0000000000060738 208 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_matches + 1972: 000000000008f04c 128 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_socket + 1973: 000000000005dac4 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_boolean + 1974: 00000000000ab85c 104 FUNC GLOBAL DEFAULT 11 g_list_store_new + 1975: 0000000000068530 128 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_port + 1976: 0000000000047a14 184 FUNC GLOBAL DEFAULT 11 g_drive_get_start_stop_type + 1977: 00000000000ab158 148 FUNC GLOBAL DEFAULT 11 g_list_model_get_n_items + 1978: 00000000000dd36c 440 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_for_bus_sync + 1979: 00000000000aa2a0 108 FUNC GLOBAL DEFAULT 11 g_dbus_call_flags_get_type + 1980: 000000000008060c 56 FUNC GLOBAL DEFAULT 11 g_resource_error_quark + 1981: 0000000000093ddc 12 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_finish + 1982: 0000000000066010 168 FUNC GLOBAL DEFAULT 11 g_inet_address_new_any + 1983: 0000000000123ee0 288 FUNC GLOBAL DEFAULT 11 g_settings_get + 1984: 00000000000504ac 248 FUNC GLOBAL DEFAULT 11 g_file_open_readwrite + 1985: 00000000000b6298 160 FUNC GLOBAL DEFAULT 11 g_action_get_parameter_type + 1986: 00000000000602b8 112 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_get_type + 1987: 0000000000074e9c 88 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_network_metered + 1988: 00000000000566d8 4 FUNC GLOBAL DEFAULT 11 g_file_load_contents_finish + 1989: 000000000003d11c 136 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_get_available + 1990: 00000000000adbd0 128 FUNC GLOBAL DEFAULT 11 g_application_get_application_id + 1991: 0000000000079a84 116 FUNC GLOBAL DEFAULT 11 g_output_stream_write_bytes + 1992: 0000000000074ba0 4 FUNC GLOBAL DEFAULT 11 g_networking_init + 1993: 00000000000a9154 108 FUNC GLOBAL DEFAULT 11 g_data_stream_newline_type_get_type + 1994: 000000000009753c 124 FUNC GLOBAL DEFAULT 11 g_task_get_cancellable + 1995: 00000000000b9a40 216 FUNC GLOBAL DEFAULT 11 g_menu_remove + 1996: 00000000000a25ec 184 FUNC GLOBAL DEFAULT 11 g_tls_password_set_value + 1997: 000000000005ec9c 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_is_symlink + 1998: 0000000000051124 244 FUNC GLOBAL DEFAULT 11 g_file_replace_async + 1999: 000000000010a550 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_get_device_path + 2000: 0000000000044b20 232 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_int64 + 2001: 00000000000b916c 12 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_next + 2002: 00000000000902bc 272 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_socket + 2003: 00000000000aa9cc 108 FUNC GLOBAL DEFAULT 11 g_tls_interaction_result_get_type + 2004: 000000000009e31c 136 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_rehandshake_mode + 2005: 0000000000080eec 344 FUNC GLOBAL DEFAULT 11 g_resources_open_stream + 2006: 00000000000a3654 192 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_peer_certificate + 2007: 0000000000071aa4 124 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_data + 2008: 0000000000082a20 160 FUNC GLOBAL DEFAULT 11 g_seekable_can_seek + 2009: 0000000000092aa0 196 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_async + 2010: 000000000004f750 268 FUNC GLOBAL DEFAULT 11 g_file_query_filesystem_info + 2011: 0000000000122f8c 176 FUNC GLOBAL DEFAULT 11 g_settings_new_with_path + 2012: 00000000000ccb0c 136 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_stream + 2013: 000000000006f928 352 FUNC GLOBAL DEFAULT 11 g_mount_unmount_finish + 2014: 0000000000070434 156 FUNC GLOBAL DEFAULT 11 g_mount_shadow + 2015: 0000000000052edc 272 FUNC GLOBAL DEFAULT 11 g_file_set_display_name_async + 2016: 000000000010aa84 144 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_symbolic_icon + 2017: 00000000000971a8 124 FUNC GLOBAL DEFAULT 11 g_task_set_priority + 2018: 000000000009cf48 180 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_validation_flags + 2019: 00000000000ddf34 20 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_finish + 2020: 0000000000106a10 112 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_credentials_finish + 2021: 000000000005a08c 132 FUNC GLOBAL DEFAULT 11 g_file_enumerator_set_pending + 2022: 0000000000069bfc 132 FUNC GLOBAL DEFAULT 11 g_input_stream_has_pending + 2023: 00000000000b80f4 164 FUNC GLOBAL DEFAULT 11 g_simple_action_set_enabled + 2024: 000000000009772c 232 FUNC GLOBAL DEFAULT 11 g_task_run_in_thread_sync + 2025: 000000000008ad9c 388 FUNC GLOBAL DEFAULT 11 g_socket_set_multicast_loopback + 2026: 000000000003a5b4 160 FUNC GLOBAL DEFAULT 11 g_app_info_should_show + 2027: 00000000000e25e0 112 FUNC GLOBAL DEFAULT 11 g_dbus_method_info_get_type + 2028: 0000000000105cdc 56 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_credentials_async + 2029: 0000000000101d78 232 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_type + 2030: 000000000005cac0 24 FUNC GLOBAL DEFAULT 11 g_file_info_new + 2031: 0000000000042bc8 272 FUNC GLOBAL DEFAULT 11 g_credentials_set_unix_user + 2032: 00000000000ae450 184 FUNC GLOBAL DEFAULT 11 g_application_get_dbus_object_path + 2033: 000000000008c0f0 160 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_next_finish + 2034: 00000000000d4df0 164 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_path + 2035: 00000000000dd8e4 256 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_set_default_timeout + 2036: 0000000000047118 160 FUNC GLOBAL DEFAULT 11 g_drive_has_media + 2037: 000000000009c6b8 100 FUNC GLOBAL DEFAULT 11 g_tls_certificate_get_issuer + 2038: 00000000000a9d90 108 FUNC GLOBAL DEFAULT 11 g_socket_type_get_type + 2039: 000000000006edd8 364 FUNC GLOBAL DEFAULT 11 g_mount_eject_with_operation + 2040: 000000000010a8ac 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_is_readonly + 2041: 000000000004622c 224 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_int32 + 2042: 000000000009decc 220 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_interaction + 2043: 0000000000083ca4 236 FUNC GLOBAL DEFAULT 11 g_simple_async_result_complete + 2044: 000000000005f18c 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_content_type + 2045: 000000000011dff4 24 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_ref + 2046: 000000000009cba0 372 FUNC GLOBAL DEFAULT 11 g_tls_certificate_is_same + 2047: 00000000000dd524 128 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_connection + 2048: 00000000000a94b4 108 FUNC GLOBAL DEFAULT 11 g_mount_unmount_flags_get_type + 2049: 00000000000688dc 184 FUNC GLOBAL DEFAULT 11 g_initable_init + 2050: 00000000000d5858 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_destination + 2051: 000000000007814c 288 FUNC GLOBAL DEFAULT 11 g_output_stream_splice_finish + 2052: 000000000004aa90 124 FUNC GLOBAL DEFAULT 11 g_emblem_get_icon + 2053: 000000000003ad50 184 FUNC GLOBAL DEFAULT 11 g_app_launch_context_launch_failed + 2054: 000000000005f9ac 260 FUNC GLOBAL DEFAULT 11 g_file_info_set_display_name + 2055: 00000000000604b4 452 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_subtract + 2056: 0000000000082ac0 216 FUNC GLOBAL DEFAULT 11 g_seekable_seek + 2057: 0000000000093be4 168 FUNC GLOBAL DEFAULT 11 g_subprocess_get_stdin_pipe + 2058: 00000000000b3424 144 FUNC GLOBAL DEFAULT 11 g_action_map_get_type + 2059: 00000000000ae508 388 FUNC GLOBAL DEFAULT 11 g_application_register + 2060: 000000000011cc00 24 FUNC GLOBAL DEFAULT 11 g_memory_settings_backend_new + 2061: 000000000006e620 160 FUNC GLOBAL DEFAULT 11 g_loadable_icon_get_type + 2062: 000000000009a3c4 100 FUNC GLOBAL DEFAULT 11 g_themed_icon_new + 2063: 000000000005e5c0 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_uint32 + 2064: 00000000000a5ad4 208 FUNC GLOBAL DEFAULT 11 g_vfs_get_file_for_path + 2065: 0000000000086b3c 12 FUNC GLOBAL DEFAULT 11 g_socket_join_multicast_group_ssm + 2066: 00000000001021d0 8 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_keywords + 2067: 00000000000e77c0 296 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_has_connection + 2068: 0000000000097d60 192 FUNC GLOBAL DEFAULT 11 g_task_run_in_thread + 2069: 000000000006181c 124 FUNC GLOBAL DEFAULT 11 g_file_monitor_is_cancelled + 2070: 00000000000e2810 1168 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_generate_xml + 2071: 00000000000b40e8 160 FUNC GLOBAL DEFAULT 11 g_remote_action_group_get_type + 2072: 0000000000079c04 444 FUNC GLOBAL DEFAULT 11 g_output_stream_splice + 2073: 00000000000e5fb8 124 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_flags + 2074: 00000000000d6338 176 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_error + 2075: 000000000005f2fc 276 FUNC GLOBAL DEFAULT 11 g_file_info_get_modification_time + 2076: 00000000000b99b4 116 FUNC GLOBAL DEFAULT 11 g_menu_freeze + 2077: 00000000000434ec 420 FUNC GLOBAL DEFAULT 11 g_datagram_based_condition_check + 2078: 00000000000684b0 128 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_address + 2079: 000000000005cd0c 324 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_mask + 2080: 00000000000ae0c0 160 FUNC GLOBAL DEFAULT 11 g_application_set_inactivity_timeout + 2081: 000000000010b478 52 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_new + 2082: 00000000000b0c7c 124 FUNC GLOBAL DEFAULT 11 g_application_command_line_set_exit_status + 2083: 000000000008119c 388 FUNC GLOBAL DEFAULT 11 g_resources_enumerate_children + 2084: 0000000000073f74 676 FUNC GLOBAL DEFAULT 11 g_network_address_parse + 2085: 00000000000e0b30 32 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_ref + 2086: 00000000000adec4 128 FUNC GLOBAL DEFAULT 11 g_application_get_resource_base_path + 2087: 00000000000a6efc 292 FUNC GLOBAL DEFAULT 11 g_volume_eject + 2088: 00000000000ba76c 428 FUNC GLOBAL DEFAULT 11 g_menu_item_new_from_model + 2089: 00000000000add74 128 FUNC GLOBAL DEFAULT 11 g_application_get_flags + 2090: 000000000007e3f0 340 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_lookup_async + 2091: 0000000000053ab4 220 FUNC GLOBAL DEFAULT 11 g_file_copy_attributes + 2092: 00000000000be2a8 212 FUNC GLOBAL DEFAULT 11 g_dbus_is_name + 2093: 00000000000be60c 160 FUNC GLOBAL DEFAULT 11 g_dbus_is_guid + 2094: 0000000000094654 236 FUNC GLOBAL DEFAULT 11 g_subprocess_get_term_sig + 2095: 000000000010995c 200 FUNC GLOBAL DEFAULT 11 g_unix_is_system_device_path + 2096: 00000000000b8ad8 28 FUNC GLOBAL DEFAULT 11 g_menu_model_get_item_link + 2097: 0000000000091f78 72 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_new + 2098: 000000000012456c 52 FUNC GLOBAL DEFAULT 11 g_settings_set_boolean + 2099: 0000000000086234 132 FUNC GLOBAL DEFAULT 11 g_socket_get_blocking + 2100: 0000000000080e74 60 FUNC GLOBAL DEFAULT 11 g_resources_register + 2101: 0000000000105d14 56 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_credentials_async + 2102: 0000000000065e88 216 FUNC GLOBAL DEFAULT 11 g_inet_address_new_from_string + 2103: 00000000000446c4 200 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_byte + 2104: 0000000000058cc8 220 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_lookup + 2105: 0000000000123370 304 FUNC GLOBAL DEFAULT 11 g_settings_get_value + 2106: 000000000005f8a8 260 FUNC GLOBAL DEFAULT 11 g_file_info_set_name + 2107: 0000000000089440 112 FUNC GLOBAL DEFAULT 11 g_socket_receive_from + 2108: 00000000000af43c 16 FUNC GLOBAL DEFAULT 11 g_application_get_default + 2109: 0000000000081498 96 FUNC GLOBAL DEFAULT 11 g_static_resource_fini + 2110: 000000000003b314 308 FUNC GLOBAL DEFAULT 11 g_async_initable_init_finish + 2111: 00000000001021ec 364 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_show_in + 2112: 00000000000a7a6c 132 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_volumes + 2113: 00000000000bd1bc 140 FUNC GLOBAL DEFAULT 11 g_notification_set_icon + 2114: 0000000000055dbc 200 FUNC GLOBAL DEFAULT 11 g_file_new_tmp + 2115: 00000000000b89ac 28 FUNC GLOBAL DEFAULT 11 g_menu_model_get_item_attribute_value + 2116: 00000000000836d4 152 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new_take_error + 2117: 0000000000089bb0 344 FUNC GLOBAL DEFAULT 11 g_socket_get_ttl + 2118: 00000000000cfc5c 288 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_finish + 2119: 00000000000a5e88 368 FUNC GLOBAL DEFAULT 11 g_vfs_parse_name + 2120: 00000000000d15c0 452 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unregister_object + 2121: 00000000000b87fc 132 FUNC GLOBAL DEFAULT 11 g_menu_model_get_type + 2122: 000000000003cee0 320 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_fill_finish + 2123: 000000000006c8d4 8 FUNC GLOBAL DEFAULT 11 g_io_extension_get_name + 2124: 00000000000892ac 56 FUNC GLOBAL DEFAULT 11 g_socket_send_message + 2125: 00000000000ba67c 20 FUNC GLOBAL DEFAULT 11 g_menu_prepend_submenu + 2126: 000000000006d880 624 FUNC GLOBAL DEFAULT 11 g_io_stream_splice_async + 2127: 00000000000728e8 156 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_domain + 2128: 000000000007c65c 188 FUNC GLOBAL DEFAULT 11 g_proxy_connect_finish + 2129: 00000000000ed83c 244 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_get_type + 2130: 0000000000094130 4 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_check_async + 2131: 00000000000aae04 108 FUNC GLOBAL DEFAULT 11 g_subprocess_flags_get_type + 2132: 00000000000bd3c0 384 FUNC GLOBAL DEFAULT 11 g_notification_add_button_with_target_value + 2133: 0000000000099304 376 FUNC GLOBAL DEFAULT 11 g_tcp_wrapper_connection_new + 2134: 00000000000981e8 220 FUNC GLOBAL DEFAULT 11 g_task_propagate_boolean + 2135: 0000000000067890 296 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_equal + 2136: 000000000009375c 232 FUNC GLOBAL DEFAULT 11 g_subprocess_get_type + 2137: 00000000000ec324 144 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_name + 2138: 00000000000aabe8 108 FUNC GLOBAL DEFAULT 11 g_tls_certificate_request_flags_get_type + 2139: 0000000000124538 52 FUNC GLOBAL DEFAULT 11 g_settings_get_boolean + 2140: 0000000000107ce0 172 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_get_type + 2141: 0000000000107e48 40 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_new_with_fd_list + 2142: 0000000000062480 120 FUNC GLOBAL DEFAULT 11 g_filename_completer_set_dirs_only + 2143: 0000000000078940 132 FUNC GLOBAL DEFAULT 11 g_output_stream_is_closing + 2144: 000000000011fe7c 84 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_name + 2145: 0000000000072d50 140 FUNC GLOBAL DEFAULT 11 g_mount_operation_reply + 2146: 0000000000089f64 348 FUNC GLOBAL DEFAULT 11 g_socket_get_multicast_ttl + 2147: 00000000000afaa0 408 FUNC GLOBAL DEFAULT 11 g_application_send_notification + 2148: 0000000000046fc0 184 FUNC GLOBAL DEFAULT 11 g_drive_is_removable + 2149: 000000000008e080 104 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_host + 2150: 000000000003a6f0 276 FUNC GLOBAL DEFAULT 11 g_app_info_launch_default_for_uri_async + 2151: 0000000000069b78 132 FUNC GLOBAL DEFAULT 11 g_input_stream_is_closed + 2152: 000000000009d288 136 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_set_use_ssl3 + 2153: 00000000000a844c 64 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_new + 2154: 0000000000087168 436 FUNC GLOBAL DEFAULT 11 g_socket_create_source + 2155: 0000000000070bd4 304 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_get_type + 2156: 0000000000092060 8 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_getenv + 2157: 00000000000748c4 212 FUNC GLOBAL DEFAULT 11 g_network_address_parse_uri + 2158: 00000000000860dc 116 FUNC GLOBAL DEFAULT 11 g_socket_new + 2159: 000000000007326c 128 FUNC GLOBAL DEFAULT 11 g_native_socket_address_new + 2160: 00000000000ba39c 204 FUNC GLOBAL DEFAULT 11 g_menu_item_set_action_and_target + 2161: 00000000000bcab8 448 FUNC GLOBAL DEFAULT 11 g_dbus_menu_model_get + 2162: 000000000007eb3c 160 FUNC GLOBAL DEFAULT 11 g_resolver_get_type + 2163: 000000000006e2ac 216 FUNC GLOBAL DEFAULT 11 g_io_stream_close_finish + 2164: 00000000000d6b28 320 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_unix_fd_list + 2165: 00000000000e7390 192 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_info + 2166: 0000000000103b40 124 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_list_actions + 2167: 000000000007cea4 172 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_type + 2168: 000000000006e850 208 FUNC GLOBAL DEFAULT 11 g_loadable_icon_load_async + 2169: 0000000000103950 208 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_locale_string + 2170: 000000000010394c 4 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_launch_uris_as_manager + 2171: 00000000000983a0 84 FUNC GLOBAL DEFAULT 11 g_task_report_error + 2172: 00000000000647f8 136 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_get_close_base_stream + 2173: 000000000008f270 188 FUNC GLOBAL DEFAULT 11 g_socket_connection_factory_lookup_type + 2174: 00000000000ee1b0 152 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_export + 2175: 0000000000056310 508 FUNC GLOBAL DEFAULT 11 g_file_load_contents + 2176: 00000000000bbaec 4 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unexport_menu_model + 2177: 000000000011f6d4 308 FUNC GLOBAL DEFAULT 11 g_settings_schema_list_keys + 2178: 00000000000e26c0 112 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_get_type + 2179: 00000000000dd7c8 128 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_interface_name + 2180: 00000000000c0134 248 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_stream_finish + 2181: 0000000000105100 432 FUNC GLOBAL DEFAULT 11 g_content_type_get_description + 2182: 000000000008a2dc 416 FUNC GLOBAL DEFAULT 11 g_socket_get_remote_address + 2183: 00000000000e3924 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_method_info + 2184: 000000000010a5a4 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_get_fs_type + 2185: 00000000000e76ec 212 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_connections + 2186: 000000000009fba8 364 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_for_handle_finish + 2187: 000000000007b460 168 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_create_source + 2188: 00000000000bd348 120 FUNC GLOBAL DEFAULT 11 g_notification_set_priority + 2189: 00000000000646dc 164 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_get_type + 2190: 00000000000e0ed0 112 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_unref + 2191: 000000000008e154 104 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_uri + 2192: 00000000000cfd7c 336 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_sync + 2193: 000000000007f4dc 180 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_service_finish + 2194: 000000000004dcb4 300 FUNC GLOBAL DEFAULT 11 g_file_stop_mountable + 2195: 00000000000874b0 564 FUNC GLOBAL DEFAULT 11 g_socket_condition_timed_wait + 2196: 000000000004e24c 160 FUNC GLOBAL DEFAULT 11 g_file_get_uri + 2197: 00000000000e6464 260 FUNC GLOBAL DEFAULT 11 g_dbus_interface_dup_object + 2198: 000000000005d9f8 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_stringv + 2199: 00000000000cd960 456 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message + 2200: 000000000006c8dc 8 FUNC GLOBAL DEFAULT 11 g_io_extension_get_priority + 2201: 000000000006d424 156 FUNC GLOBAL DEFAULT 11 g_io_stream_get_type + 2202: 000000000010ac08 424 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_should_display + 2203: 00000000000e485c 356 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_error + 2204: 000000000005ca34 140 FUNC GLOBAL DEFAULT 11 g_file_info_get_type + 2205: 0000000000064124 164 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_get_type + 2206: 00000000000941f4 120 FUNC GLOBAL DEFAULT 11 g_subprocess_force_exit + 2207: 000000000003a8c0 184 FUNC GLOBAL DEFAULT 11 g_app_info_delete + 2208: 00000000000e8920 540 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_add_interface + 2209: 0000000000082984 156 FUNC GLOBAL DEFAULT 11 g_seekable_tell + 2210: 00000000000ad894 144 FUNC GLOBAL DEFAULT 11 g_application_set_option_context_parameter_string + 2211: 000000000003e640 156 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_new_sized + 2212: 000000000007ab74 156 FUNC GLOBAL DEFAULT 11 g_permission_acquire + 2213: 00000000000a1df0 444 FUNC GLOBAL DEFAULT 11 g_tls_interaction_request_certificate + 2214: 00000000000a0680 548 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificates_issued_by_async + 2215: 0000000000050150 268 FUNC GLOBAL DEFAULT 11 g_file_create + 2216: 00000000000e86f4 104 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_new + 2217: 00000000000a973c 108 FUNC GLOBAL DEFAULT 11 g_filesystem_preview_type_get_type + 2218: 00000000000af6b4 172 FUNC GLOBAL DEFAULT 11 g_application_mark_busy + 2219: 00000000000463ec 224 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_int64 + 2220: 000000000004e06c 160 FUNC GLOBAL DEFAULT 11 g_file_get_uri_scheme + 2221: 00000000000903cc 420 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_address + 2222: 00000000000a03b0 576 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificates_issued_by + 2223: 000000000008d650 20 FUNC GLOBAL DEFAULT 11 g_socket_client_get_proxy_resolver + 2224: 000000000006fa88 292 FUNC GLOBAL DEFAULT 11 g_mount_eject + 2225: 0000000000101ff8 212 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_new_from_filename + 2226: 000000000007e544 28 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_get_default + 2227: 00000000000d5b24 344 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_reply + 2228: 0000000000057838 412 FUNC GLOBAL DEFAULT 11 g_file_load_bytes_finish + 2229: 000000000008b844 232 FUNC GLOBAL DEFAULT 11 g_socket_address_get_type + 2230: 000000000004e4cc 312 FUNC GLOBAL DEFAULT 11 g_file_equal + 2231: 0000000000094c04 368 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_utf8_async + 2232: 0000000000095ab0 24 FUNC GLOBAL DEFAULT 11 g_srv_target_copy + 2233: 000000000003a200 196 FUNC GLOBAL DEFAULT 11 g_app_info_launch + 2234: 0000000000046de0 160 FUNC GLOBAL DEFAULT 11 g_drive_has_volumes + 2235: 0000000000086740 128 FUNC GLOBAL DEFAULT 11 g_socket_get_protocol + 2236: 000000000004443c 128 FUNC GLOBAL DEFAULT 11 g_data_input_stream_get_byte_order + 2237: 000000000011f29c 8 FUNC GLOBAL DEFAULT 11 g_settings_schema_has_key + 2238: 000000000006ce7c 272 FUNC GLOBAL DEFAULT 11 g_io_scheduler_job_send_to_mainloop_async + 2239: 0000000000061898 192 FUNC GLOBAL DEFAULT 11 g_file_monitor_cancel + 2240: 000000000007c584 216 FUNC GLOBAL DEFAULT 11 g_proxy_connect_async + 2241: 000000000009c71c 28 FUNC GLOBAL DEFAULT 11 g_tls_certificate_verify + 2242: 000000000009de0c 192 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_certificate + 2243: 00000000000a8508 204 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_set_file_info + 2244: 0000000000054fb0 56 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_int32 + 2245: 00000000001090b4 168 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_copy + 2246: 00000000000e2570 112 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_get_type + 2247: 0000000000056984 132 FUNC GLOBAL DEFAULT 11 g_file_replace_contents_async + 2248: 00000000000e2e18 584 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_new_for_xml + 2249: 0000000000074a98 128 FUNC GLOBAL DEFAULT 11 g_network_address_get_scheme + 2250: 00000000000840b0 400 FUNC GLOBAL DEFAULT 11 g_simple_async_report_error_in_idle + 2251: 000000000011ead4 112 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_get_type + 2252: 00000000000b91c4 76 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_value + 2253: 000000000005e7b8 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_uint64 + 2254: 000000000007aad8 156 FUNC GLOBAL DEFAULT 11 g_permission_get_type + 2255: 00000000000552c8 352 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable_finish + 2256: 00000000000afc38 216 FUNC GLOBAL DEFAULT 11 g_application_withdraw_notification + 2257: 00000000000b65c8 160 FUNC GLOBAL DEFAULT 11 g_action_get_enabled + 2258: 000000000009bcf8 52 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_server_connection_type + 2259: 00000000000c7764 776 FUNC GLOBAL DEFAULT 11 g_dbus_error_unregister_error + 2260: 0000000000069c80 276 FUNC GLOBAL DEFAULT 11 g_input_stream_set_pending + 2261: 000000000003ae08 140 FUNC GLOBAL DEFAULT 11 g_app_info_monitor_get_type + 2262: 000000000009dc6c 196 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_database + 2263: 000000000005d150 296 FUNC GLOBAL DEFAULT 11 g_file_info_list_attributes + 2264: 0000000000039a7c 248 FUNC GLOBAL DEFAULT 11 g_app_info_set_as_default_for_type + 2265: 0000000000056b24 388 FUNC GLOBAL DEFAULT 11 g_file_measure_disk_usage + 2266: 000000000004ec10 184 FUNC GLOBAL DEFAULT 11 g_file_get_child + 2267: 00000000000ec294 144 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_connection + 2268: 0000000000046c84 160 FUNC GLOBAL DEFAULT 11 g_drive_get_icon + 2269: 0000000000092038 40 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_unsetenv + 2270: 0000000000042cdc 144 FUNC GLOBAL DEFAULT 11 g_datagram_based_get_type + 2271: 00000000000b41d8 80 FUNC GLOBAL DEFAULT 11 g_remote_action_group_change_action_state_full + 2272: 000000000008d524 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_local_address + 2273: 00000000000e37b4 120 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_sender + 2274: 000000000010b4ac 160 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_new_with_type + 2275: 0000000000084398 232 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_check_cancellable + 2276: 00000000000a7484 172 FUNC GLOBAL DEFAULT 11 g_volume_get_activation_root + 2277: 00000000000ae8f0 356 FUNC GLOBAL DEFAULT 11 g_application_open + 2278: 0000000000067588 128 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_family + 2279: 0000000000052770 208 FUNC GLOBAL DEFAULT 11 g_file_delete_async + 2280: 000000000006b054 392 FUNC GLOBAL DEFAULT 11 g_input_stream_read_all_async + 2281: 0000000000045c34 252 FUNC GLOBAL DEFAULT 11 g_data_output_stream_get_type + 2282: 0000000000124e60 440 FUNC GLOBAL DEFAULT 11 g_settings_bind_writable + 2283: 000000000004771c 352 FUNC GLOBAL DEFAULT 11 g_drive_poll_for_media_finish + 2284: 00000000000cc078 268 FUNC GLOBAL DEFAULT 11 g_dbus_connection_close + 2285: 0000000000078b5c 476 FUNC GLOBAL DEFAULT 11 g_output_stream_write_async + 2286: 00000000000a3904 136 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_rehandshake_mode + 2287: 000000000007f6cc 252 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_records_async + 2288: 0000000000086150 56 FUNC GLOBAL DEFAULT 11 g_socket_new_from_fd + 2289: 00000000000e9260 244 FUNC GLOBAL DEFAULT 11 g_dbus_object_proxy_get_type + 2290: 00000000000a9a30 108 FUNC GLOBAL DEFAULT 11 g_io_stream_splice_flags_get_type + 2291: 0000000000103198 452 FUNC GLOBAL DEFAULT 11 g_app_info_get_all + 2292: 00000000000aae70 108 FUNC GLOBAL DEFAULT 11 g_notification_priority_get_type + 2293: 00000000000d9890 460 FUNC GLOBAL DEFAULT 11 g_bus_watch_name_on_connection + 2294: 00000000000a45f4 160 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_type + 2295: 00000000000aa4bc 108 FUNC GLOBAL DEFAULT 11 g_dbus_subtree_flags_get_type + 2296: 000000000008f458 128 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_size + 2297: 00000000000cd8b8 168 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_last_serial + 2298: 00000000000d0ad4 1524 FUNC GLOBAL DEFAULT 11 g_dbus_connection_signal_subscribe + 2299: 00000000000475b0 364 FUNC GLOBAL DEFAULT 11 g_drive_eject_with_operation_finish + 2300: 00000000000a9520 108 FUNC GLOBAL DEFAULT 11 g_drive_start_flags_get_type + 2301: 00000000000a3afc 208 FUNC GLOBAL DEFAULT 11 g_dtls_connection_handshake_async + 2302: 0000000000109f84 740 FUNC GLOBAL DEFAULT 11 g_unix_mount_points_get + 2303: 0000000000072514 124 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_username + 2304: 000000000004e8d0 304 FUNC GLOBAL DEFAULT 11 g_file_has_prefix + 2305: 000000000007b784 156 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_can_poll + 2306: 0000000000086b24 12 FUNC GLOBAL DEFAULT 11 g_socket_join_multicast_group + 2307: 000000000008d178 388 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_async + 2308: 0000000000063a58 300 FUNC GLOBAL DEFAULT 11 g_file_io_stream_query_info_async + 2309: 00000000000e7d98 404 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_unexport_from_connection + 2310: 0000000000067340 72 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_new + 2311: 00000000000b9be8 324 FUNC GLOBAL DEFAULT 11 g_menu_item_set_attribute_value + 2312: 000000000008bee8 160 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_next + 2313: 0000000000051f90 208 FUNC GLOBAL DEFAULT 11 g_file_make_directory_async + 2314: 000000000006f194 160 FUNC GLOBAL DEFAULT 11 g_mount_get_root + 2315: 00000000000ae73c 212 FUNC GLOBAL DEFAULT 11 g_application_release + 2316: 000000000008f5e0 144 FUNC GLOBAL DEFAULT 11 g_socket_control_message_serialize + 2317: 000000000003b89c 100 FUNC GLOBAL DEFAULT 11 g_async_result_legacy_propagate_error + 2318: 000000000007d058 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_uri + 2319: 000000000012439c 52 FUNC GLOBAL DEFAULT 11 g_settings_get_int64 + 2320: 0000000000047968 172 FUNC GLOBAL DEFAULT 11 g_drive_enumerate_identifiers + 2321: 000000000003f4a4 268 FUNC GLOBAL DEFAULT 11 g_cancellable_cancel + 2322: 00000000000a2778 136 FUNC GLOBAL DEFAULT 11 g_tls_password_set_flags + 2323: 00000000000608c8 116 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_enumerate_next + 2324: 00000000000a7530 184 FUNC GLOBAL DEFAULT 11 g_volume_get_sort_key + 2325: 0000000000054f30 36 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_string + 2326: 0000000000053b90 3564 FUNC GLOBAL DEFAULT 11 g_file_copy + 2327: 000000000011fa14 108 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_unref + 2328: 00000000000830dc 180 FUNC GLOBAL DEFAULT 11 g_simple_async_result_propagate_error + 2329: 00000000000aac54 108 FUNC GLOBAL DEFAULT 11 g_io_module_scope_flags_get_type + 2330: 0000000000052fec 288 FUNC GLOBAL DEFAULT 11 g_file_set_display_name_finish + 2331: 00000000000ca34c 276 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_type + 2332: 000000000006d544 76 FUNC GLOBAL DEFAULT 11 g_io_stream_get_input_stream + 2333: 00000000000dd624 128 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_name + 2334: 00000000000a9ed4 108 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_format_get_type + 2335: 00000000000d0944 400 FUNC GLOBAL DEFAULT 11 g_dbus_connection_remove_filter + 2336: 00000000000ee550 160 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_unexport + 2337: 0000000000047078 160 FUNC GLOBAL DEFAULT 11 g_drive_is_media_removable + 2338: 00000000000b40e0 4 FUNC GLOBAL DEFAULT 11 g_simple_action_group_add_entries + 2339: 000000000006daf0 132 FUNC GLOBAL DEFAULT 11 g_io_stream_has_pending + 2340: 000000000009228c 84 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_stderr_file_path + 2341: 00000000000b615c 156 FUNC GLOBAL DEFAULT 11 g_action_get_state + 2342: 00000000000a72ec 236 FUNC GLOBAL DEFAULT 11 g_volume_get_identifier + 2343: 00000000000be9f8 916 FUNC GLOBAL DEFAULT 11 g_dbus_gvalue_to_gvariant + 2344: 00000000000d4278 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_flags + 2345: 000000000007d01c 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_destination_protocol + 2346: 00000000000e31a4 196 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_lookup_signal + 2347: 000000000004d5c8 144 FUNC GLOBAL DEFAULT 11 g_file_get_type + 2348: 000000000007e354 156 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_is_supported + 2349: 000000000009dfa8 196 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_interaction + 2350: 000000000011e00c 24 FUNC GLOBAL DEFAULT 11 g_settings_schema_ref + 2351: 00000000000a4b28 72 FUNC GLOBAL DEFAULT 11 g_dtls_server_connection_new + 2352: 0000000000080eb0 60 FUNC GLOBAL DEFAULT 11 g_resources_unregister + 2353: 0000000000051840 288 FUNC GLOBAL DEFAULT 11 g_file_create_readwrite_finish + 2354: 000000000004ea00 304 FUNC GLOBAL DEFAULT 11 g_file_get_relative_path + 2355: 000000000005368c 408 FUNC GLOBAL DEFAULT 11 g_file_set_attribute + 2356: 000000000009bdcc 160 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_dtls_server_connection_type + 2357: 0000000000092010 40 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_setenv + 2358: 000000000004f8e4 216 FUNC GLOBAL DEFAULT 11 g_file_query_filesystem_info_async + 2359: 0000000000066198 128 FUNC GLOBAL DEFAULT 11 g_inet_address_to_bytes + 2360: 0000000000070144 332 FUNC GLOBAL DEFAULT 11 g_mount_guess_content_type_finish + 2361: 000000000009e684 100 FUNC GLOBAL DEFAULT 11 g_tls_connection_emit_accept_certificate + 2362: 00000000000ba5c8 20 FUNC GLOBAL DEFAULT 11 g_menu_append + 2363: 000000000004b590 128 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_get_emblems + 2364: 00000000000842ec 172 FUNC GLOBAL DEFAULT 11 g_simple_async_report_take_gerror_in_idle + 2365: 00000000000b6744 156 FUNC GLOBAL DEFAULT 11 g_action_name_is_valid + 2366: 0000000000050f2c 216 FUNC GLOBAL DEFAULT 11 g_file_create_async + 2367: 0000000000124404 52 FUNC GLOBAL DEFAULT 11 g_settings_get_uint + 2368: 000000000004eb30 224 FUNC GLOBAL DEFAULT 11 g_file_resolve_relative_path + 2369: 00000000000eefd4 188 FUNC GLOBAL DEFAULT 11 g_test_dbus_add_service_dir + 2370: 0000000000046844 360 FUNC GLOBAL DEFAULT 11 g_drive_eject_with_operation + 2371: 00000000000c022c 520 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_stream_sync + 2372: 00000000000aa7b0 108 FUNC GLOBAL DEFAULT 11 g_tls_error_get_type + 2373: 00000000000ab8c4 332 FUNC GLOBAL DEFAULT 11 g_list_store_insert + 2374: 00000000000a1488 532 FUNC GLOBAL DEFAULT 11 g_tls_interaction_request_certificate_async + 2375: 000000000008d494 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_family + 2376: 00000000000d44f8 188 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_header + 2377: 0000000000081320 328 FUNC GLOBAL DEFAULT 11 g_resources_get_info + 2378: 0000000000072748 128 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_anonymous + 2379: 00000000000abf2c 572 FUNC GLOBAL DEFAULT 11 g_list_store_splice + 2380: 000000000008650c 160 FUNC GLOBAL DEFAULT 11 g_socket_set_timeout + 2381: 00000000000ba2cc 84 FUNC GLOBAL DEFAULT 11 g_menu_item_set_label + 2382: 0000000000039890 160 FUNC GLOBAL DEFAULT 11 g_app_info_get_description + 2383: 00000000000a37c8 136 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_require_close_notify + 2384: 00000000000a9958 108 FUNC GLOBAL DEFAULT 11 g_mount_operation_result_get_type + 2385: 00000000000a6ad4 160 FUNC GLOBAL DEFAULT 11 g_volume_get_mount + 2386: 0000000000108f54 96 FUNC GLOBAL DEFAULT 11 g_unix_mount_free + 2387: 0000000000074c14 160 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_type + 2388: 00000000000e45ac 208 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_gerror + 2389: 0000000000060d3c 252 FUNC GLOBAL DEFAULT 11 g_file_input_stream_get_type + 2390: 00000000000ba630 76 FUNC GLOBAL DEFAULT 11 g_menu_insert_submenu + 2391: 000000000008400c 164 FUNC GLOBAL DEFAULT 11 g_simple_async_result_is_valid + 2392: 00000000000922e0 84 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_stderr_fd + 2393: 0000000000097444 124 FUNC GLOBAL DEFAULT 11 g_task_get_priority + 2394: 000000000005a190 552 FUNC GLOBAL DEFAULT 11 g_file_enumerator_iterate + 2395: 000000000003eac0 276 FUNC GLOBAL DEFAULT 11 g_bytes_icon_get_type + 2396: 000000000004f470 212 FUNC GLOBAL DEFAULT 11 g_file_query_file_type + 2397: 00000000000884f0 28 FUNC GLOBAL DEFAULT 11 g_socket_receive + 2398: 0000000000066bc8 316 FUNC GLOBAL DEFAULT 11 g_inet_address_equal + 2399: 000000000006b2a0 32 FUNC GLOBAL DEFAULT 11 g_io_error_from_errno + 2400: 00000000000abb90 224 FUNC GLOBAL DEFAULT 11 g_list_store_sort + 2401: 00000000000a662c 364 FUNC GLOBAL DEFAULT 11 g_volume_eject_with_operation + 2402: 00000000000ba690 20 FUNC GLOBAL DEFAULT 11 g_menu_append_submenu + 2403: 000000000006724c 244 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_type + 2404: 000000000007eee0 84 FUNC GLOBAL DEFAULT 11 g_resolver_set_default + 2405: 000000000003b1b4 144 FUNC GLOBAL DEFAULT 11 g_async_initable_get_type + 2406: 00000000000e9670 216 FUNC GLOBAL DEFAULT 11 g_dbus_object_proxy_new + 2407: 000000000007e214 172 FUNC GLOBAL DEFAULT 11 g_proxy_address_enumerator_get_type + 2408: 000000000011def4 44 FUNC GLOBAL DEFAULT 11 g_settings_backend_get_default + 2409: 00000000000807e4 300 FUNC GLOBAL DEFAULT 11 g_resource_new_from_data + 2410: 00000000000a63d0 144 FUNC GLOBAL DEFAULT 11 g_volume_get_type + 2411: 000000000004b24c 244 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_get_type + 2412: 00000000000a3318 220 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_certificate + 2413: 0000000000054f54 36 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_byte_string + 2414: 00000000000982c4 220 FUNC GLOBAL DEFAULT 11 g_task_return_error + 2415: 0000000000045230 120 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_finish_utf8 + 2416: 0000000000095974 24 FUNC GLOBAL DEFAULT 11 g_socket_service_new + 2417: 00000000000e6568 248 FUNC GLOBAL DEFAULT 11 g_dbus_interface_set_object + 2418: 00000000000e7c54 324 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_unexport + 2419: 00000000001255d4 100 FUNC GLOBAL DEFAULT 11 g_settings_bind + 2420: 00000000000a4490 100 FUNC GLOBAL DEFAULT 11 g_dtls_connection_emit_accept_certificate + 2421: 00000000000e6298 144 FUNC GLOBAL DEFAULT 11 g_dbus_interface_get_type + 2422: 00000000000a3714 180 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_peer_certificate_errors + 2423: 000000000008daa8 1496 FUNC GLOBAL DEFAULT 11 g_socket_client_connect + 2424: 00000000000a2d90 72 FUNC GLOBAL DEFAULT 11 g_tls_server_connection_new + 2425: 000000000003b760 156 FUNC GLOBAL DEFAULT 11 g_async_result_get_user_data + 2426: 000000000006c1b4 172 FUNC GLOBAL DEFAULT 11 g_io_extension_point_get_extension_by_name + 2427: 000000000005fef0 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_size + 2428: 0000000000083190 156 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_op_res_gpointer + 2429: 000000000006b7ac 148 FUNC GLOBAL DEFAULT 11 g_io_module_get_type + 2430: 00000000000ef138 72 FUNC GLOBAL DEFAULT 11 g_test_dbus_unset + 2431: 00000000000bcde8 140 FUNC GLOBAL DEFAULT 11 g_notification_get_type + 2432: 00000000000a5a54 128 FUNC GLOBAL DEFAULT 11 g_vfs_is_active + 2433: 00000000000a9fac 108 FUNC GLOBAL DEFAULT 11 g_bus_type_get_type + 2434: 000000000010b554 8 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_path + 2435: 00000000000c7c1c 752 FUNC GLOBAL DEFAULT 11 g_dbus_error_new_for_dbus_error + 2436: 00000000000dcb9c 408 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_set_cached_property + 2437: 00000000000402ac 8 FUNC GLOBAL DEFAULT 11 g_charset_converter_get_use_fallback + 2438: 000000000008648c 128 FUNC GLOBAL DEFAULT 11 g_socket_get_timeout + 2439: 000000000006ba98 756 FUNC GLOBAL DEFAULT 11 g_io_modules_scan_all_in_directory_with_scope + 2440: 0000000000098f98 16 FUNC GLOBAL DEFAULT 11 g_tcp_connection_get_graceful_disconnect + 2441: 000000000006aa14 344 FUNC GLOBAL DEFAULT 11 g_input_stream_skip + 2442: 00000000000e467c 220 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_error_literal + 2443: 0000000000098068 212 FUNC GLOBAL DEFAULT 11 g_task_propagate_int + 2444: 00000000000cfecc 208 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_for_address + 2445: 000000000008d580 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_timeout + 2446: 00000000000b8af4 36 FUNC GLOBAL DEFAULT 11 g_menu_model_items_changed + 2447: 00000000001245a0 56 FUNC GLOBAL DEFAULT 11 g_settings_get_strv + 2448: 00000000001239f4 380 FUNC GLOBAL DEFAULT 11 g_settings_get_flags + 2449: 00000000000e27a0 112 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_get_type + 2450: 00000000000480e0 184 FUNC GLOBAL DEFAULT 11 g_drive_get_sort_key + 2451: 000000000003a654 156 FUNC GLOBAL DEFAULT 11 g_app_info_launch_default_for_uri + 2452: 00000000000bc760 148 FUNC GLOBAL DEFAULT 11 g_dbus_menu_model_get_type + 2453: 0000000000055fd4 84 FUNC GLOBAL DEFAULT 11 g_file_new_for_commandline_arg + 2454: 00000000000b0b18 356 FUNC GLOBAL DEFAULT 11 g_application_command_line_printerr + 2455: 00000000000b8b18 156 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_type + 2456: 0000000000067688 128 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_length + 2457: 00000000000cff9c 288 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_for_address_finish + 2458: 0000000000050a40 264 FUNC GLOBAL DEFAULT 11 g_file_load_partial_contents_async + 2459: 00000000000a9f40 108 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_type_get_type + 2460: 0000000000075ce0 236 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_remove_network + 2461: 00000000000d2674 160 FUNC GLOBAL DEFAULT 11 g_bus_get_finish + 2462: 00000000000afd10 568 FUNC GLOBAL DEFAULT 11 g_application_bind_busy_property + 2463: 000000000006b9c4 212 FUNC GLOBAL DEFAULT 11 g_io_extension_point_register + 2464: 0000000000102370 4 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_set_desktop_env + 2465: 000000000005f410 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_symlink_target + 2466: 0000000000071ce0 212 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_steal_as_bytes + 2467: 000000000006b8b0 268 FUNC GLOBAL DEFAULT 11 g_io_modules_load_all_in_directory_with_scope + 2468: 00000000000a6b74 184 FUNC GLOBAL DEFAULT 11 g_volume_can_mount + 2469: 000000000006c150 8 FUNC GLOBAL DEFAULT 11 g_io_extension_point_get_required_type + 2470: 0000000000055020 56 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_int64 + 2471: 000000000009d3c8 308 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_copy_session_state + 2472: 000000000008baf4 180 FUNC GLOBAL DEFAULT 11 g_socket_address_to_native + 2473: 00000000000a9b08 108 FUNC GLOBAL DEFAULT 11 g_resolver_error_get_type + 2474: 000000000003ef78 108 FUNC GLOBAL DEFAULT 11 g_cancellable_push_current + 2475: 00000000000b8cf8 228 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_next + 2476: 00000000000974c0 124 FUNC GLOBAL DEFAULT 11 g_task_get_context + 2477: 00000000000b9df8 324 FUNC GLOBAL DEFAULT 11 g_menu_item_set_link + 2478: 0000000000097fbc 172 FUNC GLOBAL DEFAULT 11 g_task_return_int + 2479: 00000000000d1c88 64 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_sync + 2480: 00000000000eee14 128 FUNC GLOBAL DEFAULT 11 g_test_dbus_get_flags + 2481: 000000000009e12c 180 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_peer_certificate_errors + 2482: 000000000003a978 156 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_type + 2483: 000000000008059c 112 FUNC GLOBAL DEFAULT 11 g_resource_get_type + 2484: 000000000003ac44 268 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_startup_notify_id + 2485: 0000000000066970 168 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_site_local + 2486: 0000000000051004 288 FUNC GLOBAL DEFAULT 11 g_file_create_finish + 2487: 0000000000046be4 160 FUNC GLOBAL DEFAULT 11 g_drive_get_name + 2488: 00000000000e70e4 128 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_flags + 2489: 00000000000ebee4 424 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_for_bus_sync + 2490: 0000000000090b8c 248 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_socket_finish + 2491: 0000000000060678 164 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_matches_only + 2492: 000000000008018c 76 FUNC GLOBAL DEFAULT 11 g_resource_unref + 2493: 0000000000041584 252 FUNC GLOBAL DEFAULT 11 g_converter_input_stream_get_type + 2494: 00000000000e5ec0 124 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_client_address + 2495: 000000000012013c 308 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_range_check + 2496: 000000000006231c 356 FUNC GLOBAL DEFAULT 11 g_filename_completer_get_completions + 2497: 00000000000a18a8 412 FUNC GLOBAL DEFAULT 11 g_tls_interaction_ask_password + 2498: 000000000010625c 444 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_credentials + 2499: 000000000006c260 388 FUNC GLOBAL DEFAULT 11 g_io_extension_point_implement + 2500: 000000000007b6e4 160 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_get_type + 2501: 00000000000dd5a4 128 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_flags + 2502: 00000000000a6d9c 352 FUNC GLOBAL DEFAULT 11 g_volume_mount_finish + 2503: 00000000000a34b4 220 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_interaction + 2504: 00000000000634a4 252 FUNC GLOBAL DEFAULT 11 g_file_io_stream_get_type + 2505: 000000000008bba8 500 FUNC GLOBAL DEFAULT 11 g_socket_address_new_from_native + 2506: 000000000008a0c0 148 FUNC GLOBAL DEFAULT 11 g_socket_speaks_ipv4 + 2507: 000000000006e454 116 FUNC GLOBAL DEFAULT 11 g_io_stream_splice_finish + 2508: 000000000006b668 56 FUNC GLOBAL DEFAULT 11 g_io_module_scope_free + 2509: 000000000007a058 340 FUNC GLOBAL DEFAULT 11 g_output_stream_flush_async + 2510: 0000000000095a50 96 FUNC GLOBAL DEFAULT 11 g_srv_target_new + 2511: 00000000000be4a0 156 FUNC GLOBAL DEFAULT 11 g_dbus_is_interface_name + 2512: 00000000000d4710 272 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_header_fields + 2513: 0000000000094f38 528 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_utf8 + 2514: 00000000000b765c 268 FUNC GLOBAL DEFAULT 11 g_property_action_new + 2515: 00000000000cca08 260 FUNC GLOBAL DEFAULT 11 g_bus_get + 2516: 00000000000ba468 168 FUNC GLOBAL DEFAULT 11 g_menu_item_set_detailed_action + 2517: 00000000000a9be0 108 FUNC GLOBAL DEFAULT 11 g_resource_error_get_type + 2518: 0000000000068994 180 FUNC GLOBAL DEFAULT 11 g_initable_newv + 2519: 00000000000d6c68 428 FUNC GLOBAL DEFAULT 11 g_dbus_message_to_gerror + 2520: 00000000000d07bc 392 FUNC GLOBAL DEFAULT 11 g_dbus_connection_add_filter + 2521: 000000000006e140 288 FUNC GLOBAL DEFAULT 11 g_io_stream_close + 2522: 0000000000064fcc 880 FUNC GLOBAL DEFAULT 11 g_icon_new_for_string + 2523: 00000000000e332c 444 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_cache_build + 2524: 00000000000d8714 164 FUNC GLOBAL DEFAULT 11 g_bus_own_name_with_closures + 2525: 00000000000666d0 168 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_global + 2526: 000000000010977c 112 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_type + 2527: 00000000000399d0 172 FUNC GLOBAL DEFAULT 11 g_app_info_get_commandline + 2528: 0000000000062e7c 292 FUNC GLOBAL DEFAULT 11 g_file_output_stream_query_info + 2529: 00000000000a93dc 108 FUNC GLOBAL DEFAULT 11 g_file_measure_flags_get_type + 2530: 00000000000d01d0 172 FUNC GLOBAL DEFAULT 11 g_dbus_connection_set_exit_on_close + 2531: 00000000000975b8 124 FUNC GLOBAL DEFAULT 11 g_task_get_check_cancellable + 2532: 00000000000dd748 128 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_object_path + 2533: 000000000005e6bc 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_int32 + 2534: 0000000000072460 156 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_type + 2535: 000000000003ec38 124 FUNC GLOBAL DEFAULT 11 g_bytes_icon_get_bytes + 2536: 0000000000109e6c 144 FUNC GLOBAL DEFAULT 11 g_unix_mount_at + 2537: 000000000008c044 172 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_next_async + 2538: 000000000003aa14 24 FUNC GLOBAL DEFAULT 11 g_app_launch_context_new + 2539: 00000000000b08d4 12 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_cwd + 2540: 00000000000556b8 352 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable_finish + 2541: 00000000000af0a8 916 FUNC GLOBAL DEFAULT 11 g_application_run + 2542: 0000000000064b30 156 FUNC GLOBAL DEFAULT 11 g_icon_hash + 2543: 000000000008d620 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_tls_validation_flags + 2544: 00000000000a3a40 188 FUNC GLOBAL DEFAULT 11 g_dtls_connection_handshake + 2545: 000000000005d04c 260 FUNC GLOBAL DEFAULT 11 g_file_info_has_namespace + 2546: 0000000000090c84 4 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_async + 2547: 00000000000a169c 524 FUNC GLOBAL DEFAULT 11 g_tls_interaction_invoke_ask_password + 2548: 0000000000105d4c 168 FUNC GLOBAL DEFAULT 11 g_unix_connection_get_type + 2549: 000000000007f020 276 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_address + 2550: 000000000010d378 304 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_get_type + 2551: 00000000000630e0 192 FUNC GLOBAL DEFAULT 11 g_file_output_stream_get_etag + 2552: 00000000000abe70 188 FUNC GLOBAL DEFAULT 11 g_list_store_remove_all + 2553: 000000000010a378 4 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_new + 2554: 0000000000094d74 452 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_utf8_finish + 2555: 000000000003cc6c 140 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_new + 2556: 000000000006ef44 300 FUNC GLOBAL DEFAULT 11 g_mount_remount + 2557: 000000000008f184 236 FUNC GLOBAL DEFAULT 11 g_socket_connection_factory_register_type + 2558: 00000000000b8ddc 12 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_next + 2559: 0000000000105944 244 FUNC GLOBAL DEFAULT 11 g_content_types_get_registered + 2560: 00000000000cfb44 280 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new + 2561: 00000000000af634 128 FUNC GLOBAL DEFAULT 11 g_application_quit + 2562: 00000000000a9010 108 FUNC GLOBAL DEFAULT 11 g_converter_flags_get_type + 2563: 000000000010b55c 12 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_path_len + 2564: 000000000009d1d0 184 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_use_ssl3 + 2565: 0000000000076614 244 FUNC GLOBAL DEFAULT 11 g_network_service_get_type + 2566: 00000000001234a0 268 FUNC GLOBAL DEFAULT 11 g_settings_get_user_value + 2567: 000000000005e398 256 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_byte_string + 2568: 0000000000046e80 160 FUNC GLOBAL DEFAULT 11 g_drive_get_volumes + 2569: 000000000004e7d8 248 FUNC GLOBAL DEFAULT 11 g_file_get_child_for_display_name + 2570: 0000000000122a80 156 FUNC GLOBAL DEFAULT 11 g_settings_get_type + 2571: 0000000000072e6c 148 FUNC GLOBAL DEFAULT 11 g_native_volume_monitor_get_type + 2572: 00000000000cbfb8 192 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flush + 2573: 00000000000b9b18 208 FUNC GLOBAL DEFAULT 11 g_menu_remove_all + 2574: 00000000000a9cb8 108 FUNC GLOBAL DEFAULT 11 g_resource_lookup_flags_get_type + 2575: 0000000000093924 140 FUNC GLOBAL DEFAULT 11 g_subprocess_newv + 2576: 000000000009be6c 176 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_file_database_type + 2577: 00000000000a5d10 376 FUNC GLOBAL DEFAULT 11 g_vfs_get_supported_uri_schemes + 2578: 00000000000aacc0 108 FUNC GLOBAL DEFAULT 11 g_socket_client_event_get_type + 2579: 0000000000050b48 288 FUNC GLOBAL DEFAULT 11 g_file_read_finish + 2580: 000000000010dfbc 304 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_get_type + 2581: 00000000000d04f0 136 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_unique_name + 2582: 0000000000124634 236 FUNC GLOBAL DEFAULT 11 g_settings_delay + 2583: 000000000005e4c4 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_boolean + 2584: 00000000000619a4 392 FUNC GLOBAL DEFAULT 11 g_file_monitor_emit_event + 2585: 000000000004171c 12 FUNC GLOBAL DEFAULT 11 g_converter_input_stream_get_converter + 2586: 00000000000a79ec 128 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_connected_drives + 2587: 0000000000099aa0 44 FUNC GLOBAL DEFAULT 11 g_threaded_socket_service_new + 2588: 000000000006b614 84 FUNC GLOBAL DEFAULT 11 g_io_module_scope_new + 2589: 0000000000046ab8 300 FUNC GLOBAL DEFAULT 11 g_drive_start + 2590: 00000000000e9ca0 56 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_objects + 2591: 0000000000083584 152 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new_from_error + 2592: 00000000000983f4 232 FUNC GLOBAL DEFAULT 11 g_task_report_new_error + 2593: 000000000009213c 84 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_stdin_file_path + 2594: 000000000007af48 128 FUNC GLOBAL DEFAULT 11 g_permission_get_allowed + 2595: 0000000000103a20 144 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_boolean + 2596: 0000000000072868 128 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_domain + 2597: 0000000000079738 500 FUNC GLOBAL DEFAULT 11 g_output_stream_vprintf + 2598: 00000000000b23e0 144 FUNC GLOBAL DEFAULT 11 g_action_group_get_type + 2599: 00000000000bd634 208 FUNC GLOBAL DEFAULT 11 g_notification_add_button_with_target + 2600: 0000000000055acc 224 FUNC GLOBAL DEFAULT 11 g_file_monitor_file + 2601: 00000000000a23d4 156 FUNC GLOBAL DEFAULT 11 g_tls_password_get_type + 2602: 0000000000039930 160 FUNC GLOBAL DEFAULT 11 g_app_info_get_executable + 2603: 00000000001c3e98 0 NOTYPE GLOBAL DEFAULT 27 __end__ + 2604: 000000000006b9bc 8 FUNC GLOBAL DEFAULT 11 g_io_modules_load_all_in_directory + 2605: 000000000003b5cc 200 FUNC GLOBAL DEFAULT 11 g_async_initable_new_async + 2606: 00000000000e59c4 232 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_type + 2607: 000000000008e228 108 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_finish + 2608: 0000000000105550 8 FUNC GLOBAL DEFAULT 11 g_content_type_get_icon + 2609: 0000000000066234 128 FUNC GLOBAL DEFAULT 11 g_inet_address_get_family + 2610: 000000000007f5c8 260 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_records + 2611: 000000000008633c 128 FUNC GLOBAL DEFAULT 11 g_socket_get_listen_backlog + 2612: 0000000000039690 160 FUNC GLOBAL DEFAULT 11 g_app_info_get_id + 2613: 0000000000125638 48 FUNC GLOBAL DEFAULT 11 g_settings_unbind + 2614: 00000000000ae040 128 FUNC GLOBAL DEFAULT 11 g_application_get_inactivity_timeout + 2615: 000000000010e1e0 176 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_set_close_fd + 2616: 00000000000e8360 244 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_get_type + 2617: 0000000000064780 120 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_get_base_stream + 2618: 0000000000096600 244 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_get_type + 2619: 000000000003f3b8 236 FUNC GLOBAL DEFAULT 11 g_cancellable_release_fd + 2620: 0000000000105560 132 FUNC GLOBAL DEFAULT 11 g_content_type_can_be_executable + 2621: 00000000000a3bcc 188 FUNC GLOBAL DEFAULT 11 g_dtls_connection_handshake_finish + 2622: 000000000008e0e8 108 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_service + 2623: 0000000000072590 156 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_username + 2624: 00000000000b8e80 156 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_type + 2625: 00000000000ccc50 132 FUNC GLOBAL DEFAULT 11 g_dbus_connection_is_closed + 2626: 0000000000061990 20 FUNC GLOBAL DEFAULT 11 g_file_monitor_set_rate_limit + 2627: 00000000000848d0 148 FUNC GLOBAL DEFAULT 11 g_simple_permission_get_type + 2628: 000000000011d594 156 FUNC GLOBAL DEFAULT 11 g_settings_backend_get_type + 2629: 00000000000a604c 64 FUNC GLOBAL DEFAULT 11 g_vfs_get_default + 2630: 00000000000660b8 224 FUNC GLOBAL DEFAULT 11 g_inet_address_to_string + 2631: 00000000000814f8 36 FUNC GLOBAL DEFAULT 11 g_static_resource_get_resource + 2632: 000000000004deec 160 FUNC GLOBAL DEFAULT 11 g_file_is_native + 2633: 00000000000e8d38 348 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_remove_interface_by_name + 2634: 000000000010d528 116 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_new + 2635: 0000000000040a1c 152 FUNC GLOBAL DEFAULT 11 g_converter_reset + 2636: 00000000000b9060 268 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_next + 2637: 00000000000ae68c 176 FUNC GLOBAL DEFAULT 11 g_application_hold + 2638: 000000000003ef60 24 FUNC GLOBAL DEFAULT 11 g_cancellable_new + 2639: 000000000011cde4 24 FUNC GLOBAL DEFAULT 11 g_null_settings_backend_new + 2640: 0000000000076754 124 FUNC GLOBAL DEFAULT 11 g_network_service_get_service + 2641: 000000000005f580 184 FUNC GLOBAL DEFAULT 11 g_file_info_get_sort_order + 2642: 00000000000973c8 124 FUNC GLOBAL DEFAULT 11 g_task_get_task_data + 2643: 00000000000d43d0 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_serial + 2644: 000000000007038c 168 FUNC GLOBAL DEFAULT 11 g_mount_is_shadowed + 2645: 00000000000ddf7c 4 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_with_unix_fd_list_finish + 2646: 000000000004f210 432 FUNC GLOBAL DEFAULT 11 g_file_peek_path + 2647: 0000000000083334 124 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_op_res_gssize + 2648: 0000000000097c0c 340 FUNC GLOBAL DEFAULT 11 g_task_set_return_on_cancel + 2649: 00000000000aa81c 108 FUNC GLOBAL DEFAULT 11 g_tls_certificate_flags_get_type + 2650: 0000000000057694 420 FUNC GLOBAL DEFAULT 11 g_file_load_bytes_async + 2651: 00000000000828f4 144 FUNC GLOBAL DEFAULT 11 g_seekable_get_type + 2652: 0000000000055edc 248 FUNC GLOBAL DEFAULT 11 g_file_new_build_filename + 2653: 0000000000093fc8 292 FUNC GLOBAL DEFAULT 11 g_subprocess_wait + 2654: 00000000000eddec 356 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_set_connection + 2655: 000000000009e268 180 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_require_close_notify + 2656: 0000000000044264 172 FUNC GLOBAL DEFAULT 11 g_data_input_stream_get_type + 2657: 000000000005e984 240 FUNC GLOBAL DEFAULT 11 g_file_info_get_deletion_date + 2658: 00000000000e30e0 196 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_lookup_method + 2659: 0000000000084964 64 FUNC GLOBAL DEFAULT 11 g_simple_permission_new + 2660: 0000000000065784 236 FUNC GLOBAL DEFAULT 11 g_icon_serialize + 2661: 00000000000a4790 136 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_set_validation_flags + 2662: 000000000006f6c4 160 FUNC GLOBAL DEFAULT 11 g_mount_can_unmount + 2663: 0000000000089370 152 FUNC GLOBAL DEFAULT 11 g_socket_receive_messages + 2664: 000000000007b9e8 440 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_write_nonblocking + 2665: 0000000000090df8 212 FUNC GLOBAL DEFAULT 11 g_socket_listener_close + 2666: 000000000005ce50 136 FUNC GLOBAL DEFAULT 11 g_file_info_unset_attribute_mask + 2667: 00000000000d5c7c 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_error_name + 2668: 00000000000d4820 124 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_body + 2669: 00000000000e49c0 176 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_take_error + 2670: 00000000000b3fe8 124 FUNC GLOBAL DEFAULT 11 g_simple_action_group_insert + 2671: 0000000000124de0 128 FUNC GLOBAL DEFAULT 11 g_settings_range_check + 2672: 00000000000a3254 196 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_database + 2673: 00000000000a958c 108 FUNC GLOBAL DEFAULT 11 g_drive_start_stop_type_get_type + 2674: 00000000000987bc 104 FUNC GLOBAL DEFAULT 11 g_task_is_valid + 2675: 000000000008d0dc 156 FUNC GLOBAL DEFAULT 11 g_socket_client_get_type + 2676: 00000000000d1238 904 FUNC GLOBAL DEFAULT 11 g_dbus_connection_register_object + 2677: 000000000011d8c8 208 FUNC GLOBAL DEFAULT 11 g_settings_backend_path_changed + 2678: 0000000000051768 216 FUNC GLOBAL DEFAULT 11 g_file_create_readwrite_async + 2679: 000000000004241c 12 FUNC GLOBAL DEFAULT 11 g_converter_output_stream_get_converter + 2680: 000000000009b9b4 148 FUNC GLOBAL DEFAULT 11 g_threaded_resolver_get_type + 2681: 000000000004db88 300 FUNC GLOBAL DEFAULT 11 g_file_start_mountable + 2682: 00000000000429c8 72 FUNC GLOBAL DEFAULT 11 g_credentials_set_native + 2683: 000000000005e26c 256 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_string + 2684: 00000000000b0dfc 136 FUNC GLOBAL DEFAULT 11 g_application_command_line_create_file_for_arg + 2685: 000000000006971c 240 FUNC GLOBAL DEFAULT 11 g_input_stream_read_all_finish + 2686: 00000000000c7a6c 92 FUNC GLOBAL DEFAULT 11 g_dbus_error_is_remote_error + 2687: 0000000000090b54 56 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept + 2688: 00000000000dd9e4 156 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_interface_info + 2689: 0000000000054cb8 336 FUNC GLOBAL DEFAULT 11 g_file_set_attributes_async + 2690: 00000000000ad640 416 FUNC GLOBAL DEFAULT 11 g_application_add_main_option + 2691: 000000000006f428 188 FUNC GLOBAL DEFAULT 11 g_mount_get_symbolic_icon + 2692: 00000000000aa450 108 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_flags_get_type + 2693: 00000000000394c4 156 FUNC GLOBAL DEFAULT 11 g_app_info_dup + 2694: 000000000008ab24 376 FUNC GLOBAL DEFAULT 11 g_socket_set_ttl + 2695: 0000000000059f84 132 FUNC GLOBAL DEFAULT 11 g_file_enumerator_is_closed + 2696: 000000000010e16c 116 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_new + 2697: 00000000000a08a4 364 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificates_issued_by_finish + 2698: 000000000009fd14 616 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_issuer + 2699: 00000000000b08b8 28 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_stdin + 2700: 00000000000890a4 520 FUNC GLOBAL DEFAULT 11 g_socket_accept + 2701: 000000000005ffc0 292 FUNC GLOBAL DEFAULT 11 g_file_info_set_modification_time + 2702: 000000000004da5c 300 FUNC GLOBAL DEFAULT 11 g_file_mount_enclosing_volume + 2703: 000000000005f638 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_file_type + 2704: 00000000001240c4 516 FUNC GLOBAL DEFAULT 11 g_settings_get_mapped + 2705: 00000000001235ac 304 FUNC GLOBAL DEFAULT 11 g_settings_get_default_value + 2706: 00000000000e1120 152 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_unref + 2707: 000000000009e3a4 180 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_rehandshake_mode + 2708: 00000000000ab318 168 FUNC GLOBAL DEFAULT 11 g_list_model_items_changed + 2709: 00000000000833b0 152 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_op_res_gboolean + 2710: 00000000000641c8 120 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_get_base_stream + 2711: 000000000008e2a0 48 FUNC GLOBAL DEFAULT 11 g_socket_client_add_application_proxy + 2712: 000000000010756c 224 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_steal_fds + 2713: 0000000000046d24 188 FUNC GLOBAL DEFAULT 11 g_drive_get_symbolic_icon + 2714: 0000000000103d08 616 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_launch_action + 2715: 000000000003d2bc 160 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_peek_buffer + 2716: 000000000009cffc 136 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_set_validation_flags + 2717: 00000000000aa1c8 108 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flags_get_type + 2718: 0000000000092068 56 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_cwd + 2719: 00000000000a9e68 108 FUNC GLOBAL DEFAULT 11 g_socket_protocol_get_type + 2720: 00000000000addf4 208 FUNC GLOBAL DEFAULT 11 g_application_set_flags + 2721: 00000000000601e8 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_sort_order + 2722: 00000000000a9a9c 108 FUNC GLOBAL DEFAULT 11 g_emblem_origin_get_type + 2723: 00000000000ba510 88 FUNC GLOBAL DEFAULT 11 g_menu_item_new + 2724: 0000000000044f60 272 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_async + 2725: 0000000000095738 172 FUNC GLOBAL DEFAULT 11 g_socket_service_get_type + 2726: 000000000006121c 292 FUNC GLOBAL DEFAULT 11 g_file_input_stream_query_info + 2727: 00000000000e34e8 236 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_cache_release + 2728: 00000000000e9bd8 144 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_type + 2729: 00000000000e6034 124 FUNC GLOBAL DEFAULT 11 g_dbus_server_is_active + 2730: 00000000000d8584 400 FUNC GLOBAL DEFAULT 11 g_bus_own_name + 2731: 00000000000d5990 404 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_call + 2732: 00000000000727c8 160 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_anonymous + 2733: 000000000004f9bc 288 FUNC GLOBAL DEFAULT 11 g_file_query_filesystem_info_finish + 2734: 000000000010a2b8 140 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_get_type + 2735: 0000000000101fa8 80 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_new_from_keyfile + 2736: 00000000000a99c4 108 FUNC GLOBAL DEFAULT 11 g_output_stream_splice_flags_get_type + 2737: 00000000000e2730 112 FUNC GLOBAL DEFAULT 11 g_dbus_arg_info_get_type + 2738: 00000000000a922c 108 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_flags_get_type + 2739: 000000000008e1bc 108 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_service_async + 2740: 00000000000999f4 172 FUNC GLOBAL DEFAULT 11 g_threaded_socket_service_get_type + 2741: 00000000000a33f4 192 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_certificate + 2742: 0000000000059af8 428 FUNC GLOBAL DEFAULT 11 g_file_enumerator_close + 2743: 000000000006c158 92 FUNC GLOBAL DEFAULT 11 g_io_extension_point_get_extensions + 2744: 000000000005e8b4 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_int64 + 2745: 000000000008a8ec 272 FUNC GLOBAL DEFAULT 11 g_socket_set_option + 2746: 000000000006e778 216 FUNC GLOBAL DEFAULT 11 g_loadable_icon_load + 2747: 000000000004e38c 160 FUNC GLOBAL DEFAULT 11 g_file_dup + 2748: 0000000000123d0c 468 FUNC GLOBAL DEFAULT 11 g_settings_set_value + 2749: 00000000000b3574 604 FUNC GLOBAL DEFAULT 11 g_action_map_add_action_entries + 2750: 00000000001021e0 12 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_nodisplay + 2751: 000000000007d040 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_username + 2752: 000000000005fdec 260 FUNC GLOBAL DEFAULT 11 g_file_info_set_content_type + 2753: 0000000000124750 148 FUNC GLOBAL DEFAULT 11 g_settings_get_has_unapplied + 2754: 00000000000ba918 280 FUNC GLOBAL DEFAULT 11 g_menu_item_set_icon + 2755: 0000000000066460 196 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_link_local + 2756: 00000000000cec34 476 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message_with_reply + 2757: 00000000000dc8d4 352 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_cached_property_names + 2758: 00000000000b6528 160 FUNC GLOBAL DEFAULT 11 g_action_get_state_hint + 2759: 000000000003f6d4 164 FUNC GLOBAL DEFAULT 11 g_cancellable_disconnect + 2760: 000000000009c570 328 FUNC GLOBAL DEFAULT 11 g_tls_certificate_list_new_from_file + 2761: 000000000012053c 104 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_default_value + 2762: 00000000000d6e14 1560 FUNC GLOBAL DEFAULT 11 g_dbus_message_print + 2763: 0000000000076708 76 FUNC GLOBAL DEFAULT 11 g_network_service_new + 2764: 00000000000b5cbc 152 FUNC GLOBAL DEFAULT 11 g_dbus_action_group_get + 2765: 00000000000d510c 1048 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_from_blob + 2766: 00000000000b7958 232 FUNC GLOBAL DEFAULT 11 g_simple_action_get_type + 2767: 000000000006f584 160 FUNC GLOBAL DEFAULT 11 g_mount_get_volume + 2768: 000000000005993c 444 FUNC GLOBAL DEFAULT 11 g_file_enumerator_next_file + 2769: 00000000000af44c 16 FUNC GLOBAL DEFAULT 11 g_application_set_default + 2770: 00000000000dd1e4 388 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_for_bus + 2771: 000000000005a110 128 FUNC GLOBAL DEFAULT 11 g_file_enumerator_get_container + 2772: 0000000000052180 708 FUNC GLOBAL DEFAULT 11 g_file_make_directory_with_parents + 2773: 00000000000b2a7c 168 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_state_hint + 2774: 0000000000071c20 192 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_steal_data + 2775: 00000000001055e4 128 FUNC GLOBAL DEFAULT 11 g_content_type_from_mime_type + 2776: 000000000005f7d8 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_is_symlink + 2777: 00000000000b5ba8 276 FUNC GLOBAL DEFAULT 11 g_dbus_action_group_get_type + 2778: 00000000000a4694 72 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_new + 2779: 0000000000052974 272 FUNC GLOBAL DEFAULT 11 g_file_trash + 2780: 0000000000044878 232 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_uint16 + 2781: 000000000005db90 204 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_uint32 + 2782: 0000000000068b18 192 FUNC GLOBAL DEFAULT 11 g_initable_new + 2783: 000000000009ba4c 144 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_type + 2784: 000000000010b54c 8 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_new_abstract + 2785: 00000000000a4258 312 FUNC GLOBAL DEFAULT 11 g_dtls_connection_close_async + 2786: 000000000008d47c 24 FUNC GLOBAL DEFAULT 11 g_socket_client_new + 2787: 00000000000838a8 400 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new_error + 2788: 00000000000a9b74 108 FUNC GLOBAL DEFAULT 11 g_resolver_record_type_get_type + 2789: 0000000000073db8 244 FUNC GLOBAL DEFAULT 11 g_network_address_get_type + 2790: 000000000009dadc 180 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_use_system_certdb + 2791: 000000000006d4c0 132 FUNC GLOBAL DEFAULT 11 g_io_stream_is_closed + 2792: 00000000001097ec 204 FUNC GLOBAL DEFAULT 11 g_unix_is_mount_path_system_internal + 2793: 000000000008d5b0 12 FUNC GLOBAL DEFAULT 11 g_socket_client_get_enable_proxy + 2794: 00000000000e382c 124 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_object_path + 2795: 0000000000070290 252 FUNC GLOBAL DEFAULT 11 g_mount_guess_content_type_sync + 2796: 00000000000aa0f0 108 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_flags_get_type + 2797: 00000000000d23e4 380 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unregister_subtree + 2798: 00000000001025a4 288 FUNC GLOBAL DEFAULT 11 g_app_info_get_fallback_for_type + 2799: 00000000000a2470 60 FUNC GLOBAL DEFAULT 11 g_tls_password_new + 2800: 000000000008a694 600 FUNC GLOBAL DEFAULT 11 g_socket_connect + 2801: 00000000000e9d60 212 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_interface + 2802: 000000000008e364 156 FUNC GLOBAL DEFAULT 11 g_socket_connectable_enumerate + 2803: 000000000006a13c 148 FUNC GLOBAL DEFAULT 11 g_input_stream_read_bytes_async + 2804: 000000000009734c 124 FUNC GLOBAL DEFAULT 11 g_task_get_source_object + 2805: 0000000000064880 176 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_set_close_base_stream + 2806: 00000000000e0bd0 32 FUNC GLOBAL DEFAULT 11 g_dbus_arg_info_ref + 2807: 00000000000a8efc 44 FUNC GLOBAL DEFAULT 11 g_zlib_decompressor_new + 2808: 000000000003b900 192 FUNC GLOBAL DEFAULT 11 g_async_result_is_tagged + 2809: 00000000000adc50 292 FUNC GLOBAL DEFAULT 11 g_application_set_application_id + 2810: 00000000000a7180 364 FUNC GLOBAL DEFAULT 11 g_volume_eject_with_operation_finish + 2811: 0000000000083448 124 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_op_res_gboolean + 2812: 0000000000122f28 100 FUNC GLOBAL DEFAULT 11 g_settings_new + 2813: 000000000007d010 12 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_protocol + 2814: 00000000000a7c44 208 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_mount_for_uuid + 2815: 000000000011da54 188 FUNC GLOBAL DEFAULT 11 g_settings_backend_path_writable_changed + 2816: 00000000000a3590 196 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_interaction + 2817: 0000000000077c28 156 FUNC GLOBAL DEFAULT 11 g_output_stream_get_type + 2818: 00000000000aaa38 108 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_flags_get_type + 2819: 000000000010a64c 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_is_system_internal + 2820: 00000000000bd870 304 FUNC GLOBAL DEFAULT 11 g_notification_set_default_action_and_target_value + 2821: 00000000000dd848 156 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_default_timeout + 2822: 000000000009cf00 72 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_new + 2823: 00000000000bd08c 180 FUNC GLOBAL DEFAULT 11 g_notification_set_body + 2824: 000000000006f804 292 FUNC GLOBAL DEFAULT 11 g_mount_unmount + 2825: 000000000005e140 256 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_stringv + 2826: 000000000006a390 364 FUNC GLOBAL DEFAULT 11 g_input_stream_close_async + 2827: 0000000000089408 56 FUNC GLOBAL DEFAULT 11 g_socket_receive_message + 2828: 000000000007c3e0 144 FUNC GLOBAL DEFAULT 11 g_proxy_get_type + 2829: 0000000000042aec 220 FUNC GLOBAL DEFAULT 11 g_credentials_get_unix_pid + 2830: 000000000005ced8 160 FUNC GLOBAL DEFAULT 11 g_file_info_clear_status + 2831: 00000000000cd748 368 FUNC GLOBAL DEFAULT 11 g_dbus_connection_close_sync + 2832: 00000000000e10b0 112 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_unref + 2833: 0000000000070590 184 FUNC GLOBAL DEFAULT 11 g_mount_get_sort_key + 2834: 000000000011d7c4 260 FUNC GLOBAL DEFAULT 11 g_settings_backend_keys_changed + 2835: 0000000000074998 128 FUNC GLOBAL DEFAULT 11 g_network_address_get_hostname + 2836: 000000000010a75c 84 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_mount_path + 2837: 00000000000402b4 8 FUNC GLOBAL DEFAULT 11 g_charset_converter_get_num_fallbacks + 2838: 00000000000aaf48 108 FUNC GLOBAL DEFAULT 11 g_settings_bind_flags_get_type + 2839: 00000000000ba030 404 FUNC GLOBAL DEFAULT 11 g_menu_item_get_attribute + 2840: 00000000000ad7e0 180 FUNC GLOBAL DEFAULT 11 g_application_add_option_group + 2841: 00000000000dd368 4 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_for_bus_finish + 2842: 000000000004d658 300 FUNC GLOBAL DEFAULT 11 g_file_mount_mountable + 2843: 00000000000be37c 156 FUNC GLOBAL DEFAULT 11 g_dbus_is_unique_name + 2844: 000000000007b048 128 FUNC GLOBAL DEFAULT 11 g_permission_get_can_release + 2845: 000000000007262c 128 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_password + 2846: 000000000008e294 4 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_host_finish + 2847: 0000000000102374 384 FUNC GLOBAL DEFAULT 11 g_app_info_create_from_commandline + 2848: 0000000000052060 288 FUNC GLOBAL DEFAULT 11 g_file_make_directory_finish + 2849: 0000000000072a04 160 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_password_save + 2850: 00000000000ec08c 396 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_for_bus + 2851: 00000000000e63c4 160 FUNC GLOBAL DEFAULT 11 g_dbus_interface_get_object + 2852: 000000000003e5b4 140 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_new + 2853: 0000000000071a88 28 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_new_resizable + 2854: 0000000000096edc 412 FUNC GLOBAL DEFAULT 11 g_task_get_type + 2855: 00000000000668c8 168 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_org_local + 2856: 000000000003a0b4 172 FUNC GLOBAL DEFAULT 11 g_app_info_get_supported_types + 2857: 00000000000aba10 384 FUNC GLOBAL DEFAULT 11 g_list_store_insert_sorted + 2858: 0000000000064bcc 156 FUNC GLOBAL DEFAULT 11 g_icon_equal + 2859: 00000000000e75c8 124 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_flush + 2860: 0000000000047acc 184 FUNC GLOBAL DEFAULT 11 g_drive_can_start + 2861: 00000000000abd7c 244 FUNC GLOBAL DEFAULT 11 g_list_store_remove + 2862: 0000000000055428 364 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable_with_operation_finish + 2863: 00000000000d1c74 20 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_finish + 2864: 00000000000d444c 172 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_serial + 2865: 00000000000aa15c 108 FUNC GLOBAL DEFAULT 11 g_dbus_error_get_type + 2866: 000000000005ef7c 264 FUNC GLOBAL DEFAULT 11 g_file_info_get_icon + 2867: 000000000004787c 236 FUNC GLOBAL DEFAULT 11 g_drive_get_identifier + 2868: 0000000000097078 144 FUNC GLOBAL DEFAULT 11 g_task_new + 2869: 000000000006a4fc 128 FUNC GLOBAL DEFAULT 11 g_input_stream_clear_pending + 2870: 0000000000044a40 224 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_uint32 + 2871: 00000000000b8958 28 FUNC GLOBAL DEFAULT 11 g_menu_model_is_mutable + 2872: 00000000000a8f28 132 FUNC GLOBAL DEFAULT 11 g_zlib_decompressor_get_file_info + 2873: 000000000003c828 448 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_fill_async + 2874: 0000000000125018 1468 FUNC GLOBAL DEFAULT 11 g_settings_bind_with_mapping + 2875: 000000000006093c 268 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_to_string + 2876: 0000000000039344 148 FUNC GLOBAL DEFAULT 11 g_app_info_get_type + 2877: 000000000009bc90 52 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_certificate_type + 2878: 00000000000eede8 44 FUNC GLOBAL DEFAULT 11 g_test_dbus_new + 2879: 000000000010a344 4 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_set_rate_limit + 2880: 0000000000097e20 196 FUNC GLOBAL DEFAULT 11 g_task_return_pointer + 2881: 000000000007f134 284 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_address_async + 2882: 00000000000e6be8 244 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_type + 2883: 00000000000698e4 320 FUNC GLOBAL DEFAULT 11 g_input_stream_skip_finish + 2884: 000000000010650c 1148 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_credentials + 2885: 000000000003f084 40 FUNC GLOBAL DEFAULT 11 g_cancellable_get_current + 2886: 000000000004ee68 236 FUNC GLOBAL DEFAULT 11 g_file_enumerate_children_async + 2887: 0000000000042614 140 FUNC GLOBAL DEFAULT 11 g_credentials_get_type + 2888: 000000000006ab6c 288 FUNC GLOBAL DEFAULT 11 g_input_stream_close + 2889: 000000000004df8c 224 FUNC GLOBAL DEFAULT 11 g_file_has_uri_scheme + 2890: 000000000008e4b4 192 FUNC GLOBAL DEFAULT 11 g_socket_connectable_to_string + 2891: 000000000003cd94 332 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_fill + 2892: 000000000009f43c 364 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_chain_finish + 2893: 00000000000d971c 372 FUNC GLOBAL DEFAULT 11 g_bus_watch_name + 2894: 000000000003b694 56 FUNC GLOBAL DEFAULT 11 g_async_initable_new_finish + 2895: 00000000000e0fb0 136 FUNC GLOBAL DEFAULT 11 g_dbus_method_info_unref + 2896: 000000000009ca40 128 FUNC GLOBAL DEFAULT 11 g_tls_certificate_new_from_file + 2897: 00000000000c7ac8 340 FUNC GLOBAL DEFAULT 11 g_dbus_error_get_remote_error + 2898: 00000000000b0d78 132 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_platform_data + 2899: 000000000003ffc8 276 FUNC GLOBAL DEFAULT 11 g_charset_converter_get_type + 2900: 000000000006eb08 148 FUNC GLOBAL DEFAULT 11 g_mount_get_type + 2901: 0000000000065e18 112 FUNC GLOBAL DEFAULT 11 g_inet_address_new_from_bytes + 2902: 00000000000a3c88 456 FUNC GLOBAL DEFAULT 11 g_dtls_connection_shutdown + 2903: 00000000000a4390 256 FUNC GLOBAL DEFAULT 11 g_dtls_connection_close_finish + 2904: 000000000004305c 848 FUNC GLOBAL DEFAULT 11 g_datagram_based_send_messages + 2905: 0000000000124d54 12 FUNC GLOBAL DEFAULT 11 g_settings_list_keys + 2906: 0000000000080b18 452 FUNC GLOBAL DEFAULT 11 g_resource_lookup_data + 2907: 000000000005abd8 124 FUNC GLOBAL DEFAULT 11 g_file_icon_get_file + 2908: 0000000000124508 48 FUNC GLOBAL DEFAULT 11 g_settings_set_double + 2909: 000000000009a2dc 232 FUNC GLOBAL DEFAULT 11 g_themed_icon_get_type + 2910: 00000000000a48dc 136 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_set_server_identity + 2911: 00000000000e0bb0 32 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_ref + 2912: 00000000001243d0 52 FUNC GLOBAL DEFAULT 11 g_settings_set_int64 + 2913: 00000000000adf44 252 FUNC GLOBAL DEFAULT 11 g_application_set_resource_base_path + 2914: 00000000000be6ac 844 FUNC GLOBAL DEFAULT 11 g_dbus_gvariant_to_gvalue diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libglib-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libglib-2.0.so.0.txt new file mode 100644 index 000000000000..e5cc8f343ca6 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libglib-2.0.so.0.txt @@ -0,0 +1,1893 @@ +Library: /lib64/libglib-2.0.so.0 +Package: glib2-2.56.1-9.el7_9.aarch64 + + +Symbol table '.dynsym' contains 1887 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000001a578 0 SECTION LOCAL DEFAULT 9 + 2: 000000000012fa90 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam_r@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_dfa_exec + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_sigmask@GLIBC_2.17 (3) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setname_np@GLIBC_2.17 (3) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getcwd@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.17 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND raise@GLIBC_2.17 (3) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoll_l@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND perror@GLIBC_2.17 (2) + 22: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.17 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_close@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND remove@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresuid@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.17 (3) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.17 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.17 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setenv@GLIBC_2.17 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.17 (3) + 35: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_init@GLIBC_2.17 (3) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_compile2 + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setrlimit@GLIBC_2.17 (2) + 46: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setvbuf@GLIBC_2.17 (2) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND kill@GLIBC_2.17 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.17 (3) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_trywrlock@GLIBC_2.17 (3) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.17 (3) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.17 (3) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigfillset@GLIBC_2.17 (2) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoull_l@GLIBC_2.17 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (2) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.17 (3) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.17 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.17 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.17 (2) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.17 (2) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (3) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fdelt_chk@GLIBC_2.17 (2) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncpy_chk@GLIBC_2.17 (2) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vasprintf_chk@GLIBC_2.17 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.17 (2) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_destroy@GLIBC_2.17 (3) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getppid@GLIBC_2.17 (2) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.17 (2) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_exec + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bindtextdomain@GLIBC_2.17 (2) + 84: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.17 (2) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod_l@GLIBC_2.17 (2) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (2) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_detach@GLIBC_2.17 (3) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fstatfs@GLIBC_2.17 (2) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopen@GLIBC_2.17 (2) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strpbrk@GLIBC_2.17 (2) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (2) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime_r@GLIBC_2.17 (2) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.17 (2) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.17 (3) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror_r@GLIBC_2.17 (2) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND posix_memalign@GLIBC_2.17 (2) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (2) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setstacksize@GLIBC_2.17 (3) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_destroy@GLIBC_2.17 (3) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.17 (2) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execv@GLIBC_2.17 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (2) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.17 (3) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.17 (2) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.17 (2) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_fullinfo + 110: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdin@GLIBC_2.17 (2) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_get_stringtable_entries + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fscanf@GLIBC_2.17 (2) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (2) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (2) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (3) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (3) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.17 (3) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind_textdomain_codeset@GLIBC_2.17 (2) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_config + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.17 (3) + 123: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.17 (2) + 125: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (3) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memset_chk@GLIBC_2.17 (2) + 128: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.17 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.17 (3) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (2) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eventfd@GLIBC_2.17 (2) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkostemp@GLIBC_2.17 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_exit@GLIBC_2.17 (3) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.17 (2) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.17 (2) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe2@GLIBC_2.17 (2) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND textdomain@GLIBC_2.17 (2) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execvp@GLIBC_2.17 (2) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_tryrdlock@GLIBC_2.17 (3) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid@GLIBC_2.17 (2) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv@GLIBC_2.17 (2) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uselocale@GLIBC_2.17 (2) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewinddir@GLIBC_2.17 (2) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.17 (2) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_yield@GLIBC_2.17 (2) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (2) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_rdlock@GLIBC_2.17 (3) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsprintf_chk@GLIBC_2.17 (2) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chdir@GLIBC_2.17 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.17 (2) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.17 (2) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_wrlock@GLIBC_2.17 (3) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_delete@GLIBC_2.17 (3) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.17 (2) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nanosleep@GLIBC_2.17 (3) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcsxfrm@GLIBC_2.17 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freopen@GLIBC_2.17 (2) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strspn@GLIBC_2.17 (2) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.17 (3) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execve@GLIBC_2.17 (2) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_get_stringnumber + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.17 (2) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND utime@GLIBC_2.17 (2) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (3) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcngettext@GLIBC_2.17 (2) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (2) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (2) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (3) + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dirfd@GLIBC_2.17 (2) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getrlimit@GLIBC_2.17 (2) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unsetenv@GLIBC_2.17 (2) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_open@GLIBC_2.17 (2) + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_study + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.17 (2) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (3) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (2) + 188: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.17 (2) + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresgid@GLIBC_2.17 (2) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND isatty@GLIBC_2.17 (2) + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.17 (2) + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.17 (2) + 193: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND environ@GLIBC_2.17 (2) + 194: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.17 (2) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_init@GLIBC_2.17 (3) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.17 (2) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.17 (2) + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.17 (2) + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strsignal@GLIBC_2.17 (2) + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fallocate@GLIBC_2.17 (2) + 205: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.17 (3) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcscoll@GLIBC_2.17 (2) + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_unlock@GLIBC_2.17 (3) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (3) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (2) + 212: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND pcre_free + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (3) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND syscall@GLIBC_2.17 (2) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND timegm@GLIBC_2.17 (2) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (3) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.17 (3) + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (2) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.17 (2) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND newlocale@GLIBC_2.17 (2) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND creat@GLIBC_2.17 (2) + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.17 (2) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ferror@GLIBC_2.17 (2) + 225: 000000000007a66c 92 FUNC GLOBAL DEFAULT 11 g_thread_pool_move_to_front + 226: 00000000000796f4 72 FUNC GLOBAL DEFAULT 11 g_thread_exit + 227: 000000000001c484 44 FUNC GLOBAL DEFAULT 11 g_mem_chunk_free + 228: 000000000005e920 100 FUNC GLOBAL DEFAULT 11 g_option_context_set_summary + 229: 000000000007a8d0 156 FUNC GLOBAL DEFAULT 11 g_timer_continue + 230: 000000000007c96c 2120 FUNC GLOBAL DEFAULT 11 g_time_zone_adjust_time + 231: 000000000002fb3c 200 FUNC GLOBAL DEFAULT 11 g_compute_checksum_for_bytes + 232: 000000000003697c 164 FUNC GLOBAL DEFAULT 11 g_date_time_ref + 233: 0000000000079690 100 FUNC GLOBAL DEFAULT 11 g_thread_self + 234: 0000000000063e30 80 FUNC GLOBAL DEFAULT 11 g_match_info_get_regex + 235: 00000000000405a4 292 FUNC GLOBAL DEFAULT 11 g_hook_insert_before + 236: 0000000000048368 212 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_bytes + 237: 0000000000020f88 196 FUNC GLOBAL DEFAULT 11 g_async_queue_timed_pop + 238: 000000000003b1d0 232 FUNC GLOBAL DEFAULT 11 g_error_copy + 239: 000000000002158c 8 FUNC GLOBAL DEFAULT 11 g_atomic_int_get + 240: 000000000003a908 448 FUNC GLOBAL DEFAULT 11 g_environ_setenv + 241: 0000000000025904 224 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_visited + 242: 000000000006ae08 316 FUNC GLOBAL DEFAULT 11 g_sequence_foreach_range + 243: 000000000008dff0 236 FUNC GLOBAL DEFAULT 11 g_variant_new_from_bytes + 244: 00000000000501e4 188 FUNC GLOBAL DEFAULT 11 g_main_context_push_thread_default + 245: 000000000001f968 48 FUNC GLOBAL DEFAULT 11 g_ptr_array_new_with_free_func + 246: 00000000000699a4 224 FUNC GLOBAL DEFAULT 11 g_scanner_input_text + 247: 0000000000025eb4 380 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_groups + 248: 0000000000131410 8 OBJECT GLOBAL DEFAULT 26 __glib_assert_msg + 249: 000000000003748c 48 FUNC GLOBAL DEFAULT 11 g_date_time_add + 250: 0000000000025590 228 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_added + 251: 000000000002104c 160 FUNC GLOBAL DEFAULT 11 g_async_queue_timed_pop_unlocked + 252: 00000000000316f8 376 FUNC GLOBAL DEFAULT 11 g_uri_list_extract_uris + 253: 00000000000879f4 108 FUNC GLOBAL DEFAULT 11 g_variant_get_int64 + 254: 000000000007a148 160 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_max_threads + 255: 0000000000086c90 40 FUNC GLOBAL DEFAULT 11 g_variant_new_int32 + 256: 0000000000049dec 396 FUNC GLOBAL DEFAULT 11 g_key_file_get_locale_string_list + 257: 0000000000067404 324 FUNC GLOBAL DEFAULT 11 g_scanner_error + 258: 0000000000070768 140 FUNC GLOBAL DEFAULT 11 g_ascii_strdown + 259: 0000000000067d5c 372 FUNC GLOBAL DEFAULT 11 g_scanner_scope_remove_symbol + 260: 0000000000097104 152 FUNC GLOBAL DEFAULT 11 g_unix_set_fd_nonblocking + 261: 0000000000050620 812 FUNC GLOBAL DEFAULT 11 g_main_context_prepare + 262: 000000000001c4b0 8 FUNC GLOBAL DEFAULT 11 g_allocator_new + 263: 00000000000201dc 64 FUNC GLOBAL DEFAULT 11 g_ptr_array_sort + 264: 0000000000030220 208 FUNC GLOBAL DEFAULT 11 g_iconv_open + 265: 000000000001ef40 84 FUNC GLOBAL DEFAULT 11 g_array_get_element_size + 266: 0000000000023d58 288 FUNC GLOBAL DEFAULT 11 g_bookmark_file_remove_item + 267: 000000000001f8a4 64 FUNC GLOBAL DEFAULT 11 g_array_sort_with_data + 268: 0000000000085d24 76 FUNC GLOBAL DEFAULT 11 g_get_application_name + 269: 0000000000027450 148 FUNC GLOBAL DEFAULT 11 g_bytes_new + 270: 00000000000795cc 36 FUNC GLOBAL DEFAULT 11 g_thread_try_new + 271: 000000000004993c 316 FUNC GLOBAL DEFAULT 11 g_key_file_set_locale_string + 272: 00000000000590a4 936 FUNC GLOBAL DEFAULT 11 g_log_writer_journald + 273: 000000000005e984 84 FUNC GLOBAL DEFAULT 11 g_option_context_get_summary + 274: 0000000000098a3c 8 FUNC GLOBAL DEFAULT 11 g_io_channel_unix_get_fd + 275: 0000000000078f44 352 FUNC GLOBAL DEFAULT 11 g_test_get_filename + 276: 000000000001ed18 264 FUNC GLOBAL DEFAULT 11 g_array_sized_new + 277: 0000000000094d60 1112 FUNC GLOBAL DEFAULT 11 g_variant_type_info_get + 278: 0000000000051948 180 FUNC GLOBAL DEFAULT 11 g_main_context_remove_poll + 279: 000000000003f5f8 272 FUNC GLOBAL DEFAULT 11 g_hash_table_get_keys_as_array + 280: 0000000000032a74 44 FUNC GLOBAL DEFAULT 11 g_datalist_init + 281: 0000000000052b3c 12 FUNC GLOBAL DEFAULT 11 g_mapped_file_new_from_fd + 282: 000000000001d658 272 FUNC GLOBAL DEFAULT 11 g_relation_delete + 283: 00000000000740e8 212 FUNC GLOBAL DEFAULT 11 g_string_printf + 284: 0000000000099cd0 1388 FUNC GLOBAL DEFAULT 11 g_spawn_sync + 285: 0000000000063978 84 FUNC GLOBAL DEFAULT 11 g_random_double + 286: 00000000000259e4 216 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_visited + 287: 000000000004ff6c 136 FUNC GLOBAL DEFAULT 11 g_get_current_time + 288: 00000000000732f4 20 FUNC GLOBAL DEFAULT 11 g_string_prepend_len + 289: 000000000003866c 1512 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_iso8601 + 290: 000000000006bae0 228 FUNC GLOBAL DEFAULT 11 g_sequence_sort_changed + 291: 000000000006274c 340 FUNC GLOBAL DEFAULT 11 g_queue_push_nth_link + 292: 000000000001ee64 44 FUNC GLOBAL DEFAULT 11 g_array_set_clear_func + 293: 0000000000021370 168 FUNC GLOBAL DEFAULT 11 g_async_queue_remove + 294: 0000000000131660 0 NOTYPE GLOBAL DEFAULT 26 __bss_end__ + 295: 0000000000040a44 312 FUNC GLOBAL DEFAULT 11 g_hook_list_marshal_check + 296: 0000000000045eb0 200 FUNC GLOBAL DEFAULT 11 g_io_channel_write + 297: 0000000000023558 1760 FUNC GLOBAL DEFAULT 11 g_bookmark_file_to_data + 298: 0000000000051888 192 FUNC GLOBAL DEFAULT 11 g_main_context_add_poll + 299: 000000000008bfd8 204 FUNC GLOBAL DEFAULT 11 g_variant_format_string_scan_type + 300: 000000000001e39c 216 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_reader_lock + 301: 000000000002f270 936 FUNC GLOBAL DEFAULT 11 g_checksum_update + 302: 000000000004e5a0 80 FUNC GLOBAL DEFAULT 11 g_source_get_context + 303: 000000000006cbd8 56 FUNC GLOBAL DEFAULT 11 g_shell_error_quark + 304: 00000000000700e4 56 FUNC GLOBAL DEFAULT 11 g_ascii_strtoull + 305: 00000000000813dc 304 FUNC GLOBAL DEFAULT 11 g_unichar_digit_value + 306: 0000000000130968 48 OBJECT GLOBAL DEFAULT 24 g_timeout_funcs + 307: 00000000000877c4 112 FUNC GLOBAL DEFAULT 11 g_variant_get_byte + 308: 000000000006c17c 188 FUNC GLOBAL DEFAULT 11 g_sequence_get + 309: 0000000000051478 176 FUNC GLOBAL DEFAULT 11 g_main_loop_unref + 310: 000000000002574c 224 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_modified + 311: 000000000001c4d8 4 FUNC GLOBAL DEFAULT 11 g_slist_push_allocator + 312: 0000000000039440 52 FUNC GLOBAL DEFAULT 11 g_date_time_to_unix + 313: 0000000000040f30 132 FUNC GLOBAL DEFAULT 11 g_hook_find_data + 314: 0000000000063254 372 FUNC GLOBAL DEFAULT 11 g_rand_set_seed_array + 315: 0000000000073168 172 FUNC GLOBAL DEFAULT 11 g_string_assign + 316: 00000000000873dc 100 FUNC GLOBAL DEFAULT 11 g_variant_new_bytestring + 317: 00000000000526bc 32 FUNC GLOBAL DEFAULT 11 g_child_watch_add + 318: 00000000000827c0 388 FUNC GLOBAL DEFAULT 11 g_ucs4_to_utf8 + 319: 00000000001306e8 168 OBJECT GLOBAL DEFAULT 24 g_thread_functions_for_glib_use + 320: 00000000000208c4 80 FUNC GLOBAL DEFAULT 11 g_async_queue_new_full + 321: 0000000000041e78 52 FUNC GLOBAL DEFAULT 11 g_hostname_is_non_ascii + 322: 000000000005cd00 452 FUNC GLOBAL DEFAULT 11 g_option_context_add_group + 323: 000000000007faec 196 FUNC GLOBAL DEFAULT 11 g_unichar_isalpha + 324: 0000000000042358 536 FUNC GLOBAL DEFAULT 11 g_hostname_is_ip_address + 325: 00000000000628e4 164 FUNC GLOBAL DEFAULT 11 g_queue_unlink + 326: 000000000006b284 164 FUNC GLOBAL DEFAULT 11 g_sequence_append + 327: 0000000000084e34 260 FUNC GLOBAL DEFAULT 11 g_uri_unescape_segment + 328: 000000000003e678 332 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_next + 329: 000000000001ee90 104 FUNC GLOBAL DEFAULT 11 g_array_ref + 330: 0000000000062694 184 FUNC GLOBAL DEFAULT 11 g_queue_peek_nth_link + 331: 0000000000040d50 172 FUNC GLOBAL DEFAULT 11 g_hook_destroy + 332: 000000000001c944 80 FUNC GLOBAL DEFAULT 11 g_cache_key_foreach + 333: 0000000000130e9c 4 OBJECT GLOBAL DEFAULT 26 g_mem_gc_friendly + 334: 00000000000347e8 244 FUNC GLOBAL DEFAULT 11 g_date_get_day_of_year + 335: 000000000001e8b4 8 FUNC GLOBAL DEFAULT 11 g_static_private_init + 336: 000000000006f058 152 FUNC GLOBAL DEFAULT 11 g_slist_remove + 337: 0000000000032430 680 FUNC GLOBAL DEFAULT 11 g_datalist_id_replace_data + 338: 0000000000056c88 36 FUNC GLOBAL DEFAULT 11 g_try_malloc0_n + 339: 000000000003ad1c 128 FUNC GLOBAL DEFAULT 11 g_unsetenv + 340: 0000000000092678 816 FUNC GLOBAL DEFAULT 11 g_variant_parse_error_print_context + 341: 0000000000130ac8 48 OBJECT GLOBAL DEFAULT 24 g_unix_fd_source_funcs + 342: 00000000000274e4 12 FUNC GLOBAL DEFAULT 11 g_bytes_new_static + 343: 0000000000096604 88 FUNC GLOBAL DEFAULT 11 g_variant_type_checked_ + 344: 0000000000086d08 40 FUNC GLOBAL DEFAULT 11 g_variant_new_uint64 + 345: 000000000001d3b0 148 FUNC GLOBAL DEFAULT 11 g_relation_index + 346: 0000000000071fd4 168 FUNC GLOBAL DEFAULT 11 g_str_has_prefix + 347: 0000000000062204 136 FUNC GLOBAL DEFAULT 11 g_queue_push_tail + 348: 0000000000042c34 360 FUNC GLOBAL DEFAULT 11 g_io_channel_flush + 349: 000000000008535c 80 FUNC GLOBAL DEFAULT 11 g_atexit + 350: 0000000000021268 148 FUNC GLOBAL DEFAULT 11 g_async_queue_sort + 351: 000000000006b3f4 204 FUNC GLOBAL DEFAULT 11 g_sequence_insert_before + 352: 0000000000074fd4 16 FUNC GLOBAL DEFAULT 11 g_test_rand_int + 353: 0000000000067100 560 FUNC GLOBAL DEFAULT 11 g_regex_escape_string + 354: 0000000000061cb8 76 FUNC GLOBAL DEFAULT 11 g_queue_free + 355: 0000000000050388 196 FUNC GLOBAL DEFAULT 11 g_main_context_pop_thread_default + 356: 0000000000065ca8 96 FUNC GLOBAL DEFAULT 11 g_regex_get_has_cr_or_lf + 357: 0000000000086d30 40 FUNC GLOBAL DEFAULT 11 g_variant_new_handle + 358: 000000000007c944 12 FUNC GLOBAL DEFAULT 11 g_time_zone_new_utc + 359: 000000000008d76c 116 FUNC GLOBAL DEFAULT 11 g_variant_dict_unref + 360: 0000000000097280 32 FUNC GLOBAL DEFAULT 11 g_unix_signal_add + 361: 0000000000059a70 212 FUNC GLOBAL DEFAULT 11 g_test_assert_expected_messages_internal + 362: 000000000001fb5c 280 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_index_fast + 363: 00000000000817bc 180 FUNC GLOBAL DEFAULT 11 g_utf8_strdown + 364: 0000000000050050 136 FUNC GLOBAL DEFAULT 11 g_get_monotonic_time + 365: 0000000000068308 84 FUNC GLOBAL DEFAULT 11 g_scanner_cur_token + 366: 0000000000064f8c 100 FUNC GLOBAL DEFAULT 11 g_regex_ref + 367: 000000000007aa18 180 FUNC GLOBAL DEFAULT 11 g_usleep + 368: 00000000000500f0 24 FUNC GLOBAL DEFAULT 11 g_main_current_source + 369: 0000000000021998 620 FUNC GLOBAL DEFAULT 11 g_base64_encode_step + 370: 0000000000079418 56 FUNC GLOBAL DEFAULT 11 g_thread_unref + 371: 0000000000040ca0 176 FUNC GLOBAL DEFAULT 11 g_hook_get + 372: 0000000000089ee8 80 FUNC GLOBAL DEFAULT 11 g_variant_iter_new + 373: 000000000006fd70 428 FUNC GLOBAL DEFAULT 11 g_strconcat + 374: 000000000003526c 320 FUNC GLOBAL DEFAULT 11 g_date_get_monday_weeks_in_year + 375: 0000000000027550 84 FUNC GLOBAL DEFAULT 11 g_bytes_get_size + 376: 000000000008e790 148 FUNC GLOBAL DEFAULT 11 g_variant_n_children + 377: 0000000000064120 244 FUNC GLOBAL DEFAULT 11 g_match_info_fetch + 378: 000000000004f824 168 FUNC GLOBAL DEFAULT 11 g_main_context_find_source_by_id + 379: 0000000000130bc0 0 NOTYPE GLOBAL DEFAULT 25 _edata + 380: 0000000000071754 168 FUNC GLOBAL DEFAULT 11 g_strdupv + 381: 0000000000036e08 52 FUNC GLOBAL DEFAULT 11 g_date_time_new_now_utc + 382: 0000000000071c7c 296 FUNC GLOBAL DEFAULT 11 g_strrstr + 383: 000000000007378c 492 FUNC GLOBAL DEFAULT 11 g_string_insert_unichar + 384: 000000000003eddc 8 FUNC GLOBAL DEFAULT 11 g_hash_table_insert + 385: 0000000000073978 88 FUNC GLOBAL DEFAULT 11 g_string_append_unichar + 386: 0000000000059d5c 384 FUNC GLOBAL DEFAULT 11 g_printerr + 387: 0000000000086d80 128 FUNC GLOBAL DEFAULT 11 g_variant_new_variant + 388: 0000000000084f44 180 FUNC GLOBAL DEFAULT 11 g_uri_parse_scheme + 389: 000000000002513c 288 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_mime_type + 390: 0000000000059930 80 FUNC GLOBAL DEFAULT 11 g_assert_warning + 391: 0000000000054018 164 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_ref + 392: 000000000006e164 1312 FUNC GLOBAL DEFAULT 11 g_slice_alloc + 393: 0000000000056a98 40 FUNC GLOBAL DEFAULT 11 g_free + 394: 0000000000033df0 248 FUNC GLOBAL DEFAULT 11 g_date_set_day + 395: 0000000000069800 212 FUNC GLOBAL DEFAULT 11 g_scanner_get_next_token + 396: 0000000000075f90 116 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_pop + 397: 000000000003924c 132 FUNC GLOBAL DEFAULT 11 g_date_time_get_minute + 398: 000000000001a578 0 FUNC GLOBAL DEFAULT 9 _init + 399: 000000000006f630 76 FUNC GLOBAL DEFAULT 11 g_slist_concat + 400: 0000000000084c74 96 FUNC GLOBAL DEFAULT 11 g_unichar_compose + 401: 000000000009665c 84 FUNC GLOBAL DEFAULT 11 g_variant_type_new + 402: 00000000000734c0 716 FUNC GLOBAL DEFAULT 11 g_string_append_uri_escaped + 403: 0000000000086ce0 40 FUNC GLOBAL DEFAULT 11 g_variant_new_int64 + 404: 0000000000062e00 132 FUNC GLOBAL DEFAULT 11 g_queue_push_nth + 405: 000000000003ef74 8 FUNC GLOBAL DEFAULT 11 g_hash_table_steal + 406: 0000000000043120 236 FUNC GLOBAL DEFAULT 11 g_io_channel_unref + 407: 0000000000024f0c 176 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_title + 408: 0000000000079e44 332 FUNC GLOBAL DEFAULT 11 g_thread_pool_push + 409: 0000000000062c64 116 FUNC GLOBAL DEFAULT 11 g_queue_remove + 410: 0000000000089ea4 68 FUNC GLOBAL DEFAULT 11 g_variant_iter_init + 411: 000000000003abec 80 FUNC GLOBAL DEFAULT 11 g_getenv + 412: 000000000006f7ac 4 FUNC GLOBAL DEFAULT 11 g_chdir + 413: 000000000003c9ac 200 FUNC GLOBAL DEFAULT 11 g_file_open_tmp + 414: 0000000000070b88 156 FUNC GLOBAL DEFAULT 11 g_strdelimit + 415: 0000000000081d74 220 FUNC GLOBAL DEFAULT 11 g_utf8_get_char + 416: 000000000006bf34 288 FUNC GLOBAL DEFAULT 11 g_sequence_lookup_iter + 417: 000000000002788c 124 FUNC GLOBAL DEFAULT 11 g_bytes_hash + 418: 0000000000025be0 328 FUNC GLOBAL DEFAULT 11 g_bookmark_file_add_group + 419: 000000000006f7a4 4 FUNC GLOBAL DEFAULT 11 g_rename + 420: 0000000000042a30 96 FUNC GLOBAL DEFAULT 11 g_io_channel_get_line_term + 421: 000000000003f868 520 FUNC GLOBAL DEFAULT 11 g_hmac_new + 422: 0000000000087d90 100 FUNC GLOBAL DEFAULT 11 g_variant_get_variant + 423: 0000000000060f20 188 FUNC GLOBAL DEFAULT 11 g_pattern_spec_equal + 424: 0000000000084b3c 312 FUNC GLOBAL DEFAULT 11 g_unichar_decompose + 425: 0000000000095654 112 FUNC GLOBAL DEFAULT 11 g_variant_type_copy + 426: 0000000000058bfc 304 FUNC GLOBAL DEFAULT 11 g_log_remove_handler + 427: 0000000000051528 392 FUNC GLOBAL DEFAULT 11 g_main_loop_run + 428: 0000000000073f98 256 FUNC GLOBAL DEFAULT 11 g_string_append_vprintf + 429: 000000000006f718 4 FUNC GLOBAL DEFAULT 11 g_slist_insert_sorted_with_data + 430: 0000000000050108 16 FUNC GLOBAL DEFAULT 11 g_source_is_destroyed + 431: 000000000006ef60 248 FUNC GLOBAL DEFAULT 11 g_slist_insert_before + 432: 0000000000087234 212 FUNC GLOBAL DEFAULT 11 g_variant_new_strv + 433: 00000000000faec0 4 OBJECT GLOBAL DEFAULT 13 glib_binary_age + 434: 00000000000638b8 84 FUNC GLOBAL DEFAULT 11 g_random_int + 435: 000000000001e080 56 FUNC GLOBAL DEFAULT 11 g_static_mutex_init + 436: 00000000000708cc 56 FUNC GLOBAL DEFAULT 11 g_ascii_xdigit_value + 437: 0000000000044664 484 FUNC GLOBAL DEFAULT 11 g_io_channel_read_line_string + 438: 000000000006f728 4 FUNC GLOBAL DEFAULT 11 g_access + 439: 00000000000216a4 24 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_or + 440: 0000000000086198 200 FUNC GLOBAL DEFAULT 11 g_get_user_special_dir + 441: 000000000007d1b4 1632 FUNC GLOBAL DEFAULT 11 g_time_zone_find_interval + 442: 00000000000392d0 132 FUNC GLOBAL DEFAULT 11 g_date_time_get_second + 443: 0000000000074548 168 FUNC GLOBAL DEFAULT 11 g_string_chunk_insert_const + 444: 0000000000042ba8 52 FUNC GLOBAL DEFAULT 11 g_io_channel_set_close_on_unref + 445: 000000000003a2d4 88 FUNC GLOBAL DEFAULT 11 g_date_time_is_daylight_savings + 446: 0000000000072c98 116 FUNC GLOBAL DEFAULT 11 g_string_free + 447: 0000000000066d04 148 FUNC GLOBAL DEFAULT 11 g_regex_replace_literal + 448: 0000000000040958 236 FUNC GLOBAL DEFAULT 11 g_hook_list_invoke_check + 449: 0000000000076928 3080 FUNC GLOBAL DEFAULT 11 g_test_init + 450: 0000000000085610 24 FUNC GLOBAL DEFAULT 11 g_get_user_name + 451: 0000000000070b10 112 FUNC GLOBAL DEFAULT 11 g_strcasecmp + 452: 0000000000036ec0 132 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_unix_utc + 453: 000000000005e3b8 96 FUNC GLOBAL DEFAULT 11 g_option_group_ref + 454: 0000000000087fbc 400 FUNC GLOBAL DEFAULT 11 g_variant_get_fixed_array + 455: 000000000008d51c 332 FUNC GLOBAL DEFAULT 11 g_variant_dict_insert + 456: 0000000000057ed8 892 FUNC GLOBAL DEFAULT 11 g_logv + 457: 0000000000033cd8 8 FUNC GLOBAL DEFAULT 11 g_date_set_time + 458: 00000000000224f8 140 FUNC GLOBAL DEFAULT 11 g_pointer_bit_unlock + 459: 00000000000270bc 352 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_icon + 460: 000000000002f23c 52 FUNC GLOBAL DEFAULT 11 g_checksum_free + 461: 000000000007f2f0 44 FUNC GLOBAL DEFAULT 11 g_tree_replace + 462: 0000000000040b7c 292 FUNC GLOBAL DEFAULT 11 g_hook_list_marshal + 463: 0000000000020a90 80 FUNC GLOBAL DEFAULT 11 g_async_queue_unref_and_unlock + 464: 0000000000081668 160 FUNC GLOBAL DEFAULT 11 g_unichar_type + 465: 000000000002f618 312 FUNC GLOBAL DEFAULT 11 g_checksum_get_string + 466: 000000000003195c 108 FUNC GLOBAL DEFAULT 11 g_filename_display_basename + 467: 00000000000956c4 68 FUNC GLOBAL DEFAULT 11 g_variant_type_peek_string + 468: 0000000000049248 544 FUNC GLOBAL DEFAULT 11 g_key_file_get_string + 469: 0000000000037654 40 FUNC GLOBAL DEFAULT 11 g_date_time_compare + 470: 000000000007f4ac 204 FUNC GLOBAL DEFAULT 11 g_tree_foreach + 471: 000000000003a768 44 FUNC GLOBAL DEFAULT 11 g_dir_rewind + 472: 0000000000072f08 592 FUNC GLOBAL DEFAULT 11 g_string_insert_len + 473: 0000000000033774 168 FUNC GLOBAL DEFAULT 11 g_date_get_day + 474: 000000000003f154 116 FUNC GLOBAL DEFAULT 11 g_hash_table_foreach_remove + 475: 000000000007a880 80 FUNC GLOBAL DEFAULT 11 g_timer_reset + 476: 000000000005cf34 84 FUNC GLOBAL DEFAULT 11 g_option_context_get_main_group + 477: 000000000001e188 60 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_init + 478: 0000000000066888 616 FUNC GLOBAL DEFAULT 11 g_regex_replace_eval + 479: 000000000004a5a4 412 FUNC GLOBAL DEFAULT 11 g_key_file_set_boolean_list + 480: 0000000000065d08 88 FUNC GLOBAL DEFAULT 11 g_regex_get_max_lookbehind + 481: 000000000008a6d8 208 FUNC GLOBAL DEFAULT 11 g_variant_builder_clear + 482: 000000000003cc0c 100 FUNC GLOBAL DEFAULT 11 g_build_filename_valist + 483: 0000000000033ce0 8 FUNC GLOBAL DEFAULT 11 g_date_set_time_val + 484: 0000000000096abc 104 FUNC GLOBAL DEFAULT 11 g_vfprintf + 485: 00000000000488b4 104 FUNC GLOBAL DEFAULT 11 g_key_file_ref + 486: 000000000007a4a4 208 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_max_unused_threads + 487: 0000000000073410 88 FUNC GLOBAL DEFAULT 11 g_string_append_c + 488: 000000000004f938 300 FUNC GLOBAL DEFAULT 11 g_main_context_find_source_by_funcs_user_data + 489: 00000000000623dc 136 FUNC GLOBAL DEFAULT 11 g_queue_pop_head + 490: 0000000000097d3c 36 FUNC GLOBAL DEFAULT 11 g_mutex_unlock + 491: 000000000008a360 648 FUNC GLOBAL DEFAULT 11 g_variant_builder_init + 492: 0000000000062b68 92 FUNC GLOBAL DEFAULT 11 g_queue_peek_tail + 493: 000000000008e6dc 180 FUNC GLOBAL DEFAULT 11 g_variant_get_data_as_bytes + 494: 0000000000042a90 160 FUNC GLOBAL DEFAULT 11 g_io_channel_set_flags + 495: 000000000006835c 84 FUNC GLOBAL DEFAULT 11 g_scanner_cur_value + 496: 000000000003fd18 164 FUNC GLOBAL DEFAULT 11 g_hmac_get_string + 497: 00000000000744f4 84 FUNC GLOBAL DEFAULT 11 g_string_chunk_insert + 498: 00000000000759c8 120 FUNC GLOBAL DEFAULT 11 g_test_queue_destroy + 499: 00000000000406f8 208 FUNC GLOBAL DEFAULT 11 g_hook_next_valid + 500: 000000000008667c 8 FUNC GLOBAL DEFAULT 11 g_format_size + 501: 000000000008cba4 272 FUNC GLOBAL DEFAULT 11 g_variant_get + 502: 0000000000095840 160 FUNC GLOBAL DEFAULT 11 g_variant_type_is_container + 503: 00000000000636f8 60 FUNC GLOBAL DEFAULT 11 g_rand_double_range + 504: 00000000000683b0 84 FUNC GLOBAL DEFAULT 11 g_scanner_cur_line + 505: 000000000004baec 312 FUNC GLOBAL DEFAULT 11 g_key_file_has_key + 506: 000000000007fd28 232 FUNC GLOBAL DEFAULT 11 g_unichar_isgraph + 507: 0000000000081c70 260 FUNC GLOBAL DEFAULT 11 g_utf8_strlen + 508: 000000000004ca54 180 FUNC GLOBAL DEFAULT 11 g_list_remove_link + 509: 0000000000056c10 84 FUNC GLOBAL DEFAULT 11 g_realloc_n + 510: 000000000006ef20 12 FUNC GLOBAL DEFAULT 11 g_slist_free_1 + 511: 00000000000303c4 4 FUNC GLOBAL DEFAULT 11 g_iconv + 512: 00000000000680e0 316 FUNC GLOBAL DEFAULT 11 g_scanner_scope_lookup_symbol + 513: 000000000004180c 1644 FUNC GLOBAL DEFAULT 11 g_hostname_to_ascii + 514: 00000000000712d0 584 FUNC GLOBAL DEFAULT 11 g_strsplit + 515: 000000000004d084 8 FUNC GLOBAL DEFAULT 11 g_list_insert_sorted + 516: 000000000001fdfc 204 FUNC GLOBAL DEFAULT 11 g_ptr_array_set_size + 517: 00000000000720e8 612 FUNC GLOBAL DEFAULT 11 g_str_tokenize_and_fold + 518: 0000000000038fcc 136 FUNC GLOBAL DEFAULT 11 g_date_time_get_day_of_year + 519: 0000000000051dac 72 FUNC GLOBAL DEFAULT 11 g_timeout_source_new + 520: 00000000000684b0 156 FUNC GLOBAL DEFAULT 11 g_scanner_sync_file_offset + 521: 00000000000376ac 640 FUNC GLOBAL DEFAULT 11 g_date_time_get_ymd + 522: 00000000000497c0 380 FUNC GLOBAL DEFAULT 11 g_key_file_set_string_list + 523: 0000000000023190 248 FUNC GLOBAL DEFAULT 11 g_bookmark_file_load_from_file + 524: 000000000003e818 8 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_remove + 525: 000000000003ac3c 224 FUNC GLOBAL DEFAULT 11 g_setenv + 526: 0000000000075ca8 40 FUNC GLOBAL DEFAULT 11 g_test_trap_has_passed + 527: 000000000006f724 4 FUNC GLOBAL DEFAULT 11 g_slist_sort_with_data + 528: 000000000008e490 200 FUNC GLOBAL DEFAULT 11 g_variant_ref_sink + 529: 0000000000020dd8 88 FUNC GLOBAL DEFAULT 11 g_async_queue_pop_unlocked + 530: 000000000006f3c8 72 FUNC GLOBAL DEFAULT 11 g_slist_nth_data + 531: 000000000003b454 132 FUNC GLOBAL DEFAULT 11 g_propagate_error + 532: 000000000005b0bc 160 FUNC GLOBAL DEFAULT 11 g_node_copy_deep + 533: 0000000000082bf4 560 FUNC GLOBAL DEFAULT 11 g_utf16_to_ucs4 + 534: 00000000000339bc 184 FUNC GLOBAL DEFAULT 11 g_date_is_leap_year + 535: 0000000000130bec 4 OBJECT GLOBAL DEFAULT 26 g_thread_use_default_impl + 536: 0000000000081ac8 56 FUNC GLOBAL DEFAULT 11 g_unicode_script_to_iso15924 + 537: 0000000000080060 240 FUNC GLOBAL DEFAULT 11 g_unichar_isspace + 538: 000000000004fff4 92 FUNC GLOBAL DEFAULT 11 g_get_real_time + 539: 0000000000081b94 80 FUNC GLOBAL DEFAULT 11 g_utf8_find_prev_char + 540: 0000000000085dec 240 FUNC GLOBAL DEFAULT 11 g_get_user_data_dir + 541: 0000000000034b70 252 FUNC GLOBAL DEFAULT 11 g_date_is_last_of_month + 542: 000000000008a084 156 FUNC GLOBAL DEFAULT 11 g_variant_iter_next_value + 543: 0000000000040880 216 FUNC GLOBAL DEFAULT 11 g_hook_list_invoke + 544: 000000000009719c 100 FUNC GLOBAL DEFAULT 11 g_unix_signal_source_new + 545: 0000000000026030 572 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_groups + 546: 00000000000206fc 176 FUNC GLOBAL DEFAULT 11 g_byte_array_remove_range + 547: 00000000000faed0 4 OBJECT GLOBAL DEFAULT 13 glib_major_version + 548: 000000000005cca8 88 FUNC GLOBAL DEFAULT 11 g_option_context_get_strict_posix + 549: 0000000000068274 148 FUNC GLOBAL DEFAULT 11 g_scanner_scope_foreach_symbol + 550: 000000000003a3d4 372 FUNC GLOBAL DEFAULT 11 g_date_time_format + 551: 000000000008e824 332 FUNC GLOBAL DEFAULT 11 g_variant_get_child_value + 552: 000000000006321c 56 FUNC GLOBAL DEFAULT 11 g_rand_new_with_seed + 553: 000000000004b4a4 368 FUNC GLOBAL DEFAULT 11 g_key_file_set_double_list + 554: 0000000000050a64 836 FUNC GLOBAL DEFAULT 11 g_main_context_check + 555: 000000000006f378 36 FUNC GLOBAL DEFAULT 11 g_slist_reverse + 556: 0000000000041eac 1060 FUNC GLOBAL DEFAULT 11 g_hostname_to_unicode + 557: 000000000004c474 12 FUNC GLOBAL DEFAULT 11 glib__private__ + 558: 0000000000021674 24 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_add + 559: 000000000005cbe8 52 FUNC GLOBAL DEFAULT 11 g_option_context_set_ignore_unknown_options + 560: 0000000000034c6c 352 FUNC GLOBAL DEFAULT 11 g_date_add_months + 561: 00000000000275a4 104 FUNC GLOBAL DEFAULT 11 g_bytes_ref + 562: 0000000000097798 148 FUNC GLOBAL DEFAULT 11 g_rw_lock_reader_lock + 563: 0000000000063090 100 FUNC GLOBAL DEFAULT 11 g_rand_copy + 564: 000000000005cc74 52 FUNC GLOBAL DEFAULT 11 g_option_context_set_strict_posix + 565: 000000000006193c 280 FUNC GLOBAL DEFAULT 11 g_quark_from_static_string + 566: 0000000000081e50 112 FUNC GLOBAL DEFAULT 11 g_utf8_pointer_to_offset + 567: 00000000000876dc 84 FUNC GLOBAL DEFAULT 11 g_variant_get_type_string + 568: 0000000000066d98 216 FUNC GLOBAL DEFAULT 11 g_regex_check_replacement + 569: 000000000006f200 160 FUNC GLOBAL DEFAULT 11 g_slist_delete_link + 570: 0000000000086bc4 84 FUNC GLOBAL DEFAULT 11 g_variant_new_boolean + 571: 000000000002066c 36 FUNC GLOBAL DEFAULT 11 g_byte_array_prepend + 572: 00000000000803d4 208 FUNC GLOBAL DEFAULT 11 g_unichar_isdefined + 573: 000000000005cc1c 88 FUNC GLOBAL DEFAULT 11 g_option_context_get_ignore_unknown_options + 574: 0000000000056a2c 108 FUNC GLOBAL DEFAULT 11 g_realloc + 575: 00000000000750c4 16 FUNC GLOBAL DEFAULT 11 g_test_timer_last + 576: 00000000000728d8 760 FUNC GLOBAL DEFAULT 11 g_ascii_string_to_unsigned + 577: 0000000000095e28 152 FUNC GLOBAL DEFAULT 11 g_variant_type_element + 578: 000000000002582c 216 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_modified + 579: 000000000006cc10 316 FUNC GLOBAL DEFAULT 11 g_shell_quote + 580: 0000000000095f60 128 FUNC GLOBAL DEFAULT 11 g_variant_type_next + 581: 000000000006f7b0 20 FUNC GLOBAL DEFAULT 11 g_stat + 582: 000000000005a85c 348 FUNC GLOBAL DEFAULT 11 g_node_insert_after + 583: 000000000001c4e4 4 FUNC GLOBAL DEFAULT 11 g_node_pop_allocator + 584: 0000000000056c64 36 FUNC GLOBAL DEFAULT 11 g_try_malloc_n + 585: 0000000000021658 28 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_compare_and_exchange + 586: 000000000007a1e8 160 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_num_threads + 587: 000000000006fba8 64 FUNC GLOBAL DEFAULT 11 g_strnfill + 588: 0000000000060fdc 160 FUNC GLOBAL DEFAULT 11 g_pattern_match_string + 589: 0000000000062d88 120 FUNC GLOBAL DEFAULT 11 g_queue_insert_before + 590: 000000000003ce78 92 FUNC GLOBAL DEFAULT 11 g_path_is_absolute + 591: 0000000000066364 24 FUNC GLOBAL DEFAULT 11 g_regex_match_all + 592: 000000000006b870 148 FUNC GLOBAL DEFAULT 11 g_sequence_remove_range + 593: 00000000000856bc 220 FUNC GLOBAL DEFAULT 11 g_get_tmp_dir + 594: 000000000006c31c 36 FUNC GLOBAL DEFAULT 11 g_sequence_is_empty + 595: 000000000004cefc 152 FUNC GLOBAL DEFAULT 11 g_list_insert + 596: 0000000000097efc 296 FUNC GLOBAL DEFAULT 11 g_cond_wait_until + 597: 0000000000067548 320 FUNC GLOBAL DEFAULT 11 g_scanner_warn + 598: 0000000000075938 144 FUNC GLOBAL DEFAULT 11 g_test_add_data_func_full + 599: 0000000000048b84 424 FUNC GLOBAL DEFAULT 11 g_key_file_get_keys + 600: 000000000006f550 76 FUNC GLOBAL DEFAULT 11 g_slist_append + 601: 00000000000862f8 152 FUNC GLOBAL DEFAULT 11 g_get_system_config_dirs + 602: 000000000001c9e4 64 FUNC GLOBAL DEFAULT 11 g_completion_new + 603: 000000000004c9d0 132 FUNC GLOBAL DEFAULT 11 g_list_remove_all + 604: 000000000007a7a4 36 FUNC GLOBAL DEFAULT 11 g_timer_destroy + 605: 000000000008889c 256 FUNC GLOBAL DEFAULT 11 g_variant_dup_objv + 606: 000000000003739c 120 FUNC GLOBAL DEFAULT 11 g_date_time_new_local + 607: 0000000000082334 508 FUNC GLOBAL DEFAULT 11 g_utf8_to_ucs4_fast + 608: 0000000000079268 168 FUNC GLOBAL DEFAULT 11 g_once_init_enter + 609: 000000000003b0bc 196 FUNC GLOBAL DEFAULT 11 g_error_new_literal + 610: 000000000005aff0 104 FUNC GLOBAL DEFAULT 11 g_node_last_child + 611: 0000000000088bcc 3592 FUNC GLOBAL DEFAULT 11 g_variant_print_string + 612: 0000000000094054 156 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_is_signature + 613: 000000000001f8e4 80 FUNC GLOBAL DEFAULT 11 g_ptr_array_sized_new + 614: 0000000000032350 12 FUNC GLOBAL DEFAULT 11 g_datalist_id_get_data + 615: 000000000004fbf8 120 FUNC GLOBAL DEFAULT 11 g_source_remove_by_funcs_user_data + 616: 000000000008774c 120 FUNC GLOBAL DEFAULT 11 g_variant_get_boolean + 617: 000000000001cbd0 788 FUNC GLOBAL DEFAULT 11 g_completion_complete + 618: 00000000000403cc 108 FUNC GLOBAL DEFAULT 11 g_hook_destroy_link + 619: 0000000000034a08 360 FUNC GLOBAL DEFAULT 11 g_date_get_sunday_week_of_year + 620: 0000000000051f24 32 FUNC GLOBAL DEFAULT 11 g_timeout_add + 621: 00000000000480b0 344 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_file + 622: 0000000000089f38 120 FUNC GLOBAL DEFAULT 11 g_variant_iter_copy + 623: 000000000004d090 8 FUNC GLOBAL DEFAULT 11 g_list_sort + 624: 000000000006ef08 8 FUNC GLOBAL DEFAULT 11 g_slist_alloc + 625: 0000000000086e00 168 FUNC GLOBAL DEFAULT 11 g_variant_new_string + 626: 0000000000073308 8 FUNC GLOBAL DEFAULT 11 g_string_insert + 627: 000000000004d098 4 FUNC GLOBAL DEFAULT 11 g_list_sort_with_data + 628: 00000000000517f4 148 FUNC GLOBAL DEFAULT 11 g_main_loop_get_context + 629: 00000000000faec4 4 OBJECT GLOBAL DEFAULT 13 glib_interface_age + 630: 000000000003759c 16 FUNC GLOBAL DEFAULT 11 g_date_time_add_seconds + 631: 0000000000131660 0 NOTYPE GLOBAL DEFAULT 26 _bss_end__ + 632: 0000000000038cd8 340 FUNC GLOBAL DEFAULT 11 g_date_time_get_day_of_month + 633: 000000000003fbdc 84 FUNC GLOBAL DEFAULT 11 g_hmac_update + 634: 0000000000025374 240 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_is_private + 635: 0000000000094b98 72 FUNC GLOBAL DEFAULT 11 g_variant_type_info_query + 636: 0000000000096e70 140 FUNC GLOBAL DEFAULT 11 g_vasprintf + 637: 000000000001c4dc 4 FUNC GLOBAL DEFAULT 11 g_slist_pop_allocator + 638: 000000000002025c 136 FUNC GLOBAL DEFAULT 11 g_ptr_array_foreach + 639: 0000000000059edc 124 FUNC GLOBAL DEFAULT 11 g_printf_string_upper_bound + 640: 00000000001309c8 8 OBJECT GLOBAL DEFAULT 24 glib_mem_profiler_table + 641: 000000000003f824 8 FUNC GLOBAL DEFAULT 11 g_int_hash + 642: 0000000000048f6c 332 FUNC GLOBAL DEFAULT 11 g_key_file_get_value + 643: 000000000008899c 264 FUNC GLOBAL DEFAULT 11 g_variant_get_strv + 644: 0000000000033874 152 FUNC GLOBAL DEFAULT 11 g_date_set_julian + 645: 0000000000021630 24 FUNC GLOBAL DEFAULT 11 g_atomic_int_xor + 646: 000000000003d33c 372 FUNC GLOBAL DEFAULT 11 g_get_current_dir + 647: 0000000000065fac 124 FUNC GLOBAL DEFAULT 11 g_regex_match_simple + 648: 000000000009a454 248 FUNC GLOBAL DEFAULT 11 g_spawn_command_line_sync + 649: 0000000000083668 164 FUNC GLOBAL DEFAULT 11 g_utf8_strreverse + 650: 0000000000094c08 56 FUNC GLOBAL DEFAULT 11 g_variant_type_info_query_element + 651: 0000000000092d5c 1940 FUNC GLOBAL DEFAULT 11 g_variant_serialised_get_child + 652: 0000000000052b9c 84 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_contents + 653: 000000000006f7d8 4 FUNC GLOBAL DEFAULT 11 g_unlink + 654: 000000000001dcd0 52 FUNC GLOBAL DEFAULT 11 g_private_new + 655: 0000000000021650 8 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_set + 656: 00000000000780b4 508 FUNC GLOBAL DEFAULT 11 g_assertion_message + 657: 000000000005e9d8 100 FUNC GLOBAL DEFAULT 11 g_option_context_set_description + 658: 0000000000051c58 88 FUNC GLOBAL DEFAULT 11 g_main_context_wakeup + 659: 000000000009a3dc 120 FUNC GLOBAL DEFAULT 11 g_spawn_async + 660: 000000000006c40c 92 FUNC GLOBAL DEFAULT 11 g_sequence_foreach + 661: 0000000000042948 232 FUNC GLOBAL DEFAULT 11 g_io_channel_set_line_term + 662: 0000000000061cb0 8 FUNC GLOBAL DEFAULT 11 g_queue_new + 663: 000000000001d27c 124 FUNC GLOBAL DEFAULT 11 g_relation_new + 664: 000000000006821c 88 FUNC GLOBAL DEFAULT 11 g_scanner_set_scope + 665: 00000000000356fc 292 FUNC GLOBAL DEFAULT 11 g_date_to_struct_tm + 666: 0000000000097580 108 FUNC GLOBAL DEFAULT 11 g_rec_mutex_trylock + 667: 0000000000054560 84 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_element_stack + 668: 0000000000073ee8 176 FUNC GLOBAL DEFAULT 11 g_string_up + 669: 000000000003f708 188 FUNC GLOBAL DEFAULT 11 g_hash_table_get_values + 670: 000000000001e8bc 160 FUNC GLOBAL DEFAULT 11 g_static_private_get + 671: 000000000004d014 72 FUNC GLOBAL DEFAULT 11 g_list_foreach + 672: 000000000005af3c 180 FUNC GLOBAL DEFAULT 11 g_node_n_nodes + 673: 0000000000099214 56 FUNC GLOBAL DEFAULT 11 g_spawn_error_quark + 674: 0000000000086ea8 204 FUNC GLOBAL DEFAULT 11 g_variant_new_take_string + 675: 00000000000303c8 4 FUNC GLOBAL DEFAULT 11 g_iconv_close + 676: 0000000000022fb8 472 FUNC GLOBAL DEFAULT 11 g_bookmark_file_load_from_data + 677: 0000000000065d60 84 FUNC GLOBAL DEFAULT 11 g_regex_get_compile_flags + 678: 000000000006ff88 240 FUNC GLOBAL DEFAULT 11 g_strtod + 679: 00000000000821f0 324 FUNC GLOBAL DEFAULT 11 g_utf8_get_char_validated + 680: 0000000000073214 20 FUNC GLOBAL DEFAULT 11 g_string_append_len + 681: 00000000000427cc 228 FUNC GLOBAL DEFAULT 11 g_io_channel_error_from_errno + 682: 00000000000422d0 136 FUNC GLOBAL DEFAULT 11 g_hostname_is_ascii_encoded + 683: 0000000000027358 88 FUNC GLOBAL DEFAULT 11 g_bytes_unref + 684: 000000000008a9dc 364 FUNC GLOBAL DEFAULT 11 g_variant_builder_open + 685: 0000000000097df0 100 FUNC GLOBAL DEFAULT 11 g_mutex_trylock + 686: 0000000000089fb0 88 FUNC GLOBAL DEFAULT 11 g_variant_iter_n_children + 687: 000000000008ad5c 172 FUNC GLOBAL DEFAULT 11 g_variant_builder_close + 688: 000000000002691c 836 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_app_info + 689: 00000000000519fc 8 FUNC GLOBAL DEFAULT 11 g_source_get_current_time + 690: 00000000000343c8 124 FUNC GLOBAL DEFAULT 11 g_date_copy + 691: 0000000000084cd4 352 FUNC GLOBAL DEFAULT 11 g_unichar_fully_decompose + 692: 000000000006c600 200 FUNC GLOBAL DEFAULT 11 g_sequence_get_iter_at_pos + 693: 00000000000940f0 2212 FUNC GLOBAL DEFAULT 11 g_variant_serialised_is_normal + 694: 0000000000074350 128 FUNC GLOBAL DEFAULT 11 g_string_chunk_clear + 695: 000000000006bcd8 228 FUNC GLOBAL DEFAULT 11 g_sequence_insert_sorted + 696: 000000000007bbd4 328 FUNC GLOBAL DEFAULT 11 g_time_zone_unref + 697: 0000000000097e54 8 FUNC GLOBAL DEFAULT 11 g_cond_init + 698: 00000000000336c8 172 FUNC GLOBAL DEFAULT 11 g_date_get_year + 699: 000000000005b61c 276 FUNC GLOBAL DEFAULT 11 g_node_children_foreach + 700: 000000000003d6cc 224 FUNC GLOBAL DEFAULT 11 g_dpgettext + 701: 0000000000066804 108 FUNC GLOBAL DEFAULT 11 g_regex_split_simple + 702: 0000000000056bbc 84 FUNC GLOBAL DEFAULT 11 g_malloc0_n + 703: 000000000003381c 88 FUNC GLOBAL DEFAULT 11 g_date_clear + 704: 000000000001e848 108 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_free + 705: 00000000000525c0 252 FUNC GLOBAL DEFAULT 11 g_child_watch_add_full + 706: 00000000000205dc 4 FUNC GLOBAL DEFAULT 11 g_byte_array_free + 707: 0000000000130bc0 0 NOTYPE GLOBAL DEFAULT 26 __bss_start + 708: 000000000008d7e0 252 FUNC GLOBAL DEFAULT 11 g_variant_dict_end + 709: 000000000004edbc 144 FUNC GLOBAL DEFAULT 11 g_source_set_can_recurse + 710: 000000000006f7a8 4 FUNC GLOBAL DEFAULT 11 g_mkdir + 711: 000000000005e69c 44 FUNC GLOBAL DEFAULT 11 g_option_group_set_error_hook + 712: 000000000003f53c 188 FUNC GLOBAL DEFAULT 11 g_hash_table_get_keys + 713: 0000000000037ad8 544 FUNC GLOBAL DEFAULT 11 g_date_time_add_months + 714: 0000000000054854 132 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_pop + 715: 0000000000037cf8 992 FUNC GLOBAL DEFAULT 11 g_date_time_add_full + 716: 0000000000083640 40 FUNC GLOBAL DEFAULT 11 g_unichar_validate + 717: 000000000008ab48 532 FUNC GLOBAL DEFAULT 11 g_variant_builder_end + 718: 000000000003e60c 12 FUNC GLOBAL DEFAULT 11 g_hash_table_new + 719: 0000000000032aa0 1068 FUNC GLOBAL DEFAULT 11 g_dataset_id_set_data_full + 720: 00000000000860d4 196 FUNC GLOBAL DEFAULT 11 g_reload_user_special_dirs_cache + 721: 0000000000045f78 256 FUNC GLOBAL DEFAULT 11 g_io_channel_seek + 722: 000000000006ad90 120 FUNC GLOBAL DEFAULT 11 g_sequence_free + 723: 000000000003332c 16 FUNC GLOBAL DEFAULT 11 g_date_valid_month + 724: 0000000000097610 40 FUNC GLOBAL DEFAULT 11 g_rw_lock_clear + 725: 0000000000031b18 212 FUNC GLOBAL DEFAULT 11 g_datalist_clear + 726: 000000000006faf8 92 FUNC GLOBAL DEFAULT 11 g_memdup + 727: 000000000006f4f0 72 FUNC GLOBAL DEFAULT 11 g_slist_index + 728: 00000000000597c0 368 FUNC GLOBAL DEFAULT 11 g_warn_message + 729: 000000000005ca4c 76 FUNC GLOBAL DEFAULT 11 g_option_context_new + 730: 0000000000048744 368 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_data_dirs + 731: 000000000007aacc 240 FUNC GLOBAL DEFAULT 11 g_time_val_add + 732: 0000000000021ec8 476 FUNC GLOBAL DEFAULT 11 g_base64_decode_step + 733: 000000000003aee0 204 FUNC GLOBAL DEFAULT 11 g_error_new_valist + 734: 000000000006b328 204 FUNC GLOBAL DEFAULT 11 g_sequence_prepend + 735: 00000000000974f0 40 FUNC GLOBAL DEFAULT 11 g_rec_mutex_clear + 736: 000000000001f590 492 FUNC GLOBAL DEFAULT 11 g_array_remove_range + 737: 0000000000087514 84 FUNC GLOBAL DEFAULT 11 g_variant_get_type + 738: 0000000000045d9c 276 FUNC GLOBAL DEFAULT 11 g_io_channel_read + 739: 000000000007f2c4 44 FUNC GLOBAL DEFAULT 11 g_tree_insert + 740: 000000000007f420 140 FUNC GLOBAL DEFAULT 11 g_tree_lookup_extended + 741: 0000000000056cd0 8 FUNC GLOBAL DEFAULT 11 g_mem_is_system_malloc + 742: 000000000003faf4 100 FUNC GLOBAL DEFAULT 11 g_hmac_ref + 743: 00000000000210ec 108 FUNC GLOBAL DEFAULT 11 g_async_queue_length + 744: 000000000008716c 92 FUNC GLOBAL DEFAULT 11 g_variant_is_signature + 745: 0000000000080150 196 FUNC GLOBAL DEFAULT 11 g_unichar_ismark + 746: 000000000004cc98 36 FUNC GLOBAL DEFAULT 11 g_list_reverse + 747: 0000000000020c50 164 FUNC GLOBAL DEFAULT 11 g_async_queue_push_sorted_unlocked + 748: 00000000000279d0 320 FUNC GLOBAL DEFAULT 11 g_bytes_unref_to_data + 749: 000000000005b548 112 FUNC GLOBAL DEFAULT 11 g_node_first_sibling + 750: 000000000008db18 252 FUNC GLOBAL DEFAULT 11 g_variant_byteswap + 751: 000000000003ef6c 8 FUNC GLOBAL DEFAULT 11 g_hash_table_remove + 752: 000000000004c740 96 FUNC GLOBAL DEFAULT 11 g_list_prepend + 753: 0000000000044470 500 FUNC GLOBAL DEFAULT 11 g_io_channel_read_line + 754: 0000000000063734 376 FUNC GLOBAL DEFAULT 11 g_rand_int_range + 755: 000000000006f7dc 4 FUNC GLOBAL DEFAULT 11 g_remove + 756: 000000000001c4c0 4 FUNC GLOBAL DEFAULT 11 g_mem_chunk_reset + 757: 0000000000097898 96 FUNC GLOBAL DEFAULT 11 g_rw_lock_reader_unlock + 758: 000000000003f7c4 28 FUNC GLOBAL DEFAULT 11 g_str_equal + 759: 00000000000791a0 200 FUNC GLOBAL DEFAULT 11 g_once_impl + 760: 0000000000095cf0 312 FUNC GLOBAL DEFAULT 11 g_variant_type_is_subtype_of + 761: 000000000002fa94 168 FUNC GLOBAL DEFAULT 11 g_compute_checksum_for_string + 762: 000000000006e684 56 FUNC GLOBAL DEFAULT 11 g_slice_alloc0 + 763: 000000000006f7e0 4 FUNC GLOBAL DEFAULT 11 g_rmdir + 764: 0000000000095384 388 FUNC GLOBAL DEFAULT 11 g_variant_type_string_scan + 765: 0000000000044078 932 FUNC GLOBAL DEFAULT 11 g_io_channel_set_encoding + 766: 000000000004e37c 104 FUNC GLOBAL DEFAULT 11 g_main_context_default + 767: 000000000006e96c 764 FUNC GLOBAL DEFAULT 11 g_slice_free_chain_with_offset + 768: 00000000000972f0 196 FUNC GLOBAL DEFAULT 11 g_unix_fd_add_full + 769: 0000000000048208 352 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_data + 770: 0000000000081c5c 20 FUNC GLOBAL DEFAULT 11 g_utf8_prev_char + 771: 0000000000097a6c 4 FUNC GLOBAL DEFAULT 11 g_thread_yield + 772: 000000000004cce8 44 FUNC GLOBAL DEFAULT 11 g_list_nth_prev + 773: 000000000003e9bc 180 FUNC GLOBAL DEFAULT 11 g_hash_table_unref + 774: 0000000000064214 148 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_named + 775: 0000000000095770 208 FUNC GLOBAL DEFAULT 11 g_variant_type_is_definite + 776: 0000000000024fbc 208 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_description + 777: 00000000000521a0 308 FUNC GLOBAL DEFAULT 11 g_main_context_invoke_full + 778: 0000000000073dac 140 FUNC GLOBAL DEFAULT 11 g_string_ascii_up + 779: 0000000000020368 72 FUNC GLOBAL DEFAULT 11 g_ptr_array_unref + 780: 0000000000056cf0 24 FUNC GLOBAL DEFAULT 11 g_mem_profile + 781: 0000000000020ea4 88 FUNC GLOBAL DEFAULT 11 g_async_queue_try_pop_unlocked + 782: 000000000008202c 220 FUNC GLOBAL DEFAULT 11 g_unichar_to_utf8 + 783: 000000000004951c 676 FUNC GLOBAL DEFAULT 11 g_key_file_get_string_list + 784: 0000000000072de4 56 FUNC GLOBAL DEFAULT 11 g_string_hash + 785: 000000000006cd4c 872 FUNC GLOBAL DEFAULT 11 g_shell_unquote + 786: 0000000000063f94 96 FUNC GLOBAL DEFAULT 11 g_match_info_get_match_count + 787: 0000000000077704 232 FUNC GLOBAL DEFAULT 11 g_test_minimized_result + 788: 0000000000054270 664 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_end_parse + 789: 000000000007011c 56 FUNC GLOBAL DEFAULT 11 g_ascii_strtoll + 790: 000000000005944c 308 FUNC GLOBAL DEFAULT 11 g_log_writer_standard_streams + 791: 00000000000545b4 64 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_position + 792: 000000000007e0bc 644 FUNC GLOBAL DEFAULT 11 g_str_to_ascii + 793: 0000000000064600 560 FUNC GLOBAL DEFAULT 11 g_match_info_next + 794: 0000000000064050 208 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_pos + 795: 000000000006f710 8 FUNC GLOBAL DEFAULT 11 g_slist_insert_sorted + 796: 000000000007952c 160 FUNC GLOBAL DEFAULT 11 g_thread_new + 797: 000000000007a754 20 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_max_idle_time + 798: 00000000000708a4 40 FUNC GLOBAL DEFAULT 11 g_ascii_digit_value + 799: 0000000000078064 80 FUNC GLOBAL DEFAULT 11 g_test_run + 800: 000000000008845c 304 FUNC GLOBAL DEFAULT 11 g_variant_new_dict_entry + 801: 000000000006f67c 36 FUNC GLOBAL DEFAULT 11 g_slist_length + 802: 000000000004f8cc 108 FUNC GLOBAL DEFAULT 11 g_source_set_name_by_id + 803: 000000000003d8dc 76 FUNC GLOBAL DEFAULT 11 g_dcgettext + 804: 000000000003b180 80 FUNC GLOBAL DEFAULT 11 g_error_free + 805: 0000000000037414 120 FUNC GLOBAL DEFAULT 11 g_date_time_new_utc + 806: 0000000000097d1c 32 FUNC GLOBAL DEFAULT 11 g_mutex_lock + 807: 00000000001306e0 8 OBJECT GLOBAL DEFAULT 24 g_thread_gettime + 808: 000000000008ce94 280 FUNC GLOBAL DEFAULT 11 g_variant_iter_next + 809: 000000000004d08c 4 FUNC GLOBAL DEFAULT 11 g_list_insert_sorted_with_data + 810: 0000000000040254 376 FUNC GLOBAL DEFAULT 11 g_hook_unref + 811: 0000000000086260 152 FUNC GLOBAL DEFAULT 11 g_get_system_data_dirs + 812: 00000000000979cc 160 FUNC GLOBAL DEFAULT 11 g_private_replace + 813: 000000000003e514 248 FUNC GLOBAL DEFAULT 11 g_hash_table_new_full + 814: 000000000007fa28 196 FUNC GLOBAL DEFAULT 11 g_unichar_isalnum + 815: 00000000000798cc 484 FUNC GLOBAL DEFAULT 11 g_thread_pool_new + 816: 000000000001f934 8 FUNC GLOBAL DEFAULT 11 g_ptr_array_new + 817: 0000000000097738 96 FUNC GLOBAL DEFAULT 11 g_rw_lock_writer_unlock + 818: 0000000000093f94 192 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_is_object_path + 819: 000000000006f71c 8 FUNC GLOBAL DEFAULT 11 g_slist_sort + 820: 00000000000750d4 56 FUNC GLOBAL DEFAULT 11 g_test_bug_base + 821: 000000000004b2e4 448 FUNC GLOBAL DEFAULT 11 g_key_file_get_double_list + 822: 000000000003f85c 12 FUNC GLOBAL DEFAULT 11 g_double_hash + 823: 000000000003334c 24 FUNC GLOBAL DEFAULT 11 g_date_valid_day + 824: 000000000004a96c 372 FUNC GLOBAL DEFAULT 11 g_key_file_get_int64 + 825: 0000000000054a40 4580 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_parse + 826: 00000000000541fc 116 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_unref + 827: 00000000000206b4 36 FUNC GLOBAL DEFAULT 11 g_byte_array_remove_index + 828: 0000000000051e4c 216 FUNC GLOBAL DEFAULT 11 g_timeout_add_full + 829: 00000000000739d0 88 FUNC GLOBAL DEFAULT 11 g_string_prepend_unichar + 830: 000000000001c4c8 4 FUNC GLOBAL DEFAULT 11 g_mem_chunk_info + 831: 000000000003fa70 132 FUNC GLOBAL DEFAULT 11 g_hmac_copy + 832: 000000000004006c 180 FUNC GLOBAL DEFAULT 11 g_hook_alloc + 833: 000000000008daa0 120 FUNC GLOBAL DEFAULT 11 g_variant_get_normal_form + 834: 0000000000027b10 128 FUNC GLOBAL DEFAULT 11 g_bytes_unref_to_array + 835: 000000000001e1f4 64 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_trylock + 836: 0000000000076060 112 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_free + 837: 000000000002159c 20 FUNC GLOBAL DEFAULT 11 g_atomic_int_inc + 838: 0000000000067a7c 224 FUNC GLOBAL DEFAULT 11 g_scanner_destroy + 839: 0000000000071b6c 272 FUNC GLOBAL DEFAULT 11 g_strstr_len + 840: 000000000008a120 476 FUNC GLOBAL DEFAULT 11 g_variant_lookup_value + 841: 000000000003ea70 408 FUNC GLOBAL DEFAULT 11 g_hash_table_lookup + 842: 0000000000059580 576 FUNC GLOBAL DEFAULT 11 g_log_writer_default + 843: 00000000000214ac 140 FUNC GLOBAL DEFAULT 11 g_async_queue_push_front + 844: 0000000000039558 88 FUNC GLOBAL DEFAULT 11 g_date_time_get_timezone_abbreviation + 845: 0000000000055e10 736 FUNC GLOBAL DEFAULT 11 g_markup_vprintf_escaped + 846: 000000000006c994 256 FUNC GLOBAL DEFAULT 11 g_sequence_iter_move + 847: 0000000000131660 0 NOTYPE GLOBAL DEFAULT 26 _end + 848: 000000000003e820 300 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_replace + 849: 0000000000081870 324 FUNC GLOBAL DEFAULT 11 g_utf8_casefold + 850: 000000000003fff0 124 FUNC GLOBAL DEFAULT 11 g_hook_list_init + 851: 000000000004fc98 308 FUNC GLOBAL DEFAULT 11 g_source_add_unix_fd + 852: 0000000000042760 32 FUNC GLOBAL DEFAULT 11 g_io_add_watch + 853: 0000000000061818 292 FUNC GLOBAL DEFAULT 11 g_quark_from_string + 854: 0000000000058510 220 FUNC GLOBAL DEFAULT 11 g_log_writer_is_journald + 855: 00000000000577b4 84 FUNC GLOBAL DEFAULT 11 g_log_set_always_fatal + 856: 000000000008d668 148 FUNC GLOBAL DEFAULT 11 g_variant_dict_remove + 857: 000000000005abec 604 FUNC GLOBAL DEFAULT 11 g_node_traverse + 858: 0000000000087440 212 FUNC GLOBAL DEFAULT 11 g_variant_new_bytestring_array + 859: 000000000001f434 348 FUNC GLOBAL DEFAULT 11 g_array_remove_index_fast + 860: 0000000000089b04 288 FUNC GLOBAL DEFAULT 11 g_variant_equal + 861: 0000000000020b30 148 FUNC GLOBAL DEFAULT 11 g_async_queue_push_unlocked + 862: 000000000006107c 188 FUNC GLOBAL DEFAULT 11 g_pattern_match_simple + 863: 0000000000057a70 908 FUNC GLOBAL DEFAULT 11 g_log_structured + 864: 000000000007f274 80 FUNC GLOBAL DEFAULT 11 g_tree_destroy + 865: 000000000001ef94 120 FUNC GLOBAL DEFAULT 11 g_array_free + 866: 0000000000096c70 180 FUNC GLOBAL DEFAULT 11 g_sprintf + 867: 0000000000085c98 60 FUNC GLOBAL DEFAULT 11 g_get_prgname + 868: 000000000002050c 12 FUNC GLOBAL DEFAULT 11 g_ptr_array_find + 869: 00000000000529d4 360 FUNC GLOBAL DEFAULT 11 g_mapped_file_new + 870: 0000000000034668 168 FUNC GLOBAL DEFAULT 11 g_date_add_days + 871: 0000000000042570 112 FUNC GLOBAL DEFAULT 11 g_io_channel_init + 872: 0000000000051378 92 FUNC GLOBAL DEFAULT 11 g_main_loop_new + 873: 000000000009b524 0 FUNC GLOBAL DEFAULT 12 _fini + 874: 0000000000081a2c 156 FUNC GLOBAL DEFAULT 11 g_unichar_get_script + 875: 000000000008e698 68 FUNC GLOBAL DEFAULT 11 g_variant_get_data + 876: 000000000001f77c 232 FUNC GLOBAL DEFAULT 11 g_array_set_size + 877: 00000000000923c8 344 FUNC GLOBAL DEFAULT 11 g_variant_new_parsed_va + 878: 000000000003a5ac 204 FUNC GLOBAL DEFAULT 11 g_dir_open + 879: 000000000008370c 468 FUNC GLOBAL DEFAULT 11 g_utf8_make_valid + 880: 000000000006ff1c 108 FUNC GLOBAL DEFAULT 11 g_ascii_strtod + 881: 0000000000028168 1004 FUNC GLOBAL DEFAULT 11 g_get_language_names + 882: 0000000000024e3c 208 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_title + 883: 000000000001ca24 132 FUNC GLOBAL DEFAULT 11 g_completion_add_items + 884: 000000000004eea4 152 FUNC GLOBAL DEFAULT 11 g_source_set_name + 885: 000000000005044c 468 FUNC GLOBAL DEFAULT 11 g_main_context_wait + 886: 0000000000068458 88 FUNC GLOBAL DEFAULT 11 g_scanner_eof + 887: 000000000001eef8 72 FUNC GLOBAL DEFAULT 11 g_array_unref + 888: 000000000007258c 56 FUNC GLOBAL DEFAULT 11 g_number_parser_error_quark + 889: 00000000000778d4 220 FUNC GLOBAL DEFAULT 11 g_test_message + 890: 0000000000020914 8 FUNC GLOBAL DEFAULT 11 g_async_queue_new + 891: 0000000000075c98 16 FUNC GLOBAL DEFAULT 11 g_test_subprocess + 892: 0000000000066e70 656 FUNC GLOBAL DEFAULT 11 g_regex_escape_nul + 893: 000000000003d7ac 52 FUNC GLOBAL DEFAULT 11 glib_pgettext + 894: 0000000000064500 200 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_all + 895: 000000000007207c 108 FUNC GLOBAL DEFAULT 11 g_strv_length + 896: 0000000000061e84 172 FUNC GLOBAL DEFAULT 11 g_queue_foreach + 897: 000000000001c4b8 4 FUNC GLOBAL DEFAULT 11 g_allocator_free + 898: 0000000000075010 16 FUNC GLOBAL DEFAULT 11 g_test_rand_double_range + 899: 0000000000058a8c 24 FUNC GLOBAL DEFAULT 11 g_return_if_fail_warning + 900: 0000000000044020 88 FUNC GLOBAL DEFAULT 11 g_io_channel_get_buffered + 901: 0000000000070f38 576 FUNC GLOBAL DEFAULT 11 g_strescape + 902: 0000000000097ed4 40 FUNC GLOBAL DEFAULT 11 g_cond_broadcast + 903: 0000000000049f78 544 FUNC GLOBAL DEFAULT 11 g_key_file_set_locale_string_list + 904: 0000000000062a0c 124 FUNC GLOBAL DEFAULT 11 g_queue_delete_link + 905: 000000000003ef7c 196 FUNC GLOBAL DEFAULT 11 g_hash_table_remove_all + 906: 000000000003a394 64 FUNC GLOBAL DEFAULT 11 g_date_time_to_utc + 907: 00000000000633c8 64 FUNC GLOBAL DEFAULT 11 g_rand_new_with_seed_array + 908: 00000000000428b0 68 FUNC GLOBAL DEFAULT 11 g_io_channel_set_buffer_size + 909: 000000000001c700 96 FUNC GLOBAL DEFAULT 11 g_cache_destroy + 910: 000000000005e7ac 144 FUNC GLOBAL DEFAULT 11 g_option_context_add_main_entries + 911: 000000000005b1d8 260 FUNC GLOBAL DEFAULT 11 g_node_insert + 912: 000000000007a574 16 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_max_unused_threads + 913: 00000000000207b0 4 FUNC GLOBAL DEFAULT 11 g_byte_array_sort_with_data + 914: 000000000005a6d8 388 FUNC GLOBAL DEFAULT 11 g_node_insert_before + 915: 000000000005b410 200 FUNC GLOBAL DEFAULT 11 g_node_child_position + 916: 0000000000061680 8 FUNC GLOBAL DEFAULT 11 g_qsort_with_data + 917: 0000000000130bc0 0 NOTYPE GLOBAL DEFAULT 26 __bss_start__ + 918: 000000000001c760 232 FUNC GLOBAL DEFAULT 11 g_cache_insert + 919: 000000000003136c 488 FUNC GLOBAL DEFAULT 11 g_filename_from_uri + 920: 0000000000130790 4 OBJECT GLOBAL DEFAULT 24 glib_on_error_halt + 921: 0000000000033bdc 252 FUNC GLOBAL DEFAULT 11 g_date_set_time_t + 922: 00000000000707f4 36 FUNC GLOBAL DEFAULT 11 g_ascii_toupper + 923: 0000000000054508 88 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_element + 924: 0000000000056b2c 60 FUNC GLOBAL DEFAULT 11 g_try_realloc + 925: 0000000000036a20 164 FUNC GLOBAL DEFAULT 11 g_date_time_unref + 926: 000000000001c4d0 4 FUNC GLOBAL DEFAULT 11 g_list_push_allocator + 927: 0000000000071228 168 FUNC GLOBAL DEFAULT 11 g_strchomp + 928: 000000000001c994 80 FUNC GLOBAL DEFAULT 11 g_cache_value_foreach + 929: 000000000004515c 2444 FUNC GLOBAL DEFAULT 11 g_io_channel_write_chars + 930: 000000000007da40 256 FUNC GLOBAL DEFAULT 11 g_time_zone_is_dst + 931: 0000000000065db4 96 FUNC GLOBAL DEFAULT 11 g_regex_get_match_flags + 932: 0000000000075020 84 FUNC GLOBAL DEFAULT 11 g_test_timer_start + 933: 0000000000087308 212 FUNC GLOBAL DEFAULT 11 g_variant_new_objv + 934: 000000000003a354 64 FUNC GLOBAL DEFAULT 11 g_date_time_to_local + 935: 000000000008d174 388 FUNC GLOBAL DEFAULT 11 g_variant_dict_lookup + 936: 000000000006f7e4 4 FUNC GLOBAL DEFAULT 11 g_fopen + 937: 0000000000074fe4 28 FUNC GLOBAL DEFAULT 11 g_test_rand_int_range + 938: 000000000006ad34 92 FUNC GLOBAL DEFAULT 11 g_sequence_new + 939: 00000000000263a4 788 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_app_info + 940: 000000000006f39c 44 FUNC GLOBAL DEFAULT 11 g_slist_nth + 941: 0000000000052990 68 FUNC GLOBAL DEFAULT 11 g_mapped_file_unref + 942: 0000000000070c24 180 FUNC GLOBAL DEFAULT 11 g_strcanon + 943: 0000000000065ba4 84 FUNC GLOBAL DEFAULT 11 g_regex_get_pattern + 944: 000000000003390c 176 FUNC GLOBAL DEFAULT 11 g_date_is_first_of_month + 945: 000000000008cd6c 296 FUNC GLOBAL DEFAULT 11 g_variant_get_child + 946: 0000000000079168 56 FUNC GLOBAL DEFAULT 11 g_thread_error_quark + 947: 00000000000741bc 180 FUNC GLOBAL DEFAULT 11 g_string_append_printf + 948: 000000000003ede4 8 FUNC GLOBAL DEFAULT 11 g_hash_table_replace + 949: 00000000000216ec 200 FUNC GLOBAL DEFAULT 11 g_on_error_stack_trace + 950: 0000000000070418 288 FUNC GLOBAL DEFAULT 11 g_strlcat + 951: 000000000003b5d0 216 FUNC GLOBAL DEFAULT 11 g_propagate_prefixed_error + 952: 000000000004ad64 440 FUNC GLOBAL DEFAULT 11 g_key_file_get_integer_list + 953: 0000000000039054 108 FUNC GLOBAL DEFAULT 11 g_date_time_get_hour + 954: 000000000004fed0 156 FUNC GLOBAL DEFAULT 11 g_source_query_unix_fd + 955: 0000000000050118 204 FUNC GLOBAL DEFAULT 11 g_main_context_acquire + 956: 000000000001ff78 176 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_fast + 957: 000000000007ff9c 196 FUNC GLOBAL DEFAULT 11 g_unichar_ispunct + 958: 0000000000056cd8 24 FUNC GLOBAL DEFAULT 11 g_mem_set_vtable + 959: 000000000003ff3c 144 FUNC GLOBAL DEFAULT 11 g_compute_hmac_for_string + 960: 000000000005cf88 2352 FUNC GLOBAL DEFAULT 11 g_option_context_get_help + 961: 000000000001de18 32 FUNC GLOBAL DEFAULT 11 g_mutex_free + 962: 00000000000500d8 24 FUNC GLOBAL DEFAULT 11 g_main_depth + 963: 000000000006f0f0 136 FUNC GLOBAL DEFAULT 11 g_slist_remove_all + 964: 0000000000051cb0 164 FUNC GLOBAL DEFAULT 11 g_source_modify_unix_fd + 965: 00000000000779b0 264 FUNC GLOBAL DEFAULT 11 g_test_bug + 966: 00000000000220a4 240 FUNC GLOBAL DEFAULT 11 g_base64_decode + 967: 0000000000061e2c 88 FUNC GLOBAL DEFAULT 11 g_queue_reverse + 968: 0000000000051a04 140 FUNC GLOBAL DEFAULT 11 g_source_get_time + 969: 0000000000088448 20 FUNC GLOBAL DEFAULT 11 g_variant_is_container + 970: 000000000008a7a8 120 FUNC GLOBAL DEFAULT 11 g_variant_builder_unref + 971: 000000000006c2fc 32 FUNC GLOBAL DEFAULT 11 g_sequence_get_length + 972: 0000000000096998 108 FUNC GLOBAL DEFAULT 11 g_vprintf + 973: 000000000006f42c 132 FUNC GLOBAL DEFAULT 11 g_slist_find_custom + 974: 000000000004ee4c 88 FUNC GLOBAL DEFAULT 11 g_source_get_can_recurse + 975: 0000000000035820 364 FUNC GLOBAL DEFAULT 11 g_date_clamp + 976: 00000000000540bc 320 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_free + 977: 000000000004cbc8 196 FUNC GLOBAL DEFAULT 11 g_list_copy_deep + 978: 00000000000280a4 76 FUNC GLOBAL DEFAULT 11 g_get_codeset + 979: 000000000001c4bc 4 FUNC GLOBAL DEFAULT 11 g_mem_chunk_clean + 980: 0000000000046da0 56 FUNC GLOBAL DEFAULT 11 g_key_file_error_quark + 981: 000000000006f7f0 160 FUNC GLOBAL DEFAULT 11 g_close + 982: 0000000000081be4 120 FUNC GLOBAL DEFAULT 11 g_utf8_find_next_char + 983: 000000000003792c 428 FUNC GLOBAL DEFAULT 11 g_date_time_add_years + 984: 0000000000055c24 492 FUNC GLOBAL DEFAULT 11 g_markup_escape_text + 985: 00000000000617b8 96 FUNC GLOBAL DEFAULT 11 g_quark_try_string + 986: 0000000000020690 36 FUNC GLOBAL DEFAULT 11 g_byte_array_set_size + 987: 0000000000022360 96 FUNC GLOBAL DEFAULT 11 g_bit_unlock + 988: 0000000000022f84 52 FUNC GLOBAL DEFAULT 11 g_bookmark_file_free + 989: 0000000000062020 136 FUNC GLOBAL DEFAULT 11 g_queue_sort + 990: 0000000000062ec0 196 FUNC GLOBAL DEFAULT 11 g_queue_insert_sorted + 991: 000000000009a23c 416 FUNC GLOBAL DEFAULT 11 g_spawn_async_with_pipes + 992: 000000000005ab50 80 FUNC GLOBAL DEFAULT 11 g_node_reverse_children + 993: 00000000000266b8 336 FUNC GLOBAL DEFAULT 11 g_bookmark_file_add_application + 994: 0000000000062a88 132 FUNC GLOBAL DEFAULT 11 g_queue_pop_nth + 995: 000000000004fc70 40 FUNC GLOBAL DEFAULT 11 g_clear_handle_id + 996: 000000000003ced4 112 FUNC GLOBAL DEFAULT 11 g_path_skip_root + 997: 00000000000375b8 156 FUNC GLOBAL DEFAULT 11 g_date_time_difference + 998: 0000000000095ec0 160 FUNC GLOBAL DEFAULT 11 g_variant_type_first + 999: 0000000000065bf8 88 FUNC GLOBAL DEFAULT 11 g_regex_get_max_backref + 1000: 0000000000086f74 304 FUNC GLOBAL DEFAULT 11 g_variant_new_printf + 1001: 0000000000031870 236 FUNC GLOBAL DEFAULT 11 g_filename_display_name + 1002: 000000000007d93c 260 FUNC GLOBAL DEFAULT 11 g_time_zone_get_offset + 1003: 0000000000070cd8 608 FUNC GLOBAL DEFAULT 11 g_strcompress + 1004: 000000000004269c 196 FUNC GLOBAL DEFAULT 11 g_io_add_watch_full + 1005: 000000000008858c 88 FUNC GLOBAL DEFAULT 11 g_variant_classify + 1006: 0000000000030e60 176 FUNC GLOBAL DEFAULT 11 g_locale_to_utf8 + 1007: 000000000006f7a0 4 FUNC GLOBAL DEFAULT 11 g_creat + 1008: 000000000004c8e0 240 FUNC GLOBAL DEFAULT 11 g_list_remove + 1009: 000000000001c430 84 FUNC GLOBAL DEFAULT 11 g_mem_chunk_alloc0 + 1010: 000000000003aac8 292 FUNC GLOBAL DEFAULT 11 g_environ_unsetenv + 1011: 000000000006b904 476 FUNC GLOBAL DEFAULT 11 g_sequence_sort_changed_iter + 1012: 0000000000081ec0 156 FUNC GLOBAL DEFAULT 11 g_utf8_offset_to_pointer + 1013: 0000000000061d38 84 FUNC GLOBAL DEFAULT 11 g_queue_clear + 1014: 0000000000020e30 116 FUNC GLOBAL DEFAULT 11 g_async_queue_try_pop + 1015: 0000000000034320 168 FUNC GLOBAL DEFAULT 11 g_date_get_julian + 1016: 000000000004c71c 8 FUNC GLOBAL DEFAULT 11 g_list_alloc + 1017: 0000000000033fd0 208 FUNC GLOBAL DEFAULT 11 g_date_set_dmy + 1018: 0000000000030f10 176 FUNC GLOBAL DEFAULT 11 g_locale_from_utf8 + 1019: 0000000000077f7c 232 FUNC GLOBAL DEFAULT 11 g_test_run_suite + 1020: 0000000000081b00 76 FUNC GLOBAL DEFAULT 11 g_unicode_script_from_iso15924 + 1021: 000000000001e53c 180 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_reader_unlock + 1022: 0000000000040dfc 308 FUNC GLOBAL DEFAULT 11 g_hook_find + 1023: 000000000005b2dc 112 FUNC GLOBAL DEFAULT 11 g_node_n_children + 1024: 000000000001f1d0 260 FUNC GLOBAL DEFAULT 11 g_array_insert_vals + 1025: 000000000001f2d4 352 FUNC GLOBAL DEFAULT 11 g_array_remove_index + 1026: 000000000006b598 728 FUNC GLOBAL DEFAULT 11 g_sequence_move_range + 1027: 00000000000804a4 248 FUNC GLOBAL DEFAULT 11 g_unichar_iszerowidth + 1028: 000000000009559c 4 FUNC GLOBAL DEFAULT 11 g_variant_type_free + 1029: 000000000001e474 200 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_reader_trylock + 1030: 000000000006258c 136 FUNC GLOBAL DEFAULT 11 g_queue_pop_tail + 1031: 00000000000280f0 120 FUNC GLOBAL DEFAULT 11 g_get_locale_variants + 1032: 000000000003a6d4 148 FUNC GLOBAL DEFAULT 11 g_dir_read_name + 1033: 000000000008eb10 252 FUNC GLOBAL DEFAULT 11 g_variant_is_normal_form + 1034: 000000000001e07c 4 FUNC GLOBAL DEFAULT 11 g_once_init_enter_impl + 1035: 0000000000021d84 324 FUNC GLOBAL DEFAULT 11 g_base64_encode + 1036: 0000000000075a58 576 FUNC GLOBAL DEFAULT 11 g_test_trap_fork + 1037: 000000000004cc8c 12 FUNC GLOBAL DEFAULT 11 g_list_copy + 1038: 000000000003cf44 404 FUNC GLOBAL DEFAULT 11 g_mkdir_with_parents + 1039: 000000000007862c 316 FUNC GLOBAL DEFAULT 11 g_assertion_message_cmpnum + 1040: 000000000004ccbc 44 FUNC GLOBAL DEFAULT 11 g_list_nth + 1041: 000000000004d05c 40 FUNC GLOBAL DEFAULT 11 g_list_free_full + 1042: 000000000003f4e8 84 FUNC GLOBAL DEFAULT 11 g_hash_table_size + 1043: 000000000004ed74 72 FUNC GLOBAL DEFAULT 11 g_source_get_ready_time + 1044: 000000000002508c 176 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_description + 1045: 000000000004e900 156 FUNC GLOBAL DEFAULT 11 g_source_set_callback + 1046: 000000000001c4cc 4 FUNC GLOBAL DEFAULT 11 g_blow_chunks + 1047: 000000000005b4d8 112 FUNC GLOBAL DEFAULT 11 g_node_child_index + 1048: 00000000000974cc 36 FUNC GLOBAL DEFAULT 11 g_rec_mutex_init + 1049: 000000000006f6a0 72 FUNC GLOBAL DEFAULT 11 g_slist_foreach + 1050: 000000000004ce84 24 FUNC GLOBAL DEFAULT 11 g_list_last + 1051: 000000000007581c 140 FUNC GLOBAL DEFAULT 11 g_test_add_func + 1052: 00000000000871c8 108 FUNC GLOBAL DEFAULT 11 g_variant_new_signature + 1053: 00000000000899d4 304 FUNC GLOBAL DEFAULT 11 g_variant_hash + 1054: 000000000008d2f8 184 FUNC GLOBAL DEFAULT 11 g_variant_dict_lookup_value + 1055: 000000000006f4b0 64 FUNC GLOBAL DEFAULT 11 g_slist_position + 1056: 000000000003a794 84 FUNC GLOBAL DEFAULT 11 g_dir_close + 1057: 0000000000086920 268 FUNC GLOBAL DEFAULT 11 g_uuid_string_is_valid + 1058: 0000000000083980 216 FUNC GLOBAL DEFAULT 11 g_utf8_collate + 1059: 0000000000063f38 92 FUNC GLOBAL DEFAULT 11 g_match_info_matches + 1060: 00000000000881d8 100 FUNC GLOBAL DEFAULT 11 g_variant_dup_bytestring + 1061: 0000000000075390 228 FUNC GLOBAL DEFAULT 11 g_test_create_suite + 1062: 0000000000092520 164 FUNC GLOBAL DEFAULT 11 g_variant_new_parsed + 1063: 0000000000027908 200 FUNC GLOBAL DEFAULT 11 g_bytes_compare + 1064: 0000000000062464 128 FUNC GLOBAL DEFAULT 11 g_queue_pop_head_link + 1065: 0000000000020090 332 FUNC GLOBAL DEFAULT 11 g_ptr_array_insert + 1066: 000000000004b614 168 FUNC GLOBAL DEFAULT 11 g_key_file_set_comment + 1067: 00000000000332cc 96 FUNC GLOBAL DEFAULT 11 g_date_valid + 1068: 000000000007f6c0 168 FUNC GLOBAL DEFAULT 11 g_tree_height + 1069: 000000000004a334 184 FUNC GLOBAL DEFAULT 11 g_key_file_set_boolean + 1070: 000000000006f7ec 4 FUNC GLOBAL DEFAULT 11 g_utime + 1071: 00000000000502a0 176 FUNC GLOBAL DEFAULT 11 g_main_context_release + 1072: 000000000001e794 180 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_writer_unlock + 1073: 000000000007d814 296 FUNC GLOBAL DEFAULT 11 g_time_zone_get_abbreviation + 1074: 000000000004cf94 68 FUNC GLOBAL DEFAULT 11 g_list_concat + 1075: 000000000006c100 124 FUNC GLOBAL DEFAULT 11 g_sequence_iter_get_sequence + 1076: 00000000000975ec 36 FUNC GLOBAL DEFAULT 11 g_rw_lock_init + 1077: 000000000003e954 104 FUNC GLOBAL DEFAULT 11 g_hash_table_ref + 1078: 000000000005094c 280 FUNC GLOBAL DEFAULT 11 g_main_context_query + 1079: 000000000004441c 84 FUNC GLOBAL DEFAULT 11 g_io_channel_get_encoding + 1080: 000000000007f5f8 200 FUNC GLOBAL DEFAULT 11 g_tree_search + 1081: 000000000005e418 596 FUNC GLOBAL DEFAULT 11 g_option_group_add_entries + 1082: 0000000000031554 420 FUNC GLOBAL DEFAULT 11 g_filename_to_uri + 1083: 0000000000042f8c 404 FUNC GLOBAL DEFAULT 11 g_io_channel_shutdown + 1084: 000000000003f848 20 FUNC GLOBAL DEFAULT 11 g_double_equal + 1085: 0000000000098970 204 FUNC GLOBAL DEFAULT 11 g_io_channel_unix_new + 1086: 0000000000039474 124 FUNC GLOBAL DEFAULT 11 g_date_time_to_timeval + 1087: 000000000004320c 676 FUNC GLOBAL DEFAULT 11 g_io_channel_seek_position + 1088: 0000000000080618 112 FUNC GLOBAL DEFAULT 11 g_unichar_iswide_cjk + 1089: 000000000003f810 20 FUNC GLOBAL DEFAULT 11 g_int_equal + 1090: 0000000000069a84 2764 FUNC GLOBAL DEFAULT 11 g_scanner_unexp_token + 1091: 000000000005cec4 112 FUNC GLOBAL DEFAULT 11 g_option_context_set_main_group + 1092: 000000000001cfa0 8 FUNC GLOBAL DEFAULT 11 g_completion_set_compare + 1093: 000000000004898c 80 FUNC GLOBAL DEFAULT 11 g_key_file_free + 1094: 0000000000057dfc 220 FUNC GLOBAL DEFAULT 11 g_log_default_handler + 1095: 000000000001e260 80 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_lock_full + 1096: 000000000003edec 12 FUNC GLOBAL DEFAULT 11 g_hash_table_add + 1097: 0000000000061a54 48 FUNC GLOBAL DEFAULT 11 g_quark_to_string + 1098: 000000000005ca98 196 FUNC GLOBAL DEFAULT 11 g_option_context_free + 1099: 0000000000063ed4 100 FUNC GLOBAL DEFAULT 11 g_match_info_ref + 1100: 0000000000036f44 60 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_timeval_local + 1101: 000000000009a774 4 FUNC GLOBAL DEFAULT 11 g_spawn_close_pid + 1102: 0000000000059b90 384 FUNC GLOBAL DEFAULT 11 g_print + 1103: 00000000000752e0 72 FUNC GLOBAL DEFAULT 11 g_test_skip + 1104: 0000000000049a78 448 FUNC GLOBAL DEFAULT 11 g_key_file_get_locale_string + 1105: 0000000000032158 332 FUNC GLOBAL DEFAULT 11 g_datalist_id_remove_no_notify + 1106: 00000000000777ec 232 FUNC GLOBAL DEFAULT 11 g_test_maximized_result + 1107: 000000000001cee4 108 FUNC GLOBAL DEFAULT 11 g_completion_complete_utf8 + 1108: 00000000000960d0 148 FUNC GLOBAL DEFAULT 11 g_variant_type_value + 1109: 0000000000052b48 84 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_length + 1110: 000000000002168c 24 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_and + 1111: 00000000000875ec 240 FUNC GLOBAL DEFAULT 11 g_variant_new_tuple + 1112: 0000000000070538 52 FUNC GLOBAL DEFAULT 11 g_str_is_ascii + 1113: 000000000005cb90 88 FUNC GLOBAL DEFAULT 11 g_option_context_get_help_enabled + 1114: 000000000004b6bc 792 FUNC GLOBAL DEFAULT 11 g_key_file_get_comment + 1115: 00000000000311d8 224 FUNC GLOBAL DEFAULT 11 g_filename_to_utf8 + 1116: 00000000000639cc 108 FUNC GLOBAL DEFAULT 11 g_random_double_range + 1117: 000000000004a198 412 FUNC GLOBAL DEFAULT 11 g_key_file_get_boolean + 1118: 0000000000020644 4 FUNC GLOBAL DEFAULT 11 g_byte_array_unref + 1119: 000000000004cdfc 64 FUNC GLOBAL DEFAULT 11 g_list_position + 1120: 00000000000425e0 96 FUNC GLOBAL DEFAULT 11 g_io_channel_ref + 1121: 0000000000056b68 84 FUNC GLOBAL DEFAULT 11 g_malloc_n + 1122: 000000000008d088 76 FUNC GLOBAL DEFAULT 11 g_variant_dict_new + 1123: 000000000006c394 120 FUNC GLOBAL DEFAULT 11 g_sequence_get_begin_iter + 1124: 000000000006f7c4 20 FUNC GLOBAL DEFAULT 11 g_lstat + 1125: 000000000005cb5c 52 FUNC GLOBAL DEFAULT 11 g_option_context_set_help_enabled + 1126: 000000000008814c 140 FUNC GLOBAL DEFAULT 11 g_variant_get_bytestring + 1127: 0000000000021418 148 FUNC GLOBAL DEFAULT 11 g_async_queue_push_front_unlocked + 1128: 0000000000084af8 68 FUNC GLOBAL DEFAULT 11 g_utf8_normalize + 1129: 000000000003b2f4 260 FUNC GLOBAL DEFAULT 11 g_set_error + 1130: 000000000007f370 84 FUNC GLOBAL DEFAULT 11 g_tree_steal + 1131: 000000000006445c 164 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_named_pos + 1132: 00000000000755e4 568 FUNC GLOBAL DEFAULT 11 g_test_add_vtable + 1133: 000000000004ce3c 72 FUNC GLOBAL DEFAULT 11 g_list_index + 1134: 000000000001df08 4 FUNC GLOBAL DEFAULT 11 g_thread_set_priority + 1135: 0000000000070904 236 FUNC GLOBAL DEFAULT 11 g_ascii_strcasecmp + 1136: 0000000000024cd8 356 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_uris + 1137: 000000000009782c 108 FUNC GLOBAL DEFAULT 11 g_rw_lock_reader_trylock + 1138: 00000000000742e8 104 FUNC GLOBAL DEFAULT 11 g_string_chunk_free + 1139: 000000000006ef2c 52 FUNC GLOBAL DEFAULT 11 g_slist_prepend + 1140: 000000000008a5e8 76 FUNC GLOBAL DEFAULT 11 g_variant_builder_new + 1141: 0000000000063e80 84 FUNC GLOBAL DEFAULT 11 g_match_info_get_string + 1142: 000000000003758c 16 FUNC GLOBAL DEFAULT 11 g_date_time_add_minutes + 1143: 0000000000022f30 84 FUNC GLOBAL DEFAULT 11 g_bookmark_file_new + 1144: 0000000000041138 616 FUNC GLOBAL DEFAULT 11 g_hook_insert_sorted + 1145: 0000000000097950 124 FUNC GLOBAL DEFAULT 11 g_private_set + 1146: 0000000000059b44 76 FUNC GLOBAL DEFAULT 11 g_set_print_handler + 1147: 0000000000061d04 52 FUNC GLOBAL DEFAULT 11 g_queue_init + 1148: 0000000000095708 104 FUNC GLOBAL DEFAULT 11 g_variant_type_dup_string + 1149: 0000000000073b68 112 FUNC GLOBAL DEFAULT 11 g_string_overwrite + 1150: 0000000000096164 644 FUNC GLOBAL DEFAULT 11 g_variant_type_new_tuple + 1151: 0000000000097e60 76 FUNC GLOBAL DEFAULT 11 g_cond_wait + 1152: 00000000000630f4 296 FUNC GLOBAL DEFAULT 11 g_rand_set_seed + 1153: 0000000000031c94 788 FUNC GLOBAL DEFAULT 11 g_datalist_id_set_data_full + 1154: 0000000000041070 200 FUNC GLOBAL DEFAULT 11 g_hook_find_func_data + 1155: 0000000000064e0c 384 FUNC GLOBAL DEFAULT 11 g_match_info_expand_references + 1156: 0000000000043f6c 180 FUNC GLOBAL DEFAULT 11 g_io_channel_set_buffered + 1157: 000000000008c978 280 FUNC GLOBAL DEFAULT 11 g_variant_get_va + 1158: 000000000003c5b4 1004 FUNC GLOBAL DEFAULT 11 g_file_set_contents + 1159: 0000000000075d38 600 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_push + 1160: 00000000000878a4 112 FUNC GLOBAL DEFAULT 11 g_variant_get_uint16 + 1161: 00000000000743d0 292 FUNC GLOBAL DEFAULT 11 g_string_chunk_insert_len + 1162: 00000000000709f0 288 FUNC GLOBAL DEFAULT 11 g_ascii_strncasecmp + 1163: 00000000000831c0 452 FUNC GLOBAL DEFAULT 11 g_ucs4_to_utf16 + 1164: 0000000000095338 76 FUNC GLOBAL DEFAULT 11 g_variant_type_info_assert_no_infos + 1165: 0000000000052bf0 4 FUNC GLOBAL DEFAULT 11 g_mapped_file_free + 1166: 000000000004bc24 264 FUNC GLOBAL DEFAULT 11 g_key_file_remove_group + 1167: 0000000000049c38 436 FUNC GLOBAL DEFAULT 11 g_key_file_get_locale_for_key + 1168: 000000000007f31c 84 FUNC GLOBAL DEFAULT 11 g_tree_remove + 1169: 000000000002f17c 76 FUNC GLOBAL DEFAULT 11 g_checksum_new + 1170: 00000000000490b8 400 FUNC GLOBAL DEFAULT 11 g_key_file_set_value + 1171: 00000000000783ac 640 FUNC GLOBAL DEFAULT 11 g_test_trap_subprocess + 1172: 000000000003b508 200 FUNC GLOBAL DEFAULT 11 g_prefix_error + 1173: 000000000006637c 128 FUNC GLOBAL DEFAULT 11 g_regex_get_string_number + 1174: 0000000000079400 24 FUNC GLOBAL DEFAULT 11 g_thread_ref + 1175: 0000000000097200 128 FUNC GLOBAL DEFAULT 11 g_unix_signal_add_full + 1176: 0000000000061dd8 84 FUNC GLOBAL DEFAULT 11 g_queue_get_length + 1177: 000000000004cd14 72 FUNC GLOBAL DEFAULT 11 g_list_nth_data + 1178: 0000000000045c94 56 FUNC GLOBAL DEFAULT 11 g_io_channel_error_quark + 1179: 0000000000026808 276 FUNC GLOBAL DEFAULT 11 g_bookmark_file_remove_application + 1180: 000000000004f61c 472 FUNC GLOBAL DEFAULT 11 g_source_add_child_source + 1181: 000000000001ea78 88 FUNC GLOBAL DEFAULT 11 g_static_private_free + 1182: 0000000000058304 524 FUNC GLOBAL DEFAULT 11 g_log_structured_standard + 1183: 0000000000075340 80 FUNC GLOBAL DEFAULT 11 g_test_set_nonfatal_assertions + 1184: 00000000000724d0 188 FUNC GLOBAL DEFAULT 11 g_strv_contains + 1185: 00000000000428f4 84 FUNC GLOBAL DEFAULT 11 g_io_channel_get_buffer_size + 1186: 0000000000088aa4 264 FUNC GLOBAL DEFAULT 11 g_variant_get_objv + 1187: 000000000003518c 224 FUNC GLOBAL DEFAULT 11 g_date_get_days_in_month + 1188: 000000000002229c 164 FUNC GLOBAL DEFAULT 11 g_bit_lock + 1189: 000000000001f9c8 104 FUNC GLOBAL DEFAULT 11 g_ptr_array_ref + 1190: 000000000005b15c 124 FUNC GLOBAL DEFAULT 11 g_node_nth_child + 1191: 000000000001f0e4 236 FUNC GLOBAL DEFAULT 11 g_array_prepend_vals + 1192: 00000000000624e4 84 FUNC GLOBAL DEFAULT 11 g_queue_peek_head_link + 1193: 000000000004fa64 244 FUNC GLOBAL DEFAULT 11 g_main_context_find_source_by_user_data + 1194: 00000000000206d8 36 FUNC GLOBAL DEFAULT 11 g_byte_array_remove_index_fast + 1195: 0000000000059d10 76 FUNC GLOBAL DEFAULT 11 g_set_printerr_handler + 1196: 000000000008c868 272 FUNC GLOBAL DEFAULT 11 g_variant_new + 1197: 000000000003fdbc 156 FUNC GLOBAL DEFAULT 11 g_compute_hmac_for_data + 1198: 00000000000348dc 300 FUNC GLOBAL DEFAULT 11 g_date_get_monday_week_of_year + 1199: 00000000000522d4 24 FUNC GLOBAL DEFAULT 11 g_main_context_invoke + 1200: 00000000000855f4 28 FUNC GLOBAL DEFAULT 11 g_bit_storage + 1201: 000000000006bdbc 204 FUNC GLOBAL DEFAULT 11 g_sequence_search_iter + 1202: 000000000001d768 128 FUNC GLOBAL DEFAULT 11 g_relation_count + 1203: 000000000005b058 100 FUNC GLOBAL DEFAULT 11 g_node_copy + 1204: 000000000006d0b4 1544 FUNC GLOBAL DEFAULT 11 g_shell_parse_argv + 1205: 0000000000020ae0 40 FUNC GLOBAL DEFAULT 11 g_async_queue_lock + 1206: 000000000004ba54 152 FUNC GLOBAL DEFAULT 11 g_key_file_has_group + 1207: 000000000009a54c 208 FUNC GLOBAL DEFAULT 11 g_spawn_command_line_async + 1208: 0000000000020028 104 FUNC GLOBAL DEFAULT 11 g_ptr_array_add + 1209: 000000000004e814 236 FUNC GLOBAL DEFAULT 11 g_source_set_callback_indirect + 1210: 0000000000052190 16 FUNC GLOBAL DEFAULT 11 g_idle_remove_by_data + 1211: 0000000000057894 96 FUNC GLOBAL DEFAULT 11 g_log_set_default_handler + 1212: 000000000007510c 376 FUNC GLOBAL DEFAULT 11 g_test_create_case + 1213: 000000000002021c 64 FUNC GLOBAL DEFAULT 11 g_ptr_array_sort_with_data + 1214: 0000000000085578 68 FUNC GLOBAL DEFAULT 11 g_bit_nth_lsf + 1215: 000000000006306c 36 FUNC GLOBAL DEFAULT 11 g_rand_free + 1216: 0000000000075a40 24 FUNC GLOBAL DEFAULT 11 g_test_queue_free + 1217: 0000000000083c9c 688 FUNC GLOBAL DEFAULT 11 g_utf8_collate_key_for_filename + 1218: 000000000001e1c4 48 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_lock + 1219: 0000000000073a28 320 FUNC GLOBAL DEFAULT 11 g_string_overwrite_len + 1220: 0000000000095508 148 FUNC GLOBAL DEFAULT 11 g_variant_type_string_is_valid + 1221: 0000000000072d6c 120 FUNC GLOBAL DEFAULT 11 g_string_equal + 1222: 000000000006f7e8 4 FUNC GLOBAL DEFAULT 11 g_freopen + 1223: 000000000005a5dc 40 FUNC GLOBAL DEFAULT 11 g_node_new + 1224: 000000000005e744 104 FUNC GLOBAL DEFAULT 11 g_option_group_set_translation_domain + 1225: 000000000006fab0 72 FUNC GLOBAL DEFAULT 11 g_strdup + 1226: 000000000006c944 80 FUNC GLOBAL DEFAULT 11 g_sequence_iter_prev + 1227: 000000000006390c 108 FUNC GLOBAL DEFAULT 11 g_random_int_range + 1228: 00000000000274f0 96 FUNC GLOBAL DEFAULT 11 g_bytes_get_data + 1229: 000000000005a668 112 FUNC GLOBAL DEFAULT 11 g_node_destroy + 1230: 000000000008fb60 56 FUNC GLOBAL DEFAULT 11 g_variant_parse_error_quark + 1231: 000000000004fdcc 260 FUNC GLOBAL DEFAULT 11 g_source_remove_unix_fd + 1232: 0000000000035d2c 1636 FUNC GLOBAL DEFAULT 11 g_date_set_parse + 1233: 000000000003e7c4 84 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_get_hash_table + 1234: 000000000004e99c 160 FUNC GLOBAL DEFAULT 11 g_source_set_funcs + 1235: 0000000000087b3c 116 FUNC GLOBAL DEFAULT 11 g_variant_get_double + 1236: 000000000004eaf4 84 FUNC GLOBAL DEFAULT 11 g_source_get_priority + 1237: 000000000005e8b8 104 FUNC GLOBAL DEFAULT 11 g_option_context_set_translation_domain + 1238: 0000000000020f54 52 FUNC GLOBAL DEFAULT 11 g_async_queue_timeout_pop_unlocked + 1239: 000000000001d7e8 328 FUNC GLOBAL DEFAULT 11 g_relation_select + 1240: 00000000000569c4 104 FUNC GLOBAL DEFAULT 11 g_malloc0 + 1241: 0000000000070744 36 FUNC GLOBAL DEFAULT 11 g_ascii_tolower + 1242: 000000000007e36c 8 FUNC GLOBAL DEFAULT 11 g_trash_stack_peek + 1243: 0000000000073288 92 FUNC GLOBAL DEFAULT 11 g_string_new_len + 1244: 000000000007c950 28 FUNC GLOBAL DEFAULT 11 g_time_zone_new_local + 1245: 0000000000062538 84 FUNC GLOBAL DEFAULT 11 g_queue_peek_tail_link + 1246: 000000000001c4e0 4 FUNC GLOBAL DEFAULT 11 g_node_push_allocator + 1247: 0000000000021648 8 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_get + 1248: 0000000000052bf4 104 FUNC GLOBAL DEFAULT 11 g_mapped_file_ref + 1249: 0000000000038eb0 112 FUNC GLOBAL DEFAULT 11 g_date_time_get_day_of_week + 1250: 00000000000513d4 164 FUNC GLOBAL DEFAULT 11 g_main_loop_ref + 1251: 0000000000034710 216 FUNC GLOBAL DEFAULT 11 g_date_subtract_days + 1252: 0000000000075000 16 FUNC GLOBAL DEFAULT 11 g_test_rand_double + 1253: 000000000004c734 12 FUNC GLOBAL DEFAULT 11 g_list_free_1 + 1254: 0000000000032ecc 100 FUNC GLOBAL DEFAULT 11 g_datalist_set_flags + 1255: 000000000006f36c 12 FUNC GLOBAL DEFAULT 11 g_slist_copy + 1256: 0000000000033ce8 264 FUNC GLOBAL DEFAULT 11 g_date_set_month + 1257: 000000000005a604 100 FUNC GLOBAL DEFAULT 11 g_node_unlink + 1258: 0000000000098640 816 FUNC GLOBAL DEFAULT 11 g_io_channel_new_file + 1259: 0000000000067818 612 FUNC GLOBAL DEFAULT 11 g_scanner_new + 1260: 000000000001e060 28 FUNC GLOBAL DEFAULT 11 g_thread_create + 1261: 000000000012fae8 8 OBJECT GLOBAL DEFAULT 20 g_ascii_table + 1262: 00000000000215e8 24 FUNC GLOBAL DEFAULT 11 g_atomic_int_add + 1263: 0000000000073310 256 FUNC GLOBAL DEFAULT 11 g_string_insert_c + 1264: 000000000003da00 4 FUNC GLOBAL DEFAULT 11 g_direct_hash + 1265: 000000000005e66c 48 FUNC GLOBAL DEFAULT 11 g_option_group_set_parse_hooks + 1266: 0000000000130908 48 OBJECT GLOBAL DEFAULT 24 g_idle_funcs + 1267: 00000000000203b0 120 FUNC GLOBAL DEFAULT 11 g_ptr_array_free + 1268: 0000000000065224 12 FUNC GLOBAL DEFAULT 11 g_match_info_free + 1269: 0000000000056cac 36 FUNC GLOBAL DEFAULT 11 g_try_realloc_n + 1270: 0000000000085c00 152 FUNC GLOBAL DEFAULT 11 g_get_host_name + 1271: 00000000000215b0 28 FUNC GLOBAL DEFAULT 11 g_atomic_int_dec_and_test + 1272: 000000000001ddec 44 FUNC GLOBAL DEFAULT 11 g_mutex_new + 1273: 000000000002721c 316 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_icon + 1274: 000000000001e5f0 236 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_writer_lock + 1275: 000000000007f3c4 92 FUNC GLOBAL DEFAULT 11 g_tree_lookup + 1276: 000000000003a32c 40 FUNC GLOBAL DEFAULT 11 g_date_time_to_timezone + 1277: 000000000003bc88 36 FUNC GLOBAL DEFAULT 11 g_file_error_from_errno + 1278: 0000000000067ed0 528 FUNC GLOBAL DEFAULT 11 g_scanner_lookup_symbol + 1279: 00000000000951e0 344 FUNC GLOBAL DEFAULT 11 g_variant_type_info_unref + 1280: 000000000002091c 104 FUNC GLOBAL DEFAULT 11 g_async_queue_ref + 1281: 000000000006ca94 244 FUNC GLOBAL DEFAULT 11 g_sequence_swap + 1282: 000000000004cb08 192 FUNC GLOBAL DEFAULT 11 g_list_delete_link + 1283: 0000000000084f38 12 FUNC GLOBAL DEFAULT 11 g_uri_unescape_string + 1284: 000000000006f538 24 FUNC GLOBAL DEFAULT 11 g_slist_last + 1285: 000000000006c7c4 148 FUNC GLOBAL DEFAULT 11 g_sequence_iter_is_end + 1286: 000000000003ca74 164 FUNC GLOBAL DEFAULT 11 g_dir_make_tmp + 1287: 0000000000085628 24 FUNC GLOBAL DEFAULT 11 g_get_real_name + 1288: 0000000000094cb4 148 FUNC GLOBAL DEFAULT 11 g_variant_type_info_ref + 1289: 00000000000303cc 776 FUNC GLOBAL DEFAULT 11 g_convert_with_iconv + 1290: 000000000008a008 124 FUNC GLOBAL DEFAULT 11 g_variant_iter_free + 1291: 000000000001f998 48 FUNC GLOBAL DEFAULT 11 g_ptr_array_new_full + 1292: 0000000000061d8c 76 FUNC GLOBAL DEFAULT 11 g_queue_is_empty + 1293: 0000000000033364 16 FUNC GLOBAL DEFAULT 11 g_date_valid_weekday + 1294: 0000000000087984 112 FUNC GLOBAL DEFAULT 11 g_variant_get_uint32 + 1295: 000000000007f144 88 FUNC GLOBAL DEFAULT 11 g_tree_new_with_data + 1296: 0000000000075074 80 FUNC GLOBAL DEFAULT 11 g_test_timer_elapsed + 1297: 000000000004b240 164 FUNC GLOBAL DEFAULT 11 g_key_file_set_double + 1298: 00000000000326d8 208 FUNC GLOBAL DEFAULT 11 g_datalist_get_data + 1299: 000000000005f2ec 6324 FUNC GLOBAL DEFAULT 11 g_pattern_match + 1300: 0000000000097e5c 4 FUNC GLOBAL DEFAULT 11 g_cond_clear + 1301: 0000000000094be0 40 FUNC GLOBAL DEFAULT 11 g_variant_type_info_element + 1302: 00000000000972a0 80 FUNC GLOBAL DEFAULT 11 g_unix_fd_source_new + 1303: 0000000000066028 24 FUNC GLOBAL DEFAULT 11 g_regex_match + 1304: 000000000006dfc0 128 FUNC GLOBAL DEFAULT 11 g_slice_get_config + 1305: 0000000000022340 32 FUNC GLOBAL DEFAULT 11 g_bit_trylock + 1306: 00000000000863bc 704 FUNC GLOBAL DEFAULT 11 g_format_size_full + 1307: 0000000000087100 108 FUNC GLOBAL DEFAULT 11 g_variant_new_object_path + 1308: 00000000000212fc 116 FUNC GLOBAL DEFAULT 11 g_async_queue_remove_unlocked + 1309: 0000000000063a38 116 FUNC GLOBAL DEFAULT 11 g_random_set_seed + 1310: 000000000004cd5c 28 FUNC GLOBAL DEFAULT 11 g_list_find + 1311: 0000000000058fd4 144 FUNC GLOBAL DEFAULT 11 g_log_set_writer_func + 1312: 000000000001dff4 108 FUNC GLOBAL DEFAULT 11 g_thread_create_full + 1313: 00000000000855bc 56 FUNC GLOBAL DEFAULT 11 g_bit_nth_msf + 1314: 0000000000078db4 240 FUNC GLOBAL DEFAULT 11 g_test_build_filename + 1315: 0000000000095be4 268 FUNC GLOBAL DEFAULT 11 g_variant_type_equal + 1316: 00000000000838e0 160 FUNC GLOBAL DEFAULT 11 g_unichar_break_type + 1317: 00000000000545fc 108 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_push + 1318: 0000000000096ff0 276 FUNC GLOBAL DEFAULT 11 g_unix_open_pipe + 1319: 000000000001e130 88 FUNC GLOBAL DEFAULT 11 g_static_mutex_free + 1320: 0000000000071178 176 FUNC GLOBAL DEFAULT 11 g_strchug + 1321: 0000000000089c24 640 FUNC GLOBAL DEFAULT 11 g_variant_compare + 1322: 00000000000209c0 208 FUNC GLOBAL DEFAULT 11 g_async_queue_unref + 1323: 0000000000092220 4 FUNC GLOBAL DEFAULT 11 g_variant_parser_get_error_quark + 1324: 0000000000080688 448 FUNC GLOBAL DEFAULT 11 g_unichar_toupper + 1325: 0000000000084340 436 FUNC GLOBAL DEFAULT 11 g_unicode_canonical_ordering + 1326: 000000000004e254 260 FUNC GLOBAL DEFAULT 11 g_main_context_new + 1327: 00000000000217b4 484 FUNC GLOBAL DEFAULT 11 g_on_error_query + 1328: 0000000000078ea4 160 FUNC GLOBAL DEFAULT 11 g_test_get_dir + 1329: 0000000000034dcc 432 FUNC GLOBAL DEFAULT 11 g_date_subtract_months + 1330: 0000000000022ef8 56 FUNC GLOBAL DEFAULT 11 g_bookmark_file_error_quark + 1331: 000000000003afac 272 FUNC GLOBAL DEFAULT 11 g_error_new + 1332: 0000000000058bf4 8 FUNC GLOBAL DEFAULT 11 g_log_set_handler + 1333: 000000000003f82c 20 FUNC GLOBAL DEFAULT 11 g_int64_equal + 1334: 0000000000080214 188 FUNC GLOBAL DEFAULT 11 g_unichar_isupper + 1335: 0000000000061fac 116 FUNC GLOBAL DEFAULT 11 g_queue_find_custom + 1336: 0000000000067b5c 512 FUNC GLOBAL DEFAULT 11 g_scanner_scope_add_symbol + 1337: 0000000000051278 88 FUNC GLOBAL DEFAULT 11 g_main_context_pending + 1338: 0000000000087d20 112 FUNC GLOBAL DEFAULT 11 g_variant_get_maybe + 1339: 0000000000075cd0 52 FUNC GLOBAL DEFAULT 11 g_test_trap_reached_timeout + 1340: 0000000000071944 552 FUNC GLOBAL DEFAULT 11 g_strjoin + 1341: 000000000004ce9c 96 FUNC GLOBAL DEFAULT 11 g_list_append + 1342: 0000000000056968 92 FUNC GLOBAL DEFAULT 11 g_malloc + 1343: 00000000000706a4 160 FUNC GLOBAL DEFAULT 11 g_strreverse + 1344: 00000000000516b0 176 FUNC GLOBAL DEFAULT 11 g_main_loop_quit + 1345: 0000000000082530 656 FUNC GLOBAL DEFAULT 11 g_utf8_to_ucs4 + 1346: 0000000000094c68 76 FUNC GLOBAL DEFAULT 11 g_variant_type_info_member_info + 1347: 00000000000332a8 36 FUNC GLOBAL DEFAULT 11 g_date_free + 1348: 000000000005b34c 196 FUNC GLOBAL DEFAULT 11 g_node_find_child + 1349: 00000000000663fc 1032 FUNC GLOBAL DEFAULT 11 g_regex_split_full + 1350: 00000000000645c8 56 FUNC GLOBAL DEFAULT 11 g_regex_error_quark + 1351: 0000000000072e88 128 FUNC GLOBAL DEFAULT 11 g_string_set_size + 1352: 0000000000084ff8 144 FUNC GLOBAL DEFAULT 11 g_uri_escape_string + 1353: 00000000000354ec 528 FUNC GLOBAL DEFAULT 11 g_date_compare + 1354: 00000000000306d4 352 FUNC GLOBAL DEFAULT 11 g_convert + 1355: 000000000003b3f8 92 FUNC GLOBAL DEFAULT 11 g_set_error_literal + 1356: 000000000001c4c4 4 FUNC GLOBAL DEFAULT 11 g_mem_chunk_print + 1357: 000000000001c848 252 FUNC GLOBAL DEFAULT 11 g_cache_remove + 1358: 000000000004e434 204 FUNC GLOBAL DEFAULT 11 g_source_new + 1359: 00000000000312b8 180 FUNC GLOBAL DEFAULT 11 g_filename_from_utf8 + 1360: 0000000000036dd4 52 FUNC GLOBAL DEFAULT 11 g_date_time_new_now_local + 1361: 000000000003598c 168 FUNC GLOBAL DEFAULT 11 g_date_order + 1362: 000000000004aae0 136 FUNC GLOBAL DEFAULT 11 g_key_file_set_int64 + 1363: 0000000000085edc 96 FUNC GLOBAL DEFAULT 11 g_get_user_config_dir + 1364: 0000000000021594 8 FUNC GLOBAL DEFAULT 11 g_atomic_int_set + 1365: 0000000000023e78 152 FUNC GLOBAL DEFAULT 11 g_bookmark_file_has_item + 1366: 000000000006fbe8 104 FUNC GLOBAL DEFAULT 11 g_stpcpy + 1367: 000000000001defc 8 FUNC GLOBAL DEFAULT 11 g_thread_get_initialized + 1368: 0000000000075d04 52 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_new + 1369: 0000000000062cd8 176 FUNC GLOBAL DEFAULT 11 g_queue_remove_all + 1370: 0000000000096d24 156 FUNC GLOBAL DEFAULT 11 g_vsnprintf + 1371: 00000000000853ac 460 FUNC GLOBAL DEFAULT 11 g_find_program_in_path + 1372: 0000000000052c5c 116 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_bytes + 1373: 0000000000031bec 168 FUNC GLOBAL DEFAULT 11 g_dataset_destroy + 1374: 000000000004e704 272 FUNC GLOBAL DEFAULT 11 g_source_remove_poll + 1375: 0000000000078b14 672 FUNC GLOBAL DEFAULT 11 g_test_trap_assertions + 1376: 00000000000819b4 120 FUNC GLOBAL DEFAULT 11 g_unichar_get_mirror_char + 1377: 00000000000782b0 152 FUNC GLOBAL DEFAULT 11 g_assertion_message_expr + 1378: 0000000000085d70 124 FUNC GLOBAL DEFAULT 11 g_set_application_name + 1379: 000000000007a7c8 92 FUNC GLOBAL DEFAULT 11 g_timer_start + 1380: 000000000002f750 632 FUNC GLOBAL DEFAULT 11 g_checksum_get_digest + 1381: 00000000000973b4 40 FUNC GLOBAL DEFAULT 11 g_unix_fd_add + 1382: 000000000001e300 92 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_free + 1383: 000000000001c3ac 48 FUNC GLOBAL DEFAULT 11 g_mem_chunk_destroy + 1384: 000000000002eea0 732 FUNC GLOBAL DEFAULT 11 g_checksum_reset + 1385: 0000000000073158 16 FUNC GLOBAL DEFAULT 11 g_string_append + 1386: 0000000000095fe0 96 FUNC GLOBAL DEFAULT 11 g_variant_type_n_items + 1387: 0000000000096bd8 152 FUNC GLOBAL DEFAULT 11 g_vsprintf + 1388: 000000000005b5b8 100 FUNC GLOBAL DEFAULT 11 g_node_last_sibling + 1389: 000000000006af44 452 FUNC GLOBAL DEFAULT 11 g_sequence_range_get_midpoint + 1390: 00000000000223c0 212 FUNC GLOBAL DEFAULT 11 g_pointer_bit_lock + 1391: 000000000004891c 112 FUNC GLOBAL DEFAULT 11 g_key_file_unref + 1392: 00000000000758a8 144 FUNC GLOBAL DEFAULT 11 g_test_add_data_func + 1393: 000000000001d2f8 184 FUNC GLOBAL DEFAULT 11 g_relation_destroy + 1394: 000000000003f040 80 FUNC GLOBAL DEFAULT 11 g_hash_table_destroy + 1395: 000000000001e6dc 184 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_writer_trylock + 1396: 0000000000037578 20 FUNC GLOBAL DEFAULT 11 g_date_time_add_hours + 1397: 00000000000545f4 8 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_user_data + 1398: 0000000000040504 160 FUNC GLOBAL DEFAULT 11 g_hook_list_clear + 1399: 00000000000651c8 92 FUNC GLOBAL DEFAULT 11 g_match_info_unref + 1400: 0000000000130938 48 OBJECT GLOBAL DEFAULT 24 g_child_watch_funcs + 1401: 0000000000040438 204 FUNC GLOBAL DEFAULT 11 g_hook_ref + 1402: 0000000000062988 132 FUNC GLOBAL DEFAULT 11 g_queue_pop_nth_link + 1403: 000000000005ab2c 36 FUNC GLOBAL DEFAULT 11 g_node_depth + 1404: 000000000006c6c8 252 FUNC GLOBAL DEFAULT 11 g_sequence_move + 1405: 0000000000040fb4 188 FUNC GLOBAL DEFAULT 11 g_hook_find_func + 1406: 0000000000095b5c 136 FUNC GLOBAL DEFAULT 11 g_variant_type_hash + 1407: 000000000003ae6c 16 FUNC GLOBAL DEFAULT 11 g_get_environ + 1408: 000000000003f840 8 FUNC GLOBAL DEFAULT 11 g_int64_hash + 1409: 00000000000205e0 96 FUNC GLOBAL DEFAULT 11 g_byte_array_free_to_bytes + 1410: 0000000000085cd4 80 FUNC GLOBAL DEFAULT 11 g_set_prgname + 1411: 0000000000068404 84 FUNC GLOBAL DEFAULT 11 g_scanner_cur_position + 1412: 0000000000130998 48 OBJECT GLOBAL DEFAULT 24 g_unix_signal_funcs + 1413: 000000000003fc30 232 FUNC GLOBAL DEFAULT 11 g_hmac_get_digest + 1414: 000000000001d444 532 FUNC GLOBAL DEFAULT 11 g_relation_insert + 1415: 00000000000207ac 4 FUNC GLOBAL DEFAULT 11 g_byte_array_sort + 1416: 00000000000277d0 188 FUNC GLOBAL DEFAULT 11 g_bytes_equal + 1417: 000000000006f730 112 FUNC GLOBAL DEFAULT 11 g_open + 1418: 000000000009a61c 344 FUNC GLOBAL DEFAULT 11 g_spawn_check_exit_status + 1419: 0000000000025674 216 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_added + 1420: 0000000000040120 308 FUNC GLOBAL DEFAULT 11 g_hook_free + 1421: 0000000000058254 176 FUNC GLOBAL DEFAULT 11 g_log + 1422: 000000000006228c 120 FUNC GLOBAL DEFAULT 11 g_queue_copy + 1423: 0000000000036f80 60 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_timeval_utc + 1424: 0000000000095afc 96 FUNC GLOBAL DEFAULT 11 g_variant_type_is_variant + 1425: 000000000002ee7c 36 FUNC GLOBAL DEFAULT 11 g_checksum_type_get_length + 1426: 000000000006fcb8 184 FUNC GLOBAL DEFAULT 11 g_strdup_printf + 1427: 000000000004cfd8 24 FUNC GLOBAL DEFAULT 11 g_list_first + 1428: 0000000000020518 20 FUNC GLOBAL DEFAULT 11 g_byte_array_new + 1429: 000000000001f00c 216 FUNC GLOBAL DEFAULT 11 g_array_append_vals + 1430: 00000000000407c8 184 FUNC GLOBAL DEFAULT 11 g_hook_first_valid + 1431: 0000000000094b40 88 FUNC GLOBAL DEFAULT 11 g_variant_type_info_get_type_string + 1432: 00000000000966b0 96 FUNC GLOBAL DEFAULT 11 glib_check_version + 1433: 000000000008dd1c 412 FUNC GLOBAL DEFAULT 11 g_variant_new_fixed_array + 1434: 000000000006f2a0 204 FUNC GLOBAL DEFAULT 11 g_slist_copy_deep + 1435: 0000000000095a9c 96 FUNC GLOBAL DEFAULT 11 g_variant_type_is_dict_entry + 1436: 0000000000033afc 224 FUNC GLOBAL DEFAULT 11 g_date_new_dmy + 1437: 000000000007abbc 1036 FUNC GLOBAL DEFAULT 11 g_time_val_from_iso8601 + 1438: 0000000000051760 148 FUNC GLOBAL DEFAULT 11 g_main_loop_is_running + 1439: 0000000000020428 228 FUNC GLOBAL DEFAULT 11 g_ptr_array_find_with_equal_func + 1440: 000000000004fb58 112 FUNC GLOBAL DEFAULT 11 g_source_remove + 1441: 00000000000578f4 76 FUNC GLOBAL DEFAULT 11 g_test_log_set_fatal_handler + 1442: 0000000000060ecc 84 FUNC GLOBAL DEFAULT 11 g_pattern_spec_free + 1443: 0000000000074744 32 FUNC GLOBAL DEFAULT 11 g_strcmp0 + 1444: 000000000006c58c 116 FUNC GLOBAL DEFAULT 11 g_sequence_sort + 1445: 000000000012fb18 8 OBJECT GLOBAL DEFAULT 20 g_utf8_skip + 1446: 000000000006c238 196 FUNC GLOBAL DEFAULT 11 g_sequence_set + 1447: 0000000000078a14 256 FUNC GLOBAL DEFAULT 11 g_assertion_message_error + 1448: 000000000001df04 4 FUNC GLOBAL DEFAULT 11 g_thread_init_glib + 1449: 000000000002052c 156 FUNC GLOBAL DEFAULT 11 g_byte_array_new_take + 1450: 000000000007a584 20 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_num_unused_threads + 1451: 0000000000056ac0 36 FUNC GLOBAL DEFAULT 11 g_clear_pointer + 1452: 000000000001cb64 108 FUNC GLOBAL DEFAULT 11 g_completion_clear_items + 1453: 00000000000512d0 100 FUNC GLOBAL DEFAULT 11 g_main_context_iteration + 1454: 000000000001df0c 232 FUNC GLOBAL DEFAULT 11 g_thread_foreach + 1455: 0000000000085f3c 224 FUNC GLOBAL DEFAULT 11 g_get_user_cache_dir + 1456: 0000000000130b38 48 OBJECT GLOBAL DEFAULT 24 g_io_watch_funcs + 1457: 0000000000048d78 500 FUNC GLOBAL DEFAULT 11 g_key_file_get_groups + 1458: 0000000000087a60 108 FUNC GLOBAL DEFAULT 11 g_variant_get_uint64 + 1459: 0000000000044efc 608 FUNC GLOBAL DEFAULT 11 g_io_channel_read_unichar + 1460: 000000000007973c 32 FUNC GLOBAL DEFAULT 11 g_get_num_processors + 1461: 0000000000061138 8 FUNC GLOBAL DEFAULT 11 g_poll + 1462: 0000000000095a30 108 FUNC GLOBAL DEFAULT 11 g_variant_type_is_tuple + 1463: 000000000008b398 752 FUNC GLOBAL DEFAULT 11 g_variant_format_string_scan + 1464: 000000000003d7e0 252 FUNC GLOBAL DEFAULT 11 g_dpgettext2 + 1465: 000000000003cb18 28 FUNC GLOBAL DEFAULT 11 g_build_pathv + 1466: 0000000000044848 600 FUNC GLOBAL DEFAULT 11 g_io_channel_read_to_end + 1467: 000000000007f050 152 FUNC GLOBAL DEFAULT 11 g_tree_new_full + 1468: 0000000000087acc 112 FUNC GLOBAL DEFAULT 11 g_variant_get_handle + 1469: 0000000000071efc 216 FUNC GLOBAL DEFAULT 11 g_str_has_suffix + 1470: 000000000005ae48 244 FUNC GLOBAL DEFAULT 11 g_node_find + 1471: 000000000006c468 292 FUNC GLOBAL DEFAULT 11 g_sequence_sort_iter + 1472: 0000000000130698 4 OBJECT GLOBAL DEFAULT 24 g_threads_got_initialized + 1473: 000000000008e558 164 FUNC GLOBAL DEFAULT 11 g_variant_take_ref + 1474: 000000000005a9b8 88 FUNC GLOBAL DEFAULT 11 g_node_prepend + 1475: 000000000004e410 36 FUNC GLOBAL DEFAULT 11 g_main_context_ref_thread_default + 1476: 000000000005d8b8 2684 FUNC GLOBAL DEFAULT 11 g_option_context_parse + 1477: 000000000003f090 196 FUNC GLOBAL DEFAULT 11 g_hash_table_steal_all + 1478: 000000000004f7f4 48 FUNC GLOBAL DEFAULT 11 g_source_unref + 1479: 000000000003cd40 312 FUNC GLOBAL DEFAULT 11 g_file_read_link + 1480: 000000000004ea3c 184 FUNC GLOBAL DEFAULT 11 g_source_set_priority + 1481: 0000000000057808 140 FUNC GLOBAL DEFAULT 11 g_log_set_fatal_mask + 1482: 000000000007bd78 3020 FUNC GLOBAL DEFAULT 11 g_time_zone_new + 1483: 000000000001fc74 392 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_range + 1484: 00000000000524f0 208 FUNC GLOBAL DEFAULT 11 g_child_watch_source_new + 1485: 000000000004843c 776 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_dirs + 1486: 000000000006f6e8 40 FUNC GLOBAL DEFAULT 11 g_slist_free_full + 1487: 00000000000976cc 108 FUNC GLOBAL DEFAULT 11 g_rw_lock_writer_trylock + 1488: 000000000007afc8 228 FUNC GLOBAL DEFAULT 11 g_time_val_to_iso8601 + 1489: 0000000000042bdc 88 FUNC GLOBAL DEFAULT 11 g_io_channel_get_close_on_unref + 1490: 000000000003c224 828 FUNC GLOBAL DEFAULT 11 g_file_get_contents + 1491: 000000000003d138 324 FUNC GLOBAL DEFAULT 11 g_path_get_basename + 1492: 00000000000620a8 132 FUNC GLOBAL DEFAULT 11 g_queue_push_head + 1493: 000000000004acdc 136 FUNC GLOBAL DEFAULT 11 g_key_file_set_uint64 + 1494: 0000000000082944 688 FUNC GLOBAL DEFAULT 11 g_utf16_to_utf8 + 1495: 00000000000788d0 324 FUNC GLOBAL DEFAULT 11 g_assertion_message_cmpstr + 1496: 000000000001fec8 176 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove + 1497: 000000000005ea90 136 FUNC GLOBAL DEFAULT 11 g_option_context_parse_strv + 1498: 000000000008b334 100 FUNC GLOBAL DEFAULT 11 g_variant_dict_ref + 1499: 000000000005be10 56 FUNC GLOBAL DEFAULT 11 g_option_error_quark + 1500: 000000000006df1c 164 FUNC GLOBAL DEFAULT 11 g_slice_set_config + 1501: 000000000006f410 28 FUNC GLOBAL DEFAULT 11 g_slist_find + 1502: 000000000007f578 128 FUNC GLOBAL DEFAULT 11 g_tree_traverse + 1503: 000000000003bc50 56 FUNC GLOBAL DEFAULT 11 g_file_error_quark + 1504: 0000000000072c48 80 FUNC GLOBAL DEFAULT 11 g_string_sized_new + 1505: 0000000000045ae8 428 FUNC GLOBAL DEFAULT 11 g_io_channel_write_unichar + 1506: 0000000000033a74 136 FUNC GLOBAL DEFAULT 11 g_date_valid_dmy + 1507: 000000000006c8f4 80 FUNC GLOBAL DEFAULT 11 g_sequence_iter_next + 1508: 0000000000081fb0 124 FUNC GLOBAL DEFAULT 11 g_utf8_strncpy + 1509: 0000000000087df4 456 FUNC GLOBAL DEFAULT 11 g_variant_new_array + 1510: 0000000000087bb0 368 FUNC GLOBAL DEFAULT 11 g_variant_new_maybe + 1511: 0000000000070154 348 FUNC GLOBAL DEFAULT 11 g_strerror + 1512: 00000000000795f0 160 FUNC GLOBAL DEFAULT 11 g_thread_join + 1513: 0000000000027f50 340 FUNC GLOBAL DEFAULT 11 g_get_charset + 1514: 000000000008a2fc 100 FUNC GLOBAL DEFAULT 11 g_variant_builder_ref + 1515: 000000000005aba0 76 FUNC GLOBAL DEFAULT 11 g_node_max_height + 1516: 0000000000020984 60 FUNC GLOBAL DEFAULT 11 g_async_queue_ref_unlocked + 1517: 000000000005ea3c 84 FUNC GLOBAL DEFAULT 11 g_option_context_get_description + 1518: 000000000003d0d8 96 FUNC GLOBAL DEFAULT 11 g_basename + 1519: 0000000000085640 124 FUNC GLOBAL DEFAULT 11 g_get_home_dir + 1520: 000000000007f0e8 92 FUNC GLOBAL DEFAULT 11 g_tree_new + 1521: 0000000000070608 156 FUNC GLOBAL DEFAULT 11 g_strup + 1522: 000000000008d444 216 FUNC GLOBAL DEFAULT 11 g_variant_dict_insert_value + 1523: 000000000007a96c 164 FUNC GLOBAL DEFAULT 11 g_timer_elapsed + 1524: 000000000003506c 288 FUNC GLOBAL DEFAULT 11 g_date_subtract_years + 1525: 000000000002f9c8 204 FUNC GLOBAL DEFAULT 11 g_compute_checksum_for_data + 1526: 0000000000097ca4 60 FUNC GLOBAL DEFAULT 11 g_mutex_clear + 1527: 000000000006e040 292 FUNC GLOBAL DEFAULT 11 g_slice_get_config_state + 1528: 0000000000032958 284 FUNC GLOBAL DEFAULT 11 g_dataset_foreach + 1529: 00000000000560f0 184 FUNC GLOBAL DEFAULT 11 g_markup_printf_escaped + 1530: 0000000000051bd4 132 FUNC GLOBAL DEFAULT 11 g_main_context_get_poll_func + 1531: 000000000001c3dc 84 FUNC GLOBAL DEFAULT 11 g_mem_chunk_alloc + 1532: 000000000008150c 348 FUNC GLOBAL DEFAULT 11 g_unichar_xdigit_value + 1533: 000000000008ccb4 184 FUNC GLOBAL DEFAULT 11 g_variant_builder_add + 1534: 000000000002626c 312 FUNC GLOBAL DEFAULT 11 g_bookmark_file_has_application + 1535: 0000000000036e3c 132 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_unix_local + 1536: 000000000001c4d4 4 FUNC GLOBAL DEFAULT 11 g_list_pop_allocator + 1537: 0000000000042780 76 FUNC GLOBAL DEFAULT 11 g_io_channel_get_buffer_condition + 1538: 0000000000071518 500 FUNC GLOBAL DEFAULT 11 g_strsplit_set + 1539: 0000000000058aa4 336 FUNC GLOBAL DEFAULT 11 g_log_set_handler_full + 1540: 00000000000394f0 104 FUNC GLOBAL DEFAULT 11 g_date_time_get_utc_offset + 1541: 0000000000025d28 396 FUNC GLOBAL DEFAULT 11 g_bookmark_file_remove_group + 1542: 00000000000327a8 432 FUNC GLOBAL DEFAULT 11 g_datalist_foreach + 1543: 00000000000963e8 136 FUNC GLOBAL DEFAULT 11 g_variant_type_new_array + 1544: 0000000000096470 136 FUNC GLOBAL DEFAULT 11 g_variant_type_new_maybe + 1545: 000000000003ec08 468 FUNC GLOBAL DEFAULT 11 g_hash_table_lookup_extended + 1546: 0000000000061f30 40 FUNC GLOBAL DEFAULT 11 g_queue_free_full + 1547: 000000000003f7e0 36 FUNC GLOBAL DEFAULT 11 g_str_hash + 1548: 000000000003bb04 332 FUNC GLOBAL DEFAULT 11 g_file_test + 1549: 000000000004cff0 36 FUNC GLOBAL DEFAULT 11 g_list_length + 1550: 0000000000072d0c 96 FUNC GLOBAL DEFAULT 11 g_string_free_to_bytes + 1551: 00000000000925c4 180 FUNC GLOBAL DEFAULT 11 g_variant_builder_add_parsed + 1552: 0000000000033374 12 FUNC GLOBAL DEFAULT 11 g_date_valid_julian + 1553: 0000000000082108 116 FUNC GLOBAL DEFAULT 11 g_utf8_strchr + 1554: 000000000003f23c 308 FUNC GLOBAL DEFAULT 11 g_hash_table_foreach + 1555: 000000000004af1c 384 FUNC GLOBAL DEFAULT 11 g_key_file_set_integer_list + 1556: 0000000000036fbc 804 FUNC GLOBAL DEFAULT 11 g_date_time_new + 1557: 0000000000071da4 344 FUNC GLOBAL DEFAULT 11 g_strrstr_len + 1558: 000000000002f1c8 116 FUNC GLOBAL DEFAULT 11 g_checksum_copy + 1559: 000000000008d6fc 112 FUNC GLOBAL DEFAULT 11 g_variant_dict_clear + 1560: 000000000004a8e4 136 FUNC GLOBAL DEFAULT 11 g_key_file_set_integer + 1561: 000000000007f204 112 FUNC GLOBAL DEFAULT 11 g_tree_unref + 1562: 000000000005e3b4 4 FUNC GLOBAL DEFAULT 11 g_option_group_free + 1563: 000000000006e6f8 628 FUNC GLOBAL DEFAULT 11 g_slice_free1 + 1564: 0000000000073228 96 FUNC GLOBAL DEFAULT 11 g_string_new + 1565: 000000000008e3ec 164 FUNC GLOBAL DEFAULT 11 g_variant_ref + 1566: 000000000001f864 64 FUNC GLOBAL DEFAULT 11 g_array_sort + 1567: 0000000000081f5c 84 FUNC GLOBAL DEFAULT 11 g_utf8_substring + 1568: 0000000000088340 264 FUNC GLOBAL DEFAULT 11 g_variant_dup_bytestring_array + 1569: 000000000001e35c 64 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_init + 1570: 000000000008be64 372 FUNC GLOBAL DEFAULT 11 g_variant_check_format_string + 1571: 000000000006f178 136 FUNC GLOBAL DEFAULT 11 g_slist_remove_link + 1572: 000000000005b938 164 FUNC GLOBAL DEFAULT 11 g_option_group_unref + 1573: 000000000008dc14 264 FUNC GLOBAL DEFAULT 11 g_variant_new_from_data + 1574: 000000000006f72c 4 FUNC GLOBAL DEFAULT 11 g_chmod + 1575: 0000000000061ba0 272 FUNC GLOBAL DEFAULT 11 g_intern_static_string + 1576: 000000000007f768 84 FUNC GLOBAL DEFAULT 11 g_tree_nnodes + 1577: 000000000003e618 96 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_init + 1578: 00000000000413a0 32 FUNC GLOBAL DEFAULT 11 g_hook_compare_ids + 1579: 00000000000964f8 268 FUNC GLOBAL DEFAULT 11 g_variant_type_new_dict_entry + 1580: 000000000004f4a4 228 FUNC GLOBAL DEFAULT 11 g_source_attach + 1581: 0000000000021158 92 FUNC GLOBAL DEFAULT 11 g_async_queue_length_unlocked + 1582: 000000000012fb10 8 OBJECT GLOBAL DEFAULT 20 g_test_config_vars + 1583: 0000000000056b18 20 FUNC GLOBAL DEFAULT 11 g_try_malloc0 + 1584: 00000000000380e0 132 FUNC GLOBAL DEFAULT 11 g_date_time_get_year + 1585: 0000000000076004 92 FUNC GLOBAL DEFAULT 11 g_test_log_msg_free + 1586: 0000000000093f20 116 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_is_string + 1587: 0000000000096f64 56 FUNC GLOBAL DEFAULT 11 g_unix_error_quark + 1588: 0000000000053460 56 FUNC GLOBAL DEFAULT 11 g_markup_error_quark + 1589: 0000000000097638 148 FUNC GLOBAL DEFAULT 11 g_rw_lock_writer_lock + 1590: 000000000003e94c 8 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_steal + 1591: 0000000000074098 80 FUNC GLOBAL DEFAULT 11 g_string_vprintf + 1592: 0000000000066870 24 FUNC GLOBAL DEFAULT 11 g_regex_split + 1593: 000000000003c5a0 20 FUNC GLOBAL DEFAULT 11 g_mkstemp_full + 1594: 00000000000489dc 424 FUNC GLOBAL DEFAULT 11 g_key_file_to_data + 1595: 000000000004a740 420 FUNC GLOBAL DEFAULT 11 g_key_file_get_integer + 1596: 00000000000844f4 252 FUNC GLOBAL DEFAULT 11 g_unicode_canonical_decomposition + 1597: 000000000005aa74 184 FUNC GLOBAL DEFAULT 11 g_node_is_ancestor + 1598: 000000000001de64 32 FUNC GLOBAL DEFAULT 11 g_cond_free + 1599: 0000000000131660 0 NOTYPE GLOBAL DEFAULT 26 __end__ + 1600: 0000000000052178 24 FUNC GLOBAL DEFAULT 11 g_idle_add + 1601: 0000000000034f7c 240 FUNC GLOBAL DEFAULT 11 g_date_add_years + 1602: 000000000007fc6c 188 FUNC GLOBAL DEFAULT 11 g_unichar_isdigit + 1603: 0000000000086684 348 FUNC GLOBAL DEFAULT 11 g_format_size_for_display + 1604: 0000000000070818 140 FUNC GLOBAL DEFAULT 11 g_ascii_strup + 1605: 0000000000065120 168 FUNC GLOBAL DEFAULT 11 g_regex_unref + 1606: 0000000000083a58 580 FUNC GLOBAL DEFAULT 11 g_utf8_collate_key + 1607: 00000000000393cc 104 FUNC GLOBAL DEFAULT 11 g_date_time_get_seconds + 1608: 0000000000021618 24 FUNC GLOBAL DEFAULT 11 g_atomic_int_or + 1609: 000000000008e5fc 88 FUNC GLOBAL DEFAULT 11 g_variant_is_floating + 1610: 000000000003425c 196 FUNC GLOBAL DEFAULT 11 g_date_get_weekday + 1611: 000000000006f59c 148 FUNC GLOBAL DEFAULT 11 g_slist_insert + 1612: 0000000000080c08 412 FUNC GLOBAL DEFAULT 11 g_unichar_tolower + 1613: 000000000003d928 92 FUNC GLOBAL DEFAULT 11 g_dngettext + 1614: 0000000000061a84 284 FUNC GLOBAL DEFAULT 11 g_intern_string + 1615: 000000000007a5c4 168 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_sort_function + 1616: 0000000000052004 100 FUNC GLOBAL DEFAULT 11 g_timeout_add_seconds + 1617: 0000000000081708 180 FUNC GLOBAL DEFAULT 11 g_utf8_strup + 1618: 0000000000048d2c 76 FUNC GLOBAL DEFAULT 11 g_key_file_get_start_group + 1619: 0000000000021c04 384 FUNC GLOBAL DEFAULT 11 g_base64_encode_close + 1620: 000000000006bbc4 276 FUNC GLOBAL DEFAULT 11 g_sequence_insert_sorted_iter + 1621: 000000000003c560 56 FUNC GLOBAL DEFAULT 11 g_mkdtemp_full + 1622: 0000000000033380 172 FUNC GLOBAL DEFAULT 11 g_date_new_julian + 1623: 0000000000052068 56 FUNC GLOBAL DEFAULT 11 g_idle_source_new + 1624: 000000000001dab0 156 FUNC GLOBAL DEFAULT 11 g_tuples_index + 1625: 000000000001caa8 188 FUNC GLOBAL DEFAULT 11 g_completion_remove_items + 1626: 000000000007a768 60 FUNC GLOBAL DEFAULT 11 g_timer_new + 1627: 000000000005e83c 124 FUNC GLOBAL DEFAULT 11 g_option_context_set_translate_func + 1628: 00000000000955a0 180 FUNC GLOBAL DEFAULT 11 g_variant_type_get_string_length + 1629: 0000000000073d20 140 FUNC GLOBAL DEFAULT 11 g_string_ascii_down + 1630: 000000000007fe10 188 FUNC GLOBAL DEFAULT 11 g_unichar_islower + 1631: 0000000000020cf4 112 FUNC GLOBAL DEFAULT 11 g_async_queue_push_sorted + 1632: 00000000000812e8 244 FUNC GLOBAL DEFAULT 11 g_unichar_totitle + 1633: 0000000000036d78 92 FUNC GLOBAL DEFAULT 11 g_date_time_new_now + 1634: 000000000004a3ec 440 FUNC GLOBAL DEFAULT 11 g_key_file_get_boolean_list + 1635: 000000000003235c 212 FUNC GLOBAL DEFAULT 11 g_dataset_id_get_data + 1636: 000000000006be88 172 FUNC GLOBAL DEFAULT 11 g_sequence_search + 1637: 0000000000075298 72 FUNC GLOBAL DEFAULT 11 g_test_incomplete + 1638: 000000000003b4d8 48 FUNC GLOBAL DEFAULT 11 g_clear_error + 1639: 0000000000086a2c 236 FUNC GLOBAL DEFAULT 11 g_uuid_string_random + 1640: 00000000000802d0 56 FUNC GLOBAL DEFAULT 11 g_unichar_istitle + 1641: 0000000000051d54 88 FUNC GLOBAL DEFAULT 11 g_main_context_is_owner + 1642: 0000000000020d64 116 FUNC GLOBAL DEFAULT 11 g_async_queue_pop + 1643: 0000000000080308 204 FUNC GLOBAL DEFAULT 11 g_unichar_isxdigit + 1644: 0000000000034444 196 FUNC GLOBAL DEFAULT 11 g_date_days_between + 1645: 0000000000033ee8 232 FUNC GLOBAL DEFAULT 11 g_date_set_year + 1646: 000000000007a6c8 140 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_max_idle_time + 1647: 0000000000075284 20 FUNC GLOBAL DEFAULT 11 g_test_fail + 1648: 00000000000698d4 208 FUNC GLOBAL DEFAULT 11 g_scanner_input_file + 1649: 0000000000051df4 88 FUNC GLOBAL DEFAULT 11 g_timeout_source_new_seconds + 1650: 0000000000097eac 40 FUNC GLOBAL DEFAULT 11 g_cond_signal + 1651: 00000000000700d8 12 FUNC GLOBAL DEFAULT 11 g_ascii_dtostr + 1652: 000000000007a598 44 FUNC GLOBAL DEFAULT 11 g_thread_pool_stop_unused_threads + 1653: 0000000000065e14 408 FUNC GLOBAL DEFAULT 11 g_regex_match_full + 1654: 000000000004b09c 420 FUNC GLOBAL DEFAULT 11 g_key_file_get_double + 1655: 000000000008e970 156 FUNC GLOBAL DEFAULT 11 g_variant_store + 1656: 0000000000022494 100 FUNC GLOBAL DEFAULT 11 g_pointer_bit_trylock + 1657: 0000000000079310 240 FUNC GLOBAL DEFAULT 11 g_once_init_leave + 1658: 0000000000037690 28 FUNC GLOBAL DEFAULT 11 g_date_time_equal + 1659: 000000000003767c 20 FUNC GLOBAL DEFAULT 11 g_date_time_hash + 1660: 000000000004bec4 332 FUNC GLOBAL DEFAULT 11 g_key_file_save_to_file + 1661: 0000000000059064 64 FUNC GLOBAL DEFAULT 11 g_log_writer_supports_color + 1662: 0000000000087834 112 FUNC GLOBAL DEFAULT 11 g_variant_get_int16 + 1663: 0000000000083384 700 FUNC GLOBAL DEFAULT 11 g_utf8_validate + 1664: 0000000000063698 88 FUNC GLOBAL DEFAULT 11 g_rand_double + 1665: 000000000001ee20 68 FUNC GLOBAL DEFAULT 11 g_array_new + 1666: 000000000007fbb0 188 FUNC GLOBAL DEFAULT 11 g_unichar_iscntrl + 1667: 0000000000073e38 176 FUNC GLOBAL DEFAULT 11 g_string_down + 1668: 000000000001c4e8 536 FUNC GLOBAL DEFAULT 11 g_cache_new + 1669: 000000000008a820 444 FUNC GLOBAL DEFAULT 11 g_variant_builder_add_value + 1670: 0000000000062c20 68 FUNC GLOBAL DEFAULT 11 g_queue_index + 1671: 000000000003d27c 192 FUNC GLOBAL DEFAULT 11 g_path_get_dirname + 1672: 0000000000092b88 468 FUNC GLOBAL DEFAULT 11 g_variant_serialised_n_children + 1673: 000000000008823c 260 FUNC GLOBAL DEFAULT 11 g_variant_get_bytestring_array + 1674: 0000000000079f90 440 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_max_threads + 1675: 000000000008c7b4 180 FUNC GLOBAL DEFAULT 11 g_variant_new_va + 1676: 0000000000023288 720 FUNC GLOBAL DEFAULT 11 g_bookmark_file_load_from_data_dirs + 1677: 000000000006fb54 84 FUNC GLOBAL DEFAULT 11 g_strndup + 1678: 000000000003fe58 228 FUNC GLOBAL DEFAULT 11 g_compute_hmac_for_bytes + 1679: 000000000003c9a0 12 FUNC GLOBAL DEFAULT 11 g_mkstemp + 1680: 0000000000061f58 84 FUNC GLOBAL DEFAULT 11 g_queue_find + 1681: 0000000000058d2c 680 FUNC GLOBAL DEFAULT 11 g_log_variant + 1682: 000000000003f804 12 FUNC GLOBAL DEFAULT 11 g_direct_equal + 1683: 000000000004cd78 132 FUNC GLOBAL DEFAULT 11 g_list_find_custom + 1684: 0000000000072e1c 108 FUNC GLOBAL DEFAULT 11 g_string_truncate + 1685: 000000000001c358 84 FUNC GLOBAL DEFAULT 11 g_mem_chunk_new + 1686: 000000000003d618 72 FUNC GLOBAL DEFAULT 11 g_strip_context + 1687: 00000000000870a4 92 FUNC GLOBAL DEFAULT 11 g_variant_is_object_path + 1688: 000000000003cc70 24 FUNC GLOBAL DEFAULT 11 g_build_filenamev + 1689: 0000000000096a04 184 FUNC GLOBAL DEFAULT 11 g_printf + 1690: 0000000000020bc4 140 FUNC GLOBAL DEFAULT 11 g_async_queue_push + 1691: 0000000000062b0c 92 FUNC GLOBAL DEFAULT 11 g_queue_peek_head + 1692: 000000000008d3b0 148 FUNC GLOBAL DEFAULT 11 g_variant_dict_contains + 1693: 0000000000050da8 716 FUNC GLOBAL DEFAULT 11 g_main_context_dispatch + 1694: 000000000004e1b0 164 FUNC GLOBAL DEFAULT 11 g_main_context_ref + 1695: 0000000000074270 120 FUNC GLOBAL DEFAULT 11 g_string_chunk_new + 1696: 000000000004c724 16 FUNC GLOBAL DEFAULT 11 g_list_free + 1697: 0000000000026ec4 84 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_size + 1698: 000000000001cf50 80 FUNC GLOBAL DEFAULT 11 g_completion_free + 1699: 000000000006212c 216 FUNC GLOBAL DEFAULT 11 g_queue_push_head_link + 1700: 00000000000205c8 20 FUNC GLOBAL DEFAULT 11 g_byte_array_sized_new + 1701: 0000000000073468 88 FUNC GLOBAL DEFAULT 11 g_string_prepend_c + 1702: 00000000000faec8 4 OBJECT GLOBAL DEFAULT 13 glib_micro_version + 1703: 000000000004fbc8 48 FUNC GLOBAL DEFAULT 11 g_source_remove_by_user_data + 1704: 000000000003cc88 184 FUNC GLOBAL DEFAULT 11 g_build_filename + 1705: 0000000000062614 128 FUNC GLOBAL DEFAULT 11 g_queue_pop_tail_link + 1706: 000000000004eb48 232 FUNC GLOBAL DEFAULT 11 g_source_set_ready_time + 1707: 00000000000406c8 48 FUNC GLOBAL DEFAULT 11 g_hook_prepend + 1708: 00000000000309b0 1200 FUNC GLOBAL DEFAULT 11 g_convert_with_fallback + 1709: 000000000004ef3c 84 FUNC GLOBAL DEFAULT 11 g_source_get_name + 1710: 0000000000057940 304 FUNC GLOBAL DEFAULT 11 g_log_structured_array + 1711: 000000000001e234 44 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_unlock + 1712: 000000000006b4c0 216 FUNC GLOBAL DEFAULT 11 g_sequence_remove + 1713: 0000000000027440 16 FUNC GLOBAL DEFAULT 11 g_bytes_new_take + 1714: 0000000000065230 2420 FUNC GLOBAL DEFAULT 11 g_regex_new + 1715: 000000000001e2b0 80 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_unlock_full + 1716: 0000000000062bc4 92 FUNC GLOBAL DEFAULT 11 g_queue_peek_nth + 1717: 000000000003333c 16 FUNC GLOBAL DEFAULT 11 g_date_valid_year + 1718: 00000000000520a0 216 FUNC GLOBAL DEFAULT 11 g_idle_add_full + 1719: 0000000000042b30 120 FUNC GLOBAL DEFAULT 11 g_io_channel_get_flags + 1720: 000000000004f588 148 FUNC GLOBAL DEFAULT 11 g_source_ref + 1721: 00000000000215cc 28 FUNC GLOBAL DEFAULT 11 g_atomic_int_compare_and_exchange + 1722: 000000000004f0c0 500 FUNC GLOBAL DEFAULT 11 g_main_context_unref + 1723: 00000000000216bc 24 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_xor + 1724: 0000000000056ae4 52 FUNC GLOBAL DEFAULT 11 g_try_malloc + 1725: 000000000005aa10 100 FUNC GLOBAL DEFAULT 11 g_node_get_root + 1726: 0000000000096b24 180 FUNC GLOBAL DEFAULT 11 g_fprintf + 1727: 00000000000978f8 88 FUNC GLOBAL DEFAULT 11 g_private_get + 1728: 000000000004e5f0 276 FUNC GLOBAL DEFAULT 11 g_source_add_poll + 1729: 0000000000042640 92 FUNC GLOBAL DEFAULT 11 g_io_create_watch + 1730: 0000000000051f44 192 FUNC GLOBAL DEFAULT 11 g_timeout_add_seconds_full + 1731: 0000000000039354 120 FUNC GLOBAL DEFAULT 11 g_date_time_get_microsecond + 1732: 0000000000088bac 32 FUNC GLOBAL DEFAULT 11 g_variant_print + 1733: 0000000000062304 216 FUNC GLOBAL DEFAULT 11 g_queue_push_tail_link + 1734: 00000000000725c4 788 FUNC GLOBAL DEFAULT 11 g_ascii_string_to_signed + 1735: 00000000000273b0 144 FUNC GLOBAL DEFAULT 11 g_bytes_new_with_free_func + 1736: 0000000000053f1c 252 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_new + 1737: 000000000008059c 124 FUNC GLOBAL DEFAULT 11 g_unichar_iswide + 1738: 000000000001f93c 44 FUNC GLOBAL DEFAULT 11 g_ptr_array_set_free_func + 1739: 0000000000048080 48 FUNC GLOBAL DEFAULT 11 g_key_file_set_list_separator + 1740: 000000000008e654 68 FUNC GLOBAL DEFAULT 11 g_variant_get_size + 1741: 0000000000073bd8 328 FUNC GLOBAL DEFAULT 11 g_string_erase + 1742: 00000000000332a0 8 FUNC GLOBAL DEFAULT 11 g_date_new + 1743: 00000000000842b0 144 FUNC GLOBAL DEFAULT 11 g_unichar_combining_class + 1744: 000000000004b9d4 128 FUNC GLOBAL DEFAULT 11 g_key_file_remove_comment + 1745: 0000000000025464 300 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_is_private + 1746: 00000000000211b4 180 FUNC GLOBAL DEFAULT 11 g_async_queue_sort_unlocked + 1747: 000000000001db4c 204 FUNC GLOBAL DEFAULT 11 g_relation_print + 1748: 000000000003d6a8 36 FUNC GLOBAL DEFAULT 11 glib_gettext + 1749: 0000000000074f18 188 FUNC GLOBAL DEFAULT 11 g_test_log_type_name + 1750: 00000000000353ac 320 FUNC GLOBAL DEFAULT 11 g_date_get_sunday_weeks_in_year + 1751: 000000000006c858 92 FUNC GLOBAL DEFAULT 11 g_sequence_iter_is_begin + 1752: 00000000000374bc 100 FUNC GLOBAL DEFAULT 11 g_date_time_add_days + 1753: 0000000000086c18 40 FUNC GLOBAL DEFAULT 11 g_variant_new_byte + 1754: 000000000007e350 28 FUNC GLOBAL DEFAULT 11 g_trash_stack_pop + 1755: 0000000000065c50 88 FUNC GLOBAL DEFAULT 11 g_regex_get_capture_count + 1756: 00000000000732e4 16 FUNC GLOBAL DEFAULT 11 g_string_prepend + 1757: 0000000000087730 28 FUNC GLOBAL DEFAULT 11 g_variant_is_of_type + 1758: 0000000000097578 8 FUNC GLOBAL DEFAULT 11 g_rec_mutex_unlock + 1759: 000000000004c0e8 496 FUNC GLOBAL DEFAULT 11 g_parse_debug_string + 1760: 0000000000087914 112 FUNC GLOBAL DEFAULT 11 g_variant_get_int32 + 1761: 000000000006c8b4 64 FUNC GLOBAL DEFAULT 11 g_sequence_iter_get_position + 1762: 0000000000030114 56 FUNC GLOBAL DEFAULT 11 g_convert_error_quark + 1763: 000000000001fa30 300 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_index + 1764: 0000000000086c68 40 FUNC GLOBAL DEFAULT 11 g_variant_new_uint16 + 1765: 000000000003a880 136 FUNC GLOBAL DEFAULT 11 g_environ_getenv + 1766: 0000000000096dc0 176 FUNC GLOBAL DEFAULT 11 g_snprintf + 1767: 0000000000099c98 56 FUNC GLOBAL DEFAULT 11 g_spawn_exit_error_quark + 1768: 000000000004e3e4 44 FUNC GLOBAL DEFAULT 11 g_main_context_get_thread_default + 1769: 000000000008cfac 220 FUNC GLOBAL DEFAULT 11 g_variant_dict_init + 1770: 000000000003c598 8 FUNC GLOBAL DEFAULT 11 g_mkdtemp + 1771: 00000000000702b0 152 FUNC GLOBAL DEFAULT 11 g_strsignal + 1772: 0000000000030fc0 536 FUNC GLOBAL DEFAULT 11 g_get_filename_charsets + 1773: 0000000000020efc 88 FUNC GLOBAL DEFAULT 11 g_async_queue_timeout_pop + 1774: 0000000000066040 804 FUNC GLOBAL DEFAULT 11 g_regex_match_all_full + 1775: 000000000007a288 152 FUNC GLOBAL DEFAULT 11 g_thread_pool_unprocessed + 1776: 000000000006e6bc 60 FUNC GLOBAL DEFAULT 11 g_slice_copy + 1777: 00000000000885e4 420 FUNC GLOBAL DEFAULT 11 g_variant_get_string + 1778: 00000000000934f0 1132 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_serialise + 1779: 00000000000322a4 172 FUNC GLOBAL DEFAULT 11 g_datalist_id_dup_data + 1780: 000000000007234c 388 FUNC GLOBAL DEFAULT 11 g_str_match_string + 1781: 000000000001d930 328 FUNC GLOBAL DEFAULT 11 g_relation_exists + 1782: 000000000008217c 116 FUNC GLOBAL DEFAULT 11 g_utf8_strrchr + 1783: 000000000006fc50 104 FUNC GLOBAL DEFAULT 11 g_strdup_vprintf + 1784: 0000000000075328 24 FUNC GLOBAL DEFAULT 11 g_test_failed + 1785: 000000000002760c 452 FUNC GLOBAL DEFAULT 11 g_bytes_new_from_bytes + 1786: 0000000000020640 4 FUNC GLOBAL DEFAULT 11 g_byte_array_ref + 1787: 000000000003edf8 372 FUNC GLOBAL DEFAULT 11 g_hash_table_contains + 1788: 000000000008601c 184 FUNC GLOBAL DEFAULT 11 g_get_user_runtime_dir + 1789: 000000000007a320 388 FUNC GLOBAL DEFAULT 11 g_thread_pool_free + 1790: 000000000005e6c8 124 FUNC GLOBAL DEFAULT 11 g_option_group_set_translate_func + 1791: 000000000007e374 36 FUNC GLOBAL DEFAULT 11 g_trash_stack_height + 1792: 000000000006c054 172 FUNC GLOBAL DEFAULT 11 g_sequence_lookup + 1793: 000000000008d8dc 452 FUNC GLOBAL DEFAULT 11 g_variant_iter_loop + 1794: 0000000000032f30 104 FUNC GLOBAL DEFAULT 11 g_datalist_unset_flags + 1795: 0000000000022194 264 FUNC GLOBAL DEFAULT 11 g_base64_decode_inplace + 1796: 0000000000044aa0 1116 FUNC GLOBAL DEFAULT 11 g_io_channel_read_chars + 1797: 000000000003cb34 216 FUNC GLOBAL DEFAULT 11 g_build_path + 1798: 0000000000031fa8 432 FUNC GLOBAL DEFAULT 11 g_dataset_id_remove_no_notify + 1799: 0000000000070b80 8 FUNC GLOBAL DEFAULT 11 g_strncasecmp + 1800: 0000000000097518 96 FUNC GLOBAL DEFAULT 11 g_rec_mutex_lock + 1801: 000000000003f1c8 116 FUNC GLOBAL DEFAULT 11 g_hash_table_foreach_steal + 1802: 0000000000038e2c 132 FUNC GLOBAL DEFAULT 11 g_date_time_get_week_of_year + 1803: 0000000000021600 24 FUNC GLOBAL DEFAULT 11 g_atomic_int_and + 1804: 00000000000628a0 68 FUNC GLOBAL DEFAULT 11 g_queue_link_index + 1805: 0000000000051b30 164 FUNC GLOBAL DEFAULT 11 g_main_context_set_poll_func + 1806: 0000000000070348 208 FUNC GLOBAL DEFAULT 11 g_strlcpy + 1807: 0000000000063408 312 FUNC GLOBAL DEFAULT 11 g_rand_new + 1808: 000000000004bd2c 408 FUNC GLOBAL DEFAULT 11 g_key_file_remove_key + 1809: 0000000000025abc 292 FUNC GLOBAL DEFAULT 11 g_bookmark_file_has_group + 1810: 000000000002525c 280 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_mime_type + 1811: 0000000000088788 20 FUNC GLOBAL DEFAULT 11 g_variant_dup_string + 1812: 000000000006b108 380 FUNC GLOBAL DEFAULT 11 g_sequence_iter_compare + 1813: 0000000000096040 144 FUNC GLOBAL DEFAULT 11 g_variant_type_key + 1814: 0000000000060ba0 812 FUNC GLOBAL DEFAULT 11 g_pattern_spec_new + 1815: 0000000000026c60 612 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_applications + 1816: 000000000004f45c 72 FUNC GLOBAL DEFAULT 11 g_source_destroy + 1817: 00000000000585ec 1184 FUNC GLOBAL DEFAULT 11 g_log_writer_format_fields + 1818: 0000000000059980 240 FUNC GLOBAL DEFAULT 11 g_test_expect_message + 1819: 0000000000063540 344 FUNC GLOBAL DEFAULT 11 g_rand_int + 1820: 0000000000070078 96 FUNC GLOBAL DEFAULT 11 g_ascii_formatd + 1821: 00000000000958e0 144 FUNC GLOBAL DEFAULT 11 g_variant_type_is_basic + 1822: 000000000008879c 256 FUNC GLOBAL DEFAULT 11 g_variant_dup_strv + 1823: 000000000008ca90 276 FUNC GLOBAL DEFAULT 11 g_variant_lookup + 1824: 000000000005e334 128 FUNC GLOBAL DEFAULT 11 g_option_group_new + 1825: 0000000000097a9c 8 FUNC GLOBAL DEFAULT 11 g_mutex_init + 1826: 0000000000042ecc 192 FUNC GLOBAL DEFAULT 11 g_io_channel_close + 1827: 000000000001e0b8 120 FUNC GLOBAL DEFAULT 11 g_static_mutex_get_mutex_impl + 1828: 0000000000023c38 288 FUNC GLOBAL DEFAULT 11 g_bookmark_file_to_file + 1829: 0000000000020648 36 FUNC GLOBAL DEFAULT 11 g_byte_array_append + 1830: 000000000001de38 44 FUNC GLOBAL DEFAULT 11 g_cond_new + 1831: 0000000000086d58 40 FUNC GLOBAL DEFAULT 11 g_variant_new_double + 1832: 0000000000037520 88 FUNC GLOBAL DEFAULT 11 g_date_time_add_weeks + 1833: 0000000000026f18 420 FUNC GLOBAL DEFAULT 11 g_bookmark_file_move_item + 1834: 00000000000959d0 96 FUNC GLOBAL DEFAULT 11 g_variant_type_is_array + 1835: 0000000000049468 180 FUNC GLOBAL DEFAULT 11 g_key_file_set_string + 1836: 0000000000086c40 40 FUNC GLOBAL DEFAULT 11 g_variant_new_int16 + 1837: 000000000003d660 72 FUNC GLOBAL DEFAULT 11 g_dgettext + 1838: 0000000000095970 96 FUNC GLOBAL DEFAULT 11 g_variant_type_is_maybe + 1839: 000000000009395c 776 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_needed_size + 1840: 0000000000034508 352 FUNC GLOBAL DEFAULT 11 g_date_get_iso8601_week_of_year + 1841: 00000000000561a8 1984 FUNC GLOBAL DEFAULT 11 g_markup_collect_attributes + 1842: 000000000007e340 16 FUNC GLOBAL DEFAULT 11 g_trash_stack_push + 1843: 000000000003b2b8 60 FUNC GLOBAL DEFAULT 11 g_error_matches + 1844: 000000000007fecc 208 FUNC GLOBAL DEFAULT 11 g_unichar_isprint + 1845: 000000000001da78 56 FUNC GLOBAL DEFAULT 11 g_tuples_destroy + 1846: 0000000000069770 144 FUNC GLOBAL DEFAULT 11 g_scanner_peek_next_token + 1847: 000000000007bd1c 92 FUNC GLOBAL DEFAULT 11 g_time_zone_ref + 1848: 0000000000020b08 40 FUNC GLOBAL DEFAULT 11 g_async_queue_unlock + 1849: 0000000000075474 112 FUNC GLOBAL DEFAULT 11 g_test_get_root + 1850: 000000000001e95c 284 FUNC GLOBAL DEFAULT 11 g_static_private_set + 1851: 0000000000038c54 132 FUNC GLOBAL DEFAULT 11 g_date_time_get_month + 1852: 000000000004804c 52 FUNC GLOBAL DEFAULT 11 g_key_file_new + 1853: 000000000003fb58 132 FUNC GLOBAL DEFAULT 11 g_hmac_unref + 1854: 000000000006c340 84 FUNC GLOBAL DEFAULT 11 g_sequence_get_end_iter + 1855: 000000000004ab68 372 FUNC GLOBAL DEFAULT 11 g_key_file_get_uint64 + 1856: 00000000000216d4 4 FUNC GLOBAL DEFAULT 11 g_atomic_int_exchange_and_add + 1857: 000000000003ad9c 208 FUNC GLOBAL DEFAULT 11 g_listenv + 1858: 000000000004c7a0 320 FUNC GLOBAL DEFAULT 11 g_list_insert_before + 1859: 0000000000061140 80 FUNC GLOBAL DEFAULT 11 g_spaced_primes_closest + 1860: 00000000000717fc 328 FUNC GLOBAL DEFAULT 11 g_strjoinv + 1861: 0000000000086cb8 40 FUNC GLOBAL DEFAULT 11 g_variant_new_uint32 + 1862: 00000000000faecc 4 OBJECT GLOBAL DEFAULT 13 glib_minor_version + 1863: 000000000007056c 156 FUNC GLOBAL DEFAULT 11 g_strdown + 1864: 000000000007170c 72 FUNC GLOBAL DEFAULT 11 g_strfreev + 1865: 000000000006ef10 16 FUNC GLOBAL DEFAULT 11 g_slist_free + 1866: 000000000007f19c 104 FUNC GLOBAL DEFAULT 11 g_tree_ref + 1867: 000000000007a824 92 FUNC GLOBAL DEFAULT 11 g_timer_stop + 1868: 0000000000038f20 172 FUNC GLOBAL DEFAULT 11 g_date_time_get_week_numbering_year + 1869: 0000000000066af0 532 FUNC GLOBAL DEFAULT 11 g_regex_replace + 1870: 0000000000035a34 760 FUNC GLOBAL DEFAULT 11 g_date_strftime + 1871: 000000000004e500 160 FUNC GLOBAL DEFAULT 11 g_source_get_id + 1872: 0000000000094c40 40 FUNC GLOBAL DEFAULT 11 g_variant_type_info_n_members + 1873: 0000000000032f98 88 FUNC GLOBAL DEFAULT 11 g_datalist_get_flags + 1874: 0000000000082e24 924 FUNC GLOBAL DEFAULT 11 g_utf8_to_utf16 + 1875: 0000000000063ff4 92 FUNC GLOBAL DEFAULT 11 g_match_info_is_partial_match + 1876: 0000000000092224 420 FUNC GLOBAL DEFAULT 11 g_variant_parse + 1877: 000000000003361c 172 FUNC GLOBAL DEFAULT 11 g_date_get_month + 1878: 000000000008e16c 292 FUNC GLOBAL DEFAULT 11 g_variant_unref + 1879: 000000000003f370 376 FUNC GLOBAL DEFAULT 11 g_hash_table_find + 1880: 0000000000062e84 60 FUNC GLOBAL DEFAULT 11 g_queue_insert_after + 1881: 0000000000086390 44 FUNC GLOBAL DEFAULT 11 g_nullify_pointer + 1882: 0000000000093c64 648 FUNC GLOBAL DEFAULT 11 g_variant_serialised_byteswap + 1883: 00000000000754e4 128 FUNC GLOBAL DEFAULT 11 g_test_suite_add + 1884: 000000000001de84 120 FUNC GLOBAL DEFAULT 11 g_cond_timed_wait + 1885: 0000000000075564 128 FUNC GLOBAL DEFAULT 11 g_test_suite_add_suite + 1886: 000000000004f31c 320 FUNC GLOBAL DEFAULT 11 g_source_remove_child_source diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgobject-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgobject-2.0.so.0.txt new file mode 100644 index 000000000000..4c4b1fe84165 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libgobject-2.0.so.0.txt @@ -0,0 +1,636 @@ +Library: /lib64/libgobject-2.0.so.0 +Package: glib2-2.56.1-9.el7_9.aarch64 + + +Symbol table '.dynsym' contains 630 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000a658 0 SECTION LOCAL DEFAULT 9 + 2: 000000000006f4d0 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_time_unref + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unref + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 9: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_void + 10: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_double + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_match_info_unref + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_validate + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_take_ref + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ffi_prep_cif + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_unref + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_try_string + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_copy + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_set_data_full + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_ref + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_unref + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_set_flags + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_ref + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_find + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_nullify_pointer + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 34: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_timeout_funcs + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_unref + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_unlock + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_string + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_of_type + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_ref + 41: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_free + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_unref + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_copy + 49: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_unix_fd_source_funcs + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_get_flags + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_first_valid + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_unref + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_unref + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_destroy + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_copy + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_remove_no_notify + 61: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_sint32 + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_match_info_ref + 63: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_idle_funcs + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_destroy_link + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_remove + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_unref + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 71: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_io_watch_funcs + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.17 (2) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_ref + 75: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_float + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_lock + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 79: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_uint64 + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_free + 81: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_sint64 + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_unref + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_ref + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_unref + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_copy + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_sort + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_ref_sink + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib_gettext + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_ref + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_time_zone_unref + 98: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_pointer + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_lock + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_copy + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 103: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 104: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_unref + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_ref + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_ref + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_contains + 109: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_uint32 + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_ref + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc_n + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_unref + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_ref + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_unset_flags + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_insert_before + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_unref + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_1 + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc_n + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_parse_debug_string + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_unlock + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_unlock + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_list_clear + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_free + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_clear + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_ref + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_time_ref + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_lock + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ffi_call + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_get_data + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0_n + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_unlock + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_ref + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_ref + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_alloc + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 151: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib__private__ + 153: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_child_watch_funcs + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_unref + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_get_data + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback_indirect + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_list_init + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdupv + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_replace_data + 165: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_qsort_with_data + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_ref + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_add + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_ref + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_lock + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_ref + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_to_string + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_time_zone_ref + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strescape + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_dup_data + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_next_valid + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 180: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_unix_signal_funcs + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_unref + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new_len + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdelimit + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 185: 00000000000380c8 116 FUNC GLOBAL DEFAULT 11 g_value_array_new + 186: 00000000000272f8 780 FUNC GLOBAL DEFAULT 11 g_signal_override_class_closure + 187: 0000000000013808 280 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__STRINGv + 188: 0000000000037f04 296 FUNC GLOBAL DEFAULT 11 g_value_transform + 189: 0000000000029228 2004 FUNC GLOBAL DEFAULT 11 g_signal_connect_data + 190: 000000000001762c 500 FUNC GLOBAL DEFAULT 11 g_object_class_override_property + 191: 00000000000384a0 88 FUNC GLOBAL DEFAULT 11 g_value_array_prepend + 192: 0000000000013288 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLAGS + 193: 00000000000247bc 500 FUNC GLOBAL DEFAULT 11 g_signal_stop_emission + 194: 000000000001cba8 140 FUNC GLOBAL DEFAULT 11 g_param_spec_ref_sink + 195: 000000000002fdec 280 FUNC GLOBAL DEFAULT 11 g_type_remove_class_cache_func + 196: 000000000001ac48 168 FUNC GLOBAL DEFAULT 11 g_object_dup_qdata + 197: 000000000001d7e4 460 FUNC GLOBAL DEFAULT 11 g_param_values_cmp + 198: 0000000000036024 52 FUNC GLOBAL DEFAULT 11 g_type_ensure + 199: 0000000000036478 292 FUNC GLOBAL DEFAULT 11 g_type_module_use + 200: 0000000000036a84 324 FUNC GLOBAL DEFAULT 11 g_type_module_register_enum + 201: 00000000000324fc 600 FUNC GLOBAL DEFAULT 11 g_type_is_a + 202: 0000000000035b7c 308 FUNC GLOBAL DEFAULT 11 g_type_class_get_instance_private_offset + 203: 00000000000134dc 212 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLOATv + 204: 0000000000019b20 716 FUNC GLOBAL DEFAULT 11 g_object_get_property + 205: 0000000000037510 116 FUNC GLOBAL DEFAULT 11 g_value_unset + 206: 0000000000011bcc 236 FUNC GLOBAL DEFAULT 11 g_enum_get_value_by_name + 207: 0000000000028678 188 FUNC GLOBAL DEFAULT 11 g_signal_get_invocation_hint + 208: 0000000000013afc 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOXED + 209: 0000000000013e70 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__OBJECT + 210: 000000000002c198 28 FUNC GLOBAL DEFAULT 11 g_signal_accumulator_first_wins + 211: 0000000000033e44 520 FUNC GLOBAL DEFAULT 11 g_type_interface_get_plugin + 212: 0000000000033b50 756 FUNC GLOBAL DEFAULT 11 g_type_interface_prerequisites + 213: 000000000001d9b0 96 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_new + 214: 0000000000021594 304 FUNC GLOBAL DEFAULT 11 g_param_spec_variant + 215: 000000000002fd3c 176 FUNC GLOBAL DEFAULT 11 g_type_add_class_cache_func + 216: 000000000000d928 112 FUNC GLOBAL DEFAULT 11 g_variant_builder_get_type + 217: 000000000002607c 3524 FUNC GLOBAL DEFAULT 11 g_signal_newv + 218: 000000000000ce00 48 FUNC GLOBAL DEFAULT 11 g_object_bind_property + 219: 00000000000129ec 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UCHARv + 220: 000000000000d768 112 FUNC GLOBAL DEFAULT 11 g_bytes_get_type + 221: 0000000000013da4 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__POINTERv + 222: 0000000000025338 1732 FUNC GLOBAL DEFAULT 11 g_signal_stop_emission_by_name + 223: 0000000000031c18 44 FUNC GLOBAL DEFAULT 11 g_type_qname + 224: 00000000000308bc 100 FUNC GLOBAL DEFAULT 11 g_type_class_peek_static + 225: 000000000000e028 440 FUNC GLOBAL DEFAULT 11 g_boxed_copy + 226: 000000000001e078 912 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_list + 227: 000000000003a920 104 FUNC GLOBAL DEFAULT 11 g_value_set_uchar + 228: 000000000000f950 332 FUNC GLOBAL DEFAULT 11 g_closure_ref + 229: 00000000000144f4 260 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__FLAGSv + 230: 000000000001b53c 4 FUNC GLOBAL DEFAULT 11 g_value_set_object_take_ownership + 231: 0000000000035cb0 356 FUNC GLOBAL DEFAULT 11 g_type_add_class_private + 232: 000000000001caa4 124 FUNC GLOBAL DEFAULT 11 g_param_spec_unref + 233: 000000000003a988 108 FUNC GLOBAL DEFAULT 11 g_value_get_uchar + 234: 00000000000125bc 76 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VOIDv + 235: 000000000001d0a4 152 FUNC GLOBAL DEFAULT 11 g_param_spec_steal_qdata + 236: 0000000000036bc8 324 FUNC GLOBAL DEFAULT 11 g_type_module_register_flags + 237: 0000000000018974 936 FUNC GLOBAL DEFAULT 11 g_object_setv + 238: 000000000003785c 544 FUNC GLOBAL DEFAULT 11 g_value_register_transform_func + 239: 000000000001b0dc 224 FUNC GLOBAL DEFAULT 11 g_object_replace_data + 240: 0000000000015b20 216 FUNC GLOBAL DEFAULT 11 g_object_ref + 241: 000000000003802c 156 FUNC GLOBAL DEFAULT 11 g_value_array_get_nth + 242: 000000000003b178 152 FUNC GLOBAL DEFAULT 11 g_value_set_string + 243: 0000000000034c6c 464 FUNC GLOBAL DEFAULT 11 g_type_check_is_value_type + 244: 0000000000012e9c 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__LONGv + 245: 000000000003866c 132 FUNC GLOBAL DEFAULT 11 g_value_array_sort + 246: 00000000000300cc 248 FUNC GLOBAL DEFAULT 11 g_type_class_unref + 247: 00000000000146e8 404 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_STRING__OBJECT_POINTERv + 248: 000000000000d6f8 112 FUNC GLOBAL DEFAULT 11 g_byte_array_get_type + 249: 000000000001aee0 152 FUNC GLOBAL DEFAULT 11 g_object_get_data + 250: 0000000000035ac0 188 FUNC GLOBAL DEFAULT 11 g_type_instance_get_private + 251: 000000000000c6ac 124 FUNC GLOBAL DEFAULT 11 g_binding_get_source + 252: 0000000000070ec8 0 NOTYPE GLOBAL DEFAULT 26 _end + 253: 0000000000015cfc 640 FUNC GLOBAL DEFAULT 11 g_object_unref + 254: 000000000000dae8 112 FUNC GLOBAL DEFAULT 11 g_time_zone_get_type + 255: 00000000000208ec 164 FUNC GLOBAL DEFAULT 11 g_param_spec_int + 256: 000000000003b0a0 108 FUNC GLOBAL DEFAULT 11 g_value_set_double + 257: 000000000001d13c 64 FUNC GLOBAL DEFAULT 11 g_param_spec_get_redirect_target + 258: 000000000001d4cc 344 FUNC GLOBAL DEFAULT 11 g_param_value_validate + 259: 0000000000027070 328 FUNC GLOBAL DEFAULT 11 g_signal_new + 260: 000000000001af78 164 FUNC GLOBAL DEFAULT 11 g_object_set_data + 261: 000000000001194c 248 FUNC GLOBAL DEFAULT 11 g_flags_register_static + 262: 0000000000035780 324 FUNC GLOBAL DEFAULT 11 g_type_add_instance_private + 263: 00000000000207c0 172 FUNC GLOBAL DEFAULT 11 g_param_spec_uchar + 264: 000000000001e610 196 FUNC GLOBAL DEFAULT 11 g_value_set_param + 265: 0000000000010904 196 FUNC GLOBAL DEFAULT 11 g_cclosure_new_swap + 266: 000000000001e788 108 FUNC GLOBAL DEFAULT 11 g_value_get_param + 267: 0000000000028a50 2008 FUNC GLOBAL DEFAULT 11 g_signal_connect_closure + 268: 0000000000017820 180 FUNC GLOBAL DEFAULT 11 g_object_class_list_properties + 269: 000000000003b338 108 FUNC GLOBAL DEFAULT 11 g_value_get_string + 270: 000000000003aef4 104 FUNC GLOBAL DEFAULT 11 g_value_set_uint64 + 271: 00000000000353c4 24 FUNC GLOBAL DEFAULT 11 g_type_name_from_class + 272: 000000000001ada8 160 FUNC GLOBAL DEFAULT 11 g_object_set_qdata_full + 273: 000000000002a818 612 FUNC GLOBAL DEFAULT 11 g_signal_emitv + 274: 000000000001d360 364 FUNC GLOBAL DEFAULT 11 g_param_value_defaults + 275: 0000000000025f34 96 FUNC GLOBAL DEFAULT 11 g_signal_name + 276: 0000000000017580 172 FUNC GLOBAL DEFAULT 11 g_object_interface_find_property + 277: 0000000000018374 1332 FUNC GLOBAL DEFAULT 11 g_object_new_valist + 278: 000000000000ded8 112 FUNC GLOBAL DEFAULT 11 g_checksum_get_type + 279: 0000000000020cc4 80 FUNC GLOBAL DEFAULT 11 g_param_spec_unichar + 280: 000000000001a414 144 FUNC GLOBAL DEFAULT 11 g_object_add_weak_pointer + 281: 0000000000017e04 720 FUNC GLOBAL DEFAULT 11 g_object_new_with_properties + 282: 0000000000021bb4 304 FUNC GLOBAL DEFAULT 11 g_signal_handler_block + 283: 000000000003b10c 108 FUNC GLOBAL DEFAULT 11 g_value_get_double + 284: 0000000000036ffc 240 FUNC GLOBAL DEFAULT 11 g_type_plugin_complete_interface_info + 285: 000000000002fd28 20 FUNC GLOBAL DEFAULT 11 g_type_get_type_registration_serial + 286: 000000000001a668 152 FUNC GLOBAL DEFAULT 11 g_object_force_floating + 287: 000000000003732c 328 FUNC GLOBAL DEFAULT 11 g_value_init + 288: 0000000000012798 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__CHAR + 289: 000000000000c284 140 FUNC GLOBAL DEFAULT 11 g_binding_get_type + 290: 000000000002c4d8 108 FUNC GLOBAL DEFAULT 11 g_io_channel_get_type + 291: 00000000000375f0 172 FUNC GLOBAL DEFAULT 11 g_value_peek_pointer + 292: 00000000000384f8 88 FUNC GLOBAL DEFAULT 11 g_value_array_append + 293: 000000000003af5c 108 FUNC GLOBAL DEFAULT 11 g_value_get_uint64 + 294: 0000000000013418 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLOAT + 295: 00000000000178d4 172 FUNC GLOBAL DEFAULT 11 g_object_interface_list_properties + 296: 000000000001bf04 240 FUNC GLOBAL DEFAULT 11 g_cclosure_new_object_swap + 297: 000000000001c868 112 FUNC GLOBAL DEFAULT 11 g_param_spec_ref + 298: 000000000000d538 112 FUNC GLOBAL DEFAULT 11 g_gstring_get_type + 299: 0000000000021104 164 FUNC GLOBAL DEFAULT 11 g_param_spec_param + 300: 000000000003404c 364 FUNC GLOBAL DEFAULT 11 g_type_check_instance_is_a + 301: 0000000000017c30 304 FUNC GLOBAL DEFAULT 11 g_object_notify_by_pspec + 302: 000000000000c89c 284 FUNC GLOBAL DEFAULT 11 g_binding_unbind + 303: 0000000000036244 224 FUNC GLOBAL DEFAULT 11 g_type_module_get_type + 304: 000000000002ff04 176 FUNC GLOBAL DEFAULT 11 g_type_add_interface_check + 305: 000000000002c544 100 FUNC GLOBAL DEFAULT 11 g_io_condition_get_type + 306: 000000000003b410 104 FUNC GLOBAL DEFAULT 11 g_value_set_pointer + 307: 00000000000180d4 672 FUNC GLOBAL DEFAULT 11 g_object_newv + 308: 000000000002a258 312 FUNC GLOBAL DEFAULT 11 g_signal_handlers_disconnect_matched + 309: 0000000000027bf8 2688 FUNC GLOBAL DEFAULT 11 g_signal_chain_from_overridden_handler + 310: 0000000000033658 52 FUNC GLOBAL DEFAULT 11 g_type_fundamental + 311: 000000000003aa64 108 FUNC GLOBAL DEFAULT 11 g_value_get_boolean + 312: 0000000000013ce0 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__POINTER + 313: 000000000001b278 180 FUNC GLOBAL DEFAULT 11 g_object_steal_data + 314: 0000000000012ab8 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__INT + 315: 000000000003a7e0 108 FUNC GLOBAL DEFAULT 11 g_value_get_char + 316: 000000000000d998 112 FUNC GLOBAL DEFAULT 11 g_variant_dict_get_type + 317: 0000000000070ec8 0 NOTYPE GLOBAL DEFAULT 26 __end__ + 318: 000000000001b32c 288 FUNC GLOBAL DEFAULT 11 g_value_set_object + 319: 000000000000f190 204 FUNC GLOBAL DEFAULT 11 g_closure_set_meta_marshal + 320: 000000000003a778 104 FUNC GLOBAL DEFAULT 11 g_value_set_char + 321: 000000000000c630 124 FUNC GLOBAL DEFAULT 11 g_binding_get_flags + 322: 000000000000df48 112 FUNC GLOBAL DEFAULT 11 g_option_group_get_type + 323: 0000000000024d60 1496 FUNC GLOBAL DEFAULT 11 g_signal_parse_name + 324: 0000000000070416 0 NOTYPE GLOBAL DEFAULT 25 _edata + 325: 0000000000032a70 544 FUNC GLOBAL DEFAULT 11 g_type_set_qdata + 326: 0000000000036dac 148 FUNC GLOBAL DEFAULT 11 g_type_plugin_use + 327: 000000000001b61c 376 FUNC GLOBAL DEFAULT 11 g_signal_connect_object + 328: 0000000000017dfc 8 FUNC GLOBAL DEFAULT 11 g_object_get_type + 329: 00000000000198f8 256 FUNC GLOBAL DEFAULT 11 g_object_set + 330: 0000000000032980 240 FUNC GLOBAL DEFAULT 11 g_type_get_qdata + 331: 00000000000271b8 320 FUNC GLOBAL DEFAULT 11 g_signal_new_class_handler + 332: 000000000001cf70 148 FUNC GLOBAL DEFAULT 11 g_param_spec_set_qdata + 333: 0000000000020714 172 FUNC GLOBAL DEFAULT 11 g_param_spec_char + 334: 000000000000ddf8 112 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_type + 335: 000000000001c384 8 FUNC GLOBAL DEFAULT 11 g_weak_ref_init + 336: 0000000000034b98 212 FUNC GLOBAL DEFAULT 11 g_type_check_instance + 337: 000000000001285c 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__CHARv + 338: 000000000001cef8 120 FUNC GLOBAL DEFAULT 11 g_param_spec_get_qdata + 339: 0000000000034e3c 456 FUNC GLOBAL DEFAULT 11 g_type_check_value + 340: 0000000000032820 352 FUNC GLOBAL DEFAULT 11 g_type_interfaces + 341: 000000000001b540 108 FUNC GLOBAL DEFAULT 11 g_value_get_object + 342: 0000000000010334 468 FUNC GLOBAL DEFAULT 11 g_closure_invoke + 343: 0000000000010e28 1772 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_generic_va + 344: 0000000000012514 168 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VOID + 345: 000000000001cb30 120 FUNC GLOBAL DEFAULT 11 g_param_spec_sink + 346: 0000000000030920 256 FUNC GLOBAL DEFAULT 11 g_type_class_peek_parent + 347: 000000000001c208 380 FUNC GLOBAL DEFAULT 11 g_weak_ref_set + 348: 000000000003bb90 112 FUNC GLOBAL DEFAULT 11 g_value_set_gtype + 349: 0000000000037c68 444 FUNC GLOBAL DEFAULT 11 g_value_set_instance + 350: 000000000003b62c 108 FUNC GLOBAL DEFAULT 11 g_value_get_variant + 351: 00000000000214ac 232 FUNC GLOBAL DEFAULT 11 g_param_spec_override + 352: 0000000000033484 348 FUNC GLOBAL DEFAULT 11 g_type_add_interface_static + 353: 0000000000070416 0 NOTYPE GLOBAL DEFAULT 26 __bss_start__ + 354: 00000000000358c4 508 FUNC GLOBAL DEFAULT 11 g_type_class_adjust_private_offset + 355: 000000000003bc00 116 FUNC GLOBAL DEFAULT 11 g_value_get_gtype + 356: 000000000001e7f4 112 FUNC GLOBAL DEFAULT 11 g_value_dup_param + 357: 000000000002bb0c 1612 FUNC GLOBAL DEFAULT 11 g_signal_emit_by_name + 358: 000000000003bb34 92 FUNC GLOBAL DEFAULT 11 g_gtype_get_type + 359: 000000000000dd88 112 FUNC GLOBAL DEFAULT 11 g_pollfd_get_type + 360: 000000000003aad0 104 FUNC GLOBAL DEFAULT 11 g_value_set_int + 361: 000000000000fd48 468 FUNC GLOBAL DEFAULT 11 g_closure_invalidate + 362: 000000000001c138 80 FUNC GLOBAL DEFAULT 11 g_object_compat_control + 363: 0000000000011854 248 FUNC GLOBAL DEFAULT 11 g_enum_register_static + 364: 00000000000386f0 184 FUNC GLOBAL DEFAULT 11 g_value_array_sort_with_data + 365: 0000000000037b54 276 FUNC GLOBAL DEFAULT 11 g_value_copy + 366: 000000000001e784 4 FUNC GLOBAL DEFAULT 11 g_value_set_param_take_ownership + 367: 000000000002a120 312 FUNC GLOBAL DEFAULT 11 g_signal_handlers_unblock_matched + 368: 000000000001487c 240 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__BOXED_BOXED + 369: 000000000000dfb8 112 FUNC GLOBAL DEFAULT 11 g_strv_get_type + 370: 000000000001e864 196 FUNC GLOBAL DEFAULT 11 g_param_spec_get_default_value + 371: 00000000000192e8 524 FUNC GLOBAL DEFAULT 11 g_object_getv + 372: 0000000000013674 208 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__DOUBLEv + 373: 0000000000021ce4 292 FUNC GLOBAL DEFAULT 11 g_signal_handler_unblock + 374: 000000000000e6c4 248 FUNC GLOBAL DEFAULT 11 g_value_take_boxed + 375: 0000000000026e40 252 FUNC GLOBAL DEFAULT 11 g_signal_set_va_marshaller + 376: 000000000001e928 24 FUNC GLOBAL DEFAULT 11 g_param_spec_get_name_quark + 377: 0000000000011e98 232 FUNC GLOBAL DEFAULT 11 g_flags_get_value_by_nick + 378: 000000000000dd18 112 FUNC GLOBAL DEFAULT 11 g_source_get_type + 379: 0000000000035004 504 FUNC GLOBAL DEFAULT 11 g_type_check_value_holds + 380: 000000000001735c 340 FUNC GLOBAL DEFAULT 11 g_object_interface_install_property + 381: 000000000000da08 112 FUNC GLOBAL DEFAULT 11 g_error_get_type + 382: 0000000000012b7c 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__INTv + 383: 0000000000010784 124 FUNC GLOBAL DEFAULT 11 g_closure_set_marshal + 384: 000000000000d3e8 112 FUNC GLOBAL DEFAULT 11 g_value_get_type + 385: 0000000000037e24 224 FUNC GLOBAL DEFAULT 11 g_value_type_transformable + 386: 000000000003470c 696 FUNC GLOBAL DEFAULT 11 g_type_check_instance_cast + 387: 000000000000d208 8 FUNC GLOBAL DEFAULT 11 g_variant_get_gtype + 388: 00000000000212c4 80 FUNC GLOBAL DEFAULT 11 g_param_spec_gtype + 389: 000000000000fa9c 684 FUNC GLOBAL DEFAULT 11 g_closure_unref + 390: 000000000003ad4c 104 FUNC GLOBAL DEFAULT 11 g_value_set_ulong + 391: 000000000003769c 448 FUNC GLOBAL DEFAULT 11 g_value_init_from_instance + 392: 0000000000030860 92 FUNC GLOBAL DEFAULT 11 g_type_class_peek + 393: 0000000000021314 244 FUNC GLOBAL DEFAULT 11 g_param_spec_value_array + 394: 0000000000011a44 196 FUNC GLOBAL DEFAULT 11 g_enum_complete_type_info + 395: 000000000003adb4 108 FUNC GLOBAL DEFAULT 11 g_value_get_ulong + 396: 0000000000070ec8 0 NOTYPE GLOBAL DEFAULT 26 _bss_end__ + 397: 000000000003b2a8 140 FUNC GLOBAL DEFAULT 11 g_value_take_string + 398: 00000000000174b0 208 FUNC GLOBAL DEFAULT 11 g_object_class_find_property + 399: 00000000000121d0 404 FUNC GLOBAL DEFAULT 11 g_flags_to_string + 400: 0000000000012028 232 FUNC GLOBAL DEFAULT 11 g_flags_get_first_value + 401: 0000000000035598 488 FUNC GLOBAL DEFAULT 11 g_type_class_add_private + 402: 000000000002c158 64 FUNC GLOBAL DEFAULT 11 g_signal_accumulator_true_handled + 403: 000000000001da10 392 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_insert + 404: 000000000001bc1c 504 FUNC GLOBAL DEFAULT 11 g_object_watch_closure + 405: 0000000000010a5c 308 FUNC GLOBAL DEFAULT 11 g_signal_type_cclosure_new + 406: 0000000000031ba0 120 FUNC GLOBAL DEFAULT 11 g_type_name + 407: 000000000002286c 732 FUNC GLOBAL DEFAULT 11 g_signal_handler_disconnect + 408: 0000000000031aa4 252 FUNC GLOBAL DEFAULT 11 g_type_default_interface_unref + 409: 0000000000030768 248 FUNC GLOBAL DEFAULT 11 g_type_class_unref_uncached + 410: 0000000000017d60 156 FUNC GLOBAL DEFAULT 11 g_object_thaw_notify + 411: 0000000000021294 48 FUNC GLOBAL DEFAULT 11 g_param_spec_pointer + 412: 000000000003ba58 220 FUNC GLOBAL DEFAULT 11 g_pointer_type_register_static + 413: 0000000000032118 544 FUNC GLOBAL DEFAULT 11 g_type_register_static + 414: 0000000000038304 412 FUNC GLOBAL DEFAULT 11 g_value_array_insert + 415: 000000000003813c 172 FUNC GLOBAL DEFAULT 11 g_value_array_free + 416: 000000000000ce30 276 FUNC GLOBAL DEFAULT 11 g_object_bind_property_with_closures + 417: 00000000000142e4 280 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINT_POINTERv + 418: 000000000001d004 160 FUNC GLOBAL DEFAULT 11 g_param_spec_set_qdata_full + 419: 0000000000020ad8 164 FUNC GLOBAL DEFAULT 11 g_param_spec_ulong + 420: 0000000000011cb8 236 FUNC GLOBAL DEFAULT 11 g_flags_get_value_by_name + 421: 0000000000018d1c 1484 FUNC GLOBAL DEFAULT 11 g_object_set_valist + 422: 0000000000014214 208 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINT_POINTER + 423: 0000000000012928 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UCHAR + 424: 00000000000171f4 360 FUNC GLOBAL DEFAULT 11 g_object_class_install_properties + 425: 000000000003bc78 0 FUNC GLOBAL DEFAULT 12 _fini + 426: 000000000000c820 124 FUNC GLOBAL DEFAULT 11 g_binding_get_target_property + 427: 00000000000259fc 752 FUNC GLOBAL DEFAULT 11 g_signal_lookup + 428: 000000000003b714 836 FUNC GLOBAL DEFAULT 11 g_strdup_value_contents + 429: 000000000001dfa4 212 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_list_owned + 430: 000000000002c958 68 FUNC GLOBAL DEFAULT 11 g_source_set_dummy_callback + 431: 0000000000032418 44 FUNC GLOBAL DEFAULT 11 g_type_parent + 432: 000000000000d688 112 FUNC GLOBAL DEFAULT 11 g_ptr_array_get_type + 433: 0000000000012c48 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINT + 434: 000000000001c0ac 140 FUNC GLOBAL DEFAULT 11 g_initially_unowned_get_type + 435: 000000000002c7a4 436 FUNC GLOBAL DEFAULT 11 g_source_set_closure + 436: 0000000000037a7c 216 FUNC GLOBAL DEFAULT 11 g_value_type_compatible + 437: 00000000000365f4 684 FUNC GLOBAL DEFAULT 11 g_type_module_register_type + 438: 000000000001d274 236 FUNC GLOBAL DEFAULT 11 g_param_value_set_default + 439: 000000000001243c 108 FUNC GLOBAL DEFAULT 11 g_value_set_flags + 440: 0000000000012dd8 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__LONG + 441: 000000000000d4c8 112 FUNC GLOBAL DEFAULT 11 g_date_get_type + 442: 00000000000124a8 108 FUNC GLOBAL DEFAULT 11 g_value_get_flags + 443: 0000000000019af8 40 FUNC GLOBAL DEFAULT 11 g_object_set_property + 444: 00000000000139e4 280 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__PARAMv + 445: 00000000000194f4 1028 FUNC GLOBAL DEFAULT 11 g_object_get_valist + 446: 000000000000a658 0 FUNC GLOBAL DEFAULT 9 _init + 447: 000000000001a534 116 FUNC GLOBAL DEFAULT 11 g_object_is_floating + 448: 000000000001087c 136 FUNC GLOBAL DEFAULT 11 g_cclosure_new + 449: 000000000000c9b8 1096 FUNC GLOBAL DEFAULT 11 g_object_bind_property_full + 450: 0000000000032d8c 8 FUNC GLOBAL DEFAULT 11 g_type_get_instance_count + 451: 000000000000e494 304 FUNC GLOBAL DEFAULT 11 g_value_set_boxed + 452: 0000000000026f3c 308 FUNC GLOBAL DEFAULT 11 g_signal_new_valist + 453: 0000000000031e2c 748 FUNC GLOBAL DEFAULT 11 g_type_register_fundamental + 454: 000000000002109c 104 FUNC GLOBAL DEFAULT 11 g_param_spec_string + 455: 0000000000017100 244 FUNC GLOBAL DEFAULT 11 g_object_class_install_property + 456: 000000000001db98 212 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_remove + 457: 000000000003ab38 108 FUNC GLOBAL DEFAULT 11 g_value_get_int + 458: 000000000000e33c 168 FUNC GLOBAL DEFAULT 11 g_value_get_boxed + 459: 0000000000013920 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__PARAM + 460: 0000000000010154 480 FUNC GLOBAL DEFAULT 11 g_closure_remove_finalize_notifier + 461: 000000000001496c 512 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv + 462: 00000000000344b0 380 FUNC GLOBAL DEFAULT 11 g_type_add_interface_dynamic + 463: 000000000000d37c 108 FUNC GLOBAL DEFAULT 11 g_closure_get_type + 464: 00000000000381e8 284 FUNC GLOBAL DEFAULT 11 g_value_array_copy + 465: 0000000000032444 48 FUNC GLOBAL DEFAULT 11 g_type_depth + 466: 0000000000020ff8 164 FUNC GLOBAL DEFAULT 11 g_param_spec_double + 467: 00000000000188a8 204 FUNC GLOBAL DEFAULT 11 g_object_new + 468: 00000000000249b0 620 FUNC GLOBAL DEFAULT 11 g_signal_add_emission_hook + 469: 000000000000db58 112 FUNC GLOBAL DEFAULT 11 g_key_file_get_type + 470: 000000000001b44c 240 FUNC GLOBAL DEFAULT 11 g_value_take_object + 471: 00000000000199f8 256 FUNC GLOBAL DEFAULT 11 g_object_get + 472: 0000000000027604 288 FUNC GLOBAL DEFAULT 11 g_signal_override_class_handler + 473: 000000000000c7a4 124 FUNC GLOBAL DEFAULT 11 g_binding_get_source_property + 474: 000000000003ac0c 108 FUNC GLOBAL DEFAULT 11 g_value_get_uint + 475: 0000000000037474 156 FUNC GLOBAL DEFAULT 11 g_value_reset + 476: 0000000000020e34 288 FUNC GLOBAL DEFAULT 11 g_param_spec_flags + 477: 000000000001d624 448 FUNC GLOBAL DEFAULT 11 g_param_value_convert + 478: 0000000000038550 284 FUNC GLOBAL DEFAULT 11 g_value_array_remove + 479: 000000000001dc6c 824 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_lookup + 480: 000000000003aba4 104 FUNC GLOBAL DEFAULT 11 g_value_set_uint + 481: 000000000003ace0 108 FUNC GLOBAL DEFAULT 11 g_value_get_long + 482: 000000000002ba5c 176 FUNC GLOBAL DEFAULT 11 g_signal_emit + 483: 0000000000019dec 836 FUNC GLOBAL DEFAULT 11 g_object_disconnect + 484: 0000000000029a98 600 FUNC GLOBAL DEFAULT 11 g_signal_handlers_destroy + 485: 000000000003554c 76 FUNC GLOBAL DEFAULT 11 g_type_init + 486: 00000000000299fc 156 FUNC GLOBAL DEFAULT 11 g_signal_handler_is_connected + 487: 0000000000020c20 164 FUNC GLOBAL DEFAULT 11 g_param_spec_uint64 + 488: 000000000000f5d8 452 FUNC GLOBAL DEFAULT 11 g_closure_add_finalize_notifier + 489: 000000000003ac78 104 FUNC GLOBAL DEFAULT 11 g_value_set_long + 490: 000000000001ae48 152 FUNC GLOBAL DEFAULT 11 g_object_steal_qdata + 491: 000000000000e5c4 256 FUNC GLOBAL DEFAULT 11 g_value_set_static_boxed + 492: 0000000000025cec 584 FUNC GLOBAL DEFAULT 11 g_signal_list_ids + 493: 0000000000035e14 528 FUNC GLOBAL DEFAULT 11 g_type_class_get_private + 494: 000000000001b794 1160 FUNC GLOBAL DEFAULT 11 g_object_connect + 495: 00000000000363f0 136 FUNC GLOBAL DEFAULT 11 g_type_module_set_name + 496: 000000000001d17c 124 FUNC GLOBAL DEFAULT 11 g_param_spec_get_nick + 497: 0000000000017980 168 FUNC GLOBAL DEFAULT 11 g_object_run_dispose + 498: 0000000000032338 224 FUNC GLOBAL DEFAULT 11 g_type_register_static_simple + 499: 000000000001c188 128 FUNC GLOBAL DEFAULT 11 g_weak_ref_get + 500: 000000000000d7d8 112 FUNC GLOBAL DEFAULT 11 g_regex_get_type + 501: 00000000000211a8 236 FUNC GLOBAL DEFAULT 11 g_param_spec_boxed + 502: 0000000000020990 164 FUNC GLOBAL DEFAULT 11 g_param_spec_uint + 503: 0000000000017aa8 392 FUNC GLOBAL DEFAULT 11 g_object_notify + 504: 0000000000036324 204 FUNC GLOBAL DEFAULT 11 g_type_module_unuse + 505: 000000000003a84c 104 FUNC GLOBAL DEFAULT 11 g_value_set_schar + 506: 00000000000353dc 24 FUNC GLOBAL DEFAULT 11 g_type_name_from_instance + 507: 0000000000029cf0 760 FUNC GLOBAL DEFAULT 11 g_signal_handler_find + 508: 0000000000020a34 164 FUNC GLOBAL DEFAULT 11 g_param_spec_long + 509: 0000000000070416 0 NOTYPE GLOBAL DEFAULT 26 __bss_start + 510: 000000000003a8b4 108 FUNC GLOBAL DEFAULT 11 g_value_get_schar + 511: 0000000000027724 1236 FUNC GLOBAL DEFAULT 11 g_signal_chain_from_overridden + 512: 000000000003b334 4 FUNC GLOBAL DEFAULT 11 g_value_set_string_take_ownership + 513: 0000000000037584 108 FUNC GLOBAL DEFAULT 11 g_value_fits_pointer + 514: 000000000001e408 520 FUNC GLOBAL DEFAULT 11 g_param_type_register_static + 515: 000000000000d458 112 FUNC GLOBAL DEFAULT 11 g_value_array_get_type + 516: 000000000001bff4 184 FUNC GLOBAL DEFAULT 11 g_closure_new_object + 517: 0000000000024c1c 324 FUNC GLOBAL DEFAULT 11 g_signal_remove_emission_hook + 518: 00000000000301c4 1444 FUNC GLOBAL DEFAULT 11 g_type_class_ref + 519: 000000000000f25c 892 FUNC GLOBAL DEFAULT 11 g_closure_add_marshal_guards + 520: 000000000001cc90 616 FUNC GLOBAL DEFAULT 11 g_param_spec_internal + 521: 000000000001b01c 192 FUNC GLOBAL DEFAULT 11 g_object_dup_data + 522: 00000000000705e8 8 OBJECT GLOBAL DEFAULT 26 g_param_spec_types + 523: 000000000001be14 240 FUNC GLOBAL DEFAULT 11 g_cclosure_new_object + 524: 0000000000030d88 3272 FUNC GLOBAL DEFAULT 11 g_type_default_interface_ref + 525: 000000000000ffd4 384 FUNC GLOBAL DEFAULT 11 g_closure_remove_invalidate_notifier + 526: 000000000003ae20 104 FUNC GLOBAL DEFAULT 11 g_value_set_int64 + 527: 000000000001334c 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLAGSv + 528: 0000000000012110 192 FUNC GLOBAL DEFAULT 11 g_enum_to_string + 529: 0000000000012d0c 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINTv + 530: 000000000003b698 124 FUNC GLOBAL DEFAULT 11 g_value_dup_variant + 531: 000000000003ae88 108 FUNC GLOBAL DEFAULT 11 g_value_get_int64 + 532: 0000000000012608 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOOLEAN + 533: 0000000000021408 164 FUNC GLOBAL DEFAULT 11 g_param_spec_object + 534: 0000000000032d94 384 FUNC GLOBAL DEFAULT 11 g_type_test_flags + 535: 000000000001cc34 92 FUNC GLOBAL DEFAULT 11 g_param_spec_get_name + 536: 0000000000034304 428 FUNC GLOBAL DEFAULT 11 g_type_register_dynamic + 537: 0000000000011f80 168 FUNC GLOBAL DEFAULT 11 g_enum_get_value + 538: 000000000000d5a8 112 FUNC GLOBAL DEFAULT 11 g_hash_table_get_type + 539: 000000000000da78 112 FUNC GLOBAL DEFAULT 11 g_date_time_get_type + 540: 0000000000013f34 260 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__OBJECTv + 541: 000000000003afc8 108 FUNC GLOBAL DEFAULT 11 g_value_set_float + 542: 00000000000143fc 248 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__FLAGS + 543: 00000000000131bc 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ENUMv + 544: 000000000000dbc8 112 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_type + 545: 00000000000126cc 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOOLEANv + 546: 000000000001a4a4 144 FUNC GLOBAL DEFAULT 11 g_object_remove_weak_pointer + 547: 0000000000011b08 196 FUNC GLOBAL DEFAULT 11 g_flags_complete_type_info + 548: 000000000003b034 108 FUNC GLOBAL DEFAULT 11 g_value_get_float + 549: 0000000000031c44 140 FUNC GLOBAL DEFAULT 11 g_type_from_name + 550: 000000000003b3a4 108 FUNC GLOBAL DEFAULT 11 g_value_dup_string + 551: 0000000000034678 148 FUNC GLOBAL DEFAULT 11 g_type_check_class_is_a + 552: 000000000000ef70 544 FUNC GLOBAL DEFAULT 11 g_closure_new_simple + 553: 000000000003b478 108 FUNC GLOBAL DEFAULT 11 g_value_get_pointer + 554: 0000000000036d0c 160 FUNC GLOBAL DEFAULT 11 g_type_plugin_get_type + 555: 000000000000e3e4 176 FUNC GLOBAL DEFAULT 11 g_value_dup_boxed + 556: 000000000000dca8 112 FUNC GLOBAL DEFAULT 11 g_main_context_get_type + 557: 00000000000351fc 456 FUNC GLOBAL DEFAULT 11 g_type_value_table_peek + 558: 000000000001aa5c 120 FUNC GLOBAL DEFAULT 11 g_object_get_qdata + 559: 0000000000020b7c 164 FUNC GLOBAL DEFAULT 11 g_param_spec_int64 + 560: 0000000000036e40 152 FUNC GLOBAL DEFAULT 11 g_type_plugin_unuse + 561: 000000000001a130 364 FUNC GLOBAL DEFAULT 11 g_object_weak_ref + 562: 00000000000130f8 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ENUM + 563: 000000000003b588 164 FUNC GLOBAL DEFAULT 11 g_value_take_variant + 564: 0000000000030a20 408 FUNC GLOBAL DEFAULT 11 g_type_interface_peek + 565: 0000000000032c90 252 FUNC GLOBAL DEFAULT 11 g_type_query + 566: 0000000000029fe8 312 FUNC GLOBAL DEFAULT 11 g_signal_handlers_block_matched + 567: 0000000000020f54 164 FUNC GLOBAL DEFAULT 11 g_param_spec_float + 568: 0000000000036ed8 292 FUNC GLOBAL DEFAULT 11 g_type_plugin_complete_type_info + 569: 000000000001302c 204 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ULONGv + 570: 000000000000d848 112 FUNC GLOBAL DEFAULT 11 g_match_info_get_type + 571: 000000000002ffb4 280 FUNC GLOBAL DEFAULT 11 g_type_remove_interface_check + 572: 000000000003a9f4 112 FUNC GLOBAL DEFAULT 11 g_value_set_boolean + 573: 0000000000017a28 128 FUNC GLOBAL DEFAULT 11 g_object_freeze_notify + 574: 000000000000c728 124 FUNC GLOBAL DEFAULT 11 g_binding_get_target + 575: 000000000000d8b8 112 FUNC GLOBAL DEFAULT 11 g_variant_type_get_gtype + 576: 0000000000013744 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__STRING + 577: 0000000000013bc0 288 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOXEDv + 578: 0000000000028734 796 FUNC GLOBAL DEFAULT 11 g_signal_connect_closure_by_id + 579: 000000000000bfe0 104 FUNC GLOBAL DEFAULT 11 g_binding_flags_get_type + 580: 0000000000010b90 664 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_generic + 581: 0000000000012f68 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ULONG + 582: 000000000000d210 364 FUNC GLOBAL DEFAULT 11 g_boxed_type_register_static + 583: 000000000000e7bc 4 FUNC GLOBAL DEFAULT 11 g_value_set_boxed_take_ownership + 584: 000000000002a390 1160 FUNC GLOBAL DEFAULT 11 g_signal_has_handler_pending + 585: 000000000000de68 112 FUNC GLOBAL DEFAULT 11 g_thread_get_type + 586: 00000000000135b0 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__DOUBLE + 587: 000000000000ff1c 184 FUNC GLOBAL DEFAULT 11 g_closure_sink + 588: 000000000003320c 632 FUNC GLOBAL DEFAULT 11 g_type_free_instance + 589: 000000000001a8ac 408 FUNC GLOBAL DEFAULT 11 g_object_remove_toggle_ref + 590: 00000000000123d0 108 FUNC GLOBAL DEFAULT 11 g_value_get_enum + 591: 000000000001acf0 184 FUNC GLOBAL DEFAULT 11 g_object_replace_qdata + 592: 0000000000032f14 760 FUNC GLOBAL DEFAULT 11 g_type_create_instance + 593: 0000000000070ec8 0 NOTYPE GLOBAL DEFAULT 26 __bss_end__ + 594: 0000000000012364 108 FUNC GLOBAL DEFAULT 11 g_value_set_enum + 595: 0000000000011da4 244 FUNC GLOBAL DEFAULT 11 g_enum_get_value_by_nick + 596: 000000000001aa44 24 FUNC GLOBAL DEFAULT 11 g_clear_object + 597: 000000000001abb4 148 FUNC GLOBAL DEFAULT 11 g_object_set_qdata + 598: 000000000002aa7c 4064 FUNC GLOBAL DEFAULT 11 g_signal_emit_valist + 599: 00000000000140fc 280 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VARIANTv + 600: 000000000001a5a8 192 FUNC GLOBAL DEFAULT 11 g_object_ref_sink + 601: 00000000000145f8 240 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_STRING__OBJECT_POINTER + 602: 000000000003462c 76 FUNC GLOBAL DEFAULT 11 g_type_check_instance_is_fundamentally_a + 603: 000000000001c38c 48 FUNC GLOBAL DEFAULT 11 g_weak_ref_clear + 604: 00000000000354e0 108 FUNC GLOBAL DEFAULT 11 g_type_init_with_debug_flags + 605: 0000000000020d14 288 FUNC GLOBAL DEFAULT 11 g_param_spec_enum + 606: 0000000000030bb8 464 FUNC GLOBAL DEFAULT 11 g_type_interface_peek_parent + 607: 0000000000032474 136 FUNC GLOBAL DEFAULT 11 g_type_next_base + 608: 000000000003b4e4 164 FUNC GLOBAL DEFAULT 11 g_value_set_variant + 609: 000000000001d1f8 124 FUNC GLOBAL DEFAULT 11 g_param_spec_get_blurb + 610: 0000000000032754 204 FUNC GLOBAL DEFAULT 11 g_type_children + 611: 00000000000335e0 44 FUNC GLOBAL DEFAULT 11 g_type_get_plugin + 612: 000000000001b1bc 188 FUNC GLOBAL DEFAULT 11 g_object_set_data_full + 613: 000000000000d618 112 FUNC GLOBAL DEFAULT 11 g_array_get_type + 614: 0000000000031a50 84 FUNC GLOBAL DEFAULT 11 g_type_default_interface_peek + 615: 000000000001b5ac 112 FUNC GLOBAL DEFAULT 11 g_value_dup_object + 616: 000000000003368c 1220 FUNC GLOBAL DEFAULT 11 g_type_interface_add_prerequisite + 617: 000000000003b210 152 FUNC GLOBAL DEFAULT 11 g_value_set_static_string + 618: 000000000000f79c 436 FUNC GLOBAL DEFAULT 11 g_closure_add_invalidate_notifier + 619: 000000000000e1e0 348 FUNC GLOBAL DEFAULT 11 g_boxed_free + 620: 0000000000014038 196 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VARIANT + 621: 00000000000368a0 484 FUNC GLOBAL DEFAULT 11 g_type_module_add_interface + 622: 000000000001e6d4 176 FUNC GLOBAL DEFAULT 11 g_value_take_param + 623: 000000000001a29c 376 FUNC GLOBAL DEFAULT 11 g_object_weak_unref + 624: 000000000003360c 76 FUNC GLOBAL DEFAULT 11 g_type_fundamental_next + 625: 000000000002086c 128 FUNC GLOBAL DEFAULT 11 g_param_spec_boolean + 626: 000000000001a704 424 FUNC GLOBAL DEFAULT 11 g_object_add_toggle_ref + 627: 000000000000dc38 112 FUNC GLOBAL DEFAULT 11 g_main_loop_get_type + 628: 0000000000025f94 232 FUNC GLOBAL DEFAULT 11 g_signal_query + 629: 00000000000349c4 468 FUNC GLOBAL DEFAULT 11 g_type_check_class_cast diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libm.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libm.so.6.txt new file mode 100644 index 000000000000..3ce00cf915ad --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libm.so.6.txt @@ -0,0 +1,420 @@ +Library: /lib64/libm.so.6 +Package: glibc-2.17-326.el7_9.aarch64 + + +Symbol table '.dynsym' contains 414 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000004ff0 0 SECTION LOCAL DEFAULT 11 + 2: 00000000000afd50 0 SECTION LOCAL DEFAULT 22 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (3) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtold_nan@GLIBC_PRIVATE (4) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 TLS GLOBAL DEFAULT UND errno@GLIBC_PRIVATE (4) + 8: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (3) + 9: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (3) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtod_nan@GLIBC_PRIVATE (4) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (3) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtof_nan@GLIBC_PRIVATE (4) + 16: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 18: 000000000001c9f0 64 FUNC GLOBAL DEFAULT 13 j1@@GLIBC_2.17 + 19: 000000000001fa38 24 FUNC GLOBAL DEFAULT 13 __finite@@GLIBC_2.17 + 20: 000000000001f850 12 FUNC WEAK DEFAULT 13 lrint@@GLIBC_2.17 + 21: 0000000000027890 680 FUNC WEAK DEFAULT 13 clogf@@GLIBC_2.17 + 22: 0000000000028268 508 FUNC WEAK DEFAULT 13 ctanhf@@GLIBC_2.17 + 23: 0000000000026c80 388 FUNC GLOBAL DEFAULT 13 __log2f_finite@@GLIBC_2.17 + 24: 000000000004cf70 1692 FUNC WEAK DEFAULT 13 clogl@@GLIBC_2.17 + 25: 000000000001d7f4 8 FUNC WEAK DEFAULT 13 cimag@@GLIBC_2.17 + 26: 000000000004e760 1084 FUNC WEAK DEFAULT 13 ctanhl@@GLIBC_2.17 + 27: 000000000000ece0 524 FUNC GLOBAL DEFAULT 13 __yn_finite@@GLIBC_2.17 + 28: 000000000001cbe8 184 FUNC WEAK DEFAULT 13 gamma@@GLIBC_2.17 + 29: 000000000001c6dc 132 FUNC WEAK DEFAULT 13 pow10@@GLIBC_2.17 + 30: 0000000000029064 12 FUNC WEAK DEFAULT 13 llrintf@@GLIBC_2.17 + 31: 000000000001f848 8 FUNC WEAK DEFAULT 13 fma@@GLIBC_2.17 + 32: 0000000000051210 220 FUNC WEAK DEFAULT 13 llrintl@@GLIBC_2.17 + 33: 000000000001c884 132 FUNC WEAK DEFAULT 13 hypot@@GLIBC_2.17 + 34: 0000000000011bf8 476 FUNC GLOBAL DEFAULT 13 __sqrt_finite@@GLIBC_2.17 + 35: 000000000001cad8 68 FUNC GLOBAL DEFAULT 13 jn@@GLIBC_2.17 + 36: 00000000000154ec 308 FUNC WEAK DEFAULT 13 nextafter@@GLIBC_2.17 + 37: 0000000000027d68 712 FUNC WEAK DEFAULT 13 csinf@@GLIBC_2.17 + 38: 000000000001da68 620 FUNC WEAK DEFAULT 13 csinh@@GLIBC_2.17 + 39: 0000000000025784 368 FUNC WEAK DEFAULT 13 nexttowardf@@GLIBC_2.17 + 40: 0000000000026188 64 FUNC GLOBAL DEFAULT 13 j0f@@GLIBC_2.17 + 41: 000000000004dc90 1312 FUNC WEAK DEFAULT 13 csinl@@GLIBC_2.17 + 42: 0000000000048dec 416 FUNC WEAK DEFAULT 13 nexttowardl@@GLIBC_2.17 + 43: 000000000004a050 216 FUNC WEAK DEFAULT 13 j0l@@GLIBC_2.17 + 44: 000000000001cca0 140 FUNC WEAK DEFAULT 13 lgamma_r@@GLIBC_2.17 + 45: 0000000000008380 56 FUNC GLOBAL DEFAULT 13 feenableexcept@@GLIBC_2.17 + 46: 0000000000011a68 388 FUNC GLOBAL DEFAULT 13 __sinh_finite@@GLIBC_2.17 + 47: 000000000000ddc0 536 FUNC GLOBAL DEFAULT 13 __j0_finite@@GLIBC_2.17 + 48: 0000000000026f90 8 FUNC WEAK DEFAULT 13 nearbyintf@@GLIBC_2.17 + 49: 0000000000008060 8 FUNC WEAK DEFAULT 13 matherr@@GLIBC_2.17 + 50: 0000000000025f5c 132 FUNC WEAK DEFAULT 13 exp10f@@GLIBC_2.17 + 51: 00000000000258fc 220 FUNC WEAK DEFAULT 13 scalblnf@@GLIBC_2.17 + 52: 000000000004bf60 292 FUNC WEAK DEFAULT 13 nearbyintl@@GLIBC_2.17 + 53: 000000000001c5c4 4 FUNC WEAK DEFAULT 13 drem@@GLIBC_2.17 + 54: 0000000000049d90 112 FUNC WEAK DEFAULT 13 exp10l@@GLIBC_2.17 + 55: 0000000000049070 568 FUNC WEAK DEFAULT 13 scalblnl@@GLIBC_2.17 + 56: 0000000000026a18 168 FUNC WEAK DEFAULT 13 fdimf@@GLIBC_2.17 + 57: 000000000003ff50 4104 FUNC GLOBAL DEFAULT 13 __powl_finite@@GLIBC_2.17 + 58: 000000000001ec18 32 FUNC WEAK DEFAULT 13 cacos@@GLIBC_2.17 + 59: 0000000000026268 68 FUNC GLOBAL DEFAULT 13 j1f@@GLIBC_2.17 + 60: 0000000000021a88 372 FUNC GLOBAL DEFAULT 13 __ynf_finite@@GLIBC_2.17 + 61: 00000000000151a0 8 FUNC WEAK DEFAULT 13 floor@@GLIBC_2.17 + 62: 000000000004ae70 200 FUNC WEAK DEFAULT 13 fdiml@@GLIBC_2.17 + 63: 000000000004b4d0 1304 FUNC GLOBAL DEFAULT 13 __log2l_finite@@GLIBC_2.17 + 64: 0000000000027c94 184 FUNC WEAK DEFAULT 13 casinf@@GLIBC_2.17 + 65: 000000000001ec40 344 FUNC WEAK DEFAULT 13 casinh@@GLIBC_2.17 + 66: 000000000001c760 88 FUNC WEAK DEFAULT 13 fmod@@GLIBC_2.17 + 67: 00000000000261cc 148 FUNC GLOBAL DEFAULT 13 y0f@@GLIBC_2.17 + 68: 000000000004a290 216 FUNC WEAK DEFAULT 13 j1l@@GLIBC_2.17 + 69: 000000000004db00 304 FUNC WEAK DEFAULT 13 casinl@@GLIBC_2.17 + 70: 000000000004a140 304 FUNC WEAK DEFAULT 13 y0l@@GLIBC_2.17 + 71: 000000000001c5c8 144 FUNC WEAK DEFAULT 13 exp@@GLIBC_2.17 + 72: 000000000000824c 124 FUNC GLOBAL DEFAULT 13 fesetenv@@GLIBC_2.17 + 73: 00000000000165f8 5324 FUNC WEAK DEFAULT 13 sin@@GLIBC_2.17 + 74: 0000000000029178 24 FUNC GLOBAL DEFAULT 13 __finitef@@GLIBC_2.17 + 75: 000000000001f868 8 FUNC WEAK DEFAULT 13 lround@@GLIBC_2.17 + 76: 000000000001f528 700 FUNC WEAK DEFAULT 13 clog10@@GLIBC_2.17 + 77: 00000000000158f8 44 FUNC WEAK DEFAULT 13 significand@@GLIBC_2.17 + 78: 0000000000026454 184 FUNC WEAK DEFAULT 13 gammaf@@GLIBC_2.17 + 79: 0000000000051724 28 FUNC GLOBAL DEFAULT 13 __finitel@@GLIBC_2.17 + 80: 0000000000026a08 8 FUNC WEAK DEFAULT 13 fmaxf@@GLIBC_2.17 + 81: 0000000000032d30 8216 FUNC GLOBAL DEFAULT 13 __j1l_finite@@GLIBC_2.17 + 82: 0000000000028058 492 FUNC WEAK DEFAULT 13 ctanf@@GLIBC_2.17 + 83: 0000000000027600 624 FUNC WEAK DEFAULT 13 ccoshf@@GLIBC_2.17 + 84: 000000000001e9e8 508 FUNC WEAK DEFAULT 13 ctanh@@GLIBC_2.17 + 85: 000000000004a6c0 196 FUNC WEAK DEFAULT 13 gammal@@GLIBC_2.17 + 86: 000000000004add4 76 FUNC WEAK DEFAULT 13 fmaxl@@GLIBC_2.17 + 87: 000000000004e230 1140 FUNC WEAK DEFAULT 13 ctanl@@GLIBC_2.17 + 88: 000000000004caa0 1060 FUNC WEAK DEFAULT 13 ccoshl@@GLIBC_2.17 + 89: 0000000000020674 292 FUNC GLOBAL DEFAULT 13 __coshf_finite@@GLIBC_2.17 + 90: 00000000000262b8 148 FUNC GLOBAL DEFAULT 13 y1f@@GLIBC_2.17 + 91: 0000000000024780 196 FUNC WEAK DEFAULT 13 cosf@@GLIBC_2.17 + 92: 000000000004a7a0 172 FUNC WEAK DEFAULT 13 lgammal_r@@GLIBC_2.17 + 93: 000000000001c554 112 FUNC WEAK DEFAULT 13 cosh@@GLIBC_2.17 + 94: 000000000004a380 304 FUNC WEAK DEFAULT 13 y1l@@GLIBC_2.17 + 95: 000000000001e4b8 16 FUNC WEAK DEFAULT 13 ccos@@GLIBC_2.17 + 96: 0000000000043eb0 372 FUNC WEAK DEFAULT 13 cosl@@GLIBC_2.17 + 97: 000000000003f270 848 FUNC GLOBAL DEFAULT 13 __logl_finite@@GLIBC_2.17 + 98: 00000000000083b8 12 FUNC GLOBAL DEFAULT 13 fegetexcept@@GLIBC_2.17 + 99: 0000000000026ad4 428 FUNC WEAK DEFAULT 13 remquof@@GLIBC_2.17 + 100: 00000000000090d8 3248 FUNC GLOBAL DEFAULT 13 __acos_finite@@GLIBC_2.17 + 101: 000000000004b010 1140 FUNC WEAK DEFAULT 13 remquol@@GLIBC_2.17 + 102: 000000000001ce14 460 FUNC WEAK DEFAULT 13 pow@@GLIBC_2.17 + 103: 0000000000026104 132 FUNC WEAK DEFAULT 13 hypotf@@GLIBC_2.17 + 104: 0000000000008158 52 FUNC GLOBAL DEFAULT 13 fesetexceptflag@@GLIBC_2.17 + 105: 00000000000189d8 14604 FUNC GLOBAL DEFAULT 13 tan@@GLIBC_2.17 + 106: 0000000000027b5c 296 FUNC WEAK DEFAULT 13 catanf@@GLIBC_2.17 + 107: 000000000001fcf0 16 FUNC GLOBAL DEFAULT 13 __signbit@@GLIBC_2.17 + 108: 00000000000b0284 4 OBJECT GLOBAL DEFAULT 28 signgam@@GLIBC_2.17 + 109: 000000000001f010 328 FUNC WEAK DEFAULT 13 catanh@@GLIBC_2.17 + 110: 0000000000015620 456 FUNC WEAK DEFAULT 13 nexttoward@@GLIBC_2.17 + 111: 0000000000049fe0 108 FUNC WEAK DEFAULT 13 hypotl@@GLIBC_2.17 + 112: 000000000004d700 884 FUNC WEAK DEFAULT 13 catanl@@GLIBC_2.17 + 113: 0000000000008214 56 FUNC GLOBAL DEFAULT 13 feholdexcept@@GLIBC_2.17 + 114: 000000000001d5d0 320 FUNC GLOBAL DEFAULT 13 __exp2_finite@@GLIBC_2.17 + 115: 00000000000157e8 8 FUNC WEAK DEFAULT 13 rint@@GLIBC_2.17 + 116: 000000000000d9b8 500 FUNC GLOBAL DEFAULT 13 __hypot_finite@@GLIBC_2.17 + 117: 0000000000026e30 316 FUNC GLOBAL DEFAULT 13 __exp2f_finite@@GLIBC_2.17 + 118: 000000000001fa50 40 FUNC WEAK DEFAULT 13 copysign@@GLIBC_2.17 + 119: 000000000001c658 132 FUNC WEAK DEFAULT 13 exp2@@GLIBC_2.17 + 120: 000000000001d26c 376 FUNC WEAK DEFAULT 13 remquo@@GLIBC_2.17 + 121: 000000000002aee0 472 FUNC GLOBAL DEFAULT 13 __atanhl_finite@@GLIBC_2.17 + 122: 0000000000025c78 84 FUNC WEAK DEFAULT 13 acosf@@GLIBC_2.17 + 123: 000000000001c44c 52 FUNC WEAK DEFAULT 13 acosh@@GLIBC_2.17 + 124: 0000000000049810 216 FUNC WEAK DEFAULT 13 acosl@@GLIBC_2.17 + 125: 0000000000028d58 700 FUNC GLOBAL DEFAULT 13 __clog10f@@GLIBC_2.17 + 126: 00000000000232e8 288 FUNC GLOBAL DEFAULT 13 __sqrtf_finite@@GLIBC_2.17 + 127: 0000000000026038 204 FUNC WEAK DEFAULT 13 tgammaf@@GLIBC_2.17 + 128: 0000000000023120 116 FUNC GLOBAL DEFAULT 13 __scalbf_finite@@GLIBC_2.17 + 129: 0000000000050030 1732 FUNC GLOBAL DEFAULT 13 __clog10l@@GLIBC_2.17 + 130: 000000000001d1b0 168 FUNC WEAK DEFAULT 13 fdim@@GLIBC_2.17 + 131: 0000000000027370 616 FUNC WEAK DEFAULT 13 csinhf@@GLIBC_2.17 + 132: 0000000000049e90 312 FUNC WEAK DEFAULT 13 tgammal@@GLIBC_2.17 + 133: 0000000000026f88 8 FUNC WEAK DEFAULT 13 roundf@@GLIBC_2.17 + 134: 0000000000010730 196 FUNC GLOBAL DEFAULT 13 __log10_finite@@GLIBC_2.17 + 135: 000000000004c5d0 1072 FUNC WEAK DEFAULT 13 csinhl@@GLIBC_2.17 + 136: 000000000000cfb0 304 FUNC GLOBAL DEFAULT 13 __cosh_finite@@GLIBC_2.17 + 137: 000000000004bdd0 364 FUNC WEAK DEFAULT 13 roundl@@GLIBC_2.17 + 138: 000000000002b100 416 FUNC GLOBAL DEFAULT 13 __coshl_finite@@GLIBC_2.17 + 139: 000000000001c6dc 132 FUNC WEAK DEFAULT 13 exp10@@GLIBC_2.17 + 140: 000000000000a0ec 11724 FUNC GLOBAL DEFAULT 13 __atan2_finite@@GLIBC_2.17 + 141: 000000000002340c 156 FUNC GLOBAL DEFAULT 13 __gammaf_r_finite@@GLIBC_2.17 + 142: 00000000000207a0 316 FUNC GLOBAL DEFAULT 13 __expf_finite@@GLIBC_2.17 + 143: 000000000003a5b0 13264 FUNC GLOBAL DEFAULT 13 __lgammal_r_finite@@GLIBC_2.17 + 144: 00000000000083c8 204 FUNC GLOBAL DEFAULT 13 __acosh_finite@@GLIBC_2.17 + 145: 0000000000025e48 144 FUNC WEAK DEFAULT 13 expf@@GLIBC_2.17 + 146: 00000000000157f0 216 FUNC WEAK DEFAULT 13 scalbln@@GLIBC_2.17 + 147: 0000000000049c70 140 FUNC WEAK DEFAULT 13 expl@@GLIBC_2.17 + 148: 0000000000025d54 60 FUNC WEAK DEFAULT 13 atan2f@@GLIBC_2.17 + 149: 000000000001e3e8 184 FUNC WEAK DEFAULT 13 casin@@GLIBC_2.17 + 150: 0000000000026938 48 FUNC WEAK DEFAULT 13 sqrtf@@GLIBC_2.17 + 151: 0000000000049a70 124 FUNC WEAK DEFAULT 13 atan2l@@GLIBC_2.17 + 152: 00000000000081f8 28 FUNC GLOBAL DEFAULT 13 fegetenv@@GLIBC_2.17 + 153: 000000000004acb0 104 FUNC WEAK DEFAULT 13 sqrtl@@GLIBC_2.17 + 154: 000000000001fc08 84 FUNC WEAK DEFAULT 13 frexp@@GLIBC_2.17 + 155: 000000000002a0e0 344 FUNC GLOBAL DEFAULT 13 __acoshl_finite@@GLIBC_2.17 + 156: 000000000000e4b8 444 FUNC GLOBAL DEFAULT 13 __j1_finite@@GLIBC_2.17 + 157: 00000000000250d4 692 FUNC WEAK DEFAULT 13 expm1f@@GLIBC_2.17 + 158: 000000000002155c 500 FUNC GLOBAL DEFAULT 13 __y1f_finite@@GLIBC_2.17 + 159: 0000000000041820 340 FUNC GLOBAL DEFAULT 13 __scalbl_finite@@GLIBC_2.17 + 160: 0000000000025e44 4 FUNC WEAK DEFAULT 13 dremf@@GLIBC_2.17 + 161: 0000000000047f00 808 FUNC WEAK DEFAULT 13 expm1l@@GLIBC_2.17 + 162: 000000000000819c 12 FUNC GLOBAL DEFAULT 13 fegetround@@GLIBC_2.17 + 163: 0000000000049c6c 4 FUNC WEAK DEFAULT 13 dreml@@GLIBC_2.17 + 164: 0000000000022558 196 FUNC GLOBAL DEFAULT 13 __log10f_finite@@GLIBC_2.17 + 165: 000000000001d818 544 FUNC WEAK DEFAULT 13 cexp@@GLIBC_2.17 + 166: 0000000000041990 548 FUNC GLOBAL DEFAULT 13 __sinhl_finite@@GLIBC_2.17 + 167: 000000000001e4c8 712 FUNC WEAK DEFAULT 13 csin@@GLIBC_2.17 + 168: 000000000001e2a0 296 FUNC WEAK DEFAULT 13 catan@@GLIBC_2.17 + 169: 00000000000269c4 68 FUNC GLOBAL DEFAULT 13 __fpclassifyf@@GLIBC_2.17 + 170: 0000000000029228 216 FUNC WEAK DEFAULT 13 scalbnf@@GLIBC_2.17 + 171: 0000000000026acc 8 FUNC WEAK DEFAULT 13 truncf@@GLIBC_2.17 + 172: 00000000000268b0 24 FUNC WEAK DEFAULT 13 scalbf@@GLIBC_2.17 + 173: 0000000000026680 460 FUNC WEAK DEFAULT 13 powf@@GLIBC_2.17 + 174: 000000000004ad8c 72 FUNC GLOBAL DEFAULT 13 __fpclassifyl@@GLIBC_2.17 + 175: 0000000000051880 568 FUNC WEAK DEFAULT 13 scalbnl@@GLIBC_2.17 + 176: 000000000004af5c 180 FUNC WEAK DEFAULT 13 truncl@@GLIBC_2.17 + 177: 000000000004ac30 24 FUNC WEAK DEFAULT 13 scalbl@@GLIBC_2.17 + 178: 000000000004a9e0 428 FUNC WEAK DEFAULT 13 powl@@GLIBC_2.17 + 179: 000000000001fb00 216 FUNC WEAK DEFAULT 13 scalbn@@GLIBC_2.17 + 180: 000000000001f970 116 FUNC WEAK DEFAULT 13 log2@@GLIBC_2.17 + 181: 000000000002b2e0 928 FUNC GLOBAL DEFAULT 13 __expl_finite@@GLIBC_2.17 + 182: 0000000000025ed8 132 FUNC WEAK DEFAULT 13 exp2f@@GLIBC_2.17 + 183: 000000000001d770 8 FUNC WEAK DEFAULT 13 round@@GLIBC_2.17 + 184: 0000000000049d20 112 FUNC WEAK DEFAULT 13 exp2l@@GLIBC_2.17 + 185: 000000000002b7c0 844 FUNC GLOBAL DEFAULT 13 __fmodl_finite@@GLIBC_2.17 + 186: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 + 187: 000000000000f770 4024 FUNC GLOBAL DEFAULT 13 __log_finite@@GLIBC_2.17 + 188: 0000000000020ac8 156 FUNC GLOBAL DEFAULT 13 __hypotf_finite@@GLIBC_2.17 + 189: 000000000001f480 40 FUNC WEAK DEFAULT 13 cpow@@GLIBC_2.17 + 190: 000000000000d0e8 904 FUNC GLOBAL DEFAULT 13 __exp_finite@@GLIBC_2.17 + 191: 000000000001e7c8 492 FUNC WEAK DEFAULT 13 ctan@@GLIBC_2.17 + 192: 000000000001fa38 24 FUNC WEAK DEFAULT 13 finite@@GLIBC_2.17 + 193: 000000000001c7b8 204 FUNC WEAK DEFAULT 13 tgamma@@GLIBC_2.17 + 194: 00000000000148d8 928 FUNC WEAK DEFAULT 13 erfc@@GLIBC_2.17 + 195: 0000000000024844 864 FUNC WEAK DEFAULT 13 erff@@GLIBC_2.17 + 196: 0000000000015498 84 FUNC WEAK DEFAULT 13 logb@@GLIBC_2.17 + 197: 0000000000026598 116 FUNC WEAK DEFAULT 13 logf@@GLIBC_2.17 + 198: 0000000000047770 1256 FUNC WEAK DEFAULT 13 erfl@@GLIBC_2.17 + 199: 000000000004a860 164 FUNC WEAK DEFAULT 13 logl@@GLIBC_2.17 + 200: 0000000000025b84 240 FUNC WEAK DEFAULT 13 tanhf@@GLIBC_2.17 + 201: 00000000000119f0 116 FUNC GLOBAL DEFAULT 13 __scalb_finite@@GLIBC_2.17 + 202: 0000000000020f98 508 FUNC GLOBAL DEFAULT 13 __y0f_finite@@GLIBC_2.17 + 203: 000000000001fc68 136 FUNC WEAK DEFAULT 13 ldexp@@GLIBC_2.17 + 204: 0000000000029178 24 FUNC WEAK DEFAULT 13 finitef@@GLIBC_2.17 + 205: 00000000000495a0 536 FUNC WEAK DEFAULT 13 tanhl@@GLIBC_2.17 + 206: 000000000001f870 8 FUNC WEAK DEFAULT 13 llround@@GLIBC_2.17 + 207: 0000000000051724 28 FUNC WEAK DEFAULT 13 finitel@@GLIBC_2.17 + 208: 000000000001d804 16 FUNC WEAK DEFAULT 13 carg@@GLIBC_2.17 + 209: 000000000001f178 712 FUNC WEAK DEFAULT 13 csqrt@@GLIBC_2.17 + 210: 0000000000021788 756 FUNC GLOBAL DEFAULT 13 __jnf_finite@@GLIBC_2.17 + 211: 000000000002038c 504 FUNC GLOBAL DEFAULT 13 __atan2f_finite@@GLIBC_2.17 + 212: 000000000001d0fc 92 FUNC WEAK DEFAULT 13 ilogb@@GLIBC_2.17 + 213: 0000000000025a1c 204 FUNC WEAK DEFAULT 13 sinf@@GLIBC_2.17 + 214: 000000000001d05c 112 FUNC WEAK DEFAULT 13 sinh@@GLIBC_2.17 + 215: 0000000000026f98 368 FUNC WEAK DEFAULT 13 sincosf@@GLIBC_2.17 + 216: 0000000000049340 380 FUNC WEAK DEFAULT 13 sinl@@GLIBC_2.17 + 217: 000000000004c090 308 FUNC WEAK DEFAULT 13 sincosl@@GLIBC_2.17 + 218: 00000000000115b8 1080 FUNC GLOBAL DEFAULT 13 __remainder_finite@@GLIBC_2.17 + 219: 000000000002bb10 1316 FUNC GLOBAL DEFAULT 13 __hypotl_finite@@GLIBC_2.17 + 220: 0000000000029050 8 FUNC WEAK DEFAULT 13 fmaf@@GLIBC_2.17 + 221: 0000000000050820 2076 FUNC WEAK DEFAULT 13 fmal@@GLIBC_2.17 + 222: 0000000000010820 3240 FUNC GLOBAL DEFAULT 13 __pow_finite@@GLIBC_2.17 + 223: 000000000003a200 884 FUNC GLOBAL DEFAULT 13 __ynl_finite@@GLIBC_2.17 + 224: 000000000000818c 16 FUNC GLOBAL DEFAULT 13 fetestexcept@@GLIBC_2.17 + 225: 000000000000e948 888 FUNC GLOBAL DEFAULT 13 __jn_finite@@GLIBC_2.17 + 226: 000000000001d1a0 8 FUNC WEAK DEFAULT 13 fmax@@GLIBC_2.17 + 227: 000000000001c3f8 84 FUNC WEAK DEFAULT 13 acos@@GLIBC_2.17 + 228: 0000000000029080 36 FUNC GLOBAL DEFAULT 13 __exp10f_finite@@GLIBC_2.17 + 229: 000000000001cd2c 116 FUNC WEAK DEFAULT 13 log@@GLIBC_2.17 + 230: 000000000000e028 528 FUNC GLOBAL DEFAULT 13 __y0_finite@@GLIBC_2.17 + 231: 00000000000253d0 604 FUNC WEAK DEFAULT 13 log1pf@@GLIBC_2.17 + 232: 000000000002f6a0 8504 FUNC GLOBAL DEFAULT 13 __y0l_finite@@GLIBC_2.17 + 233: 0000000000025d00 84 FUNC WEAK DEFAULT 13 asinf@@GLIBC_2.17 + 234: 00000000000129c0 240 FUNC WEAK DEFAULT 13 asinh@@GLIBC_2.17 + 235: 0000000000028d58 700 FUNC WEAK DEFAULT 13 clog10f@@GLIBC_2.17 + 236: 0000000000024c88 876 FUNC WEAK DEFAULT 13 erfcf@@GLIBC_2.17 + 237: 00000000000485b0 1264 FUNC WEAK DEFAULT 13 log1pl@@GLIBC_2.17 + 238: 0000000000049980 216 FUNC WEAK DEFAULT 13 asinl@@GLIBC_2.17 + 239: 0000000000050030 1732 FUNC WEAK DEFAULT 13 clog10l@@GLIBC_2.17 + 240: 0000000000044040 8828 FUNC WEAK DEFAULT 13 erfcl@@GLIBC_2.17 + 241: 000000000001c4d4 60 FUNC WEAK DEFAULT 13 atan2@@GLIBC_2.17 + 242: 00000000000082c8 148 FUNC GLOBAL DEFAULT 13 feupdateenv@@GLIBC_2.17 + 243: 0000000000039a30 1864 FUNC GLOBAL DEFAULT 13 __jnl_finite@@GLIBC_2.17 + 244: 0000000000025ae8 156 FUNC WEAK DEFAULT 13 tanf@@GLIBC_2.17 + 245: 0000000000029070 8 FUNC WEAK DEFAULT 13 lroundf@@GLIBC_2.17 + 246: 000000000001c2f8 248 FUNC WEAK DEFAULT 13 tanh@@GLIBC_2.17 + 247: 000000000001cda0 116 FUNC WEAK DEFAULT 13 log10@@GLIBC_2.17 + 248: 0000000000029078 8 FUNC WEAK DEFAULT 13 llroundf@@GLIBC_2.17 + 249: 000000000002aba0 624 FUNC GLOBAL DEFAULT 13 __atan2l_finite@@GLIBC_2.17 + 250: 00000000000494d0 188 FUNC WEAK DEFAULT 13 tanl@@GLIBC_2.17 + 251: 000000000001d7fc 4 FUNC WEAK DEFAULT 13 creal@@GLIBC_2.17 + 252: 00000000000512ec 188 FUNC WEAK DEFAULT 13 lroundl@@GLIBC_2.17 + 253: 0000000000025d90 68 FUNC WEAK DEFAULT 13 atanhf@@GLIBC_2.17 + 254: 0000000000025dd4 112 FUNC WEAK DEFAULT 13 coshf@@GLIBC_2.17 + 255: 00000000000513a8 188 FUNC WEAK DEFAULT 13 llroundl@@GLIBC_2.17 + 256: 00000000000084a0 2880 FUNC GLOBAL DEFAULT 13 __asin_finite@@GLIBC_2.17 + 257: 0000000000049b00 244 FUNC WEAK DEFAULT 13 atanhl@@GLIBC_2.17 + 258: 0000000000049c10 92 FUNC WEAK DEFAULT 13 coshl@@GLIBC_2.17 + 259: 00000000000253b8 16 FUNC WEAK DEFAULT 13 fabsf@@GLIBC_2.17 + 260: 00000000000483c0 32 FUNC WEAK DEFAULT 13 fabsl@@GLIBC_2.17 + 261: 000000000001c950 148 FUNC GLOBAL DEFAULT 13 y0@@GLIBC_2.17 + 262: 000000000001ca38 148 FUNC GLOBAL DEFAULT 13 y1@@GLIBC_2.17 + 263: 00000000000b0070 4 OBJECT GLOBAL DEFAULT 27 _LIB_VERSION@@GLIBC_2.17 + 264: 0000000000024778 8 FUNC WEAK DEFAULT 13 ceilf@@GLIBC_2.17 + 265: 000000000001fa78 132 FUNC WEAK DEFAULT 13 modf@@GLIBC_2.17 + 266: 0000000000043ce0 420 FUNC WEAK DEFAULT 13 ceill@@GLIBC_2.17 + 267: 0000000000025f5c 132 FUNC WEAK DEFAULT 13 pow10f@@GLIBC_2.17 + 268: 0000000000020194 464 FUNC GLOBAL DEFAULT 13 __asinf_finite@@GLIBC_2.17 + 269: 000000000004bc90 216 FUNC GLOBAL DEFAULT 13 __exp2l_finite@@GLIBC_2.17 + 270: 0000000000024478 444 FUNC WEAK DEFAULT 13 atanf@@GLIBC_2.17 + 271: 0000000000049d90 112 FUNC WEAK DEFAULT 13 pow10l@@GLIBC_2.17 + 272: 000000000001c510 68 FUNC WEAK DEFAULT 13 atanh@@GLIBC_2.17 + 273: 0000000000028888 328 FUNC WEAK DEFAULT 13 catanhf@@GLIBC_2.17 + 274: 0000000000051470 260 FUNC GLOBAL DEFAULT 13 __exp10l_finite@@GLIBC_2.17 + 275: 0000000000043470 848 FUNC WEAK DEFAULT 13 atanl@@GLIBC_2.17 + 276: 00000000000080a4 168 FUNC GLOBAL DEFAULT 13 feraiseexcept@@GLIBC_2.17 + 277: 000000000004f4d0 776 FUNC WEAK DEFAULT 13 catanhl@@GLIBC_2.17 + 278: 000000000002684c 100 FUNC WEAK DEFAULT 13 remainderf@@GLIBC_2.17 + 279: 0000000000027108 8 FUNC WEAK DEFAULT 13 conjf@@GLIBC_2.17 + 280: 000000000001d3e8 396 FUNC GLOBAL DEFAULT 13 __log2_finite@@GLIBC_2.17 + 281: 0000000000024670 236 FUNC WEAK DEFAULT 13 cbrtf@@GLIBC_2.17 + 282: 0000000000041c10 1288 FUNC GLOBAL DEFAULT 13 __sqrtl_finite@@GLIBC_2.17 + 283: 000000000004aba0 128 FUNC WEAK DEFAULT 13 remainderl@@GLIBC_2.17 + 284: 00000000000151a8 652 FUNC WEAK DEFAULT 13 log1p@@GLIBC_2.17 + 285: 0000000000029404 12 FUNC GLOBAL DEFAULT 13 __signbitf@@GLIBC_2.17 + 286: 00000000000259f0 44 FUNC WEAK DEFAULT 13 significandf@@GLIBC_2.17 + 287: 000000000004c1e0 28 FUNC WEAK DEFAULT 13 conjl@@GLIBC_2.17 + 288: 00000000000438e0 824 FUNC WEAK DEFAULT 13 cbrtl@@GLIBC_2.17 + 289: 000000000001cfe0 100 FUNC WEAK DEFAULT 13 remainder@@GLIBC_2.17 + 290: 0000000000022630 1656 FUNC GLOBAL DEFAULT 13 __powf_finite@@GLIBC_2.17 + 291: 0000000000051c90 16 FUNC GLOBAL DEFAULT 13 __signbitl@@GLIBC_2.17 + 292: 0000000000049310 44 FUNC WEAK DEFAULT 13 significandl@@GLIBC_2.17 + 293: 0000000000027118 4 FUNC WEAK DEFAULT 13 crealf@@GLIBC_2.17 + 294: 000000000004c204 4 FUNC WEAK DEFAULT 13 creall@@GLIBC_2.17 + 295: 000000000001cb28 184 FUNC GLOBAL DEFAULT 13 yn@@GLIBC_2.17 + 296: 00000000000268c8 112 FUNC WEAK DEFAULT 13 sinhf@@GLIBC_2.17 + 297: 00000000000290b0 116 FUNC WEAK DEFAULT 13 log2f@@GLIBC_2.17 + 298: 0000000000026350 68 FUNC GLOBAL DEFAULT 13 jnf@@GLIBC_2.17 + 299: 000000000004ac48 92 FUNC WEAK DEFAULT 13 sinhl@@GLIBC_2.17 + 300: 0000000000029058 12 FUNC WEAK DEFAULT 13 lrintf@@GLIBC_2.17 + 301: 00000000000256ac 216 FUNC WEAK DEFAULT 13 nextafterf@@GLIBC_2.17 + 302: 00000000000515f0 164 FUNC WEAK DEFAULT 13 log2l@@GLIBC_2.17 + 303: 000000000004a4d0 200 FUNC WEAK DEFAULT 13 jnl@@GLIBC_2.17 + 304: 000000000001f528 700 FUNC GLOBAL DEFAULT 13 __clog10@@GLIBC_2.17 + 305: 0000000000048dec 416 FUNC WEAK DEFAULT 13 nextafterl@@GLIBC_2.17 + 306: 00000000000510e0 304 FUNC WEAK DEFAULT 13 lrintl@@GLIBC_2.17 + 307: 0000000000014368 8 FUNC WEAK DEFAULT 13 ceil@@GLIBC_2.17 + 308: 0000000000021380 432 FUNC GLOBAL DEFAULT 13 __j1f_finite@@GLIBC_2.17 + 309: 0000000000027110 8 FUNC WEAK DEFAULT 13 cimagf@@GLIBC_2.17 + 310: 0000000000026ac0 12 FUNC WEAK DEFAULT 13 nanf@@GLIBC_2.17 + 311: 000000000004c1fc 8 FUNC WEAK DEFAULT 13 cimagl@@GLIBC_2.17 + 312: 0000000000027d58 16 FUNC WEAK DEFAULT 13 ccosf@@GLIBC_2.17 + 313: 000000000001dd10 624 FUNC WEAK DEFAULT 13 ccosh@@GLIBC_2.17 + 314: 000000000004af50 12 FUNC WEAK DEFAULT 13 nanl@@GLIBC_2.17 + 315: 000000000004dc70 32 FUNC WEAK DEFAULT 13 ccosl@@GLIBC_2.17 + 316: 0000000000042130 224 FUNC GLOBAL DEFAULT 13 __gammal_r_finite@@GLIBC_2.17 + 317: 0000000000025ccc 52 FUNC WEAK DEFAULT 13 acoshf@@GLIBC_2.17 + 318: 0000000000025658 84 FUNC WEAK DEFAULT 13 logbf@@GLIBC_2.17 + 319: 0000000000049900 104 FUNC WEAK DEFAULT 13 acoshl@@GLIBC_2.17 + 320: 000000000002a270 1584 FUNC GLOBAL DEFAULT 13 __asinl_finite@@GLIBC_2.17 + 321: 000000000001c480 84 FUNC WEAK DEFAULT 13 asin@@GLIBC_2.17 + 322: 0000000000015188 24 FUNC WEAK DEFAULT 13 fabs@@GLIBC_2.17 + 323: 000000000002233c 492 FUNC GLOBAL DEFAULT 13 __logf_finite@@GLIBC_2.17 + 324: 000000000000ef00 1656 FUNC GLOBAL DEFAULT 13 __lgamma_r_finite@@GLIBC_2.17 + 325: 000000000002650c 140 FUNC WEAK DEFAULT 13 lgammaf_r@@GLIBC_2.17 + 326: 0000000000011e10 172 FUNC GLOBAL DEFAULT 13 __gamma_r_finite@@GLIBC_2.17 + 327: 0000000000048d60 140 FUNC WEAK DEFAULT 13 logbl@@GLIBC_2.17 + 328: 0000000000029318 96 FUNC WEAK DEFAULT 13 frexpf@@GLIBC_2.17 + 329: 0000000000026398 184 FUNC GLOBAL DEFAULT 13 ynf@@GLIBC_2.17 + 330: 000000000001f85c 12 FUNC WEAK DEFAULT 13 llrint@@GLIBC_2.17 + 331: 000000000001d044 24 FUNC WEAK DEFAULT 13 scalb@@GLIBC_2.17 + 332: 0000000000051b20 160 FUNC WEAK DEFAULT 13 frexpl@@GLIBC_2.17 + 333: 000000000004a5b0 232 FUNC WEAK DEFAULT 13 ynl@@GLIBC_2.17 + 334: 0000000000023008 280 FUNC GLOBAL DEFAULT 13 __remainderf_finite@@GLIBC_2.17 + 335: 0000000000036370 8524 FUNC GLOBAL DEFAULT 13 __y1l_finite@@GLIBC_2.17 + 336: 000000000001d258 12 FUNC WEAK DEFAULT 13 nan@@GLIBC_2.17 + 337: 000000000001cbe8 184 FUNC WEAK DEFAULT 13 lgamma@@GLIBC_2.17 + 338: 0000000000028488 32 FUNC WEAK DEFAULT 13 cacosf@@GLIBC_2.17 + 339: 000000000001edc8 524 FUNC WEAK DEFAULT 13 cacosh@@GLIBC_2.17 + 340: 000000000001f878 192 FUNC GLOBAL DEFAULT 13 __exp10_finite@@GLIBC_2.17 + 341: 000000000003f710 1404 FUNC GLOBAL DEFAULT 13 __log10l_finite@@GLIBC_2.17 + 342: 0000000000028cf0 96 FUNC WEAK DEFAULT 13 cprojf@@GLIBC_2.17 + 343: 000000000001dfb0 680 FUNC WEAK DEFAULT 13 clog@@GLIBC_2.17 + 344: 000000000004ec50 80 FUNC WEAK DEFAULT 13 cacosl@@GLIBC_2.17 + 345: 0000000000028628 580 FUNC WEAK DEFAULT 13 cacoshf@@GLIBC_2.17 + 346: 000000000004ffa0 104 FUNC WEAK DEFAULT 13 cprojl@@GLIBC_2.17 + 347: 000000000004efe0 1084 FUNC WEAK DEFAULT 13 cacoshl@@GLIBC_2.17 + 348: 000000000000e6d0 516 FUNC GLOBAL DEFAULT 13 __y1_finite@@GLIBC_2.17 + 349: 00000000000205b0 188 FUNC GLOBAL DEFAULT 13 __atanhf_finite@@GLIBC_2.17 + 350: 0000000000027120 16 FUNC WEAK DEFAULT 13 cargf@@GLIBC_2.17 + 351: 0000000000012c00 5664 FUNC GLOBAL DEFAULT 13 atan@@GLIBC_2.17 + 352: 0000000000026454 184 FUNC WEAK DEFAULT 13 lgammaf@@GLIBC_2.17 + 353: 000000000001f4a8 116 FUNC WEAK DEFAULT 13 cproj@@GLIBC_2.17 + 354: 000000000001fe4c 552 FUNC GLOBAL DEFAULT 13 __acosf_finite@@GLIBC_2.17 + 355: 000000000001d800 4 FUNC WEAK DEFAULT 13 cabs@@GLIBC_2.17 + 356: 000000000004c20c 16 FUNC WEAK DEFAULT 13 cargl@@GLIBC_2.17 + 357: 000000000004a6c0 196 FUNC WEAK DEFAULT 13 lgammal@@GLIBC_2.17 + 358: 000000000001d264 8 FUNC WEAK DEFAULT 13 trunc@@GLIBC_2.17 + 359: 00000000000253c8 8 FUNC WEAK DEFAULT 13 floorf@@GLIBC_2.17 + 360: 0000000000008068 36 FUNC GLOBAL DEFAULT 13 feclearexcept@@GLIBC_2.17 + 361: 0000000000014e38 748 FUNC WEAK DEFAULT 13 expm1@@GLIBC_2.17 + 362: 00000000000483e0 424 FUNC WEAK DEFAULT 13 floorl@@GLIBC_2.17 + 363: 000000000000cee0 188 FUNC GLOBAL DEFAULT 13 __atanh_finite@@GLIBC_2.17 + 364: 000000000002437c 244 FUNC WEAK DEFAULT 13 asinhf@@GLIBC_2.17 + 365: 0000000000021c00 1600 FUNC GLOBAL DEFAULT 13 __lgammaf_r_finite@@GLIBC_2.17 + 366: 0000000000020d60 528 FUNC GLOBAL DEFAULT 13 __j0f_finite@@GLIBC_2.17 + 367: 000000000001d780 108 FUNC WEAK DEFAULT 13 sincos@@GLIBC_2.17 + 368: 0000000000043240 508 FUNC WEAK DEFAULT 13 asinhl@@GLIBC_2.17 + 369: 000000000002660c 116 FUNC WEAK DEFAULT 13 log10f@@GLIBC_2.17 + 370: 000000000002937c 136 FUNC WEAK DEFAULT 13 ldexpf@@GLIBC_2.17 + 371: 0000000000027130 544 FUNC WEAK DEFAULT 13 cexpf@@GLIBC_2.17 + 372: 000000000004a920 164 FUNC WEAK DEFAULT 13 log10l@@GLIBC_2.17 + 373: 0000000000051bd0 164 FUNC WEAK DEFAULT 13 ldexpl@@GLIBC_2.17 + 374: 00000000000289e0 712 FUNC WEAK DEFAULT 13 csqrtf@@GLIBC_2.17 + 375: 000000000004c220 840 FUNC WEAK DEFAULT 13 cexpl@@GLIBC_2.17 + 376: 0000000000014370 916 FUNC WEAK DEFAULT 13 erf@@GLIBC_2.17 + 377: 000000000000808c 24 FUNC GLOBAL DEFAULT 13 fegetexceptflag@@GLIBC_2.17 + 378: 000000000002711c 4 FUNC WEAK DEFAULT 13 cabsf@@GLIBC_2.17 + 379: 000000000004f860 1636 FUNC WEAK DEFAULT 13 csqrtl@@GLIBC_2.17 + 380: 0000000000026968 92 FUNC WEAK DEFAULT 13 ilogbf@@GLIBC_2.17 + 381: 000000000004c208 4 FUNC WEAK DEFAULT 13 cabsl@@GLIBC_2.17 + 382: 00000000000414c0 824 FUNC GLOBAL DEFAULT 13 __remainderl_finite@@GLIBC_2.17 + 383: 000000000004ad30 92 FUNC WEAK DEFAULT 13 ilogbl@@GLIBC_2.17 + 384: 000000000001d1a8 8 FUNC WEAK DEFAULT 13 fmin@@GLIBC_2.17 + 385: 00000000000081a8 80 FUNC GLOBAL DEFAULT 13 fesetround@@GLIBC_2.17 + 386: 00000000000284ac 356 FUNC WEAK DEFAULT 13 casinhf@@GLIBC_2.17 + 387: 00000000000200b0 224 FUNC GLOBAL DEFAULT 13 __acoshf_finite@@GLIBC_2.17 + 388: 000000000004ecb0 692 FUNC WEAK DEFAULT 13 casinhl@@GLIBC_2.17 + 389: 0000000000014238 248 FUNC WEAK DEFAULT 13 cbrt@@GLIBC_2.17 + 390: 0000000000029440 2044 FUNC GLOBAL DEFAULT 13 __acosl_finite@@GLIBC_2.17 + 391: 000000000000d820 408 FUNC GLOBAL DEFAULT 13 __fmod_finite@@GLIBC_2.17 + 392: 000000000001d0cc 48 FUNC WEAK DEFAULT 13 sqrt@@GLIBC_2.17 + 393: 0000000000023194 336 FUNC GLOBAL DEFAULT 13 __sinhf_finite@@GLIBC_2.17 + 394: 0000000000028cc8 40 FUNC WEAK DEFAULT 13 cpowf@@GLIBC_2.17 + 395: 000000000002c060 8264 FUNC GLOBAL DEFAULT 13 __j0l_finite@@GLIBC_2.17 + 396: 0000000000025fe0 88 FUNC WEAK DEFAULT 13 fmodf@@GLIBC_2.17 + 397: 0000000000017b80 3456 FUNC WEAK DEFAULT 13 cos@@GLIBC_2.17 + 398: 000000000004ff70 40 FUNC WEAK DEFAULT 13 cpowl@@GLIBC_2.17 + 399: 0000000000026a10 8 FUNC WEAK DEFAULT 13 fminf@@GLIBC_2.17 + 400: 000000000000835c 36 FUNC GLOBAL DEFAULT 13 fedisableexcept@@GLIBC_2.17 + 401: 0000000000049e00 120 FUNC WEAK DEFAULT 13 fmodl@@GLIBC_2.17 + 402: 0000000000029190 28 FUNC WEAK DEFAULT 13 copysignf@@GLIBC_2.17 + 403: 00000000000291ac 124 FUNC WEAK DEFAULT 13 modff@@GLIBC_2.17 + 404: 000000000004ae20 80 FUNC WEAK DEFAULT 13 fminl@@GLIBC_2.17 + 405: 0000000000051740 48 FUNC WEAK DEFAULT 13 copysignl@@GLIBC_2.17 + 406: 000000000001d7ec 8 FUNC WEAK DEFAULT 13 conj@@GLIBC_2.17 + 407: 0000000000051770 264 FUNC WEAK DEFAULT 13 modfl@@GLIBC_2.17 + 408: 00000000000258f4 8 FUNC WEAK DEFAULT 13 rintf@@GLIBC_2.17 + 409: 000000000001d778 8 FUNC WEAK DEFAULT 13 nearbyint@@GLIBC_2.17 + 410: 0000000000048f8c 228 FUNC WEAK DEFAULT 13 rintl@@GLIBC_2.17 + 411: 0000000000020920 424 FUNC GLOBAL DEFAULT 13 __fmodf_finite@@GLIBC_2.17 + 412: 000000000001d158 72 FUNC GLOBAL DEFAULT 13 __fpclassify@@GLIBC_2.17 + 413: 000000000001c908 64 FUNC GLOBAL DEFAULT 13 j0@@GLIBC_2.17 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnspr4.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnspr4.so.txt new file mode 100644 index 000000000000..688acd7172b1 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnspr4.so.txt @@ -0,0 +1,592 @@ +Library: /lib64/libnspr4.so +Package: nspr-4.35.0-1.el7_9.aarch64 + + +Symbol table '.dynsym' contains 586 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000bd20 0 SECTION LOCAL DEFAULT 9 + 2: 000000000004f5b8 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendto@GLIBC_2.17 (3) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND msync@GLIBC_2.17 (3) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.17 (3) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __h_errno_location@GLIBC_2.17 (3) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dladdr@GLIBC_2.17 (4) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.17 (2) + 15: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strnlen@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND secure_getenv@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semctl@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat64@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.17 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.17 (3) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semget@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.17 (3) + 28: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.17 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_init@GLIBC_2.17 (3) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setrlimit@GLIBC_2.17 (2) + 35: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.17 (4) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND kill@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyname_r@GLIBC_2.17 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.17 (3) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.17 (3) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.17 (4) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyaddr_r@GLIBC_2.17 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (2) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.17 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semop@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlerror@GLIBC_2.17 (4) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.17 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (3) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fdelt_chk@GLIBC_2.17 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.17 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_destroy@GLIBC_2.17 (3) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.17 (2) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.17 (3) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvfrom@GLIBC_2.17 (3) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.17 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek64@GLIBC_2.17 (3) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sleep@GLIBC_2.17 (2) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.17 (3) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getprotobynumber_r@GLIBC_2.17 (2) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (2) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setdetachstate@GLIBC_2.17 (3) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setstacksize@GLIBC_2.17 (3) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.17 (3) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execv@GLIBC_2.17 (2) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.17 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.17 (3) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.17 (2) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpagesize@GLIBC_2.17 (2) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putenv@GLIBC_2.17 (2) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.17 (2) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (2) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (2) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (3) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (3) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.17 (3) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.17 (3) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.17 (3) + 94: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.17 (2) + 96: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (5) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (3) + 98: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.17 (2) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.17 (3) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (2) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.17 (2) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (2) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpriority@GLIBC_2.17 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (2) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.17 (2) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.17 (2) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_yield@GLIBC_2.17 (2) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendfile@GLIBC_2.17 (2) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftok@GLIBC_2.17 (2) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigwait@GLIBC_2.17 (3) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chdir@GLIBC_2.17 (2) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat64@GLIBC_2.17 (2) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmget@GLIBC_2.17 (2) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.17 (3) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_delete@GLIBC_2.17 (3) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.17 (3) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.17 (3) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (3) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stpcpy_chk@GLIBC_2.17 (2) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_kill@GLIBC_2.17 (3) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_init@GLIBC_2.17 (3) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.17 (3) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execve@GLIBC_2.17 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.17 (2) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getprotobyname_r@GLIBC_2.17 (2) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (3) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (2) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (3) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (2) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.17 (3) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getrlimit@GLIBC_2.17 (2) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.17 (2) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.17 (2) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (3) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (2) + 143: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.17 (2) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.17 (2) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.17 (2) + 146: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND environ@GLIBC_2.17 (2) + 147: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open64@GLIBC_2.17 (3) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.17 (2) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (2) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (2) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.17 (2) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyname2_r@GLIBC_2.17 (2) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.17 (2) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socketpair@GLIBC_2.17 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.17 (2) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaddset@GLIBC_2.17 (2) + 158: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.17 (3) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.17 (3) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (3) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.17 (2) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap64@GLIBC_2.17 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (2) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setpriority@GLIBC_2.17 (2) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (3) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND syscall@GLIBC_2.17 (2) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.17 (2) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (3) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.17 (3) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (2) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.17 (2) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.17 (3) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.17 (2) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.17 (2) + 178: 000000000001c984 56 FUNC GLOBAL DEFAULT 11 PR_FreeAddrInfo + 179: 0000000000026eec 124 FUNC GLOBAL DEFAULT 11 PR_Delete + 180: 0000000000026ff4 28 FUNC GLOBAL DEFAULT 11 PR_GetFileInfo + 181: 0000000000015f90 44 FUNC GLOBAL DEFAULT 11 PR_DeleteSharedMemory + 182: 0000000000015ad4 280 FUNC GLOBAL DEFAULT 11 PR_FPrintZoneStats + 183: 000000000000e984 28 FUNC GLOBAL DEFAULT 11 PR_Bind + 184: 000000000000e888 28 FUNC GLOBAL DEFAULT 11 PR_Seek64 + 185: 000000000001b068 8 FUNC GLOBAL DEFAULT 11 LL_MinInt + 186: 00000000000280b8 176 FUNC GLOBAL DEFAULT 11 PR_FD_NISSET + 187: 000000000001693c 84 FUNC GLOBAL DEFAULT 11 PR_GetCounterNameFromHandle + 188: 000000000001c580 56 FUNC GLOBAL DEFAULT 11 PR_ntohll + 189: 000000000000e968 28 FUNC GLOBAL DEFAULT 11 PR_Accept + 190: 0000000000020050 8 FUNC GLOBAL DEFAULT 11 PR_GMTParameters + 191: 000000000000eb28 28 FUNC GLOBAL DEFAULT 11 PR_SendFile + 192: 000000000002744c 260 FUNC GLOBAL DEFAULT 11 PR_NewTCPSocketPair + 193: 0000000000029a80 284 FUNC GLOBAL DEFAULT 11 PR_SetCurrentThreadName + 194: 0000000000015384 80 FUNC GLOBAL DEFAULT 11 PR_FindSymbol + 195: 000000000001b070 8 FUNC GLOBAL DEFAULT 11 LL_MaxUint + 196: 000000000000ea80 28 FUNC GLOBAL DEFAULT 11 PR_TransmitFile + 197: 00000000000267d0 16 FUNC GLOBAL DEFAULT 11 PR_GetTCPMethods + 198: 0000000000014474 100 FUNC GLOBAL DEFAULT 11 PR_CNotifyAll + 199: 00000000000129c8 176 FUNC GLOBAL DEFAULT 11 PR_snprintf + 200: 000000000001e724 116 FUNC GLOBAL DEFAULT 11 PR_JoinJob + 201: 00000000000294ec 64 FUNC GLOBAL DEFAULT 11 PR_SetThreadGCAble + 202: 000000000001d0e4 372 FUNC GLOBAL DEFAULT 11 PR_GetSystemInfo + 203: 000000000001bcd4 572 FUNC GLOBAL DEFAULT 11 PR_GetHostByAddr + 204: 000000000001b780 340 FUNC GLOBAL DEFAULT 11 PR_GetHostByName + 205: 000000000001fac4 652 FUNC GLOBAL DEFAULT 11 PR_GetTraceEntries + 206: 000000000001cab0 68 FUNC GLOBAL DEFAULT 11 PR_GetCanonNameFromAddrInfo + 207: 0000000000020964 488 FUNC GLOBAL DEFAULT 11 PR_LocalTimeParameters + 208: 0000000000026b10 116 FUNC GLOBAL DEFAULT 11 PR_AllocFileDesc + 209: 0000000000022e20 288 FUNC GLOBAL DEFAULT 11 PR_ExitMonitor + 210: 000000000002350c 132 FUNC GLOBAL DEFAULT 11 PR_WaitSemaphore + 211: 000000000002785c 124 FUNC GLOBAL DEFAULT 11 PR_ImportUDPSocket + 212: 0000000000027328 236 FUNC GLOBAL DEFAULT 11 PR_ReadDir + 213: 00000000000290b4 24 FUNC GLOBAL DEFAULT 11 PR_UnblockInterrupt + 214: 0000000000016430 24 FUNC GLOBAL DEFAULT 11 PR_AtomicIncrement + 215: 000000000002362c 272 FUNC GLOBAL DEFAULT 11 PR_DeleteSemaphore + 216: 000000000000fb60 12 FUNC GLOBAL DEFAULT 11 PR_GetDefaultIOMethods + 217: 000000000000e834 28 FUNC GLOBAL DEFAULT 11 PR_Read + 218: 00000000000294c8 8 FUNC GLOBAL DEFAULT 11 PR_GetThreadID + 219: 000000000001a5c8 16 FUNC GLOBAL DEFAULT 11 PR_Initialized + 220: 0000000000014704 128 FUNC GLOBAL DEFAULT 11 PR_RWLock_Unlock + 221: 0000000000014194 376 FUNC GLOBAL DEFAULT 11 PR_CEnterMonitor + 222: 0000000000028b84 8 FUNC GLOBAL DEFAULT 11 PR_CreateThread + 223: 000000000000d9e4 328 FUNC GLOBAL DEFAULT 11 PR_CreateWaitGroup + 224: 000000000001af30 52 FUNC GLOBAL DEFAULT 11 PR_IntervalToMilliseconds + 225: 000000000000ec30 672 FUNC GLOBAL DEFAULT 11 PR_EmulateSendFile + 226: 0000000000029098 28 FUNC GLOBAL DEFAULT 11 PR_BlockInterrupt + 227: 000000000000e5ac 328 FUNC GLOBAL DEFAULT 11 PR_EnumerateWaitGroup + 228: 0000000000027d48 80 FUNC GLOBAL DEFAULT 11 PR_FD_ZERO + 229: 0000000000029bb4 4 FUNC GLOBAL DEFAULT 11 PR_SetThreadRecycleMode + 230: 000000000000e8dc 28 FUNC GLOBAL DEFAULT 11 PR_GetOpenFileInfo + 231: 000000000000e560 76 FUNC GLOBAL DEFAULT 11 PR_DestroyMWaitEnumerator + 232: 000000000000eaf0 28 FUNC GLOBAL DEFAULT 11 PR_GetSocketOption + 233: 000000000000d8a8 316 FUNC GLOBAL DEFAULT 11 PR_CancelWaitGroup + 234: 0000000000027c28 128 FUNC GLOBAL DEFAULT 11 PR_SetSysfdTableSize + 235: 0000000000027bcc 92 FUNC GLOBAL DEFAULT 11 PR_GetSysfdTableMax + 236: 0000000000014e44 296 FUNC GLOBAL DEFAULT 11 PR_GetLibraryPath + 237: 0000000000015fbc 4 FUNC GLOBAL DEFAULT 11 PR_OpenAnonFileMap + 238: 0000000000053e60 0 NOTYPE GLOBAL DEFAULT 24 _end + 239: 0000000000015f88 4 FUNC GLOBAL DEFAULT 11 PR_DetachSharedMemory + 240: 000000000001a5e0 4 FUNC GLOBAL DEFAULT 11 PR_EnableClockInterrupts + 241: 000000000001a5f0 72 FUNC GLOBAL DEFAULT 11 PR_Initialize + 242: 0000000000028b8c 8 FUNC GLOBAL DEFAULT 11 PR_CreateThreadGCAble + 243: 000000000001a73c 4 FUNC GLOBAL DEFAULT 11 PR_SetStdioRedirect + 244: 000000000001d0dc 8 FUNC GLOBAL DEFAULT 11 PR_GetPathSeparator + 245: 000000000001c5cc 520 FUNC GLOBAL DEFAULT 11 PR_GetAddrInfoByName + 246: 000000000001a7b4 388 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetInheritableFD + 247: 0000000000010688 132 FUNC GLOBAL DEFAULT 11 PR_LogFlush + 248: 000000000000e914 28 FUNC GLOBAL DEFAULT 11 PR_Sync + 249: 000000000001b044 20 FUNC GLOBAL DEFAULT 11 PR_FloorLog2 + 250: 000000000002798c 64 FUNC GLOBAL DEFAULT 11 PR_FileDesc2NativeHandle + 251: 000000000001a208 140 FUNC GLOBAL DEFAULT 11 PR_ErrorInstallTable + 252: 000000000001acb0 368 FUNC GLOBAL DEFAULT 11 PR_CallOnceWithArg + 253: 000000000001639c 144 FUNC GLOBAL DEFAULT 11 PR_ResetAlarm + 254: 00000000000169fc 108 FUNC GLOBAL DEFAULT 11 PR_DecrementCounter + 255: 0000000000016460 20 FUNC GLOBAL DEFAULT 11 PR_AtomicSet + 256: 00000000000111bc 92 FUNC GLOBAL DEFAULT 11 PR_WaitForPollableEvent + 257: 000000000001aec8 68 FUNC GLOBAL DEFAULT 11 PR_MicrosecondsToInterval + 258: 0000000000016990 108 FUNC GLOBAL DEFAULT 11 PR_IncrementCounter + 259: 000000000001a938 376 FUNC GLOBAL DEFAULT 11 PR_GetInheritedFD + 260: 000000000002728c 152 FUNC GLOBAL DEFAULT 11 PR_OpenDir + 261: 00000000000267b4 12 FUNC GLOBAL DEFAULT 11 PR_GetFileMethods + 262: 000000000001d020 32 FUNC GLOBAL DEFAULT 11 PR_CreateOrderedLock + 263: 000000000001d374 72 FUNC GLOBAL DEFAULT 11 PR_GetPhysicalMemorySize + 264: 0000000000022a8c 248 FUNC GLOBAL DEFAULT 11 PR_WaitCondVar + 265: 000000000001d0d0 8 FUNC GLOBAL DEFAULT 11 PR_GetDirectorySeparator + 266: 00000000000279cc 16 FUNC GLOBAL DEFAULT 11 PR_ChangeFileDescNativeHandle + 267: 000000000000eab8 28 FUNC GLOBAL DEFAULT 11 PR_GetSockName + 268: 0000000000028eec 12 FUNC GLOBAL DEFAULT 11 PR_GetThreadType + 269: 000000000001c5b8 20 FUNC GLOBAL DEFAULT 11 PR_htonll + 270: 0000000000019f60 72 FUNC GLOBAL DEFAULT 11 PR_GetErrorText + 271: 000000000001ed5c 320 FUNC GLOBAL DEFAULT 11 PR_DestroyTrace + 272: 0000000000026b84 56 FUNC GLOBAL DEFAULT 11 _pr_test_ipv6_socket + 273: 0000000000029a34 76 FUNC GLOBAL DEFAULT 11 PR_GetSP + 274: 0000000000015fe0 32 FUNC GLOBAL DEFAULT 11 PR_GetInheritedFileMap + 275: 0000000000027764 124 FUNC GLOBAL DEFAULT 11 PR_ImportPipe + 276: 000000000001f058 796 FUNC GLOBAL DEFAULT 11 PR_SetTraceOption + 277: 0000000000012dcc 3888 FUNC GLOBAL DEFAULT 11 PR_sscanf + 278: 000000000000df68 1444 FUNC GLOBAL DEFAULT 11 PR_WaitRecvReady + 279: 000000000001e0d0 616 FUNC GLOBAL DEFAULT 11 PR_CreateThreadPool + 280: 0000000000016a68 116 FUNC GLOBAL DEFAULT 11 PR_AddToCounter + 281: 000000000001118c 48 FUNC GLOBAL DEFAULT 11 PR_SetPollableEvent + 282: 000000000001ae2c 36 FUNC GLOBAL DEFAULT 11 PR_IntervalNow + 283: 000000000002373c 64 FUNC GLOBAL DEFAULT 11 PRP_TryLock + 284: 0000000000026ee8 4 FUNC GLOBAL DEFAULT 11 PR_Open + 285: 00000000000154b0 4 FUNC GLOBAL DEFAULT 11 PR_FindFunctionSymbolAndLibrary + 286: 000000000000d7ac 252 FUNC GLOBAL DEFAULT 11 PR_CancelWaitFileDesc + 287: 000000000000e86c 28 FUNC GLOBAL DEFAULT 11 PR_Seek + 288: 0000000000019888 708 FUNC GLOBAL DEFAULT 11 PR_cnvtf + 289: 000000000001b020 36 FUNC GLOBAL DEFAULT 11 PR_CeilingLog2 + 290: 000000000001d058 32 FUNC GLOBAL DEFAULT 11 PR_UnlockOrderedLock + 291: 00000000000127b4 152 FUNC GLOBAL DEFAULT 11 PR_vsmprintf + 292: 000000000001e3a0 8 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Write + 293: 0000000000019b9c 120 FUNC GLOBAL DEFAULT 11 PR_GetEnv + 294: 0000000000028c90 68 FUNC GLOBAL DEFAULT 11 PR_DetachThread + 295: 0000000000019e44 24 FUNC GLOBAL DEFAULT 11 PR_GetError + 296: 000000000001f3d0 84 FUNC GLOBAL DEFAULT 11 PR_GetTraceNameFromHandle + 297: 000000000000db2c 316 FUNC GLOBAL DEFAULT 11 PR_DestroyWaitGroup + 298: 0000000000019e74 52 FUNC GLOBAL DEFAULT 11 PR_SetError + 299: 000000000001f658 1132 FUNC GLOBAL DEFAULT 11 PR_RecordTraceEntries + 300: 000000000000e818 28 FUNC GLOBAL DEFAULT 11 PR_Close + 301: 0000000000053e60 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 302: 000000000001430c 152 FUNC GLOBAL DEFAULT 11 PR_CExitMonitor + 303: 00000000000276e8 124 FUNC GLOBAL DEFAULT 11 PR_ImportFile + 304: 0000000000019d20 280 FUNC GLOBAL DEFAULT 11 PR_DuplicateEnvironment + 305: 0000000000051380 0 NOTYPE GLOBAL DEFAULT 23 _edata + 306: 0000000000022778 84 FUNC GLOBAL DEFAULT 11 PR_NewLock + 307: 000000000001b8d4 1024 FUNC GLOBAL DEFAULT 11 PR_GetIPNodeByName + 308: 000000000000e8a4 28 FUNC GLOBAL DEFAULT 11 PR_Available + 309: 000000000001e3b0 172 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Connect + 310: 0000000000027ed0 172 FUNC GLOBAL DEFAULT 11 PR_FD_ISSET + 311: 0000000000016548 88 FUNC GLOBAL DEFAULT 11 PR_DestroyStack + 312: 0000000000028ed4 24 FUNC GLOBAL DEFAULT 11 PR_GetThreadScope + 313: 0000000000028b9c 8 FUNC GLOBAL DEFAULT 11 SetExecutionEnvironment + 314: 000000000001ae50 36 FUNC GLOBAL DEFAULT 11 PR_TicksPerSecond + 315: 0000000000022a18 116 FUNC GLOBAL DEFAULT 11 PR_Unlock + 316: 000000000001e7d8 580 FUNC GLOBAL DEFAULT 11 PR_JoinThreadPool + 317: 0000000000010208 260 FUNC GLOBAL DEFAULT 11 PR_PopIOLayer + 318: 000000000001d4fc 84 FUNC GLOBAL DEFAULT 11 PR_ScanStackPointers + 319: 000000000002307c 108 FUNC GLOBAL DEFAULT 11 PR_PostSem + 320: 000000000002a1d8 96 FUNC GLOBAL DEFAULT 11 PR_Now + 321: 000000000001d3c0 304 FUNC GLOBAL DEFAULT 11 PR_ThreadScanStackPointers + 322: 000000000001c7d4 432 FUNC GLOBAL DEFAULT 11 PR_GetPrefLoopbackAddrInfo + 323: 0000000000027424 16 FUNC GLOBAL DEFAULT 11 PR_NewTCPSocket + 324: 0000000000016bd4 116 FUNC GLOBAL DEFAULT 11 PR_FindNextCounterQname + 325: 000000000001a5e4 4 FUNC GLOBAL DEFAULT 11 PR_BlockClockInterrupts + 326: 00000000000230e8 156 FUNC GLOBAL DEFAULT 11 PR_WaitSem + 327: 000000000001e5a4 384 FUNC GLOBAL DEFAULT 11 PR_CancelJob + 328: 000000000000d3d0 108 FUNC GLOBAL DEFAULT 11 PR_SetFDCacheSize + 329: 000000000002952c 64 FUNC GLOBAL DEFAULT 11 PR_ClearThreadGCAble + 330: 000000000001cc84 376 FUNC GLOBAL DEFAULT 11 PR_NetAddrToString + 331: 000000000000e9f4 28 FUNC GLOBAL DEFAULT 11 PR_Send + 332: 0000000000051380 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 333: 000000000001aab4 4 FUNC GLOBAL DEFAULT 11 PR_DetachProcess + 334: 0000000000015f40 68 FUNC GLOBAL DEFAULT 11 PR_OpenSharedMemory + 335: 0000000000028dcc 4 FUNC GLOBAL DEFAULT 11 PR_AttachThread + 336: 0000000000016238 128 FUNC GLOBAL DEFAULT 11 PR_DestroyAlarm + 337: 00000000000144e8 268 FUNC GLOBAL DEFAULT 11 PR_NewRWLock + 338: 000000000001e398 8 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Read + 339: 0000000000027fe0 216 FUNC GLOBAL DEFAULT 11 PR_FD_NCLR + 340: 0000000000010ea0 24 FUNC GLOBAL DEFAULT 11 PR_Abort + 341: 000000000000ead4 28 FUNC GLOBAL DEFAULT 11 PR_GetPeerName + 342: 0000000000026f68 140 FUNC GLOBAL DEFAULT 11 PR_Access + 343: 0000000000010fb0 4 FUNC GLOBAL DEFAULT 11 PR_CloseFileMap + 344: 00000000000153d4 4 FUNC GLOBAL DEFAULT 11 PR_FindFunctionSymbol + 345: 0000000000020058 780 FUNC GLOBAL DEFAULT 11 PR_ExplodeTime + 346: 000000000000e9d8 28 FUNC GLOBAL DEFAULT 11 PR_Recv + 347: 000000000000eb44 236 FUNC GLOBAL DEFAULT 11 PR_EmulateAcceptRead + 348: 000000000002306c 16 FUNC GLOBAL DEFAULT 11 PR_NotifyAll + 349: 0000000000012b50 180 FUNC GLOBAL DEFAULT 11 PR_sprintf_append + 350: 000000000002377c 120 FUNC GLOBAL DEFAULT 11 PRP_NewNakedCondVar + 351: 00000000000227cc 36 FUNC GLOBAL DEFAULT 11 PR_DestroyLock + 352: 000000000001e798 64 FUNC GLOBAL DEFAULT 11 PR_ShutdownThreadPool + 353: 000000000001c578 8 FUNC GLOBAL DEFAULT 11 PR_htonl + 354: 000000000001d550 116 FUNC GLOBAL DEFAULT 11 PR_GetStackSpaceLeft + 355: 000000000001bfdc 204 FUNC GLOBAL DEFAULT 11 PR_GetProtoByNumber + 356: 00000000000231e0 192 FUNC GLOBAL DEFAULT 11 PR_NewSem + 357: 0000000000019e5c 24 FUNC GLOBAL DEFAULT 11 PR_GetOSError + 358: 0000000000015198 56 FUNC GLOBAL DEFAULT 11 PR_LoadLibrary + 359: 0000000000027440 12 FUNC GLOBAL DEFAULT 11 PR_OpenTCPSocket + 360: 0000000000012680 128 FUNC GLOBAL DEFAULT 11 PR_vsxprintf + 361: 000000000000fb6c 148 FUNC GLOBAL DEFAULT 11 PR_CreateIOLayerStub + 362: 000000000002722c 4 FUNC GLOBAL DEFAULT 11 PR_MkDir + 363: 000000000001284c 184 FUNC GLOBAL DEFAULT 11 PR_smprintf + 364: 0000000000053e60 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 365: 000000000001c9bc 244 FUNC GLOBAL DEFAULT 11 PR_EnumerateAddrInfo + 366: 000000000001ae98 48 FUNC GLOBAL DEFAULT 11 PR_MillisecondsToInterval + 367: 000000000000ea48 28 FUNC GLOBAL DEFAULT 11 PR_RecvFrom + 368: 0000000000027950 60 FUNC GLOBAL DEFAULT 11 PR_DestroySocketPollFd + 369: 00000000000154b4 280 FUNC GLOBAL DEFAULT 11 PR_LoadStaticLibrary + 370: 00000000000290cc 208 FUNC GLOBAL DEFAULT 11 PR_Sleep + 371: 000000000001c568 16 FUNC GLOBAL DEFAULT 11 PR_htons + 372: 00000000000105f8 144 FUNC GLOBAL DEFAULT 11 PR_SetLogFile + 373: 000000000001aab0 4 FUNC GLOBAL DEFAULT 11 PR_CreateProcess + 374: 0000000000015eec 40 FUNC GLOBAL DEFAULT 11 PR_GetPageShift + 375: 000000000000e8f8 28 FUNC GLOBAL DEFAULT 11 PR_GetOpenFileInfo64 + 376: 0000000000016474 24 FUNC GLOBAL DEFAULT 11 PR_AtomicAdd + 377: 000000000001d0cc 4 FUNC GLOBAL DEFAULT 11 PR_GetRandomNoise + 378: 000000000001ab0c 4 FUNC GLOBAL DEFAULT 11 PR_KillProcess + 379: 000000000001d3bc 4 FUNC GLOBAL DEFAULT 11 PR_GetGCRegisters + 380: 0000000000022cc8 40 FUNC GLOBAL DEFAULT 11 PR_NewNamedMonitor + 381: 0000000000016adc 116 FUNC GLOBAL DEFAULT 11 PR_SubtractFromCounter + 382: 0000000000015fc0 32 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetInheritableFileMap + 383: 000000000001a1f8 16 FUNC GLOBAL DEFAULT 11 PR_ErrorLanguages + 384: 0000000000016448 24 FUNC GLOBAL DEFAULT 11 PR_AtomicDecrement + 385: 0000000000023184 92 FUNC GLOBAL DEFAULT 11 PR_DestroySem + 386: 000000000001b058 8 FUNC GLOBAL DEFAULT 11 LL_Zero + 387: 0000000000012a78 216 FUNC GLOBAL DEFAULT 11 PR_vsprintf_append + 388: 0000000000026630 4 FUNC GLOBAL DEFAULT 11 PT_FPrintStats + 389: 000000000001c420 280 FUNC GLOBAL DEFAULT 11 PR_IsNetAddrType + 390: 0000000000022d4c 88 FUNC GLOBAL DEFAULT 11 PR_GetMonitorEntryCount + 391: 000000000002935c 352 FUNC GLOBAL DEFAULT 11 PR_Cleanup + 392: 00000000000266d4 148 FUNC GLOBAL DEFAULT 11 PR_GetSpecialFD + 393: 0000000000015bec 76 FUNC GLOBAL DEFAULT 11 PR_Malloc + 394: 000000000001c1bc 232 FUNC GLOBAL DEFAULT 11 PR_InitializeNetAddr + 395: 000000000002987c 440 FUNC GLOBAL DEFAULT 11 PR_ResumeAll + 396: 0000000000018988 3804 FUNC GLOBAL DEFAULT 11 PR_dtoa + 397: 000000000001af0c 36 FUNC GLOBAL DEFAULT 11 PR_IntervalToSeconds + 398: 00000000000147bc 136 FUNC GLOBAL DEFAULT 11 PR_NewThreadPrivateIndex + 399: 000000000000e930 28 FUNC GLOBAL DEFAULT 11 PR_Connect + 400: 000000000001d04c 12 FUNC GLOBAL DEFAULT 11 PR_LockOrderedLock + 401: 000000000001f424 116 FUNC GLOBAL DEFAULT 11 PR_FindNextTraceQname + 402: 00000000000151d0 436 FUNC GLOBAL DEFAULT 11 PR_UnloadLibrary + 403: 000000000000d20c 12 FUNC GLOBAL DEFAULT 11 libVersionPoint + 404: 00000000000294e0 12 FUNC GLOBAL DEFAULT 11 PR_SetThreadDumpProc + 405: 000000000002cc4c 0 FUNC GLOBAL DEFAULT 12 _fini + 406: 000000000000e850 28 FUNC GLOBAL DEFAULT 11 PR_Write + 407: 0000000000027dfc 212 FUNC GLOBAL DEFAULT 11 PR_FD_CLR + 408: 0000000000016620 476 FUNC GLOBAL DEFAULT 11 PR_CreateCounter + 409: 00000000000232a0 620 FUNC GLOBAL DEFAULT 11 PR_OpenSemaphore + 410: 0000000000019c14 120 FUNC GLOBAL DEFAULT 11 PR_GetEnvSecure + 411: 00000000000167fc 320 FUNC GLOBAL DEFAULT 11 PR_DestroyCounter + 412: 00000000000144d8 16 FUNC GLOBAL DEFAULT 11 PR_CSetOnMonitorRecycle + 413: 0000000000015cc0 452 FUNC GLOBAL DEFAULT 11 PR_Realloc + 414: 00000000000294d8 8 FUNC GLOBAL DEFAULT 11 PR_SetThreadAffinityMask + 415: 0000000000016c48 116 FUNC GLOBAL DEFAULT 11 PR_FindNextCounterRname + 416: 0000000000028168 576 FUNC GLOBAL DEFAULT 11 PR_Select + 417: 0000000000027128 116 FUNC GLOBAL DEFAULT 11 PR_CloseDir + 418: 0000000000016cbc 332 FUNC GLOBAL DEFAULT 11 PR_GetCounterHandleFromName + 419: 0000000000028f04 8 FUNC GLOBAL DEFAULT 11 PR_GetThreadPriority + 420: 000000000001e338 96 FUNC GLOBAL DEFAULT 11 PR_QueueJob + 421: 0000000000019f48 24 FUNC GLOBAL DEFAULT 11 PR_GetErrorTextLength + 422: 0000000000027414 16 FUNC GLOBAL DEFAULT 11 PR_NewUDPSocket + 423: 0000000000020834 304 FUNC GLOBAL DEFAULT 11 PR_ImplodeTime + 424: 000000000001c2a4 380 FUNC GLOBAL DEFAULT 11 PR_SetNetAddr + 425: 00000000000162b8 228 FUNC GLOBAL DEFAULT 11 PR_SetAlarm + 426: 000000000001ab48 360 FUNC GLOBAL DEFAULT 11 PR_CallOnce + 427: 0000000000019c8c 148 FUNC GLOBAL DEFAULT 11 PR_SetEnv + 428: 0000000000029bb0 4 FUNC GLOBAL DEFAULT 11 PR_SetConcurrency + 429: 000000000000bd20 0 FUNC GLOBAL DEFAULT 9 _init + 430: 000000000001a294 104 FUNC GLOBAL DEFAULT 11 PR_ErrorInstallCallback + 431: 0000000000027550 256 FUNC GLOBAL DEFAULT 11 PR_CreatePipe + 432: 000000000000ea9c 28 FUNC GLOBAL DEFAULT 11 PR_AcceptRead + 433: 0000000000014954 72 FUNC GLOBAL DEFAULT 11 PR_GetThreadPrivate + 434: 000000000002969c 480 FUNC GLOBAL DEFAULT 11 PR_SuspendAll + 435: 000000000002919c 68 FUNC GLOBAL DEFAULT 11 PR_Yield + 436: 000000000000dd4c 540 FUNC GLOBAL DEFAULT 11 PR_AddWaitFileDesc + 437: 000000000001e45c 328 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Timer + 438: 0000000000029b9c 12 FUNC GLOBAL DEFAULT 11 PR_GetThreadName + 439: 0000000000016000 4 FUNC GLOBAL DEFAULT 11 PR_ExportFileMapAsString + 440: 0000000000022bbc 268 FUNC GLOBAL DEFAULT 11 PR_NewMonitor + 441: 000000000001a684 76 FUNC GLOBAL DEFAULT 11 PR_ResetProcessAttr + 442: 00000000000278d8 120 FUNC GLOBAL DEFAULT 11 PR_CreateSocketPollFd + 443: 0000000000027324 4 FUNC GLOBAL DEFAULT 11 PR_Poll + 444: 0000000000015f8c 4 FUNC GLOBAL DEFAULT 11 PR_CloseSharedMemory + 445: 0000000000012700 176 FUNC GLOBAL DEFAULT 11 PR_sxprintf + 446: 0000000000022820 4 FUNC GLOBAL DEFAULT 11 PR_AssertCurrentThreadOwnsLock + 447: 00000000000143a4 108 FUNC GLOBAL DEFAULT 11 PR_CWait + 448: 000000000001a5ec 4 FUNC GLOBAL DEFAULT 11 PR_Init + 449: 00000000000145f4 68 FUNC GLOBAL DEFAULT 11 PR_DestroyRWLock + 450: 00000000000155cc 156 FUNC GLOBAL DEFAULT 11 PR_GetLibraryFilePathname + 451: 0000000000016004 4 FUNC GLOBAL DEFAULT 11 PR_ImportFileMapFromString + 452: 0000000000011188 4 FUNC GLOBAL DEFAULT 11 PR_DestroyPollableEvent + 453: 000000000001a4ac 272 FUNC GLOBAL DEFAULT 11 PR_VersionCheck + 454: 0000000000026d4c 412 FUNC GLOBAL DEFAULT 11 PR_OpenFile + 455: 000000000001a6d0 64 FUNC GLOBAL DEFAULT 11 PR_DestroyProcessAttr + 456: 0000000000010fac 4 FUNC GLOBAL DEFAULT 11 PR_MemUnmap + 457: 000000000001ee9c 444 FUNC GLOBAL DEFAULT 11 PR_Trace + 458: 000000000001c538 24 FUNC GLOBAL DEFAULT 11 PR_ConvertIPv4AddrToIPv6 + 459: 0000000000027434 12 FUNC GLOBAL DEFAULT 11 PR_OpenUDPSocket + 460: 00000000000279dc 216 FUNC GLOBAL DEFAULT 11 PR_LockFile + 461: 0000000000023878 28 FUNC GLOBAL DEFAULT 11 PRP_NakedBroadcast + 462: 000000000001ae74 36 FUNC GLOBAL DEFAULT 11 PR_SecondsToInterval + 463: 000000000001045c 412 FUNC GLOBAL DEFAULT 11 PR_NewLogModule + 464: 000000000001d040 12 FUNC GLOBAL DEFAULT 11 PR_DestroyOrderedLock + 465: 0000000000051380 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 466: 0000000000028b94 8 FUNC GLOBAL DEFAULT 11 GetExecutionEnvironment + 467: 00000000000267c0 16 FUNC GLOBAL DEFAULT 11 PR_GetPipeMethods + 468: 0000000000027064 196 FUNC GLOBAL DEFAULT 11 PR_Rename + 469: 0000000000023614 24 FUNC GLOBAL DEFAULT 11 PR_CloseSemaphore + 470: 00000000000107c4 100 FUNC GLOBAL DEFAULT 11 PR_SetLogBuffering + 471: 000000000001a5dc 4 FUNC GLOBAL DEFAULT 11 PR_DisableClockInterrupts + 472: 0000000000015e84 24 FUNC GLOBAL DEFAULT 11 PR_Free + 473: 0000000000015f84 4 FUNC GLOBAL DEFAULT 11 PR_AttachSharedMemory + 474: 0000000000015028 368 FUNC GLOBAL DEFAULT 11 PR_LoadLibraryWithFlags + 475: 0000000000013d68 180 FUNC GLOBAL DEFAULT 11 PR_fprintf + 476: 0000000000022cf0 92 FUNC GLOBAL DEFAULT 11 PR_DestroyMonitor + 477: 000000000001aab8 80 FUNC GLOBAL DEFAULT 11 PR_CreateProcessDetached + 478: 0000000000014844 272 FUNC GLOBAL DEFAULT 11 PR_SetThreadPrivate + 479: 00000000000294d0 8 FUNC GLOBAL DEFAULT 11 PR_GetThreadAffinityMask + 480: 000000000001bf10 204 FUNC GLOBAL DEFAULT 11 PR_GetProtoByName + 481: 000000000001f498 116 FUNC GLOBAL DEFAULT 11 PR_FindNextTraceRname + 482: 0000000000028f0c 224 FUNC GLOBAL DEFAULT 11 PR_SetThreadPriority + 483: 0000000000021fb0 224 FUNC GLOBAL DEFAULT 11 PR_FormatTime + 484: 0000000000022b84 28 FUNC GLOBAL DEFAULT 11 PR_NotifyCondVar + 485: 0000000000015c38 136 FUNC GLOBAL DEFAULT 11 PR_Calloc + 486: 000000000001f374 92 FUNC GLOBAL DEFAULT 11 PR_GetTraceOption + 487: 00000000000237f4 40 FUNC GLOBAL DEFAULT 11 PRP_DestroyNakedCondVar + 488: 0000000000014d84 192 FUNC GLOBAL DEFAULT 11 PR_SetLibraryPath + 489: 0000000000027ab4 140 FUNC GLOBAL DEFAULT 11 PR_TLockFile + 490: 0000000000019ea8 160 FUNC GLOBAL DEFAULT 11 PR_SetErrorText + 491: 0000000000015024 4 FUNC GLOBAL DEFAULT 11 PR_FreeLibraryName + 492: 0000000000027230 92 FUNC GLOBAL DEFAULT 11 PR_RmDir + 493: 0000000000022da4 4 FUNC GLOBAL DEFAULT 11 PR_AssertCurrentThreadInMonitor + 494: 000000000000ea10 56 FUNC GLOBAL DEFAULT 11 PR_Writev + 495: 00000000000267e0 16 FUNC GLOBAL DEFAULT 11 PR_GetUDPMethods + 496: 0000000000027650 152 FUNC GLOBAL DEFAULT 11 PR_SetFDInheritable + 497: 0000000000027f7c 100 FUNC GLOBAL DEFAULT 11 PR_FD_NSET + 498: 0000000000016b9c 56 FUNC GLOBAL DEFAULT 11 PR_SetCounter + 499: 000000000000e80c 12 FUNC GLOBAL DEFAULT 11 PR_GetDescType + 500: 000000000002381c 64 FUNC GLOBAL DEFAULT 11 PRP_NakedWait + 501: 0000000000028ef8 12 FUNC GLOBAL DEFAULT 11 PR_GetThreadState + 502: 000000000000e9bc 28 FUNC GLOBAL DEFAULT 11 PR_Listen + 503: 000000000000e94c 28 FUNC GLOBAL DEFAULT 11 PR_ConnectContinue + 504: 000000000001b060 8 FUNC GLOBAL DEFAULT 11 LL_MaxInt + 505: 000000000000ea64 28 FUNC GLOBAL DEFAULT 11 PR_SendTo + 506: 000000000000ff40 216 FUNC GLOBAL DEFAULT 11 PR_PushIOLayer + 507: 0000000000026768 76 FUNC GLOBAL DEFAULT 11 PR_GetConnectStatus + 508: 0000000000022f40 272 FUNC GLOBAL DEFAULT 11 PR_Wait + 509: 0000000000022da8 120 FUNC GLOBAL DEFAULT 11 PR_EnterMonitor + 510: 000000000000fe30 132 FUNC GLOBAL DEFAULT 11 PR_GetNameForIdentity + 511: 0000000000010ae4 956 FUNC GLOBAL DEFAULT 11 PR_LogPrint + 512: 0000000000027010 84 FUNC GLOBAL DEFAULT 11 PR_GetFileInfo64 + 513: 000000000001d258 284 FUNC GLOBAL DEFAULT 11 PR_GetNumberOfProcessors + 514: 000000000001f50c 332 FUNC GLOBAL DEFAULT 11 PR_GetTraceHandleFromName + 515: 0000000000022ba0 28 FUNC GLOBAL DEFAULT 11 PR_NotifyAllCondVar + 516: 000000000001a5e8 4 FUNC GLOBAL DEFAULT 11 PR_UnblockClockInterrupts + 517: 0000000000027b40 140 FUNC GLOBAL DEFAULT 11 PR_UnlockFile + 518: 0000000000016b50 76 FUNC GLOBAL DEFAULT 11 PR_GetCounter + 519: 0000000000023050 28 FUNC GLOBAL DEFAULT 11 PR_Notify + 520: 000000000000e50c 84 FUNC GLOBAL DEFAULT 11 PR_CreateMWaitEnumerator + 521: 0000000000019fa8 508 FUNC GLOBAL DEFAULT 11 PR_ErrorToString + 522: 000000000001eb90 460 FUNC GLOBAL DEFAULT 11 PR_CreateTrace + 523: 000000000001ab08 4 FUNC GLOBAL DEFAULT 11 PR_WaitProcess + 524: 0000000000022824 96 FUNC GLOBAL DEFAULT 11 PR_NewCondVar + 525: 0000000000010eb8 112 FUNC GLOBAL DEFAULT 11 PR_Assert + 526: 000000000000eb0c 28 FUNC GLOBAL DEFAULT 11 PR_SetSocketOption + 527: 00000000000165dc 68 FUNC GLOBAL DEFAULT 11 PR_StackPop + 528: 0000000000028ba4 236 FUNC GLOBAL DEFAULT 11 PR_JoinThread + 529: 00000000000277e0 124 FUNC GLOBAL DEFAULT 11 PR_ImportTCPSocket + 530: 000000000000fc74 444 FUNC GLOBAL DEFAULT 11 PR_GetUniqueIdentity + 531: 0000000000017b0c 3676 FUNC GLOBAL DEFAULT 11 PR_strtod + 532: 0000000000020364 1232 FUNC GLOBAL DEFAULT 11 PR_NormalizeTime + 533: 0000000000012904 196 FUNC GLOBAL DEFAULT 11 PR_vsnprintf + 534: 000000000001a740 116 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetCurrentDirectory + 535: 000000000002385c 28 FUNC GLOBAL DEFAULT 11 PRP_NakedNotify + 536: 0000000000014638 104 FUNC GLOBAL DEFAULT 11 PR_RWLock_Rlock + 537: 0000000000013cfc 108 FUNC GLOBAL DEFAULT 11 PR_vfprintf + 538: 00000000000153d8 216 FUNC GLOBAL DEFAULT 11 PR_FindSymbolAndLibrary + 539: 000000000001caf4 400 FUNC GLOBAL DEFAULT 11 PR_StringToNetAddr + 540: 000000000001c104 184 FUNC GLOBAL DEFAULT 11 PR_EnumerateHostEnt + 541: 00000000000127b0 4 FUNC GLOBAL DEFAULT 11 PR_smprintf_free + 542: 0000000000010fa4 4 FUNC GLOBAL DEFAULT 11 PR_GetMemMapAlignment + 543: 000000000000f744 188 FUNC GLOBAL DEFAULT 11 _pr_push_ipv6toipv4_layer + 544: 00000000000294bc 12 FUNC GLOBAL DEFAULT 11 PR_ProcessExit + 545: 0000000000010fa8 4 FUNC GLOBAL DEFAULT 11 PR_MemMap + 546: 00000000000165a0 60 FUNC GLOBAL DEFAULT 11 PR_StackPush + 547: 00000000000146a0 100 FUNC GLOBAL DEFAULT 11 PR_RWLock_Wlock + 548: 000000000001d0d8 4 FUNC GLOBAL DEFAULT 11 PR_GetDirectorySepartor + 549: 000000000000e8c0 28 FUNC GLOBAL DEFAULT 11 PR_Available64 + 550: 0000000000027ca8 160 FUNC GLOBAL DEFAULT 11 PR_Stat + 551: 000000000001a710 44 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetStdioRedirect + 552: 000000000001c560 8 FUNC GLOBAL DEFAULT 11 PR_ntohl + 553: 0000000000021f40 112 FUNC GLOBAL DEFAULT 11 PR_ParseTimeString + 554: 0000000000028fec 140 FUNC GLOBAL DEFAULT 11 PR_Interrupt + 555: 0000000000053e60 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 556: 00000000000227f0 48 FUNC GLOBAL DEFAULT 11 PR_Lock + 557: 0000000000026bbc 400 FUNC GLOBAL DEFAULT 11 PR_Socket + 558: 000000000001a5bc 12 FUNC GLOBAL DEFAULT 11 PR_GetVersion + 559: 0000000000027d98 100 FUNC GLOBAL DEFAULT 11 PR_FD_SET + 560: 0000000000010f28 124 FUNC GLOBAL DEFAULT 11 PR_CreateFileMap + 561: 0000000000023590 132 FUNC GLOBAL DEFAULT 11 PR_PostSemaphore + 562: 000000000002956c 304 FUNC GLOBAL DEFAULT 11 PR_EnumerateThreads + 563: 000000000000fed4 108 FUNC GLOBAL DEFAULT 11 PR_GetIdentitiesLayer + 564: 000000000001c550 16 FUNC GLOBAL DEFAULT 11 PR_ntohs + 565: 000000000001648c 188 FUNC GLOBAL DEFAULT 11 PR_CreateStack + 566: 000000000000e9a0 28 FUNC GLOBAL DEFAULT 11 PR_Shutdown + 567: 0000000000020b54 544 FUNC GLOBAL DEFAULT 11 PR_USPacificTimeParameters + 568: 0000000000014410 100 FUNC GLOBAL DEFAULT 11 PR_CNotify + 569: 000000000001a638 76 FUNC GLOBAL DEFAULT 11 PR_NewProcessAttr + 570: 0000000000029078 32 FUNC GLOBAL DEFAULT 11 PR_ClearInterrupt + 571: 0000000000022090 1184 FUNC GLOBAL DEFAULT 11 PR_FormatTimeUSEnglish + 572: 000000000002719c 144 FUNC GLOBAL DEFAULT 11 PR_MakeDir + 573: 0000000000022884 76 FUNC GLOBAL DEFAULT 11 PR_DestroyCondVar + 574: 0000000000028cd4 248 FUNC GLOBAL DEFAULT 11 PR_GetCurrentThread + 575: 0000000000010fb4 4 FUNC GLOBAL DEFAULT 11 PR_SyncMemMap + 576: 000000000001e3a8 8 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Accept + 577: 0000000000014f6c 184 FUNC GLOBAL DEFAULT 11 PR_GetLibraryName + 578: 000000000001af64 56 FUNC GLOBAL DEFAULT 11 PR_IntervalToMicroseconds + 579: 000000000001a1a4 84 FUNC GLOBAL DEFAULT 11 PR_ErrorToName + 580: 000000000000fc00 116 FUNC GLOBAL DEFAULT 11 PR_CreateIOLayer + 581: 0000000000011060 296 FUNC GLOBAL DEFAULT 11 PR_NewPollableEvent + 582: 0000000000020d74 4556 FUNC GLOBAL DEFAULT 11 PR_ParseTimeStringToExplodedTime + 583: 000000000000feb4 32 FUNC GLOBAL DEFAULT 11 PR_GetLayersIdentity + 584: 0000000000015f14 44 FUNC GLOBAL DEFAULT 11 PR_GetPageSize + 585: 0000000000016188 176 FUNC GLOBAL DEFAULT 11 PR_CreateAlarm diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnss3.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnss3.so.txt new file mode 100644 index 000000000000..98c26c00f851 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnss3.so.txt @@ -0,0 +1,1268 @@ +Library: /lib64/libnss3.so +Package: nss-3.90.0-2.el7_9.aarch64 + + +Symbol table '.dynsym' contains 1262 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000001a550 0 SECTION LOCAL DEFAULT 10 + 2: 000000000013aad0 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (64) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLock + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcat + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Connect + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (64) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderAbort_Util@NSSUTIL_3.12 (65) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgGetLabel@NSSUTIL_3.14 (66) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_AsciiToTime_Util@NSSUTIL_3.12 (65) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDTag_Util@NSSUTIL_3.12 (65) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyCondVar + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (64) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Alloc_Util@NSSUTIL_3.12 (65) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearStreaming_Util@NSSUTIL_3.12 (65) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearTakeFromBuf_Util@NSSUTIL_3.12 (65) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetHostByName + 18: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_OctetStringTemplate_Util@NSSUTIL_3.12 (65) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Strdup_Util@NSSUTIL_3.12 (65) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1Encode_Util@NSSUTIL_3.12 (65) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_Encode_Util@NSSUTIL_3.12 (65) + 22: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderUpdate_Util@NSSUTIL_3.12 (65) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_MakeItem@NSSUTIL_3.38 (67) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetThreadPrivate + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_StringToOID@NSSUTIL_3.12 (65) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GenTime2FormattedAscii_Util@NSSUTIL_3.12 (65) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaAllocate + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ZfreeItem_Util@NSSUTIL_3.12 (65) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_New_Util@NSSUTIL_3.12 (65) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_UnlockWrite_Util@NSSUTIL_3.12 (65) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_DestroyDigestInfo_Util@NSSUTIL_3.12 (65) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyMonitor + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Accept + 35: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (64) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CompareAlgorithmID_Util@NSSUTIL_3.12 (65) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Listen + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Close + 39: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (64) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (64) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncasecmp + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgDecodeNumber@NSSUTIL_3.14 (66) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearNotifyProc_Util@NSSUTIL_3.12 (65) + 44: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BMPStringTemplate_Util@NSSUTIL_3.12 (65) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_EncodeTimeChoice_Util@NSSUTIL_3.12 (65) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_DoubleEscape@NSSUTIL_3.14 (66) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_ConvertAsciiToItem_Util@NSSUTIL_3.12 (65) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZAlloc_Util@NSSUTIL_3.12 (65) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_UTCDayToAscii_Util@NSSUTIL_3.12 (65) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeItem_Util@NSSUTIL_3.12 (65) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_Hash@NSSUTIL_3.12 (65) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CreateDigestInfo_Util@NSSUTIL_3.12 (65) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetCurrentThread + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncpyz + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (64) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalToMilliseconds + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_LockRead_Util@NSSUTIL_3.12 (65) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_htonl + 59: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_T61StringTemplate@NSSUTIL_3.12 (65) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareValues + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgParseSlotInfo@NSSUTIL_3.14 (66) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Encoder_Create_Util@NSSUTIL_3.12 (65) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_FreeArena_Util@NSSUTIL_3.12 (65) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgStrip@NSSUTIL_3.14 (66) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ExitMonitor + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Now + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_DupItem_Util@NSSUTIL_3.12 (65) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetUCS2_UTF8ConversionFunction_Util@NSSUTIL_3.12 (65) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcasecmp + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (64) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Shutdown + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgFetchValue@NSSUTIL_3.14 (66) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ConvertIPv4AddrToIPv6 + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (64) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeInteger_Util@NSSUTIL_3.12 (65) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Access + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetEnvSecure + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (64) + 79: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_UTF8StringTemplate_Util@NSSUTIL_3.12 (65) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_Base64Encode + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Realloc + 82: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_IntegerTemplate_Util@NSSUTIL_3.12 (65) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strfree + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CompareDigestInfo_Util@NSSUTIL_3.12 (65) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZFree_Util@NSSUTIL_3.12 (65) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetTakeFromBuf_Util@NSSUTIL_3.12 (65) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_NewArena_Util@NSSUTIL_3.12 (65) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeToUTCTime_Util@NSSUTIL_3.12 (65) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_Escape@NSSUTIL_3.14 (66) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearFilterProc_Util@NSSUTIL_3.12 (65) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetNotifyProc_Util@NSSUTIL_3.12 (65) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CopyItem_Util@NSSUTIL_3.12 (65) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyLock + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_ASCIIConversion_Util@NSSUTIL_3.12 (65) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (64) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgGetParamValue@NSSUTIL_3.14 (66) + 97: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.17 (64) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.17 (64) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_SetUInteger@NSSUTIL_3.12 (65) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgSkipParameter@NSSUTIL_3.14 (66) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SecondsToInterval + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_FindSymbol + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeItem_Util@NSSUTIL_3.12 (65) + 104: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PrintableStringTemplate@NSSUTIL_3.12 (65) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (64) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NetAddrToString + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyRWLock + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgIsBlank@NSSUTIL_3.14 (66) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BTOA_ConvertItemToAscii_Util@NSSUTIL_3.12 (65) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strdup + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_LockPolicy@NSSUTIL_3.59 (68) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_UnlockRead_Util@NSSUTIL_3.12 (65) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_Destroy_Util@NSSUTIL_3.12 (65) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Decoder_Update_Util@NSSUTIL_3.12 (65) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_DestroyCheapArena@NSSUTIL_3.24 (69) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnce + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDByTag_Util@NSSUTIL_3.12 (65) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableDestroy + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearNotifyProc_Util@NSSUTIL_3.12 (65) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1Decode_Util@NSSUTIL_3.12 (65) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyCondVar + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewTCPSocket + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Free_Util@NSSUTIL_3.12 (65) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaUnmark_Util@NSSUTIL_3.12 (65) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalNow + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_sprintf_append + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Sleep + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcatn + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_CreateURI@NSSUTIL_3.31 (70) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeToGeneralizedTime_Util@NSSUTIL_3.12 (65) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _SGN_VerifyPKCS1DigestInfo@NSSUTIL_3.17.1 (71) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64_EncodeItem_Util@NSSUTIL_3.12 (65) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (64) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ConnectContinue + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_LockWrite_Util@NSSUTIL_3.12 (65) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (64) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetUCS4_UTF8ConversionFunction_Util@NSSUTIL_3.12 (65) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_TicksPerSecond + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_AddEntry_Util@NSSUTIL_3.12 (65) + 140: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 141: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (72) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaRelease + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetStreaming_Util@NSSUTIL_3.12 (65) + 144: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToEnumeratedTemplate@NSSUTIL_3.12 (65) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Write + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_NewHashTable + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookup + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_DestroyAlgorithmID_Util@NSSUTIL_3.12 (65) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strnstr + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_HaveWriteLock_Util@NSSUTIL_3.12 (65) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableAdd + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_InitializePRErrorTable@NSSUTIL_3.13 (73) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_EscapeSize@NSSUTIL_3.14 (66) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaZAlloc_Util@NSSUTIL_3.12 (65) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Decoder_Destroy_Util@NSSUTIL_3.12 (65) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Realloc_Util@NSSUTIL_3.12 (65) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_UTCTimeToAscii_Util@NSSUTIL_3.12 (65) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_AllocItem_Util@NSSUTIL_3.12 (65) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (64) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (64) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (64) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeToGeneralizedTimeArena_Util@NSSUTIL_3.12 (65) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (64) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ItemsAreEqual_Util@NSSUTIL_3.12 (65) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_RegExpValid@NSSUTIL_3.12 (65) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_PutEnv_Util@NSSUTIL_3.12 (65) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaStrdup_Util@NSSUTIL_3.12 (65) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (64) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_WaitCondVar + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetThreadPrivate + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewMonitor + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (64) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_DestroyURI@NSSUTIL_3.31 (70) + 174: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_IA5StringTemplate_Util@NSSUTIL_3.12 (65) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_GetAlgorithmPolicy@NSSUTIL_3.12.3 (74) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgHasFlag@NSSUTIL_3.14 (66) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strlen + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetNotifyProc_Util@NSSUTIL_3.12 (65) + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_FindFunctionSymbol + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewCondVar + 181: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_ObjectIDTemplate_Util@NSSUTIL_3.12 (65) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgParseCipherFlags@NSSUTIL_3.14 (66) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_UnloadLibrary + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1LengthLength_Util@NSSUTIL_3.12 (65) + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ErrorToString + 186: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_UniversalStringTemplate@NSSUTIL_3.12 (65) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_DecodeDigestInfo@NSSUTIL_3.12 (65) + 188: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECOID_AlgorithmIDTemplate_Util@NSSUTIL_3.12 (65) + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_GetError_Util@NSSUTIL_3.12 (65) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_MkModuleSpec@NSSUTIL_3.14 (66) + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ArenaDupItem_Util@NSSUTIL_3.12 (65) + 192: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_GeneralizedTimeTemplate_Util@NSSUTIL_3.12 (65) + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Encoder_Destroy_Util@NSSUTIL_3.12 (65) + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_Lengths_Util@NSSUTIL_3.12 (65) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDTagDescription_Util@NSSUTIL_3.12 (65) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Recv + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_IsPolicyLocked@NSSUTIL_3.59 (68) + 198: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SequenceOfAnyTemplate@NSSUTIL_3.12 (65) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaAlloc_Util@NSSUTIL_3.12 (65) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_InitCheapArena@NSSUTIL_3.24 (69) + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_FinishArenaPool + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Lock + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strstr + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderFinish_Util@NSSUTIL_3.12 (65) + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CopyDigestInfo_Util@NSSUTIL_3.12 (65) + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_UTF8Conversion_Util@NSSUTIL_3.12 (65) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderStart_Util@NSSUTIL_3.12 (65) + 208: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_EnumeratedTemplate@NSSUTIL_3.12 (65) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_AddNSSFlagToModuleSpec@NSSUTIL_3.39 (75) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_InitArenaPool + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareStrings + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (64) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_StringToNetAddr + 214: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BitStringTemplate_Util@NSSUTIL_3.12 (65) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnceWithArg + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaGrow_Util@NSSUTIL_3.12 (65) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LogPrint + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalToSeconds + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_SetAlgorithmID_Util@NSSUTIL_3.12 (65) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeInteger_Util@NSSUTIL_3.12 (65) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GetUInteger@NSSUTIL_3.12 (65) + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_DoubleEscapeSize@NSSUTIL_3.14 (66) + 223: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_AnyTemplate_Util@NSSUTIL_3.12 (65) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_DecodeTimeChoice_Util@NSSUTIL_3.12 (65) + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableRemove + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_htons + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.17 (64) + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetFilterProc_Util@NSSUTIL_3.12 (65) + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GeneralizedTimeToTime_Util@NSSUTIL_3.12 (65) + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetErrorText + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_AsciiToData_Util@NSSUTIL_3.12 (65) + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (64) + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderStart_Util@NSSUTIL_3.12 (65) + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_FormatURI@NSSUTIL_3.31 (70) + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Poll + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableEnumerateEntries + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgParseModuleSpecEx@NSSUTIL_3.21 (76) + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgReadLong@NSSUTIL_3.14 (66) + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_RegExpCaseSearch@NSSUTIL_3.12 (65) + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewThreadPrivateIndex + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_FreeItem_Util@NSSUTIL_3.12 (65) + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_UTCTimeToTime_Util@NSSUTIL_3.12 (65) + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Decoder_Create_Util@NSSUTIL_3.12 (65) + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_HashCompare@NSSUTIL_3.12 (65) + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GeneralizedDayToAscii_Util@NSSUTIL_3.12 (65) + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDByMechanism@NSSUTIL_3.12 (65) + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeUnsignedInteger_Util@NSSUTIL_3.12 (65) + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyAllCondVar + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOID_Util@NSSUTIL_3.12 (65) + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Encoder_Update_Util@NSSUTIL_3.12 (65) + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_EnumerateHostEnt + 252: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_MkNSSString@NSSUTIL_3.14 (66) + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_GetPathAttribute@NSSUTIL_3.31 (70) + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CompareItem_Util@NSSUTIL_3.12 (65) + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CopyAlgorithmID_Util@NSSUTIL_3.12 (65) + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetUCS2_ASCIIConversionFunction_Util@NSSUTIL_3.12 (65) + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BTOA_DataToAscii_Util@NSSUTIL_3.12 (65) + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (64) + 260: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToAnyTemplate_Util@NSSUTIL_3.12 (65) + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLogModule + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_snprintf + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_SetAlgorithmPolicy@NSSUTIL_3.12.3 (74) + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_EnterMonitor + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_GetAlgorithmTag_Util@NSSUTIL_3.12 (65) + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Bind + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_Init@NSSUTIL_3.12 (65) + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderAbort_Util@NSSUTIL_3.12 (65) + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_Shutdown@NSSUTIL_3.12 (65) + 270: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_NullTemplate_Util@NSSUTIL_3.12 (65) + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (64) + 273: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SequenceOfObjectIDTemplate@NSSUTIL_3.12 (65) + 274: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_GetPathAttributeItem@NSSUTIL_3.82 (77) + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_LoadLibraryFromOrigin@NSSUTIL_3.12.5 (78) + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS4_UTF8Conversion@NSSUTIL_3.12 (65) + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GetInteger_Util@NSSUTIL_3.12 (65) + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_ParseURI@NSSUTIL_3.31 (70) + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LoadLibrary + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf_free + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeChoiceDayToAscii_Util@NSSUTIL_3.12 (65) + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_QuickDERDecodeItem_Util@NSSUTIL_3.12 (65) + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_htonll + 285: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToGeneralizedTimeTemplate@NSSUTIL_3.12 (65) + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_StoreHeader@NSSUTIL_3.12 (65) + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Free + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaMark_Util@NSSUTIL_3.12 (65) + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Send + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ISO88591_UTF8Conversion@NSSUTIL_3.12 (65) + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalToMicroseconds + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_LengthLength@NSSUTIL_3.12 (65) + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashString + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_InitializeNetAddr + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetError_Util@NSSUTIL_3.12 (65) + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Unlock + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64_DecodeBuffer_Util@NSSUTIL_3.12 (65) + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Calloc + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetError + 300: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderUpdate_Util@NSSUTIL_3.12 (65) + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaRelease_Util@NSSUTIL_3.12 (65) + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Malloc + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_KnownCertExtenOID@NSSUTIL_3.12 (65) + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderFinish_Util@NSSUTIL_3.12 (65) + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_MkSlotString@NSSUTIL_3.14 (66) + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetEnv + 307: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SkipTemplate@NSSUTIL_3.12 (65) + 308: 000000000006321c 112 FUNC GLOBAL DEFAULT 12 SECMOD_HasRemovableSlots@@NSS_3.9.3 + 309: 00000000000e6b90 64 OBJECT GLOBAL DEFAULT 14 SECKEY_DSAPublicKeyTemplate@@NSS_3.2 + 310: 00000000000208a8 16 FUNC GLOBAL DEFAULT 12 CERT_StartCRLExtensions@@NSS_3.10 + 311: 0000000000067d50 108 FUNC GLOBAL DEFAULT 12 CERT_NewCertList@@NSS_3.2 + 312: 0000000000066f30 372 FUNC GLOBAL DEFAULT 12 CERT_MakeCANickname@@NSS_3.4 + 313: 00000000000702e4 48 FUNC GLOBAL DEFAULT 12 CERT_GetAVATag@@NSS_3.2 + 314: 000000000002c654 372 FUNC GLOBAL DEFAULT 12 SECKEY_ECParamsToKeySize@@NSS_3.12 + 315: 000000000002698c 292 FUNC GLOBAL DEFAULT 12 CERT_GetSSLCACerts@@NSS_3.2 + 316: 000000000002bf78 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SubjectPublicKeyInfoTemplate@@NSS_3.4 + 317: 0000000000066578 16 FUNC GLOBAL DEFAULT 12 CERT_GetDefaultCertDB@@NSS_3.2 + 318: 000000000005a1c0 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotFromKey@@NSS_3.2 + 319: 0000000000036b78 140 FUNC GLOBAL DEFAULT 12 PK11_ImportDERCert@@NSS_3.6 + 320: 000000000001fc58 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_HaveWriteLock@@NSS_3.2 + 321: 00000000000e5e38 32 OBJECT GLOBAL DEFAULT 14 SEC_IA5StringTemplate@@NSS_3.2 + 322: 00000000000695a8 268 FUNC GLOBAL DEFAULT 12 CERT_MergeExtensions@@NSS_3.10 + 323: 0000000000026ab0 284 FUNC GLOBAL DEFAULT 12 CERT_DistNamesFromCertList@@NSS_3.12.6 + 324: 00000000000657bc 16 FUNC GLOBAL DEFAULT 12 CERT_GetDomainComponentName@@NSS_3.2 + 325: 000000000004c230 28 FUNC GLOBAL DEFAULT 12 PK11_MechanismToAlgtag@@NSS_3.4 + 326: 000000000013c9e0 32 OBJECT GLOBAL DEFAULT 20 SEC_SetOfAnyTemplate@@NSS_3.2 + 327: 000000000004a750 832 FUNC GLOBAL DEFAULT 12 PK11_GetBlockSize@@NSS_3.2 + 328: 000000000006dd3c 280 FUNC GLOBAL DEFAULT 12 CERT_FindNameConstraintsExten@@NSS_3.12 + 329: 000000000001fabc 4 FUNC GLOBAL DEFAULT 12 PORT_Free@@NSS_3.2 + 330: 000000000003027c 184 FUNC GLOBAL DEFAULT 12 VFY_VerifyData@@NSS_3.2 + 331: 000000000005a1d8 12 FUNC GLOBAL DEFAULT 12 PK11_GetNextSymKey@@NSS_3.4 + 332: 000000000005d730 400 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKeyWithFlagsPerm@@NSS_3.9 + 333: 000000000004a748 8 FUNC GLOBAL DEFAULT 12 PK11_GetKeyGen@@NSS_3.4 + 334: 000000000001fab8 4 FUNC GLOBAL DEFAULT 12 PORT_ZAlloc@@NSS_3.2 + 335: 000000000006f708 312 FUNC GLOBAL DEFAULT 12 CERT_SaveSMimeProfile@@NSS_3.2 + 336: 0000000000036db4 152 FUNC GLOBAL DEFAULT 12 PK11_ImportCertForKey@@NSS_3.3 + 337: 000000000005ef18 8 FUNC GLOBAL DEFAULT 12 PK11_GetDisabledReason@@NSS_3.8 + 338: 000000000002ba04 56 FUNC GLOBAL DEFAULT 12 HASH_GetHashObjectByOidTag@@NSS_3.8 + 339: 0000000000057d40 40 FUNC GLOBAL DEFAULT 12 PK11_ImportDERPrivateKeyInfo@@NSS_3.3 + 340: 000000000001fc34 4 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Destroy@@NSS_3.2 + 341: 00000000000e5e58 32 OBJECT GLOBAL DEFAULT 14 SEC_GeneralizedTimeTemplate@@NSS_3.2 + 342: 000000000006a400 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_CrlTemplate@@NSS_3.2 + 343: 00000000000569ec 8 FUNC GLOBAL DEFAULT 12 __PBE_GenerateBits@@NSS_3.2 + 344: 000000000006ebcc 136 FUNC GLOBAL DEFAULT 12 CERT_FindCertByDERCert@@NSS_3.2 + 345: 0000000000067e5c 96 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListTailWithData@@NSS_3.59 + 346: 0000000000067dbc 104 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertList@@NSS_3.2 + 347: 0000000000056e14 384 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetIV@@NSS_3.3 + 348: 000000000003316c 2488 FUNC GLOBAL DEFAULT 12 PK11_GenerateKeyPairWithOpFlags@@NSS_3.12 + 349: 000000000005ab58 72 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenSymKey@@NSS_3.4 + 350: 00000000000683ac 84 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListByNickname@@NSS_3.77 + 351: 000000000005b518 72 FUNC GLOBAL DEFAULT 12 PK11_TokenKeyGenWithFlags@@NSS_3.10.2 + 352: 000000000002d0ac 756 FUNC GLOBAL DEFAULT 12 SECKEY_ConvertToPublicKey@@NSS_3.2 + 353: 000000000006f2fc 8 FUNC GLOBAL DEFAULT 12 CERT_GetDBContentVersion@@NSS_3.2 + 354: 00000000000521bc 248 FUNC GLOBAL DEFAULT 12 PK11_WriteRawAttribute@@NSS_3.12 + 355: 00000000000364d8 96 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromNickname@@NSS_3.2 + 356: 000000000005a210 72 FUNC GLOBAL DEFAULT 12 PK11_SetSymKeyUserData@@NSS_3.11 + 357: 000000000001fb14 4 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDByTag@@NSS_3.2 + 358: 000000000002e388 112 FUNC GLOBAL DEFAULT 12 SGN_Begin@@NSS_3.2 + 359: 0000000000021bb8 164 FUNC GLOBAL DEFAULT 12 CERT_OCSPCacheSettings@@NSS_3.11.7 + 360: 000000000002ba3c 28 FUNC GLOBAL DEFAULT 12 HASH_ResultLenByOidTag@@NSS_3.10 + 361: 000000000005efcc 100 FUNC GLOBAL DEFAULT 12 PK11_IsFriendly@@NSS_3.2 + 362: 00000000000e5f38 32 OBJECT GLOBAL DEFAULT 14 SEC_UTCTimeTemplate@@NSS_3.2 + 363: 0000000000052710 328 FUNC GLOBAL DEFAULT 12 PK11_FindGenericObjects@@NSS_3.9.2 + 364: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.1 + 365: 0000000000032a6c 236 FUNC GLOBAL DEFAULT 12 PK11_CopyTokenPrivKeyToSessionPrivKey@@NSS_3.11 + 366: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.2 + 367: 0000000000058fb8 700 FUNC GLOBAL DEFAULT 12 PK11SDR_Decrypt@@NSS_3.2 + 368: 0000000000055fe0 132 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetCryptoAlgorithm@@NSS_3.2 + 369: 0000000000021b64 84 FUNC GLOBAL DEFAULT 12 CERT_SetOCSPFailureMode@@NSS_3.11.7 + 370: 000000000001fc84 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_AnyTemplate@@NSS_3.2 + 371: 0000000000061ad4 60 FUNC GLOBAL DEFAULT 12 PK11_IsFIPS@@NSS_3.2 + 372: 0000000000066588 204 FUNC GLOBAL DEFAULT 12 CERT_AddOKDomainName@@NSS_3.4 + 373: 000000000005f5a0 128 FUNC GLOBAL DEFAULT 12 PK11_NeedUserInit@@NSS_3.2 + 374: 000000000005d3ac 272 FUNC GLOBAL DEFAULT 12 PK11_UnwrapSymKeyWithFlagsPerm@@NSS_3.9 + 375: 000000000001fc40 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_New@@NSS_3.2 + 376: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.7 + 377: 00000000000631c4 88 FUNC GLOBAL DEFAULT 12 SECMOD_LockedModuleHasRemovableSlots@@NSS_3.79 + 378: 0000000000052e48 124 FUNC GLOBAL DEFAULT 12 PK11_ObjectGetFIPSStatus@@NSS_3.66 + 379: 000000000006ebc0 12 FUNC GLOBAL DEFAULT 12 CERT_FindCertByIssuerAndSNCX@@NSS_3.33 + 380: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.9 + 381: 0000000000071814 16 FUNC GLOBAL DEFAULT 12 CERT_EncodeNameConstraintsExtension@@NSS_3.15 + 382: 000000000001fb60 4 FUNC GLOBAL DEFAULT 12 SGN_CompareDigestInfo@@NSS_3.2 + 383: 000000000002e9e0 288 FUNC GLOBAL DEFAULT 12 SEC_GetSignatureAlgorithmOidTag@@NSS_3.10 + 384: 000000000001fb90 4 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTimeArena@@NSS_3.11.7 + 385: 0000000000022908 108 FUNC GLOBAL DEFAULT 12 CERT_GetSubjectPublicKeyDigest@@NSS_3.15.4 + 386: 00000000000390d8 8 FUNC GLOBAL DEFAULT 12 _PK11_ContextGetAEADSimulation@@NSS_3.52 + 387: 000000000001f124 140 FUNC GLOBAL DEFAULT 12 NSS_Initialize@@NSS_3.2 + 388: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.7.1 + 389: 0000000000070c18 592 FUNC GLOBAL DEFAULT 12 CERT_DecodeAVAValue@@NSS_3.4 + 390: 0000000000031814 20 FUNC GLOBAL DEFAULT 12 PK11_SetPrivateKeyNickname@@NSS_3.4 + 391: 000000000005f1cc 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotName@@NSS_3.2 + 392: 000000000006d738 8 FUNC GLOBAL DEFAULT 12 CERT_GetCertificateNames@@NSS_3.10 + 393: 000000000001fb8c 4 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTime@@NSS_3.11.7 + 394: 000000000002e98c 84 FUNC GLOBAL DEFAULT 12 SEC_DerSignDataWithAlgorithmID@@NSS_3.34 + 395: 0000000000069f5c 176 FUNC GLOBAL DEFAULT 12 CERT_CompleteCRLDecodeEntries@@NSS_3.6 + 396: 00000000000377a8 212 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromDERCertItem@@NSS_3.12.1 + 397: 000000000006ffcc 64 FUNC GLOBAL DEFAULT 12 CERT_EncodePolicyMappingExtension@@NSS_3.12 + 398: 000000000001fc1c 4 FUNC GLOBAL DEFAULT 12 BTOA_ConvertItemToAscii@@NSS_3.2 + 399: 000000000002665c 508 FUNC GLOBAL DEFAULT 12 CERT_FindUserCertsByUsage@@NSS_3.4 + 400: 0000000000070acc 36 FUNC GLOBAL DEFAULT 12 CERT_DestroyName@@NSS_3.2 + 401: 000000000001fb6c 4 FUNC GLOBAL DEFAULT 12 DER_GetInteger@@NSS_3.2 + 402: 000000000001faf8 4 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_ASCIIConversionFunction@@NSS_3.2 + 403: 000000000001fbf0 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetTakeFromBuf@@NSS_3.2 + 404: 0000000000062298 468 FUNC GLOBAL DEFAULT 12 SECMOD_AddNewModuleEx@@NSS_3.4 + 405: 000000000005f778 60 FUNC GLOBAL DEFAULT 12 PK11_IsInternalKeySlot@@NSS_3.12.4 + 406: 000000000006149c 312 FUNC GLOBAL DEFAULT 12 PK11_WaitForTokenEvent@@NSS_3.7 + 407: 00000000000557d8 888 FUNC GLOBAL DEFAULT 12 SECMOD_LoadModule@@NSS_3.4 + 408: 00000000000e5e78 32 OBJECT GLOBAL DEFAULT 14 SEC_UTF8StringTemplate@@NSS_3.4 + 409: 0000000000071828 204 FUNC GLOBAL DEFAULT 12 CERT_DecodeAuthInfoAccessExtension@@NSS_3.10 + 410: 00000000000282d8 940 FUNC GLOBAL DEFAULT 12 CERT_VerifyCACertForUsage@@NSS_3.6 + 411: 000000000003183c 280 FUNC GLOBAL DEFAULT 12 PK11_GetPQGParamsFromPrivateKey@@NSS_3.4 + 412: 0000000000065248 8 FUNC GLOBAL DEFAULT 12 CERT_NameToAscii@@NSS_3.2 + 413: 0000000000065ffc 108 FUNC GLOBAL DEFAULT 12 CERT_GetCertTimes@@NSS_3.3 + 414: 0000000000033b24 16 FUNC GLOBAL DEFAULT 12 PK11_GenerateKeyPairWithFlags@@NSS_3.10.2 + 415: 0000000000021db4 80 FUNC GLOBAL DEFAULT 12 SEC_GetRegisteredHttpClient@@NSS_3.12 + 416: 0000000000024f50 176 FUNC GLOBAL DEFAULT 12 CERT_GetOCSPResponseStatus@@NSS_3.6 + 417: 0000000000071388 336 FUNC GLOBAL DEFAULT 12 CERT_EncodeBasicConstraintValue@@NSS_3.5 + 418: 0000000000020524 468 FUNC GLOBAL DEFAULT 12 CERT_CreateCertificateRequest@@NSS_3.2 + 419: 000000000001f960 336 FUNC GLOBAL DEFAULT 12 NSS_OptionGet@@NSS_3.21 + 420: 0000000000021a30 84 FUNC GLOBAL DEFAULT 12 SEC_RegisterDefaultHttpClient@@NSS_3.11.1 + 421: 000000000001fbec 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearStreaming@@NSS_3.2 + 422: 0000000000057d68 40 FUNC GLOBAL DEFAULT 12 PK11_ImportPrivateKeyInfo@@NSS_3.2 + 423: 0000000000068da8 240 FUNC GLOBAL DEFAULT 12 CERT_FindSubjectKeyIDExtension@@NSS_3.7 + 424: 000000000001e148 188 FUNC GLOBAL DEFAULT 12 NSS_Shutdown@@NSS_3.2 + 425: 000000000006562c 80 FUNC GLOBAL DEFAULT 12 CERT_GetNextEmailAddress@@NSS_3.7 + 426: 0000000000021b08 92 FUNC GLOBAL DEFAULT 12 CERT_ClearOCSPCache@@NSS_3.11.7 + 427: 00000000000604e4 8 FUNC GLOBAL DEFAULT 12 PK11_IsPresent@@NSS_3.2 + 428: 00000000000569e4 8 FUNC GLOBAL DEFAULT 12 __PBE_CreateContext@@NSS_3.2 + 429: 0000000000026858 12 FUNC GLOBAL DEFAULT 12 CERT_FreeDistNames@@NSS_3.2 + 430: 0000000000056154 292 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetKeyLength@@NSS_3.2 + 431: 000000000001fc18 4 FUNC GLOBAL DEFAULT 12 ATOB_ConvertAsciiToItem@@NSS_3.2 + 432: 000000000002ba9c 12 FUNC GLOBAL DEFAULT 12 HASH_ResultLenContext@@NSS_3.10 + 433: 000000000005881c 112 FUNC GLOBAL DEFAULT 12 PK11_PQG_DestroyParams@@NSS_3.3 + 434: 000000000002baa8 156 FUNC GLOBAL DEFAULT 12 HASH_Create@@NSS_3.4 + 435: 000000000006c6f4 12 FUNC GLOBAL DEFAULT 12 CERT_GetPrevGeneralName@@NSS_3.10 + 436: 00000000000292ec 224 FUNC GLOBAL DEFAULT 12 CERT_GetCertChainFromCert@@NSS_3.4 + 437: 000000000006a1e8 8 FUNC GLOBAL DEFAULT 12 CERT_DecodeDERCrl@@NSS_3.2 + 438: 000000000001f7d4 12 FUNC GLOBAL DEFAULT 12 NSS_GetVersion@@NSS_3.13 + 439: 000000000005ef9c 8 FUNC GLOBAL DEFAULT 12 PK11_IsReadOnly@@NSS_3.2 + 440: 0000000000038964 216 FUNC GLOBAL DEFAULT 12 PK11_GetAllSlotsForCert@@NSS_3.12 + 441: 0000000000050aa4 548 FUNC GLOBAL DEFAULT 12 PK11_VerifyWithMechanism@@NSS_3.22 + 442: 00000000000373d4 556 FUNC GLOBAL DEFAULT 12 PK11_TraverseCertsForNicknameInSlot@@NSS_3.2 + 443: 0000000000060f6c 20 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlotMultiple@@NSS_3.2 + 444: 000000000002bf60 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_RSAPublicKeyTemplate@@NSS_3.2 + 445: 000000000001fb78 4 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToTime@@NSS_3.2 + 446: 000000000002fd70 60 FUNC GLOBAL DEFAULT 12 VFY_Update@@NSS_3.2 + 447: 000000000002c98c 108 FUNC GLOBAL DEFAULT 12 SECKEY_BigIntegerBitLength@@NSS_3.19.1 + 448: 000000000005fb14 160 FUNC GLOBAL DEFAULT 12 PK11_GenerateRandomOnSlot@@NSS_3.11 + 449: 000000000004aa90 836 FUNC GLOBAL DEFAULT 12 PK11_GetIVLength@@NSS_3.3 + 450: 0000000000068304 168 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListByCertList@@NSS_3.77 + 451: 0000000000032a48 36 FUNC GLOBAL DEFAULT 12 PK11_ExportEncryptedPrivateKeyInfo@@NSS_3.2 + 452: 000000000004b814 1484 FUNC GLOBAL DEFAULT 12 PK11_ParamFromAlgid@@NSS_3.2 + 453: 000000000001fc44 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_Destroy@@NSS_3.2 + 454: 000000000006454c 408 FUNC GLOBAL DEFAULT 12 CERT_AsciiToName@@NSS_3.2 + 455: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.1 + 456: 00000000000682cc 56 FUNC GLOBAL DEFAULT 12 CERT_IsInList@@NSS_3.77 + 457: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.3 + 458: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.4 + 459: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.5 + 460: 0000000000036398 96 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromURI@@NSS_3.31 + 461: 0000000000066140 108 FUNC GLOBAL DEFAULT 12 SEC_GetCrlTimes@@NSS_3.18 + 462: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.6 + 463: 00000000000270f8 56 FUNC GLOBAL DEFAULT 12 CERT_CertTimesValid@@NSS_3.2 + 464: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.7 + 465: 000000000001fc30 4 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Destroy@@NSS_3.2 + 466: 000000000002581c 116 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPSingleResponseGood@@NSS_3.14.1 + 467: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.9 + 468: 0000000000070f18 320 FUNC GLOBAL DEFAULT 12 CERT_CompareAVA@@NSS_3.30 + 469: 0000000000026cc4 8 FUNC GLOBAL DEFAULT 12 CERT_ImportCAChainTrusted@@NSS_3.3 + 470: 000000000005f1dc 8 FUNC GLOBAL DEFAULT 12 PK11_GetCurrentWrapIndex@@NSS_3.2 + 471: 0000000000066e84 172 FUNC GLOBAL DEFAULT 12 CERT_GetCertIssuerAndSN@@NSS_3.2 + 472: 00000000000610dc 52 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlotWithAttributes@@NSS_3.14 + 473: 000000000006f8fc 268 FUNC GLOBAL DEFAULT 12 CERT_DecodeCertificatePoliciesExtension@@NSS_3.2 + 474: 0000000000051ee4 44 FUNC GLOBAL DEFAULT 12 PK11_UnlinkGenericObject@@NSS_3.9.2 + 475: 000000000013d820 128 OBJECT GLOBAL DEFAULT 20 CERT_SubjectPublicKeyInfoTemplate@@NSS_3.4 + 476: 000000000001fca8 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BooleanTemplate@@NSS_3.4 + 477: 0000000000069e40 284 FUNC GLOBAL DEFAULT 12 CERT_KeyFromDERCrl@@NSS_3.4 + 478: 0000000000061b54 16 FUNC GLOBAL DEFAULT 12 SECMOD_InternaltoPubMechFlags@@NSS_3.16.1 + 479: 0000000000036198 352 FUNC GLOBAL DEFAULT 12 PK11_GetCertsMatchingPrivateKey@@NSS_3.47 + 480: 000000000001fcb4 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_GeneralizedTimeTemplate@@NSS_3.2 + 481: 000000000001fbcc 4 FUNC GLOBAL DEFAULT 12 SEC_QuickDERDecodeItem@@NSS_3.6 + 482: 000000000006265c 16 FUNC GLOBAL DEFAULT 12 SECMOD_DeleteModule@@NSS_3.4 + 483: 000000000002bc6c 180 FUNC GLOBAL DEFAULT 12 HASH_HashBuf@@NSS_3.10 + 484: 0000000000034080 232 FUNC GLOBAL DEFAULT 12 PK11_CheckSSOPassword@@NSS_3.3 + 485: 000000000013e4f8 160 OBJECT GLOBAL DEFAULT 20 CERT_IssuerAndSNTemplate@@NSS_3.2 + 486: 0000000000063578 176 FUNC GLOBAL DEFAULT 12 SECMOD_CloseUserDB@@NSS_3.11 + 487: 0000000000051fb0 84 FUNC GLOBAL DEFAULT 12 PK11_DestroyGenericObjects@@NSS_3.9.2 + 488: 000000000005f318 440 FUNC GLOBAL DEFAULT 12 PK11_GetTokenInfo@@NSS_3.2 + 489: 0000000000056c70 420 FUNC GLOBAL DEFAULT 12 PBE_CreateContext@@NSS_3.3 + 490: 0000000000068cf8 84 FUNC GLOBAL DEFAULT 12 CERT_FindCertBySubjectKeyID@@NSS_3.7 + 491: 000000000005b9e4 700 FUNC GLOBAL DEFAULT 12 PK11_WrapSymKey@@NSS_3.2 + 492: 0000000000033124 72 FUNC GLOBAL DEFAULT 12 PK11_ImportEncryptedPrivateKeyInfo@@NSS_3.2 + 493: 000000000001f7e0 384 FUNC GLOBAL DEFAULT 12 NSS_OptionSet@@NSS_3.21 + 494: 000000000006f0f0 16 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddrForUsage@@NSS_3.12.9 + 495: 00000000000657cc 16 FUNC GLOBAL DEFAULT 12 CERT_GetOrgUnitName@@NSS_3.2 + 496: 000000000001fbd0 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderStart@@NSS_3.2 + 497: 000000000006dc9c 160 FUNC GLOBAL DEFAULT 12 CERT_GetImposedNameConstraints@@NSS_3.19 + 498: 0000000000060f80 48 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlot@@NSS_3.2 + 499: 000000000001df68 72 FUNC GLOBAL DEFAULT 12 PK11_UnconfigurePKCS11@@NSS_3.11.9 + 500: 000000000013dd58 32 OBJECT GLOBAL DEFAULT 20 SECKEY_PointerToPrivateKeyInfoTemplate@@NSS_3.2 + 501: 00000000000208d0 240 FUNC GLOBAL DEFAULT 12 CERT_FindCRLNumberExten@@NSS_3.12 + 502: 00000000000232d0 832 FUNC GLOBAL DEFAULT 12 CERT_DecodeOCSPResponse@@NSS_3.6 + 503: 000000000013ee38 32 OBJECT GLOBAL DEFAULT 20 CERT_NameTemplate@@NSS_3.4 + 504: 0000000000056f94 400 FUNC GLOBAL DEFAULT 12 PK11_PBEKeyGen@@NSS_3.2 + 505: 0000000000036610 196 FUNC GLOBAL DEFAULT 12 PK11_FindCertsFromNickname@@NSS_3.3 + 506: 000000000002aef4 12 FUNC GLOBAL DEFAULT 12 CERT_GetClassicOCSPEnabledSoftFailurePolicy@@NSS_3.12 + 507: 000000000001fc10 4 FUNC GLOBAL DEFAULT 12 BTOA_DataToAscii@@NSS_3.2 + 508: 0000000000060954 156 FUNC GLOBAL DEFAULT 12 PK11_FindSlotByName@@NSS_3.2 + 509: 000000000002d6f4 224 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPrivateKeyInfo@@NSS_3.2 + 510: 000000000001fb18 4 FUNC GLOBAL DEFAULT 12 SECOID_SetAlgorithmID@@NSS_3.2 + 511: 000000000001f02c 124 FUNC GLOBAL DEFAULT 12 NSS_Init@@NSS_3.2 + 512: 000000000003b26c 48 FUNC GLOBAL DEFAULT 12 PK11_ContextGetFIPSStatus@@NSS_3.66 + 513: 00000000000624b4 424 FUNC GLOBAL DEFAULT 12 SECMOD_DeleteModuleEx@@NSS_3.12 + 514: 00000000000516c4 124 FUNC GLOBAL DEFAULT 12 PK11_PrivDecrypt@@NSS_3.16.2 + 515: 0000000000036e4c 104 FUNC GLOBAL DEFAULT 12 PK11_ImportDERCertForKey@@NSS_3.3 + 516: 000000000006f100 12 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddrForUsageCX@@NSS_3.33 + 517: 000000000001fc9c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BitStringTemplate@@NSS_3.2 + 518: 000000000003d138 12 FUNC GLOBAL DEFAULT 12 PK11_HPKE_GetEncapPubKey@@NSS_3.58 + 519: 0000000000026c5c 96 FUNC GLOBAL DEFAULT 12 CERT_ImportCRL@@NSS_3.3 + 520: 000000000002c7c8 452 FUNC GLOBAL DEFAULT 12 SECKEY_ECParamsToBasePointOrderLen@@NSS_3.12 + 521: 00000000000317f0 4 FUNC GLOBAL DEFAULT 12 PK11_DEREncodePublicKey@@NSS_3.3 + 522: 000000000005ef10 8 FUNC GLOBAL DEFAULT 12 PK11_IsDisabled@@NSS_3.4 + 523: 000000000002c64c 8 FUNC GLOBAL DEFAULT 12 CERT_ExtractPublicKey@@NSS_3.2 + 524: 000000000001fb88 4 FUNC GLOBAL DEFAULT 12 DER_TimeChoiceDayToAscii@@NSS_3.11.7 + 525: 000000000001fc5c 28 FUNC GLOBAL DEFAULT 12 __nss_InitLock@@NSS_3.2 + 526: 000000000005db5c 8 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyHandle@@NSS_3.12.3 + 527: 0000000000031c34 72 FUNC GLOBAL DEFAULT 12 PK11_FindKeyByKeyID@@NSS_3.3 + 528: 000000000002ba58 68 FUNC GLOBAL DEFAULT 12 HASH_ResultLen@@NSS_3.4 + 529: 000000000002dd6c 192 FUNC GLOBAL DEFAULT 12 SECKEY_CacheStaticFlags@@NSS_3.10 + 530: 000000000001fb74 4 FUNC GLOBAL DEFAULT 12 DER_AsciiToTime@@NSS_3.5 + 531: 000000000005dfec 152 FUNC GLOBAL DEFAULT 12 PK11_FreeSlotListElement@@NSS_3.11 + 532: 000000000002e434 708 FUNC GLOBAL DEFAULT 12 SGN_End@@NSS_3.2 + 533: 000000000005a81c 248 FUNC GLOBAL DEFAULT 12 PK11_FindFixedKey@@NSS_3.2 + 534: 0000000000036538 216 FUNC GLOBAL DEFAULT 12 PK11_FindCertsFromEmailAddress@@NSS_3.12.9 + 535: 0000000000070624 476 FUNC GLOBAL DEFAULT 12 CERT_CreateRDN@@NSS_3.2.1 + 536: 000000000013dbd8 192 OBJECT GLOBAL DEFAULT 20 SECKEY_PrivateKeyInfoTemplate@@NSS_3.2 + 537: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.13.2 + 538: 000000000001fb00 4 FUNC GLOBAL DEFAULT 12 PORT_UCS2_UTF8Conversion@@NSS_3.2 + 539: 000000000005a208 8 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyUserData@@NSS_3.11 + 540: 000000000002e984 8 FUNC GLOBAL DEFAULT 12 SEC_DerSignData@@NSS_3.2 + 541: 000000000013dab8 128 OBJECT GLOBAL DEFAULT 20 SECKEY_EncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 542: 000000000004c24c 200 FUNC GLOBAL DEFAULT 12 PK11_GetPadMechanism@@NSS_3.4 + 543: 000000000006c6e8 12 FUNC GLOBAL DEFAULT 12 CERT_GetNextGeneralName@@NSS_3.10 + 544: 000000000001fb84 4 FUNC GLOBAL DEFAULT 12 DER_GeneralizedDayToAscii@@NSS_3.11.7 + 545: 0000000000057234 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_PointerToPrivateKeyInfoTemplate@@NSS_3.2 + 546: 0000000000058130 1096 FUNC GLOBAL DEFAULT 12 PK11_PQG_ParamGenV2@@NSS_3.14 + 547: 000000000013c940 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToAnyTemplate@@NSS_3.2 + 548: 000000000005d2d4 216 FUNC GLOBAL DEFAULT 12 PK11_UnwrapSymKeyWithFlags@@NSS_3.2 + 549: 000000000005d9b8 12 FUNC GLOBAL DEFAULT 12 PK11_SetFortezzaHack@@NSS_3.2 + 550: 0000000000069388 88 FUNC GLOBAL DEFAULT 12 CERT_AddExtension@@NSS_3.5 + 551: 0000000000070b28 240 FUNC GLOBAL DEFAULT 12 CERT_CopyName@@NSS_3.4 + 552: 000000000001fc3c 4 FUNC GLOBAL DEFAULT 12 NSSBase64_EncodeItem@@NSS_3.4 + 553: 000000000004b2c8 264 FUNC GLOBAL DEFAULT 12 PK11_IVFromParam@@NSS_3.2 + 554: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.10 + 555: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11 + 556: 00000000000317a8 72 FUNC GLOBAL DEFAULT 12 PK11_ExportPrivateKeyInfo@@NSS_3.2 + 557: 000000000004f5ac 76 FUNC GLOBAL DEFAULT 12 PK11_DestroyObject@@NSS_3.2 + 558: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.9.2 + 559: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12 + 560: 00000000000520e0 8 FUNC GLOBAL DEFAULT 12 PK11_CreateGenericObject@@NSS_3.12 + 561: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.9.3 + 562: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.13 + 563: 00000000000522b4 140 FUNC GLOBAL DEFAULT 12 PK11_ReadRawAttribute@@NSS_3.9.2 + 564: 000000000005bca0 1064 FUNC GLOBAL DEFAULT 12 PK11_DeriveWithTemplate@@NSS_3.12.9 + 565: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.14 + 566: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.15 + 567: 0000000000024efc 84 FUNC GLOBAL DEFAULT 12 CERT_ForcePostMethodForOCSP@@NSS_3.15.4 + 568: 000000000003dd5c 4 FUNC GLOBAL DEFAULT 12 SECMOD_GetReadLock@@NSS_3.3 + 569: 000000000001faf4 4 FUNC GLOBAL DEFAULT 12 PORT_SetUCS4_UTF8ConversionFunction@@NSS_3.2 + 570: 000000000005d264 112 FUNC GLOBAL DEFAULT 12 PK11_UnwrapSymKey@@NSS_3.2 + 571: 00000000000508bc 488 FUNC GLOBAL DEFAULT 12 PK11_VerifyRecover@@NSS_3.3 + 572: 000000000001fc54 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockWrite@@NSS_3.2 + 573: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.18 + 574: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.19 + 575: 0000000000026cbc 8 FUNC GLOBAL DEFAULT 12 CERT_ImportCAChain@@NSS_3.2 + 576: 0000000000060d24 584 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlotMultipleWithAttributes@@NSS_3.14 + 577: 00000000000616b0 16 FUNC GLOBAL DEFAULT 12 SECMOD_GetInternalModule@@NSS_3.3 + 578: 000000000005b870 64 FUNC GLOBAL DEFAULT 12 PK11_PubWrapSymKey@@NSS_3.2 + 579: 000000000006bd88 436 FUNC GLOBAL DEFAULT 12 CERT_CacheCRL@@NSS_3.10 + 580: 000000000004b7bc 48 FUNC GLOBAL DEFAULT 12 PK11_GenerateNewParam@@NSS_3.2 + 581: 0000000000065a28 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_TimeChoiceTemplate@@NSS_3.9 + 582: 000000000001f374 456 FUNC GLOBAL DEFAULT 12 NSS_RegisterShutdown@@NSS_3.11.1 + 583: 000000000006ed98 196 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNickname@@NSS_3.2 + 584: 0000000000057210 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_EncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 585: 000000000004bde0 1104 FUNC GLOBAL DEFAULT 12 PK11_ParamToAlgid@@NSS_3.2 + 586: 000000000003443c 148 FUNC GLOBAL DEFAULT 12 PK11_LogoutAll@@NSS_3.4 + 587: 000000000006a40c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SignedCrlTemplate@@NSS_3.10 + 588: 000000000001f654 384 FUNC GLOBAL DEFAULT 12 NSS_VersionCheck@@NSS_3.2 + 589: 0000000000033b64 16 FUNC GLOBAL DEFAULT 12 PK11_GetLowLevelKeyIDForPrivateKey@@NSS_3.3 + 590: 0000000000067ec4 108 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListHeadWithData@@NSS_3.59 + 591: 000000000001faf0 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaStrdup@@NSS_3.2 + 592: 0000000000033bd4 340 FUNC GLOBAL DEFAULT 12 PK11_ListPublicKeysInSlot@@NSS_3.4 + 593: 0000000000071150 200 FUNC GLOBAL DEFAULT 12 CERT_CompareName@@NSS_3.2 + 594: 000000000005efc4 8 FUNC GLOBAL DEFAULT 12 PK11_NeedLogin@@NSS_3.2 + 595: 000000000005aba8 4 FUNC GLOBAL DEFAULT 12 __PK11_GetKeyData@@NSS_3.2 + 596: 000000000002e330 88 FUNC GLOBAL DEFAULT 12 SGN_DestroyContext@@NSS_3.2 + 597: 000000000006579c 16 FUNC GLOBAL DEFAULT 12 CERT_GetStateName@@NSS_3.2 + 598: 00000000000589bc 12 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetSubPrimeFromParams@@NSS_3.3 + 599: 000000000005ef8c 8 FUNC GLOBAL DEFAULT 12 PK11_GetModule@@NSS_3.3 + 600: 000000000003ade8 380 FUNC GLOBAL DEFAULT 12 PK11_DigestKey@@NSS_3.2 + 601: 0000000000037fd4 412 FUNC GLOBAL DEFAULT 12 PK11_FindCertAndKeyByRecipientList@@NSS_3.2 + 602: 000000000002c528 44 FUNC GLOBAL DEFAULT 12 SECKEY_UpdateCertPQG@@NSS_3.2 + 603: 000000000005d5a0 88 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKey@@NSS_3.2 + 604: 0000000000068d78 16 FUNC GLOBAL DEFAULT 12 CERT_StartCertExtensions@@NSS_3.5 + 605: 0000000000023e7c 504 FUNC GLOBAL DEFAULT 12 CERT_VerifyOCSPResponseSignature@@NSS_3.6 + 606: 00000000000629ac 56 FUNC GLOBAL DEFAULT 12 SECMOD_CanDeleteInternalModule@@NSS_3.5 + 607: 00000000000307e4 56 FUNC GLOBAL DEFAULT 12 DSAU_EncodeDerSigWithLen@@NSS_3.9 + 608: 000000000006a00c 476 FUNC GLOBAL DEFAULT 12 CERT_DecodeDERCrlWithFlags@@NSS_3.6 + 609: 0000000000022a60 96 FUNC GLOBAL DEFAULT 12 CERT_GetSubjectNameDigest@@NSS_3.15.4 + 610: 000000000001fcfc 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToAnyTemplate@@NSS_3.2 + 611: 0000000000026f20 192 FUNC GLOBAL DEFAULT 12 CERT_CertListFromCert@@NSS_3.2 + 612: 0000000000069298 240 FUNC GLOBAL DEFAULT 12 CERT_AddExtensionByOID@@NSS_3.16.2 + 613: 000000000001e278 256 FUNC GLOBAL DEFAULT 12 NSS_ShutdownContext@@NSS_3.12.5 + 614: 00000000000209c0 244 FUNC GLOBAL DEFAULT 12 CERT_FindCRLEntryReasonExten@@NSS_3.12 + 615: 000000000005f030 8 FUNC GLOBAL DEFAULT 12 PK11_GetTokenName@@NSS_3.2 + 616: 00000000000208b8 24 FUNC GLOBAL DEFAULT 12 CERT_StartCRLEntryExtensions@@NSS_3.10 + 617: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.14.1 + 618: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.21 + 619: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.22 + 620: 000000000006f8a8 28 FUNC GLOBAL DEFAULT 12 SECKEY_HashPassword@@NSS_3.3 + 621: 000000000002050c 24 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificateRequest@@NSS_3.2 + 622: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.14.3 + 623: 000000000001fcf0 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_OctetStringTemplate@@NSS_3.2 + 624: 000000000003827c 148 FUNC GLOBAL DEFAULT 12 PK11_ListCerts@@NSS_3.2 + 625: 0000000000031ac0 64 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenPublicKey@@NSS_3.4 + 626: 000000000006f88c 28 FUNC GLOBAL DEFAULT 12 CERT_OpenCertDBFilename@@NSS_3.2 + 627: 0000000000061078 100 FUNC GLOBAL DEFAULT 12 PK11_GenerateRandom@@NSS_3.2 + 628: 000000000002d5c0 84 FUNC GLOBAL DEFAULT 12 SECKEY_EncodeDERSubjectPublicKeyInfo@@NSS_3.3 + 629: 000000000001faec 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaUnmark@@NSS_3.2 + 630: 0000000000066c24 272 FUNC GLOBAL DEFAULT 12 CERT_GetValidDNSPatternsFromCert@@NSS_3.12 + 631: 0000000000056b24 28 FUNC GLOBAL DEFAULT 12 PK11_CreatePBEAlgorithmID@@NSS_3.2 + 632: 000000000004f5f8 124 FUNC GLOBAL DEFAULT 12 PK11_DestroyTokenObject@@NSS_3.2 + 633: 000000000002b040 1148 FUNC GLOBAL DEFAULT 12 CERT_PKIXVerifyCert@@NSS_3.12 + 634: 0000000000061610 160 FUNC GLOBAL DEFAULT 12 SECMOD_GetSystemFIPSEnabled@@NSS_3.53 + 635: 000000000006328c 448 FUNC GLOBAL DEFAULT 12 SECMOD_OpenNewSlot@@NSS_3.12.4 + 636: 000000000003aae8 420 FUNC GLOBAL DEFAULT 12 PK11_AEADOp@@NSS_3.52 + 637: 000000000006567c 104 FUNC GLOBAL DEFAULT 12 CERT_GetCertEmailAddress@@NSS_3.2 + 638: 0000000000031804 16 FUNC GLOBAL DEFAULT 12 PK11_GetPublicKeyNickname@@NSS_3.4 + 639: 0000000000024e90 108 FUNC GLOBAL DEFAULT 12 CERT_DisableOCSPDefaultResponder@@NSS_3.3 + 640: 00000000000646e4 76 FUNC GLOBAL DEFAULT 12 CERT_RFC1485_EscapeAndQuote@@NSS_3.2 + 641: 000000000005f7b4 88 FUNC GLOBAL DEFAULT 12 PK11_GetInternalSlot@@NSS_3.2 + 642: 000000000005e0d8 36 FUNC GLOBAL DEFAULT 12 PK11_FreeSlotList@@NSS_3.2 + 643: 000000000003ac8c 348 FUNC GLOBAL DEFAULT 12 PK11_DigestOp@@NSS_3.2 + 644: 0000000000051134 440 FUNC GLOBAL DEFAULT 12 PK11_Decrypt@@NSS_3.15 + 645: 000000000005c874 2544 FUNC GLOBAL DEFAULT 12 PK11_PubDeriveWithKDF@@NSS_3.9 + 646: 000000000003787c 8 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromDERCert@@NSS_3.2 + 647: 000000000006f6c0 72 FUNC GLOBAL DEFAULT 12 CERT_GetCertIsPerm@@NSS_3.31 + 648: 00000000000203ec 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_CertificateRequestTemplate@@NSS_3.2 + 649: 000000000005dfcc 32 FUNC GLOBAL DEFAULT 12 PK11_FreeSlot@@NSS_3.2 + 650: 000000000002cb08 96 FUNC GLOBAL DEFAULT 12 SECKEY_PublicKeyStrengthInBits@@NSS_3.8 + 651: 00000000000612a8 356 FUNC GLOBAL DEFAULT 12 PK11_ResetToken@@NSS_3.4 + 652: 000000000003c0c4 156 FUNC GLOBAL DEFAULT 12 PK11_HPKE_ValidateParameters@@NSS_3.58 + 653: 0000000000070af0 56 FUNC GLOBAL DEFAULT 12 CERT_AddRDN@@NSS_3.2.1 + 654: 0000000000055b50 116 FUNC GLOBAL DEFAULT 12 SECMOD_LoadUserModule@@NSS_3.4 + 655: 000000000001fbe4 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearNotifyProc@@NSS_3.2 + 656: 000000000006f888 4 FUNC GLOBAL DEFAULT 12 __CERT_ClosePermCertDB@@NSS_3.2 + 657: 0000000000052858 640 FUNC GLOBAL DEFAULT 12 PK11_FindRawCertsWithSubject@@NSS_3.45 + 658: 0000000000051cdc 504 FUNC GLOBAL DEFAULT 12 PK11_WrapPrivKey@@NSS_3.3 + 659: 0000000000026ccc 596 FUNC GLOBAL DEFAULT 12 CERT_CertChainFromCert@@NSS_3.2 + 660: 000000000002bf54 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_DSAPublicKeyTemplate@@NSS_3.2 + 661: 000000000005abcc 192 FUNC GLOBAL DEFAULT 12 PK11_GetKeyLength@@NSS_3.2 + 662: 0000000000071604 68 FUNC GLOBAL DEFAULT 12 CERT_EncodeSubjectKeyID@@NSS_3.12 + 663: 000000000007004c 64 FUNC GLOBAL DEFAULT 12 CERT_EncodeUserNotice@@NSS_3.12 + 664: 000000000005db8c 24 FUNC GLOBAL DEFAULT 12 PK11_GetDefaultArray@@NSS_3.8 + 665: 000000000002d3a0 520 FUNC GLOBAL DEFAULT 12 SECKEY_CreateSubjectPublicKeyInfo@@NSS_3.2 + 666: 00000000000203f8 276 FUNC GLOBAL DEFAULT 12 CERT_CreateCertificate@@NSS_3.5 + 667: 000000000002fdac 608 FUNC GLOBAL DEFAULT 12 VFY_EndWithSignature@@NSS_3.3 + 668: 000000000001fac4 4 FUNC GLOBAL DEFAULT 12 PORT_Strdup@@NSS_3.5 + 669: 000000000013e078 480 OBJECT GLOBAL DEFAULT 20 CERT_CertificateTemplate@@NSS_3.2 + 670: 000000000005f6fc 124 FUNC GLOBAL DEFAULT 12 PK11_GetInternalKeySlot@@NSS_3.2 + 671: 0000000000028f1c 76 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertNow@@NSS_3.2 + 672: 0000000000065e94 24 FUNC GLOBAL DEFAULT 12 CERT_DestroyValidity@@NSS_3.5 + 673: 000000000006e530 180 FUNC GLOBAL DEFAULT 12 SEC_DeletePermCertificate@@NSS_3.2 + 674: 000000000001fb50 4 FUNC GLOBAL DEFAULT 12 SECITEM_ZfreeItem@@NSS_3.2 + 675: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.30 + 676: 000000000001fb04 4 FUNC GLOBAL DEFAULT 12 PORT_UCS2_ASCIIConversion@@NSS_3.2 + 677: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.31 + 678: 00000000000716f4 116 FUNC GLOBAL DEFAULT 12 CERT_EncodeAltNameExtension@@NSS_3.7 + 679: 0000000000058a98 12 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetHFromVerify@@NSS_3.3 + 680: 000000000001fbc8 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeItem@@NSS_3.2 + 681: 000000000002af18 12 FUNC GLOBAL DEFAULT 12 CERT_GetPKIXVerifyNistRevocationPolicy@@NSS_3.12 + 682: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.33 + 683: 00000000000514a4 84 FUNC GLOBAL DEFAULT 12 PK11_PubDecryptRaw@@NSS_3.2 + 684: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.34 + 685: 0000000000056ae4 64 FUNC GLOBAL DEFAULT 12 PK11_DestroyPBEParams@@NSS_3.3.1 + 686: 000000000001fb58 4 FUNC GLOBAL DEFAULT 12 SGN_DestroyDigestInfo@@NSS_3.2 + 687: 000000000001fae0 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaGrow@@NSS_3.2 + 688: 0000000000065610 28 FUNC GLOBAL DEFAULT 12 CERT_GetFirstEmailAddress@@NSS_3.7 + 689: 000000000006e5e4 52 FUNC GLOBAL DEFAULT 12 CERT_ChangeCertTrust@@NSS_3.2 + 690: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.39 + 691: 0000000000061b64 4 FUNC GLOBAL DEFAULT 12 SECMOD_PubCipherFlagstoInternal@@NSS_3.4 + 692: 0000000000066068 216 FUNC GLOBAL DEFAULT 12 CERT_CheckCertValidTimes@@NSS_3.2 + 693: 0000000000032628 880 FUNC GLOBAL DEFAULT 12 PK11_ExportEncryptedPrivKeyInfoV2@@NSS_3.65 + 694: 00000000000678ac 64 FUNC GLOBAL DEFAULT 12 CERT_IsRootDERCert@@NSS_3.8 + 695: 0000000000037208 460 FUNC GLOBAL DEFAULT 12 PK11_TraverseCertsForSubjectInSlot@@NSS_3.2 + 696: 000000000001fcd8 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_NullTemplate@@NSS_3.4 + 697: 000000000006c954 400 FUNC GLOBAL DEFAULT 12 CERT_DecodeGeneralName@@NSS_3.4 + 698: 000000000013dbb8 32 OBJECT GLOBAL DEFAULT 20 SECKEY_PointerToEncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 699: 000000000006b8b8 268 FUNC GLOBAL DEFAULT 12 SEC_FindCrlByName@@NSS_3.2 + 700: 000000000005d5f8 312 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKeyWithFlags@@NSS_3.6 + 701: 00000000000520e8 12 FUNC GLOBAL DEFAULT 12 PK11_CreateManagedGenericObject@@NSS_3.34 + 702: 000000000001fb94 4 FUNC GLOBAL DEFAULT 12 DER_GeneralizedTimeToTime@@NSS_3.2 + 703: 0000000000051f10 76 FUNC GLOBAL DEFAULT 12 PK11_LinkGenericObject@@NSS_3.9.2 + 704: 00000000000329bc 140 FUNC GLOBAL DEFAULT 12 PK11_ExportEncryptedPrivateKeyInfoV2@@NSS_3.65 + 705: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.15.4 + 706: 000000000002af84 188 FUNC GLOBAL DEFAULT 12 CERT_AllocCERTRevocationFlags@@NSS_3.12.10 + 707: 000000000006e8c8 744 FUNC GLOBAL DEFAULT 12 CERT_NewTempCertificate@@NSS_3.12 + 708: 000000000006348c 236 FUNC GLOBAL DEFAULT 12 SECMOD_OpenUserDB@@NSS_3.11 + 709: 000000000005b024 756 FUNC GLOBAL DEFAULT 12 PK11_KeyGenWithTemplate@@NSS_3.12.9 + 710: 0000000000056064 28 FUNC GLOBAL DEFAULT 12 SEC_PKCS5IsAlgorithmPBEAlg@@NSS_3.2 + 711: 000000000003dd60 4 FUNC GLOBAL DEFAULT 12 SECMOD_ReleaseReadLock@@NSS_3.3 + 712: 000000000001f53c 280 FUNC GLOBAL DEFAULT 12 NSS_UnregisterShutdown@@NSS_3.11.1 + 713: 000000000005b668 64 FUNC GLOBAL DEFAULT 12 PK11_MoveSymKey@@NSS_3.9 + 714: 000000000005c0c8 44 FUNC GLOBAL DEFAULT 12 PK11_Derive@@NSS_3.2 + 715: 0000000000057c04 316 FUNC GLOBAL DEFAULT 12 PK11_ImportDERPrivateKeyInfoAndReturnKey@@NSS_3.4 + 716: 000000000003af64 56 FUNC GLOBAL DEFAULT 12 PK11_Finalize@@NSS_3.2 + 717: 00000000000718f4 156 FUNC GLOBAL DEFAULT 12 CERT_EncodeInfoAccessExtension@@NSS_3.12 + 718: 00000000000616c0 16 FUNC GLOBAL DEFAULT 12 SECMOD_GetDefaultModuleList@@NSS_3.3 + 719: 00000000000e5f18 32 OBJECT GLOBAL DEFAULT 14 SEC_BitStringTemplate@@NSS_3.2 + 720: 0000000000061934 416 FUNC GLOBAL DEFAULT 12 PK11_GetModuleURI@@NSS_3.31 + 721: 0000000000057124 8 FUNC GLOBAL DEFAULT 12 PK11_GetPBEIV@@NSS_3.6 + 722: 000000000002fb04 220 FUNC GLOBAL DEFAULT 12 VFY_CreateContextWithAlgorithmID@@NSS_3.12 + 723: 000000000003c3c4 176 FUNC GLOBAL DEFAULT 12 PK11_HPKE_DestroyContext@@NSS_3.58 + 724: 0000000000023260 112 FUNC GLOBAL DEFAULT 12 CERT_DestroyOCSPRequest@@NSS_3.6 + 725: 000000000002e304 44 FUNC GLOBAL DEFAULT 12 SGN_NewContextWithAlgorithmID@@NSS_3.34 + 726: 000000000001fccc 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IntegerTemplate@@NSS_3.2 + 727: 000000000006266c 592 FUNC GLOBAL DEFAULT 12 SECMOD_DeleteInternalModule@@NSS_3.3 + 728: 000000000002bf84 172 FUNC GLOBAL DEFAULT 12 SECKEY_CreateRSAPrivateKey@@NSS_3.2 + 729: 00000000000589b0 12 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetPrimeFromParams@@NSS_3.3 + 730: 0000000000031a54 108 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenPrivateKey@@NSS_3.4 + 731: 0000000000057228 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_PrivateKeyInfoTemplate@@NSS_3.2 + 732: 00000000000384cc 180 FUNC GLOBAL DEFAULT 12 PK11_GetLowLevelKeyIDForCert@@NSS_3.3 + 733: 0000000000050688 332 FUNC GLOBAL DEFAULT 12 PK11_SignatureLen@@NSS_3.2 + 734: 000000000002b7e8 156 FUNC GLOBAL DEFAULT 12 HASH_GetHashTypeByOidTag@@NSS_3.8 + 735: 0000000000055bc4 148 FUNC GLOBAL DEFAULT 12 SECMOD_UnloadUserModule@@NSS_3.4 + 736: 0000000000034010 24 FUNC GLOBAL DEFAULT 12 PK11_SetSlotPWValues@@NSS_3.2 + 737: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.43 + 738: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.44 + 739: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.45 + 740: 000000000006de54 224 FUNC GLOBAL DEFAULT 12 CERT_CheckNameSpace@@NSS_3.12 + 741: 000000000002d97c 8 FUNC GLOBAL DEFAULT 12 SECKEY_GetPublicKeyType@@NSS_3.3 + 742: 0000000000033b74 96 FUNC GLOBAL DEFAULT 12 PK11_ListPrivateKeysInSlot@@NSS_3.3 + 743: 000000000003af9c 484 FUNC GLOBAL DEFAULT 12 PK11_DigestFinal@@NSS_3.2 + 744: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.47 + 745: 0000000000070830 144 FUNC GLOBAL DEFAULT 12 CERT_CopyRDN@@NSS_3.5 + 746: 000000000006ecb0 232 FUNC GLOBAL DEFAULT 12 CERT_FindCertByName@@NSS_3.2 + 747: 000000000001fad4 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaAlloc@@NSS_3.2 + 748: 00000000000270ec 12 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificateList@@NSS_3.2 + 749: 000000000006a3f4 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_IssuerAndSNTemplate@@NSS_3.2 + 750: 000000000001fce4 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_ObjectIDTemplate@@NSS_3.2 + 751: 000000000005f1e4 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotID@@NSS_3.2 + 752: 000000000013e278 320 OBJECT GLOBAL DEFAULT 20 CERT_CrlTemplate@@NSS_3.2 + 753: 000000000006f178 388 FUNC GLOBAL DEFAULT 12 CERT_CreateSubjectCertList@@NSS_3.4 + 754: 000000000003a00c 176 FUNC GLOBAL DEFAULT 12 PK11_DigestBegin@@NSS_3.2 + 755: 000000000013e258 32 OBJECT GLOBAL DEFAULT 20 CERT_SetOfSignedCrlTemplate@@NSS_3.2 + 756: 0000000000061b10 52 FUNC GLOBAL DEFAULT 12 SECMOD_UpdateModule@@NSS_3.4 + 757: 0000000000028f68 272 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListByCANames@@NSS_3.4 + 758: 0000000000050f84 432 FUNC GLOBAL DEFAULT 12 PK11_SignWithSymKey@@NSS_3.14.3 + 759: 000000000001f1b0 208 FUNC GLOBAL DEFAULT 12 NSS_InitContext@@NSS_3.12.5 + 760: 00000000000316dc 204 FUNC GLOBAL DEFAULT 12 PK11_MakeKEAPubKey@@NSS_3.2 + 761: 000000000001fb54 4 FUNC GLOBAL DEFAULT 12 SGN_CreateDigestInfo@@NSS_3.2 + 762: 000000000005d9c4 172 FUNC GLOBAL DEFAULT 12 PK11_TokenKeyGen@@NSS_3.6 + 763: 000000000001fc20 4 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Create@@NSS_3.2 + 764: 0000000000056080 28 FUNC GLOBAL DEFAULT 12 SEC_PKCS5IsAlgorithmPBEAlgTag@@NSS_3.12 + 765: 0000000000051ed4 8 FUNC GLOBAL DEFAULT 12 PK11_GetNextGenericObject@@NSS_3.9.2 + 766: 000000000001fc04 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeUnsignedInteger@@NSS_3.11.1 + 767: 0000000000026388 380 FUNC GLOBAL DEFAULT 12 CERT_FindUserCertByUsage@@NSS_3.4 + 768: 000000000002ed1c 1112 FUNC GLOBAL DEFAULT 12 SEC_CreateSignatureAlgorithmParameters@@NSS_3.34 + 769: 0000000000067e24 56 FUNC GLOBAL DEFAULT 12 CERT_RemoveCertListNode@@NSS_3.6 + 770: 000000000003d6bc 500 FUNC GLOBAL DEFAULT 12 PK11_HPKE_Seal@@NSS_3.58 + 771: 00000000000300c8 4 FUNC GLOBAL DEFAULT 12 VFY_VerifyDigestDirect@@NSS_3.12 + 772: 0000000000039b04 232 FUNC GLOBAL DEFAULT 12 __PK11_CreateContextByRawKey@@NSS_3.2 + 773: 0000000000022684 252 FUNC GLOBAL DEFAULT 12 CERT_DecodeOCSPRequest@@NSS_3.14 + 774: 0000000000057208 8 FUNC GLOBAL DEFAULT 12 PK11_GetPBECryptoMechanism@@NSS_3.12 + 775: 00000000000664f4 44 FUNC GLOBAL DEFAULT 12 CERT_DupCertificate@@NSS_3.2 + 776: 00000000000616d0 16 FUNC GLOBAL DEFAULT 12 SECMOD_GetDeadModuleList@@NSS_3.9 + 777: 0000000000039bec 240 FUNC GLOBAL DEFAULT 12 PK11_CreateContextByPubKey@@NSS_3.65 + 778: 000000000001fbb0 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderAbort@@NSS_3.9 + 779: 000000000002e978 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SignedDataTemplate@@NSS_3.2 + 780: 000000000001fbfc 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeItem@@NSS_3.2 + 781: 000000000002e2f8 12 FUNC GLOBAL DEFAULT 12 SGN_NewContext@@NSS_3.2 + 782: 000000000006e104 92 FUNC GLOBAL DEFAULT 12 CERT_GetCertTrust@@NSS_3.2 + 783: 000000000006f8c4 28 FUNC GLOBAL DEFAULT 12 __CERT_TraversePermCertsForSubject@@NSS_3.2 + 784: 0000000000055694 52 FUNC GLOBAL DEFAULT 12 SECMOD_GetModuleSpecList@@NSS_3.4 + 785: 000000000005154c 188 FUNC GLOBAL DEFAULT 12 PK11_PubEncryptRaw@@NSS_3.2 + 786: 000000000006d5c0 376 FUNC GLOBAL DEFAULT 12 CERT_GetConstrainedCertificateNames@@NSS_3.12.7 + 787: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.2 + 788: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.16.1 + 789: 00000000000520f4 200 FUNC GLOBAL DEFAULT 12 PK11_GetObjectHandle@@NSS_3.52 + 790: 0000000000065fdc 32 FUNC GLOBAL DEFAULT 12 CERT_SetSlopTime@@NSS_3.2 + 791: 000000000005aad4 8 FUNC GLOBAL DEFAULT 12 PK11_GetWindow@@NSS_3.2 + 792: 000000000001fb2c 4 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTagDescription@@NSS_3.2 + 793: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.3 + 794: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.16.2 + 795: 00000000000557a0 56 FUNC GLOBAL DEFAULT 12 SECMOD_FreeModuleSpecList@@NSS_3.4 + 796: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.4 + 797: 000000000002b994 112 FUNC GLOBAL DEFAULT 12 HASH_GetHMACOidTagByHashOidTag@@NSS_3.65 + 798: 0000000000023650 76 FUNC GLOBAL DEFAULT 12 CERT_DestroyOCSPResponse@@NSS_3.7 + 799: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.5 + 800: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.6 + 801: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.7 + 802: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.8 + 803: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.52 + 804: 000000000002bc0c 32 FUNC GLOBAL DEFAULT 12 HASH_Begin@@NSS_3.4 + 805: 000000000002db9c 64 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPrivateKeyList@@NSS_3.3 + 806: 000000000002c484 164 FUNC GLOBAL DEFAULT 12 SECKEY_CopySubjectPublicKeyInfo@@NSS_3.4 + 807: 0000000000020828 92 FUNC GLOBAL DEFAULT 12 CERT_GetCertificateRequestExtensions@@NSS_3.10 + 808: 000000000001fd20 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UTCTimeTemplate@@NSS_3.2 + 809: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.9 + 810: 0000000000049dc4 1244 FUNC GLOBAL DEFAULT 12 PK11_GetKeyType@@NSS_3.3 + 811: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.53 + 812: 000000000001fb44 4 FUNC GLOBAL DEFAULT 12 SECITEM_DupItem@@NSS_3.2 + 813: 000000000005a444 252 FUNC GLOBAL DEFAULT 12 PK11_ImportSymKey@@NSS_3.3 + 814: 000000000005a258 192 FUNC GLOBAL DEFAULT 12 PK11_SymKeyFromHandle@@NSS_3.2 + 815: 0000000000036884 756 FUNC GLOBAL DEFAULT 12 PK11_ImportCert@@NSS_3.5 + 816: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.55 + 817: 00000000000eda38 128 OBJECT GLOBAL DEFAULT 14 CERT_TimeChoiceTemplate@@NSS_3.9 + 818: 000000000001fadc 4 FUNC GLOBAL DEFAULT 12 PORT_FreeArena@@NSS_3.2 + 819: 000000000003c7cc 976 FUNC GLOBAL DEFAULT 12 PK11_HPKE_ImportContext@@NSS_3.62 + 820: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.58 + 821: 000000000006f5bc 260 FUNC GLOBAL DEFAULT 12 CERT_FindSMimeProfile@@NSS_3.2 + 822: 00000000000604ec 212 FUNC GLOBAL DEFAULT 12 SECMOD_HasRootCerts@@NSS_3.11 + 823: 000000000006ba70 200 FUNC GLOBAL DEFAULT 12 CERT_CRLCacheRefreshIssuer@@NSS_3.7 + 824: 000000000002daf4 108 FUNC GLOBAL DEFAULT 12 SECKEY_NewPrivateKeyList@@NSS_3.3 + 825: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.59 + 826: 000000000005a1c8 16 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyType@@NSS_3.9 + 827: 000000000001fc28 4 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Update@@NSS_3.2 + 828: 00000000000345d4 456 FUNC GLOBAL DEFAULT 12 PK11_IsLoggedIn@@NSS_3.3 + 829: 0000000000068d98 16 FUNC GLOBAL DEFAULT 12 CERT_FindKeyUsageExtension@@NSS_3.4 + 830: 0000000000061b44 16 FUNC GLOBAL DEFAULT 12 SECMOD_PubMechFlagstoInternal@@NSS_3.4 + 831: 000000000005ef94 8 FUNC GLOBAL DEFAULT 12 PK11_GetDefaultFlags@@NSS_3.8 + 832: 0000000000024d80 272 FUNC GLOBAL DEFAULT 12 CERT_EnableOCSPDefaultResponder@@NSS_3.3 + 833: 000000000001fb40 4 FUNC GLOBAL DEFAULT 12 SECITEM_CopyItem@@NSS_3.2 + 834: 0000000000068fb0 204 FUNC GLOBAL DEFAULT 12 CERT_CheckCertUsage@@NSS_3.3 + 835: 000000000006c718 328 FUNC GLOBAL DEFAULT 12 CERT_EncodeGeneralName@@NSS_3.4 + 836: 0000000000022f94 716 FUNC GLOBAL DEFAULT 12 CERT_AddOCSPAcceptableResponses@@NSS_3.6 + 837: 00000000000595a0 356 FUNC GLOBAL DEFAULT 12 PK11_FreeSymKey@@NSS_3.2 + 838: 0000000000025130 908 FUNC GLOBAL DEFAULT 12 CERT_CheckOCSPStatus@@NSS_3.14 + 839: 000000000005faa8 108 FUNC GLOBAL DEFAULT 12 PK11_SeedRandom@@NSS_3.3 + 840: 000000000002db60 60 FUNC GLOBAL DEFAULT 12 SECKEY_RemovePrivateKeyListNode@@NSS_3.3 + 841: 0000000000021c5c 20 FUNC GLOBAL DEFAULT 12 CERT_SetOCSPTimeout@@NSS_3.12 + 842: 00000000000708c0 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_NameTemplate@@NSS_3.4 + 843: 000000000003000c 8 FUNC GLOBAL DEFAULT 12 VFY_End@@NSS_3.2 + 844: 000000000001fad0 4 FUNC GLOBAL DEFAULT 12 PORT_NewArena@@NSS_3.2 + 845: 000000000005f9e4 196 FUNC GLOBAL DEFAULT 12 PK11_GetBestKeyLength@@NSS_3.2 + 846: 0000000000065250 164 FUNC GLOBAL DEFAULT 12 CERT_DerNameToAscii@@NSS_3.4 + 847: 000000000001fbdc 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderAbort@@NSS_3.9 + 848: 000000000001fd38 12 FUNC GLOBAL DEFAULT 12 NSS_Get_sgn_DigestInfoTemplate@@NSS_3.2 + 849: 000000000006a1f0 92 FUNC GLOBAL DEFAULT 12 SEC_NewCrl@@NSS_3.2 + 850: 0000000000031dcc 1348 FUNC GLOBAL DEFAULT 12 PK11_ImportPublicKey@@NSS_3.4 + 851: 0000000000050f44 64 FUNC GLOBAL DEFAULT 12 PK11_Sign@@NSS_3.2 + 852: 000000000002d984 368 FUNC GLOBAL DEFAULT 12 SECKEY_ImportDERPublicKey@@NSS_3.3 + 853: 0000000000025d6c 276 FUNC GLOBAL DEFAULT 12 CERT_CreateEncodedOCSPErrorResponse@@NSS_3.14.1 + 854: 0000000000033e84 296 FUNC GLOBAL DEFAULT 12 PK11_CheckUserPassword@@NSS_3.2 + 855: 0000000000037884 92 FUNC GLOBAL DEFAULT 12 PK11_FindKeyByDERCert@@NSS_3.2 + 856: 00000000000569f8 8 FUNC GLOBAL DEFAULT 12 RSA_FormatBlock@@NSS_3.2 + 857: 000000000005b560 264 FUNC GLOBAL DEFAULT 12 PK11_ConvertSessionSymKeyToTokenSymKey@@NSS_3.6 + 858: 0000000000058a84 8 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetCounterFromVerify@@NSS_3.3 + 859: 000000000013e6f8 192 OBJECT GLOBAL DEFAULT 20 CERT_SignedCrlTemplate@@NSS_3.10 + 860: 00000000000381d4 168 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenCertAndKey@@NSS_3.3 + 861: 00000000000580e0 80 FUNC GLOBAL DEFAULT 12 PK11_ExportDERPrivateKeyInfo@@NSS_3.16.1 + 862: 00000000000629e4 664 FUNC GLOBAL DEFAULT 12 SECMOD_UpdateSlotList@@NSS_3.9.3 + 863: 0000000000064730 924 FUNC GLOBAL DEFAULT 12 CERT_GetOidString@@NSS_3.9 + 864: 000000000001fb64 4 FUNC GLOBAL DEFAULT 12 DER_Encode@@NSS_3.4 + 865: 000000000005da70 16 FUNC GLOBAL DEFAULT 12 PK11_KeyGen@@NSS_3.2 + 866: 00000000000e5f58 32 OBJECT GLOBAL DEFAULT 14 SEC_OctetStringTemplate@@NSS_3.2 + 867: 00000000000621d8 64 FUNC GLOBAL DEFAULT 12 SECMOD_LookupSlot@@NSS_3.2 + 868: 00000000000585ac 44 FUNC GLOBAL DEFAULT 12 PK11_PQG_ParamGen@@NSS_3.3 + 869: 000000000005ee68 168 FUNC GLOBAL DEFAULT 12 PK11_TokenRefresh@@NSS_3.7.1 + 870: 00000000000585d8 580 FUNC GLOBAL DEFAULT 12 PK11_PQG_VerifyParams@@NSS_3.3 + 871: 000000000001fdfc 1512 FUNC GLOBAL DEFAULT 12 CERT_FormatName@@NSS_3.2 + 872: 000000000005aadc 124 FUNC GLOBAL DEFAULT 12 PK11_ExtractKeyValue@@NSS_3.3 + 873: 0000000000039d4c 172 FUNC GLOBAL DEFAULT 12 PK11_CreateDigestContext@@NSS_3.2 + 874: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.62 + 875: 000000000002d7d4 196 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyEncryptedPrivateKeyInfo@@NSS_3.2 + 876: 000000000001fbc4 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1Decode@@NSS_3.4 + 877: 0000000000065eac 184 FUNC GLOBAL DEFAULT 12 CERT_CreateValidity@@NSS_3.5 + 878: 000000000002597c 1008 FUNC GLOBAL DEFAULT 12 CERT_CreateEncodedOCSPSuccessResponse@@NSS_3.14.1 + 879: 0000000000030334 208 FUNC GLOBAL DEFAULT 12 VFY_VerifyDataWithAlgorithmID@@NSS_3.12 + 880: 00000000000514f8 84 FUNC GLOBAL DEFAULT 12 PK11_PrivDecryptPKCS1@@NSS_3.9.3 + 881: 000000000001fd08 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToOctetStringTemplate@@NSS_3.2 + 882: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.65 + 883: 00000000000589d4 176 FUNC GLOBAL DEFAULT 12 PK11_PQG_NewVerify@@NSS_3.3 + 884: 000000000005d8c0 248 FUNC GLOBAL DEFAULT 12 PK11_CopySymKeyForSigning@@NSS_3.3 + 885: 000000000001fb0c 4 FUNC GLOBAL DEFAULT 12 SECOID_FindOID@@NSS_3.2 + 886: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.66 + 887: 00000000000300cc 160 FUNC GLOBAL DEFAULT 12 VFY_VerifyDigest@@NSS_3.2 + 888: 0000000000068270 92 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListForUserCerts@@NSS_3.6 + 889: 000000000001fb48 4 FUNC GLOBAL DEFAULT 12 SECITEM_ArenaDupItem@@NSS_3.9 + 890: 000000000001fbe0 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetNotifyProc@@NSS_3.2 + 891: 0000000000031828 20 FUNC GLOBAL DEFAULT 12 PK11_SetPublicKeyNickname@@NSS_3.4 + 892: 0000000000058c8c 812 FUNC GLOBAL DEFAULT 12 PK11SDR_Encrypt@@NSS_3.2 + 893: 000000000003a0bc 704 FUNC GLOBAL DEFAULT 12 PK11_CipherOp@@NSS_3.2 + 894: 000000000005609c 184 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetPBEAlgorithm@@NSS_3.2 + 895: 000000000001fc90 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BMPStringTemplate@@NSS_3.2 + 896: 000000000002eb00 540 FUNC GLOBAL DEFAULT 12 SGN_Digest@@NSS_3.2 + 897: 000000000001f0a8 124 FUNC GLOBAL DEFAULT 12 NSS_InitReadWrite@@NSS_3.2 + 898: 000000000001fb38 4 FUNC GLOBAL DEFAULT 12 SECITEM_CompareItem@@NSS_3.2 + 899: 000000000005c358 1308 FUNC GLOBAL DEFAULT 12 PK11_PubDerive@@NSS_3.2 + 900: 00000000000569f4 4 FUNC GLOBAL DEFAULT 12 __PBE_DestroyContext@@NSS_3.2 + 901: 0000000000066d34 300 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertName@@NSS_3.2 + 902: 0000000000024ba0 104 FUNC GLOBAL DEFAULT 12 CERT_EnableOCSPChecking@@NSS_3.2 + 903: 0000000000037090 376 FUNC GLOBAL DEFAULT 12 PK11_FindCertByIssuerAndSN@@NSS_3.2 + 904: 000000000005a1b8 8 FUNC GLOBAL DEFAULT 12 PK11_GetMechanism@@NSS_3.2 + 905: 000000000005ac8c 260 FUNC GLOBAL DEFAULT 12 PK11_GetKeyStrength@@NSS_3.2 + 906: 0000000000034028 88 FUNC GLOBAL DEFAULT 12 PK11_GetSlotPWValues@@NSS_3.3 + 907: 00000000000661ac 200 FUNC GLOBAL DEFAULT 12 SEC_CheckCrlTimes@@NSS_3.18 + 908: 000000000001fb28 4 FUNC GLOBAL DEFAULT 12 SECOID_CompareAlgorithmID@@NSS_3.2 + 909: 0000000000067858 84 FUNC GLOBAL DEFAULT 12 CERT_IsCADERCert@@NSS_3.3 + 910: 000000000002cb68 28 FUNC GLOBAL DEFAULT 12 SECKEY_PublicKeyStrength@@NSS_3.2 + 911: 000000000005da9c 192 FUNC GLOBAL DEFAULT 12 PK11_GenerateFortezzaIV@@NSS_3.2 + 912: 000000000006a24c 28 FUNC GLOBAL DEFAULT 12 SEC_DupCrl@@NSS_3.9 + 913: 00000000000317f4 16 FUNC GLOBAL DEFAULT 12 PK11_GetPrivateKeyNickname@@NSS_3.4 + 914: 00000000000630e8 220 FUNC GLOBAL DEFAULT 12 SECMOD_CancelWait@@NSS_3.9.3 + 915: 000000000003081c 8 FUNC GLOBAL DEFAULT 12 DSAU_DecodeDerSig@@NSS_3.2 + 916: 0000000000066520 72 FUNC GLOBAL DEFAULT 12 CERT_GetCertificateDer@@NSS_3.44 + 917: 00000000000708cc 512 FUNC GLOBAL DEFAULT 12 CERT_CreateName@@NSS_3.2.1 + 918: 000000000002dbdc 84 FUNC GLOBAL DEFAULT 12 SECKEY_AddPrivateKeyToListTail@@NSS_3.3 + 919: 000000000005dc30 68 FUNC GLOBAL DEFAULT 12 PK11_GetFirstSafe@@NSS_3.2 + 920: 000000000002e3f8 60 FUNC GLOBAL DEFAULT 12 SGN_Update@@NSS_3.2 + 921: 0000000000023a5c 76 FUNC GLOBAL DEFAULT 12 CERT_GetEncodedOCSPResponse@@NSS_3.14 + 922: 000000000003442c 16 FUNC GLOBAL DEFAULT 12 PK11_SetPasswordFunc@@NSS_3.2 + 923: 000000000002bb44 148 FUNC GLOBAL DEFAULT 12 HASH_Clone@@NSS_3.10 + 924: 000000000004e218 24 FUNC GLOBAL DEFAULT 12 PK11_DestroyMergeLog@@NSS_3.12 + 925: 0000000000056c3c 52 FUNC GLOBAL DEFAULT 12 PK11_RawPBEKeyGen@@NSS_3.4 + 926: 0000000000060b10 532 FUNC GLOBAL DEFAULT 12 PK11_GetAllTokens@@NSS_3.2 + 927: 000000000001e378 44 FUNC GLOBAL DEFAULT 12 NSS_IsInitialized@@NSS_3.9.2 + 928: 000000000005487c 12 FUNC GLOBAL DEFAULT 12 SECMOD_GetDefaultModDBFlag@@NSS_3.12.5 + 929: 000000000006a418 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SetOfSignedCrlTemplate@@NSS_3.2 + 930: 000000000005efac 16 FUNC GLOBAL DEFAULT 12 PK11_IsRemovable@@NSS_3.12 + 931: 0000000000022620 100 FUNC GLOBAL DEFAULT 12 CERT_EncodeOCSPRequest@@NSS_3.6 + 932: 0000000000067ebc 8 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListTail@@NSS_3.2 + 933: 00000000000e5ff8 32 OBJECT GLOBAL DEFAULT 14 SEC_NullTemplate@@NSS_3.4 + 934: 00000000000670a8 308 FUNC GLOBAL DEFAULT 12 CERT_IsCACert@@NSS_3.3 + 935: 000000000001fbb8 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearFilterProc@@NSS_3.2 + 936: 000000000003c474 856 FUNC GLOBAL DEFAULT 12 PK11_HPKE_ExportContext@@NSS_3.62 + 937: 000000000001fb68 4 FUNC GLOBAL DEFAULT 12 DER_Lengths@@NSS_3.2 + 938: 000000000001fac8 4 FUNC GLOBAL DEFAULT 12 PORT_SetError@@NSS_3.2 + 939: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.2.1 + 940: 00000000000618e4 80 FUNC GLOBAL DEFAULT 12 PK11_GetModInfo@@NSS_3.6 + 941: 0000000000068d70 8 FUNC GLOBAL DEFAULT 12 CERT_FindCertExtension@@NSS_3.4 + 942: 000000000001fc00 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeInteger@@NSS_3.2 + 943: 000000000002e92c 76 FUNC GLOBAL DEFAULT 12 SEC_SignDataWithAlgorithmID@@NSS_3.34 + 944: 000000000005ef84 8 FUNC GLOBAL DEFAULT 12 PK11_HasRootCerts@@NSS_3.4 + 945: 000000000005b8b0 308 FUNC GLOBAL DEFAULT 12 PK11_SymKeysToSameSlot@@NSS_3.52 + 946: 0000000000054868 8 FUNC GLOBAL DEFAULT 12 SECMOD_CreateModule@@NSS_3.4 + 947: 0000000000031614 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotFromPrivateKey@@NSS_3.2 + 948: 00000000000700cc 64 FUNC GLOBAL DEFAULT 12 CERT_EncodeInhibitAnyExtension@@NSS_3.12 + 949: 0000000000025890 116 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPSingleResponseUnknown@@NSS_3.14.1 + 950: 0000000000037bf8 112 FUNC GLOBAL DEFAULT 12 PK11_FindCertInSlot@@NSS_3.2 + 951: 0000000000071218 124 FUNC GLOBAL DEFAULT 12 CERT_EncodeAuthKeyID@@NSS_3.5 + 952: 000000000001fc48 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockRead@@NSS_3.2 + 953: 000000000001fba0 4 FUNC GLOBAL DEFAULT 12 DER_EncodeTimeChoice@@NSS_3.9 + 954: 000000000003c160 612 FUNC GLOBAL DEFAULT 12 PK11_HPKE_NewContext@@NSS_3.58 + 955: 000000000006fcf0 236 FUNC GLOBAL DEFAULT 12 CERT_DecodeUserNotice@@NSS_3.2 + 956: 000000000005a318 144 FUNC GLOBAL DEFAULT 12 PK11_GetWrapKey@@NSS_3.2 + 957: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.77 + 958: 000000000005a3a8 88 FUNC GLOBAL DEFAULT 12 PK11_SetWrapKey@@NSS_3.2 + 959: 000000000001fb24 4 FUNC GLOBAL DEFAULT 12 SECOID_DestroyAlgorithmID@@NSS_3.2 + 960: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.79 + 961: 0000000000021a84 132 FUNC GLOBAL DEFAULT 12 CERT_RegisterAlternateOCSPAIAInfoCallBack@@NSS_3.12.3 + 962: 0000000000039f60 172 FUNC GLOBAL DEFAULT 12 PK11_RestoreContext@@NSS_3.2 + 963: 00000000000512ec 440 FUNC GLOBAL DEFAULT 12 PK11_Encrypt@@NSS_3.15 + 964: 000000000003cb9c 168 FUNC GLOBAL DEFAULT 12 PK11_HPKE_Serialize@@NSS_3.58 + 965: 000000000002fa70 144 FUNC GLOBAL DEFAULT 12 VFY_CreateContext@@NSS_3.2 + 966: 000000000001fbf8 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1Encode@@NSS_3.2 + 967: 000000000001fc0c 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1LengthLength@@NSS_3.2 + 968: 0000000000022780 56 FUNC GLOBAL DEFAULT 12 CERT_DestroyOCSPCertID@@NSS_3.6 + 969: 000000000002b7d0 24 FUNC GLOBAL DEFAULT 12 HASH_GetHashObject@@NSS_3.2 + 970: 000000000002bc4c 32 FUNC GLOBAL DEFAULT 12 HASH_End@@NSS_3.4 + 971: 000000000006f8e0 28 FUNC GLOBAL DEFAULT 12 __CERT_TraversePermCertsForNickname@@NSS_3.2 + 972: 0000000000033d28 348 FUNC GLOBAL DEFAULT 12 PK11_ListPrivKeysInSlot@@NSS_3.4 + 973: 000000000002c630 24 FUNC GLOBAL DEFAULT 12 CERT_GetCertKeyType@@NSS_3.39 + 974: 0000000000065a34 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_CertificateTemplate@@NSS_3.2 + 975: 0000000000022c48 100 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPCertID@@NSS_3.6 + 976: 000000000002bbd8 52 FUNC GLOBAL DEFAULT 12 HASH_Destroy@@NSS_3.4 + 977: 0000000000061b68 172 FUNC GLOBAL DEFAULT 12 SECMOD_IsModulePresent@@NSS_3.2 + 978: 000000000002c030 176 FUNC GLOBAL DEFAULT 12 SECKEY_CreateECPrivateKey@@NSS_3.8 + 979: 0000000000026650 12 FUNC GLOBAL DEFAULT 12 CERT_FreeNicknames@@NSS_3.2 + 980: 000000000005efa4 8 FUNC GLOBAL DEFAULT 12 PK11_IsHW@@NSS_3.2 + 981: 000000000003a37c 1900 FUNC GLOBAL DEFAULT 12 PK11_AEADRawOp@@NSS_3.52 + 982: 000000000013d740 192 OBJECT GLOBAL DEFAULT 20 SECKEY_RSAPSSParamsTemplate@@NSS_3.13 + 983: 000000000005f80c 136 FUNC GLOBAL DEFAULT 12 PK11_DoesMechanism@@NSS_3.2 + 984: 000000000005a1f4 20 FUNC GLOBAL DEFAULT 12 PK11_SetSymKeyNickname@@NSS_3.4 + 985: 000000000002d614 224 FUNC GLOBAL DEFAULT 12 SECKEY_DecodeDERSubjectPublicKeyInfo@@NSS_3.4 + 986: 000000000004c5b4 32 FUNC GLOBAL DEFAULT 12 PK11_FortezzaMapSig@@NSS_3.2 + 987: 000000000002af24 96 FUNC GLOBAL DEFAULT 12 CERT_DestroyCERTRevocationFlags@@NSS_3.12.10 + 988: 000000000004f94c 8 FUNC GLOBAL DEFAULT 12 PK11_HasAttributeSet@@NSS_3.30 + 989: 000000000005a400 68 FUNC GLOBAL DEFAULT 12 PK11_VerifyKeyOK@@NSS_3.2 + 990: 0000000000026504 332 FUNC GLOBAL DEFAULT 12 CERT_GetCertNicknames@@NSS_3.2 + 991: 00000000000391d0 228 FUNC GLOBAL DEFAULT 12 PK11_SaveContextAlloc@@NSS_3.6 + 992: 000000000006a2dc 136 FUNC GLOBAL DEFAULT 12 SEC_DestroyCrl@@NSS_3.2 + 993: 000000000006ee5c 96 FUNC GLOBAL DEFAULT 12 SEC_CertNicknameConflict@@NSS_3.3 + 994: 000000000005a1a0 24 FUNC GLOBAL DEFAULT 12 PK11_ReferenceSymKey@@NSS_3.2 + 995: 000000000001fc24 4 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Create@@NSS_3.2 + 996: 000000000001fc78 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECOID_AlgorithmIDTemplate@@NSS_3.2 + 997: 000000000001fac0 4 FUNC GLOBAL DEFAULT 12 PORT_ZFree@@NSS_3.2 + 998: 0000000000068754 540 FUNC GLOBAL DEFAULT 12 CERT_ImportCerts@@NSS_3.2 + 999: 00000000000344d8 8 FUNC GLOBAL DEFAULT 12 PK11_ProtectedAuthenticationPath@@NSS_3.4 + 1000: 000000000007008c 64 FUNC GLOBAL DEFAULT 12 CERT_EncodeNoticeReference@@NSS_3.12 + 1001: 000000000003453c 76 FUNC GLOBAL DEFAULT 12 PK11_NeedPWInit@@NSS_3.3 + 1002: 0000000000037eb8 284 FUNC GLOBAL DEFAULT 12 PK11_FindKeyByAnyCert@@NSS_3.2 + 1003: 000000000002b4bc 324 FUNC GLOBAL DEFAULT 12 CERT_EncodeCRLDistributionPoints@@NSS_3.5 + 1004: 0000000000038580 140 FUNC GLOBAL DEFAULT 12 PK11_ListCertsInSlot@@NSS_3.3 + 1005: 00000000000e5f98 32 OBJECT GLOBAL DEFAULT 14 SEC_BooleanTemplate@@NSS_3.4 + 1006: 000000000002f794 128 FUNC GLOBAL DEFAULT 12 VFY_DestroyContext@@NSS_3.2 + 1007: 000000000005f038 404 FUNC GLOBAL DEFAULT 12 PK11_GetTokenURI@@NSS_3.31 + 1008: 00000000000605c0 644 FUNC GLOBAL DEFAULT 12 PK11_FindSlotsByNames@@NSS_3.9 + 1009: 000000000013ca00 192 OBJECT GLOBAL DEFAULT 20 CERT_CertificateRequestTemplate@@NSS_3.2 + 1010: 00000000000e6018 32 OBJECT GLOBAL DEFAULT 14 SEC_ObjectIDTemplate@@NSS_3.2 + 1011: 000000000003024c 48 FUNC GLOBAL DEFAULT 12 VFY_VerifyDataDirect@@NSS_3.12 + 1012: 0000000000023780 4 FUNC GLOBAL DEFAULT 12 CERT_PostOCSPRequest@@NSS_3.15 + 1013: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.3.1 + 1014: 000000000006c70c 12 FUNC GLOBAL DEFAULT 12 CERT_GetPrevNameConstraint@@NSS_3.10 + 1015: 0000000000069528 128 FUNC GLOBAL DEFAULT 12 CERT_FinishExtensions@@NSS_3.5 + 1016: 0000000000060fb0 200 FUNC GLOBAL DEFAULT 12 PK11_RandomUpdate@@NSS_3.2 + 1017: 000000000004c584 32 FUNC GLOBAL DEFAULT 12 PK11_MapSignKeyType@@NSS_3.11 + 1018: 000000000005721c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_PointerToEncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 1019: 000000000003b180 236 FUNC GLOBAL DEFAULT 12 PK11_HashBuf@@NSS_3.2 + 1020: 000000000006fddc 20 FUNC GLOBAL DEFAULT 12 CERT_DestroyUserNotice@@NSS_3.10 + 1021: 00000000000206f8 16 FUNC GLOBAL DEFAULT 12 CERT_StartCertificateRequestAttributes@@NSS_3.10 + 1022: 000000000013d8a0 160 OBJECT GLOBAL DEFAULT 20 CERT_SignedDataTemplate@@NSS_3.2 + 1023: 0000000000062f3c 428 FUNC GLOBAL DEFAULT 12 SECMOD_WaitForAnyTokenEvent@@NSS_3.9.3 + 1024: 000000000005b6a8 456 FUNC GLOBAL DEFAULT 12 PK11_PubWrapSymKeyWithMechanism@@NSS_3.59 + 1025: 00000000000617e0 260 FUNC GLOBAL DEFAULT 12 SECMOD_FindSlot@@NSS_3.4 + 1026: 0000000000071824 4 FUNC GLOBAL DEFAULT 12 CERT_DecodeNameConstraintsExtension@@NSS_3.10 + 1027: 000000000001fb10 4 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTag@@NSS_3.2 + 1028: 0000000000067f30 8 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListHead@@NSS_3.15 + 1029: 000000000006feb4 20 FUNC GLOBAL DEFAULT 12 CERT_DestroyOidSequence@@NSS_3.9 + 1030: 000000000004b2c0 8 FUNC GLOBAL DEFAULT 12 PK11_ParamFromIV@@NSS_3.2 + 1031: 000000000001fb5c 4 FUNC GLOBAL DEFAULT 12 SGN_CopyDigestInfo@@NSS_3.2 + 1032: 0000000000039df8 360 FUNC GLOBAL DEFAULT 12 PK11_CloneContext@@NSS_3.2 + 1033: 0000000000051608 188 FUNC GLOBAL DEFAULT 12 PK11_PubEncryptPKCS1@@NSS_3.9.3 + 1034: 0000000000037b40 184 FUNC GLOBAL DEFAULT 12 PK11_FindEncodedCertInSlot@@NSS_3.55 + 1035: 000000000005c0f4 184 FUNC GLOBAL DEFAULT 12 PK11_DeriveWithFlags@@NSS_3.2 + 1036: 000000000013dfb8 192 OBJECT GLOBAL DEFAULT 20 SEC_SignedCertificateTemplate@@NSS_3.4 + 1037: 000000000006f0dc 20 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddrCX@@NSS_3.33 + 1038: 000000000001fc2c 4 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Update@@NSS_3.2 + 1039: 00000000000e5fd8 32 OBJECT GLOBAL DEFAULT 14 SEC_AnyTemplate@@NSS_3.2 + 1040: 00000000000694ac 124 FUNC GLOBAL DEFAULT 12 CERT_EncodeAndAddBitStrExtension@@NSS_3.5 + 1041: 00000000000616e0 16 FUNC GLOBAL DEFAULT 12 SECMOD_GetDBModuleList@@NSS_3.9 + 1042: 000000000005ef20 72 FUNC GLOBAL DEFAULT 12 PK11_UserDisableSlot@@NSS_3.8 + 1043: 000000000002c0e0 92 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPrivateKey@@NSS_3.2 + 1044: 000000000005a914 448 FUNC GLOBAL DEFAULT 12 PK11_ListFixedKeysInSlot@@NSS_3.4 + 1045: 0000000000032998 36 FUNC GLOBAL DEFAULT 12 PK11_ExportEncryptedPrivKeyInfo@@NSS_3.9 + 1046: 0000000000051740 128 FUNC GLOBAL DEFAULT 12 PK11_PubEncrypt@@NSS_3.16.2 + 1047: 00000000000569dc 8 FUNC GLOBAL DEFAULT 12 PBE_DestroyContext@@NSS_3.3 + 1048: 000000000002fd00 112 FUNC GLOBAL DEFAULT 12 VFY_Begin@@NSS_3.2 + 1049: 000000000001fbb4 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetFilterProc@@NSS_3.2 + 1050: 000000000004e1bc 92 FUNC GLOBAL DEFAULT 12 PK11_CreateMergeLog@@NSS_3.12 + 1051: 00000000000e6b10 128 OBJECT GLOBAL DEFAULT 14 SECKEY_RSAPublicKeyTemplate@@NSS_3.2 + 1052: 0000000000033b34 48 FUNC GLOBAL DEFAULT 12 PK11_GenerateKeyPair@@NSS_3.2 + 1053: 0000000000051f5c 84 FUNC GLOBAL DEFAULT 12 PK11_DestroyGenericObject@@NSS_3.9.2 + 1054: 000000000002d898 120 FUNC GLOBAL DEFAULT 12 SECKEY_CopyPrivateKeyInfo@@NSS_3.2 + 1055: 00000000000362f8 160 FUNC GLOBAL DEFAULT 12 PK11_TraverseSlotCerts@@NSS_3.4 + 1056: 0000000000024a88 12 FUNC GLOBAL DEFAULT 12 CERT_GetOCSPStatusForCertID@@NSS_3.6 + 1057: 0000000000037d38 384 FUNC GLOBAL DEFAULT 12 PK11_FindObjectForCert@@NSS_3.77 + 1058: 000000000001fbe8 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetStreaming@@NSS_3.2 + 1059: 0000000000051edc 8 FUNC GLOBAL DEFAULT 12 PK11_GetPrevGenericObject@@NSS_3.9.2 + 1060: 000000000005d4bc 228 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKeyWithMechanism@@NSS_3.59 + 1061: 0000000000024b1c 132 FUNC GLOBAL DEFAULT 12 CERT_DisableOCSPChecking@@NSS_3.3 + 1062: 000000000005a540 244 FUNC GLOBAL DEFAULT 12 PK11_ImportDataKey@@NSS_3.58 + 1063: 000000000001fc08 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeInteger@@NSS_3.2 + 1064: 0000000000028eb4 20 FUNC GLOBAL DEFAULT 12 CERT_VerifyCert@@NSS_3.2 + 1065: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.19.1 + 1066: 000000000001fbd8 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderFinish@@NSS_3.2 + 1067: 000000000001fcc0 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IA5StringTemplate@@NSS_3.2 + 1068: 0000000000036c04 344 FUNC GLOBAL DEFAULT 12 PK11_KeyForCertExists@@NSS_3.3 + 1069: 0000000000065100 328 FUNC GLOBAL DEFAULT 12 CERT_NameToAsciiInvertible@@NSS_3.12.1 + 1070: 0000000000034168 432 FUNC GLOBAL DEFAULT 12 PK11_InitPin@@NSS_3.2 + 1071: 0000000000053f58 2320 FUNC GLOBAL DEFAULT 12 SECMOD_CreateModuleEx@@NSS_3.21 + 1072: 0000000000071294 244 FUNC GLOBAL DEFAULT 12 CERT_DecodeAuthKeyID@@NSS_3.10 + 1073: 0000000000035fec 92 FUNC GLOBAL DEFAULT 12 PK11_GetCertFromPrivateKey@@NSS_3.9.3 + 1074: 0000000000024c08 376 FUNC GLOBAL DEFAULT 12 CERT_SetOCSPDefaultResponder@@NSS_3.3 + 1075: 000000000001f2fc 120 FUNC GLOBAL DEFAULT 12 NSS_NoDB_Init@@NSS_3.2 + 1076: 0000000000071768 172 FUNC GLOBAL DEFAULT 12 CERT_DecodeAltNameExtension@@NSS_3.10 + 1077: 000000000001fbd4 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderUpdate@@NSS_3.2 + 1078: 000000000002b600 372 FUNC GLOBAL DEFAULT 12 CERT_DecodeCRLDistributionPoints@@NSS_3.10 + 1079: 000000000006f0c8 20 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddr@@NSS_3.2 + 1080: 000000000006204c 224 FUNC GLOBAL DEFAULT 12 SECMOD_DestroyModule@@NSS_3.3 + 1081: 0000000000020708 288 FUNC GLOBAL DEFAULT 12 CERT_FinishCertificateRequestAttributes@@NSS_3.10 + 1082: 0000000000034318 276 FUNC GLOBAL DEFAULT 12 PK11_ChangePW@@NSS_3.2 + 1083: 00000000000363f8 224 FUNC GLOBAL DEFAULT 12 PK11_FindCertsFromURI@@NSS_3.31 + 1084: 000000000005ef68 28 FUNC GLOBAL DEFAULT 12 PK11_UserEnableSlot@@NSS_3.8 + 1085: 000000000006246c 12 FUNC GLOBAL DEFAULT 12 SECMOD_AddNewModule@@NSS_3.3 + 1086: 000000000006fdf0 196 FUNC GLOBAL DEFAULT 12 CERT_DecodeOidSequence@@NSS_3.2 + 1087: 000000000006ebb4 12 FUNC GLOBAL DEFAULT 12 CERT_FindCertByIssuerAndSN@@NSS_3.2 + 1088: 0000000000028808 992 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertificate@@NSS_3.6 + 1089: 000000000004dff8 452 FUNC GLOBAL DEFAULT 12 PK11_MergeTokens@@NSS_3.12 + 1090: 0000000000038f34 144 FUNC GLOBAL DEFAULT 12 PK11_DestroyContext@@NSS_3.2 + 1091: 00000000000378e0 112 FUNC GLOBAL DEFAULT 12 PK11_ImportCertForKeyToSlot@@NSS_3.2 + 1092: 000000000006578c 16 FUNC GLOBAL DEFAULT 12 CERT_GetLocalityName@@NSS_3.2 + 1093: 000000000007000c 64 FUNC GLOBAL DEFAULT 12 CERT_EncodeCertPoliciesExtension@@NSS_3.12 + 1094: 000000000005c1ac 240 FUNC GLOBAL DEFAULT 12 PK11_DeriveWithFlagsPerm@@NSS_3.9 + 1095: 00000000000678ec 252 FUNC GLOBAL DEFAULT 12 CERT_CompareValidityTimes@@NSS_3.11 + 1096: 0000000000061d68 200 FUNC GLOBAL DEFAULT 12 SECMOD_FindModule@@NSS_3.4 + 1097: 000000000003016c 224 FUNC GLOBAL DEFAULT 12 VFY_VerifyDigestWithAlgorithmID@@NSS_3.12 + 1098: 000000000002af00 12 FUNC GLOBAL DEFAULT 12 CERT_GetClassicOCSPEnabledHardFailurePolicy@@NSS_3.12 + 1099: 000000000005a634 488 FUNC GLOBAL DEFAULT 12 PK11_ImportSymKeyWithFlags@@NSS_3.4 + 1100: 000000000001fbf4 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearTakeFromBuf@@NSS_3.2 + 1101: 0000000000070538 116 FUNC GLOBAL DEFAULT 12 CERT_CreateAVA@@NSS_3.2.1 + 1102: 00000000000e5fb8 32 OBJECT GLOBAL DEFAULT 14 SEC_BMPStringTemplate@@NSS_3.2 + 1103: 0000000000052340 172 FUNC GLOBAL DEFAULT 12 PK11_ReadRawAttributes@@NSS_3.52 + 1104: 000000000002c9f8 272 FUNC GLOBAL DEFAULT 12 SECKEY_CreateDHPrivateKey@@NSS_3.3 + 1105: 000000000002d910 100 FUNC GLOBAL DEFAULT 12 SECKEY_CopyEncryptedPrivateKeyInfo@@NSS_3.2 + 1106: 0000000000057d90 848 FUNC GLOBAL DEFAULT 12 PK11_ExportPrivKeyInfo@@NSS_3.16.1 + 1107: 000000000001fd2c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UTF8StringTemplate@@NSS_3.4 + 1108: 0000000000078dcc 136 FUNC GLOBAL DEFAULT 12 nss_DumpCertificateCacheInfo@@NSS_3.4 + 1109: 000000000013c960 128 OBJECT GLOBAL DEFAULT 20 sgn_DigestInfoTemplate@@NSS_3.2 + 1110: 000000000003cfc0 376 FUNC GLOBAL DEFAULT 12 PK11_HPKE_ExportSecret@@NSS_3.58 + 1111: 0000000000063628 548 FUNC GLOBAL DEFAULT 12 SECMOD_RestartModules@@NSS_3.12.9 + 1112: 0000000000031954 256 FUNC GLOBAL DEFAULT 12 PK11_ConvertSessionPrivKeyToTokenPrivKey@@NSS_3.6 + 1113: 000000000004f4f4 184 FUNC GLOBAL DEFAULT 12 PK11_BlockData@@NSS_3.2 + 1114: 0000000000027130 800 FUNC GLOBAL DEFAULT 12 CERT_VerifySignedDataWithPublicKey@@NSS_3.7 + 1115: 00000000000609f0 288 FUNC GLOBAL DEFAULT 12 PK11_TokenExists@@NSS_3.2 + 1116: 000000000003d8b0 512 FUNC GLOBAL DEFAULT 12 PK11_HPKE_Open@@NSS_3.58 + 1117: 000000000002bf6c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_RSAPSSParamsTemplate@@NSS_3.13 + 1118: 00000000000588f0 192 FUNC GLOBAL DEFAULT 12 PK11_PQG_NewParams@@NSS_3.3 + 1119: 000000000004ee58 160 FUNC GLOBAL DEFAULT 12 SEC_DeletePermCRL@@NSS_3.2 + 1120: 0000000000031c7c 256 FUNC GLOBAL DEFAULT 12 PK11_MakeIDFromPubKey@@NSS_3.3 + 1121: 0000000000026864 296 FUNC GLOBAL DEFAULT 12 CERT_DupDistNames@@NSS_3.12.6 + 1122: 000000000004c314 624 FUNC GLOBAL DEFAULT 12 PK11_MapPBEMechanismToCryptoMechanism@@NSS_3.2 + 1123: 0000000000039cdc 112 FUNC GLOBAL DEFAULT 12 PK11_CreateContextByPrivKey@@NSS_3.65 + 1124: 000000000001ded0 152 FUNC GLOBAL DEFAULT 12 PK11_ConfigurePKCS11@@NSS_3.2 + 1125: 000000000002af0c 12 FUNC GLOBAL DEFAULT 12 CERT_GetClassicOCSPDisabledPolicy@@NSS_3.12 + 1126: 000000000002d5a8 24 FUNC GLOBAL DEFAULT 12 SECKEY_DestroySubjectPublicKeyInfo@@NSS_3.2 + 1127: 000000000001fafc 4 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_UTF8ConversionFunction@@NSS_3.2 + 1128: 000000000013de18 32 OBJECT GLOBAL DEFAULT 20 CERT_SequenceOfCertExtensionTemplate@@NSS_3.10 + 1129: 000000000006e618 684 FUNC GLOBAL DEFAULT 12 __CERT_AddTempCertToPerm@@NSS_3.4 + 1130: 000000000001fb20 4 FUNC GLOBAL DEFAULT 12 SECOID_GetAlgorithmTag@@NSS_3.2 + 1131: 000000000002e924 8 FUNC GLOBAL DEFAULT 12 SEC_SignData@@NSS_3.2 + 1132: 0000000000054870 12 FUNC GLOBAL DEFAULT 12 SECMOD_GetSkipFirstFlag@@NSS_3.12.5 + 1133: 0000000000065a4c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SequenceOfCertExtensionTemplate@@NSS_3.10 + 1134: 0000000000068108 244 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListByUsage@@NSS_3.4 + 1135: 000000000002c13c 100 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPublicKey@@NSS_3.2 + 1136: 000000000001fae8 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaRelease@@NSS_3.2 + 1137: 0000000000065fcc 16 FUNC GLOBAL DEFAULT 12 CERT_GetSlopTime@@NSS_3.2 + 1138: 0000000000036d5c 88 FUNC GLOBAL DEFAULT 12 PK11_KeyForDERCertExists@@NSS_3.3 + 1139: 0000000000027450 88 FUNC GLOBAL DEFAULT 12 CERT_VerifySignedDataWithPublicKeyInfo@@NSS_3.7 + 1140: 0000000000056b40 20 FUNC GLOBAL DEFAULT 12 PK11_CreatePBEV2AlgorithmID@@NSS_3.12 + 1141: 0000000000022dc8 460 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPRequest@@NSS_3.6 + 1142: 000000000006803c 204 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListSorted@@NSS_3.12.5 + 1143: 000000000006ebb0 4 FUNC GLOBAL DEFAULT 12 __CERT_NewTempCertificate@@NSS_3.2 + 1144: 0000000000058578 52 FUNC GLOBAL DEFAULT 12 PK11_PQG_ParamGenSeedLen@@NSS_3.3 + 1145: 00000000000589c8 12 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetBaseFromParams@@NSS_3.3 + 1146: 000000000001fd44 184 FUNC GLOBAL DEFAULT 12 CERT_Hexify@@NSS_3.2 + 1147: 000000000006148c 16 FUNC GLOBAL DEFAULT 12 PK11_SlotGetLastFIPSStatus@@NSS_3.66 + 1148: 000000000002d974 8 FUNC GLOBAL DEFAULT 12 SECKEY_GetPrivateKeyType@@NSS_3.3 + 1149: 00000000000657ac 16 FUNC GLOBAL DEFAULT 12 CERT_GetOrgName@@NSS_3.2 + 1150: 0000000000067854 4 FUNC GLOBAL DEFAULT 12 __CERT_DecodeDERCertificate@@NSS_3.2 + 1151: 00000000000254bc 372 FUNC GLOBAL DEFAULT 12 CERT_CacheOCSPResponseFromSideChannel@@NSS_3.12.6 + 1152: 000000000005888c 100 FUNC GLOBAL DEFAULT 12 PK11_PQG_DestroyVerify@@NSS_3.3 + 1153: 0000000000029b40 28 FUNC GLOBAL DEFAULT 12 CERT_SetUsePKIXForValidation@@NSS_3.12 + 1154: 000000000002dcd8 64 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPublicKeyList@@NSS_3.4 + 1155: 0000000000029b5c 16 FUNC GLOBAL DEFAULT 12 CERT_GetUsePKIXForValidation@@NSS_3.12 + 1156: 0000000000049b98 152 FUNC GLOBAL DEFAULT 12 PK11_GetBestWrapMechanism@@NSS_3.2 + 1157: 000000000005a1e4 16 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyNickname@@NSS_3.4 + 1158: 000000000001fb4c 4 FUNC GLOBAL DEFAULT 12 SECITEM_FreeItem@@NSS_3.2 + 1159: 0000000000025904 120 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPSingleResponseRevoked@@NSS_3.14.1 + 1160: 000000000006c4b8 116 FUNC GLOBAL DEFAULT 12 CERT_GetGeneralNameTypeFromString@@NSS_3.16.2 + 1161: 000000000001fb1c 4 FUNC GLOBAL DEFAULT 12 SECOID_CopyAlgorithmID@@NSS_3.2 + 1162: 00000000000681fc 116 FUNC GLOBAL DEFAULT 12 CERT_IsUserCert@@NSS_3.6 + 1163: 000000000001fbbc 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetNotifyProc@@NSS_3.2 + 1164: 000000000004f3ac 328 FUNC GLOBAL DEFAULT 12 PK11_ImportCRL@@NSS_3.6 + 1165: 000000000003860c 856 FUNC GLOBAL DEFAULT 12 PK11_FindCertAndKeyByRecipientListNew@@NSS_3.2 + 1166: 000000000003903c 156 FUNC GLOBAL DEFAULT 12 _PK11_ContextSetAEADSimulation@@NSS_3.52 + 1167: 0000000000061c38 60 FUNC GLOBAL DEFAULT 12 SECMOD_ReferenceModule@@NSS_3.3 + 1168: 0000000000050d14 560 FUNC GLOBAL DEFAULT 12 PK11_SignWithMechanism@@NSS_3.22 + 1169: 00000000000307b0 52 FUNC GLOBAL DEFAULT 12 DSAU_EncodeDerSig@@NSS_3.2 + 1170: 0000000000026fe0 268 FUNC GLOBAL DEFAULT 12 CERT_DupCertList@@NSS_3.2 + 1171: 000000000001fae4 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaMark@@NSS_3.2 + 1172: 000000000001f280 124 FUNC GLOBAL DEFAULT 12 NSS_InitWithMerge@@NSS_3.12 + 1173: 000000000001fb98 4 FUNC GLOBAL DEFAULT 12 CERT_GenTime2FormattedAscii@@NSS_3.2 + 1174: 0000000000071648 172 FUNC GLOBAL DEFAULT 12 CERT_DecodePrivKeyUsagePeriodExtension@@NSS_3.10 + 1175: 0000000000056a00 228 FUNC GLOBAL DEFAULT 12 PK11_CreatePBEParams@@NSS_3.3.1 + 1176: 000000000001fb34 4 FUNC GLOBAL DEFAULT 12 SECITEM_AllocItem@@NSS_3.2 + 1177: 000000000001facc 4 FUNC GLOBAL DEFAULT 12 PORT_GetError@@NSS_3.2 + 1178: 0000000000067b78 472 FUNC GLOBAL DEFAULT 12 CERT_DecodeTrustString@@NSS_3.4 + 1179: 000000000001fb70 4 FUNC GLOBAL DEFAULT 12 DER_TimeToUTCTime@@NSS_3.2 + 1180: 000000000002b884 148 FUNC GLOBAL DEFAULT 12 HASH_GetHashOidTagByHashType@@NSS_3.43 + 1181: 000000000005f1ec 12 FUNC GLOBAL DEFAULT 12 PK11_GetModuleID@@NSS_3.2 + 1182: 000000000005ea1c 156 FUNC GLOBAL DEFAULT 12 PK11_UpdateSlotAttribute@@NSS_3.8 + 1183: 000000000001fba4 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderStart@@NSS_3.2 + 1184: 000000000003ce60 352 FUNC GLOBAL DEFAULT 12 PK11_HPKE_Deserialize@@NSS_3.58 + 1185: 000000000001fc14 4 FUNC GLOBAL DEFAULT 12 ATOB_AsciiToData@@NSS_3.2 + 1186: 000000000002bd20 12 FUNC GLOBAL DEFAULT 12 HASH_GetType@@NSS_3.12 + 1187: 000000000001fbac 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderFinish@@NSS_3.2 + 1188: 000000000001fab0 4 FUNC GLOBAL DEFAULT 12 PORT_Alloc@@NSS_3.2 + 1189: 000000000005f1d4 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotSeries@@NSS_3.2 + 1190: 00000000000274a8 136 FUNC GLOBAL DEFAULT 12 CERT_VerifySignedData@@NSS_3.4 + 1191: 0000000000058a8c 12 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetSeedFromVerify@@NSS_3.3 + 1192: 000000000001fb08 4 FUNC GLOBAL DEFAULT 12 NSS_PutEnv@@NSS_3.2 + 1193: 0000000000034b08 112 FUNC GLOBAL DEFAULT 12 PK11_Authenticate@@NSS_3.2 + 1194: 000000000005e178 136 FUNC GLOBAL DEFAULT 12 PK11_GetNextSafe@@NSS_3.4 + 1195: 00000000000517c0 1308 FUNC GLOBAL DEFAULT 12 PK11_UnwrapPrivKey@@NSS_3.3 + 1196: 000000000001fba8 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderUpdate@@NSS_3.2 + 1197: 0000000000027540 308 FUNC GLOBAL DEFAULT 12 CERT_FindCertIssuer@@NSS_3.3 + 1198: 000000000001fab4 4 FUNC GLOBAL DEFAULT 12 PORT_Realloc@@NSS_3.2 + 1199: 000000000001fc50 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockRead@@NSS_3.2 + 1200: 000000000006b9c4 172 FUNC GLOBAL DEFAULT 12 SEC_FindCrlByDERCert@@NSS_3.2 + 1201: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.10 + 1202: 000000000003d144 728 FUNC GLOBAL DEFAULT 12 PK11_HPKE_SetupR@@NSS_3.58 + 1203: 000000000002cd58 216 FUNC GLOBAL DEFAULT 12 SECKEY_CopyPrivateKey@@NSS_3.2 + 1204: 000000000002c648 4 FUNC GLOBAL DEFAULT 12 SECKEY_ExtractPublicKey@@NSS_3.3 + 1205: 000000000003d41c 672 FUNC GLOBAL DEFAULT 12 PK11_HPKE_SetupS@@NSS_3.58 + 1206: 0000000000033fac 92 FUNC GLOBAL DEFAULT 12 PK11_Logout@@NSS_3.3 + 1207: 0000000000028ec8 84 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertificateNow@@NSS_3.6 + 1208: 00000000000616f0 16 FUNC GLOBAL DEFAULT 12 SECMOD_GetDefaultModuleListLock@@NSS_3.3 + 1209: 0000000000030824 8 FUNC GLOBAL DEFAULT 12 DSAU_DecodeDerSigToLen@@NSS_3.9 + 1210: 000000000001fb7c 4 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToAscii@@NSS_3.2 + 1211: 000000000006a364 144 FUNC GLOBAL DEFAULT 12 SEC_LookupCrls@@NSS_3.2 + 1212: 000000000002ccb4 164 FUNC GLOBAL DEFAULT 12 SECKEY_SignatureLen@@NSS_3.11.2 + 1213: 000000000001fb30 4 FUNC GLOBAL DEFAULT 12 SECOID_AddEntry@@NSS_3.10 + 1214: 0000000000024074 336 FUNC GLOBAL DEFAULT 12 CERT_GetOCSPAuthorityInfoAccessLocation@@NSS_3.4 + 1215: 000000000001fad8 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaZAlloc@@NSS_3.2 + 1216: 000000000001fb9c 4 FUNC GLOBAL DEFAULT 12 DER_DecodeTimeChoice@@NSS_3.9 + 1217: 000000000001fc38 4 FUNC GLOBAL DEFAULT 12 NSSBase64_DecodeBuffer@@NSS_3.4 + 1218: 0000000000038a3c 60 FUNC GLOBAL DEFAULT 12 __PK11_SetCertificateNickname@@NSS_3.18 + 1219: 000000000001fb3c 4 FUNC GLOBAL DEFAULT 12 SECITEM_ItemsAreEqual@@NSS_3.8 + 1220: 00000000000e5e98 128 OBJECT GLOBAL DEFAULT 14 SECOID_AlgorithmIDTemplate@@NSS_3.2 + 1221: 000000000005f1f8 288 FUNC GLOBAL DEFAULT 12 PK11_GetSlotInfo@@NSS_3.4 + 1222: 00000000000344d0 8 FUNC GLOBAL DEFAULT 12 PK11_GetMinimumPwdLength@@NSS_3.4 + 1223: 00000000000579a8 604 FUNC GLOBAL DEFAULT 12 PK11_ImportPrivateKeyInfoAndReturnKey@@NSS_3.4 + 1224: 00000000000657dc 16 FUNC GLOBAL DEFAULT 12 CERT_GetCertUid@@NSS_3.2 + 1225: 000000000006f840 72 FUNC GLOBAL DEFAULT 12 CERT_GetCertIsTemp@@NSS_3.31 + 1226: 000000000002bc2c 32 FUNC GLOBAL DEFAULT 12 HASH_Update@@NSS_3.4 + 1227: 00000000000656e4 152 FUNC GLOBAL DEFAULT 12 CERT_GetCommonName@@NSS_3.2 + 1228: 000000000006ec54 92 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificate@@NSS_3.2 + 1229: 0000000000039a74 144 FUNC GLOBAL DEFAULT 12 PK11_CreateContextBySymKey@@NSS_3.2 + 1230: 000000000004b7ec 40 FUNC GLOBAL DEFAULT 12 PK11_AlgtagToMechanism@@NSS_3.2 + 1231: 0000000000066e60 36 FUNC GLOBAL DEFAULT 12 CERT_CompareCerts@@NSS_3.12.3 + 1232: 000000000001fc4c 4 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockWrite@@NSS_3.2 + 1233: 000000000006c700 12 FUNC GLOBAL DEFAULT 12 CERT_GetNextNameConstraint@@NSS_3.10 + 1234: 0000000000037958 156 FUNC GLOBAL DEFAULT 12 PK11_FortezzaHasKEA@@NSS_3.2 + 1235: 0000000000037c68 208 FUNC GLOBAL DEFAULT 12 PK11_FindPrivateKeyFromCert@@NSS_3.2 + 1236: 000000000005de0c 24 FUNC GLOBAL DEFAULT 12 PK11_ReferenceSlot@@NSS_3.3 + 1237: 00000000000390e0 240 FUNC GLOBAL DEFAULT 12 PK11_SaveContext@@NSS_3.2 + 1238: 0000000000065a40 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SignedCertificateTemplate@@NSS_3.4 + 1239: 000000000013c920 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToOctetStringTemplate@@NSS_3.2 + 1240: 000000000001fb80 4 FUNC GLOBAL DEFAULT 12 DER_UTCDayToAscii@@NSS_3.2 + 1241: 000000000003161c 192 FUNC GLOBAL DEFAULT 12 PK11_GetPrivateModulusLen@@NSS_3.2 + 1242: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.10.2 + 1243: 000000000006fa08 20 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificatePoliciesExtension@@NSS_3.2 + 1244: 000000000006ff8c 64 FUNC GLOBAL DEFAULT 12 CERT_EncodePolicyConstraintsExtension@@NSS_3.12 + 1245: 0000000000032d9c 904 FUNC GLOBAL DEFAULT 12 PK11_ImportEncryptedPrivateKeyInfoAndReturnKey@@NSS_3.13.2 + 1246: 000000000005aba0 8 FUNC GLOBAL DEFAULT 12 PK11_GetKeyData@@NSS_3.3 + 1247: 000000000002ce30 444 FUNC GLOBAL DEFAULT 12 SECKEY_CopyPublicKey@@NSS_3.6 + 1248: 0000000000050cc8 76 FUNC GLOBAL DEFAULT 12 PK11_Verify@@NSS_3.2 + 1249: 0000000000037a94 172 FUNC GLOBAL DEFAULT 12 PK11_FindBestKEAMatch@@NSS_3.2 + 1250: 00000000000291a0 332 FUNC GLOBAL DEFAULT 12 CERT_NicknameStringsFromCertList@@NSS_3.4 + 1251: 000000000001fbc0 4 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearNotifyProc@@NSS_3.2 + 1252: 000000000005efbc 8 FUNC GLOBAL DEFAULT 12 PK11_IsInternal@@NSS_3.2 + 1253: 00000000000714d8 300 FUNC GLOBAL DEFAULT 12 CERT_DecodeBasicConstraintValue@@NSS_3.2 + 1254: 0000000000032604 36 FUNC GLOBAL DEFAULT 12 PK11_LoadPrivKey@@NSS_3.4 + 1255: 00000000000e5f78 32 OBJECT GLOBAL DEFAULT 14 SEC_IntegerTemplate@@NSS_3.2 + 1256: 000000000006577c 16 FUNC GLOBAL DEFAULT 12 CERT_GetCountryName@@NSS_3.2 + 1257: 000000000002fb00 4 FUNC GLOBAL DEFAULT 12 VFY_CreateContextDirect@@NSS_3.12 + 1258: 00000000000569d8 4 FUNC GLOBAL DEFAULT 12 PBE_GenerateBits@@NSS_3.3 + 1259: 000000000006bf3c 560 FUNC GLOBAL DEFAULT 12 CERT_UncacheCRL@@NSS_3.10 + 1260: 000000000001fd14 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SetOfAnyTemplate@@NSS_3.2 + 1261: 0000000000067ab0 108 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertArray@@NSS_3.2 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnssutil3.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnssutil3.so.txt new file mode 100644 index 000000000000..6e9b2d38b694 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libnssutil3.so.txt @@ -0,0 +1,349 @@ +Library: /lib64/libnssutil3.so +Package: nss-util-3.90.0-1.el7_9.aarch64 + + +Symbol table '.dynsym' contains 343 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000c580 0 SECTION LOCAL DEFAULT 10 + 2: 0000000000039b90 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (20) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLock + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (20) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyCondVar + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (20) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (20) + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaAllocate + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.17 (20) + 12: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (20) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncasecmp + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ErrorInstallTable + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetCurrentThread + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.17 (20) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetDirectorySeparator + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareValues + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GMTParameters + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcasecmp + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.17 (20) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (20) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_FreeArenaPool + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Access + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetEnvSecure + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (20) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ImplodeTime + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Realloc + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (21) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyLock + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (20) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.17 (20) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (20) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopen@GLIBC_2.17 (20) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Rename + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnce + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableDestroy + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyCondVar + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.17 (20) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putenv@GLIBC_2.17 (20) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (20) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (21) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (20) + 44: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 45: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (22) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaRelease + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_NewHashTable + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Delete + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookup + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableAdd + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.17 (20) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strpbrk + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (20) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.17 (20) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (20) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.17 (20) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (20) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_WaitCondVar + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ExplodeTime + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strlen + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_FormatTime + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewCondVar + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetError + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetLibraryFilePathname + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_FinishArenaPool + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ClearArenaPool + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Lock + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_InitArenaPool + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (20) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (20) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (20) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncat@GLIBC_2.17 (20) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LocalTimeParameters + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyAllCondVar + 75: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.17 (20) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaGrow + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_snprintf + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (20) + 81: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LoadLibraryWithFlags + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf_free + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (20) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookupConst + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Free + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (20) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Unlock + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Calloc + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetError + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Malloc + 92: 0000000000015ba4 80 FUNC GLOBAL DEFAULT 12 SECITEM_ZfreeItem_Util@@NSSUTIL_3.12 + 93: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.25 + 94: 000000000001562c 252 FUNC GLOBAL DEFAULT 12 SECITEM_ReallocItemV2@@NSSUTIL_3.15 + 95: 000000000001b558 644 FUNC GLOBAL DEFAULT 12 _NSSUTIL_GetSecmodName@@NSSUTIL_3.14 + 96: 0000000000020a68 32 OBJECT GLOBAL DEFAULT 14 SEC_T61StringTemplate@@NSSUTIL_3.12 + 97: 0000000000024800 32 OBJECT GLOBAL DEFAULT 14 SEC_GeneralizedTimeTemplate_Util@@NSSUTIL_3.12 + 98: 0000000000010120 120 FUNC GLOBAL DEFAULT 12 ATOB_AsciiToData_Util@@NSSUTIL_3.12 + 99: 0000000000011c28 260 FUNC GLOBAL DEFAULT 12 SECOID_SetAlgorithmID_Util@@NSSUTIL_3.12 + 100: 00000000000107b8 556 FUNC GLOBAL DEFAULT 12 NSSBase64_EncodeItem_Util@@NSSUTIL_3.12 + 101: 000000000001c9e0 28 FUNC GLOBAL DEFAULT 12 PK11URI_GetQueryAttribute@@NSSUTIL_3.31 + 102: 00000000000153b4 72 FUNC GLOBAL DEFAULT 12 SEC_ASN1Encode_Util@@NSSUTIL_3.12 + 103: 0000000000017168 60 FUNC GLOBAL DEFAULT 12 PORT_ZFree_Util@@NSSUTIL_3.12 + 104: 000000000001559c 144 FUNC GLOBAL DEFAULT 12 SECITEM_ReallocItem@@NSSUTIL_3.12.3 + 105: 0000000000016d88 64 FUNC GLOBAL DEFAULT 12 DER_TimeChoiceDayToAscii_Util@@NSSUTIL_3.12 + 106: 00000000000246e0 32 OBJECT GLOBAL DEFAULT 14 SEC_BooleanTemplate_Util@@NSSUTIL_3.12 + 107: 0000000000017b3c 60 FUNC GLOBAL DEFAULT 12 NSS_SecureSelect@@NSSUTIL_3.90 + 108: 00000000000194a0 48 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgIsBlank@@NSSUTIL_3.14 + 109: 0000000000015ef0 204 FUNC GLOBAL DEFAULT 12 SECITEM_DupArray@@NSSUTIL_3.15 + 110: 0000000000019d20 136 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgReadLong@@NSSUTIL_3.14 + 111: 0000000000015d38 4 FUNC GLOBAL DEFAULT 12 SECITEM_HashCompare@@NSSUTIL_3.12 + 112: 00000000000173b8 164 FUNC GLOBAL DEFAULT 12 PORT_NewArena_Util@@NSSUTIL_3.12 + 113: 0000000000013f30 16 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetFilterProc_Util@@NSSUTIL_3.12 + 114: 00000000000154cc 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeInteger_Util@@NSSUTIL_3.12 + 115: 000000000001695c 28 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTagDescription_Util@@NSSUTIL_3.12 + 116: 0000000000011b9c 116 FUNC GLOBAL DEFAULT 12 PORT_RegExpCaseSearch@@NSSUTIL_3.12 + 117: 000000000000ea10 208 FUNC GLOBAL DEFAULT 12 DER_StoreHeader@@NSSUTIL_3.12 + 118: 000000000001974c 60 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgStrip@@NSSUTIL_3.14 + 119: 000000000001aac4 8 FUNC GLOBAL DEFAULT 12 NSSUTIL_MkModuleSpec@@NSSUTIL_3.14 + 120: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.90 + 121: 00000000000179e4 4 FUNC GLOBAL DEFAULT 12 PORT_ISO88591_UTF8Conversion@@NSSUTIL_3.12 + 122: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.31 + 123: 000000000000f3e0 188 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToTime_Util@@NSSUTIL_3.12 + 124: 0000000000019c60 192 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgGetLabel@@NSSUTIL_3.14 + 125: 000000000003fb20 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToGeneralizedTimeTemplate@@NSSUTIL_3.12 + 126: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.33 + 127: 0000000000017c08 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToOctetStringTemplate_Util@@NSSUTIL_3.12 + 128: 0000000000010a3c 20 FUNC GLOBAL DEFAULT 12 BTOA_ConvertItemToAscii_Util@@NSSUTIL_3.12 + 129: 0000000000017c20 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UTF8StringTemplate_Util@@NSSUTIL_3.12 + 130: 0000000000019e08 88 FUNC GLOBAL DEFAULT 12 NSSUTIL_QuoteSize@@NSSUTIL_3.14 + 131: 0000000000017acc 64 FUNC GLOBAL DEFAULT 12 NSS_SecureMemcmp@@NSSUTIL_3.12.5 + 132: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.38 + 133: 0000000000010c48 140 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockWrite_Util@@NSSUTIL_3.12 + 134: 0000000000016cb8 104 FUNC GLOBAL DEFAULT 12 DER_UTCDayToAscii_Util@@NSSUTIL_3.12 + 135: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.39 + 136: 0000000000017bf0 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_OctetStringTemplate_Util@@NSSUTIL_3.12 + 137: 0000000000016e30 160 FUNC GLOBAL DEFAULT 12 CERT_GenTime2FormattedAscii_Util@@NSSUTIL_3.12 + 138: 000000000001531c 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetNotifyProc_Util@@NSSUTIL_3.12 + 139: 0000000000015a2c 76 FUNC GLOBAL DEFAULT 12 SECITEM_FreeItem_Util@@NSSUTIL_3.12 + 140: 000000000001536c 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearStreaming_Util@@NSSUTIL_3.12 + 141: 0000000000010d88 616 FUNC GLOBAL DEFAULT 12 SEC_StringToOID@@NSSUTIL_3.12 + 142: 0000000000017bc0 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IA5StringTemplate_Util@@NSSUTIL_3.12 + 143: 0000000000015264 184 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderStart_Util@@NSSUTIL_3.12 + 144: 0000000000011b28 116 FUNC GLOBAL DEFAULT 12 PORT_RegExpSearch@@NSSUTIL_3.12.7 + 145: 0000000000019a98 172 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgHasFlag@@NSSUTIL_3.14 + 146: 0000000000016714 508 FUNC GLOBAL DEFAULT 12 SECOID_AddEntry_Util@@NSSUTIL_3.12 + 147: 000000000000e220 348 FUNC GLOBAL DEFAULT 12 DER_Lengths_Util@@NSSUTIL_3.12 + 148: 000000000001c6f4 336 FUNC GLOBAL DEFAULT 12 PK11URI_ParseURI@@NSSUTIL_3.31 + 149: 0000000000014068 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_T61StringTemplate@@NSSUTIL_3.12 + 150: 0000000000017238 56 FUNC GLOBAL DEFAULT 12 PORT_Realloc_Util@@NSSUTIL_3.12 + 151: 0000000000015334 44 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderAbort_Util@@NSSUTIL_3.12 + 152: 00000000000175f4 228 FUNC GLOBAL DEFAULT 12 PORT_FreeArena_Util@@NSSUTIL_3.12 + 153: 0000000000016910 40 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDByTag_Util@@NSSUTIL_3.12 + 154: 000000000000dcd4 164 FUNC GLOBAL DEFAULT 12 SEC_QuickDERDecodeItem_Util@@NSSUTIL_3.12 + 155: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12.3 + 156: 0000000000017270 72 FUNC GLOBAL DEFAULT 12 PORT_ZAlloc_Util@@NSSUTIL_3.12 + 157: 00000000000171a4 8 FUNC GLOBAL DEFAULT 12 PORT_SetError_Util@@NSSUTIL_3.12 + 158: 000000000000fd48 132 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Create_Util@@NSSUTIL_3.12 + 159: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12.5 + 160: 000000000001747c 312 FUNC GLOBAL DEFAULT 12 PORT_ArenaAlloc_Util@@NSSUTIL_3.12 + 161: 000000000001c904 28 FUNC GLOBAL DEFAULT 12 PK11URI_GetPathAttribute@@NSSUTIL_3.31 + 162: 000000000000e9c8 72 FUNC GLOBAL DEFAULT 12 DER_LengthLength@@NSSUTIL_3.12 + 163: 0000000000017bd8 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_NullTemplate_Util@@NSSUTIL_3.12 + 164: 00000000000169e4 136 FUNC GLOBAL DEFAULT 12 NSS_SetAlgorithmPolicy@@NSSUTIL_3.12.3 + 165: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12.7 + 166: 000000000003fb40 32 OBJECT GLOBAL DEFAULT 20 SEC_SequenceOfAnyTemplate@@NSSUTIL_3.12 + 167: 0000000000014014 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_EnumeratedTemplate@@NSSUTIL_3.12 + 168: 00000000000247e0 32 OBJECT GLOBAL DEFAULT 14 SEC_IA5StringTemplate_Util@@NSSUTIL_3.12 + 169: 000000000001796c 16 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_ASCIIConversionFunction_Util@@NSSUTIL_3.12 + 170: 0000000000011d2c 80 FUNC GLOBAL DEFAULT 12 SECOID_CopyAlgorithmID_Util@@NSSUTIL_3.12 + 171: 0000000000015ecc 36 FUNC GLOBAL DEFAULT 12 SECITEM_ZfreeArray@@NSSUTIL_3.15 + 172: 0000000000015360 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetStreaming_Util@@NSSUTIL_3.12 + 173: 0000000000024860 32 OBJECT GLOBAL DEFAULT 14 SEC_ObjectIDTemplate_Util@@NSSUTIL_3.12 + 174: 000000000000ff14 524 FUNC GLOBAL DEFAULT 12 NSSBase64_DecodeBuffer_Util@@NSSUTIL_3.12 + 175: 0000000000020ac8 32 OBJECT GLOBAL DEFAULT 14 SEC_EnumeratedTemplate@@NSSUTIL_3.12 + 176: 0000000000019988 224 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgGetParamValue@@NSSUTIL_3.14 + 177: 0000000000020a48 32 OBJECT GLOBAL DEFAULT 14 SEC_PrintableStringTemplate@@NSSUTIL_3.12 + 178: 0000000000017bfc 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToAnyTemplate_Util@@NSSUTIL_3.12 + 179: 0000000000014020 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToEnumeratedTemplate@@NSSUTIL_3.12 + 180: 0000000000010198 96 FUNC GLOBAL DEFAULT 12 ATOB_ConvertAsciiToItem_Util@@NSSUTIL_3.12 + 181: 0000000000016a6c 16 FUNC GLOBAL DEFAULT 12 NSS_IsPolicyLocked@@NSSUTIL_3.59 + 182: 000000000003fc00 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToAnyTemplate_Util@@NSSUTIL_3.12 + 183: 0000000000016c04 16 FUNC GLOBAL DEFAULT 12 UTIL_SetForkState@@NSSUTIL_3.12.3 + 184: 0000000000020aa8 32 OBJECT GLOBAL DEFAULT 14 SEC_SkipTemplate@@NSSUTIL_3.12 + 185: 0000000000017b78 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SECOID_AlgorithmIDTemplate_Util@@NSSUTIL_3.12 + 186: 0000000000017b84 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_AnyTemplate_Util@@NSSUTIL_3.12 + 187: 0000000000011d7c 80 FUNC GLOBAL DEFAULT 12 SECOID_DestroyAlgorithmID_Util@@NSSUTIL_3.12 + 188: 00000000000159dc 80 FUNC GLOBAL DEFAULT 12 SECITEM_MakeItem@@NSSUTIL_3.38 + 189: 0000000000024840 32 OBJECT GLOBAL DEFAULT 14 SEC_AnyTemplate_Util@@NSSUTIL_3.12 + 190: 0000000000019828 240 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgFetchValue@@NSSUTIL_3.14 + 191: 000000000000dfc0 184 FUNC GLOBAL DEFAULT 12 SGN_CopyDigestInfo_Util@@NSSUTIL_3.12 + 192: 000000000000fdcc 252 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Update_Util@@NSSUTIL_3.12 + 193: 0000000000012734 5860 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderUpdate_Util@@NSSUTIL_3.12 + 194: 000000000001c630 196 FUNC GLOBAL DEFAULT 12 PK11URI_CreateURI@@NSSUTIL_3.31 + 195: 000000000001715c 12 FUNC GLOBAL DEFAULT 12 PORT_Free_Util@@NSSUTIL_3.12 + 196: 000000000001586c 208 FUNC GLOBAL DEFAULT 12 SECITEM_ArenaDupItem_Util@@NSSUTIL_3.12 + 197: 000000000001a530 552 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseModuleSpecEx@@NSSUTIL_3.21 + 198: 0000000000014074 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToGeneralizedTimeTemplate@@NSSUTIL_3.12 + 199: 0000000000010a50 80 FUNC GLOBAL DEFAULT 12 NSSRWLock_Destroy_Util@@NSSUTIL_3.12 + 200: 0000000000016074 420 FUNC GLOBAL DEFAULT 12 PORT_LoadLibraryFromOrigin@@NSSUTIL_3.12.5 + 201: 000000000001c400 428 FUNC GLOBAL DEFAULT 12 PK11URI_FormatURI@@NSSUTIL_3.31 + 202: 00000000000171ec 76 FUNC GLOBAL DEFAULT 12 PORT_Strdup_Util@@NSSUTIL_3.12 + 203: 000000000000e078 68 FUNC GLOBAL DEFAULT 12 SGN_CompareDigestInfo_Util@@NSSUTIL_3.12 + 204: 0000000000015374 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetTakeFromBuf_Util@@NSSUTIL_3.12 + 205: 0000000000013e18 96 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderFinish_Util@@NSSUTIL_3.12 + 206: 000000000001795c 16 FUNC GLOBAL DEFAULT 12 PORT_SetUCS4_UTF8ConversionFunction_Util@@NSSUTIL_3.12 + 207: 0000000000015d3c 364 FUNC GLOBAL DEFAULT 12 SECITEM_AllocArray@@NSSUTIL_3.15 + 208: 0000000000017bb4 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_GeneralizedTimeTemplate_Util@@NSSUTIL_3.12 + 209: 0000000000019e60 8 FUNC GLOBAL DEFAULT 12 NSSUTIL_Quote@@NSSUTIL_3.14 + 210: 0000000000015cbc 124 FUNC GLOBAL DEFAULT 12 SECITEM_Hash@@NSSUTIL_3.12 + 211: 0000000000010bec 92 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockRead_Util@@NSSUTIL_3.12 + 212: 0000000000017b9c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BitStringTemplate_Util@@NSSUTIL_3.12 + 213: 0000000000024820 32 OBJECT GLOBAL DEFAULT 14 SEC_NullTemplate_Util@@NSSUTIL_3.12 + 214: 000000000001c920 192 FUNC GLOBAL DEFAULT 12 PK11URI_GetQueryAttributeItem@@NSSUTIL_3.82 + 215: 000000000000f7f8 20 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTime_Util@@NSSUTIL_3.12 + 216: 00000000000162d8 752 FUNC GLOBAL DEFAULT 12 SECOID_Init@@NSSUTIL_3.12 + 217: 0000000000017344 112 FUNC GLOBAL DEFAULT 12 PORT_ZAllocAlignedOffset_Util@@NSSUTIL_3.33 + 218: 000000000001402c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SequenceOfAnyTemplate@@NSSUTIL_3.12 + 219: 00000000000154d4 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeUnsignedInteger_Util@@NSSUTIL_3.12 + 220: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.59 + 221: 000000000001797c 16 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_UTF8ConversionFunction_Util@@NSSUTIL_3.12 + 222: 0000000000011dcc 60 FUNC GLOBAL DEFAULT 12 SECOID_CompareAlgorithmID_Util@@NSSUTIL_3.12 + 223: 0000000000017be4 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_ObjectIDTemplate_Util@@NSSUTIL_3.12 + 224: 000000000001069c 120 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Create_Util@@NSSUTIL_3.12 + 225: 000000000003fae0 32 OBJECT GLOBAL DEFAULT 20 SEC_SequenceOfObjectIDTemplate@@NSSUTIL_3.12 + 226: 0000000000019e00 8 FUNC GLOBAL DEFAULT 12 NSSUTIL_Escape@@NSSUTIL_3.14 + 227: 000000000001076c 76 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Destroy_Util@@NSSUTIL_3.12 + 228: 00000000000247c0 32 OBJECT GLOBAL DEFAULT 14 SEC_OctetStringTemplate_Util@@NSSUTIL_3.12 + 229: 0000000000013f50 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetNotifyProc_Util@@NSSUTIL_3.12 + 230: 00000000000248a0 32 OBJECT GLOBAL DEFAULT 14 SEC_BitStringTemplate_Util@@NSSUTIL_3.12 + 231: 000000000001aacc 784 FUNC GLOBAL DEFAULT 12 NSSUTIL_AddNSSFlagToModuleSpec@@NSSUTIL_3.39 + 232: 000000000000ecc8 136 FUNC GLOBAL DEFAULT 12 DER_GetUInteger@@NSSUTIL_3.12 + 233: 0000000000015a78 300 FUNC GLOBAL DEFAULT 12 SECITEM_AllocItem_Util@@NSSUTIL_3.12 + 234: 0000000000013f9c 104 FUNC GLOBAL DEFAULT 12 SEC_ASN1Decode_Util@@NSSUTIL_3.12 + 235: 00000000000178ec 8 FUNC GLOBAL DEFAULT 12 PORT_ArenaRelease_Util@@NSSUTIL_3.12 + 236: 0000000000024880 32 OBJECT GLOBAL DEFAULT 14 SEC_BMPStringTemplate_Util@@NSSUTIL_3.12 + 237: 0000000000024780 32 OBJECT GLOBAL DEFAULT 14 SEC_UTF8StringTemplate_Util@@NSSUTIL_3.12 + 238: 000000000001a294 668 FUNC GLOBAL DEFAULT 12 NSSUTIL_MkSlotString@@NSSUTIL_3.14 + 239: 0000000000017894 88 FUNC GLOBAL DEFAULT 12 PORT_ArenaMark_Util@@NSSUTIL_3.12 + 240: 0000000000013e78 184 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderStart_Util@@NSSUTIL_3.12 + 241: 0000000000014044 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SkipTemplate@@NSSUTIL_3.12 + 242: 0000000000010cd4 136 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockWrite_Util@@NSSUTIL_3.12 + 243: 000000000000dd78 200 FUNC GLOBAL DEFAULT 12 SGN_DecodeDigestInfo@@NSSUTIL_3.12 + 244: 0000000000010714 88 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Update_Util@@NSSUTIL_3.12 + 245: 0000000000013f70 44 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderAbort_Util@@NSSUTIL_3.12 + 246: 0000000000010b64 136 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockRead_Util@@NSSUTIL_3.12 + 247: 00000000000126d0 100 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeInteger_Util@@NSSUTIL_3.12 + 248: 0000000000017a18 180 FUNC GLOBAL DEFAULT 12 NSS_PutEnv_Util@@NSSUTIL_3.12 + 249: 0000000000019f28 220 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseSlotFlags@@NSSUTIL_3.14 + 250: 0000000000016dc8 104 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToAscii_Util@@NSSUTIL_3.12 + 251: 0000000000011c10 24 FUNC GLOBAL DEFAULT 12 SECOID_GetAlgorithmTag_Util@@NSSUTIL_3.12 + 252: 0000000000016938 36 FUNC GLOBAL DEFAULT 12 SECOID_KnownCertExtenOID@@NSSUTIL_3.12 + 253: 000000000000f49c 860 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTimeArena_Util@@NSSUTIL_3.12 + 254: 000000000000f80c 188 FUNC GLOBAL DEFAULT 12 DER_GeneralizedTimeToTime_Util@@NSSUTIL_3.12 + 255: 00000000000166f8 28 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTag_Util@@NSSUTIL_3.12 + 256: 0000000000017900 92 FUNC GLOBAL DEFAULT 12 PORT_ArenaStrdup_Util@@NSSUTIL_3.12 + 257: 0000000000020a28 32 OBJECT GLOBAL DEFAULT 14 SEC_UniversalStringTemplate@@NSSUTIL_3.12 + 258: 000000000001b3e8 368 FUNC GLOBAL DEFAULT 12 _NSSUTIL_EvaluateConfigDir@@NSSUTIL_3.14 + 259: 000000000001a004 656 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseSlotInfo@@NSSUTIL_3.14 + 260: 0000000000019b44 284 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgDecodeNumber@@NSSUTIL_3.14 + 261: 000000000001772c 360 FUNC GLOBAL DEFAULT 12 PORT_ArenaGrow_Util@@NSSUTIL_3.12 + 262: 0000000000011b04 36 FUNC GLOBAL DEFAULT 12 PORT_RegExpValid@@NSSUTIL_3.12 + 263: 0000000000016a7c 20 FUNC GLOBAL DEFAULT 12 NSS_LockPolicy@@NSSUTIL_3.59 + 264: 0000000000016d20 104 FUNC GLOBAL DEFAULT 12 DER_GeneralizedDayToAscii_Util@@NSSUTIL_3.12 + 265: 000000000003fc20 32 OBJECT GLOBAL DEFAULT 20 SEC_SetOfAnyTemplate_Util@@NSSUTIL_3.12 + 266: 0000000000016a90 372 FUNC GLOBAL DEFAULT 12 SECOID_Shutdown@@NSSUTIL_3.12 + 267: 0000000000015948 148 FUNC GLOBAL DEFAULT 12 SECITEM_CopyItem_Util@@NSSUTIL_3.12 + 268: 000000000000eae0 252 FUNC GLOBAL DEFAULT 12 DER_SetUInteger@@NSSUTIL_3.12 + 269: 000000000000fec8 76 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Destroy_Util@@NSSUTIL_3.12 + 270: 00000000000173b4 4 FUNC GLOBAL DEFAULT 12 PORT_GetError_Util@@NSSUTIL_3.12 + 271: 000000000003fb60 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToOctetStringTemplate_Util@@NSSUTIL_3.12 + 272: 000000000001aeb4 1332 FUNC GLOBAL DEFAULT 12 NSSUTIL_MkNSSString@@NSSUTIL_3.14 + 273: 00000000000172b8 140 FUNC GLOBAL DEFAULT 12 PORT_ZAllocAligned_Util@@NSSUTIL_3.33 + 274: 00000000000109e4 88 FUNC GLOBAL DEFAULT 12 BTOA_DataToAscii_Util@@NSSUTIL_3.12 + 275: 0000000000015808 100 FUNC GLOBAL DEFAULT 12 SECITEM_ItemsAreEqual_Util@@NSSUTIL_3.12 + 276: 00000000000179e8 48 FUNC GLOBAL DEFAULT 12 PORT_UCS2_ASCIIConversion_Util@@NSSUTIL_3.12 + 277: 000000000000f8d4 44 FUNC GLOBAL DEFAULT 12 NSS_InitializePRErrorTable@@NSSUTIL_3.13 + 278: 0000000000010d5c 44 FUNC GLOBAL DEFAULT 12 NSSRWLock_HaveWriteLock_Util@@NSSUTIL_3.12 + 279: 00000000000178fc 4 FUNC GLOBAL DEFAULT 12 PORT_ArenaUnmark_Util@@NSSUTIL_3.12 + 280: 000000000001a758 472 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseModuleSpec@@NSSUTIL_3.14 + 281: 0000000000016f10 104 FUNC GLOBAL DEFAULT 12 DER_EncodeTimeChoice_Util@@NSSUTIL_3.12 + 282: 0000000000014004 16 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeItem_Util@@NSSUTIL_3.12 + 283: 0000000000019918 112 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgSkipParameter@@NSSUTIL_3.14 + 284: 000000000000ebdc 236 FUNC GLOBAL DEFAULT 12 DER_GetInteger_Util@@NSSUTIL_3.12 + 285: 0000000000016c14 12 FUNC GLOBAL DEFAULT 12 NSSUTIL_GetVersion@@NSSUTIL_3.13 + 286: 0000000000014050 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UniversalStringTemplate@@NSSUTIL_3.12 + 287: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12 + 288: 0000000000014038 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SequenceOfObjectIDTemplate@@NSSUTIL_3.12 + 289: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.13 + 290: 000000000001addc 216 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseCipherFlags@@NSSUTIL_3.14 + 291: 00000000000171ac 64 FUNC GLOBAL DEFAULT 12 PORT_Alloc_Util@@NSSUTIL_3.12 + 292: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.14 + 293: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.15 + 294: 00000000000154dc 32 FUNC GLOBAL DEFAULT 12 SEC_ASN1LengthLength_Util@@NSSUTIL_3.12 + 295: 000000000000f3c0 20 FUNC GLOBAL DEFAULT 12 DER_TimeToUTCTime_Util@@NSSUTIL_3.12 + 296: 00000000000149e4 2164 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderUpdate_Util@@NSSUTIL_3.12 + 297: 0000000000013f40 16 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearFilterProc_Util@@NSSUTIL_3.12 + 298: 000000000000de58 360 FUNC GLOBAL DEFAULT 12 SGN_CreateDigestInfo_Util@@NSSUTIL_3.12 + 299: 00000000000165c8 104 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDByMechanism@@NSSUTIL_3.12 + 300: 000000000003fb80 128 OBJECT GLOBAL DEFAULT 20 sgn_DigestInfoTemplate_Util@@NSSUTIL_3.12 + 301: 000000000001798c 44 FUNC GLOBAL DEFAULT 12 PORT_UCS4_UTF8Conversion@@NSSUTIL_3.12 + 302: 0000000000010aa0 196 FUNC GLOBAL DEFAULT 12 NSSRWLock_New_Util@@NSSUTIL_3.12 + 303: 0000000000015ea8 36 FUNC GLOBAL DEFAULT 12 SECITEM_FreeArray@@NSSUTIL_3.15 + 304: 000000000001745c 32 FUNC GLOBAL DEFAULT 12 PORT_InitCheapArena@@NSSUTIL_3.24 + 305: 000000000000de40 24 FUNC GLOBAL DEFAULT 12 SGN_DestroyDigestInfo_Util@@NSSUTIL_3.12 + 306: 0000000000013f5c 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearNotifyProc_Util@@NSSUTIL_3.12 + 307: 0000000000015328 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearNotifyProc_Util@@NSSUTIL_3.12 + 308: 0000000000019e68 88 FUNC GLOBAL DEFAULT 12 NSSUTIL_DoubleEscapeSize@@NSSUTIL_3.14 + 309: 0000000000019ec0 104 FUNC GLOBAL DEFAULT 12 NSSUTIL_DoubleEscape@@NSSUTIL_3.14 + 310: 0000000000016978 108 FUNC GLOBAL DEFAULT 12 NSS_GetAlgorithmPolicy@@NSSUTIL_3.12.3 + 311: 0000000000015258 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderFinish_Util@@NSSUTIL_3.12 + 312: 0000000000017c14 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SetOfAnyTemplate_Util@@NSSUTIL_3.12 + 313: 0000000000013f68 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetMaximumElementSize@@NSSUTIL_3.25 + 314: 0000000000017bcc 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IntegerTemplate_Util@@NSSUTIL_3.12 + 315: 000000000003fb00 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToEnumeratedTemplate@@NSSUTIL_3.12 + 316: 0000000000024700 128 OBJECT GLOBAL DEFAULT 14 SECOID_AlgorithmIDTemplate_Util@@NSSUTIL_3.12 + 317: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.17.1 + 318: 00000000000191e4 356 FUNC GLOBAL DEFAULT 12 NSSUTIL_DoModuleDBFunction@@NSSUTIL_3.14 + 319: 000000000001405c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PrintableStringTemplate@@NSSUTIL_3.12 + 320: 0000000000017b0c 48 FUNC GLOBAL DEFAULT 12 NSS_SecureMemcmpZero@@NSSUTIL_3.33 + 321: 000000000001593c 12 FUNC GLOBAL DEFAULT 12 SECITEM_DupItem_Util@@NSSUTIL_3.12 + 322: 0000000000016630 200 FUNC GLOBAL DEFAULT 12 SECOID_FindOID_Util@@NSSUTIL_3.12 + 323: 0000000000015380 52 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearTakeFromBuf_Util@@NSSUTIL_3.12 + 324: 00000000000153fc 208 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeItem_Util@@NSSUTIL_3.12 + 325: 000000000000f3d4 12 FUNC GLOBAL DEFAULT 12 DER_AsciiToTime_Util@@NSSUTIL_3.12 + 326: 0000000000017b90 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BMPStringTemplate_Util@@NSSUTIL_3.12 + 327: 00000000000179b8 44 FUNC GLOBAL DEFAULT 12 PORT_UCS2_UTF8Conversion_Util@@NSSUTIL_3.12 + 328: 0000000000019da8 88 FUNC GLOBAL DEFAULT 12 NSSUTIL_EscapeSize@@NSSUTIL_3.14 + 329: 0000000000017ba8 12 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BooleanTemplate_Util@@NSSUTIL_3.12 + 330: 000000000001c844 192 FUNC GLOBAL DEFAULT 12 PK11URI_GetPathAttributeItem@@NSSUTIL_3.82 + 331: 0000000000016ed0 64 FUNC GLOBAL DEFAULT 12 DER_DecodeTimeChoice_Util@@NSSUTIL_3.12 + 332: 0000000000017c2c 12 FUNC GLOBAL DEFAULT 12 NSS_Get_sgn_DigestInfoTemplate_Util@@NSSUTIL_3.12 + 333: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.21 + 334: 00000000000175b4 64 FUNC GLOBAL DEFAULT 12 PORT_ArenaZAlloc_Util@@NSSUTIL_3.12 + 335: 0000000000010ff0 460 FUNC GLOBAL DEFAULT 12 _SGN_VerifyPKCS1DigestInfo@@NSSUTIL_3.17.1 + 336: 00000000000176d8 84 FUNC GLOBAL DEFAULT 12 PORT_DestroyCheapArena@@NSSUTIL_3.24 + 337: 000000000000e934 148 FUNC GLOBAL DEFAULT 12 DER_Encode_Util@@NSSUTIL_3.12 + 338: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.82 + 339: 000000000001c5ac 132 FUNC GLOBAL DEFAULT 12 PK11URI_DestroyURI@@NSSUTIL_3.31 + 340: 0000000000015728 224 FUNC GLOBAL DEFAULT 12 SECITEM_CompareItem_Util@@NSSUTIL_3.12 + 341: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.24 + 342: 00000000000247a0 32 OBJECT GLOBAL DEFAULT 14 SEC_IntegerTemplate_Util@@NSSUTIL_3.12 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libpango-1.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libpango-1.0.so.0.txt new file mode 100644 index 000000000000..691ac304cb42 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libpango-1.0.so.0.txt @@ -0,0 +1,600 @@ +Library: /lib64/libpango-1.0.so.0 +Package: pango-1.42.4-4.el7_7.aarch64 + + +Symbol table '.dynsym' contains 594 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000c8f0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000005dc30 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_data + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_replace_qdata + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_iszerowidth + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_reverse + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_full + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND flockfile@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_offset_to_pointer + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_unlock + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_string + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 28: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_foreach + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_isupper + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.17 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strjoinv + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data_full + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_concat + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_copy + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_get_mirror_char + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_reverse + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrt@GLIBC_2.17 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_free + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strtod + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_length + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strcasecmp + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND funlockfile@GLIBC_2.17 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_home_dir + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND th_uni2tis@LIBTHAI_0.1 (4) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_isalpha + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strlen + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_error_quark + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_tolower + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strpbrk@GLIBC_2.17 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_end_parse + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_get_char + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_islower + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove_link + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.17 (2) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_new + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 82: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_ascii_table + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 87: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 88: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (5) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_type + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc_n + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_position + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_alloc + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_concat + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND th_brk@LIBTHAI_0.1 (4) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_add_private + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_1 + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc_n + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_truncate + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_user_data + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fribidi_get_par_embedding_levels_ex + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.17 (2) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fribidi_get_bidi_type + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata_full + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sincos@GLIBC_2.17 (3) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_instance_get_private + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_break_type + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_lock + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0_n + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fribidi_get_bracket + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_xdigit_value + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchug + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_memdup + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchomp + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 139: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_copy + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_parse + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_dtostr + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_nth + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_iswide + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup_extended + 152: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free_1 + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_qname + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_get_script + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (2) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strndup + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_prev_char + 160: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_utf8_skip + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_len + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_insert_c + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_validate + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __uflow@GLIBC_2.17 (2) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_pointer_to_offset + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_foreach + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.17 (2) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log_structured_standard + 171: 000000000002b918 108 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_type + 172: 000000000002bd88 12 FUNC GLOBAL DEFAULT 11 pango_version_string + 173: 0000000000021bf4 88 FUNC GLOBAL DEFAULT 11 pango_layout_get_alignment + 174: 0000000000019354 12 FUNC GLOBAL DEFAULT 11 pango_color_parse + 175: 00000000000156f0 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_strikethrough_position + 176: 000000000002baa4 260 FUNC GLOBAL DEFAULT 11 pango_tab_array_set_tab + 177: 0000000000021e98 172 FUNC GLOBAL DEFAULT 11 pango_layout_set_ellipsize + 178: 000000000001bb88 412 FUNC GLOBAL DEFAULT 11 pango_coverage_set + 179: 0000000000015cd8 108 FUNC GLOBAL DEFAULT 11 pango_glyph_string_copy + 180: 000000000001aeec 84 FUNC GLOBAL DEFAULT 11 pango_context_get_language + 181: 00000000000168f4 8 FUNC GLOBAL DEFAULT 11 pango_map_get_engine + 182: 0000000000029278 84 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_point + 183: 00000000000297cc 132 FUNC GLOBAL DEFAULT 11 pango_renderer_get_type + 184: 0000000000014cb8 784 FUNC GLOBAL DEFAULT 11 pango_font_description_to_string + 185: 000000000001b07c 84 FUNC GLOBAL DEFAULT 11 pango_context_get_base_gravity + 186: 000000000000e898 108 FUNC GLOBAL DEFAULT 11 pango_variant_get_type + 187: 000000000001740c 64 FUNC GLOBAL DEFAULT 11 pango_attr_stretch_new + 188: 0000000000017034 68 FUNC GLOBAL DEFAULT 11 pango_attribute_destroy + 189: 00000000000179ac 64 FUNC GLOBAL DEFAULT 11 pango_attr_foreground_alpha_new + 190: 0000000000013b14 124 FUNC GLOBAL DEFAULT 11 pango_font_description_set_family + 191: 0000000000026d50 460 FUNC GLOBAL DEFAULT 11 pango_layout_xy_to_index + 192: 000000000001afec 144 FUNC GLOBAL DEFAULT 11 pango_context_set_base_gravity + 193: 00000000000155a0 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_approximate_char_width + 194: 0000000000022788 1032 FUNC GLOBAL DEFAULT 11 pango_layout_line_x_to_index + 195: 0000000000024278 92 FUNC GLOBAL DEFAULT 11 pango_layout_is_wrapped + 196: 0000000000013db0 68 FUNC GLOBAL DEFAULT 11 pango_font_description_get_stretch + 197: 000000000002d0ac 1224 FUNC GLOBAL DEFAULT 11 pango_shape_full + 198: 000000000002615c 324 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_char + 199: 0000000000025988 112 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_type + 200: 0000000000015648 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_underline_position + 201: 0000000000021824 124 FUNC GLOBAL DEFAULT 11 pango_layout_get_attributes + 202: 000000000001f2c0 76 FUNC GLOBAL DEFAULT 11 pango_gravity_get_for_script + 203: 0000000000014530 380 FUNC GLOBAL DEFAULT 11 pango_font_description_better_match + 204: 0000000000022278 384 FUNC GLOBAL DEFAULT 11 pango_layout_set_markup_with_accel + 205: 000000000000ecd0 108 FUNC GLOBAL DEFAULT 11 pango_script_get_type + 206: 0000000000015ed4 640 FUNC GLOBAL DEFAULT 11 pango_glyph_string_extents_range + 207: 0000000000021a30 88 FUNC GLOBAL DEFAULT 11 pango_layout_get_justify + 208: 00000000000143f8 312 FUNC GLOBAL DEFAULT 11 pango_font_description_merge + 209: 0000000000017b54 96 FUNC GLOBAL DEFAULT 11 pango_attr_list_insert + 210: 000000000001a8d8 24 FUNC GLOBAL DEFAULT 11 pango_context_new + 211: 0000000000013b90 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_family + 212: 0000000000021718 64 FUNC GLOBAL DEFAULT 11 pango_layout_set_spacing + 213: 000000000002217c 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_text + 214: 0000000000028c10 284 FUNC GLOBAL DEFAULT 11 pango_markup_parser_finish + 215: 000000000002d574 20 FUNC GLOBAL DEFAULT 11 pango_shape + 216: 0000000000021fc4 440 FUNC GLOBAL DEFAULT 11 pango_layout_set_text + 217: 0000000000026944 292 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_run_extents + 218: 0000000000014950 100 FUNC GLOBAL DEFAULT 11 pango_font_descriptions_free + 219: 0000000000018104 88 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_range + 220: 0000000000029080 180 FUNC GLOBAL DEFAULT 11 pango_matrix_rotate + 221: 000000000001ee24 424 FUNC GLOBAL DEFAULT 11 pango_glyph_item_letter_space + 222: 000000000002c77c 8 FUNC GLOBAL DEFAULT 11 pango_config_key_get + 223: 00000000000298dc 148 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_rectangle + 224: 000000000000e6e8 108 FUNC GLOBAL DEFAULT 11 pango_bidi_type_get_type + 225: 00000000000602e8 0 NOTYPE GLOBAL DEFAULT 23 _end + 226: 0000000000016b34 168 FUNC GLOBAL DEFAULT 11 pango_attr_list_unref + 227: 000000000001e8b0 524 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_prev_cluster + 228: 000000000001734c 64 FUNC GLOBAL DEFAULT 11 pango_attr_style_new + 229: 0000000000018448 124 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_get + 230: 000000000000ed3c 108 FUNC GLOBAL DEFAULT 11 pango_tab_align_get_type + 231: 000000000001f9b4 240 FUNC GLOBAL DEFAULT 11 pango_language_matches + 232: 000000000001d47c 124 FUNC GLOBAL DEFAULT 11 pango_font_map_get_shape_engine_type + 233: 0000000000015488 112 FUNC GLOBAL DEFAULT 11 pango_font_get_metrics + 234: 00000000000189b8 460 FUNC GLOBAL DEFAULT 11 pango_bidi_type_for_unichar + 235: 00000000000153f8 112 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_type + 236: 0000000000029acc 112 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_trapezoid + 237: 0000000000013fcc 184 FUNC GLOBAL DEFAULT 11 pango_font_description_set_variations_static + 238: 000000000001e0c4 20 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_free + 239: 000000000001d3dc 68 FUNC GLOBAL DEFAULT 11 pango_font_map_list_families + 240: 0000000000018e30 40 FUNC GLOBAL DEFAULT 11 pango_unichar_direction + 241: 00000000000213b0 84 FUNC GLOBAL DEFAULT 11 pango_layout_get_context + 242: 0000000000021e18 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_single_paragraph_mode + 243: 0000000000017534 64 FUNC GLOBAL DEFAULT 11 pango_attr_strikethrough_new + 244: 0000000000015744 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_strikethrough_thickness + 245: 0000000000021a88 164 FUNC GLOBAL DEFAULT 11 pango_layout_set_auto_dir + 246: 0000000000015468 32 FUNC GLOBAL DEFAULT 11 pango_font_metrics_new + 247: 000000000001dbd4 148 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_get_type + 248: 000000000001b84c 304 FUNC GLOBAL DEFAULT 11 pango_coverage_copy + 249: 0000000000017078 204 FUNC GLOBAL DEFAULT 11 pango_attribute_equal + 250: 000000000002a31c 172 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_glyph_item + 251: 000000000002bed4 4 FUNC GLOBAL DEFAULT 11 pango_trim_string + 252: 00000000000176d0 236 FUNC GLOBAL DEFAULT 11 pango_attr_shape_new_with_data + 253: 000000000001ac48 128 FUNC GLOBAL DEFAULT 11 pango_context_load_font + 254: 0000000000021240 124 FUNC GLOBAL DEFAULT 11 pango_layout_new + 255: 00000000000252ec 168 FUNC GLOBAL DEFAULT 11 pango_layout_get_pixel_extents + 256: 00000000000179ec 64 FUNC GLOBAL DEFAULT 11 pango_attr_background_alpha_new + 257: 000000000001d8a8 132 FUNC GLOBAL DEFAULT 11 pango_fontset_get_metrics + 258: 000000000001837c 124 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_copy + 259: 000000000001cc20 148 FUNC GLOBAL DEFAULT 11 pango_engine_lang_get_type + 260: 0000000000024644 184 FUNC GLOBAL DEFAULT 11 pango_layout_get_line + 261: 000000000001532c 40 FUNC GLOBAL DEFAULT 11 pango_font_find_shaper + 262: 000000000002d084 40 FUNC GLOBAL DEFAULT 11 pango_reorder_items + 263: 0000000000026f1c 84 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_baseline + 264: 0000000000025408 116 FUNC GLOBAL DEFAULT 11 pango_layout_get_size + 265: 00000000000221fc 124 FUNC GLOBAL DEFAULT 11 pango_layout_get_character_count + 266: 0000000000026c80 208 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line_yrange + 267: 000000000002b5dc 76 FUNC GLOBAL DEFAULT 11 pango_tab_array_free + 268: 000000000002bba8 160 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_tab + 269: 000000000001bfec 432 FUNC GLOBAL DEFAULT 11 pango_coverage_to_bytes + 270: 000000000002a504 360 FUNC GLOBAL DEFAULT 11 pango_renderer_part_changed + 271: 000000000002b5a8 52 FUNC GLOBAL DEFAULT 11 pango_script_iter_new + 272: 000000000001522c 164 FUNC GLOBAL DEFAULT 11 pango_font_describe_with_absolute_size + 273: 0000000000017a9c 40 FUNC GLOBAL DEFAULT 11 pango_attr_list_new + 274: 0000000000015354 112 FUNC GLOBAL DEFAULT 11 pango_font_get_glyph_extents + 275: 00000000000242d4 92 FUNC GLOBAL DEFAULT 11 pango_layout_is_ellipsized + 276: 0000000000022404 128 FUNC GLOBAL DEFAULT 11 pango_layout_context_changed + 277: 000000000001abdc 108 FUNC GLOBAL DEFAULT 11 pango_context_list_families + 278: 00000000000159d0 132 FUNC GLOBAL DEFAULT 11 pango_font_face_get_type + 279: 000000000001dfec 68 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_copy + 280: 000000000001e6e8 456 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_next_cluster + 281: 000000000002cbe0 124 FUNC GLOBAL DEFAULT 11 pango_quantize_line_geometry + 282: 0000000000016e28 92 FUNC GLOBAL DEFAULT 11 pango_attribute_init + 283: 000000000001f494 356 FUNC GLOBAL DEFAULT 11 pango_item_split + 284: 000000000002bd94 80 FUNC GLOBAL DEFAULT 11 pango_version_check + 285: 0000000000025c28 68 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_index + 286: 00000000000602e8 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 287: 00000000000262a0 8 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_cluster + 288: 0000000000025394 116 FUNC GLOBAL DEFAULT 11 pango_layout_get_pixel_size + 289: 000000000000ebf8 108 FUNC GLOBAL DEFAULT 11 pango_ellipsize_mode_get_type + 290: 000000000001fb38 240 FUNC GLOBAL DEFAULT 11 pango_language_get_scripts + 291: 0000000000013ca8 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_variant + 292: 00000000000150fc 40 FUNC GLOBAL DEFAULT 11 pango_parse_weight + 293: 0000000000060004 0 NOTYPE GLOBAL DEFAULT 22 _edata + 294: 0000000000019004 108 FUNC GLOBAL DEFAULT 11 pango_color_get_type + 295: 0000000000015b70 132 FUNC GLOBAL DEFAULT 11 pango_font_face_get_face_name + 296: 000000000000e7c0 108 FUNC GLOBAL DEFAULT 11 pango_coverage_level_get_type + 297: 000000000001b808 68 FUNC GLOBAL DEFAULT 11 pango_coverage_new + 298: 000000000001bad8 176 FUNC GLOBAL DEFAULT 11 pango_coverage_get + 299: 000000000000ea48 108 FUNC GLOBAL DEFAULT 11 pango_gravity_get_type + 300: 000000000000e904 108 FUNC GLOBAL DEFAULT 11 pango_weight_get_type + 301: 00000000000146ac 128 FUNC GLOBAL DEFAULT 11 pango_font_description_copy_static + 302: 000000000001e078 76 FUNC GLOBAL DEFAULT 11 pango_glyph_item_free + 303: 000000000001aa48 280 FUNC GLOBAL DEFAULT 11 pango_context_set_font_map + 304: 000000000002b700 120 FUNC GLOBAL DEFAULT 11 pango_tab_array_copy + 305: 000000000001d814 148 FUNC GLOBAL DEFAULT 11 pango_fontset_get_font + 306: 000000000001794c 96 FUNC GLOBAL DEFAULT 11 pango_attr_font_features_new + 307: 0000000000018e58 4 FUNC GLOBAL DEFAULT 11 pango_get_mirror_char + 308: 0000000000014084 112 FUNC GLOBAL DEFAULT 11 pango_font_description_set_variations + 309: 00000000000174dc 88 FUNC GLOBAL DEFAULT 11 pango_attr_underline_color_new + 310: 00000000000262a8 280 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line_extents + 311: 000000000002b984 84 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_size + 312: 0000000000013c1c 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_style + 313: 000000000002cab0 4 FUNC GLOBAL DEFAULT 11 pango_parse_enum + 314: 0000000000060004 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 315: 000000000001399c 112 FUNC GLOBAL DEFAULT 11 pango_font_description_get_type + 316: 00000000000142e4 200 FUNC GLOBAL DEFAULT 11 pango_font_description_unset_fields + 317: 0000000000022718 112 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_type + 318: 000000000002c774 8 FUNC GLOBAL DEFAULT 11 pango_config_key_get_system + 319: 000000000002b2b0 20 FUNC GLOBAL DEFAULT 11 pango_renderer_get_layout + 320: 000000000001f420 8 FUNC GLOBAL DEFAULT 11 pango_item_new + 321: 0000000000015938 152 FUNC GLOBAL DEFAULT 11 pango_font_family_is_monospace + 322: 0000000000025c6c 124 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_run + 323: 000000000001738c 64 FUNC GLOBAL DEFAULT 11 pango_attr_weight_new + 324: 0000000000013eb0 112 FUNC GLOBAL DEFAULT 11 pango_font_description_set_absolute_size + 325: 0000000000017f64 416 FUNC GLOBAL DEFAULT 11 pango_attr_list_splice + 326: 0000000000016910 4 FUNC GLOBAL DEFAULT 11 pango_module_register + 327: 00000000000158a0 152 FUNC GLOBAL DEFAULT 11 pango_font_family_list_faces + 328: 0000000000015124 40 FUNC GLOBAL DEFAULT 11 pango_parse_stretch + 329: 000000000002591c 108 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_pixel_extents + 330: 00000000000248f0 1468 FUNC GLOBAL DEFAULT 11 pango_layout_move_cursor_visually + 331: 0000000000017bb4 96 FUNC GLOBAL DEFAULT 11 pango_attr_list_insert_before + 332: 0000000000028f68 88 FUNC GLOBAL DEFAULT 11 pango_matrix_scale + 333: 0000000000013a5c 184 FUNC GLOBAL DEFAULT 11 pango_font_description_set_family_static + 334: 000000000001f7a4 108 FUNC GLOBAL DEFAULT 11 pango_language_get_type + 335: 0000000000029fec 136 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_glyph + 336: 00000000000143ac 76 FUNC GLOBAL DEFAULT 11 pango_font_description_set_gravity + 337: 000000000001419c 328 FUNC GLOBAL DEFAULT 11 pango_font_description_merge_static + 338: 000000000001af40 88 FUNC GLOBAL DEFAULT 11 pango_context_set_base_dir + 339: 000000000002144c 84 FUNC GLOBAL DEFAULT 11 pango_layout_get_width + 340: 000000000001554c 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_descent + 341: 000000000001569c 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_underline_thickness + 342: 000000000001ae58 148 FUNC GLOBAL DEFAULT 11 pango_context_set_language + 343: 0000000000025d64 124 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line + 344: 0000000000028e8c 20 FUNC GLOBAL DEFAULT 11 pango_matrix_free + 345: 0000000000014848 264 FUNC GLOBAL DEFAULT 11 pango_font_description_hash + 346: 000000000002b9d8 204 FUNC GLOBAL DEFAULT 11 pango_tab_array_resize + 347: 00000000000224ec 556 FUNC GLOBAL DEFAULT 11 pango_layout_line_index_to_x + 348: 000000000001e030 72 FUNC GLOBAL DEFAULT 11 pango_glyph_item_copy + 349: 000000000001fcec 628 FUNC GLOBAL DEFAULT 11 pango_script_get_sample_language + 350: 000000000001cedc 132 FUNC GLOBAL DEFAULT 11 pango_font_map_get_type + 351: 00000000000168ec 8 FUNC GLOBAL DEFAULT 11 pango_find_map + 352: 00000000000291f4 76 FUNC GLOBAL DEFAULT 11 pango_matrix_get_font_scale_factor + 353: 0000000000022b90 748 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_extents + 354: 000000000000e82c 108 FUNC GLOBAL DEFAULT 11 pango_style_get_type + 355: 00000000000602e8 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 356: 00000000000165e8 772 FUNC GLOBAL DEFAULT 11 pango_glyph_string_x_to_index + 357: 0000000000017298 76 FUNC GLOBAL DEFAULT 11 pango_attr_size_new + 358: 000000000002cb68 120 FUNC GLOBAL DEFAULT 11 pango_is_zero_width + 359: 000000000001b78c 32 FUNC GLOBAL DEFAULT 11 pango_context_changed + 360: 000000000002a3c8 168 FUNC GLOBAL DEFAULT 11 pango_renderer_get_color + 361: 000000000000e67c 108 FUNC GLOBAL DEFAULT 11 pango_underline_get_type + 362: 0000000000016fc4 112 FUNC GLOBAL DEFAULT 11 pango_attribute_copy + 363: 0000000000026b9c 228 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_char_extents + 364: 0000000000017c14 848 FUNC GLOBAL DEFAULT 11 pango_attr_list_change + 365: 000000000002aa70 1572 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_layout_line + 366: 000000000001cfc0 92 FUNC GLOBAL DEFAULT 11 pango_font_map_load_font + 367: 0000000000013be4 56 FUNC GLOBAL DEFAULT 11 pango_font_description_set_style + 368: 0000000000016d34 152 FUNC GLOBAL DEFAULT 11 pango_attr_type_register + 369: 00000000000149b4 772 FUNC GLOBAL DEFAULT 11 pango_font_description_from_string + 370: 00000000000151d0 92 FUNC GLOBAL DEFAULT 11 pango_font_describe + 371: 00000000000294bc 468 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_pixel_rectangle + 372: 0000000000021f44 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_ellipsize + 373: 0000000000024620 36 FUNC GLOBAL DEFAULT 11 pango_layout_get_lines_readonly + 374: 0000000000016154 28 FUNC GLOBAL DEFAULT 11 pango_glyph_string_extents + 375: 000000000002bd28 84 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_positions_in_pixels + 376: 000000000001790c 64 FUNC GLOBAL DEFAULT 11 pango_attr_gravity_hint_new + 377: 0000000000017894 120 FUNC GLOBAL DEFAULT 11 pango_attr_gravity_new + 378: 0000000000021d74 164 FUNC GLOBAL DEFAULT 11 pango_layout_set_single_paragraph_mode + 379: 0000000000028ea0 108 FUNC GLOBAL DEFAULT 11 pango_matrix_get_type + 380: 000000000001b7ac 92 FUNC GLOBAL DEFAULT 11 pango_context_get_serial + 381: 000000000001faa4 148 FUNC GLOBAL DEFAULT 11 pango_language_get_sample_string + 382: 000000000001efcc 328 FUNC GLOBAL DEFAULT 11 pango_glyph_item_get_logical_widths + 383: 000000000001e678 112 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_get_type + 384: 000000000001f428 108 FUNC GLOBAL DEFAULT 11 pango_item_get_type + 385: 0000000000015798 132 FUNC GLOBAL DEFAULT 11 pango_font_family_get_type + 386: 000000000001f91c 148 FUNC GLOBAL DEFAULT 11 pango_language_get_default + 387: 000000000001f218 168 FUNC GLOBAL DEFAULT 11 pango_gravity_get_for_script_and_width + 388: 0000000000013d78 56 FUNC GLOBAL DEFAULT 11 pango_font_description_set_stretch + 389: 000000000002cc5c 20 FUNC GLOBAL DEFAULT 11 pango_units_from_double + 390: 0000000000021bac 72 FUNC GLOBAL DEFAULT 11 pango_layout_set_alignment + 391: 00000000000254ec 1072 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_x_ranges + 392: 0000000000028f0c 92 FUNC GLOBAL DEFAULT 11 pango_matrix_translate + 393: 000000000001b0d0 84 FUNC GLOBAL DEFAULT 11 pango_context_get_gravity + 394: 000000000002d588 0 FUNC GLOBAL DEFAULT 12 _fini + 395: 0000000000018f48 20 FUNC GLOBAL DEFAULT 11 pango_color_free + 396: 0000000000021404 72 FUNC GLOBAL DEFAULT 11 pango_layout_set_width + 397: 000000000002c360 60 FUNC GLOBAL DEFAULT 11 pango_skip_space + 398: 0000000000028e48 68 FUNC GLOBAL DEFAULT 11 pango_matrix_copy + 399: 000000000000f4f8 9228 FUNC GLOBAL DEFAULT 11 pango_default_break + 400: 000000000002b2e4 40 FUNC GLOBAL DEFAULT 11 pango_script_iter_get_range + 401: 00000000000224c8 36 FUNC GLOBAL DEFAULT 11 pango_layout_get_serial + 402: 00000000000217ac 120 FUNC GLOBAL DEFAULT 11 pango_layout_set_attributes + 403: 000000000001cb9c 132 FUNC GLOBAL DEFAULT 11 pango_engine_get_type + 404: 000000000001eabc 92 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_init_start + 405: 000000000001d420 92 FUNC GLOBAL DEFAULT 11 pango_font_map_load_fontset + 406: 00000000000172e4 76 FUNC GLOBAL DEFAULT 11 pango_attr_size_new_absolute + 407: 00000000000212bc 244 FUNC GLOBAL DEFAULT 11 pango_layout_copy + 408: 0000000000017650 64 FUNC GLOBAL DEFAULT 11 pango_attr_fallback_new + 409: 0000000000017240 88 FUNC GLOBAL DEFAULT 11 pango_attr_background_new + 410: 000000000002cab4 12 FUNC GLOBAL DEFAULT 11 pango_lookup_aliases + 411: 0000000000021684 64 FUNC GLOBAL DEFAULT 11 pango_layout_set_indent + 412: 0000000000011c50 600 FUNC GLOBAL DEFAULT 11 pango_get_log_attrs + 413: 000000000002cc90 164 FUNC GLOBAL DEFAULT 11 pango_extents_to_pixels + 414: 0000000000025ec4 172 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_line + 415: 000000000000e970 108 FUNC GLOBAL DEFAULT 11 pango_stretch_get_type + 416: 00000000000171a0 64 FUNC GLOBAL DEFAULT 11 pango_attr_language_new + 417: 000000000002a66c 336 FUNC GLOBAL DEFAULT 11 pango_renderer_set_color + 418: 000000000001a8f0 220 FUNC GLOBAL DEFAULT 11 pango_context_set_matrix + 419: 000000000000e618 100 FUNC GLOBAL DEFAULT 11 pango_attr_type_get_type + 420: 000000000001b17c 84 FUNC GLOBAL DEFAULT 11 pango_context_get_gravity_hint + 421: 0000000000016170 76 FUNC GLOBAL DEFAULT 11 pango_glyph_string_get_width + 422: 000000000000c8f0 0 FUNC GLOBAL DEFAULT 9 _init + 423: 000000000000e9dc 108 FUNC GLOBAL DEFAULT 11 pango_font_mask_get_type + 424: 00000000000184c4 824 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_get_font + 425: 0000000000015e68 108 FUNC GLOBAL DEFAULT 11 pango_glyph_string_get_type + 426: 000000000001ccb4 148 FUNC GLOBAL DEFAULT 11 pango_engine_shape_get_type + 427: 000000000002a28c 128 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_glyphs + 428: 000000000002c770 4 FUNC GLOBAL DEFAULT 11 pango_scan_int + 429: 0000000000028fc0 192 FUNC GLOBAL DEFAULT 11 pango_matrix_concat + 430: 000000000001fc28 196 FUNC GLOBAL DEFAULT 11 pango_language_includes_script + 431: 000000000002b628 216 FUNC GLOBAL DEFAULT 11 pango_tab_array_new + 432: 000000000001dfb4 44 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_append + 433: 00000000000175cc 64 FUNC GLOBAL DEFAULT 11 pango_attr_rise_new + 434: 000000000001e174 988 FUNC GLOBAL DEFAULT 11 pango_glyph_item_split + 435: 0000000000025e80 68 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_layout + 436: 000000000001a9cc 124 FUNC GLOBAL DEFAULT 11 pango_context_get_matrix + 437: 0000000000015bf4 228 FUNC GLOBAL DEFAULT 11 pango_font_face_list_sizes + 438: 0000000000025e28 88 FUNC GLOBAL DEFAULT 11 pango_layout_iter_at_last_line + 439: 00000000000182e8 148 FUNC GLOBAL DEFAULT 11 pango_attr_list_get_iterator + 440: 00000000000183f8 80 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_destroy + 441: 00000000000150d4 40 FUNC GLOBAL DEFAULT 11 pango_parse_variant + 442: 0000000000021b2c 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_auto_dir + 443: 00000000000292cc 496 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_rectangle + 444: 0000000000018f0c 60 FUNC GLOBAL DEFAULT 11 pango_color_copy + 445: 0000000000021758 84 FUNC GLOBAL DEFAULT 11 pango_layout_get_spacing + 446: 0000000000025fc4 164 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_run + 447: 000000000001eb18 100 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_init_end + 448: 00000000000246fc 120 FUNC GLOBAL DEFAULT 11 pango_layout_get_line_readonly + 449: 000000000001c19c 376 FUNC GLOBAL DEFAULT 11 pango_coverage_from_bytes + 450: 000000000002a1d8 180 FUNC GLOBAL DEFAULT 11 pango_renderer_deactivate + 451: 0000000000013cfc 56 FUNC GLOBAL DEFAULT 11 pango_font_description_set_weight + 452: 000000000001338c 24 FUNC GLOBAL DEFAULT 11 pango_font_metrics_ref + 453: 000000000001760c 68 FUNC GLOBAL DEFAULT 11 pango_attr_scale_new + 454: 00000000000219d8 88 FUNC GLOBAL DEFAULT 11 pango_layout_set_justify + 455: 000000000001bd24 712 FUNC GLOBAL DEFAULT 11 pango_coverage_max + 456: 0000000000060004 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 457: 000000000002bd80 8 FUNC GLOBAL DEFAULT 11 pango_version + 458: 000000000002547c 112 FUNC GLOBAL DEFAULT 11 pango_layout_get_baseline + 459: 0000000000029988 116 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_error_underline + 460: 0000000000024438 160 FUNC GLOBAL DEFAULT 11 pango_layout_get_log_attrs + 461: 0000000000028d2c 284 FUNC GLOBAL DEFAULT 11 pango_parse_markup + 462: 00000000000218a0 188 FUNC GLOBAL DEFAULT 11 pango_layout_set_font_description + 463: 000000000001f170 108 FUNC GLOBAL DEFAULT 11 pango_gravity_to_rotation + 464: 000000000002195c 124 FUNC GLOBAL DEFAULT 11 pango_layout_get_font_description + 465: 0000000000017144 92 FUNC GLOBAL DEFAULT 11 pango_attr_family_new + 466: 00000000000252c0 44 FUNC GLOBAL DEFAULT 11 pango_layout_get_extents + 467: 000000000001f1dc 60 FUNC GLOBAL DEFAULT 11 pango_gravity_get_for_matrix + 468: 000000000000ec64 108 FUNC GLOBAL DEFAULT 11 pango_render_part_get_type + 469: 0000000000017a2c 112 FUNC GLOBAL DEFAULT 11 pango_attr_list_get_type + 470: 00000000000223f8 12 FUNC GLOBAL DEFAULT 11 pango_layout_set_markup + 471: 000000000002b094 416 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_layout + 472: 000000000002b30c 564 FUNC GLOBAL DEFAULT 11 pango_script_iter_next + 473: 00000000000154f8 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_ascent + 474: 000000000002c814 152 FUNC GLOBAL DEFAULT 11 pango_get_lib_subdirectory + 475: 0000000000028b78 152 FUNC GLOBAL DEFAULT 11 pango_markup_parser_new + 476: 00000000000187fc 284 FUNC GLOBAL DEFAULT 11 pango_attr_list_filter + 477: 0000000000014fd0 220 FUNC GLOBAL DEFAULT 11 pango_font_description_to_filename + 478: 0000000000015ad8 152 FUNC GLOBAL DEFAULT 11 pango_font_face_is_synthesized + 479: 000000000001b124 88 FUNC GLOBAL DEFAULT 11 pango_context_set_gravity_hint + 480: 000000000001f810 268 FUNC GLOBAL DEFAULT 11 pango_language_from_string + 481: 00000000000245ac 116 FUNC GLOBAL DEFAULT 11 pango_layout_get_lines + 482: 0000000000013d34 68 FUNC GLOBAL DEFAULT 11 pango_font_description_get_weight + 483: 000000000001b9e0 248 FUNC GLOBAL DEFAULT 11 pango_coverage_unref + 484: 0000000000014148 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_set_fields + 485: 0000000000013e5c 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_size + 486: 000000000002a470 148 FUNC GLOBAL DEFAULT 11 pango_renderer_get_alpha + 487: 0000000000017574 88 FUNC GLOBAL DEFAULT 11 pango_attr_strikethrough_color_new + 488: 0000000000019070 100 FUNC GLOBAL DEFAULT 11 pango_color_to_string + 489: 00000000000150ac 40 FUNC GLOBAL DEFAULT 11 pango_parse_style + 490: 0000000000013df4 104 FUNC GLOBAL DEFAULT 11 pango_font_description_set_size + 491: 000000000000eb8c 108 FUNC GLOBAL DEFAULT 11 pango_wrap_mode_get_type + 492: 00000000000216c4 84 FUNC GLOBAL DEFAULT 11 pango_layout_get_indent + 493: 00000000000119c0 436 FUNC GLOBAL DEFAULT 11 pango_find_paragraph_boundary + 494: 0000000000011904 188 FUNC GLOBAL DEFAULT 11 pango_break + 495: 0000000000017b3c 24 FUNC GLOBAL DEFAULT 11 pango_attr_list_ref + 496: 0000000000025b28 148 FUNC GLOBAL DEFAULT 11 pango_layout_get_iter + 497: 000000000001d4f8 152 FUNC GLOBAL DEFAULT 11 pango_font_map_get_serial + 498: 00000000000161bc 364 FUNC GLOBAL DEFAULT 11 pango_glyph_string_get_logical_widths + 499: 000000000000eab4 108 FUNC GLOBAL DEFAULT 11 pango_gravity_hint_get_type + 500: 0000000000018b84 684 FUNC GLOBAL DEFAULT 11 pango_log2vis_get_embedding_levels + 501: 0000000000012eac 108 FUNC GLOBAL DEFAULT 11 pango_font_description_free + 502: 0000000000021cf4 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_tabs + 503: 0000000000024330 264 FUNC GLOBAL DEFAULT 11 pango_layout_get_unknown_glyphs_count + 504: 0000000000021c4c 168 FUNC GLOBAL DEFAULT 11 pango_layout_set_tabs + 505: 000000000001f3c0 96 FUNC GLOBAL DEFAULT 11 pango_item_free + 506: 0000000000015a54 132 FUNC GLOBAL DEFAULT 11 pango_font_face_describe + 507: 000000000001ab60 124 FUNC GLOBAL DEFAULT 11 pango_context_get_font_map + 508: 0000000000025bfc 44 FUNC GLOBAL DEFAULT 11 pango_layout_iter_free + 509: 00000000000244d8 124 FUNC GLOBAL DEFAULT 11 pango_layout_get_log_attrs_readonly + 510: 0000000000013f20 88 FUNC GLOBAL DEFAULT 11 pango_font_description_get_size_is_absolute + 511: 00000000000214a0 104 FUNC GLOBAL DEFAULT 11 pango_layout_set_height + 512: 0000000000013f78 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_gravity + 513: 0000000000017818 124 FUNC GLOBAL DEFAULT 11 pango_attr_shape_new + 514: 000000000001b97c 100 FUNC GLOBAL DEFAULT 11 pango_coverage_ref + 515: 000000000002aa0c 100 FUNC GLOBAL DEFAULT 11 pango_renderer_set_matrix + 516: 00000000000153c4 52 FUNC GLOBAL DEFAULT 11 pango_font_get_font_map + 517: 0000000000016328 704 FUNC GLOBAL DEFAULT 11 pango_glyph_string_index_to_x + 518: 000000000001d92c 208 FUNC GLOBAL DEFAULT 11 pango_fontset_foreach + 519: 000000000001eb7c 680 FUNC GLOBAL DEFAULT 11 pango_glyph_item_apply_attrs + 520: 0000000000018918 160 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_get_attrs + 521: 000000000002c004 860 FUNC GLOBAL DEFAULT 11 pango_read_line + 522: 00000000000168fc 20 FUNC GLOBAL DEFAULT 11 pango_map_get_engines + 523: 000000000002bed8 300 FUNC GLOBAL DEFAULT 11 pango_split_file_list + 524: 000000000002a7bc 216 FUNC GLOBAL DEFAULT 11 pango_renderer_set_alpha + 525: 00000000000265e8 860 FUNC GLOBAL DEFAULT 11 pango_layout_get_cursor_pos + 526: 000000000001472c 284 FUNC GLOBAL DEFAULT 11 pango_font_description_equal + 527: 000000000002c784 144 FUNC GLOBAL DEFAULT 11 pango_get_sysconf_subdirectory + 528: 00000000000155f4 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_approximate_digit_width + 529: 000000000001815c 396 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_next + 530: 0000000000021128 140 FUNC GLOBAL DEFAULT 11 pango_layout_get_type + 531: 0000000000021508 84 FUNC GLOBAL DEFAULT 11 pango_layout_get_height + 532: 000000000001cf60 96 FUNC GLOBAL DEFAULT 11 pango_font_map_create_context + 533: 000000000001744c 72 FUNC GLOBAL DEFAULT 11 pango_attr_font_desc_new + 534: 00000000000140f4 84 FUNC GLOBAL DEFAULT 11 pango_font_description_get_variations + 535: 000000000002b234 124 FUNC GLOBAL DEFAULT 11 pango_renderer_get_matrix + 536: 000000000001af98 84 FUNC GLOBAL DEFAULT 11 pango_context_get_base_dir + 537: 000000000001f9b0 4 FUNC GLOBAL DEFAULT 11 pango_language_to_string + 538: 000000000001749c 64 FUNC GLOBAL DEFAULT 11 pango_attr_underline_new + 539: 0000000000020598 28 FUNC GLOBAL DEFAULT 11 pango_layout_line_ref + 540: 00000000000263c0 552 FUNC GLOBAL DEFAULT 11 pango_layout_index_to_pos + 541: 0000000000012e30 124 FUNC GLOBAL DEFAULT 11 pango_font_description_copy + 542: 000000000001dc68 44 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_new + 543: 000000000002c39c 320 FUNC GLOBAL DEFAULT 11 pango_scan_word + 544: 0000000000029240 56 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_distance + 545: 000000000001dfe0 12 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_size + 546: 00000000000171e8 88 FUNC GLOBAL DEFAULT 11 pango_attr_foreground_new + 547: 000000000001b34c 256 FUNC GLOBAL DEFAULT 11 pango_itemize + 548: 0000000000025ce8 124 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_run_readonly + 549: 000000000001f30c 180 FUNC GLOBAL DEFAULT 11 pango_item_copy + 550: 000000000002b778 416 FUNC GLOBAL DEFAULT 11 pango_tab_array_new_with_positions + 551: 0000000000013c70 56 FUNC GLOBAL DEFAULT 11 pango_font_description_set_variant + 552: 000000000001acc8 100 FUNC GLOBAL DEFAULT 11 pango_context_load_fontset + 553: 000000000002b2d0 4 FUNC GLOBAL DEFAULT 11 pango_script_for_unichar + 554: 00000000000205b4 232 FUNC GLOBAL DEFAULT 11 pango_layout_iter_copy + 555: 000000000001ad2c 216 FUNC GLOBAL DEFAULT 11 pango_context_set_font_description + 556: 000000000001ae04 84 FUNC GLOBAL DEFAULT 11 pango_context_get_font_description + 557: 000000000001581c 132 FUNC GLOBAL DEFAULT 11 pango_font_family_get_name + 558: 0000000000015d44 68 FUNC GLOBAL DEFAULT 11 pango_glyph_string_free + 559: 00000000000602e8 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 560: 000000000002bc48 224 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_tabs + 561: 000000000000eb20 108 FUNC GLOBAL DEFAULT 11 pango_alignment_get_type + 562: 000000000002b2c4 12 FUNC GLOBAL DEFAULT 11 pango_renderer_get_layout_line + 563: 000000000001e60c 108 FUNC GLOBAL DEFAULT 11 pango_glyph_item_get_type + 564: 000000000001b1d0 380 FUNC GLOBAL DEFAULT 11 pango_itemize_with_base_dir + 565: 000000000002c4dc 496 FUNC GLOBAL DEFAULT 11 pango_scan_string + 566: 000000000001d6f4 132 FUNC GLOBAL DEFAULT 11 pango_fontset_get_type + 567: 0000000000020fe8 156 FUNC GLOBAL DEFAULT 11 pango_layout_line_unref + 568: 00000000000135cc 84 FUNC GLOBAL DEFAULT 11 pango_font_metrics_unref + 569: 0000000000025de0 72 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line_readonly + 570: 0000000000015d88 40 FUNC GLOBAL DEFAULT 11 pango_glyph_string_new + 571: 000000000001514c 132 FUNC GLOBAL DEFAULT 11 pango_font_get_type + 572: 000000000001b44c 832 FUNC GLOBAL DEFAULT 11 pango_context_get_metrics + 573: 000000000002b2d8 12 FUNC GLOBAL DEFAULT 11 pango_script_iter_free + 574: 000000000002cc78 16 FUNC GLOBAL DEFAULT 11 pango_units_to_double + 575: 0000000000026f70 88 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_layout_extents + 576: 0000000000015db0 184 FUNC GLOBAL DEFAULT 11 pango_glyph_string_set_size + 577: 000000000002cac0 168 FUNC GLOBAL DEFAULT 11 pango_find_base_dir + 578: 0000000000021604 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_wrap + 579: 00000000000173cc 64 FUNC GLOBAL DEFAULT 11 pango_attr_variant_new + 580: 0000000000016dcc 92 FUNC GLOBAL DEFAULT 11 pango_attr_type_get_name + 581: 00000000000152d0 92 FUNC GLOBAL DEFAULT 11 pango_font_get_coverage + 582: 0000000000017690 64 FUNC GLOBAL DEFAULT 11 pango_attr_letter_spacing_new + 583: 0000000000029140 180 FUNC GLOBAL DEFAULT 11 pango_matrix_get_font_scale_factors + 584: 000000000002155c 168 FUNC GLOBAL DEFAULT 11 pango_layout_set_wrap + 585: 000000000000e754 108 FUNC GLOBAL DEFAULT 11 pango_direction_get_type + 586: 000000000001a7dc 140 FUNC GLOBAL DEFAULT 11 pango_context_get_type + 587: 0000000000024774 380 FUNC GLOBAL DEFAULT 11 pango_layout_index_to_line_x + 588: 0000000000026a68 308 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_cluster_extents + 589: 0000000000017ac4 120 FUNC GLOBAL DEFAULT 11 pango_attr_list_copy + 590: 0000000000024554 88 FUNC GLOBAL DEFAULT 11 pango_layout_get_line_count + 591: 0000000000013a0c 80 FUNC GLOBAL DEFAULT 11 pango_font_description_new + 592: 000000000001d590 128 FUNC GLOBAL DEFAULT 11 pango_font_map_changed + 593: 000000000002a170 104 FUNC GLOBAL DEFAULT 11 pango_renderer_activate diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libpthread.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libpthread.so.0.txt new file mode 100644 index 000000000000..8cf62fe4ad93 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libpthread.so.0.txt @@ -0,0 +1,319 @@ +Library: /lib64/libpthread.so.0 +Package: glibc-2.17-326.el7_9.aarch64 + + +Symbol table '.dynsym' contains 313 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000004e30 0 SECTION LOCAL DEFAULT 11 + 2: 000000000002fb70 0 SECTION LOCAL DEFAULT 24 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (4) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.17 (4) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (4) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (4) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.17 (4) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.17 (4) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getrlimit@GLIBC_PRIVATE (5) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __gettimeofday@GLIBC_2.17 (4) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND twalk@GLIBC_2.17 (4) + 12: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlclose@GLIBC_PRIVATE (5) + 14: 0000000000000000 0 TLS GLOBAL DEFAULT UND errno@GLIBC_PRIVATE (5) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_fatal@GLIBC_PRIVATE (5) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getpagesize@GLIBC_2.17 (4) + 17: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (4) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sprintf@GLIBC_2.17 (4) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (4) + 20: 0000000000000000 0 TLS GLOBAL DEFAULT UND __resp@GLIBC_PRIVATE (5) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_secure_getenv@GLIBC_PRIVATE (5) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tfind@GLIBC_2.17 (4) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (4) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_system@GLIBC_PRIVATE (5) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (4) + 27: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __pointer_chk_guard@GLIBC_PRIVATE (6) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (4) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_fork@GLIBC_PRIVATE (5) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __endmntent@GLIBC_2.17 (4) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tsearch@GLIBC_2.17 (4) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.17 (4) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_deallocate_tls@GLIBC_PRIVATE (6) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (4) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (4) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_thread_freeres@GLIBC_PRIVATE (5) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sched_getparam@GLIBC_2.17 (4) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_get_priority_max@GLIBC_2.17 (4) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __statfs@GLIBC_2.17 (4) + 40: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.17 (4) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tdelete@GLIBC_2.17 (4) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (4) + 43: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (6) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_current_sigrtmax_private@GLIBC_PRIVATE (5) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_setparam@GLIBC_2.17 (4) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlopen_mode@GLIBC_PRIVATE (5) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (4) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_make_stack_executable@GLIBC_PRIVATE (6) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_yield@GLIBC_2.17 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_pthread_init@GLIBC_PRIVATE (5) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_init@GLIBC_PRIVATE (5) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (4) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_get_priority_min@GLIBC_2.17 (4) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __setmntent@GLIBC_2.17 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getmntent_r@GLIBC_2.17 (4) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mempcpy@GLIBC_2.17 (4) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat64@GLIBC_2.17 (4) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlsym@GLIBC_PRIVATE (5) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sched_setscheduler@GLIBC_2.17 (4) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_current_sigrtmin_private@GLIBC_PRIVATE (5) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (4) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getrlimit@GLIBC_2.17 (4) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __madvise@GLIBC_PRIVATE (5) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dl_error_tsd@GLIBC_PRIVATE (5) + 66: 0000000000000000 0 TLS GLOBAL DEFAULT UND __h_errno@GLIBC_PRIVATE (5) + 67: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.17 (4) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __mktemp@GLIBC_PRIVATE (5) + 69: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __libc_stack_end@GLIBC_2.17 (7) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clone@GLIBC_2.17 (4) + 71: 0000000000000000 0 OBJECT WEAK DEFAULT UND environ@GLIBC_2.17 (4) + 72: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_allocate_tls@GLIBC_PRIVATE (6) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND link@GLIBC_2.17 (4) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sched_getscheduler@GLIBC_2.17 (4) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_get_tls_static_info@GLIBC_PRIVATE (6) + 77: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_allocate_tls_init@GLIBC_PRIVATE (6) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND prctl@GLIBC_2.17 (4) + 80: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global@GLIBC_PRIVATE (6) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_allocate_rtsig_private@GLIBC_PRIVATE (5) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_longjmp@GLIBC_PRIVATE (5) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mprotect@GLIBC_2.17 (4) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getdelim@GLIBC_2.17 (4) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (4) + 86: 0000000000010b18 44 FUNC GLOBAL DEFAULT 13 __sigaction@@GLIBC_2.17 + 87: 0000000000009034 12 FUNC GLOBAL DEFAULT 13 pthread_equal@@GLIBC_2.17 + 88: 0000000000010b6c 20 FUNC GLOBAL DEFAULT 13 __res_state@@GLIBC_2.17 + 89: 000000000000bba0 16 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_init@@GLIBC_2.17 + 90: 000000000000cdd8 144 FUNC GLOBAL DEFAULT 13 pthread_getspecific@@GLIBC_2.17 + 91: 000000000000906c 340 FUNC GLOBAL DEFAULT 13 pthread_getschedparam@@GLIBC_2.17 + 92: 000000000000f3f0 56 FUNC WEAK DEFAULT 13 close@@GLIBC_2.17 + 93: 000000000000e784 172 FUNC GLOBAL DEFAULT 13 sem_post@@GLIBC_2.17 + 94: 0000000000010b18 44 FUNC WEAK DEFAULT 13 sigaction@@GLIBC_2.17 + 95: 000000000000f518 368 FUNC WEAK DEFAULT 13 __fcntl@@GLIBC_2.17 + 96: 000000000000bbe4 16 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_getkind_np@@GLIBC_2.17 + 97: 00000000000093f8 60 FUNC GLOBAL DEFAULT 13 pthread_attr_init@@GLIBC_2.17 + 98: 0000000000009a04 288 FUNC GLOBAL DEFAULT 13 __pthread_mutex_init@@GLIBC_2.17 + 99: 000000000000b9e4 444 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_unlock@@GLIBC_2.17 + 100: 000000000000afd8 28 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_gettype@@GLIBC_2.17 + 101: 000000000000e4b8 88 FUNC GLOBAL DEFAULT 13 sem_trywait@@GLIBC_2.17 + 102: 0000000000009564 44 FUNC GLOBAL DEFAULT 13 pthread_attr_setschedpolicy@@GLIBC_2.17 + 103: 000000000000ea78 216 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_pop_restore@@GLIBC_2.17 + 104: 000000000000f3f0 56 FUNC WEAK DEFAULT 13 __close@@GLIBC_2.17 + 105: 000000000000fedc 328 FUNC WEAK DEFAULT 13 __open64@@GLIBC_2.17 + 106: 000000000000c8a8 12 FUNC GLOBAL DEFAULT 13 pthread_condattr_init@@GLIBC_2.17 + 107: 0000000000009044 12 FUNC GLOBAL DEFAULT 13 pthread_getconcurrency@@GLIBC_2.17 + 108: 000000000000ece4 12 FUNC WEAK DEFAULT 13 siglongjmp@@GLIBC_2.17 + 109: 00000000000102b0 68 FUNC WEAK DEFAULT 13 pwrite64@@GLIBC_2.17 + 110: 000000000000fccc 328 FUNC WEAK DEFAULT 13 open@@GLIBC_2.17 + 111: 000000000000f880 76 FUNC WEAK DEFAULT 13 recvfrom@@GLIBC_2.17 + 112: 000000000001128c 20 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getprotocol@@GLIBC_2.17 + 113: 000000000000b084 12 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_destroy@@GLIBC_2.17 + 114: 0000000000011814 572 FUNC GLOBAL DEFAULT 13 pthread_mutex_setprioceiling@@GLIBC_2.17 + 115: 000000000000cff0 80 FUNC GLOBAL DEFAULT 13 pthread_kill@@GLIBC_2.17 + 116: 000000000000d6a0 64 FUNC GLOBAL DEFAULT 13 sem_init@@GLIBC_2.17 + 117: 000000000000ae1c 340 FUNC GLOBAL DEFAULT 13 pthread_mutex_unlock@@GLIBC_2.17 + 118: 000000000000b034 80 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_init@@GLIBC_2.17 + 119: 000000000000d674 44 FUNC GLOBAL DEFAULT 13 pthread_getcpuclockid@@GLIBC_2.17 + 120: 000000000000b090 472 FUNC WEAK DEFAULT 13 pthread_rwlock_rdlock@@GLIBC_2.17 + 121: 000000000000cd7c 92 FUNC GLOBAL DEFAULT 13 pthread_key_delete@@GLIBC_2.17 + 122: 0000000000011324 128 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setprioceiling@@GLIBC_2.17 + 123: 000000000000e8e0 204 FUNC GLOBAL DEFAULT 13 __pthread_unregister_cancel_restore@@GLIBC_2.17 + 124: 0000000000008cb8 360 FUNC GLOBAL DEFAULT 13 pthread_join@@GLIBC_2.17 + 125: 000000000000aff4 64 FUNC GLOBAL DEFAULT 13 __pthread_mutexattr_settype@@GLIBC_2.17 + 126: 0000000000009590 20 FUNC GLOBAL DEFAULT 13 pthread_attr_getinheritsched@@GLIBC_2.17 + 127: 0000000000010b88 4 FUNC GLOBAL DEFAULT 13 __libc_allocate_rtsig@@GLIBC_2.17 + 128: 0000000000010e50 260 FUNC GLOBAL DEFAULT 13 pthread_attr_setaffinity_np@@GLIBC_2.17 + 129: 00000000000080bc 2800 FUNC GLOBAL DEFAULT 13 pthread_create@@GLIBC_2.17 + 130: 0000000000010b44 40 FUNC GLOBAL DEFAULT 13 __h_errno_location@@GLIBC_2.17 + 131: 000000000000d0f8 268 FUNC GLOBAL DEFAULT 13 pthread_cancel@@GLIBC_2.17 + 132: 000000000001081c 96 FUNC GLOBAL DEFAULT 13 raise@@GLIBC_2.17 + 133: 00000000000096ac 56 FUNC GLOBAL DEFAULT 13 pthread_attr_setstack@@GLIBC_2.17 + 134: 000000000000fac0 76 FUNC WEAK DEFAULT 13 sendto@@GLIBC_2.17 + 135: 000000000000966c 36 FUNC GLOBAL DEFAULT 13 pthread_attr_setstacksize@@GLIBC_2.17 + 136: 000000000000d65c 24 FUNC WEAK DEFAULT 13 pthread_once@@GLIBC_2.17 + 137: 000000000000d278 480 FUNC GLOBAL DEFAULT 13 pthread_setcancelstate@@GLIBC_2.17 + 138: 0000000000010fe4 36 FUNC GLOBAL DEFAULT 13 __pthread_cleanup_routine@@GLIBC_2.17 + 139: 000000000000b838 224 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_tryrdlock@@GLIBC_2.17 + 140: 0000000000010b84 4 FUNC GLOBAL DEFAULT 13 __libc_current_sigrtmax@@GLIBC_2.17 + 141: 0000000000010024 332 FUNC WEAK DEFAULT 13 pause@@GLIBC_2.17 + 142: 00000000000103a8 188 FUNC WEAK DEFAULT 13 wait@@GLIBC_2.17 + 143: 000000000000bbc8 28 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_setpshared@@GLIBC_2.17 + 144: 000000000000fedc 328 FUNC WEAK DEFAULT 13 open64@@GLIBC_2.17 + 145: 000000000000c8f8 20 FUNC GLOBAL DEFAULT 13 pthread_condattr_getclock@@GLIBC_2.17 + 146: 000000000000b47c 444 FUNC WEAK DEFAULT 13 pthread_rwlock_wrlock@@GLIBC_2.17 + 147: 000000000000cb3c 384 FUNC GLOBAL DEFAULT 13 pthread_barrier_wait@@GLIBC_2.17 + 148: 000000000000e864 124 FUNC GLOBAL DEFAULT 13 __pthread_register_cancel_defer@@GLIBC_2.17 + 149: 000000000000e060 308 FUNC GLOBAL DEFAULT 13 sem_close@@GLIBC_2.17 + 150: 0000000000009650 28 FUNC GLOBAL DEFAULT 13 pthread_attr_getstacksize@@GLIBC_2.17 + 151: 0000000000011f60 20 FUNC GLOBAL DEFAULT 13 __errno_location@@GLIBC_2.17 + 152: 000000000000b268 532 FUNC GLOBAL DEFAULT 13 pthread_rwlock_timedrdlock@@GLIBC_2.17 + 153: 0000000000010624 280 FUNC WEAK DEFAULT 13 sigwait@@GLIBC_2.17 + 154: 000000000000aff4 64 FUNC WEAK DEFAULT 13 pthread_mutexattr_setkind_np@@GLIBC_2.17 + 155: 000000000000c938 12 FUNC GLOBAL DEFAULT 13 pthread_spin_init@@GLIBC_2.17 + 156: 000000000000a3a0 2312 FUNC GLOBAL DEFAULT 13 pthread_mutex_timedlock@@GLIBC_2.17 + 157: 000000000000ccc8 8 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_destroy@@GLIBC_2.17 + 158: 0000000000010880 136 FUNC WEAK DEFAULT 13 flockfile@@GLIBC_2.17 + 159: 000000000000b918 204 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_trywrlock@@GLIBC_2.17 + 160: 0000000000010f68 64 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setrobust@@GLIBC_2.17 + 161: 000000000000ecd4 16 FUNC GLOBAL DEFAULT 13 __pthread_unwind_next@@GLIBC_2.17 + 162: 000000000000e9ac 32 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_push@@GLIBC_2.17 + 163: 00000000000095e4 20 FUNC GLOBAL DEFAULT 13 pthread_attr_getscope@@GLIBC_2.17 + 164: 0000000000011d2c 4 FUNC GLOBAL DEFAULT 13 fork@@GLIBC_2.17 + 165: 000000000000f280 84 FUNC WEAK DEFAULT 13 vfork@@GLIBC_2.17 + 166: 000000000000cf78 120 FUNC GLOBAL DEFAULT 13 pthread_sigmask@@GLIBC_2.17 + 167: 000000000000fbb0 64 FUNC WEAK DEFAULT 13 lseek@@GLIBC_2.17 + 168: 000000000000ec9c 56 FUNC GLOBAL DEFAULT 13 __pthread_unwind@@GLIBC_PRIVATE + 169: 000000000000af7c 8 FUNC GLOBAL DEFAULT 13 __pthread_mutexattr_destroy@@GLIBC_2.17 + 170: 000000000000bbb0 8 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_destroy@@GLIBC_2.17 + 171: 000000000000fc90 60 FUNC WEAK DEFAULT 13 __nanosleep@@GLIBC_2.17 + 172: 0000000000010230 68 FUNC WEAK DEFAULT 13 pread@@GLIBC_2.17 + 173: 000000000000f730 64 FUNC WEAK DEFAULT 13 connect@@GLIBC_2.17 + 174: 000000000000b638 512 FUNC GLOBAL DEFAULT 13 pthread_rwlock_timedwrlock@@GLIBC_2.17 + 175: 000000000000f940 224 FUNC WEAK DEFAULT 13 send@@GLIBC_2.17 + 176: 000000000000fc90 60 FUNC WEAK DEFAULT 13 nanosleep@@GLIBC_2.17 + 177: 0000000000008ed4 340 FUNC GLOBAL DEFAULT 13 pthread_timedjoin_np@@GLIBC_2.17 + 178: 0000000000010464 204 FUNC WEAK DEFAULT 13 waitpid@@GLIBC_2.17 + 179: 0000000000009554 16 FUNC GLOBAL DEFAULT 13 pthread_attr_getschedpolicy@@GLIBC_2.17 + 180: 0000000000009464 64 FUNC GLOBAL DEFAULT 13 pthread_attr_setdetachstate@@GLIBC_2.17 + 181: 000000000000f280 84 FUNC GLOBAL DEFAULT 13 __vfork@@GLIBC_2.17 + 182: 000000000000c604 304 FUNC GLOBAL DEFAULT 13 pthread_cond_signal@@GLIBC_2.17 + 183: 000000000000fbb0 64 FUNC WEAK DEFAULT 13 __lseek@@GLIBC_2.17 + 184: 00000000000094d0 132 FUNC GLOBAL DEFAULT 13 pthread_attr_setschedparam@@GLIBC_2.17 + 185: 0000000000009434 28 FUNC GLOBAL DEFAULT 13 pthread_attr_destroy@@GLIBC_2.17 + 186: 0000000000010cf0 144 FUNC GLOBAL DEFAULT 13 pthread_setaffinity_np@@GLIBC_2.17 + 187: 000000000000fccc 328 FUNC WEAK DEFAULT 13 __open@@GLIBC_2.17 + 188: 00000000000095a4 64 FUNC GLOBAL DEFAULT 13 pthread_attr_setinheritsched@@GLIBC_2.17 + 189: 00000000000096e4 800 FUNC GLOBAL DEFAULT 13 pthread_getattr_np@@GLIBC_2.17 + 190: 00000000000102b0 68 FUNC WEAK DEFAULT 13 pwrite@@GLIBC_2.17 + 191: 0000000000011a50 352 FUNC GLOBAL DEFAULT 13 pthread_setname_np@@GLIBC_2.17 + 192: 000000000000f730 64 FUNC WEAK DEFAULT 13 __connect@@GLIBC_2.17 + 193: 000000000000c8bc 20 FUNC GLOBAL DEFAULT 13 pthread_condattr_getpshared@@GLIBC_2.17 + 194: 0000000000010f54 20 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getrobust@@GLIBC_2.17 + 195: 0000000000009b58 592 FUNC GLOBAL DEFAULT 13 pthread_mutex_lock@@GLIBC_2.17 + 196: 00000000000117f0 36 FUNC GLOBAL DEFAULT 13 pthread_mutex_getprioceiling@@GLIBC_2.17 + 197: 000000000000fbb0 64 FUNC WEAK DEFAULT 13 lseek64@@GLIBC_2.17 + 198: 00000000000112cc 88 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getprioceiling@@GLIBC_2.17 + 199: 0000000000010d80 208 FUNC GLOBAL DEFAULT 13 pthread_attr_getaffinity_np@@GLIBC_2.17 + 200: 000000000000ce68 272 FUNC GLOBAL DEFAULT 13 __pthread_setspecific@@GLIBC_2.17 + 201: 000000000000bbf4 28 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_setkind_np@@GLIBC_2.17 + 202: 00000000000109a8 72 FUNC GLOBAL DEFAULT 13 _IO_funlockfile@@GLIBC_2.17 + 203: 000000000000ccbc 12 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_init@@GLIBC_2.17 + 204: 000000000000e830 32 FUNC GLOBAL DEFAULT 13 __pthread_register_cancel@@GLIBC_2.17 + 205: 0000000000009b58 592 FUNC GLOBAL DEFAULT 13 __pthread_mutex_lock@@GLIBC_2.17 + 206: 0000000000009028 12 FUNC GLOBAL DEFAULT 13 pthread_self@@GLIBC_2.17 + 207: 000000000000ccd0 16 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_getpshared@@GLIBC_2.17 + 208: 0000000000009da8 1516 FUNC GLOBAL DEFAULT 13 pthread_mutex_trylock@@GLIBC_2.17 + 209: 000000000000b034 80 FUNC GLOBAL DEFAULT 13 pthread_rwlock_init@@GLIBC_2.17 + 210: 0000000000010fa8 60 FUNC GLOBAL DEFAULT 13 pthread_mutex_consistent@@GLIBC_2.17 + 211: 0000000000009638 24 FUNC GLOBAL DEFAULT 13 pthread_attr_setstackaddr@@GLIBC_2.17 + 212: 00000000000103a8 188 FUNC WEAK DEFAULT 13 __wait@@GLIBC_2.17 + 213: 000000000000c90c 44 FUNC GLOBAL DEFAULT 13 pthread_condattr_setclock@@GLIBC_2.17 + 214: 00000000000094c0 16 FUNC GLOBAL DEFAULT 13 pthread_attr_getschedparam@@GLIBC_2.17 + 215: 0000000000010230 68 FUNC WEAK DEFAULT 13 pread64@@GLIBC_2.17 + 216: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 217: 000000000000b090 472 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_rdlock@@GLIBC_2.17 + 218: 000000000000af84 20 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getpshared@@GLIBC_2.17 + 219: 0000000000009b24 52 FUNC GLOBAL DEFAULT 13 pthread_mutex_destroy@@GLIBC_2.17 + 220: 000000000000bfc4 700 FUNC GLOBAL DEFAULT 13 pthread_cond_wait@@GLIBC_2.17 + 221: 00000000000102b0 68 FUNC WEAK DEFAULT 13 __pwrite64@@GLIBC_2.17 + 222: 00000000000094b4 12 FUNC GLOBAL DEFAULT 13 pthread_attr_setguardsize@@GLIBC_2.17 + 223: 000000000000f380 64 FUNC WEAK DEFAULT 13 read@@GLIBC_2.17 + 224: 000000000000f6c0 64 FUNC WEAK DEFAULT 13 accept@@GLIBC_2.17 + 225: 000000000000e70c 120 FUNC GLOBAL DEFAULT 13 sem_timedwait@@GLIBC_2.17 + 226: 000000000000ca10 108 FUNC GLOBAL DEFAULT 13 pthread_barrier_init@@GLIBC_2.17 + 227: 000000000000f310 64 FUNC WEAK DEFAULT 13 write@@GLIBC_2.17 + 228: 0000000000010230 68 FUNC WEAK DEFAULT 13 __pread64@@GLIBC_2.17 + 229: 0000000000010b8c 4 FUNC GLOBAL DEFAULT 13 pthread_kill_other_threads_np@GLIBC_2.17 + 230: 0000000000009628 16 FUNC GLOBAL DEFAULT 13 pthread_attr_getstackaddr@@GLIBC_2.17 + 231: 00000000000095f8 48 FUNC GLOBAL DEFAULT 13 pthread_attr_setscope@@GLIBC_2.17 + 232: 000000000000af70 12 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_init@@GLIBC_2.17 + 233: 0000000000010880 136 FUNC GLOBAL DEFAULT 13 _IO_flockfile@@GLIBC_2.17 + 234: 000000000000e2d4 16 FUNC GLOBAL DEFAULT 13 sem_getvalue@@GLIBC_2.17 + 235: 000000000000bc70 476 FUNC GLOBAL DEFAULT 13 pthread_cond_destroy@@GLIBC_2.17 + 236: 000000000000b47c 444 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_wrlock@@GLIBC_2.17 + 237: 000000000000cdd8 144 FUNC GLOBAL DEFAULT 13 __pthread_getspecific@@GLIBC_2.17 + 238: 0000000000011d2c 4 FUNC GLOBAL DEFAULT 13 __fork@@GLIBC_2.17 + 239: 000000000000db78 1216 FUNC GLOBAL DEFAULT 13 sem_open@@GLIBC_2.17 + 240: 0000000000008e20 172 FUNC GLOBAL DEFAULT 13 pthread_tryjoin_np@@GLIBC_2.17 + 241: 000000000000b9e4 444 FUNC WEAK DEFAULT 13 pthread_rwlock_unlock@@GLIBC_2.17 + 242: 000000000000f900 64 FUNC WEAK DEFAULT 13 recvmsg@@GLIBC_2.17 + 243: 000000000000ae1c 340 FUNC GLOBAL DEFAULT 13 __pthread_mutex_unlock@@GLIBC_2.17 + 244: 000000000000f310 64 FUNC WEAK DEFAULT 13 __write@@GLIBC_2.17 + 245: 000000000000c280 900 FUNC GLOBAL DEFAULT 13 pthread_cond_timedwait@@GLIBC_2.17 + 246: 00000000000094a4 16 FUNC GLOBAL DEFAULT 13 pthread_attr_getguardsize@@GLIBC_2.17 + 247: 00000000000109a8 72 FUNC WEAK DEFAULT 13 funlockfile@@GLIBC_2.17 + 248: 0000000000008c00 136 FUNC GLOBAL DEFAULT 13 pthread_detach@@GLIBC_2.17 + 249: 000000000000f940 224 FUNC GLOBAL DEFAULT 13 __send@@GLIBC_2.17 + 250: 0000000000010908 160 FUNC GLOBAL DEFAULT 13 _IO_ftrylockfile@@GLIBC_2.17 + 251: 00000000000092e4 276 FUNC GLOBAL DEFAULT 13 pthread_setschedprio@@GLIBC_2.17 + 252: 000000000000d458 488 FUNC GLOBAL DEFAULT 13 pthread_setcanceltype@@GLIBC_2.17 + 253: 0000000000010908 160 FUNC WEAK DEFAULT 13 ftrylockfile@@GLIBC_2.17 + 254: 0000000000009450 20 FUNC GLOBAL DEFAULT 13 pthread_attr_getdetachstate@@GLIBC_2.17 + 255: 0000000000008bac 84 FUNC GLOBAL DEFAULT 13 pthread_exit@@GLIBC_2.17 + 256: 000000000000fc20 64 FUNC WEAK DEFAULT 13 msync@@GLIBC_2.17 + 257: 0000000000010b90 104 FUNC GLOBAL DEFAULT 13 pthread_getaffinity_np@@GLIBC_2.17 + 258: 000000000000fa50 64 FUNC WEAK DEFAULT 13 sendmsg@@GLIBC_2.17 + 259: 000000000000c94c 132 FUNC GLOBAL DEFAULT 13 pthread_spin_lock@@GLIBC_2.17 + 260: 000000000000ccfc 128 FUNC GLOBAL DEFAULT 13 pthread_key_create@@GLIBC_2.17 + 261: 000000000000ca00 16 FUNC GLOBAL DEFAULT 13 pthread_spin_unlock@@GLIBC_2.17 + 262: 000000000000e470 72 FUNC GLOBAL DEFAULT 13 sem_wait@@GLIBC_2.17 + 263: 000000000000bbb8 16 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_getpshared@@GLIBC_2.17 + 264: 000000000000ca7c 192 FUNC GLOBAL DEFAULT 13 pthread_barrier_destroy@@GLIBC_2.17 + 265: 000000000000b838 224 FUNC GLOBAL DEFAULT 13 pthread_rwlock_tryrdlock@@GLIBC_2.17 + 266: 0000000000009050 28 FUNC GLOBAL DEFAULT 13 pthread_setconcurrency@@GLIBC_2.17 + 267: 000000000000f770 224 FUNC WEAK DEFAULT 13 recv@@GLIBC_2.17 + 268: 000000000000ccfc 128 FUNC GLOBAL DEFAULT 13 __pthread_key_create@@GLIBC_2.17 + 269: 0000000000010b80 4 FUNC GLOBAL DEFAULT 13 __libc_current_sigrtmin@@GLIBC_2.17 + 270: 000000000000aff4 64 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_settype@@GLIBC_2.17 + 271: 000000000000af70 12 FUNC GLOBAL DEFAULT 13 __pthread_mutexattr_init@@GLIBC_2.17 + 272: 000000000000e850 20 FUNC GLOBAL DEFAULT 13 __pthread_unregister_cancel@@GLIBC_2.17 + 273: 0000000000010f68 64 FUNC WEAK DEFAULT 13 pthread_mutexattr_setrobust_np@@GLIBC_2.17 + 274: 000000000000e9cc 48 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_pop@@GLIBC_2.17 + 275: 000000000000ece4 12 FUNC GLOBAL DEFAULT 13 longjmp@@GLIBC_2.17 + 276: 000000000000afd8 28 FUNC WEAK DEFAULT 13 pthread_mutexattr_getkind_np@@GLIBC_2.17 + 277: 0000000000006690 840 FUNC GLOBAL DEFAULT 13 __pthread_initialize_minimal@@GLIBC_PRIVATE + 278: 000000000000b918 204 FUNC GLOBAL DEFAULT 13 pthread_rwlock_trywrlock@@GLIBC_2.17 + 279: 000000000000ce68 272 FUNC GLOBAL DEFAULT 13 pthread_setspecific@@GLIBC_2.17 + 280: 00000000000069d8 32 FUNC GLOBAL DEFAULT 13 __pthread_get_minstack@@GLIBC_PRIVATE + 281: 000000000000d65c 24 FUNC GLOBAL DEFAULT 13 __pthread_once@@GLIBC_2.17 + 282: 0000000000009690 28 FUNC GLOBAL DEFAULT 13 pthread_attr_getstack@@GLIBC_2.17 + 283: 000000000000c8d0 40 FUNC GLOBAL DEFAULT 13 pthread_condattr_setpshared@@GLIBC_2.17 + 284: 000000000000c9d0 48 FUNC GLOBAL DEFAULT 13 pthread_spin_trylock@@GLIBC_2.17 + 285: 000000000000d040 184 FUNC GLOBAL DEFAULT 13 pthread_sigqueue@@GLIBC_2.17 + 286: 00000000000091c0 292 FUNC GLOBAL DEFAULT 13 pthread_setschedparam@@GLIBC_2.17 + 287: 000000000000f380 64 FUNC WEAK DEFAULT 13 __read@@GLIBC_2.17 + 288: 0000000000009da8 1516 FUNC GLOBAL DEFAULT 13 __pthread_mutex_trylock@@GLIBC_2.17 + 289: 000000000000e9fc 124 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_push_defer@@GLIBC_2.17 + 290: 000000000000c8b4 8 FUNC GLOBAL DEFAULT 13 pthread_condattr_destroy@@GLIBC_2.17 + 291: 0000000000010f54 20 FUNC WEAK DEFAULT 13 pthread_mutexattr_getrobust_np@@GLIBC_2.17 + 292: 000000000000bc10 96 FUNC GLOBAL DEFAULT 13 pthread_cond_init@@GLIBC_2.17 + 293: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 + 294: 000000000000d6e0 8 FUNC GLOBAL DEFAULT 13 sem_destroy@@GLIBC_2.17 + 295: 000000000000b084 12 FUNC GLOBAL DEFAULT 13 pthread_rwlock_destroy@@GLIBC_2.17 + 296: 000000000000c944 8 FUNC GLOBAL DEFAULT 13 pthread_spin_destroy@@GLIBC_2.17 + 297: 000000000001087c 4 FUNC GLOBAL DEFAULT 13 system@@GLIBC_2.17 + 298: 00000000000112a0 44 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setprotocol@@GLIBC_2.17 + 299: 000000000000e194 320 FUNC GLOBAL DEFAULT 13 sem_unlink@@GLIBC_2.17 + 300: 000000000000c734 372 FUNC GLOBAL DEFAULT 13 pthread_cond_broadcast@@GLIBC_2.17 + 301: 000000000000cce0 28 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_setpshared@@GLIBC_2.17 + 302: 0000000000009b24 52 FUNC GLOBAL DEFAULT 13 __pthread_mutex_destroy@@GLIBC_2.17 + 303: 0000000000010fa8 60 FUNC WEAK DEFAULT 13 pthread_mutex_consistent_np@@GLIBC_2.17 + 304: 000000000000d204 116 FUNC GLOBAL DEFAULT 13 pthread_testcancel@@GLIBC_2.17 + 305: 000000000000fb40 56 FUNC WEAK DEFAULT 13 fsync@@GLIBC_2.17 + 306: 000000000000f518 368 FUNC WEAK DEFAULT 13 fcntl@@GLIBC_2.17 + 307: 00000000000102f4 180 FUNC WEAK DEFAULT 13 tcdrain@@GLIBC_2.17 + 308: 0000000000011bb0 380 FUNC GLOBAL DEFAULT 13 pthread_getname_np@@GLIBC_2.17 + 309: 0000000000009040 4 FUNC GLOBAL DEFAULT 13 pthread_yield@@GLIBC_2.17 + 310: 000000000000af7c 8 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_destroy@@GLIBC_2.17 + 311: 000000000000af98 64 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setpshared@@GLIBC_2.17 + 312: 0000000000009a04 288 FUNC GLOBAL DEFAULT 13 pthread_mutex_init@@GLIBC_2.17 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/librt.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/librt.so.1.txt new file mode 100644 index 000000000000..de99b808ec2e --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/librt.so.1.txt @@ -0,0 +1,106 @@ +Library: /lib64/librt.so.1 +Package: glibc-2.17-326.el7_9.aarch64 + + +Symbol table '.dynsym' contains 100 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001a38 0 SECTION LOCAL DEFAULT 11 + 2: 000000000001fd50 0 SECTION LOCAL DEFAULT 23 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_sigmask@GLIBC_2.17 (4) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (3) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_pwrite@GLIBC_PRIVATE (5) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdatasync@GLIBC_2.17 (3) + 9: 0000000000000000 0 TLS GLOBAL DEFAULT UND errno@GLIBC_PRIVATE (5) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_fatal@GLIBC_PRIVATE (5) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cancel@GLIBC_2.17 (4) + 12: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (3) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.17 (3) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_init@GLIBC_2.17 (4) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __register_atfork@GLIBC_2.17 (3) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigfillset@GLIBC_2.17 (3) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.17 (4) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.17 (3) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (3) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (4) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_destroy@GLIBC_2.17 (4) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.17 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.17 (4) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setschedparam@GLIBC_2.17 (4) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_detach@GLIBC_2.17 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.17 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_barrier_init@GLIBC_2.17 (4) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __endmntent@GLIBC_2.17 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setdetachstate@GLIBC_2.17 (4) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setstacksize@GLIBC_2.17 (4) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __pthread_unwind@GLIBC_PRIVATE (6) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (3) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __pthread_get_minstack@GLIBC_PRIVATE (6) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (3) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __statfs@GLIBC_2.17 (3) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.17 (4) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.17 (4) + 38: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (4) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_exit@GLIBC_2.17 (4) + 41: 0000000000000000 0 FUNC WEAK DEFAULT UND __pthread_once@GLIBC_2.17 (4) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlopen_mode@GLIBC_PRIVATE (5) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getschedparam@GLIBC_2.17 (4) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (3) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __setmntent@GLIBC_2.17 (3) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getmntent_r@GLIBC_2.17 (3) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mempcpy@GLIBC_2.17 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.17 (4) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlsym@GLIBC_PRIVATE (5) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pread@GLIBC_2.17 (4) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (4) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (3) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (4) + 55: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_barrier_wait@GLIBC_2.17 (4) + 57: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.17 (4) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fortify_fail@GLIBC_PRIVATE (5) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (4) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (4) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (3) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.17 (4) + 64: 0000000000002f50 32 FUNC GLOBAL DEFAULT 13 aio_read@@GLIBC_2.17 + 65: 00000000000043a0 52 FUNC GLOBAL DEFAULT 13 mq_close@@GLIBC_2.17 + 66: 0000000000002034 428 FUNC GLOBAL DEFAULT 13 aio_cancel@@GLIBC_2.17 + 67: 0000000000004710 360 FUNC GLOBAL DEFAULT 13 mq_notify@@GLIBC_2.17 + 68: 00000000000021e8 168 FUNC GLOBAL DEFAULT 13 aio_fsync@@GLIBC_2.17 + 69: 000000000000304c 780 FUNC GLOBAL DEFAULT 13 aio_suspend@@GLIBC_2.17 + 70: 00000000000029c8 132 FUNC WEAK DEFAULT 13 aio_init@@GLIBC_2.17 + 71: 0000000000003fa0 416 FUNC GLOBAL DEFAULT 13 shm_open@@GLIBC_2.17 + 72: 0000000000003378 1004 FUNC GLOBAL DEFAULT 13 lio_listio@@GLIBC_2.17 + 73: 0000000000003dc0 56 FUNC GLOBAL DEFAULT 13 timer_settime@@GLIBC_2.17 + 74: 0000000000003c90 200 FUNC GLOBAL DEFAULT 13 timer_delete@@GLIBC_2.17 + 75: 00000000000021e0 8 FUNC GLOBAL DEFAULT 13 aio_error@@GLIBC_2.17 + 76: 00000000000048c0 76 FUNC WEAK DEFAULT 13 mq_timedsend@@GLIBC_2.17 + 77: 0000000000003a28 616 FUNC GLOBAL DEFAULT 13 timer_create@@GLIBC_2.17 + 78: 0000000000004880 8 FUNC GLOBAL DEFAULT 13 mq_receive@@GLIBC_2.17 + 79: 0000000000004140 356 FUNC GLOBAL DEFAULT 13 shm_unlink@@GLIBC_2.17 + 80: 0000000000003358 32 FUNC WEAK DEFAULT 13 aio_write64@@GLIBC_2.17 + 81: 000000000000304c 780 FUNC WEAK DEFAULT 13 aio_suspend64@@GLIBC_2.17 + 82: 0000000000004940 76 FUNC WEAK DEFAULT 13 mq_timedreceive@@GLIBC_2.17 + 83: 0000000000004450 48 FUNC WEAK DEFAULT 13 mq_setattr@@GLIBC_2.17 + 84: 0000000000004440 12 FUNC GLOBAL DEFAULT 13 mq_getattr@@GLIBC_2.17 + 85: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 + 86: 0000000000002f70 8 FUNC GLOBAL DEFAULT 13 aio_return@@GLIBC_2.17 + 87: 0000000000004380 32 FUNC GLOBAL DEFAULT 13 __mq_open_2@@GLIBC_2.17 + 88: 0000000000003d8c 52 FUNC GLOBAL DEFAULT 13 timer_gettime@@GLIBC_2.17 + 89: 00000000000021e0 8 FUNC WEAK DEFAULT 13 aio_error64@@GLIBC_2.17 + 90: 0000000000002034 428 FUNC WEAK DEFAULT 13 aio_cancel64@@GLIBC_2.17 + 91: 0000000000003d58 52 FUNC GLOBAL DEFAULT 13 timer_getoverrun@@GLIBC_2.17 + 92: 0000000000004878 8 FUNC GLOBAL DEFAULT 13 mq_send@@GLIBC_2.17 + 93: 0000000000002f70 8 FUNC WEAK DEFAULT 13 aio_return64@@GLIBC_2.17 + 94: 00000000000042a4 220 FUNC GLOBAL DEFAULT 13 mq_open@@GLIBC_2.17 + 95: 0000000000002f50 32 FUNC WEAK DEFAULT 13 aio_read64@@GLIBC_2.17 + 96: 00000000000043d4 108 FUNC GLOBAL DEFAULT 13 mq_unlink@@GLIBC_2.17 + 97: 0000000000003378 1004 FUNC GLOBAL DEFAULT 13 lio_listio64@@GLIBC_2.17 + 98: 0000000000003358 32 FUNC GLOBAL DEFAULT 13 aio_write@@GLIBC_2.17 + 99: 00000000000021e8 168 FUNC WEAK DEFAULT 13 aio_fsync64@@GLIBC_2.17 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libsmime3.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libsmime3.so.txt new file mode 100644 index 000000000000..7dc9430fe03d --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libsmime3.so.txt @@ -0,0 +1,418 @@ +Library: /lib64/libsmime3.so +Package: nss-3.90.0-2.el7_9.aarch64 + + +Symbol table '.dynsym' contains 412 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000008898 0 SECTION LOCAL DEFAULT 10 + 2: 000000000003dec0 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.9.3 + 4: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.8 + 5: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.4 + 6: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.6 + 7: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.2 + 8: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.9 + 9: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.15 + 10: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.13 + 11: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.7 + 12: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.3 + 13: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.2.1 + 14: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.18 + 15: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.10 + 16: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.12.10 + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (21) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLock + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_IsCADERCert@NSS_3.3 (22) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (21) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderAbort_Util@NSSUTIL_3.12 (23) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_OptionGet@NSS_3.21 (24) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_GetPrivateKeyType@NSS_3.3 (22) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDTag_Util@NSSUTIL_3.12 (23) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetInternalSlot@NSS_3.2 (25) + 26: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECKEY_PointerToEncryptedPrivateKeyInfoTemplate@NSS_3.2 (25) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (21) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Alloc_Util@NSSUTIL_3.12 (23) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetBlockSize@NSS_3.2 (25) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GenerateRandom@NSS_3.2 (25) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearStreaming_Util@NSSUTIL_3.12 (23) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearTakeFromBuf_Util@NSSUTIL_3.12 (23) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyEncryptedPrivateKeyInfo@NSS_3.2 (25) + 34: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_OctetStringTemplate_Util@NSSUTIL_3.12 (23) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Strdup_Util@NSSUTIL_3.12 (23) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1Encode_Util@NSSUTIL_3.12 (23) + 37: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderUpdate_Util@NSSUTIL_3.12 (23) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __CERT_DecodeDERCertificate@NSS_3.2 (25) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_NewCertList@NSS_3.2 (25) + 41: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECKEY_PointerToPrivateKeyInfoTemplate@NSS_3.2 (25) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_PubUnwrapSymKey@NSS_3.2 (25) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FilterCertListByUsage@NSS_3.4 (26) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5IsAlgorithmPBEAlgTag@NSS_3.12 (27) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_VerifyCert@NSS_3.2 (25) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ZfreeItem_Util@NSSUTIL_3.12 (23) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DestroyContext@NSS_3.2 (25) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_DestroyDigestInfo_Util@NSSUTIL_3.12 (23) + 49: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (21) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindCertAndKeyByRecipientListNew@NSS_3.2 (25) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CompareAlgorithmID_Util@NSSUTIL_3.12 (23) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetBestSlot@NSS_3.2 (25) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ParamFromAlgid@NSS_3.2 (25) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDigestDirect@NSS_3.12 (27) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncasecmp + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearNotifyProc_Util@NSSUTIL_3.12 (23) + 57: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BMPStringTemplate_Util@NSSUTIL_3.12 (23) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_PublicKeyStrength@NSS_3.2 (25) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CipherOp@NSS_3.2 (25) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_EncodeTimeChoice_Util@NSSUTIL_3.12 (23) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_ConvertAsciiToItem_Util@NSSUTIL_3.12 (23) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZAlloc_Util@NSSUTIL_3.12 (23) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeItem_Util@NSSUTIL_3.12 (23) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CreateDigestInfo_Util@NSSUTIL_3.12 (23) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_VersionCheck@NSS_3.2 (25) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DigestFinal@NSS_3.2 (25) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_ResultLen@NSS_3.4 (26) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareValues + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_FreeArena_Util@NSSUTIL_3.12 (23) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_NewTempCertificate@NSS_3.12 (27) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyPrivateKey@NSS_3.2 (25) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Now + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_DupItem_Util@NSSUTIL_3.12 (23) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DupCertificate@NSS_3.2 (25) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeInteger_Util@NSSUTIL_3.12 (23) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZFree_Util@NSSUTIL_3.12 (23) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ReferenceSymKey@NSS_3.2 (25) + 78: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND CERT_TimeChoiceTemplate@NSS_3.9 (28) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetTakeFromBuf_Util@NSSUTIL_3.12 (23) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_NewArena_Util@NSSUTIL_3.12 (23) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindPrivateKeyFromCert@NSS_3.2 (25) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportPublicKey@NSS_3.4 (26) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearFilterProc_Util@NSSUTIL_3.12 (23) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetNotifyProc_Util@NSSUTIL_3.12 (23) + 85: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SetOfAnyTemplate_Util@NSSUTIL_3.12 (23) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CopyItem_Util@NSSUTIL_3.12 (23) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportCertForKeyToSlot@NSS_3.2 (25) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyPrivateKeyInfo@NSS_3.2 (25) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyLock + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_ASCIIConversion_Util@NSSUTIL_3.12 (23) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_IsInternal@NSS_3.2 (25) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertificateList@NSS_3.2 (25) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_CertChainFromCert@NSS_3.2 (25) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyPublicKey@NSS_3.2 (25) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeItem_Util@NSSUTIL_3.12 (23) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (21) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyPrivateKey@NSS_3.2 (25) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreatePBEAlgorithmID@NSS_3.2 (25) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FreeSlot@NSS_3.2 (25) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindCertByIssuerAndSN@NSS_3.2 (25) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroySubjectPublicKeyInfo@NSS_3.2 (25) + 102: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND sgn_DigestInfoTemplate_Util@NSSUTIL_3.12 (23) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindKeyByAnyCert@NSS_3.2 (25) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_IsHW@NSS_3.2 (25) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnce + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_GetHashObjectByOidTag@NSS_3.8 (29) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ReferenceSlot@NSS_3.3 (22) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDByTag_Util@NSSUTIL_3.12 (23) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableDestroy + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DestroyPBEParams@NSS_3.3.1 (30) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearNotifyProc_Util@NSSUTIL_3.12 (23) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Free_Util@NSSUTIL_3.12 (23) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaUnmark_Util@NSSUTIL_3.12 (23) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_GetHashTypeByOidTag@NSS_3.8 (29) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_PublicKeyStrengthInBits@NSS_3.8 (29) + 116: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND CERT_SetOfSignedCrlTemplate@NSS_3.2 (25) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5IsAlgorithmPBEAlg@NSS_3.2 (25) + 118: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND CERT_IssuerAndSNTemplate@NSS_3.2 (25) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (21) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyPublicKey@NSS_3.6 (31) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_HashBuf@NSS_3.2 (25) + 122: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 123: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (32) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertificate@NSS_3.2 (25) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memset_chk@GLIBC_2.17 (21) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetStreaming_Util@NSSUTIL_3.12 (23) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_NewHashTable + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_DestroyAlgorithmID_Util@NSSUTIL_3.12 (23) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5GetCryptoAlgorithm@NSS_3.2 (25) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableAdd + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_SetSymKeyUserData@NSS_3.11 (33) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GetCertIssuerAndSN@NSS_3.2 (25) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GetDefaultCertDB@NSS_3.2 (25) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaZAlloc_Util@NSSUTIL_3.12 (23) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Realloc_Util@NSSUTIL_3.12 (23) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_AllocItem_Util@NSSUTIL_3.12 (23) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (21) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_PBEKeyGen@NSS_3.2 (25) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (21) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ItemsAreEqual_Util@NSSUTIL_3.12 (23) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaStrdup_Util@NSSUTIL_3.12 (23) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertList@NSS_3.2 (25) + 143: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_IA5StringTemplate_Util@NSSUTIL_3.12 (23) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_GetAlgorithmPolicy@NSSUTIL_3.12.3 (34) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetNotifyProc_Util@NSSUTIL_3.12 (23) + 146: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_ObjectIDTemplate_Util@NSSUTIL_3.12 (23) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_SignData@NSS_3.2 (25) + 148: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECOID_AlgorithmIDTemplate_Util@NSSUTIL_3.12 (23) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindCertByDERCert@NSS_3.2 (25) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_GetError_Util@NSSUTIL_3.12 (23) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_KeyGen@NSS_3.2 (25) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ArenaDupItem_Util@NSSUTIL_3.12 (23) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_GetHMACOidTagByHashOidTag@NSS_3.65 (35) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FreeSymKey@NSS_3.2 (25) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaAlloc_Util@NSSUTIL_3.12 (23) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindSubjectKeyIDExtension@NSS_3.7 (36) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_GetPublicKeyType@NSS_3.3 (22) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Lock + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreateContextBySymKey@NSS_3.2 (25) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderFinish_Util@NSSUTIL_3.12 (23) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CopyDigestInfo_Util@NSSUTIL_3.12 (23) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_UTF8Conversion_Util@NSSUTIL_3.12 (23) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetInternalKeySlot@NSS_3.2 (25) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderStart_Util@NSSUTIL_3.12 (23) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyEncryptedPrivateKeyInfo@NSS_3.2 (25) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (21) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetSlotFromKey@NSS_3.2 (25) + 168: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BitStringTemplate_Util@NSSUTIL_3.12 (23) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaGrow_Util@NSSUTIL_3.12 (23) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportDERCert@NSS_3.6 (31) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DigestBegin@NSS_3.2 (25) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_SetAlgorithmID_Util@NSSUTIL_3.12 (23) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeInteger_Util@NSSUTIL_3.12 (23) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindSMimeProfile@NSS_3.2 (25) + 175: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_AnyTemplate_Util@NSSUTIL_3.12 (23) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GetCommonName@NSS_3.2 (25) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_DecodeTimeChoice_Util@NSSUTIL_3.12 (23) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_AlgtagToMechanism@NSS_3.2 (25) + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetFilterProc_Util@NSSUTIL_3.12 (23) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_PubWrapSymKey@NSS_3.2 (25) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_AsciiToData_Util@NSSUTIL_3.12 (23) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderStart_Util@NSSUTIL_3.12 (23) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_CertListFromCert@NSS_3.2 (25) + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_FreeItem_Util@NSSUTIL_3.12 (23) + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_Digest@NSS_3.2 (25) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_TraverseCertsForSubjectInSlot@NSS_3.2 (25) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetPBECryptoMechanism@NSS_3.12 (27) + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GenerateNewParam@NSS_3.2 (25) + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ExportPrivateKeyInfo@NSS_3.2 (25) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOID_Util@NSSUTIL_3.12 (23) + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_SaveSMimeProfile@NSS_3.2 (25) + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetKeyStrength@NSS_3.2 (25) + 193: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CompareItem_Util@NSSUTIL_3.12 (23) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CopyAlgorithmID_Util@NSSUTIL_3.12 (23) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindCertAndKeyByRecipientList@NSS_3.2 (25) + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CreateSubjectPublicKeyInfo@NSS_3.2 (25) + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertArray@NSS_3.2 (25) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindCertBySubjectKeyID@NSS_3.7 (36) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindKeyByDERCert@NSS_3.2 (25) + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DigestOp@NSS_3.2 (25) + 202: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToAnyTemplate_Util@NSSUTIL_3.12 (23) + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreatePBEParams@NSS_3.3.1 (30) + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_GetSignatureAlgorithmOidTag@NSS_3.10 (37) + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportEncryptedPrivateKeyInfo@NSS_3.2 (25) + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetSymKeyUserData@NSS_3.11 (33) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_SetAlgorithmPolicy@NSSUTIL_3.12.3 (34) + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_GetAlgorithmTag_Util@NSSUTIL_3.12 (23) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderAbort_Util@NSSUTIL_3.12 (23) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreatePBEV2AlgorithmID@NSS_3.12 (27) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyPrivateKeyInfo@NSS_3.2 (25) + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_ImportCerts@NSS_3.2 (25) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_SetPasswordFunc@NSS_3.2 (25) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_TraverseCertsForNicknameInSlot@NSS_3.2 (25) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDataDirect@NSS_3.12 (27) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_IsRootDERCert@NSS_3.8 (29) + 217: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_AddCertToListTail@NSS_3.2 (25) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetTokenName@NSS_3.2 (25) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GetInteger_Util@NSSUTIL_3.12 (23) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_ExtractPublicKey@NSS_3.2 (25) + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportPrivateKeyInfo@NSS_3.2 (25) + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ExportEncryptedPrivateKeyInfoV2@NSS_3.65 (35) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDigestWithAlgorithmID@NSS_3.12 (27) + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_RegisterShutdown@NSS_3.11.1 (38) + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_QuickDERDecodeItem_Util@NSSUTIL_3.12 (23) + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookupConst + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ParamToAlgid@NSS_3.2 (25) + 229: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToOctetStringTemplate_Util@NSSUTIL_3.12 (23) + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaMark_Util@NSSUTIL_3.12 (23) + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetError_Util@NSSUTIL_3.12 (23) + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Unlock + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDataWithAlgorithmID@NSS_3.12 (27) + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderUpdate_Util@NSSUTIL_3.12 (23) + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaRelease_Util@NSSUTIL_3.12 (23) + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderFinish_Util@NSSUTIL_3.12 (23) + 237: 000000000001b2bc 20 FUNC GLOBAL DEFAULT 12 SEC_PKCS7VerifySignature@@NSS_3.2 + 238: 000000000000fe44 32 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_Create@@NSS_3.2 + 239: 000000000001a830 172 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderUpdate@@NSS_3.2 + 240: 000000000000d25c 8 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_GetContentInfo@@NSS_3.2 + 241: 000000000001aae4 100 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContentIsSigned@@NSS_3.4 + 242: 000000000001b3d0 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetSignerEmailAddress@@NSS_3.4 + 243: 0000000000014274 1928 FUNC GLOBAL DEFAULT 12 SEC_PKCS12Encode@@NSS_3.2 + 244: 0000000000019814 112 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateCertsOnly@@NSS_3.3 + 245: 000000000000fef4 68 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetDigestAlgTag@@NSS_3.89 + 246: 0000000000019884 76 FUNC GLOBAL DEFAULT 12 SEC_PKCS7AddCertificate@@NSS_3.3 + 247: 000000000000eba8 48 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_GetSignerInfo@@NSS_3.2 + 248: 000000000000d958 96 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_IsEncrypted@@NSS_3.4.1 + 249: 000000000001027c 88 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetVersion@@NSS_3.2 + 250: 000000000000f664 228 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddDigest@@NSS_3.2 + 251: 00000000000174d8 1300 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderImportBags@@NSS_3.2 + 252: 000000000001c1e8 140 FUNC GLOBAL DEFAULT 12 SEC_PKCS7Encode@@NSS_3.3 + 253: 000000000000a7f4 80 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetBulkKey@@NSS_3.2 + 254: 000000000001b2d0 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7VerifyDetachedSignature@@NSS_3.4 + 255: 0000000000016a38 32 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderSetTargetTokenCAs@@NSS_3.8 + 256: 000000000000d900 88 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_ContentLevel@@NSS_3.2 + 257: 000000000000ef78 316 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_VerifyCertsOnly@@NSS_3.2 + 258: 0000000000012bf0 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS12SetPreferredCipher@@NSS_3.2 + 259: 000000000000f12c 92 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddCertChain@@NSS_3.2 + 260: 00000000000109e0 272 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddSMIMEEncKeyPrefs@@NSS_3.2 + 261: 0000000000017afc 52 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderIterateInit@@NSS_3.10 + 262: 000000000000a85c 12 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetBulkKeySize@@NSS_3.2 + 263: 00000000000188c0 532 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecryptContents@@NSS_3.2 + 264: 000000000000def8 28 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_Create@@NSS_3.2 + 265: 00000000000193dc 612 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateSignedData@@NSS_3.2 + 266: 000000000001841c 68 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContentType@@NSS_3.2 + 267: 000000000000e2e0 156 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_UnwrapBulkKey@@NSS_3.7.2 + 268: 000000000000e064 112 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_Destroy@@NSS_3.2 + 269: 0000000000019980 16 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateData@@NSS_3.2 + 270: 000000000000f8dc 296 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_SetDigestValue@@NSS_3.4 + 271: 000000000000ba18 248 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Start@@NSS_3.2 + 272: 0000000000010af0 272 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddMSSMIMEEncKeyPrefs@@NSS_3.6 + 273: 000000000000bb10 52 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Cancel@@NSS_3.2 + 274: 000000000000e37c 440 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_GetCertAndKey@@NSS_3.8 + 275: 000000000000cfb8 140 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Cancel@@NSS_3.2 + 276: 00000000000107b4 40 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSignerCommonName@@NSS_3.2 + 277: 000000000001c0dc 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderAbort@@NSS_3.9 + 278: 00000000000119a4 164 FUNC GLOBAL DEFAULT 12 NSS_CMSUtil_VerificationStatusToString@@NSS_3.2 + 279: 000000000000a408 144 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetContent@@NSS_3.2 + 280: 0000000000009d34 12 FUNC GLOBAL DEFAULT 12 NSS_Get_NSSCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 281: 000000000001aaa8 60 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContentIsEncrypted@@NSS_3.4 + 282: 0000000000019640 288 FUNC GLOBAL DEFAULT 12 SEC_PKCS7AddSigningTime@@NSS_3.2 + 283: 00000000000104a8 780 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_Verify@@NSS_3.16 + 284: 000000000000e8a0 200 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_Destroy@@NSS_3.2 + 285: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.2 + 286: 000000000000f498 84 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddCertificate@@NSS_3.2 + 287: 00000000000185f0 216 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetContent@@NSS_3.2 + 288: 0000000000014204 56 FUNC GLOBAL DEFAULT 12 SEC_PKCS12AddCertAndKey@@NSS_3.2 + 289: 000000000000fa04 184 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddSignerInfo@@NSS_3.2 + 290: 0000000000010d5c 208 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_IncludeCerts@@NSS_3.2 + 291: 000000000000c320 252 FUNC GLOBAL DEFAULT 12 NSS_CMSEncryptedData_Create@@NSS_3.2 + 292: 000000000000d6e8 240 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_Create@@NSS_3.2 + 293: 0000000000011b2c 1664 FUNC GLOBAL DEFAULT 12 NSS_SMIMEUtil_FindBulkAlgForRecipients@@NSS_3.2 + 294: 0000000000010274 8 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetCertList@@NSS_3.2 + 295: 0000000000018364 184 FUNC GLOBAL DEFAULT 12 CERT_DecodeCertFromPackage@@NSS_3.4 + 296: 00000000000140b0 340 FUNC GLOBAL DEFAULT 12 SEC_PKCS12AddCertOrChainAndKey@@NSS_3.12.2 + 297: 000000000000a714 76 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetContentEncAlgTag@@NSS_3.2 + 298: 000000000000fb2c 152 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_VerifySignerInfo@@NSS_3.2 + 299: 000000000000a3fc 12 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_EncryptedData@@NSS_3.2 + 300: 000000000001a6d8 344 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderStart@@NSS_3.2 + 301: 0000000000012b24 60 FUNC GLOBAL DEFAULT 12 SEC_PKCS12IsEncryptionAllowed@@NSS_3.2 + 302: 000000000000a394 68 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_Data@@NSS_3.2 + 303: 000000000001b3c8 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetSignerCommonName@@NSS_3.4 + 304: 000000000000a2d0 196 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent@@NSS_3.2 + 305: 000000000000fe64 60 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_Destroy@@NSS_3.2 + 306: 000000000000df70 244 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateWithSubjKeyIDFromCert@@NSS_3.7 + 307: 000000000000e534 72 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_Encode@@NSS_3.8 + 308: 00000000000123dc 160 FUNC GLOBAL DEFAULT 12 NSS_SMIMEUtil_CreateMSSMIMEEncKeyPrefs@@NSS_3.12.10 + 309: 000000000000f0f0 60 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddCertList@@NSS_3.2 + 310: 000000000000df14 32 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateNew@@NSS_3.8 + 311: 0000000000018740 384 FUNC GLOBAL DEFAULT 12 SEC_PKCS7SetContent@@NSS_3.4 + 312: 0000000000017e34 1328 FUNC GLOBAL DEFAULT 12 CERT_DecodeCertPackage@@NSS_3.2 + 313: 0000000000012b04 32 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecryptionAllowed@@NSS_3.10 + 314: 000000000000ef10 52 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_GetDigestAlgs@@NSS_3.2 + 315: 00000000000186c8 120 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetEncryptionAlgorithm@@NSS_3.2 + 316: 000000000000f0b4 60 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_HasDigests@@NSS_3.2 + 317: 000000000003ec58 32 OBJECT GLOBAL DEFAULT 20 NSS_PointerToCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 318: 000000000001082c 248 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddSigningTime@@NSS_3.2 + 319: 0000000000016dac 408 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderFinish@@NSS_3.2 + 320: 000000000000bfac 132 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_Update@@NSS_3.2 + 321: 000000000001325c 572 FUNC GLOBAL DEFAULT 12 SEC_PKCS12CreatePasswordPrivSafe@@NSS_3.2 + 322: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.89 + 323: 000000000000bbb4 72 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_CreateFromDER@@NSS_3.2 + 324: 0000000000011a48 228 FUNC GLOBAL DEFAULT 12 NSS_CMSDEREncode@@NSS_3.2 + 325: 000000000000f4ec 376 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_SetDigests@@NSS_3.2 + 326: 000000000000c41c 16 FUNC GLOBAL DEFAULT 12 NSS_CMSEncryptedData_Destroy@@NSS_3.2 + 327: 0000000000017374 356 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderRenameCertNicknames@@NSS_3.18 + 328: 000000000000d8ac 4 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_GetContentInfo@@NSS_3.2 + 329: 000000000001c048 148 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderFinish@@NSS_3.2 + 330: 000000000000d160 172 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_Create@@NSS_3.2 + 331: 0000000000012530 36 FUNC GLOBAL DEFAULT 12 NSSSMIME_VersionCheck@@NSS_3.2.1 + 332: 000000000000c260 192 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_FinishSingle@@NSS_3.2 + 333: 000000000000d9b8 104 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_IsSigned@@NSS_3.4 + 334: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.7.2 + 335: 0000000000017da8 140 FUNC GLOBAL DEFAULT 12 CERT_ConvertAndDecodeCertificate@@NSS_3.9.3 + 336: 000000000000a3d8 12 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_SignedData@@NSS_3.2 + 337: 0000000000016f44 208 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderGetCerts@@NSS_3.4 + 338: 000000000000bb44 112 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Finish@@NSS_3.2 + 339: 000000000000d264 116 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_AddRecipient@@NSS_3.2 + 340: 000000000001ab48 100 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetSigningTime@@NSS_3.4 + 341: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.4.1 + 342: 000000000000d044 284 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Finish@@NSS_3.2 + 343: 000000000000fe20 36 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_CreateWithSubjKeyID@@NSS_3.6 + 344: 000000000000c0a0 448 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_FinishMultiple@@NSS_3.2 + 345: 000000000000bf60 76 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_StartSingle@@NSS_3.2 + 346: 000000000001b2d8 32 FUNC GLOBAL DEFAULT 12 SEC_PKCS7VerifyDetachedSignatureAtTime@@NSS_3.15 + 347: 000000000000a27c 84 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetDontStream@@NSS_3.12.10 + 348: 0000000000016a58 96 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderUpdate@@NSS_3.2 + 349: 00000000000149fc 160 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DestroyExportContext@@NSS_3.2 + 350: 0000000000012554 12 FUNC GLOBAL DEFAULT 12 NSSSMIME_GetVersion@@NSS_3.13 + 351: 000000000001997c 4 FUNC GLOBAL DEFAULT 12 SEC_PKCS7AddRecipient@@NSS_3.2 + 352: 000000000001c030 24 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderUpdate@@NSS_3.2 + 353: 0000000000016ab8 756 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderVerify@@NSS_3.2 + 354: 000000000000d20c 80 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_Destroy@@NSS_3.2 + 355: 0000000000013498 200 FUNC GLOBAL DEFAULT 12 SEC_PKCS12CreateUnencryptedSafe@@NSS_3.2 + 356: 0000000000018460 380 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DestroyContentInfo@@NSS_3.2 + 357: 000000000000d8d0 48 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_ContentLevelCount@@NSS_3.2 + 358: 000000000001d17c 172 FUNC GLOBAL DEFAULT 12 SECMIME_DecryptionAllowed@@NSS_3.4 + 359: 0000000000018ad4 64 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetCertificateList@@NSS_3.2 + 360: 0000000000019990 248 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateEncryptedData@@NSS_3.2 + 361: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.16 + 362: 000000000000bbfc 160 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestedData_Create@@NSS_3.2 + 363: 0000000000010c00 348 FUNC GLOBAL DEFAULT 12 NSS_SMIMESignerInfo_SaveSMIMEProfile@@NSS_3.4 + 364: 000000000001bf70 192 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderStart@@NSS_3.2 + 365: 0000000000017b30 420 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderIterateNext@@NSS_3.10 + 366: 000000000003df48 32 OBJECT GLOBAL DEFAULT 20 NSSCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 367: 000000000000b398 240 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Update@@NSS_3.2 + 368: 000000000000a3e4 12 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_EnvelopedData@@NSS_3.2 + 369: 000000000000df54 28 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateWithSubjKeyID@@NSS_3.7 + 370: 000000000000a770 64 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContentEncAlg@@NSS_3.2 + 371: 000000000000bc9c 16 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestedData_Destroy@@NSS_3.2 + 372: 000000000000cee8 208 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Update@@NSS_3.2 + 373: 00000000000131d4 136 FUNC GLOBAL DEFAULT 12 SEC_PKCS12AddPasswordIntegrity@@NSS_3.2 + 374: 000000000000df34 32 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateFromDER@@NSS_3.8 + 375: 0000000000017014 864 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderValidateBags@@NSS_3.2 + 376: 000000000000f1dc 700 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_ImportCerts@@NSS_3.2 + 377: 0000000000013120 180 FUNC GLOBAL DEFAULT 12 SEC_PKCS12CreateExportContext@@NSS_3.2 + 378: 0000000000012b60 144 FUNC GLOBAL DEFAULT 12 SEC_PKCS12EnableCipher@@NSS_3.2 + 379: 000000000000e154 396 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_WrapBulkKey@@NSS_3.7.2 + 380: 00000000000102d4 140 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSigningTime@@NSS_3.2 + 381: 0000000000009d40 12 FUNC GLOBAL DEFAULT 12 NSS_Get_NSS_PointerToCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 382: 000000000000ef44 52 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_GetContentInfo@@NSS_3.2 + 383: 000000000000c42c 8 FUNC GLOBAL DEFAULT 12 NSS_CMSEncryptedData_GetContentInfo@@NSS_3.2 + 384: 000000000000fea0 8 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetVerificationStatus@@NSS_3.2 + 385: 0000000000019760 180 FUNC GLOBAL DEFAULT 12 SEC_PKCS7IncludeCertChain@@NSS_3.2 + 386: 000000000000e81c 132 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_Create@@NSS_3.2 + 387: 000000000001aa2c 124 FUNC GLOBAL DEFAULT 12 SEC_PKCS7IsContentEmpty@@NSS_3.2 + 388: 000000000000d8b0 32 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_GetContent@@NSS_3.2 + 389: 000000000001a8dc 100 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderFinish@@NSS_3.2 + 390: 000000000001a9a0 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderAbort@@NSS_3.9 + 391: 000000000000a3f0 12 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_DigestedData@@NSS_3.2 + 392: 000000000001a9a8 132 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContainsCertsOrCrls@@NSS_3.4 + 393: 000000000000be58 264 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_StartMultiple@@NSS_3.2 + 394: 000000000000a498 76 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetContentTypeTag@@NSS_3.2 + 395: 000000000001685c 476 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderStart@@NSS_3.2 + 396: 000000000000eb6c 60 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_SignerInfoCount@@NSS_3.2 + 397: 000000000000a844 24 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetBulkKey@@NSS_3.2 + 398: 000000000000d898 20 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_Copy@@NSS_3.2 + 399: 00000000000185dc 20 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CopyContentInfo@@NSS_3.4 + 400: 000000000000fbc4 220 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_CreateCertsOnly@@NSS_3.2 + 401: 000000000000d840 88 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_Destroy@@NSS_3.2 + 402: 000000000001c274 108 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncodeItem@@NSS_3.9.3 + 403: 000000000001137c 396 FUNC GLOBAL DEFAULT 12 NSS_CMSType_RegisterContentType@@NSS_3.12.10 + 404: 00000000000107dc 56 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSignerEmailAddress@@NSS_3.2 + 405: 000000000000cd14 468 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Start@@NSS_3.2 + 406: 000000000000c030 112 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_Cancel@@NSS_3.2 + 407: 0000000000010360 112 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSigningCertificate@@NSS_3.2 + 408: 0000000000010924 188 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddSMIMECaps@@NSS_3.2 + 409: 000000000001a940 96 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecodeItem@@NSS_3.2 + 410: 00000000000198d0 172 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateEnvelopedData@@NSS_3.2 + 411: 000000000000bcac 8 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestedData_GetContentInfo@@NSS_3.2 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libwayland-cursor.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libwayland-cursor.so.0.txt new file mode 100644 index 000000000000..f810501b234f --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libwayland-cursor.so.0.txt @@ -0,0 +1,64 @@ +Library: /lib64/libwayland-cursor.so +Package: wayland-devel-1.15.0-1.el7.aarch64 + + +Symbol table '.dynsym' contains 58 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001168 0 SECTION LOCAL DEFAULT 9 + 2: 000000000001fd60 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND wl_shm_pool_interface + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND posix_fallocate@GLIBC_2.17 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_proxy_marshal_constructor + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (3) + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 22: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkostemp@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.17 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (2) + 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 33: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND wl_buffer_interface + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.17 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (2) + 36: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (3) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_proxy_destroy + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_proxy_marshal + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.17 (2) + 43: 00000000000231d0 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 44: 00000000000231c0 0 NOTYPE GLOBAL DEFAULT 23 _edata + 45: 00000000000231d0 0 NOTYPE GLOBAL DEFAULT 24 _end + 46: 00000000000015e4 128 FUNC GLOBAL DEFAULT 11 wl_cursor_image_get_buffer + 47: 0000000000001ca8 160 FUNC GLOBAL DEFAULT 11 wl_cursor_frame_and_duration + 48: 0000000000001954 252 FUNC GLOBAL DEFAULT 11 wl_cursor_theme_destroy + 49: 00000000000231d0 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 50: 0000000000001a50 124 FUNC GLOBAL DEFAULT 11 wl_cursor_theme_get_cursor + 51: 00000000000231c0 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 52: 0000000000001168 0 FUNC GLOBAL DEFAULT 9 _init + 53: 00000000000231c0 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 54: 0000000000002ff4 0 FUNC GLOBAL DEFAULT 12 _fini + 55: 00000000000231d0 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 56: 0000000000001d48 8 FUNC GLOBAL DEFAULT 11 wl_cursor_frame + 57: 0000000000001664 752 FUNC GLOBAL DEFAULT 11 wl_cursor_theme_load diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libxcb.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libxcb.so.1.txt new file mode 100644 index 000000000000..56b6221c09de --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libxcb.so.1.txt @@ -0,0 +1,745 @@ +Library: /lib64/libxcb.so.1 +Package: libxcb-1.13-1.el7.aarch64 + + +Symbol table '.dynsym' contains 739 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000000b4a0 0 SECTION LOCAL DEFAULT 9 + 2: 000000000003fcd0 0 SECTION LOCAL DEFAULT 18 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.17 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.17 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.17 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XauGetBestAuthByAddr + 11: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 12: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.17 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.17 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.17 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.17 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.17 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.17 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.17 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.17 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.17 (2) + 30: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 31: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XauDisposeAuth + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.17 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.17 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.17 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.17 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.17 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.17 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.17 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.17 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.17 (2) + 46: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.17 (2) + 48: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.17 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.17 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.17 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.17 (2) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.17 (2) + 56: 000000000001050c 40 FUNC GLOBAL DEFAULT 11 xcb_format_next + 57: 00000000000171a8 156 FUNC GLOBAL DEFAULT 11 xcb_set_dashes_checked + 58: 000000000001bbdc 112 FUNC GLOBAL DEFAULT 11 xcb_set_close_down_mode + 59: 000000000000c5f8 164 FUNC GLOBAL DEFAULT 11 xcb_prefetch_maximum_request_length + 60: 000000000001ae50 68 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_value_list_sizeof + 61: 0000000000019758 4 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_reply + 62: 000000000001a010 172 FUNC GLOBAL DEFAULT 11 xcb_create_cursor_checked + 63: 000000000001311c 8 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name_name + 64: 000000000000d168 136 FUNC GLOBAL DEFAULT 11 xcb_send_fd + 65: 00000000000132e0 40 FUNC GLOBAL DEFAULT 11 xcb_change_property_data_end + 66: 00000000000155bc 152 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info + 67: 00000000000199e4 24 FUNC GLOBAL DEFAULT 11 xcb_free_colors_pixels_end + 68: 00000000000187c0 8 FUNC GLOBAL DEFAULT 11 xcb_poly_text_8_sizeof + 69: 00000000000196c0 8 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_pixels + 70: 00000000000105a4 8 FUNC GLOBAL DEFAULT 11 xcb_depth_visuals + 71: 0000000000010bb0 8 FUNC GLOBAL DEFAULT 11 xcb_setup_pixmap_formats_length + 72: 0000000000010294 20 FUNC GLOBAL DEFAULT 11 xcb_fontable_end + 73: 00000000000157d4 244 FUNC GLOBAL DEFAULT 11 xcb_set_font_path_checked + 74: 00000000000198a4 12 FUNC GLOBAL DEFAULT 11 xcb_free_colors_sizeof + 75: 0000000000015074 32 FUNC GLOBAL DEFAULT 11 xcb_charinfo_end + 76: 0000000000013b1c 144 FUNC GLOBAL DEFAULT 11 xcb_grab_pointer_unchecked + 77: 0000000000015b4c 128 FUNC GLOBAL DEFAULT 11 xcb_create_pixmap_checked + 78: 0000000000018938 156 FUNC GLOBAL DEFAULT 11 xcb_poly_text_16_checked + 79: 0000000000019d7c 12 FUNC GLOBAL DEFAULT 11 xcb_query_colors_sizeof + 80: 0000000000011c1c 184 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_aux_checked + 81: 0000000000014bf0 112 FUNC GLOBAL DEFAULT 11 xcb_get_input_focus + 82: 00000000000148d4 128 FUNC GLOBAL DEFAULT 11 xcb_translate_coordinates + 83: 0000000000019b74 32 FUNC GLOBAL DEFAULT 11 xcb_store_colors_items_length + 84: 00000000000193e0 132 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_unchecked + 85: 0000000000017440 20 FUNC GLOBAL DEFAULT 11 xcb_set_clip_rectangles_rectangles_length + 86: 000000000001386c 132 FUNC GLOBAL DEFAULT 11 xcb_convert_selection_checked + 87: 0000000000010914 28 FUNC GLOBAL DEFAULT 11 xcb_setup_failed_reason_end + 88: 0000000000013660 8 FUNC GLOBAL DEFAULT 11 xcb_list_properties_atoms_length + 89: 0000000000018188 8 FUNC GLOBAL DEFAULT 11 xcb_fill_poly_points + 90: 0000000000014cd4 112 FUNC GLOBAL DEFAULT 11 xcb_query_keymap + 91: 0000000000011f68 116 FUNC GLOBAL DEFAULT 11 xcb_destroy_subwindows_checked + 92: 0000000000011cd4 184 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_aux + 93: 0000000000014148 116 FUNC GLOBAL DEFAULT 11 xcb_ungrab_keyboard + 94: 000000000001090c 8 FUNC GLOBAL DEFAULT 11 xcb_setup_failed_reason_length + 95: 000000000000b4a0 0 FUNC GLOBAL DEFAULT 9 _init + 96: 000000000001c0a8 12 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping_sizeof + 97: 0000000000015a44 112 FUNC GLOBAL DEFAULT 11 xcb_get_font_path + 98: 0000000000013c24 116 FUNC GLOBAL DEFAULT 11 xcb_ungrab_pointer + 99: 000000000001a9f4 16 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping_sizeof + 100: 0000000000016630 184 FUNC GLOBAL DEFAULT 11 xcb_create_gc_aux + 101: 0000000000017a10 8 FUNC GLOBAL DEFAULT 11 xcb_poly_point_points + 102: 00000000000113f0 228 FUNC GLOBAL DEFAULT 11 xcb_create_window_aux_checked + 103: 00000000000172e0 8 FUNC GLOBAL DEFAULT 11 xcb_set_dashes_dashes + 104: 000000000001b8c4 84 FUNC GLOBAL DEFAULT 11 xcb_host_end + 105: 0000000000019a54 140 FUNC GLOBAL DEFAULT 11 xcb_store_colors_checked + 106: 00000000000156ec 8 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_properties + 107: 0000000000014440 116 FUNC GLOBAL DEFAULT 11 xcb_allow_events + 108: 0000000000015b48 4 FUNC GLOBAL DEFAULT 11 xcb_get_font_path_reply + 109: 0000000000013658 8 FUNC GLOBAL DEFAULT 11 xcb_list_properties_atoms + 110: 0000000000015038 20 FUNC GLOBAL DEFAULT 11 xcb_fontprop_end + 111: 000000000001ba88 4 FUNC GLOBAL DEFAULT 11 xcb_list_hosts_reply + 112: 000000000001504c 40 FUNC GLOBAL DEFAULT 11 xcb_charinfo_next + 113: 0000000000010c4c 72 FUNC GLOBAL DEFAULT 11 xcb_setup_next + 114: 0000000000018788 8 FUNC GLOBAL DEFAULT 11 xcb_get_image_data + 115: 0000000000015394 28 FUNC GLOBAL DEFAULT 11 xcb_str_name_end + 116: 000000000001c884 8 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list_ids + 117: 0000000000018d94 124 FUNC GLOBAL DEFAULT 11 xcb_create_colormap_checked + 118: 000000000000ed94 188 FUNC GLOBAL DEFAULT 11 xcb_get_extension_data + 119: 00000000000132cc 20 FUNC GLOBAL DEFAULT 11 xcb_change_property_data_length + 120: 000000000001b654 112 FUNC GLOBAL DEFAULT 11 xcb_get_screen_saver_unchecked + 121: 0000000000018a78 16 FUNC GLOBAL DEFAULT 11 xcb_poly_text_16_items_length + 122: 0000000000018700 136 FUNC GLOBAL DEFAULT 11 xcb_get_image_unchecked + 123: 000000000001c5d0 112 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_version + 124: 00000000000135e4 116 FUNC GLOBAL DEFAULT 11 xcb_list_properties_unchecked + 125: 000000000001a6fc 100 FUNC GLOBAL DEFAULT 11 xcb_list_extensions_sizeof + 126: 000000000001026c 40 FUNC GLOBAL DEFAULT 11 xcb_fontable_next + 127: 0000000000017ff0 8 FUNC GLOBAL DEFAULT 11 xcb_poly_arc_arcs + 128: 00000000000196ec 36 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_masks + 129: 0000000000010744 84 FUNC GLOBAL DEFAULT 11 xcb_screen_end + 130: 000000000000bcc8 72 FUNC GLOBAL DEFAULT 11 xcb_get_setup + 131: 0000000000015c4c 116 FUNC GLOBAL DEFAULT 11 xcb_free_pixmap_checked + 132: 0000000000019f70 156 FUNC GLOBAL DEFAULT 11 xcb_lookup_color_unchecked + 133: 00000000000107c4 8 FUNC GLOBAL DEFAULT 11 xcb_setup_request_authorization_protocol_name + 134: 00000000000148b4 28 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events_events_iterator + 135: 0000000000010b70 28 FUNC GLOBAL DEFAULT 11 xcb_setup_vendor_end + 136: 0000000000017ea0 40 FUNC GLOBAL DEFAULT 11 xcb_poly_rectangle_rectangles_iterator + 137: 0000000000017708 156 FUNC GLOBAL DEFAULT 11 xcb_copy_area + 138: 000000000001b20c 4 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_control_reply + 139: 00000000000142d4 124 FUNC GLOBAL DEFAULT 11 xcb_ungrab_key_checked + 140: 000000000001ab28 4 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping_reply + 141: 0000000000010a0c 72 FUNC GLOBAL DEFAULT 11 xcb_setup_authenticate_next + 142: 0000000000014b78 120 FUNC GLOBAL DEFAULT 11 xcb_set_input_focus + 143: 0000000000015730 8 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_name_length + 144: 0000000000019a24 32 FUNC GLOBAL DEFAULT 11 xcb_coloritem_end + 145: 00000000000166e8 8 FUNC GLOBAL DEFAULT 11 xcb_create_gc_value_list + 146: 000000000001b124 8 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_value_list + 147: 000000000001c724 108 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_range_unchecked + 148: 00000000000181d8 140 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_rectangle_checked + 149: 0000000000015ab4 112 FUNC GLOBAL DEFAULT 11 xcb_get_font_path_unchecked + 150: 0000000000014dc4 156 FUNC GLOBAL DEFAULT 11 xcb_open_font_checked + 151: 000000000001a880 156 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_mapping_checked + 152: 0000000000019ec4 4 FUNC GLOBAL DEFAULT 11 xcb_query_colors_reply + 153: 000000000001b4dc 132 FUNC GLOBAL DEFAULT 11 xcb_set_screen_saver_checked + 154: 00000000000104c4 40 FUNC GLOBAL DEFAULT 11 xcb_arc_next + 155: 00000000000154f0 152 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_unchecked + 156: 00000000000199c8 8 FUNC GLOBAL DEFAULT 11 xcb_free_colors_pixels + 157: 0000000000010410 40 FUNC GLOBAL DEFAULT 11 xcb_button_next + 158: 0000000000019464 4 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_reply + 159: 0000000000017bf8 12 FUNC GLOBAL DEFAULT 11 xcb_poly_segment_sizeof + 160: 0000000000018464 32 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_arc_arcs_length + 161: 000000000001c260 140 FUNC GLOBAL DEFAULT 11 xcb_set_modifier_mapping_unchecked + 162: 000000000001ad88 200 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_value_list_unpack + 163: 0000000000012eb8 8 FUNC GLOBAL DEFAULT 11 xcb_query_tree_children + 164: 000000000000d1f0 280 FUNC GLOBAL DEFAULT 11 xcb_take_socket + 165: 00000000000148ac 8 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events_events_length + 166: 00000000000143cc 116 FUNC GLOBAL DEFAULT 11 xcb_allow_events_checked + 167: 0000000000011acc 32 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_sizeof + 168: 00000000000166f0 1204 FUNC GLOBAL DEFAULT 11 xcb_change_gc_value_list_serialize + 169: 0000000000018aa0 12 FUNC GLOBAL DEFAULT 11 xcb_image_text_8_sizeof + 170: 00000000000181a4 40 FUNC GLOBAL DEFAULT 11 xcb_fill_poly_points_iterator + 171: 000000000001c1c0 4 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping_reply + 172: 000000000001a91c 156 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_mapping + 173: 000000000000d134 20 FUNC GLOBAL DEFAULT 11 xcb_send_request_with_fds + 174: 0000000000017a54 12 FUNC GLOBAL DEFAULT 11 xcb_poly_line_sizeof + 175: 0000000000014efc 8 FUNC GLOBAL DEFAULT 11 xcb_open_font_name + 176: 00000000000137f4 116 FUNC GLOBAL DEFAULT 11 xcb_get_selection_owner_unchecked + 177: 000000000001a9c0 16 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_mapping_keysyms_length + 178: 0000000000017ec8 16 FUNC GLOBAL DEFAULT 11 xcb_poly_arc_sizeof + 179: 0000000000017a18 20 FUNC GLOBAL DEFAULT 11 xcb_poly_point_points_length + 180: 00000000000146e8 116 FUNC GLOBAL DEFAULT 11 xcb_query_pointer_unchecked + 181: 00000000000195c8 124 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells + 182: 0000000000010534 20 FUNC GLOBAL DEFAULT 11 xcb_format_end + 183: 00000000000155ac 4 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_reply + 184: 0000000000019d40 40 FUNC GLOBAL DEFAULT 11 xcb_rgb_next + 185: 000000000001c814 112 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list_unchecked + 186: 0000000000019244 116 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps + 187: 0000000000010140 40 FUNC GLOBAL DEFAULT 11 xcb_font_next + 188: 000000000001b2f0 132 FUNC GLOBAL DEFAULT 11 xcb_change_pointer_control_checked + 189: 0000000000018908 16 FUNC GLOBAL DEFAULT 11 xcb_poly_text_8_items_length + 190: 00000000000158c8 244 FUNC GLOBAL DEFAULT 11 xcb_set_font_path + 191: 0000000000013e4c 124 FUNC GLOBAL DEFAULT 11 xcb_ungrab_button + 192: 00000000000114d4 228 FUNC GLOBAL DEFAULT 11 xcb_create_window_aux + 193: 0000000000019d24 28 FUNC GLOBAL DEFAULT 11 xcb_store_named_color_name_end + 194: 000000000001a214 172 FUNC GLOBAL DEFAULT 11 xcb_create_glyph_cursor + 195: 0000000000015198 8 FUNC GLOBAL DEFAULT 11 xcb_query_font_properties + 196: 0000000000014248 140 FUNC GLOBAL DEFAULT 11 xcb_grab_key + 197: 000000000001c88c 8 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list_ids_length + 198: 00000000000107cc 8 FUNC GLOBAL DEFAULT 11 xcb_setup_request_authorization_protocol_name_length + 199: 0000000000013c98 156 FUNC GLOBAL DEFAULT 11 xcb_grab_button_checked + 200: 0000000000012c60 116 FUNC GLOBAL DEFAULT 11 xcb_circulate_window + 201: 00000000000103c0 20 FUNC GLOBAL DEFAULT 11 xcb_keycode_end + 202: 0000000000017e84 8 FUNC GLOBAL DEFAULT 11 xcb_poly_rectangle_rectangles + 203: 0000000000018334 16 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_arc_sizeof + 204: 0000000000017bbc 40 FUNC GLOBAL DEFAULT 11 xcb_segment_next + 205: 000000000001bafc 112 FUNC GLOBAL DEFAULT 11 xcb_set_access_control + 206: 0000000000017d6c 140 FUNC GLOBAL DEFAULT 11 xcb_poly_rectangle_checked + 207: 00000000000124f0 116 FUNC GLOBAL DEFAULT 11 xcb_unmap_subwindows_checked + 208: 00000000000103fc 20 FUNC GLOBAL DEFAULT 11 xcb_keycode32_end + 209: 0000000000010c94 84 FUNC GLOBAL DEFAULT 11 xcb_setup_end + 210: 000000000001c3e8 12 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping_keycodes_length + 211: 000000000000dbe8 148 FUNC GLOBAL DEFAULT 11 xcb_wait_for_reply + 212: 0000000000011b84 152 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes + 213: 00000000000122ac 116 FUNC GLOBAL DEFAULT 11 xcb_map_window + 214: 00000000000102a8 40 FUNC GLOBAL DEFAULT 11 xcb_bool32_next + 215: 0000000000015588 8 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_names_length + 216: 000000000001857c 188 FUNC GLOBAL DEFAULT 11 xcb_put_image + 217: 0000000000017b94 40 FUNC GLOBAL DEFAULT 11 xcb_poly_line_points_iterator + 218: 000000000001845c 8 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_arc_arcs + 219: 000000000001b87c 72 FUNC GLOBAL DEFAULT 11 xcb_host_next + 220: 000000000001081c 64 FUNC GLOBAL DEFAULT 11 xcb_setup_request_authorization_protocol_data_end + 221: 0000000000019e98 8 FUNC GLOBAL DEFAULT 11 xcb_query_colors_colors + 222: 0000000000011fdc 116 FUNC GLOBAL DEFAULT 11 xcb_destroy_subwindows + 223: 000000000001af44 144 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control + 224: 00000000000148d0 4 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events_reply + 225: 0000000000016fe4 184 FUNC GLOBAL DEFAULT 11 xcb_change_gc_aux + 226: 0000000000017df8 140 FUNC GLOBAL DEFAULT 11 xcb_poly_rectangle + 227: 0000000000015d34 1204 FUNC GLOBAL DEFAULT 11 xcb_create_gc_value_list_serialize + 228: 000000000001b984 112 FUNC GLOBAL DEFAULT 11 xcb_list_hosts + 229: 00000000000102d0 20 FUNC GLOBAL DEFAULT 11 xcb_bool32_end + 230: 0000000000017d1c 8 FUNC GLOBAL DEFAULT 11 xcb_poly_segment_segments + 231: 0000000000019c74 160 FUNC GLOBAL DEFAULT 11 xcb_store_named_color + 232: 0000000000018864 156 FUNC GLOBAL DEFAULT 11 xcb_poly_text_8 + 233: 0000000000012dc0 16 FUNC GLOBAL DEFAULT 11 xcb_query_tree_sizeof + 234: 00000000000182f8 20 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_rectangle_rectangles_length + 235: 0000000000010320 40 FUNC GLOBAL DEFAULT 11 xcb_timestamp_next + 236: 000000000001afd4 168 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_aux_checked + 237: 0000000000019b94 52 FUNC GLOBAL DEFAULT 11 xcb_store_colors_items_iterator + 238: 0000000000018668 16 FUNC GLOBAL DEFAULT 11 xcb_get_image_sizeof + 239: 000000000001ab0c 28 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping_keysyms_end + 240: 000000000000bd10 72 FUNC GLOBAL DEFAULT 11 xcb_get_file_descriptor + 241: 00000000000163dc 68 FUNC GLOBAL DEFAULT 11 xcb_create_gc_value_list_sizeof + 242: 0000000000017e8c 20 FUNC GLOBAL DEFAULT 11 xcb_poly_rectangle_rectangles_length + 243: 00000000000172f0 28 FUNC GLOBAL DEFAULT 11 xcb_set_dashes_dashes_end + 244: 0000000000016d98 68 FUNC GLOBAL DEFAULT 11 xcb_change_gc_value_list_sizeof + 245: 00000000000187bc 4 FUNC GLOBAL DEFAULT 11 xcb_get_image_reply + 246: 000000000001bf08 112 FUNC GLOBAL DEFAULT 11 xcb_force_screen_saver + 247: 000000000000f7a8 52 FUNC GLOBAL DEFAULT 11 xcb_sumof + 248: 000000000001b858 8 FUNC GLOBAL DEFAULT 11 xcb_host_address_length + 249: 000000000001c894 28 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list_ids_end + 250: 000000000001bf84 144 FUNC GLOBAL DEFAULT 11 xcb_set_pointer_mapping + 251: 0000000000013a00 140 FUNC GLOBAL DEFAULT 11 xcb_send_event + 252: 000000000001c3e0 8 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping_keycodes + 253: 00000000000151f4 72 FUNC GLOBAL DEFAULT 11 xcb_query_font_char_infos_iterator + 254: 00000000000138f0 132 FUNC GLOBAL DEFAULT 11 xcb_convert_selection + 255: 0000000000015124 116 FUNC GLOBAL DEFAULT 11 xcb_query_font_unchecked + 256: 0000000000019234 16 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps_sizeof + 257: 000000000001c300 112 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping + 258: 0000000000040398 0 NOTYPE GLOBAL DEFAULT 23 _edata + 259: 0000000000012dd0 116 FUNC GLOBAL DEFAULT 11 xcb_query_tree + 260: 000000000001a00c 4 FUNC GLOBAL DEFAULT 11 xcb_lookup_color_reply + 261: 00000000000184b8 8 FUNC GLOBAL DEFAULT 11 xcb_put_image_sizeof + 262: 0000000000018bec 8 FUNC GLOBAL DEFAULT 11 xcb_image_text_8_string + 263: 000000000000de88 280 FUNC GLOBAL DEFAULT 11 xcb_wait_for_special_event + 264: 000000000001a760 112 FUNC GLOBAL DEFAULT 11 xcb_list_extensions + 265: 000000000001a2c0 116 FUNC GLOBAL DEFAULT 11 xcb_free_cursor_checked + 266: 0000000000019ae0 140 FUNC GLOBAL DEFAULT 11 xcb_store_colors + 267: 0000000000018d70 8 FUNC GLOBAL DEFAULT 11 xcb_image_text_16_string_length + 268: 0000000000013868 4 FUNC GLOBAL DEFAULT 11 xcb_get_selection_owner_reply + 269: 00000000000195ac 4 FUNC GLOBAL DEFAULT 11 xcb_alloc_named_color_reply + 270: 00000000000187c8 156 FUNC GLOBAL DEFAULT 11 xcb_poly_text_8_checked + 271: 0000000000015cc0 116 FUNC GLOBAL DEFAULT 11 xcb_free_pixmap + 272: 0000000000014954 128 FUNC GLOBAL DEFAULT 11 xcb_translate_coordinates_unchecked + 273: 00000000000101f4 40 FUNC GLOBAL DEFAULT 11 xcb_atom_next + 274: 0000000000014e60 156 FUNC GLOBAL DEFAULT 11 xcb_open_font + 275: 0000000000015458 152 FUNC GLOBAL DEFAULT 11 xcb_list_fonts + 276: 000000000001b560 132 FUNC GLOBAL DEFAULT 11 xcb_set_screen_saver + 277: 00000000000104b0 20 FUNC GLOBAL DEFAULT 11 xcb_rectangle_end + 278: 00000000000100b4 20 FUNC GLOBAL DEFAULT 11 xcb_window_end + 279: 0000000000011e7c 4 FUNC GLOBAL DEFAULT 11 xcb_get_window_attributes_reply + 280: 000000000001709c 8 FUNC GLOBAL DEFAULT 11 xcb_change_gc_value_list + 281: 0000000000017a60 140 FUNC GLOBAL DEFAULT 11 xcb_poly_line_checked + 282: 0000000000013ec8 128 FUNC GLOBAL DEFAULT 11 xcb_change_active_pointer_grab_checked + 283: 000000000001830c 40 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_rectangle_rectangles_iterator + 284: 0000000000012138 128 FUNC GLOBAL DEFAULT 11 xcb_reparent_window_checked + 285: 0000000000013d34 156 FUNC GLOBAL DEFAULT 11 xcb_grab_button + 286: 0000000000017c90 140 FUNC GLOBAL DEFAULT 11 xcb_poly_segment + 287: 0000000000011ef4 116 FUNC GLOBAL DEFAULT 11 xcb_destroy_window + 288: 00000000000147ac 124 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events + 289: 000000000001523c 4 FUNC GLOBAL DEFAULT 11 xcb_query_font_reply + 290: 000000000000d308 80 FUNC GLOBAL DEFAULT 11 xcb_flush + 291: 0000000000012b28 188 FUNC GLOBAL DEFAULT 11 xcb_configure_window_aux + 292: 0000000000017d60 12 FUNC GLOBAL DEFAULT 11 xcb_poly_rectangle_sizeof + 293: 000000000001c4f8 104 FUNC GLOBAL DEFAULT 11 xcb_big_requests_enable + 294: 00000000000155b0 12 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_sizeof + 295: 000000000000bd58 8 FUNC GLOBAL DEFAULT 11 xcb_connection_has_error + 296: 000000000001c790 4 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_range_reply + 297: 000000000001975c 16 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes_sizeof + 298: 000000000001c414 4 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping_reply + 299: 00000000000141bc 140 FUNC GLOBAL DEFAULT 11 xcb_grab_key_checked + 300: 0000000000019bc8 12 FUNC GLOBAL DEFAULT 11 xcb_store_named_color_sizeof + 301: 0000000000019bd4 160 FUNC GLOBAL DEFAULT 11 xcb_store_named_color_checked + 302: 0000000000013780 116 FUNC GLOBAL DEFAULT 11 xcb_get_selection_owner + 303: 0000000000010488 40 FUNC GLOBAL DEFAULT 11 xcb_rectangle_next + 304: 000000000001125c 200 FUNC GLOBAL DEFAULT 11 xcb_create_window_checked + 305: 0000000000018c28 160 FUNC GLOBAL DEFAULT 11 xcb_image_text_16_checked + 306: 0000000000014594 112 FUNC GLOBAL DEFAULT 11 xcb_ungrab_server_checked + 307: 000000000000e920 304 FUNC GLOBAL DEFAULT 11 xcb_poll_for_reply + 308: 0000000000015384 8 FUNC GLOBAL DEFAULT 11 xcb_str_name + 309: 0000000000010590 20 FUNC GLOBAL DEFAULT 11 xcb_depth_sizeof + 310: 0000000000018264 140 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_rectangle + 311: 00000000000121b8 128 FUNC GLOBAL DEFAULT 11 xcb_reparent_window + 312: 000000000001b6c8 12 FUNC GLOBAL DEFAULT 11 xcb_change_hosts_sizeof + 313: 00000000000199fc 40 FUNC GLOBAL DEFAULT 11 xcb_coloritem_next + 314: 000000000001993c 140 FUNC GLOBAL DEFAULT 11 xcb_free_colors + 315: 000000000001c640 116 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_version_unchecked + 316: 0000000000012bec 116 FUNC GLOBAL DEFAULT 11 xcb_circulate_window_checked + 317: 00000000000133f8 24 FUNC GLOBAL DEFAULT 11 xcb_get_property_sizeof + 318: 000000000001730c 12 FUNC GLOBAL DEFAULT 11 xcb_set_clip_rectangles_sizeof + 319: 0000000000015590 28 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_names_iterator + 320: 000000000001030c 20 FUNC GLOBAL DEFAULT 11 xcb_visualid_end + 321: 000000000000c880 112 FUNC GLOBAL DEFAULT 11 xcb_writev + 322: 0000000000019644 124 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_unchecked + 323: 00000000000180f0 152 FUNC GLOBAL DEFAULT 11 xcb_fill_poly + 324: 000000000001a9b8 8 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_mapping_keysyms + 325: 000000000001017c 40 FUNC GLOBAL DEFAULT 11 xcb_gcontext_next + 326: 000000000001be74 8 FUNC GLOBAL DEFAULT 11 xcb_rotate_properties_atoms_length + 327: 0000000000018018 52 FUNC GLOBAL DEFAULT 11 xcb_poly_arc_arcs_iterator + 328: 0000000000013410 132 FUNC GLOBAL DEFAULT 11 xcb_get_property + 329: 00000000000115b8 8 FUNC GLOBAL DEFAULT 11 xcb_create_window_value_list + 330: 00000000000101e0 20 FUNC GLOBAL DEFAULT 11 xcb_colormap_end + 331: 000000000001c488 112 FUNC GLOBAL DEFAULT 11 xcb_no_operation + 332: 0000000000013688 124 FUNC GLOBAL DEFAULT 11 xcb_set_selection_owner_checked + 333: 00000000000192b8 116 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps_unchecked + 334: 000000000001c194 8 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping_map + 335: 000000000001b4d8 4 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_control_reply + 336: 00000000000105b4 28 FUNC GLOBAL DEFAULT 11 xcb_depth_visuals_iterator + 337: 0000000000014828 124 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events_unchecked + 338: 0000000000016f2c 184 FUNC GLOBAL DEFAULT 11 xcb_change_gc_aux_checked + 339: 0000000000017848 164 FUNC GLOBAL DEFAULT 11 xcb_copy_plane + 340: 0000000000019474 156 FUNC GLOBAL DEFAULT 11 xcb_alloc_named_color + 341: 00000000000151a8 28 FUNC GLOBAL DEFAULT 11 xcb_query_font_properties_iterator + 342: 000000000001538c 8 FUNC GLOBAL DEFAULT 11 xcb_str_name_length + 343: 000000000001aeb4 144 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_checked + 344: 00000000000173a8 144 FUNC GLOBAL DEFAULT 11 xcb_set_clip_rectangles + 345: 0000000000016ba4 500 FUNC GLOBAL DEFAULT 11 xcb_change_gc_value_list_unpack + 346: 00000000000161e8 500 FUNC GLOBAL DEFAULT 11 xcb_create_gc_value_list_unpack + 347: 0000000000019358 4 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps_reply + 348: 0000000000014674 116 FUNC GLOBAL DEFAULT 11 xcb_query_pointer + 349: 0000000000010bfc 8 FUNC GLOBAL DEFAULT 11 xcb_setup_roots_length + 350: 0000000000010384 20 FUNC GLOBAL DEFAULT 11 xcb_keysym_end + 351: 0000000000014a6c 148 FUNC GLOBAL DEFAULT 11 xcb_warp_pointer + 352: 0000000000012ee8 12 FUNC GLOBAL DEFAULT 11 xcb_intern_atom_sizeof + 353: 000000000001c014 144 FUNC GLOBAL DEFAULT 11 xcb_set_pointer_mapping_unchecked + 354: 00000000000196d0 28 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_pixels_end + 355: 00000000000108a4 84 FUNC GLOBAL DEFAULT 11 xcb_setup_request_end + 356: 000000000001012c 20 FUNC GLOBAL DEFAULT 11 xcb_cursor_end + 357: 00000000000109dc 8 FUNC GLOBAL DEFAULT 11 xcb_setup_authenticate_reason + 358: 0000000000018bfc 28 FUNC GLOBAL DEFAULT 11 xcb_image_text_8_string_end + 359: 00000000000403e8 0 NOTYPE GLOBAL DEFAULT 24 _bss_end__ + 360: 0000000000019ed4 156 FUNC GLOBAL DEFAULT 11 xcb_lookup_color + 361: 0000000000010398 40 FUNC GLOBAL DEFAULT 11 xcb_keycode_next + 362: 00000000000109e4 12 FUNC GLOBAL DEFAULT 11 xcb_setup_authenticate_reason_length + 363: 000000000001b9f4 112 FUNC GLOBAL DEFAULT 11 xcb_list_hosts_unchecked + 364: 000000000001879c 32 FUNC GLOBAL DEFAULT 11 xcb_get_image_data_end + 365: 000000000001a660 152 FUNC GLOBAL DEFAULT 11 xcb_query_extension_unchecked + 366: 00000000000153b0 72 FUNC GLOBAL DEFAULT 11 xcb_str_next + 367: 0000000000016420 32 FUNC GLOBAL DEFAULT 11 xcb_create_gc_sizeof + 368: 0000000000019d14 8 FUNC GLOBAL DEFAULT 11 xcb_store_named_color_name + 369: 0000000000019ec8 12 FUNC GLOBAL DEFAULT 11 xcb_lookup_color_sizeof + 370: 000000000001bdd8 148 FUNC GLOBAL DEFAULT 11 xcb_rotate_properties + 371: 00000000000151c4 40 FUNC GLOBAL DEFAULT 11 xcb_query_font_char_infos + 372: 00000000000184c0 188 FUNC GLOBAL DEFAULT 11 xcb_put_image_checked + 373: 0000000000040398 0 NOTYPE GLOBAL DEFAULT 24 __bss_start__ + 374: 0000000000017d24 20 FUNC GLOBAL DEFAULT 11 xcb_poly_segment_segments_length + 375: 00000000000109cc 16 FUNC GLOBAL DEFAULT 11 xcb_setup_authenticate_sizeof + 376: 0000000000013bb0 116 FUNC GLOBAL DEFAULT 11 xcb_ungrab_pointer_checked + 377: 000000000001b19c 112 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_control_unchecked + 378: 000000000001b374 132 FUNC GLOBAL DEFAULT 11 xcb_change_pointer_control + 379: 0000000000013148 4 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name_reply + 380: 000000000001bcc0 116 FUNC GLOBAL DEFAULT 11 xcb_kill_client + 381: 00000000000183d0 140 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_arc + 382: 000000000001ae94 32 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_sizeof + 383: 0000000000012564 116 FUNC GLOBAL DEFAULT 11 xcb_unmap_subwindows + 384: 0000000000017c04 140 FUNC GLOBAL DEFAULT 11 xcb_poly_segment_checked + 385: 0000000000019874 8 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes_pixels + 386: 00000000000109f0 28 FUNC GLOBAL DEFAULT 11 xcb_setup_authenticate_reason_end + 387: 00000000000181cc 12 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_rectangle_sizeof + 388: 00000000000191c0 116 FUNC GLOBAL DEFAULT 11 xcb_uninstall_colormap + 389: 00000000000178f8 140 FUNC GLOBAL DEFAULT 11 xcb_poly_point_checked + 390: 0000000000013520 20 FUNC GLOBAL DEFAULT 11 xcb_get_property_value_length + 391: 0000000000019e10 136 FUNC GLOBAL DEFAULT 11 xcb_query_colors_unchecked + 392: 000000000001bb6c 112 FUNC GLOBAL DEFAULT 11 xcb_set_close_down_mode_checked + 393: 0000000000017564 132 FUNC GLOBAL DEFAULT 11 xcb_clear_area_checked + 394: 000000000000bd60 176 FUNC GLOBAL DEFAULT 11 xcb_disconnect + 395: 000000000001b80c 8 FUNC GLOBAL DEFAULT 11 xcb_change_hosts_address + 396: 0000000000010548 40 FUNC GLOBAL DEFAULT 11 xcb_visualtype_next + 397: 000000000001ba8c 112 FUNC GLOBAL DEFAULT 11 xcb_set_access_control_checked + 398: 0000000000018bf4 8 FUNC GLOBAL DEFAULT 11 xcb_image_text_8_string_length + 399: 000000000000ebf4 8 FUNC GLOBAL DEFAULT 11 xcb_poll_for_queued_event + 400: 0000000000018930 8 FUNC GLOBAL DEFAULT 11 xcb_poly_text_16_sizeof + 401: 00000000000197f0 132 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes_unchecked + 402: 0000000000010438 20 FUNC GLOBAL DEFAULT 11 xcb_button_end + 403: 0000000000017ff8 32 FUNC GLOBAL DEFAULT 11 xcb_poly_arc_arcs_length + 404: 0000000000013bac 4 FUNC GLOBAL DEFAULT 11 xcb_grab_pointer_reply + 405: 000000000001a0bc 172 FUNC GLOBAL DEFAULT 11 xcb_create_cursor + 406: 000000000001aa04 124 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping + 407: 000000000000d704 84 FUNC GLOBAL DEFAULT 11 xcb_discard_reply64 + 408: 0000000000015094 28 FUNC GLOBAL DEFAULT 11 xcb_query_font_sizeof + 409: 000000000001b6c4 4 FUNC GLOBAL DEFAULT 11 xcb_get_screen_saver_reply + 410: 0000000000018c18 16 FUNC GLOBAL DEFAULT 11 xcb_image_text_16_sizeof + 411: 00000000000128c8 68 FUNC GLOBAL DEFAULT 11 xcb_configure_window_value_list_sizeof + 412: 000000000000be10 724 FUNC GLOBAL DEFAULT 11 xcb_connect_to_fd + 413: 000000000000dcec 268 FUNC GLOBAL DEFAULT 11 xcb_request_check + 414: 000000000001932c 8 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps_cmaps + 415: 000000000001a3a8 140 FUNC GLOBAL DEFAULT 11 xcb_recolor_cursor_checked + 416: 000000000001021c 20 FUNC GLOBAL DEFAULT 11 xcb_atom_end + 417: 00000000000129cc 160 FUNC GLOBAL DEFAULT 11 xcb_configure_window + 418: 000000000001bf78 12 FUNC GLOBAL DEFAULT 11 xcb_set_pointer_mapping_sizeof + 419: 000000000001c1d4 140 FUNC GLOBAL DEFAULT 11 xcb_set_modifier_mapping + 420: 0000000000013534 40 FUNC GLOBAL DEFAULT 11 xcb_get_property_value_end + 421: 0000000000011d94 116 FUNC GLOBAL DEFAULT 11 xcb_get_window_attributes + 422: 0000000000013684 4 FUNC GLOBAL DEFAULT 11 xcb_list_properties_reply + 423: 0000000000017ed8 140 FUNC GLOBAL DEFAULT 11 xcb_poly_arc_checked + 424: 0000000000018484 52 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_arc_arcs_iterator + 425: 00000000000149d4 4 FUNC GLOBAL DEFAULT 11 xcb_translate_coordinates_reply + 426: 000000000001c19c 8 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping_map_length + 427: 0000000000012394 116 FUNC GLOBAL DEFAULT 11 xcb_map_subwindows + 428: 000000000001355c 4 FUNC GLOBAL DEFAULT 11 xcb_get_property_reply + 429: 0000000000013570 116 FUNC GLOBAL DEFAULT 11 xcb_list_properties + 430: 0000000000019510 156 FUNC GLOBAL DEFAULT 11 xcb_alloc_named_color_unchecked + 431: 000000000001576c 4 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_reply + 432: 0000000000014760 40 FUNC GLOBAL DEFAULT 11 xcb_timecoord_next + 433: 0000000000013308 120 FUNC GLOBAL DEFAULT 11 xcb_delete_property_checked + 434: 0000000000013034 116 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name + 435: 000000000001a5c8 152 FUNC GLOBAL DEFAULT 11 xcb_query_extension + 436: 00000000000148a4 8 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events_events + 437: 000000000001a434 140 FUNC GLOBAL DEFAULT 11 xcb_recolor_cursor + 438: 0000000000018f00 116 FUNC GLOBAL DEFAULT 11 xcb_free_colormap + 439: 000000000000ee50 84 FUNC GLOBAL DEFAULT 11 xcb_prefetch_extension_data + 440: 0000000000014604 112 FUNC GLOBAL DEFAULT 11 xcb_ungrab_server + 441: 00000000000111f8 68 FUNC GLOBAL DEFAULT 11 xcb_create_window_value_list_sizeof + 442: 000000000001ab04 8 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping_keysyms_length + 443: 0000000000018aac 160 FUNC GLOBAL DEFAULT 11 xcb_image_text_8_checked + 444: 000000000001bc4c 116 FUNC GLOBAL DEFAULT 11 xcb_kill_client_checked + 445: 000000000001b814 8 FUNC GLOBAL DEFAULT 11 xcb_change_hosts_address_length + 446: 000000000000f760 72 FUNC GLOBAL DEFAULT 11 xcb_popcount + 447: 000000000001b12c 112 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_control + 448: 0000000000012408 116 FUNC GLOBAL DEFAULT 11 xcb_unmap_window_checked + 449: 0000000000011e80 116 FUNC GLOBAL DEFAULT 11 xcb_destroy_window_checked + 450: 0000000000010c04 72 FUNC GLOBAL DEFAULT 11 xcb_setup_roots_iterator + 451: 0000000000010078 20 FUNC GLOBAL DEFAULT 11 xcb_char2b_end + 452: 0000000000012ef4 152 FUNC GLOBAL DEFAULT 11 xcb_intern_atom + 453: 000000000001976c 132 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes + 454: 000000000000dc7c 112 FUNC GLOBAL DEFAULT 11 xcb_wait_for_reply64 + 455: 000000000000f7f0 996 FUNC GLOBAL DEFAULT 11 xcb_connect_to_display_with_auth_info + 456: 0000000000017984 140 FUNC GLOBAL DEFAULT 11 xcb_poly_point + 457: 000000000001c8b0 4 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list_reply + 458: 000000000000d154 20 FUNC GLOBAL DEFAULT 11 xcb_send_request + 459: 0000000000012a6c 188 FUNC GLOBAL DEFAULT 11 xcb_configure_window_aux_checked + 460: 0000000000019d1c 8 FUNC GLOBAL DEFAULT 11 xcb_store_named_color_name_length + 461: 0000000000017454 40 FUNC GLOBAL DEFAULT 11 xcb_set_clip_rectangles_rectangles_iterator + 462: 0000000000019710 8 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_masks_length + 463: 000000000001aa80 124 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping_unchecked + 464: 0000000000012ec0 8 FUNC GLOBAL DEFAULT 11 xcb_query_tree_children_length + 465: 000000000000cc18 1308 FUNC GLOBAL DEFAULT 11 xcb_send_request_with_fds64 + 466: 00000000000102e4 40 FUNC GLOBAL DEFAULT 11 xcb_visualid_next + 467: 000000000001b210 112 FUNC GLOBAL DEFAULT 11 xcb_bell_checked + 468: 0000000000017d38 40 FUNC GLOBAL DEFAULT 11 xcb_poly_segment_segments_iterator + 469: 000000000001c794 16 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list_sizeof + 470: 000000000001aafc 8 FUNC GLOBAL DEFAULT 11 xcb_get_keyboard_mapping_keysyms + 471: 000000000001c124 112 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping_unchecked + 472: 0000000000017b80 20 FUNC GLOBAL DEFAULT 11 xcb_poly_line_points_length + 473: 00000000000104ec 32 FUNC GLOBAL DEFAULT 11 xcb_arc_end + 474: 000000000001c1a4 28 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping_map_end + 475: 0000000000015240 12 FUNC GLOBAL DEFAULT 11 xcb_query_text_extents_sizeof + 476: 000000000001312c 28 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name_name_end + 477: 000000000001544c 12 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_sizeof + 478: 000000000001404c 132 FUNC GLOBAL DEFAULT 11 xcb_grab_keyboard_unchecked + 479: 000000000001c7a4 112 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_list + 480: 000000000000d690 116 FUNC GLOBAL DEFAULT 11 xcb_discard_reply + 481: 0000000000014350 124 FUNC GLOBAL DEFAULT 11 xcb_ungrab_key + 482: 000000000000d850 216 FUNC GLOBAL DEFAULT 11 xcb_unregister_for_special_event + 483: 0000000000018918 24 FUNC GLOBAL DEFAULT 11 xcb_poly_text_8_items_end + 484: 0000000000019a44 16 FUNC GLOBAL DEFAULT 11 xcb_store_colors_sizeof + 485: 000000000001a848 28 FUNC GLOBAL DEFAULT 11 xcb_list_extensions_names_iterator + 486: 0000000000017b78 8 FUNC GLOBAL DEFAULT 11 xcb_poly_line_points + 487: 000000000001ba6c 28 FUNC GLOBAL DEFAULT 11 xcb_list_hosts_hosts_iterator + 488: 0000000000014cd0 4 FUNC GLOBAL DEFAULT 11 xcb_get_input_focus_reply + 489: 000000000001c6b4 4 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_version_reply + 490: 0000000000010d10 32 FUNC GLOBAL DEFAULT 11 xcb_client_message_data_end + 491: 0000000000010930 72 FUNC GLOBAL DEFAULT 11 xcb_setup_failed_next + 492: 00000000000198a0 4 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes_reply + 493: 0000000000018d68 8 FUNC GLOBAL DEFAULT 11 xcb_image_text_16_string + 494: 0000000000016578 184 FUNC GLOBAL DEFAULT 11 xcb_create_gc_aux_checked + 495: 000000000001479c 16 FUNC GLOBAL DEFAULT 11 xcb_get_motion_events_sizeof + 496: 0000000000017aec 140 FUNC GLOBAL DEFAULT 11 xcb_poly_line + 497: 00000000000151a0 8 FUNC GLOBAL DEFAULT 11 xcb_query_font_properties_length + 498: 0000000000016ddc 32 FUNC GLOBAL DEFAULT 11 xcb_change_gc_sizeof + 499: 0000000000015378 12 FUNC GLOBAL DEFAULT 11 xcb_str_sizeof + 500: 00000000000198b0 140 FUNC GLOBAL DEFAULT 11 xcb_free_colors_checked + 501: 0000000000012ee4 4 FUNC GLOBAL DEFAULT 11 xcb_query_tree_reply + 502: 0000000000012be4 8 FUNC GLOBAL DEFAULT 11 xcb_configure_window_value_list + 503: 00000000000140d4 116 FUNC GLOBAL DEFAULT 11 xcb_ungrab_keyboard_checked + 504: 0000000000013fc8 132 FUNC GLOBAL DEFAULT 11 xcb_grab_keyboard + 505: 000000000001b5e4 112 FUNC GLOBAL DEFAULT 11 xcb_get_screen_saver + 506: 00000000000156fc 28 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_properties_iterator + 507: 00000000000149d8 148 FUNC GLOBAL DEFAULT 11 xcb_warp_pointer_checked + 508: 0000000000018f74 120 FUNC GLOBAL DEFAULT 11 xcb_copy_colormap_and_free_checked + 509: 000000000001035c 40 FUNC GLOBAL DEFAULT 11 xcb_keysym_next + 510: 0000000000012f8c 152 FUNC GLOBAL DEFAULT 11 xcb_intern_atom_unchecked + 511: 0000000000012810 184 FUNC GLOBAL DEFAULT 11 xcb_configure_window_value_list_unpack + 512: 0000000000014c60 112 FUNC GLOBAL DEFAULT 11 xcb_get_input_focus_unchecked + 513: 0000000000014f28 116 FUNC GLOBAL DEFAULT 11 xcb_close_font_checked + 514: 0000000000014db4 4 FUNC GLOBAL DEFAULT 11 xcb_query_keymap_reply + 515: 000000000001c6b8 108 FUNC GLOBAL DEFAULT 11 xcb_xc_misc_get_xid_range + 516: 0000000000018e8c 116 FUNC GLOBAL DEFAULT 11 xcb_free_colormap_checked + 517: 0000000000017318 144 FUNC GLOBAL DEFAULT 11 xcb_set_clip_rectangles_checked + 518: 00000000000159c4 28 FUNC GLOBAL DEFAULT 11 xcb_set_font_path_font_iterator + 519: 0000000000011d8c 8 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_value_list + 520: 0000000000010a54 84 FUNC GLOBAL DEFAULT 11 xcb_setup_authenticate_end + 521: 0000000000014524 112 FUNC GLOBAL DEFAULT 11 xcb_grab_server + 522: 0000000000018058 152 FUNC GLOBAL DEFAULT 11 xcb_fill_poly_checked + 523: 00000000000403e8 0 NOTYPE GLOBAL DEFAULT 24 __end__ + 524: 000000000001c418 112 FUNC GLOBAL DEFAULT 11 xcb_no_operation_checked + 525: 000000000001c3f4 32 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping_keycodes_end + 526: 000000000001be7c 28 FUNC GLOBAL DEFAULT 11 xcb_rotate_properties_atoms_end + 527: 000000000001b6d4 156 FUNC GLOBAL DEFAULT 11 xcb_change_hosts_checked + 528: 000000000001b850 8 FUNC GLOBAL DEFAULT 11 xcb_host_address + 529: 000000000001c1c4 16 FUNC GLOBAL DEFAULT 11 xcb_set_modifier_mapping_sizeof + 530: 00000000000190d8 116 FUNC GLOBAL DEFAULT 11 xcb_install_colormap + 531: 000000000001a7d0 112 FUNC GLOBAL DEFAULT 11 xcb_list_extensions_unchecked + 532: 0000000000019064 116 FUNC GLOBAL DEFAULT 11 xcb_install_colormap_checked + 533: 0000000000018cc8 160 FUNC GLOBAL DEFAULT 11 xcb_image_text_16 + 534: 00000000000196c8 8 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_pixels_length + 535: 0000000000018a88 24 FUNC GLOBAL DEFAULT 11 xcb_poly_text_16_items_end + 536: 0000000000015718 24 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_name + 537: 0000000000040388 16 OBJECT GLOBAL DEFAULT 23 xcb_xc_misc_id + 538: 000000000001b468 112 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_control_unchecked + 539: 000000000001b07c 168 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_aux + 540: 000000000001524c 148 FUNC GLOBAL DEFAULT 11 xcb_query_text_extents + 541: 000000000001a5b8 4 FUNC GLOBAL DEFAULT 11 xcb_query_best_size_reply + 542: 00000000000125d8 568 FUNC GLOBAL DEFAULT 11 xcb_configure_window_value_list_serialize + 543: 00000000000106e0 28 FUNC GLOBAL DEFAULT 11 xcb_screen_allowed_depths_iterator + 544: 0000000000018344 140 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_arc_checked + 545: 00000000000110a4 340 FUNC GLOBAL DEFAULT 11 xcb_create_window_value_list_unpack + 546: 0000000000013024 4 FUNC GLOBAL DEFAULT 11 xcb_intern_atom_reply + 547: 000000000000d688 8 FUNC GLOBAL DEFAULT 11 xcb_get_reply_fds + 548: 00000000000151ec 8 FUNC GLOBAL DEFAULT 11 xcb_query_font_char_infos_length + 549: 0000000000017438 8 FUNC GLOBAL DEFAULT 11 xcb_set_clip_rectangles_rectangles + 550: 0000000000018e10 124 FUNC GLOBAL DEFAULT 11 xcb_create_colormap + 551: 0000000000011324 204 FUNC GLOBAL DEFAULT 11 xcb_create_window + 552: 0000000000010618 84 FUNC GLOBAL DEFAULT 11 xcb_depth_end + 553: 0000000000018790 12 FUNC GLOBAL DEFAULT 11 xcb_get_image_data_length + 554: 000000000001c370 112 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping_unchecked + 555: 0000000000012320 116 FUNC GLOBAL DEFAULT 11 xcb_map_subwindows_checked + 556: 000000000001b280 112 FUNC GLOBAL DEFAULT 11 xcb_bell + 557: 0000000000017120 124 FUNC GLOBAL DEFAULT 11 xcb_copy_gc + 558: 0000000000015374 4 FUNC GLOBAL DEFAULT 11 xcb_query_text_extents_reply + 559: 0000000000014f0c 28 FUNC GLOBAL DEFAULT 11 xcb_open_font_name_end + 560: 0000000000011a88 68 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_value_list_sizeof + 561: 0000000000018640 16 FUNC GLOBAL DEFAULT 11 xcb_put_image_data_length + 562: 0000000000010b68 8 FUNC GLOBAL DEFAULT 11 xcb_setup_vendor_length + 563: 0000000000014f9c 116 FUNC GLOBAL DEFAULT 11 xcb_close_font + 564: 0000000000010168 20 FUNC GLOBAL DEFAULT 11 xcb_font_end + 565: 000000000001290c 32 FUNC GLOBAL DEFAULT 11 xcb_configure_window_sizeof + 566: 000000000001ba64 8 FUNC GLOBAL DEFAULT 11 xcb_list_hosts_hosts_length + 567: 00000000000159e0 100 FUNC GLOBAL DEFAULT 11 xcb_get_font_path_sizeof + 568: 0000000000019334 8 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps_cmaps_length + 569: 0000000000010904 8 FUNC GLOBAL DEFAULT 11 xcb_setup_failed_reason + 570: 000000000001b838 24 FUNC GLOBAL DEFAULT 11 xcb_host_sizeof + 571: 00000000000170a4 124 FUNC GLOBAL DEFAULT 11 xcb_copy_gc_checked + 572: 000000000001a864 4 FUNC GLOBAL DEFAULT 11 xcb_list_extensions_reply + 573: 00000000000144b4 112 FUNC GLOBAL DEFAULT 11 xcb_grab_server_checked + 574: 0000000000018190 20 FUNC GLOBAL DEFAULT 11 xcb_fill_poly_points_length + 575: 000000000001c2f0 16 FUNC GLOBAL DEFAULT 11 xcb_get_modifier_mapping_sizeof + 576: 000000000001475c 4 FUNC GLOBAL DEFAULT 11 xcb_query_pointer_reply + 577: 0000000000017be4 20 FUNC GLOBAL DEFAULT 11 xcb_segment_end + 578: 000000000001bd34 16 FUNC GLOBAL DEFAULT 11 xcb_rotate_properties_sizeof + 579: 0000000000019718 64 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_masks_end + 580: 00000000000107d4 28 FUNC GLOBAL DEFAULT 11 xcb_setup_request_authorization_protocol_name_end + 581: 0000000000013704 124 FUNC GLOBAL DEFAULT 11 xcb_set_selection_owner + 582: 00000000000132c4 8 FUNC GLOBAL DEFAULT 11 xcb_change_property_data + 583: 0000000000010ce8 40 FUNC GLOBAL DEFAULT 11 xcb_client_message_data_next + 584: 0000000000017244 156 FUNC GLOBAL DEFAULT 11 xcb_set_dashes + 585: 0000000000013518 8 FUNC GLOBAL DEFAULT 11 xcb_get_property_value + 586: 000000000001b918 108 FUNC GLOBAL DEFAULT 11 xcb_list_hosts_sizeof + 587: 00000000000108f8 12 FUNC GLOBAL DEFAULT 11 xcb_setup_failed_sizeof + 588: 0000000000012d48 116 FUNC GLOBAL DEFAULT 11 xcb_get_geometry_unchecked + 589: 0000000000018d78 28 FUNC GLOBAL DEFAULT 11 xcb_image_text_16_string_iterator + 590: 00000000000403e8 0 NOTYPE GLOBAL DEFAULT 24 __bss_end__ + 591: 00000000000103d4 40 FUNC GLOBAL DEFAULT 11 xcb_keycode32_next + 592: 00000000000189d4 156 FUNC GLOBAL DEFAULT 11 xcb_poly_text_16 + 593: 00000000000101b8 40 FUNC GLOBAL DEFAULT 11 xcb_colormap_next + 594: 0000000000013214 176 FUNC GLOBAL DEFAULT 11 xcb_change_property + 595: 0000000000014d44 112 FUNC GLOBAL DEFAULT 11 xcb_query_keymap_unchecked + 596: 00000000000107f0 36 FUNC GLOBAL DEFAULT 11 xcb_setup_request_authorization_protocol_data + 597: 000000000000f7dc 20 FUNC GLOBAL DEFAULT 11 xcb_parse_display + 598: 000000000001933c 28 FUNC GLOBAL DEFAULT 11 xcb_list_installed_colormaps_cmaps_end + 599: 0000000000018fec 120 FUNC GLOBAL DEFAULT 11 xcb_copy_colormap_and_free + 600: 000000000001a868 24 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_mapping_sizeof + 601: 00000000000106d8 8 FUNC GLOBAL DEFAULT 11 xcb_screen_allowed_depths_length + 602: 0000000000015010 40 FUNC GLOBAL DEFAULT 11 xcb_fontprop_next + 603: 0000000000018650 24 FUNC GLOBAL DEFAULT 11 xcb_put_image_data_end + 604: 000000000001085c 72 FUNC GLOBAL DEFAULT 11 xcb_setup_request_next + 605: 0000000000010050 40 FUNC GLOBAL DEFAULT 11 xcb_char2b_next + 606: 0000000000012dbc 4 FUNC GLOBAL DEFAULT 11 xcb_get_geometry_reply + 607: 000000000000d148 12 FUNC GLOBAL DEFAULT 11 xcb_send_request64 + 608: 00000000000106fc 72 FUNC GLOBAL DEFAULT 11 xcb_screen_next + 609: 0000000000012e44 116 FUNC GLOBAL DEFAULT 11 xcb_query_tree_unchecked + 610: 00000000000156f4 8 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_properties_length + 611: 000000000001c2ec 4 FUNC GLOBAL DEFAULT 11 xcb_set_modifier_mapping_reply + 612: 00000000000100f0 20 FUNC GLOBAL DEFAULT 11 xcb_pixmap_end + 613: 0000000000013dd0 124 FUNC GLOBAL DEFAULT 11 xcb_ungrab_button_checked + 614: 000000000001935c 132 FUNC GLOBAL DEFAULT 11 xcb_alloc_color + 615: 00000000000177a4 164 FUNC GLOBAL DEFAULT 11 xcb_copy_plane_checked + 616: 000000000000fbd4 12 FUNC GLOBAL DEFAULT 11 xcb_connect + 617: 000000000001a4c0 124 FUNC GLOBAL DEFAULT 11 xcb_query_best_size + 618: 0000000000010b8c 36 FUNC GLOBAL DEFAULT 11 xcb_setup_pixmap_formats + 619: 000000000001804c 12 FUNC GLOBAL DEFAULT 11 xcb_fill_poly_sizeof + 620: 000000000001008c 40 FUNC GLOBAL DEFAULT 11 xcb_window_next + 621: 0000000000019ea8 28 FUNC GLOBAL DEFAULT 11 xcb_query_colors_colors_iterator + 622: 0000000000010814 8 FUNC GLOBAL DEFAULT 11 xcb_setup_request_authorization_protocol_data_length + 623: 00000000000140d0 4 FUNC GLOBAL DEFAULT 11 xcb_grab_keyboard_reply + 624: 000000000001ab2c 604 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_control_value_list_serialize + 625: 0000000000014788 20 FUNC GLOBAL DEFAULT 11 xcb_timecoord_end + 626: 00000000000175e8 132 FUNC GLOBAL DEFAULT 11 xcb_clear_area + 627: 00000000000178ec 12 FUNC GLOBAL DEFAULT 11 xcb_poly_point_sizeof + 628: 000000000001a334 116 FUNC GLOBAL DEFAULT 11 xcb_free_cursor + 629: 0000000000010104 40 FUNC GLOBAL DEFAULT 11 xcb_cursor_next + 630: 0000000000016dfc 152 FUNC GLOBAL DEFAULT 11 xcb_change_gc_checked + 631: 000000000000ddf8 144 FUNC GLOBAL DEFAULT 11 xcb_wait_for_event + 632: 000000000001747c 116 FUNC GLOBAL DEFAULT 11 xcb_free_gc_checked + 633: 0000000000017a2c 40 FUNC GLOBAL DEFAULT 11 xcb_poly_point_points_iterator + 634: 00000000000172e8 8 FUNC GLOBAL DEFAULT 11 xcb_set_dashes_dashes_length + 635: 00000000000130a8 116 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name_unchecked + 636: 000000000001044c 40 FUNC GLOBAL DEFAULT 11 xcb_point_next + 637: 000000000001292c 160 FUNC GLOBAL DEFAULT 11 xcb_configure_window_checked + 638: 00000000000152e0 148 FUNC GLOBAL DEFAULT 11 xcb_query_text_extents_unchecked + 639: 00000000000182f0 8 FUNC GLOBAL DEFAULT 11 xcb_poly_fill_rectangle_rectangles + 640: 0000000000019d68 20 FUNC GLOBAL DEFAULT 11 xcb_rgb_end + 641: 000000000001c0b4 112 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_mapping + 642: 000000000001be6c 8 FUNC GLOBAL DEFAULT 11 xcb_rotate_properties_atoms + 643: 0000000000010348 20 FUNC GLOBAL DEFAULT 11 xcb_timestamp_end + 644: 000000000000ef54 372 FUNC GLOBAL DEFAULT 11 xcb_generate_id + 645: 0000000000015738 52 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_name_end + 646: 0000000000012050 116 FUNC GLOBAL DEFAULT 11 xcb_change_save_set_checked + 647: 0000000000011e08 116 FUNC GLOBAL DEFAULT 11 xcb_get_window_attributes_unchecked + 648: 000000000001123c 32 FUNC GLOBAL DEFAULT 11 xcb_create_window_sizeof + 649: 000000000001b81c 28 FUNC GLOBAL DEFAULT 11 xcb_change_hosts_address_end + 650: 0000000000010230 40 FUNC GLOBAL DEFAULT 11 xcb_drawable_next + 651: 000000000001bd44 148 FUNC GLOBAL DEFAULT 11 xcb_rotate_properties_checked + 652: 00000000000100c8 40 FUNC GLOBAL DEFAULT 11 xcb_pixmap_next + 653: 00000000000120c4 116 FUNC GLOBAL DEFAULT 11 xcb_change_save_set + 654: 0000000000019468 12 FUNC GLOBAL DEFAULT 11 xcb_alloc_named_color_sizeof + 655: 000000000001766c 156 FUNC GLOBAL DEFAULT 11 xcb_copy_area_checked + 656: 0000000000011934 340 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_value_list_unpack + 657: 0000000000010258 20 FUNC GLOBAL DEFAULT 11 xcb_drawable_end + 658: 000000000001a6f8 4 FUNC GLOBAL DEFAULT 11 xcb_query_extension_reply + 659: 00000000000403e8 0 NOTYPE GLOBAL DEFAULT 24 _end + 660: 0000000000010570 32 FUNC GLOBAL DEFAULT 11 xcb_visualtype_end + 661: 000000000001987c 8 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes_pixels_length + 662: 0000000000012238 116 FUNC GLOBAL DEFAULT 11 xcb_map_window_checked + 663: 000000000001b770 156 FUNC GLOBAL DEFAULT 11 xcb_change_hosts + 664: 0000000000018b4c 160 FUNC GLOBAL DEFAULT 11 xcb_image_text_8 + 665: 00000000000195b0 24 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_cells_sizeof + 666: 0000000000013974 140 FUNC GLOBAL DEFAULT 11 xcb_send_event_checked + 667: 0000000000012ec8 28 FUNC GLOBAL DEFAULT 11 xcb_query_tree_children_end + 668: 000000000001066c 108 FUNC GLOBAL DEFAULT 11 xcb_screen_sizeof + 669: 0000000000018678 136 FUNC GLOBAL DEFAULT 11 xcb_get_image + 670: 000000000000c69c 176 FUNC GLOBAL DEFAULT 11 xcb_get_maximum_request_length + 671: 0000000000016e94 152 FUNC GLOBAL DEFAULT 11 xcb_change_gc + 672: 0000000000019884 28 FUNC GLOBAL DEFAULT 11 xcb_alloc_color_planes_pixels_end + 673: 0000000000013560 16 FUNC GLOBAL DEFAULT 11 xcb_list_properties_sizeof + 674: 0000000000018900 8 FUNC GLOBAL DEFAULT 11 xcb_poly_text_8_items + 675: 0000000000019d88 136 FUNC GLOBAL DEFAULT 11 xcb_query_colors + 676: 00000000000153f8 84 FUNC GLOBAL DEFAULT 11 xcb_str_end + 677: 00000000000174f0 116 FUNC GLOBAL DEFAULT 11 xcb_free_gc + 678: 0000000000010bb8 68 FUNC GLOBAL DEFAULT 11 xcb_setup_pixmap_formats_iterator + 679: 0000000000014b00 120 FUNC GLOBAL DEFAULT 11 xcb_set_input_focus_checked + 680: 000000000001314c 24 FUNC GLOBAL DEFAULT 11 xcb_change_property_sizeof + 681: 000000000000ebfc 144 FUNC GLOBAL DEFAULT 11 xcb_poll_for_special_event + 682: 00000000000159bc 8 FUNC GLOBAL DEFAULT 11 xcb_set_font_path_font_length + 683: 0000000000015b24 8 FUNC GLOBAL DEFAULT 11 xcb_get_font_path_path_length + 684: 0000000000019ea0 8 FUNC GLOBAL DEFAULT 11 xcb_query_colors_colors_length + 685: 0000000000014db8 12 FUNC GLOBAL DEFAULT 11 xcb_open_font_sizeof + 686: 0000000000010474 20 FUNC GLOBAL DEFAULT 11 xcb_point_end + 687: 0000000000016440 156 FUNC GLOBAL DEFAULT 11 xcb_create_gc_checked + 688: 000000000001719c 12 FUNC GLOBAL DEFAULT 11 xcb_set_dashes_sizeof + 689: 0000000000013164 176 FUNC GLOBAL DEFAULT 11 xcb_change_property_checked + 690: 000000000001914c 116 FUNC GLOBAL DEFAULT 11 xcb_uninstall_colormap_checked + 691: 000000000001b3f8 112 FUNC GLOBAL DEFAULT 11 xcb_get_pointer_control + 692: 0000000000012cd4 116 FUNC GLOBAL DEFAULT 11 xcb_get_geometry + 693: 000000000001b860 28 FUNC GLOBAL DEFAULT 11 xcb_host_address_end + 694: 0000000000010798 44 FUNC GLOBAL DEFAULT 11 xcb_setup_request_sizeof + 695: 0000000000010d30 884 FUNC GLOBAL DEFAULT 11 xcb_create_window_value_list_serialize + 696: 0000000000013f48 128 FUNC GLOBAL DEFAULT 11 xcb_change_active_pointer_grab + 697: 0000000000013380 120 FUNC GLOBAL DEFAULT 11 xcb_delete_property + 698: 0000000000013494 132 FUNC GLOBAL DEFAULT 11 xcb_get_property_unchecked + 699: 0000000000013a8c 144 FUNC GLOBAL DEFAULT 11 xcb_grab_pointer + 700: 00000000000150b0 116 FUNC GLOBAL DEFAULT 11 xcb_query_font + 701: 000000000001a9d0 36 FUNC GLOBAL DEFAULT 11 xcb_change_keyboard_mapping_keysyms_end + 702: 00000000000105ac 8 FUNC GLOBAL DEFAULT 11 xcb_depth_visuals_length + 703: 0000000000013668 28 FUNC GLOBAL DEFAULT 11 xcb_list_properties_atoms_end + 704: 000000000001c560 108 FUNC GLOBAL DEFAULT 11 xcb_big_requests_enable_unchecked + 705: 0000000000018a70 8 FUNC GLOBAL DEFAULT 11 xcb_poly_text_16_items + 706: 000000000001a840 8 FUNC GLOBAL DEFAULT 11 xcb_list_extensions_names_length + 707: 00000000000164dc 156 FUNC GLOBAL DEFAULT 11 xcb_create_gc + 708: 000000000000ea50 248 FUNC GLOBAL DEFAULT 11 xcb_poll_for_reply64 + 709: 0000000000019b6c 8 FUNC GLOBAL DEFAULT 11 xcb_store_colors_items + 710: 00000000000105d0 72 FUNC GLOBAL DEFAULT 11 xcb_depth_next + 711: 00000000000101a4 20 FUNC GLOBAL DEFAULT 11 xcb_gcontext_end + 712: 0000000000018638 8 FUNC GLOBAL DEFAULT 11 xcb_put_image_data + 713: 0000000000013028 12 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name_sizeof + 714: 0000000000017f64 140 FUNC GLOBAL DEFAULT 11 xcb_poly_arc + 715: 0000000000040398 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 716: 0000000000010978 84 FUNC GLOBAL DEFAULT 11 xcb_setup_failed_end + 717: 000000000001a53c 124 FUNC GLOBAL DEFAULT 11 xcb_query_best_size_unchecked + 718: 000000000001c8b4 0 FUNC GLOBAL DEFAULT 12 _fini + 719: 000000000001c5cc 4 FUNC GLOBAL DEFAULT 11 xcb_big_requests_enable_reply + 720: 000000000000ebec 8 FUNC GLOBAL DEFAULT 11 xcb_poll_for_event + 721: 0000000000011aec 152 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_checked + 722: 000000000001a168 172 FUNC GLOBAL DEFAULT 11 xcb_create_glyph_cursor_checked + 723: 0000000000013124 8 FUNC GLOBAL DEFAULT 11 xcb_get_atom_name_name_length + 724: 00000000000199d0 20 FUNC GLOBAL DEFAULT 11 xcb_free_colors_pixels_length + 725: 000000000000d758 248 FUNC GLOBAL DEFAULT 11 xcb_register_for_special_xge + 726: 00000000000115c0 884 FUNC GLOBAL DEFAULT 11 xcb_change_window_attributes_value_list_serialize + 727: 000000000001be98 112 FUNC GLOBAL DEFAULT 11 xcb_force_screen_saver_checked + 728: 0000000000040378 16 OBJECT GLOBAL DEFAULT 23 xcb_big_requests_id + 729: 0000000000010aa8 184 FUNC GLOBAL DEFAULT 11 xcb_setup_sizeof + 730: 0000000000015bcc 128 FUNC GLOBAL DEFAULT 11 xcb_create_pixmap + 731: 0000000000015770 100 FUNC GLOBAL DEFAULT 11 xcb_set_font_path_sizeof + 732: 000000000001a5bc 12 FUNC GLOBAL DEFAULT 11 xcb_query_extension_sizeof + 733: 0000000000010b60 8 FUNC GLOBAL DEFAULT 11 xcb_setup_vendor + 734: 0000000000015b2c 28 FUNC GLOBAL DEFAULT 11 xcb_get_font_path_path_iterator + 735: 000000000001c0a4 4 FUNC GLOBAL DEFAULT 11 xcb_set_pointer_mapping_reply + 736: 0000000000014f04 8 FUNC GLOBAL DEFAULT 11 xcb_open_font_name_length + 737: 0000000000015654 152 FUNC GLOBAL DEFAULT 11 xcb_list_fonts_with_info_unchecked + 738: 000000000001247c 116 FUNC GLOBAL DEFAULT 11 xcb_unmap_window diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libxkbcommon.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libxkbcommon.so.0.txt new file mode 100644 index 000000000000..9db15a280d83 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libxkbcommon.so.0.txt @@ -0,0 +1,147 @@ +Library: /lib64/libxkbcommon.so.0 +Package: libxkbcommon-0.7.1-3.el7.aarch64 + + +Symbol table '.dynsym' contains 141 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000004170 0 SECTION LOCAL DEFAULT 10 + 2: 000000000004ede0 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (5) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.17 (5) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.17 (5) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (5) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.17 (5) + 8: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.17 (5) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND secure_getenv@GLIBC_2.17 (5) + 11: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (5) + 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.17 (5) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.17 (5) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eaccess@GLIBC_2.17 (5) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND snprintf@GLIBC_2.17 (5) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.17 (5) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.17 (5) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.17 (5) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.17 (5) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.17 (5) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (5) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.17 (5) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.17 (5) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (5) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.17 (5) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.17 (5) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.17 (5) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.17 (5) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (5) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (5) + 31: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 32: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (6) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.17 (5) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __asprintf_chk@GLIBC_2.17 (5) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.17 (5) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.17 (5) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.17 (5) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (5) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.17 (5) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.17 (5) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.17 (5) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.17 (5) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (5) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (5) + 45: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.17 (5) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.17 (5) + 48: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.17 (5) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (5) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.17 (5) + 52: 000000000001d090 80 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_layout@@V_0.5.0 + 53: 000000000001a78c 12 FUNC GLOBAL DEFAULT 12 xkb_context_get_user_data@@V_0.5.0 + 54: 000000000001b3d0 284 FUNC GLOBAL DEFAULT 12 xkb_keysym_get_name@@V_0.5.0 + 55: 000000000001ba4c 292 FUNC GLOBAL DEFAULT 12 xkb_keysym_to_utf32@@V_0.5.0 + 56: 000000000001a530 8 FUNC GLOBAL DEFAULT 12 xkb_context_get_log_verbosity@@V_0.5.0 + 57: 000000000001a798 8 FUNC GLOBAL DEFAULT 12 xkb_context_set_user_data@@V_0.5.0 + 58: 000000000001daac 128 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_syms@@V_0.5.0 + 59: 000000000001e76c 8 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_consumed_mods@@V_0.5.0 + 60: 000000000001c474 204 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_get_syms_by_level@@V_0.5.0 + 61: 000000000001d528 16 FUNC GLOBAL DEFAULT 12 xkb_state_ref@@V_0.5.0 + 62: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS V_0.7.0 + 63: 000000000001c548 8 FUNC GLOBAL DEFAULT 12 xkb_keymap_max_keycode@@V_0.5.0 + 64: 000000000001c614 172 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_by_name@@V_0.6.0 + 65: 000000000001a454 8 FUNC GLOBAL DEFAULT 12 xkb_context_num_include_paths@@V_0.5.0 + 66: 0000000000006dd8 204 FUNC GLOBAL DEFAULT 12 xkb_compose_table_new_from_file@@V_0.5.0 + 67: 000000000001a430 36 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_reset_defaults@@V_0.5.0 + 68: 000000000001e670 100 FUNC GLOBAL DEFAULT 12 xkb_state_mod_mask_remove_consumed@@V_0.5.0 + 69: 000000000001e150 8 FUNC GLOBAL DEFAULT 12 xkb_state_mod_index_is_consumed@@V_0.5.0 + 70: 000000000001c24c 148 FUNC GLOBAL DEFAULT 12 xkb_keymap_layout_get_index@@V_0.5.0 + 71: 000000000001ddd8 72 FUNC GLOBAL DEFAULT 12 xkb_state_mod_name_is_active@@V_0.5.0 + 72: 000000000001b5a4 928 FUNC GLOBAL DEFAULT 12 xkb_keysym_from_name@@V_0.5.0 + 73: 000000000001c1dc 68 FUNC GLOBAL DEFAULT 12 xkb_keymap_mod_get_index@@V_0.5.0 + 74: 000000000001e454 424 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_utf8@@V_0.5.0 + 75: 000000000001c228 36 FUNC GLOBAL DEFAULT 12 xkb_keymap_layout_get_name@@V_0.5.0 + 76: 000000000001e5fc 116 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_utf32@@V_0.5.0 + 77: 000000000001a12c 396 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_append@@V_0.5.0 + 78: 000000000001e6d4 152 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_consumed_mods2@@V_0.7.0 + 79: 00000000000069c4 180 FUNC GLOBAL DEFAULT 12 xkb_compose_state_feed@@V_0.5.0 + 80: 000000000001c3e0 148 FUNC GLOBAL DEFAULT 12 xkb_keymap_led_get_index@@V_0.5.0 + 81: 000000000001d4e0 72 FUNC GLOBAL DEFAULT 12 xkb_state_new@@V_0.5.0 + 82: 0000000000006ad8 216 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_utf8@@V_0.5.0 + 83: 000000000001c1b0 44 FUNC GLOBAL DEFAULT 12 xkb_keymap_mod_get_name@@V_0.5.0 + 84: 000000000001db2c 56 FUNC GLOBAL DEFAULT 12 xkb_state_serialize_mods@@V_0.5.0 + 85: 000000000001d598 8 FUNC GLOBAL DEFAULT 12 xkb_state_get_keymap@@V_0.5.0 + 86: 000000000001a528 8 FUNC GLOBAL DEFAULT 12 xkb_context_set_log_level@@V_0.5.0 + 87: 000000000001cff8 136 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_level@@V_0.5.0 + 88: 000000000001e024 72 FUNC GLOBAL DEFAULT 12 xkb_state_led_index_is_active@@V_0.5.0 + 89: 0000000000006ea4 220 FUNC GLOBAL DEFAULT 12 xkb_compose_table_new_from_buffer@@V_0.5.0 + 90: 0000000000006d5c 124 FUNC GLOBAL DEFAULT 12 xkb_compose_table_unref@@V_0.5.0 + 91: 0000000000006a84 84 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_status@@V_0.5.0 + 92: 000000000001c2e0 60 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_layouts_for_key@@V_0.5.0 + 93: 0000000000006d4c 16 FUNC GLOBAL DEFAULT 12 xkb_compose_table_ref@@V_0.5.0 + 94: 0000000000006bb0 36 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_one_sym@@V_0.5.0 + 95: 000000000001c220 8 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_layouts@@V_0.5.0 + 96: 000000000001e1d8 140 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_one_sym@@V_0.5.0 + 97: 000000000001a504 28 FUNC GLOBAL DEFAULT 12 xkb_context_set_log_fn@@V_0.5.0 + 98: 000000000001bbb0 16 FUNC GLOBAL DEFAULT 12 xkb_keymap_ref@@V_0.5.0 + 99: 000000000001a45c 72 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_get@@V_0.5.0 + 100: 000000000001c020 268 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_file@@V_0.5.0 + 101: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS V_0.5.0 + 102: 000000000001a4b4 80 FUNC GLOBAL DEFAULT 12 xkb_context_unref@@V_0.5.0 + 103: 0000000000006960 16 FUNC GLOBAL DEFAULT 12 xkb_compose_state_ref@@V_0.5.0 + 104: 000000000001bbc0 472 FUNC GLOBAL DEFAULT 12 xkb_keymap_unref@@V_0.5.0 + 105: 000000000001d538 96 FUNC GLOBAL DEFAULT 12 xkb_state_unref@@V_0.5.0 + 106: 000000000001a4a4 16 FUNC GLOBAL DEFAULT 12 xkb_context_ref@@V_0.5.0 + 107: 000000000001d5a0 880 FUNC GLOBAL DEFAULT 12 xkb_state_update_key@@V_0.5.0 + 108: 000000000001dc40 92 FUNC GLOBAL DEFAULT 12 xkb_state_mod_index_is_active@@V_0.5.0 + 109: 000000000001c6c0 60 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_repeats@@V_0.5.0 + 110: 000000000001de20 332 FUNC GLOBAL DEFAULT 12 xkb_state_mod_names_are_active@@V_0.5.0 + 111: 000000000001dc9c 316 FUNC GLOBAL DEFAULT 12 xkb_state_mod_indices_are_active@@V_0.5.0 + 112: 000000000001c540 8 FUNC GLOBAL DEFAULT 12 xkb_keymap_min_keycode@@V_0.5.0 + 113: 000000000001c550 132 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_for_each@@V_0.5.0 + 114: 000000000001bd98 300 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_names@@V_0.5.0 + 115: 000000000001c5d4 64 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_get_name@@V_0.6.0 + 116: 00000000000069bc 8 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_compose_table@@V_0.5.0 + 117: 0000000000006970 76 FUNC GLOBAL DEFAULT 12 xkb_compose_state_unref@@V_0.5.0 + 118: 000000000001d910 412 FUNC GLOBAL DEFAULT 12 xkb_state_update_mask@@V_0.5.0 + 119: 000000000001c31c 140 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_levels_for_key@@V_0.5.0 + 120: 000000000001a538 8 FUNC GLOBAL DEFAULT 12 xkb_context_set_log_verbosity@@V_0.5.0 + 121: 000000000001dbc0 60 FUNC GLOBAL DEFAULT 12 xkb_state_serialize_layout@@V_0.5.0 + 122: 0000000000006f80 400 FUNC GLOBAL DEFAULT 12 xkb_compose_table_new_from_locale@@V_0.5.0 + 123: 000000000001a520 8 FUNC GLOBAL DEFAULT 12 xkb_context_get_log_level@@V_0.5.0 + 124: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS V_0.6.0 + 125: 000000000001a2b8 204 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_append_default@@V_0.5.0 + 126: 0000000000006900 96 FUNC GLOBAL DEFAULT 12 xkb_compose_state_new@@V_0.5.0 + 127: 000000000001c1a8 8 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_mods@@V_0.5.0 + 128: 000000000001a540 588 FUNC GLOBAL DEFAULT 12 xkb_context_new@@V_0.5.0 + 129: 000000000001bb70 64 FUNC GLOBAL DEFAULT 12 xkb_keysym_to_utf8@@V_0.5.0 + 130: 000000000001e0ac 164 FUNC GLOBAL DEFAULT 12 xkb_state_mod_index_is_consumed2@@V_0.7.0 + 131: 000000000001bec4 276 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_buffer@@V_0.5.0 + 132: 000000000001a384 172 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_clear@@V_0.5.0 + 133: 000000000001e06c 64 FUNC GLOBAL DEFAULT 12 xkb_state_led_name_is_active@@V_0.5.0 + 134: 000000000001df6c 112 FUNC GLOBAL DEFAULT 12 xkb_state_layout_index_is_active@@V_0.5.0 + 135: 0000000000006a78 12 FUNC GLOBAL DEFAULT 12 xkb_compose_state_reset@@V_0.5.0 + 136: 000000000001dfdc 72 FUNC GLOBAL DEFAULT 12 xkb_state_layout_name_is_active@@V_0.5.0 + 137: 000000000001bfd8 72 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_string@@V_0.5.0 + 138: 000000000001c12c 124 FUNC GLOBAL DEFAULT 12 xkb_keymap_get_as_string@@V_0.5.0 + 139: 000000000001c3b0 48 FUNC GLOBAL DEFAULT 12 xkb_keymap_led_get_name@@V_0.5.0 + 140: 000000000001c3a8 8 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_leds@@V_0.5.0 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libz.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libz.so.1.txt new file mode 100644 index 000000000000..774dc04cffe3 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/aarch64/libz.so.1.txt @@ -0,0 +1,119 @@ +Library: /lib64/libz.so.1 +Package: zlib-1.2.7-21.el7_9.aarch64 + + +Symbol table '.dynsym' contains 113 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001eb8 0 SECTION LOCAL DEFAULT 10 + 2: 000000000002fb18 0 SECTION LOCAL DEFAULT 19 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.17 (13) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.17 (13) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.17 (13) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (13) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.17 (13) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.17 (13) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.17 (13) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.17 (13) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.17 (13) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek64@GLIBC_2.17 (13) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.17 (13) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (13) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.17 (13) + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 18: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (14) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.17 (13) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.17 (13) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.17 (13) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.17 (13) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.17 (13) + 24: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 25: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.17 (13) + 27: 00000000000072e4 124 FUNC GLOBAL DEFAULT 12 inflateResetKeep@@ZLIB_1.2.5.2 + 28: 000000000000ba0c 72 FUNC GLOBAL DEFAULT 12 gzbuffer@@ZLIB_1.2.3.5 + 29: 000000000000267c 16 FUNC GLOBAL DEFAULT 12 adler32_combine@@ZLIB_1.2.2 + 30: 0000000000002b70 4 FUNC GLOBAL DEFAULT 12 crc32_combine64@@ZLIB_1.2.3.3 + 31: 000000000000bf84 140 FUNC GLOBAL DEFAULT 12 gzdopen + 32: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.3.3 + 33: 000000000000945c 56 FUNC GLOBAL DEFAULT 12 inflateSyncPoint + 34: 000000000000ba9c 136 FUNC GLOBAL DEFAULT 12 gzoffset64@@ZLIB_1.2.3.5 + 35: 000000000000cbc0 4 FUNC GLOBAL DEFAULT 12 gzgetc_@@ZLIB_1.2.5.2 + 36: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.3.4 + 37: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.3.5 + 38: 0000000000003f6c 200 FUNC GLOBAL DEFAULT 12 deflateResetKeep@@ZLIB_1.2.5.2 + 39: 000000000000bb24 4 FUNC GLOBAL DEFAULT 12 gzoffset@@ZLIB_1.2.3.5 + 40: 000000000000b9e8 36 FUNC GLOBAL DEFAULT 12 gzclose + 41: 0000000000006ba0 72 FUNC GLOBAL DEFAULT 12 inflateBackEnd@@ZLIB_1.2.0 + 42: 00000000000095fc 36 FUNC GLOBAL DEFAULT 12 inflateUndermine@@ZLIB_1.2.3.3 + 43: 000000000000c010 80 FUNC GLOBAL DEFAULT 12 gzclearerr@@ZLIB_1.2.0.2 + 44: 000000000000742c 268 FUNC GLOBAL DEFAULT 12 inflateInit2_ + 45: 000000000000268c 16 FUNC GLOBAL DEFAULT 12 adler32_combine64@@ZLIB_1.2.3.3 + 46: 00000000000091b8 220 FUNC GLOBAL DEFAULT 12 inflateSetDictionary + 47: 000000000000d530 248 FUNC GLOBAL DEFAULT 12 gzputc + 48: 0000000000007384 168 FUNC GLOBAL DEFAULT 12 inflateReset2@@ZLIB_1.2.3.4 + 49: 000000000000b8e8 256 FUNC GLOBAL DEFAULT 12 uncompress + 50: 000000000000cea0 88 FUNC GLOBAL DEFAULT 12 gzdirect@@ZLIB_1.2.2.3 + 51: 000000000000d674 456 FUNC GLOBAL DEFAULT 12 gzprintf + 52: 0000000000002378 772 FUNC GLOBAL DEFAULT 12 adler32 + 53: 0000000000002b6c 4 FUNC GLOBAL DEFAULT 12 crc32_combine@@ZLIB_1.2.2 + 54: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.0.2 + 55: 000000000000414c 180 FUNC GLOBAL DEFAULT 12 deflatePrime@@ZLIB_1.2.0.8 + 56: 0000000000004344 4428 FUNC GLOBAL DEFAULT 12 deflate + 57: 000000000000422c 280 FUNC GLOBAL DEFAULT 12 deflateBound@@ZLIB_1.2.0 + 58: 000000000000bf6c 12 FUNC GLOBAL DEFAULT 12 gzopen + 59: 0000000000005674 680 FUNC GLOBAL DEFAULT 12 deflateInit2_ + 60: 000000000000b8d4 20 FUNC GLOBAL DEFAULT 12 compressBound@@ZLIB_1.2.0 + 61: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.0.8 + 62: 0000000000009294 44 FUNC GLOBAL DEFAULT 12 inflateGetHeader@@ZLIB_1.2.2 + 63: 000000000000d628 76 FUNC GLOBAL DEFAULT 12 gzputs + 64: 000000000000b7bc 8 FUNC GLOBAL DEFAULT 12 zlibCompileFlags@@ZLIB_1.2.0.2 + 65: 0000000000009620 92 FUNC GLOBAL DEFAULT 12 inflateMark@@ZLIB_1.2.3.4 + 66: 0000000000005ad4 260 FUNC GLOBAL DEFAULT 12 inflateBackInit_@@ZLIB_1.2.0 + 67: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.0 + 68: 000000000000bf78 12 FUNC GLOBAL DEFAULT 12 gzopen64@@ZLIB_1.2.3.3 + 69: 0000000000009494 360 FUNC GLOBAL DEFAULT 12 inflateCopy@@ZLIB_1.2.0 + 70: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.2 + 71: 000000000000c904 520 FUNC GLOBAL DEFAULT 12 gzread + 72: 0000000000004200 44 FUNC GLOBAL DEFAULT 12 deflateTune@@ZLIB_1.2.2.3 + 73: 00000000000075b8 7068 FUNC GLOBAL DEFAULT 12 inflate + 74: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.5.1 + 75: 000000000000b7ec 224 FUNC GLOBAL DEFAULT 12 compress2 + 76: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.5.2 + 77: 0000000000005490 248 FUNC GLOBAL DEFAULT 12 deflateParams + 78: 0000000000007360 36 FUNC GLOBAL DEFAULT 12 inflateReset + 79: 000000000000b8cc 8 FUNC GLOBAL DEFAULT 12 compress + 80: 000000000000d8c4 256 FUNC GLOBAL DEFAULT 12 gzsetparams + 81: 000000000000d338 504 FUNC GLOBAL DEFAULT 12 gzwrite + 82: 000000000000d83c 136 FUNC GLOBAL DEFAULT 12 gzflush + 83: 0000000000007538 20 FUNC GLOBAL DEFAULT 12 inflateInit_ + 84: 000000000000b7b0 12 FUNC GLOBAL DEFAULT 12 zlibVersion + 85: 000000000000cbc4 352 FUNC GLOBAL DEFAULT 12 gzungetc@@ZLIB_1.2.0.2 + 86: 0000000000002838 820 FUNC GLOBAL DEFAULT 12 crc32 + 87: 000000000000c10c 432 FUNC GLOBAL DEFAULT 12 gzseek64@@ZLIB_1.2.3.3 + 88: 0000000000003d90 476 FUNC GLOBAL DEFAULT 12 deflateSetDictionary + 89: 00000000000092c0 412 FUNC GLOBAL DEFAULT 12 inflateSync + 90: 000000000000bb28 56 FUNC GLOBAL DEFAULT 12 gzeof + 91: 0000000000009154 100 FUNC GLOBAL DEFAULT 12 inflateEnd + 92: 0000000000005588 236 FUNC GLOBAL DEFAULT 12 deflateEnd + 93: 000000000000cb0c 180 FUNC GLOBAL DEFAULT 12 gzgetc + 94: 0000000000004110 60 FUNC GLOBAL DEFAULT 12 deflatePending@@ZLIB_1.2.5.1 + 95: 00000000000040e4 44 FUNC GLOBAL DEFAULT 12 deflateSetHeader@@ZLIB_1.2.2 + 96: 000000000000cef8 180 FUNC GLOBAL DEFAULT 12 gzclose_r@@ZLIB_1.2.3.5 + 97: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.2.3 + 98: 000000000000ba98 4 FUNC GLOBAL DEFAULT 12 gztell + 99: 000000000000c060 172 FUNC GLOBAL DEFAULT 12 gzrewind + 100: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.2.4 + 101: 000000000000b7c4 24 FUNC GLOBAL DEFAULT 12 zError + 102: 000000000000ba54 68 FUNC GLOBAL DEFAULT 12 gztell64@@ZLIB_1.2.3.3 + 103: 000000000000d9c4 232 FUNC GLOBAL DEFAULT 12 gzclose_w@@ZLIB_1.2.3.5 + 104: 0000000000004034 176 FUNC GLOBAL DEFAULT 12 deflateReset + 105: 0000000000005938 412 FUNC GLOBAL DEFAULT 12 deflateCopy + 106: 0000000000005bd8 4040 FUNC GLOBAL DEFAULT 12 inflateBack@@ZLIB_1.2.0 + 107: 000000000000754c 108 FUNC GLOBAL DEFAULT 12 inflatePrime@@ZLIB_1.2.2.4 + 108: 000000000000c2bc 4 FUNC GLOBAL DEFAULT 12 gzseek + 109: 000000000000591c 28 FUNC GLOBAL DEFAULT 12 deflateInit_ + 110: 000000000000bb60 76 FUNC GLOBAL DEFAULT 12 gzerror + 111: 000000000000282c 12 FUNC GLOBAL DEFAULT 12 get_crc_table + 112: 000000000000cd24 380 FUNC GLOBAL DEFAULT 12 gzgets diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/dump_x86_64.sh b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/dump_x86_64.sh new file mode 100644 index 000000000000..d4a4cb360643 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/dump_x86_64.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e + +mkdir -p dump_output && cd dump_output && rm -rf * +libs=( + /lib64/ld-linux-x86-64.so.2 + /lib64/libasound.so.2 + /lib64/libatk-1.0.so.0 + /lib64/libatk-bridge-2.0.so.0 + /lib64/libatspi.so.0 + /lib64/libc.so.6 + /lib64/libcairo.so.2 + /lib64/libcups.so.2 + /lib64/libdbus-1.so.3 + /lib64/libdl.so.2 + /lib64/libdrm.so.2 + /lib64/libexpat.so.1 + /lib64/libfreetype.so.6 + /lib64/libgbm.so.1 + /lib64/libgcc_s.so.1 + /lib64/libgio-2.0.so.0 + /lib64/libglib-2.0.so.0 + /lib64/libgobject-2.0.so.0 + /lib64/libm.so.6 + /lib64/libnspr4.so + /lib64/libnss3.so + /lib64/libnssutil3.so + /lib64/libpango-1.0.so.0 + /lib64/libpthread.so.0 + /lib64/librt.so.1 + /lib64/libsmime3.so + /lib64/libX11.so + /lib64/libxcb.so.1 + /lib64/libXcomposite.so.1 + /lib64/libXcursor.so.1 + /lib64/libXdamage.so.1 + /lib64/libXext.so.6 + /lib64/libXfixes.so.3 + /lib64/libXi.so.6 + /lib64/libxkbcommon.so.0 + /lib64/libXrandr.so.2 + /lib64/libXrender.so.1 + /lib64/libXtst.so.6 + /lib64/libXxf86vm.so.1 + /lib64/libz.so.1 + /lib64/libwayland-cursor.so.0 +) + +for lib_path in "${libs[@]}" +do + if ! test -f "$lib_path"; then + echo "Failed: $lib_path not found" + exit 1 + fi + + lib_name=$(basename -- "$lib_path") + lib_package=$(rpm -q --whatprovides "$lib_path") + echo "Processing $lib_name from $lib_package..." + echo "Library: $lib_path" >> "$lib_name.txt" + echo "Package: $lib_package" >> "$lib_name.txt" + echo "" >> "$lib_name.txt" + + readelf --wide --dyn-syms "$lib_path" >> "$lib_name.txt" +done diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/ld-linux-x86-64.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/ld-linux-x86-64.so.2.txt new file mode 100644 index 000000000000..ce43005442f5 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/ld-linux-x86-64.so.2.txt @@ -0,0 +1,34 @@ +Library: /lib64/ld-linux-x86-64.so.2 +Package: glibc-2.17-326.el7_9.x86_64 + + +Symbol table '.dynsym' contains 28 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000017a00 8 FUNC GLOBAL DEFAULT 11 __get_cpu_features@@GLIBC_PRIVATE + 2: 00000000000123f0 21 FUNC GLOBAL DEFAULT 11 _dl_get_tls_static_info@@GLIBC_PRIVATE + 3: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 4: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3 + 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.4 + 6: 00000000000186d0 42 FUNC WEAK DEFAULT 11 free@@GLIBC_2.2.5 + 7: 0000000000018700 92 FUNC WEAK DEFAULT 11 realloc@@GLIBC_2.2.5 + 8: 0000000000222f80 4 OBJECT WEAK DEFAULT 20 _dl_starting_up@@GLIBC_PRIVATE + 9: 0000000000012760 335 FUNC GLOBAL DEFAULT 11 _dl_allocate_tls@@GLIBC_PRIVATE + 10: 0000000000223120 40 OBJECT GLOBAL DEFAULT 20 _r_debug@@GLIBC_2.2.5 + 11: 0000000000221df0 8 OBJECT GLOBAL DEFAULT 16 __libc_stack_end@@GLIBC_2.2.5 + 12: 0000000000018570 268 FUNC WEAK DEFAULT 11 __libc_memalign@@GLIBC_2.2.5 + 13: 00000000000128b0 140 FUNC GLOBAL DEFAULT 11 _dl_deallocate_tls@@GLIBC_PRIVATE + 14: 0000000000018690 49 FUNC WEAK DEFAULT 11 calloc@@GLIBC_2.2.5 + 15: 0000000000221d90 8 OBJECT GLOBAL DEFAULT 16 _dl_argv@@GLIBC_PRIVATE + 16: 0000000000011c40 583 FUNC GLOBAL DEFAULT 11 _dl_mcount@@GLIBC_2.2.5 + 17: 0000000000012390 87 FUNC GLOBAL DEFAULT 11 _dl_tls_setup@@GLIBC_PRIVATE + 18: 0000000000010270 2 FUNC GLOBAL DEFAULT 11 _dl_debug_state@@GLIBC_PRIVATE + 19: 0000000000222000 3960 OBJECT GLOBAL DEFAULT 19 _rtld_global@@GLIBC_PRIVATE + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.5 + 21: 00000000000179c0 61 FUNC GLOBAL DEFAULT 11 __tls_get_addr@@GLIBC_2.3 + 22: 0000000000012ff0 117 FUNC GLOBAL DEFAULT 11 _dl_make_stack_executable@@GLIBC_PRIVATE + 23: 0000000000018680 13 FUNC WEAK DEFAULT 11 malloc@@GLIBC_2.2.5 + 24: 0000000000012550 517 FUNC GLOBAL DEFAULT 11 _dl_allocate_tls_init@@GLIBC_PRIVATE + 25: 0000000000221c00 384 OBJECT GLOBAL DEFAULT 16 _rtld_global_ro@@GLIBC_PRIVATE + 26: 0000000000221df8 4 OBJECT GLOBAL DEFAULT 16 __libc_enable_secure@@GLIBC_PRIVATE + 27: 0000000000008f00 1620 FUNC GLOBAL DEFAULT 11 _dl_rtld_di_serinfo@@GLIBC_PRIVATE diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libX11.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libX11.so.txt new file mode 100644 index 000000000000..935793244ab7 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libX11.so.txt @@ -0,0 +1,1382 @@ +Library: /lib64/libX11.so +Package: libX11-devel-1.6.7-4.el7_9.x86_64 + + +Symbol table '.dynsym' contains 1376 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcat_chk@GLIBC_2.3.4 (3) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.2.5 (4) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (4) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (3) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (4) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mblen@GLIBC_2.2.5 (4) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (3) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (4) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (4) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (4) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (4) + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_file_descriptor + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (4) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresgid@GLIBC_2.2.5 (4) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.3.2 (5) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.2.5 (4) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ferror@GLIBC_2.2.5 (4) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (4) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (4) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.2.5 (4) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbstowcs@GLIBC_2.2.5 (4) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (4) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.3.2 (5) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.2.5 (4) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (4) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connect + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.2.5 (4) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.2.5 (4) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_get_mb_cur_max@GLIBC_2.2.5 (4) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (4) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.2.5 (4) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (6) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (4) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (4) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_generate_id + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (4) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewind@GLIBC_2.2.5 (4) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.2.5 (4) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (4) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fdelt_chk@GLIBC_2.15 (7) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.2.5 (4) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (4) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.2.5 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (4) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (4) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connect_to_display_with_auth_info + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (4) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_writev + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (4) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.2.5 (4) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.2.5 (4) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (4) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (4) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (4) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (4) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (4) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (5) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.2.5 (4) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (4) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (4) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_reply64 + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (3) + 68: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (4) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbtowc@GLIBC_2.2.5 (4) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (8) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_pton@GLIBC_2.2.5 (4) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.2.5 (4) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresuid@GLIBC_2.2.5 (4) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.2.5 (4) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.2.5 (4) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.2.5 (4) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (4) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.3.2 (5) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.2.5 (9) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (4) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_queued_event + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (4) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (4) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.2.5 (4) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.2.5 (4) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.2.5 (4) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (4) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_wait_for_reply64 + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (4) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_event + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.2.5 (4) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_maximum_request_length + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncpy_chk@GLIBC_2.3.4 (3) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (4) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (3) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopen@GLIBC_2.2.5 (4) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam_r@GLIBC_2.2.5 (4) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (4) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.2.5 (4) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_take_socket + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readv@GLIBC_2.2.5 (4) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (4) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.2.5 (4) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_wait_for_event + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wctomb@GLIBC_2.2.5 (4) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_disconnect + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connection_has_error + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.3.2 (5) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (4) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.2.5 (4) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.2.5 (4) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (4) + 114: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_setup + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.2.5 (4) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (4) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.2.5 (4) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (4) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (4) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (4) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (3) + 123: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.2.5 (4) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (4) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.2.5 (9) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (4) + 128: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (4) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (4) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (4) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (2) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.2.5 (4) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_parse_display + 135: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (4) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (3) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (4) + 138: 000000000005f310 138 FUNC GLOBAL DEFAULT 11 _XCloseLC + 139: 0000000000031640 4 FUNC GLOBAL DEFAULT 11 XProtocolVersion + 140: 0000000000092200 67 FUNC GLOBAL DEFAULT 11 _XkbGetConverters + 141: 000000000007e490 880 FUNC GLOBAL DEFAULT 11 _XomGetFontDataFromFontSet + 142: 0000000000058710 35 FUNC GLOBAL DEFAULT 11 _Xwcslen + 143: 000000000009a980 2501 FUNC GLOBAL DEFAULT 11 _XkbReadGetGeometryReply + 144: 0000000000020f60 657 FUNC GLOBAL DEFAULT 11 _XUpdateGCCache + 145: 0000000000083c20 420 FUNC GLOBAL DEFAULT 11 XcmsRGBiToRGB + 146: 00000000000269c0 534 FUNC GLOBAL DEFAULT 11 XGeometry + 147: 0000000000020520 138 FUNC GLOBAL DEFAULT 11 XConvertSelection + 148: 0000000000041e90 171 FUNC GLOBAL DEFAULT 11 XSetAuthorization + 149: 0000000000028e70 186 FUNC GLOBAL DEFAULT 11 XGetPointerControl + 150: 000000000006eed0 27 FUNC GLOBAL DEFAULT 11 _XimDecodeLocalIMAttr + 151: 0000000000031a30 94 FUNC GLOBAL DEFAULT 11 XMapSubwindows + 152: 0000000000073f30 12 FUNC GLOBAL DEFAULT 11 _XimWrite + 153: 000000000003d140 10 FUNC GLOBAL DEFAULT 11 XSetZoomHints + 154: 0000000000089c90 27 FUNC GLOBAL DEFAULT 11 XcmsQueryColor + 155: 000000000004fac0 313 FUNC GLOBAL DEFAULT 11 XGetICValues + 156: 00000000000200d0 526 FUNC GLOBAL DEFAULT 11 XSaveContext + 157: 0000000000023c70 320 FUNC GLOBAL DEFAULT 11 XFillArc + 158: 00000000000725a0 528 FUNC GLOBAL DEFAULT 11 _XimThaiOpenIM + 159: 0000000000053870 179 FUNC GLOBAL DEFAULT 11 _XlcDestroyLocaleDataBase + 160: 000000000009a830 330 FUNC GLOBAL DEFAULT 11 XkbFindOverlayForKey + 161: 000000000003f9a0 514 FUNC GLOBAL DEFAULT 11 XTextWidth16 + 162: 0000000000031840 4 FUNC GLOBAL DEFAULT 11 XPlanesOfScreen + 163: 00000000000658e0 2 FUNC GLOBAL DEFAULT 11 _XimProcError + 164: 00000000000866d0 839 FUNC GLOBAL DEFAULT 11 _XcmsCIELabQueryMaxLCRGB + 165: 0000000000091f10 20 FUNC GLOBAL DEFAULT 11 XkbNoteControlsChanges + 166: 00000000000316c0 4 FUNC GLOBAL DEFAULT 11 XBitmapUnit + 167: 0000000000031c80 8 FUNC GLOBAL DEFAULT 11 XExtendedMaxRequestSize + 168: 000000000003be40 11 FUNC GLOBAL DEFAULT 11 XEmptyRegion + 169: 00000000000a05f0 726 FUNC GLOBAL DEFAULT 11 XkbAllocServerMap + 170: 0000000000058840 15 FUNC GLOBAL DEFAULT 11 _Xwcstombs + 171: 000000000007d380 39 FUNC GLOBAL DEFAULT 11 _Xutf8GenericDrawString + 172: 00000000000a48f0 638 FUNC GLOBAL DEFAULT 11 XkbAddDeviceLedInfo + 173: 000000000033d3c0 144 OBJECT GLOBAL DEFAULT 23 _XcmsRegColorSpaces + 174: 000000000008a5d0 860 FUNC GLOBAL DEFAULT 11 XcmsAllocNamedColor + 175: 0000000000029eb0 95 FUNC GLOBAL DEFAULT 11 XGetWindowAttributes + 176: 0000000000093430 240 FUNC GLOBAL DEFAULT 11 XkbGetKeySyms + 177: 0000000000031dc0 231 FUNC GLOBAL DEFAULT 11 XSetModifierMapping + 178: 00000000000a1260 650 FUNC GLOBAL DEFAULT 11 XkbAddKeyType + 179: 000000000005fd40 9 FUNC GLOBAL DEFAULT 11 XmbTextEscapement + 180: 000000000003d060 217 FUNC GLOBAL DEFAULT 11 XSetWMHints + 181: 000000000007c910 20 FUNC GLOBAL DEFAULT 11 _XInitOM + 182: 000000000007ee80 497 FUNC GLOBAL DEFAULT 11 XcmsCreateCCC + 183: 000000000033a7c0 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketINET6Funcs + 184: 0000000000050170 664 FUNC GLOBAL DEFAULT 11 KeySymToUcs4 + 185: 0000000000050080 12 FUNC GLOBAL DEFAULT 11 XLocaleOfIM + 186: 0000000000021730 278 FUNC GLOBAL DEFAULT 11 _XTryShapeBitmapCursor + 187: 000000000002a020 265 FUNC GLOBAL DEFAULT 11 XGetWMProtocols + 188: 0000000000099860 49 FUNC GLOBAL DEFAULT 11 XkbGetNamedIndicator + 189: 000000000004add0 708 FUNC GLOBAL DEFAULT 11 XrmQGetSearchResource + 190: 000000000003bc60 221 FUNC GLOBAL DEFAULT 11 XShrinkRegion + 191: 000000000003cc60 87 FUNC GLOBAL DEFAULT 11 XSetForeground + 192: 0000000000043800 138 FUNC GLOBAL DEFAULT 11 _XAsyncErrorHandler + 193: 0000000000038a00 92 FUNC GLOBAL DEFAULT 11 XrmUniqueQuark + 194: 000000000002d8a0 83 FUNC GLOBAL DEFAULT 11 _XFreeAtomTable + 195: 000000000002cc90 283 FUNC GLOBAL DEFAULT 11 _XSetImage + 196: 000000000007cae0 39 FUNC GLOBAL DEFAULT 11 _Xutf8GenericDrawImageString + 197: 000000000002a1e0 212 FUNC GLOBAL DEFAULT 11 XGrabKeyboard + 198: 000000000006f2b0 594 FUNC GLOBAL DEFAULT 11 _XimGetCurrentICValues + 199: 000000000033d7c0 8 OBJECT GLOBAL DEFAULT 24 _XFreeMutex_fn + 200: 0000000000073760 68 FUNC GLOBAL DEFAULT 11 _XimTransRead + 201: 000000000003b880 28 FUNC GLOBAL DEFAULT 11 XDestroyRegion + 202: 00000000000404f0 34 FUNC GLOBAL DEFAULT 11 XFreeStringList + 203: 000000000001ec30 147 FUNC GLOBAL DEFAULT 11 XChangeGC + 204: 0000000000089d70 502 FUNC GLOBAL DEFAULT 11 _XcmsSetGetColor + 205: 0000000000074030 9 FUNC GLOBAL DEFAULT 11 _XimFlush + 206: 000000000003d980 239 FUNC GLOBAL DEFAULT 11 XSetPointerMapping + 207: 000000000002f2d0 88 FUNC GLOBAL DEFAULT 11 _XLookupKeysym + 208: 0000000000089f70 408 FUNC GLOBAL DEFAULT 11 _XcmsSetGetColors + 209: 0000000000078e30 156 FUNC GLOBAL DEFAULT 11 _XlcUtf8Loader + 210: 00000000000540b0 306 FUNC GLOBAL DEFAULT 11 xlocaledir + 211: 0000000000051430 413 FUNC GLOBAL DEFAULT 11 _XlcParseCharSet + 212: 00000000000365a0 15 FUNC GLOBAL DEFAULT 11 XAllocSizeHints + 213: 000000000004dcf0 10 FUNC GLOBAL DEFAULT 11 _XimXTransIsLocal + 214: 00000000000523c0 8 FUNC GLOBAL DEFAULT 11 _XlcCloseConverter + 215: 0000000000092250 52 FUNC GLOBAL DEFAULT 11 _XkbGetCharset + 216: 000000000002ca00 480 FUNC GLOBAL DEFAULT 11 XCreateImage + 217: 0000000000096480 59 FUNC GLOBAL DEFAULT 11 _XkbGetReadBufferPtr + 218: 0000000000044ab0 121 FUNC GLOBAL DEFAULT 11 _XDeq + 219: 0000000000022540 272 FUNC GLOBAL DEFAULT 11 XDrawPoint + 220: 0000000000086ee0 556 FUNC GLOBAL DEFAULT 11 XcmsCIELuvToCIEuvY + 221: 000000000008fdc0 466 FUNC GLOBAL DEFAULT 11 XkbKeysymToModifiers + 222: 0000000000099e50 115 FUNC GLOBAL DEFAULT 11 XkbForceBell + 223: 000000000006ea90 78 FUNC GLOBAL DEFAULT 11 _XimEncodeLocalICAttr + 224: 0000000000065e40 106 FUNC GLOBAL DEFAULT 11 _XimErrorCallback + 225: 00000000000441f0 90 FUNC GLOBAL DEFAULT 11 _XRead32 + 226: 0000000000065650 157 FUNC GLOBAL DEFAULT 11 _XimProcSyncReply + 227: 00000000000220b0 420 FUNC GLOBAL DEFAULT 11 XDrawArcs + 228: 0000000000066430 469 FUNC GLOBAL DEFAULT 11 _Ximctstowcs + 229: 00000000000403a0 323 FUNC GLOBAL DEFAULT 11 XTextPropertyToStringList + 230: 000000000001eae0 117 FUNC GLOBAL DEFAULT 11 XChangeActivePointerGrab + 231: 0000000000041470 134 FUNC GLOBAL DEFAULT 11 XWithdrawWindow + 232: 00000000000626b0 1282 FUNC GLOBAL DEFAULT 11 _XimProtoCreateIC + 233: 0000000000023220 450 FUNC GLOBAL DEFAULT 11 XGetErrorText + 234: 0000000000045ac0 200 FUNC GLOBAL DEFAULT 11 _XGetRequest + 235: 0000000000045280 55 FUNC GLOBAL DEFAULT 11 _XDefaultError + 236: 00000000000317e0 5 FUNC GLOBAL DEFAULT 11 XDefaultGCOfScreen + 237: 000000000008ffa0 236 FUNC GLOBAL DEFAULT 11 XLookupKeysym + 238: 0000000000030150 359 FUNC GLOBAL DEFAULT 11 XListInstalledColormaps + 239: 000000000004fe20 22 FUNC GLOBAL DEFAULT 11 XwcLookupString + 240: 0000000000034b00 2805 FUNC GLOBAL DEFAULT 11 XPolygonRegion + 241: 0000000000089cb0 44 FUNC GLOBAL DEFAULT 11 XcmsQueryColors + 242: 00000000000317a0 5 FUNC GLOBAL DEFAULT 11 XBlackPixelOfScreen + 243: 0000000000089670 286 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMaxLC + 244: 000000000011bef2 7 OBJECT GLOBAL DEFAULT 13 _XcmsTekHVC_prefix + 245: 0000000000058f90 34 FUNC GLOBAL DEFAULT 11 _XwcTextListToTextProperty + 246: 00000000000a0a50 95 FUNC GLOBAL DEFAULT 11 XkbCopyKeyTypes + 247: 0000000000062e90 22 FUNC GLOBAL DEFAULT 11 _XimCheckDataSize + 248: 00000000000a2110 366 FUNC GLOBAL DEFAULT 11 XkbFreeClientMap + 249: 0000000000073f20 9 FUNC GLOBAL DEFAULT 11 _XimShutdown + 250: 0000000000094340 17 FUNC GLOBAL DEFAULT 11 XkbGetKeyboard + 251: 00000000000a2a60 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomRows + 252: 000000000009d740 603 FUNC GLOBAL DEFAULT 11 XkbSetDeviceButtonActions + 253: 0000000000020a50 292 FUNC GLOBAL DEFAULT 11 XCreateBitmapFromData + 254: 0000000000091cf0 537 FUNC GLOBAL DEFAULT 11 XkbSetControls + 255: 000000000009b490 309 FUNC GLOBAL DEFAULT 11 XkbGetNamedGeometry + 256: 000000000008c1d0 219 FUNC GLOBAL DEFAULT 11 _XcmsInitScrnInfo + 257: 0000000000057280 44 FUNC GLOBAL DEFAULT 11 _XlcDeInitLoader + 258: 00000000000a2840 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOutlines + 259: 000000000008f9d0 646 FUNC GLOBAL DEFAULT 11 XKeycodeToKeysym + 260: 0000000000029900 315 FUNC GLOBAL DEFAULT 11 XGetStandardColormap + 261: 0000000000040e80 351 FUNC GLOBAL DEFAULT 11 XMatchVisualInfo + 262: 0000000000065580 68 FUNC GLOBAL DEFAULT 11 _XimICOfXICID + 263: 00000000000704e0 518 FUNC GLOBAL DEFAULT 11 _XimDecodeICATTRIBUTE + 264: 00000000000790d0 199 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultTextEscapement + 265: 0000000000044b30 3 FUNC GLOBAL DEFAULT 11 _XUnknownWireEvent + 266: 0000000000058740 253 FUNC GLOBAL DEFAULT 11 _Xlcwcstombs + 267: 0000000000093520 240 FUNC GLOBAL DEFAULT 11 XkbGetKeyBehaviors + 268: 000000000008a5b0 27 FUNC GLOBAL DEFAULT 11 XcmsAllocColor + 269: 00000000000706f0 523 FUNC GLOBAL DEFAULT 11 _XimEncodeIMATTRIBUTE + 270: 0000000000031880 4 FUNC GLOBAL DEFAULT 11 XDoesSaveUnders + 271: 000000000004a960 224 FUNC GLOBAL DEFAULT 11 XrmCombineFileDatabase + 272: 00000000000a4740 426 FUNC GLOBAL DEFAULT 11 XkbFreeKeyboard + 273: 0000000000034820 129 FUNC GLOBAL DEFAULT 11 XListPixmapFormats + 274: 00000000000438e0 240 FUNC GLOBAL DEFAULT 11 _XGetAsyncReply + 275: 000000000033d6a0 0 NOTYPE GLOBAL DEFAULT 23 _edata + 276: 00000000000820f0 510 FUNC GLOBAL DEFAULT 11 _XcmsTekHVCQueryMaxVCRGB + 277: 000000000008c6d0 285 FUNC GLOBAL DEFAULT 11 _XcmsCubeRoot + 278: 0000000000038f90 250 FUNC GLOBAL DEFAULT 11 XQueryBestCursor + 279: 0000000000031520 19 FUNC GLOBAL DEFAULT 11 XWhitePixel + 280: 00000000000234f0 1464 FUNC GLOBAL DEFAULT 11 _XEventToWire + 281: 0000000000026900 96 FUNC GLOBAL DEFAULT 11 XSetGraphicsExposures + 282: 00000000000268a0 90 FUNC GLOBAL DEFAULT 11 XSetFillStyle + 283: 000000000008c7f0 197 FUNC GLOBAL DEFAULT 11 _XcmsSquareRoot + 284: 000000000005f070 80 FUNC GLOBAL DEFAULT 11 _XlcRemoveLoader + 285: 0000000000026180 73 FUNC GLOBAL DEFAULT 11 _XFreeExtData + 286: 000000000009b800 2221 FUNC GLOBAL DEFAULT 11 XkbSetGeometry + 287: 0000000000057870 34 FUNC GLOBAL DEFAULT 11 _XwcFreeStringList + 288: 000000000001b5f8 0 FUNC GLOBAL DEFAULT 9 _init + 289: 000000000001fe60 122 FUNC GLOBAL DEFAULT 11 XClearWindow + 290: 0000000000036780 70 FUNC GLOBAL DEFAULT 11 XPutBackEvent + 291: 0000000000080650 812 FUNC GLOBAL DEFAULT 11 XcmsTekHVCToCIEuvY + 292: 0000000000031820 4 FUNC GLOBAL DEFAULT 11 XWidthMMOfScreen + 293: 000000000007eb30 336 FUNC GLOBAL DEFAULT 11 XcmsAddColorSpace + 294: 000000000002fb20 687 FUNC GLOBAL DEFAULT 11 XKeysymToString + 295: 00000000000446a0 346 FUNC GLOBAL DEFAULT 11 XAddConnectionWatch + 296: 0000000000021ff0 192 FUNC GLOBAL DEFAULT 11 XDrawArc + 297: 000000000001ea60 94 FUNC GLOBAL DEFAULT 11 XSetAccessControl + 298: 000000000006e250 23 FUNC GLOBAL DEFAULT 11 _XimSetICResourceList + 299: 0000000000096000 441 FUNC GLOBAL DEFAULT 11 XkbNoteNameChanges + 300: 00000000000a28b0 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomShapes + 301: 0000000000021e20 97 FUNC GLOBAL DEFAULT 11 XDeleteProperty + 302: 000000000002f0e0 245 FUNC GLOBAL DEFAULT 11 _XKeyInitialize + 303: 00000000000537d0 12 FUNC GLOBAL DEFAULT 11 _XlcGetResource + 304: 000000000033d498 8 OBJECT GLOBAL DEFAULT 23 _XcmsDIColorSpaces + 305: 0000000000022650 913 FUNC GLOBAL DEFAULT 11 XDrawPoints + 306: 00000000000290d0 305 FUNC GLOBAL DEFAULT 11 XGetKeyboardMapping + 307: 0000000000079db0 268 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultDrawImageString + 308: 0000000000055620 2 FUNC GLOBAL DEFAULT 11 _XlcDbg_printValue + 309: 0000000000031790 5 FUNC GLOBAL DEFAULT 11 XRootWindowOfScreen + 310: 000000000008e480 49 FUNC GLOBAL DEFAULT 11 XkbGetXlibControls + 311: 0000000000032170 126 FUNC GLOBAL DEFAULT 11 XNextEvent + 312: 0000000000089850 5 FUNC GLOBAL DEFAULT 11 XcmsScreenWhitePointOfCCC + 313: 00000000000a4670 38 FUNC GLOBAL DEFAULT 11 XkbFreeControls + 314: 000000000002a360 236 FUNC GLOBAL DEFAULT 11 XGrabPointer + 315: 0000000000073f10 9 FUNC GLOBAL DEFAULT 11 _XimConnect + 316: 00000000000589f0 15 FUNC GLOBAL DEFAULT 11 _Xmbstoutf8 + 317: 0000000000089d60 13 FUNC GLOBAL DEFAULT 11 XcmsSetWhiteAdjustProc + 318: 0000000000044b40 3 FUNC GLOBAL DEFAULT 11 _XUnknownWireEventCookie + 319: 00000000000a1820 1606 FUNC GLOBAL DEFAULT 11 XkbChangeKeycodeRange + 320: 00000000000454b0 223 FUNC GLOBAL DEFAULT 11 _XStoreEventCookie + 321: 000000000003c4a0 215 FUNC GLOBAL DEFAULT 11 XScreenResourceString + 322: 000000000033c860 64 OBJECT GLOBAL DEFAULT 23 _XimTransportRec + 323: 00000000000409f0 94 FUNC GLOBAL DEFAULT 11 XUnmapWindow + 324: 000000000009b350 314 FUNC GLOBAL DEFAULT 11 XkbGetGeometry + 325: 000000000011bf07 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIExyY_prefix + 326: 0000000000084260 604 FUNC GLOBAL DEFAULT 11 XcmsCIELabToCIEXYZ + 327: 000000000008e320 231 FUNC GLOBAL DEFAULT 11 XkbLatchGroup + 328: 000000000003bdc0 122 FUNC GLOBAL DEFAULT 11 XXorRegion + 329: 000000000004fd80 5 FUNC GLOBAL DEFAULT 11 XIMOfIC + 330: 000000000003c810 135 FUNC GLOBAL DEFAULT 11 XSetClipOrigin + 331: 0000000000038be0 229 FUNC GLOBAL DEFAULT 11 XQueryColor + 332: 000000000002cf80 31 FUNC GLOBAL DEFAULT 11 XFindOnExtensionList + 333: 000000000008e8a0 427 FUNC GLOBAL DEFAULT 11 XkbGetState + 334: 0000000000066790 362 FUNC GLOBAL DEFAULT 11 _XimProtoWcLookupString + 335: 000000000002b020 776 FUNC GLOBAL DEFAULT 11 XDrawImageString16 + 336: 00000000000a5120 288 OBJECT GLOBAL DEFAULT 13 _Xevent_to_mask + 337: 0000000000028110 10 FUNC GLOBAL DEFAULT 11 XGetNormalHints + 338: 0000000000084640 947 FUNC GLOBAL DEFAULT 11 XcmsCIELabClipL + 339: 000000000002d020 126 FUNC GLOBAL DEFAULT 11 XESetCopyGC + 340: 000000000002d680 126 FUNC GLOBAL DEFAULT 11 XESetErrorString + 341: 00000000000883f0 1892 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMaxC + 342: 000000000004a800 125 FUNC GLOBAL DEFAULT 11 XrmPutLineResource + 343: 0000000000029f10 265 FUNC GLOBAL DEFAULT 11 XGetWMColormapWindows + 344: 0000000000039900 250 FUNC GLOBAL DEFAULT 11 XQueryBestTile + 345: 0000000000079710 303 FUNC GLOBAL DEFAULT 11 _XwcDefaultTextPerCharExtents + 346: 000000000008c010 115 FUNC GLOBAL DEFAULT 11 _XcmsCopyPointerArray + 347: 00000000000302c0 331 FUNC GLOBAL DEFAULT 11 XListProperties + 348: 00000000000a27e0 36 FUNC GLOBAL DEFAULT 11 XkbFreeGeomPoints + 349: 000000000004fea0 275 FUNC GLOBAL DEFAULT 11 _XCopyToArg + 350: 0000000000042bb0 453 FUNC GLOBAL DEFAULT 11 _XSend + 351: 0000000000088b60 1982 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMaxL + 352: 000000000005ea20 514 FUNC GLOBAL DEFAULT 11 _XlcAddUtf8LocaleConverters + 353: 00000000000321f0 329 FUNC GLOBAL DEFAULT 11 XCreateOC + 354: 0000000000040050 391 FUNC GLOBAL DEFAULT 11 XTextWidth + 355: 0000000000031af0 290 FUNC GLOBAL DEFAULT 11 XMaskEvent + 356: 000000000007edd0 163 FUNC GLOBAL DEFAULT 11 XcmsDefaultCCC + 357: 0000000000073520 235 FUNC GLOBAL DEFAULT 11 _XimXConf + 358: 00000000000898d0 179 FUNC GLOBAL DEFAULT 11 XcmsQueryBlack + 359: 00000000000242c0 551 FUNC GLOBAL DEFAULT 11 XFillRectangles + 360: 00000000000267b0 19 FUNC GLOBAL DEFAULT 11 XExtentsOfFontSet + 361: 00000000000582c0 317 FUNC GLOBAL DEFAULT 11 _Xlcmbtowc + 362: 0000000000031670 8 FUNC GLOBAL DEFAULT 11 XDisplayString + 363: 0000000000044250 127 FUNC GLOBAL DEFAULT 11 _XSetLastRequestRead + 364: 0000000000035600 1973 FUNC GLOBAL DEFAULT 11 XDrawText16 + 365: 000000000009a570 704 FUNC GLOBAL DEFAULT 11 XkbComputeSectionBounds + 366: 0000000000057830 18 FUNC GLOBAL DEFAULT 11 _XwcTextPropertyToTextList + 367: 0000000000073980 44 FUNC GLOBAL DEFAULT 11 _XimFreeTransIntrCallback + 368: 0000000000073a30 186 FUNC GLOBAL DEFAULT 11 _XimTransConf + 369: 0000000000031650 4 FUNC GLOBAL DEFAULT 11 XProtocolRevision + 370: 0000000000073610 101 FUNC GLOBAL DEFAULT 11 _XimTransCallDispatcher + 371: 0000000000041090 360 FUNC GLOBAL DEFAULT 11 _XProcessWindowAttributes + 372: 000000000003b6b0 104 FUNC GLOBAL DEFAULT 11 XCreateRegion + 373: 000000000007dca0 21 FUNC GLOBAL DEFAULT 11 _XwcGenericTextExtents + 374: 000000000003dcb0 116 FUNC GLOBAL DEFAULT 11 XSetSelectionOwner + 375: 00000000000214b0 21 FUNC GLOBAL DEFAULT 11 XFlushGC + 376: 0000000000079840 303 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultTextPerCharExtents + 377: 0000000000093a90 326 FUNC GLOBAL DEFAULT 11 XkbGetMapChanges + 378: 000000000011beed 5 OBJECT GLOBAL DEFAULT 13 _XcmsRGBi_prefix + 379: 00000000000316f0 4 FUNC GLOBAL DEFAULT 11 XImageByteOrder + 380: 0000000000082420 597 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxVSamples + 381: 00000000000245c0 51 FUNC GLOBAL DEFAULT 11 XFlush + 382: 0000000000029ca0 516 FUNC GLOBAL DEFAULT 11 _XGetWindowAttributes + 383: 000000000003d690 125 FUNC GLOBAL DEFAULT 11 _XlcMapOSLocaleName + 384: 000000000007f5a0 660 FUNC GLOBAL DEFAULT 11 _XcmsDDConvertColors + 385: 0000000000039c90 1110 FUNC GLOBAL DEFAULT 11 XReadBitmapFileData + 386: 000000000002f330 740 FUNC GLOBAL DEFAULT 11 _XTranslateKey + 387: 00000000000955c0 2610 FUNC GLOBAL DEFAULT 11 XkbChangeNames + 388: 000000000005efb0 192 FUNC GLOBAL DEFAULT 11 _XlcDefaultMapModifiers + 389: 000000000003c1b0 191 FUNC GLOBAL DEFAULT 11 _XRegisterFilterByType + 390: 0000000000021f60 94 FUNC GLOBAL DEFAULT 11 XDestroyWindow + 391: 00000000000655d0 114 FUNC GLOBAL DEFAULT 11 _XimSetEventMaskCallback + 392: 000000000003ed10 223 FUNC GLOBAL DEFAULT 11 XSync + 393: 000000000003d3c0 263 FUNC GLOBAL DEFAULT 11 XSetStandardProperties + 394: 0000000000028100 10 FUNC GLOBAL DEFAULT 11 XGetZoomHints + 395: 0000000000028120 409 FUNC GLOBAL DEFAULT 11 XGetIconSizes + 396: 000000000006e290 23 FUNC GLOBAL DEFAULT 11 _XimSetInnerICResourceList + 397: 0000000000096390 47 FUNC GLOBAL DEFAULT 11 _XkbReadCopyData32 + 398: 000000000007ea60 203 FUNC GLOBAL DEFAULT 11 _XomInitConverter + 399: 0000000000051a20 76 FUNC GLOBAL DEFAULT 11 _XlcGetCharSetWithSide + 400: 00000000000500f0 113 FUNC GLOBAL DEFAULT 11 XUnregisterIMInstantiateCallback + 401: 00000000000203f0 294 FUNC GLOBAL DEFAULT 11 XDeleteContext + 402: 0000000000065770 224 FUNC GLOBAL DEFAULT 11 _XimForwardEventCallback + 403: 0000000000031a90 94 FUNC GLOBAL DEFAULT 11 XMapWindow + 404: 0000000000031920 6 FUNC GLOBAL DEFAULT 11 XPutPixel + 405: 000000000003f6c0 722 FUNC GLOBAL DEFAULT 11 XTextExtents16 + 406: 00000000000317f0 5 FUNC GLOBAL DEFAULT 11 XDefaultVisualOfScreen + 407: 000000000033b6c0 96 OBJECT GLOBAL DEFAULT 23 _XimImSportRec + 408: 000000000004fdb0 19 FUNC GLOBAL DEFAULT 11 XwcResetIC + 409: 000000000002cdb0 261 FUNC GLOBAL DEFAULT 11 XInitExtension + 410: 0000000000031830 4 FUNC GLOBAL DEFAULT 11 XHeightMMOfScreen + 411: 00000000000317b0 5 FUNC GLOBAL DEFAULT 11 XWhitePixelOfScreen + 412: 000000000005f820 87 FUNC GLOBAL DEFAULT 11 _XlcCountVaList + 413: 0000000000040650 108 FUNC GLOBAL DEFAULT 11 XUndefineCursor + 414: 000000000003e7e0 998 FUNC GLOBAL DEFAULT 11 XStringToKeysym + 415: 00000000000267d0 9 FUNC GLOBAL DEFAULT 11 XFreeFontSet + 416: 0000000000086a20 286 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMaxLC + 417: 000000000009cc70 549 FUNC GLOBAL DEFAULT 11 XkbGetDeviceInfoChanges + 418: 000000000001f9d0 97 FUNC GLOBAL DEFAULT 11 XChangeSaveSet + 419: 000000000006e850 388 FUNC GLOBAL DEFAULT 11 _XimSetICDefaults + 420: 000000000006ac80 2412 FUNC GLOBAL DEFAULT 11 _XimLocalOpenIM + 421: 0000000000071180 773 FUNC GLOBAL DEFAULT 11 _XimGetAttributeID + 422: 0000000000026760 5 FUNC GLOBAL DEFAULT 11 XBaseFontNameListOfFontSet + 423: 0000000000093be0 1877 FUNC GLOBAL DEFAULT 11 XkbGetKeyboardByName + 424: 00000000000a2950 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOverlayRows + 425: 0000000000058220 148 FUNC GLOBAL DEFAULT 11 _XrmDefaultInitParseInfo + 426: 000000000001f2b0 340 FUNC GLOBAL DEFAULT 11 XCheckTypedWindowEvent + 427: 0000000000029a40 248 FUNC GLOBAL DEFAULT 11 XGetTextProperty + 428: 0000000000021bb0 179 FUNC GLOBAL DEFAULT 11 XCreatePixmap + 429: 000000000004a520 234 FUNC GLOBAL DEFAULT 11 XrmPutResource + 430: 000000000003db00 418 FUNC GLOBAL DEFAULT 11 XSetRGBColormaps + 431: 0000000000027d70 221 FUNC GLOBAL DEFAULT 11 XAllocColor + 432: 0000000000032970 12 FUNC GLOBAL DEFAULT 11 XLocaleOfOM + 433: 00000000000a2ee0 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomRows + 434: 00000000000a08d0 376 FUNC GLOBAL DEFAULT 11 XkbCopyKeyType + 435: 0000000000060000 239 FUNC GLOBAL DEFAULT 11 XwcDrawText + 436: 00000000000523d0 9 FUNC GLOBAL DEFAULT 11 _XlcConvert + 437: 000000000003ddb0 161 FUNC GLOBAL DEFAULT 11 XSetState + 438: 00000000000521b0 520 FUNC GLOBAL DEFAULT 11 _XlcOpenConverter + 439: 0000000000025570 508 FUNC GLOBAL DEFAULT 11 XLoadQueryFont + 440: 000000000033a6c0 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketUNIXFuncs + 441: 0000000000093940 322 FUNC GLOBAL DEFAULT 11 XkbGetKeyVirtualModMap + 442: 000000000003e1d0 211 FUNC GLOBAL DEFAULT 11 XFetchBuffer + 443: 0000000000031550 7 FUNC GLOBAL DEFAULT 11 XQLength + 444: 000000000005f0c0 137 FUNC GLOBAL DEFAULT 11 _XlcAddLoader + 445: 000000000008f590 411 FUNC GLOBAL DEFAULT 11 XkbTranslateKeyCode + 446: 0000000000081640 1308 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxC + 447: 0000000000074040 334 FUNC GLOBAL DEFAULT 11 _XimFilterWaitEvent + 448: 0000000000031620 7 FUNC GLOBAL DEFAULT 11 XScreenCount + 449: 00000000000267e0 90 FUNC GLOBAL DEFAULT 11 XSetArcMode + 450: 000000000009ebc0 1486 FUNC GLOBAL DEFAULT 11 XkbChangeTypesOfKey + 451: 000000000003d7c0 333 FUNC GLOBAL DEFAULT 11 XSetWMSizeHints + 452: 0000000000027fa0 345 FUNC GLOBAL DEFAULT 11 XGetWMHints + 453: 0000000000025c90 172 FUNC GLOBAL DEFAULT 11 XFreeFontInfo + 454: 000000000001e9f0 104 FUNC GLOBAL DEFAULT 11 XSetWindowBorder + 455: 0000000000089bd0 179 FUNC GLOBAL DEFAULT 11 XcmsQueryWhite + 456: 0000000000066b60 67 FUNC GLOBAL DEFAULT 11 _XimFreeProtoIntrCallback + 457: 0000000000081b60 1414 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxV + 458: 000000000002a450 78 FUNC GLOBAL DEFAULT 11 XGrabServer + 459: 000000000007cab0 39 FUNC GLOBAL DEFAULT 11 _XwcGenericDrawImageString + 460: 0000000000065c90 426 FUNC GLOBAL DEFAULT 11 _XimTriggerNotify + 461: 0000000000091110 752 FUNC GLOBAL DEFAULT 11 XkbSetCompatMap + 462: 000000000001fa60 144 FUNC GLOBAL DEFAULT 11 XChangeWindowAttributes + 463: 000000000008c8c0 90 FUNC GLOBAL DEFAULT 11 _XcmsGetElement + 464: 000000000006d4f0 142 FUNC GLOBAL DEFAULT 11 _XimLocalSetICValues + 465: 0000000000096220 68 FUNC GLOBAL DEFAULT 11 _XkbSkipReadBufferData + 466: 0000000000021d50 94 FUNC GLOBAL DEFAULT 11 XCreateFontCursor + 467: 0000000000044630 103 FUNC GLOBAL DEFAULT 11 XProcessInternalConnection + 468: 000000000008bc60 793 FUNC GLOBAL DEFAULT 11 _XcmsResolveColorString + 469: 0000000000026790 8 FUNC GLOBAL DEFAULT 11 XDirectionalDependentDrawing + 470: 0000000000099b90 268 FUNC GLOBAL DEFAULT 11 XkbForceDeviceBell + 471: 0000000000031740 8 FUNC GLOBAL DEFAULT 11 XLastKnownRequestProcessed + 472: 0000000000028e60 11 FUNC GLOBAL DEFAULT 11 XGetWMNormalHints + 473: 0000000000020680 130 FUNC GLOBAL DEFAULT 11 XCopyColormapAndFree + 474: 000000000005f620 86 FUNC GLOBAL DEFAULT 11 XwcTextListToTextProperty + 475: 000000000002f7f0 427 FUNC GLOBAL DEFAULT 11 XRebindKeysym + 476: 0000000000026020 105 FUNC GLOBAL DEFAULT 11 XFreeColormap + 477: 0000000000089320 839 FUNC GLOBAL DEFAULT 11 _XcmsCIELuvQueryMaxLCRGB + 478: 000000000003d910 10 FUNC GLOBAL DEFAULT 11 XSetWMNormalHints + 479: 00000000000a46e0 33 FUNC GLOBAL DEFAULT 11 XkbFreeIndicatorMaps + 480: 0000000000097b80 705 FUNC GLOBAL DEFAULT 11 XkbNoteMapChanges + 481: 0000000000058660 12 FUNC GLOBAL DEFAULT 11 _Xwctomb + 482: 00000000000a4630 62 FUNC GLOBAL DEFAULT 11 XkbAllocControls + 483: 000000000007c820 228 FUNC GLOBAL DEFAULT 11 _XomGenericOpenOM + 484: 000000000005fa20 178 FUNC GLOBAL DEFAULT 11 _XlcSetValues + 485: 0000000000079000 199 FUNC GLOBAL DEFAULT 11 _XwcDefaultTextEscapement + 486: 0000000000090210 9 FUNC GLOBAL DEFAULT 11 XkbTranslateKey + 487: 000000000008f170 339 FUNC GLOBAL DEFAULT 11 XkbGetPerClientControls + 488: 0000000000089ce0 102 FUNC GLOBAL DEFAULT 11 XcmsSetWhitePoint + 489: 0000000000035dc0 2007 FUNC GLOBAL DEFAULT 11 XDrawText + 490: 00000000000a29c0 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOverlays + 491: 0000000000051ac0 369 FUNC GLOBAL DEFAULT 11 _XlcGetCSValues + 492: 0000000000043780 50 FUNC GLOBAL DEFAULT 11 _XReadPad + 493: 0000000000027640 281 FUNC GLOBAL DEFAULT 11 XGetDefault + 494: 000000000008ebc0 341 FUNC GLOBAL DEFAULT 11 XkbGetDetectableAutoRepeat + 495: 000000000004fe00 22 FUNC GLOBAL DEFAULT 11 XmbLookupString + 496: 0000000000090790 652 FUNC GLOBAL DEFAULT 11 XkbTranslateKeySym + 497: 0000000000069d20 113 FUNC GLOBAL DEFAULT 11 _XimLocalGetICValues + 498: 000000000002a870 262 FUNC GLOBAL DEFAULT 11 XIfEvent + 499: 0000000000044b50 3 FUNC GLOBAL DEFAULT 11 _XUnknownCopyEventCookie + 500: 0000000000066bd0 3403 FUNC GLOBAL DEFAULT 11 _XimProtoEventToWire + 501: 00000000000727b0 78 FUNC GLOBAL DEFAULT 11 _XimThaiCloseIM + 502: 00000000000963c0 68 FUNC GLOBAL DEFAULT 11 _XkbReadBufferCopy32 + 503: 000000000006eae0 772 FUNC GLOBAL DEFAULT 11 _XimSetICValueData + 504: 000000000033d7c8 8 OBJECT GLOBAL DEFAULT 24 _XCreateMutex_fn + 505: 0000000000087c40 1966 FUNC GLOBAL DEFAULT 11 XcmsCIELuvQueryMinL + 506: 00000000000a3810 175 FUNC GLOBAL DEFAULT 11 XkbAddGeomRow + 507: 000000000006bde0 707 FUNC GLOBAL DEFAULT 11 _XimLocalUtf8LookupString + 508: 00000000000315a0 18 FUNC GLOBAL DEFAULT 11 XDisplayWidthMM + 509: 0000000000089840 4 FUNC GLOBAL DEFAULT 11 XcmsScreenNumberOfCCC + 510: 00000000000918b0 199 FUNC GLOBAL DEFAULT 11 XkbChangeEnabledControls + 511: 000000000004dcb0 59 FUNC GLOBAL DEFAULT 11 _XimXTransCloseForCloning + 512: 0000000000020710 608 FUNC GLOBAL DEFAULT 11 XCopyGC + 513: 0000000000094c90 2343 FUNC GLOBAL DEFAULT 11 XkbSetNames + 514: 000000000008c920 362 FUNC GLOBAL DEFAULT 11 _XcmsGetProperty + 515: 00000000000a3400 273 FUNC GLOBAL DEFAULT 11 XkbAddGeomColor + 516: 0000000000025260 183 FUNC GLOBAL DEFAULT 11 XFreeFont + 517: 00000000000a41b0 735 FUNC GLOBAL DEFAULT 11 XkbAllocNames + 518: 0000000000031930 6 FUNC GLOBAL DEFAULT 11 XSubImage + 519: 00000000000a4c60 229 FUNC GLOBAL DEFAULT 11 XkbAllocDeviceInfo + 520: 000000000011bf00 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIELab_prefix + 521: 0000000000093610 163 FUNC GLOBAL DEFAULT 11 XkbGetVirtualMods + 522: 000000000003b750 293 FUNC GLOBAL DEFAULT 11 XSetRegion + 523: 0000000000021e90 103 FUNC GLOBAL DEFAULT 11 XListDepths + 524: 000000000005e8b0 116 FUNC GLOBAL DEFAULT 11 _Utf8GetConvByName + 525: 00000000000401e0 439 FUNC GLOBAL DEFAULT 11 _XTextHeight + 526: 00000000000a9a60 43716 OBJECT GLOBAL DEFAULT 13 _XkeyTable + 527: 000000000002d220 126 FUNC GLOBAL DEFAULT 11 XESetFreeFont + 528: 0000000000044910 38 FUNC GLOBAL DEFAULT 11 _XIsEventCookie + 529: 000000000033d470 8 OBJECT GLOBAL DEFAULT 23 _XcmsDDColorSpaces + 530: 0000000000060100 9 FUNC GLOBAL DEFAULT 11 XwcDrawImageString + 531: 000000000004fc00 313 FUNC GLOBAL DEFAULT 11 XSetICValues + 532: 0000000000022260 312 FUNC GLOBAL DEFAULT 11 XDrawLine + 533: 0000000000040740 94 FUNC GLOBAL DEFAULT 11 XUngrabKeyboard + 534: 0000000000031f40 337 FUNC GLOBAL DEFAULT 11 XInsertModifiermapEntry + 535: 000000000008a980 101 FUNC GLOBAL DEFAULT 11 _XcmsAddCmapRec + 536: 000000000005fd20 9 FUNC GLOBAL DEFAULT 11 XmbDrawString + 537: 00000000000a2e60 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOverlayKeys + 538: 000000000008a2c0 75 FUNC GLOBAL DEFAULT 11 _XcmsRGB_to_XColor + 539: 000000000003c270 102 FUNC GLOBAL DEFAULT 11 _XUnregisterFilter + 540: 000000000033d6a0 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 541: 000000000003bd40 126 FUNC GLOBAL DEFAULT 11 XSubtractRegion + 542: 000000000008c090 5 FUNC GLOBAL DEFAULT 11 _XcmsFreePointerArray + 543: 00000000000457a0 162 FUNC GLOBAL DEFAULT 11 _XVIDtoVisual + 544: 00000000000579f0 132 FUNC GLOBAL DEFAULT 11 _XlcCreateLC + 545: 00000000000700f0 592 FUNC GLOBAL DEFAULT 11 _XimMakeICAttrIDList + 546: 0000000000058670 15 FUNC GLOBAL DEFAULT 11 _Xmbstowcs + 547: 000000000006c0c0 469 FUNC GLOBAL DEFAULT 11 _XimLcctstowcs + 548: 0000000000026540 498 FUNC GLOBAL DEFAULT 11 XCreateFontSet + 549: 000000000004f090 40 FUNC GLOBAL DEFAULT 11 _XimXTransOpenCOTSClient + 550: 00000000000286f0 778 FUNC GLOBAL DEFAULT 11 XGetImage + 551: 00000000000314e0 19 FUNC GLOBAL DEFAULT 11 XDefaultGC + 552: 00000000000365e0 15 FUNC GLOBAL DEFAULT 11 XAllocIconSize + 553: 000000000008e720 369 FUNC GLOBAL DEFAULT 11 XkbComputeEffectiveMap + 554: 0000000000041200 265 FUNC GLOBAL DEFAULT 11 XCreateWindow + 555: 0000000000031600 22 FUNC GLOBAL DEFAULT 11 XDisplayCells + 556: 000000000008a110 133 FUNC GLOBAL DEFAULT 11 XcmsStoreColor + 557: 000000000033dde8 8 OBJECT GLOBAL DEFAULT 24 _XIOErrorFunction + 558: 000000000002f230 151 FUNC GLOBAL DEFAULT 11 _XKeysymToKeycode + 559: 0000000000073690 71 FUNC GLOBAL DEFAULT 11 _XimTransRegisterDispatcher + 560: 00000000000233f0 124 FUNC GLOBAL DEFAULT 11 XSetErrorHandler + 561: 00000000000406c0 117 FUNC GLOBAL DEFAULT 11 XUngrabButton + 562: 00000000000a1e70 669 FUNC GLOBAL DEFAULT 11 XkbResizeKeyActions + 563: 0000000000090090 380 FUNC GLOBAL DEFAULT 11 XkbLookupKeySym + 564: 000000000001fee0 147 FUNC GLOBAL DEFAULT 11 XMoveResizeWindow + 565: 0000000000089d50 13 FUNC GLOBAL DEFAULT 11 XcmsSetCompressionProc + 566: 000000000005ec30 450 FUNC GLOBAL DEFAULT 11 _XlcAddGB18030LocaleConverters + 567: 0000000000031850 8 FUNC GLOBAL DEFAULT 11 XCellsOfScreen + 568: 00000000000a2280 292 FUNC GLOBAL DEFAULT 11 XkbFreeServerMap + 569: 0000000000037f00 40 FUNC GLOBAL DEFAULT 11 _XReverse_Bytes + 570: 0000000000079ca0 268 FUNC GLOBAL DEFAULT 11 _XwcDefaultDrawImageString + 571: 000000000001f160 334 FUNC GLOBAL DEFAULT 11 XCheckTypedEvent + 572: 000000000033d180 48 OBJECT GLOBAL DEFAULT 23 XcmsRGBColorSpace + 573: 000000000003d160 218 FUNC GLOBAL DEFAULT 11 XSetIconSizes + 574: 0000000000040990 94 FUNC GLOBAL DEFAULT 11 XUnmapSubwindows + 575: 000000000007f260 510 FUNC GLOBAL DEFAULT 11 _XcmsDIConvertColors + 576: 0000000000031780 5 FUNC GLOBAL DEFAULT 11 XDisplayOfScreen + 577: 000000000005f740 141 FUNC GLOBAL DEFAULT 11 _XlcCopyFromArg + 578: 000000000001e660 97 FUNC GLOBAL DEFAULT 11 XAllowEvents + 579: 000000000004dc10 9 FUNC GLOBAL DEFAULT 11 _XimXTransBytesReadable + 580: 0000000000021850 462 FUNC GLOBAL DEFAULT 11 XCreateGlyphCursor + 581: 0000000000066620 362 FUNC GLOBAL DEFAULT 11 _XimProtoMbLookupString + 582: 000000000008ee90 357 FUNC GLOBAL DEFAULT 11 XkbGetAutoResetControls + 583: 000000000002a5e0 310 FUNC GLOBAL DEFAULT 11 XRemoveHost + 584: 0000000000051c40 388 FUNC GLOBAL DEFAULT 11 _XlcCreateDefaultCharSet + 585: 000000000005ee00 79 FUNC GLOBAL DEFAULT 11 _XlcCompareISOLatin1 + 586: 00000000000a3130 337 FUNC GLOBAL DEFAULT 11 XkbAddGeomProperty + 587: 0000000000061190 21 FUNC GLOBAL DEFAULT 11 _XimReregisterFilter + 588: 00000000000313f0 110 FUNC GLOBAL DEFAULT 11 XLowerWindow + 589: 000000000008c300 66 FUNC GLOBAL DEFAULT 11 _XcmsGetIntensityMap + 590: 0000000000039280 342 FUNC GLOBAL DEFAULT 11 XQueryPointer + 591: 00000000000a3d20 364 FUNC GLOBAL DEFAULT 11 XkbAddGeomOverlayRow + 592: 0000000000096310 68 FUNC GLOBAL DEFAULT 11 _XkbReadBufferCopyKeySyms + 593: 00000000000430f0 157 FUNC GLOBAL DEFAULT 11 _XAllocIDs + 594: 000000000005f500 88 FUNC GLOBAL DEFAULT 11 XwcTextPropertyToTextList + 595: 000000000004b1f0 163 FUNC GLOBAL DEFAULT 11 XrmGetResource + 596: 00000000000271b0 525 FUNC GLOBAL DEFAULT 11 XAllocNamedColor + 597: 000000000009a1c0 250 FUNC GLOBAL DEFAULT 11 XkbComputeShapeTop + 598: 000000000006a910 164 FUNC GLOBAL DEFAULT 11 _XimCheckIfLocalProcessing + 599: 0000000000072400 406 FUNC GLOBAL DEFAULT 11 _XimThaiIMFree + 600: 0000000000083a60 436 FUNC GLOBAL DEFAULT 11 XcmsRGBToRGBi + 601: 000000000002a2c0 147 FUNC GLOBAL DEFAULT 11 XGrabKey + 602: 0000000000031950 78 FUNC GLOBAL DEFAULT 11 XNoOp + 603: 0000000000031630 5 FUNC GLOBAL DEFAULT 11 XServerVendor + 604: 00000000000588f0 253 FUNC GLOBAL DEFAULT 11 _Xlcmbstoutf8 + 605: 000000000033d4e0 48 OBJECT GLOBAL DEFAULT 23 XcmsCIEuvYColorSpace + 606: 0000000000071940 1439 FUNC GLOBAL DEFAULT 11 _XimThaiFilter + 607: 000000000008dbf0 58 FUNC GLOBAL DEFAULT 11 XkbLibraryVersion + 608: 0000000000038eb0 222 FUNC GLOBAL DEFAULT 11 XQueryColors + 609: 000000000002d600 126 FUNC GLOBAL DEFAULT 11 XESetError + 610: 000000000007f080 82 FUNC GLOBAL DEFAULT 11 XcmsFreeCCC + 611: 0000000000082e50 1015 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToRGBi + 612: 0000000000073700 90 FUNC GLOBAL DEFAULT 11 _XimTransWrite + 613: 0000000000032390 5 FUNC GLOBAL DEFAULT 11 XOMOfOC + 614: 000000000009d4e0 590 FUNC GLOBAL DEFAULT 11 XkbChangeDeviceInfo + 615: 000000000033d708 8 OBJECT GLOBAL DEFAULT 24 _XFreeDisplayLock_fn + 616: 00000000000365c0 15 FUNC GLOBAL DEFAULT 11 XAllocWMHints + 617: 0000000000045850 19 FUNC GLOBAL DEFAULT 11 XFree + 618: 0000000000029550 565 FUNC GLOBAL DEFAULT 11 XGetRGBColormaps + 619: 0000000000083250 185 FUNC GLOBAL DEFAULT 11 XcmsRGBiToCIEXYZ + 620: 000000000006ef80 91 FUNC GLOBAL DEFAULT 11 _XimDecodeLocalICAttr + 621: 000000000005f710 39 FUNC GLOBAL DEFAULT 11 XDefaultString + 622: 0000000000079340 218 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultTextExtents + 623: 000000000033ddd8 8 OBJECT GLOBAL DEFAULT 24 _XHeadOfDisplayList + 624: 00000000000813c0 640 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMinV + 625: 00000000000229f0 312 FUNC GLOBAL DEFAULT 11 XDrawRectangle + 626: 000000000004dc50 9 FUNC GLOBAL DEFAULT 11 _XimXTransWritev + 627: 000000000003d920 87 FUNC GLOBAL DEFAULT 11 XSetPlaneMask + 628: 0000000000089990 187 FUNC GLOBAL DEFAULT 11 XcmsQueryBlue + 629: 000000000001faf0 124 FUNC GLOBAL DEFAULT 11 XResizeWindow + 630: 0000000000097ec0 44 FUNC GLOBAL DEFAULT 11 XkbIgnoreExtension + 631: 000000000004dd80 128 FUNC GLOBAL DEFAULT 11 _XimXTransGetPeerAddr + 632: 000000000008d020 476 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToCIEuvY + 633: 0000000000033ee0 757 FUNC GLOBAL DEFAULT 11 XParseColor + 634: 000000000002cbe0 169 FUNC GLOBAL DEFAULT 11 XInitImage + 635: 0000000000083dd0 191 FUNC GLOBAL DEFAULT 11 _XcmsLRGB_InitScrnDefault + 636: 000000000033de00 0 NOTYPE GLOBAL DEFAULT 24 _end + 637: 0000000000031800 4 FUNC GLOBAL DEFAULT 11 XWidthOfScreen + 638: 000000000009ff90 908 FUNC GLOBAL DEFAULT 11 XkbUpdateMapFromCore + 639: 0000000000073f40 214 FUNC GLOBAL DEFAULT 11 _XimRead + 640: 000000000033d4a0 64 OBJECT GLOBAL DEFAULT 23 _XcmsDIColorSpacesInit + 641: 0000000000031060 290 FUNC GLOBAL DEFAULT 11 XInitThreads + 642: 0000000000097ef0 2061 FUNC GLOBAL DEFAULT 11 XkbUseExtension + 643: 0000000000042e70 483 FUNC GLOBAL DEFAULT 11 _XReadEvents + 644: 000000000005f7d0 79 FUNC GLOBAL DEFAULT 11 _XlcCopyToArg + 645: 000000000001ebc0 104 FUNC GLOBAL DEFAULT 11 XSetWindowColormap + 646: 000000000004ab70 144 FUNC GLOBAL DEFAULT 11 XrmPutFileDatabase + 647: 000000000002c210 93 FUNC GLOBAL DEFAULT 11 _XGetBitsPerPixel + 648: 00000000000903d0 679 FUNC GLOBAL DEFAULT 11 XRefreshKeyboardMapping + 649: 0000000000045590 307 FUNC GLOBAL DEFAULT 11 _XEnq + 650: 0000000000078ff0 12 FUNC GLOBAL DEFAULT 11 _XmbDefaultTextEscapement + 651: 000000000002aa00 108 FUNC GLOBAL DEFAULT 11 _XimGetLocaleCode + 652: 0000000000031490 7 FUNC GLOBAL DEFAULT 11 XDefaultScreen + 653: 000000000003e150 96 FUNC GLOBAL DEFAULT 11 XSetWMProtocols + 654: 0000000000041ab0 907 FUNC GLOBAL DEFAULT 11 XWriteBitmapFile + 655: 000000000033a8c0 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketTCPFuncs + 656: 000000000003ca80 129 FUNC GLOBAL DEFAULT 11 XSetClipRectangles + 657: 0000000000031f10 33 FUNC GLOBAL DEFAULT 11 XFreeModifiermap + 658: 00000000000418b0 507 FUNC GLOBAL DEFAULT 11 XSetWMProperties + 659: 00000000000a3290 355 FUNC GLOBAL DEFAULT 11 XkbAddGeomKeyAlias + 660: 0000000000020c40 254 FUNC GLOBAL DEFAULT 11 XCreatePixmapCursor + 661: 00000000000316a0 19 FUNC GLOBAL DEFAULT 11 XDefaultColormap + 662: 0000000000082730 271 FUNC GLOBAL DEFAULT 11 XcmsFormatOfPrefix + 663: 0000000000025320 582 FUNC GLOBAL DEFAULT 11 _XF86LoadQueryLocaleFont + 664: 0000000000079970 119 FUNC GLOBAL DEFAULT 11 _XmbDefaultDrawString + 665: 00000000000a4f4c 0 FUNC GLOBAL DEFAULT 12 _fini + 666: 0000000000093250 240 FUNC GLOBAL DEFAULT 11 XkbGetKeyTypes + 667: 0000000000099260 441 FUNC GLOBAL DEFAULT 11 XkbGetIndicatorMap + 668: 000000000002d120 126 FUNC GLOBAL DEFAULT 11 XESetFreeGC + 669: 0000000000073680 2 FUNC GLOBAL DEFAULT 11 _XimTransFlush + 670: 0000000000070340 415 FUNC GLOBAL DEFAULT 11 _XimDecodeIMATTRIBUTE + 671: 000000000007d990 15 FUNC GLOBAL DEFAULT 11 _Xutf8GenericTextEscapement + 672: 00000000000323a0 313 FUNC GLOBAL DEFAULT 11 XSetOCValues + 673: 000000000007be50 430 FUNC GLOBAL DEFAULT 11 read_EncodingInfo + 674: 0000000000087650 1519 FUNC GLOBAL DEFAULT 11 XcmsCIELuvClipLuv + 675: 000000000001e810 72 FUNC GLOBAL DEFAULT 11 XAutoRepeatOn + 676: 0000000000083ff0 620 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToCIELab + 677: 000000000004aa40 293 FUNC GLOBAL DEFAULT 11 XrmEnumerateDatabase + 678: 000000000008a310 110 FUNC GLOBAL DEFAULT 11 _XColor_to_XcmsRGB + 679: 00000000000316d0 4 FUNC GLOBAL DEFAULT 11 XBitmapBitOrder + 680: 00000000000541f0 497 FUNC GLOBAL DEFAULT 11 _XlcFileName + 681: 00000000000a4b70 237 FUNC GLOBAL DEFAULT 11 XkbResizeDeviceButtonActions + 682: 0000000000058f60 34 FUNC GLOBAL DEFAULT 11 _XmbTextListToTextProperty + 683: 000000000008f2d0 319 FUNC GLOBAL DEFAULT 11 XkbOpenDisplay + 684: 00000000000640c0 6 FUNC GLOBAL DEFAULT 11 _XimGetMyEndian + 685: 000000000006e3d0 84 FUNC GLOBAL DEFAULT 11 _XimCheckIMMode + 686: 000000000004fe70 44 FUNC GLOBAL DEFAULT 11 _XIMCompileResourceList + 687: 000000000001fc50 98 FUNC GLOBAL DEFAULT 11 XCirculateSubwindowsUp + 688: 0000000000065710 84 FUNC GLOBAL DEFAULT 11 _XimSyncCallback + 689: 0000000000061210 60 FUNC GLOBAL DEFAULT 11 _XimUnregisterServerFilter + 690: 0000000000023470 124 FUNC GLOBAL DEFAULT 11 XSetIOErrorHandler + 691: 0000000000080980 254 FUNC GLOBAL DEFAULT 11 _XcmsTekHVC_CheckModify + 692: 0000000000074020 9 FUNC GLOBAL DEFAULT 11 _XimRegisterDispatcher + 693: 000000000003e0c0 10 FUNC GLOBAL DEFAULT 11 XSetWMName + 694: 00000000000600f0 9 FUNC GLOBAL DEFAULT 11 XwcDrawString + 695: 0000000000069230 502 FUNC GLOBAL DEFAULT 11 _XimUnRegisterIMInstantiateCallback + 696: 0000000000045960 153 FUNC GLOBAL DEFAULT 11 _XGetHostname + 697: 000000000003dfa0 103 FUNC GLOBAL DEFAULT 11 XSetTile + 698: 000000000006f510 442 FUNC GLOBAL DEFAULT 11 _XimSetCurrentICValues + 699: 000000000003d510 248 FUNC GLOBAL DEFAULT 11 XSetClassHint + 700: 000000000004a8e0 116 FUNC GLOBAL DEFAULT 11 XrmGetFileDatabase + 701: 00000000000543f0 589 FUNC GLOBAL DEFAULT 11 _XlcResolveLocaleName + 702: 00000000000452d0 381 FUNC GLOBAL DEFAULT 11 _XError + 703: 0000000000080ea0 1307 FUNC GLOBAL DEFAULT 11 XcmsTekHVCClipVC + 704: 0000000000096360 46 FUNC GLOBAL DEFAULT 11 _XkbWriteCopyKeySyms + 705: 000000000005ee50 107 FUNC GLOBAL DEFAULT 11 _XlcNCompareISOLatin1 + 706: 00000000000a0360 644 FUNC GLOBAL DEFAULT 11 XkbAllocClientMap + 707: 0000000000090f60 426 FUNC GLOBAL DEFAULT 11 XkbGetCompatMap + 708: 0000000000050020 80 FUNC GLOBAL DEFAULT 11 XCloseIM + 709: 00000000000324e0 313 FUNC GLOBAL DEFAULT 11 XGetOCValues + 710: 000000000009d250 654 FUNC GLOBAL DEFAULT 11 XkbSetDeviceInfo + 711: 00000000000393e0 250 FUNC GLOBAL DEFAULT 11 XQueryBestStipple + 712: 000000000003e2c0 83 FUNC GLOBAL DEFAULT 11 XStoreBuffer + 713: 000000000005f470 36 FUNC GLOBAL DEFAULT 11 _XrmInitParseInfo + 714: 000000000011bf0e 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIEuvY_prefix + 715: 000000000033ddd0 8 OBJECT GLOBAL DEFAULT 24 _qfree + 716: 000000000002de20 302 FUNC GLOBAL DEFAULT 11 XInternAtom + 717: 000000000009e310 340 FUNC GLOBAL DEFAULT 11 XkbInitCanonicalKeyTypes + 718: 000000000033d540 48 OBJECT GLOBAL DEFAULT 23 XcmsCIExyYColorSpace + 719: 000000000001e990 94 FUNC GLOBAL DEFAULT 11 XBell + 720: 0000000000026120 94 FUNC GLOBAL DEFAULT 11 XFreeCursor + 721: 0000000000097890 677 FUNC GLOBAL DEFAULT 11 XkbChangeMap + 722: 0000000000079b10 286 FUNC GLOBAL DEFAULT 11 _Xutf8DefaultDrawString + 723: 000000000008d370 636 FUNC GLOBAL DEFAULT 11 XcmsCIEuvYToCIEXYZ + 724: 00000000000a2da0 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomColors + 725: 000000000004f7b0 313 FUNC GLOBAL DEFAULT 11 XGetIMValues + 726: 000000000001f640 903 FUNC GLOBAL DEFAULT 11 XChangeProperty + 727: 000000000007f9f0 1460 FUNC GLOBAL DEFAULT 11 XcmsConvertColors + 728: 000000000003e330 136 FUNC GLOBAL DEFAULT 11 XStoreColor + 729: 00000000000407a0 117 FUNC GLOBAL DEFAULT 11 XUngrabKey + 730: 0000000000040a50 1070 FUNC GLOBAL DEFAULT 11 XGetVisualInfo + 731: 0000000000093800 311 FUNC GLOBAL DEFAULT 11 XkbGetKeyModifierMap + 732: 0000000000045190 240 FUNC GLOBAL DEFAULT 11 _XDefaultIOError + 733: 000000000004b2a0 75 FUNC GLOBAL DEFAULT 11 XrmLocaleOfDatabase + 734: 000000000001fdc0 149 FUNC GLOBAL DEFAULT 11 XClearArea + 735: 000000000009c920 372 FUNC GLOBAL DEFAULT 11 XkbNoteDeviceChanges + 736: 00000000000914f0 191 FUNC GLOBAL DEFAULT 11 XkbSetAutoRepeatRate + 737: 0000000000069500 831 FUNC GLOBAL DEFAULT 11 _XimOpenIM + 738: 000000000003bf20 120 FUNC GLOBAL DEFAULT 11 XPointInRegion + 739: 000000000008cec0 344 FUNC GLOBAL DEFAULT 11 _XcmsArcTangent + 740: 000000000033d2c0 48 OBJECT GLOBAL DEFAULT 23 XcmsCIELuvColorSpace + 741: 000000000009f990 152 FUNC GLOBAL DEFAULT 11 XkbUpdateActionVirtualMods + 742: 00000000000a2d80 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomProps + 743: 0000000000066420 12 FUNC GLOBAL DEFAULT 11 _Ximctstombs + 744: 000000000002f760 132 FUNC GLOBAL DEFAULT 11 _XLookupString + 745: 000000000001eac0 10 FUNC GLOBAL DEFAULT 11 XEnableAccessControl + 746: 000000000007cb90 1922 FUNC GLOBAL DEFAULT 11 _XomGenericDrawString + 747: 000000000011bef9 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIELuv_prefix + 748: 00000000000646f0 2905 FUNC GLOBAL DEFAULT 11 _XimProtoOpenIM + 749: 000000000001ee20 355 FUNC GLOBAL DEFAULT 11 XCheckIfEvent + 750: 000000000008e140 237 FUNC GLOBAL DEFAULT 11 XkbLatchModifiers + 751: 000000000006c2a0 12 FUNC GLOBAL DEFAULT 11 _XimLcctstoutf8 + 752: 000000000008fc60 339 FUNC GLOBAL DEFAULT 11 XKeysymToKeycode + 753: 0000000000041310 349 FUNC GLOBAL DEFAULT 11 XWindowEvent + 754: 00000000000a46a0 62 FUNC GLOBAL DEFAULT 11 XkbAllocIndicatorMaps + 755: 0000000000045740 33 FUNC GLOBAL DEFAULT 11 _XAllocTemp + 756: 00000000000a2770 37 FUNC GLOBAL DEFAULT 11 XkbFreeGeomKeyAliases + 757: 00000000000a4d50 507 FUNC GLOBAL DEFAULT 11 XkbFreeDeviceInfo + 758: 000000000003d4d0 55 FUNC GLOBAL DEFAULT 11 XSetTransientForHint + 759: 000000000002f000 212 FUNC GLOBAL DEFAULT 11 _XRefreshKeyboardMapping + 760: 000000000006e370 88 FUNC GLOBAL DEFAULT 11 _XimSetIMMode + 761: 000000000001e860 72 FUNC GLOBAL DEFAULT 11 XAutoRepeatOff + 762: 00000000000a2be0 407 FUNC GLOBAL DEFAULT 11 XkbFreeGeometry + 763: 0000000000040520 293 FUNC GLOBAL DEFAULT 11 XTranslateCoordinates + 764: 0000000000031580 18 FUNC GLOBAL DEFAULT 11 XDisplayHeight + 765: 000000000033d598 8 OBJECT GLOBAL DEFAULT 23 _XkbInternAtomFunc + 766: 000000000002a770 68 FUNC GLOBAL DEFAULT 11 XRemoveHosts + 767: 000000000001e8b0 104 FUNC GLOBAL DEFAULT 11 XSetWindowBackground + 768: 000000000004f0f0 266 FUNC GLOBAL DEFAULT 11 _XimXTransConnect + 769: 0000000000021420 130 FUNC GLOBAL DEFAULT 11 _XFlushGCCache + 770: 00000000000990e0 373 FUNC GLOBAL DEFAULT 11 _XkbReadGetIndicatorMapReply + 771: 000000000001fb70 97 FUNC GLOBAL DEFAULT 11 XCirculateSubwindows + 772: 0000000000090a20 757 FUNC GLOBAL DEFAULT 11 XLookupString + 773: 000000000006f170 227 FUNC GLOBAL DEFAULT 11 _XimGetCurrentIMValues + 774: 000000000002c270 227 FUNC GLOBAL DEFAULT 11 _XInitImageFuncPtrs + 775: 000000000003c5f0 312 FUNC GLOBAL DEFAULT 11 XSendEvent + 776: 000000000009fa30 332 FUNC GLOBAL DEFAULT 11 XkbUpdateKeyTypeVirtualMods + 777: 00000000000315e0 18 FUNC GLOBAL DEFAULT 11 XDisplayPlanes + 778: 00000000000365b0 15 FUNC GLOBAL DEFAULT 11 XAllocStandardColormap + 779: 0000000000072340 187 FUNC GLOBAL DEFAULT 11 _XimCheckIfThaiProcessing + 780: 0000000000021a20 388 FUNC GLOBAL DEFAULT 11 XCreatePixmapFromBitmapData + 781: 000000000008c2b0 68 FUNC GLOBAL DEFAULT 11 _XcmsFreeIntensityMaps + 782: 00000000000a3e90 302 FUNC GLOBAL DEFAULT 11 XkbAddGeomOverlay + 783: 000000000007d350 39 FUNC GLOBAL DEFAULT 11 _XwcGenericDrawString + 784: 0000000000066900 362 FUNC GLOBAL DEFAULT 11 _XimProtoUtf8LookupString + 785: 0000000000038970 59 FUNC GLOBAL DEFAULT 11 XrmStringToQuark + 786: 000000000033d340 48 OBJECT GLOBAL DEFAULT 23 XcmsUNDEFINEDColorSpace + 787: 000000000008afe0 293 FUNC GLOBAL DEFAULT 11 XcmsCCCOfColormap + 788: 00000000000936c0 311 FUNC GLOBAL DEFAULT 11 XkbGetKeyExplicitComponents + 789: 000000000004fe40 39 FUNC GLOBAL DEFAULT 11 Xutf8LookupString + 790: 0000000000093340 240 FUNC GLOBAL DEFAULT 11 XkbGetKeyActions + 791: 000000000003cf40 281 FUNC GLOBAL DEFAULT 11 XSetSizeHints + 792: 00000000000317c0 5 FUNC GLOBAL DEFAULT 11 XDefaultColormapOfScreen + 793: 00000000000791a0 184 FUNC GLOBAL DEFAULT 11 _XmbDefaultTextExtents + 794: 000000000009dcc0 1615 FUNC GLOBAL DEFAULT 11 XkbListComponents + 795: 000000000003fbb0 535 FUNC GLOBAL DEFAULT 11 _XTextHeight16 + 796: 00000000000267a0 8 FUNC GLOBAL DEFAULT 11 XContextualDrawing + 797: 0000000000055470 417 FUNC GLOBAL DEFAULT 11 _XlcParse_scopemaps + 798: 00000000000720d0 613 FUNC GLOBAL DEFAULT 11 _XimThaiCreateIC + 799: 0000000000031940 9 FUNC GLOBAL DEFAULT 11 XAddPixel + 800: 000000000004db80 129 FUNC GLOBAL DEFAULT 11 _XimXTransSetOption + 801: 0000000000099a40 48 FUNC GLOBAL DEFAULT 11 XkbSetNamedIndicator + 802: 0000000000026e20 328 FUNC GLOBAL DEFAULT 11 XGetAtomName + 803: 000000000002d840 94 FUNC GLOBAL DEFAULT 11 XInstallColormap + 804: 000000000004de00 4 FUNC GLOBAL DEFAULT 11 _XimXTransGetConnectionNumber + 805: 000000000003d150 10 FUNC GLOBAL DEFAULT 11 XSetNormalHints + 806: 00000000000519d0 71 FUNC GLOBAL DEFAULT 11 _XlcGetCharSet + 807: 00000000000384f0 1147 FUNC GLOBAL DEFAULT 11 _XrmInternalStringToQuark + 808: 000000000008dc30 354 FUNC GLOBAL DEFAULT 11 XkbSelectEvents + 809: 0000000000034540 206 FUNC GLOBAL DEFAULT 11 XPeekEvent + 810: 000000000005fc30 239 FUNC GLOBAL DEFAULT 11 XmbDrawText + 811: 00000000000431b0 1218 FUNC GLOBAL DEFAULT 11 _XReply + 812: 0000000000057810 18 FUNC GLOBAL DEFAULT 11 _XmbTextPropertyToTextList + 813: 0000000000087290 947 FUNC GLOBAL DEFAULT 11 XcmsCIELuvClipL + 814: 0000000000039b80 110 FUNC GLOBAL DEFAULT 11 XRaiseWindow + 815: 0000000000060ad0 512 FUNC GLOBAL DEFAULT 11 _XimCbDispatch + 816: 0000000000089820 4 FUNC GLOBAL DEFAULT 11 XcmsDisplayOfCCC + 817: 000000000002d320 121 FUNC GLOBAL DEFAULT 11 XESetWireToEvent + 818: 000000000003cee0 87 FUNC GLOBAL DEFAULT 11 XSetFunction + 819: 00000000000520c0 229 FUNC GLOBAL DEFAULT 11 _XlcSetConverter + 820: 0000000000023db0 559 FUNC GLOBAL DEFAULT 11 XFillArcs + 821: 000000000003e1b0 31 FUNC GLOBAL DEFAULT 11 XRotateBuffers + 822: 0000000000098fc0 283 FUNC GLOBAL DEFAULT 11 XkbGetIndicatorState + 823: 000000000002fe30 787 FUNC GLOBAL DEFAULT 11 XListHosts + 824: 000000000003bac0 142 FUNC GLOBAL DEFAULT 11 XUnionRectWithRegion + 825: 000000000009f190 83 FUNC GLOBAL DEFAULT 11 XkbVirtualModsToReal + 826: 0000000000027a30 472 FUNC GLOBAL DEFAULT 11 XGetGCValues + 827: 000000000003ebd0 309 FUNC GLOBAL DEFAULT 11 XStringListToTextProperty + 828: 000000000004b980 565 FUNC GLOBAL DEFAULT 11 _XDefaultOpenIM + 829: 00000000000962e0 47 FUNC GLOBAL DEFAULT 11 _XkbReadCopyKeySyms + 830: 000000000004de10 134 FUNC GLOBAL DEFAULT 11 _XimXTransGetHostname + 831: 000000000033d1c0 48 OBJECT GLOBAL DEFAULT 23 XcmsRGBiColorSpace + 832: 00000000000822f0 304 FUNC GLOBAL DEFAULT 11 XcmsTekHVCQueryMaxVC + 833: 0000000000099ca0 276 FUNC GLOBAL DEFAULT 11 XkbDeviceBellEvent + 834: 000000000002d2a0 126 FUNC GLOBAL DEFAULT 11 XESetCloseDisplay + 835: 000000000009d070 469 FUNC GLOBAL DEFAULT 11 XkbGetDeviceLedInfo + 836: 00000000000a2ec0 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOutlines + 837: 000000000033d7d0 8 OBJECT GLOBAL DEFAULT 24 _Xglobal_lock + 838: 00000000000445c0 100 FUNC GLOBAL DEFAULT 11 _XProcessInternalConnection + 839: 000000000003e010 123 FUNC GLOBAL DEFAULT 11 XSetTSOrigin + 840: 0000000000026780 8 FUNC GLOBAL DEFAULT 11 XContextDependentDrawing + 841: 0000000000045a00 183 FUNC GLOBAL DEFAULT 11 _XScreenOfWindow + 842: 000000000003da70 144 FUNC GLOBAL DEFAULT 11 XChangeKeyboardMapping + 843: 00000000000231f0 43 FUNC GLOBAL DEFAULT 11 XGetErrorDatabaseText + 844: 00000000000579e0 12 FUNC GLOBAL DEFAULT 11 _XlcDestroyLC + 845: 000000000005fff0 9 FUNC GLOBAL DEFAULT 11 Xutf8TextPerCharExtents + 846: 0000000000099dc0 132 FUNC GLOBAL DEFAULT 11 XkbBell + 847: 000000000005fec0 239 FUNC GLOBAL DEFAULT 11 Xutf8DrawText + 848: 0000000000028640 169 FUNC GLOBAL DEFAULT 11 XGetInputFocus + 849: 000000000033d140 24 OBJECT GLOBAL DEFAULT 23 XcmsLinearRGBFunctionSet + 850: 0000000000040fe0 164 FUNC GLOBAL DEFAULT 11 XWarpPointer + 851: 000000000001dfd0 17 FUNC GLOBAL DEFAULT 11 _XEatData + 852: 00000000000857a0 1892 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMaxC + 853: 00000000000318a0 5 FUNC GLOBAL DEFAULT 11 XEventMaskOfScreen + 854: 0000000000037f30 1224 FUNC GLOBAL DEFAULT 11 XPutImage + 855: 0000000000089790 133 FUNC GLOBAL DEFAULT 11 XcmsCIELuvWhiteShiftColors + 856: 0000000000080a80 330 FUNC GLOBAL DEFAULT 11 XcmsTekHVCClipC + 857: 0000000000027c10 342 FUNC GLOBAL DEFAULT 11 XGetGeometry + 858: 000000000033d590 8 OBJECT GLOBAL DEFAULT 23 _XkbGetAtomNameFunc + 859: 0000000000028a60 232 FUNC GLOBAL DEFAULT 11 XGetKeyboardControl + 860: 0000000000085f10 1982 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMaxL + 861: 000000000033aac0 8 OBJECT GLOBAL DEFAULT 23 _XlcGenericMethods + 862: 000000000004fd40 26 FUNC GLOBAL DEFAULT 11 XSetICFocus + 863: 000000000002cec0 149 FUNC GLOBAL DEFAULT 11 XAddExtension + 864: 00000000000347c0 81 FUNC GLOBAL DEFAULT 11 XPending + 865: 000000000003e760 124 FUNC GLOBAL DEFAULT 11 _XInitKeysymDB + 866: 0000000000026200 157 FUNC GLOBAL DEFAULT 11 XFreeGC + 867: 0000000000038a60 108 FUNC GLOBAL DEFAULT 11 XrmQuarkToString + 868: 000000000006a9c0 604 FUNC GLOBAL DEFAULT 11 _XimLocalIMFree + 869: 0000000000031810 4 FUNC GLOBAL DEFAULT 11 XHeightOfScreen + 870: 00000000000a2e00 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomSections + 871: 0000000000026360 24 FUNC GLOBAL DEFAULT 11 XActivateScreenSaver + 872: 0000000000068a00 826 FUNC GLOBAL DEFAULT 11 _XimExtension + 873: 000000000033d710 8 OBJECT GLOBAL DEFAULT 24 _XInitDisplayLock_fn + 874: 0000000000028f30 407 FUNC GLOBAL DEFAULT 11 XGetPointerMapping + 875: 0000000000069990 900 FUNC GLOBAL DEFAULT 11 _XimLocalFilter + 876: 0000000000022b30 551 FUNC GLOBAL DEFAULT 11 XDrawRectangles + 877: 00000000000a4710 38 FUNC GLOBAL DEFAULT 11 XkbAllocKeyboard + 878: 000000000006eef0 131 FUNC GLOBAL DEFAULT 11 _XimGetIMValueData + 879: 00000000000931b0 147 FUNC GLOBAL DEFAULT 11 XkbGetMap + 880: 00000000000202e0 268 FUNC GLOBAL DEFAULT 11 XFindContext + 881: 0000000000080bd0 710 FUNC GLOBAL DEFAULT 11 XcmsTekHVCClipV + 882: 0000000000089860 5 FUNC GLOBAL DEFAULT 11 XcmsClientWhitePointOfCCC + 883: 000000000002f620 309 FUNC GLOBAL DEFAULT 11 _XTranslateKeySym + 884: 0000000000029b60 10 FUNC GLOBAL DEFAULT 11 XGetWMClientMachine + 885: 0000000000051a70 67 FUNC GLOBAL DEFAULT 11 _XlcAddCharSet + 886: 0000000000031c70 5 FUNC GLOBAL DEFAULT 11 XVisualIDFromVisual + 887: 00000000000a37b0 84 FUNC GLOBAL DEFAULT 11 XkbAddGeomKey + 888: 00000000000738e0 151 FUNC GLOBAL DEFAULT 11 _XimTransInternalConnection + 889: 000000000004dc40 9 FUNC GLOBAL DEFAULT 11 _XimXTransReadv + 890: 000000000002cfa0 126 FUNC GLOBAL DEFAULT 11 XESetCreateGC + 891: 0000000000045450 93 FUNC GLOBAL DEFAULT 11 _XIOError + 892: 000000000003eee0 1012 FUNC GLOBAL DEFAULT 11 XDrawString16 + 893: 000000000003b720 45 FUNC GLOBAL DEFAULT 11 XClipBox + 894: 0000000000099ed0 121 FUNC GLOBAL DEFAULT 11 XkbBellEvent + 895: 000000000007d9a0 735 FUNC GLOBAL DEFAULT 11 _XomGenericTextExtents + 896: 0000000000089830 5 FUNC GLOBAL DEFAULT 11 XcmsVisualOfCCC + 897: 0000000000058650 12 FUNC GLOBAL DEFAULT 11 _Xmblen + 898: 00000000000578a0 313 FUNC GLOBAL DEFAULT 11 _XGetLCValues + 899: 0000000000058640 15 FUNC GLOBAL DEFAULT 11 _Xmbtowc + 900: 000000000002cf70 16 FUNC GLOBAL DEFAULT 11 XAddToExtensionList + 901: 00000000000a2a00 37 FUNC GLOBAL DEFAULT 11 XkbFreeGeomKeys + 902: 0000000000069890 179 FUNC GLOBAL DEFAULT 11 _XimServerDestroy + 903: 0000000000097e50 107 FUNC GLOBAL DEFAULT 11 _XkbNoteCoreMapChanges + 904: 0000000000031c30 8 FUNC GLOBAL DEFAULT 11 XResourceManagerString + 905: 000000000004dd00 128 FUNC GLOBAL DEFAULT 11 _XimXTransGetMyAddr + 906: 000000000007d980 15 FUNC GLOBAL DEFAULT 11 _XwcGenericTextEscapement + 907: 000000000007ec80 326 FUNC GLOBAL DEFAULT 11 XcmsAddFunctionSet + 908: 00000000000440a0 52 FUNC GLOBAL DEFAULT 11 _XPollfdCacheInit + 909: 0000000000066bb0 32 FUNC GLOBAL DEFAULT 11 _XimDispatchInit + 910: 000000000033d260 48 OBJECT GLOBAL DEFAULT 23 XcmsCIELabColorSpace + 911: 000000000003c410 138 FUNC GLOBAL DEFAULT 11 XRotateWindowProperties + 912: 0000000000084a00 1519 FUNC GLOBAL DEFAULT 11 XcmsCIELabClipLab + 913: 000000000006f6d0 313 FUNC GLOBAL DEFAULT 11 _XimInitialResourceInfo + 914: 0000000000031870 4 FUNC GLOBAL DEFAULT 11 XMaxCmapsOfScreen + 915: 000000000002d1a0 126 FUNC GLOBAL DEFAULT 11 XESetCreateFont + 916: 0000000000044a40 100 FUNC GLOBAL DEFAULT 11 _XCopyEventCookie + 917: 0000000000030880 66 FUNC GLOBAL DEFAULT 11 XUnlockDisplay + 918: 000000000007ca80 39 FUNC GLOBAL DEFAULT 11 _XmbGenericDrawImageString + 919: 000000000033cfe0 48 OBJECT GLOBAL DEFAULT 23 XcmsTekHVCColorSpace + 920: 000000000001eb60 94 FUNC GLOBAL DEFAULT 11 XSetCloseDownMode + 921: 000000000003d240 374 FUNC GLOBAL DEFAULT 11 XSetCommand + 922: 0000000000031190 597 FUNC GLOBAL DEFAULT 11 XLookupColor + 923: 00000000000205b0 208 FUNC GLOBAL DEFAULT 11 XCopyArea + 924: 000000000003e3c0 306 FUNC GLOBAL DEFAULT 11 XStoreColors + 925: 0000000000029830 201 FUNC GLOBAL DEFAULT 11 XGetScreenSaver + 926: 0000000000023ab0 224 FUNC GLOBAL DEFAULT 11 XFetchName + 927: 000000000003c580 104 FUNC GLOBAL DEFAULT 11 XSelectInput + 928: 000000000004fd90 19 FUNC GLOBAL DEFAULT 11 XmbResetIC + 929: 000000000008f000 357 FUNC GLOBAL DEFAULT 11 XkbSetPerClientControls + 930: 000000000005f5c0 86 FUNC GLOBAL DEFAULT 11 XmbTextListToTextProperty + 931: 0000000000026090 133 FUNC GLOBAL DEFAULT 11 XFreeColors + 932: 000000000007f460 311 FUNC GLOBAL DEFAULT 11 _XcmsEqualWhitePts + 933: 0000000000033990 1346 FUNC GLOBAL DEFAULT 11 XrmParseCommand + 934: 0000000000069060 462 FUNC GLOBAL DEFAULT 11 _XimRegisterIMInstantiateCallback + 935: 000000000005f680 86 FUNC GLOBAL DEFAULT 11 Xutf8TextListToTextProperty + 936: 00000000000a4110 148 FUNC GLOBAL DEFAULT 11 XkbFreeCompatMap + 937: 000000000003a190 163 FUNC GLOBAL DEFAULT 11 XRecolorCursor + 938: 000000000009caa0 453 FUNC GLOBAL DEFAULT 11 XkbGetDeviceInfo + 939: 000000000006ea00 131 FUNC GLOBAL DEFAULT 11 _XimSetIMValueData + 940: 00000000000391c0 185 FUNC GLOBAL DEFAULT 11 XQueryKeymap + 941: 000000000008dda0 683 FUNC GLOBAL DEFAULT 11 XkbSelectEventDetails + 942: 00000000000442d0 292 FUNC GLOBAL DEFAULT 11 _XRegisterInternalConnection + 943: 000000000006e340 37 FUNC GLOBAL DEFAULT 11 _XimGetResourceListRec + 944: 0000000000031c20 7 FUNC GLOBAL DEFAULT 11 XMaxRequestSize + 945: 000000000005f450 23 FUNC GLOBAL DEFAULT 11 XSupportsLocale + 946: 000000000007dcc0 21 FUNC GLOBAL DEFAULT 11 _Xutf8GenericTextExtents + 947: 00000000000a2730 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomProperties + 948: 0000000000031750 15 FUNC GLOBAL DEFAULT 11 XScreenOfDisplay + 949: 000000000005ffc0 12 FUNC GLOBAL DEFAULT 11 Xutf8DrawImageString + 950: 00000000000284a0 410 FUNC GLOBAL DEFAULT 11 XGetClassHint + 951: 00000000000a27a0 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomColors + 952: 00000000000a2f40 489 FUNC GLOBAL DEFAULT 11 XkbAllocGeometry + 953: 000000000005f6e0 34 FUNC GLOBAL DEFAULT 11 XwcFreeStringList + 954: 00000000000314c0 19 FUNC GLOBAL DEFAULT 11 XDefaultVisual + 955: 00000000000408d0 94 FUNC GLOBAL DEFAULT 11 XUninstallColormap + 956: 0000000000070000 225 FUNC GLOBAL DEFAULT 11 _XimMakeIMAttrIDList + 957: 000000000002fdd0 94 FUNC GLOBAL DEFAULT 11 XKillClient + 958: 000000000008f730 240 FUNC GLOBAL DEFAULT 11 _XkbReloadDpy + 959: 00000000000656f0 22 FUNC GLOBAL DEFAULT 11 _XimRespSyncReply + 960: 00000000000307b0 199 FUNC GLOBAL DEFAULT 11 XLockDisplay + 961: 0000000000032680 81 FUNC GLOBAL DEFAULT 11 XCloseOM + 962: 000000000003b970 333 FUNC GLOBAL DEFAULT 11 XUnionRegion + 963: 0000000000065eb0 349 FUNC GLOBAL DEFAULT 11 _XimError + 964: 000000000007e340 61 FUNC GLOBAL DEFAULT 11 _XmbGenericTextPerCharExtents + 965: 0000000000031c90 300 FUNC GLOBAL DEFAULT 11 XGetModifierMapping + 966: 000000000008c350 883 FUNC GLOBAL DEFAULT 11 XcmsLookupColor + 967: 000000000008a1a0 248 FUNC GLOBAL DEFAULT 11 XcmsStoreColors + 968: 000000000008a380 115 FUNC GLOBAL DEFAULT 11 _XcmsResolveColor + 969: 00000000000a2ae0 178 FUNC GLOBAL DEFAULT 11 XkbFreeGeomDoodads + 970: 000000000011bee9 4 OBJECT GLOBAL DEFAULT 13 _XcmsRGB_prefix + 971: 000000000005f960 178 FUNC GLOBAL DEFAULT 11 _XlcGetValues + 972: 000000000004a0c0 45 FUNC GLOBAL DEFAULT 11 XrmInitialize + 973: 000000000006e230 23 FUNC GLOBAL DEFAULT 11 _XimSetIMResourceList + 974: 0000000000066010 199 FUNC GLOBAL DEFAULT 11 _XimRegisterTriggerKeysCallback + 975: 00000000000a2e80 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomDoodads + 976: 00000000000a3bf0 299 FUNC GLOBAL DEFAULT 11 XkbAddGeomOverlayKey + 977: 000000000008f820 418 FUNC GLOBAL DEFAULT 11 XkbKeycodeToKeysym + 978: 0000000000054670 960 FUNC GLOBAL DEFAULT 11 _XlcLocaleDirName + 979: 000000000003d710 164 FUNC GLOBAL DEFAULT 11 XSetLineAttributes + 980: 000000000004a0f0 81 FUNC GLOBAL DEFAULT 11 XrmGetDatabase + 981: 0000000000054a30 1240 FUNC GLOBAL DEFAULT 11 _XlcLocaleLibDirName + 982: 0000000000099a70 276 FUNC GLOBAL DEFAULT 11 XkbDeviceBell + 983: 000000000005f3d0 116 FUNC GLOBAL DEFAULT 11 XSetLocaleModifiers + 984: 0000000000031eb0 95 FUNC GLOBAL DEFAULT 11 XNewModifiermap + 985: 0000000000040930 94 FUNC GLOBAL DEFAULT 11 XUnloadFont + 986: 000000000008d5f0 236 FUNC GLOBAL DEFAULT 11 XcmsCIEXYZToCIExyY + 987: 000000000033ddf8 8 OBJECT GLOBAL DEFAULT 24 _Xi18n_lock + 988: 0000000000028b50 373 FUNC GLOBAL DEFAULT 11 XGetMotionEvents + 989: 0000000000094480 1629 FUNC GLOBAL DEFAULT 11 _XkbReadGetNamesReply + 990: 000000000008f410 82 FUNC GLOBAL DEFAULT 11 XkbSetAtomFuncs + 991: 00000000000924a0 3027 FUNC GLOBAL DEFAULT 11 _XkbReadGetMapReply + 992: 000000000008d200 49 FUNC GLOBAL DEFAULT 11 _XcmsCIEuvY_ValidSpec + 993: 0000000000030600 36 FUNC GLOBAL DEFAULT 11 XFreeExtensionList + 994: 00000000000974f0 913 FUNC GLOBAL DEFAULT 11 XkbSetMap + 995: 000000000008b400 68 FUNC GLOBAL DEFAULT 11 _XcmsCopyISOLatin1Lowered + 996: 000000000033d7a8 8 OBJECT GLOBAL DEFAULT 24 _Xthread_self_fn + 997: 000000000001ead0 7 FUNC GLOBAL DEFAULT 11 XDisableAccessControl + 998: 000000000003be50 204 FUNC GLOBAL DEFAULT 11 XEqualRegion + 999: 0000000000034920 104 FUNC GLOBAL DEFAULT 11 XSetWindowBorderPixmap + 1000: 0000000000069840 72 FUNC GLOBAL DEFAULT 11 _XimDestroyIMStructureList + 1001: 0000000000040880 78 FUNC GLOBAL DEFAULT 11 XUngrabServer + 1002: 000000000009cea0 453 FUNC GLOBAL DEFAULT 11 XkbGetDeviceButtonActions + 1003: 000000000008cce0 473 FUNC GLOBAL DEFAULT 11 _XcmsCosine + 1004: 0000000000062eb0 31 FUNC GLOBAL DEFAULT 11 _XimSetHeader + 1005: 0000000000034610 340 FUNC GLOBAL DEFAULT 11 XPeekIfEvent + 1006: 000000000005f930 46 FUNC GLOBAL DEFAULT 11 _XlcCompileResourceList + 1007: 00000000000458e0 122 FUNC GLOBAL DEFAULT 11 _XData32 + 1008: 000000000004a150 189 FUNC GLOBAL DEFAULT 11 XrmStringToQuarkList + 1009: 0000000000029b50 10 FUNC GLOBAL DEFAULT 11 XGetWMIconName + 1010: 000000000008a420 32 FUNC GLOBAL DEFAULT 11 _XUnresolveColor + 1011: 000000000033d380 48 OBJECT GLOBAL DEFAULT 23 XcmsCIEXYZColorSpace + 1012: 0000000000079c30 104 FUNC GLOBAL DEFAULT 11 _XmbDefaultDrawImageString + 1013: 0000000000050070 5 FUNC GLOBAL DEFAULT 11 XDisplayOfIM + 1014: 000000000004ffc0 85 FUNC GLOBAL DEFAULT 11 XOpenIM + 1015: 000000000008ed20 357 FUNC GLOBAL DEFAULT 11 XkbSetAutoResetControls + 1016: 0000000000087110 378 FUNC GLOBAL DEFAULT 11 XcmsCIELuvClipuv + 1017: 000000000003f2e0 988 FUNC GLOBAL DEFAULT 11 XDrawString + 1018: 00000000000844c0 378 FUNC GLOBAL DEFAULT 11 XcmsCIELabClipab + 1019: 000000000006e9e0 27 FUNC GLOBAL DEFAULT 11 _XimEncodeLocalIMAttr + 1020: 0000000000020b80 177 FUNC GLOBAL DEFAULT 11 XCreateColormap + 1021: 0000000000084ff0 1966 FUNC GLOBAL DEFAULT 11 XcmsCIELabQueryMinL + 1022: 0000000000027e50 329 FUNC GLOBAL DEFAULT 11 XGetSizeHints + 1023: 000000000005fd30 9 FUNC GLOBAL DEFAULT 11 XmbDrawImageString + 1024: 00000000000515d0 758 FUNC GLOBAL DEFAULT 11 _XlcAddCT + 1025: 000000000001f5b0 141 FUNC GLOBAL DEFAULT 11 XChangePointerControl + 1026: 000000000004b2f0 167 FUNC GLOBAL DEFAULT 11 XrmDestroyDatabase + 1027: 00000000000316e0 4 FUNC GLOBAL DEFAULT 11 XBitmapPad + 1028: 000000000008e050 237 FUNC GLOBAL DEFAULT 11 XkbLockModifiers + 1029: 00000000000444c0 250 FUNC GLOBAL DEFAULT 11 XInternalConnectionNumbers + 1030: 000000000003a390 750 FUNC GLOBAL DEFAULT 11 XReconfigureWMWindow + 1031: 0000000000041500 942 FUNC GLOBAL DEFAULT 11 XWMGeometry + 1032: 0000000000090d20 563 FUNC GLOBAL DEFAULT 11 _XkbReadGetCompatMapReply + 1033: 0000000000086d30 428 FUNC GLOBAL DEFAULT 11 XcmsCIEuvYToCIELuv + 1034: 000000000005f4a0 88 FUNC GLOBAL DEFAULT 11 XmbTextPropertyToTextList + 1035: 000000000006a1d0 107 FUNC GLOBAL DEFAULT 11 _XimLocalSetIMValues + 1036: 000000000005f560 88 FUNC GLOBAL DEFAULT 11 Xutf8TextPropertyToTextList + 1037: 0000000000029790 160 FUNC GLOBAL DEFAULT 11 XGetSelectionOwner + 1038: 000000000003de60 194 FUNC GLOBAL DEFAULT 11 XSetStandardColormap + 1039: 0000000000031900 6 FUNC GLOBAL DEFAULT 11 XDestroyImage + 1040: 00000000000a0ab0 1953 FUNC GLOBAL DEFAULT 11 XkbResizeKeyType + 1041: 000000000033a740 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketLocalFuncs + 1042: 0000000000031660 4 FUNC GLOBAL DEFAULT 11 XVendorRelease + 1043: 00000000000320f0 124 FUNC GLOBAL DEFAULT 11 XMoveWindow + 1044: 0000000000030630 370 FUNC GLOBAL DEFAULT 11 XLoadFont + 1045: 000000000003d610 116 FUNC GLOBAL DEFAULT 11 XSetInputFocus + 1046: 000000000008e4d0 583 FUNC GLOBAL DEFAULT 11 XkbSetDebuggingFlags + 1047: 0000000000044b60 3 FUNC GLOBAL DEFAULT 11 _XUnknownNativeEvent + 1048: 0000000000065850 89 FUNC GLOBAL DEFAULT 11 _XimGetWindowEventmask + 1049: 0000000000066180 666 FUNC GLOBAL DEFAULT 11 _XimCommitCallback + 1050: 00000000000518d0 244 FUNC GLOBAL DEFAULT 11 _XlcInitCTInfo + 1051: 0000000000060110 9 FUNC GLOBAL DEFAULT 11 XwcTextEscapement + 1052: 0000000000078a90 925 FUNC GLOBAL DEFAULT 11 _XlcGenericLoader + 1053: 000000000009a2c0 683 FUNC GLOBAL DEFAULT 11 XkbComputeRowBounds + 1054: 0000000000058540 253 FUNC GLOBAL DEFAULT 11 _Xlcmbstowcs + 1055: 0000000000025d40 640 FUNC GLOBAL DEFAULT 11 XListFonts + 1056: 0000000000021fc0 48 FUNC GLOBAL DEFAULT 11 XDisplayName + 1057: 000000000006e270 23 FUNC GLOBAL DEFAULT 11 _XimSetInnerIMResourceList + 1058: 0000000000031700 62 FUNC GLOBAL DEFAULT 11 XNextRequest + 1059: 0000000000026380 21 FUNC GLOBAL DEFAULT 11 XResetScreenSaver + 1060: 000000000003cb10 218 FUNC GLOBAL DEFAULT 11 XSetDashes + 1061: 000000000004d150 477 FUNC GLOBAL DEFAULT 11 _XDefaultOpenOM + 1062: 000000000007d970 12 FUNC GLOBAL DEFAULT 11 _XmbGenericTextEscapement + 1063: 000000000003ee80 96 FUNC GLOBAL DEFAULT 11 XSetAfterFunction + 1064: 00000000000a28f0 37 FUNC GLOBAL DEFAULT 11 XkbFreeGeomOverlayKeys + 1065: 000000000006c0b0 12 FUNC GLOBAL DEFAULT 11 _XimLcctstombs + 1066: 000000000008c130 145 FUNC GLOBAL DEFAULT 11 _XcmsInitDefaultCCCs + 1067: 0000000000026840 90 FUNC GLOBAL DEFAULT 11 XSetFillRule + 1068: 00000000000a2e20 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOverlays + 1069: 000000000006a170 90 FUNC GLOBAL DEFAULT 11 _XimLocalGetIMValues + 1070: 0000000000026740 18 FUNC GLOBAL DEFAULT 11 XFontsOfFontSet + 1071: 000000000003ccc0 531 FUNC GLOBAL DEFAULT 11 XSetFontPath + 1072: 0000000000090730 92 FUNC GLOBAL DEFAULT 11 XkbToControl + 1073: 00000000000a2f20 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomKeys + 1074: 000000000005f880 165 FUNC GLOBAL DEFAULT 11 _XlcVaToArgList + 1075: 0000000000031680 18 FUNC GLOBAL DEFAULT 11 XDefaultDepth + 1076: 000000000008db30 183 FUNC GLOBAL DEFAULT 11 XkbQueryExtension + 1077: 000000000005f150 437 FUNC GLOBAL DEFAULT 11 _XOpenLC + 1078: 000000000033ddf0 4 OBJECT GLOBAL DEFAULT 24 _Xdebug + 1079: 000000000004db30 77 FUNC GLOBAL DEFAULT 11 _XimXTransFreeConnInfo + 1080: 0000000000050090 89 FUNC GLOBAL DEFAULT 11 XRegisterIMInstantiateCallback + 1081: 0000000000096440 59 FUNC GLOBAL DEFAULT 11 _XkbPeekAtReadBuffer + 1082: 000000000033d7b0 8 OBJECT GLOBAL DEFAULT 24 _XUnlockMutex_fn + 1083: 000000000003e090 47 FUNC GLOBAL DEFAULT 11 XSetTextProperty + 1084: 0000000000058890 83 FUNC GLOBAL DEFAULT 11 _Xwcsncmp + 1085: 0000000000090680 173 FUNC GLOBAL DEFAULT 11 XkbLookupKeyBinding + 1086: 0000000000090220 417 FUNC GLOBAL DEFAULT 11 XkbRefreshKeyboardMapping + 1087: 000000000007dc80 18 FUNC GLOBAL DEFAULT 11 _XmbGenericTextExtents + 1088: 00000000000262a0 94 FUNC GLOBAL DEFAULT 11 XFreePixmap + 1089: 000000000006e2f0 66 FUNC GLOBAL DEFAULT 11 _XimGetResourceListRecByQuark + 1090: 0000000000031860 4 FUNC GLOBAL DEFAULT 11 XMinCmapsOfScreen + 1091: 000000000008ae40 226 FUNC GLOBAL DEFAULT 11 _XcmsCopyCmapRecAndFree + 1092: 000000000004a610 224 FUNC GLOBAL DEFAULT 11 XrmQPutStringResource + 1093: 0000000000038ad0 270 FUNC GLOBAL DEFAULT 11 XQueryBestSize + 1094: 000000000002c1d0 60 FUNC GLOBAL DEFAULT 11 _XGetScanlinePad + 1095: 000000000001dfe1 48 FUNC GLOBAL DEFAULT 11 _XEatDataWords + 1096: 00000000000440e0 41 FUNC GLOBAL DEFAULT 11 _XPollfdCacheAdd + 1097: 0000000000058850 61 FUNC GLOBAL DEFAULT 11 _Xwcscmp + 1098: 000000000002a720 68 FUNC GLOBAL DEFAULT 11 XAddHosts + 1099: 00000000000430a0 67 FUNC GLOBAL DEFAULT 11 _XAllocID + 1100: 0000000000039a00 380 FUNC GLOBAL DEFAULT 11 XQueryTree + 1101: 00000000000277b0 503 FUNC GLOBAL DEFAULT 11 XGetFontPath + 1102: 000000000004a300 344 FUNC GLOBAL DEFAULT 11 XrmCombineDatabase + 1103: 000000000009fb80 1029 FUNC GLOBAL DEFAULT 11 XkbApplyVirtualModChanges + 1104: 00000000000365f0 387 FUNC GLOBAL DEFAULT 11 _XPutBackEvent + 1105: 000000000003c790 113 FUNC GLOBAL DEFAULT 11 XSetClipMask + 1106: 000000000003c730 87 FUNC GLOBAL DEFAULT 11 XSetBackground + 1107: 000000000004f670 313 FUNC GLOBAL DEFAULT 11 XSetIMValues + 1108: 00000000000263a0 414 FUNC GLOBAL DEFAULT 11 _XParseBaseFontNameList + 1109: 000000000011bf15 7 OBJECT GLOBAL DEFAULT 13 _XcmsCIEXYZ_prefix + 1110: 0000000000094ae0 427 FUNC GLOBAL DEFAULT 11 XkbGetNames + 1111: 0000000000040820 94 FUNC GLOBAL DEFAULT 11 XUngrabPointer + 1112: 00000000000261d0 44 FUNC GLOBAL DEFAULT 11 XFreeEventData + 1113: 000000000003bfa0 286 FUNC GLOBAL DEFAULT 11 XRectInRegion + 1114: 0000000000026f70 568 FUNC GLOBAL DEFAULT 11 XGetAtomNames + 1115: 0000000000026300 94 FUNC GLOBAL DEFAULT 11 XForceScreenSaver + 1116: 00000000000a14f0 810 FUNC GLOBAL DEFAULT 11 XkbResizeKeySyms + 1117: 000000000004a6f0 260 FUNC GLOBAL DEFAULT 11 XrmPutStringResource + 1118: 0000000000086b40 133 FUNC GLOBAL DEFAULT 11 XcmsCIELabWhiteShiftColors + 1119: 000000000004fa50 111 FUNC GLOBAL DEFAULT 11 XDestroyIC + 1120: 000000000008a400 31 FUNC GLOBAL DEFAULT 11 _XcmsUnresolveColor + 1121: 0000000000020970 216 FUNC GLOBAL DEFAULT 11 XCopyPlane + 1122: 000000000009e470 1871 FUNC GLOBAL DEFAULT 11 XkbKeyTypesForCoreSymbols + 1123: 0000000000070900 2168 FUNC GLOBAL DEFAULT 11 _XimEncodeICATTRIBUTE + 1124: 000000000007e800 603 FUNC GLOBAL DEFAULT 11 _XomConvert + 1125: 0000000000022d60 551 FUNC GLOBAL DEFAULT 11 XDrawSegments + 1126: 00000000000394e0 528 FUNC GLOBAL DEFAULT 11 XQueryTextExtents16 + 1127: 000000000004a880 90 FUNC GLOBAL DEFAULT 11 XrmGetStringDatabase + 1128: 000000000002b330 774 FUNC GLOBAL DEFAULT 11 XDrawImageString + 1129: 00000000000611b0 86 FUNC GLOBAL DEFAULT 11 _XimRegisterServerFilter + 1130: 000000000004a470 168 FUNC GLOBAL DEFAULT 11 XrmQPutResource + 1131: 000000000004fdd0 36 FUNC GLOBAL DEFAULT 11 Xutf8ResetIC + 1132: 0000000000091980 868 FUNC GLOBAL DEFAULT 11 XkbGetControls + 1133: 000000000006bb20 703 FUNC GLOBAL DEFAULT 11 _XimLocalWcLookupString + 1134: 00000000000348b0 104 FUNC GLOBAL DEFAULT 11 XSetWindowBackgroundPixmap + 1135: 000000000002a4a0 310 FUNC GLOBAL DEFAULT 11 XAddHost + 1136: 000000000005ffd0 9 FUNC GLOBAL DEFAULT 11 Xutf8TextEscapement + 1137: 000000000004a210 229 FUNC GLOBAL DEFAULT 11 XrmStringToBindingQuarkList + 1138: 00000000000a2aa0 49 FUNC GLOBAL DEFAULT 11 XkbFreeGeomSections + 1139: 0000000000031890 4 FUNC GLOBAL DEFAULT 11 XDoesBackingStore + 1140: 000000000033dde0 8 OBJECT GLOBAL DEFAULT 24 _XErrorFunction + 1141: 00000000000961c0 95 FUNC GLOBAL DEFAULT 11 _XkbInitReadBuffer + 1142: 0000000000044b70 1562 FUNC GLOBAL DEFAULT 11 _XWireToEvent + 1143: 00000000000964c0 89 FUNC GLOBAL DEFAULT 11 _XkbFreeReadBuffer + 1144: 0000000000096410 46 FUNC GLOBAL DEFAULT 11 _XkbWriteCopyData32 + 1145: 0000000000069f30 567 FUNC GLOBAL DEFAULT 11 _XimLocalCreateIC + 1146: 0000000000045870 101 FUNC GLOBAL DEFAULT 11 _XFreeEventCookies + 1147: 000000000007ffb0 81 FUNC GLOBAL DEFAULT 11 _XcmsRegFormatOfPrefix + 1148: 000000000002f9a0 274 FUNC GLOBAL DEFAULT 11 _XKeysymToModifiers + 1149: 00000000000658f0 404 FUNC GLOBAL DEFAULT 11 _XimSync + 1150: 0000000000060120 9 FUNC GLOBAL DEFAULT 11 XwcTextExtents + 1151: 00000000000a2ea0 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomSectionDoodads + 1152: 0000000000034250 747 FUNC GLOBAL DEFAULT 11 XParseGeometry + 1153: 0000000000054640 38 FUNC GLOBAL DEFAULT 11 _XlcResolveI18NPath + 1154: 000000000006e520 670 FUNC GLOBAL DEFAULT 11 _XimCheckICMode + 1155: 000000000002d3a0 137 FUNC GLOBAL DEFAULT 11 XESetWireToEventCookie + 1156: 0000000000023fe0 429 FUNC GLOBAL DEFAULT 11 XFillPolygon + 1157: 000000000008b110 36 FUNC GLOBAL DEFAULT 11 XcmsSetCCCOfColormap + 1158: 0000000000080210 1079 FUNC GLOBAL DEFAULT 11 XcmsCIEuvYToTekHVC + 1159: 0000000000031c50 22 FUNC GLOBAL DEFAULT 11 XDisplayKeycodes + 1160: 00000000000a38c0 467 FUNC GLOBAL DEFAULT 11 XkbAddGeomSection + 1161: 0000000000031560 18 FUNC GLOBAL DEFAULT 11 XDisplayWidth + 1162: 000000000001ef90 449 FUNC GLOBAL DEFAULT 11 XCheckMaskEvent + 1163: 0000000000026770 16 FUNC GLOBAL DEFAULT 11 XLocaleOfFontSet + 1164: 000000000003e500 92 FUNC GLOBAL DEFAULT 11 XStoreName + 1165: 0000000000029b40 10 FUNC GLOBAL DEFAULT 11 XGetWMName + 1166: 00000000000452c0 6 FUNC GLOBAL DEFAULT 11 _XDefaultWireError + 1167: 000000000002d430 137 FUNC GLOBAL DEFAULT 11 XESetCopyEventCookie + 1168: 000000000008d870 700 FUNC GLOBAL DEFAULT 11 XcmsCIExyYToCIEXYZ + 1169: 00000000000a2e40 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomOverlayRows + 1170: 0000000000096520 187 FUNC GLOBAL DEFAULT 11 _XkbGetReadBufferCountedString + 1171: 000000000005e930 226 FUNC GLOBAL DEFAULT 11 _XlcAddUtf8Converters + 1172: 00000000000282c0 236 FUNC GLOBAL DEFAULT 11 XGetCommand + 1173: 000000000003e0f0 96 FUNC GLOBAL DEFAULT 11 XSetWMColormapWindows + 1174: 000000000001fa40 7 FUNC GLOBAL DEFAULT 11 XAddToSaveSet + 1175: 00000000000643c0 659 FUNC GLOBAL DEFAULT 11 _XimProtoIMFree + 1176: 000000000008cb10 462 FUNC GLOBAL DEFAULT 11 _XcmsSine + 1177: 000000000003ee10 112 FUNC GLOBAL DEFAULT 11 XSynchronize + 1178: 000000000005eec0 236 FUNC GLOBAL DEFAULT 11 _XlcValidModSyntax + 1179: 000000000009a0b0 267 FUNC GLOBAL DEFAULT 11 XkbComputeShapeBounds + 1180: 0000000000031c40 8 FUNC GLOBAL DEFAULT 11 XDisplayMotionBufferSize + 1181: 000000000002d700 126 FUNC GLOBAL DEFAULT 11 XESetPrintErrorValues + 1182: 000000000004f0c0 40 FUNC GLOBAL DEFAULT 11 _XimXTransOpenCLTSClient + 1183: 000000000009db00 438 FUNC GLOBAL DEFAULT 11 XkbFreeComponentList + 1184: 000000000005f3a0 40 FUNC GLOBAL DEFAULT 11 _XlcCurrentLC + 1185: 000000000003e560 92 FUNC GLOBAL DEFAULT 11 XSetIconName + 1186: 0000000000039090 296 FUNC GLOBAL DEFAULT 11 XQueryExtension + 1187: 000000000003e0d0 10 FUNC GLOBAL DEFAULT 11 XSetWMIconName + 1188: 000000000008e230 239 FUNC GLOBAL DEFAULT 11 XkbLockGroup + 1189: 0000000000069950 59 FUNC GLOBAL DEFAULT 11 _XInitIM + 1190: 000000000002d4c0 121 FUNC GLOBAL DEFAULT 11 XESetEventToWire + 1191: 0000000000057240 50 FUNC GLOBAL DEFAULT 11 _XlcInitLoader + 1192: 000000000033d460 16 OBJECT GLOBAL DEFAULT 23 _XcmsSCCFuncSetsInit + 1193: 00000000000456d0 111 FUNC GLOBAL DEFAULT 11 _XAllocScratch + 1194: 000000000005fd50 9 FUNC GLOBAL DEFAULT 11 XmbTextExtents + 1195: 00000000000523e0 18 FUNC GLOBAL DEFAULT 11 _XlcResetConverter + 1196: 00000000000586b0 89 FUNC GLOBAL DEFAULT 11 _Xwcsncpy + 1197: 0000000000032df0 2963 FUNC GLOBAL DEFAULT 11 XOpenDisplay + 1198: 000000000003c360 163 FUNC GLOBAL DEFAULT 11 XRestackWindows + 1199: 00000000000318b0 66 FUNC GLOBAL DEFAULT 11 XScreenNumberOfScreen + 1200: 00000000000a4490 406 FUNC GLOBAL DEFAULT 11 XkbFreeNames + 1201: 00000000000a3aa0 331 FUNC GLOBAL DEFAULT 11 XkbAddGeomDoodad + 1202: 0000000000043060 55 FUNC GLOBAL DEFAULT 11 _XFlush + 1203: 0000000000025770 1311 FUNC GLOBAL DEFAULT 11 XListFontsWithInfo + 1204: 000000000002aec0 347 FUNC GLOBAL DEFAULT 11 _XimLookupUTF8Text + 1205: 0000000000021570 222 FUNC GLOBAL DEFAULT 11 _XNoticeCreateBitmap + 1206: 000000000007e380 64 FUNC GLOBAL DEFAULT 11 _XwcGenericTextPerCharExtents + 1207: 000000000003df30 103 FUNC GLOBAL DEFAULT 11 XSetStipple + 1208: 000000000005ffb0 12 FUNC GLOBAL DEFAULT 11 Xutf8DrawString + 1209: 000000000006e430 226 FUNC GLOBAL DEFAULT 11 _XimSetICMode + 1210: 0000000000058400 309 FUNC GLOBAL DEFAULT 11 _Xlcwctomb + 1211: 0000000000025220 50 FUNC GLOBAL DEFAULT 11 _XF86BigfontFreeFontMetrics + 1212: 00000000000a3520 151 FUNC GLOBAL DEFAULT 11 XkbAddGeomOutline + 1213: 00000000000389b0 67 FUNC GLOBAL DEFAULT 11 XrmPermStringToQuark + 1214: 000000000001e550 272 FUNC GLOBAL DEFAULT 11 XAllocColorCells + 1215: 0000000000028a00 84 FUNC GLOBAL DEFAULT 11 XGetSubImage + 1216: 00000000000214d0 5 FUNC GLOBAL DEFAULT 11 XGContextFromGC + 1217: 0000000000058680 36 FUNC GLOBAL DEFAULT 11 _Xwcscpy + 1218: 0000000000082680 165 FUNC GLOBAL DEFAULT 11 XcmsTekHVCWhiteShiftColors + 1219: 000000000004dc20 9 FUNC GLOBAL DEFAULT 11 _XimXTransRead + 1220: 000000000002d540 189 FUNC GLOBAL DEFAULT 11 XESetWireToError + 1221: 00000000000223a0 413 FUNC GLOBAL DEFAULT 11 XDrawLines + 1222: 000000000003cbf0 101 FUNC GLOBAL DEFAULT 11 XSetFont + 1223: 0000000000023b90 224 FUNC GLOBAL DEFAULT 11 XGetIconName + 1224: 00000000000326e0 313 FUNC GLOBAL DEFAULT 11 XSetOMValues + 1225: 00000000000283b0 240 FUNC GLOBAL DEFAULT 11 XGetTransientForHint + 1226: 0000000000031760 19 FUNC GLOBAL DEFAULT 11 XDefaultScreenOfDisplay + 1227: 000000000002aae0 499 FUNC GLOBAL DEFAULT 11 _XimLookupMBText + 1228: 0000000000058fc0 34 FUNC GLOBAL DEFAULT 11 _Xutf8TextListToTextProperty + 1229: 0000000000031470 19 FUNC GLOBAL DEFAULT 11 XRootWindow + 1230: 000000000002ace0 476 FUNC GLOBAL DEFAULT 11 _XimLookupWCText + 1231: 0000000000031460 4 FUNC GLOBAL DEFAULT 11 XConnectionNumber + 1232: 000000000009d730 3 FUNC GLOBAL DEFAULT 11 XkbSetDeviceLedInfo + 1233: 0000000000032960 5 FUNC GLOBAL DEFAULT 11 XDisplayOfOM + 1234: 00000000000279e0 67 FUNC GLOBAL DEFAULT 11 XGetFontProperty + 1235: 000000000007e3c0 64 FUNC GLOBAL DEFAULT 11 _Xutf8GenericTextPerCharExtents + 1236: 0000000000032620 93 FUNC GLOBAL DEFAULT 11 XOpenOM + 1237: 0000000000028cd0 389 FUNC GLOBAL DEFAULT 11 XGetWMSizeHints + 1238: 000000000003a0f0 152 FUNC GLOBAL DEFAULT 11 XReadBitmapFile + 1239: 000000000003c2e0 121 FUNC GLOBAL DEFAULT 11 XReparentWindow + 1240: 000000000008af30 172 FUNC GLOBAL DEFAULT 11 _XcmsDeleteCmapRec + 1241: 0000000000045770 44 FUNC GLOBAL DEFAULT 11 _XFreeTemp + 1242: 000000000006edf0 216 FUNC GLOBAL DEFAULT 11 _XimCheckLocalInputStyle + 1243: 0000000000074e70 436 FUNC GLOBAL DEFAULT 11 _XlcDefaultLoader + 1244: 000000000005fd60 9 FUNC GLOBAL DEFAULT 11 XmbTextPerCharExtents + 1245: 000000000006f260 65 FUNC GLOBAL DEFAULT 11 _XimSetCurrentIMValues + 1246: 000000000004f560 268 FUNC GLOBAL DEFAULT 11 XVaCreateNestedList + 1247: 000000000004dc70 59 FUNC GLOBAL DEFAULT 11 _XimXTransClose + 1248: 0000000000043680 244 FUNC GLOBAL DEFAULT 11 _XRead + 1249: 0000000000044940 242 FUNC GLOBAL DEFAULT 11 _XFetchEventCookie + 1250: 0000000000026960 96 FUNC GLOBAL DEFAULT 11 XSetSubwindowMode + 1251: 0000000000032820 313 FUNC GLOBAL DEFAULT 11 XGetOMValues + 1252: 000000000005ffe0 9 FUNC GLOBAL DEFAULT 11 Xutf8TextExtents + 1253: 000000000001fbe0 98 FUNC GLOBAL DEFAULT 11 XCirculateSubwindowsDown + 1254: 000000000003a240 336 FUNC GLOBAL DEFAULT 11 XConfigureWindow + 1255: 000000000003e320 7 FUNC GLOBAL DEFAULT 11 XStoreBytes + 1256: 0000000000044800 262 FUNC GLOBAL DEFAULT 11 XRemoveConnectionWatch + 1257: 000000000002cf60 4 FUNC GLOBAL DEFAULT 11 XEHeadOfExtensionList + 1258: 000000000004a460 10 FUNC GLOBAL DEFAULT 11 XrmMergeDatabases + 1259: 0000000000041f40 439 FUNC GLOBAL DEFAULT 11 _XConnectXCB + 1260: 000000000004ac00 453 FUNC GLOBAL DEFAULT 11 XrmQGetSearchList + 1261: 000000000033ac80 8 OBJECT GLOBAL DEFAULT 23 _XlcPublicMethods + 1262: 0000000000031540 8 FUNC GLOBAL DEFAULT 11 XAllPlanes + 1263: 000000000033d480 24 OBJECT GLOBAL DEFAULT 23 _XcmsDDColorSpacesInit + 1264: 000000000009f1f0 1948 FUNC GLOBAL DEFAULT 11 XkbApplyCompatMapToKey + 1265: 000000000002d0a0 126 FUNC GLOBAL DEFAULT 11 XESetFlushGC + 1266: 00000000000658b0 36 FUNC GLOBAL DEFAULT 11 _XimFreeCommitInfo + 1267: 00000000000396f0 528 FUNC GLOBAL DEFAULT 11 XQueryTextExtents + 1268: 0000000000096270 106 FUNC GLOBAL DEFAULT 11 _XkbCopyFromReadBuffer + 1269: 0000000000025190 130 FUNC GLOBAL DEFAULT 11 XQueryFont + 1270: 0000000000021200 539 FUNC GLOBAL DEFAULT 11 XCreateGC + 1271: 000000000033d450 8 OBJECT GLOBAL DEFAULT 23 _XcmsSCCFuncSets + 1272: 000000000004dc60 9 FUNC GLOBAL DEFAULT 11 _XimXTransDisconnect + 1273: 000000000006e7c0 139 FUNC GLOBAL DEFAULT 11 _XimSetLocalIMDefaults + 1274: 00000000000736e0 22 FUNC GLOBAL DEFAULT 11 _XimTransFilterWaitEvent + 1275: 0000000000089a50 187 FUNC GLOBAL DEFAULT 11 XcmsQueryGreen + 1276: 0000000000031500 19 FUNC GLOBAL DEFAULT 11 XBlackPixel + 1277: 000000000007f0e0 240 FUNC GLOBAL DEFAULT 11 _XcmsConvertColorsWithWhitePt + 1278: 000000000002d780 189 FUNC GLOBAL DEFAULT 11 XESetBeforeFlush + 1279: 00000000000a35c0 490 FUNC GLOBAL DEFAULT 11 XkbAddGeomShape + 1280: 00000000000244f0 197 FUNC GLOBAL DEFAULT 11 XFilterEvent + 1281: 000000000004b0a0 325 FUNC GLOBAL DEFAULT 11 XrmQGetResource + 1282: 000000000002a130 170 FUNC GLOBAL DEFAULT 11 XGrabButton + 1283: 0000000000089870 96 FUNC GLOBAL DEFAULT 11 XcmsPrefixOfFormat + 1284: 0000000000024190 296 FUNC GLOBAL DEFAULT 11 XFillRectangle + 1285: 000000000006efe0 394 FUNC GLOBAL DEFAULT 11 _XimGetICValueData + 1286: 0000000000065c70 29 FUNC GLOBAL DEFAULT 11 _XimForwardEvent + 1287: 000000000005fd70 327 FUNC GLOBAL DEFAULT 11 Xutf8SetWMProperties + 1288: 000000000002a7c0 169 FUNC GLOBAL DEFAULT 11 XIconifyWindow + 1289: 0000000000069430 196 FUNC GLOBAL DEFAULT 11 _XimResetIMInstantiateCallback + 1290: 000000000001f410 401 FUNC GLOBAL DEFAULT 11 XCheckWindowEvent + 1291: 000000000008c0a0 138 FUNC GLOBAL DEFAULT 11 _XcmsPushPointerArray + 1292: 000000000033a840 112 OBJECT GLOBAL DEFAULT 23 _XimXTransSocketINETFuncs + 1293: 00000000000799f0 286 FUNC GLOBAL DEFAULT 11 _XwcDefaultDrawString + 1294: 000000000008e4c0 6 FUNC GLOBAL DEFAULT 11 XkbXlibControlsImplemented + 1295: 000000000001fcc0 253 FUNC GLOBAL DEFAULT 11 XCloseDisplay + 1296: 0000000000099420 497 FUNC GLOBAL DEFAULT 11 XkbSetIndicatorMap + 1297: 0000000000042100 90 FUNC GLOBAL DEFAULT 11 _XFreeX11XCBStructure + 1298: 00000000000384a0 72 FUNC GLOBAL DEFAULT 11 Xpermalloc + 1299: 00000000000439d0 161 FUNC GLOBAL DEFAULT 11 _XGetAsyncData + 1300: 00000000000917d0 212 FUNC GLOBAL DEFAULT 11 XkbSetIgnoreLockMods + 1301: 0000000000032980 1076 FUNC GLOBAL DEFAULT 11 _XFreeDisplayStructure + 1302: 0000000000043890 70 FUNC GLOBAL DEFAULT 11 _XDeqAsyncHandler + 1303: 0000000000021db0 104 FUNC GLOBAL DEFAULT 11 XDefineCursor + 1304: 0000000000066af0 107 FUNC GLOBAL DEFAULT 11 _XimRegProtoIntrCallback + 1305: 00000000000a2dc0 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomKeyAliases + 1306: 0000000000079420 741 FUNC GLOBAL DEFAULT 11 _XmbDefaultTextPerCharExtents + 1307: 000000000006d4e0 7 FUNC GLOBAL DEFAULT 11 _XimParseStringFile + 1308: 000000000002f1e0 73 FUNC GLOBAL DEFAULT 11 _XKeycodeToKeysym + 1309: 000000000006e2b0 53 FUNC GLOBAL DEFAULT 11 _XimCheckCreateICValues + 1310: 0000000000079260 218 FUNC GLOBAL DEFAULT 11 _XwcDefaultTextExtents + 1311: 0000000000042d80 139 FUNC GLOBAL DEFAULT 11 _XEventsQueued + 1312: 000000000003c0f0 183 FUNC GLOBAL DEFAULT 11 _XRegisterFilterByMask + 1313: 0000000000044400 183 FUNC GLOBAL DEFAULT 11 _XUnregisterInternalConnection + 1314: 0000000000093100 163 FUNC GLOBAL DEFAULT 11 XkbGetUpdatedMap + 1315: 000000000003b8a0 80 FUNC GLOBAL DEFAULT 11 XOffsetRegion + 1316: 000000000008ea50 357 FUNC GLOBAL DEFAULT 11 XkbSetDetectableAutoRepeat + 1317: 0000000000053930 1117 FUNC GLOBAL DEFAULT 11 _XlcCreateLocaleDataBase + 1318: 00000000000a2de0 25 FUNC GLOBAL DEFAULT 11 XkbAllocGeomShapes + 1319: 00000000000315c0 18 FUNC GLOBAL DEFAULT 11 XDisplayHeightMM + 1320: 00000000000320a0 66 FUNC GLOBAL DEFAULT 11 XDeleteModifiermapEntry + 1321: 0000000000025fc0 90 FUNC GLOBAL DEFAULT 11 XFreeFontNames + 1322: 000000000003e5c0 407 FUNC GLOBAL DEFAULT 11 XStoreNamedColor + 1323: 00000000000279b0 36 FUNC GLOBAL DEFAULT 11 XFreeFontPath + 1324: 00000000000319a0 131 FUNC GLOBAL DEFAULT 11 XMapRaised + 1325: 0000000000027760 70 FUNC GLOBAL DEFAULT 11 XGetEventData + 1326: 000000000004b3a0 119 FUNC GLOBAL DEFAULT 11 XrmSetDatabase + 1327: 0000000000030410 496 FUNC GLOBAL DEFAULT 11 XListExtensions + 1328: 000000000003fdd0 626 FUNC GLOBAL DEFAULT 11 XTextExtents + 1329: 000000000003c8a0 471 FUNC GLOBAL DEFAULT 11 _XSetClipRectangles + 1330: 0000000000089b10 187 FUNC GLOBAL DEFAULT 11 XcmsQueryRed + 1331: 000000000001e920 105 FUNC GLOBAL DEFAULT 11 XSetWindowBorderWidth + 1332: 00000000000314a0 23 FUNC GLOBAL DEFAULT 11 XDefaultRootWindow + 1333: 0000000000044110 60 FUNC GLOBAL DEFAULT 11 _XPollfdCacheDel + 1334: 0000000000021c70 212 FUNC GLOBAL DEFAULT 11 XCreateSimpleWindow + 1335: 0000000000032340 80 FUNC GLOBAL DEFAULT 11 XDestroyOC + 1336: 0000000000057850 18 FUNC GLOBAL DEFAULT 11 _Xutf8TextPropertyToTextList + 1337: 000000000003e2b0 7 FUNC GLOBAL DEFAULT 11 XFetchBytes + 1338: 000000000002aa70 106 FUNC GLOBAL DEFAULT 11 _XimGetCharCode + 1339: 000000000001fa50 10 FUNC GLOBAL DEFAULT 11 XRemoveFromSaveSet + 1340: 0000000000034770 79 FUNC GLOBAL DEFAULT 11 XEventsQueued + 1341: 0000000000067920 4063 FUNC GLOBAL DEFAULT 11 _XimProtoWireToEvent + 1342: 00000000000a3fc0 333 FUNC GLOBAL DEFAULT 11 XkbAllocCompatMap + 1343: 000000000003e0e0 10 FUNC GLOBAL DEFAULT 11 XSetWMClientMachine + 1344: 000000000004f8f0 339 FUNC GLOBAL DEFAULT 11 XCreateIC + 1345: 000000000003b8f0 125 FUNC GLOBAL DEFAULT 11 XIntersectRegion + 1346: 000000000008a440 49 FUNC GLOBAL DEFAULT 11 _XcmsCIEXYZ_ValidSpec + 1347: 0000000000021650 222 FUNC GLOBAL DEFAULT 11 _XNoticePutBitmap + 1348: 000000000004fd60 18 FUNC GLOBAL DEFAULT 11 XUnsetICFocus + 1349: 000000000008e410 97 FUNC GLOBAL DEFAULT 11 XkbSetXlibControls + 1350: 000000000003dd30 122 FUNC GLOBAL DEFAULT 11 XSetScreenSaver + 1351: 000000000033d7b8 8 OBJECT GLOBAL DEFAULT 24 _XLockMutex_fn + 1352: 0000000000031910 6 FUNC GLOBAL DEFAULT 11 XGetPixel + 1353: 00000000000916f0 212 FUNC GLOBAL DEFAULT 11 XkbSetServerInternalMods + 1354: 000000000004dc30 9 FUNC GLOBAL DEFAULT 11 _XimXTransWrite + 1355: 0000000000066610 12 FUNC GLOBAL DEFAULT 11 _Ximctstoutf8 + 1356: 000000000001ecd0 336 FUNC GLOBAL DEFAULT 11 XChangeKeyboardControl + 1357: 000000000007d320 39 FUNC GLOBAL DEFAULT 11 _XmbGenericDrawString + 1358: 0000000000029210 821 FUNC GLOBAL DEFAULT 11 XGetWindowProperty + 1359: 000000000001e6d0 316 FUNC GLOBAL DEFAULT 11 XAllocColorPlanes + 1360: 00000000000365d0 15 FUNC GLOBAL DEFAULT 11 XAllocClassHint + 1361: 00000000000915b0 309 FUNC GLOBAL DEFAULT 11 XkbGetAutoRepeatRate + 1362: 000000000002df50 693 FUNC GLOBAL DEFAULT 11 XInternAtoms + 1363: 00000000000a2f00 27 FUNC GLOBAL DEFAULT 11 XkbAllocGeomPoints + 1364: 00000000000317d0 4 FUNC GLOBAL DEFAULT 11 XDefaultDepthOfScreen + 1365: 00000000000537e0 144 FUNC GLOBAL DEFAULT 11 _XlcGetLocaleDataBase + 1366: 000000000005fae0 327 FUNC GLOBAL DEFAULT 11 XmbSetWMProperties + 1367: 0000000000021f00 94 FUNC GLOBAL DEFAULT 11 XDestroySubwindows + 1368: 0000000000060130 9 FUNC GLOBAL DEFAULT 11 XwcTextPerCharExtents + 1369: 000000000006b7c0 853 FUNC GLOBAL DEFAULT 11 _XimLocalMbLookupString + 1370: 000000000002e8a0 937 FUNC GLOBAL DEFAULT 11 XConvertCase + 1371: 00000000000610d0 98 FUNC GLOBAL DEFAULT 11 _XimRegisterFilter + 1372: 0000000000061140 71 FUNC GLOBAL DEFAULT 11 _XimUnregisterFilter + 1373: 000000000002db30 423 FUNC GLOBAL DEFAULT 11 _XUpdateAtomCache + 1374: 00000000000998a0 406 FUNC GLOBAL DEFAULT 11 XkbSetNamedDeviceIndicator + 1375: 0000000000099620 570 FUNC GLOBAL DEFAULT 11 XkbGetNamedDeviceIndicator diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXcomposite.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXcomposite.so.1.txt new file mode 100644 index 000000000000..4efb15caf980 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXcomposite.so.1.txt @@ -0,0 +1,44 @@ +Library: /lib64/libXcomposite.so.1 +Package: libXcomposite-0.4.4-4.1.el7.x86_64 + + +Symbol table '.dynsym' contains 38 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000bd8 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 11: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 15: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 16: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 18: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 19: 00000000000016e8 0 FUNC GLOBAL DEFAULT 12 _fini + 20: 0000000000001130 65 FUNC GLOBAL DEFAULT 11 XCompositeQueryVersion + 21: 0000000000001370 155 FUNC GLOBAL DEFAULT 11 XCompositeUnredirectSubwindows + 22: 0000000000000bd8 0 FUNC GLOBAL DEFAULT 9 _init + 23: 0000000000202078 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 24: 00000000002020a8 0 NOTYPE GLOBAL DEFAULT 23 _end + 25: 0000000000001410 176 FUNC GLOBAL DEFAULT 11 XCompositeCreateRegionFromBorderClip + 26: 00000000000012d0 155 FUNC GLOBAL DEFAULT 11 XCompositeUnredirectWindow + 27: 00000000000016f1 10 OBJECT GLOBAL DEFAULT 13 XCompositeExtensionName + 28: 0000000000202078 0 NOTYPE GLOBAL DEFAULT 22 _edata + 29: 0000000000202090 24 OBJECT GLOBAL DEFAULT 23 XCompositeExtensionInfo + 30: 0000000000001180 6 FUNC GLOBAL DEFAULT 11 XCompositeVersion + 31: 00000000000010e0 73 FUNC GLOBAL DEFAULT 11 XCompositeQueryExtension + 32: 00000000000014c0 176 FUNC GLOBAL DEFAULT 11 XCompositeNameWindowPixmap + 33: 0000000000000ea0 574 FUNC GLOBAL DEFAULT 11 XCompositeFindDisplay + 34: 0000000000001190 155 FUNC GLOBAL DEFAULT 11 XCompositeRedirectWindow + 35: 0000000000001660 133 FUNC GLOBAL DEFAULT 11 XCompositeReleaseOverlayWindow + 36: 0000000000001570 236 FUNC GLOBAL DEFAULT 11 XCompositeGetOverlayWindow + 37: 0000000000001230 155 FUNC GLOBAL DEFAULT 11 XCompositeRedirectSubwindows diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXcursor.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXcursor.so.1.txt new file mode 100644 index 000000000000..d6c0eb799a6b --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXcursor.so.1.txt @@ -0,0 +1,132 @@ +Library: /lib64/libXcursor.so.1 +Package: libXcursor-1.1.15-1.el7.x86_64 + + +Symbol table '.dynsym' contains 126 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetDefault + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putchar@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (2) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.2.5 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreatePicture + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitImage + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQueryExtension + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFixesSetCursorName + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.2.5 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreePixmap + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateCursor + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmapCursor + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateAnimCursor + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryFont + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreePicture + 28: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQueryVersion + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInternAtom + 35: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindStandardFormat + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeFontInfo + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XLoadFont + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.2.5 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateGC + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (4) + 42: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (2) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XPutImage + 47: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeCursor + 49: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeGC + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (2) + 52: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateImage + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmap + 55: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (5) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (5) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (4) + 59: 00000000000052b0 145 FUNC GLOBAL DEFAULT 12 XcursorXcFileLoadImage + 60: 0000000000005840 1311 FUNC GLOBAL DEFAULT 12 XcursorXcFileSave + 61: 0000000000004870 39 FUNC GLOBAL DEFAULT 12 XcursorGetThemeCore + 62: 0000000000004f00 5 FUNC GLOBAL DEFAULT 12 XcursorImageDestroy + 63: 00000000000060e0 92 FUNC GLOBAL DEFAULT 12 XcursorFilenameLoadImages + 64: 00000000000047a0 39 FUNC GLOBAL DEFAULT 12 XcursorGetDefaultSize + 65: 0000000000002dc0 35 FUNC GLOBAL DEFAULT 12 XcursorAnimateNext + 66: 00000000000047d0 109 FUNC GLOBAL DEFAULT 12 XcursorSetTheme + 67: 00000000000061e0 104 FUNC GLOBAL DEFAULT 12 XcursorFilenameSaveImages + 68: 0000000000006b30 43 FUNC GLOBAL DEFAULT 12 XcursorShapeLoadImages + 69: 0000000000003c50 144 FUNC GLOBAL DEFAULT 12 XcursorImagesLoadCursors + 70: 00000000000048a0 36 FUNC GLOBAL DEFAULT 12 XcursorSetThemeCore + 71: 0000000000006c30 205 FUNC GLOBAL DEFAULT 12 XcursorLibraryLoadCursors + 72: 0000000000004e90 105 FUNC GLOBAL DEFAULT 12 XcursorImageCreate + 73: 00000000000070b0 277 FUNC GLOBAL DEFAULT 12 XcursorNoticeCreateBitmap + 74: 0000000000006140 76 FUNC GLOBAL DEFAULT 12 XcursorFilenameLoadAllImages + 75: 0000000000002cc0 52 FUNC GLOBAL DEFAULT 12 XcursorCursorsCreate + 76: 0000000000007470 285 FUNC GLOBAL DEFAULT 12 XcursorTryShapeBitmapCursor + 77: 0000000000006a70 43 FUNC GLOBAL DEFAULT 12 XcursorShapeLoadImage + 78: 0000000000007590 0 FUNC GLOBAL DEFAULT 13 _fini + 79: 0000000000005100 101 FUNC GLOBAL DEFAULT 12 XcursorImagesDestroy + 80: 0000000000006b60 160 FUNC GLOBAL DEFAULT 12 XcursorLibraryLoadCursor + 81: 0000000000003e40 76 FUNC GLOBAL DEFAULT 12 XcursorFilenameLoadCursors + 82: 0000000000005e40 105 FUNC GLOBAL DEFAULT 12 XcursorFileLoadAllImages + 83: 0000000000005eb0 121 FUNC GLOBAL DEFAULT 12 XcursorFileLoad + 84: 0000000000004740 39 FUNC GLOBAL DEFAULT 12 XcursorSupportsAnim + 85: 0000000000002408 0 FUNC GLOBAL DEFAULT 9 _init + 86: 0000000000006610 236 FUNC GLOBAL DEFAULT 12 XcursorLibraryShape + 87: 00000000000071d0 201 FUNC GLOBAL DEFAULT 12 XcursorImageHash + 88: 0000000000006190 75 FUNC GLOBAL DEFAULT 12 XcursorFilenameLoad + 89: 0000000000003f80 94 FUNC GLOBAL DEFAULT 12 _XcursorCreateFontCursor + 90: 0000000000002d90 34 FUNC GLOBAL DEFAULT 12 XcursorAnimateDestroy + 91: 0000000000006080 92 FUNC GLOBAL DEFAULT 12 XcursorFilenameLoadImage + 92: 0000000000006aa0 132 FUNC GLOBAL DEFAULT 12 XcursorLibraryLoadImages + 93: 0000000000002d00 88 FUNC GLOBAL DEFAULT 12 XcursorCursorsDestroy + 94: 0000000000005dd0 105 FUNC GLOBAL DEFAULT 12 XcursorFileLoadImages + 95: 0000000000002d60 35 FUNC GLOBAL DEFAULT 12 XcursorAnimateCreate + 96: 00000000000055a0 667 FUNC GLOBAL DEFAULT 12 XcursorXcFileLoad + 97: 0000000000005f30 184 FUNC GLOBAL DEFAULT 12 XcursorFileSaveImages + 98: 00000000000051c0 72 FUNC GLOBAL DEFAULT 12 XcursorCommentCreate + 99: 0000000000006e40 621 FUNC GLOBAL DEFAULT 12 XcursorTryShapeCursor + 100: 0000000000003ce0 263 FUNC GLOBAL DEFAULT 12 XcursorImagesLoadCursor + 101: 0000000000004840 36 FUNC GLOBAL DEFAULT 12 XcursorGetTheme + 102: 0000000000005480 280 FUNC GLOBAL DEFAULT 12 XcursorXcFileLoadAllImages + 103: 00000000000072a0 453 FUNC GLOBAL DEFAULT 12 XcursorNoticePutBitmap + 104: 0000000000002df0 3666 FUNC GLOBAL DEFAULT 12 XcursorImageLoadCursor + 105: 00000000000065c0 65 FUNC GLOBAL DEFAULT 12 XcursorLibraryPath + 106: 0000000000005220 44 FUNC GLOBAL DEFAULT 12 XcursorCommentsCreate + 107: 0000000000005d60 105 FUNC GLOBAL DEFAULT 12 XcursorFileLoadImage + 108: 000000000020a2f0 0 NOTYPE GLOBAL DEFAULT 23 _edata + 109: 0000000000005ff0 144 FUNC GLOBAL DEFAULT 12 XcursorFileSave + 110: 0000000000004180 1415 FUNC GLOBAL DEFAULT 12 _XcursorGetDisplayInfo + 111: 0000000000005170 70 FUNC GLOBAL DEFAULT 12 XcursorImagesSetName + 112: 00000000000069f0 116 FUNC GLOBAL DEFAULT 12 XcursorLibraryLoadImage + 113: 0000000000003df0 69 FUNC GLOBAL DEFAULT 12 XcursorFilenameLoadCursor + 114: 0000000000005250 85 FUNC GLOBAL DEFAULT 12 XcursorCommentsDestroy + 115: 00000000000050c0 52 FUNC GLOBAL DEFAULT 12 XcursorImagesCreate + 116: 0000000000004710 39 FUNC GLOBAL DEFAULT 12 XcursorSupportsARGB + 117: 000000000020a310 0 NOTYPE GLOBAL DEFAULT 24 _end + 118: 0000000000003e90 227 FUNC GLOBAL DEFAULT 12 _XcursorCreateGlyphCursor + 119: 0000000000006d00 43 FUNC GLOBAL DEFAULT 12 XcursorShapeLoadCursors + 120: 0000000000006c00 42 FUNC GLOBAL DEFAULT 12 XcursorShapeLoadCursor + 121: 0000000000006250 123 FUNC GLOBAL DEFAULT 12 XcursorFilenameSave + 122: 0000000000005210 5 FUNC GLOBAL DEFAULT 12 XcursorCommentDestroy + 123: 0000000000005350 294 FUNC GLOBAL DEFAULT 12 XcursorXcFileLoadImages + 124: 000000000020a2f0 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 125: 0000000000004770 36 FUNC GLOBAL DEFAULT 12 XcursorSetDefaultSize diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXdamage.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXdamage.so.1.txt new file mode 100644 index 000000000000..468eb61271c0 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXdamage.so.1.txt @@ -0,0 +1,42 @@ +Library: /lib64/libXdamage.so.1 +Package: libXdamage-1.1.4-4.1.el7.x86_64 + + +Symbol table '.dynsym' contains 36 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000b18 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetEventToWire + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEvent + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 19: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 20: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 21: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 22: 0000000000000e10 631 FUNC GLOBAL DEFAULT 11 XDamageFindDisplay + 23: 0000000000202090 0 NOTYPE GLOBAL DEFAULT 22 _edata + 24: 00000000000012d0 183 FUNC GLOBAL DEFAULT 11 XDamageCreate + 25: 00000000002020b8 0 NOTYPE GLOBAL DEFAULT 23 _end + 26: 00000000000014d0 155 FUNC GLOBAL DEFAULT 11 XDamageAdd + 27: 0000000000001420 161 FUNC GLOBAL DEFAULT 11 XDamageSubtract + 28: 0000000000202090 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 29: 0000000000001575 7 OBJECT GLOBAL DEFAULT 13 XDamageExtensionName + 30: 0000000000001230 73 FUNC GLOBAL DEFAULT 11 XDamageQueryExtension + 31: 0000000000000b18 0 FUNC GLOBAL DEFAULT 9 _init + 32: 000000000000156c 0 FUNC GLOBAL DEFAULT 12 _fini + 33: 00000000002020a0 24 OBJECT GLOBAL DEFAULT 23 XDamageExtensionInfo + 34: 0000000000001390 133 FUNC GLOBAL DEFAULT 11 XDamageDestroy + 35: 0000000000001280 65 FUNC GLOBAL DEFAULT 11 XDamageQueryVersion diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXext.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXext.so.6.txt new file mode 100644 index 000000000000..83b0ced9a76e --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXext.so.6.txt @@ -0,0 +1,202 @@ +Library: /lib64/libXext.so.6 +Package: libXext-1.3.3-3.el7.x86_64 + + +Symbol table '.dynsym' contains 196 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000003388 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetEventToWire + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCreateFont + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEvent + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetFreeGC + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetFlushGC + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCreateGC + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XInitImageFuncPtrs + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XAllocScratch + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetVisualInfo + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCopyGC + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (3) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetErrorDatabaseText + 22: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (5) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetBitsPerPixel + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryExtension + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetScanlinePad + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 30: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XIfEvent + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetFreeFont + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XVIDtoVisual + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetErrorString + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (3) + 39: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetError + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFlush + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 46: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 47: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFlushGCCache + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (3) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (3) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (2) + 52: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 54: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (3) + 55: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (3) + 56: 000000000000a6d0 587 FUNC GLOBAL DEFAULT 11 XSyncAwait + 57: 0000000000004590 376 FUNC GLOBAL DEFAULT 11 XagCreateEmbeddedApplicationGroup + 58: 0000000000004ee0 1599 FUNC GLOBAL DEFAULT 11 XeviGetVisualInfo + 59: 000000000000a210 32 FUNC GLOBAL DEFAULT 11 XSyncValueGreaterOrEqual + 60: 0000000000009b90 11 FUNC GLOBAL DEFAULT 11 XSyncIntToValue + 61: 0000000000003388 0 FUNC GLOBAL DEFAULT 9 _init + 62: 0000000000003e10 154 FUNC GLOBAL DEFAULT 11 DPMSDisable + 63: 000000000000acf0 131 FUNC GLOBAL DEFAULT 11 XSyncValueSubtract + 64: 0000000000003d70 154 FUNC GLOBAL DEFAULT 11 DPMSEnable + 65: 0000000000211860 4 OBJECT GLOBAL DEFAULT 24 XTestInputActionType + 66: 0000000000008580 39 FUNC GLOBAL DEFAULT 11 XShmQueryExtension + 67: 0000000000003920 280 FUNC GLOBAL DEFAULT 11 DPMSGetVersion + 68: 000000000000aed0 263 FUNC GLOBAL DEFAULT 11 XTestFakeInput + 69: 000000000000c240 198 FUNC GLOBAL DEFAULT 11 XdbeAllocateBackBufferName + 70: 0000000000003f90 280 FUNC GLOBAL DEFAULT 11 DPMSInfo + 71: 0000000000006050 452 FUNC GLOBAL DEFAULT 11 XmbufGetWindowAttributes + 72: 000000000000afe0 152 FUNC GLOBAL DEFAULT 11 XTestGetInput + 73: 0000000000004210 248 FUNC GLOBAL DEFAULT 11 XMITMiscGetBugMode + 74: 000000000000b120 154 FUNC GLOBAL DEFAULT 11 XTestReset + 75: 000000000000ab70 228 FUNC GLOBAL DEFAULT 11 XSyncChangeAlarm + 76: 000000000000c310 160 FUNC GLOBAL DEFAULT 11 XdbeDeallocateBackBufferName + 77: 000000000000a280 6 FUNC GLOBAL DEFAULT 11 XSyncValueIsNegative + 78: 0000000000005650 79 FUNC GLOBAL DEFAULT 11 XLbxQueryExtension + 79: 000000000000b1c0 220 FUNC GLOBAL DEFAULT 11 XTestQueryInputSize + 80: 0000000000009700 168 FUNC GLOBAL DEFAULT 11 XSyncTriggerFence + 81: 0000000000004dc0 280 FUNC GLOBAL DEFAULT 11 XeviQueryVersion + 82: 00000000000065a0 523 FUNC GLOBAL DEFAULT 11 XmbufGetScreenInfo + 83: 0000000000007580 73 FUNC GLOBAL DEFAULT 11 XShapeQueryExtension + 84: 000000000000a2c0 7 FUNC GLOBAL DEFAULT 11 XSyncValueLow32 + 85: 0000000000009ba0 6 FUNC GLOBAL DEFAULT 11 XSyncIntsToValue + 86: 000000000000ac60 131 FUNC GLOBAL DEFAULT 11 XSyncValueAdd + 87: 0000000000006f90 842 FUNC GLOBAL DEFAULT 11 XSecurityGenerateAuthorization + 88: 0000000000003b40 247 FUNC GLOBAL DEFAULT 11 DPMSSetTimeouts + 89: 00000000000075d0 280 FUNC GLOBAL DEFAULT 11 XShapeQueryVersion + 90: 0000000000008e50 251 FUNC GLOBAL DEFAULT 11 XShmCreatePixmap + 91: 0000000000005f60 237 FUNC GLOBAL DEFAULT 11 XmbufDisplayBuffers + 92: 0000000000211580 4 OBJECT GLOBAL DEFAULT 23 XTestFakeAckType + 93: 0000000000007b10 269 FUNC GLOBAL DEFAULT 11 XShapeCombineShape + 94: 0000000000004170 152 FUNC GLOBAL DEFAULT 11 XMITMiscSetBugMode + 95: 0000000000005d80 312 FUNC GLOBAL DEFAULT 11 XmbufCreateBuffers + 96: 00000000000048c0 811 FUNC GLOBAL DEFAULT 11 XagGetApplicationGroupAttributes + 97: 0000000000003c40 296 FUNC GLOBAL DEFAULT 11 DPMSGetTimeouts + 98: 0000000000006e40 297 FUNC GLOBAL DEFAULT 11 XSecurityQueryExtension + 99: 0000000000009f30 288 FUNC GLOBAL DEFAULT 11 XSyncQueryCounter + 100: 000000000000d040 573 FUNC GLOBAL DEFAULT 11 XextAddDisplay + 101: 00000000000093a0 168 FUNC GLOBAL DEFAULT 11 XSyncDestroyAlarm + 102: 000000000000a5f0 212 FUNC GLOBAL DEFAULT 11 XSyncChangeCounter + 103: 0000000000004d90 39 FUNC GLOBAL DEFAULT 11 XeviQueryExtension + 104: 000000000000d440 47 FUNC GLOBAL DEFAULT 11 XMissingExtension + 105: 0000000000006220 278 FUNC GLOBAL DEFAULT 11 XmbufChangeWindowAttributes + 106: 000000000000c650 740 FUNC GLOBAL DEFAULT 11 XdbeGetVisualInfo + 107: 000000000000a050 379 FUNC GLOBAL DEFAULT 11 XSyncQueryAlarm + 108: 00000000000085b0 39 FUNC GLOBAL DEFAULT 11 XShmGetEventBase + 109: 00000000002116b8 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 110: 000000000000a230 32 FUNC GLOBAL DEFAULT 11 XSyncValueLessOrEqual + 111: 000000000000d360 180 FUNC GLOBAL DEFAULT 11 XextFindDisplay + 112: 0000000000007d00 488 FUNC GLOBAL DEFAULT 11 XShapeQueryExtents + 113: 0000000000007c20 221 FUNC GLOBAL DEFAULT 11 XShapeOffsetShape + 114: 000000000000c110 293 FUNC GLOBAL DEFAULT 11 XdbeQueryExtension + 115: 000000000000c940 34 FUNC GLOBAL DEFAULT 11 XdbeFreeVisualInfo + 116: 0000000000007ef0 201 FUNC GLOBAL DEFAULT 11 XShapeSelectInput + 117: 0000000000004820 160 FUNC GLOBAL DEFAULT 11 XagDestroyApplicationGroup + 118: 000000000000cf30 117 FUNC GLOBAL DEFAULT 11 XGEQueryVersion + 119: 0000000000009860 168 FUNC GLOBAL DEFAULT 11 XSyncDestroyFence + 120: 00000000000085e0 296 FUNC GLOBAL DEFAULT 11 XShmQueryVersion + 121: 000000000000aa80 230 FUNC GLOBAL DEFAULT 11 XSyncCreateAlarm + 122: 0000000000009450 190 FUNC GLOBAL DEFAULT 11 XSyncSetPriority + 123: 000000000000a250 40 FUNC GLOBAL DEFAULT 11 XSyncValueEqual + 124: 00000000000038d0 73 FUNC GLOBAL DEFAULT 11 DPMSQueryExtension + 125: 0000000000009910 280 FUNC GLOBAL DEFAULT 11 XSyncQueryFence + 126: 0000000000004d10 12 FUNC GLOBAL DEFAULT 11 XagCreateAssociation + 127: 000000000000a2b0 8 FUNC GLOBAL DEFAULT 11 XSyncValueIsPositive + 128: 0000000000004bf0 280 FUNC GLOBAL DEFAULT 11 XagQueryApplicationGroup + 129: 000000000000d420 28 FUNC GLOBAL DEFAULT 11 XSetExtensionErrorHandler + 130: 0000000000006340 312 FUNC GLOBAL DEFAULT 11 XmbufGetBufferAttributes + 131: 000000000000ad90 14 FUNC GLOBAL DEFAULT 11 XSyncMinValue + 132: 000000000000c510 154 FUNC GLOBAL DEFAULT 11 XdbeBeginIdiom + 133: 0000000000004d20 6 FUNC GLOBAL DEFAULT 11 XagDestroyAssociation + 134: 000000000000b820 155 FUNC GLOBAL DEFAULT 11 XTestFlush + 135: 0000000000009510 280 FUNC GLOBAL DEFAULT 11 XSyncGetPriority + 136: 0000000000004710 272 FUNC GLOBAL DEFAULT 11 XagCreateNonembeddedApplicationGroup + 137: 0000000000008af0 380 FUNC GLOBAL DEFAULT 11 XShmPutImage + 138: 0000000000006f70 15 FUNC GLOBAL DEFAULT 11 XSecurityAllocXauth + 139: 0000000000004460 296 FUNC GLOBAL DEFAULT 11 XagQueryVersion + 140: 00000000000092f0 168 FUNC GLOBAL DEFAULT 11 XSyncDestroyCounter + 141: 00000000000080d0 539 FUNC GLOBAL DEFAULT 11 XShapeGetRectangles + 142: 0000000000009630 205 FUNC GLOBAL DEFAULT 11 XSyncCreateFence + 143: 0000000000008920 160 FUNC GLOBAL DEFAULT 11 XShmDetach + 144: 000000000000a510 212 FUNC GLOBAL DEFAULT 11 XSyncSetCounter + 145: 000000000000a1f0 32 FUNC GLOBAL DEFAULT 11 XSyncValueLessThan + 146: 000000000000b640 22 FUNC GLOBAL DEFAULT 11 XTestPressButton + 147: 000000000000b660 438 FUNC GLOBAL DEFAULT 11 XTestMovePointer + 148: 0000000000211918 0 NOTYPE GLOBAL DEFAULT 24 _end + 149: 00000000000076f0 445 FUNC GLOBAL DEFAULT 11 XShapeCombineRegion + 150: 000000000000a1d0 32 FUNC GLOBAL DEFAULT 11 XSyncValueGreaterThan + 151: 00000000000056d0 280 FUNC GLOBAL DEFAULT 11 XLbxQueryVersion + 152: 0000000000009a30 347 FUNC GLOBAL DEFAULT 11 XSyncAwaitFence + 153: 000000000000d470 0 FUNC GLOBAL DEFAULT 12 _fini + 154: 00000000000078b0 349 FUNC GLOBAL DEFAULT 11 XShapeCombineRectangles + 155: 000000000000cff0 46 FUNC GLOBAL DEFAULT 11 XextCreateExtension + 156: 000000000000bce0 771 FUNC GLOBAL DEFAULT 11 XcupStoreColors + 157: 000000000000c970 325 FUNC GLOBAL DEFAULT 11 XdbeGetBackBufferAttributes + 158: 00000000000072e0 160 FUNC GLOBAL DEFAULT 11 XSecurityRevokeAuthorization + 159: 0000000000006af0 253 FUNC GLOBAL DEFAULT 11 XmbufClearBufferArea + 160: 00000000000056a0 39 FUNC GLOBAL DEFAULT 11 XLbxGetEventBase + 161: 0000000000008c70 479 FUNC GLOBAL DEFAULT 11 XShmGetImage + 162: 00000000002116b8 0 NOTYPE GLOBAL DEFAULT 23 _edata + 163: 000000000000b080 154 FUNC GLOBAL DEFAULT 11 XTestStopInput + 164: 00000000000097b0 168 FUNC GLOBAL DEFAULT 11 XSyncResetFence + 165: 0000000000008840 214 FUNC GLOBAL DEFAULT 11 XShmAttach + 166: 00000000000067b0 826 FUNC GLOBAL DEFAULT 11 XmbufCreateStereoWindow + 167: 0000000000005c60 280 FUNC GLOBAL DEFAULT 11 XmbufGetVersion + 168: 000000000000c3b0 344 FUNC GLOBAL DEFAULT 11 XdbeSwapBuffers + 169: 000000000000c5b0 154 FUNC GLOBAL DEFAULT 11 XdbeEndIdiom + 170: 0000000000005ec0 155 FUNC GLOBAL DEFAULT 11 XmbufDestroyBuffers + 171: 000000000000cee0 80 FUNC GLOBAL DEFAULT 11 XGEQueryExtension + 172: 0000000000007a10 253 FUNC GLOBAL DEFAULT 11 XShapeCombineMask + 173: 000000000000a290 22 FUNC GLOBAL DEFAULT 11 XSyncValueIsZero + 174: 000000000000a430 220 FUNC GLOBAL DEFAULT 11 XSyncCreateCounter + 175: 0000000000003a40 248 FUNC GLOBAL DEFAULT 11 DPMSCapable + 176: 0000000000009d00 547 FUNC GLOBAL DEFAULT 11 XSyncListSystemCounters + 177: 0000000000006480 278 FUNC GLOBAL DEFAULT 11 XmbufChangeBufferAttributes + 178: 000000000000ba60 639 FUNC GLOBAL DEFAULT 11 XcupGetReservedColormapEntries + 179: 0000000000009210 73 FUNC GLOBAL DEFAULT 11 XSyncQueryExtension + 180: 0000000000005c10 73 FUNC GLOBAL DEFAULT 11 XmbufQueryExtension + 181: 0000000000004120 73 FUNC GLOBAL DEFAULT 11 XMITMiscQueryExtension + 182: 0000000000007fc0 264 FUNC GLOBAL DEFAULT 11 XShapeInputSelected + 183: 0000000000006f80 5 FUNC GLOBAL DEFAULT 11 XSecurityFreeXauth + 184: 00000000000089c0 304 FUNC GLOBAL DEFAULT 11 XShmCreateImage + 185: 0000000000003eb0 224 FUNC GLOBAL DEFAULT 11 DPMSForceLevel + 186: 000000000000a2d0 3 FUNC GLOBAL DEFAULT 11 XSyncValueHigh32 + 187: 000000000000b620 22 FUNC GLOBAL DEFAULT 11 XTestPressKey + 188: 0000000000009260 94 FUNC GLOBAL DEFAULT 11 XSyncInitialize + 189: 0000000000008710 291 FUNC GLOBAL DEFAULT 11 XShmPixmapFormat + 190: 000000000000d280 218 FUNC GLOBAL DEFAULT 11 XextRemoveDisplay + 191: 0000000000211910 8 OBJECT GLOBAL DEFAULT 24 _XExtensionErrorFunction + 192: 00000000000092c0 34 FUNC GLOBAL DEFAULT 11 XSyncFreeSystemCounterList + 193: 000000000000ad80 14 FUNC GLOBAL DEFAULT 11 XSyncMaxValue + 194: 000000000000d020 27 FUNC GLOBAL DEFAULT 11 XextDestroyExtension + 195: 000000000000b930 296 FUNC GLOBAL DEFAULT 11 XcupQueryVersion diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXfixes.so.3.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXfixes.so.3.txt new file mode 100644 index 000000000000..b88330af43de --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXfixes.so.3.txt @@ -0,0 +1,81 @@ +Library: /lib64/libXfixes.so.3 +Package: libXfixes-5.0.3-1.el7.x86_64 + + +Symbol table '.dynsym' contains 75 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001418 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetEventToWire + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEvent + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 12: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (4) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 17: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 21: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 26: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 28: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 29: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 31: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 32: 0000000000002b90 161 FUNC GLOBAL DEFAULT 11 XFixesTranslateRegion + 33: 0000000000002c40 155 FUNC GLOBAL DEFAULT 11 XFixesRegionExtents + 34: 0000000000002eb0 54 FUNC GLOBAL DEFAULT 11 XFixesFetchRegion + 35: 00000000000032e0 161 FUNC GLOBAL DEFAULT 11 XFixesSelectSelectionInput + 36: 0000000000003140 223 FUNC GLOBAL DEFAULT 11 XFixesExpandRegion + 37: 0000000000001d20 257 FUNC GLOBAL DEFAULT 11 XFixesChangeCursorByName + 38: 0000000000003910 65 FUNC GLOBAL DEFAULT 11 XFixesQueryVersion + 39: 0000000000003968 0 FUNC GLOBAL DEFAULT 12 _fini + 40: 0000000000002ac0 201 FUNC GLOBAL DEFAULT 11 XFixesInvertRegion + 41: 00000000000022f0 184 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromBitmap + 42: 0000000000002680 387 FUNC GLOBAL DEFAULT 11 XFixesSetRegion + 43: 0000000000002140 421 FUNC GLOBAL DEFAULT 11 XFixesCreateRegion + 44: 00000000000025f0 133 FUNC GLOBAL DEFAULT 11 XFixesDestroyRegion + 45: 0000000000001780 625 FUNC GLOBAL DEFAULT 11 XFixesGetCursorImage + 46: 0000000000001a00 257 FUNC GLOBAL DEFAULT 11 XFixesSetCursorName + 47: 00000000000016e0 155 FUNC GLOBAL DEFAULT 11 XFixesSelectCursorInput + 48: 0000000000002810 155 FUNC GLOBAL DEFAULT 11 XFixesCopyRegion + 49: 0000000000002960 161 FUNC GLOBAL DEFAULT 11 XFixesIntersectRegion + 50: 00000000000020b0 133 FUNC GLOBAL DEFAULT 11 XFixesDestroyPointerBarrier + 51: 0000000000001ec0 133 FUNC GLOBAL DEFAULT 11 XFixesShowCursor + 52: 0000000000001e30 133 FUNC GLOBAL DEFAULT 11 XFixesHideCursor + 53: 0000000000001b10 339 FUNC GLOBAL DEFAULT 11 XFixesGetCursorName + 54: 00000000002050e8 7 OBJECT GLOBAL DEFAULT 22 XFixesExtensionName + 55: 0000000000003960 6 FUNC GLOBAL DEFAULT 11 XFixesVersion + 56: 0000000000001f50 349 FUNC GLOBAL DEFAULT 11 XFixesCreatePointerBarrier + 57: 0000000000002ef0 191 FUNC GLOBAL DEFAULT 11 XFixesSetGCClipRegion + 58: 00000000002050ef 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 59: 0000000000205118 0 NOTYPE GLOBAL DEFAULT 23 _end + 60: 00000000000038c0 73 FUNC GLOBAL DEFAULT 11 XFixesQueryExtension + 61: 0000000000003470 636 FUNC GLOBAL DEFAULT 11 XFixesFindDisplay + 62: 0000000000001c70 163 FUNC GLOBAL DEFAULT 11 XFixesChangeCursor + 63: 0000000000002fb0 207 FUNC GLOBAL DEFAULT 11 XFixesSetWindowShapeRegion + 64: 0000000000002530 184 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromPicture + 65: 0000000000205100 24 OBJECT GLOBAL DEFAULT 23 XFixesExtensionInfo + 66: 0000000000003080 183 FUNC GLOBAL DEFAULT 11 XFixesSetPictureClipRegion + 67: 0000000000002ce0 454 FUNC GLOBAL DEFAULT 11 XFixesFetchRegionAndBounds + 68: 00000000002050ef 0 NOTYPE GLOBAL DEFAULT 22 _edata + 69: 0000000000002a10 161 FUNC GLOBAL DEFAULT 11 XFixesSubtractRegion + 70: 00000000000028b0 161 FUNC GLOBAL DEFAULT 11 XFixesUnionRegion + 71: 0000000000002470 192 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromGC + 72: 0000000000003220 183 FUNC GLOBAL DEFAULT 11 XFixesChangeSaveSet + 73: 00000000000023b0 182 FUNC GLOBAL DEFAULT 11 XFixesCreateRegionFromWindow + 74: 0000000000001418 0 FUNC GLOBAL DEFAULT 9 _init diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXi.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXi.so.6.txt new file mode 100644 index 000000000000..7b5a2f0571ad --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXi.so.6.txt @@ -0,0 +1,135 @@ +Library: /lib64/libXi.so.6 +Package: libXi-1.7.9-1.el7.x86_64 + + +Symbol table '.dynsym' contains 129 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001fb0 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (3) + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCopyEventCookie + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XUnknownNativeEvent + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (3) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (3) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetWireToEventCookie + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextDestroyExtension + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (3) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetErrorDatabaseText + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (5) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryExtension + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextCreateExtension + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 34: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 36: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 39: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (3) + 40: 00000000000069f0 310 FUNC GLOBAL DEFAULT 11 XSetDeviceValuators + 41: 0000000000003dd0 343 FUNC GLOBAL DEFAULT 11 XGetDeviceButtonMapping + 42: 000000000000aff0 31 FUNC GLOBAL DEFAULT 11 XIUngrabFocusIn + 43: 000000000000b2b0 872 FUNC GLOBAL DEFAULT 11 XIChangeProperty + 44: 000000000000a220 61 FUNC GLOBAL DEFAULT 11 XIQueryVersion + 45: 000000000000c820 71 FUNC GLOBAL DEFAULT 11 XIBarrierReleasePointer + 46: 000000000000afb0 31 FUNC GLOBAL DEFAULT 11 XIUngrabKeycode + 47: 00000000000088f0 23 FUNC GLOBAL DEFAULT 11 _xibadmode + 48: 0000000000005500 5 FUNC GLOBAL DEFAULT 11 XFreeDeviceMotionEvents + 49: 00000000000067d0 5 FUNC GLOBAL DEFAULT 11 XFreeDeviceState + 50: 0000000000007060 222 FUNC GLOBAL DEFAULT 11 XUngrabDeviceButton + 51: 000000000000afd0 31 FUNC GLOBAL DEFAULT 11 XIUngrabEnter + 52: 00000000000088d0 23 FUNC GLOBAL DEFAULT 11 _xibadevent + 53: 0000000000009d90 642 FUNC GLOBAL DEFAULT 11 XIGrabDevice + 54: 00000000000059e0 696 FUNC GLOBAL DEFAULT 11 XGetSelectedExtensionEvents + 55: 0000000000003170 286 FUNC GLOBAL DEFAULT 11 XChangeDeviceKeyMapping + 56: 000000000000c400 181 FUNC GLOBAL DEFAULT 11 XIDefineCursor + 57: 000000000000ae80 68 FUNC GLOBAL DEFAULT 11 XIGrabFocusIn + 58: 00000000000088b0 23 FUNC GLOBAL DEFAULT 11 _xibadclass + 59: 000000000000ade0 72 FUNC GLOBAL DEFAULT 11 XIGrabKeycode + 60: 00000000000068b0 315 FUNC GLOBAL DEFAULT 11 XSetDeviceButtonMapping + 61: 0000000000003f30 277 FUNC GLOBAL DEFAULT 11 XIGetClientPointer + 62: 000000000000c868 0 FUNC GLOBAL DEFAULT 12 _fini + 63: 0000000000004d50 385 FUNC GLOBAL DEFAULT 11 XGetDeviceModifierMapping + 64: 000000000000a680 181 FUNC GLOBAL DEFAULT 11 XISetFocus + 65: 0000000000008a80 24 FUNC GLOBAL DEFAULT 11 _XiGetDevicePresenceNotifyEvent + 66: 0000000000002c40 1097 FUNC GLOBAL DEFAULT 11 XChangeFeedbackControl + 67: 000000000000b8f0 835 FUNC GLOBAL DEFAULT 11 XISelectEvents + 68: 00000000000043f0 812 FUNC GLOBAL DEFAULT 11 XGetDeviceProperty + 69: 000000000000a020 162 FUNC GLOBAL DEFAULT 11 XIUngrabDevice + 70: 0000000000008910 23 FUNC GLOBAL DEFAULT 11 _xidevicebusy + 71: 000000000000a260 970 FUNC GLOBAL DEFAULT 11 XIQueryDevice + 72: 0000000000001fb0 0 FUNC GLOBAL DEFAULT 9 _init + 73: 000000000000ae30 72 FUNC GLOBAL DEFAULT 11 XIGrabEnter + 74: 0000000000006b30 260 FUNC GLOBAL DEFAULT 11 XSetDeviceModifierMapping + 75: 0000000000005510 317 FUNC GLOBAL DEFAULT 11 XGrabDevice + 76: 0000000000009ce0 11 FUNC GLOBAL DEFAULT 11 XIAllowEvents + 77: 0000000000002790 1187 FUNC GLOBAL DEFAULT 11 XChangeDeviceControl + 78: 0000000000006c40 223 FUNC GLOBAL DEFAULT 11 XSetDeviceMode + 79: 0000000000003290 238 FUNC GLOBAL DEFAULT 11 XChangePointerDevice + 80: 0000000000003380 207 FUNC GLOBAL DEFAULT 11 XChangeDeviceDontPropagateList + 81: 00000000000023e0 935 FUNC GLOBAL DEFAULT 11 XChangeDeviceProperty + 82: 000000000000aed0 183 FUNC GLOBAL DEFAULT 11 XIGrabTouchBegin + 83: 0000000000004720 1144 FUNC GLOBAL DEFAULT 11 XGetFeedbackControl + 84: 000000000000c0f0 769 FUNC GLOBAL DEFAULT 11 XIChangeHierarchy + 85: 0000000000005160 124 FUNC GLOBAL DEFAULT 11 XGetExtensionVersion + 86: 000000000000ad90 72 FUNC GLOBAL DEFAULT 11 XIGrabButton + 87: 0000000000004ee0 410 FUNC GLOBAL DEFAULT 11 XGetDeviceDontPropagateList + 88: 000000000000bf00 162 FUNC GLOBAL DEFAULT 11 XISetClientPointer + 89: 00000000000058d0 260 FUNC GLOBAL DEFAULT 11 XGetDeviceFocus + 90: 00000000000061b0 342 FUNC GLOBAL DEFAULT 11 XListDeviceProperties + 91: 0000000000006190 18 FUNC GLOBAL DEFAULT 11 XFreeDeviceList + 92: 0000000000005ca0 1261 FUNC GLOBAL DEFAULT 11 XListInputDevices + 93: 0000000000006fb0 164 FUNC GLOBAL DEFAULT 11 XUngrabDevice + 94: 0000000000008890 20 FUNC GLOBAL DEFAULT 11 _xibaddevice + 95: 0000000000004bb0 408 FUNC GLOBAL DEFAULT 11 XGetDeviceKeyMapping + 96: 0000000000005650 297 FUNC GLOBAL DEFAULT 11 XGrabDeviceButton + 97: 000000000000bc40 700 FUNC GLOBAL DEFAULT 11 XIGetSelectedEvents + 98: 0000000000009cf0 148 FUNC GLOBAL DEFAULT 11 XIAllowTouchEvents + 99: 000000000000b0a0 342 FUNC GLOBAL DEFAULT 11 XIListProperties + 100: 0000000000005780 329 FUNC GLOBAL DEFAULT 11 XGrabDeviceKey + 101: 000000000000a630 67 FUNC GLOBAL DEFAULT 11 XIFreeDeviceInfo + 102: 00000000000051e0 789 FUNC GLOBAL DEFAULT 11 XGetDeviceMotionEvents + 103: 0000000000004050 907 FUNC GLOBAL DEFAULT 11 XGetDeviceControl + 104: 0000000000006d20 456 FUNC GLOBAL DEFAULT 11 XSendExtensionEvent + 105: 0000000000002320 182 FUNC GLOBAL DEFAULT 11 XAllowDeviceEvents + 106: 0000000000004ba0 5 FUNC GLOBAL DEFAULT 11 XFreeFeedbackList + 107: 00000000000035b0 191 FUNC GLOBAL DEFAULT 11 XDeviceBell + 108: 000000000000c4c0 7 FUNC GLOBAL DEFAULT 11 XIUndefineCursor + 109: 000000000000c4d0 618 FUNC GLOBAL DEFAULT 11 XIQueryPointer + 110: 000000000020f198 0 NOTYPE GLOBAL DEFAULT 23 _edata + 111: 000000000000c740 217 FUNC GLOBAL DEFAULT 11 XIBarrierReleasePointers + 112: 0000000000006310 412 FUNC GLOBAL DEFAULT 11 XOpenDevice + 113: 000000000000af90 28 FUNC GLOBAL DEFAULT 11 XIUngrabButton + 114: 00000000000067e0 198 FUNC GLOBAL DEFAULT 11 XSelectExtensionEvent + 115: 0000000000003500 171 FUNC GLOBAL DEFAULT 11 XDeleteDeviceProperty + 116: 000000000000bfb0 305 FUNC GLOBAL DEFAULT 11 XIWarpPointer + 117: 00000000000064b0 788 FUNC GLOBAL DEFAULT 11 XQueryDeviceState + 118: 000000000020f288 0 NOTYPE GLOBAL DEFAULT 24 _end + 119: 0000000000003090 214 FUNC GLOBAL DEFAULT 11 XChangeKeyboardDevice + 120: 000000000000a740 267 FUNC GLOBAL DEFAULT 11 XIGetFocus + 121: 00000000000043e0 5 FUNC GLOBAL DEFAULT 11 XFreeDeviceControl + 122: 0000000000003450 166 FUNC GLOBAL DEFAULT 11 XCloseDevice + 123: 000000000000b200 171 FUNC GLOBAL DEFAULT 11 XIDeleteProperty + 124: 000000000000b620 716 FUNC GLOBAL DEFAULT 11 XIGetProperty + 125: 000000000000b010 134 FUNC GLOBAL DEFAULT 11 XIUngrabTouchBegin + 126: 000000000020f198 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 127: 0000000000007140 222 FUNC GLOBAL DEFAULT 11 XUngrabDeviceKey + 128: 0000000000006ef0 191 FUNC GLOBAL DEFAULT 11 XSetDeviceFocus diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXrandr.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXrandr.so.2.txt new file mode 100644 index 000000000000..a9e4e62a68ed --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXrandr.so.2.txt @@ -0,0 +1,113 @@ +Library: /lib64/libXrandr.so.2 +Package: libXrandr-1.5.1-2.el7.x86_64 + + +Symbol table '.dynsym' contains 107 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000001b00 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XDeqAsyncHandler + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (4) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetSubpixelOrder + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead32 + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetAsyncReply + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSetLastRequestRead + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 26: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 28: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 31: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 32: 0000000000003b40 5 FUNC GLOBAL DEFAULT 11 XRRFreeGamma + 33: 0000000000004630 448 FUNC GLOBAL DEFAULT 11 XRRCreateMode + 34: 0000000000007850 878 FUNC GLOBAL DEFAULT 11 XRRGetMonitors + 35: 0000000000002440 66 FUNC GLOBAL DEFAULT 11 XRRRootToScreen + 36: 0000000000005930 878 FUNC GLOBAL DEFAULT 11 XRRGetOutputProperty + 37: 0000000000005490 965 FUNC GLOBAL DEFAULT 11 XRRChangeOutputProperty + 38: 0000000000004d20 5 FUNC GLOBAL DEFAULT 11 XRRFreeOutputInfo + 39: 00000000000062f0 10 FUNC GLOBAL DEFAULT 11 XRRGetScreenResources + 40: 0000000000007db0 42 FUNC GLOBAL DEFAULT 11 XRRAllocateMonitor + 41: 0000000000003b50 413 FUNC GLOBAL DEFAULT 11 XRRSetCrtcTransform + 42: 00000000000074e0 878 FUNC GLOBAL DEFAULT 11 XRRGetProviderProperty + 43: 0000000000006720 669 FUNC GLOBAL DEFAULT 11 XRRGetProviderInfo + 44: 00000000000069c0 5 FUNC GLOBAL DEFAULT 11 XRRFreeProviderInfo + 45: 0000000000002800 430 FUNC GLOBAL DEFAULT 11 XRRUpdateConfiguration + 46: 0000000000006560 427 FUNC GLOBAL DEFAULT 11 XRRGetProviderResources + 47: 0000000000004890 193 FUNC GLOBAL DEFAULT 11 XRRAddOutputMode + 48: 00000000000052e0 417 FUNC GLOBAL DEFAULT 11 XRRConfigureOutputProperty + 49: 0000000000004fa0 389 FUNC GLOBAL DEFAULT 11 XRRListOutputProperties + 50: 0000000000007de8 0 FUNC GLOBAL DEFAULT 12 _fini + 51: 0000000000002df0 10 FUNC GLOBAL DEFAULT 11 XRRConfigSizes + 52: 0000000000003350 25 FUNC GLOBAL DEFAULT 11 XRRSetScreenConfig + 53: 0000000000005860 193 FUNC GLOBAL DEFAULT 11 XRRDeleteOutputProperty + 54: 0000000000002e60 11 FUNC GLOBAL DEFAULT 11 XRRConfigCurrentConfiguration + 55: 0000000000002e50 12 FUNC GLOBAL DEFAULT 11 XRRConfigTimes + 56: 0000000000007ce0 193 FUNC GLOBAL DEFAULT 11 XRRDeleteMonitor + 57: 0000000000003cf0 1445 FUNC GLOBAL DEFAULT 11 XRRGetCrtcTransform + 58: 0000000000006ce0 427 FUNC GLOBAL DEFAULT 11 XRRQueryProviderProperty + 59: 0000000000001b00 0 FUNC GLOBAL DEFAULT 9 _init + 60: 0000000000006320 328 FUNC GLOBAL DEFAULT 11 XRRGetScreenSizeRange + 61: 0000000000004450 5 FUNC GLOBAL DEFAULT 11 XRRFreePanning + 62: 0000000000006e90 417 FUNC GLOBAL DEFAULT 11 XRRConfigureProviderProperty + 63: 0000000000002500 409 FUNC GLOBAL DEFAULT 11 XRRQueryVersion + 64: 00000000000047f0 155 FUNC GLOBAL DEFAULT 11 XRRDestroyMode + 65: 0000000000002e70 5 FUNC GLOBAL DEFAULT 11 XRRConfigCurrentRate + 66: 0000000000002e00 73 FUNC GLOBAL DEFAULT 11 XRRConfigRates + 67: 0000000000005130 427 FUNC GLOBAL DEFAULT 11 XRRQueryOutputProperty + 68: 0000000000004a40 734 FUNC GLOBAL DEFAULT 11 XRRGetOutputInfo + 69: 0000000000002e80 154 FUNC GLOBAL DEFAULT 11 XRRRotations + 70: 0000000000004d30 293 FUNC GLOBAL DEFAULT 11 XRRSetOutputPrimary + 71: 0000000000007040 965 FUNC GLOBAL DEFAULT 11 XRRChangeProviderProperty + 72: 00000000000030e0 108 FUNC GLOBAL DEFAULT 11 XRRGetScreenInfo + 73: 0000000000002de0 12 FUNC GLOBAL DEFAULT 11 XRRConfigRotations + 74: 00000000000035a0 5 FUNC GLOBAL DEFAULT 11 XRRFreeCrtcInfo + 75: 00000000000042a0 429 FUNC GLOBAL DEFAULT 11 XRRGetPanning + 76: 0000000000002f20 142 FUNC GLOBAL DEFAULT 11 XRRSizes + 77: 00000000000069d0 180 FUNC GLOBAL DEFAULT 11 XRRSetProviderOutputSource + 78: 0000000000002730 201 FUNC GLOBAL DEFAULT 11 XRRSelectInput + 79: 0000000000003040 146 FUNC GLOBAL DEFAULT 11 XRRTimes + 80: 000000000020a198 0 NOTYPE GLOBAL DEFAULT 23 _edata + 81: 0000000000003820 79 FUNC GLOBAL DEFAULT 11 XRRAllocGamma + 82: 0000000000003730 240 FUNC GLOBAL DEFAULT 11 XRRGetCrtcGammaSize + 83: 0000000000007bc0 281 FUNC GLOBAL DEFAULT 11 XRRSetMonitor + 84: 0000000000004e60 308 FUNC GLOBAL DEFAULT 11 XRRGetOutputPrimary + 85: 0000000000007410 193 FUNC GLOBAL DEFAULT 11 XRRDeleteProviderProperty + 86: 0000000000006300 7 FUNC GLOBAL DEFAULT 11 XRRGetScreenResourcesCurrent + 87: 0000000000006470 237 FUNC GLOBAL DEFAULT 11 XRRSetScreenSize + 88: 000000000020a1c8 0 NOTYPE GLOBAL DEFAULT 24 _end + 89: 0000000000007de0 5 FUNC GLOBAL DEFAULT 11 XRRFreeMonitors + 90: 0000000000003370 558 FUNC GLOBAL DEFAULT 11 XRRGetCrtcInfo + 91: 0000000000002490 73 FUNC GLOBAL DEFAULT 11 XRRQueryExtension + 92: 0000000000006310 5 FUNC GLOBAL DEFAULT 11 XRRFreeScreenResources + 93: 00000000000035b0 376 FUNC GLOBAL DEFAULT 11 XRRSetCrtcConfig + 94: 0000000000003870 412 FUNC GLOBAL DEFAULT 11 XRRGetCrtcGamma + 95: 0000000000003150 5 FUNC GLOBAL DEFAULT 11 XRRFreeScreenConfigInfo + 96: 0000000000006710 5 FUNC GLOBAL DEFAULT 11 XRRFreeProviderResources + 97: 0000000000002fb0 142 FUNC GLOBAL DEFAULT 11 XRRRates + 98: 0000000000004460 344 FUNC GLOBAL DEFAULT 11 XRRSetPanning + 99: 0000000000004a30 5 FUNC GLOBAL DEFAULT 11 XRRFreeModeInfo + 100: 0000000000004960 193 FUNC GLOBAL DEFAULT 11 XRRDeleteOutputMode + 101: 00000000000045c0 107 FUNC GLOBAL DEFAULT 11 XRRAllocModeInfo + 102: 0000000000006b50 389 FUNC GLOBAL DEFAULT 11 XRRListProviderProperties + 103: 0000000000003160 483 FUNC GLOBAL DEFAULT 11 XRRSetScreenConfigAndRate + 104: 0000000000003a10 297 FUNC GLOBAL DEFAULT 11 XRRSetCrtcGamma + 105: 0000000000006a90 180 FUNC GLOBAL DEFAULT 11 XRRSetProviderOffloadSink + 106: 000000000020a198 0 NOTYPE GLOBAL DEFAULT 24 __bss_start diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXrender.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXrender.so.1.txt new file mode 100644 index 000000000000..7cdd2edca419 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXrender.so.1.txt @@ -0,0 +1,100 @@ +Library: /lib64/libXrender.so.1 +Package: libXrender-0.9.10-1.el7.x86_64 + + +Symbol table '.dynsym' contains 94 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000018d8 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFlush + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XNextRequest + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XDeqAsyncHandler + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreePixmap + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFreeTemp + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XAllocTemp + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (4) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetErrorHandler + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 23: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XUnlockMutex_fn + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSync + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetAsyncReply + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XVIDtoVisual + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _XLockMutex_fn + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 34: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatData + 36: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _Xglobal_lock + 37: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XParseColor + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmap + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 41: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 42: 0000000000002d50 185 FUNC GLOBAL DEFAULT 11 XRenderCreateGlyphSet + 43: 0000000000007730 79 FUNC GLOBAL DEFAULT 11 XRenderQuerySubpixelOrder + 44: 0000000000004eb0 343 FUNC GLOBAL DEFAULT 11 XRenderSetPictureClipRegion + 45: 0000000000002250 197 FUNC GLOBAL DEFAULT 11 XRenderCreateCursor + 46: 0000000000005e50 725 FUNC GLOBAL DEFAULT 11 XRenderCompositeTrapezoids + 47: 0000000000002bf0 351 FUNC GLOBAL DEFAULT 11 XRenderSetPictureFilter + 48: 0000000000007ac0 517 FUNC GLOBAL DEFAULT 11 XRenderQueryPictIndexValues + 49: 0000000000007860 543 FUNC GLOBAL DEFAULT 11 XRenderFindFormat + 50: 0000000000005010 219 FUNC GLOBAL DEFAULT 11 XRenderSetPictureTransform + 51: 0000000000007cc8 0 FUNC GLOBAL DEFAULT 12 _fini + 52: 0000000000006690 658 FUNC GLOBAL DEFAULT 11 XRenderCompositeTriFan + 53: 0000000000005260 564 FUNC GLOBAL DEFAULT 11 XRenderCreateLinearGradient + 54: 0000000000006400 642 FUNC GLOBAL DEFAULT 11 XRenderCompositeTriStrip + 55: 0000000000003b60 1103 FUNC GLOBAL DEFAULT 11 XRenderCompositeString32 + 56: 0000000000002100 335 FUNC GLOBAL DEFAULT 11 XRenderComposite + 57: 00000000000077f0 105 FUNC GLOBAL DEFAULT 11 XRenderFindVisualFormat + 58: 000000000020a270 24 OBJECT GLOBAL DEFAULT 24 XRenderExtensionInfo + 59: 00000000000054a0 580 FUNC GLOBAL DEFAULT 11 XRenderCreateRadialGradient + 60: 0000000000002900 737 FUNC GLOBAL DEFAULT 11 XRenderQueryFilters + 61: 0000000000004d50 169 FUNC GLOBAL DEFAULT 11 XRenderChangePicture + 62: 0000000000002670 655 FUNC GLOBAL DEFAULT 11 XRenderFillRectangles + 63: 0000000000004c50 244 FUNC GLOBAL DEFAULT 11 XRenderCreatePicture + 64: 0000000000002ed0 133 FUNC GLOBAL DEFAULT 11 XRenderFreeGlyphSet + 65: 0000000000002e10 177 FUNC GLOBAL DEFAULT 11 XRenderReferenceGlyphSet + 66: 0000000000007a80 51 FUNC GLOBAL DEFAULT 11 XRenderFindStandardFormat + 67: 0000000000005930 1305 FUNC GLOBAL DEFAULT 11 XRenderCompositeDoublePoly + 68: 0000000000004640 832 FUNC GLOBAL DEFAULT 11 XRenderCompositeText32 + 69: 0000000000003710 1103 FUNC GLOBAL DEFAULT 11 XRenderCompositeString16 + 70: 0000000000002320 357 FUNC GLOBAL DEFAULT 11 XRenderCreateAnimCursor + 71: 00000000000076c0 101 FUNC GLOBAL DEFAULT 11 XRenderQueryVersion + 72: 0000000000003190 335 FUNC GLOBAL DEFAULT 11 XRenderFreeGlyphs + 73: 0000000000003fb0 832 FUNC GLOBAL DEFAULT 11 XRenderCompositeText8 + 74: 0000000000006130 708 FUNC GLOBAL DEFAULT 11 XRenderCompositeTriangles + 75: 0000000000006a60 967 FUNC GLOBAL DEFAULT 11 XRenderFindDisplay + 76: 0000000000007780 109 FUNC GLOBAL DEFAULT 11 XRenderSetSubpixelOrder + 77: 000000000020a257 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 78: 0000000000001c60 625 FUNC GLOBAL DEFAULT 11 XRenderAddTraps + 79: 00000000000056f0 548 FUNC GLOBAL DEFAULT 11 XRenderCreateConicalGradient + 80: 0000000000004e00 175 FUNC GLOBAL DEFAULT 11 XRenderSetPictureClipRectangles + 81: 000000000020a288 0 NOTYPE GLOBAL DEFAULT 24 _end + 82: 00000000000032e0 1066 FUNC GLOBAL DEFAULT 11 XRenderCompositeString8 + 83: 0000000000006f20 73 FUNC GLOBAL DEFAULT 11 XRenderQueryExtension + 84: 00000000000042f0 848 FUNC GLOBAL DEFAULT 11 XRenderCompositeText16 + 85: 000000000020a257 0 NOTYPE GLOBAL DEFAULT 23 _edata + 86: 0000000000005180 217 FUNC GLOBAL DEFAULT 11 XRenderCreateSolidFill + 87: 00000000000050f0 133 FUNC GLOBAL DEFAULT 11 XRenderFreePicture + 88: 0000000000002f60 554 FUNC GLOBAL DEFAULT 11 XRenderAddGlyphs + 89: 0000000000002490 471 FUNC GLOBAL DEFAULT 11 XRenderFillRectangle + 90: 0000000000001ee0 539 FUNC GLOBAL DEFAULT 11 XRenderParseColor + 91: 00000000000018d8 0 FUNC GLOBAL DEFAULT 9 _init + 92: 0000000000006f70 1871 FUNC GLOBAL DEFAULT 11 XRenderQueryFormats + 93: 000000000020a250 7 OBJECT GLOBAL DEFAULT 23 XRenderExtensionName diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXtst.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXtst.so.6.txt new file mode 100644 index 000000000000..80039fff6b83 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXtst.so.6.txt @@ -0,0 +1,73 @@ +Library: /lib64/libXtst.so.6 +Package: libXtst-1.2.3-1.el7.x86_64 + + +Symbol table '.dynsym' contains 67 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 00000000000012b8 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (3) + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XPending + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (4) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XDeqAsyncHandler + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (3) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetErrorDatabaseText + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryExtension + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (3) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetAsyncData + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (3) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextCreateExtension + 26: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (2) + 28: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 31: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (3) + 32: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (3) + 33: 0000000000003f58 0 FUNC GLOBAL DEFAULT 12 _fini + 34: 0000000000003ba0 300 FUNC GLOBAL DEFAULT 11 XTestFakeProximityEvent + 35: 0000000000003cd0 284 FUNC GLOBAL DEFAULT 11 XTestFakeDeviceMotionEvent + 36: 00000000000012b8 0 FUNC GLOBAL DEFAULT 9 _init + 37: 0000000000002d40 549 FUNC GLOBAL DEFAULT 11 XRecordEnableContextAsync + 38: 0000000000002a30 315 FUNC GLOBAL DEFAULT 11 XRecordFreeData + 39: 0000000000003670 204 FUNC GLOBAL DEFAULT 11 XTestFakeButtonEvent + 40: 00000000002051c0 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 41: 0000000000003470 280 FUNC GLOBAL DEFAULT 11 XTestCompareCursorWithWindow + 42: 0000000000205218 0 NOTYPE GLOBAL DEFAULT 24 _end + 43: 0000000000003a60 308 FUNC GLOBAL DEFAULT 11 XTestFakeDeviceButtonEvent + 44: 00000000000025e0 1100 FUNC GLOBAL DEFAULT 11 XRecordGetContext + 45: 00000000002051c0 0 NOTYPE GLOBAL DEFAULT 23 _edata + 46: 0000000000002460 219 FUNC GLOBAL DEFAULT 11 XRecordUnregisterClients + 47: 00000000000035a0 204 FUNC GLOBAL DEFAULT 11 XTestFakeKeyEvent + 48: 0000000000003df0 160 FUNC GLOBAL DEFAULT 11 XTestGrabControl + 49: 0000000000002340 275 FUNC GLOBAL DEFAULT 11 XRecordRegisterClients + 50: 0000000000002f80 160 FUNC GLOBAL DEFAULT 11 XRecordDisableContext + 51: 0000000000003920 308 FUNC GLOBAL DEFAULT 11 XTestFakeDeviceKeyEvent + 52: 00000000000020b0 13 FUNC GLOBAL DEFAULT 11 XRecordIdBaseMask + 53: 0000000000003320 329 FUNC GLOBAL DEFAULT 11 XTestQueryExtension + 54: 00000000000020c0 329 FUNC GLOBAL DEFAULT 11 XRecordQueryVersion + 55: 0000000000002540 148 FUNC GLOBAL DEFAULT 11 XRecordFreeState + 56: 0000000000003840 220 FUNC GLOBAL DEFAULT 11 XTestFakeRelativeMotionEvent + 57: 0000000000002b70 464 FUNC GLOBAL DEFAULT 11 XRecordEnableContext + 58: 0000000000003590 10 FUNC GLOBAL DEFAULT 11 XTestCompareCurrentCursorWithWindow + 59: 0000000000003eb0 168 FUNC GLOBAL DEFAULT 11 XTestDiscard + 60: 0000000000002f70 5 FUNC GLOBAL DEFAULT 11 XRecordProcessReplies + 61: 0000000000003020 160 FUNC GLOBAL DEFAULT 11 XRecordFreeContext + 62: 0000000000002210 288 FUNC GLOBAL DEFAULT 11 XRecordCreateContext + 63: 0000000000003ea0 5 FUNC GLOBAL DEFAULT 11 XTestSetVisualIDOfVisual + 64: 0000000000003e90 5 FUNC GLOBAL DEFAULT 11 XTestSetGContextOfGC + 65: 0000000000002330 15 FUNC GLOBAL DEFAULT 11 XRecordAllocRange + 66: 0000000000003740 251 FUNC GLOBAL DEFAULT 11 XTestFakeMotionEvent diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXxf86vm.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXxf86vm.so.1.txt new file mode 100644 index 000000000000..614e39d26f1d --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libXxf86vm.so.1.txt @@ -0,0 +1,56 @@ +Library: /lib64/libXxf86vm.so.1 +Package: libXxf86vm-1.1.4-1.el7.x86_64 + + +Symbol table '.dynsym' contains 50 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000e98 0 SECTION LOCAL DEFAULT 9 + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XFlush + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XData32 + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReply + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextFindDisplay + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XSend + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextRemoveDisplay + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMissingExtension + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XRead + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextCreateExtension + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadPad + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 19: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XextAddDisplay + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XEatDataWords + 22: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 23: 0000000000002f70 392 FUNC GLOBAL DEFAULT 11 XF86VidModeGetViewPort + 24: 00000000000014c0 344 FUNC GLOBAL DEFAULT 11 XF86VidModeGetGamma + 25: 0000000000003858 0 FUNC GLOBAL DEFAULT 12 _fini + 26: 0000000000001170 73 FUNC GLOBAL DEFAULT 11 XF86VidModeQueryExtension + 27: 00000000000031c0 411 FUNC GLOBAL DEFAULT 11 XF86VidModeGetDotClocks + 28: 0000000000000e98 0 FUNC GLOBAL DEFAULT 9 _init + 29: 00000000000020e0 563 FUNC GLOBAL DEFAULT 11 XF86VidModeDeleteModeLine + 30: 0000000000205120 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 31: 0000000000003100 188 FUNC GLOBAL DEFAULT 11 XF86VidModeSetViewPort + 32: 0000000000205148 0 NOTYPE GLOBAL DEFAULT 24 _end + 33: 0000000000001d20 945 FUNC GLOBAL DEFAULT 11 XF86VidModeAddModeLine + 34: 0000000000001280 304 FUNC GLOBAL DEFAULT 11 XF86VidModeQueryVersion + 35: 00000000000018c0 1115 FUNC GLOBAL DEFAULT 11 XF86VidModeGetAllModeLines + 36: 00000000000013b0 262 FUNC GLOBAL DEFAULT 11 XF86VidModeSetGamma + 37: 0000000000003480 376 FUNC GLOBAL DEFAULT 11 XF86VidModeGetGammaRamp + 38: 0000000000001620 657 FUNC GLOBAL DEFAULT 11 XF86VidModeGetModeLine + 39: 0000000000002890 640 FUNC GLOBAL DEFAULT 11 XF86VidModeSwitchToMode + 40: 0000000000205120 0 NOTYPE GLOBAL DEFAULT 23 _edata + 41: 0000000000003600 296 FUNC GLOBAL DEFAULT 11 XF86VidModeGetGammaRampSize + 42: 0000000000002bd0 924 FUNC GLOBAL DEFAULT 11 XF86VidModeGetMonitor + 43: 0000000000002320 549 FUNC GLOBAL DEFAULT 11 XF86VidModeModModeLine + 44: 00000000000027d0 190 FUNC GLOBAL DEFAULT 11 XF86VidModeSwitchMode + 45: 0000000000002b10 190 FUNC GLOBAL DEFAULT 11 XF86VidModeLockModeSwitch + 46: 0000000000002550 630 FUNC GLOBAL DEFAULT 11 XF86VidModeValidateModeLine + 47: 0000000000003360 275 FUNC GLOBAL DEFAULT 11 XF86VidModeSetGammaRamp + 48: 00000000000011c0 186 FUNC GLOBAL DEFAULT 11 XF86VidModeSetClientVersion + 49: 0000000000003730 296 FUNC GLOBAL DEFAULT 11 XF86VidModeGetPermissions diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libasound.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libasound.so.2.txt new file mode 100644 index 000000000000..80663143288d --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libasound.so.2.txt @@ -0,0 +1,1851 @@ +Library: /lib64/libasound.so.2 +Package: alsa-lib-1.1.8-1.el7.x86_64 + + +Symbol table '.dynsym' contains 1845 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (10) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (11) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (10) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semget@GLIBC_2.2.5 (10) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.2.5 (12) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (10) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (11) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (12) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mlock@GLIBC_2.2.5 (10) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (10) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (10) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (10) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.2.5 (10) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (10) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (10) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.2.5 (12) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (10) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.2.5 (12) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (10) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.2.5 (10) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (10) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exp@GLIBC_2.2.5 (13) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.2.5 (10) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.2.5 (10) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.2.5 (10) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (12) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (12) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (10) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.3.2 (14) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __open_2@GLIBC_2.7 (15) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.2.5 (12) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (10) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (10) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.2.5 (10) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (10) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __isoc99_vfscanf@GLIBC_2.7 (15) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.2.5 (10) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.2.5 (12) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (16) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (10) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (10) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freelocale@GLIBC_2.3 (17) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND system@GLIBC_2.2.5 (12) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (10) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.2.5 (10) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (12) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND newlocale@GLIBC_2.3 (17) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND snprintf@GLIBC_2.2.5 (10) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.2.5 (12) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nanosleep@GLIBC_2.2.5 (12) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (10) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.2.5 (12) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dladdr@GLIBC_2.2.5 (18) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (10) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (10) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (10) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (10) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __poll_chk@GLIBC_2.16 (19) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pow@GLIBC_2.2.5 (13) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.2.5 (10) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strnlen@GLIBC_2.2.5 (10) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND scandir@GLIBC_2.2.5 (10) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND log@GLIBC_2.2.5 (13) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (12) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.2.5 (10) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsid@GLIBC_2.2.5 (10) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (10) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (10) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (12) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (10) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (10) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __tls_get_addr@GLIBC_2.3 (20) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (14) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (10) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (10) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.2.5 (10) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND log10@GLIBC_2.2.5 (13) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.2.5 (10) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (11) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.2.5 (10) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftell@GLIBC_2.2.5 (10) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.2.5 (10) + 84: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (10) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (21) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socketpair@GLIBC_2.2.5 (10) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.2.5 (10) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrtf@GLIBC_2.2.5 (13) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (10) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.3.2 (14) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (10) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uselocale@GLIBC_2.3 (17) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.2.5 (18) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (12) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.2.5 (12) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (10) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.2.5 (10) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (10) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.2.5 (10) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rintf@GLIBC_2.2.5 (13) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND versionsort@GLIBC_2.2.5 (10) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __isoc99_sscanf@GLIBC_2.7 (15) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.2.5 (10) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (10) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.2.5 (10) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (10) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.2.5 (22) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.2.5 (10) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.3.4 (11) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.2.5 (18) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chown@GLIBC_2.2.5 (10) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (10) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (11) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (10) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.2.5 (12) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.2.5 (10) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.2.5 (10) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.2.5 (10) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (10) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.2.5 (12) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.3.2 (14) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (12) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.2.5 (10) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.2.5 (10) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND popen@GLIBC_2.2.5 (10) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (10) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtok@GLIBC_2.2.5 (10) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.2.5 (10) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.2.5 (12) + 131: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.2.5 (12) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semctl@GLIBC_2.2.5 (10) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (10) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.2.5 (10) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmget@GLIBC_2.2.5 (10) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.2.5 (10) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrnam_r@GLIBC_2.2.5 (10) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semop@GLIBC_2.2.5 (10) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (10) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (12) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (10) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (11) + 144: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrt@GLIBC_2.2.5 (13) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (10) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.2.5 (18) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ceil@GLIBC_2.2.5 (13) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (12) + 150: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (10) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.2.5 (12) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (10) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (12) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.2.5 (12) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlerror@GLIBC_2.2.5 (18) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (17) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND usleep@GLIBC_2.2.5 (10) + 158: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (10) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (11) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (10) + 161: 00000000000abf60 6 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_open_rom_file@@ALSA_0.9 + 162: 000000000003af60 57 FUNC GLOBAL DEFAULT 13 snd_dlsym@@ALSA_0.9 + 163: 00000000000a8300 6 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_sizeof@@ALSA_0.9 + 164: 00000000000323a0 72 FUNC GLOBAL DEFAULT 13 snd_config_test_id@@ALSA_0.9 + 165: 0000000000035340 1681 FUNC GLOBAL DEFAULT 13 snd_config_hook_load@@ALSA_0.9 + 166: 000000000004c900 6 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_sizeof@@ALSA_0.9 + 167: 00000000000a42c0 92 FUNC GLOBAL DEFAULT 13 snd_hwdep_close@@ALSA_0.9 + 168: 0000000000049d20 89 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_new@@ALSA_0.9 + 169: 0000000000042450 42 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_id@@ALSA_0.9 + 170: 000000000004a980 42 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_get_callback_private@@ALSA_0.9 + 171: 000000000003b8f0 89 FUNC GLOBAL DEFAULT 13 snd_card_load@@ALSA_0.9 + 172: 00000000002ff8e7 1 OBJECT GLOBAL DEFAULT 27 _snd_func_private_string_dlsym_config_evaluate_001@@ALSA_0.9 + 173: 000000000009e8a0 127 FUNC GLOBAL DEFAULT 13 snd_timer_poll_descriptors@@ALSA_0.9 + 174: 00000000000ab830 5 FUNC GLOBAL DEFAULT 13 snd_midi_event_reset_decode@@ALSA_0.9 + 175: 0000000000042580 69 FUNC GLOBAL DEFAULT 13 snd_ctl_event_malloc@@ALSA_0.9 + 176: 0000000000064b20 175 FUNC GLOBAL DEFAULT 13 snd_pcm_format_size@@ALSA_0.9 + 177: 000000000004a0c0 35 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_value@@ALSA_0.9 + 178: 00000000000a43b0 127 FUNC GLOBAL DEFAULT 13 snd_hwdep_poll_descriptors@@ALSA_0.9 + 179: 00000000000abf10 3 FUNC GLOBAL DEFAULT 13 snd_instr_fm_free@@ALSA_0.9 + 180: 000000000004be40 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_capture_switch@@ALSA_0.9 + 181: 0000000000056bf0 13 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_access_last@@ALSA_0.9 + 182: 00000000000578b0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9 + 183: 00000000000a8150 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_set_queue@@ALSA_0.9 + 184: 000000000005bc60 384 FUNC GLOBAL DEFAULT 13 snd_pcm_chmap_print@@ALSA_0.9 + 185: 000000000003f090 4 FUNC GLOBAL DEFAULT 13 snd_hctl_ctl@@ALSA_0.9 + 186: 00000000000a7e40 13 FUNC GLOBAL DEFAULT 13 snd_seq_get_port_info@@ALSA_0.9 + 187: 0000000000083be0 120 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_search_scope@@ALSA_0.9 + 188: 0000000000056e90 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_channels_near@@ALSA_0.9 + 189: 00000000000426f0 40 FUNC GLOBAL DEFAULT 13 snd_ctl_event_get_type@@ALSA_0.9 + 190: 000000000009de20 457 FUNC GLOBAL DEFAULT 13 _snd_pcm_mmap_emul_open@@ALSA_0.9 + 191: 00000000000432c0 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_item_name@@ALSA_0.9 + 192: 000000000003e800 45 FUNC GLOBAL DEFAULT 13 snd_hctl_async@@ALSA_0.9 + 193: 00000000000a7120 42 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_name@@ALSA_0.9 + 194: 000000000003f9e0 42 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_name@@ALSA_0.9 + 195: 0000000000055b80 68 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_dump@@ALSA_0.9 + 196: 0000000000055d40 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_is_block_transfer@@ALSA_0.9 + 197: 00000000000a7ea0 62 FUNC GLOBAL DEFAULT 13 snd_seq_query_next_port@@ALSA_0.9 + 198: 0000000000056dc0 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_channels_min@@ALSA_0.9.0rc4 + 199: 000000000005aa80 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_channels_min@ALSA_0.9 + 200: 0000000000099f80 1475 FUNC GLOBAL DEFAULT 13 _snd_pcm_softvol_open@@ALSA_0.9 + 201: 0000000000042930 158 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_id@@ALSA_0.9 + 202: 0000000000030c70 98 FUNC GLOBAL DEFAULT 13 snd_config_topdir@@ALSA_0.9 + 203: 000000000004b060 100 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_is_active@@ALSA_0.9 + 204: 000000000003e830 45 FUNC GLOBAL DEFAULT 13 snd_hctl_poll_descriptors_count@@ALSA_0.9 + 205: 00000000000a6e70 40 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_get_queues@@ALSA_0.9 + 206: 0000000000056e20 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_min@@ALSA_0.9 + 207: 000000000009ed20 69 FUNC GLOBAL DEFAULT 13 snd_timer_params_malloc@@ALSA_0.9 + 208: 000000000004a6b0 67 FUNC GLOBAL DEFAULT 13 snd_mixer_first_elem@@ALSA_0.9 + 209: 00000000000abe90 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_cluster@@ALSA_0.9 + 210: 00000000000a6870 41 FUNC GLOBAL DEFAULT 13 snd_seq_name@@ALSA_0.9 + 211: 0000000000038620 8 FUNC GLOBAL DEFAULT 13 snd_func_iadd@@ALSA_0.9 + 212: 0000000000031870 150 FUNC GLOBAL DEFAULT 13 snd_config_make@@ALSA_0.9 + 213: 00000000000abe00 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_cmd@@ALSA_0.9 + 214: 0000000000042310 135 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_clear@@ALSA_0.9 + 215: 0000000000043900 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_numid@@ALSA_0.9 + 216: 00000000000b2d30 246 FUNC GLOBAL DEFAULT 13 snd_tplg_free@@ALSA_0.9 + 217: 0000000000032430 115 FUNC GLOBAL DEFAULT 13 snd_config_update_free@@ALSA_0.9 + 218: 00000000000a9830 67 FUNC GLOBAL DEFAULT 13 snd_seq_set_queue_timer@@ALSA_0.9 + 219: 0000000000049a60 9 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_empty@@ALSA_0.9 + 220: 00000000000b29f0 272 FUNC GLOBAL DEFAULT 13 snd_tplg_build@@ALSA_0.9 + 221: 000000000003a330 10 FUNC GLOBAL DEFAULT 13 snd_output_flush@@ALSA_0.9 + 222: 00000000000a9260 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_get_skew_base@@ALSA_0.9 + 223: 0000000000064dc0 53 FUNC GLOBAL DEFAULT 13 snd_pcm_format_silence_16@@ALSA_0.9 + 224: 00000000000a20d0 162 FUNC GLOBAL DEFAULT 13 snd_rawmidi_open@@ALSA_0.9 + 225: 00000000002ff8fe 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_lfloat_open_dlsym_pcm_001@@ALSA_0.9 + 226: 00000000000a7620 69 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_malloc@@ALSA_0.9 + 227: 0000000000043d40 91 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_byte@@ALSA_0.9 + 228: 000000000009b1b0 55 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_params_reset@@ALSA_0.9 + 229: 00000000000a1600 6 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_sizeof@@ALSA_0.9 + 230: 00000000000a0680 69 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_malloc@@ALSA_0.9 + 231: 000000000009f270 41 FUNC GLOBAL DEFAULT 13 snd_timer_status_get_lost@@ALSA_0.9 + 232: 0000000000054fe0 329 FUNC GLOBAL DEFAULT 13 snd_pcm_avail_delay@@ALSA_0.9 + 233: 0000000000031ba0 56 FUNC GLOBAL DEFAULT 13 snd_config_set_pointer@@ALSA_0.9 + 234: 000000000009eaf0 6 FUNC GLOBAL DEFAULT 13 snd_timer_info_sizeof@@ALSA_0.9 + 235: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9 + 236: 00000000000abe20 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_name@@ALSA_0.9 + 237: 000000000009e920 74 FUNC GLOBAL DEFAULT 13 snd_timer_poll_descriptors_revents@@ALSA_0.9 + 238: 00000000000ab810 23 FUNC GLOBAL DEFAULT 13 snd_midi_event_reset_encode@@ALSA_0.9 + 239: 00000000000a2460 47 FUNC GLOBAL DEFAULT 13 snd_rawmidi_drop@@ALSA_0.9 + 240: 00000000000575a0 87 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_period_size_near@@ALSA_0.9 + 241: 00000000000a9600 42 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_get_id@@ALSA_0.9 + 242: 00000000000a7720 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_addr@@ALSA_0.9 + 243: 0000000000043540 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_index@@ALSA_0.9 + 244: 000000000004b2b0 159 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_volume_range@@ALSA_0.9 + 245: 0000000000055cc0 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_is_batch@@ALSA_0.9 + 246: 000000000004ac50 210 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_register@@ALSA_0.9 + 247: 000000000004add0 191 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_id@@ALSA_0.9 + 248: 00000000002ff8f1 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_alaw_open_dlsym_pcm_001@@ALSA_0.9 + 249: 000000000004a700 67 FUNC GLOBAL DEFAULT 13 snd_mixer_last_elem@@ALSA_0.9 + 250: 000000000009d190 465 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_create@@ALSA_0.9 + 251: 00000000000a4350 41 FUNC GLOBAL DEFAULT 13 snd_hwdep_type@@ALSA_0.9 + 252: 000000000004c4a0 152 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_switch@@ALSA_0.9 + 253: 0000000000036f80 127 FUNC GLOBAL DEFAULT 13 snd_config_update_ref@@ALSA_0.9 + 254: 000000000003b490 254 FUNC GLOBAL DEFAULT 13 snd_receive_fd@@ALSA_0.9 + 255: 00000000002ff903 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_asym_open_dlsym_pcm_001@@ALSA_0.9 + 256: 000000000003fa70 42 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_set_callback_private@@ALSA_0.9 + 257: 000000000004b6f0 136 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_playback_switch@@ALSA_0.9 + 258: 0000000000056400 37 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_any@@ALSA_0.9 + 259: 00000000000778c0 508 FUNC GLOBAL DEFAULT 13 snd_pcm_plug_open@@ALSA_0.9 + 260: 000000000003b5f0 98 FUNC GLOBAL DEFAULT 13 snd_shm_area_destroy@@ALSA_0.9 + 261: 0000000000040fd0 62 FUNC GLOBAL DEFAULT 13 snd_ctl_rawmidi_info@@ALSA_0.9 + 262: 000000000003eac0 67 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_prev@@ALSA_0.9 + 263: 00000000000499e0 122 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_detach@@ALSA_0.9 + 264: 0000000000040dd0 59 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_lock@@ALSA_0.9 + 265: 0000000000058910 92 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_tstamp@@ALSA_0.9 + 266: 000000000003eea0 42 FUNC GLOBAL DEFAULT 13 snd_hctl_get_callback_private@@ALSA_0.9 + 267: 00000000000934b0 137 FUNC GLOBAL DEFAULT 13 snd_pcm_direct_poll_descriptors@@ALSA_0.9 + 268: 00000000000aa1b0 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_channel@@ALSA_0.9 + 269: 000000000004ca40 56 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_set_name@@ALSA_0.9 + 270: 00000000000abdd0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_copy@@ALSA_0.9 + 271: 00000000000a2fd0 509 FUNC GLOBAL DEFAULT 13 _snd_rawmidi_hw_open@@ALSA_0.9 + 272: 00000000000aa210 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_tag@@ALSA_0.9 + 273: 0000000000058cd0 40 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_device@@ALSA_0.9 + 274: 00000000000422b0 69 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_malloc@@ALSA_0.9 + 275: 00000000000533a0 112 FUNC GLOBAL DEFAULT 13 snd_pcm_link@@ALSA_0.9 + 276: 00000000000a7ef0 69 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_malloc@@ALSA_0.9 + 277: 0000000000057240 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time@@ALSA_0.9 + 278: 00000000000aa810 42 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_get_output_room@@ALSA_0.9 + 279: 0000000000058500 3 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_xfer_align@@ALSA_0.9 + 280: 0000000000052170 108 FUNC GLOBAL DEFAULT 13 snd_pcm_async@@ALSA_0.9 + 281: 00000000000368b0 1660 FUNC GLOBAL DEFAULT 13 snd_config_update_r@@ALSA_0.9 + 282: 00000000000a98f0 222 FUNC GLOBAL DEFAULT 13 snd_seq_event_output_buffer@@ALSA_0.9 + 283: 0000000000064a50 12 FUNC GLOBAL DEFAULT 13 snd_pcm_format_float@@ALSA_0.9 + 284: 00000000000a1390 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_stream@@ALSA_0.9 + 285: 00000000000aa520 115 FUNC GLOBAL DEFAULT 13 snd_seq_drop_input@@ALSA_0.9 + 286: 00000000000a4cb0 40 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_get_index@@ALSA_0.9 + 287: 0000000000056780 80 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_copy@@ALSA_0.9 + 288: 0000000000056fc0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_last@@ALSA_0.9.0rc4 + 289: 000000000005b600 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_last@ALSA_0.9 + 290: 00000000000436a0 51 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_name@@ALSA_0.9 + 291: 0000000000057520 122 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_minmax@@ALSA_0.9 + 292: 0000000000057c50 9 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_tick_time@@ALSA_0.9 + 293: 000000000004a860 42 FUNC GLOBAL DEFAULT 13 snd_mixer_set_callback@@ALSA_0.9 + 294: 00000000002ff610 8 OBJECT GLOBAL DEFAULT 26 snd_err_msg@@ALSA_0.9 + 295: 0000000000038220 212 FUNC GLOBAL DEFAULT 13 snd_func_igetenv@@ALSA_0.9 + 296: 0000000000042730 69 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_malloc@@ALSA_0.9 + 297: 000000000004ab00 42 FUNC GLOBAL DEFAULT 13 snd_mixer_class_get_event@@ALSA_0.9 + 298: 0000000000056ed0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_rate_min@@ALSA_0.9 + 299: 0000000000045a30 2820 FUNC GLOBAL DEFAULT 13 snd_sctl_build@@ALSA_0.9 + 300: 0000000000054310 128 FUNC GLOBAL DEFAULT 13 snd_pcm_bytes_to_frames@@ALSA_0.9 + 301: 000000000009ecb0 90 FUNC GLOBAL DEFAULT 13 snd_timer_info@@ALSA_0.9 + 302: 00000000000aabb0 159 FUNC GLOBAL DEFAULT 13 snd_seq_create_simple_port@@ALSA_0.9 + 303: 00000000000324b0 46 FUNC GLOBAL DEFAULT 13 snd_config_iterator_first@@ALSA_0.9 + 304: 0000000000040190 41 FUNC GLOBAL DEFAULT 13 snd_ctl_type@@ALSA_0.9 + 305: 000000000004c880 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_enum_item@@ALSA_0.9 + 306: 00000000000aa060 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_channel@@ALSA_0.9 + 307: 0000000000038300 792 FUNC GLOBAL DEFAULT 13 snd_func_concat@@ALSA_0.9 + 308: 0000000000040870 113 FUNC GLOBAL DEFAULT 13 snd_ctl_add_bytes_elem_set@@ALSA_0.9 + 309: 0000000000064d80 53 FUNC GLOBAL DEFAULT 13 snd_pcm_format_silence_32@@ALSA_0.9 + 310: 00000000002ff8f5 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_multi_open_dlsym_pcm_001@@ALSA_0.9 + 311: 0000000000042510 45 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_mixername@@ALSA_0.9 + 312: 0000000000043850 59 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_compare@@ALSA_0.9 + 313: 00000000000a47a0 140 FUNC GLOBAL DEFAULT 13 snd_hwdep_write@@ALSA_0.9 + 314: 00000000000a4d40 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_get_image@@ALSA_0.9 + 315: 0000000000063630 759 FUNC GLOBAL DEFAULT 13 snd_pcm_query_chmaps_from_hw@@ALSA_0.9 + 316: 00000000000a6e10 96 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_copy@@ALSA_0.9 + 317: 0000000000042820 128 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_copy@@ALSA_0.9 + 318: 00000000000a0760 4 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_tid@@ALSA_0.9 + 319: 00000000000aaa30 27 FUNC GLOBAL DEFAULT 13 snd_seq_unset_bit@@ALSA_0.9 + 320: 00000000000a7670 5 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_free@@ALSA_0.9 + 321: 0000000000041130 355 FUNC GLOBAL DEFAULT 13 snd_ctl_wait@@ALSA_0.9 + 322: 00000000000573c0 90 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_period_size_max@@ALSA_0.9 + 323: 000000000003b3a0 238 FUNC GLOBAL DEFAULT 13 snd_send_fd@@ALSA_0.9 + 324: 000000000007d7c0 782 FUNC GLOBAL DEFAULT 13 snd_pcm_file_open@@ALSA_0.9 + 325: 0000000000053e00 477 FUNC GLOBAL DEFAULT 13 snd_pcm_dump_hw_setup@@ALSA_0.9 + 326: 00000000000abda0 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_sizeof@@ALSA_0.9 + 327: 0000000000038b30 334 FUNC GLOBAL DEFAULT 13 snd_func_card_id@@ALSA_0.9 + 328: 00000000000439f0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_index@@ALSA_0.9 + 329: 0000000000031960 40 FUNC GLOBAL DEFAULT 13 snd_config_make_compound@@ALSA_0.9 + 330: 00000000000a9350 266 FUNC GLOBAL DEFAULT 13 snd_seq_get_queue_tempo@@ALSA_0.9 + 331: 00000000000a8180 53 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_set_exclusive@@ALSA_0.9 + 332: 00000000000aa000 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_time@@ALSA_0.9 + 333: 00000000000a0780 4 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_card@@ALSA_0.9 + 334: 0000000000054600 76 FUNC GLOBAL DEFAULT 13 snd_pcm_open_lconf@@ALSA_0.9 + 335: 000000000004b810 144 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_dB@@ALSA_0.9 + 336: 000000000004b140 103 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_playback_channel@@ALSA_0.9 + 337: 000000000003b590 78 FUNC GLOBAL DEFAULT 13 snd_shm_area_create@@ALSA_0.9 + 338: 0000000000073ec0 1320 FUNC GLOBAL DEFAULT 13 snd_pcm_rate_open@@ALSA_0.9 + 339: 00000000000a94b0 69 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_malloc@@ALSA_0.9 + 340: 000000000004a280 280 FUNC GLOBAL DEFAULT 13 snd_mixer_close@@ALSA_0.9 + 341: 000000000003e7d0 45 FUNC GLOBAL DEFAULT 13 snd_hctl_nonblock@@ALSA_0.9 + 342: 00000000000a7c10 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_timestamp_queue@@ALSA_0.9 + 343: 00000000000572e0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_period_time_first@@ALSA_0.9 + 344: 0000000000058210 51 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_xrun_mode@@ALSA_0.9 + 345: 0000000000057930 79 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9 + 346: 0000000000056ab0 69 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_malloc@@ALSA_0.9 + 347: 000000000009f3f0 132 FUNC GLOBAL DEFAULT 13 snd_timer_read@@ALSA_0.9 + 348: 00000000000a4540 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_free@@ALSA_0.9 + 349: 0000000000040ab0 238 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_add_iec958@@ALSA_0.9 + 350: 0000000000083d90 97 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_get_now@@ALSA_0.9 + 351: 0000000000055380 295 FUNC GLOBAL DEFAULT 13 snd_pcm_areas_silence@@ALSA_0.9 + 352: 0000000000056f70 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_minmax@@ALSA_0.9 + 353: 0000000000058780 6 FUNC GLOBAL DEFAULT 13 snd_pcm_status_sizeof@@ALSA_0.9 + 354: 00000000000b0d40 142 FUNC GLOBAL DEFAULT 13 snd_use_case_mgr_reload@@ALSA_0.9 + 355: 0000000000056bc0 18 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_access@@ALSA_0.9 + 356: 000000000002fd30 56 FUNC GLOBAL DEFAULT 13 snd_shm_area_destructor@@ALSA_0.9 + 357: 00000000000a6fe0 69 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_malloc@@ALSA_0.9 + 358: 00000000000a14e0 44 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_subdevices_avail@@ALSA_0.9 + 359: 00000000000420a0 242 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_add_integer64@@ALSA_0.9 + 360: 00000000000a4d10 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_get_length@@ALSA_0.9 + 361: 00000000000a0ae0 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_get_card@@ALSA_0.9 + 362: 00000000000390e0 1065 FUNC GLOBAL DEFAULT 13 snd_func_pcm_args_by_class@@ALSA_0.9 + 363: 00000000000a10e0 71 FUNC GLOBAL DEFAULT 13 snd_rawmidi_poll_descriptors@@ALSA_0.9 + 364: 0000000000037ba0 100 FUNC GLOBAL DEFAULT 13 snd_config_get_bool_ascii@@ALSA_0.9 + 365: 0000000000042d50 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_type@@ALSA_0.9 + 366: 0000000000044db0 347 FUNC GLOBAL DEFAULT 13 _snd_ctl_hw_open@@ALSA_0.9 + 367: 00000000000b0dd0 16 FUNC GLOBAL DEFAULT 13 snd_use_case_mgr_close@@ALSA_0.9 + 368: 00000000000abb70 560 FUNC GLOBAL DEFAULT 13 snd_midi_event_decode@@ALSA_0.9 + 369: 00000000000aaff0 88 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_pool_input@@ALSA_0.9 + 370: 000000000003ee40 42 FUNC GLOBAL DEFAULT 13 snd_hctl_set_callback@@ALSA_0.9 + 371: 00000000000583d0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_sleep_min@@ALSA_0.9 + 372: 00000000000565a0 6 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_sizeof@@ALSA_0.9 + 373: 0000000000031d00 78 FUNC GLOBAL DEFAULT 13 snd_config_get_integer@@ALSA_0.9 + 374: 00000000000a4620 40 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_get_device@@ALSA_0.9 + 375: 00000000000a9690 71 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_set_id@@ALSA_0.9 + 376: 00000000000a87a0 5 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_free@@ALSA_0.9 + 377: 00000000000a88f0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_get_flags@@ALSA_0.9 + 378: 000000000005ab70 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_size_min@ALSA_0.9 + 379: 0000000000056d60 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_subformat_last@@ALSA_0.9.0rc4 + 380: 000000000005b560 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_subformat_last@ALSA_0.9 + 381: 0000000000057360 90 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_size_min@@ALSA_0.9.0rc4 + 382: 000000000009ee60 43 FUNC GLOBAL DEFAULT 13 snd_timer_params_get_auto_start@@ALSA_0.9 + 383: 0000000000058310 113 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_tstamp_type@@ALSA_0.9 + 384: 0000000000054ec0 275 FUNC GLOBAL DEFAULT 13 snd_pcm_avail@@ALSA_0.9 + 385: 00000000000583e0 9 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_sleep_min@@ALSA_0.9 + 386: 0000000000042300 5 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_free@@ALSA_0.9 + 387: 00000000000a36e0 568 FUNC GLOBAL DEFAULT 13 snd_rawmidi_virtual_open@@ALSA_0.9 + 388: 000000000007a020 3096 FUNC GLOBAL DEFAULT 13 _snd_pcm_multi_open@@ALSA_0.9 + 389: 00000000002ff902 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_dsnoop_open_dlsym_pcm_001@@ALSA_0.9 + 390: 00000000000a8e30 5 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_free@@ALSA_0.9 + 391: 000000000003e920 80 FUNC GLOBAL DEFAULT 13 snd_hctl_close@@ALSA_0.9 + 392: 0000000000057da0 302 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_current@@ALSA_0.9 + 393: 00000000000a6a40 119 FUNC GLOBAL DEFAULT 13 snd_seq_close@@ALSA_0.9 + 394: 0000000000042d80 44 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_readable@@ALSA_0.9 + 395: 0000000000056cc0 18 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_format_mask@@ALSA_0.9 + 396: 0000000000055eb0 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_can_pause@@ALSA_0.9 + 397: 00000000000ab800 7 FUNC GLOBAL DEFAULT 13 snd_midi_event_no_status@@ALSA_0.9 + 398: 00000000000a4ce0 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_get_name@@ALSA_0.9 + 399: 0000000000057280 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_max@@ALSA_0.9 + 400: 0000000000043f80 93 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_set_bytes@@ALSA_0.9 + 401: 00000000000a0d50 360 FUNC GLOBAL DEFAULT 13 snd_timer_query_hw_open@@ALSA_0.9 + 402: 0000000000035bc0 273 FUNC GLOBAL DEFAULT 13 snd_config_search_definition@@ALSA_0.9 + 403: 000000000009d3d0 83 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_avail@@ALSA_0.9 + 404: 00000000000aa9f0 57 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_event_filter_add@@ALSA_0.9 + 405: 00000000000b0e60 1156 FUNC GLOBAL DEFAULT 13 snd_use_case_get_list@@ALSA_0.9 + 406: 00000000000a4380 43 FUNC GLOBAL DEFAULT 13 snd_hwdep_poll_descriptors_count@@ALSA_0.9 + 407: 00000000000578d0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9.0rc4 + 408: 00000000000a0b70 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_set_subdevice@@ALSA_0.9 + 409: 00000000000abe40 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_format@@ALSA_0.9 + 410: 000000000005b770 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_last@ALSA_0.9 + 411: 00000000002ff8fc 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_hooks_open_dlsym_pcm_001@@ALSA_0.9 + 412: 00000000000aa240 430 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events@@ALSA_0.9 + 413: 000000000004abf0 44 FUNC GLOBAL DEFAULT 13 snd_mixer_class_set_private_free@@ALSA_0.9 + 414: 00000000000578c0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9 + 415: 0000000000041aa0 112 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_copy@@ALSA_0.9 + 416: 0000000000054e40 120 FUNC GLOBAL DEFAULT 13 snd_pcm_avail_update@@ALSA_0.9 + 417: 0000000000042480 42 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_driver@@ALSA_0.9 + 418: 00000000000a86a0 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_set_type@@ALSA_0.9 + 419: 00000000000abed0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_type@@ALSA_0.9 + 420: 0000000000056800 27 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_test@@ALSA_0.9 + 421: 00000000000a72d0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_event_lost@@ALSA_0.9 + 422: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.0 + 423: 0000000000055dc0 107 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_is_monotonic@@ALSA_0.9 + 424: 00000000000a1050 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_type@@ALSA_0.9 + 425: 0000000000056390 107 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_fifo_size@@ALSA_0.9 + 426: 0000000000057840 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_min@@ALSA_0.9 + 427: 0000000000058520 56 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_start_threshold@@ALSA_0.9 + 428: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.3 + 429: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.5 + 430: 000000000009f100 69 FUNC GLOBAL DEFAULT 13 snd_timer_status_malloc@@ALSA_0.9 + 431: 000000000005e6a0 375 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_param_dump@@ALSA_0.9 + 432: 00000000000a0a20 40 FUNC GLOBAL DEFAULT 13 snd_timer_id_get_class@@ALSA_0.9 + 433: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.7 + 434: 0000000000056720 69 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_malloc@@ALSA_0.9 + 435: 00000000000a8b70 67 FUNC GLOBAL DEFAULT 13 snd_seq_get_queue_info@@ALSA_0.9 + 436: 00000000000a4c20 144 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_copy@@ALSA_0.9 + 437: 00000000000abb00 99 FUNC GLOBAL DEFAULT 13 snd_midi_event_encode@@ALSA_0.9 + 438: 00000000000566d0 29 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_set@@ALSA_0.9 + 439: 0000000000084090 69 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_malloc@@ALSA_0.9 + 440: 0000000000041e00 242 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_add_integer@@ALSA_0.9 + 441: 0000000000031ae0 57 FUNC GLOBAL DEFAULT 13 snd_config_set_real@@ALSA_0.9 + 442: 00000000000a7e50 75 FUNC GLOBAL DEFAULT 13 snd_seq_set_port_info@@ALSA_0.9 + 443: 0000000000056d50 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_subformat_first@@ALSA_0.9.0rc4 + 444: 00000000000571f0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_period_time@@ALSA_0.9 + 445: 000000000005b1a0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_subformat_first@ALSA_0.9 + 446: 000000000009d3c0 6 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_set_state@@ALSA_0.9 + 447: 000000000003ac50 35 FUNC GLOBAL DEFAULT 13 snd_lib_error_set_local@@ALSA_0.9 + 448: 000000000009e970 92 FUNC GLOBAL DEFAULT 13 snd_timer_nonblock@@ALSA_0.9 + 449: 0000000000058060 47 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_boundary@@ALSA_0.9 + 450: 0000000000053da0 27 FUNC GLOBAL DEFAULT 13 snd_pcm_tstamp_type_name@@ALSA_0.9 + 451: 000000000004c780 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_enum_item_name@@ALSA_0.9 + 452: 000000000009f180 144 FUNC GLOBAL DEFAULT 13 snd_timer_status_copy@@ALSA_0.9 + 453: 0000000000057cf0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9.0rc4 + 454: 000000000005b820 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_last@ALSA_0.9 + 455: 00000000000a2250 6 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_sizeof@@ALSA_0.9 + 456: 00000000000a9710 274 FUNC GLOBAL DEFAULT 13 snd_seq_get_queue_timer@@ALSA_0.9 + 457: 00000000000a04c0 147 FUNC GLOBAL DEFAULT 13 snd_timer_query_open@@ALSA_0.9 + 458: 00000000000579f0 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size@@ALSA_0.9 + 459: 00000000002ff8eb 1 OBJECT GLOBAL DEFAULT 27 __snd_ctl_shm_open_dlsym_control_001@@ALSA_0.9 + 460: 00000000000482b0 1242 FUNC GLOBAL DEFAULT 13 _snd_ctl_shm_open@@ALSA_0.9 + 461: 00000000000a9630 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_get_resolution@@ALSA_0.9 + 462: 00000000000562a0 126 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate_numden@@ALSA_0.9 + 463: 00000000000ab070 204 FUNC GLOBAL DEFAULT 13 snd_seq_sync_output_queue@@ALSA_0.9 + 464: 00000000000a9230 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_get_skew@@ALSA_0.9 + 465: 00000000002ff905 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_softvol_open_dlsym_pcm_001@@ALSA_0.9 + 466: 0000000000038a30 111 FUNC GLOBAL DEFAULT 13 snd_func_card_inum@@ALSA_0.9 + 467: 00000000000664e0 754 FUNC GLOBAL DEFAULT 13 snd_pcm_munmap@@ALSA_0.9 + 468: 000000000003e890 45 FUNC GLOBAL DEFAULT 13 snd_hctl_poll_descriptors_revents@@ALSA_0.9 + 469: 000000000004c050 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_ask_capture_dB_vol@@ALSA_0.9 + 470: 0000000000064bd0 420 FUNC GLOBAL DEFAULT 13 snd_pcm_format_silence_64@@ALSA_0.9 + 471: 0000000000049f30 24 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_free@@ALSA_0.9 + 472: 0000000000056e00 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels@@ALSA_0.9 + 473: 00000000002ff8e2 1 OBJECT GLOBAL DEFAULT 27 _snd_func_private_pcm_subdevice_dlsym_config_evaluate_001@@ALSA_0.9 + 474: 00000000000a1570 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_set_stream@@ALSA_0.9 + 475: 0000000000057c70 9 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9.0rc4 + 476: 000000000009f000 41 FUNC GLOBAL DEFAULT 13 snd_timer_params_get_queue_size@@ALSA_0.9 + 477: 000000000005af30 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_tick_time_max@ALSA_0.9 + 478: 0000000000032520 5 FUNC GLOBAL DEFAULT 13 snd_config_iterator_entry@@ALSA_0.9 + 479: 00000000002ff8e5 1 OBJECT GLOBAL DEFAULT 27 _snd_func_card_id_dlsym_config_evaluate_001@@ALSA_0.9 + 480: 00000000002ff906 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_mmap_emul_open_dlsym_pcm_001@@ALSA_0.9 + 481: 0000000000058250 113 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_tstamp_mode@@ALSA_0.9 + 482: 00000000000a86d0 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_set_index@@ALSA_0.9 + 483: 0000000000043ce0 87 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_enumerated@@ALSA_0.9 + 484: 0000000000057740 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_max@@ALSA_0.9 + 485: 00000000000a9fd0 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_queue@@ALSA_0.9 + 486: 0000000000054890 199 FUNC GLOBAL DEFAULT 13 snd_pcm_close@@ALSA_0.9 + 487: 0000000000057ad0 126 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_minmax@@ALSA_0.9 + 488: 0000000000058fc0 41 FUNC GLOBAL DEFAULT 13 snd_pcm_info_set_stream@@ALSA_0.9 + 489: 0000000000055130 586 FUNC GLOBAL DEFAULT 13 snd_pcm_area_silence@@ALSA_0.9 + 490: 0000000000058e50 44 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_subclass@@ALSA_0.9 + 491: 00000000000aa8a0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_set_output_pool@@ALSA_0.9 + 492: 0000000000043bc0 88 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_boolean@@ALSA_0.9 + 493: 00000000000aa090 41 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_event_type@@ALSA_0.9 + 494: 0000000000086290 431 FUNC GLOBAL DEFAULT 13 snd_pcm_lfloat_open@@ALSA_0.9 + 495: 00000000000819e0 1660 FUNC GLOBAL DEFAULT 13 _snd_pcm_share_open@@ALSA_0.9 + 496: 00000000002ff8f2 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_adpcm_open_dlsym_pcm_001@@ALSA_0.9 + 497: 0000000000040e10 59 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_unlock@@ALSA_0.9 + 498: 00000000000a09a0 70 FUNC GLOBAL DEFAULT 13 snd_timer_id_copy@@ALSA_0.9 + 499: 0000000000056dc0 15 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_channels_min@@ALSA_0.9 + 500: 00000000000a6d10 59 FUNC GLOBAL DEFAULT 13 snd_seq_get_output_buffer_size@@ALSA_0.9 + 501: 0000000000050540 79 FUNC GLOBAL DEFAULT 13 snd_mixer_sbasic_info@@ALSA_0.9 + 502: 00000000000a8000 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_get_dest@@ALSA_0.9 + 503: 00000000000a8bc0 67 FUNC GLOBAL DEFAULT 13 snd_seq_set_queue_info@@ALSA_0.9 + 504: 0000000000034e90 54 FUNC GLOBAL DEFAULT 13 snd_config_evaluate@@ALSA_0.9 + 505: 00000000000a4430 74 FUNC GLOBAL DEFAULT 13 snd_hwdep_poll_descriptors_revents@@ALSA_0.9 + 506: 000000000009ef00 54 FUNC GLOBAL DEFAULT 13 snd_timer_params_set_early_event@@ALSA_0.9 + 507: 00000000000a1750 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_get_buffer_size@@ALSA_0.9 + 508: 00000000000aae40 113 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_name@@ALSA_0.9 + 509: 0000000000040f90 62 FUNC GLOBAL DEFAULT 13 snd_ctl_rawmidi_next_device@@ALSA_0.9 + 510: 0000000000053410 70 FUNC GLOBAL DEFAULT 13 snd_pcm_unlink@@ALSA_0.9 + 511: 0000000000083e70 18 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_set_name@@ALSA_0.9 + 512: 00000000000b2b70 4 FUNC GLOBAL DEFAULT 13 snd_tplg_verbose@@ALSA_0.9 + 513: 00000000000aa870 42 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_get_input_free@@ALSA_0.9 + 514: 000000000005bc00 27 FUNC GLOBAL DEFAULT 13 snd_pcm_chmap_type_name@@ALSA_0.9 + 515: 00000000000577e0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9.0rc4 + 516: 000000000005ac10 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_time_min@ALSA_0.9 + 517: 00000000000a8960 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_set_owner@@ALSA_0.9 + 518: 0000000000056d10 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_subformat@@ALSA_0.9 + 519: 000000000005a8a0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_time@ALSA_0.9 + 520: 00000000000571f0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_time@@ALSA_0.9.0rc4 + 521: 0000000000057030 67 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate_resample@@ALSA_0.9 + 522: 000000000003f880 42 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_hctl@@ALSA_0.9 + 523: 0000000000049d80 421 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_add@@ALSA_0.9 + 524: 0000000000056660 32 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_none@@ALSA_0.9 + 525: 000000000003fa40 42 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_set_callback@@ALSA_0.9 + 526: 000000000009e9d0 91 FUNC GLOBAL DEFAULT 13 snd_timer_async@@ALSA_0.9 + 527: 0000000000065120 1628 FUNC GLOBAL DEFAULT 13 snd_pcm_parse_control_id@@ALSA_0.9 + 528: 000000000004c970 112 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_copy@@ALSA_0.9 + 529: 00000000002ff904 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_iec958_open_dlsym_pcm_001@@ALSA_0.9 + 530: 00000000000abf20 6 FUNC GLOBAL DEFAULT 13 snd_instr_fm_convert_to_stream@@ALSA_0.9 + 531: 000000000003ea70 67 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_next@@ALSA_0.9 + 532: 0000000000039c40 179 FUNC GLOBAL DEFAULT 13 snd_input_scanf@@ALSA_0.9 + 533: 00000000000a8750 69 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_malloc@@ALSA_0.9 + 534: 0000000000056e60 43 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_minmax@@ALSA_0.9 + 535: 00000000000a4a30 112 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_copy@@ALSA_0.9 + 536: 00000000000abf50 6 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_open_rom@@ALSA_0.9 + 537: 00000000000a90d0 6 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_sizeof@@ALSA_0.9 + 538: 00000000000a8580 44 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_exclusive@@ALSA_0.9 + 539: 0000000000058df0 45 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_subdevice_name@@ALSA_0.9 + 540: 00000000000a8370 136 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_copy@@ALSA_0.9 + 541: 00000000000a77e0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_read_use@@ALSA_0.9 + 542: 00000000000a7180 47 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_error_bounce@@ALSA_0.9 + 543: 0000000000057760 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_minmax@@ALSA_0.9 + 544: 0000000000053fe0 397 FUNC GLOBAL DEFAULT 13 snd_pcm_dump_sw_setup@@ALSA_0.9 + 545: 00000000000aadc0 122 FUNC GLOBAL DEFAULT 13 snd_seq_disconnect_to@@ALSA_0.9 + 546: 000000000009efd0 41 FUNC GLOBAL DEFAULT 13 snd_timer_params_set_queue_size@@ALSA_0.9 + 547: 000000000004a3a0 170 FUNC GLOBAL DEFAULT 13 snd_mixer_set_compare@@ALSA_0.9 + 548: 0000000000042420 40 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_card@@ALSA_0.9 + 549: 000000000009ec20 42 FUNC GLOBAL DEFAULT 13 snd_timer_info_get_id@@ALSA_0.9 + 550: 00000000000a45f0 41 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_get_card@@ALSA_0.9 + 551: 00000000000a0ec0 246 FUNC GLOBAL DEFAULT 13 _snd_timer_query_hw_open@@ALSA_0.9 + 552: 000000000009f210 45 FUNC GLOBAL DEFAULT 13 snd_timer_status_get_timestamp@@ALSA_0.9 + 553: 0000000000041650 85 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_numid@@ALSA_0.9 + 554: 00000000000a8d30 148 FUNC GLOBAL DEFAULT 13 snd_seq_set_queue_usage@@ALSA_0.9 + 555: 000000000004aa60 104 FUNC GLOBAL DEFAULT 13 snd_mixer_class_copy@@ALSA_0.9 + 556: 0000000000056c00 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_access_mask@@ALSA_0.9 + 557: 00000000000aacd0 122 FUNC GLOBAL DEFAULT 13 snd_seq_connect_to@@ALSA_0.9 + 558: 000000000009f300 90 FUNC GLOBAL DEFAULT 13 snd_timer_status@@ALSA_0.9 + 559: 00000000000a9500 5 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_free@@ALSA_0.9 + 560: 00000000000b0c00 316 FUNC GLOBAL DEFAULT 13 snd_use_case_mgr_open@@ALSA_0.9 + 561: 0000000000040d10 93 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_tlv_write@@ALSA_0.9 + 562: 0000000000056560 29 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_set@@ALSA_0.9 + 563: 0000000000041b10 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_get_numid@@ALSA_0.9 + 564: 0000000000053040 275 FUNC GLOBAL DEFAULT 13 snd_pcm_rewind@@ALSA_0.9 + 565: 0000000000058090 150 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_start_mode@@ALSA_0.9 + 566: 00000000000a7c80 133 FUNC GLOBAL DEFAULT 13 snd_seq_delete_port@@ALSA_0.9 + 567: 0000000000090f10 2240 FUNC GLOBAL DEFAULT 13 snd_pcm_dsnoop_open@@ALSA_0.9 + 568: 00000000000ab860 88 FUNC GLOBAL DEFAULT 13 snd_midi_event_resize_buffer@@ALSA_0.9 + 569: 000000000005aa30 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_tick_time@ALSA_0.9 + 570: 0000000000057c50 9 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_tick_time@@ALSA_0.9.0rc4 + 571: 000000000005b150 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_format_first@ALSA_0.9 + 572: 0000000000056ca0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_format_first@@ALSA_0.9.0rc4 + 573: 00000000000404e0 104 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list@@ALSA_0.9 + 574: 00000000002ff8f8 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_null_open_dlsym_pcm_001@@ALSA_0.9 + 575: 0000000000056840 29 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_set@@ALSA_0.9 + 576: 0000000000056600 5 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_free@@ALSA_0.9 + 577: 0000000000042a90 94 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_device@@ALSA_0.9 + 578: 00000000000a8310 69 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_malloc@@ALSA_0.9 + 579: 0000000000034ed0 1126 FUNC GLOBAL DEFAULT 13 snd_config_expand@@ALSA_0.9 + 580: 00000000000a7b50 53 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_port_specified@@ALSA_0.9 + 581: 00000000000a8640 42 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_set_port@@ALSA_0.9 + 582: 0000000000084a00 901 FUNC GLOBAL DEFAULT 13 _snd_pcm_hooks_open@@ALSA_0.9 + 583: 0000000000038630 11 FUNC GLOBAL DEFAULT 13 snd_func_imul@@ALSA_0.9 + 584: 00000000000ab840 18 FUNC GLOBAL DEFAULT 13 snd_midi_event_init@@ALSA_0.9 + 585: 000000000004a8f0 41 FUNC GLOBAL DEFAULT 13 snd_mixer_get_count@@ALSA_0.9 + 586: 000000000007ea50 409 FUNC GLOBAL DEFAULT 13 _snd_pcm_null_open@@ALSA_0.9 + 587: 0000000000056030 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_is_joint_duplex@@ALSA_0.9 + 588: 0000000000058c50 115 FUNC GLOBAL DEFAULT 13 snd_pcm_info_copy@@ALSA_0.9 + 589: 000000000004c910 69 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_malloc@@ALSA_0.9 + 590: 0000000000058d00 41 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_subdevice@@ALSA_0.9 + 591: 0000000000056cb0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_format_last@@ALSA_0.9 + 592: 00000000000571a0 70 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_wakeup@@ALSA_0.9 + 593: 00000000000a91a0 40 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_get_queue@@ALSA_0.9 + 594: 00000000000a8ae0 134 FUNC GLOBAL DEFAULT 13 snd_seq_free_queue@@ALSA_0.9 + 595: 000000000003e9d0 67 FUNC GLOBAL DEFAULT 13 snd_hctl_first_elem@@ALSA_0.9 + 596: 0000000000058b80 42 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_avail_max@@ALSA_0.9 + 597: 000000000004b660 136 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_playback_dB@@ALSA_0.9 + 598: 0000000000056f50 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_max@@ALSA_0.9 + 599: 00000000000aa6f0 136 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_copy@@ALSA_0.9 + 600: 000000000006eaa0 548 FUNC GLOBAL DEFAULT 13 _snd_pcm_mulaw_open@@ALSA_0.9 + 601: 00000000000a07d0 8 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_resolution_max@@ALSA_0.9 + 602: 000000000004a9e0 6 FUNC GLOBAL DEFAULT 13 snd_mixer_class_sizeof@@ALSA_0.9 + 603: 00000000000649c0 74 FUNC GLOBAL DEFAULT 13 snd_pcm_format_signed@@ALSA_0.9 + 604: 00000000000abe50 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_alias@@ALSA_0.9 + 605: 00000000000aa930 67 FUNC GLOBAL DEFAULT 13 snd_seq_get_client_pool@@ALSA_0.9 + 606: 000000000003f9b0 41 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_subdevice@@ALSA_0.9 + 607: 0000000000031940 10 FUNC GLOBAL DEFAULT 13 snd_config_make_string@@ALSA_0.9 + 608: 00000000000a06d0 42 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_free@@ALSA_0.9 + 609: 000000000004a0f0 150 FUNC GLOBAL DEFAULT 13 snd_mixer_class_register@@ALSA_0.9 + 610: 0000000000043370 56 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_dimension@@ALSA_0.9.3 + 611: 00000000000a6ea0 41 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_get_clients@@ALSA_0.9 + 612: 00000000000a9290 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_set_tempo@@ALSA_0.9 + 613: 0000000000056fa0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_rate_near@@ALSA_0.9 + 614: 0000000000089d40 623 FUNC GLOBAL DEFAULT 13 snd_pcm_ladspa_open@@ALSA_0.9 + 615: 00000000000a07b0 8 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_resolution@@ALSA_0.9 + 616: 00000000000a7c40 64 FUNC GLOBAL DEFAULT 13 snd_seq_create_port@@ALSA_0.9 + 617: 000000000007ebf0 408 FUNC GLOBAL DEFAULT 13 _snd_pcm_empty_open@@ALSA_0.9 + 618: 000000000005bc20 27 FUNC GLOBAL DEFAULT 13 snd_pcm_chmap_name@@ALSA_0.9 + 619: 0000000000058170 153 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_xrun_mode@@ALSA_0.9 + 620: 000000000009f390 47 FUNC GLOBAL DEFAULT 13 snd_timer_stop@@ALSA_0.9 + 621: 0000000000057a70 92 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_max@@ALSA_0.9 + 622: 0000000000058860 92 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_trigger_tstamp@@ALSA_0.9 + 623: 00000000000abf40 6 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_open@@ALSA_0.9 + 624: 00000000000abf30 6 FUNC GLOBAL DEFAULT 13 snd_instr_fm_convert_from_stream@@ALSA_0.9 + 625: 000000000003f6d0 136 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_tlv_read@@ALSA_0.9 + 626: 0000000000057c00 80 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9.0rc4 + 627: 000000000009f480 43 FUNC GLOBAL DEFAULT 13 snd_timer_info_get_ticks@@ALSA_0.9 + 628: 000000000005b7d0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_last@ALSA_0.9 + 629: 00000000000416b0 85 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_interface@@ALSA_0.9 + 630: 00000000000a4b90 6 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_sizeof@@ALSA_0.9 + 631: 00000000000aaf30 88 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_pool_output@@ALSA_0.9 + 632: 0000000000042f30 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_tlv_commandable@@ALSA_0.9 + 633: 00000000000466d0 840 FUNC GLOBAL DEFAULT 13 snd_ctl_ascii_elem_id_get@@ALSA_0.9 + 634: 00000000002ff900 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_dmix_open_dlsym_pcm_001@@ALSA_0.9 + 635: 00000000000abe10 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_len@@ALSA_0.9 + 636: 00000000000a7750 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_name@@ALSA_0.9 + 637: 0000000000042db0 46 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_writable@@ALSA_0.9 + 638: 00000000000a9200 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_get_ppq@@ALSA_0.9 + 639: 0000000000075d20 185 FUNC GLOBAL DEFAULT 13 _snd_pcm_rate_linear_open@@ALSA_0.9 + 640: 00000000000a73f0 96 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_set_event_filter@@ALSA_0.9 + 641: 000000000004a4c0 138 FUNC GLOBAL DEFAULT 13 snd_mixer_poll_descriptors@@ALSA_0.9 + 642: 000000000004b910 107 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_dB_all@@ALSA_0.9 + 643: 00000000002ff8da 1 OBJECT GLOBAL DEFAULT 27 _snd_func_igetenv_dlsym_config_evaluate_001@@ALSA_0.9 + 644: 00000000000abde0 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_id@@ALSA_0.9 + 645: 00000000000578e0 79 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_buffer_size@@ALSA_0.9 + 646: 00000000000a1610 69 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_malloc@@ALSA_0.9 + 647: 000000000004b4d0 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_ask_playback_vol_dB@@ALSA_0.9 + 648: 0000000000052040 42 FUNC GLOBAL DEFAULT 13 snd_pcm_name@@ALSA_0.9 + 649: 00000000000abea0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_cmd@@ALSA_0.9 + 650: 0000000000056b00 5 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_free@@ALSA_0.9 + 651: 0000000000056430 6 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_sizeof@@ALSA_0.9 + 652: 0000000000042900 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_count@@ALSA_0.9 + 653: 000000000009eb00 69 FUNC GLOBAL DEFAULT 13 snd_timer_info_malloc@@ALSA_0.9 + 654: 00000000000431d0 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_step64@@ALSA_0.9 + 655: 00000000002ff8f4 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_plug_open_dlsym_pcm_001@@ALSA_0.9 + 656: 0000000000043710 6 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_sizeof@@ALSA_0.9 + 657: 000000000005b510 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_format_last@ALSA_0.9 + 658: 00000000000584c0 61 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_period_event@@ALSA_0.9 + 659: 0000000000056cb0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_format_last@@ALSA_0.9.0rc4 + 660: 00000000000a9f30 112 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_copy@@ALSA_0.9 + 661: 0000000000033cc0 61 FUNC GLOBAL DEFAULT 13 snd_config_unref@@ALSA_0.9 + 662: 000000000009e640 147 FUNC GLOBAL DEFAULT 13 snd_timer_open@@ALSA_0.9 + 663: 00000000002ff90a 1 OBJECT GLOBAL DEFAULT 27 __snd_rawmidi_virtual_open_dlsym_rawmidi_001@@ALSA_0.9 + 664: 0000000000041770 85 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_subdevice@@ALSA_0.9 + 665: 00000000000587f0 58 FUNC GLOBAL DEFAULT 13 snd_pcm_status_copy@@ALSA_0.9 + 666: 00000000000aaa90 37 FUNC GLOBAL DEFAULT 13 snd_seq_change_bit@@ALSA_0.9 + 667: 00000000000576d0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_periods_max@@ALSA_0.9 + 668: 0000000000043780 135 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_clear@@ALSA_0.9 + 669: 000000000006d4e0 30 FUNC GLOBAL DEFAULT 13 snd_pcm_route_load_ttable@@ALSA_0.9 + 670: 00000000000359e0 469 FUNC GLOBAL DEFAULT 13 snd_config_hook_load_for_all_cards@@ALSA_0.9 + 671: 000000000009ebf0 41 FUNC GLOBAL DEFAULT 13 snd_timer_info_get_card@@ALSA_0.9 + 672: 000000000009ec80 45 FUNC GLOBAL DEFAULT 13 snd_timer_info_get_resolution@@ALSA_0.9 + 673: 0000000000049920 116 FUNC GLOBAL DEFAULT 13 snd_mixer_open@@ALSA_0.9 + 674: 0000000000041830 85 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_index@@ALSA_0.9 + 675: 0000000000064e40 482 FUNC GLOBAL DEFAULT 13 snd_pcm_format_set_silence@@ALSA_0.9 + 676: 0000000000053d20 16 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_name@@ALSA_0.9 + 677: 00000000000585d0 47 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9.0rc4 + 678: 0000000000031a30 42 FUNC GLOBAL DEFAULT 13 snd_config_imake_pointer@@ALSA_0.9 + 679: 000000000005ba10 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_stop_threshold@ALSA_0.9 + 680: 00000000000a05b0 92 FUNC GLOBAL DEFAULT 13 snd_timer_query_close@@ALSA_0.9 + 681: 0000000000040e50 59 FUNC GLOBAL DEFAULT 13 snd_ctl_hwdep_next_device@@ALSA_0.9 + 682: 0000000000053c50 197 FUNC GLOBAL DEFAULT 13 snd_pcm_format_value@@ALSA_0.9 + 683: 00000000000594a0 228 FUNC GLOBAL DEFAULT 13 snd_async_add_pcm_handler@@ALSA_0.9 + 684: 000000000006fb50 548 FUNC GLOBAL DEFAULT 13 _snd_pcm_alaw_open@@ALSA_0.9 + 685: 0000000000041c00 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_get_index@@ALSA_0.9 + 686: 000000000003c0f0 613 FUNC GLOBAL DEFAULT 13 snd_tlv_convert_to_dB@@ALSA_0.9 + 687: 00000000000812b0 1834 FUNC GLOBAL DEFAULT 13 snd_pcm_share_open@@ALSA_0.9 + 688: 00000000000b1790 2248 FUNC GLOBAL DEFAULT 13 snd_use_case_set@@ALSA_0.9 + 689: 00000000000a8860 42 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_get_name@@ALSA_0.9 + 690: 0000000000057600 80 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_period_size_first@@ALSA_0.9 + 691: 00000000000abfe0 6 FUNC GLOBAL DEFAULT 13 snd_instr_simple_convert_from_stream@@ALSA_0.9 + 692: 000000000004aef0 92 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_index@@ALSA_0.9 + 693: 00000000000a7840 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_midi_channels@@ALSA_0.9 + 694: 0000000000031920 10 FUNC GLOBAL DEFAULT 13 snd_config_make_integer64@@ALSA_0.9 + 695: 00000000000a0fc0 92 FUNC GLOBAL DEFAULT 13 snd_rawmidi_close@@ALSA_0.9 + 696: 000000000004ab30 42 FUNC GLOBAL DEFAULT 13 snd_mixer_class_get_private@@ALSA_0.9 + 697: 0000000000045630 765 FUNC GLOBAL DEFAULT 13 snd_sctl_install@@ALSA_0.9 + 698: 00000000000a9140 94 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_copy@@ALSA_0.9 + 699: 000000000005a710 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_access@ALSA_0.9 + 700: 0000000000056b50 75 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_access@@ALSA_0.9.0rc4 + 701: 0000000000055fb0 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_is_half_duplex@@ALSA_0.9 + 702: 0000000000047f50 863 FUNC GLOBAL DEFAULT 13 snd_ctl_shm_open@@ALSA_0.9 + 703: 000000000009eda0 128 FUNC GLOBAL DEFAULT 13 snd_timer_params_copy@@ALSA_0.9 + 704: 00000000000a46b0 44 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_get_iface@@ALSA_0.9 + 705: 00000000000a8460 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_root@@ALSA_0.9 + 706: 000000000009ef70 41 FUNC GLOBAL DEFAULT 13 snd_timer_params_set_ticks@@ALSA_0.9 + 707: 00000000000578e0 79 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_size@@ALSA_0.9.0rc4 + 708: 000000000005a9e0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_size@ALSA_0.9 + 709: 00000000002ff8f3 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_rate_open_dlsym_pcm_001@@ALSA_0.9 + 710: 00000000002ff90c 1 OBJECT GLOBAL DEFAULT 27 __snd_seq_hw_open_dlsym_seq_001@@ALSA_0.9 + 711: 00000000000a08b0 90 FUNC GLOBAL DEFAULT 13 snd_timer_query_status@@ALSA_0.9.0 + 712: 0000000000040f10 62 FUNC GLOBAL DEFAULT 13 snd_ctl_pcm_info@@ALSA_0.9 + 713: 0000000000064b00 25 FUNC GLOBAL DEFAULT 13 snd_pcm_format_physical_width@@ALSA_0.9 + 714: 00000000000a4b00 41 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_get_num_dsps@@ALSA_0.9 + 715: 0000000000084d90 41 FUNC GLOBAL DEFAULT 13 snd_pcm_hook_get_pcm@@ALSA_0.9 + 716: 000000000005be00 390 FUNC GLOBAL DEFAULT 13 snd_pcm_chmap_parse_string@@ALSA_0.9 + 717: 0000000000032a40 255 FUNC GLOBAL DEFAULT 13 snd_config_searchva@@ALSA_0.9 + 718: 000000000003ea20 67 FUNC GLOBAL DEFAULT 13 snd_hctl_last_elem@@ALSA_0.9 + 719: 000000000004bb50 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_capture_channel@@ALSA_0.9 + 720: 0000000000057360 90 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_period_size_min@@ALSA_0.9 + 721: 00000000000a7030 5 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_free@@ALSA_0.9 + 722: 00000000000a6f30 41 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_get_cur_clients@@ALSA_0.9 + 723: 00000000000a8fc0 266 FUNC GLOBAL DEFAULT 13 snd_seq_get_queue_status@@ALSA_0.9 + 724: 0000000000043810 58 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_copy@@ALSA_0.9 + 725: 0000000000043480 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_interface@@ALSA_0.9 + 726: 0000000000083e90 5 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_get_name@@ALSA_0.9 + 727: 0000000000042670 120 FUNC GLOBAL DEFAULT 13 snd_ctl_event_copy@@ALSA_0.9 + 728: 000000000005ae40 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_periods_max@ALSA_0.9 + 729: 00000000000576d0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_periods_max@@ALSA_0.9.0rc4 + 730: 0000000000040c40 71 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_write@@ALSA_0.9 + 731: 0000000000053460 175 FUNC GLOBAL DEFAULT 13 snd_pcm_poll_descriptors_count@@ALSA_0.9 + 732: 00000000002ff8e6 1 OBJECT GLOBAL DEFAULT 27 _snd_func_private_card_driver_dlsym_config_evaluate_001@@ALSA_0.9 + 733: 000000000009e730 132 FUNC GLOBAL DEFAULT 13 snd_timer_close@@ALSA_0.9 + 734: 000000000004a890 42 FUNC GLOBAL DEFAULT 13 snd_mixer_set_callback_private@@ALSA_0.9 + 735: 00000000000abdb0 6 FUNC GLOBAL DEFAULT 13 snd_instr_header_malloc@@ALSA_0.9 + 736: 0000000000058830 40 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_state@@ALSA_0.9 + 737: 00000000000a72a0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_num_ports@@ALSA_0.9 + 738: 00000000000aa7b0 42 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_get_output_pool@@ALSA_0.9 + 739: 00000000000a7250 77 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_event_filter_clear@@ALSA_0.9 + 740: 0000000000058d90 42 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_id@@ALSA_0.9 + 741: 0000000000054410 128 FUNC GLOBAL DEFAULT 13 snd_pcm_bytes_to_samples@@ALSA_0.9 + 742: 0000000000042e70 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_owner@@ALSA_0.9 + 743: 000000000008d390 2379 FUNC GLOBAL DEFAULT 13 snd_pcm_dmix_open@@ALSA_0.9 + 744: 00000000000536d0 22 FUNC GLOBAL DEFAULT 13 snd_pcm_stream_name@@ALSA_0.9 + 745: 000000000005cc80 165 FUNC GLOBAL DEFAULT 13 snd_pcm_get_params@@ALSA_0.9 + 746: 00000000000a9660 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_set_type@@ALSA_0.9 + 747: 00000000000aaa50 50 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_event_filter_del@@ALSA_0.9 + 748: 000000000007c000 1257 FUNC GLOBAL DEFAULT 13 _snd_pcm_shm_open@@ALSA_0.9 + 749: 0000000000054650 117 FUNC GLOBAL DEFAULT 13 snd_pcm_open_fallback@@ALSA_0.9 + 750: 00000000000a22e0 104 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_copy@@ALSA_0.9 + 751: 000000000005b710 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_last@ALSA_0.9 + 752: 00000000000a0740 23 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_set_tid@@ALSA_0.9 + 753: 00000000000577b0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_last@@ALSA_0.9.0rc4 + 754: 00000000000572e0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_first@@ALSA_0.9.0rc4 + 755: 000000000005b2a0 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_first@ALSA_0.9 + 756: 000000000003a470 181 FUNC GLOBAL DEFAULT 13 snd_output_buffer_open@@ALSA_0.9 + 757: 00000000000414e0 67 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_alloc_space@@ALSA_0.9 + 758: 0000000000056fd0 84 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_resample@@ALSA_0.9 + 759: 0000000000056c80 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_format@@ALSA_0.9 + 760: 0000000000057fb0 6 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_sizeof@@ALSA_0.9 + 761: 00000000000a07a0 5 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_name@@ALSA_0.9 + 762: 0000000000057bb0 80 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9 + 763: 00000000000317e0 49 FUNC GLOBAL DEFAULT 13 snd_config_top@@ALSA_0.9 + 764: 0000000000084890 365 FUNC GLOBAL DEFAULT 13 snd_pcm_hooks_open@@ALSA_0.9 + 765: 00000000000434e0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_subdevice@@ALSA_0.9 + 766: 0000000000042790 135 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_clear@@ALSA_0.9 + 767: 00000000000a81c0 53 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_set_time_update@@ALSA_0.9 + 768: 00000000000402e0 91 FUNC GLOBAL DEFAULT 13 snd_ctl_async@@ALSA_0.9 + 769: 00000000000a5f70 212 FUNC GLOBAL DEFAULT 13 _snd_seq_hw_open@@ALSA_0.9 + 770: 0000000000056ba0 18 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_access@@ALSA_0.9 + 771: 00000000000a4d70 40 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_set_index@@ALSA_0.9 + 772: 0000000000053710 320 FUNC GLOBAL DEFAULT 13 snd_pcm_writei@@ALSA_0.9 + 773: 0000000000058790 69 FUNC GLOBAL DEFAULT 13 snd_pcm_status_malloc@@ALSA_0.9 + 774: 000000000005a800 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_channels@ALSA_0.9 + 775: 0000000000056db0 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4 + 776: 0000000000053850 320 FUNC GLOBAL DEFAULT 13 snd_pcm_writen@@ALSA_0.9 + 777: 000000000006e900 413 FUNC GLOBAL DEFAULT 13 snd_pcm_mulaw_open@@ALSA_0.9 + 778: 00000000000a6da0 6 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_sizeof@@ALSA_0.9 + 779: 000000000004bc50 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_capture_dB_range@@ALSA_0.9 + 780: 00000000000abe80 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_id@@ALSA_0.9 + 781: 000000000004ab90 44 FUNC GLOBAL DEFAULT 13 snd_mixer_class_set_event@@ALSA_0.9 + 782: 00000000000a9ec0 6 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_sizeof@@ALSA_0.9 + 783: 0000000000056d50 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_subformat_first@@ALSA_0.9 + 784: 0000000000042a30 94 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_interface@@ALSA_0.9 + 785: 00000000000a8030 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_get_queue@@ALSA_0.9 + 786: 00000000000a7370 53 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_set_broadcast_filter@@ALSA_0.9 + 787: 00000000002ff8ef 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_route_open_dlsym_pcm_001@@ALSA_0.9 + 788: 00000000000aa030 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_dest@@ALSA_0.9 + 789: 000000000003b660 444 FUNC GLOBAL DEFAULT 13 snd_user_file@@ALSA_0.9 + 790: 000000000004b8a0 109 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_volume_all@@ALSA_0.9 + 791: 00000000000a8ca0 137 FUNC GLOBAL DEFAULT 13 snd_seq_get_queue_usage@@ALSA_0.9 + 792: 000000000005b4c0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_access_last@ALSA_0.9 + 793: 0000000000056bf0 13 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_access_last@@ALSA_0.9.0rc4 + 794: 0000000000056c10 54 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_access_mask@@ALSA_0.9 + 795: 00000000000565b0 69 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_malloc@@ALSA_0.9 + 796: 000000000003e730 104 FUNC GLOBAL DEFAULT 13 snd_hctl_open@@ALSA_0.9 + 797: 00000000000a6b60 196 FUNC GLOBAL DEFAULT 13 snd_seq_poll_descriptors@@ALSA_0.9 + 798: 00000000000a4e20 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_set_image@@ALSA_0.9 + 799: 000000000003faa0 42 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_callback_private@@ALSA_0.9 + 800: 0000000000097100 569 FUNC GLOBAL DEFAULT 13 snd_pcm_iec958_open@@ALSA_0.9 + 801: 00000000000541a0 247 FUNC GLOBAL DEFAULT 13 snd_pcm_status_dump@@ALSA_0.9 + 802: 0000000000057c70 9 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9 + 803: 00000000000abfb0 6 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_convert_from_stream@@ALSA_0.9 + 804: 000000000004c540 109 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_switch_all@@ALSA_0.9 + 805: 00000000000a8830 40 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_get_queue@@ALSA_0.9 + 806: 00000000000572f0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_last@@ALSA_0.9.0rc4 + 807: 000000000005b660 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_last@ALSA_0.9 + 808: 0000000000057260 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_min@@ALSA_0.9 + 809: 000000000004b3b0 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_playback_volume_joined@@ALSA_0.9 + 810: 000000000003ee70 42 FUNC GLOBAL DEFAULT 13 snd_hctl_set_callback_private@@ALSA_0.9 + 811: 0000000000085ca0 1138 FUNC GLOBAL DEFAULT 13 snd_pcm_lfloat_convert_integer_float@@ALSA_0.9 + 812: 0000000000063fc0 703 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_open@@ALSA_0.9 + 813: 00000000002ff8ea 1 OBJECT GLOBAL DEFAULT 27 __snd_ctl_hw_open_dlsym_control_001@@ALSA_0.9 + 814: 000000000004a190 103 FUNC GLOBAL DEFAULT 13 snd_mixer_class_unregister@@ALSA_0.9 + 815: 00000000000a2180 76 FUNC GLOBAL DEFAULT 13 snd_rawmidi_open_lconf@@ALSA_0.9 + 816: 000000000006d4d0 7 FUNC GLOBAL DEFAULT 13 snd_pcm_route_determine_ttable@@ALSA_0.9 + 817: 0000000000042af0 94 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_subdevice@@ALSA_0.9 + 818: 0000000000058680 59 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9 + 819: 00000000000a7a90 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_type@@ALSA_0.9 + 820: 0000000000053510 167 FUNC GLOBAL DEFAULT 13 snd_pcm_poll_descriptors@@ALSA_0.9 + 821: 0000000000057c90 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time@@ALSA_0.9 + 822: 00000000000428d0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_used@@ALSA_0.9 + 823: 00000000000564a0 80 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_copy@@ALSA_0.9 + 824: 0000000000060b90 693 FUNC GLOBAL DEFAULT 13 snd_spcm_init_duplex@@ALSA_0.9 + 825: 000000000004b010 66 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_channel_name@@ALSA_0.9 + 826: 0000000000041470 51 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_iface_name@@ALSA_0.9 + 827: 00000000000567d0 32 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_none@@ALSA_0.9 + 828: 0000000000041010 50 FUNC GLOBAL DEFAULT 13 snd_ctl_rawmidi_prefer_subdevice@@ALSA_0.9 + 829: 000000000004b0d0 103 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_is_playback_mono@@ALSA_0.9 + 830: 0000000000056f10 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate@@ALSA_0.9 + 831: 0000000000058d30 41 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_stream@@ALSA_0.9 + 832: 000000000005b920 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_avail_min@ALSA_0.9 + 833: 0000000000058440 59 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_avail_min@@ALSA_0.9.0rc4 + 834: 0000000000057220 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_period_time@@ALSA_0.9 + 835: 0000000000058f90 41 FUNC GLOBAL DEFAULT 13 snd_pcm_info_set_subdevice@@ALSA_0.9 + 836: 00000000000a1420 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_id@@ALSA_0.9 + 837: 0000000000042d10 58 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_copy@@ALSA_0.9 + 838: 00000000000a24c0 133 FUNC GLOBAL DEFAULT 13 snd_rawmidi_write@@ALSA_0.9 + 839: 0000000000056ec0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_rate@@ALSA_0.9 + 840: 00000000000404a0 59 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info@@ALSA_0.9 + 841: 000000000004c620 106 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_is_enum_playback@@ALSA_0.9 + 842: 00000000000a7d10 290 FUNC GLOBAL DEFAULT 13 snd_seq_get_any_port_info@@ALSA_0.9 + 843: 00000000000a6f90 59 FUNC GLOBAL DEFAULT 13 snd_seq_system_info@@ALSA_0.9 + 844: 00000000000a99d0 151 FUNC GLOBAL DEFAULT 13 snd_seq_event_output_direct@@ALSA_0.9 + 845: 0000000000049ca0 104 FUNC GLOBAL DEFAULT 13 snd_mixer_get_hctl@@ALSA_0.9 + 846: 0000000000057700 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods@@ALSA_0.9 + 847: 00000000000a7930 47 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_timestamp_real@@ALSA_0.9 + 848: 000000000004bde0 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_capture_volume_joined@@ALSA_0.9 + 849: 0000000000034be0 23 FUNC GLOBAL DEFAULT 13 snd_config_copy@@ALSA_0.9 + 850: 000000000009d090 178 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_set_param_minmax@@ALSA_0.9 + 851: 0000000000031950 10 FUNC GLOBAL DEFAULT 13 snd_config_make_pointer@@ALSA_0.9 + 852: 000000000003b5e0 14 FUNC GLOBAL DEFAULT 13 snd_shm_area_share@@ALSA_0.9 + 853: 00000000000433b0 46 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_dimension@@ALSA_0.9 + 854: 00000000000abdc0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_free@@ALSA_0.9 + 855: 0000000000056ca0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_format_first@@ALSA_0.9 + 856: 00000000000560b0 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_can_sync_start@@ALSA_0.9 + 857: 000000000006a280 415 FUNC GLOBAL DEFAULT 13 snd_pcm_linear_open@@ALSA_0.9 + 858: 00000000000ab050 5 FUNC GLOBAL DEFAULT 13 snd_seq_reset_pool_output@@ALSA_0.9 + 859: 00000000000a2260 69 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_malloc@@ALSA_0.9 + 860: 000000000005afb0 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_near@ALSA_0.9 + 861: 0000000000056fa0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_near@@ALSA_0.9.0rc4 + 862: 0000000000058ee0 114 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_sync@@ALSA_0.9 + 863: 000000000009e7f0 41 FUNC GLOBAL DEFAULT 13 snd_timer_type@@ALSA_0.9 + 864: 0000000000093030 1029 FUNC GLOBAL DEFAULT 13 snd_pcm_direct_slave_recover@@ALSA_0.9 + 865: 000000000005acb0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_tick_time_min@ALSA_0.9 + 866: 0000000000053160 275 FUNC GLOBAL DEFAULT 13 snd_pcm_forwardable@@ALSA_0.9 + 867: 0000000000057c60 9 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9.0rc4 + 868: 00000000000493c0 196 FUNC GLOBAL DEFAULT 13 snd_ctl_ext_create@@ALSA_0.9 + 869: 0000000000056770 5 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_free@@ALSA_0.9 + 870: 0000000000031a60 62 FUNC GLOBAL DEFAULT 13 snd_config_set_integer@@ALSA_0.9 + 871: 000000000007e840 526 FUNC GLOBAL DEFAULT 13 snd_pcm_null_open@@ALSA_0.9 + 872: 000000000006d500 1953 FUNC GLOBAL DEFAULT 13 _snd_pcm_route_open@@ALSA_0.9 + 873: 0000000000057720 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_min@@ALSA_0.9 + 874: 000000000003a320 10 FUNC GLOBAL DEFAULT 13 snd_output_putc@@ALSA_0.9 + 875: 0000000000040c90 125 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_tlv_read@@ALSA_0.9 + 876: 00000000000a1810 67 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_set_no_active_sensing@@ALSA_0.9 + 877: 0000000000057c00 80 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9 + 878: 00000000000a17e0 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_get_avail_min@@ALSA_0.9 + 879: 00000000000a7580 71 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_info@@ALSA_0.9 + 880: 000000000005ad50 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate_max@ALSA_0.9 + 881: 000000000005b100 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_access_first@ALSA_0.9 + 882: 0000000000056be0 13 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_access_first@@ALSA_0.9.0rc4 + 883: 0000000000056ee0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate_max@@ALSA_0.9.0rc4 + 884: 000000000004a5c0 228 FUNC GLOBAL DEFAULT 13 snd_mixer_wait@@ALSA_0.9 + 885: 00000000002ff618 8 OBJECT GLOBAL DEFAULT 26 snd_lib_error@@ALSA_0.9 + 886: 000000000004b230 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_playback_dB_range@@ALSA_0.9 + 887: 0000000000054170 37 FUNC GLOBAL DEFAULT 13 snd_pcm_dump_setup@@ALSA_0.9 + 888: 00000000000a80f0 44 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_set_sender@@ALSA_0.9 + 889: 00000000000a9aa0 150 FUNC GLOBAL DEFAULT 13 snd_seq_drain_output@@ALSA_0.9 + 890: 00000000000576b0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_periods@@ALSA_0.9.0rc4 + 891: 0000000000056eb0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_last@@ALSA_0.9.0rc4 + 892: 000000000005b5b0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_last@ALSA_0.9 + 893: 000000000005a940 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_periods@ALSA_0.9 + 894: 0000000000056680 8 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_any@@ALSA_0.9 + 895: 00000000000a6ce0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_id@@ALSA_0.9 + 896: 0000000000052b50 257 FUNC GLOBAL DEFAULT 13 snd_pcm_start@@ALSA_0.9 + 897: 000000000009d370 75 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_mmap_areas@@ALSA_0.9 + 898: 000000000009f090 90 FUNC GLOBAL DEFAULT 13 snd_timer_params@@ALSA_0.9 + 899: 00000000000a7780 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_capability@@ALSA_0.9 + 900: 0000000000056d60 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_subformat_last@@ALSA_0.9 + 901: 0000000000032710 235 FUNC GLOBAL DEFAULT 13 snd_config_search@@ALSA_0.9 + 902: 000000000009b1f0 105 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_set_slave_param_list@@ALSA_0.9 + 903: 00000000002ff8f0 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_mulaw_open_dlsym_pcm_001@@ALSA_0.9 + 904: 000000000004bf60 109 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_capture_group@@ALSA_0.9 + 905: 0000000000052780 129 FUNC GLOBAL DEFAULT 13 snd_pcm_resume@@ALSA_0.9 + 906: 000000000009aed0 711 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_create@@ALSA_0.9 + 907: 000000000003a310 10 FUNC GLOBAL DEFAULT 13 snd_output_puts@@ALSA_0.9 + 908: 00000000000a0560 70 FUNC GLOBAL DEFAULT 13 snd_timer_query_open_lconf@@ALSA_0.9 + 909: 00000000000a44e0 6 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_sizeof@@ALSA_0.9 + 910: 000000000003a8c0 43 FUNC GLOBAL DEFAULT 13 snd_async_handler_get_signo@@ALSA_0.9 + 911: 000000000003c860 105 FUNC GLOBAL DEFAULT 13 snd_ctl_convert_to_dB@@ALSA_0.9 + 912: 0000000000033df0 254 FUNC GLOBAL DEFAULT 13 snd_config_substitute@@ALSA_0.9 + 913: 0000000000039e50 245 FUNC GLOBAL DEFAULT 13 snd_input_buffer_open@@ALSA_0.9 + 914: 0000000000037000 331 FUNC GLOBAL DEFAULT 13 snd_config_searcha_hooks@@ALSA_0.9 + 915: 0000000000042780 5 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_free@@ALSA_0.9 + 916: 00000000000a6e00 5 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_free@@ALSA_0.9 + 917: 0000000000058a60 110 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_audio_htstamp_report@@ALSA_0.9 + 918: 000000000005bb20 71 FUNC GLOBAL DEFAULT 13 snd_pcm_free_chmaps@@ALSA_0.9 + 919: 0000000000032120 625 FUNC GLOBAL DEFAULT 13 snd_config_get_ascii@@ALSA_0.9 + 920: 00000000000a2350 65 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_get_tstamp@@ALSA_0.9 + 921: 00000000000a3920 607 FUNC GLOBAL DEFAULT 13 _snd_rawmidi_virtual_open@@ALSA_0.9 + 922: 00000000000a09f0 40 FUNC GLOBAL DEFAULT 13 snd_timer_id_set_class@@ALSA_0.9 + 923: 00000000000a4320 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_name@@ALSA_0.9 + 924: 000000000004a550 100 FUNC GLOBAL DEFAULT 13 snd_mixer_poll_descriptors_revents@@ALSA_0.9 + 925: 00000000000387b0 359 FUNC GLOBAL DEFAULT 13 snd_determine_driver@@ALSA_0.9 + 926: 00000000000a8f30 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_get_tick_time@@ALSA_0.9 + 927: 00000000000570e0 66 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_export_buffer@@ALSA_0.9 + 928: 0000000000043c20 88 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_integer@@ALSA_0.9 + 929: 0000000000041b70 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_get_device@@ALSA_0.9 + 930: 00000000000576b0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_periods@@ALSA_0.9 + 931: 0000000000055f30 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_can_resume@@ALSA_0.9 + 932: 0000000000038c80 334 FUNC GLOBAL DEFAULT 13 snd_func_card_name@@ALSA_0.9 + 933: 00000000000a5270 462 FUNC GLOBAL DEFAULT 13 _snd_hwdep_hw_open@@ALSA_0.9 + 934: 0000000000031930 10 FUNC GLOBAL DEFAULT 13 snd_config_make_real@@ALSA_0.9 + 935: 00000000000a90e0 69 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_malloc@@ALSA_0.9 + 936: 00000000000a68d0 160 FUNC GLOBAL DEFAULT 13 snd_seq_open@@ALSA_0.9 + 937: 00000000002ff8db 1 OBJECT GLOBAL DEFAULT 27 _snd_func_pcm_args_by_class_dlsym_config_evaluate_001@@ALSA_0.9 + 938: 00000000000409c0 236 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_add_enumerated@@ALSA_0.9 + 939: 000000000005c3f0 2187 FUNC GLOBAL DEFAULT 13 snd_pcm_set_params@@ALSA_0.9 + 940: 00000000000a1230 69 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_malloc@@ALSA_0.9 + 941: 00000000000a1860 45 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_get_no_active_sensing@@ALSA_0.9 + 942: 0000000000057cc0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_minmax@@ALSA_0.9 + 943: 0000000000058ad0 72 FUNC GLOBAL DEFAULT 13 snd_pcm_status_set_audio_htstamp_config@@ALSA_0.9 + 944: 000000000003f980 41 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_device@@ALSA_0.9 + 945: 0000000000058750 47 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_silence_size@@ALSA_0.9.0rc4 + 946: 000000000005bab0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_silence_size@ALSA_0.9 + 947: 0000000000053d80 22 FUNC GLOBAL DEFAULT 13 snd_pcm_tstamp_mode_name@@ALSA_0.9 + 948: 000000000009cfd0 62 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_params_reset@@ALSA_0.9 + 949: 00000000000a8a00 69 FUNC GLOBAL DEFAULT 13 snd_seq_create_queue@@ALSA_0.9 + 950: 00000000000a95a0 40 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_get_queue@@ALSA_0.9 + 951: 00000000000586c0 142 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_silence_size@@ALSA_0.9 + 952: 0000000000043890 112 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_id@@ALSA_0.9 + 953: 0000000000083ed0 229 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_s16_open@@ALSA_0.9 + 954: 0000000000058e80 44 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_subdevices_count@@ALSA_0.9 + 955: 00000000000424b0 42 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_name@@ALSA_0.9 + 956: 0000000000043230 85 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_items@@ALSA_0.9 + 957: 00000000000a4680 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_get_name@@ALSA_0.9 + 958: 00000000000a7a60 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_capability@@ALSA_0.9 + 959: 000000000009eed0 45 FUNC GLOBAL DEFAULT 13 snd_timer_params_get_exclusive@@ALSA_0.9.0 + 960: 0000000000056520 27 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_test@@ALSA_0.9 + 961: 00000000000a79c0 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_port@@ALSA_0.9 + 962: 0000000000031820 74 FUNC GLOBAL DEFAULT 13 snd_config_remove@@ALSA_0.9 + 963: 00000000000a7960 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_timestamp_queue@@ALSA_0.9 + 964: 0000000000031910 7 FUNC GLOBAL DEFAULT 13 snd_config_make_integer@@ALSA_0.9 + 965: 00000000000a2a30 1429 FUNC GLOBAL DEFAULT 13 snd_rawmidi_hw_open@@ALSA_0.9 + 966: 00000000000aa120 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_queue@@ALSA_0.9 + 967: 0000000000043c80 88 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_integer64@@ALSA_0.9 + 968: 00000000000a0b40 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_get_device@@ALSA_0.9 + 969: 00000000000593b0 181 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap_commit@@ALSA_0.9 + 970: 0000000000058be0 6 FUNC GLOBAL DEFAULT 13 snd_pcm_info_sizeof@@ALSA_0.9 + 971: 0000000000042230 51 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_set_name@@ALSA_0.9 + 972: 0000000000057cf0 3 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9 + 973: 000000000004ad60 111 FUNC GLOBAL DEFAULT 13 snd_mixer_find_selem@@ALSA_0.9 + 974: 0000000000032900 307 FUNC GLOBAL DEFAULT 13 snd_config_searcha@@ALSA_0.9 + 975: 0000000000054490 128 FUNC GLOBAL DEFAULT 13 snd_pcm_samples_to_bytes@@ALSA_0.9 + 976: 00000000000401c0 83 FUNC GLOBAL DEFAULT 13 snd_ctl_close@@ALSA_0.9 + 977: 00000000000524c0 151 FUNC GLOBAL DEFAULT 13 snd_pcm_state@@ALSA_0.9 + 978: 00000000000b2b80 418 FUNC GLOBAL DEFAULT 13 snd_tplg_new@@ALSA_0.9 + 979: 0000000000052d70 142 FUNC GLOBAL DEFAULT 13 snd_pcm_drain@@ALSA_0.9 + 980: 00000000000abe70 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_follow_alias@@ALSA_0.9 + 981: 0000000000040160 42 FUNC GLOBAL DEFAULT 13 snd_ctl_name@@ALSA_0.9 + 982: 00000000000688a0 381 FUNC GLOBAL DEFAULT 13 snd_pcm_copy_open@@ALSA_0.9 + 983: 0000000000056f30 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_min@@ALSA_0.9 + 984: 000000000009ee20 54 FUNC GLOBAL DEFAULT 13 snd_timer_params_set_auto_start@@ALSA_0.9 + 985: 00000000000574c0 92 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_max@@ALSA_0.9 + 986: 000000000003bf20 450 FUNC GLOBAL DEFAULT 13 snd_tlv_get_dB_range@@ALSA_0.9 + 987: 0000000000043610 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_interface@@ALSA_0.9 + 988: 0000000000042de0 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_volatile@@ALSA_0.9 + 989: 0000000000089fb0 1075 FUNC GLOBAL DEFAULT 13 _snd_pcm_ladspa_open@@ALSA_0.9 + 990: 000000000007bc60 928 FUNC GLOBAL DEFAULT 13 snd_pcm_shm_open@@ALSA_0.9 + 991: 0000000000043da0 88 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_boolean@@ALSA_0.9 + 992: 00000000000a07c0 8 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_resolution_min@@ALSA_0.9 + 993: 00000000000577f0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9 + 994: 00000000000abf00 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_follow_alias@@ALSA_0.9 + 995: 00000000000a80c0 47 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_get_time_real@@ALSA_0.9 + 996: 00000000000a0910 6 FUNC GLOBAL DEFAULT 13 snd_timer_id_sizeof@@ALSA_0.9 + 997: 0000000000058d60 41 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_card@@ALSA_0.9 + 998: 00000000000a4770 47 FUNC GLOBAL DEFAULT 13 snd_hwdep_ioctl@@ALSA_0.9 + 999: 000000000003bb70 174 FUNC GLOBAL DEFAULT 13 snd_card_get_name@@ALSA_0.9 + 1000: 00000000000a1510 40 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_set_device@@ALSA_0.9 + 1001: 0000000000086160 5 FUNC GLOBAL DEFAULT 13 snd_pcm_lfloat_put_s32_index@@ALSA_0.9 + 1002: 00000000002ff8dd 1 OBJECT GLOBAL DEFAULT 27 _snd_func_datadir_dlsym_config_evaluate_001@@ALSA_0.9 + 1003: 00000000000578b0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9.0rc4 + 1004: 000000000005b070 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_near@ALSA_0.9 + 1005: 00000000000abf90 6 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_load@@ALSA_0.9 + 1006: 00000000000a8240 59 FUNC GLOBAL DEFAULT 13 snd_seq_get_port_subscription@@ALSA_0.9 + 1007: 000000000003bc20 174 FUNC GLOBAL DEFAULT 13 snd_card_get_longname@@ALSA_0.9 + 1008: 000000000004a9f0 69 FUNC GLOBAL DEFAULT 13 snd_mixer_class_malloc@@ALSA_0.9 + 1009: 00000000000a4b60 41 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_get_chip_ready@@ALSA_0.9 + 1010: 00000000000341c0 84 FUNC GLOBAL DEFAULT 13 snd_config_save@@ALSA_0.9 + 1011: 0000000000043af0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_device@@ALSA_0.9 + 1012: 0000000000053de0 27 FUNC GLOBAL DEFAULT 13 snd_pcm_type_name@@ALSA_0.9.0 + 1013: 0000000000056510 8 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_any@@ALSA_0.9 + 1014: 0000000000043170 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_max64@@ALSA_0.9 + 1015: 00000000000a1690 96 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_copy@@ALSA_0.9 + 1016: 0000000000032800 245 FUNC GLOBAL DEFAULT 13 snd_config_searchv@@ALSA_0.9 + 1017: 000000000005b6c0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_last@ALSA_0.9 + 1018: 0000000000057650 80 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_last@@ALSA_0.9.0rc4 + 1019: 0000000000057a10 92 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_min@@ALSA_0.9 + 1020: 00000000000aad50 109 FUNC GLOBAL DEFAULT 13 snd_seq_disconnect_from@@ALSA_0.9 + 1021: 000000000004c0d0 144 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_capture_volume@@ALSA_0.9 + 1022: 000000000003f8b0 112 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_id@@ALSA_0.9 + 1023: 00000000000a7990 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_client@@ALSA_0.9 + 1024: 00000000002ff8ed 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_copy_open_dlsym_pcm_001@@ALSA_0.9 + 1025: 00000000000521e0 69 FUNC GLOBAL DEFAULT 13 snd_pcm_info@@ALSA_0.9 + 1026: 0000000000041a00 5 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_free@@ALSA_0.9 + 1027: 0000000000040470 47 FUNC GLOBAL DEFAULT 13 snd_ctl_subscribe_events@@ALSA_0.9 + 1028: 000000000004a7f0 109 FUNC GLOBAL DEFAULT 13 snd_mixer_handle_events@@ALSA_0.9 + 1029: 00000000000567f0 8 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_any@@ALSA_0.9 + 1030: 000000000004c9e0 41 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_get_name@@ALSA_0.9 + 1031: 00000000000a7300 40 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_set_client@@ALSA_0.9 + 1032: 00000000002ff8d8 1 OBJECT GLOBAL DEFAULT 27 _snd_config_hook_load_for_all_cards_dlsym_config_hook_001@@ALSA_0.9 + 1033: 0000000000043670 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_subdevice@@ALSA_0.9 + 1034: 000000000009cfc0 9 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_delete@@ALSA_0.9 + 1035: 000000000003eee0 423 FUNC GLOBAL DEFAULT 13 snd_hctl_wait@@ALSA_0.9 + 1036: 0000000000033b30 12 FUNC GLOBAL DEFAULT 13 snd_config_load_override@@ALSA_0.9 + 1037: 000000000003f600 196 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_write@@ALSA_0.9 + 1038: 0000000000057210 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_time_max@@ALSA_0.9.0rc4 + 1039: 00000000000579d0 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_buffer_size@@ALSA_0.9 + 1040: 000000000005ada0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_time_max@ALSA_0.9 + 1041: 000000000009eb80 58 FUNC GLOBAL DEFAULT 13 snd_timer_info_copy@@ALSA_0.9 + 1042: 0000000000052e00 273 FUNC GLOBAL DEFAULT 13 snd_pcm_pause@@ALSA_0.9 + 1043: 00000000000a4ba0 69 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_malloc@@ALSA_0.9 + 1044: 000000000004b780 136 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_volume@@ALSA_0.9 + 1045: 0000000000065c50 121 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap_readi@@ALSA_0.9 + 1046: 000000000005b1f0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_first@ALSA_0.9 + 1047: 0000000000056ea0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_first@@ALSA_0.9.0rc4 + 1048: 000000000009ea30 188 FUNC GLOBAL DEFAULT 13 snd_async_add_timer_handler@@ALSA_0.9 + 1049: 0000000000041370 70 FUNC GLOBAL DEFAULT 13 snd_ctl_open_lconf@@ALSA_0.9 + 1050: 0000000000064280 1853 FUNC GLOBAL DEFAULT 13 _snd_pcm_hw_open@@ALSA_0.9 + 1051: 0000000000041c30 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_set_numid@@ALSA_0.9 + 1052: 0000000000040550 71 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info@@ALSA_0.9 + 1053: 0000000000031d50 70 FUNC GLOBAL DEFAULT 13 snd_config_get_integer64@@ALSA_0.9 + 1054: 00000000000a4bf0 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_free@@ALSA_0.9 + 1055: 000000000005bb70 27 FUNC GLOBAL DEFAULT 13 snd_pcm_get_chmap@@ALSA_0.9 + 1056: 00000000000a1360 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_subdevice@@ALSA_0.9 + 1057: 0000000000057cd0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9.0rc4 + 1058: 000000000005b0d0 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_near@ALSA_0.9 + 1059: 0000000000065cd0 121 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap_readn@@ALSA_0.9 + 1060: 0000000000077ac0 1426 FUNC GLOBAL DEFAULT 13 _snd_pcm_plug_open@@ALSA_0.9 + 1061: 000000000009f2d0 41 FUNC GLOBAL DEFAULT 13 snd_timer_status_get_queue@@ALSA_0.9 + 1062: 0000000000041ba0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_get_subdevice@@ALSA_0.9 + 1063: 000000000004a200 65 FUNC GLOBAL DEFAULT 13 snd_mixer_load@@ALSA_0.9 + 1064: 0000000000043510 42 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_name@@ALSA_0.9 + 1065: 000000000003f920 40 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_numid@@ALSA_0.9 + 1066: 000000000003bcd0 344 FUNC GLOBAL DEFAULT 13 snd_tlv_parse_dB_info@@ALSA_0.9 + 1067: 00000000000a49a0 6 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_sizeof@@ALSA_0.9 + 1068: 000000000009f150 42 FUNC GLOBAL DEFAULT 13 snd_timer_status_free@@ALSA_0.9 + 1069: 000000000004bbd0 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_capture_volume_range@@ALSA_0.9 + 1070: 00000000000a8550 42 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_queue@@ALSA_0.9 + 1071: 0000000000056440 69 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_malloc@@ALSA_0.9 + 1072: 0000000000058560 47 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_start_threshold@@ALSA_0.9.0rc4 + 1073: 000000000005b9c0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_start_threshold@ALSA_0.9 + 1074: 000000000004a9b0 40 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_get_type@@ALSA_0.9 + 1075: 00000000000a7330 63 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_set_name@@ALSA_0.9 + 1076: 00000000000a6f60 41 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_get_cur_queues@@ALSA_0.9 + 1077: 00000000000589c0 65 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_audio_htstamp@@ALSA_0.9 + 1078: 00000000000576c0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_periods_min@@ALSA_0.9 + 1079: 0000000000031e60 70 FUNC GLOBAL DEFAULT 13 snd_config_get_string@@ALSA_0.9 + 1080: 00000000000577b0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_periods_last@@ALSA_0.9 + 1081: 0000000000043720 69 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_malloc@@ALSA_0.9 + 1082: 00000000000a6970 76 FUNC GLOBAL DEFAULT 13 snd_seq_open_lconf@@ALSA_0.9 + 1083: 000000000009fbc0 684 FUNC GLOBAL DEFAULT 13 _snd_timer_hw_open@@ALSA_0.9 + 1084: 0000000000085080 709 FUNC GLOBAL DEFAULT 13 _snd_pcm_hook_ctl_elems_install@@ALSA_0.9 + 1085: 00000000000577c0 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_integer@@ALSA_0.9 + 1086: 00000000000abeb0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_len@@ALSA_0.9 + 1087: 00000000000a92c0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_set_ppq@@ALSA_0.9 + 1088: 000000000005bb00 27 FUNC GLOBAL DEFAULT 13 snd_pcm_query_chmaps@@ALSA_0.9 + 1089: 000000000005f020 69 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_refine@@ALSA_0.9 + 1090: 00000000000a96e0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_set_resolution@@ALSA_0.9 + 1091: 000000000003f7f0 135 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_tlv_command@@ALSA_0.9 + 1092: 00000000000aac50 5 FUNC GLOBAL DEFAULT 13 snd_seq_delete_simple_port@@ALSA_0.9 + 1093: 000000000006d0f0 985 FUNC GLOBAL DEFAULT 13 snd_pcm_route_open@@ALSA_0.9 + 1094: 0000000000041890 41 FUNC GLOBAL DEFAULT 13 _snd_ctl_poll_descriptor@@ALSA_0.9 + 1095: 00000000000a1220 6 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_sizeof@@ALSA_0.9 + 1096: 00000000000a0850 90 FUNC GLOBAL DEFAULT 13 snd_timer_query_params@@ALSA_0.9.0 + 1097: 00000000000572f0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_period_time_last@@ALSA_0.9 + 1098: 000000000009f030 41 FUNC GLOBAL DEFAULT 13 snd_timer_params_set_filter@@ALSA_0.9.0 + 1099: 0000000000083cd0 96 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_get_channels@@ALSA_0.9 + 1100: 00000000000a9fa0 40 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_condition@@ALSA_0.9 + 1101: 000000000009f240 41 FUNC GLOBAL DEFAULT 13 snd_timer_status_get_resolution@@ALSA_0.9 + 1102: 00000000000572a0 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_minmax@@ALSA_0.9 + 1103: 00000000000a6ed0 41 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_get_ports@@ALSA_0.9 + 1104: 00000000000b2910 218 FUNC GLOBAL DEFAULT 13 snd_tplg_add_object@@ALSA_0.9 + 1105: 000000000008f350 2481 FUNC GLOBAL DEFAULT 13 snd_pcm_dshare_open@@ALSA_0.9 + 1106: 00000000000a73b0 53 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_set_error_bounce@@ALSA_0.9 + 1107: 0000000000067280 141 FUNC GLOBAL DEFAULT 13 snd_pcm_generic_real_htimestamp@@ALSA_0.9 + 1108: 00000000002ff908 1 OBJECT GLOBAL DEFAULT 27 __snd_timer_query_hw_open_dlsym_timer_query_001@@ALSA_0.9 + 1109: 0000000000042fc0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_count@@ALSA_0.9 + 1110: 0000000000043ec0 87 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_enumerated@@ALSA_0.9 + 1111: 0000000000056540 27 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_empty@@ALSA_0.9 + 1112: 000000000009ec50 42 FUNC GLOBAL DEFAULT 13 snd_timer_info_get_name@@ALSA_0.9 + 1113: 000000000004bcd0 167 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_volume_range@@ALSA_0.9 + 1114: 0000000000040bf0 71 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_read@@ALSA_0.9 + 1115: 0000000000037d90 213 FUNC GLOBAL DEFAULT 13 snd_config_get_ctl_iface@@ALSA_0.9 + 1116: 0000000000031df0 103 FUNC GLOBAL DEFAULT 13 snd_config_get_ireal@@ALSA_0.9 + 1117: 00000000000aa1e0 41 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_event_type@@ALSA_0.9 + 1118: 0000000000057600 80 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_first@@ALSA_0.9.0rc4 + 1119: 00000000000a13c0 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_card@@ALSA_0.9 + 1120: 000000000005b300 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_first@ALSA_0.9 + 1121: 00000000000a0970 42 FUNC GLOBAL DEFAULT 13 snd_timer_id_free@@ALSA_0.9 + 1122: 0000000000083ec0 5 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_set_callback_private@@ALSA_0.9 + 1123: 00000000000ab750 119 FUNC GLOBAL DEFAULT 13 snd_midi_event_new@@ALSA_0.9 + 1124: 000000000003f950 41 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_interface@@ALSA_0.9 + 1125: 0000000000032ea0 194 FUNC GLOBAL DEFAULT 13 snd_config_delete@@ALSA_0.9 + 1126: 000000000004a090 35 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_info@@ALSA_0.9 + 1127: 00000000000abec0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_name@@ALSA_0.9 + 1128: 0000000000043a20 112 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_id@@ALSA_0.9 + 1129: 0000000000056c50 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_format@@ALSA_0.9.0rc4 + 1130: 0000000000043fe0 42 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_bytes@@ALSA_0.9 + 1131: 00000000000a71e0 44 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_pid@@ALSA_0.9 + 1132: 000000000005a760 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_format@ALSA_0.9 + 1133: 00000000000583f0 67 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_avail_min@@ALSA_0.9 + 1134: 00000000000a1020 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_name@@ALSA_0.9 + 1135: 00000000000a79f0 44 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_addr@@ALSA_0.9 + 1136: 0000000000039510 391 FUNC GLOBAL DEFAULT 13 snd_func_private_pcm_subdevice@@ALSA_0.9 + 1137: 000000000007dad0 1441 FUNC GLOBAL DEFAULT 13 _snd_pcm_file_open@@ALSA_0.9 + 1138: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.0rc4 + 1139: 0000000000042ed0 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_tlv_readable@@ALSA_0.9 + 1140: 00000000000ab060 5 FUNC GLOBAL DEFAULT 13 snd_seq_reset_pool_input@@ALSA_0.9 + 1141: 0000000000058440 59 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_avail_min@@ALSA_0.9 + 1142: 000000000009b260 173 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_set_slave_param_minmax@@ALSA_0.9 + 1143: 000000000003dbb0 1283 FUNC GLOBAL DEFAULT 13 snd_device_name_hint@@ALSA_0.9 + 1144: 00000000000a88c0 45 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_get_locked@@ALSA_0.9 + 1145: 000000000004c3c0 109 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_volume_all@@ALSA_0.9 + 1146: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_0.9.0rc8 + 1147: 0000000000079c20 1010 FUNC GLOBAL DEFAULT 13 snd_pcm_multi_open@@ALSA_0.9 + 1148: 00000000000a12b0 115 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_copy@@ALSA_0.9 + 1149: 00000000000a8890 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_get_owner@@ALSA_0.9 + 1150: 0000000000058970 65 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_htstamp@@ALSA_0.9.0rc8 + 1151: 00000000002ff8fa 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_share_open_dlsym_pcm_001@@ALSA_0.9 + 1152: 0000000000055ab0 193 FUNC GLOBAL DEFAULT 13 snd_pcm_areas_copy_wrap@@ALSA_0.9 + 1153: 000000000004c960 5 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_free@@ALSA_0.9 + 1154: 0000000000040d70 93 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_tlv_command@@ALSA_0.9 + 1155: 00000000000415b0 150 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_id@@ALSA_0.9 + 1156: 00000000000421d0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_set_device@@ALSA_0.9 + 1157: 0000000000056d90 26 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_subformat_mask@@ALSA_0.9 + 1158: 00000000000743f0 633 FUNC GLOBAL DEFAULT 13 _snd_pcm_rate_open@@ALSA_0.9 + 1159: 00000000000a4a00 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_free@@ALSA_0.9 + 1160: 0000000000053280 275 FUNC GLOBAL DEFAULT 13 snd_pcm_forward@@ALSA_0.9.0rc8 + 1161: 00000000000a8360 5 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_free@@ALSA_0.9 + 1162: 0000000000055830 640 FUNC GLOBAL DEFAULT 13 snd_pcm_areas_copy@@ALSA_0.9 + 1163: 0000000000053d60 22 FUNC GLOBAL DEFAULT 13 snd_pcm_xrun_mode_name@@ALSA_0.9 + 1164: 0000000000058b20 42 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_delay@@ALSA_0.9 + 1165: 00000000000a8a50 121 FUNC GLOBAL DEFAULT 13 snd_seq_alloc_named_queue@@ALSA_0.9 + 1166: 00000000000576c0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_periods_min@@ALSA_0.9.0rc4 + 1167: 000000000005abc0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_periods_min@ALSA_0.9 + 1168: 0000000000065b50 121 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap_writei@@ALSA_0.9 + 1169: 0000000000038640 86 FUNC GLOBAL DEFAULT 13 snd_func_datadir@@ALSA_0.9 + 1170: 00000000000b2270 1692 FUNC GLOBAL DEFAULT 13 snd_tplg_build_file@@ALSA_0.9 + 1171: 000000000004bfd0 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_ask_capture_vol_dB@@ALSA_0.9 + 1172: 000000000003eb10 89 FUNC GLOBAL DEFAULT 13 snd_hctl_find_elem@@ALSA_0.9 + 1173: 00000000000435e0 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_numid@@ALSA_0.9 + 1174: 00000000000588c0 65 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_trigger_htstamp@@ALSA_0.9.0rc8 + 1175: 000000000004aa40 24 FUNC GLOBAL DEFAULT 13 snd_mixer_class_free@@ALSA_0.9 + 1176: 0000000000058020 58 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_copy@@ALSA_0.9 + 1177: 00000000000a70f0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_type@@ALSA_0.9 + 1178: 00000000000a7450 274 FUNC GLOBAL DEFAULT 13 snd_seq_get_any_client_info@@ALSA_0.9 + 1179: 000000000004c5b0 103 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_is_enumerated@@ALSA_0.9 + 1180: 0000000000043b50 51 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_name@@ALSA_0.9 + 1181: 0000000000065bd0 121 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap_writen@@ALSA_0.9 + 1182: 000000000004ca80 41 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_set_index@@ALSA_0.9 + 1183: 00000000002ff8e0 1 OBJECT GLOBAL DEFAULT 27 _snd_func_getenv_dlsym_config_evaluate_001@@ALSA_0.9 + 1184: 000000000009f360 47 FUNC GLOBAL DEFAULT 13 snd_timer_start@@ALSA_0.9 + 1185: 000000000004c160 144 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_capture_dB@@ALSA_0.9 + 1186: 0000000000057ce0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9.0rc4 + 1187: 000000000005b460 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_first@ALSA_0.9 + 1188: 000000000004bad0 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_is_capture_mono@@ALSA_0.9 + 1189: 00000000000b2b60 6 FUNC GLOBAL DEFAULT 13 snd_tplg_set_version@@ALSA_0.9 + 1190: 00000000000a1780 93 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_set_avail_min@@ALSA_0.9 + 1191: 0000000000067270 15 FUNC GLOBAL DEFAULT 13 snd_pcm_generic_htimestamp@@ALSA_0.9 + 1192: 00000000000576a0 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_integer@@ALSA_0.9 + 1193: 0000000000083780 1040 FUNC GLOBAL DEFAULT 13 _snd_pcm_meter_open@@ALSA_0.9 + 1194: 00000000000a68a0 41 FUNC GLOBAL DEFAULT 13 snd_seq_type@@ALSA_0.9 + 1195: 0000000000040f50 50 FUNC GLOBAL DEFAULT 13 snd_ctl_pcm_prefer_subdevice@@ALSA_0.9 + 1196: 0000000000044010 270 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_iec958@@ALSA_0.9 + 1197: 0000000000056de0 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_channels@@ALSA_0.9 + 1198: 0000000000086120 59 FUNC GLOBAL DEFAULT 13 snd_pcm_lfloat_get_s32_index@@ALSA_0.9 + 1199: 0000000000042270 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_set_index@@ALSA_0.9 + 1200: 0000000000083fc0 193 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_s16_get_channel_buffer@@ALSA_0.9 + 1201: 0000000000095fc0 454 FUNC GLOBAL DEFAULT 13 _snd_pcm_asym_open@@ALSA_0.9 + 1202: 00000000000a4480 95 FUNC GLOBAL DEFAULT 13 snd_hwdep_nonblock@@ALSA_0.9 + 1203: 0000000000057080 84 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_export_buffer@@ALSA_0.9 + 1204: 00000000000a0b10 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_set_device@@ALSA_0.9 + 1205: 0000000000043290 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_item@@ALSA_0.9 + 1206: 000000000003c8d0 115 FUNC GLOBAL DEFAULT 13 snd_ctl_convert_from_dB@@ALSA_0.9 + 1207: 00000000000a6d50 67 FUNC GLOBAL DEFAULT 13 snd_seq_get_input_buffer_size@@ALSA_0.9 + 1208: 00000000000a9e50 48 FUNC GLOBAL DEFAULT 13 snd_seq_drop_output_buffer@@ALSA_0.9 + 1209: 0000000000056c60 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_format@@ALSA_0.9 + 1210: 00000000000386a0 263 FUNC GLOBAL DEFAULT 13 snd_func_private_string@@ALSA_0.9 + 1211: 000000000003fa10 41 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_get_index@@ALSA_0.9 + 1212: 0000000000057fc0 69 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_malloc@@ALSA_0.9 + 1213: 0000000000042c10 6 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_sizeof@@ALSA_0.9 + 1214: 00000000000a23d0 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_get_xruns@@ALSA_0.9 + 1215: 00000000000417d0 86 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_name@@ALSA_0.9 + 1216: 0000000000058390 57 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_tstamp_type@@ALSA_0.9 + 1217: 00000000000aa9d0 25 FUNC GLOBAL DEFAULT 13 snd_seq_set_bit@@ALSA_0.9 + 1218: 0000000000070ee0 548 FUNC GLOBAL DEFAULT 13 _snd_pcm_adpcm_open@@ALSA_0.9 + 1219: 00000000000a7f50 128 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_copy@@ALSA_0.9 + 1220: 0000000000058c40 5 FUNC GLOBAL DEFAULT 13 snd_pcm_info_free@@ALSA_0.9 + 1221: 00000000000566b0 27 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_empty@@ALSA_0.9 + 1222: 0000000000057820 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time@@ALSA_0.9 + 1223: 000000000009f2a0 41 FUNC GLOBAL DEFAULT 13 snd_timer_status_get_overrun@@ALSA_0.9 + 1224: 00000000000d1a60 1024 OBJECT GLOBAL DEFAULT 15 snd_seq_event_types@@ALSA_0.9 + 1225: 000000000003eb70 720 FUNC GLOBAL DEFAULT 13 snd_hctl_load@@ALSA_0.9 + 1226: 0000000000057440 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size@@ALSA_0.9 + 1227: 0000000000056820 27 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_empty@@ALSA_0.9 + 1228: 00000000000a8490 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_type@@ALSA_0.9 + 1229: 0000000000064a10 24 FUNC GLOBAL DEFAULT 13 snd_pcm_format_unsigned@@ALSA_0.9 + 1230: 0000000000053d30 16 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_description@@ALSA_0.9 + 1231: 00000000000abe30 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_type@@ALSA_0.9 + 1232: 0000000000033b40 143 FUNC GLOBAL DEFAULT 13 snd_config_imake_string@@ALSA_0.9 + 1233: 0000000000064a60 74 FUNC GLOBAL DEFAULT 13 snd_pcm_format_little_endian@@ALSA_0.9 + 1234: 0000000000043b20 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_subdevice@@ALSA_0.9 + 1235: 00000000000aa6e0 5 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_free@@ALSA_0.9 + 1236: 00000000000319c0 42 FUNC GLOBAL DEFAULT 13 snd_config_imake_integer64@@ALSA_0.9 + 1237: 00000000000a2490 47 FUNC GLOBAL DEFAULT 13 snd_rawmidi_drain@@ALSA_0.9 + 1238: 00000000000a82c0 59 FUNC GLOBAL DEFAULT 13 snd_seq_unsubscribe_port@@ALSA_0.9 + 1239: 0000000000097340 1510 FUNC GLOBAL DEFAULT 13 _snd_pcm_iec958_open@@ALSA_0.9 + 1240: 0000000000056ce0 26 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_format_mask@@ALSA_0.9 + 1241: 00000000000520d0 150 FUNC GLOBAL DEFAULT 13 snd_pcm_nonblock@@ALSA_0.9 + 1242: 00000000000a6db0 69 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_malloc@@ALSA_0.9 + 1243: 00000000000585d0 47 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9 + 1244: 00000000000aa840 42 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_get_output_free@@ALSA_0.9 + 1245: 0000000000058e20 44 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_class@@ALSA_0.9 + 1246: 0000000000058a10 65 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_driver_htstamp@@ALSA_0.9 + 1247: 00000000000582d0 56 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9 + 1248: 000000000003acc0 8 FUNC GLOBAL DEFAULT 13 snd_asoundlib_version@@ALSA_0.9 + 1249: 000000000004abc0 44 FUNC GLOBAL DEFAULT 13 snd_mixer_class_set_private@@ALSA_0.9 + 1250: 0000000000056be0 13 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_access_first@@ALSA_0.9 + 1251: 00000000000a9ed0 69 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_malloc@@ALSA_0.9 + 1252: 0000000000057d00 149 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_min_align@@ALSA_0.9 + 1253: 0000000000033a40 9 FUNC GLOBAL DEFAULT 13 snd_config_load@@ALSA_0.9 + 1254: 000000000009d430 40 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_hw_avail@@ALSA_0.9 + 1255: 0000000000041050 70 FUNC GLOBAL DEFAULT 13 snd_ctl_set_power_state@@ALSA_0.9 + 1256: 00000000000a6c30 74 FUNC GLOBAL DEFAULT 13 snd_seq_poll_descriptors_revents@@ALSA_0.9 + 1257: 0000000000058480 58 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_period_event@@ALSA_0.9 + 1258: 0000000000041530 30 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_free_space@@ALSA_0.9 + 1259: 0000000000083d30 96 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_get_rate@@ALSA_0.9 + 1260: 00000000000aa150 45 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_time@@ALSA_0.9 + 1261: 0000000000031da0 72 FUNC GLOBAL DEFAULT 13 snd_config_get_real@@ALSA_0.9 + 1262: 0000000000057c60 9 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9 + 1263: 000000000005b0a0 47 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_near@ALSA_0.9 + 1264: 0000000000057b50 87 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9.0rc4 + 1265: 00000000000a91d0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_get_tempo@@ALSA_0.9 + 1266: 00000000000abfa0 6 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_convert_to_stream@@ALSA_0.9 + 1267: 00000000000b12f0 883 FUNC GLOBAL DEFAULT 13 snd_use_case_get@@ALSA_0.9 + 1268: 00000000000a9a70 42 FUNC GLOBAL DEFAULT 13 snd_seq_event_output_pending@@ALSA_0.9 + 1269: 0000000000049d10 5 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_get_private@@ALSA_0.9 + 1270: 000000000009e6e0 70 FUNC GLOBAL DEFAULT 13 snd_timer_open_lconf@@ALSA_0.9 + 1271: 000000000009d010 121 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_set_param_list@@ALSA_0.9 + 1272: 00000000000430b0 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_step@@ALSA_0.9 + 1273: 00000000000578d0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9 + 1274: 00000000000a4650 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_get_id@@ALSA_0.9 + 1275: 0000000000052910 257 FUNC GLOBAL DEFAULT 13 snd_pcm_prepare@@ALSA_0.9 + 1276: 0000000000064ad0 5 FUNC GLOBAL DEFAULT 13 snd_pcm_format_cpu_endian@@ALSA_0.9 + 1277: 0000000000056eb0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_channels_last@@ALSA_0.9 + 1278: 0000000000042e40 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_locked@@ALSA_0.9 + 1279: 0000000000059470 41 FUNC GLOBAL DEFAULT 13 _snd_pcm_poll_descriptor@@ALSA_0.9 + 1280: 00000000000324e0 4 FUNC GLOBAL DEFAULT 13 snd_config_iterator_next@@ALSA_0.9 + 1281: 0000000000043a90 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_numid@@ALSA_0.9 + 1282: 0000000000042b50 95 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_name@@ALSA_0.9 + 1283: 000000000003b820 6 FUNC GLOBAL DEFAULT 13 snd_names_list@@ALSA_0.9 + 1284: 000000000009ee90 54 FUNC GLOBAL DEFAULT 13 snd_timer_params_set_exclusive@@ALSA_0.9.0 + 1285: 00000000002ff8d9 1 OBJECT GLOBAL DEFAULT 27 _snd_config_hook_load_dlsym_config_hook_001@@ALSA_0.9 + 1286: 0000000000039d10 10 FUNC GLOBAL DEFAULT 13 snd_input_getc@@ALSA_0.9 + 1287: 00000000002ff8f9 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_empty_open_dlsym_pcm_001@@ALSA_0.9 + 1288: 00000000000a0ab0 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_set_card@@ALSA_0.9 + 1289: 0000000000043e60 88 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_integer64@@ALSA_0.9 + 1290: 0000000000057980 79 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9.0rc4 + 1291: 000000000005aee0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_size_max@ALSA_0.9 + 1292: 0000000000033d70 116 FUNC GLOBAL DEFAULT 13 snd_config_delete_compound_members@@ALSA_0.9 + 1293: 0000000000042540 45 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_components@@ALSA_0.9 + 1294: 000000000004b350 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_playback_volume@@ALSA_0.9 + 1295: 00000000002ff8df 1 OBJECT GLOBAL DEFAULT 27 _snd_func_refer_dlsym_config_evaluate_001@@ALSA_0.9 + 1296: 000000000004c1f0 152 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_capture_switch@@ALSA_0.9 + 1297: 00000000000a7fd0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_get_sender@@ALSA_0.9 + 1298: 00000000000ab8c0 572 FUNC GLOBAL DEFAULT 13 snd_midi_event_encode_byte@@ALSA_0.9 + 1299: 00000000000a10b0 43 FUNC GLOBAL DEFAULT 13 snd_rawmidi_poll_descriptors_count@@ALSA_0.9 + 1300: 0000000000058eb0 44 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_subdevices_avail@@ALSA_0.9 + 1301: 00000000000a8dd0 6 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_sizeof@@ALSA_0.9 + 1302: 0000000000057cb0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_max@@ALSA_0.9 + 1303: 000000000004a950 42 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_set_callback_private@@ALSA_0.9 + 1304: 00000000000a9f20 5 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_free@@ALSA_0.9 + 1305: 0000000000057c80 11 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_tick_time@@ALSA_0.9 + 1306: 0000000000031b20 114 FUNC GLOBAL DEFAULT 13 snd_config_set_string@@ALSA_0.9 + 1307: 000000000004c430 107 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_dB_all@@ALSA_0.9 + 1308: 00000000002ff700 8 OBJECT GLOBAL DEFAULT 27 snd_config@@ALSA_0.9 + 1309: 00000000000587e0 5 FUNC GLOBAL DEFAULT 13 snd_pcm_status_free@@ALSA_0.9 + 1310: 000000000006a420 548 FUNC GLOBAL DEFAULT 13 _snd_pcm_linear_open@@ALSA_0.9 + 1311: 0000000000054390 128 FUNC GLOBAL DEFAULT 13 snd_pcm_frames_to_bytes@@ALSA_0.9 + 1312: 00000000000a0610 90 FUNC GLOBAL DEFAULT 13 snd_timer_query_next_device@@ALSA_0.9 + 1313: 0000000000058750 47 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_silence_size@@ALSA_0.9 + 1314: 000000000004a920 42 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_set_callback@@ALSA_0.9 + 1315: 00000000000a8200 53 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_set_time_real@@ALSA_0.9 + 1316: 0000000000032b40 611 FUNC GLOBAL DEFAULT 13 snd_config_search_alias@@ALSA_0.9 + 1317: 0000000000084e90 210 FUNC GLOBAL DEFAULT 13 snd_pcm_hook_add@@ALSA_0.9 + 1318: 0000000000039d00 10 FUNC GLOBAL DEFAULT 13 snd_input_gets@@ALSA_0.9 + 1319: 00000000000abf80 3 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_free@@ALSA_0.9 + 1320: 000000000004b980 136 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_switch@@ALSA_0.9 + 1321: 00000000000aa680 6 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_sizeof@@ALSA_0.9 + 1322: 0000000000039c10 34 FUNC GLOBAL DEFAULT 13 snd_input_close@@ALSA_0.9 + 1323: 00000000000a48c0 98 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status@@ALSA_0.9 + 1324: 00000000000436e0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_index@@ALSA_0.9 + 1325: 00000000000aa3f0 115 FUNC GLOBAL DEFAULT 13 snd_seq_drop_output@@ALSA_0.9 + 1326: 0000000000043320 76 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_dimensions@@ALSA_0.9.3 + 1327: 00000000000a8610 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_set_client@@ALSA_0.9 + 1328: 000000000005b880 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_tstamp_mode@ALSA_0.9 + 1329: 00000000000582d0 56 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9.0rc4 + 1330: 0000000000041430 51 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_type_name@@ALSA_0.9 + 1331: 000000000003c360 1167 FUNC GLOBAL DEFAULT 13 snd_tlv_convert_from_dB@@ALSA_0.9 + 1332: 00000000002ff8e9 1 OBJECT GLOBAL DEFAULT 27 _snd_func_card_inum_dlsym_config_evaluate_001@@ALSA_0.9 + 1333: 0000000000057880 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_minmax@@ALSA_0.9 + 1334: 0000000000037cf0 153 FUNC GLOBAL DEFAULT 13 snd_config_get_ctl_iface_ascii@@ALSA_0.9 + 1335: 00000000000421a0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_set_interface@@ALSA_0.9 + 1336: 00000000000a4da0 65 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_set_name@@ALSA_0.9 + 1337: 00000000000aaac0 22 FUNC GLOBAL DEFAULT 13 snd_seq_get_bit@@ALSA_0.9 + 1338: 0000000000057650 80 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_period_size_last@@ALSA_0.9 + 1339: 0000000000043640 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_device@@ALSA_0.9 + 1340: 00000000002ff907 1 OBJECT GLOBAL DEFAULT 27 __snd_timer_hw_open_dlsym_timer_001@@ALSA_0.9 + 1341: 000000000004a8c0 42 FUNC GLOBAL DEFAULT 13 snd_mixer_get_callback_private@@ALSA_0.9 + 1342: 00000000000a6f00 41 FUNC GLOBAL DEFAULT 13 snd_seq_system_info_get_channels@@ALSA_0.9 + 1343: 000000000003a3f0 105 FUNC GLOBAL DEFAULT 13 snd_output_stdio_open@@ALSA_0.9 + 1344: 0000000000057ed0 222 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_dump@@ALSA_0.9 + 1345: 000000000009b430 137 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_set_param_link@@ALSA_0.9 + 1346: 00000000000a13f0 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_flags@@ALSA_0.9 + 1347: 000000000005aad0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate_min@ALSA_0.9 + 1348: 00000000000a4930 98 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_load@@ALSA_0.9 + 1349: 0000000000056ed0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate_min@@ALSA_0.9.0rc4 + 1350: 000000000009ef40 46 FUNC GLOBAL DEFAULT 13 snd_timer_params_get_early_event@@ALSA_0.9 + 1351: 0000000000043050 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_max@@ALSA_0.9 + 1352: 0000000000046540 42 FUNC GLOBAL DEFAULT 13 snd_sctl_free@@ALSA_0.9 + 1353: 00000000000a9130 5 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_free@@ALSA_0.9 + 1354: 00000000000abe60 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_data@@ALSA_0.9 + 1355: 0000000000031aa0 56 FUNC GLOBAL DEFAULT 13 snd_config_set_integer64@@ALSA_0.9 + 1356: 00000000000429d0 93 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_numid@@ALSA_0.9 + 1357: 000000000005bde0 20 FUNC GLOBAL DEFAULT 13 snd_pcm_chmap_from_string@@ALSA_0.9 + 1358: 00000000000a1540 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_set_subdevice@@ALSA_0.9 + 1359: 000000000009ed70 42 FUNC GLOBAL DEFAULT 13 snd_timer_params_free@@ALSA_0.9 + 1360: 0000000000058510 10 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_xfer_align@@ALSA_0.9.0rc4 + 1361: 000000000005b970 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_xfer_align@ALSA_0.9 + 1362: 0000000000056130 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_can_disable_period_wakeup@@ALSA_0.9 + 1363: 000000000004a250 48 FUNC GLOBAL DEFAULT 13 snd_mixer_free@@ALSA_0.9 + 1364: 00000000002ff8fd 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_hook_ctl_elems_install_dlsym_pcm_001@@ALSA_0.9 + 1365: 000000000004b1b0 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_playback_volume_range@@ALSA_0.9 + 1366: 00000000000a4710 90 FUNC GLOBAL DEFAULT 13 snd_hwdep_info@@ALSA_0.9 + 1367: 000000000003db60 66 FUNC GLOBAL DEFAULT 13 snd_device_name_free_hint@@ALSA_0.9 + 1368: 0000000000042200 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_set_subdevice@@ALSA_0.9 + 1369: 00000000000525a0 222 FUNC GLOBAL DEFAULT 13 snd_pcm_hwsync@@ALSA_0.9 + 1370: 00000000000a8990 53 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_set_locked@@ALSA_0.9 + 1371: 00000000000abfd0 6 FUNC GLOBAL DEFAULT 13 snd_instr_simple_convert_to_stream@@ALSA_0.9 + 1372: 0000000000058590 56 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_stop_threshold@@ALSA_0.9 + 1373: 00000000002ff901 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_dshare_open_dlsym_pcm_001@@ALSA_0.9 + 1374: 000000000009efa0 41 FUNC GLOBAL DEFAULT 13 snd_timer_params_get_ticks@@ALSA_0.9 + 1375: 0000000000056ef0 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_rate@@ALSA_0.9 + 1376: 0000000000055c40 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_is_double@@ALSA_0.9 + 1377: 0000000000038aa0 134 FUNC GLOBAL DEFAULT 13 snd_func_card_driver@@ALSA_0.9 + 1378: 00000000000a23a0 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_get_avail@@ALSA_0.9 + 1379: 00000000002ff90b 1 OBJECT GLOBAL DEFAULT 27 __snd_hwdep_hw_open_dlsym_hwdep_001@@ALSA_0.9 + 1380: 0000000000031990 39 FUNC GLOBAL DEFAULT 13 snd_config_imake_integer@@ALSA_0.9 + 1381: 00000000000a0a50 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_set_sclass@@ALSA_0.9 + 1382: 0000000000043770 5 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_free@@ALSA_0.9 + 1383: 00000000000b05a0 64 FUNC GLOBAL DEFAULT 13 snd_use_case_free_list@@ALSA_0.9 + 1384: 0000000000093440 110 FUNC GLOBAL DEFAULT 13 snd_pcm_direct_client_chk_xrun@@ALSA_0.9 + 1385: 00000000000a44f0 69 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_malloc@@ALSA_0.9 + 1386: 0000000000040e90 62 FUNC GLOBAL DEFAULT 13 snd_ctl_hwdep_info@@ALSA_0.9 + 1387: 00000000000a9b80 267 FUNC GLOBAL DEFAULT 13 snd_seq_extract_output@@ALSA_0.9 + 1388: 00000000000425d0 5 FUNC GLOBAL DEFAULT 13 snd_ctl_event_free@@ALSA_0.9 + 1389: 000000000003a460 15 FUNC GLOBAL DEFAULT 13 snd_output_buffer_string@@ALSA_0.9 + 1390: 00000000000a8430 42 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_port@@ALSA_0.9 + 1391: 00000000000577a0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_first@@ALSA_0.9.0rc4 + 1392: 000000000005b350 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_first@ALSA_0.9 + 1393: 00000000000a7150 44 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_broadcast_filter@@ALSA_0.9 + 1394: 00000000000abdf0 3 FUNC GLOBAL DEFAULT 13 snd_instr_header_get_cluster@@ALSA_0.9 + 1395: 00000000000a92f0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_set_skew@@ALSA_0.9 + 1396: 0000000000042f00 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_tlv_writable@@ALSA_0.9 + 1397: 000000000003a300 10 FUNC GLOBAL DEFAULT 13 snd_output_vprintf@@ALSA_0.9 + 1398: 00000000000aa0f0 40 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_condition@@ALSA_0.9 + 1399: 000000000009f3c0 47 FUNC GLOBAL DEFAULT 13 snd_timer_continue@@ALSA_0.9 + 1400: 00000000000a4270 70 FUNC GLOBAL DEFAULT 13 snd_hwdep_open_lconf@@ALSA_0.9 + 1401: 000000000003b9b0 444 FUNC GLOBAL DEFAULT 13 snd_card_get_index@@ALSA_0.9 + 1402: 0000000000083c60 97 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_get_bufsize@@ALSA_0.9 + 1403: 00000000000419a0 6 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_sizeof@@ALSA_0.9 + 1404: 000000000005b040 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_near@ALSA_0.9 + 1405: 00000000000a8f90 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_get_status@@ALSA_0.9 + 1406: 0000000000057790 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_periods_near@@ALSA_0.9.0rc4 + 1407: 00000000000b1670 279 FUNC GLOBAL DEFAULT 13 snd_use_case_geti@@ALSA_0.9 + 1408: 00000000000835f0 397 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_open@@ALSA_0.9 + 1409: 000000000004c700 128 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_enum_items@@ALSA_0.9 + 1410: 00000000000a1330 40 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_device@@ALSA_0.9 + 1411: 00000000002ff8f6 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_shm_open_dlsym_pcm_001@@ALSA_0.9 + 1412: 00000000000a16f0 93 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_set_buffer_size@@ALSA_0.9 + 1413: 0000000000044120 246 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_iec958@@ALSA_0.9 + 1414: 00000000000a7680 58 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_copy@@ALSA_0.9 + 1415: 00000000000577d0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_buffer_time@@ALSA_0.9 + 1416: 0000000000043b90 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_index@@ALSA_0.9 + 1417: 0000000000043960 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_device@@ALSA_0.9 + 1418: 00000000000425e0 135 FUNC GLOBAL DEFAULT 13 snd_ctl_event_clear@@ALSA_0.9 + 1419: 00000000000a22b0 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status_free@@ALSA_0.9 + 1420: 0000000000057130 105 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_wakeup@@ALSA_0.9 + 1421: 0000000000057300 83 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_period_size@@ALSA_0.9 + 1422: 00000000000a4ad0 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_get_id@@ALSA_0.9 + 1423: 00000000000a4830 132 FUNC GLOBAL DEFAULT 13 snd_hwdep_read@@ALSA_0.9 + 1424: 0000000000042ea0 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_user@@ALSA_0.9 + 1425: 0000000000033bd0 228 FUNC GLOBAL DEFAULT 13 snd_config_imake_safe_string@@ALSA_0.9 + 1426: 00000000000320d0 70 FUNC GLOBAL DEFAULT 13 snd_config_get_pointer@@ALSA_0.9 + 1427: 00000000000319f0 50 FUNC GLOBAL DEFAULT 13 snd_config_imake_real@@ALSA_0.9 + 1428: 0000000000070d40 405 FUNC GLOBAL DEFAULT 13 snd_pcm_adpcm_open@@ALSA_0.9 + 1429: 0000000000065e10 1730 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap@@ALSA_0.9 + 1430: 00000000000439c0 42 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_name@@ALSA_0.9 + 1431: 00000000000a7af0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_midi_voices@@ALSA_0.9 + 1432: 00000000000a76c0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_client@@ALSA_0.9 + 1433: 00000000000374c0 249 FUNC GLOBAL DEFAULT 13 snd_config_search_hooks@@ALSA_0.9 + 1434: 000000000009f940 633 FUNC GLOBAL DEFAULT 13 snd_timer_hw_open@@ALSA_0.9 + 1435: 000000000003a950 53 FUNC GLOBAL DEFAULT 13 snd_strerror@@ALSA_0.9 + 1436: 0000000000057210 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_period_time_max@@ALSA_0.9 + 1437: 000000000005b3b0 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_first@ALSA_0.9 + 1438: 00000000000a70c0 40 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_client@@ALSA_0.9 + 1439: 00000000000578c0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9.0rc4 + 1440: 00000000000a8120 45 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_set_dest@@ALSA_0.9 + 1441: 0000000000052680 241 FUNC GLOBAL DEFAULT 13 snd_pcm_delay@@ALSA_0.9 + 1442: 000000000003b830 2 FUNC GLOBAL DEFAULT 13 snd_names_list_free@@ALSA_0.9 + 1443: 00000000000564f0 32 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_none@@ALSA_0.9 + 1444: 0000000000054560 160 FUNC GLOBAL DEFAULT 13 snd_pcm_open@@ALSA_0.9 + 1445: 000000000003e0c0 172 FUNC GLOBAL DEFAULT 13 snd_device_name_get_hint@@ALSA_0.9 + 1446: 0000000000083ea0 5 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_set_ops@@ALSA_0.9 + 1447: 0000000000056b50 75 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_access@@ALSA_0.9 + 1448: 00000000000abf70 3 FUNC GLOBAL DEFAULT 13 snd_instr_iwffff_close@@ALSA_0.9 + 1449: 00000000000a9890 3 FUNC GLOBAL DEFAULT 13 snd_seq_free_event@@ALSA_0.9 + 1450: 00000000000a4570 115 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_copy@@ALSA_0.9 + 1451: 0000000000058bf0 69 FUNC GLOBAL DEFAULT 13 snd_pcm_info_malloc@@ALSA_0.9 + 1452: 000000000004a450 106 FUNC GLOBAL DEFAULT 13 snd_mixer_poll_descriptors_count@@ALSA_0.9 + 1453: 0000000000042570 6 FUNC GLOBAL DEFAULT 13 snd_ctl_event_sizeof@@ALSA_0.9 + 1454: 00000000000a71b0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_card@@ALSA_0.9 + 1455: 0000000000057460 92 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_min@@ALSA_0.9 + 1456: 0000000000042e10 47 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_inactive@@ALSA_0.9 + 1457: 00000000000572d0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_near@@ALSA_0.9.0rc4 + 1458: 0000000000083e00 100 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_get_boundary@@ALSA_0.9 + 1459: 000000000005afe0 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_time_near@ALSA_0.9 + 1460: 0000000000056fb0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_rate_first@@ALSA_0.9 + 1461: 00000000002ff8ff 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_ladspa_open_dlsym_pcm_001@@ALSA_0.9 + 1462: 00000000000577e0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9 + 1463: 0000000000058560 47 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_start_threshold@@ALSA_0.9 + 1464: 0000000000052c60 257 FUNC GLOBAL DEFAULT 13 snd_pcm_drop@@ALSA_0.9 + 1465: 00000000000317a0 58 FUNC GLOBAL DEFAULT 13 snd_config_get_id@@ALSA_0.9 + 1466: 00000000000505b0 21 FUNC GLOBAL DEFAULT 13 snd_mixer_sbasic_set_private@@ALSA_0.9 + 1467: 000000000003af50 5 FUNC GLOBAL DEFAULT 13 snd_dlclose@@ALSA_0.9 + 1468: 00000000000561b0 218 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_supports_audio_ts_type@@ALSA_0.9 + 1469: 0000000000031be0 281 FUNC GLOBAL DEFAULT 13 snd_config_set_ascii@@ALSA_0.9 + 1470: 00000000000a0920 69 FUNC GLOBAL DEFAULT 13 snd_timer_id_malloc@@ALSA_0.9 + 1471: 00000000000576e0 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_periods@@ALSA_0.9 + 1472: 00000000000a89d0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_set_flags@@ALSA_0.9 + 1473: 0000000000056db0 15 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_channels@@ALSA_0.9 + 1474: 00000000000ab7d0 34 FUNC GLOBAL DEFAULT 13 snd_midi_event_free@@ALSA_0.9 + 1475: 00000000000a87b0 115 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_copy@@ALSA_0.9 + 1476: 00000000000410f0 62 FUNC GLOBAL DEFAULT 13 snd_ctl_read@@ALSA_0.9 + 1477: 000000000009ed10 6 FUNC GLOBAL DEFAULT 13 snd_timer_params_sizeof@@ALSA_0.9 + 1478: 000000000004a7a0 67 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_prev@@ALSA_0.9 + 1479: 0000000000049b50 86 FUNC GLOBAL DEFAULT 13 snd_mixer_attach@@ALSA_0.9 + 1480: 000000000005ad00 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_channels_max@ALSA_0.9 + 1481: 000000000009f060 41 FUNC GLOBAL DEFAULT 13 snd_timer_params_get_filter@@ALSA_0.9.0 + 1482: 0000000000056dd0 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_channels_max@@ALSA_0.9.0rc4 + 1483: 0000000000086440 555 FUNC GLOBAL DEFAULT 13 _snd_pcm_lfloat_open@@ALSA_0.9 + 1484: 00000000000423a0 115 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_copy@@ALSA_0.9 + 1485: 0000000000058dc0 42 FUNC GLOBAL DEFAULT 13 snd_pcm_info_get_name@@ALSA_0.9 + 1486: 000000000005c280 368 FUNC GLOBAL DEFAULT 13 snd_pcm_recover@@ALSA_0.9 + 1487: 00000000000a2400 90 FUNC GLOBAL DEFAULT 13 snd_rawmidi_status@@ALSA_0.9 + 1488: 0000000000056490 5 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_free@@ALSA_0.9 + 1489: 00000000000554b0 893 FUNC GLOBAL DEFAULT 13 snd_pcm_area_copy@@ALSA_0.9 + 1490: 0000000000042bb0 94 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_get_index@@ALSA_0.9 + 1491: 00000000000577d0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_time@@ALSA_0.9.0rc4 + 1492: 000000000005a990 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_time@ALSA_0.9 + 1493: 0000000000043930 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_interface@@ALSA_0.9 + 1494: 000000000009e820 67 FUNC GLOBAL DEFAULT 13 snd_async_handler_get_timer@@ALSA_0.9 + 1495: 00000000000a8e40 142 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_copy@@ALSA_0.9 + 1496: 0000000000056e40 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_max@@ALSA_0.9 + 1497: 0000000000043e00 88 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_integer@@ALSA_0.9 + 1498: 000000000005a8f0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_size@ALSA_0.9 + 1499: 0000000000057200 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_time_min@@ALSA_0.9.0rc4 + 1500: 000000000005ab20 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_time_min@ALSA_0.9 + 1501: 0000000000057300 83 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_size@@ALSA_0.9.0rc4 + 1502: 00000000000412a0 42 FUNC GLOBAL DEFAULT 13 snd_async_handler_get_ctl@@ALSA_0.9 + 1503: 00000000000a7610 6 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_sizeof@@ALSA_0.9 + 1504: 0000000000060e50 102 FUNC GLOBAL DEFAULT 13 snd_spcm_init_get_params@@ALSA_0.9 + 1505: 0000000000041a10 135 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_clear@@ALSA_0.9 + 1506: 00000000000aa980 67 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_pool@@ALSA_0.9 + 1507: 0000000000042c70 5 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_free@@ALSA_0.9 + 1508: 00000000000a0670 6 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_sizeof@@ALSA_0.9 + 1509: 000000000003e8c0 96 FUNC GLOBAL DEFAULT 13 snd_hctl_free@@ALSA_0.9 + 1510: 0000000000040220 70 FUNC GLOBAL DEFAULT 13 snd_ctl_nonblock@@ALSA_0.9 + 1511: 0000000000050590 28 FUNC GLOBAL DEFAULT 13 snd_mixer_sbasic_get_private@@ALSA_0.9 + 1512: 0000000000059ca0 1923 FUNC GLOBAL DEFAULT 13 snd_pcm_slave_conf@@ALSA_0.9 + 1513: 000000000009b380 165 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_set_param_minmax@@ALSA_0.9 + 1514: 0000000000039d30 173 FUNC GLOBAL DEFAULT 13 snd_input_stdio_attach@@ALSA_0.9 + 1515: 00000000000410a0 70 FUNC GLOBAL DEFAULT 13 snd_ctl_get_power_state@@ALSA_0.9 + 1516: 00000000000a85e0 46 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_time_real@@ALSA_0.9 + 1517: 0000000000056d00 15 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_subformat@@ALSA_0.9.0rc4 + 1518: 000000000005a7b0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_subformat@ALSA_0.9 + 1519: 0000000000055bd0 107 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_can_mmap_sample_resolution@@ALSA_0.9 + 1520: 0000000000052230 63 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_free@@ALSA_0.9 + 1521: 0000000000040400 103 FUNC GLOBAL DEFAULT 13 snd_ctl_poll_descriptors_revents@@ALSA_0.9 + 1522: 00000000000aa0c0 42 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_get_tag@@ALSA_0.9 + 1523: 0000000000043990 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_get_subdevice@@ALSA_0.9 + 1524: 0000000000056320 108 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_sbits@@ALSA_0.9 + 1525: 00000000000a49b0 69 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_malloc@@ALSA_0.9 + 1526: 000000000004b410 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_playback_switch@@ALSA_0.9 + 1527: 00000000000a7ac0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_midi_channels@@ALSA_0.9 + 1528: 00000000000a8520 42 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_addr@@ALSA_0.9 + 1529: 000000000008fd10 675 FUNC GLOBAL DEFAULT 13 _snd_pcm_dshare_open@@ALSA_0.9 + 1530: 00000000000a1180 145 FUNC GLOBAL DEFAULT 13 snd_rawmidi_nonblock@@ALSA_0.9 + 1531: 00000000002ff8e8 1 OBJECT GLOBAL DEFAULT 27 _snd_func_card_name_dlsym_config_evaluate_001@@ALSA_0.9 + 1532: 000000000004af50 94 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_common_volume@@ALSA_0.9 + 1533: 0000000000057b50 87 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9 + 1534: 0000000000043110 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_min64@@ALSA_0.9 + 1535: 00000000000433e0 112 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_id@@ALSA_0.9 + 1536: 00000000000917d0 675 FUNC GLOBAL DEFAULT 13 _snd_pcm_dsnoop_open@@ALSA_0.9 + 1537: 0000000000056290 7 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_supports_audio_wallclock_ts@@ALSA_0.9 + 1538: 000000000005af80 39 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_near@ALSA_0.9 + 1539: 0000000000056e90 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_channels_near@@ALSA_0.9.0rc4 + 1540: 000000000003f760 135 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_tlv_write@@ALSA_0.9 + 1541: 00000000000a4aa0 40 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_get_version@@ALSA_0.9 + 1542: 0000000000057ce0 3 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9 + 1543: 000000000009ebc0 43 FUNC GLOBAL DEFAULT 13 snd_timer_info_is_slave@@ALSA_0.9 + 1544: 00000000000a15a0 90 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info@@ALSA_0.9 + 1545: 00000000000a7ee0 6 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_sizeof@@ALSA_0.9 + 1546: 00000000000422a0 6 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_sizeof@@ALSA_0.9 + 1547: 000000000003c7f0 105 FUNC GLOBAL DEFAULT 13 snd_ctl_get_dB_range@@ALSA_0.9 + 1548: 0000000000037150 255 FUNC GLOBAL DEFAULT 13 snd_config_searchva_hooks@@ALSA_0.9 + 1549: 00000000000aac60 109 FUNC GLOBAL DEFAULT 13 snd_seq_connect_from@@ALSA_0.9 + 1550: 0000000000056580 31 FUNC GLOBAL DEFAULT 13 snd_pcm_access_mask_reset@@ALSA_0.9 + 1551: 00000000002ff909 1 OBJECT GLOBAL DEFAULT 27 __snd_rawmidi_hw_open_dlsym_rawmidi_001@@ALSA_0.9 + 1552: 00000000000a7bd0 53 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_timestamp_real@@ALSA_0.9 + 1553: 00000000000a7a20 63 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_name@@ALSA_0.9 + 1554: 0000000000042f60 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_is_indirect@@ALSA_0.9 + 1555: 00000000000a8700 59 FUNC GLOBAL DEFAULT 13 snd_seq_query_port_subscribers@@ALSA_0.9 + 1556: 0000000000046fd0 7 FUNC GLOBAL DEFAULT 13 snd_ctl_ascii_elem_id_parse@@ALSA_0.9 + 1557: 00000000000a9c90 254 FUNC GLOBAL DEFAULT 13 snd_seq_event_input@@ALSA_0.9 + 1558: 0000000000037e70 935 FUNC GLOBAL DEFAULT 13 snd_func_getenv@@ALSA_0.9 + 1559: 00000000000a95d0 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_get_type@@ALSA_0.9 + 1560: 00000000000b0440 337 FUNC GLOBAL DEFAULT 13 snd_use_case_identifier@@ALSA_0.9 + 1561: 0000000000042720 6 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_sizeof@@ALSA_0.9 + 1562: 00000000000a9b40 61 FUNC GLOBAL DEFAULT 13 snd_seq_event_output@@ALSA_0.9 + 1563: 000000000004aad0 42 FUNC GLOBAL DEFAULT 13 snd_mixer_class_get_mixer@@ALSA_0.9 + 1564: 000000000006f9b0 413 FUNC GLOBAL DEFAULT 13 snd_pcm_alaw_open@@ALSA_0.9 + 1565: 0000000000059150 189 FUNC GLOBAL DEFAULT 13 snd_pcm_mmap_begin@@ALSA_0.9 + 1566: 00000000000a1480 45 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_subdevice_name@@ALSA_0.9 + 1567: 00000000000a1450 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_name@@ALSA_0.9 + 1568: 000000000005bb90 103 FUNC GLOBAL DEFAULT 13 snd_pcm_set_chmap@@ALSA_0.9 + 1569: 000000000004b470 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_playback_switch_joined@@ALSA_0.9 + 1570: 00000000000535c0 258 FUNC GLOBAL DEFAULT 13 snd_pcm_poll_descriptors_revents@@ALSA_0.9 + 1571: 0000000000056ee0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_rate_max@@ALSA_0.9 + 1572: 000000000003a8f0 41 FUNC GLOBAL DEFAULT 13 snd_async_handler_get_fd@@ALSA_0.9 + 1573: 0000000000049c40 90 FUNC GLOBAL DEFAULT 13 snd_mixer_detach_hctl@@ALSA_0.9 + 1574: 000000000008dce0 754 FUNC GLOBAL DEFAULT 13 _snd_pcm_dmix_open@@ALSA_0.9 + 1575: 000000000003e9c0 5 FUNC GLOBAL DEFAULT 13 snd_hctl_compare_fast@@ALSA_0.9 + 1576: 00000000000a6c80 92 FUNC GLOBAL DEFAULT 13 snd_seq_nonblock@@ALSA_0.9 + 1577: 00000000000a1080 41 FUNC GLOBAL DEFAULT 13 snd_rawmidi_stream@@ALSA_0.9 + 1578: 0000000000053c30 27 FUNC GLOBAL DEFAULT 13 snd_pcm_format_description@@ALSA_0.9 + 1579: 0000000000084f70 71 FUNC GLOBAL DEFAULT 13 snd_pcm_hook_remove@@ALSA_0.9 + 1580: 00000000000505d0 21 FUNC GLOBAL DEFAULT 13 snd_mixer_sbasic_set_private_free@@ALSA_0.9 + 1581: 00000000000a2550 132 FUNC GLOBAL DEFAULT 13 snd_rawmidi_read@@ALSA_0.9 + 1582: 0000000000056890 539 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_current@@ALSA_0.9 + 1583: 0000000000032530 246 FUNC GLOBAL DEFAULT 13 snd_config_set_id@@ALSA_0.9 + 1584: 00000000000a1130 74 FUNC GLOBAL DEFAULT 13 snd_rawmidi_poll_descriptors_revents@@ALSA_0.9 + 1585: 0000000000041b40 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_get_interface@@ALSA_0.9 + 1586: 00000000000856e0 1468 FUNC GLOBAL DEFAULT 13 snd_pcm_lfloat_convert_float_integer@@ALSA_0.9 + 1587: 0000000000036f30 71 FUNC GLOBAL DEFAULT 13 snd_config_update@@ALSA_0.9 + 1588: 00000000002ff8dc 1 OBJECT GLOBAL DEFAULT 27 _snd_func_pcm_id_dlsym_config_evaluate_001@@ALSA_0.9 + 1589: 000000000009e7c0 42 FUNC GLOBAL DEFAULT 13 snd_timer_name@@ALSA_0.9 + 1590: 0000000000049bb0 138 FUNC GLOBAL DEFAULT 13 snd_mixer_detach@@ALSA_0.9 + 1591: 00000000000a78a0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_synth_voices@@ALSA_0.9 + 1592: 000000000009d150 56 FUNC GLOBAL DEFAULT 13 snd_pcm_ioplug_reinit_status@@ALSA_0.9 + 1593: 000000000003af40 9 FUNC GLOBAL DEFAULT 13 snd_dlopen@ALSA_0.9 + 1594: 000000000003adb0 389 FUNC GLOBAL DEFAULT 13 snd_dlopen@@ALSA_1.1.6 + 1595: 0000000000058f60 40 FUNC GLOBAL DEFAULT 13 snd_pcm_info_set_device@@ALSA_0.9 + 1596: 00000000000a8090 46 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_get_time_update@@ALSA_0.9 + 1597: 00000000000a8920 63 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_set_name@@ALSA_0.9 + 1598: 0000000000056ea0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_channels_first@@ALSA_0.9 + 1599: 0000000000056fb0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_first@@ALSA_0.9.0rc4 + 1600: 000000000005b240 85 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_rate_first@ALSA_0.9 + 1601: 00000000000a94a0 6 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_sizeof@@ALSA_0.9 + 1602: 0000000000031690 243 FUNC GLOBAL DEFAULT 13 snd_config_get_type_ascii@@ALSA_0.9 + 1603: 0000000000038dd0 775 FUNC GLOBAL DEFAULT 13 snd_func_pcm_id@@ALSA_0.9 + 1604: 0000000000053c10 27 FUNC GLOBAL DEFAULT 13 snd_pcm_format_name@@ALSA_0.9 + 1605: 00000000000a7b20 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_synth_voices@@ALSA_0.9 + 1606: 00000000000a78d0 44 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_port_specified@@ALSA_0.9 + 1607: 0000000000057cd0 3 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9 + 1608: 000000000003ac80 61 FUNC GLOBAL DEFAULT 13 snd_lib_error_set_handler@@ALSA_0.9 + 1609: 000000000009b310 105 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_set_param_list@@ALSA_0.9 + 1610: 000000000003a740 377 FUNC GLOBAL DEFAULT 13 snd_async_del_handler@@ALSA_0.9 + 1611: 000000000004c690 109 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_is_enum_capture@@ALSA_0.9 + 1612: 0000000000056880 6 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_sizeof@@ALSA_0.9 + 1613: 0000000000099d20 600 FUNC GLOBAL DEFAULT 13 snd_pcm_softvol_open@@ALSA_0.9 + 1614: 000000000004ba10 187 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_playback_switch_all@@ALSA_0.9 + 1615: 00000000002ff8e1 1 OBJECT GLOBAL DEFAULT 27 _snd_func_iadd_dlsym_config_evaluate_001@@ALSA_0.9 + 1616: 0000000000041710 85 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_device@@ALSA_0.9 + 1617: 00000000000a9320 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_tempo_set_skew_base@@ALSA_0.9 + 1618: 00000000002ff8f7 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_file_open_dlsym_pcm_001@@ALSA_0.9 + 1619: 00000000000542a0 100 FUNC GLOBAL DEFAULT 13 snd_pcm_dump@@ALSA_0.9 + 1620: 000000000003f460 196 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_info@@ALSA_0.9 + 1621: 00000000000413c0 111 FUNC GLOBAL DEFAULT 13 snd_ctl_open_fallback@@ALSA_0.9 + 1622: 00000000000324f0 46 FUNC GLOBAL DEFAULT 13 snd_config_iterator_end@@ALSA_0.9 + 1623: 0000000000057980 79 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9 + 1624: 000000000004bea0 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_capture_switch_joined@@ALSA_0.9 + 1625: 00000000000a6fd0 6 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_sizeof@@ALSA_0.9 + 1626: 00000000000aab20 129 FUNC GLOBAL DEFAULT 13 snd_seq_control_queue@@ALSA_0.9 + 1627: 00000000000b0de0 121 FUNC GLOBAL DEFAULT 13 snd_use_case_mgr_reset@@ALSA_0.9 + 1628: 00000000000a8670 44 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_set_root@@ALSA_0.9 + 1629: 00000000000a8f00 41 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_get_events@@ALSA_0.9 + 1630: 00000000000a9510 144 FUNC GLOBAL DEFAULT 13 snd_seq_queue_timer_copy@@ALSA_0.9 + 1631: 0000000000052810 241 FUNC GLOBAL DEFAULT 13 snd_pcm_htimestamp@@ALSA_0.9 + 1632: 00000000000566f0 31 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_reset@@ALSA_0.9 + 1633: 0000000000058130 51 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_start_mode@@ALSA_0.9 + 1634: 00000000000a8ed0 40 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_get_queue@@ALSA_0.9 + 1635: 000000000004bd80 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_capture_volume@@ALSA_0.9 + 1636: 00000000000a77b0 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_type@@ALSA_0.9 + 1637: 0000000000052400 177 FUNC GLOBAL DEFAULT 13 snd_pcm_status@@ALSA_0.9 + 1638: 0000000000042c20 69 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_malloc@@ALSA_0.9 + 1639: 0000000000064ab0 24 FUNC GLOBAL DEFAULT 13 snd_pcm_format_big_endian@@ALSA_0.9 + 1640: 0000000000039d20 10 FUNC GLOBAL DEFAULT 13 snd_input_ungetc@@ALSA_0.9 + 1641: 0000000000040340 73 FUNC GLOBAL DEFAULT 13 snd_ctl_poll_descriptors_count@@ALSA_0.9 + 1642: 0000000000039de0 105 FUNC GLOBAL DEFAULT 13 snd_input_stdio_open@@ALSA_0.9 + 1643: 0000000000052270 394 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params@@ALSA_0.9 + 1644: 0000000000056860 31 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_reset@@ALSA_0.9 + 1645: 000000000003eed0 4 FUNC GLOBAL DEFAULT 13 snd_hctl_get_count@@ALSA_0.9 + 1646: 0000000000052070 41 FUNC GLOBAL DEFAULT 13 snd_pcm_type@@ALSA_0.9 + 1647: 000000000005a850 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate@ALSA_0.9 + 1648: 0000000000056ec0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_rate@@ALSA_0.9.0rc4 + 1649: 000000000003a5a0 411 FUNC GLOBAL DEFAULT 13 snd_async_add_handler@@ALSA_0.9 + 1650: 000000000005b010 47 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_near@ALSA_0.9 + 1651: 00000000002ff8de 1 OBJECT GLOBAL DEFAULT 27 _snd_func_imul_dlsym_config_evaluate_001@@ALSA_0.9 + 1652: 00000000000575a0 87 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_period_size_near@@ALSA_0.9.0rc4 + 1653: 000000000003e860 45 FUNC GLOBAL DEFAULT 13 snd_hctl_poll_descriptors@@ALSA_0.9 + 1654: 000000000004b550 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_ask_playback_dB_vol@@ALSA_0.9 + 1655: 0000000000056610 80 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_copy@@ALSA_0.9 + 1656: 0000000000063590 42 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_fast_tstamp@@ALSA_0.9 + 1657: 0000000000053990 320 FUNC GLOBAL DEFAULT 13 snd_pcm_readi@@ALSA_0.9 + 1658: 00000000000a1660 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_free@@ALSA_0.9 + 1659: 0000000000054de0 86 FUNC GLOBAL DEFAULT 13 snd_pcm_wait@@ALSA_0.9 + 1660: 00000000002ff8ee 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_linear_open_dlsym_pcm_001@@ALSA_0.9 + 1661: 0000000000053ad0 320 FUNC GLOBAL DEFAULT 13 snd_pcm_readn@@ALSA_0.9 + 1662: 0000000000042f90 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_owner@@ALSA_0.9 + 1663: 00000000000a8280 59 FUNC GLOBAL DEFAULT 13 snd_seq_subscribe_port@@ALSA_0.9 + 1664: 00000000000a7870 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_midi_voices@@ALSA_0.9 + 1665: 0000000000058bb0 42 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_overrange@@ALSA_0.9 + 1666: 000000000005adf0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_size_max@ALSA_0.9 + 1667: 00000000000573c0 90 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_period_size_max@@ALSA_0.9.0rc4 + 1668: 00000000000a8400 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_client@@ALSA_0.9 + 1669: 00000000000a75d0 62 FUNC GLOBAL DEFAULT 13 snd_seq_query_next_client@@ALSA_0.9 + 1670: 00000000000abef0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_alias@@ALSA_0.9 + 1671: 00000000000a7810 41 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_write_use@@ALSA_0.9 + 1672: 000000000004bf00 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_capture_switch_exclusive@@ALSA_0.9 + 1673: 00000000002ff8ec 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_hw_open_dlsym_pcm_001@@ALSA_0.9 + 1674: 0000000000049f50 317 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_remove@@ALSA_0.9 + 1675: 0000000000043570 112 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_set_id@@ALSA_0.9 + 1676: 000000000003f530 196 FUNC GLOBAL DEFAULT 13 snd_hctl_elem_read@@ALSA_0.9 + 1677: 00000000000434b0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_device@@ALSA_0.9 + 1678: 0000000000043f20 90 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_byte@@ALSA_0.9 + 1679: 00000000000a84c0 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_index@@ALSA_0.9 + 1680: 0000000000038920 268 FUNC GLOBAL DEFAULT 13 snd_func_private_card_driver@@ALSA_0.9 + 1681: 000000000009eb50 42 FUNC GLOBAL DEFAULT 13 snd_timer_info_free@@ALSA_0.9 + 1682: 00000000000a0700 58 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_copy@@ALSA_0.9 + 1683: 00000000000a5ba0 971 FUNC GLOBAL DEFAULT 13 snd_seq_hw_open@@ALSA_0.9 + 1684: 00000000000a4b30 41 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_status_get_dsp_loaded@@ALSA_0.9 + 1685: 000000000003a210 34 FUNC GLOBAL DEFAULT 13 snd_output_close@@ALSA_0.9 + 1686: 00000000000408f0 207 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_add_boolean@@ALSA_0.9 + 1687: 00000000000418c0 212 FUNC GLOBAL DEFAULT 13 snd_async_add_ctl_handler@@ALSA_0.9 + 1688: 000000000004ad30 48 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_compare@@ALSA_0.9 + 1689: 000000000003b950 95 FUNC GLOBAL DEFAULT 13 snd_card_next@@ALSA_0.9 + 1690: 0000000000057930 79 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9.0rc4 + 1691: 000000000005ac60 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_size_min@ALSA_0.9 + 1692: 00000000002ff8e3 1 OBJECT GLOBAL DEFAULT 27 _snd_func_concat_dlsym_config_evaluate_001@@ALSA_0.9 + 1693: 0000000000083eb0 5 FUNC GLOBAL DEFAULT 13 snd_pcm_scope_get_callback_private@@ALSA_0.9 + 1694: 00000000000ab140 526 FUNC GLOBAL DEFAULT 13 snd_seq_parse_address@@ALSA_0.9 + 1695: 000000000003f0a0 956 FUNC GLOBAL DEFAULT 13 snd_hctl_handle_events@@ALSA_0.9 + 1696: 0000000000056fc0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_rate_last@@ALSA_0.9 + 1697: 00000000000aa5a0 214 FUNC GLOBAL DEFAULT 13 snd_seq_set_input_buffer_size@@ALSA_0.9 + 1698: 00000000002ff8fb 1 OBJECT GLOBAL DEFAULT 27 __snd_pcm_meter_open_dlsym_pcm_001@@ALSA_0.9 + 1699: 00000000000a4df0 42 FUNC GLOBAL DEFAULT 13 snd_hwdep_dsp_image_set_length@@ALSA_0.9 + 1700: 0000000000057790 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_periods_near@@ALSA_0.9 + 1701: 00000000000a98a0 72 FUNC GLOBAL DEFAULT 13 snd_seq_event_length@@ALSA_0.9 + 1702: 0000000000057ca0 3 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_tick_time_min@@ALSA_0.9 + 1703: 0000000000040390 102 FUNC GLOBAL DEFAULT 13 snd_ctl_poll_descriptors@@ALSA_0.9 + 1704: 000000000009f0f0 6 FUNC GLOBAL DEFAULT 13 snd_timer_status_sizeof@@ALSA_0.9 + 1705: 000000000003e6c0 109 FUNC GLOBAL DEFAULT 13 snd_hctl_open_ctl@@ALSA_0.9 + 1706: 0000000000049490 12 FUNC GLOBAL DEFAULT 13 snd_ctl_ext_delete@@ALSA_0.9 + 1707: 000000000004c290 144 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_volume@@ALSA_0.9 + 1708: 00000000000aa900 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_set_output_room@@ALSA_0.9 + 1709: 0000000000056710 6 FUNC GLOBAL DEFAULT 13 snd_pcm_subformat_mask_sizeof@@ALSA_0.9 + 1710: 00000000000aa180 45 FUNC GLOBAL DEFAULT 13 snd_seq_remove_events_set_dest@@ALSA_0.9 + 1711: 00000000000b2b00 87 FUNC GLOBAL DEFAULT 13 snd_tplg_set_manifest_data@@ALSA_0.9 + 1712: 000000000004b5d0 136 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_playback_volume@@ALSA_0.9 + 1713: 0000000000057860 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_time_max@@ALSA_0.9 + 1714: 00000000000a8de0 69 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_malloc@@ALSA_0.9 + 1715: 00000000000572d0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_period_time_near@@ALSA_0.9 + 1716: 0000000000064a30 19 FUNC GLOBAL DEFAULT 13 snd_pcm_format_linear@@ALSA_0.9 + 1717: 0000000000053d40 22 FUNC GLOBAL DEFAULT 13 snd_pcm_start_mode_name@@ALSA_0.9 + 1718: 00000000000577a0 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_set_periods_first@@ALSA_0.9 + 1719: 00000000000a41d0 147 FUNC GLOBAL DEFAULT 13 snd_hwdep_open@@ALSA_0.9 + 1720: 00000000000a46e0 40 FUNC GLOBAL DEFAULT 13 snd_hwdep_info_set_device@@ALSA_0.9 + 1721: 00000000000a8ad0 7 FUNC GLOBAL DEFAULT 13 snd_seq_alloc_queue@@ALSA_0.9 + 1722: 00000000000a0a80 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_get_sclass@@ALSA_0.9 + 1723: 00000000000a8f60 42 FUNC GLOBAL DEFAULT 13 snd_seq_queue_status_get_real_time@@ALSA_0.9 + 1724: 000000000004c800 120 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_enum_item@@ALSA_0.9 + 1725: 00000000000323f0 57 FUNC GLOBAL DEFAULT 13 snd_config_ref@@ALSA_0.9 + 1726: 000000000003e970 70 FUNC GLOBAL DEFAULT 13 snd_hctl_set_compare@@ALSA_0.9 + 1727: 0000000000056b10 58 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_copy@@ALSA_0.9 + 1728: 00000000000aa690 69 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_malloc@@ALSA_0.9 + 1729: 0000000000033d00 108 FUNC GLOBAL DEFAULT 13 snd_config_update_free_global@@ALSA_0.9 + 1730: 00000000000414b0 44 FUNC GLOBAL DEFAULT 13 snd_ctl_event_type_name@@ALSA_0.9 + 1731: 000000000009e870 43 FUNC GLOBAL DEFAULT 13 snd_timer_poll_descriptors_count@@ALSA_0.9 + 1732: 00000000000a7570 11 FUNC GLOBAL DEFAULT 13 snd_seq_get_client_info@@ALSA_0.9 + 1733: 0000000000058510 10 FUNC GLOBAL DEFAULT 13 __snd_pcm_sw_params_get_xfer_align@@ALSA_0.9 + 1734: 000000000005bc40 27 FUNC GLOBAL DEFAULT 13 snd_pcm_chmap_long_name@@ALSA_0.9 + 1735: 000000000004a750 67 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_next@@ALSA_0.9 + 1736: 0000000000032db0 231 FUNC GLOBAL DEFAULT 13 snd_config_add@@ALSA_0.9 + 1737: 000000000003e7a0 45 FUNC GLOBAL DEFAULT 13 snd_hctl_name@@ALSA_0.9 + 1738: 00000000000a9e80 56 FUNC GLOBAL DEFAULT 13 snd_seq_drop_input_buffer@@ALSA_0.9 + 1739: 000000000009b1a0 9 FUNC GLOBAL DEFAULT 13 snd_pcm_extplug_delete@@ALSA_0.9 + 1740: 00000000000a85b0 46 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_time_update@@ALSA_0.9 + 1741: 0000000000043ac0 41 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_value_set_interface@@ALSA_0.9 + 1742: 0000000000052a70 222 FUNC GLOBAL DEFAULT 13 snd_pcm_reset@@ALSA_0.9 + 1743: 00000000000aa7e0 42 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_get_input_pool@@ALSA_0.9 + 1744: 0000000000042ff0 86 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_min@@ALSA_0.9 + 1745: 0000000000042c80 135 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_clear@@ALSA_0.9 + 1746: 000000000004afb0 95 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_has_common_switch@@ALSA_0.9 + 1747: 00000000000abee0 2 FUNC GLOBAL DEFAULT 13 snd_instr_header_set_format@@ALSA_0.9 + 1748: 00000000000520a0 41 FUNC GLOBAL DEFAULT 13 snd_pcm_stream@@ALSA_0.9 + 1749: 00000000000536f0 27 FUNC GLOBAL DEFAULT 13 snd_pcm_access_name@@ALSA_0.9 + 1750: 00000000000a8060 44 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_get_exclusive@@ALSA_0.9 + 1751: 00000000000424e0 42 FUNC GLOBAL DEFAULT 13 snd_ctl_card_info_get_longname@@ALSA_0.9 + 1752: 0000000000083b90 75 FUNC GLOBAL DEFAULT 13 snd_pcm_meter_add_scope@@ALSA_0.9 + 1753: 00000000000a14b0 44 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_get_subdevices_count@@ALSA_0.9 + 1754: 00000000000a07e0 7 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_clients@@ALSA_0.9 + 1755: 000000000004ae90 89 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_get_name@@ALSA_0.9 + 1756: 0000000000040ed0 62 FUNC GLOBAL DEFAULT 13 snd_ctl_pcm_next_device@@ALSA_0.9 + 1757: 0000000000037c10 213 FUNC GLOBAL DEFAULT 13 snd_config_get_bool@@ALSA_0.9 + 1758: 0000000000040ba0 71 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_remove@@ALSA_0.9 + 1759: 000000000004ac20 44 FUNC GLOBAL DEFAULT 13 snd_mixer_class_set_compare@@ALSA_0.9 + 1760: 00000000000abfc0 3 FUNC GLOBAL DEFAULT 13 snd_instr_simple_free@@ALSA_0.9 + 1761: 0000000000064ae0 25 FUNC GLOBAL DEFAULT 13 snd_pcm_format_width@@ALSA_0.9 + 1762: 000000000005b410 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_first@ALSA_0.9 + 1763: 0000000000057bb0 80 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9.0rc4 + 1764: 00000000002ff8e4 1 OBJECT GLOBAL DEFAULT 27 _snd_func_card_driver_dlsym_config_evaluate_001@@ALSA_0.9 + 1765: 0000000000031790 4 FUNC GLOBAL DEFAULT 13 snd_config_get_type@@ALSA_0.9 + 1766: 0000000000058600 125 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_set_silence_threshold@@ALSA_0.9 + 1767: 0000000000046fe0 1393 FUNC GLOBAL DEFAULT 13 snd_ctl_ascii_value_parse@@ALSA_0.9 + 1768: 00000000000a7210 53 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_get_event_filter@@ALSA_0.9 + 1769: 00000000000a9460 64 FUNC GLOBAL DEFAULT 13 snd_seq_set_queue_tempo@@ALSA_0.9 + 1770: 00000000000aa470 174 FUNC GLOBAL DEFAULT 13 snd_seq_set_output_buffer_size@@ALSA_0.9 + 1771: 0000000000084e30 42 FUNC GLOBAL DEFAULT 13 snd_pcm_hook_set_private@@ALSA_0.9 + 1772: 00000000000a1280 42 FUNC GLOBAL DEFAULT 13 snd_rawmidi_info_free@@ALSA_0.9 + 1773: 0000000000056d30 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_subformat@@ALSA_0.9 + 1774: 00000000000412d0 147 FUNC GLOBAL DEFAULT 13 snd_ctl_open@@ALSA_0.9 + 1775: 0000000000065030 231 FUNC GLOBAL DEFAULT 13 snd_pcm_build_linear_format@@ALSA_0.9 + 1776: 0000000000056dd0 15 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_channels_max@@ALSA_0.9 + 1777: 0000000000056d00 15 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_subformat@@ALSA_0.9 + 1778: 00000000000a76f0 42 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_port@@ALSA_0.9 + 1779: 00000000000aaf90 88 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_pool_output_room@@ALSA_0.9 + 1780: 0000000000055e30 115 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_can_overrange@@ALSA_0.9 + 1781: 0000000000041550 85 FUNC GLOBAL DEFAULT 13 snd_ctl_event_elem_get_mask@@ALSA_0.9 + 1782: 0000000000064e00 53 FUNC GLOBAL DEFAULT 13 snd_pcm_format_silence@@ALSA_0.9 + 1783: 00000000000a8c10 144 FUNC GLOBAL DEFAULT 13 snd_seq_query_named_queue@@ALSA_0.9 + 1784: 00000000000a21d0 118 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params_current@@ALSA_0.9 + 1785: 00000000000406a0 129 FUNC GLOBAL DEFAULT 13 snd_ctl_add_boolean_elem_set@@ALSA_0.9 + 1786: 0000000000052a20 65 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params@@ALSA_0.9 + 1787: 00000000000aa780 40 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_get_client@@ALSA_0.9 + 1788: 0000000000041bd0 42 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_get_name@@ALSA_0.9 + 1789: 000000000003a340 173 FUNC GLOBAL DEFAULT 13 snd_output_stdio_attach@@ALSA_0.9 + 1790: 00000000000a07f0 90 FUNC GLOBAL DEFAULT 13 snd_timer_query_info@@ALSA_0.9.0 + 1791: 000000000003a240 179 FUNC GLOBAL DEFAULT 13 snd_output_printf@@ALSA_0.9 + 1792: 000000000003a920 42 FUNC GLOBAL DEFAULT 13 snd_async_handler_get_callback_private@@ALSA_0.9 + 1793: 0000000000058010 5 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_free@@ALSA_0.9 + 1794: 0000000000054510 67 FUNC GLOBAL DEFAULT 13 snd_async_handler_get_pcm@@ALSA_0.9 + 1795: 00000000000a6ac0 154 FUNC GLOBAL DEFAULT 13 snd_seq_poll_descriptors_count@@ALSA_0.9 + 1796: 000000000005ae90 73 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_time_max@ALSA_0.9 + 1797: 0000000000045930 250 FUNC GLOBAL DEFAULT 13 snd_sctl_remove@@ALSA_0.9 + 1798: 0000000000052f20 275 FUNC GLOBAL DEFAULT 13 snd_pcm_rewindable@@ALSA_0.9 + 1799: 0000000000043450 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_info_get_numid@@ALSA_0.9 + 1800: 00000000000609f0 415 FUNC GLOBAL DEFAULT 13 snd_spcm_init@@ALSA_0.9 + 1801: 00000000000577f0 16 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9.0rc4 + 1802: 000000000005b8d0 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_sleep_min@ALSA_0.9 + 1803: 00000000000583e0 9 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_sleep_min@@ALSA_0.9.0rc4 + 1804: 00000000000a8740 6 FUNC GLOBAL DEFAULT 13 snd_seq_queue_info_sizeof@@ALSA_0.9 + 1805: 0000000000056690 29 FUNC GLOBAL DEFAULT 13 snd_pcm_format_mask_test@@ALSA_0.9 + 1806: 000000000004c320 152 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_set_capture_dB@@ALSA_0.9 + 1807: 000000000004ab60 42 FUNC GLOBAL DEFAULT 13 snd_mixer_class_get_compare@@ALSA_0.9 + 1808: 0000000000057800 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_buffer_time@@ALSA_0.9 + 1809: 00000000000a0790 5 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_id@@ALSA_0.9 + 1810: 0000000000057420 21 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_test_period_size@@ALSA_0.9 + 1811: 000000000004ca10 41 FUNC GLOBAL DEFAULT 13 snd_mixer_selem_id_get_index@@ALSA_0.9 + 1812: 00000000000aa8d0 41 FUNC GLOBAL DEFAULT 13 snd_seq_client_pool_set_input_pool@@ALSA_0.9 + 1813: 00000000000419b0 69 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_id_malloc@@ALSA_0.9 + 1814: 00000000000a7040 115 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_copy@@ALSA_0.9 + 1815: 0000000000084dc0 42 FUNC GLOBAL DEFAULT 13 snd_pcm_hook_get_private@@ALSA_0.9 + 1816: 00000000000a9880 15 FUNC GLOBAL DEFAULT 13 snd_seq_create_event@@ALSA_0.9 + 1817: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ALSA_1.1.6 + 1818: 0000000000040730 311 FUNC GLOBAL DEFAULT 13 snd_ctl_add_enumerated_elem_set@@ALSA_0.9 + 1819: 00000000000499a0 63 FUNC GLOBAL DEFAULT 13 snd_mixer_elem_attach@@ALSA_0.9 + 1820: 0000000000041c60 402 FUNC GLOBAL DEFAULT 13 snd_ctl_add_integer_elem_set@@ALSA_0.9 + 1821: 0000000000056d70 18 FUNC GLOBAL DEFAULT 13 snd_pcm_hw_params_set_subformat_mask@@ALSA_0.9 + 1822: 00000000000428a0 40 FUNC GLOBAL DEFAULT 13 snd_ctl_elem_list_set_offset@@ALSA_0.9 + 1823: 0000000000053dc0 27 FUNC GLOBAL DEFAULT 13 snd_pcm_state_name@@ALSA_0.9 + 1824: 0000000000058680 59 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9.0rc4 + 1825: 0000000000068a20 457 FUNC GLOBAL DEFAULT 13 _snd_pcm_copy_open@@ALSA_0.9 + 1826: 000000000005ba60 73 FUNC GLOBAL DEFAULT 13 snd_pcm_sw_params_get_silence_threshold@ALSA_0.9 + 1827: 0000000000057200 16 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_period_time_min@@ALSA_0.9 + 1828: 00000000000aaae0 50 FUNC GLOBAL DEFAULT 13 snd_seq_client_info_event_filter_check@@ALSA_0.9 + 1829: 00000000000a0770 4 FUNC GLOBAL DEFAULT 13 snd_timer_ginfo_get_flags@@ALSA_0.9 + 1830: 00000000000aaec0 106 FUNC GLOBAL DEFAULT 13 snd_seq_set_client_event_filter@@ALSA_0.9 + 1831: 00000000000a7f40 5 FUNC GLOBAL DEFAULT 13 snd_seq_port_subscribe_free@@ALSA_0.9 + 1832: 0000000000044b70 571 FUNC GLOBAL DEFAULT 13 snd_ctl_hw_open@@ALSA_0.9 + 1833: 00000000000a7900 46 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_get_timestamping@@ALSA_0.9 + 1834: 0000000000058b50 42 FUNC GLOBAL DEFAULT 13 snd_pcm_status_get_avail@@ALSA_0.9 + 1835: 00000000000a1890 139 FUNC GLOBAL DEFAULT 13 snd_rawmidi_params@@ALSA_0.9 + 1836: 00000000000a0ba0 41 FUNC GLOBAL DEFAULT 13 snd_timer_id_get_subdevice@@ALSA_0.9 + 1837: 00000000000a84f0 41 FUNC GLOBAL DEFAULT 13 snd_seq_query_subscribe_get_num_subs@@ALSA_0.9 + 1838: 0000000000056c50 15 FUNC GLOBAL DEFAULT 13 __snd_pcm_hw_params_get_format@@ALSA_0.9 + 1839: 0000000000041f00 402 FUNC GLOBAL DEFAULT 13 snd_ctl_add_integer64_elem_set@@ALSA_0.9 + 1840: 00000000000a5090 474 FUNC GLOBAL DEFAULT 13 snd_hwdep_hw_open@@ALSA_0.9 + 1841: 00000000000a9d90 185 FUNC GLOBAL DEFAULT 13 snd_seq_event_input_pending@@ALSA_0.9 + 1842: 00000000000396a0 882 FUNC GLOBAL DEFAULT 13 snd_func_refer@@ALSA_0.9 + 1843: 00000000000a7b90 53 FUNC GLOBAL DEFAULT 13 snd_seq_port_info_set_timestamping@@ALSA_0.9 + 1844: 0000000000049a70 220 FUNC GLOBAL DEFAULT 13 snd_mixer_attach_hctl@@ALSA_0.9 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatk-1.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatk-1.0.so.0.txt new file mode 100644 index 000000000000..33ceda62aeab --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatk-1.0.so.0.txt @@ -0,0 +1,419 @@ +Library: /lib64/libatk-1.0.so.0 +Package: atk-2.28.1-2.el7.x86_64 + + +Symbol table '.dynsym' contains 413 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_new + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_property + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_append + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_remove_emission_hook + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_peek_pointer + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_unset + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_free_instance + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_get_nth + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_free + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sized_new + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_array_new + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boxed + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bindtextdomain@GLIBC_2.2.5 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.2.5 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_string + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_double + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_int + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__POINTER + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__BOOLEAN + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strlen + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_add_prerequisite + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_remove_index + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__VOID + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_enum + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_sized_new + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_boolean + 58: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_enum + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_from_name + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__BOXED + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_string + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_length + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_string + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_add_emission_hook + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boolean + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_int_hash + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__UINT_POINTER + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind_textdomain_codeset@GLIBC_2.2.5 (2) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_install_property + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_unref + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_enum + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_object + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.2.5 (2) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_fundamentally_a + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_int_equal + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dgettext + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 100: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_notify + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_lookup + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_object + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__INT + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 112: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_interface_static + 117: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_is_a + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_create_instance + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_value_array + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_parent + 122: 000000000000ff20 207 FUNC GLOBAL DEFAULT 11 atk_role_for_name + 123: 000000000000ef80 103 FUNC GLOBAL DEFAULT 11 atk_object_get_n_accessible_children + 124: 0000000000017360 6 FUNC GLOBAL DEFAULT 11 atk_get_micro_version + 125: 000000000000b820 135 FUNC GLOBAL DEFAULT 11 atk_component_remove_focus_handler + 126: 00000000000118b0 147 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_relation_by_type + 127: 0000000000011e80 118 FUNC GLOBAL DEFAULT 11 atk_selection_add_selection + 128: 0000000000015b30 192 FUNC GLOBAL DEFAULT 11 atk_text_get_bounded_ranges + 129: 000000000000ee10 103 FUNC GLOBAL DEFAULT 11 atk_object_get_name + 130: 0000000000014030 133 FUNC GLOBAL DEFAULT 11 atk_table_set_row_description + 131: 000000000000dab0 58 FUNC GLOBAL DEFAULT 11 atk_image_get_type + 132: 0000000000013720 118 FUNC GLOBAL DEFAULT 11 atk_table_get_column_header + 133: 000000000000dd90 103 FUNC GLOBAL DEFAULT 11 atk_image_get_image_locale + 134: 000000000000f680 166 FUNC GLOBAL DEFAULT 11 atk_object_set_name + 135: 0000000000017350 6 FUNC GLOBAL DEFAULT 11 atk_get_minor_version + 136: 000000000000db60 206 FUNC GLOBAL DEFAULT 11 atk_image_get_image_size + 137: 0000000000013910 118 FUNC GLOBAL DEFAULT 11 atk_table_get_row_header + 138: 00000000000127d0 124 FUNC GLOBAL DEFAULT 11 atk_state_set_add_state + 139: 0000000000014db0 236 FUNC GLOBAL DEFAULT 11 atk_text_get_string_at_offset + 140: 0000000000012850 141 FUNC GLOBAL DEFAULT 11 atk_state_set_add_states + 141: 0000000000015cc0 188 FUNC GLOBAL DEFAULT 11 atk_text_attribute_get_name + 142: 000000000000b6c0 119 FUNC GLOBAL DEFAULT 11 atk_action_set_description + 143: 0000000000012380 76 FUNC GLOBAL DEFAULT 11 atk_socket_new + 144: 0000000000012060 118 FUNC GLOBAL DEFAULT 11 atk_selection_is_child_selected + 145: 000000000000da20 130 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_link_index + 146: 0000000000017040 103 FUNC GLOBAL DEFAULT 11 atk_value_get_range + 147: 000000000000f550 111 FUNC GLOBAL DEFAULT 11 atk_object_get_mdi_zorder + 148: 0000000000012750 25 FUNC GLOBAL DEFAULT 11 atk_state_set_new + 149: 0000000000014300 103 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_column_header_cells + 150: 0000000000016820 73 FUNC GLOBAL DEFAULT 11 atk_add_key_event_listener + 151: 0000000000013c80 121 FUNC GLOBAL DEFAULT 11 atk_table_add_row_selection + 152: 0000000000013890 119 FUNC GLOBAL DEFAULT 11 atk_table_get_row_extent_at + 153: 000000000000cde0 245 FUNC GLOBAL DEFAULT 11 atk_gobject_accessible_for_object + 154: 000000000000b360 105 FUNC GLOBAL DEFAULT 11 atk_action_get_type + 155: 0000000000012770 84 FUNC GLOBAL DEFAULT 11 atk_state_set_is_empty + 156: 0000000000013440 126 FUNC GLOBAL DEFAULT 11 atk_table_get_row_at_index + 157: 000000000000dc30 119 FUNC GLOBAL DEFAULT 11 atk_image_set_image_description + 158: 00000000000168f0 8 FUNC GLOBAL DEFAULT 11 atk_get_focus_object + 159: 0000000000225be8 0 NOTYPE GLOBAL DEFAULT 24 _end + 160: 0000000000016870 42 FUNC GLOBAL DEFAULT 11 atk_remove_key_event_listener + 161: 00000000000123d0 190 FUNC GLOBAL DEFAULT 11 atk_socket_embed + 162: 000000000000b760 58 FUNC GLOBAL DEFAULT 11 atk_component_get_type + 163: 0000000000016d40 209 FUNC GLOBAL DEFAULT 11 atk_value_get_minimum_value + 164: 0000000000010580 76 FUNC GLOBAL DEFAULT 11 atk_plug_new + 165: 0000000000017c20 98 FUNC GLOBAL DEFAULT 11 atk_key_event_type_get_type + 166: 00000000000110b0 188 FUNC GLOBAL DEFAULT 11 atk_relation_type_get_name + 167: 000000000000b3d0 118 FUNC GLOBAL DEFAULT 11 atk_action_do_action + 168: 0000000000017370 6 FUNC GLOBAL DEFAULT 11 atk_get_binary_age + 169: 000000000000caf0 133 FUNC GLOBAL DEFAULT 11 atk_editable_text_cut_text + 170: 000000000000ca60 133 FUNC GLOBAL DEFAULT 11 atk_editable_text_copy_text + 171: 000000000000d870 58 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_type + 172: 0000000000011b50 269 FUNC GLOBAL DEFAULT 11 atk_relation_set_add_relation_by_type + 173: 00000000000136a0 119 FUNC GLOBAL DEFAULT 11 atk_table_get_column_extent_at + 174: 0000000000010870 46 FUNC GLOBAL DEFAULT 11 atk_range_get_description + 175: 0000000000014bf0 217 FUNC GLOBAL DEFAULT 11 atk_text_get_text_at_offset + 176: 00000000000141f0 152 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_type + 177: 00000000000129a0 151 FUNC GLOBAL DEFAULT 11 atk_state_set_contains_states + 178: 000000000000edd0 58 FUNC GLOBAL DEFAULT 11 atk_implementor_get_type + 179: 000000000000c660 119 FUNC GLOBAL DEFAULT 11 atk_document_get_attribute_value + 180: 00000000000105d0 108 FUNC GLOBAL DEFAULT 11 atk_plug_get_id + 181: 00000000000124f0 89 FUNC GLOBAL DEFAULT 11 atk_state_type_register + 182: 0000000000016e20 209 FUNC GLOBAL DEFAULT 11 atk_value_get_minimum_increment + 183: 0000000000014370 204 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_position + 184: 0000000000011c60 301 FUNC GLOBAL DEFAULT 11 atk_relation_set_contains_target + 185: 0000000000013d80 121 FUNC GLOBAL DEFAULT 11 atk_table_add_column_selection + 186: 0000000000013fa0 133 FUNC GLOBAL DEFAULT 11 atk_table_set_column_header + 187: 0000000000016b80 209 FUNC GLOBAL DEFAULT 11 atk_value_get_current_value + 188: 0000000000011400 78 FUNC GLOBAL DEFAULT 11 atk_relation_get_target + 189: 000000000000b450 103 FUNC GLOBAL DEFAULT 11 atk_action_get_n_actions + 190: 000000000000cb80 133 FUNC GLOBAL DEFAULT 11 atk_editable_text_delete_text + 191: 000000000000eff0 104 FUNC GLOBAL DEFAULT 11 atk_object_ref_accessible_child + 192: 000000000000c000 103 FUNC GLOBAL DEFAULT 11 atk_component_grab_focus + 193: 0000000000017310 36 FUNC GLOBAL DEFAULT 11 atk_value_type_get_localized_name + 194: 000000000000bf70 130 FUNC GLOBAL DEFAULT 11 atk_component_get_alpha + 195: 0000000000013f10 133 FUNC GLOBAL DEFAULT 11 atk_table_set_column_description + 196: 000000000000d340 104 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_uri + 197: 00000000000167e0 50 FUNC GLOBAL DEFAULT 11 atk_remove_global_event_listener + 198: 0000000000015440 201 FUNC GLOBAL DEFAULT 11 atk_text_get_selection + 199: 0000000000225680 0 NOTYPE GLOBAL DEFAULT 23 _edata + 200: 0000000000011450 231 FUNC GLOBAL DEFAULT 11 atk_relation_add_target + 201: 000000000000bcd0 193 FUNC GLOBAL DEFAULT 11 atk_component_get_position + 202: 0000000000017910 98 FUNC GLOBAL DEFAULT 11 atk_layer_get_type + 203: 00000000000179f0 98 FUNC GLOBAL DEFAULT 11 atk_state_type_get_type + 204: 000000000000d5e0 103 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_n_anchors + 205: 0000000000016570 24 FUNC GLOBAL DEFAULT 11 atk_focus_tracker_init + 206: 000000000000c230 58 FUNC GLOBAL DEFAULT 11 atk_rectangle_get_type + 207: 0000000000013d00 121 FUNC GLOBAL DEFAULT 11 atk_table_remove_row_selection + 208: 0000000000017230 214 FUNC GLOBAL DEFAULT 11 atk_value_type_get_name + 209: 00000000000125f0 264 FUNC GLOBAL DEFAULT 11 atk_state_type_for_name + 210: 000000000000cee0 115 FUNC GLOBAL DEFAULT 11 atk_gobject_accessible_get_object + 211: 0000000000010390 78 FUNC GLOBAL DEFAULT 11 atk_object_factory_invalidate + 212: 000000000000fff0 273 FUNC GLOBAL DEFAULT 11 atk_object_add_relationship + 213: 0000000000014cd0 209 FUNC GLOBAL DEFAULT 11 atk_text_get_text_before_offset + 214: 000000000000c7d0 110 FUNC GLOBAL DEFAULT 11 atk_document_get_page_count + 215: 0000000000010230 179 FUNC GLOBAL DEFAULT 11 atk_object_factory_get_type + 216: 000000000000fc20 130 FUNC GLOBAL DEFAULT 11 atk_object_notify_state_change + 217: 000000000000f630 76 FUNC GLOBAL DEFAULT 11 atk_object_get_index_in_parent + 218: 0000000000017380 6 FUNC GLOBAL DEFAULT 11 atk_get_interface_age + 219: 00000000000171a0 134 FUNC GLOBAL DEFAULT 11 atk_value_set_value + 220: 000000000000b4c0 118 FUNC GLOBAL DEFAULT 11 atk_action_get_description + 221: 0000000000013540 103 FUNC GLOBAL DEFAULT 11 atk_table_get_caption + 222: 000000000000cc10 135 FUNC GLOBAL DEFAULT 11 atk_editable_text_paste_text + 223: 0000000000016fb0 133 FUNC GLOBAL DEFAULT 11 atk_value_get_value_and_text + 224: 0000000000014290 103 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_column_span + 225: 00000000000108e0 58 FUNC GLOBAL DEFAULT 11 atk_registry_get_type + 226: 000000000000fe30 70 FUNC GLOBAL DEFAULT 11 atk_role_get_name + 227: 0000000000017bb0 98 FUNC GLOBAL DEFAULT 11 atk_text_clip_type_get_type + 228: 0000000000016c60 209 FUNC GLOBAL DEFAULT 11 atk_value_get_maximum_value + 229: 0000000000013c00 122 FUNC GLOBAL DEFAULT 11 atk_table_is_selected + 230: 0000000000017b40 98 FUNC GLOBAL DEFAULT 11 atk_text_granularity_get_type + 231: 000000000000d3b0 104 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_object + 232: 000000000000c9b0 163 FUNC GLOBAL DEFAULT 11 atk_editable_text_insert_text + 233: 0000000000017390 152 FUNC GLOBAL DEFAULT 11 atk_window_get_type + 234: 000000000000d7e0 137 FUNC GLOBAL DEFAULT 11 atk_hyperlink_impl_get_hyperlink + 235: 0000000000015730 209 FUNC GLOBAL DEFAULT 11 atk_text_get_range_extents + 236: 0000000000011710 164 FUNC GLOBAL DEFAULT 11 atk_relation_set_contains + 237: 000000000000fcb0 137 FUNC GLOBAL DEFAULT 11 atk_implementor_ref_accessible + 238: 000000000000feb0 103 FUNC GLOBAL DEFAULT 11 atk_object_get_object_locale + 239: 00000000000103e0 73 FUNC GLOBAL DEFAULT 11 atk_object_factory_get_accessible_type + 240: 000000000000be80 116 FUNC GLOBAL DEFAULT 11 atk_component_get_layer + 241: 000000000000f730 166 FUNC GLOBAL DEFAULT 11 atk_object_set_description + 242: 000000000000d9b0 103 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_n_links + 243: 0000000000014a90 118 FUNC GLOBAL DEFAULT 11 atk_text_get_character_at_offset + 244: 0000000000015ee0 717 FUNC GLOBAL DEFAULT 11 atk_text_attribute_get_value + 245: 0000000000016f00 166 FUNC GLOBAL DEFAULT 11 atk_value_set_current_value + 246: 000000000000e0a0 61 FUNC GLOBAL DEFAULT 11 atk_no_op_object_factory_get_type + 247: 00000000000128e0 74 FUNC GLOBAL DEFAULT 11 atk_state_set_clear_states + 248: 0000000000011f00 103 FUNC GLOBAL DEFAULT 11 atk_selection_clear_selection + 249: 0000000000011950 235 FUNC GLOBAL DEFAULT 11 atk_relation_set_remove + 250: 000000000000f150 111 FUNC GLOBAL DEFAULT 11 atk_object_get_role + 251: 0000000000017340 6 FUNC GLOBAL DEFAULT 11 atk_get_major_version + 252: 000000000000daf0 103 FUNC GLOBAL DEFAULT 11 atk_image_get_image_description + 253: 000000000000fb10 140 FUNC GLOBAL DEFAULT 11 atk_object_connect_property_change_handler + 254: 0000000000017130 103 FUNC GLOBAL DEFAULT 11 atk_value_get_sub_ranges + 255: 000000000000f870 195 FUNC GLOBAL DEFAULT 11 atk_object_set_role + 256: 000000000000cd30 61 FUNC GLOBAL DEFAULT 11 atk_gobject_accessible_get_type + 257: 0000000000014f10 307 FUNC GLOBAL DEFAULT 11 atk_text_get_character_extents + 258: 000000000000f5c0 103 FUNC GLOBAL DEFAULT 11 atk_object_ref_state_set + 259: 00000000000120e0 118 FUNC GLOBAL DEFAULT 11 atk_selection_remove_selection + 260: 0000000000016900 68 FUNC GLOBAL DEFAULT 11 atk_get_toolkit_name + 261: 0000000000012b90 192 FUNC GLOBAL DEFAULT 11 atk_state_set_or_sets + 262: 000000000000b540 118 FUNC GLOBAL DEFAULT 11 atk_action_get_name + 263: 0000000000017c90 98 FUNC GLOBAL DEFAULT 11 atk_coord_type_get_type + 264: 000000000000bda0 215 FUNC GLOBAL DEFAULT 11 atk_component_get_size + 265: 000000000000f7e0 141 FUNC GLOBAL DEFAULT 11 atk_object_set_parent + 266: 0000000000010780 80 FUNC GLOBAL DEFAULT 11 atk_range_new + 267: 000000000000c1b0 119 FUNC GLOBAL DEFAULT 11 atk_component_set_size + 268: 000000000000b5c0 118 FUNC GLOBAL DEFAULT 11 atk_action_get_localized_name + 269: 000000000000c6e0 120 FUNC GLOBAL DEFAULT 11 atk_document_set_attribute_value + 270: 000000000000f060 103 FUNC GLOBAL DEFAULT 11 atk_object_ref_relation_set + 271: 000000000000c070 170 FUNC GLOBAL DEFAULT 11 atk_component_set_extents + 272: 0000000000017d64 0 FUNC GLOBAL DEFAULT 12 _fini + 273: 000000000000c510 103 FUNC GLOBAL DEFAULT 11 atk_document_get_document + 274: 00000000000153d0 111 FUNC GLOBAL DEFAULT 11 atk_text_get_n_selections + 275: 00000000000132b0 183 FUNC GLOBAL DEFAULT 11 atk_table_ref_at + 276: 0000000000011ff0 103 FUNC GLOBAL DEFAULT 11 atk_selection_get_selection_count + 277: 000000000000b7a0 119 FUNC GLOBAL DEFAULT 11 atk_component_add_focus_handler + 278: 0000000000014150 135 FUNC GLOBAL DEFAULT 11 atk_table_set_summary + 279: 0000000000016210 105 FUNC GLOBAL DEFAULT 11 atk_text_range_get_type + 280: 000000000000eef0 103 FUNC GLOBAL DEFAULT 11 atk_object_get_parent + 281: 0000000000014780 58 FUNC GLOBAL DEFAULT 11 atk_text_get_type + 282: 000000000000d930 122 FUNC GLOBAL DEFAULT 11 atk_hypertext_get_link + 283: 0000000000010a40 61 FUNC GLOBAL DEFAULT 11 atk_registry_get_factory_type + 284: 00000000000115e0 58 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_type + 285: 0000000000011540 95 FUNC GLOBAL DEFAULT 11 atk_relation_remove_target + 286: 0000000000015c40 120 FUNC GLOBAL DEFAULT 11 atk_text_attribute_register + 287: 0000000000015340 144 FUNC GLOBAL DEFAULT 11 atk_text_get_offset_at_point + 288: 000000000000a580 0 FUNC GLOBAL DEFAULT 9 _init + 289: 000000000000b640 118 FUNC GLOBAL DEFAULT 11 atk_action_get_keybinding + 290: 0000000000010970 199 FUNC GLOBAL DEFAULT 11 atk_registry_set_factory_type + 291: 000000000000dcb0 214 FUNC GLOBAL DEFAULT 11 atk_image_get_image_position + 292: 0000000000013b80 121 FUNC GLOBAL DEFAULT 11 atk_table_is_row_selected + 293: 0000000000016a80 117 FUNC GLOBAL DEFAULT 11 atk_value_get_type + 294: 0000000000016530 58 FUNC GLOBAL DEFAULT 11 atk_util_get_type + 295: 00000000000102f0 156 FUNC GLOBAL DEFAULT 11 atk_object_factory_create_accessible + 296: 0000000000014ea0 103 FUNC GLOBAL DEFAULT 11 atk_text_get_caret_offset + 297: 000000000000d2e0 92 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_type + 298: 000000000000e440 58 FUNC GLOBAL DEFAULT 11 atk_object_get_type + 299: 000000000000c840 58 FUNC GLOBAL DEFAULT 11 atk_editable_text_get_type + 300: 0000000000011030 120 FUNC GLOBAL DEFAULT 11 atk_relation_type_register + 301: 0000000000011d90 117 FUNC GLOBAL DEFAULT 11 atk_selection_get_type + 302: 00000000000140c0 133 FUNC GLOBAL DEFAULT 11 atk_table_set_row_header + 303: 0000000000012fe0 117 FUNC GLOBAL DEFAULT 11 atk_table_get_type + 304: 0000000000014440 103 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_row_span + 305: 0000000000017830 98 FUNC GLOBAL DEFAULT 11 atk_hyperlink_state_flags_get_type + 306: 000000000000ba10 144 FUNC GLOBAL DEFAULT 11 atk_component_ref_accessible_at_point + 307: 0000000000010110 247 FUNC GLOBAL DEFAULT 11 atk_object_remove_relationship + 308: 0000000000017a60 98 FUNC GLOBAL DEFAULT 11 atk_text_attribute_get_type + 309: 000000000000dfb0 116 FUNC GLOBAL DEFAULT 11 atk_no_op_object_new + 310: 0000000000012930 99 FUNC GLOBAL DEFAULT 11 atk_state_set_contains_state + 311: 0000000000011f70 118 FUNC GLOBAL DEFAULT 11 atk_selection_ref_selection + 312: 0000000000015bf0 66 FUNC GLOBAL DEFAULT 11 atk_attribute_set_free + 313: 00000000000135b0 103 FUNC GLOBAL DEFAULT 11 atk_table_get_n_columns + 314: 0000000000225680 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 315: 0000000000015590 121 FUNC GLOBAL DEFAULT 11 atk_text_remove_selection + 316: 0000000000015d80 344 FUNC GLOBAL DEFAULT 11 atk_text_attribute_for_name + 317: 0000000000013a80 122 FUNC GLOBAL DEFAULT 11 atk_table_get_selected_columns + 318: 0000000000013b00 121 FUNC GLOBAL DEFAULT 11 atk_table_is_column_selected + 319: 00000000000146a0 103 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_table + 320: 0000000000010b00 117 FUNC GLOBAL DEFAULT 11 atk_get_default_registry + 321: 00000000000106d0 62 FUNC GLOBAL DEFAULT 11 atk_range_free + 322: 000000000000ee80 103 FUNC GLOBAL DEFAULT 11 atk_object_get_description + 323: 0000000000016a70 11 FUNC GLOBAL DEFAULT 11 atk_misc_get_instance + 324: 0000000000012710 58 FUNC GLOBAL DEFAULT 11 atk_state_set_get_type + 325: 0000000000010810 48 FUNC GLOBAL DEFAULT 11 atk_range_get_lower_limit + 326: 000000000000d570 107 FUNC GLOBAL DEFAULT 11 atk_hyperlink_is_inline + 327: 0000000000012550 160 FUNC GLOBAL DEFAULT 11 atk_state_type_get_name + 328: 00000000000161b0 85 FUNC GLOBAL DEFAULT 11 atk_text_free_ranges + 329: 000000000000fba0 117 FUNC GLOBAL DEFAULT 11 atk_object_remove_property_change_handler + 330: 000000000000f4e0 103 FUNC GLOBAL DEFAULT 11 atk_object_get_layer + 331: 0000000000012160 103 FUNC GLOBAL DEFAULT 11 atk_selection_select_all_selection + 332: 000000000000fd40 103 FUNC GLOBAL DEFAULT 11 atk_object_get_attributes + 333: 000000000000fe80 36 FUNC GLOBAL DEFAULT 11 atk_role_get_localized_name + 334: 0000000000011a40 266 FUNC GLOBAL DEFAULT 11 atk_relation_set_add + 335: 00000000000168a0 68 FUNC GLOBAL DEFAULT 11 atk_get_root + 336: 0000000000010c80 58 FUNC GLOBAL DEFAULT 11 atk_relation_get_type + 337: 000000000000c5f0 103 FUNC GLOBAL DEFAULT 11 atk_document_get_attributes + 338: 000000000000c580 103 FUNC GLOBAL DEFAULT 11 atk_document_get_locale + 339: 0000000000012f40 158 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_uri + 340: 000000000000c760 110 FUNC GLOBAL DEFAULT 11 atk_document_get_current_page_number + 341: 00000000000137a0 103 FUNC GLOBAL DEFAULT 11 atk_table_get_n_rows + 342: 0000000000017980 98 FUNC GLOBAL DEFAULT 11 atk_relation_type_get_type + 343: 00000000000116f0 25 FUNC GLOBAL DEFAULT 11 atk_relation_set_new + 344: 00000000000156b0 121 FUNC GLOBAL DEFAULT 11 atk_text_set_caret_offset + 345: 00000000000152d0 111 FUNC GLOBAL DEFAULT 11 atk_text_get_character_count + 346: 0000000000012a40 137 FUNC GLOBAL DEFAULT 11 atk_state_set_remove_state + 347: 0000000000011170 344 FUNC GLOBAL DEFAULT 11 atk_relation_type_for_name + 348: 0000000000013a00 122 FUNC GLOBAL DEFAULT 11 atk_table_get_selected_rows + 349: 000000000000c920 135 FUNC GLOBAL DEFAULT 11 atk_editable_text_set_text_contents + 350: 0000000000012d20 105 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_type + 351: 00000000000107d0 64 FUNC GLOBAL DEFAULT 11 atk_range_copy + 352: 00000000000149f0 151 FUNC GLOBAL DEFAULT 11 atk_text_get_text + 353: 0000000000015510 119 FUNC GLOBAL DEFAULT 11 atk_text_add_selection + 354: 0000000000016950 68 FUNC GLOBAL DEFAULT 11 atk_get_toolkit_version + 355: 0000000000016a10 34 FUNC GLOBAL DEFAULT 11 atk_misc_threads_enter + 356: 0000000000010840 48 FUNC GLOBAL DEFAULT 11 atk_range_get_upper_limit + 357: 000000000000d420 103 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_end_index + 358: 000000000000ef60 5 FUNC GLOBAL DEFAULT 11 atk_object_peek_parent + 359: 0000000000012e00 158 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_mime_type + 360: 000000000000e0e0 73 FUNC GLOBAL DEFAULT 11 atk_no_op_object_factory_new + 361: 0000000000012d90 103 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_n_mime_types + 362: 000000000000c880 145 FUNC GLOBAL DEFAULT 11 atk_editable_text_set_run_attributes + 363: 0000000000012ea0 158 FUNC GLOBAL DEFAULT 11 atk_streamable_content_get_stream + 364: 000000000000d700 103 FUNC GLOBAL DEFAULT 11 atk_hyperlink_is_selected_link + 365: 0000000000017ad0 98 FUNC GLOBAL DEFAULT 11 atk_text_boundary_get_type + 366: 0000000000014520 103 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_row_header_cells + 367: 0000000000013810 118 FUNC GLOBAL DEFAULT 11 atk_table_get_row_description + 368: 000000000000c120 144 FUNC GLOBAL DEFAULT 11 atk_component_set_position + 369: 0000000000011820 142 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_relation + 370: 000000000000de20 392 FUNC GLOBAL DEFAULT 11 atk_no_op_object_get_type + 371: 0000000000015190 199 FUNC GLOBAL DEFAULT 11 atk_text_get_run_attributes + 372: 0000000000014590 268 FUNC GLOBAL DEFAULT 11 atk_table_cell_get_row_column_span + 373: 000000000000f0d0 121 FUNC GLOBAL DEFAULT 11 atk_role_register + 374: 0000000000016790 77 FUNC GLOBAL DEFAULT 11 atk_add_global_event_listener + 375: 00000000000169a0 8 FUNC GLOBAL DEFAULT 11 atk_get_version + 376: 0000000000012c50 208 FUNC GLOBAL DEFAULT 11 atk_state_set_xor_sets + 377: 0000000000014b10 209 FUNC GLOBAL DEFAULT 11 atk_text_get_text_after_offset + 378: 0000000000016a40 34 FUNC GLOBAL DEFAULT 11 atk_misc_threads_leave + 379: 0000000000010710 105 FUNC GLOBAL DEFAULT 11 atk_range_get_type + 380: 00000000000113b0 77 FUNC GLOBAL DEFAULT 11 atk_relation_get_relation_type + 381: 00000000000112d0 224 FUNC GLOBAL DEFAULT 11 atk_relation_new + 382: 0000000000225b08 8 OBJECT GLOBAL DEFAULT 24 atk_misc_instance + 383: 0000000000010490 230 FUNC GLOBAL DEFAULT 11 atk_plug_get_type + 384: 0000000000015260 103 FUNC GLOBAL DEFAULT 11 atk_text_get_default_attributes + 385: 0000000000013e00 121 FUNC GLOBAL DEFAULT 11 atk_table_remove_column_selection + 386: 000000000000c4a0 103 FUNC GLOBAL DEFAULT 11 atk_document_get_document_type + 387: 0000000000012240 230 FUNC GLOBAL DEFAULT 11 atk_socket_get_type + 388: 0000000000012490 84 FUNC GLOBAL DEFAULT 11 atk_socket_is_occupied + 389: 0000000000016670 100 FUNC GLOBAL DEFAULT 11 atk_remove_focus_tracker + 390: 0000000000013620 118 FUNC GLOBAL DEFAULT 11 atk_table_get_column_description + 391: 0000000000010a80 124 FUNC GLOBAL DEFAULT 11 atk_registry_get_factory + 392: 00000000000117c0 86 FUNC GLOBAL DEFAULT 11 atk_relation_set_get_n_relations + 393: 000000000000c320 58 FUNC GLOBAL DEFAULT 11 atk_document_get_type + 394: 000000000000d490 103 FUNC GLOBAL DEFAULT 11 atk_hyperlink_get_start_index + 395: 00000000000134c0 125 FUNC GLOBAL DEFAULT 11 atk_table_get_column_at_index + 396: 0000000000012ad0 192 FUNC GLOBAL DEFAULT 11 atk_state_set_and_sets + 397: 000000000000d500 103 FUNC GLOBAL DEFAULT 11 atk_hyperlink_is_valid + 398: 000000000000baa0 247 FUNC GLOBAL DEFAULT 11 atk_component_get_extents + 399: 0000000000017d00 98 FUNC GLOBAL DEFAULT 11 atk_value_type_get_type + 400: 000000000000fdb0 117 FUNC GLOBAL DEFAULT 11 atk_object_initialize + 401: 0000000000013e80 135 FUNC GLOBAL DEFAULT 11 atk_table_set_caption + 402: 00000000000169d0 58 FUNC GLOBAL DEFAULT 11 atk_misc_get_type + 403: 0000000000013990 103 FUNC GLOBAL DEFAULT 11 atk_table_get_summary + 404: 000000000000d770 105 FUNC GLOBAL DEFAULT 11 atk_hyperlink_impl_get_type + 405: 0000000000015610 147 FUNC GLOBAL DEFAULT 11 atk_text_set_selection + 406: 000000000000b8b0 144 FUNC GLOBAL DEFAULT 11 atk_component_contains + 407: 00000000000166e0 168 FUNC GLOBAL DEFAULT 11 atk_focus_tracker_notify + 408: 00000000000178a0 98 FUNC GLOBAL DEFAULT 11 atk_role_get_type + 409: 0000000000016590 222 FUNC GLOBAL DEFAULT 11 atk_add_focus_tracker + 410: 0000000000013370 199 FUNC GLOBAL DEFAULT 11 atk_table_get_index_at + 411: 00000000000170b0 118 FUNC GLOBAL DEFAULT 11 atk_value_get_increment + 412: 000000000000bf00 111 FUNC GLOBAL DEFAULT 11 atk_component_get_mdi_zorder diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatk-bridge-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatk-bridge-2.0.so.0.txt new file mode 100644 index 000000000000..529dfcf95880 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatk-bridge-2.0.so.0.txt @@ -0,0 +1,394 @@ +Library: /lib64/libatk-bridge-2.0.so.0 +Package: at-spi2-atk-2.26.2-1.el7.x86_64 + + +Symbol table '.dynsym' contains 388 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_data + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_impl_get_type + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_new + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_mdi_zorder + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__OBJECT + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_basic@LIBDBUS_1_3 (3) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_unref + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_locale + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_set_get_n_relations + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_unref@LIBDBUS_1_3 (3) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text_after_offset + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init_append@LIBDBUS_1_3 (3) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (4) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_add_main_entries + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_get_selection_count + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_reverse + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_add_match@LIBDBUS_1_3 (3) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_full + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text_before_offset + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_add_key_event_listener + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_description + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (4) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_select_all_selection + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_ref_accessible_at_point + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 37: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_sender@LIBDBUS_1_3 (3) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_selection + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_append_basic@LIBDBUS_1_3 (3) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_flush@LIBDBUS_1_3 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_range_free + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_caret_offset + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_path@LIBDBUS_1_3 (3) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_get_unique_name@LIBDBUS_1_3 (3) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_name + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_free + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_start_index + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_row_header_cells + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handlers_disconnect_matched + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_increment + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_add_global_event_listener + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_at_index + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_add_row_selection + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_args@LIBDBUS_1_3 (3) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (4) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_print + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_minimum_increment + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_no_op_object_new + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sized_new + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_dbus_connection_setup_with_g_main + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_type + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_extent_at + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_set_main_context + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_type + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data_full + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_column_span + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_position + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_chunk_new + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (4) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_unix_user_function@LIBDBUS_1_3 (3) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_is_valid + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_header + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_role_get_name + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_offset_at_point + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_remove_row_selection + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_type + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_current_value + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_row_column_span + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_row_description + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_character_extents + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.2.5 (4) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_attributes + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (4) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_unref + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkdir_with_parents + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_add_focus_tracker + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_set_notify@LIBDBUS_1_3 (3) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_header + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_remove_match@LIBDBUS_1_3 (3) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (5) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_transform + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (4) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strcasecmp + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_signature@LIBDBUS_1_3 (3) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_ref_accessible_child + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_plug_get_type + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_unref@LIBDBUS_1_3 (3) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (4) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_peek_head + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_close_container@LIBDBUS_1_3 (3) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_add_states + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_cut_text + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_get_relation_type + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_at_index + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_free@LIBDBUS_1_3 (3) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_add + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_do_action + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_return@LIBDBUS_1_3 (3) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_n_links + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_object + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_steal_reply@LIBDBUS_1_3 (3) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_current_page_number + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_type + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_position + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_grab_focus + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_runtime_dir + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_contains_state + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_set_no_reply@LIBDBUS_1_3 (3) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_set_value + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_request_name@LIBDBUS_1_3 (3) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_new + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (4) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_type + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_delete_text + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_push_tail + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_set_caret_offset + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_description + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply_and_block@LIBDBUS_1_3 (3) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_socket_get_type + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_n_rows + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_attach + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_register_fallback@LIBDBUS_1_3 (3) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_remove_global_event_listener + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_selected_rows + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_double + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (4) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_caption + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_next + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_clear_selection + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_range_get_upper_limit + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_remove_column_selection + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_equal + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_remove + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_paste_text + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_index_at + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (4) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_uri + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_contains + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_summary + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_type + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_set_text_contents + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_n_columns + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_lock + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_table + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 187: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_warn_message + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_n_accessible_children + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_get_toolkit_version + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (4) + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_set_extents + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_add_seconds + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_default_attributes + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_n_anchors + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_text_at_offset + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_add_selection + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_position + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_get_target + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_impl_get_hyperlink + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_end_index + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_is_selected + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_printf + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_remove + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_run_attributes + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_signal@LIBDBUS_1_3 (3) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_double + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_is_child_selected + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_maximum_value + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_concat + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_streamable_content_get_type + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_call@LIBDBUS_1_3 (3) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_fixed_array@LIBDBUS_1_3 (3) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_string + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply@LIBDBUS_1_3 (3) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_next@LIBDBUS_1_3 (3) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_open_container@LIBDBUS_1_3 (3) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_selected_columns + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_unregister_object_path@LIBDBUS_1_3 (3) + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_new_connection_function@LIBDBUS_1_3 (3) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hyperlink_get_type + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_query + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_range_get_lower_limit + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_localized_name + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_chunk_free + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.2.5 (4) + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_role + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_pointer + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_new + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_n_selections + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_dbus_server_setup_with_g_main + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value_holds + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_minimum_value + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (4) + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_run + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_ref_selection + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_remove_selection + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_add_selection + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_isprint + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_link_index + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_alpha + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_add_column_selection + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_type + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_locale + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_n_actions + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_column_header_cells + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_nth_data + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_cell_get_row_span + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_role_get_localized_name + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_relation_set_get_relation + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_hypertext_get_link + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_character_at_offset + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_new + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_unref + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_copy_text + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_bounded_ranges + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_get_char_validated + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_remove_filter@LIBDBUS_1_3 (3) + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_free + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_range_extents + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_set_current_value + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_index_in_parent + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_member@LIBDBUS_1_3 (3) + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_append_args_valist@LIBDBUS_1_3 (3) + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_string_at_offset + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_ref@LIBDBUS_1_3 (3) + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_get_root + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_is_empty + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_socket_is_occupied + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_init@LIBDBUS_1_3 (3) + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_parse + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_close@LIBDBUS_1_3 (3) + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_type + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_arg_type@LIBDBUS_1_3 (3) + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_is_row_selected + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (4) + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_set_position + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_remove_key_event_listener + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_fundamentally_a + 300: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_ref_relation_set + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_is_initialized + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_ref_at + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_character_count + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_unlock + 307: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 308: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_new + 309: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_remove_selection + 310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_type + 311: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_insert_text + 312: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (4) + 313: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 314: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_recurse@LIBDBUS_1_3 (3) + 315: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_chunk_insert + 316: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_get_toolkit_name + 317: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boolean + 318: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 319: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_extent_at + 320: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_current_time + 321: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send@LIBDBUS_1_3 (3) + 322: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_unref@LIBDBUS_1_3 (3) + 323: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 324: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_error@LIBDBUS_1_3 (3) + 325: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_size + 326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_cancel@LIBDBUS_1_3 (3) + 327: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_register_object_path@LIBDBUS_1_3 (3) + 328: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_lookup + 329: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.2.5 (4) + 330: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_interface@LIBDBUS_1_3 (3) + 331: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 332: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_init + 333: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_keybinding + 334: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit + 335: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_get_type + 336: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_data + 337: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init@LIBDBUS_1_3 (3) + 338: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atspi_get_a11y_bus + 339: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_ignore_unknown_options + 340: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_attribute_value + 341: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_action_get_name + 342: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 343: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_value_and_text + 344: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_description + 345: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_quit + 346: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_add_filter@LIBDBUS_1_3 (3) + 347: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 348: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_get_column_description + 349: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_new + 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 351: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_append_args@LIBDBUS_1_3 (3) + 352: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup_extended + 353: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 354: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_layer + 355: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_page_count + 356: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_selection_get_type + 357: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_type@LIBDBUS_1_3 (3) + 358: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 359: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_to_string + 360: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_value_get_range + 361: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_pop_head + 362: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strchr + 363: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uint + 364: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_remove_focus_tracker + 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 366: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkdtemp + 367: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_image_get_image_size + 368: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_state_set_add_state + 369: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_set_size + 370: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_attribute_set_free + 371: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 372: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (4) + 373: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_document_get_attributes + 374: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_object_locale + 375: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_validate + 376: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_editable_text_get_type + 377: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_text_set_selection + 378: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_component_get_extents + 379: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_foreach + 380: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 381: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_ref_state_set + 382: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_table_is_column_selected + 383: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (6) + 384: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_listen@LIBDBUS_1_3 (3) + 385: 0000000000000000 0 FUNC GLOBAL DEFAULT UND atk_object_get_parent + 386: 000000000000cf00 1224 FUNC GLOBAL DEFAULT 12 atk_bridge_adaptor_init + 387: 000000000000d3d0 661 FUNC GLOBAL DEFAULT 12 atk_bridge_adaptor_cleanup diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatspi.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatspi.so.0.txt new file mode 100644 index 000000000000..0ed2055c98cd --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libatspi.so.0.txt @@ -0,0 +1,609 @@ +Library: /lib64/libatspi.so.0 +Package: at-spi2-core-2.28.0-1.el7.x86_64 + + +Symbol table '.dynsym' contains 603 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unref + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_data@LIBDBUS_1_3 (3) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_get@LIBDBUS_1_3 (3) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_basic@LIBDBUS_1_3 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_unref@LIBDBUS_1_3 (3) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init_append@LIBDBUS_1_3 (3) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_is_method_call@LIBDBUS_1_3 (3) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (4) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_get_data@LIBDBUS_1_3 (3) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_add_match@LIBDBUS_1_3 (3) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_get_dispatch_status@LIBDBUS_1_3 (3) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (4) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_sender@LIBDBUS_1_3 (3) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_set_error_const@LIBDBUS_1_3 (3) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_append_basic@LIBDBUS_1_3 (3) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_timeout_functions@LIBDBUS_1_3 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_path@LIBDBUS_1_3 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_timeout_functions@LIBDBUS_1_3 (3) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_get_unique_name@LIBDBUS_1_3 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_get_is_connected@LIBDBUS_1_3 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_wakeup + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_flags@LIBDBUS_1_3 (3) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_unset + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_destination@LIBDBUS_1_3 (3) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_ref@LIBDBUS_1_3 (3) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_args@LIBDBUS_1_3 (3) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sized_new + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boxed + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_set_size + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_signature@LIBDBUS_1_3 (3) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_data@LIBDBUS_1_3 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.2.5 (4) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_set_notify@LIBDBUS_1_3 (3) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_new + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_remove_match@LIBDBUS_1_3 (3) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (5) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_string + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_signature@LIBDBUS_1_3 (3) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_unref@LIBDBUS_1_3 (3) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_close_container@LIBDBUS_1_3 (3) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_read_write_dispatch@LIBDBUS_1_3 (3) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_default + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_source_new + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_free@LIBDBUS_1_3 (3) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_return@LIBDBUS_1_3 (3) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (4) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_steal_reply@LIBDBUS_1_3 (3) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_remove + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strlen + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strrchr + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_error_name@LIBDBUS_1_3 (3) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_push_tail + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_allocate_data_slot@LIBDBUS_1_3 (3) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_unix_fd@LIBDBUS_1_3 (3) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply_and_block@LIBDBUS_1_3 (3) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_get_enabled@LIBDBUS_1_3 (3) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_attach + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_get_interval@LIBDBUS_1_3 (3) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_instance + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_next + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_copy + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_get_data@LIBDBUS_1_3 (3) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_equal + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_create_watch + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (4) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XOpenDisplay + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new_with_free_func + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 111: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_set_data@LIBDBUS_1_3 (3) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_size + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_signal@LIBDBUS_1_3 (3) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_new_method_call@LIBDBUS_1_3 (3) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_instance_private + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_fixed_array@LIBDBUS_1_3 (3) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send_with_reply@LIBDBUS_1_3 (3) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unix_new + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_next@LIBDBUS_1_3 (3) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_open_container@LIBDBUS_1_3 (3) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_set_size + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_boxed + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_get_enabled@LIBDBUS_1_3 (3) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_boxed + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInternAtom + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __isoc99_sscanf@GLIBC_2.7 (6) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_new + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_run_dispose + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value_holds + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_run + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata_full + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_handle@LIBDBUS_1_3 (3) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_new + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_string + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_allocate_data_slot@LIBDBUS_1_3 (3) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_member@LIBDBUS_1_3 (3) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_wakeup_main_function@LIBDBUS_1_3 (3) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_server_set_watch_functions@LIBDBUS_1_3 (3) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_ref@LIBDBUS_1_3 (3) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_ref + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_init@LIBDBUS_1_3 (3) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XDefaultRootWindow + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_close@LIBDBUS_1_3 (3) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_timeout_handle@LIBDBUS_1_3 (3) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_get_arg_type@LIBDBUS_1_3 (3) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (4) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_bus_register@LIBDBUS_1_3 (3) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_set_error@LIBDBUS_1_3 (3) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_get_data@LIBDBUS_1_3 (3) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_error_is_set@LIBDBUS_1_3 (3) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_ref@LIBDBUS_1_3 (3) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_free_data_slot@LIBDBUS_1_3 (3) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_recurse@LIBDBUS_1_3 (3) + 179: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_send@LIBDBUS_1_3 (3) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_unref@LIBDBUS_1_3 (3) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_type + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_pending_call_cancel@LIBDBUS_1_3 (3) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_clear_error + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_data@LIBDBUS_1_3 (3) + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_interface@LIBDBUS_1_3 (3) + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_init + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_iter_init@LIBDBUS_1_3 (3) + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_quit + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_add_filter@LIBDBUS_1_3 (3) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (7) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_append_args@LIBDBUS_1_3 (3) + 198: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_watch_set_data@LIBDBUS_1_3 (3) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error_literal + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_is_signal@LIBDBUS_1_3 (3) + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetWindowProperty + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_free@LIBDBUS_1_3 (3) + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_message_get_type@LIBDBUS_1_3 (3) + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strndup + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_pop_head + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_set_watch_functions@LIBDBUS_1_3 (3) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCloseDisplay + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_open_private@LIBDBUS_1_3 (3) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dbus_connection_dispatch@LIBDBUS_1_3 (3) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_interface_static + 215: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (4) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_is_a + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_object + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (2) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (2) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_depth + 221: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (4) + 222: 000000000001fdd0 562 FUNC GLOBAL DEFAULT 12 dbind_send_and_allow_reentry + 223: 0000000000014a40 147 FUNC GLOBAL DEFAULT 12 atspi_editable_text_cut_text + 224: 000000000000fa30 59 FUNC GLOBAL DEFAULT 12 atspi_locale_type_get_type + 225: 00000000000187a0 7 FUNC GLOBAL DEFAULT 12 atspi_is_initialized + 226: 00000000000177f0 187 FUNC GLOBAL DEFAULT 12 atspi_image_get_image_extents + 227: 0000000000014550 141 FUNC GLOBAL DEFAULT 12 atspi_document_get_locale + 228: 000000000001a790 264 FUNC GLOBAL DEFAULT 12 _atspi_dbus_send_with_reply_and_block + 229: 0000000000230af0 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_action + 230: 00000000000124a0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_text_iface + 231: 000000000001aff0 13 FUNC GLOBAL DEFAULT 12 _atspi_set_allow_sync + 232: 0000000000013200 321 FUNC GLOBAL DEFAULT 12 atspi_collection_get_matches_from + 233: 0000000000020010 586 FUNC GLOBAL DEFAULT 12 dbind_method_call_reentrant_va + 234: 000000000001e980 425 FUNC GLOBAL DEFAULT 12 atspi_text_get_text_attributes + 235: 00000000000147b0 134 FUNC GLOBAL DEFAULT 12 atspi_document_get_current_page_number + 236: 0000000000015750 43 FUNC GLOBAL DEFAULT 12 _atspi_reregister_event_listeners + 237: 0000000000010a20 129 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_toolkit_version + 238: 00000000000124e0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_value + 239: 0000000000018b40 342 FUNC GLOBAL DEFAULT 12 _atspi_dbus_set_interfaces + 240: 0000000000016f90 136 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_type + 241: 0000000000011fb0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_action_iface + 242: 0000000000017020 62 FUNC GLOBAL DEFAULT 12 _atspi_hyperlink_new + 243: 00000000000105f0 485 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_relation_set + 244: 000000000001ca00 58 FUNC GLOBAL DEFAULT 12 atspi_selection_get_type + 245: 000000000001c8e0 139 FUNC GLOBAL DEFAULT 12 atspi_selection_select_all + 246: 000000000001f580 195 FUNC GLOBAL DEFAULT 12 atspi_text_get_bounded_ranges + 247: 0000000000012d30 59 FUNC GLOBAL DEFAULT 12 _atspi_application_new + 248: 0000000000013620 267 FUNC GLOBAL DEFAULT 12 atspi_component_get_extents + 249: 000000000001e0f0 97 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_column_header_cells + 250: 00000000000123a0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_table + 251: 0000000000013430 105 FUNC GLOBAL DEFAULT 12 atspi_rect_get_type + 252: 0000000000012070 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_component + 253: 000000000001f790 105 FUNC GLOBAL DEFAULT 12 atspi_text_add_selection + 254: 000000000001e560 131 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_table + 255: 0000000000230ad0 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_dec + 256: 000000000001d6e0 97 FUNC GLOBAL DEFAULT 12 atspi_table_get_column_header + 257: 0000000000010100 815 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_type + 258: 0000000000010c10 105 FUNC GLOBAL DEFAULT 12 _atspi_accessible_new + 259: 0000000000011970 208 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_attributes + 260: 000000000001f4a0 213 FUNC GLOBAL DEFAULT 12 atspi_text_get_range_extents + 261: 000000000001cb10 128 FUNC GLOBAL DEFAULT 12 atspi_state_set_get_type + 262: 0000000000230a3c 4 OBJECT GLOBAL DEFAULT 24 _dbus_gmain_connection_slot + 263: 000000000001b990 65 FUNC GLOBAL DEFAULT 12 atspi_get_desktop_list + 264: 000000000001d1a0 97 FUNC GLOBAL DEFAULT 12 atspi_table_get_accessible_at + 265: 0000000000018ca0 227 FUNC GLOBAL DEFAULT 12 _atspi_dbus_set_state + 266: 0000000000013090 353 FUNC GLOBAL DEFAULT 12 atspi_collection_get_matches_to + 267: 0000000000012560 261 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_object_locale + 268: 00000000000170f0 163 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_uri + 269: 000000000001edc0 97 FUNC GLOBAL DEFAULT 12 atspi_text_get_default_attributes + 270: 00000000000172c0 107 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_start_index + 271: 000000000001d350 150 FUNC GLOBAL DEFAULT 12 atspi_table_get_column_at_index + 272: 0000000000230b08 8 OBJECT GLOBAL DEFAULT 24 atspi_path_root + 273: 000000000001c1e0 105 FUNC GLOBAL DEFAULT 12 atspi_key_definition_get_type + 274: 000000000000fd30 59 FUNC GLOBAL DEFAULT 12 atspi_key_synth_type_get_type + 275: 000000000001c660 147 FUNC GLOBAL DEFAULT 12 atspi_selection_select_child + 276: 000000000001dad0 147 FUNC GLOBAL DEFAULT 12 atspi_table_add_row_selection + 277: 000000000001e830 179 FUNC GLOBAL DEFAULT 12 atspi_text_get_text + 278: 000000000001d530 150 FUNC GLOBAL DEFAULT 12 atspi_table_get_row_extent_at + 279: 000000000001ab40 218 FUNC GLOBAL DEFAULT 12 atspi_set_main_context + 280: 0000000000013730 149 FUNC GLOBAL DEFAULT 12 atspi_component_get_position + 281: 0000000000230de0 0 NOTYPE GLOBAL DEFAULT 25 _end + 282: 0000000000011f70 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_action + 283: 000000000001cb90 91 FUNC GLOBAL DEFAULT 12 _atspi_state_set_new_internal + 284: 0000000000019530 448 FUNC GLOBAL DEFAULT 12 atspi_init + 285: 0000000000021250 648 FUNC GLOBAL DEFAULT 12 dbind_any_demarshal_va + 286: 0000000000011c80 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_text + 287: 0000000000230ab0 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_event_object + 288: 00000000000107e0 163 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_localized_role_name + 289: 000000000001e1f0 97 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_row_header_cells + 290: 00000000000186e0 51 FUNC GLOBAL DEFAULT 12 _atspi_get_live_refs + 291: 000000000001d900 134 FUNC GLOBAL DEFAULT 12 atspi_table_get_n_selected_columns + 292: 0000000000010d00 82 FUNC GLOBAL DEFAULT 12 atspi_accessible_clear_cache + 293: 000000000001e640 26 FUNC GLOBAL DEFAULT 12 atspi_range_copy + 294: 000000000001d5d0 150 FUNC GLOBAL DEFAULT 12 atspi_table_get_column_extent_at + 295: 0000000000019e00 76 FUNC GLOBAL DEFAULT 12 _atspi_dbus_return_accessible_from_iter + 296: 0000000000012830 5 FUNC GLOBAL DEFAULT 12 atspi_action_get_description + 297: 000000000001c1b0 35 FUNC GLOBAL DEFAULT 12 _atspi_reregister_device_listeners + 298: 00000000000126c0 33 FUNC GLOBAL DEFAULT 12 _atspi_accessible_unref_cache + 299: 000000000000fbb0 59 FUNC GLOBAL DEFAULT 12 atspi_text_boundary_type_get_type + 300: 000000000001cf70 131 FUNC GLOBAL DEFAULT 12 atspi_table_get_caption + 301: 000000000000fcb0 59 FUNC GLOBAL DEFAULT 12 atspi_key_event_type_get_type + 302: 0000000000011390 156 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_description + 303: 0000000000015ab0 590 FUNC GLOBAL DEFAULT 12 _atspi_send_event + 304: 000000000001fd60 58 FUNC GLOBAL DEFAULT 12 atspi_value_get_type + 305: 00000000000173a0 139 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_is_valid + 306: 000000000001de90 147 FUNC GLOBAL DEFAULT 12 atspi_table_is_selected + 307: 0000000000011ca0 718 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_interfaces + 308: 00000000000100e0 18 FUNC GLOBAL DEFAULT 12 free_value + 309: 000000000001b9e0 348 FUNC GLOBAL DEFAULT 12 atspi_register_keystroke_listener + 310: 00000000000153c0 108 FUNC GLOBAL DEFAULT 12 callback_unref + 311: 0000000000011650 195 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_role_name + 312: 00000000000149d0 97 FUNC GLOBAL DEFAULT 12 atspi_editable_text_copy_text + 313: 000000000001f8a0 155 FUNC GLOBAL DEFAULT 12 atspi_text_set_selection + 314: 000000000000fd70 59 FUNC GLOBAL DEFAULT 12 atspi_modifier_type_get_type + 315: 0000000000010fd0 212 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_child_count + 316: 00000000000123e0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_table_iface + 317: 0000000000015d00 2255 FUNC GLOBAL DEFAULT 12 _atspi_dbus_handle_event + 318: 000000000001f0b0 239 FUNC GLOBAL DEFAULT 12 atspi_text_get_text_at_offset + 319: 000000000001d210 150 FUNC GLOBAL DEFAULT 12 atspi_table_get_index_at + 320: 0000000000017c00 557 FUNC GLOBAL DEFAULT 12 atspi_match_rule_new + 321: 00000000000203d0 167 FUNC GLOBAL DEFAULT 12 dbind_emit_signal + 322: 000000000001c700 147 FUNC GLOBAL DEFAULT 12 atspi_selection_deselect_selected_child + 323: 00000000000121b0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_editable_text_iface + 324: 0000000000014060 144 FUNC GLOBAL DEFAULT 12 atspi_device_listener_add_callback + 325: 000000000000fe70 59 FUNC GLOBAL DEFAULT 12 atspi_key_listener_sync_type_get_type + 326: 000000000001efc0 239 FUNC GLOBAL DEFAULT 12 atspi_text_get_string_at_offset + 327: 0000000000012130 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_document_iface + 328: 000000000001e260 437 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_position + 329: 0000000000014160 178 FUNC GLOBAL DEFAULT 12 atspi_device_listener_remove_callback + 330: 000000000001ecf0 179 FUNC GLOBAL DEFAULT 12 atspi_text_get_text_attribute_value + 331: 0000000000014b80 147 FUNC GLOBAL DEFAULT 12 atspi_editable_text_paste_text + 332: 000000000001df30 58 FUNC GLOBAL DEFAULT 12 atspi_table_get_type + 333: 000000000001fa20 133 FUNC GLOBAL DEFAULT 12 atspi_value_get_current_value + 334: 0000000000015480 65 FUNC GLOBAL DEFAULT 12 atspi_event_listener_new_simple + 335: 0000000000230ac8 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_device_event_listener + 336: 0000000000020e30 1041 FUNC GLOBAL DEFAULT 12 dbind_any_demarshal + 337: 00000000000205b0 24 FUNC GLOBAL DEFAULT 12 dbind_find_c_alignment + 338: 000000000001c840 147 FUNC GLOBAL DEFAULT 12 atspi_selection_is_child_selected + 339: 0000000000012670 70 FUNC GLOBAL DEFAULT 12 _atspi_accessible_ref_cache + 340: 0000000000021830 31 FUNC GLOBAL DEFAULT 12 dbind_any_free + 341: 000000000001a6e0 162 FUNC GLOBAL DEFAULT 12 _atspi_dbus_call_partial + 342: 0000000000230a98 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_image + 343: 0000000000012ad0 58 FUNC GLOBAL DEFAULT 12 atspi_action_get_type + 344: 000000000001cf20 58 FUNC GLOBAL DEFAULT 12 atspi_state_set_remove + 345: 0000000000014ae0 147 FUNC GLOBAL DEFAULT 12 atspi_editable_text_delete_text + 346: 0000000000010890 243 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_attributes_as_array + 347: 0000000000010ee0 91 FUNC GLOBAL DEFAULT 12 _atspi_accessible_get_cache_mask + 348: 0000000000011bc0 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_action + 349: 000000000000fdf0 59 FUNC GLOBAL DEFAULT 12 atspi_role_get_type + 350: 00000000000176c0 141 FUNC GLOBAL DEFAULT 12 atspi_image_get_image_size + 351: 00000000000157a0 714 FUNC GLOBAL DEFAULT 12 atspi_event_listener_deregister_from_callback + 352: 0000000000230b2c 0 NOTYPE GLOBAL DEFAULT 24 _edata + 353: 000000000001cd50 113 FUNC GLOBAL DEFAULT 12 atspi_state_set_compare + 354: 0000000000012a30 147 FUNC GLOBAL DEFAULT 12 atspi_action_do_action + 355: 0000000000018720 113 FUNC GLOBAL DEFAULT 12 get_reference_from_iter + 356: 000000000001f990 133 FUNC GLOBAL DEFAULT 12 atspi_value_get_minimum_value + 357: 00000000000138d0 100 FUNC GLOBAL DEFAULT 12 atspi_component_get_mdi_z_order + 358: 000000000001eb30 5 FUNC GLOBAL DEFAULT 12 atspi_text_get_attributes + 359: 0000000000012460 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_text + 360: 000000000001dd50 315 FUNC GLOBAL DEFAULT 12 atspi_table_get_row_column_extents_at_index + 361: 00000000000120f0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_document + 362: 000000000001db70 147 FUNC GLOBAL DEFAULT 12 atspi_table_add_column_selection + 363: 0000000000230dc0 8 OBJECT GLOBAL DEFAULT 25 device_parent_class + 364: 000000000001e060 134 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_column_span + 365: 0000000000013410 26 FUNC GLOBAL DEFAULT 12 atspi_point_copy + 366: 0000000000013380 58 FUNC GLOBAL DEFAULT 12 atspi_collection_get_type + 367: 0000000000013fe0 128 FUNC GLOBAL DEFAULT 12 atspi_device_listener_get_type + 368: 0000000000012f70 37 FUNC GLOBAL DEFAULT 12 atspi_collection_is_ancestor_of + 369: 0000000000230dd8 8 OBJECT GLOBAL DEFAULT 25 atspi_main_context + 370: 0000000000020480 7 FUNC GLOBAL DEFAULT 12 dbind_set_timeout + 371: 0000000000017060 134 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_n_anchors + 372: 0000000000013510 155 FUNC GLOBAL DEFAULT 12 atspi_component_contains + 373: 0000000000017e30 738 FUNC GLOBAL DEFAULT 12 _atspi_match_rule_marshal + 374: 000000000001c560 134 FUNC GLOBAL DEFAULT 12 atspi_selection_get_n_selected_children + 375: 000000000001ce30 211 FUNC GLOBAL DEFAULT 12 atspi_state_set_get_states + 376: 000000000001e420 305 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_row_column_span + 377: 0000000000014720 134 FUNC GLOBAL DEFAULT 12 atspi_document_get_page_count + 378: 0000000000230ae8 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_application + 379: 0000000000017210 174 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_index_range + 380: 000000000000faf0 59 FUNC GLOBAL DEFAULT 12 atspi_collection_match_type_get_type + 381: 000000000001ccb0 50 FUNC GLOBAL DEFAULT 12 atspi_state_set_add + 382: 0000000000011c00 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_document + 383: 0000000000010d60 373 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_process_id + 384: 0000000000011c10 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_editable_text + 385: 000000000001fab0 133 FUNC GLOBAL DEFAULT 12 atspi_value_get_maximum_value + 386: 0000000000230a50 8 OBJECT GLOBAL DEFAULT 24 old_cache_signal_type + 387: 000000000001ccf0 83 FUNC GLOBAL DEFAULT 12 atspi_state_set_new + 388: 0000000000013d70 58 FUNC GLOBAL DEFAULT 12 atspi_component_get_type + 389: 0000000000230dd0 8 OBJECT GLOBAL DEFAULT 25 atspi_main_loop + 390: 0000000000011430 347 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_parent + 391: 0000000000017a70 128 FUNC GLOBAL DEFAULT 12 atspi_match_rule_get_type + 392: 000000000001d490 147 FUNC GLOBAL DEFAULT 12 atspi_table_get_column_description + 393: 00000000000111c0 266 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_index_in_parent + 394: 000000000001fcd0 133 FUNC GLOBAL DEFAULT 12 atspi_value_get_minimum_increment + 395: 00000000000145e0 163 FUNC GLOBAL DEFAULT 12 atspi_document_get_document_attribute_value + 396: 000000000001a8a0 648 FUNC GLOBAL DEFAULT 12 _atspi_ref_accessible + 397: 000000000001d670 97 FUNC GLOBAL DEFAULT 12 atspi_table_get_row_header + 398: 000000000001c0b0 243 FUNC GLOBAL DEFAULT 12 atspi_generate_mouse_event + 399: 000000000001e5f0 58 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_type + 400: 000000000001dc10 147 FUNC GLOBAL DEFAULT 12 atspi_table_remove_row_selection + 401: 00000000000133d0 5 FUNC GLOBAL DEFAULT 12 atspi_rect_free + 402: 000000000001fb40 387 FUNC GLOBAL DEFAULT 12 atspi_value_set_current_value + 403: 0000000000230ac0 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_document + 404: 000000000001cbf0 189 FUNC GLOBAL DEFAULT 12 atspi_state_set_set_by_name + 405: 0000000000230ab8 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_editable_text + 406: 00000000000112f0 156 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_name + 407: 0000000000019fd0 169 FUNC GLOBAL DEFAULT 12 _atspi_dbus_return_hyperlink_from_message + 408: 000000000000fb70 59 FUNC GLOBAL DEFAULT 12 atspi_component_layer_get_type + 409: 0000000000014c20 58 FUNC GLOBAL DEFAULT 12 atspi_editable_text_get_type + 410: 0000000000014140 18 FUNC GLOBAL DEFAULT 12 atspi_device_listener_new_simple + 411: 000000000001b040 487 FUNC GLOBAL DEFAULT 12 _atspi_dbus_call + 412: 000000000001b950 6 FUNC GLOBAL DEFAULT 12 atspi_get_desktop_count + 413: 00000000000165d0 105 FUNC GLOBAL DEFAULT 12 atspi_event_get_type + 414: 0000000000015330 136 FUNC GLOBAL DEFAULT 12 callback_ref + 415: 000000000001e6c0 105 FUNC GLOBAL DEFAULT 12 atspi_range_get_type + 416: 000000000001a500 479 FUNC GLOBAL DEFAULT 12 _atspi_dbus_call_partial_va + 417: 000000000001f400 158 FUNC GLOBAL DEFAULT 12 atspi_text_get_offset_at_point + 418: 000000000001c2d0 121 FUNC GLOBAL DEFAULT 12 atspi_relation_get_target + 419: 0000000000011c40 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_image + 420: 0000000000012700 134 FUNC GLOBAL DEFAULT 12 atspi_action_get_n_actions + 421: 0000000000012fa0 233 FUNC GLOBAL DEFAULT 12 atspi_collection_get_matches + 422: 0000000000017750 149 FUNC GLOBAL DEFAULT 12 atspi_image_get_image_position + 423: 000000000001cf10 11 FUNC GLOBAL DEFAULT 12 atspi_state_set_is_empty + 424: 0000000000013940 97 FUNC GLOBAL DEFAULT 12 atspi_component_grab_focus + 425: 00000000000135b0 105 FUNC GLOBAL DEFAULT 12 atspi_component_get_accessible_at_point + 426: 0000000000010f40 131 FUNC GLOBAL DEFAULT 12 _atspi_accessible_test_cache + 427: 00000000000139b0 101 FUNC GLOBAL DEFAULT 12 atspi_component_get_alpha + 428: 000000000001afe0 7 FUNC GLOBAL DEFAULT 12 _atspi_get_allow_sync + 429: 00000000000187b0 37 FUNC GLOBAL DEFAULT 12 atspi_event_main + 430: 0000000000016ce0 322 FUNC GLOBAL DEFAULT 12 atspi_dbus_connection_setup_with_g_main + 431: 000000000000fc30 59 FUNC GLOBAL DEFAULT 12 atspi_text_clip_type_get_type + 432: 0000000000021868 0 FUNC GLOBAL DEFAULT 13 _fini + 433: 0000000000230b18 8 OBJECT GLOBAL DEFAULT 24 atspi_path_dec + 434: 000000000001b6f0 27 FUNC GLOBAL DEFAULT 12 atspi_key_definition_free + 435: 0000000000017440 139 FUNC GLOBAL DEFAULT 12 atspi_hypertext_get_n_links + 436: 000000000001ab30 13 FUNC GLOBAL DEFAULT 12 atspi_set_timeout + 437: 000000000001e7a0 134 FUNC GLOBAL DEFAULT 12 atspi_text_get_character_count + 438: 0000000000013c30 155 FUNC GLOBAL DEFAULT 12 atspi_component_set_position + 439: 000000000001eed0 239 FUNC GLOBAL DEFAULT 12 atspi_text_get_text_before_offset + 440: 000000000001eb40 425 FUNC GLOBAL DEFAULT 12 atspi_text_get_attribute_run + 441: 0000000000018fa0 293 FUNC GLOBAL DEFAULT 12 _atspi_dbus_return_attribute_array_from_message + 442: 0000000000230a60 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_value + 443: 00000000000133e0 38 FUNC GLOBAL DEFAULT 12 atspi_rect_copy + 444: 000000000001bda0 270 FUNC GLOBAL DEFAULT 12 atspi_register_device_event_listener + 445: 000000000000fbf0 59 FUNC GLOBAL DEFAULT 12 atspi_text_granularity_get_type + 446: 000000000000fc70 59 FUNC GLOBAL DEFAULT 12 atspi_state_type_get_type + 447: 0000000000014930 155 FUNC GLOBAL DEFAULT 12 atspi_editable_text_insert_text + 448: 0000000000015700 29 FUNC GLOBAL DEFAULT 12 atspi_event_listener_register_full + 449: 00000000000144b0 17 FUNC GLOBAL DEFAULT 12 _atspi_device_listener_get_path + 450: 000000000001c350 128 FUNC GLOBAL DEFAULT 12 atspi_relation_get_type + 451: 00000000000175e0 58 FUNC GLOBAL DEFAULT 12 atspi_hypertext_get_type + 452: 0000000000012840 147 FUNC GLOBAL DEFAULT 12 atspi_action_get_key_binding + 453: 000000000000fdb0 59 FUNC GLOBAL DEFAULT 12 atspi_relation_type_get_type + 454: 000000000000e4a8 0 FUNC GLOBAL DEFAULT 9 _init + 455: 0000000000012260 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_hypertext_iface + 456: 0000000000018a30 258 FUNC GLOBAL DEFAULT 12 _atspi_dbus_attribute_array_from_iter + 457: 0000000000015730 23 FUNC GLOBAL DEFAULT 12 atspi_event_listener_register + 458: 0000000000018680 84 FUNC GLOBAL DEFAULT 12 _atspi_get_iface_num + 459: 000000000001da30 147 FUNC GLOBAL DEFAULT 12 atspi_table_is_column_selected + 460: 000000000001f330 202 FUNC GLOBAL DEFAULT 12 atspi_text_get_character_extents + 461: 0000000000012520 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_value_iface + 462: 0000000000010be0 37 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_streamable_content + 463: 0000000000230b10 8 OBJECT GLOBAL DEFAULT 24 atspi_path_registry + 464: 000000000000fb30 59 FUNC GLOBAL DEFAULT 12 atspi_collection_tree_traversal_type_get_type + 465: 0000000000230a80 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_table + 466: 0000000000230b00 8 OBJECT GLOBAL DEFAULT 24 atspi_bus_registry + 467: 000000000001c970 139 FUNC GLOBAL DEFAULT 12 atspi_selection_clear_selection + 468: 0000000000010ab0 129 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_atspi_version + 469: 000000000000fa70 59 FUNC GLOBAL DEFAULT 12 atspi_coord_type_get_type + 470: 0000000000012170 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_editable_text + 471: 0000000000014220 655 FUNC GLOBAL DEFAULT 12 _atspi_dbus_handle_DeviceEvent + 472: 0000000000017940 58 FUNC GLOBAL DEFAULT 12 atspi_image_get_type + 473: 000000000001ce00 46 FUNC GLOBAL DEFAULT 12 atspi_state_set_equals + 474: 00000000000140f0 75 FUNC GLOBAL DEFAULT 12 atspi_device_listener_new + 475: 000000000001b870 67 FUNC GLOBAL DEFAULT 12 atspi_key_definition_copy + 476: 000000000001edb0 5 FUNC GLOBAL DEFAULT 12 atspi_text_get_attribute_value + 477: 00000000000110b0 257 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_child_at_index + 478: 0000000000230a30 8 OBJECT GLOBAL DEFAULT 24 str_parent + 479: 0000000000010c80 126 FUNC GLOBAL DEFAULT 12 atspi_accessible_set_cache_mask + 480: 0000000000013a20 519 FUNC GLOBAL DEFAULT 12 atspi_component_set_extents + 481: 0000000000013860 97 FUNC GLOBAL DEFAULT 12 atspi_component_get_layer + 482: 000000000001ad10 708 FUNC GLOBAL DEFAULT 12 _atspi_dbus_update_cache_from_dict + 483: 0000000000017630 131 FUNC GLOBAL DEFAULT 12 atspi_image_get_image_description + 484: 0000000000230aa0 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_hypertext + 485: 0000000000011ff0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_collection + 486: 000000000001ac20 48 FUNC GLOBAL DEFAULT 12 _atspi_name_compat + 487: 000000000001f650 142 FUNC GLOBAL DEFAULT 12 atspi_text_get_n_selections + 488: 0000000000012420 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_table_cell + 489: 0000000000230ae0 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_collection + 490: 0000000000012360 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_selection_iface + 491: 0000000000230a78 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_table_cell + 492: 0000000000012980 5 FUNC GLOBAL DEFAULT 12 atspi_action_get_name + 493: 0000000000010b40 150 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_id + 494: 0000000000230b2c 0 NOTYPE GLOBAL DEFAULT 25 __bss_start + 495: 0000000000011bd0 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_application + 496: 000000000001c7a0 147 FUNC GLOBAL DEFAULT 12 atspi_selection_deselect_child + 497: 000000000001f6e0 173 FUNC GLOBAL DEFAULT 12 atspi_text_get_selection + 498: 000000000001ac50 185 FUNC GLOBAL DEFAULT 12 atspi_role_get_name + 499: 0000000000012790 147 FUNC GLOBAL DEFAULT 12 atspi_action_get_action_description + 500: 00000000000117e0 392 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_state_set + 501: 00000000000120b0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_component_iface + 502: 00000000000146a0 97 FUNC GLOBAL DEFAULT 12 atspi_document_get_document_attributes + 503: 0000000000021850 24 FUNC GLOBAL DEFAULT 12 dbind_any_free_ptr + 504: 0000000000230af8 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_accessible + 505: 00000000000152b0 128 FUNC GLOBAL DEFAULT 12 atspi_event_listener_get_type + 506: 0000000000019e50 169 FUNC GLOBAL DEFAULT 12 _atspi_dbus_return_accessible_from_message + 507: 0000000000020320 168 FUNC GLOBAL DEFAULT 12 dbind_emit_signal_va + 508: 0000000000012990 147 FUNC GLOBAL DEFAULT 12 atspi_action_get_localized_name + 509: 000000000001e160 134 FUNC GLOBAL DEFAULT 12 atspi_table_cell_get_row_span + 510: 0000000000019f00 200 FUNC GLOBAL DEFAULT 12 _atspi_dbus_return_hyperlink_from_iter + 511: 000000000001d990 147 FUNC GLOBAL DEFAULT 12 atspi_table_is_row_selected + 512: 0000000000015a70 22 FUNC GLOBAL DEFAULT 12 atspi_event_listener_deregister + 513: 00000000000122e0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_image_iface + 514: 0000000000014690 5 FUNC GLOBAL DEFAULT 12 atspi_document_get_attribute_value + 515: 000000000001b000 60 FUNC GLOBAL DEFAULT 12 _atspi_set_error_no_sync + 516: 000000000001beb0 254 FUNC GLOBAL DEFAULT 12 atspi_deregister_device_event_listener + 517: 0000000000018930 254 FUNC GLOBAL DEFAULT 12 _atspi_dbus_hash_from_iter + 518: 000000000001b230 818 FUNC GLOBAL DEFAULT 12 _atspi_dbus_get_property + 519: 0000000000011c50 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_selection + 520: 000000000001dcb0 147 FUNC GLOBAL DEFAULT 12 atspi_table_remove_column_selection + 521: 0000000000011c90 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_value + 522: 000000000001d750 134 FUNC GLOBAL DEFAULT 12 atspi_table_get_n_selected_rows + 523: 0000000000014840 58 FUNC GLOBAL DEFAULT 12 atspi_document_get_type + 524: 0000000000230a68 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_cache + 525: 00000000000122a0 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_image + 526: 0000000000011c20 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_hypertext + 527: 0000000000015430 76 FUNC GLOBAL DEFAULT 12 atspi_event_listener_new + 528: 00000000000137d0 141 FUNC GLOBAL DEFAULT 12 atspi_component_get_size + 529: 00000000000171a0 97 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_object + 530: 0000000000010990 129 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_toolkit_name + 531: 0000000000230a88 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_selection + 532: 0000000000230dc8 4 OBJECT GLOBAL DEFAULT 25 atspi_no_cache + 533: 0000000000014710 5 FUNC GLOBAL DEFAULT 12 atspi_document_get_attributes + 534: 0000000000013cd0 147 FUNC GLOBAL DEFAULT 12 atspi_component_set_size + 535: 000000000001d000 123 FUNC GLOBAL DEFAULT 12 atspi_table_get_summary + 536: 000000000001c3d0 249 FUNC GLOBAL DEFAULT 12 _atspi_relation_new_from_iter + 537: 000000000000fab0 59 FUNC GLOBAL DEFAULT 12 atspi_collection_sort_order_get_type + 538: 0000000000230aa8 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_hyperlink + 539: 0000000000012030 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_collection_iface + 540: 0000000000018e70 293 FUNC GLOBAL DEFAULT 12 _atspi_dbus_return_hash_from_message + 541: 000000000001e730 105 FUNC GLOBAL DEFAULT 12 atspi_text_range_get_type + 542: 0000000000012220 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_hypertext + 543: 0000000000011c60 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_table + 544: 000000000001f800 147 FUNC GLOBAL DEFAULT 12 atspi_text_remove_selection + 545: 0000000000018d90 12 FUNC GLOBAL DEFAULT 12 _atspi_error_quark + 546: 000000000001d870 131 FUNC GLOBAL DEFAULT 12 atspi_table_get_selected_columns + 547: 000000000001d7e0 131 FUNC GLOBAL DEFAULT 12 atspi_table_get_selected_rows + 548: 000000000001b5d0 128 FUNC GLOBAL DEFAULT 12 atspi_object_get_type + 549: 0000000000020260 180 FUNC GLOBAL DEFAULT 12 dbind_method_call_reentrant + 550: 0000000000011be0 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_collection + 551: 0000000000230a90 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_registry + 552: 0000000000011c70 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_table_cell + 553: 0000000000230a58 8 OBJECT GLOBAL DEFAULT 24 cache_signal_type + 554: 00000000000154d0 553 FUNC GLOBAL DEFAULT 12 atspi_event_listener_register_from_callback_full + 555: 0000000000230a70 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_text + 556: 00000000000128e0 147 FUNC GLOBAL DEFAULT 12 atspi_action_get_action_name + 557: 00000000000207b0 961 FUNC GLOBAL DEFAULT 12 dbind_any_marshal + 558: 000000000001bfb0 254 FUNC GLOBAL DEFAULT 12 atspi_generate_keyboard_event + 559: 0000000000017330 107 FUNC GLOBAL DEFAULT 12 atspi_hyperlink_get_end_index + 560: 00000000000178b0 141 FUNC GLOBAL DEFAULT 12 atspi_image_get_image_locale + 561: 000000000001bb40 597 FUNC GLOBAL DEFAULT 12 atspi_deregister_keystroke_listener + 562: 000000000001f1a0 239 FUNC GLOBAL DEFAULT 12 atspi_text_get_text_after_offset + 563: 000000000001c2b0 4 FUNC GLOBAL DEFAULT 12 atspi_relation_get_relation_type + 564: 000000000001e8f0 134 FUNC GLOBAL DEFAULT 12 atspi_text_get_caret_offset + 565: 0000000000011590 190 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_role + 566: 00000000000112d0 28 FUNC GLOBAL DEFAULT 12 _atspi_accessible_add_cache + 567: 000000000001f940 58 FUNC GLOBAL DEFAULT 12 atspi_text_get_type + 568: 000000000001ee30 147 FUNC GLOBAL DEFAULT 12 atspi_text_set_caret_offset + 569: 0000000000011c30 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_hyperlink + 570: 0000000000011bf0 15 FUNC GLOBAL DEFAULT 12 atspi_accessible_is_component + 571: 0000000000011720 186 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_application + 572: 000000000001d3f0 147 FUNC GLOBAL DEFAULT 12 atspi_table_get_row_description + 573: 000000000001d080 134 FUNC GLOBAL DEFAULT 12 atspi_table_get_n_rows + 574: 000000000001cdd0 42 FUNC GLOBAL DEFAULT 12 atspi_state_set_contains + 575: 0000000000013350 37 FUNC GLOBAL DEFAULT 12 atspi_collection_get_active_descendant + 576: 0000000000016e30 288 FUNC GLOBAL DEFAULT 12 atspi_dbus_server_setup_with_g_main + 577: 0000000000012320 60 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_selection + 578: 00000000000190d0 1105 FUNC GLOBAL DEFAULT 12 atspi_get_a11y_bus + 579: 000000000000fe30 59 FUNC GLOBAL DEFAULT 12 atspi_cache_get_type + 580: 000000000001c5f0 97 FUNC GLOBAL DEFAULT 12 atspi_selection_get_selected_child + 581: 0000000000012b80 128 FUNC GLOBAL DEFAULT 12 atspi_application_get_type + 582: 0000000000230ad8 8 OBJECT GLOBAL DEFAULT 24 atspi_interface_component + 583: 000000000001f290 150 FUNC GLOBAL DEFAULT 12 atspi_text_get_character_at_offset + 584: 000000000001d110 134 FUNC GLOBAL DEFAULT 12 atspi_table_get_n_columns + 585: 0000000000013dc0 27 FUNC GLOBAL DEFAULT 12 atspi_device_event_free + 586: 00000000000187e0 15 FUNC GLOBAL DEFAULT 12 atspi_event_quit + 587: 00000000000121f0 44 FUNC GLOBAL DEFAULT 12 atspi_accessible_get_hyperlink + 588: 000000000001c2c0 8 FUNC GLOBAL DEFAULT 12 atspi_relation_get_n_targets + 589: 0000000000015720 11 FUNC GLOBAL DEFAULT 12 atspi_event_listener_register_from_callback + 590: 000000000001d2b0 150 FUNC GLOBAL DEFAULT 12 atspi_table_get_row_at_index + 591: 00000000000174d0 97 FUNC GLOBAL DEFAULT 12 atspi_hypertext_get_link + 592: 000000000001b960 35 FUNC GLOBAL DEFAULT 12 atspi_get_desktop + 593: 0000000000014890 147 FUNC GLOBAL DEFAULT 12 atspi_editable_text_set_text_contents + 594: 00000000000144d0 105 FUNC GLOBAL DEFAULT 12 atspi_device_event_get_type + 595: 00000000000134a0 105 FUNC GLOBAL DEFAULT 12 atspi_point_get_type + 596: 0000000000015780 24 FUNC GLOBAL DEFAULT 12 atspi_event_listener_register_no_data + 597: 00000000000196f0 69 FUNC GLOBAL DEFAULT 12 _atspi_bus + 598: 000000000000fcf0 59 FUNC GLOBAL DEFAULT 12 atspi_event_type_get_type + 599: 0000000000017540 150 FUNC GLOBAL DEFAULT 12 atspi_hypertext_get_link_index + 600: 0000000000020b80 679 FUNC GLOBAL DEFAULT 12 dbind_any_marshal_va + 601: 0000000000015a90 21 FUNC GLOBAL DEFAULT 12 atspi_event_listener_deregister_no_data + 602: 00000000000187f0 309 FUNC GLOBAL DEFAULT 12 atspi_exit diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libc.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libc.so.6.txt new file mode 100644 index 000000000000..91f759c33ceb --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libc.so.6.txt @@ -0,0 +1,2249 @@ +Library: /lib64/libc.so.6 +Package: glibc-2.17-326.el7_9.x86_64 + + +Symbol table '.dynsym' contains 2243 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 OBJECT WEAK DEFAULT UND _dl_starting_up@GLIBC_PRIVATE (23) + 2: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global@GLIBC_PRIVATE (23) + 3: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __libc_enable_secure@GLIBC_PRIVATE (23) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __tls_get_addr@GLIBC_2.3 (24) + 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (23) + 6: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _dl_argv@GLIBC_PRIVATE (23) + 7: 00000000000724d0 292 FUNC GLOBAL DEFAULT 12 putwchar@@GLIBC_2.2.5 + 8: 0000000000099a90 32 FUNC GLOBAL DEFAULT 12 __strspn_c1@@GLIBC_2.2.5 + 9: 0000000000117f10 16 FUNC GLOBAL DEFAULT 12 __gethostname_chk@@GLIBC_2.4 + 10: 0000000000099ab0 26 FUNC GLOBAL DEFAULT 12 __strspn_c2@@GLIBC_2.2.5 + 11: 000000000011d450 165 FUNC GLOBAL DEFAULT 12 setrpcent@@GLIBC_2.2.5 + 12: 00000000000ac9c0 10 FUNC GLOBAL DEFAULT 12 __wcstod_l@@GLIBC_2.2.5 + 13: 0000000000099ad0 34 FUNC GLOBAL DEFAULT 12 __strspn_c3@@GLIBC_2.2.5 + 14: 00000000000ff020 33 FUNC GLOBAL DEFAULT 12 epoll_create@@GLIBC_2.3.2 + 15: 00000000000e3970 33 FUNC WEAK DEFAULT 12 sched_get_priority_min@@GLIBC_2.2.5 + 16: 0000000000117f20 16 FUNC GLOBAL DEFAULT 12 __getdomainname_chk@@GLIBC_2.4 + 17: 00000000000ff230 33 FUNC GLOBAL DEFAULT 12 klogctl@@GLIBC_2.2.5 + 18: 000000000002f680 11 FUNC GLOBAL DEFAULT 12 __tolower_l@@GLIBC_2.2.5 + 19: 00000000000536b0 143 FUNC GLOBAL DEFAULT 12 dprintf@@GLIBC_2.2.5 + 20: 00000000000c6a60 93 FUNC WEAK DEFAULT 12 setuid@@GLIBC_2.2.5 + 21: 00000000000b1ee0 2569 FUNC GLOBAL DEFAULT 12 __wcscoll_l@@GLIBC_2.2.5 + 22: 0000000000101b10 153 FUNC WEAK DEFAULT 12 iswalpha@@GLIBC_2.2.5 + 23: 00000000000f4ec0 33 FUNC GLOBAL DEFAULT 12 __getrlimit@@GLIBC_PRIVATE + 24: 0000000000120c90 119 FUNC GLOBAL DEFAULT 12 __internal_endnetgrent@@GLIBC_PRIVATE + 25: 00000000000f5c90 33 FUNC GLOBAL DEFAULT 12 chroot@@GLIBC_2.2.5 + 26: 00000000000b57d0 77 IFUNC GLOBAL DEFAULT 12 __gettimeofday@@GLIBC_2.2.5 + 27: 0000000000079a00 47 FUNC GLOBAL DEFAULT 12 _IO_file_setbuf@@GLIBC_2.2.5 + 28: 00000000003c9e10 4 OBJECT WEAK DEFAULT 34 daylight@@GLIBC_2.2.5 + 29: 00000000000b8d40 59 FUNC GLOBAL DEFAULT 12 getdate@@GLIBC_2.2.5 + 30: 00000000001174a0 222 FUNC GLOBAL DEFAULT 12 __vswprintf_chk@@GLIBC_2.4 + 31: 000000000007b450 1338 FUNC GLOBAL DEFAULT 12 _IO_file_fopen@@GLIBC_2.2.5 + 32: 000000000010c570 38 FUNC GLOBAL DEFAULT 12 pthread_cond_signal@@GLIBC_2.3.2 + 33: 000000000013e860 38 FUNC GLOBAL DEFAULT 12 pthread_cond_signal@GLIBC_2.2.5 + 34: 000000000003b8c0 10 FUNC WEAK DEFAULT 12 strtoull_l@@GLIBC_2.3.3 + 35: 0000000000135260 96 FUNC GLOBAL DEFAULT 12 xdr_short@@GLIBC_2.2.5 + 36: 00000000000fbf20 121 FUNC GLOBAL DEFAULT 12 lfind@@GLIBC_2.2.5 + 37: 000000000006ffc0 274 FUNC GLOBAL DEFAULT 12 _IO_padn@@GLIBC_2.2.5 + 38: 00000000000a6ae0 76 IFUNC WEAK DEFAULT 12 strcasestr@@GLIBC_2.2.5 + 39: 00000000000c5a30 749 FUNC GLOBAL DEFAULT 12 __libc_fork@@GLIBC_PRIVATE + 40: 0000000000135c60 176 FUNC GLOBAL DEFAULT 12 xdr_int64_t@@GLIBC_2.2.5 + 41: 00000000000ac9c0 10 FUNC WEAK DEFAULT 12 wcstod_l@@GLIBC_2.3 + 42: 00000000000ffc80 33 FUNC WEAK DEFAULT 12 socket@@GLIBC_2.2.5 + 43: 0000000000131380 291 FUNC GLOBAL DEFAULT 12 key_encryptsession_pk@@GLIBC_2.2.5 + 44: 0000000000096610 176 FUNC WEAK DEFAULT 12 argz_create@@GLIBC_2.2.5 + 45: 0000000000072800 45 FUNC GLOBAL DEFAULT 12 putchar_unlocked@@GLIBC_2.2.5 + 46: 0000000000127af0 238 FUNC GLOBAL DEFAULT 12 xdr_pmaplist@@GLIBC_2.2.5 + 47: 0000000000115730 349 FUNC GLOBAL DEFAULT 12 __stpcpy_chk@@GLIBC_2.3.4 + 48: 0000000000045060 182 FUNC GLOBAL DEFAULT 12 __xpg_basename@@GLIBC_2.2.5 + 49: 0000000000110280 166 FUNC GLOBAL DEFAULT 12 __res_init@@GLIBC_2.2.5 + 50: 0000000000118730 20 FUNC GLOBAL DEFAULT 12 __ppoll_chk@@GLIBC_2.16 + 51: 0000000000105b00 525 FUNC WEAK DEFAULT 12 fgetsgent_r@@GLIBC_2.10 + 52: 00000000000776e0 245 FUNC WEAK DEFAULT 12 getc@@GLIBC_2.2.5 + 53: 00000000000a8dd0 254 FUNC WEAK DEFAULT 12 wcpncpy@@GLIBC_2.2.5 + 54: 0000000000073900 548 FUNC GLOBAL DEFAULT 12 _IO_wdefault_xsputn@@GLIBC_2.2.5 + 55: 00000000000f61c0 31 FUNC GLOBAL DEFAULT 12 mkdtemp@@GLIBC_2.2.5 + 56: 000000000003ae20 60 FUNC WEAK DEFAULT 12 srand48_r@@GLIBC_2.2.5 + 57: 0000000000037690 79 FUNC GLOBAL DEFAULT 12 sighold@@GLIBC_2.2.5 + 58: 00000000000e3880 33 FUNC GLOBAL DEFAULT 12 __sched_getparam@@GLIBC_2.2.5 + 59: 0000000000088ed0 27 FUNC GLOBAL DEFAULT 12 __default_morecore@@GLIBC_2.2.5 + 60: 000000000011fb00 73 FUNC GLOBAL DEFAULT 12 iruserok@@GLIBC_2.2.5 + 61: 00000000000481e0 132 FUNC GLOBAL DEFAULT 12 cuserid@@GLIBC_2.2.5 + 62: 0000000000035760 36 FUNC WEAK DEFAULT 12 isnan@@GLIBC_2.2.5 + 63: 000000000003a760 228 FUNC WEAK DEFAULT 12 setstate_r@@GLIBC_2.2.5 + 64: 00000000000a8d20 117 FUNC GLOBAL DEFAULT 12 wmemset@@GLIBC_2.2.5 + 65: 000000000007a2a0 16 FUNC GLOBAL DEFAULT 12 _IO_file_stat@@GLIBC_2.2.5 + 66: 0000000000096ad0 971 FUNC WEAK DEFAULT 12 argz_replace@@GLIBC_2.2.5 + 67: 00000000000c8b20 82 FUNC WEAK DEFAULT 12 globfree64@@GLIBC_2.2.5 + 68: 000000000010c140 20 FUNC WEAK DEFAULT 12 argp_usage@@GLIBC_2.2.5 + 69: 00000000000ff5f0 33 FUNC GLOBAL DEFAULT 12 timerfd_gettime@@GLIBC_2.8 + 70: 000000000018d38c 4 OBJECT GLOBAL DEFAULT 15 _sys_nerr@@GLIBC_2.12 + 71: 000000000018d398 4 OBJECT GLOBAL DEFAULT 15 _sys_nerr@GLIBC_2.4 + 72: 000000000018d394 4 OBJECT GLOBAL DEFAULT 15 _sys_nerr@GLIBC_2.3 + 73: 000000000008b0a0 44 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_copy_string@@GLIBC_PRIVATE + 74: 000000000018d390 4 OBJECT GLOBAL DEFAULT 15 _sys_nerr@GLIBC_2.2.5 + 75: 00000000000fef90 33 FUNC GLOBAL DEFAULT 12 clock_adjtime@@GLIBC_2.14 + 76: 00000000003ccd84 4 OBJECT GLOBAL DEFAULT 34 getdate_err@@GLIBC_2.2.5 + 77: 00000000000967b0 76 FUNC WEAK DEFAULT 12 argz_next@@GLIBC_2.2.5 + 78: 00000000000c5a30 749 FUNC GLOBAL DEFAULT 12 __fork@@GLIBC_2.2.5 + 79: 0000000000103ab0 758 FUNC GLOBAL DEFAULT 12 getspnam_r@@GLIBC_2.2.5 + 80: 00000000000e3910 33 FUNC GLOBAL DEFAULT 12 __sched_yield@@GLIBC_2.2.5 + 81: 00000000000b4c60 10 FUNC GLOBAL DEFAULT 12 __gmtime_r@@GLIBC_2.2.5 + 82: 0000000000043a70 263 FUNC GLOBAL DEFAULT 12 l64a@@GLIBC_2.2.5 + 83: 000000000007b990 180 FUNC GLOBAL DEFAULT 12 _IO_file_attach@@GLIBC_2.2.5 + 84: 00000000000c0360 24 FUNC WEAK DEFAULT 12 wcsftime_l@@GLIBC_2.3 + 85: 000000000006fdd0 407 FUNC WEAK DEFAULT 12 gets@@GLIBC_2.2.5 + 86: 000000000006e6b0 317 FUNC WEAK DEFAULT 12 fflush@@GLIBC_2.2.5 + 87: 0000000000128be0 77 FUNC GLOBAL DEFAULT 12 _authenticate@@GLIBC_2.2.5 + 88: 000000000011d140 326 FUNC GLOBAL DEFAULT 12 getrpcbyname@@GLIBC_2.2.5 + 89: 00000000000794e0 41 FUNC GLOBAL DEFAULT 12 putc_unlocked@@GLIBC_2.2.5 + 90: 00000000000f9e10 12 FUNC GLOBAL DEFAULT 12 hcreate@@GLIBC_2.2.5 + 91: 000000000008c850 53 IFUNC GLOBAL DEFAULT 12 strcpy@@GLIBC_2.2.5 + 92: 0000000000043990 210 FUNC GLOBAL DEFAULT 12 a64l@@GLIBC_2.2.5 + 93: 0000000000134ec0 58 FUNC GLOBAL DEFAULT 12 xdr_long@@GLIBC_2.2.5 + 94: 00000000000366b0 131 FUNC WEAK DEFAULT 12 sigsuspend@@GLIBC_2.2.5 + 95: 0000000000022310 2 FUNC GLOBAL DEFAULT 12 __libc_init_first@@GLIBC_2.2.5 + 96: 0000000000100420 33 FUNC WEAK DEFAULT 12 shmget@@GLIBC_2.2.5 + 97: 0000000000075dd0 332 FUNC GLOBAL DEFAULT 12 _IO_wdo_write@@GLIBC_2.2.5 + 98: 000000000006bd90 45 FUNC GLOBAL DEFAULT 12 getw@@GLIBC_2.2.5 + 99: 00000000000f5e20 525 FUNC GLOBAL DEFAULT 12 gethostid@@GLIBC_2.2.5 + 100: 000000000003a1b0 17 FUNC GLOBAL DEFAULT 12 __cxa_at_quick_exit@@GLIBC_2.10 + 101: 0000000000096270 47 IFUNC GLOBAL DEFAULT 12 __rawmemchr@@GLIBC_2.2.5 + 102: 000000000006be90 77 FUNC WEAK DEFAULT 12 flockfile@@GLIBC_2.2.5 + 103: 00000000000b3250 112 FUNC WEAK DEFAULT 12 wcsncasecmp_l@@GLIBC_2.3 + 104: 0000000000096590 43 FUNC WEAK DEFAULT 12 argz_add@@GLIBC_2.2.5 + 105: 00000000000ff1d0 33 FUNC GLOBAL DEFAULT 12 inotify_init1@@GLIBC_2.9 + 106: 0000000000114df0 766 FUNC GLOBAL DEFAULT 12 __backtrace_symbols@@GLIBC_2.2.5 + 107: 000000000007c1e0 605 FUNC GLOBAL DEFAULT 12 _IO_un_link@@GLIBC_2.2.5 + 108: 0000000000077dd0 343 FUNC WEAK DEFAULT 12 vasprintf@@GLIBC_2.2.5 + 109: 00000000000a9dc0 16 FUNC GLOBAL DEFAULT 12 __wcstod_internal@@GLIBC_2.2.5 + 110: 000000000012e440 574 FUNC GLOBAL DEFAULT 12 authunix_create@@GLIBC_2.2.5 + 111: 00000000001019b0 91 FUNC GLOBAL DEFAULT 12 _mcount@@GLIBC_2.2.5 + 112: 0000000000117fd0 48 FUNC GLOBAL DEFAULT 12 __wcstombs_chk@@GLIBC_2.4 + 113: 00000000000a8cc0 55 IFUNC GLOBAL DEFAULT 12 wmemcmp@@GLIBC_2.2.5 + 114: 0000000000126660 360 FUNC GLOBAL DEFAULT 12 __netlink_assert_response@@GLIBC_PRIVATE + 115: 00000000000b4c60 10 FUNC WEAK DEFAULT 12 gmtime_r@@GLIBC_2.2.5 + 116: 00000000000ef7d0 33 FUNC WEAK DEFAULT 12 fchmod@@GLIBC_2.2.5 + 117: 0000000000116040 417 FUNC GLOBAL DEFAULT 12 __printf_chk@@GLIBC_2.3.4 + 118: 00000000000782e0 222 FUNC WEAK DEFAULT 12 obstack_vprintf@@GLIBC_2.2.5 + 119: 0000000000036770 316 FUNC WEAK DEFAULT 12 sigwait@@GLIBC_2.2.5 + 120: 00000000000c27e0 162 FUNC GLOBAL DEFAULT 12 setgrent@@GLIBC_2.2.5 + 121: 0000000000117c40 372 FUNC GLOBAL DEFAULT 12 __fgetws_chk@@GLIBC_2.4 + 122: 000000000010c910 334 FUNC GLOBAL DEFAULT 12 __register_atfork@@GLIBC_2.3.2 + 123: 0000000000102c60 82 FUNC WEAK DEFAULT 12 iswctype_l@@GLIBC_2.3 + 124: 00000000001023a0 133 FUNC WEAK DEFAULT 12 wctrans@@GLIBC_2.2.5 + 125: 00000000000f5c60 33 FUNC GLOBAL DEFAULT 12 acct@@GLIBC_2.2.5 + 126: 0000000000039d20 23 FUNC GLOBAL DEFAULT 12 exit@@GLIBC_2.2.5 + 127: 0000000000048600 22447 FUNC GLOBAL DEFAULT 12 _IO_vfprintf@@GLIBC_2.2.5 + 128: 00000000000c60a0 448 FUNC GLOBAL DEFAULT 12 execl@@GLIBC_2.2.5 + 129: 00000000000e0df0 14 FUNC WEAK DEFAULT 12 re_set_syntax@@GLIBC_2.2.5 + 130: 0000000000118a40 5 FUNC GLOBAL DEFAULT 12 htonl@@GLIBC_2.2.5 + 131: 00000000000ecb70 5783 FUNC GLOBAL DEFAULT 12 wordexp@@GLIBC_2.2.5 + 132: 000000000011bbd0 161 FUNC GLOBAL DEFAULT 12 endprotoent@@GLIBC_2.2.5 + 133: 000000000011b760 758 FUNC GLOBAL DEFAULT 12 getprotobynumber_r@@GLIBC_2.2.5 + 134: 0000000000035720 53 FUNC WEAK DEFAULT 12 isinf@@GLIBC_2.2.5 + 135: 000000000002f2c0 13 FUNC GLOBAL DEFAULT 12 __assert@@GLIBC_2.2.5 + 136: 00000000000793d0 4 FUNC GLOBAL DEFAULT 12 clearerr_unlocked@@GLIBC_2.2.5 + 137: 00000000000ce3d0 875 FUNC GLOBAL DEFAULT 12 fnmatch@@GLIBC_2.2.5 + 138: 000000000012b1c0 27 FUNC GLOBAL DEFAULT 12 xdr_keybuf@@GLIBC_2.2.5 + 139: 00000000000fec60 25 FUNC GLOBAL DEFAULT 12 gnu_dev_major@@GLIBC_2.3.3 + 140: 000000000002f5a0 19 FUNC GLOBAL DEFAULT 12 __islower_l@@GLIBC_2.2.5 + 141: 00000000000c0fa0 216 FUNC WEAK DEFAULT 12 readdir@@GLIBC_2.2.5 + 142: 0000000000135f60 50 FUNC GLOBAL DEFAULT 12 xdr_uint32_t@@GLIBC_2.2.5 + 143: 0000000000118a50 7 FUNC GLOBAL DEFAULT 12 htons@@GLIBC_2.2.5 + 144: 00000000000c7470 577 FUNC WEAK DEFAULT 12 pathconf@@GLIBC_2.2.5 + 145: 00000000000376e0 79 FUNC GLOBAL DEFAULT 12 sigrelse@@GLIBC_2.2.5 + 146: 000000000003ae60 70 FUNC WEAK DEFAULT 12 seed48_r@@GLIBC_2.2.5 + 147: 000000000006c740 1390 FUNC GLOBAL DEFAULT 12 psiginfo@@GLIBC_2.10 + 148: 00000000001136a0 1336 FUNC GLOBAL DEFAULT 12 __nss_hostname_digits_dots@@GLIBC_2.2.5 + 149: 00000000000c5ed0 15 FUNC GLOBAL DEFAULT 12 execv@@GLIBC_2.2.5 + 150: 0000000000053590 143 FUNC GLOBAL DEFAULT 12 sprintf@@GLIBC_2.2.5 + 151: 0000000000077b20 256 FUNC GLOBAL DEFAULT 12 _IO_putc@@GLIBC_2.2.5 + 152: 00000000000ff2c0 33 FUNC GLOBAL DEFAULT 12 nfsservctl@@GLIBC_2.2.5 + 153: 00000000000972e0 383 FUNC GLOBAL DEFAULT 12 envz_merge@@GLIBC_2.2.5 + 154: 00000000000bdfe0 24 FUNC WEAK DEFAULT 12 strftime_l@@GLIBC_2.3 + 155: 000000000002ca20 2123 FUNC GLOBAL DEFAULT 12 setlocale@@GLIBC_2.2.5 + 156: 0000000000095790 647 FUNC GLOBAL DEFAULT 12 memfrob@@GLIBC_2.2.5 + 157: 00000000000a9220 442 FUNC WEAK DEFAULT 12 mbrtowc@@GLIBC_2.2.5 + 158: 000000000003a480 106 FUNC WEAK DEFAULT 12 srand@@GLIBC_2.2.5 + 159: 0000000000102620 129 FUNC WEAK DEFAULT 12 iswcntrl_l@@GLIBC_2.3 + 160: 000000000013b510 145 FUNC WEAK DEFAULT 12 getutid_r@@GLIBC_2.2.5 + 161: 00000000000c6420 1398 FUNC WEAK DEFAULT 12 execvpe@@GLIBC_2.11 + 162: 0000000000101bb0 149 FUNC WEAK DEFAULT 12 iswblank@@GLIBC_2.2.5 + 163: 000000000008a350 2 FUNC GLOBAL DEFAULT 12 tr_break@@GLIBC_2.2.5 + 164: 000000000010cc90 90 FUNC GLOBAL DEFAULT 12 __libc_pthread_init@@GLIBC_PRIVATE + 165: 0000000000117ae0 273 FUNC GLOBAL DEFAULT 12 __vfwprintf_chk@@GLIBC_2.4 + 166: 0000000000071c60 142 FUNC GLOBAL DEFAULT 12 fgetws_unlocked@@GLIBC_2.2.5 + 167: 00000000000efb90 90 FUNC WEAK DEFAULT 12 __write@@GLIBC_2.2.5 + 168: 00000000000f5b10 96 FUNC GLOBAL DEFAULT 12 __select@@GLIBC_2.2.5 + 169: 00000000001021e0 93 FUNC GLOBAL DEFAULT 12 towlower@@GLIBC_2.2.5 + 170: 00000000000f0ef0 675 FUNC WEAK DEFAULT 12 ttyname_r@@GLIBC_2.2.5 + 171: 000000000006ece0 10 FUNC GLOBAL DEFAULT 12 fopen@@GLIBC_2.2.5 + 172: 00000000000e81d0 442 FUNC GLOBAL DEFAULT 12 gai_strerror@@GLIBC_2.2.5 + 173: 0000000000103190 423 FUNC GLOBAL DEFAULT 12 fgetspent@@GLIBC_2.2.5 + 174: 000000000008eb50 516 FUNC GLOBAL DEFAULT 12 strsignal@@GLIBC_2.2.5 + 175: 00000000000a8600 230 FUNC WEAK DEFAULT 12 wcsncpy@@GLIBC_2.2.5 + 176: 000000000008d020 53 IFUNC GLOBAL DEFAULT 12 strncmp@@GLIBC_2.2.5 + 177: 000000000011b240 926 FUNC GLOBAL DEFAULT 12 getnetbyname_r@@GLIBC_2.2.5 + 178: 000000000011bc80 215 FUNC GLOBAL DEFAULT 12 getprotoent_r@@GLIBC_2.2.5 + 179: 0000000000133980 237 FUNC GLOBAL DEFAULT 12 svcfd_create@@GLIBC_2.2.5 + 180: 00000000000f77f0 33 FUNC WEAK DEFAULT 12 ftruncate@@GLIBC_2.2.5 + 181: 000000000012b2f0 97 FUNC GLOBAL DEFAULT 12 xdr_unixcred@@GLIBC_2.2.5 + 182: 0000000000031660 16 FUNC WEAK DEFAULT 12 dcngettext@@GLIBC_2.2.5 + 183: 0000000000127be0 98 FUNC GLOBAL DEFAULT 12 xdr_rmtcallres@@GLIBC_2.2.5 + 184: 0000000000070740 480 FUNC GLOBAL DEFAULT 12 _IO_puts@@GLIBC_2.2.5 + 185: 000000000010e160 244 FUNC GLOBAL DEFAULT 12 inet_nsap_addr@@GLIBC_2.2.5 + 186: 000000000010cfc0 297 FUNC WEAK DEFAULT 12 inet_aton@@GLIBC_2.2.5 + 187: 00000000000f82e0 249 FUNC GLOBAL DEFAULT 12 ttyslot@@GLIBC_2.2.5 + 188: 00000000003cd080 8 OBJECT GLOBAL DEFAULT 34 __rcmd_errstr@@GLIBC_2.2.5 + 189: 00000000000ecb10 92 FUNC GLOBAL DEFAULT 12 wordfree@@GLIBC_2.2.5 + 190: 00000000000ee3c0 120 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_addclose@@GLIBC_2.2.5 + 191: 00000000000c1740 65 FUNC GLOBAL DEFAULT 12 getdirentries@@GLIBC_2.2.5 + 192: 000000000007e370 86 FUNC GLOBAL DEFAULT 12 _IO_unsave_markers@@GLIBC_2.2.5 + 193: 000000000007cef0 84 FUNC GLOBAL DEFAULT 12 _IO_default_uflow@@GLIBC_2.2.5 + 194: 000000000003b930 16 FUNC GLOBAL DEFAULT 12 __strtold_internal@@GLIBC_2.2.5 + 195: 00000000001171f0 57 FUNC GLOBAL DEFAULT 12 __wcpcpy_chk@@GLIBC_2.4 + 196: 00000000003c72a0 4 OBJECT GLOBAL DEFAULT 33 optind@@GLIBC_2.2.5 + 197: 0000000000099870 158 FUNC GLOBAL DEFAULT 12 __strcpy_small@@GLIBC_2.2.5 + 198: 000000000003abc0 32 FUNC GLOBAL DEFAULT 12 erand48@@GLIBC_2.2.5 + 199: 00000000000c3be0 497 FUNC GLOBAL DEFAULT 12 __merge_grp@@GLIBC_PRIVATE + 200: 00000000000aa710 10 FUNC WEAK DEFAULT 12 wcstoul_l@@GLIBC_2.3 + 201: 00000000000fee90 33 FUNC WEAK DEFAULT 12 modify_ldt@@GLIBC_2.2.5 + 202: 00000000003ccdf0 8 OBJECT GLOBAL DEFAULT 34 argp_program_version@@GLIBC_2.2.5 + 203: 0000000000086000 352 FUNC GLOBAL DEFAULT 12 __libc_memalign@@GLIBC_2.2.5 + 204: 00000000000ffce0 76 FUNC GLOBAL DEFAULT 12 isfdtype@@GLIBC_2.2.5 + 205: 00000000000f6790 439 FUNC GLOBAL DEFAULT 12 getfsfile@@GLIBC_2.2.5 + 206: 00000000000999b0 53 FUNC GLOBAL DEFAULT 12 __strcspn_c1@@GLIBC_2.2.5 + 207: 00000000000999f0 69 FUNC GLOBAL DEFAULT 12 __strcspn_c2@@GLIBC_2.2.5 + 208: 000000000003acb0 12 FUNC GLOBAL DEFAULT 12 lcong48@@GLIBC_2.2.5 + 209: 00000000000c41f0 136 FUNC GLOBAL DEFAULT 12 getpwent@@GLIBC_2.2.5 + 210: 0000000000099a40 69 FUNC GLOBAL DEFAULT 12 __strcspn_c3@@GLIBC_2.2.5 + 211: 00000000000e18b0 270 FUNC WEAK DEFAULT 12 re_match_2@@GLIBC_2.2.5 + 212: 0000000000112c40 296 FUNC GLOBAL DEFAULT 12 __nss_next2@@GLIBC_PRIVATE + 213: 00000000003c9a30 8 OBJECT WEAK DEFAULT 34 __free_hook@@GLIBC_2.2.5 + 214: 00000000000c2560 547 FUNC GLOBAL DEFAULT 12 putgrent@@GLIBC_2.2.5 + 215: 000000000011cee0 215 FUNC GLOBAL DEFAULT 12 getservent_r@@GLIBC_2.2.5 + 216: 00000000000969d0 68 FUNC WEAK DEFAULT 12 argz_stringify@@GLIBC_2.2.5 + 217: 0000000000076d70 204 FUNC GLOBAL DEFAULT 12 open_wmemstream@@GLIBC_2.4 + 218: 00000000001251c0 260 FUNC GLOBAL DEFAULT 12 inet6_opt_append@@GLIBC_2.5 + 219: 00000000001149a0 62 FUNC WEAK DEFAULT 12 clock_getcpuclockid@@GLIBC_2.17 + 220: 000000000011cd80 165 FUNC GLOBAL DEFAULT 12 setservent@@GLIBC_2.2.5 + 221: 00000000000ff590 33 FUNC GLOBAL DEFAULT 12 timerfd_create@@GLIBC_2.8 + 222: 000000000008e8f0 54 IFUNC GLOBAL DEFAULT 12 strrchr@@GLIBC_2.2.5 + 223: 000000000013ca20 268 FUNC WEAK DEFAULT 12 posix_openpt@@GLIBC_2.2.5 + 224: 0000000000132c30 70 FUNC GLOBAL DEFAULT 12 svcerr_systemerr@@GLIBC_2.2.5 + 225: 0000000000079480 86 FUNC GLOBAL DEFAULT 12 fflush_unlocked@@GLIBC_2.2.5 + 226: 000000000002f5c0 19 FUNC GLOBAL DEFAULT 12 __isgraph_l@@GLIBC_2.2.5 + 227: 0000000000117420 128 FUNC GLOBAL DEFAULT 12 __swprintf_chk@@GLIBC_2.4 + 228: 0000000000072950 21 FUNC GLOBAL DEFAULT 12 vwprintf@@GLIBC_2.2.5 + 229: 00000000000c5560 144 FUNC WEAK DEFAULT 12 wait@@GLIBC_2.2.5 + 230: 0000000000070f50 354 FUNC WEAK DEFAULT 12 setbuffer@@GLIBC_2.2.5 + 231: 0000000000087cb0 112 FUNC WEAK DEFAULT 12 posix_memalign@@GLIBC_2.2.5 + 232: 00000000000ef170 25 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setschedpolicy@@GLIBC_2.2.5 + 233: 0000000000124a40 388 FUNC GLOBAL DEFAULT 12 getipv4sourcefilter@@GLIBC_2.3.4 + 234: 0000000000117950 308 FUNC GLOBAL DEFAULT 12 __vwprintf_chk@@GLIBC_2.4 + 235: 00000000001185f0 66 FUNC GLOBAL DEFAULT 12 __longjmp_chk@@GLIBC_2.11 + 236: 000000000006b830 91 FUNC GLOBAL DEFAULT 12 tempnam@@GLIBC_2.2.5 + 237: 000000000002f2f0 26 FUNC GLOBAL DEFAULT 12 isalpha@@GLIBC_2.2.5 + 238: 000000000008af90 104 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_alloc_array@@GLIBC_PRIVATE + 239: 000000000003e2b0 10 FUNC WEAK DEFAULT 12 strtof_l@@GLIBC_2.3 + 240: 000000000013e370 9 FUNC GLOBAL DEFAULT 12 regexec@GLIBC_2.2.5 + 241: 00000000000e1750 283 FUNC GLOBAL DEFAULT 12 regexec@@GLIBC_2.3.4 + 242: 00000000000feb30 90 FUNC WEAK DEFAULT 12 llseek@@GLIBC_2.2.5 + 243: 00000000000f60e0 20 FUNC GLOBAL DEFAULT 12 revoke@@GLIBC_2.2.5 + 244: 00000000000e1870 32 FUNC WEAK DEFAULT 12 re_match@@GLIBC_2.2.5 + 245: 00000000000faa20 1360 FUNC WEAK DEFAULT 12 tdelete@@GLIBC_2.2.5 + 246: 00000000000f02d0 33 FUNC WEAK DEFAULT 12 pipe@@GLIBC_2.2.5 + 247: 00000000000f12b0 42 FUNC GLOBAL DEFAULT 12 readlinkat@@GLIBC_2.4 + 248: 0000000000117110 51 FUNC GLOBAL DEFAULT 12 __wctomb_chk@@GLIBC_2.4 + 249: 00000000000fd2d0 12 FUNC WEAK DEFAULT 12 get_avphys_pages@@GLIBC_2.2.5 + 250: 000000000012e680 431 FUNC GLOBAL DEFAULT 12 authunix_create_default@@GLIBC_2.2.5 + 251: 0000000000077030 193 FUNC GLOBAL DEFAULT 12 _IO_ferror@@GLIBC_2.2.5 + 252: 000000000011d2d0 318 FUNC GLOBAL DEFAULT 12 getrpcbynumber@@GLIBC_2.2.5 + 253: 00000000000c77e0 1775 FUNC GLOBAL DEFAULT 12 __sysconf@@GLIBC_2.2.5 + 254: 00000000000965c0 69 FUNC WEAK DEFAULT 12 argz_count@@GLIBC_2.2.5 + 255: 000000000008cb70 65 FUNC GLOBAL DEFAULT 12 __strdup@@GLIBC_2.2.5 + 256: 0000000000116e20 45 FUNC GLOBAL DEFAULT 12 __readlink_chk@@GLIBC_2.4 + 257: 0000000000052650 399 FUNC WEAK DEFAULT 12 register_printf_modifier@@GLIBC_2.10 + 258: 000000000010f420 71 FUNC GLOBAL DEFAULT 12 __res_ninit@@GLIBC_2.2.5 + 259: 00000000000f57c0 102 FUNC WEAK DEFAULT 12 setregid@@GLIBC_2.2.5 + 260: 00000000000f4cf0 144 FUNC WEAK DEFAULT 12 tcdrain@@GLIBC_2.2.5 + 261: 0000000000124bd0 377 FUNC GLOBAL DEFAULT 12 setipv4sourcefilter@@GLIBC_2.3.4 + 262: 00000000000a9e00 18 FUNC GLOBAL DEFAULT 12 wcstold@@GLIBC_2.2.5 + 263: 00000000000f4de0 40 FUNC GLOBAL DEFAULT 12 cfmakeraw@@GLIBC_2.2.5 + 264: 0000000000070320 740 FUNC GLOBAL DEFAULT 12 _IO_proc_open@@GLIBC_2.2.5 + 265: 000000000006b500 206 FUNC GLOBAL DEFAULT 12 perror@@GLIBC_2.2.5 + 266: 00000000001003c0 33 FUNC WEAK DEFAULT 12 shmat@@GLIBC_2.2.5 + 267: 00000000000f53f0 129 FUNC GLOBAL DEFAULT 12 __sbrk@@GLIBC_2.2.5 + 268: 000000000007eab0 22 FUNC GLOBAL DEFAULT 12 _IO_str_pbackfail@@GLIBC_2.2.5 + 269: 00000000003c8000 16 OBJECT GLOBAL DEFAULT 33 __tzname@@GLIBC_2.2.5 + 270: 0000000000043b80 279 FUNC GLOBAL DEFAULT 12 rpmatch@@GLIBC_2.2.5 + 271: 0000000000117f00 16 FUNC GLOBAL DEFAULT 12 __getlogin_r_chk@@GLIBC_2.4 + 272: 000000000006c630 143 FUNC GLOBAL DEFAULT 12 __isoc99_sscanf@@GLIBC_2.7 + 273: 00000000000ef6b0 103 FUNC WEAK DEFAULT 12 statvfs64@@GLIBC_2.2.5 + 274: 00000000003c8010 8 OBJECT GLOBAL DEFAULT 33 __progname@@GLIBC_2.2.5 + 275: 00000000000875a0 442 FUNC WEAK DEFAULT 12 pvalloc@@GLIBC_2.2.5 + 276: 0000000000132220 493 FUNC GLOBAL DEFAULT 12 __libc_rpc_getport@@GLIBC_PRIVATE + 277: 000000000002fbf0 15 FUNC WEAK DEFAULT 12 dcgettext@@GLIBC_2.2.5 + 278: 00000000000533c0 143 FUNC WEAK DEFAULT 12 _IO_fprintf@@GLIBC_2.2.5 + 279: 0000000000075f20 651 FUNC GLOBAL DEFAULT 12 _IO_wfile_overflow@@GLIBC_2.2.5 + 280: 00000000001292b0 454 FUNC GLOBAL DEFAULT 12 registerrpc@@GLIBC_2.2.5 + 281: 000000000008ac70 279 FUNC GLOBAL DEFAULT 12 __libc_dynarray_emplace_enlarge@@GLIBC_PRIVATE + 282: 00000000000a9d70 18 FUNC WEAK DEFAULT 12 wcstoll@@GLIBC_2.2.5 + 283: 00000000000ee770 6 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setpgroup@@GLIBC_2.2.5 + 284: 00000000003ca468 8 OBJECT WEAK DEFAULT 34 _environ@@GLIBC_2.2.5 + 285: 00000000000f9c10 460 FUNC GLOBAL DEFAULT 12 qecvt_r@@GLIBC_2.2.5 + 286: 00000000000fee60 33 FUNC GLOBAL DEFAULT 12 __arch_prctl@@GLIBC_2.2.5 + 287: 00000000000f9640 462 FUNC GLOBAL DEFAULT 12 ecvt_r@@GLIBC_2.2.5 + 288: 000000000007ba50 418 FUNC GLOBAL DEFAULT 12 _IO_do_write@@GLIBC_2.2.5 + 289: 000000000013d200 5 FUNC GLOBAL DEFAULT 12 getutxid@@GLIBC_2.2.5 + 290: 00000000000a7250 59 FUNC WEAK DEFAULT 12 wcscat@@GLIBC_2.2.5 + 291: 000000000007c8c0 145 FUNC GLOBAL DEFAULT 12 _IO_switch_to_get_mode@@GLIBC_2.2.5 + 292: 00000000001186f0 23 FUNC GLOBAL DEFAULT 12 __fdelt_warn@@GLIBC_2.15 + 293: 00000000000a93e0 435 FUNC WEAK DEFAULT 12 wcrtomb@@GLIBC_2.2.5 + 294: 00000000003cd180 8 OBJECT GLOBAL DEFAULT 34 __key_gendes_LOCAL@@GLIBC_2.2.5 + 295: 00000000000f4800 96 FUNC GLOBAL DEFAULT 12 sync_file_range@@GLIBC_2.6 + 296: 0000000000035db0 8 FUNC GLOBAL DEFAULT 12 __signbitf@@GLIBC_2.2.5 + 297: 000000000011a710 403 FUNC GLOBAL DEFAULT 12 getnetbyaddr@@GLIBC_2.2.5 + 298: 00000000003ccd30 8 OBJECT GLOBAL DEFAULT 34 _obstack@GLIBC_2.2.5 + 299: 00000000000ff820 90 FUNC WEAK DEFAULT 12 connect@@GLIBC_2.2.5 + 300: 00000000000a86f0 61 FUNC GLOBAL DEFAULT 12 wcspbrk@@GLIBC_2.2.5 + 301: 0000000000035760 36 FUNC GLOBAL DEFAULT 12 __isnan@@GLIBC_2.2.5 + 302: 0000000000000010 4 TLS GLOBAL DEFAULT 23 errno@@GLIBC_PRIVATE + 303: 00000000000ef980 47 FUNC GLOBAL DEFAULT 12 __open64_2@@GLIBC_2.7 + 304: 00000000000361e0 59 FUNC WEAK DEFAULT 12 _longjmp@@GLIBC_2.2.5 + 305: 0000000000097040 201 FUNC GLOBAL DEFAULT 12 envz_remove@@GLIBC_2.2.5 + 306: 0000000000031680 22 FUNC WEAK DEFAULT 12 ngettext@@GLIBC_2.2.5 + 307: 0000000000035d40 101 FUNC WEAK DEFAULT 12 ldexpf@@GLIBC_2.2.5 + 308: 0000000000077130 44 FUNC WEAK DEFAULT 12 fileno_unlocked@@GLIBC_2.2.5 + 309: 00000000003ccdb8 8 OBJECT GLOBAL DEFAULT 34 error_print_progname@@GLIBC_2.2.5 + 310: 00000000000360f0 19 FUNC GLOBAL DEFAULT 12 __signbitl@@GLIBC_2.2.5 + 311: 000000000018c990 16 OBJECT WEAK DEFAULT 15 in6addr_any@@GLIBC_2.2.5 + 312: 00000000000f7640 157 FUNC GLOBAL DEFAULT 12 lutimes@@GLIBC_2.3 + 313: 0000000000090140 53 IFUNC WEAK DEFAULT 12 stpncpy@@GLIBC_2.2.5 + 314: 00000000000f91d0 33 FUNC GLOBAL DEFAULT 12 munlock@@GLIBC_2.2.5 + 315: 00000000000f77f0 33 FUNC WEAK DEFAULT 12 ftruncate64@@GLIBC_2.2.5 + 316: 00000000000c4440 318 FUNC GLOBAL DEFAULT 12 getpwuid@@GLIBC_2.2.5 + 317: 000000000013d300 465 FUNC WEAK DEFAULT 12 dl_iterate_phdr@@GLIBC_2.2.5 + 318: 0000000000131790 215 FUNC GLOBAL DEFAULT 12 key_get_conv@@GLIBC_2.2.5 + 319: 0000000000112d70 157 FUNC GLOBAL DEFAULT 12 __nss_disable_nscd@@GLIBC_PRIVATE + 320: 00000000000c4720 212 FUNC GLOBAL DEFAULT 12 getpwent_r@@GLIBC_2.2.5 + 321: 00000000000f8f90 183 FUNC WEAK DEFAULT 12 mmap64@@GLIBC_2.2.5 + 322: 00000000000f4100 36 FUNC GLOBAL DEFAULT 12 sendfile@@GLIBC_2.2.5 + 323: 00000000001254c0 83 FUNC GLOBAL DEFAULT 12 inet6_rth_init@@GLIBC_2.5 + 324: 0000000000036050 146 FUNC WEAK DEFAULT 12 ldexpl@@GLIBC_2.2.5 + 325: 0000000000125360 107 FUNC GLOBAL DEFAULT 12 inet6_opt_next@@GLIBC_2.5 + 326: 0000000000037310 60 FUNC GLOBAL DEFAULT 12 __libc_allocate_rtsig_private@@GLIBC_PRIVATE + 327: 0000000000072250 183 FUNC GLOBAL DEFAULT 12 ungetwc@@GLIBC_2.2.5 + 328: 000000000012a4e0 154 FUNC GLOBAL DEFAULT 12 ecb_crypt@@GLIBC_2.2.5 + 329: 00000000000b1300 10 FUNC GLOBAL DEFAULT 12 __wcstof_l@@GLIBC_2.2.5 + 330: 00000000000c13f0 19 FUNC GLOBAL DEFAULT 12 versionsort@@GLIBC_2.2.5 + 331: 00000000001350e0 188 FUNC GLOBAL DEFAULT 12 xdr_longlong_t@@GLIBC_2.2.5 + 332: 00000000000fa9d0 80 FUNC WEAK DEFAULT 12 tfind@@GLIBC_2.2.5 + 333: 0000000000053450 161 FUNC GLOBAL DEFAULT 12 _IO_printf@@GLIBC_2.2.5 + 334: 00000000000967b0 76 FUNC GLOBAL DEFAULT 12 __argz_next@@GLIBC_2.2.5 + 335: 00000000000a8d00 9 FUNC WEAK DEFAULT 12 wmemcpy@@GLIBC_2.2.5 + 336: 00000000000fffd0 166 FUNC GLOBAL DEFAULT 12 recvmmsg@@GLIBC_2.12 + 337: 00000000000ef600 77 FUNC GLOBAL DEFAULT 12 __fxstatat64@@GLIBC_2.4 + 338: 00000000000ee570 135 FUNC GLOBAL DEFAULT 12 posix_spawnattr_init@@GLIBC_2.2.5 + 339: 0000000000036cf0 29 FUNC GLOBAL DEFAULT 12 __sigismember@@GLIBC_2.2.5 + 340: 00000000000f0ae0 144 FUNC GLOBAL DEFAULT 12 get_current_dir_name@@GLIBC_2.2.5 + 341: 0000000000100360 36 FUNC WEAK DEFAULT 12 semctl@@GLIBC_2.2.5 + 342: 0000000000079400 41 FUNC GLOBAL DEFAULT 12 fputc_unlocked@@GLIBC_2.2.5 + 343: 00000000000fc570 21 FUNC GLOBAL DEFAULT 12 verr@@GLIBC_2.2.5 + 344: 00000000000a95a0 33 FUNC WEAK DEFAULT 12 mbsrtowcs@@GLIBC_2.2.5 + 345: 000000000011b5e0 318 FUNC GLOBAL DEFAULT 12 getprotobynumber@@GLIBC_2.2.5 + 346: 0000000000104ca0 423 FUNC GLOBAL DEFAULT 12 fgetsgent@@GLIBC_2.10 + 347: 000000000012a1a0 265 FUNC GLOBAL DEFAULT 12 getsecretkey@@GLIBC_2.2.5 + 348: 0000000000114100 116 FUNC GLOBAL DEFAULT 12 __nss_services_lookup2@@GLIBC_PRIVATE + 349: 00000000000f1310 40 FUNC GLOBAL DEFAULT 12 unlinkat@@GLIBC_2.4 + 350: 00000000001716a0 50 FUNC GLOBAL DEFAULT 14 __libc_thread_freeres@@GLIBC_PRIVATE + 351: 000000000002f520 18 FUNC WEAK DEFAULT 12 isalnum_l@@GLIBC_2.3 + 352: 000000000012a340 58 FUNC GLOBAL DEFAULT 12 xdr_authdes_verf@@GLIBC_2.2.5 + 353: 00000000003c8640 224 OBJECT GLOBAL DEFAULT 33 _IO_2_1_stdin_@@GLIBC_2.2.5 + 354: 00000000001186f0 23 FUNC GLOBAL DEFAULT 12 __fdelt_chk@@GLIBC_2.15 + 355: 000000000003b8d0 16 FUNC GLOBAL DEFAULT 12 __strtof_internal@@GLIBC_2.2.5 + 356: 00000000000c0f70 44 FUNC WEAK DEFAULT 12 closedir@@GLIBC_2.2.5 + 357: 00000000000c2050 214 FUNC GLOBAL DEFAULT 12 initgroups@@GLIBC_2.2.5 + 358: 0000000000118b10 107 FUNC GLOBAL DEFAULT 12 inet_ntoa@@GLIBC_2.2.5 + 359: 00000000000b1300 10 FUNC WEAK DEFAULT 12 wcstof_l@@GLIBC_2.3 + 360: 000000000002edb0 190 FUNC GLOBAL DEFAULT 12 __freelocale@@GLIBC_2.2.5 + 361: 00000000000c8b80 9373 FUNC WEAK DEFAULT 12 glob64@@GLIBC_2.2.5 + 362: 0000000000117770 398 FUNC GLOBAL DEFAULT 12 __fwprintf_chk@@GLIBC_2.4 + 363: 0000000000127d30 280 FUNC GLOBAL DEFAULT 12 pmap_rmtcall@@GLIBC_2.2.5 + 364: 0000000000077b20 256 FUNC WEAK DEFAULT 12 putc@@GLIBC_2.2.5 + 365: 00000000000c59d0 90 FUNC WEAK DEFAULT 12 nanosleep@@GLIBC_2.2.5 + 366: 00000000001037c0 162 FUNC GLOBAL DEFAULT 12 setspent@@GLIBC_2.2.5 + 367: 00000000000f03c0 33 FUNC WEAK DEFAULT 12 fchdir@@GLIBC_2.2.5 + 368: 0000000000135320 109 FUNC GLOBAL DEFAULT 12 xdr_char@@GLIBC_2.2.5 + 369: 0000000000115680 85 IFUNC GLOBAL DEFAULT 12 __mempcpy_chk@@GLIBC_2.3.4 + 370: 0000000000035720 53 FUNC GLOBAL DEFAULT 12 __isinf@@GLIBC_2.2.5 + 371: 000000000006eeb0 228 FUNC GLOBAL DEFAULT 12 fopencookie@@GLIBC_2.2.5 + 372: 00000000000aa2e0 10 FUNC WEAK DEFAULT 12 wcstoll_l@@GLIBC_2.3 + 373: 000000000006bf00 95 FUNC WEAK DEFAULT 12 ftrylockfile@@GLIBC_2.2.5 + 374: 00000000001217a0 161 FUNC GLOBAL DEFAULT 12 endaliasent@@GLIBC_2.2.5 + 375: 000000000002f540 19 FUNC WEAK DEFAULT 12 isalpha_l@@GLIBC_2.3 + 376: 0000000000073150 456 FUNC GLOBAL DEFAULT 12 _IO_wdefault_pbackfail@@GLIBC_2.2.5 + 377: 00000000000793e0 9 FUNC GLOBAL DEFAULT 12 feof_unlocked@@GLIBC_2.2.5 + 378: 0000000000114300 121 FUNC GLOBAL DEFAULT 12 __nss_passwd_lookup2@@GLIBC_PRIVATE + 379: 000000000002f490 22 FUNC GLOBAL DEFAULT 12 isblank@@GLIBC_2.2.5 + 380: 00000000000f8020 65 FUNC GLOBAL DEFAULT 12 getusershell@@GLIBC_2.2.5 + 381: 0000000000132b40 80 FUNC GLOBAL DEFAULT 12 svc_sendreply@@GLIBC_2.2.5 + 382: 000000000002ee70 95 FUNC WEAK DEFAULT 12 uselocale@@GLIBC_2.3 + 383: 00000000000e19c0 270 FUNC WEAK DEFAULT 12 re_search_2@@GLIBC_2.2.5 + 384: 00000000000c2250 318 FUNC GLOBAL DEFAULT 12 getgrgid@@GLIBC_2.2.5 + 385: 0000000000036c40 167 FUNC GLOBAL DEFAULT 12 siginterrupt@@GLIBC_2.2.5 + 386: 00000000000ff0b0 96 FUNC GLOBAL DEFAULT 12 epoll_wait@@GLIBC_2.3.2 + 387: 0000000000071580 312 FUNC GLOBAL DEFAULT 12 fputwc@@GLIBC_2.2.5 + 388: 00000000000fc960 327 FUNC WEAK DEFAULT 12 error@@GLIBC_2.2.5 + 389: 00000000000ef420 37 FUNC GLOBAL DEFAULT 12 mkfifoat@@GLIBC_2.4 + 390: 00000000000ff110 33 FUNC GLOBAL DEFAULT 12 get_kernel_syms@@GLIBC_2.2.5 + 391: 000000000011d5b0 215 FUNC GLOBAL DEFAULT 12 getrpcent_r@@GLIBC_2.2.5 + 392: 000000000006f4a0 320 FUNC WEAK DEFAULT 12 ftell@@GLIBC_2.2.5 + 393: 000000000010ce80 314 FUNC GLOBAL DEFAULT 12 __inet_aton_exact@@GLIBC_PRIVATE + 394: 000000000006bfb0 415 FUNC GLOBAL DEFAULT 12 __isoc99_scanf@@GLIBC_2.7 + 395: 00000000003cba00 568 OBJECT GLOBAL DEFAULT 34 _res@GLIBC_2.2.5 + 396: 0000000000116d80 45 FUNC GLOBAL DEFAULT 12 __read_chk@@GLIBC_2.4 + 397: 000000000010d210 2177 FUNC GLOBAL DEFAULT 12 inet_ntop@@GLIBC_2.2.5 + 398: 00000000000362b0 158 FUNC WEAK DEFAULT 12 signal@@GLIBC_2.2.5 + 399: 000000000008e8b0 53 IFUNC GLOBAL DEFAULT 12 strncpy@@GLIBC_2.2.5 + 400: 00000000001104a0 152 FUNC GLOBAL DEFAULT 12 __res_nclose@@GLIBC_2.2.5 + 401: 0000000000117e10 160 FUNC GLOBAL DEFAULT 12 __fgetws_unlocked_chk@@GLIBC_2.4 + 402: 00000000000f5a70 103 FUNC GLOBAL DEFAULT 12 getdomainname@@GLIBC_2.2.5 + 403: 00000000000ff2f0 33 FUNC WEAK DEFAULT 12 personality@@GLIBC_2.2.5 + 404: 0000000000070740 480 FUNC WEAK DEFAULT 12 puts@@GLIBC_2.2.5 + 405: 0000000000102a00 130 FUNC GLOBAL DEFAULT 12 __iswupper_l@@GLIBC_2.2.5 + 406: 000000000003a310 38 FUNC GLOBAL DEFAULT 12 mbstowcs@@GLIBC_2.2.5 + 407: 0000000000115e30 167 FUNC GLOBAL DEFAULT 12 __vsprintf_chk@@GLIBC_2.3.4 + 408: 000000000002e560 1704 FUNC GLOBAL DEFAULT 12 __newlocale@@GLIBC_2.2.5 + 409: 00000000000f52a0 54 FUNC GLOBAL DEFAULT 12 getpriority@@GLIBC_2.2.5 + 410: 0000000000044f20 309 FUNC GLOBAL DEFAULT 12 getsubopt@@GLIBC_2.2.5 + 411: 00000000000c5a30 749 FUNC WEAK DEFAULT 12 fork@@GLIBC_2.2.5 + 412: 00000000000f4e10 169 FUNC GLOBAL DEFAULT 12 tcgetsid@@GLIBC_2.2.5 + 413: 000000000006bdc0 47 FUNC GLOBAL DEFAULT 12 putw@@GLIBC_2.2.5 + 414: 00000000000fe9e0 33 FUNC GLOBAL DEFAULT 12 ioperm@@GLIBC_2.2.5 + 415: 00000000000fc430 305 FUNC GLOBAL DEFAULT 12 warnx@@GLIBC_2.2.5 + 416: 0000000000071100 547 FUNC GLOBAL DEFAULT 12 _IO_setvbuf@@GLIBC_2.2.5 + 417: 00000000001277f0 429 FUNC GLOBAL DEFAULT 12 pmap_unset@@GLIBC_2.2.5 + 418: 0000000000102000 153 FUNC WEAK DEFAULT 12 iswspace@@GLIBC_2.2.5 + 419: 000000000013d8d0 50 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper_check@@GLIBC_2.2.5 + 420: 000000000013a8b0 24 FUNC GLOBAL DEFAULT 12 isastream@@GLIBC_2.2.5 + 421: 0000000000072b60 20 FUNC GLOBAL DEFAULT 12 vwscanf@@GLIBC_2.2.5 + 422: 0000000000071cf0 345 FUNC GLOBAL DEFAULT 12 fputws@@GLIBC_2.2.5 + 423: 0000000000036620 43 FUNC WEAK DEFAULT 12 sigprocmask@@GLIBC_2.2.5 + 424: 000000000007d8f0 117 FUNC GLOBAL DEFAULT 12 _IO_sputbackc@@GLIBC_2.2.5 + 425: 000000000003b8c0 10 FUNC WEAK DEFAULT 12 strtoul_l@@GLIBC_2.3 + 426: 00000000000fd650 33 FUNC GLOBAL DEFAULT 12 listxattr@@GLIBC_2.3 + 427: 000000000018cb20 16 OBJECT WEAK DEFAULT 15 in6addr_loopback@@GLIBC_2.2.5 + 428: 00000000000e1600 68 FUNC WEAK DEFAULT 12 regfree@@GLIBC_2.2.5 + 429: 000000000003aeb0 61 FUNC WEAK DEFAULT 12 lcong48_r@@GLIBC_2.2.5 + 430: 00000000000e3880 33 FUNC WEAK DEFAULT 12 sched_getparam@@GLIBC_2.2.5 + 431: 0000000000118ae0 42 FUNC GLOBAL DEFAULT 12 inet_netof@@GLIBC_2.2.5 + 432: 000000000002fc10 15 FUNC WEAK DEFAULT 12 gettext@@GLIBC_2.2.5 + 433: 00000000001270c0 816 FUNC GLOBAL DEFAULT 12 callrpc@@GLIBC_2.2.5 + 434: 00000000000c56e0 161 FUNC WEAK DEFAULT 12 waitid@@GLIBC_2.2.5 + 435: 00000000000f76e0 149 FUNC WEAK DEFAULT 12 futimes@@GLIBC_2.3 + 436: 0000000000074270 197 FUNC GLOBAL DEFAULT 12 _IO_init_wmarker@@GLIBC_2.2.5 + 437: 0000000000036e20 172 FUNC GLOBAL DEFAULT 12 sigfillset@@GLIBC_2.2.5 + 438: 0000000000110850 83 FUNC GLOBAL DEFAULT 12 __resolv_context_get_override@@GLIBC_PRIVATE + 439: 00000000000f62e0 28 FUNC GLOBAL DEFAULT 12 gtty@@GLIBC_2.2.5 + 440: 00000000000b5780 77 IFUNC GLOBAL DEFAULT 12 time@@GLIBC_2.2.5 + 441: 00000000000fef00 33 FUNC WEAK DEFAULT 12 ntp_adjtime@@GLIBC_2.2.5 + 442: 00000000000c2190 136 FUNC GLOBAL DEFAULT 12 getgrent@@GLIBC_2.2.5 + 443: 000000000008ad90 209 FUNC GLOBAL DEFAULT 12 __libc_dynarray_finalize@@GLIBC_PRIVATE + 444: 0000000000085740 214 FUNC GLOBAL DEFAULT 12 __libc_malloc@@GLIBC_2.2.5 + 445: 0000000000117230 16 FUNC GLOBAL DEFAULT 12 __wcsncpy_chk@@GLIBC_2.4 + 446: 00000000000c10b0 368 FUNC WEAK DEFAULT 12 readdir_r@@GLIBC_2.2.5 + 447: 00000000000371f0 244 FUNC GLOBAL DEFAULT 12 sigorset@@GLIBC_2.2.5 + 448: 000000000007def0 10 FUNC GLOBAL DEFAULT 12 _IO_flush_all@@GLIBC_2.2.5 + 449: 00000000000f5750 102 FUNC WEAK DEFAULT 12 setreuid@@GLIBC_2.2.5 + 450: 0000000000062710 7 FUNC WEAK DEFAULT 12 vfscanf@@GLIBC_2.2.5 + 451: 0000000000086000 352 FUNC WEAK DEFAULT 12 memalign@@GLIBC_2.2.5 + 452: 000000000003acc0 11 FUNC GLOBAL DEFAULT 12 drand48_r@@GLIBC_2.2.5 + 453: 000000000011aff0 164 FUNC GLOBAL DEFAULT 12 endnetent@@GLIBC_2.2.5 + 454: 000000000006f2f0 340 FUNC GLOBAL DEFAULT 12 fsetpos64@@GLIBC_2.2.5 + 455: 00000000000f9f40 501 FUNC GLOBAL DEFAULT 12 hsearch_r@@GLIBC_2.2.5 + 456: 0000000000118750 18 FUNC GLOBAL DEFAULT 12 __stack_chk_fail@@GLIBC_2.4 + 457: 00000000000b3120 79 FUNC WEAK DEFAULT 12 wcscasecmp@@GLIBC_2.2.5 + 458: 0000000000076f30 193 FUNC GLOBAL DEFAULT 12 _IO_feof@@GLIBC_2.2.5 + 459: 0000000000131010 199 FUNC GLOBAL DEFAULT 12 key_setsecret@@GLIBC_2.2.5 + 460: 00000000000f8e50 317 FUNC GLOBAL DEFAULT 12 daemon@@GLIBC_2.2.5 + 461: 00000000000ef4f0 69 FUNC GLOBAL DEFAULT 12 __lxstat@@GLIBC_2.2.5 + 462: 00000000001368f0 321 FUNC GLOBAL DEFAULT 12 svc_run@@GLIBC_2.2.5 + 463: 0000000000073320 147 FUNC GLOBAL DEFAULT 12 _IO_wdefault_finish@@GLIBC_2.2.5 + 464: 00000000000aa710 10 FUNC GLOBAL DEFAULT 12 __wcstoul_l@@GLIBC_2.2.5 + 465: 0000000000100450 33 FUNC WEAK DEFAULT 12 shmctl@@GLIBC_2.2.5 + 466: 00000000000ff200 33 FUNC GLOBAL DEFAULT 12 inotify_rm_watch@@GLIBC_2.4 + 467: 000000000006e6b0 317 FUNC GLOBAL DEFAULT 12 _IO_fflush@@GLIBC_2.2.5 + 468: 0000000000135d10 176 FUNC GLOBAL DEFAULT 12 xdr_quad_t@@GLIBC_2.3.4 + 469: 00000000000f12e0 33 FUNC WEAK DEFAULT 12 unlink@@GLIBC_2.2.5 + 470: 00000000000a9220 442 FUNC GLOBAL DEFAULT 12 __mbrtowc@@GLIBC_2.2.5 + 471: 0000000000072690 277 FUNC GLOBAL DEFAULT 12 putchar@@GLIBC_2.2.5 + 472: 00000000001362f0 25 FUNC GLOBAL DEFAULT 12 xdrmem_create@@GLIBC_2.2.5 + 473: 000000000010c6f0 38 FUNC GLOBAL DEFAULT 12 pthread_mutex_lock@@GLIBC_2.2.5 + 474: 00000000000ff910 33 FUNC WEAK DEFAULT 12 listen@@GLIBC_2.2.5 + 475: 0000000000079760 131 FUNC WEAK DEFAULT 12 fgets_unlocked@@GLIBC_2.2.5 + 476: 0000000000103380 1031 FUNC GLOBAL DEFAULT 12 putspent@@GLIBC_2.2.5 + 477: 0000000000135f20 50 FUNC GLOBAL DEFAULT 12 xdr_int32_t@@GLIBC_2.2.5 + 478: 0000000000100240 96 FUNC WEAK DEFAULT 12 msgrcv@@GLIBC_2.2.5 + 479: 000000000011fb50 65 FUNC GLOBAL DEFAULT 12 __ivaliduser@@GLIBC_2.2.5 + 480: 00000000000ffab0 169 FUNC WEAK DEFAULT 12 __send@@GLIBC_2.2.5 + 481: 00000000000f5b10 96 FUNC WEAK DEFAULT 12 select@@GLIBC_2.2.5 + 482: 000000000011d080 136 FUNC GLOBAL DEFAULT 12 getrpcent@@GLIBC_2.2.5 + 483: 0000000000101ec0 153 FUNC WEAK DEFAULT 12 iswprint@@GLIBC_2.2.5 + 484: 0000000000105260 212 FUNC GLOBAL DEFAULT 12 getsgent_r@@GLIBC_2.10 + 485: 0000000000102480 129 FUNC GLOBAL DEFAULT 12 __iswalnum_l@@GLIBC_2.2.5 + 486: 00000000000ef890 33 FUNC WEAK DEFAULT 12 mkdir@@GLIBC_2.2.5 + 487: 000000000002f600 18 FUNC WEAK DEFAULT 12 ispunct_l@@GLIBC_2.3 + 488: 00000000003ccdf8 8 OBJECT GLOBAL DEFAULT 34 argp_program_version_hook@@GLIBC_2.2.5 + 489: 0000000000079030 32 FUNC GLOBAL DEFAULT 12 __libc_fatal@@GLIBC_PRIVATE + 490: 00000000000ef320 17 FUNC GLOBAL DEFAULT 12 __sched_cpualloc@@GLIBC_2.7 + 491: 00000000001003f0 33 FUNC WEAK DEFAULT 12 shmdt@@GLIBC_2.2.5 + 492: 00000000000ff740 36 FUNC GLOBAL DEFAULT 12 process_vm_writev@@GLIBC_2.15 + 493: 0000000000085c40 947 FUNC GLOBAL DEFAULT 12 realloc@@GLIBC_2.2.5 + 494: 00000000000ee270 96 FUNC WEAK DEFAULT 12 __pwrite64@@GLIBC_2.2.5 + 495: 00000000000ef680 33 FUNC WEAK DEFAULT 12 fstatfs@@GLIBC_2.2.5 + 496: 000000000003a570 127 FUNC WEAK DEFAULT 12 setstate@@GLIBC_2.2.5 + 497: 0000000000187f7c 5 OBJECT GLOBAL DEFAULT 15 _libc_intl_domainname@@GLIBC_2.2.5 + 498: 0000000000123010 782 FUNC WEAK DEFAULT 12 if_nameindex@@GLIBC_2.2.5 + 499: 000000000018d3a4 4 OBJECT GLOBAL DEFAULT 15 h_nerr@@GLIBC_2.2.5 + 500: 00000000000a8ee0 389 FUNC WEAK DEFAULT 12 btowc@@GLIBC_2.2.5 + 501: 00000000000969d0 68 FUNC GLOBAL DEFAULT 12 __argz_stringify@@GLIBC_2.2.5 + 502: 0000000000071380 171 FUNC GLOBAL DEFAULT 12 _IO_ungetc@@GLIBC_2.2.5 + 503: 00000000000c1260 101 FUNC GLOBAL DEFAULT 12 rewinddir@@GLIBC_2.2.5 + 504: 000000000003b940 18 FUNC GLOBAL DEFAULT 12 strtold@@GLIBC_2.2.5 + 505: 0000000000074220 68 FUNC GLOBAL DEFAULT 12 _IO_adjust_wcolumn@@GLIBC_2.2.5 + 506: 00000000000f5cc0 90 FUNC WEAK DEFAULT 12 fsync@@GLIBC_2.2.5 + 507: 0000000000102510 130 FUNC GLOBAL DEFAULT 12 __iswalpha_l@@GLIBC_2.2.5 + 508: 0000000000121850 212 FUNC GLOBAL DEFAULT 12 getaliasent_r@@GLIBC_2.2.5 + 509: 000000000012b450 121 FUNC GLOBAL DEFAULT 12 xdr_key_netstres@@GLIBC_2.2.5 + 510: 00000000000fee30 36 FUNC GLOBAL DEFAULT 12 prlimit@@GLIBC_2.13 + 511: 00000000000b4b70 125 FUNC GLOBAL DEFAULT 12 clock@@GLIBC_2.2.5 + 512: 0000000000118390 238 FUNC GLOBAL DEFAULT 12 __obstack_vprintf_chk@@GLIBC_2.8 + 513: 0000000000102240 88 FUNC GLOBAL DEFAULT 12 towupper@@GLIBC_2.2.5 + 514: 00000000000fff10 32 FUNC GLOBAL DEFAULT 12 sockatmark@@GLIBC_2.2.5 + 515: 0000000000128640 86 FUNC GLOBAL DEFAULT 12 xdr_replymsg@@GLIBC_2.2.5 + 516: 000000000013a920 20 FUNC GLOBAL DEFAULT 12 putmsg@@GLIBC_2.2.5 + 517: 0000000000037930 684 FUNC GLOBAL DEFAULT 12 abort@@GLIBC_2.2.5 + 518: 00000000003c8878 8 OBJECT GLOBAL DEFAULT 33 stdin@@GLIBC_2.2.5 + 519: 000000000007df00 637 FUNC GLOBAL DEFAULT 12 _IO_flush_all_linebuffered@@GLIBC_2.2.5 + 520: 00000000001352c0 95 FUNC GLOBAL DEFAULT 12 xdr_u_short@@GLIBC_2.2.5 + 521: 000000000003af60 18 FUNC WEAK DEFAULT 12 strtoll@@GLIBC_2.2.5 + 522: 00000000000c5d70 85 FUNC GLOBAL DEFAULT 12 _exit@@GLIBC_2.2.5 + 523: 0000000000132d90 694 FUNC GLOBAL DEFAULT 12 svc_getreq_common@@GLIBC_2.2.5 + 524: 00000000000ff650 36 FUNC GLOBAL DEFAULT 12 name_to_handle_at@@GLIBC_2.14 + 525: 0000000000045b20 7 FUNC GLOBAL DEFAULT 12 wcstoumax@@GLIBC_2.2.5 + 526: 0000000000071460 152 FUNC WEAK DEFAULT 12 vsprintf@@GLIBC_2.2.5 + 527: 00000000000374b0 338 FUNC WEAK DEFAULT 12 sigwaitinfo@@GLIBC_2.2.5 + 528: 00000000001009b0 93 FUNC WEAK DEFAULT 12 moncontrol@@GLIBC_2.2.5 + 529: 0000000000110360 314 FUNC GLOBAL DEFAULT 12 __res_iclose@@GLIBC_PRIVATE + 530: 00000000000ffcb0 36 FUNC WEAK DEFAULT 12 socketpair@@GLIBC_2.2.5 + 531: 000000000003a220 28 FUNC GLOBAL DEFAULT 12 div@@GLIBC_2.2.5 + 532: 000000000008f030 836 FUNC GLOBAL DEFAULT 12 memchr@@GLIBC_2.2.5 + 533: 00000000000407b0 10 FUNC GLOBAL DEFAULT 12 __strtod_l@@GLIBC_2.2.5 + 534: 000000000008e9d0 34 IFUNC GLOBAL DEFAULT 12 strpbrk@@GLIBC_2.2.5 + 535: 00000000000c1580 442 FUNC GLOBAL DEFAULT 12 scandirat@@GLIBC_2.15 + 536: 0000000000099d30 1001 FUNC GLOBAL DEFAULT 12 memrchr@@GLIBC_2.2.5 + 537: 000000000011dd50 12 FUNC GLOBAL DEFAULT 12 ether_aton@@GLIBC_2.2.5 + 538: 00000000000f9de0 12 FUNC WEAK DEFAULT 12 hdestroy@@GLIBC_2.2.5 + 539: 00000000000efb30 90 FUNC WEAK DEFAULT 12 __read@@GLIBC_2.2.5 + 540: 000000000002f430 44 FUNC GLOBAL DEFAULT 12 tolower@@GLIBC_2.2.5 + 541: 0000000000085b60 224 FUNC WEAK DEFAULT 12 cfree@@GLIBC_2.2.5 + 542: 0000000000070610 144 FUNC GLOBAL DEFAULT 12 popen@@GLIBC_2.2.5 + 543: 000000000011f900 171 FUNC GLOBAL DEFAULT 12 ruserok_af@@GLIBC_2.2.5 + 544: 000000000002f4b0 29 FUNC GLOBAL DEFAULT 12 _tolower@@GLIBC_2.2.5 + 545: 00000000000fd3a0 104 FUNC WEAK DEFAULT 12 step@@GLIBC_2.2.5 + 546: 0000000000102430 74 FUNC WEAK DEFAULT 12 towctrans@@GLIBC_2.2.5 + 547: 000000000002fbf0 15 FUNC GLOBAL DEFAULT 12 __dcgettext@@GLIBC_2.2.5 + 548: 00000000000fd710 36 FUNC GLOBAL DEFAULT 12 lsetxattr@@GLIBC_2.3 + 549: 00000000000f7d80 84 FUNC GLOBAL DEFAULT 12 setttyent@@GLIBC_2.2.5 + 550: 00000000000b4150 143 FUNC GLOBAL DEFAULT 12 __isoc99_swscanf@@GLIBC_2.7 + 551: 0000000000087d20 1346 FUNC WEAK DEFAULT 12 malloc_info@@GLIBC_2.10 + 552: 00000000000ef8f0 90 FUNC WEAK DEFAULT 12 __open64@@GLIBC_2.2.5 + 553: 00000000000c6c80 5 FUNC GLOBAL DEFAULT 12 __bsd_getpgrp@@GLIBC_2.2.5 + 554: 0000000000105100 162 FUNC GLOBAL DEFAULT 12 setsgent@@GLIBC_2.10 + 555: 00000000000c69a0 59 FUNC GLOBAL DEFAULT 12 getpid@@GLIBC_2.2.5 + 556: 0000000000036650 33 FUNC WEAK DEFAULT 12 kill@@GLIBC_2.2.5 + 557: 0000000000045b30 157 FUNC WEAK DEFAULT 12 getcontext@@GLIBC_2.2.5 + 558: 00000000000b4000 255 FUNC GLOBAL DEFAULT 12 __isoc99_vfwscanf@@GLIBC_2.7 + 559: 000000000008ed60 34 IFUNC GLOBAL DEFAULT 12 strspn@@GLIBC_2.2.5 + 560: 000000000010c4b0 38 FUNC GLOBAL DEFAULT 12 pthread_condattr_init@@GLIBC_2.2.5 + 561: 000000000003a240 32 FUNC WEAK DEFAULT 12 imaxdiv@@GLIBC_2.2.5 + 562: 00000000003c8018 8 OBJECT WEAK DEFAULT 33 program_invocation_name@@GLIBC_2.2.5 + 563: 00000000000f40b0 71 FUNC GLOBAL DEFAULT 12 posix_fallocate64@@GLIBC_2.2.5 + 564: 0000000000129040 131 FUNC GLOBAL DEFAULT 12 svcraw_create@@GLIBC_2.2.5 + 565: 00000000000ff620 33 FUNC GLOBAL DEFAULT 12 fanotify_init@@GLIBC_2.13 + 566: 00000000000e3940 33 FUNC GLOBAL DEFAULT 12 __sched_get_priority_max@@GLIBC_2.2.5 + 567: 0000000000096870 73 FUNC WEAK DEFAULT 12 argz_extract@@GLIBC_2.2.5 + 568: 000000000002f9e0 522 FUNC WEAK DEFAULT 12 bind_textdomain_codeset@@GLIBC_2.2.5 + 569: 000000000006e840 417 FUNC GLOBAL DEFAULT 12 fgetpos@@GLIBC_2.2.5 + 570: 000000000008cb70 65 FUNC WEAK DEFAULT 12 strdup@@GLIBC_2.2.5 + 571: 000000000006e840 417 FUNC GLOBAL DEFAULT 12 _IO_fgetpos64@@GLIBC_2.2.5 + 572: 00000000001368c0 37 FUNC GLOBAL DEFAULT 12 svc_exit@@GLIBC_2.2.5 + 573: 00000000000f0330 90 FUNC WEAK DEFAULT 12 creat64@@GLIBC_2.2.5 + 574: 0000000000079430 27 FUNC WEAK DEFAULT 12 getc_unlocked@@GLIBC_2.2.5 + 575: 000000000010de70 745 FUNC WEAK DEFAULT 12 inet_pton@@GLIBC_2.2.5 + 576: 00000000000bc190 16 FUNC GLOBAL DEFAULT 12 strftime@@GLIBC_2.2.5 + 577: 0000000000078ab0 8 FUNC GLOBAL DEFAULT 12 __flbf@@GLIBC_2.2.5 + 578: 00000000000f00d0 268 FUNC WEAK DEFAULT 12 lockf64@@GLIBC_2.2.5 + 579: 0000000000073040 49 FUNC GLOBAL DEFAULT 12 _IO_switch_to_main_wget_area@@GLIBC_2.2.5 + 580: 00000000001347a0 447 FUNC GLOBAL DEFAULT 12 xencrypt@@GLIBC_2.2.5 + 581: 000000000013a940 36 FUNC GLOBAL DEFAULT 12 putpmsg@@GLIBC_2.2.5 + 582: 00000000000432c0 94 FUNC GLOBAL DEFAULT 12 __libc_system@@GLIBC_PRIVATE + 583: 0000000000136000 94 FUNC GLOBAL DEFAULT 12 xdr_uint16_t@@GLIBC_2.2.5 + 584: 00000000003c8000 16 OBJECT WEAK DEFAULT 33 tzname@@GLIBC_2.2.5 + 585: 0000000000086510 450 FUNC GLOBAL DEFAULT 12 __libc_mallopt@@GLIBC_2.2.5 + 586: 0000000000036fc0 134 FUNC WEAK DEFAULT 12 sysv_signal@@GLIBC_2.2.5 + 587: 000000000010c360 38 FUNC GLOBAL DEFAULT 12 pthread_attr_getschedparam@@GLIBC_2.2.5 + 588: 000000000003b460 10 FUNC WEAK DEFAULT 12 strtoll_l@@GLIBC_2.3.3 + 589: 00000000000ef340 5 FUNC GLOBAL DEFAULT 12 __sched_cpufree@@GLIBC_2.7 + 590: 00000000000f0270 33 FUNC GLOBAL DEFAULT 12 __dup2@@GLIBC_2.2.5 + 591: 000000000010c690 38 FUNC GLOBAL DEFAULT 12 pthread_mutex_destroy@@GLIBC_2.2.5 + 592: 0000000000071780 254 FUNC WEAK DEFAULT 12 fgetwc@@GLIBC_2.2.5 + 593: 00000000000ef7a0 33 FUNC WEAK DEFAULT 12 chmod@@GLIBC_2.2.5 + 594: 00000000000f5080 85 FUNC GLOBAL DEFAULT 12 vlimit@@GLIBC_2.2.5 + 595: 00000000000f53f0 129 FUNC WEAK DEFAULT 12 sbrk@@GLIBC_2.2.5 + 596: 000000000002f210 66 FUNC GLOBAL DEFAULT 12 __assert_fail@@GLIBC_2.2.5 + 597: 000000000012cbc0 713 FUNC GLOBAL DEFAULT 12 clntunix_create@@GLIBC_2.2.5 + 598: 0000000000101a70 152 FUNC WEAK DEFAULT 12 iswalnum@@GLIBC_2.2.5 + 599: 000000000002f4f0 6 FUNC WEAK DEFAULT 12 __toascii_l@@GLIBC_2.2.5 + 600: 000000000002f520 18 FUNC GLOBAL DEFAULT 12 __isalnum_l@@GLIBC_2.2.5 + 601: 0000000000053450 161 FUNC GLOBAL DEFAULT 12 printf@@GLIBC_2.2.5 + 602: 00000000000f7580 143 FUNC GLOBAL DEFAULT 12 __getmntent_r@@GLIBC_2.2.5 + 603: 000000000011e170 66 FUNC GLOBAL DEFAULT 12 ether_ntoa_r@@GLIBC_2.2.5 + 604: 0000000000035790 36 FUNC WEAK DEFAULT 12 finite@@GLIBC_2.2.5 + 605: 00000000000ff820 90 FUNC WEAK DEFAULT 12 __connect@@GLIBC_2.2.5 + 606: 000000000003a190 20 FUNC GLOBAL DEFAULT 12 quick_exit@@GLIBC_2.10 + 607: 000000000011acb0 386 FUNC GLOBAL DEFAULT 12 getnetbyname@@GLIBC_2.2.5 + 608: 00000000000f61b0 11 FUNC GLOBAL DEFAULT 12 mkstemp@@GLIBC_2.2.5 + 609: 00000000000f00a0 33 FUNC WEAK DEFAULT 12 flock@@GLIBC_2.2.5 + 610: 00000000000ef6b0 103 FUNC GLOBAL DEFAULT 12 statvfs@@GLIBC_2.2.5 + 611: 00000000000fcab0 463 FUNC WEAK DEFAULT 12 error_at_line@@GLIBC_2.2.5 + 612: 0000000000077c70 233 FUNC GLOBAL DEFAULT 12 rewind@@GLIBC_2.2.5 + 613: 0000000000097fd0 2550 FUNC WEAK DEFAULT 12 strcoll_l@@GLIBC_2.3 + 614: 000000000003a200 17 FUNC GLOBAL DEFAULT 12 llabs@@GLIBC_2.2.5 + 615: 00000000003cc700 24 OBJECT GLOBAL DEFAULT 34 _null_auth@@GLIBC_2.2.5 + 616: 00000000000b4c80 13 FUNC WEAK DEFAULT 12 localtime_r@@GLIBC_2.2.5 + 617: 00000000000a8120 57 FUNC GLOBAL DEFAULT 12 wcscspn@@GLIBC_2.2.5 + 618: 00000000000f50e0 439 FUNC GLOBAL DEFAULT 12 vtimes@@GLIBC_2.2.5 + 619: 0000000000090140 53 IFUNC GLOBAL DEFAULT 12 __stpncpy@@GLIBC_2.2.5 + 620: 0000000000039bf0 27 FUNC WEAK DEFAULT 12 __libc_secure_getenv@@GLIBC_PRIVATE + 621: 00000000000357c0 21 FUNC WEAK DEFAULT 12 copysign@@GLIBC_2.2.5 + 622: 00000000001252d0 95 FUNC GLOBAL DEFAULT 12 inet6_opt_finish@@GLIBC_2.5 + 623: 00000000000c59d0 90 FUNC WEAK DEFAULT 12 __nanosleep@@GLIBC_2.2.6 + 624: 00000000000361c0 10 FUNC GLOBAL DEFAULT 12 setjmp@@GLIBC_2.2.5 + 625: 0000000000035b80 121 FUNC WEAK DEFAULT 12 modff@@GLIBC_2.2.5 + 626: 0000000000101d80 153 FUNC WEAK DEFAULT 12 iswlower@@GLIBC_2.2.5 + 627: 00000000000f3db0 90 FUNC WEAK DEFAULT 12 __poll@@GLIBC_2.2.5 + 628: 000000000002f3d0 26 FUNC GLOBAL DEFAULT 12 isspace@@GLIBC_2.2.5 + 629: 000000000003b910 18 FUNC GLOBAL DEFAULT 12 strtod@@GLIBC_2.2.5 + 630: 000000000006b7e0 68 FUNC GLOBAL DEFAULT 12 tmpnam_r@@GLIBC_2.2.5 + 631: 0000000000117eb0 16 FUNC GLOBAL DEFAULT 12 __confstr_chk@@GLIBC_2.4 + 632: 00000000000f4860 157 FUNC GLOBAL DEFAULT 12 fallocate@@GLIBC_2.10 + 633: 0000000000102bc0 145 FUNC GLOBAL DEFAULT 12 __wctype_l@@GLIBC_2.2.5 + 634: 000000000013d1d0 5 FUNC GLOBAL DEFAULT 12 setutxent@@GLIBC_2.2.5 + 635: 0000000000071aa0 367 FUNC GLOBAL DEFAULT 12 fgetws@@GLIBC_2.2.5 + 636: 00000000000aa2e0 10 FUNC WEAK DEFAULT 12 __wcstoll_l@@GLIBC_2.2.5 + 637: 000000000002f540 19 FUNC GLOBAL DEFAULT 12 __isalpha_l@@GLIBC_2.2.5 + 638: 000000000003b8e0 18 FUNC GLOBAL DEFAULT 12 strtof@@GLIBC_2.2.5 + 639: 00000000001026b0 124 FUNC WEAK DEFAULT 12 iswdigit_l@@GLIBC_2.3 + 640: 00000000001172b0 328 FUNC GLOBAL DEFAULT 12 __wcsncat_chk@@GLIBC_2.4 + 641: 00000000000b4c70 14 FUNC GLOBAL DEFAULT 12 gmtime@@GLIBC_2.2.5 + 642: 000000000002ee70 95 FUNC GLOBAL DEFAULT 12 __uselocale@@GLIBC_2.3 + 643: 000000000002e540 21 FUNC WEAK DEFAULT 12 __ctype_get_mb_cur_max@@GLIBC_2.2.5 + 644: 000000000008fff0 15 FUNC GLOBAL DEFAULT 12 ffs@@GLIBC_2.2.5 + 645: 0000000000102730 130 FUNC GLOBAL DEFAULT 12 __iswlower_l@@GLIBC_2.2.5 + 646: 00000000001285f0 59 FUNC GLOBAL DEFAULT 12 xdr_opaque_auth@@GLIBC_2.2.5 + 647: 0000000000035e80 281 FUNC WEAK DEFAULT 12 modfl@@GLIBC_2.2.5 + 648: 0000000000097110 463 FUNC GLOBAL DEFAULT 12 envz_add@@GLIBC_2.2.5 + 649: 0000000000104e90 555 FUNC GLOBAL DEFAULT 12 putsgent@@GLIBC_2.10 + 650: 000000000008ee30 241 FUNC GLOBAL DEFAULT 12 strtok@@GLIBC_2.2.5 + 651: 000000000013cbd0 41 FUNC WEAK DEFAULT 12 getpt@@GLIBC_2.2.5 + 652: 00000000000c4670 161 FUNC GLOBAL DEFAULT 12 endpwent@@GLIBC_2.2.5 + 653: 000000000006ece0 10 FUNC GLOBAL DEFAULT 12 _IO_fopen@@GLIBC_2.2.5 + 654: 000000000003af60 18 FUNC GLOBAL DEFAULT 12 strtol@@GLIBC_2.2.5 + 655: 0000000000037610 124 FUNC WEAK DEFAULT 12 sigqueue@@GLIBC_2.2.5 + 656: 00000000000f3480 240 FUNC GLOBAL DEFAULT 12 fts_close@@GLIBC_2.2.5 + 657: 00000000000f11a0 25 FUNC WEAK DEFAULT 12 isatty@@GLIBC_2.2.5 + 658: 00000000000f6dd0 154 FUNC WEAK DEFAULT 12 setmntent@@GLIBC_2.2.5 + 659: 0000000000120d10 222 FUNC GLOBAL DEFAULT 12 endnetgrent@@GLIBC_2.2.5 + 660: 00000000000f0bd0 33 FUNC WEAK DEFAULT 12 lchown@@GLIBC_2.2.5 + 661: 00000000000f8f90 183 FUNC WEAK DEFAULT 12 mmap@@GLIBC_2.2.5 + 662: 000000000007a980 27 FUNC GLOBAL DEFAULT 12 _IO_file_read@@GLIBC_2.2.5 + 663: 00000000000c3fd0 261 FUNC WEAK DEFAULT 12 getpw@@GLIBC_2.2.5 + 664: 0000000000124fc0 437 FUNC GLOBAL DEFAULT 12 setsourcefilter@@GLIBC_2.3.4 + 665: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 666: 00000000001041e0 517 FUNC WEAK DEFAULT 12 fgetspent_r@@GLIBC_2.2.5 + 667: 00000000000e3910 33 FUNC WEAK DEFAULT 12 sched_yield@@GLIBC_2.2.5 + 668: 00000000000cb100 187 FUNC WEAK DEFAULT 12 glob_pattern_p@@GLIBC_2.2.5 + 669: 000000000003af60 18 FUNC WEAK DEFAULT 12 strtoq@@GLIBC_2.2.5 + 670: 0000000000099c10 74 FUNC GLOBAL DEFAULT 12 __strsep_1c@@GLIBC_2.2.5 + 671: 00000000001149a0 62 FUNC GLOBAL DEFAULT 12 __clock_getcpuclockid@@GLIBC_PRIVATE + 672: 00000000000b3170 108 FUNC WEAK DEFAULT 12 wcsncasecmp@@GLIBC_2.2.5 + 673: 00000000000b4c10 33 FUNC GLOBAL DEFAULT 12 ctime_r@@GLIBC_2.2.5 + 674: 00000000000c2f50 1147 FUNC GLOBAL DEFAULT 12 getgrnam_r@@GLIBC_2.2.5 + 675: 0000000000039a70 135 FUNC WEAK DEFAULT 12 clearenv@@GLIBC_2.2.5 + 676: 0000000000135e70 175 FUNC GLOBAL DEFAULT 12 xdr_u_quad_t@@GLIBC_2.3.4 + 677: 0000000000102bc0 145 FUNC WEAK DEFAULT 12 wctype_l@@GLIBC_2.3 + 678: 00000000000ef720 103 FUNC GLOBAL DEFAULT 12 fstatvfs@@GLIBC_2.2.5 + 679: 00000000000368b0 79 FUNC WEAK DEFAULT 12 sigblock@@GLIBC_2.2.5 + 680: 0000000000100170 26 FUNC GLOBAL DEFAULT 12 __libc_sa_len@@GLIBC_2.2.5 + 681: 00000000003cd178 8 OBJECT GLOBAL DEFAULT 34 __key_encryptsession_pk_LOCAL@@GLIBC_2.2.5 + 682: 000000000008b000 71 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_allocate@@GLIBC_PRIVATE + 683: 000000000010c450 38 FUNC GLOBAL DEFAULT 12 pthread_attr_setscope@@GLIBC_2.2.5 + 684: 0000000000102a90 130 FUNC WEAK DEFAULT 12 iswxdigit_l@@GLIBC_2.3 + 685: 0000000000076f30 193 FUNC WEAK DEFAULT 12 feof@@GLIBC_2.2.5 + 686: 0000000000134390 624 FUNC GLOBAL DEFAULT 12 svcudp_create@@GLIBC_2.2.5 + 687: 00000000000964b0 111 FUNC WEAK DEFAULT 12 strchrnul@@GLIBC_2.2.5 + 688: 00000000000f6160 33 FUNC WEAK DEFAULT 12 swapoff@@GLIBC_2.2.5 + 689: 00000000003c8160 8 OBJECT GLOBAL DEFAULT 33 __ctype_tolower@GLIBC_2.2.5 + 690: 00000000000f8b30 151 FUNC GLOBAL DEFAULT 12 syslog@@GLIBC_2.2.5 + 691: 00000000000ee600 3 FUNC GLOBAL DEFAULT 12 posix_spawnattr_destroy@@GLIBC_2.2.5 + 692: 000000000003b8c0 10 FUNC GLOBAL DEFAULT 12 __strtoul_l@@GLIBC_2.2.5 + 693: 00000000000efc20 282 FUNC WEAK DEFAULT 12 eaccess@@GLIBC_2.4 + 694: 00000000001170a0 109 FUNC GLOBAL DEFAULT 12 __fread_unlocked_chk@@GLIBC_2.7 + 695: 000000000006f2f0 340 FUNC GLOBAL DEFAULT 12 fsetpos@@GLIBC_2.2.5 + 696: 00000000000ee210 96 FUNC WEAK DEFAULT 12 pread64@@GLIBC_2.2.5 + 697: 0000000000124720 331 FUNC GLOBAL DEFAULT 12 inet6_option_alloc@@GLIBC_2.3.3 + 698: 00000000000b8630 78 FUNC GLOBAL DEFAULT 12 dysize@@GLIBC_2.2.5 + 699: 00000000000f1220 33 FUNC WEAK DEFAULT 12 symlink@@GLIBC_2.2.5 + 700: 0000000000102d90 136 FUNC GLOBAL DEFAULT 12 getspent@@GLIBC_2.2.5 + 701: 00000000000733c0 94 FUNC GLOBAL DEFAULT 12 _IO_wdefault_uflow@@GLIBC_2.2.5 + 702: 000000000010c2d0 38 FUNC GLOBAL DEFAULT 12 pthread_attr_setdetachstate@@GLIBC_2.2.5 + 703: 00000000000fd560 36 FUNC GLOBAL DEFAULT 12 fgetxattr@@GLIBC_2.3 + 704: 000000000003a8f0 229 FUNC WEAK DEFAULT 12 srandom_r@@GLIBC_2.2.5 + 705: 00000000000f77c0 33 FUNC GLOBAL DEFAULT 12 truncate@@GLIBC_2.2.5 + 706: 000000000002f390 26 FUNC GLOBAL DEFAULT 12 isprint@@GLIBC_2.2.5 + 707: 0000000000086160 687 FUNC GLOBAL DEFAULT 12 __libc_calloc@@GLIBC_2.2.5 + 708: 00000000000f3ee0 30 FUNC GLOBAL DEFAULT 12 posix_fadvise@@GLIBC_2.2.5 + 709: 0000000000094b90 44 FUNC WEAK DEFAULT 12 memccpy@@GLIBC_2.2.5 + 710: 00000000000fd470 204 FUNC GLOBAL DEFAULT 12 getloadavg@@GLIBC_2.2.5 + 711: 00000000000c5ee0 448 FUNC GLOBAL DEFAULT 12 execle@@GLIBC_2.2.5 + 712: 00000000000bc1a0 16 FUNC GLOBAL DEFAULT 12 wcsftime@@GLIBC_2.2.5 + 713: 0000000000101a10 92 FUNC GLOBAL DEFAULT 12 __fentry__@@GLIBC_2.13 + 714: 0000000000134df0 6 FUNC GLOBAL DEFAULT 12 xdr_void@@GLIBC_2.2.5 + 715: 000000000003a240 32 FUNC GLOBAL DEFAULT 12 ldiv@@GLIBC_2.2.5 + 716: 00000000001125e0 248 FUNC GLOBAL DEFAULT 12 __nss_configure_lookup@@GLIBC_2.2.5 + 717: 00000000000f4980 84 FUNC GLOBAL DEFAULT 12 cfsetispeed@@GLIBC_2.2.5 + 718: 000000000011e160 12 FUNC GLOBAL DEFAULT 12 ether_ntoa@@GLIBC_2.2.5 + 719: 000000000012b3f0 96 FUNC GLOBAL DEFAULT 12 xdr_key_netstarg@@GLIBC_2.2.5 + 720: 00000000000ff470 96 FUNC GLOBAL DEFAULT 12 tee@@GLIBC_2.5 + 721: 00000000000776e0 245 FUNC WEAK DEFAULT 12 fgetc@@GLIBC_2.2.5 + 722: 0000000000050aa0 270 FUNC GLOBAL DEFAULT 12 parse_printf_format@@GLIBC_2.2.5 + 723: 00000000000956b0 213 FUNC GLOBAL DEFAULT 12 strfry@@GLIBC_2.2.5 + 724: 0000000000071460 152 FUNC GLOBAL DEFAULT 12 _IO_vsprintf@@GLIBC_2.2.5 + 725: 00000000000f5de0 49 FUNC GLOBAL DEFAULT 12 reboot@@GLIBC_2.2.5 + 726: 0000000000121c30 758 FUNC GLOBAL DEFAULT 12 getaliasbyname_r@@GLIBC_2.2.5 + 727: 000000000003ac60 31 FUNC GLOBAL DEFAULT 12 jrand48@@GLIBC_2.2.5 + 728: 00000000000c6270 432 FUNC GLOBAL DEFAULT 12 execlp@@GLIBC_2.2.5 + 729: 0000000000119e40 1273 FUNC GLOBAL DEFAULT 12 gethostbyname_r@@GLIBC_2.2.5 + 730: 00000000000b4490 25 FUNC GLOBAL DEFAULT 12 c16rtomb@@GLIBC_2.16 + 731: 0000000000095680 44 FUNC GLOBAL DEFAULT 12 swab@@GLIBC_2.2.5 + 732: 000000000006bf60 43 FUNC GLOBAL DEFAULT 12 _IO_funlockfile@@GLIBC_2.2.5 + 733: 000000000006be90 77 FUNC GLOBAL DEFAULT 12 _IO_flockfile@@GLIBC_2.2.5 + 734: 0000000000099c60 91 FUNC GLOBAL DEFAULT 12 __strsep_2c@@GLIBC_2.2.5 + 735: 00000000000c1300 104 FUNC GLOBAL DEFAULT 12 seekdir@@GLIBC_2.2.5 + 736: 00000000000f6190 30 FUNC GLOBAL DEFAULT 12 __mktemp@@GLIBC_PRIVATE + 737: 000000000002f500 9 FUNC WEAK DEFAULT 12 __isascii_l@@GLIBC_2.2.5 + 738: 000000000002f510 15 FUNC WEAK DEFAULT 12 isblank_l@@GLIBC_2.3 + 739: 00000000000c13d0 19 FUNC WEAK DEFAULT 12 alphasort64@@GLIBC_2.2.5 + 740: 0000000000132410 493 FUNC GLOBAL DEFAULT 12 pmap_getport@@GLIBC_2.2.5 + 741: 0000000000045c70 550 FUNC WEAK DEFAULT 12 makecontext@@GLIBC_2.2.5 + 742: 00000000000f5d50 90 FUNC GLOBAL DEFAULT 12 fdatasync@@GLIBC_2.2.5 + 743: 0000000000050960 237 FUNC WEAK DEFAULT 12 register_printf_specifier@@GLIBC_2.10 + 744: 000000000012c060 555 FUNC GLOBAL DEFAULT 12 authdes_getucred@@GLIBC_2.2.5 + 745: 00000000000f77c0 33 FUNC WEAK DEFAULT 12 truncate64@@GLIBC_2.2.5 + 746: 000000000002f600 18 FUNC GLOBAL DEFAULT 12 __ispunct_l@@GLIBC_2.2.5 + 747: 00000000001027c0 130 FUNC GLOBAL DEFAULT 12 __iswgraph_l@@GLIBC_2.2.5 + 748: 0000000000045b00 7 FUNC GLOBAL DEFAULT 12 strtoumax@@GLIBC_2.2.5 + 749: 0000000000108840 521 FUNC WEAK DEFAULT 12 argp_failure@@GLIBC_2.2.5 + 750: 00000000000901d0 99 IFUNC GLOBAL DEFAULT 12 __strcasecmp@@GLIBC_2.2.5 + 751: 000000000006ea30 364 FUNC WEAK DEFAULT 12 fgets@@GLIBC_2.2.5 + 752: 0000000000062710 7 FUNC GLOBAL DEFAULT 12 __vfscanf@@GLIBC_2.2.5 + 753: 00000000000efb00 46 FUNC GLOBAL DEFAULT 12 __openat64_2@@GLIBC_2.7 + 754: 0000000000102340 82 FUNC GLOBAL DEFAULT 12 __iswctype@@GLIBC_2.2.5 + 755: 00000000000ee740 22 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setflags@@GLIBC_2.2.5 + 756: 000000000011b0a0 227 FUNC GLOBAL DEFAULT 12 getnetent_r@@GLIBC_2.2.5 + 757: 0000000000114ac0 144 FUNC WEAK DEFAULT 12 clock_nanosleep@@GLIBC_2.17 + 758: 000000000013e390 13 FUNC GLOBAL DEFAULT 12 sched_setaffinity@GLIBC_2.3.3 + 759: 00000000000e3a40 455 FUNC GLOBAL DEFAULT 12 sched_setaffinity@@GLIBC_2.3.4 + 760: 0000000000078080 20 FUNC WEAK DEFAULT 12 vscanf@@GLIBC_2.2.5 + 761: 00000000000c42b0 326 FUNC GLOBAL DEFAULT 12 getpwnam@@GLIBC_2.2.5 + 762: 00000000001245a0 379 FUNC GLOBAL DEFAULT 12 inet6_option_append@@GLIBC_2.3.3 + 763: 00000000000c69e0 8 FUNC WEAK DEFAULT 12 getppid@@GLIBC_2.2.5 + 764: 0000000000086160 687 FUNC WEAK DEFAULT 12 calloc@@GLIBC_2.2.5 + 765: 0000000000074450 141 FUNC GLOBAL DEFAULT 12 _IO_unsave_wmarkers@@GLIBC_2.2.5 + 766: 000000000018cbd0 18 OBJECT GLOBAL DEFAULT 15 _nl_default_dirname@@GLIBC_2.2.5 + 767: 000000000013a8d0 20 FUNC GLOBAL DEFAULT 12 getmsg@@GLIBC_2.2.5 + 768: 000000000013d4e0 879 FUNC GLOBAL DEFAULT 12 _dl_addr@@GLIBC_PRIVATE + 769: 00000000000f90b0 90 FUNC WEAK DEFAULT 12 msync@@GLIBC_2.2.5 + 770: 000000000006be60 43 FUNC GLOBAL DEFAULT 12 renameat@@GLIBC_2.4 + 771: 000000000007d820 42 FUNC GLOBAL DEFAULT 12 _IO_init@@GLIBC_2.2.5 + 772: 0000000000035ae0 10 FUNC GLOBAL DEFAULT 12 __signbit@@GLIBC_2.2.5 + 773: 00000000000f4180 76 FUNC GLOBAL DEFAULT 12 futimens@@GLIBC_2.6 + 774: 00000000000b4980 225 FUNC WEAK DEFAULT 12 asctime_r@@GLIBC_2.2.5 + 775: 000000000008ce10 73 IFUNC GLOBAL DEFAULT 12 strlen@@GLIBC_2.2.5 + 776: 000000000002edb0 190 FUNC WEAK DEFAULT 12 freelocale@@GLIBC_2.3 + 777: 0000000000117400 16 FUNC GLOBAL DEFAULT 12 __wmemset_chk@@GLIBC_2.4 + 778: 000000000003a4f0 119 FUNC WEAK DEFAULT 12 initstate@@GLIBC_2.2.5 + 779: 00000000000a7290 388 FUNC GLOBAL DEFAULT 12 wcschr@@GLIBC_2.2.5 + 780: 000000000002f410 26 FUNC GLOBAL DEFAULT 12 isxdigit@@GLIBC_2.2.5 + 781: 00000000000b4260 555 FUNC GLOBAL DEFAULT 12 mbrtoc16@@GLIBC_2.16 + 782: 0000000000071380 171 FUNC WEAK DEFAULT 12 ungetc@@GLIBC_2.2.5 + 783: 000000000007b0e0 71 FUNC GLOBAL DEFAULT 12 _IO_file_init@@GLIBC_2.2.5 + 784: 0000000000073490 564 FUNC GLOBAL DEFAULT 12 __wuflow@@GLIBC_2.2.5 + 785: 00000000003c8170 8 OBJECT GLOBAL DEFAULT 33 __ctype_b@GLIBC_2.2.5 + 786: 00000000000f00d0 268 FUNC GLOBAL DEFAULT 12 lockf@@GLIBC_2.2.5 + 787: 000000000011dfa0 437 FUNC GLOBAL DEFAULT 12 ether_line@@GLIBC_2.2.5 + 788: 000000000012a2b0 139 FUNC GLOBAL DEFAULT 12 xdr_authdes_cred@@GLIBC_2.2.5 + 789: 0000000000114a10 59 FUNC GLOBAL DEFAULT 12 __clock_gettime@@GLIBC_PRIVATE + 790: 00000000000f98d0 41 FUNC GLOBAL DEFAULT 12 qecvt@@GLIBC_2.2.5 + 791: 0000000000102340 82 FUNC WEAK DEFAULT 12 iswctype@@GLIBC_2.2.5 + 792: 00000000000a9200 27 FUNC GLOBAL DEFAULT 12 __mbrlen@@GLIBC_2.2.5 + 793: 000000000006b6d0 137 FUNC GLOBAL DEFAULT 12 tmpfile@@GLIBC_2.2.5 + 794: 0000000000120ad0 118 FUNC GLOBAL DEFAULT 12 __internal_setnetgrent@@GLIBC_PRIVATE + 795: 0000000000136060 94 FUNC GLOBAL DEFAULT 12 xdr_int8_t@@GLIBC_2.2.5 + 796: 0000000000096ea0 192 FUNC GLOBAL DEFAULT 12 envz_entry@@GLIBC_2.2.5 + 797: 00000000000ff320 33 FUNC GLOBAL DEFAULT 12 pivot_root@@GLIBC_2.2.5 + 798: 00000000001012f0 1712 FUNC WEAK DEFAULT 12 sprofil@@GLIBC_2.2.5 + 799: 0000000000102b70 76 FUNC GLOBAL DEFAULT 12 __towupper_l@@GLIBC_2.2.5 + 800: 000000000011fba0 1373 FUNC GLOBAL DEFAULT 12 rexec_af@@GLIBC_2.2.5 + 801: 00000000003c8400 224 OBJECT GLOBAL DEFAULT 33 _IO_2_1_stdout_@@GLIBC_2.2.5 + 802: 00000000001328d0 181 FUNC GLOBAL DEFAULT 12 xprt_unregister@@GLIBC_2.2.5 + 803: 000000000002e560 1704 FUNC WEAK DEFAULT 12 newlocale@@GLIBC_2.3 + 804: 0000000000126a20 129 FUNC GLOBAL DEFAULT 12 xdr_authunix_parms@@GLIBC_2.2.5 + 805: 00000000000fa6c0 783 FUNC WEAK DEFAULT 12 tsearch@@GLIBC_2.2.5 + 806: 0000000000121aa0 326 FUNC GLOBAL DEFAULT 12 getaliasbyname@@GLIBC_2.2.5 + 807: 0000000000132d40 80 FUNC GLOBAL DEFAULT 12 svcerr_progvers@@GLIBC_2.2.5 + 808: 000000000002f620 19 FUNC WEAK DEFAULT 12 isspace_l@@GLIBC_2.3 + 809: 0000000000125470 39 FUNC GLOBAL DEFAULT 12 inet6_opt_get_val@@GLIBC_2.5 + 810: 00000000000968c0 262 FUNC WEAK DEFAULT 12 argz_insert@@GLIBC_2.2.5 + 811: 0000000000036350 110 FUNC WEAK DEFAULT 12 gsignal@@GLIBC_2.2.5 + 812: 00000000001198f0 1350 FUNC GLOBAL DEFAULT 12 gethostbyname2_r@@GLIBC_2.2.5 + 813: 0000000000039f30 79 FUNC GLOBAL DEFAULT 12 __cxa_atexit@@GLIBC_2.2.5 + 814: 00000000000ee310 135 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_init@@GLIBC_2.2.5 + 815: 0000000000078a80 8 FUNC GLOBAL DEFAULT 12 __fwriting@@GLIBC_2.2.5 + 816: 00000000000ff350 36 FUNC WEAK DEFAULT 12 prctl@@GLIBC_2.2.5 + 817: 00000000000f8d60 18 FUNC GLOBAL DEFAULT 12 setlogmask@@GLIBC_2.2.5 + 818: 0000000000087ae0 450 FUNC WEAK DEFAULT 12 malloc_stats@@GLIBC_2.2.5 + 819: 0000000000102d40 74 FUNC GLOBAL DEFAULT 12 __towctrans_l@@GLIBC_2.2.5 + 820: 0000000000099cc0 99 FUNC GLOBAL DEFAULT 12 __strsep_3c@@GLIBC_2.2.5 + 821: 0000000000135470 95 FUNC GLOBAL DEFAULT 12 xdr_enum@@GLIBC_2.2.5 + 822: 00000000003c5280 40 OBJECT GLOBAL DEFAULT 29 h_errlist@@GLIBC_2.2.5 + 823: 00000000000ff4d0 33 FUNC GLOBAL DEFAULT 12 unshare@@GLIBC_2.4 + 824: 0000000000079660 70 FUNC GLOBAL DEFAULT 12 fread_unlocked@@GLIBC_2.2.5 + 825: 00000000000f5380 97 FUNC WEAK DEFAULT 12 brk@@GLIBC_2.2.5 + 826: 00000000000ffab0 169 FUNC WEAK DEFAULT 12 send@@GLIBC_2.2.5 + 827: 000000000002f5e0 19 FUNC WEAK DEFAULT 12 isprint_l@@GLIBC_2.3 + 828: 00000000000b85b0 33 FUNC WEAK DEFAULT 12 setitimer@@GLIBC_2.2.5 + 829: 0000000000102430 74 FUNC GLOBAL DEFAULT 12 __towctrans@@GLIBC_2.2.5 + 830: 000000000006c6c0 122 FUNC GLOBAL DEFAULT 12 __isoc99_vsscanf@@GLIBC_2.7 + 831: 00000000003c4d80 512 OBJECT GLOBAL DEFAULT 29 sys_sigabbrev@GLIBC_2.2.5 + 832: 00000000003c4d80 520 OBJECT GLOBAL DEFAULT 29 sys_sigabbrev@@GLIBC_2.3.3 + 833: 0000000000045bd0 145 FUNC WEAK DEFAULT 12 setcontext@@GLIBC_2.2.5 + 834: 0000000000102a00 130 FUNC WEAK DEFAULT 12 iswupper_l@@GLIBC_2.3 + 835: 00000000000fed80 45 FUNC GLOBAL DEFAULT 12 signalfd@@GLIBC_2.7 + 836: 0000000000036d50 204 FUNC GLOBAL DEFAULT 12 sigemptyset@@GLIBC_2.2.5 + 837: 0000000000124870 219 FUNC GLOBAL DEFAULT 12 inet6_option_next@@GLIBC_2.3.3 + 838: 000000000013e260 13 FUNC GLOBAL DEFAULT 12 _dl_sym@@GLIBC_PRIVATE + 839: 00000000000f8c70 89 FUNC GLOBAL DEFAULT 12 openlog@@GLIBC_2.2.5 + 840: 00000000000e75e0 2914 FUNC GLOBAL DEFAULT 12 getaddrinfo@@GLIBC_2.2.5 + 841: 000000000007e180 212 FUNC GLOBAL DEFAULT 12 _IO_init_marker@@GLIBC_2.2.5 + 842: 0000000000079450 34 FUNC GLOBAL DEFAULT 12 getchar_unlocked@@GLIBC_2.2.5 + 843: 000000000013e930 69 FUNC GLOBAL DEFAULT 12 __res_maybe_init@GLIBC_PRIVATE + 844: 000000000008f9a0 65 IFUNC GLOBAL DEFAULT 12 memset@@GLIBC_2.2.5 + 845: 00000000000fd2e0 180 FUNC GLOBAL DEFAULT 12 dirname@@GLIBC_2.2.5 + 846: 00000000000239d0 8 FUNC GLOBAL DEFAULT 12 __gconv_get_alias_db@@GLIBC_PRIVATE + 847: 000000000002e340 407 FUNC GLOBAL DEFAULT 12 localeconv@@GLIBC_2.2.5 + 848: 00000000000f4900 9 FUNC GLOBAL DEFAULT 12 cfgetospeed@@GLIBC_2.2.5 + 849: 00000000000f5570 147 FUNC WEAK DEFAULT 12 writev@@GLIBC_2.2.5 + 850: 000000000007d130 817 FUNC GLOBAL DEFAULT 12 _IO_default_xsgetn@@GLIBC_2.2.5 + 851: 000000000002f2d0 25 FUNC GLOBAL DEFAULT 12 isalnum@@GLIBC_2.2.5 + 852: 000000000013b180 99 FUNC WEAK DEFAULT 12 setutent@@GLIBC_2.2.5 + 853: 0000000000128720 275 FUNC GLOBAL DEFAULT 12 _seterr_reply@@GLIBC_2.2.5 + 854: 0000000000074030 121 FUNC GLOBAL DEFAULT 12 _IO_switch_to_wget_mode@@GLIBC_2.2.5 + 855: 0000000000125520 78 FUNC GLOBAL DEFAULT 12 inet6_rth_add@@GLIBC_2.5 + 856: 0000000000079430 27 FUNC WEAK DEFAULT 12 fgetc_unlocked@@GLIBC_2.2.5 + 857: 00000000000728c0 138 FUNC GLOBAL DEFAULT 12 swprintf@@GLIBC_2.2.5 + 858: 0000000000077830 273 FUNC GLOBAL DEFAULT 12 getchar@@GLIBC_2.2.5 + 859: 00000000000fc2c0 368 FUNC GLOBAL DEFAULT 12 warn@@GLIBC_2.2.5 + 860: 000000000013b450 84 FUNC WEAK DEFAULT 12 getutid@@GLIBC_2.2.5 + 861: 000000000002b7e0 8 FUNC GLOBAL DEFAULT 12 __gconv_get_cache@@GLIBC_PRIVATE + 862: 00000000000c8b80 9373 FUNC GLOBAL DEFAULT 12 glob@@GLIBC_2.2.5 + 863: 00000000000a5fd0 78 IFUNC GLOBAL DEFAULT 12 strstr@@GLIBC_2.2.5 + 864: 0000000000100390 36 FUNC GLOBAL DEFAULT 12 semtimedop@@GLIBC_2.3.3 + 865: 0000000000039bf0 27 FUNC WEAK DEFAULT 12 __secure_getenv@GLIBC_2.2.5 + 866: 00000000000a9c90 153 FUNC WEAK DEFAULT 12 wcsnlen@@GLIBC_2.2.5 + 867: 000000000008c970 34 IFUNC GLOBAL DEFAULT 12 strcspn@@GLIBC_2.2.5 + 868: 00000000000a9e20 16 FUNC GLOBAL DEFAULT 12 __wcstof_internal@@GLIBC_2.2.5 + 869: 000000000002f350 26 FUNC GLOBAL DEFAULT 12 islower@@GLIBC_2.2.5 + 870: 00000000000f4da0 54 FUNC GLOBAL DEFAULT 12 tcsendbreak@@GLIBC_2.2.5 + 871: 00000000000c13a0 5 FUNC GLOBAL DEFAULT 12 telldir@@GLIBC_2.2.5 + 872: 000000000003e2b0 10 FUNC GLOBAL DEFAULT 12 __strtof_l@@GLIBC_2.2.5 + 873: 00000000000f4130 68 FUNC GLOBAL DEFAULT 12 utimensat@@GLIBC_2.6 + 874: 00000000000f9260 178 FUNC GLOBAL DEFAULT 12 fcvt@@GLIBC_2.2.5 + 875: 0000000000070f50 354 FUNC GLOBAL DEFAULT 12 _IO_setbuffer@@GLIBC_2.2.5 + 876: 000000000007e580 4 FUNC GLOBAL DEFAULT 12 _IO_iter_file@@GLIBC_2.2.5 + 877: 00000000000f1340 33 FUNC WEAK DEFAULT 12 rmdir@@GLIBC_2.2.5 + 878: 00000000000227c0 17 FUNC GLOBAL DEFAULT 12 __errno_location@@GLIBC_2.2.5 + 879: 00000000000f4a70 370 FUNC GLOBAL DEFAULT 12 tcsetattr@@GLIBC_2.2.5 + 880: 000000000003b460 10 FUNC WEAK DEFAULT 12 __strtoll_l@@GLIBC_2.2.5 + 881: 00000000000ff7f0 33 FUNC WEAK DEFAULT 12 bind@@GLIBC_2.2.5 + 882: 0000000000077590 255 FUNC GLOBAL DEFAULT 12 fseek@@GLIBC_2.2.5 + 883: 0000000000129480 87 FUNC GLOBAL DEFAULT 12 xdr_float@@GLIBC_2.2.5 + 884: 00000000000f0390 33 FUNC WEAK DEFAULT 12 chdir@@GLIBC_2.2.5 + 885: 00000000000ef8f0 90 FUNC WEAK DEFAULT 12 open64@@GLIBC_2.2.5 + 886: 00000000000e1bc0 1784 FUNC GLOBAL DEFAULT 12 confstr@@GLIBC_2.2.5 + 887: 000000000008a4f0 130 FUNC GLOBAL DEFAULT 12 muntrace@@GLIBC_2.2.5 + 888: 00000000000efb30 90 FUNC WEAK DEFAULT 12 read@@GLIBC_2.2.5 + 889: 0000000000125640 30 FUNC GLOBAL DEFAULT 12 inet6_rth_segments@@GLIBC_2.5 + 890: 000000000008f380 55 IFUNC GLOBAL DEFAULT 12 memcmp@@GLIBC_2.2.5 + 891: 00000000001048a0 136 FUNC GLOBAL DEFAULT 12 getsgent@@GLIBC_2.10 + 892: 0000000000071900 281 FUNC GLOBAL DEFAULT 12 getwchar@@GLIBC_2.2.5 + 893: 00000000000f5970 12 FUNC WEAK DEFAULT 12 getpagesize@@GLIBC_2.2.5 + 894: 0000000000122440 2743 FUNC GLOBAL DEFAULT 12 getnameinfo@@GLIBC_2.2.5 + 895: 00000000001365f0 198 FUNC GLOBAL DEFAULT 12 xdr_sizeof@@GLIBC_2.2.5 + 896: 000000000002fc00 10 FUNC WEAK DEFAULT 12 dgettext@@GLIBC_2.2.5 + 897: 000000000006f4a0 320 FUNC GLOBAL DEFAULT 12 _IO_ftell@@GLIBC_2.2.5 + 898: 0000000000072340 266 FUNC GLOBAL DEFAULT 12 putwc@@GLIBC_2.2.5 + 899: 0000000000116db0 16 FUNC GLOBAL DEFAULT 12 __pread_chk@@GLIBC_2.4 + 900: 0000000000053590 143 FUNC GLOBAL DEFAULT 12 _IO_sprintf@@GLIBC_2.2.5 + 901: 000000000007e590 78 FUNC GLOBAL DEFAULT 12 _IO_list_lock@@GLIBC_2.2.5 + 902: 0000000000127460 381 FUNC GLOBAL DEFAULT 12 getrpcport@@GLIBC_2.2.5 + 903: 00000000000f8bd0 138 FUNC GLOBAL DEFAULT 12 __syslog_chk@@GLIBC_2.4 + 904: 00000000000c2890 161 FUNC GLOBAL DEFAULT 12 endgrent@@GLIBC_2.2.5 + 905: 00000000000b4a70 241 FUNC GLOBAL DEFAULT 12 asctime@@GLIBC_2.2.5 + 906: 000000000008cbc0 73 FUNC WEAK DEFAULT 12 strndup@@GLIBC_2.2.5 + 907: 00000000000ff140 36 FUNC GLOBAL DEFAULT 12 init_module@@GLIBC_2.2.5 + 908: 00000000000f91a0 33 FUNC GLOBAL DEFAULT 12 mlock@@GLIBC_2.2.5 + 909: 000000000012ef00 102 FUNC GLOBAL DEFAULT 12 clnt_sperrno@@GLIBC_2.2.5 + 910: 0000000000129e60 200 FUNC GLOBAL DEFAULT 12 xdrrec_skiprecord@@GLIBC_2.2.5 + 911: 0000000000097fd0 2550 FUNC GLOBAL DEFAULT 12 __strcoll_l@@GLIBC_2.2.5 + 912: 00000000000a9800 575 FUNC WEAK DEFAULT 12 mbsnrtowcs@@GLIBC_2.2.5 + 913: 0000000000111a90 108 FUNC GLOBAL DEFAULT 12 __gai_sigqueue@@GLIBC_PRIVATE + 914: 000000000002f460 44 FUNC GLOBAL DEFAULT 12 toupper@@GLIBC_2.2.5 + 915: 0000000000105a60 158 FUNC WEAK DEFAULT 12 sgetsgent_r@@GLIBC_2.10 + 916: 000000000003a340 149 FUNC GLOBAL DEFAULT 12 mbtowc@@GLIBC_2.2.5 + 917: 000000000011bb20 165 FUNC GLOBAL DEFAULT 12 setprotoent@@GLIBC_2.2.5 + 918: 00000000000c69a0 59 FUNC GLOBAL DEFAULT 12 __getpid@@GLIBC_2.2.5 + 919: 00000000000fedb0 40 FUNC GLOBAL DEFAULT 12 eventfd@@GLIBC_2.7 + 920: 0000000000132010 262 FUNC GLOBAL DEFAULT 12 netname2user@@GLIBC_2.2.5 + 921: 000000000002f4d0 29 FUNC GLOBAL DEFAULT 12 _toupper@@GLIBC_2.2.5 + 922: 00000000000ff8e0 36 FUNC WEAK DEFAULT 12 getsockopt@@GLIBC_2.2.5 + 923: 0000000000133760 536 FUNC GLOBAL DEFAULT 12 svctcp_create@@GLIBC_2.2.5 + 924: 000000000006f8f0 742 FUNC WEAK DEFAULT 12 getdelim@@GLIBC_2.2.5 + 925: 00000000000730c0 135 FUNC GLOBAL DEFAULT 12 _IO_wsetb@@GLIBC_2.2.5 + 926: 00000000000c2130 94 FUNC GLOBAL DEFAULT 12 setgroups@@GLIBC_2.2.5 + 927: 00000000000fd770 36 FUNC GLOBAL DEFAULT 12 setxattr@@GLIBC_2.3 + 928: 000000000012ef70 123 FUNC GLOBAL DEFAULT 12 clnt_perrno@@GLIBC_2.2.5 + 929: 000000000007ce10 200 FUNC GLOBAL DEFAULT 12 _IO_doallocbuf@@GLIBC_2.2.5 + 930: 000000000003acd0 119 FUNC WEAK DEFAULT 12 erand48_r@@GLIBC_2.2.5 + 931: 000000000003abe0 34 FUNC GLOBAL DEFAULT 12 lrand48@@GLIBC_2.2.5 + 932: 000000000013cc00 666 FUNC GLOBAL DEFAULT 12 grantpt@@GLIBC_2.2.5 + 933: 00000000001106b0 201 FUNC GLOBAL DEFAULT 12 __resolv_context_get@@GLIBC_PRIVATE + 934: 00000000000f0c30 693 FUNC GLOBAL DEFAULT 12 ttyname@@GLIBC_2.2.5 + 935: 00000000000a9220 442 FUNC WEAK DEFAULT 12 mbrtoc32@@GLIBC_2.16 + 936: 000000000008fb00 85 IFUNC WEAK DEFAULT 12 mempcpy@@GLIBC_2.2.5 + 937: 000000000010c270 38 FUNC GLOBAL DEFAULT 12 pthread_attr_init@@GLIBC_2.2.5 + 938: 000000000010ccf0 280 FUNC GLOBAL DEFAULT 12 herror@@GLIBC_2.2.5 + 939: 00000000000e3790 29 FUNC GLOBAL DEFAULT 12 getopt@@GLIBC_2.2.5 + 940: 00000000000a9da0 18 FUNC GLOBAL DEFAULT 12 wcstoul@@GLIBC_2.2.5 + 941: 000000000013c800 240 FUNC WEAK DEFAULT 12 utmpname@@GLIBC_2.2.5 + 942: 0000000000116ce0 152 FUNC GLOBAL DEFAULT 12 __fgets_unlocked_chk@@GLIBC_2.4 + 943: 000000000013af00 49 FUNC GLOBAL DEFAULT 12 getlogin_r@@GLIBC_2.2.5 + 944: 000000000002f580 19 FUNC WEAK DEFAULT 12 isdigit_l@@GLIBC_2.3 + 945: 0000000000053850 22392 FUNC WEAK DEFAULT 12 vfwprintf@@GLIBC_2.2.5 + 946: 0000000000070a90 508 FUNC GLOBAL DEFAULT 12 _IO_seekoff@@GLIBC_2.2.5 + 947: 00000000000f6dd0 154 FUNC GLOBAL DEFAULT 12 __setmntent@@GLIBC_2.2.5 + 948: 00000000000f9e20 234 FUNC GLOBAL DEFAULT 12 hcreate_r@@GLIBC_2.2.5 + 949: 00000000000f4d80 14 FUNC GLOBAL DEFAULT 12 tcflow@@GLIBC_2.2.5 + 950: 00000000000a9da0 18 FUNC WEAK DEFAULT 12 wcstouq@@GLIBC_2.2.5 + 951: 0000000000073ef0 171 FUNC GLOBAL DEFAULT 12 _IO_wdoallocbuf@@GLIBC_2.2.5 + 952: 0000000000120100 21 FUNC GLOBAL DEFAULT 12 rexec@@GLIBC_2.2.5 + 953: 00000000001002a0 33 FUNC WEAK DEFAULT 12 msgget@@GLIBC_2.2.5 + 954: 0000000000072ad0 143 FUNC GLOBAL DEFAULT 12 fwscanf@@GLIBC_2.2.5 + 955: 0000000000135fa0 94 FUNC GLOBAL DEFAULT 12 xdr_int16_t@@GLIBC_2.2.5 + 956: 00000000003ccb80 8 OBJECT GLOBAL DEFAULT 34 _dl_open_hook@@GLIBC_PRIVATE + 957: 0000000000116e90 16 FUNC GLOBAL DEFAULT 12 __getcwd_chk@@GLIBC_2.4 + 958: 00000000000ef820 100 FUNC GLOBAL DEFAULT 12 fchmodat@@GLIBC_2.4 + 959: 0000000000097460 117 FUNC GLOBAL DEFAULT 12 envz_strip@@GLIBC_2.2.5 + 960: 00000000000f0270 33 FUNC WEAK DEFAULT 12 dup2@@GLIBC_2.2.5 + 961: 0000000000076e40 179 FUNC GLOBAL DEFAULT 12 clearerr@@GLIBC_2.2.5 + 962: 00000000000f02a0 33 FUNC WEAK DEFAULT 12 dup3@@GLIBC_2.9 + 963: 000000000011ed80 2633 FUNC GLOBAL DEFAULT 12 rcmd_af@@GLIBC_2.2.5 + 964: 00000000003ca468 8 OBJECT WEAK DEFAULT 34 environ@@GLIBC_2.2.5 + 965: 00000000000c5970 90 FUNC WEAK DEFAULT 12 pause@@GLIBC_2.2.5 + 966: 0000000000132750 44 FUNC GLOBAL DEFAULT 12 __rpc_thread_svc_max_pollfd@@GLIBC_2.2.5 + 967: 000000000008aa80 97 FUNC GLOBAL DEFAULT 12 __libc_scratch_buffer_grow@@GLIBC_PRIVATE + 968: 0000000000039950 286 FUNC WEAK DEFAULT 12 unsetenv@@GLIBC_2.2.5 + 969: 00000000000e37b0 29 FUNC GLOBAL DEFAULT 12 __posix_getopt@@GLIBC_2.10 + 970: 000000000003ab40 80 FUNC GLOBAL DEFAULT 12 rand_r@@GLIBC_2.2.5 + 971: 0000000000035790 36 FUNC GLOBAL DEFAULT 12 __finite@@GLIBC_2.2.5 + 972: 000000000007eba0 18 FUNC GLOBAL DEFAULT 12 _IO_str_init_static@@GLIBC_2.2.5 + 973: 00000000000b5760 32 FUNC WEAK DEFAULT 12 timelocal@@GLIBC_2.2.5 + 974: 00000000001363f0 255 FUNC GLOBAL DEFAULT 12 xdr_pointer@@GLIBC_2.2.5 + 975: 0000000000096a20 174 FUNC WEAK DEFAULT 12 argz_add_sep@@GLIBC_2.2.5 + 976: 00000000000a9070 363 FUNC GLOBAL DEFAULT 12 wctob@@GLIBC_2.2.5 + 977: 00000000000361e0 59 FUNC WEAK DEFAULT 12 longjmp@@GLIBC_2.2.5 + 978: 00000000000ef4a0 69 FUNC GLOBAL DEFAULT 12 __fxstat64@@GLIBC_2.2.5 + 979: 000000000007a9a0 808 FUNC GLOBAL DEFAULT 12 _IO_file_xsputn@@GLIBC_2.2.5 + 980: 00000000000b8d80 18 FUNC GLOBAL DEFAULT 12 strptime@@GLIBC_2.2.5 + 981: 000000000012ec00 734 FUNC GLOBAL DEFAULT 12 clnt_sperror@@GLIBC_2.2.5 + 982: 00000000000fef00 33 FUNC GLOBAL DEFAULT 12 __adjtimex@@GLIBC_2.2.5 + 983: 0000000000116410 308 FUNC GLOBAL DEFAULT 12 __vprintf_chk@@GLIBC_2.3.4 + 984: 00000000000ffc50 33 FUNC WEAK DEFAULT 12 shutdown@@GLIBC_2.2.5 + 985: 000000000013a970 20 FUNC GLOBAL DEFAULT 12 fattach@@GLIBC_2.2.5 + 986: 00000000000ff6e0 33 FUNC GLOBAL DEFAULT 12 setns@@GLIBC_2.14 + 987: 0000000000078100 182 FUNC WEAK DEFAULT 12 vsnprintf@@GLIBC_2.2.5 + 988: 00000000000361d0 7 FUNC GLOBAL DEFAULT 12 _setjmp@@GLIBC_2.2.5 + 989: 00000000000f3db0 90 FUNC WEAK DEFAULT 12 poll@@GLIBC_2.2.5 + 990: 0000000000085960 507 FUNC WEAK DEFAULT 12 malloc_get_state@@GLIBC_2.2.5 + 991: 000000000013a8f0 36 FUNC GLOBAL DEFAULT 12 getpmsg@@GLIBC_2.2.5 + 992: 000000000006fdc0 8 FUNC GLOBAL DEFAULT 12 _IO_getline@@GLIBC_2.2.5 + 993: 000000000013d1a0 44 FUNC GLOBAL DEFAULT 12 ptsname@@GLIBC_2.2.5 + 994: 00000000000c5e00 200 FUNC GLOBAL DEFAULT 12 fexecve@@GLIBC_2.2.5 + 995: 00000000000e1650 248 FUNC WEAK DEFAULT 12 re_comp@@GLIBC_2.2.5 + 996: 000000000012eee0 32 FUNC GLOBAL DEFAULT 12 clnt_perror@@GLIBC_2.2.5 + 997: 00000000000f9900 52 FUNC GLOBAL DEFAULT 12 qgcvt@@GLIBC_2.2.5 + 998: 0000000000132b90 70 FUNC GLOBAL DEFAULT 12 svcerr_noproc@@GLIBC_2.2.5 + 999: 0000000000116230 398 FUNC GLOBAL DEFAULT 12 __fprintf_chk@@GLIBC_2.3.4 + 1000: 00000000000ff680 90 FUNC GLOBAL DEFAULT 12 open_by_handle_at@@GLIBC_2.14 + 1001: 000000000007e2a0 7 FUNC GLOBAL DEFAULT 12 _IO_marker_difference@@GLIBC_2.2.5 + 1002: 00000000000a9d60 16 FUNC GLOBAL DEFAULT 12 __wcstol_internal@@GLIBC_2.2.5 + 1003: 000000000006b400 143 FUNC GLOBAL DEFAULT 12 _IO_sscanf@@GLIBC_2.2.5 + 1004: 0000000000092480 80 IFUNC GLOBAL DEFAULT 12 __strncasecmp_l@@GLIBC_2.2.5 + 1005: 0000000000036ed0 52 FUNC GLOBAL DEFAULT 12 sigaddset@@GLIBC_2.2.5 + 1006: 00000000000b4bf0 21 FUNC GLOBAL DEFAULT 12 ctime@@GLIBC_2.2.5 + 1007: 00000000001020a0 145 FUNC WEAK DEFAULT 12 iswupper@@GLIBC_2.2.5 + 1008: 0000000000132cf0 70 FUNC GLOBAL DEFAULT 12 svcerr_noprog@@GLIBC_2.2.5 + 1009: 00000000000f4860 157 FUNC GLOBAL DEFAULT 12 fallocate64@@GLIBC_2.10 + 1010: 000000000007e560 3 FUNC GLOBAL DEFAULT 12 _IO_iter_end@@GLIBC_2.2.5 + 1011: 00000000000c23d0 326 FUNC GLOBAL DEFAULT 12 getgrnam@@GLIBC_2.2.5 + 1012: 0000000000117190 20 FUNC GLOBAL DEFAULT 12 __wmemcpy_chk@@GLIBC_2.4 + 1013: 00000000000fef00 33 FUNC WEAK DEFAULT 12 adjtimex@@GLIBC_2.2.5 + 1014: 000000000010c720 38 FUNC GLOBAL DEFAULT 12 pthread_mutex_unlock@@GLIBC_2.2.5 + 1015: 00000000000f5a40 33 FUNC GLOBAL DEFAULT 12 sethostname@@GLIBC_2.2.5 + 1016: 000000000007cda0 110 FUNC GLOBAL DEFAULT 12 _IO_setb@@GLIBC_2.2.5 + 1017: 00000000000ee210 96 FUNC WEAK DEFAULT 12 __pread64@@GLIBC_2.2.5 + 1018: 0000000000089ac0 221 FUNC GLOBAL DEFAULT 12 mcheck@@GLIBC_2.2.5 + 1019: 000000000002f510 15 FUNC GLOBAL DEFAULT 12 __isblank_l@@GLIBC_2.2.5 + 1020: 0000000000136310 223 FUNC GLOBAL DEFAULT 12 xdr_reference@@GLIBC_2.2.5 + 1021: 00000000000c4c20 878 FUNC GLOBAL DEFAULT 12 getpwuid_r@@GLIBC_2.2.5 + 1022: 000000000011d500 161 FUNC GLOBAL DEFAULT 12 endrpcent@@GLIBC_2.2.5 + 1023: 0000000000132120 101 FUNC GLOBAL DEFAULT 12 netname2host@@GLIBC_2.2.5 + 1024: 0000000000118b80 546 FUNC GLOBAL DEFAULT 12 inet_network@@GLIBC_2.2.5 + 1025: 000000000002f6a0 32 FUNC WEAK DEFAULT 12 isctype@@GLIBC_2.3 + 1026: 00000000000392f0 278 FUNC GLOBAL DEFAULT 12 putenv@@GLIBC_2.2.5 + 1027: 00000000000b1580 224 FUNC GLOBAL DEFAULT 12 wcswidth@@GLIBC_2.2.5 + 1028: 00000000001275e0 515 FUNC GLOBAL DEFAULT 12 pmap_set@@GLIBC_2.2.5 + 1029: 00000000000f0ba0 33 FUNC WEAK DEFAULT 12 fchown@@GLIBC_2.2.5 + 1030: 000000000013e7d0 38 FUNC GLOBAL DEFAULT 12 pthread_cond_broadcast@GLIBC_2.2.5 + 1031: 000000000010c4e0 38 FUNC GLOBAL DEFAULT 12 pthread_cond_broadcast@@GLIBC_2.3.2 + 1032: 000000000007c440 559 FUNC GLOBAL DEFAULT 12 _IO_link_in@@GLIBC_2.2.5 + 1033: 0000000000100190 71 FUNC GLOBAL DEFAULT 12 ftok@@GLIBC_2.2.5 + 1034: 0000000000135700 338 FUNC GLOBAL DEFAULT 12 xdr_netobj@@GLIBC_2.2.5 + 1035: 0000000000034c00 573 FUNC GLOBAL DEFAULT 12 catopen@@GLIBC_2.2.5 + 1036: 00000000000aa710 10 FUNC WEAK DEFAULT 12 __wcstoull_l@@GLIBC_2.2.5 + 1037: 0000000000050a50 5 FUNC WEAK DEFAULT 12 register_printf_function@@GLIBC_2.2.5 + 1038: 0000000000036130 88 FUNC GLOBAL DEFAULT 12 __sigsetjmp@@GLIBC_2.2.5 + 1039: 00000000000b3ad0 415 FUNC GLOBAL DEFAULT 12 __isoc99_wscanf@@GLIBC_2.7 + 1040: 00000000000f5610 156 FUNC GLOBAL DEFAULT 12 preadv64@@GLIBC_2.10 + 1041: 00000000003c8870 8 OBJECT GLOBAL DEFAULT 33 stdout@@GLIBC_2.2.5 + 1042: 000000000008fff0 15 FUNC GLOBAL DEFAULT 12 __ffs@@GLIBC_2.2.5 + 1043: 0000000000118a90 78 FUNC WEAK DEFAULT 12 inet_makeaddr@@GLIBC_2.2.5 + 1044: 00000000000f79b0 823 FUNC GLOBAL DEFAULT 12 getttyent@@GLIBC_2.2.5 + 1045: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3 + 1046: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.4 + 1047: 00000000003ca4a0 8 OBJECT GLOBAL DEFAULT 34 __curbrk@@GLIBC_2.2.5 + 1048: 000000000008b0d0 41 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_create_failure@@GLIBC_PRIVATE + 1049: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.5 + 1050: 0000000000118dd0 419 FUNC GLOBAL DEFAULT 12 gethostbyaddr@@GLIBC_2.2.5 + 1051: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.6 + 1052: 00000000000fd2c0 12 FUNC WEAK DEFAULT 12 get_phys_pages@@GLIBC_2.2.5 + 1053: 0000000000070610 144 FUNC GLOBAL DEFAULT 12 _IO_popen@@GLIBC_2.2.5 + 1054: 000000000010a4f0 15 FUNC WEAK DEFAULT 12 argp_help@@GLIBC_2.2.5 + 1055: 00000000003c8158 8 OBJECT GLOBAL DEFAULT 33 __ctype_toupper@GLIBC_2.2.5 + 1056: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.7 + 1057: 0000000000077160 256 FUNC GLOBAL DEFAULT 12 fputc@@GLIBC_2.2.5 + 1058: 00000000000359c0 130 FUNC WEAK DEFAULT 12 frexp@@GLIBC_2.2.5 + 1059: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.8 + 1060: 0000000000102b20 79 FUNC GLOBAL DEFAULT 12 __towlower_l@@GLIBC_2.2.5 + 1061: 000000000011a570 227 FUNC GLOBAL DEFAULT 12 gethostent_r@@GLIBC_2.2.5 + 1062: 000000000007e2e0 136 FUNC GLOBAL DEFAULT 12 _IO_seekmark@@GLIBC_2.2.5 + 1063: 000000000006b5d0 241 FUNC GLOBAL DEFAULT 12 psignal@@GLIBC_2.2.5 + 1064: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.9 + 1065: 00000000000fc590 21 FUNC GLOBAL DEFAULT 12 verrx@@GLIBC_2.2.5 + 1066: 000000000013af70 20 FUNC GLOBAL DEFAULT 12 setlogin@@GLIBC_2.2.5 + 1067: 00000000000c13f0 19 FUNC WEAK DEFAULT 12 versionsort64@@GLIBC_2.2.5 + 1068: 0000000000120df0 536 FUNC GLOBAL DEFAULT 12 __internal_getnetgrent_r@@GLIBC_PRIVATE + 1069: 0000000000078460 255 FUNC WEAK DEFAULT 12 fseeko64@@GLIBC_2.2.5 + 1070: 00000000003c4380 168 OBJECT GLOBAL DEFAULT 28 _IO_file_jumps@@GLIBC_2.2.5 + 1071: 00000000000fd5c0 33 FUNC GLOBAL DEFAULT 12 fremovexattr@@GLIBC_2.3 + 1072: 0000000000117150 58 FUNC GLOBAL DEFAULT 12 __wcscpy_chk@@GLIBC_2.4 + 1073: 0000000000087440 347 FUNC GLOBAL DEFAULT 12 __libc_valloc@@GLIBC_2.2.5 + 1074: 00000000000fefc0 33 FUNC GLOBAL DEFAULT 12 create_module@@GLIBC_2.2.5 + 1075: 00000000000ff940 169 FUNC WEAK DEFAULT 12 recv@@GLIBC_2.2.5 + 1076: 000000000006c310 379 FUNC GLOBAL DEFAULT 12 __isoc99_fscanf@@GLIBC_2.7 + 1077: 0000000000127430 36 FUNC GLOBAL DEFAULT 12 _rpc_dtablesize@@GLIBC_2.2.5 + 1078: 000000000007d970 114 FUNC GLOBAL DEFAULT 12 _IO_sungetc@@GLIBC_2.2.5 + 1079: 00000000000c6ca0 33 FUNC GLOBAL DEFAULT 12 getsid@@GLIBC_2.2.5 + 1080: 00000000000f6190 30 FUNC WEAK DEFAULT 12 mktemp@@GLIBC_2.2.5 + 1081: 000000000010d0f0 274 FUNC WEAK DEFAULT 12 inet_addr@@GLIBC_2.2.5 + 1082: 0000000000117fa0 48 FUNC GLOBAL DEFAULT 12 __mbstowcs_chk@@GLIBC_2.4 + 1083: 00000000000f4f20 33 FUNC WEAK DEFAULT 12 getrusage@@GLIBC_2.2.5 + 1084: 0000000000079510 255 FUNC GLOBAL DEFAULT 12 _IO_peekc_locked@@GLIBC_2.2.5 + 1085: 000000000007e260 55 FUNC GLOBAL DEFAULT 12 _IO_remove_marker@@GLIBC_2.2.5 + 1086: 0000000000100080 156 FUNC GLOBAL DEFAULT 12 __sendmmsg@@GLIBC_PRIVATE + 1087: 00000000003c7740 8 OBJECT WEAK DEFAULT 33 __malloc_hook@@GLIBC_2.2.5 + 1088: 000000000002f620 19 FUNC GLOBAL DEFAULT 12 __isspace_l@@GLIBC_2.2.5 + 1089: 0000000000102730 130 FUNC WEAK DEFAULT 12 iswlower_l@@GLIBC_2.3 + 1090: 00000000000f3570 1691 FUNC GLOBAL DEFAULT 12 fts_read@@GLIBC_2.2.5 + 1091: 00000000000f65d0 439 FUNC GLOBAL DEFAULT 12 getfsspec@@GLIBC_2.2.5 + 1092: 000000000003af50 16 FUNC GLOBAL DEFAULT 12 __strtoll_internal@@GLIBC_2.2.5 + 1093: 0000000000101e20 153 FUNC WEAK DEFAULT 12 iswgraph@@GLIBC_2.2.5 + 1094: 00000000000f6250 80 FUNC GLOBAL DEFAULT 12 ualarm@@GLIBC_2.2.5 + 1095: 00000000000ff380 36 FUNC GLOBAL DEFAULT 12 query_module@@GLIBC_2.2.5 + 1096: 0000000000118210 138 FUNC GLOBAL DEFAULT 12 __dprintf_chk@@GLIBC_2.8 + 1097: 000000000006efa0 362 FUNC WEAK DEFAULT 12 fputs@@GLIBC_2.2.5 + 1098: 00000000000ee3a0 20 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_destroy@@GLIBC_2.2.5 + 1099: 000000000008ef30 232 FUNC WEAK DEFAULT 12 strtok_r@@GLIBC_2.2.5 + 1100: 000000000011a4c0 164 FUNC GLOBAL DEFAULT 12 endhostent@@GLIBC_2.2.5 + 1101: 000000000013e890 38 FUNC GLOBAL DEFAULT 12 pthread_cond_wait@GLIBC_2.2.5 + 1102: 000000000010c5a0 38 FUNC GLOBAL DEFAULT 12 pthread_cond_wait@@GLIBC_2.3.2 + 1103: 0000000000096800 102 FUNC GLOBAL DEFAULT 12 argz_delete@@GLIBC_2.2.5 + 1104: 000000000002f5e0 19 FUNC GLOBAL DEFAULT 12 __isprint_l@@GLIBC_2.2.5 + 1105: 0000000000134f00 93 FUNC GLOBAL DEFAULT 12 xdr_u_long@@GLIBC_2.2.5 + 1106: 0000000000073420 99 FUNC GLOBAL DEFAULT 12 __woverflow@@GLIBC_2.2.5 + 1107: 00000000001171d0 20 FUNC GLOBAL DEFAULT 12 __wmempcpy_chk@@GLIBC_2.4 + 1108: 00000000000c7ed0 580 FUNC WEAK DEFAULT 12 fpathconf@@GLIBC_2.2.5 + 1109: 000000000002f560 18 FUNC WEAK DEFAULT 12 iscntrl_l@@GLIBC_2.3 + 1110: 00000000000e1570 137 FUNC WEAK DEFAULT 12 regerror@@GLIBC_2.2.5 + 1111: 000000000008cf40 34 IFUNC WEAK DEFAULT 12 strnlen@@GLIBC_2.2.5 + 1112: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.10 + 1113: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.11 + 1114: 000000000003ac10 31 FUNC GLOBAL DEFAULT 12 nrand48@@GLIBC_2.2.5 + 1115: 0000000000100080 156 FUNC WEAK DEFAULT 12 sendmmsg@@GLIBC_2.14 + 1116: 0000000000103920 212 FUNC GLOBAL DEFAULT 12 getspent_r@@GLIBC_2.2.5 + 1117: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.12 + 1118: 00000000000a8ed0 9 FUNC WEAK DEFAULT 12 wmempcpy@@GLIBC_2.2.5 + 1119: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.13 + 1120: 00000000003ccde8 8 OBJECT GLOBAL DEFAULT 34 argp_program_bug_address@@GLIBC_2.2.5 + 1121: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.14 + 1122: 00000000000feb30 90 FUNC WEAK DEFAULT 12 lseek@@GLIBC_2.2.5 + 1123: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.15 + 1124: 00000000000c6dd0 111 FUNC WEAK DEFAULT 12 setresgid@@GLIBC_2.2.5 + 1125: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.16 + 1126: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.17 + 1127: 0000000000135960 370 FUNC GLOBAL DEFAULT 12 xdr_string@@GLIBC_2.2.5 + 1128: 00000000000b86a0 135 FUNC GLOBAL DEFAULT 12 ftime@@GLIBC_2.2.5 + 1129: 0000000000036c10 33 FUNC WEAK DEFAULT 12 sigaltstack@@GLIBC_2.2.5 + 1130: 0000000000094bc0 85 IFUNC GLOBAL DEFAULT 12 memcpy@@GLIBC_2.14 + 1131: 0000000000071780 254 FUNC WEAK DEFAULT 12 getwc@@GLIBC_2.2.5 + 1132: 000000000008f950 75 IFUNC GLOBAL DEFAULT 12 memcpy@GLIBC_2.2.5 + 1133: 00000000000f8070 66 FUNC GLOBAL DEFAULT 12 endusershell@@GLIBC_2.2.5 + 1134: 00000000000e3970 33 FUNC GLOBAL DEFAULT 12 __sched_get_priority_min@@GLIBC_2.2.5 + 1135: 00000000000f0a50 129 FUNC GLOBAL DEFAULT 12 getwd@@GLIBC_2.2.5 + 1136: 00000000000a9200 27 FUNC WEAK DEFAULT 12 mbrlen@@GLIBC_2.2.5 + 1137: 0000000000078740 656 FUNC GLOBAL DEFAULT 12 freopen64@@GLIBC_2.2.5 + 1138: 00000000000ef190 11 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setschedparam@@GLIBC_2.2.5 + 1139: 00000000000b8730 1550 FUNC WEAK DEFAULT 12 getdate_r@@GLIBC_2.2.5 + 1140: 000000000006e0d0 578 FUNC GLOBAL DEFAULT 12 fclose@@GLIBC_2.2.5 + 1141: 000000000007d9f0 64 FUNC GLOBAL DEFAULT 12 _IO_adjust_column@@GLIBC_2.2.5 + 1142: 0000000000074390 189 FUNC GLOBAL DEFAULT 12 _IO_seekwmark@@GLIBC_2.2.5 + 1143: 0000000000112b40 249 FUNC GLOBAL DEFAULT 12 __nss_lookup@@GLIBC_PRIVATE + 1144: 0000000000036960 130 FUNC GLOBAL DEFAULT 12 __sigpause@@GLIBC_2.2.5 + 1145: 00000000000efc20 282 FUNC WEAK DEFAULT 12 euidaccess@@GLIBC_2.2.5 + 1146: 00000000000f1250 37 FUNC GLOBAL DEFAULT 12 symlinkat@@GLIBC_2.4 + 1147: 000000000003ab30 14 FUNC GLOBAL DEFAULT 12 rand@@GLIBC_2.2.5 + 1148: 00000000000f5b70 233 FUNC WEAK DEFAULT 12 pselect@@GLIBC_2.2.5 + 1149: 000000000010c7b0 38 FUNC GLOBAL DEFAULT 12 pthread_setcanceltype@@GLIBC_2.2.5 + 1150: 00000000000f4cd0 30 FUNC GLOBAL DEFAULT 12 tcsetpgrp@@GLIBC_2.2.5 + 1151: 000000000013e7b0 21 FUNC GLOBAL DEFAULT 12 nftw64@GLIBC_2.2.5 + 1152: 0000000000115630 75 IFUNC GLOBAL DEFAULT 12 __memmove_chk@@GLIBC_2.3.4 + 1153: 00000000000a7420 3268 FUNC GLOBAL DEFAULT 12 wcscmp@@GLIBC_2.2.5 + 1154: 00000000000f21f0 52 FUNC GLOBAL DEFAULT 12 nftw64@@GLIBC_2.3.3 + 1155: 00000000000f9080 33 FUNC WEAK DEFAULT 12 mprotect@@GLIBC_2.2.5 + 1156: 0000000000116e60 42 FUNC GLOBAL DEFAULT 12 __getwd_chk@@GLIBC_2.4 + 1157: 0000000000090000 17 FUNC WEAK DEFAULT 12 ffsl@@GLIBC_2.2.5 + 1158: 00000000001126e0 1114 FUNC GLOBAL DEFAULT 12 __nss_lookup_function@@GLIBC_PRIVATE + 1159: 00000000000f69a0 148 FUNC GLOBAL DEFAULT 12 getmntent@@GLIBC_2.2.5 + 1160: 00000000000b31e0 105 FUNC GLOBAL DEFAULT 12 __wcscasecmp_l@@GLIBC_2.2.5 + 1161: 000000000013e270 17 FUNC GLOBAL DEFAULT 12 __libc_dl_error_tsd@@GLIBC_PRIVATE + 1162: 000000000003af50 16 FUNC GLOBAL DEFAULT 12 __strtol_internal@@GLIBC_2.2.5 + 1163: 0000000000115f60 219 FUNC GLOBAL DEFAULT 12 __vsnprintf_chk@@GLIBC_2.3.4 + 1164: 00000000000f61e0 11 FUNC WEAK DEFAULT 12 mkostemp64@@GLIBC_2.7 + 1165: 00000000000c0360 24 FUNC GLOBAL DEFAULT 12 __wcsftime_l@@GLIBC_2.3 + 1166: 000000000006df90 309 FUNC GLOBAL DEFAULT 12 _IO_file_doallocate@@GLIBC_2.2.5 + 1167: 000000000010c660 38 FUNC GLOBAL DEFAULT 12 pthread_setschedparam@@GLIBC_2.2.5 + 1168: 000000000003af90 18 FUNC GLOBAL DEFAULT 12 strtoul@@GLIBC_2.2.5 + 1169: 00000000000f9f10 48 FUNC GLOBAL DEFAULT 12 hdestroy_r@@GLIBC_2.2.5 + 1170: 0000000000079210 333 FUNC GLOBAL DEFAULT 12 fmemopen@@GLIBC_2.2.5 + 1171: 0000000000103870 161 FUNC GLOBAL DEFAULT 12 endspent@@GLIBC_2.2.5 + 1172: 00000000000f9230 33 FUNC GLOBAL DEFAULT 12 munlockall@@GLIBC_2.2.5 + 1173: 00000000000369f0 66 FUNC WEAK DEFAULT 12 sigpause@@GLIBC_2.2.5 + 1174: 000000000013d250 165 FUNC GLOBAL DEFAULT 12 getutmp@@GLIBC_2.2.5 + 1175: 000000000013d250 165 FUNC GLOBAL DEFAULT 12 getutmpx@@GLIBC_2.2.5 + 1176: 000000000004e070 21 FUNC GLOBAL DEFAULT 12 vprintf@@GLIBC_2.2.5 + 1177: 0000000000134e60 94 FUNC GLOBAL DEFAULT 12 xdr_u_int@@GLIBC_2.2.5 + 1178: 00000000000ffc20 36 FUNC WEAK DEFAULT 12 setsockopt@@GLIBC_2.2.5 + 1179: 000000000007cf50 370 FUNC GLOBAL DEFAULT 12 _IO_default_xsputn@@GLIBC_2.2.5 + 1180: 0000000000085740 214 FUNC GLOBAL DEFAULT 12 malloc@@GLIBC_2.2.5 + 1181: 00000000003cd160 24 OBJECT GLOBAL DEFAULT 34 svcauthdes_stats@@GLIBC_2.2.5 + 1182: 00000000000fede0 31 FUNC GLOBAL DEFAULT 12 eventfd_read@@GLIBC_2.7 + 1183: 000000000003af90 18 FUNC WEAK DEFAULT 12 strtouq@@GLIBC_2.2.5 + 1184: 00000000000f80e0 507 FUNC GLOBAL DEFAULT 12 getpass@@GLIBC_2.2.5 + 1185: 00000000000f9170 36 FUNC WEAK DEFAULT 12 remap_file_pages@@GLIBC_2.3.3 + 1186: 00000000000361e0 59 FUNC WEAK DEFAULT 12 siglongjmp@@GLIBC_2.2.5 + 1187: 00000000003c8150 8 OBJECT GLOBAL DEFAULT 33 __ctype32_tolower@GLIBC_2.2.5 + 1188: 000000000012b1a0 22 FUNC GLOBAL DEFAULT 12 xdr_keystatus@@GLIBC_2.2.5 + 1189: 00000000000ff500 33 FUNC GLOBAL DEFAULT 12 uselib@@GLIBC_2.2.5 + 1190: 0000000000037050 151 FUNC GLOBAL DEFAULT 12 sigisemptyset@@GLIBC_2.2.5 + 1191: 0000000000043ca0 155 FUNC GLOBAL DEFAULT 12 strfmon@@GLIBC_2.2.5 + 1192: 000000000002ec10 410 FUNC WEAK DEFAULT 12 duplocale@@GLIBC_2.3 + 1193: 00000000000363c0 36 FUNC GLOBAL DEFAULT 12 killpg@@GLIBC_2.2.5 + 1194: 000000000008b100 53 IFUNC GLOBAL DEFAULT 12 strcat@@GLIBC_2.2.5 + 1195: 0000000000134e00 95 FUNC GLOBAL DEFAULT 12 xdr_int@@GLIBC_2.2.5 + 1196: 00000000000fff30 156 FUNC GLOBAL DEFAULT 12 accept4@@GLIBC_2.10 + 1197: 00000000000ef790 8 FUNC WEAK DEFAULT 12 umask@@GLIBC_2.2.5 + 1198: 00000000000b41e0 127 FUNC GLOBAL DEFAULT 12 __isoc99_vswscanf@@GLIBC_2.7 + 1199: 00000000000901d0 99 IFUNC WEAK DEFAULT 12 strcasecmp@@GLIBC_2.2.5 + 1200: 00000000000785b0 320 FUNC WEAK DEFAULT 12 ftello64@@GLIBC_2.2.5 + 1201: 00000000000c14b0 135 FUNC WEAK DEFAULT 12 fdopendir@@GLIBC_2.4 + 1202: 000000000013e340 33 FUNC GLOBAL DEFAULT 12 realpath@GLIBC_2.2.5 + 1203: 0000000000043420 1376 FUNC GLOBAL DEFAULT 12 realpath@@GLIBC_2.3 + 1204: 000000000010c3c0 38 FUNC GLOBAL DEFAULT 12 pthread_attr_getschedpolicy@@GLIBC_2.2.5 + 1205: 00000000000357e0 183 FUNC WEAK DEFAULT 12 modf@@GLIBC_2.2.5 + 1206: 00000000000785b0 320 FUNC GLOBAL DEFAULT 12 ftello@@GLIBC_2.2.5 + 1207: 00000000000b8680 26 FUNC GLOBAL DEFAULT 12 timegm@@GLIBC_2.2.5 + 1208: 000000000013db00 132 FUNC GLOBAL DEFAULT 12 __libc_dlclose@@GLIBC_PRIVATE + 1209: 00000000000879d0 258 FUNC GLOBAL DEFAULT 12 __libc_mallinfo@@GLIBC_2.2.5 + 1210: 0000000000036350 110 FUNC GLOBAL DEFAULT 12 raise@@GLIBC_2.2.5 + 1211: 00000000000f58d0 147 FUNC GLOBAL DEFAULT 12 setegid@@GLIBC_2.2.5 + 1212: 00000000001149e0 37 FUNC GLOBAL DEFAULT 12 __clock_getres@@GLIBC_PRIVATE + 1213: 00000000000fec30 33 FUNC GLOBAL DEFAULT 12 setfsgid@@GLIBC_2.2.5 + 1214: 0000000000086410 252 FUNC WEAK DEFAULT 12 malloc_usable_size@@GLIBC_2.2.5 + 1215: 0000000000073fa0 142 FUNC GLOBAL DEFAULT 12 _IO_wdefault_doallocate@@GLIBC_2.2.5 + 1216: 000000000002f580 19 FUNC GLOBAL DEFAULT 12 __isdigit_l@@GLIBC_2.2.5 + 1217: 00000000000592b0 37969 FUNC GLOBAL DEFAULT 12 _IO_vfscanf@@GLIBC_2.2.5 + 1218: 000000000006bdf0 51 FUNC GLOBAL DEFAULT 12 remove@@GLIBC_2.2.5 + 1219: 00000000000e38b0 33 FUNC WEAK DEFAULT 12 sched_setscheduler@@GLIBC_2.2.5 + 1220: 00000000000c0380 66 FUNC GLOBAL DEFAULT 12 timespec_get@@GLIBC_2.16 + 1221: 00000000000aebb0 10 FUNC WEAK DEFAULT 12 wcstold_l@@GLIBC_2.3 + 1222: 00000000000c6c40 33 FUNC WEAK DEFAULT 12 setpgid@@GLIBC_2.2.5 + 1223: 0000000000086000 352 FUNC WEAK DEFAULT 12 aligned_alloc@@GLIBC_2.16 + 1224: 00000000000efad0 46 FUNC GLOBAL DEFAULT 12 __openat_2@@GLIBC_2.7 + 1225: 00000000000ff880 33 FUNC WEAK DEFAULT 12 getpeername@@GLIBC_2.2.5 + 1226: 00000000000b31e0 105 FUNC WEAK DEFAULT 12 wcscasecmp_l@@GLIBC_2.3 + 1227: 000000000008ca40 290 FUNC GLOBAL DEFAULT 12 __strverscmp@@GLIBC_2.2.5 + 1228: 0000000000116b20 364 FUNC GLOBAL DEFAULT 12 __fgets_chk@@GLIBC_2.4 + 1229: 000000000008af40 70 FUNC GLOBAL DEFAULT 12 __libc_dynarray_resize_clear@@GLIBC_PRIVATE + 1230: 0000000000110330 12 FUNC GLOBAL DEFAULT 12 __res_state@@GLIBC_2.2.5 + 1231: 00000000001279a0 229 FUNC GLOBAL DEFAULT 12 pmap_getmaps@@GLIBC_2.2.5 + 1232: 000000000008cbc0 73 FUNC GLOBAL DEFAULT 12 __strndup@@GLIBC_2.2.5 + 1233: 00000000003c4720 1080 OBJECT GLOBAL DEFAULT 29 sys_errlist@@GLIBC_2.12 + 1234: 00000000003c4720 1000 OBJECT GLOBAL DEFAULT 29 sys_errlist@GLIBC_2.2.5 + 1235: 00000000003c4720 1008 OBJECT GLOBAL DEFAULT 29 sys_errlist@GLIBC_2.3 + 1236: 0000000000035ce0 88 FUNC WEAK DEFAULT 12 frexpf@@GLIBC_2.2.5 + 1237: 00000000003c4720 1056 OBJECT GLOBAL DEFAULT 29 sys_errlist@GLIBC_2.4 + 1238: 00000000003ccd20 8 OBJECT GLOBAL DEFAULT 34 mallwatch@@GLIBC_2.2.5 + 1239: 000000000007df00 637 FUNC WEAK DEFAULT 12 _flushlbf@@GLIBC_2.2.5 + 1240: 00000000000a91e0 22 FUNC WEAK DEFAULT 12 mbsinit@@GLIBC_2.2.5 + 1241: 0000000000102b70 76 FUNC WEAK DEFAULT 12 towupper_l@@GLIBC_2.3 + 1242: 0000000000115ba0 251 FUNC GLOBAL DEFAULT 12 __strncpy_chk@@GLIBC_2.3.4 + 1243: 00000000000c6a10 8 FUNC WEAK DEFAULT 12 getgid@@GLIBC_2.2.5 + 1244: 0000000000053620 143 FUNC WEAK DEFAULT 12 asprintf@@GLIBC_2.2.5 + 1245: 00000000000b6bb0 143 FUNC WEAK DEFAULT 12 tzset@@GLIBC_2.2.5 + 1246: 00000000000ee270 96 FUNC GLOBAL DEFAULT 12 __libc_pwrite@@GLIBC_PRIVATE + 1247: 00000000000c3980 599 FUNC GLOBAL DEFAULT 12 __copy_grp@@GLIBC_PRIVATE + 1248: 00000000000e0d70 119 FUNC WEAK DEFAULT 12 re_compile_pattern@@GLIBC_2.2.5 + 1249: 00000000003c7278 4 OBJECT GLOBAL DEFAULT 33 re_max_failures@@GLIBC_2.2.5 + 1250: 0000000000035fc0 132 FUNC WEAK DEFAULT 12 frexpl@@GLIBC_2.2.5 + 1251: 00000000000ef4f0 69 FUNC GLOBAL DEFAULT 12 __lxstat64@@GLIBC_2.2.5 + 1252: 0000000000134110 632 FUNC GLOBAL DEFAULT 12 svcudp_bufcreate@@GLIBC_2.2.5 + 1253: 0000000000129f30 205 FUNC GLOBAL DEFAULT 12 xdrrec_eof@@GLIBC_2.2.5 + 1254: 000000000002f3f0 26 FUNC GLOBAL DEFAULT 12 isupper@@GLIBC_2.2.5 + 1255: 00000000000f8c60 16 FUNC GLOBAL DEFAULT 12 vsyslog@@GLIBC_2.2.5 + 1256: 00000000000ef680 33 FUNC WEAK DEFAULT 12 fstatfs64@@GLIBC_2.2.5 + 1257: 000000000008cc90 384 FUNC GLOBAL DEFAULT 12 __strerror_r@@GLIBC_2.2.5 + 1258: 0000000000035b40 18 FUNC WEAK DEFAULT 12 finitef@@GLIBC_2.2.5 + 1259: 000000000013b4b0 84 FUNC WEAK DEFAULT 12 getutline@@GLIBC_2.2.5 + 1260: 000000000007cbd0 458 FUNC GLOBAL DEFAULT 12 __uflow@@GLIBC_2.2.5 + 1261: 00000000000fee30 36 FUNC WEAK DEFAULT 12 prlimit64@@GLIBC_2.13 + 1262: 000000000008fb00 85 IFUNC GLOBAL DEFAULT 12 __mempcpy@@GLIBC_2.2.5 + 1263: 000000000003b460 10 FUNC WEAK DEFAULT 12 strtol_l@@GLIBC_2.3 + 1264: 0000000000035b20 21 FUNC GLOBAL DEFAULT 12 __isnanf@@GLIBC_2.2.5 + 1265: 0000000000035e50 15 FUNC WEAK DEFAULT 12 finitel@@GLIBC_2.2.5 + 1266: 000000000002e4f0 73 FUNC GLOBAL DEFAULT 12 __nl_langinfo_l@@GLIBC_2.2.5 + 1267: 00000000001330e0 349 FUNC GLOBAL DEFAULT 12 svc_getreq_poll@@GLIBC_2.2.5 + 1268: 00000000000ef2f0 33 IFUNC GLOBAL DEFAULT 12 __sched_cpucount@@GLIBC_2.6 + 1269: 000000000010c330 38 FUNC GLOBAL DEFAULT 12 pthread_attr_setinheritsched@@GLIBC_2.2.5 + 1270: 000000000002e4e0 16 FUNC GLOBAL DEFAULT 12 nl_langinfo@@GLIBC_2.2.5 + 1271: 00000000003cd0a8 8 OBJECT GLOBAL DEFAULT 34 svc_pollfd@@GLIBC_2.2.5 + 1272: 0000000000078100 182 FUNC WEAK DEFAULT 12 __vsnprintf@@GLIBC_2.2.5 + 1273: 00000000000f63b0 122 FUNC GLOBAL DEFAULT 12 setfsent@@GLIBC_2.2.5 + 1274: 0000000000035e10 53 FUNC GLOBAL DEFAULT 12 __isnanl@@GLIBC_2.2.5 + 1275: 00000000000f7500 119 FUNC WEAK DEFAULT 12 hasmntopt@@GLIBC_2.2.5 + 1276: 00000000001149e0 37 FUNC WEAK DEFAULT 12 clock_getres@@GLIBC_2.17 + 1277: 00000000000c0f60 13 FUNC WEAK DEFAULT 12 opendir@@GLIBC_2.2.5 + 1278: 0000000000037300 7 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmax@@GLIBC_2.2.5 + 1279: 00000000000a8450 195 FUNC GLOBAL DEFAULT 12 wcsncat@@GLIBC_2.2.5 + 1280: 000000000011a8f0 950 FUNC GLOBAL DEFAULT 12 getnetbyaddr_r@@GLIBC_2.2.5 + 1281: 0000000000117f80 16 FUNC GLOBAL DEFAULT 12 __mbsrtowcs_chk@@GLIBC_2.4 + 1282: 000000000006ea30 364 FUNC GLOBAL DEFAULT 12 _IO_fgets@@GLIBC_2.2.5 + 1283: 000000000011a340 149 FUNC GLOBAL DEFAULT 12 gethostent@@GLIBC_2.2.5 + 1284: 000000000008ffe0 10 FUNC WEAK DEFAULT 12 bzero@@GLIBC_2.2.5 + 1285: 00000000003cd140 32 OBJECT GLOBAL DEFAULT 34 rpc_createerr@@GLIBC_2.2.5 + 1286: 0000000000127e50 1647 FUNC GLOBAL DEFAULT 12 clnt_broadcast@@GLIBC_2.2.5 + 1287: 0000000000036d10 25 FUNC GLOBAL DEFAULT 12 __sigaddset@@GLIBC_2.2.5 + 1288: 00000000003c73a4 4 OBJECT GLOBAL DEFAULT 33 argp_err_exit_status@@GLIBC_2.2.5 + 1289: 00000000000899e0 216 FUNC GLOBAL DEFAULT 12 mcheck_check_all@@GLIBC_2.2.5 + 1290: 0000000000035af0 35 FUNC GLOBAL DEFAULT 12 __isinff@@GLIBC_2.2.5 + 1291: 000000000010c480 38 FUNC GLOBAL DEFAULT 12 pthread_condattr_destroy@@GLIBC_2.2.5 + 1292: 00000000003ca468 8 OBJECT GLOBAL DEFAULT 34 __environ@@GLIBC_2.2.5 + 1293: 00000000000ef650 33 FUNC GLOBAL DEFAULT 12 __statfs@@GLIBC_2.2.5 + 1294: 0000000000102e50 326 FUNC GLOBAL DEFAULT 12 getspnam@@GLIBC_2.2.5 + 1295: 0000000000117240 100 FUNC GLOBAL DEFAULT 12 __wcscat_chk@@GLIBC_2.4 + 1296: 0000000000124560 10 FUNC GLOBAL DEFAULT 12 inet6_option_space@@GLIBC_2.3.3 + 1297: 00000000000ef450 69 FUNC GLOBAL DEFAULT 12 __xstat64@@GLIBC_2.2.5 + 1298: 00000000000c36e0 558 FUNC WEAK DEFAULT 12 fgetgrent_r@@GLIBC_2.2.5 + 1299: 00000000000feaa0 134 FUNC WEAK DEFAULT 12 clone@@GLIBC_2.2.5 + 1300: 000000000002f6c0 17 FUNC GLOBAL DEFAULT 12 __ctype_b_loc@@GLIBC_2.3 + 1301: 000000000013e380 13 FUNC GLOBAL DEFAULT 12 sched_getaffinity@GLIBC_2.3.3 + 1302: 0000000000035dc0 68 FUNC GLOBAL DEFAULT 12 __isinfl@@GLIBC_2.2.5 + 1303: 00000000001028e0 129 FUNC GLOBAL DEFAULT 12 __iswpunct_l@@GLIBC_2.2.5 + 1304: 0000000000036a40 91 FUNC WEAK DEFAULT 12 __xpg_sigpause@@GLIBC_2.2.5 + 1305: 0000000000039210 220 FUNC GLOBAL DEFAULT 12 getenv@@GLIBC_2.2.5 + 1306: 00000000000e39d0 101 FUNC GLOBAL DEFAULT 12 sched_getaffinity@@GLIBC_2.3.4 + 1307: 000000000006b400 143 FUNC GLOBAL DEFAULT 12 sscanf@@GLIBC_2.2.5 + 1308: 0000000000100dd0 487 FUNC WEAK DEFAULT 12 profil@@GLIBC_2.2.5 + 1309: 00000000000f5610 156 FUNC GLOBAL DEFAULT 12 preadv@@GLIBC_2.10 + 1310: 000000000003ade0 63 FUNC WEAK DEFAULT 12 jrand48_r@@GLIBC_2.2.5 + 1311: 00000000000c6d60 111 FUNC WEAK DEFAULT 12 setresuid@@GLIBC_2.2.5 + 1312: 00000000000ef950 47 FUNC GLOBAL DEFAULT 12 __open_2@@GLIBC_2.7 + 1313: 00000000000ff9f0 96 FUNC WEAK DEFAULT 12 recvfrom@@GLIBC_2.2.5 + 1314: 00000000001019a0 11 FUNC GLOBAL DEFAULT 12 __profile_frequency@@GLIBC_2.2.5 + 1315: 00000000000a9a40 587 FUNC WEAK DEFAULT 12 wcsnrtombs@@GLIBC_2.2.5 + 1316: 00000000003cd0c0 128 OBJECT GLOBAL DEFAULT 34 svc_fdset@@GLIBC_2.2.5 + 1317: 000000000011f9b0 171 FUNC GLOBAL DEFAULT 12 ruserok@@GLIBC_2.2.5 + 1318: 000000000008a990 54 FUNC GLOBAL DEFAULT 12 _obstack_allocated_p@@GLIBC_2.2.5 + 1319: 00000000000f3c10 36 FUNC GLOBAL DEFAULT 12 fts_set@@GLIBC_2.2.5 + 1320: 00000000001351a0 188 FUNC GLOBAL DEFAULT 12 xdr_u_longlong_t@@GLIBC_2.2.5 + 1321: 00000000000f5310 111 FUNC GLOBAL DEFAULT 12 nice@@GLIBC_2.2.5 + 1322: 0000000000134960 463 FUNC GLOBAL DEFAULT 12 xdecrypt@@GLIBC_2.2.5 + 1323: 00000000000e1450 287 FUNC WEAK DEFAULT 12 regcomp@@GLIBC_2.2.5 + 1324: 0000000000118770 57 FUNC GLOBAL DEFAULT 12 __fortify_fail@@GLIBC_PRIVATE + 1325: 00000000000b8580 33 FUNC WEAK DEFAULT 12 getitimer@@GLIBC_2.2.5 + 1326: 00000000000ef8f0 90 FUNC WEAK DEFAULT 12 __open@@GLIBC_2.2.5 + 1327: 000000000002f370 26 FUNC GLOBAL DEFAULT 12 isgraph@@GLIBC_2.2.5 + 1328: 00000000003ccda8 8 OBJECT GLOBAL DEFAULT 34 optarg@@GLIBC_2.2.5 + 1329: 0000000000034ed0 85 FUNC GLOBAL DEFAULT 12 catclose@@GLIBC_2.2.5 + 1330: 00000000001307e0 696 FUNC GLOBAL DEFAULT 12 clntudp_bufcreate@@GLIBC_2.2.5 + 1331: 000000000011c2b0 335 FUNC GLOBAL DEFAULT 12 getservbyname@@GLIBC_2.2.5 + 1332: 0000000000078a50 34 FUNC GLOBAL DEFAULT 12 __freading@@GLIBC_2.2.5 + 1333: 00000000003c8868 8 OBJECT GLOBAL DEFAULT 33 stderr@@GLIBC_2.2.5 + 1334: 00000000000b1510 98 FUNC GLOBAL DEFAULT 12 wcwidth@@GLIBC_2.2.5 + 1335: 00000000001002d0 33 FUNC WEAK DEFAULT 12 msgctl@@GLIBC_2.2.5 + 1336: 0000000000118a60 41 FUNC GLOBAL DEFAULT 12 inet_lnaof@@GLIBC_2.2.5 + 1337: 0000000000036f10 52 FUNC GLOBAL DEFAULT 12 sigdelset@@GLIBC_2.2.5 + 1338: 00000000000f54a0 33 FUNC WEAK DEFAULT 12 ioctl@@GLIBC_2.2.5 + 1339: 00000000000f5db0 33 FUNC GLOBAL DEFAULT 12 syncfs@@GLIBC_2.14 + 1340: 0000000000022640 8 FUNC WEAK DEFAULT 12 gnu_get_libc_release@@GLIBC_2.2.5 + 1341: 00000000000f0c00 45 FUNC GLOBAL DEFAULT 12 fchownat@@GLIBC_2.4 + 1342: 00000000000c5790 33 FUNC GLOBAL DEFAULT 12 alarm@@GLIBC_2.2.5 + 1343: 00000000003c81c0 224 OBJECT GLOBAL DEFAULT 33 _IO_2_1_stderr_@@GLIBC_2.2.5 + 1344: 0000000000074120 120 FUNC GLOBAL DEFAULT 12 _IO_sputbackwc@@GLIBC_2.2.5 + 1345: 00000000000875a0 442 FUNC GLOBAL DEFAULT 12 __libc_pvalloc@@GLIBC_2.2.5 + 1346: 00000000000432c0 94 FUNC WEAK DEFAULT 12 system@@GLIBC_2.2.5 + 1347: 000000000012b360 136 FUNC GLOBAL DEFAULT 12 xdr_getcredres@@GLIBC_2.2.5 + 1348: 00000000000aa2e0 10 FUNC GLOBAL DEFAULT 12 __wcstol_l@@GLIBC_2.2.5 + 1349: 00000000000fc5b0 137 FUNC GLOBAL DEFAULT 12 err@@GLIBC_2.2.5 + 1350: 000000000006b280 7 FUNC WEAK DEFAULT 12 vfwscanf@@GLIBC_2.2.5 + 1351: 00000000000f7820 28 FUNC GLOBAL DEFAULT 12 chflags@@GLIBC_2.2.5 + 1352: 00000000000ff1a0 33 FUNC GLOBAL DEFAULT 12 inotify_init@@GLIBC_2.4 + 1353: 00000000000ff5c0 36 FUNC GLOBAL DEFAULT 12 timerfd_settime@@GLIBC_2.8 + 1354: 000000000011c440 894 FUNC GLOBAL DEFAULT 12 getservbyname_r@@GLIBC_2.2.5 + 1355: 0000000000090000 17 FUNC GLOBAL DEFAULT 12 ffsll@@GLIBC_2.2.5 + 1356: 0000000000135400 109 FUNC GLOBAL DEFAULT 12 xdr_bool@@GLIBC_2.2.5 + 1357: 000000000002f6a0 32 FUNC GLOBAL DEFAULT 12 __isctype@@GLIBC_2.3 + 1358: 00000000000f4ef0 33 FUNC WEAK DEFAULT 12 setrlimit64@@GLIBC_2.2.5 + 1359: 00000000000ef370 80 FUNC GLOBAL DEFAULT 12 sched_getcpu@@GLIBC_2.6 + 1360: 00000000000c6b20 234 FUNC WEAK DEFAULT 12 group_member@@GLIBC_2.2.5 + 1361: 000000000007c960 52 FUNC GLOBAL DEFAULT 12 _IO_free_backup_area@@GLIBC_2.2.5 + 1362: 00000000000f9050 33 FUNC WEAK DEFAULT 12 munmap@@GLIBC_2.2.5 + 1363: 000000000006e840 417 FUNC GLOBAL DEFAULT 12 _IO_fgetpos@@GLIBC_2.2.5 + 1364: 00000000000ee6a0 133 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setsigdefault@@GLIBC_2.2.5 + 1365: 000000000008a740 197 FUNC GLOBAL DEFAULT 12 _obstack_begin_1@@GLIBC_2.2.5 + 1366: 00000000001051b0 161 FUNC GLOBAL DEFAULT 12 endsgent@@GLIBC_2.10 + 1367: 00000000000c4f90 704 FUNC GLOBAL DEFAULT 12 _nss_files_parse_pwent@@GLIBC_PRIVATE + 1368: 00000000000c0d80 114 FUNC GLOBAL DEFAULT 12 ntp_gettimex@@GLIBC_2.12 + 1369: 00000000000c5690 18 FUNC WEAK DEFAULT 12 wait3@@GLIBC_2.2.5 + 1370: 0000000000117ec0 45 FUNC GLOBAL DEFAULT 12 __getgroups_chk@@GLIBC_2.4 + 1371: 00000000000c56b0 36 FUNC WEAK DEFAULT 12 wait4@@GLIBC_2.2.5 + 1372: 000000000008a810 375 FUNC GLOBAL DEFAULT 12 _obstack_newchunk@@GLIBC_2.2.5 + 1373: 00000000000fd410 84 FUNC WEAK DEFAULT 12 advance@@GLIBC_2.2.5 + 1374: 0000000000125180 58 FUNC GLOBAL DEFAULT 12 inet6_opt_init@@GLIBC_2.5 + 1375: 00000000003c7084 2 OBJECT GLOBAL DEFAULT 33 __fpu_control@@GLIBC_2.2.5 + 1376: 0000000000119460 514 FUNC GLOBAL DEFAULT 12 gethostbyname@@GLIBC_2.2.5 + 1377: 0000000000115ee0 128 FUNC GLOBAL DEFAULT 12 __snprintf_chk@@GLIBC_2.3.4 + 1378: 00000000000feb30 90 FUNC WEAK DEFAULT 12 __lseek@@GLIBC_2.2.5 + 1379: 00000000000aa2e0 10 FUNC WEAK DEFAULT 12 wcstol_l@@GLIBC_2.3 + 1380: 00000000000ee4e0 138 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_adddup2@@GLIBC_2.2.5 + 1381: 00000000003c7280 4 OBJECT GLOBAL DEFAULT 33 optopt@@GLIBC_2.2.5 + 1382: 00000000003ccdc0 4 OBJECT GLOBAL DEFAULT 34 error_message_count@@GLIBC_2.2.5 + 1383: 000000000002f560 18 FUNC GLOBAL DEFAULT 12 __iscntrl_l@@GLIBC_2.2.5 + 1384: 00000000000f5830 147 FUNC GLOBAL DEFAULT 12 seteuid@@GLIBC_2.2.5 + 1385: 00000000000ef8c0 39 FUNC GLOBAL DEFAULT 12 mkdirat@@GLIBC_2.4 + 1386: 00000000000a80f0 35 IFUNC GLOBAL DEFAULT 12 wcscpy@@GLIBC_2.2.5 + 1387: 00000000000f0240 33 FUNC WEAK DEFAULT 12 dup@@GLIBC_2.2.5 + 1388: 00000000000fec00 33 FUNC GLOBAL DEFAULT 12 setfsuid@@GLIBC_2.2.5 + 1389: 00000000003c8a40 8 OBJECT GLOBAL DEFAULT 34 __vdso_clock_gettime@@GLIBC_PRIVATE + 1390: 000000000003adc0 22 FUNC GLOBAL DEFAULT 12 mrand48_r@@GLIBC_2.2.5 + 1391: 0000000000042ca0 173 FUNC GLOBAL DEFAULT 12 __strtod_nan@@GLIBC_PRIVATE + 1392: 000000000010c600 45 FUNC GLOBAL DEFAULT 12 pthread_exit@@GLIBC_2.2.5 + 1393: 00000000001156e0 65 IFUNC GLOBAL DEFAULT 12 __memset_chk@@GLIBC_2.3.4 + 1394: 0000000000135390 110 FUNC GLOBAL DEFAULT 12 xdr_u_char@@GLIBC_2.2.5 + 1395: 0000000000071a70 43 FUNC GLOBAL DEFAULT 12 getwchar_unlocked@@GLIBC_2.2.5 + 1396: 00000000003ccda0 8 OBJECT GLOBAL DEFAULT 34 re_syntax_options@@GLIBC_2.2.5 + 1397: 000000000013d220 5 FUNC GLOBAL DEFAULT 12 pututxline@@GLIBC_2.2.5 + 1398: 00000000000f7840 25 FUNC GLOBAL DEFAULT 12 fchflags@@GLIBC_2.2.5 + 1399: 0000000000114a50 100 FUNC WEAK DEFAULT 12 clock_settime@@GLIBC_2.17 + 1400: 000000000013aa80 57 FUNC GLOBAL DEFAULT 12 getlogin@@GLIBC_2.2.5 + 1401: 00000000001001e0 96 FUNC WEAK DEFAULT 12 msgsnd@@GLIBC_2.2.5 + 1402: 00000000000fee60 33 FUNC WEAK DEFAULT 12 arch_prctl@@GLIBC_2.2.5 + 1403: 0000000000035c00 213 FUNC WEAK DEFAULT 12 scalbnf@@GLIBC_2.2.5 + 1404: 00000000000370f0 244 FUNC GLOBAL DEFAULT 12 sigandset@@GLIBC_2.2.5 + 1405: 000000000007b2d0 146 FUNC GLOBAL DEFAULT 12 _IO_file_finish@@GLIBC_2.2.5 + 1406: 00000000000e39a0 33 FUNC WEAK DEFAULT 12 sched_rr_get_interval@@GLIBC_2.2.5 + 1407: 00000000001108b0 79 FUNC GLOBAL DEFAULT 12 __resolv_context_put@@GLIBC_PRIVATE + 1408: 00000000000fea40 90 FUNC GLOBAL DEFAULT 12 __sysctl@@GLIBC_2.2.5 + 1409: 00000000000c6a30 33 FUNC WEAK DEFAULT 12 getgroups@@GLIBC_2.2.5 + 1410: 00000000001294e0 201 FUNC GLOBAL DEFAULT 12 xdr_double@@GLIBC_2.2.5 + 1411: 0000000000035fa0 17 FUNC WEAK DEFAULT 12 scalbnl@@GLIBC_2.2.5 + 1412: 00000000000f54d0 147 FUNC WEAK DEFAULT 12 readv@@GLIBC_2.2.5 + 1413: 000000000011f7d0 24 FUNC GLOBAL DEFAULT 12 rcmd@@GLIBC_2.2.5 + 1414: 00000000000c69f0 8 FUNC WEAK DEFAULT 12 getuid@@GLIBC_2.2.5 + 1415: 000000000011fa60 151 FUNC GLOBAL DEFAULT 12 iruserok_af@@GLIBC_2.2.5 + 1416: 00000000000f1280 33 FUNC WEAK DEFAULT 12 readlink@@GLIBC_2.2.5 + 1417: 00000000000fbe80 145 FUNC GLOBAL DEFAULT 12 lsearch@@GLIBC_2.2.5 + 1418: 000000000006b2c0 143 FUNC GLOBAL DEFAULT 12 fscanf@@GLIBC_2.2.5 + 1419: 00000000003c8e00 8 OBJECT GLOBAL DEFAULT 34 __abort_msg@@GLIBC_PRIVATE + 1420: 00000000000f6220 36 FUNC WEAK DEFAULT 12 mkostemps64@@GLIBC_2.11 + 1421: 000000000011dd60 248 FUNC GLOBAL DEFAULT 12 ether_aton_r@@GLIBC_2.2.5 + 1422: 0000000000050940 25 FUNC GLOBAL DEFAULT 12 __printf_fp@@GLIBC_2.2.5 + 1423: 00000000000febd0 33 FUNC WEAK DEFAULT 12 readahead@@GLIBC_2.3 + 1424: 0000000000131ba0 508 FUNC GLOBAL DEFAULT 12 host2netname@@GLIBC_2.2.5 + 1425: 00000000000ff290 36 FUNC WEAK DEFAULT 12 mremap@@GLIBC_2.2.5 + 1426: 00000000000fd740 33 FUNC GLOBAL DEFAULT 12 removexattr@@GLIBC_2.3 + 1427: 0000000000073080 49 FUNC GLOBAL DEFAULT 12 _IO_switch_to_wbackup_area@@GLIBC_2.2.5 + 1428: 0000000000127a90 82 FUNC GLOBAL DEFAULT 12 xdr_pmap@@GLIBC_2.2.5 + 1429: 00000000000c5dd0 34 FUNC WEAK DEFAULT 12 execve@@GLIBC_2.2.5 + 1430: 000000000011ba60 136 FUNC GLOBAL DEFAULT 12 getprotoent@@GLIBC_2.2.5 + 1431: 00000000000761b0 395 FUNC GLOBAL DEFAULT 12 _IO_wfile_sync@@GLIBC_2.2.5 + 1432: 00000000000c6a20 8 FUNC WEAK DEFAULT 12 getegid@@GLIBC_2.2.5 + 1433: 00000000001354d0 195 FUNC GLOBAL DEFAULT 12 xdr_opaque@@GLIBC_2.2.5 + 1434: 000000000008ae70 196 FUNC GLOBAL DEFAULT 12 __libc_dynarray_resize@@GLIBC_PRIVATE + 1435: 00000000000f4ef0 33 FUNC WEAK DEFAULT 12 setrlimit@@GLIBC_2.2.5 + 1436: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.5 + 1437: 00000000000e37d0 24 FUNC GLOBAL DEFAULT 12 getopt_long@@GLIBC_2.2.5 + 1438: 000000000007b370 215 FUNC GLOBAL DEFAULT 12 _IO_file_open@@GLIBC_2.2.5 + 1439: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.6 + 1440: 00000000000b5820 33 FUNC WEAK DEFAULT 12 settimeofday@@GLIBC_2.2.5 + 1441: 0000000000077a50 188 FUNC GLOBAL DEFAULT 12 open_memstream@@GLIBC_2.2.5 + 1442: 00000000000f5480 22 FUNC GLOBAL DEFAULT 12 sstk@@GLIBC_2.2.5 + 1443: 00000000000c6c10 33 FUNC WEAK DEFAULT 12 getpgid@@GLIBC_2.2.5 + 1444: 000000000013d230 5 FUNC GLOBAL DEFAULT 12 utmpxname@@GLIBC_2.2.5 + 1445: 0000000000078ac0 103 FUNC GLOBAL DEFAULT 12 __fpurge@@GLIBC_2.2.5 + 1446: 000000000013e190 205 FUNC GLOBAL DEFAULT 12 _dl_vsym@@GLIBC_PRIVATE + 1447: 0000000000115a50 324 FUNC GLOBAL DEFAULT 12 __strncat_chk@@GLIBC_2.3.4 + 1448: 0000000000037300 7 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmax_private@@GLIBC_PRIVATE + 1449: 0000000000042c00 10 FUNC WEAK DEFAULT 12 strtold_l@@GLIBC_2.3 + 1450: 00000000000fc130 164 FUNC GLOBAL DEFAULT 12 vwarnx@@GLIBC_2.2.5 + 1451: 00000000000ef1a0 27 FUNC GLOBAL DEFAULT 12 posix_madvise@@GLIBC_2.2.5 + 1452: 00000000000ee760 8 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getpgroup@@GLIBC_2.2.5 + 1453: 00000000000997a0 200 FUNC GLOBAL DEFAULT 12 __mempcpy_small@@GLIBC_2.2.5 + 1454: 000000000006e840 417 FUNC GLOBAL DEFAULT 12 fgetpos64@@GLIBC_2.2.5 + 1455: 00000000003cd088 4 OBJECT GLOBAL DEFAULT 34 rexecoptions@@GLIBC_2.2.5 + 1456: 000000000008b300 54 IFUNC WEAK DEFAULT 12 index@@GLIBC_2.2.5 + 1457: 00000000000c6260 15 FUNC GLOBAL DEFAULT 12 execvp@@GLIBC_2.2.5 + 1458: 000000000010c2a0 38 FUNC GLOBAL DEFAULT 12 pthread_attr_getdetachstate@@GLIBC_2.2.5 + 1459: 0000000000076340 542 FUNC GLOBAL DEFAULT 12 _IO_wfile_xsputn@@GLIBC_2.2.5 + 1460: 00000000000f9140 33 FUNC GLOBAL DEFAULT 12 mincore@@GLIBC_2.2.5 + 1461: 00000000000879d0 258 FUNC WEAK DEFAULT 12 mallinfo@@GLIBC_2.2.5 + 1462: 00000000000fd7a0 88 FUNC WEAK DEFAULT 12 getauxval@@GLIBC_2.16 + 1463: 0000000000124550 5 FUNC GLOBAL DEFAULT 12 freeifaddrs@@GLIBC_2.3 + 1464: 000000000002ec10 410 FUNC GLOBAL DEFAULT 12 __duplocale@@GLIBC_2.2.5 + 1465: 0000000000087760 624 FUNC WEAK DEFAULT 12 malloc_trim@@GLIBC_2.2.5 + 1466: 000000000007e8b0 86 FUNC GLOBAL DEFAULT 12 _IO_str_underflow@@GLIBC_2.2.5 + 1467: 0000000000134600 274 FUNC GLOBAL DEFAULT 12 svcudp_enablecache@@GLIBC_2.2.5 + 1468: 00000000000b3250 112 FUNC GLOBAL DEFAULT 12 __wcsncasecmp_l@@GLIBC_2.2.5 + 1469: 00000000000f11f0 46 FUNC GLOBAL DEFAULT 12 linkat@@GLIBC_2.4 + 1470: 000000000007e3d0 286 FUNC GLOBAL DEFAULT 12 _IO_default_pbackfail@@GLIBC_2.2.5 + 1471: 00000000001254a0 26 FUNC GLOBAL DEFAULT 12 inet6_rth_space@@GLIBC_2.5 + 1472: 00000000000740b0 109 FUNC GLOBAL DEFAULT 12 _IO_free_wbackup_area@@GLIBC_2.2.5 + 1473: 000000000010c5d0 38 FUNC GLOBAL DEFAULT 12 pthread_cond_timedwait@@GLIBC_2.3.2 + 1474: 000000000013e8c0 38 FUNC GLOBAL DEFAULT 12 pthread_cond_timedwait@GLIBC_2.2.5 + 1475: 000000000006f2f0 340 FUNC GLOBAL DEFAULT 12 _IO_fsetpos@@GLIBC_2.2.5 + 1476: 00000000000c48b0 878 FUNC GLOBAL DEFAULT 12 getpwnam_r@@GLIBC_2.2.5 + 1477: 0000000000042c10 141 FUNC GLOBAL DEFAULT 12 __strtof_nan@@GLIBC_PRIVATE + 1478: 00000000000772b0 656 FUNC GLOBAL DEFAULT 12 freopen@@GLIBC_2.2.5 + 1479: 0000000000114ac0 144 FUNC GLOBAL DEFAULT 12 __clock_nanosleep@@GLIBC_PRIVATE + 1480: 000000000010c1d0 64 FUNC GLOBAL DEFAULT 12 __libc_alloca_cutoff@@GLIBC_PRIVATE + 1481: 00000000003c7730 8 OBJECT WEAK DEFAULT 33 __realloc_hook@@GLIBC_2.2.5 + 1482: 0000000000104960 326 FUNC GLOBAL DEFAULT 12 getsgnam@@GLIBC_2.10 + 1483: 00000000000924d0 99 IFUNC WEAK DEFAULT 12 strncasecmp@@GLIBC_2.2.5 + 1484: 00000000001150f0 796 FUNC WEAK DEFAULT 12 backtrace_symbols_fd@@GLIBC_2.2.5 + 1485: 00000000000ef540 85 FUNC GLOBAL DEFAULT 12 __xmknod@@GLIBC_2.2.5 + 1486: 00000000000f7890 26 FUNC GLOBAL DEFAULT 12 remque@@GLIBC_2.2.5 + 1487: 0000000000116dd0 19 FUNC GLOBAL DEFAULT 12 __recv_chk@@GLIBC_2.4 + 1488: 0000000000125570 197 FUNC GLOBAL DEFAULT 12 inet6_rth_reverse@@GLIBC_2.5 + 1489: 0000000000075400 2497 FUNC GLOBAL DEFAULT 12 _IO_wfile_seekoff@@GLIBC_2.2.5 + 1490: 00000000000f6320 135 FUNC GLOBAL DEFAULT 12 ptrace@@GLIBC_2.2.5 + 1491: 0000000000102b20 79 FUNC WEAK DEFAULT 12 towlower_l@@GLIBC_2.3 + 1492: 0000000000124530 23 FUNC GLOBAL DEFAULT 12 getifaddrs@@GLIBC_2.3 + 1493: 00000000000358a0 279 FUNC WEAK DEFAULT 12 scalbn@@GLIBC_2.2.5 + 1494: 00000000000724a0 48 FUNC GLOBAL DEFAULT 12 putwc_unlocked@@GLIBC_2.2.5 + 1495: 000000000000008c 4 TLS GLOBAL DEFAULT 23 h_errno@GLIBC_PRIVATE + 1496: 00000000000533a0 31 FUNC GLOBAL DEFAULT 12 printf_size_info@@GLIBC_2.2.5 + 1497: 0000000000122f40 139 FUNC WEAK DEFAULT 12 if_nametoindex@@GLIBC_2.2.5 + 1498: 00000000000aebb0 10 FUNC GLOBAL DEFAULT 12 __wcstold_l@@GLIBC_2.2.5 + 1499: 00000000000a9d60 16 FUNC GLOBAL DEFAULT 12 __wcstoll_internal@@GLIBC_2.2.5 + 1500: 00000000003ccfc0 72 OBJECT GLOBAL DEFAULT 34 _res_hconf@@GLIBC_2.2.5 + 1501: 00000000000f0330 90 FUNC WEAK DEFAULT 12 creat@@GLIBC_2.2.5 + 1502: 000000000008b050 73 FUNC GLOBAL DEFAULT 12 __libc_alloc_buffer_copy_bytes@@GLIBC_PRIVATE + 1503: 00000000000ef4a0 69 FUNC GLOBAL DEFAULT 12 __fxstat@@GLIBC_2.2.5 + 1504: 000000000007b130 407 FUNC GLOBAL DEFAULT 12 _IO_file_close_it@@GLIBC_2.2.5 + 1505: 00000000000799f0 8 FUNC GLOBAL DEFAULT 12 _IO_file_close@@GLIBC_2.2.5 + 1506: 00000000001314b0 291 FUNC GLOBAL DEFAULT 12 key_decryptsession_pk@@GLIBC_2.2.5 + 1507: 000000000008cfe0 53 IFUNC GLOBAL DEFAULT 12 strncat@@GLIBC_2.2.5 + 1508: 00000000000f4100 36 FUNC WEAK DEFAULT 12 sendfile64@@GLIBC_2.3 + 1509: 00000000003c73b0 4 OBJECT GLOBAL DEFAULT 33 __check_rhosts_file@@GLIBC_2.2.5 + 1510: 0000000000045b10 7 FUNC GLOBAL DEFAULT 12 wcstoimax@@GLIBC_2.2.5 + 1511: 00000000000ffb60 90 FUNC WEAK DEFAULT 12 sendmsg@@GLIBC_2.2.5 + 1512: 00000000001150f0 796 FUNC GLOBAL DEFAULT 12 __backtrace_symbols_fd@@GLIBC_2.2.5 + 1513: 00000000000f56b0 156 FUNC GLOBAL DEFAULT 12 pwritev@@GLIBC_2.10 + 1514: 0000000000095600 124 FUNC GLOBAL DEFAULT 12 __strsep_g@@GLIBC_2.2.5 + 1515: 000000000003af90 18 FUNC WEAK DEFAULT 12 strtoull@@GLIBC_2.2.5 + 1516: 00000000000736d0 552 FUNC GLOBAL DEFAULT 12 __wunderflow@@GLIBC_2.2.5 + 1517: 0000000000078aa0 9 FUNC GLOBAL DEFAULT 12 __fwritable@@GLIBC_2.2.5 + 1518: 000000000006e0d0 578 FUNC GLOBAL DEFAULT 12 _IO_fclose@@GLIBC_2.2.5 + 1519: 00000000000f4f50 303 FUNC WEAK DEFAULT 12 ulimit@@GLIBC_2.2.5 + 1520: 0000000000036fc0 134 FUNC GLOBAL DEFAULT 12 __sysv_signal@@GLIBC_2.2.5 + 1521: 0000000000116ea0 20 FUNC GLOBAL DEFAULT 12 __realpath_chk@@GLIBC_2.4 + 1522: 00000000000783c0 143 FUNC WEAK DEFAULT 12 obstack_printf@@GLIBC_2.2.5 + 1523: 0000000000074be0 1705 FUNC GLOBAL DEFAULT 12 _IO_wfile_underflow@@GLIBC_2.2.5 + 1524: 00000000000eefd0 178 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getsigmask@@GLIBC_2.2.5 + 1525: 0000000000071710 97 FUNC GLOBAL DEFAULT 12 fputwc_unlocked@@GLIBC_2.2.5 + 1526: 000000000003ab90 35 FUNC GLOBAL DEFAULT 12 drand48@@GLIBC_2.2.5 + 1527: 000000000013ebd0 99 FUNC GLOBAL DEFAULT 12 __nss_passwd_lookup@@GLIBC_2.2.5 + 1528: 0000000000038e90 878 FUNC WEAK DEFAULT 12 qsort_r@@GLIBC_2.8 + 1529: 0000000000134dd0 26 FUNC GLOBAL DEFAULT 12 xdr_free@@GLIBC_2.2.5 + 1530: 0000000000118480 366 FUNC GLOBAL DEFAULT 12 __obstack_printf_chk@@GLIBC_2.8 + 1531: 0000000000077130 44 FUNC GLOBAL DEFAULT 12 fileno@@GLIBC_2.2.5 + 1532: 0000000000077b10 5 FUNC GLOBAL DEFAULT 12 pclose@@GLIBC_2.2.5 + 1533: 000000000002f660 19 FUNC GLOBAL DEFAULT 12 __isxdigit_l@@GLIBC_2.2.5 + 1534: 000000000008ffe0 10 FUNC GLOBAL DEFAULT 12 __bzero@@GLIBC_2.2.5 + 1535: 000000000011a410 165 FUNC GLOBAL DEFAULT 12 sethostent@@GLIBC_2.2.5 + 1536: 00000000000e1890 29 FUNC WEAK DEFAULT 12 re_search@@GLIBC_2.2.5 + 1537: 0000000000125660 43 FUNC GLOBAL DEFAULT 12 inet6_rth_getaddr@@GLIBC_2.5 + 1538: 00000000000c6c40 33 FUNC GLOBAL DEFAULT 12 __setpgid@@GLIBC_2.2.5 + 1539: 000000000002fc00 10 FUNC GLOBAL DEFAULT 12 __dgettext@@GLIBC_2.2.5 + 1540: 00000000000f59b0 134 FUNC WEAK DEFAULT 12 gethostname@@GLIBC_2.2.5 + 1541: 000000000010c210 38 FUNC GLOBAL DEFAULT 12 pthread_equal@@GLIBC_2.2.5 + 1542: 00000000000ef720 103 FUNC WEAK DEFAULT 12 fstatvfs64@@GLIBC_2.2.5 + 1543: 0000000000104160 125 FUNC WEAK DEFAULT 12 sgetspent_r@@GLIBC_2.2.5 + 1544: 00000000000fd800 4481 FUNC GLOBAL DEFAULT 12 __libc_ifunc_impl_list@@GLIBC_PRIVATE + 1545: 00000000000feaa0 134 FUNC GLOBAL DEFAULT 12 __clone@@GLIBC_2.2.5 + 1546: 00000000000f7610 34 FUNC WEAK DEFAULT 12 utimes@@GLIBC_2.2.5 + 1547: 000000000010c6c0 38 FUNC GLOBAL DEFAULT 12 pthread_mutex_init@@GLIBC_2.2.5 + 1548: 00000000000f62a0 57 FUNC GLOBAL DEFAULT 12 usleep@@GLIBC_2.2.5 + 1549: 0000000000037780 342 FUNC GLOBAL DEFAULT 12 sigset@@GLIBC_2.2.5 + 1550: 00000000003c8148 8 OBJECT GLOBAL DEFAULT 33 __ctype32_toupper@GLIBC_2.2.5 + 1551: 00000000000fcc80 69 FUNC GLOBAL DEFAULT 12 ustat@@GLIBC_2.2.5 + 1552: 00000000000f0b70 33 FUNC WEAK DEFAULT 12 chown@@GLIBC_2.2.5 + 1553: 0000000000100120 67 FUNC GLOBAL DEFAULT 12 __cmsg_nxthdr@@GLIBC_2.2.5 + 1554: 000000000008aa50 33 FUNC GLOBAL DEFAULT 12 _obstack_memory_used@@GLIBC_2.2.5 + 1555: 0000000000085c40 947 FUNC GLOBAL DEFAULT 12 __libc_realloc@@GLIBC_2.2.5 + 1556: 00000000000ff3e0 96 FUNC GLOBAL DEFAULT 12 splice@@GLIBC_2.5 + 1557: 00000000000ee780 21 FUNC GLOBAL DEFAULT 12 posix_spawn@@GLIBC_2.15 + 1558: 000000000013e3a0 21 FUNC GLOBAL DEFAULT 12 posix_spawn@GLIBC_2.2.5 + 1559: 00000000001025a0 126 FUNC GLOBAL DEFAULT 12 __iswblank_l@@GLIBC_2.2.5 + 1560: 00000000001823e0 36 OBJECT GLOBAL DEFAULT 15 _itoa_lower_digits@@GLIBC_PRIVATE + 1561: 00000000000741a0 114 FUNC GLOBAL DEFAULT 12 _IO_sungetwc@@GLIBC_2.2.5 + 1562: 00000000000f03f0 1618 FUNC WEAK DEFAULT 12 getcwd@@GLIBC_2.2.5 + 1563: 000000000006f8f0 742 FUNC WEAK DEFAULT 12 __getdelim@@GLIBC_2.2.5 + 1564: 0000000000134c90 116 FUNC GLOBAL DEFAULT 12 xdr_vector@@GLIBC_2.2.5 + 1565: 00000000000fee00 41 FUNC GLOBAL DEFAULT 12 eventfd_write@@GLIBC_2.7 + 1566: 00000000003c8018 8 OBJECT GLOBAL DEFAULT 33 __progname_full@@GLIBC_2.2.5 + 1567: 0000000000045ea0 257 FUNC WEAK DEFAULT 12 swapcontext@@GLIBC_2.2.5 + 1568: 00000000000fd680 36 FUNC GLOBAL DEFAULT 12 lgetxattr@@GLIBC_2.3 + 1569: 00000000001326c0 44 FUNC GLOBAL DEFAULT 12 __rpc_thread_svc_fdset@@GLIBC_2.2.5 + 1570: 00000000003ccdb0 4 OBJECT GLOBAL DEFAULT 34 error_one_per_line@@GLIBC_2.2.5 + 1571: 0000000000035b40 18 FUNC GLOBAL DEFAULT 12 __finitef@@GLIBC_2.2.5 + 1572: 00000000001360c0 94 FUNC GLOBAL DEFAULT 12 xdr_uint8_t@@GLIBC_2.2.5 + 1573: 00000000000b28f0 2091 FUNC WEAK DEFAULT 12 wcsxfrm_l@@GLIBC_2.3 + 1574: 0000000000123320 127 FUNC WEAK DEFAULT 12 if_indextoname@@GLIBC_2.2.5 + 1575: 000000000012deb0 541 FUNC GLOBAL DEFAULT 12 authdes_pk_create@@GLIBC_2.2.5 + 1576: 0000000000132be0 70 FUNC GLOBAL DEFAULT 12 svcerr_decode@@GLIBC_2.2.5 + 1577: 0000000000072d30 143 FUNC GLOBAL DEFAULT 12 swscanf@@GLIBC_2.2.5 + 1578: 00000000000ff530 96 FUNC GLOBAL DEFAULT 12 vmsplice@@GLIBC_2.5 + 1579: 0000000000022650 8 FUNC WEAK DEFAULT 12 gnu_get_libc_version@@GLIBC_2.2.5 + 1580: 000000000006f6c0 469 FUNC WEAK DEFAULT 12 fwrite@@GLIBC_2.2.5 + 1581: 000000000013d240 5 FUNC GLOBAL DEFAULT 12 updwtmpx@@GLIBC_2.2.5 + 1582: 0000000000035e50 15 FUNC GLOBAL DEFAULT 12 __finitel@@GLIBC_2.2.5 + 1583: 000000000012b120 118 FUNC GLOBAL DEFAULT 12 des_setparity@@GLIBC_2.2.5 + 1584: 0000000000124df0 453 FUNC GLOBAL DEFAULT 12 getsourcefilter@@GLIBC_2.3.4 + 1585: 0000000000035b60 18 FUNC WEAK DEFAULT 12 copysignf@@GLIBC_2.2.5 + 1586: 000000000006f160 320 FUNC WEAK DEFAULT 12 fread@@GLIBC_2.2.5 + 1587: 0000000000115410 2 FUNC GLOBAL DEFAULT 12 __cyg_profile_func_enter@@GLIBC_2.2.5 + 1588: 0000000000035b20 21 FUNC WEAK DEFAULT 12 isnanf@@GLIBC_2.2.5 + 1589: 000000000003ad50 22 FUNC GLOBAL DEFAULT 12 lrand48_r@@GLIBC_2.2.5 + 1590: 00000000000f9940 716 FUNC GLOBAL DEFAULT 12 qfcvt_r@@GLIBC_2.2.5 + 1591: 00000000000f9380 700 FUNC GLOBAL DEFAULT 12 fcvt_r@@GLIBC_2.2.5 + 1592: 0000000000022d30 47 FUNC GLOBAL DEFAULT 12 iconv_close@@GLIBC_2.2.5 + 1593: 00000000000b57d0 77 IFUNC WEAK DEFAULT 12 gettimeofday@@GLIBC_2.2.5 + 1594: 0000000000102480 129 FUNC WEAK DEFAULT 12 iswalnum_l@@GLIBC_2.3 + 1595: 00000000000b5850 352 FUNC WEAK DEFAULT 12 adjtime@@GLIBC_2.2.5 + 1596: 0000000000121010 155 FUNC WEAK DEFAULT 12 getnetgrent_r@@GLIBC_2.2.5 + 1597: 0000000000074340 68 FUNC GLOBAL DEFAULT 12 _IO_wmarker_delta@@GLIBC_2.2.5 + 1598: 00000000000f7de0 52 FUNC GLOBAL DEFAULT 12 endttyent@@GLIBC_2.2.5 + 1599: 000000000003ac90 28 FUNC GLOBAL DEFAULT 12 seed48@@GLIBC_2.2.5 + 1600: 000000000006be30 33 FUNC GLOBAL DEFAULT 12 rename@@GLIBC_2.2.5 + 1601: 0000000000035e60 30 FUNC WEAK DEFAULT 12 copysignl@@GLIBC_2.2.5 + 1602: 0000000000036600 31 FUNC WEAK DEFAULT 12 sigaction@@GLIBC_2.2.5 + 1603: 000000000012b630 461 FUNC GLOBAL DEFAULT 12 rtime@@GLIBC_2.2.5 + 1604: 0000000000035e10 53 FUNC WEAK DEFAULT 12 isnanl@@GLIBC_2.2.5 + 1605: 000000000007d860 124 FUNC GLOBAL DEFAULT 12 _IO_default_finish@@GLIBC_2.2.5 + 1606: 00000000000f6430 407 FUNC GLOBAL DEFAULT 12 getfsent@@GLIBC_2.2.5 + 1607: 00000000000ff080 36 FUNC GLOBAL DEFAULT 12 epoll_ctl@@GLIBC_2.3.2 + 1608: 00000000000b3cc0 276 FUNC GLOBAL DEFAULT 12 __isoc99_vwscanf@@GLIBC_2.7 + 1609: 0000000000102a90 130 FUNC GLOBAL DEFAULT 12 __iswxdigit_l@@GLIBC_2.2.5 + 1610: 000000000002f720 81 FUNC GLOBAL DEFAULT 12 __ctype_init@@GLIBC_PRIVATE + 1611: 000000000006efa0 362 FUNC GLOBAL DEFAULT 12 _IO_fputs@@GLIBC_2.2.5 + 1612: 00000000000feed0 36 FUNC GLOBAL DEFAULT 12 fanotify_mark@@GLIBC_2.13 + 1613: 00000000000f9110 33 FUNC WEAK DEFAULT 12 madvise@@GLIBC_2.2.5 + 1614: 00000000000c33d0 771 FUNC GLOBAL DEFAULT 12 _nss_files_parse_grent@@GLIBC_PRIVATE + 1615: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.2 + 1616: 000000000013d8b0 23 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper@@GLIBC_2.2.5 + 1617: 0000000000134720 117 FUNC GLOBAL DEFAULT 12 passwd2des@@GLIBC_2.2.5 + 1618: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.3 + 1619: 0000000000131da0 620 FUNC GLOBAL DEFAULT 12 getnetname@@GLIBC_2.2.5 + 1620: 000000000011af40 165 FUNC GLOBAL DEFAULT 12 setnetent@@GLIBC_2.2.5 + 1621: 0000000000036d30 28 FUNC GLOBAL DEFAULT 12 __sigdelset@@GLIBC_2.2.5 + 1622: 00000000000f61b0 11 FUNC WEAK DEFAULT 12 mkstemp64@@GLIBC_2.2.5 + 1623: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.4 + 1624: 0000000000099910 159 FUNC GLOBAL DEFAULT 12 __stpcpy_small@@GLIBC_2.2.5 + 1625: 00000000000c13b0 22 FUNC GLOBAL DEFAULT 12 scandir@@GLIBC_2.2.5 + 1626: 0000000000035af0 35 FUNC WEAK DEFAULT 12 isinff@@GLIBC_2.2.5 + 1627: 00000000000fec80 16 FUNC GLOBAL DEFAULT 12 gnu_dev_minor@@GLIBC_2.3.3 + 1628: 00000000000372f0 7 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmin_private@@GLIBC_PRIVATE + 1629: 00000000000c6a00 8 FUNC WEAK DEFAULT 12 geteuid@@GLIBC_2.2.5 + 1630: 00000000000361e0 59 FUNC GLOBAL DEFAULT 12 __libc_siglongjmp@@GLIBC_PRIVATE + 1631: 00000000000c6d30 33 FUNC GLOBAL DEFAULT 12 getresgid@@GLIBC_2.2.5 + 1632: 00000000000ef650 33 FUNC WEAK DEFAULT 12 statfs@@GLIBC_2.2.5 + 1633: 000000000011de60 311 FUNC GLOBAL DEFAULT 12 ether_hostton@@GLIBC_2.2.5 + 1634: 00000000000f61f0 36 FUNC WEAK DEFAULT 12 mkstemps64@@GLIBC_2.11 + 1635: 00000000000e3850 33 FUNC WEAK DEFAULT 12 sched_setparam@@GLIBC_2.2.5 + 1636: 0000000000102510 130 FUNC WEAK DEFAULT 12 iswalpha_l@@GLIBC_2.3 + 1637: 0000000000115420 85 IFUNC GLOBAL DEFAULT 12 __memcpy_chk@@GLIBC_2.3.4 + 1638: 000000000003a480 106 FUNC WEAK DEFAULT 12 srandom@@GLIBC_2.2.5 + 1639: 00000000000ff3b0 36 FUNC GLOBAL DEFAULT 12 quotactl@@GLIBC_2.2.5 + 1640: 0000000000102970 130 FUNC GLOBAL DEFAULT 12 __iswspace_l@@GLIBC_2.2.5 + 1641: 000000000011da50 758 FUNC GLOBAL DEFAULT 12 getrpcbynumber_r@@GLIBC_2.2.5 + 1642: 0000000000035dc0 68 FUNC WEAK DEFAULT 12 isinfl@@GLIBC_2.2.5 + 1643: 0000000000034f30 2028 FUNC GLOBAL DEFAULT 12 __open_catalog@@GLIBC_PRIVATE + 1644: 0000000000036f50 52 FUNC GLOBAL DEFAULT 12 sigismember@@GLIBC_2.2.5 + 1645: 000000000006c4e0 255 FUNC GLOBAL DEFAULT 12 __isoc99_vfscanf@@GLIBC_2.7 + 1646: 00000000000f7cf0 143 FUNC GLOBAL DEFAULT 12 getttynam@@GLIBC_2.2.5 + 1647: 00000000000378e0 7 FUNC GLOBAL DEFAULT 12 atof@@GLIBC_2.2.5 + 1648: 00000000000e1ad0 56 FUNC WEAK DEFAULT 12 re_set_registers@@GLIBC_2.2.5 + 1649: 0000000000114a10 59 FUNC WEAK DEFAULT 12 clock_gettime@@GLIBC_2.17 + 1650: 000000000010c390 38 FUNC GLOBAL DEFAULT 12 pthread_attr_setschedparam@@GLIBC_2.2.5 + 1651: 000000000008ffd0 8 FUNC GLOBAL DEFAULT 12 bcopy@@GLIBC_2.2.5 + 1652: 0000000000077dc0 14 FUNC GLOBAL DEFAULT 12 setlinebuf@@GLIBC_2.2.5 + 1653: 0000000000115ca0 233 FUNC GLOBAL DEFAULT 12 __stpncpy_chk@@GLIBC_2.4 + 1654: 00000000001053f0 758 FUNC GLOBAL DEFAULT 12 getsgnam_r@@GLIBC_2.10 + 1655: 00000000000a8b30 267 FUNC WEAK DEFAULT 12 wcswcs@@GLIBC_2.2.5 + 1656: 00000000000378f0 21 FUNC GLOBAL DEFAULT 12 atoi@@GLIBC_2.2.5 + 1657: 0000000000134f60 188 FUNC GLOBAL DEFAULT 12 xdr_hyper@@GLIBC_2.2.5 + 1658: 0000000000099b90 114 FUNC GLOBAL DEFAULT 12 __strtok_r_1c@@GLIBC_2.2.5 + 1659: 0000000000102850 130 FUNC GLOBAL DEFAULT 12 __iswprint_l@@GLIBC_2.2.5 + 1660: 00000000000b85e0 68 FUNC GLOBAL DEFAULT 12 stime@@GLIBC_2.2.5 + 1661: 00000000000c1740 65 FUNC WEAK DEFAULT 12 getdirentries64@@GLIBC_2.2.5 + 1662: 0000000000033800 305 FUNC WEAK DEFAULT 12 textdomain@@GLIBC_2.2.5 + 1663: 00000000000ef0a0 11 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getschedparam@@GLIBC_2.2.5 + 1664: 00000000000e3940 33 FUNC WEAK DEFAULT 12 sched_get_priority_max@@GLIBC_2.2.5 + 1665: 00000000000f4d90 14 FUNC GLOBAL DEFAULT 12 tcflush@@GLIBC_2.2.5 + 1666: 0000000000037910 12 FUNC GLOBAL DEFAULT 12 atol@@GLIBC_2.2.5 + 1667: 00000000001253d0 159 FUNC GLOBAL DEFAULT 12 inet6_opt_find@@GLIBC_2.5 + 1668: 00000000000a9da0 18 FUNC WEAK DEFAULT 12 wcstoull@@GLIBC_2.2.5 + 1669: 00000000000f9200 33 FUNC GLOBAL DEFAULT 12 mlockall@@GLIBC_2.2.5 + 1670: 00000000003c4b60 512 OBJECT GLOBAL DEFAULT 29 sys_siglist@GLIBC_2.2.5 + 1671: 000000000011e1c0 306 FUNC GLOBAL DEFAULT 12 ether_ntohost@@GLIBC_2.2.5 + 1672: 00000000003c4b60 520 OBJECT GLOBAL DEFAULT 29 sys_siglist@@GLIBC_2.3.3 + 1673: 00000000000c55f0 150 FUNC WEAK DEFAULT 12 waitpid@@GLIBC_2.2.5 + 1674: 00000000000f21e0 15 FUNC WEAK DEFAULT 12 ftw64@@GLIBC_2.2.5 + 1675: 0000000000102140 153 FUNC WEAK DEFAULT 12 iswxdigit@@GLIBC_2.2.5 + 1676: 00000000000f6300 28 FUNC GLOBAL DEFAULT 12 stty@@GLIBC_2.2.5 + 1677: 0000000000078b30 41 FUNC GLOBAL DEFAULT 12 __fpending@@GLIBC_2.2.5 + 1678: 000000000013cea0 65 FUNC GLOBAL DEFAULT 12 unlockpt@@GLIBC_2.2.5 + 1679: 00000000000f01e0 90 FUNC WEAK DEFAULT 12 close@@GLIBC_2.2.5 + 1680: 0000000000117f60 16 FUNC GLOBAL DEFAULT 12 __mbsnrtowcs_chk@@GLIBC_2.4 + 1681: 000000000008ca40 290 FUNC WEAK DEFAULT 12 strverscmp@@GLIBC_2.2.5 + 1682: 0000000000135860 243 FUNC GLOBAL DEFAULT 12 xdr_union@@GLIBC_2.2.5 + 1683: 0000000000114c80 365 FUNC WEAK DEFAULT 12 backtrace@@GLIBC_2.2.5 + 1684: 0000000000034e40 133 FUNC GLOBAL DEFAULT 12 catgets@@GLIBC_2.2.5 + 1685: 00000000000ef090 11 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getschedpolicy@@GLIBC_2.2.5 + 1686: 000000000003a260 32 FUNC GLOBAL DEFAULT 12 lldiv@@GLIBC_2.2.5 + 1687: 000000000010c780 38 FUNC WEAK DEFAULT 12 pthread_setcancelstate@@GLIBC_2.2.5 + 1688: 000000000013b2e0 114 FUNC WEAK DEFAULT 12 endutent@@GLIBC_2.2.5 + 1689: 000000000006b760 128 FUNC GLOBAL DEFAULT 12 tmpnam@@GLIBC_2.2.5 + 1690: 000000000010e260 173 FUNC GLOBAL DEFAULT 12 inet_nsap_ntoa@@GLIBC_2.2.5 + 1691: 000000000009a1a0 246 FUNC GLOBAL DEFAULT 12 strerror_l@@GLIBC_2.6 + 1692: 00000000000ef8f0 90 FUNC WEAK DEFAULT 12 open@@GLIBC_2.2.5 + 1693: 00000000000faf70 3714 FUNC WEAK DEFAULT 12 twalk@@GLIBC_2.2.5 + 1694: 000000000003ac80 12 FUNC GLOBAL DEFAULT 12 srand48@@GLIBC_2.2.5 + 1695: 000000000002f690 11 FUNC WEAK DEFAULT 12 toupper_l@@GLIBC_2.3 + 1696: 000000000012d660 237 FUNC GLOBAL DEFAULT 12 svcunixfd_create@@GLIBC_2.2.5 + 1697: 00000000000f21e0 15 FUNC GLOBAL DEFAULT 12 ftw@@GLIBC_2.2.5 + 1698: 00000000000fea10 33 FUNC GLOBAL DEFAULT 12 iopl@@GLIBC_2.2.5 + 1699: 00000000000a9d90 16 FUNC GLOBAL DEFAULT 12 __wcstoull_internal@@GLIBC_2.2.5 + 1700: 000000000008cc90 384 FUNC WEAK DEFAULT 12 strerror_r@@GLIBC_2.2.5 + 1701: 0000000000102fe0 365 FUNC GLOBAL DEFAULT 12 sgetspent@@GLIBC_2.2.5 + 1702: 000000000007e550 8 FUNC GLOBAL DEFAULT 12 _IO_iter_begin@@GLIBC_2.2.5 + 1703: 000000000010c630 38 FUNC GLOBAL DEFAULT 12 pthread_getschedparam@@GLIBC_2.2.5 + 1704: 0000000000116ed0 386 FUNC GLOBAL DEFAULT 12 __fread_chk@@GLIBC_2.7 + 1705: 00000000000a93e0 435 FUNC WEAK DEFAULT 12 c32rtomb@@GLIBC_2.16 + 1706: 0000000000031670 11 FUNC WEAK DEFAULT 12 dngettext@@GLIBC_2.2.5 + 1707: 00000000000f6100 33 FUNC GLOBAL DEFAULT 12 vhangup@@GLIBC_2.2.5 + 1708: 00000000001326f0 44 FUNC GLOBAL DEFAULT 12 __rpc_thread_createerr@@GLIBC_2.2.5 + 1709: 00000000001310e0 210 FUNC GLOBAL DEFAULT 12 key_secretkey_is_set@@GLIBC_2.2.5 + 1710: 00000000000b4c90 17 FUNC GLOBAL DEFAULT 12 localtime@@GLIBC_2.2.5 + 1711: 000000000013d1f0 5 FUNC GLOBAL DEFAULT 12 endutxent@@GLIBC_2.2.5 + 1712: 00000000000f6130 33 FUNC WEAK DEFAULT 12 swapon@@GLIBC_2.2.5 + 1713: 00000000000feb90 7 FUNC WEAK DEFAULT 12 umount@@GLIBC_2.2.5 + 1714: 00000000000feb30 90 FUNC WEAK DEFAULT 12 lseek64@@GLIBC_2.2.5 + 1715: 0000000000117f70 16 FUNC GLOBAL DEFAULT 12 __wcsnrtombs_chk@@GLIBC_2.4 + 1716: 00000000000793f0 9 FUNC GLOBAL DEFAULT 12 ferror_unlocked@@GLIBC_2.2.5 + 1717: 00000000000b4c40 31 FUNC GLOBAL DEFAULT 12 difftime@@GLIBC_2.2.5 + 1718: 0000000000102cc0 117 FUNC WEAK DEFAULT 12 wctrans_l@@GLIBC_2.3 + 1719: 000000000008b300 54 IFUNC GLOBAL DEFAULT 12 strchr@@GLIBC_2.2.5 + 1720: 00000000000fef60 33 FUNC GLOBAL DEFAULT 12 capset@@GLIBC_2.2.5 + 1721: 00000000000c5d70 85 FUNC WEAK DEFAULT 12 _Exit@@GLIBC_2.2.5 + 1722: 00000000000fd590 33 FUNC GLOBAL DEFAULT 12 flistxattr@@GLIBC_2.3 + 1723: 000000000012eff0 437 FUNC GLOBAL DEFAULT 12 clnt_spcreateerror@@GLIBC_2.2.5 + 1724: 000000000008a9d0 122 FUNC GLOBAL DEFAULT 12 obstack_free@@GLIBC_2.2.5 + 1725: 000000000010c420 38 FUNC GLOBAL DEFAULT 12 pthread_attr_getscope@@GLIBC_2.2.5 + 1726: 00000000001219e0 136 FUNC GLOBAL DEFAULT 12 getaliasent@@GLIBC_2.2.5 + 1727: 00000000003c4720 1008 OBJECT GLOBAL DEFAULT 29 _sys_errlist@GLIBC_2.3 + 1728: 00000000003c4720 1056 OBJECT GLOBAL DEFAULT 29 _sys_errlist@GLIBC_2.4 + 1729: 00000000003c4720 1080 OBJECT GLOBAL DEFAULT 29 _sys_errlist@@GLIBC_2.12 + 1730: 00000000003c4720 1000 OBJECT GLOBAL DEFAULT 29 _sys_errlist@GLIBC_2.2.5 + 1731: 0000000000036f90 20 FUNC WEAK DEFAULT 12 sigreturn@@GLIBC_2.2.5 + 1732: 000000000011ec10 355 FUNC GLOBAL DEFAULT 12 rresvport_af@@GLIBC_2.2.5 + 1733: 0000000000039bf0 27 FUNC WEAK DEFAULT 12 secure_getenv@@GLIBC_2.17 + 1734: 0000000000037730 68 FUNC GLOBAL DEFAULT 12 sigignore@@GLIBC_2.2.5 + 1735: 0000000000101cf0 140 FUNC WEAK DEFAULT 12 iswdigit@@GLIBC_2.2.5 + 1736: 0000000000132cb0 51 FUNC GLOBAL DEFAULT 12 svcerr_weakauth@@GLIBC_2.2.5 + 1737: 0000000000100a10 439 FUNC GLOBAL DEFAULT 12 __monstartup@@GLIBC_2.2.5 + 1738: 0000000000101c50 152 FUNC WEAK DEFAULT 12 iswcntrl@@GLIBC_2.2.5 + 1739: 0000000000078450 5 FUNC WEAK DEFAULT 12 fcloseall@@GLIBC_2.2.5 + 1740: 0000000000117580 417 FUNC GLOBAL DEFAULT 12 __wprintf_chk@@GLIBC_2.4 + 1741: 00000000003c9e00 8 OBJECT GLOBAL DEFAULT 34 __timezone@@GLIBC_2.2.5 + 1742: 000000000006bf60 43 FUNC WEAK DEFAULT 12 funlockfile@@GLIBC_2.2.5 + 1743: 00000000000f6e70 38 FUNC WEAK DEFAULT 12 endmntent@@GLIBC_2.2.5 + 1744: 00000000000533c0 143 FUNC GLOBAL DEFAULT 12 fprintf@@GLIBC_2.2.5 + 1745: 00000000000ff8b0 33 FUNC WEAK DEFAULT 12 getsockname@@GLIBC_2.2.5 + 1746: 00000000000c13b0 22 FUNC WEAK DEFAULT 12 scandir64@@GLIBC_2.2.5 + 1747: 00000000000ef3c0 33 FUNC GLOBAL DEFAULT 12 utime@@GLIBC_2.2.5 + 1748: 00000000000f9df0 31 FUNC GLOBAL DEFAULT 12 hsearch@@GLIBC_2.2.5 + 1749: 00000000003ccc48 8 OBJECT GLOBAL DEFAULT 34 _nl_domain_bindings@@GLIBC_2.2.5 + 1750: 0000000000042d50 152 FUNC GLOBAL DEFAULT 12 __strtold_nan@@GLIBC_PRIVATE + 1751: 000000000010a590 332 FUNC WEAK DEFAULT 12 argp_error@@GLIBC_2.2.5 + 1752: 0000000000099b00 51 FUNC GLOBAL DEFAULT 12 __strpbrk_c2@@GLIBC_2.2.5 + 1753: 000000000003a1d0 12 FUNC GLOBAL DEFAULT 12 abs@@GLIBC_2.2.5 + 1754: 00000000000ffbc0 96 FUNC WEAK DEFAULT 12 sendto@@GLIBC_2.2.5 + 1755: 0000000000099b40 68 FUNC GLOBAL DEFAULT 12 __strpbrk_c3@@GLIBC_2.2.5 + 1756: 00000000001028e0 129 FUNC WEAK DEFAULT 12 iswpunct_l@@GLIBC_2.3 + 1757: 00000000000f6ea0 1620 FUNC WEAK DEFAULT 12 addmntent@@GLIBC_2.2.5 + 1758: 000000000008aaf0 154 FUNC GLOBAL DEFAULT 12 __libc_scratch_buffer_grow_preserve@@GLIBC_PRIVATE + 1759: 000000000013c930 236 FUNC WEAK DEFAULT 12 updwtmp@@GLIBC_2.2.5 + 1760: 0000000000042c00 10 FUNC GLOBAL DEFAULT 12 __strtold_l@@GLIBC_2.2.5 + 1761: 0000000000111f40 922 FUNC GLOBAL DEFAULT 12 __nss_database_lookup@@GLIBC_2.2.5 + 1762: 0000000000073000 53 FUNC GLOBAL DEFAULT 12 _IO_least_wmarker@@GLIBC_2.2.5 + 1763: 00000000000c5d20 75 FUNC WEAK DEFAULT 12 vfork@@GLIBC_2.2.5 + 1764: 000000000008e8f0 54 IFUNC WEAK DEFAULT 12 rindex@@GLIBC_2.2.5 + 1765: 0000000000045920 269 FUNC GLOBAL DEFAULT 12 addseverity@@GLIBC_2.2.5 + 1766: 0000000000118710 20 FUNC GLOBAL DEFAULT 12 __poll_chk@@GLIBC_2.16 + 1767: 00000000000ff050 33 FUNC GLOBAL DEFAULT 12 epoll_create1@@GLIBC_2.9 + 1768: 0000000000132780 327 FUNC GLOBAL DEFAULT 12 xprt_register@@GLIBC_2.2.5 + 1769: 00000000000c2940 212 FUNC GLOBAL DEFAULT 12 getgrent_r@@GLIBC_2.2.5 + 1770: 00000000001315e0 215 FUNC GLOBAL DEFAULT 12 key_gendes@@GLIBC_2.2.5 + 1771: 00000000001165a0 273 FUNC GLOBAL DEFAULT 12 __vfprintf_chk@@GLIBC_2.3.4 + 1772: 00000000000b5760 32 FUNC GLOBAL DEFAULT 12 mktime@@GLIBC_2.2.5 + 1773: 000000000003a280 141 FUNC GLOBAL DEFAULT 12 mblen@@GLIBC_2.2.5 + 1774: 00000000000fbe00 117 FUNC WEAK DEFAULT 12 tdestroy@@GLIBC_2.2.5 + 1775: 00000000000fea40 90 FUNC WEAK DEFAULT 12 sysctl@@GLIBC_2.2.5 + 1776: 00000000000fd7a0 88 FUNC GLOBAL DEFAULT 12 __getauxval@@GLIBC_2.16 + 1777: 000000000012e830 962 FUNC GLOBAL DEFAULT 12 clnt_create@@GLIBC_2.2.5 + 1778: 00000000000c13d0 19 FUNC GLOBAL DEFAULT 12 alphasort@@GLIBC_2.2.5 + 1779: 00000000003c9e00 8 OBJECT WEAK DEFAULT 34 timezone@@GLIBC_2.2.5 + 1780: 0000000000127c50 223 FUNC GLOBAL DEFAULT 12 xdr_rmtcall_args@@GLIBC_2.2.5 + 1781: 000000000008ef30 232 FUNC GLOBAL DEFAULT 12 __strtok_r@@GLIBC_2.2.5 + 1782: 0000000000136890 33 FUNC GLOBAL DEFAULT 12 xdrstdio_create@@GLIBC_2.2.5 + 1783: 0000000000086510 450 FUNC WEAK DEFAULT 12 mallopt@@GLIBC_2.2.5 + 1784: 0000000000045af0 7 FUNC GLOBAL DEFAULT 12 strtoimax@@GLIBC_2.2.5 + 1785: 000000000006bd80 13 FUNC WEAK DEFAULT 12 getline@@GLIBC_2.2.5 + 1786: 00000000003c9a40 8 OBJECT WEAK DEFAULT 34 __malloc_initialize_hook@@GLIBC_2.2.5 + 1787: 00000000001026b0 124 FUNC GLOBAL DEFAULT 12 __iswdigit_l@@GLIBC_2.2.5 + 1788: 0000000000090020 53 IFUNC GLOBAL DEFAULT 12 __stpcpy@@GLIBC_2.2.5 + 1789: 000000000011d750 758 FUNC GLOBAL DEFAULT 12 getrpcbyname_r@@GLIBC_2.2.5 + 1790: 0000000000022ba0 392 FUNC GLOBAL DEFAULT 12 iconv@@GLIBC_2.2.5 + 1791: 0000000000130d20 200 FUNC GLOBAL DEFAULT 12 get_myaddress@@GLIBC_2.2.5 + 1792: 000000000003a1e0 17 FUNC WEAK DEFAULT 12 imaxabs@@GLIBC_2.2.5 + 1793: 00000000003c8010 8 OBJECT WEAK DEFAULT 33 program_invocation_short_name@@GLIBC_2.2.5 + 1794: 00000000000ff770 22 FUNC WEAK DEFAULT 12 bdflush@@GLIBC_2.2.5 + 1795: 00000000000f61f0 36 FUNC GLOBAL DEFAULT 12 mkstemps@@GLIBC_2.11 + 1796: 00000000000fd6e0 33 FUNC GLOBAL DEFAULT 12 lremovexattr@@GLIBC_2.3 + 1797: 00000000000e0e00 322 FUNC WEAK DEFAULT 12 re_compile_fastmap@@GLIBC_2.2.5 + 1798: 00000000000f80c0 21 FUNC GLOBAL DEFAULT 12 setusershell@@GLIBC_2.2.5 + 1799: 000000000006e3b0 757 FUNC GLOBAL DEFAULT 12 fdopen@@GLIBC_2.2.5 + 1800: 000000000007ec00 896 FUNC GLOBAL DEFAULT 12 _IO_str_seekoff@@GLIBC_2.2.5 + 1801: 00000000003c3e40 168 OBJECT GLOBAL DEFAULT 28 _IO_wfile_jumps@@GLIBC_2.2.5 + 1802: 00000000000c0fa0 216 FUNC WEAK DEFAULT 12 readdir64@@GLIBC_2.2.5 + 1803: 0000000000132c80 47 FUNC GLOBAL DEFAULT 12 svcerr_auth@@GLIBC_2.2.5 + 1804: 0000000000128840 910 FUNC GLOBAL DEFAULT 12 xdr_callmsg@@GLIBC_2.2.5 + 1805: 0000000000039200 8 FUNC GLOBAL DEFAULT 12 qsort@@GLIBC_2.2.5 + 1806: 0000000000043980 7 FUNC WEAK DEFAULT 12 canonicalize_file_name@@GLIBC_2.2.5 + 1807: 00000000000c6c10 33 FUNC GLOBAL DEFAULT 12 __getpgid@@GLIBC_2.2.5 + 1808: 000000000007d0d0 88 FUNC GLOBAL DEFAULT 12 _IO_sgetn@@GLIBC_2.2.5 + 1809: 00000000000227e0 957 FUNC GLOBAL DEFAULT 12 iconv_open@@GLIBC_2.2.5 + 1810: 00000000000ff710 36 FUNC GLOBAL DEFAULT 12 process_vm_readv@@GLIBC_2.15 + 1811: 000000000006f2f0 340 FUNC GLOBAL DEFAULT 12 _IO_fsetpos64@@GLIBC_2.2.5 + 1812: 000000000003b900 16 FUNC GLOBAL DEFAULT 12 __strtod_internal@@GLIBC_2.2.5 + 1813: 0000000000044e90 133 FUNC WEAK DEFAULT 12 strfmon_l@@GLIBC_2.3 + 1814: 000000000003ac30 34 FUNC GLOBAL DEFAULT 12 mrand48@@GLIBC_2.2.5 + 1815: 000000000003a3e0 38 FUNC GLOBAL DEFAULT 12 wcstombs@@GLIBC_2.2.5 + 1816: 00000000000ee730 9 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getflags@@GLIBC_2.2.5 + 1817: 00000000000ff790 90 FUNC WEAK DEFAULT 12 accept@@GLIBC_2.2.5 + 1818: 0000000000085b60 224 FUNC GLOBAL DEFAULT 12 __libc_free@@GLIBC_2.2.5 + 1819: 00000000001196a0 530 FUNC GLOBAL DEFAULT 12 gethostbyname2@@GLIBC_2.2.5 + 1820: 000000000013ea80 99 FUNC GLOBAL DEFAULT 12 __nss_hosts_lookup@@GLIBC_2.2.5 + 1821: 000000000003b8c0 10 FUNC WEAK DEFAULT 12 __strtoull_l@@GLIBC_2.2.5 + 1822: 000000000012a380 346 FUNC GLOBAL DEFAULT 12 cbc_crypt@@GLIBC_2.2.5 + 1823: 000000000007e910 410 FUNC GLOBAL DEFAULT 12 _IO_str_overflow@@GLIBC_2.2.5 + 1824: 000000000010b200 3834 FUNC WEAK DEFAULT 12 argp_parse@@GLIBC_2.2.5 + 1825: 00000000003c9a20 8 OBJECT WEAK DEFAULT 34 __after_morecore_hook@@GLIBC_2.2.5 + 1826: 0000000000096f60 217 FUNC GLOBAL DEFAULT 12 envz_get@@GLIBC_2.2.5 + 1827: 000000000012b1e0 27 FUNC GLOBAL DEFAULT 12 xdr_netnamestr@@GLIBC_2.2.5 + 1828: 0000000000070d80 373 FUNC GLOBAL DEFAULT 12 _IO_seekpos@@GLIBC_2.2.5 + 1829: 00000000000c6d00 33 FUNC GLOBAL DEFAULT 12 getresuid@@GLIBC_2.2.5 + 1830: 00000000000f85e0 1355 FUNC GLOBAL DEFAULT 12 __vsyslog_chk@@GLIBC_2.4 + 1831: 00000000000ef0b0 178 FUNC GLOBAL DEFAULT 12 posix_spawnattr_setsigmask@@GLIBC_2.2.5 + 1832: 000000000010ce10 104 FUNC GLOBAL DEFAULT 12 hstrerror@@GLIBC_2.2.5 + 1833: 00000000000a6ae0 76 IFUNC GLOBAL DEFAULT 12 __strcasestr@@GLIBC_2.2.5 + 1834: 00000000000ff170 33 FUNC GLOBAL DEFAULT 12 inotify_add_watch@@GLIBC_2.4 + 1835: 00000000000700e0 502 FUNC GLOBAL DEFAULT 12 _IO_proc_close@@GLIBC_2.2.5 + 1836: 00000000000ef650 33 FUNC WEAK DEFAULT 12 statfs64@@GLIBC_2.2.5 + 1837: 00000000000f4bf0 169 FUNC WEAK DEFAULT 12 tcgetattr@@GLIBC_2.2.5 + 1838: 000000000002f4f0 6 FUNC GLOBAL DEFAULT 12 toascii@@GLIBC_2.2.5 + 1839: 00000000001268f0 289 FUNC GLOBAL DEFAULT 12 authnone_create@@GLIBC_2.2.5 + 1840: 000000000002f640 19 FUNC WEAK DEFAULT 12 isupper_l@@GLIBC_2.3 + 1841: 000000000013d210 5 FUNC GLOBAL DEFAULT 12 getutxline@@GLIBC_2.2.5 + 1842: 00000000000f6030 175 FUNC GLOBAL DEFAULT 12 sethostid@@GLIBC_2.2.5 + 1843: 000000000006b6d0 137 FUNC WEAK DEFAULT 12 tmpfile64@@GLIBC_2.2.5 + 1844: 00000000000c57c0 427 FUNC WEAK DEFAULT 12 sleep@@GLIBC_2.2.5 + 1845: 00000000000b1500 16 FUNC GLOBAL DEFAULT 12 wcsxfrm@@GLIBC_2.2.5 + 1846: 00000000000c5500 83 FUNC WEAK DEFAULT 12 times@@GLIBC_2.2.5 + 1847: 0000000000079890 234 FUNC GLOBAL DEFAULT 12 _IO_file_sync@@GLIBC_2.2.5 + 1848: 00000000000989d0 3522 FUNC WEAK DEFAULT 12 strxfrm_l@@GLIBC_2.3 + 1849: 0000000000037310 60 FUNC GLOBAL DEFAULT 12 __libc_allocate_rtsig@@GLIBC_2.2.5 + 1850: 0000000000117f30 36 FUNC GLOBAL DEFAULT 12 __wcrtomb_chk@@GLIBC_2.4 + 1851: 000000000002f6e0 17 FUNC GLOBAL DEFAULT 12 __ctype_toupper_loc@@GLIBC_2.3 + 1852: 0000000000126fa0 279 FUNC GLOBAL DEFAULT 12 clntraw_create@@GLIBC_2.2.5 + 1853: 00000000000f56b0 156 FUNC GLOBAL DEFAULT 12 pwritev64@@GLIBC_2.10 + 1854: 00000000000f7860 48 FUNC GLOBAL DEFAULT 12 insque@@GLIBC_2.2.5 + 1855: 00000000000f5970 12 FUNC GLOBAL DEFAULT 12 __getpagesize@@GLIBC_2.2.5 + 1856: 00000000000fecc0 180 FUNC GLOBAL DEFAULT 12 epoll_pwait@@GLIBC_2.6 + 1857: 0000000000087440 347 FUNC WEAK DEFAULT 12 valloc@@GLIBC_2.2.5 + 1858: 00000000001158f0 349 FUNC GLOBAL DEFAULT 12 __strcpy_chk@@GLIBC_2.3.4 + 1859: 000000000000008c 4 TLS GLOBAL DEFAULT 23 __h_errno@@GLIBC_PRIVATE + 1860: 000000000002f700 17 FUNC GLOBAL DEFAULT 12 __ctype_tolower_loc@@GLIBC_2.3 + 1861: 000000000013d1e0 5 FUNC GLOBAL DEFAULT 12 getutxent@@GLIBC_2.2.5 + 1862: 000000000007e5e0 58 FUNC GLOBAL DEFAULT 12 _IO_list_unlock@@GLIBC_2.2.5 + 1863: 00000000003c7ff0 8 OBJECT GLOBAL DEFAULT 33 obstack_alloc_failed_handler@@GLIBC_2.2.5 + 1864: 00000000001182a0 235 FUNC GLOBAL DEFAULT 12 __vdprintf_chk@@GLIBC_2.8 + 1865: 0000000000071ea0 135 FUNC GLOBAL DEFAULT 12 fputws_unlocked@@GLIBC_2.2.5 + 1866: 0000000000134b30 338 FUNC GLOBAL DEFAULT 12 xdr_array@@GLIBC_2.2.5 + 1867: 00000000000fd6b0 33 FUNC GLOBAL DEFAULT 12 llistxattr@@GLIBC_2.3 + 1868: 0000000000114280 121 FUNC GLOBAL DEFAULT 12 __nss_group_lookup2@@GLIBC_PRIVATE + 1869: 0000000000039fc0 464 FUNC GLOBAL DEFAULT 12 __cxa_finalize@@GLIBC_2.2.5 + 1870: 00000000000372f0 7 FUNC GLOBAL DEFAULT 12 __libc_current_sigrtmin@@GLIBC_2.2.5 + 1871: 00000000000feba0 33 FUNC WEAK DEFAULT 12 umount2@@GLIBC_2.2.5 + 1872: 00000000000f8e10 51 FUNC GLOBAL DEFAULT 12 syscall@@GLIBC_2.2.5 + 1873: 0000000000036680 39 FUNC GLOBAL DEFAULT 12 sigpending@@GLIBC_2.2.5 + 1874: 0000000000037c40 138 FUNC GLOBAL DEFAULT 12 bsearch@@GLIBC_2.2.5 + 1875: 000000000002f260 82 FUNC GLOBAL DEFAULT 12 __assert_perror_fail@@GLIBC_2.2.5 + 1876: 0000000000092480 80 IFUNC WEAK DEFAULT 12 strncasecmp_l@@GLIBC_2.3 + 1877: 00000000000e8150 52 FUNC GLOBAL DEFAULT 12 freeaddrinfo@@GLIBC_2.2.5 + 1878: 0000000000118090 375 FUNC GLOBAL DEFAULT 12 __vasprintf_chk@@GLIBC_2.8 + 1879: 00000000000fcf40 712 FUNC WEAK DEFAULT 12 get_nprocs@@GLIBC_2.2.5 + 1880: 0000000000071100 547 FUNC WEAK DEFAULT 12 setvbuf@@GLIBC_2.2.5 + 1881: 000000000011bfb0 758 FUNC GLOBAL DEFAULT 12 getprotobyname_r@@GLIBC_2.2.5 + 1882: 000000000009a120 116 FUNC GLOBAL DEFAULT 12 __xpg_strerror_r@@GLIBC_2.3.4 + 1883: 00000000000b28f0 2091 FUNC GLOBAL DEFAULT 12 __wcsxfrm_l@@GLIBC_2.2.5 + 1884: 0000000000110780 204 FUNC GLOBAL DEFAULT 12 __resolv_context_get_preinit@@GLIBC_PRIVATE + 1885: 0000000000071500 117 FUNC WEAK DEFAULT 12 vsscanf@@GLIBC_2.2.5 + 1886: 000000000008ab90 173 FUNC GLOBAL DEFAULT 12 __libc_scratch_buffer_set_array_size@@GLIBC_PRIVATE + 1887: 00000000000c3de0 423 FUNC GLOBAL DEFAULT 12 fgetpwent@@GLIBC_2.2.5 + 1888: 0000000000118fc0 1179 FUNC GLOBAL DEFAULT 12 gethostbyaddr_r@@GLIBC_2.2.5 + 1889: 00000000001216f0 162 FUNC GLOBAL DEFAULT 12 setaliasent@@GLIBC_2.2.5 + 1890: 00000000001284c0 114 FUNC GLOBAL DEFAULT 12 xdr_rejected_reply@@GLIBC_2.2.5 + 1891: 00000000000fef30 33 FUNC GLOBAL DEFAULT 12 capget@@GLIBC_2.2.5 + 1892: 00000000000366b0 131 FUNC GLOBAL DEFAULT 12 __sigsuspend@@GLIBC_2.2.5 + 1893: 00000000000c10b0 368 FUNC WEAK DEFAULT 12 readdir64_r@@GLIBC_2.2.5 + 1894: 000000000012a0b0 236 FUNC GLOBAL DEFAULT 12 getpublickey@@GLIBC_2.2.5 + 1895: 00000000000e38b0 33 FUNC GLOBAL DEFAULT 12 __sched_setscheduler@@GLIBC_2.2.5 + 1896: 0000000000132720 44 FUNC GLOBAL DEFAULT 12 __rpc_thread_svc_pollfd@@GLIBC_2.2.5 + 1897: 0000000000132a70 194 FUNC GLOBAL DEFAULT 12 svc_unregister@@GLIBC_2.2.5 + 1898: 00000000000f2ee0 1439 FUNC GLOBAL DEFAULT 12 fts_open@@GLIBC_2.2.5 + 1899: 00000000000c6cd0 33 FUNC WEAK DEFAULT 12 setsid@@GLIBC_2.2.5 + 1900: 000000000013b270 112 FUNC WEAK DEFAULT 12 pututline@@GLIBC_2.2.5 + 1901: 0000000000104af0 369 FUNC GLOBAL DEFAULT 12 sgetsgent@@GLIBC_2.10 + 1902: 0000000000000008 8 TLS GLOBAL DEFAULT 22 __resp@@GLIBC_PRIVATE + 1903: 000000000013af90 76 FUNC WEAK DEFAULT 12 getutent@@GLIBC_2.2.5 + 1904: 00000000000ee610 133 FUNC GLOBAL DEFAULT 12 posix_spawnattr_getsigdefault@@GLIBC_2.2.5 + 1905: 00000000001027c0 130 FUNC WEAK DEFAULT 12 iswgraph_l@@GLIBC_2.3 + 1906: 00000000000b14f0 16 FUNC WEAK DEFAULT 12 wcscoll@@GLIBC_2.2.5 + 1907: 00000000000529d0 181 FUNC WEAK DEFAULT 12 register_printf_type@@GLIBC_2.10 + 1908: 0000000000052ac0 2271 FUNC GLOBAL DEFAULT 12 printf_size@@GLIBC_2.2.5 + 1909: 000000000010c240 38 FUNC GLOBAL DEFAULT 12 pthread_attr_destroy@@GLIBC_2.2.5 + 1910: 00000000000a9d90 16 FUNC GLOBAL DEFAULT 12 __wcstoul_internal@@GLIBC_2.2.5 + 1911: 000000000003ad70 71 FUNC WEAK DEFAULT 12 nrand48_r@@GLIBC_2.2.5 + 1912: 0000000000135dc0 175 FUNC GLOBAL DEFAULT 12 xdr_uint64_t@@GLIBC_2.2.5 + 1913: 000000000012d440 544 FUNC GLOBAL DEFAULT 12 svcunix_create@@GLIBC_2.2.5 + 1914: 0000000000036600 31 FUNC WEAK DEFAULT 12 __sigaction@@GLIBC_2.2.5 + 1915: 0000000000103db0 939 FUNC GLOBAL DEFAULT 12 _nss_files_parse_spent@@GLIBC_PRIVATE + 1916: 00000000000f49e0 139 FUNC GLOBAL DEFAULT 12 cfsetspeed@@GLIBC_2.2.5 + 1917: 0000000000117410 16 FUNC GLOBAL DEFAULT 12 __wcpncpy_chk@@GLIBC_2.4 + 1918: 0000000000170ae0 104 FUNC GLOBAL DEFAULT 13 __libc_freeres@@GLIBC_2.2.5 + 1919: 00000000000eff80 273 FUNC WEAK DEFAULT 12 fcntl@@GLIBC_2.2.5 + 1920: 00000000000a8a40 84 FUNC GLOBAL DEFAULT 12 wcsspn@@GLIBC_2.2.5 + 1921: 00000000000f4ec0 33 FUNC WEAK DEFAULT 12 getrlimit64@@GLIBC_2.2.5 + 1922: 00000000001022a0 153 FUNC WEAK DEFAULT 12 wctype@@GLIBC_2.2.5 + 1923: 0000000000124570 43 FUNC GLOBAL DEFAULT 12 inet6_option_init@@GLIBC_2.3.3 + 1924: 0000000000102c60 82 FUNC GLOBAL DEFAULT 12 __iswctype_l@@GLIBC_2.2.5 + 1925: 0000000000130520 704 FUNC GLOBAL DEFAULT 12 __libc_clntudp_bufcreate@@GLIBC_PRIVATE + 1926: 00000000000f9320 34 FUNC GLOBAL DEFAULT 12 ecvt@@GLIBC_2.2.5 + 1927: 00000000001171b0 20 FUNC GLOBAL DEFAULT 12 __wmemmove_chk@@GLIBC_2.4 + 1928: 0000000000115d90 133 FUNC GLOBAL DEFAULT 12 __sprintf_chk@@GLIBC_2.3.4 + 1929: 0000000000126ab0 508 FUNC GLOBAL DEFAULT 12 bindresvport@@GLIBC_2.2.5 + 1930: 000000000011f7f0 269 FUNC GLOBAL DEFAULT 12 rresvport@@GLIBC_2.2.5 + 1931: 0000000000053620 143 FUNC GLOBAL DEFAULT 12 __asprintf@@GLIBC_2.2.5 + 1932: 00000000000f4930 68 FUNC GLOBAL DEFAULT 12 cfsetospeed@@GLIBC_2.2.5 + 1933: 0000000000076b30 262 FUNC GLOBAL DEFAULT 12 fwide@@GLIBC_2.2.5 + 1934: 0000000000090180 80 IFUNC GLOBAL DEFAULT 12 __strcasecmp_l@@GLIBC_2.2.5 + 1935: 00000000000c2ad0 1147 FUNC GLOBAL DEFAULT 12 getgrgid_r@@GLIBC_2.2.5 + 1936: 000000000013e830 38 FUNC GLOBAL DEFAULT 12 pthread_cond_init@GLIBC_2.2.5 + 1937: 000000000010c540 38 FUNC GLOBAL DEFAULT 12 pthread_cond_init@@GLIBC_2.3.2 + 1938: 00000000000c6c90 9 FUNC GLOBAL DEFAULT 12 setpgrp@@GLIBC_2.2.5 + 1939: 00000000000f4910 19 FUNC GLOBAL DEFAULT 12 cfgetispeed@@GLIBC_2.2.5 + 1940: 00000000000a8160 73 FUNC GLOBAL DEFAULT 12 wcsdup@@GLIBC_2.2.5 + 1941: 0000000000037920 12 FUNC GLOBAL DEFAULT 12 atoll@@GLIBC_2.2.5 + 1942: 00000000000362b0 158 FUNC WEAK DEFAULT 12 bsd_signal@@GLIBC_2.2.5 + 1943: 000000000003b460 10 FUNC GLOBAL DEFAULT 12 __strtol_l@@GLIBC_2.2.5 + 1944: 000000000013d180 23 FUNC WEAK DEFAULT 12 ptsname_r@@GLIBC_2.2.5 + 1945: 0000000000129cf0 368 FUNC GLOBAL DEFAULT 12 xdrrec_create@@GLIBC_2.2.5 + 1946: 0000000000118db0 17 FUNC GLOBAL DEFAULT 12 __h_errno_location@@GLIBC_2.2.5 + 1947: 00000000000fd5f0 36 FUNC GLOBAL DEFAULT 12 fsetxattr@@GLIBC_2.3 + 1948: 0000000000125690 162 FUNC GLOBAL DEFAULT 12 __inet6_scopeid_pton@@GLIBC_PRIVATE + 1949: 0000000000079a90 1451 FUNC GLOBAL DEFAULT 12 _IO_file_seekoff@@GLIBC_2.2.5 + 1950: 000000000006bf00 95 FUNC GLOBAL DEFAULT 12 _IO_ftrylockfile@@GLIBC_2.2.5 + 1951: 00000000000f01e0 90 FUNC WEAK DEFAULT 12 __close@@GLIBC_2.2.5 + 1952: 000000000007e570 5 FUNC GLOBAL DEFAULT 12 _IO_iter_next@@GLIBC_2.2.5 + 1953: 00000000000f7580 143 FUNC WEAK DEFAULT 12 getmntent_r@@GLIBC_2.2.5 + 1954: 000000000003a1e0 17 FUNC GLOBAL DEFAULT 12 labs@@GLIBC_2.2.5 + 1955: 00000000000f11c0 33 FUNC WEAK DEFAULT 12 link@@GLIBC_2.2.5 + 1956: 00000000003c71f8 4 OBJECT GLOBAL DEFAULT 33 obstack_exit_failure@@GLIBC_2.2.5 + 1957: 00000000000bdfe0 24 FUNC GLOBAL DEFAULT 12 __strftime_l@@GLIBC_2.3 + 1958: 000000000012b2a0 75 FUNC GLOBAL DEFAULT 12 xdr_cryptkeyres@@GLIBC_2.2.5 + 1959: 00000000001210b0 1157 FUNC GLOBAL DEFAULT 12 innetgr@@GLIBC_2.2.5 + 1960: 00000000000ef9e0 227 FUNC WEAK DEFAULT 12 openat@@GLIBC_2.4 + 1961: 00000000003c81a0 8 OBJECT GLOBAL DEFAULT 33 _IO_list_all@@GLIBC_2.2.5 + 1962: 00000000000f7780 56 FUNC GLOBAL DEFAULT 12 futimesat@@GLIBC_2.4 + 1963: 0000000000073b30 949 FUNC GLOBAL DEFAULT 12 _IO_wdefault_xsgetn@@GLIBC_2.2.5 + 1964: 0000000000102620 129 FUNC GLOBAL DEFAULT 12 __iswcntrl_l@@GLIBC_2.2.5 + 1965: 0000000000116dc0 16 FUNC GLOBAL DEFAULT 12 __pread64_chk@@GLIBC_2.4 + 1966: 0000000000077f30 323 FUNC WEAK DEFAULT 12 vdprintf@@GLIBC_2.2.5 + 1967: 0000000000072bf0 191 FUNC WEAK DEFAULT 12 vswprintf@@GLIBC_2.2.5 + 1968: 000000000006fc30 391 FUNC GLOBAL DEFAULT 12 _IO_getline_info@@GLIBC_2.2.5 + 1969: 0000000000130aa0 632 FUNC GLOBAL DEFAULT 12 clntudp_create@@GLIBC_2.2.5 + 1970: 00000000000c1580 442 FUNC WEAK DEFAULT 12 scandirat64@@GLIBC_2.15 + 1971: 000000000011be20 326 FUNC GLOBAL DEFAULT 12 getprotobyname@@GLIBC_2.2.5 + 1972: 00000000000bc180 10 FUNC WEAK DEFAULT 12 strptime_l@@GLIBC_2.3.2 + 1973: 00000000000966c0 234 FUNC WEAK DEFAULT 12 argz_create_sep@@GLIBC_2.2.5 + 1974: 000000000002f680 11 FUNC WEAK DEFAULT 12 tolower_l@@GLIBC_2.3 + 1975: 0000000000078b60 47 FUNC GLOBAL DEFAULT 12 __fsetlocking@@GLIBC_2.2.5 + 1976: 00000000003c8168 8 OBJECT GLOBAL DEFAULT 33 __ctype32_b@GLIBC_2.2.5 + 1977: 0000000000114c80 365 FUNC GLOBAL DEFAULT 12 __backtrace@@GLIBC_2.2.5 + 1978: 00000000000ef450 69 FUNC GLOBAL DEFAULT 12 __xstat@@GLIBC_2.2.5 + 1979: 00000000000b1ee0 2569 FUNC WEAK DEFAULT 12 wcscoll_l@@GLIBC_2.3 + 1980: 00000000000f9110 33 FUNC GLOBAL DEFAULT 12 __madvise@@GLIBC_PRIVATE + 1981: 00000000000f4ec0 33 FUNC WEAK DEFAULT 12 getrlimit@@GLIBC_2.2.5 + 1982: 0000000000036900 87 FUNC WEAK DEFAULT 12 sigsetmask@@GLIBC_2.2.5 + 1983: 000000000006b350 163 FUNC GLOBAL DEFAULT 12 scanf@@GLIBC_2.2.5 + 1984: 000000000002f330 26 FUNC GLOBAL DEFAULT 12 isdigit@@GLIBC_2.2.5 + 1985: 00000000000fd620 36 FUNC GLOBAL DEFAULT 12 getxattr@@GLIBC_2.3 + 1986: 00000000000ef800 20 FUNC GLOBAL DEFAULT 12 lchmod@@GLIBC_2.3.2 + 1987: 00000000001311c0 223 FUNC GLOBAL DEFAULT 12 key_encryptsession@@GLIBC_2.2.5 + 1988: 000000000002f310 25 FUNC GLOBAL DEFAULT 12 iscntrl@@GLIBC_2.2.5 + 1989: 00000000000ff260 36 FUNC WEAK DEFAULT 12 mount@@GLIBC_2.2.5 + 1990: 00000000000f5980 35 FUNC WEAK DEFAULT 12 getdtablesize@@GLIBC_2.2.5 + 1991: 000000000018d390 4 OBJECT GLOBAL DEFAULT 15 sys_nerr@GLIBC_2.2.5 + 1992: 000000000003a850 156 FUNC WEAK DEFAULT 12 random_r@@GLIBC_2.2.5 + 1993: 000000000018d398 4 OBJECT GLOBAL DEFAULT 15 sys_nerr@GLIBC_2.4 + 1994: 000000000018d38c 4 OBJECT GLOBAL DEFAULT 15 sys_nerr@@GLIBC_2.12 + 1995: 000000000002f690 11 FUNC GLOBAL DEFAULT 12 __toupper_l@@GLIBC_2.2.5 + 1996: 000000000018d394 4 OBJECT GLOBAL DEFAULT 15 sys_nerr@GLIBC_2.3 + 1997: 0000000000101f60 152 FUNC WEAK DEFAULT 12 iswpunct@@GLIBC_2.2.5 + 1998: 00000000000fc640 137 FUNC GLOBAL DEFAULT 12 errx@@GLIBC_2.2.5 + 1999: 0000000000090180 80 IFUNC WEAK DEFAULT 12 strcasecmp_l@@GLIBC_2.3 + 2000: 00000000000a8c40 117 FUNC GLOBAL DEFAULT 12 wmemchr@@GLIBC_2.2.5 + 2001: 000000000008f950 75 IFUNC GLOBAL DEFAULT 12 memmove@@GLIBC_2.2.5 + 2002: 00000000001316c0 199 FUNC GLOBAL DEFAULT 12 key_setnet@@GLIBC_2.2.5 + 2003: 000000000007a2b0 149 FUNC GLOBAL DEFAULT 12 _IO_file_write@@GLIBC_2.2.5 + 2004: 00000000000c54d0 33 FUNC WEAK DEFAULT 12 uname@@GLIBC_2.2.5 + 2005: 00000000003cd0a0 4 OBJECT GLOBAL DEFAULT 34 svc_max_pollfd@@GLIBC_2.2.5 + 2006: 0000000000133050 136 FUNC GLOBAL DEFAULT 12 svc_getreqset@@GLIBC_2.2.5 + 2007: 00000000000a9dd0 18 FUNC GLOBAL DEFAULT 12 wcstod@@GLIBC_2.2.5 + 2008: 00000000003ccc50 4 OBJECT GLOBAL DEFAULT 34 _nl_msg_cat_cntr@@GLIBC_2.2.5 + 2009: 0000000000116910 18 FUNC GLOBAL DEFAULT 12 __chk_fail@@GLIBC_2.3.4 + 2010: 00000000001019b0 91 FUNC WEAK DEFAULT 12 mcount@@GLIBC_2.2.5 + 2011: 00000000000ee7a0 21 FUNC GLOBAL DEFAULT 12 posix_spawnp@@GLIBC_2.15 + 2012: 000000000006c1a0 276 FUNC GLOBAL DEFAULT 12 __isoc99_vscanf@@GLIBC_2.7 + 2013: 0000000000089ca0 142 FUNC GLOBAL DEFAULT 12 mprobe@@GLIBC_2.2.5 + 2014: 000000000013e3c0 21 FUNC GLOBAL DEFAULT 12 posix_spawnp@GLIBC_2.2.5 + 2015: 000000000007bf10 508 FUNC GLOBAL DEFAULT 12 _IO_file_overflow@@GLIBC_2.2.5 + 2016: 00000000000a9e30 18 FUNC GLOBAL DEFAULT 12 wcstof@@GLIBC_2.2.5 + 2017: 0000000000114df0 766 FUNC WEAK DEFAULT 12 backtrace_symbols@@GLIBC_2.2.5 + 2018: 0000000000117f90 16 FUNC GLOBAL DEFAULT 12 __wcsrtombs_chk@@GLIBC_2.4 + 2019: 000000000007e620 32 FUNC GLOBAL DEFAULT 12 _IO_list_resetlock@@GLIBC_2.2.5 + 2020: 0000000000100c00 42 FUNC GLOBAL DEFAULT 12 _mcleanup@@GLIBC_2.2.5 + 2021: 0000000000102cc0 117 FUNC GLOBAL DEFAULT 12 __wctrans_l@@GLIBC_2.2.5 + 2022: 000000000002f660 19 FUNC WEAK DEFAULT 12 isxdigit_l@@GLIBC_2.3 + 2023: 000000000006f6c0 469 FUNC GLOBAL DEFAULT 12 _IO_fwrite@@GLIBC_2.2.5 + 2024: 0000000000037350 344 FUNC WEAK DEFAULT 12 sigtimedwait@@GLIBC_2.2.5 + 2025: 000000000010c750 38 FUNC GLOBAL DEFAULT 12 pthread_self@@GLIBC_2.2.5 + 2026: 00000000000a8aa0 140 FUNC GLOBAL DEFAULT 12 wcstok@@GLIBC_2.2.5 + 2027: 00000000001203a0 1178 FUNC GLOBAL DEFAULT 12 ruserpass@@GLIBC_2.2.5 + 2028: 0000000000132990 218 FUNC GLOBAL DEFAULT 12 svc_register@@GLIBC_2.2.5 + 2029: 00000000000c55f0 150 FUNC WEAK DEFAULT 12 __waitpid@@GLIBC_2.2.5 + 2030: 00000000000a9d70 18 FUNC GLOBAL DEFAULT 12 wcstol@@GLIBC_2.2.5 + 2031: 000000000011ce30 161 FUNC GLOBAL DEFAULT 12 endservent@@GLIBC_2.2.5 + 2032: 000000000006ece0 10 FUNC WEAK DEFAULT 12 fopen64@@GLIBC_2.2.5 + 2033: 000000000010c3f0 38 FUNC GLOBAL DEFAULT 12 pthread_attr_setschedpolicy@@GLIBC_2.2.5 + 2034: 0000000000072cb0 122 FUNC GLOBAL DEFAULT 12 vswscanf@@GLIBC_2.2.5 + 2035: 00000000000481b0 35 FUNC GLOBAL DEFAULT 12 ctermid@@GLIBC_2.2.5 + 2036: 000000000013eb60 99 FUNC GLOBAL DEFAULT 12 __nss_group_lookup@@GLIBC_2.2.5 + 2037: 00000000000ee210 96 FUNC WEAK DEFAULT 12 pread@@GLIBC_2.2.5 + 2038: 00000000000a9d30 34 FUNC WEAK DEFAULT 12 wcschrnul@@GLIBC_2.2.5 + 2039: 000000000013da60 146 FUNC GLOBAL DEFAULT 12 __libc_dlsym@@GLIBC_PRIVATE + 2040: 00000000000f6e70 38 FUNC GLOBAL DEFAULT 12 __endmntent@@GLIBC_2.2.5 + 2041: 00000000000a9d70 18 FUNC WEAK DEFAULT 12 wcstoq@@GLIBC_2.2.5 + 2042: 00000000000ee270 96 FUNC WEAK DEFAULT 12 pwrite@@GLIBC_2.2.5 + 2043: 0000000000036ba0 100 FUNC GLOBAL DEFAULT 12 sigstack@@GLIBC_2.2.5 + 2044: 00000000000f61e0 11 FUNC GLOBAL DEFAULT 12 mkostemp@@GLIBC_2.7 + 2045: 00000000000c5d20 75 FUNC GLOBAL DEFAULT 12 __vfork@@GLIBC_2.2.5 + 2046: 0000000000078a90 9 FUNC GLOBAL DEFAULT 12 __freadable@@GLIBC_2.2.5 + 2047: 0000000000095600 124 FUNC WEAK DEFAULT 12 strsep@@GLIBC_2.2.5 + 2048: 00000000001025a0 126 FUNC WEAK DEFAULT 12 iswblank_l@@GLIBC_2.3 + 2049: 00000000000f6220 36 FUNC GLOBAL DEFAULT 12 mkostemps@@GLIBC_2.11 + 2050: 000000000007bc00 776 FUNC GLOBAL DEFAULT 12 _IO_file_underflow@@GLIBC_2.2.5 + 2051: 000000000008a690 173 FUNC GLOBAL DEFAULT 12 _obstack_begin@@GLIBC_2.2.5 + 2052: 0000000000121610 218 FUNC GLOBAL DEFAULT 12 getnetgrent@@GLIBC_2.2.5 + 2053: 0000000000131ab0 238 FUNC GLOBAL DEFAULT 12 user2netname@@GLIBC_2.2.5 + 2054: 00000000003c8880 8 OBJECT GLOBAL DEFAULT 33 __morecore@@GLIBC_2.2.5 + 2055: 000000000002f780 605 FUNC WEAK DEFAULT 12 bindtextdomain@@GLIBC_2.2.5 + 2056: 00000000000a95d0 558 FUNC WEAK DEFAULT 12 wcsrtombs@@GLIBC_2.2.5 + 2057: 000000000013e980 160 FUNC GLOBAL DEFAULT 12 __nss_next@@GLIBC_2.2.5 + 2058: 00000000000efbf0 33 FUNC WEAK DEFAULT 12 access@@GLIBC_2.2.5 + 2059: 0000000000045450 1230 FUNC GLOBAL DEFAULT 12 fmtmsg@@GLIBC_2.2.5 + 2060: 00000000000e38e0 33 FUNC GLOBAL DEFAULT 12 __sched_getscheduler@@GLIBC_2.2.5 + 2061: 00000000000f9810 182 FUNC GLOBAL DEFAULT 12 qfcvt@@GLIBC_2.2.5 + 2062: 0000000000089ba0 246 FUNC GLOBAL DEFAULT 12 mcheck_pedantic@@GLIBC_2.2.5 + 2063: 000000000008a360 386 FUNC GLOBAL DEFAULT 12 mtrace@@GLIBC_2.2.5 + 2064: 00000000000c0d30 70 FUNC GLOBAL DEFAULT 12 ntp_gettime@@GLIBC_2.2.5 + 2065: 00000000000776e0 245 FUNC GLOBAL DEFAULT 12 _IO_getc@@GLIBC_2.2.5 + 2066: 00000000000f0300 33 FUNC WEAK DEFAULT 12 pipe2@@GLIBC_2.9 + 2067: 0000000000095e50 1045 FUNC GLOBAL DEFAULT 12 memmem@@GLIBC_2.2.5 + 2068: 00000000000ef600 77 FUNC GLOBAL DEFAULT 12 __fxstatat@@GLIBC_2.4 + 2069: 0000000000078a20 41 FUNC GLOBAL DEFAULT 12 __fbufsize@@GLIBC_2.2.5 + 2070: 00000000003ccdc8 8 OBJECT GLOBAL DEFAULT 34 loc1@@GLIBC_2.2.5 + 2071: 000000000007e2b0 47 FUNC GLOBAL DEFAULT 12 _IO_marker_delta@@GLIBC_2.2.5 + 2072: 0000000000096270 47 IFUNC GLOBAL DEFAULT 12 rawmemchr@@GLIBC_2.2.5 + 2073: 00000000003ccdd0 8 OBJECT GLOBAL DEFAULT 34 loc2@@GLIBC_2.2.5 + 2074: 00000000000f5d20 33 FUNC GLOBAL DEFAULT 12 sync@@GLIBC_2.2.5 + 2075: 000000000008f380 55 IFUNC WEAK DEFAULT 12 bcmp@@GLIBC_2.2.5 + 2076: 00000000000c1fb0 157 FUNC GLOBAL DEFAULT 12 getgrouplist@@GLIBC_2.2.5 + 2077: 00000000000ff440 33 FUNC GLOBAL DEFAULT 12 sysinfo@@GLIBC_2.2.5 + 2078: 0000000000036aa0 255 FUNC WEAK DEFAULT 12 sigvec@@GLIBC_2.2.5 + 2079: 00000000000718d0 36 FUNC WEAK DEFAULT 12 getwc_unlocked@@GLIBC_2.2.5 + 2080: 00000000003c7290 4 OBJECT GLOBAL DEFAULT 33 opterr@@GLIBC_2.2.5 + 2081: 0000000000133240 163 FUNC GLOBAL DEFAULT 12 svc_getreq@@GLIBC_2.2.5 + 2082: 0000000000096520 97 FUNC WEAK DEFAULT 12 argz_append@@GLIBC_2.2.5 + 2083: 00000000000c6ac0 93 FUNC WEAK DEFAULT 12 setgid@@GLIBC_2.2.5 + 2084: 0000000000086f30 1286 FUNC WEAK DEFAULT 12 malloc_set_state@@GLIBC_2.2.5 + 2085: 000000000010db60 778 FUNC GLOBAL DEFAULT 12 __inet_pton_length@@GLIBC_PRIVATE + 2086: 0000000000115890 91 FUNC GLOBAL DEFAULT 12 __strcat_chk@@GLIBC_2.3.4 + 2087: 0000000000072970 161 FUNC GLOBAL DEFAULT 12 wprintf@@GLIBC_2.2.5 + 2088: 00000000000965c0 69 FUNC GLOBAL DEFAULT 12 __argz_count@@GLIBC_2.2.5 + 2089: 0000000000104750 136 FUNC WEAK DEFAULT 12 ulckpwdf@@GLIBC_2.2.5 + 2090: 00000000000f3c40 363 FUNC GLOBAL DEFAULT 12 fts_children@@GLIBC_2.2.5 + 2091: 000000000008f020 16 FUNC GLOBAL DEFAULT 12 strxfrm@@GLIBC_2.2.5 + 2092: 000000000011c950 878 FUNC GLOBAL DEFAULT 12 getservbyport_r@@GLIBC_2.2.5 + 2093: 00000000000ef3f0 35 FUNC GLOBAL DEFAULT 12 mkfifo@@GLIBC_2.2.5 + 2094: 00000000000ef9e0 227 FUNC WEAK DEFAULT 12 openat64@@GLIBC_2.4 + 2095: 00000000000e38e0 33 FUNC WEAK DEFAULT 12 sched_getscheduler@@GLIBC_2.2.5 + 2096: 00000000000efd40 416 FUNC GLOBAL DEFAULT 12 faccessat@@GLIBC_2.4 + 2097: 0000000000039d40 76 FUNC WEAK DEFAULT 12 on_exit@@GLIBC_2.2.5 + 2098: 00000000003cd188 8 OBJECT GLOBAL DEFAULT 34 __key_decryptsession_pk_LOCAL@@GLIBC_2.2.5 + 2099: 0000000000110340 17 FUNC GLOBAL DEFAULT 12 __res_randomid@@GLIBC_2.2.5 + 2100: 0000000000077db0 10 FUNC GLOBAL DEFAULT 12 setbuf@@GLIBC_2.2.5 + 2101: 00000000000796b0 163 FUNC GLOBAL DEFAULT 12 fwrite_unlocked@@GLIBC_2.2.5 + 2102: 000000000008b3c0 53 IFUNC GLOBAL DEFAULT 12 strcmp@@GLIBC_2.2.5 + 2103: 000000000006fdd0 407 FUNC GLOBAL DEFAULT 12 _IO_gets@@GLIBC_2.2.5 + 2104: 00000000000361e0 59 FUNC GLOBAL DEFAULT 12 __libc_longjmp@@GLIBC_PRIVATE + 2105: 00000000000ffa50 90 FUNC WEAK DEFAULT 12 recvmsg@@GLIBC_2.2.5 + 2106: 000000000003af80 16 FUNC GLOBAL DEFAULT 12 __strtoull_internal@@GLIBC_2.2.5 + 2107: 0000000000102970 130 FUNC WEAK DEFAULT 12 iswspace_l@@GLIBC_2.3 + 2108: 000000000002f5a0 19 FUNC WEAK DEFAULT 12 islower_l@@GLIBC_2.3 + 2109: 000000000007ca00 458 FUNC GLOBAL DEFAULT 12 __underflow@@GLIBC_2.2.5 + 2110: 00000000000ee270 96 FUNC WEAK DEFAULT 12 pwrite64@@GLIBC_2.2.5 + 2111: 000000000008cc10 127 FUNC GLOBAL DEFAULT 12 strerror@@GLIBC_2.2.5 + 2112: 0000000000135ae0 377 FUNC GLOBAL DEFAULT 12 xdr_wrapstring@@GLIBC_2.2.5 + 2113: 0000000000118000 138 FUNC GLOBAL DEFAULT 12 __asprintf_chk@@GLIBC_2.8 + 2114: 0000000000044e90 133 FUNC GLOBAL DEFAULT 12 __strfmon_l@@GLIBC_2.2.5 + 2115: 00000000000f4ca0 39 FUNC GLOBAL DEFAULT 12 tcgetpgrp@@GLIBC_2.2.5 + 2116: 0000000000022460 448 FUNC GLOBAL DEFAULT 12 __libc_start_main@@GLIBC_2.2.5 + 2117: 00000000000718d0 36 FUNC WEAK DEFAULT 12 fgetwc_unlocked@@GLIBC_2.2.5 + 2118: 00000000000c14a0 3 FUNC GLOBAL DEFAULT 12 dirfd@@GLIBC_2.2.5 + 2119: 00000000001056f0 872 FUNC GLOBAL DEFAULT 12 _nss_files_parse_sgent@@GLIBC_PRIVATE + 2120: 000000000013e7b0 21 FUNC GLOBAL DEFAULT 12 nftw@GLIBC_2.2.5 + 2121: 0000000000128630 10 FUNC GLOBAL DEFAULT 12 xdr_des_block@@GLIBC_2.2.5 + 2122: 00000000000f21f0 52 FUNC GLOBAL DEFAULT 12 nftw@@GLIBC_2.3.3 + 2123: 000000000012b240 83 FUNC GLOBAL DEFAULT 12 xdr_cryptkeyarg2@@GLIBC_2.2.5 + 2124: 00000000001286a0 123 FUNC GLOBAL DEFAULT 12 xdr_callhdr@@GLIBC_2.2.5 + 2125: 00000000000c45c0 162 FUNC GLOBAL DEFAULT 12 setpwent@@GLIBC_2.2.5 + 2126: 0000000000102850 130 FUNC WEAK DEFAULT 12 iswprint_l@@GLIBC_2.3 + 2127: 0000000000100300 33 FUNC WEAK DEFAULT 12 semop@@GLIBC_2.2.5 + 2128: 00000000000f6950 38 FUNC GLOBAL DEFAULT 12 endfsent@@GLIBC_2.2.5 + 2129: 000000000002f640 19 FUNC GLOBAL DEFAULT 12 __isupper_l@@GLIBC_2.2.5 + 2130: 0000000000072a20 163 FUNC GLOBAL DEFAULT 12 wscanf@@GLIBC_2.2.5 + 2131: 0000000000077030 193 FUNC WEAK DEFAULT 12 ferror@@GLIBC_2.2.5 + 2132: 000000000013b1f0 116 FUNC WEAK DEFAULT 12 getutent_r@@GLIBC_2.2.5 + 2133: 000000000012dc40 622 FUNC GLOBAL DEFAULT 12 authdes_create@@GLIBC_2.2.5 + 2134: 0000000000090020 53 IFUNC WEAK DEFAULT 12 stpcpy@@GLIBC_2.2.5 + 2135: 00000000000f3e10 205 FUNC GLOBAL DEFAULT 12 ppoll@@GLIBC_2.4 + 2136: 00000000000989d0 3522 FUNC GLOBAL DEFAULT 12 __strxfrm_l@@GLIBC_2.2.5 + 2137: 000000000013a990 20 FUNC GLOBAL DEFAULT 12 fdetach@@GLIBC_2.2.5 + 2138: 000000000013e800 38 FUNC GLOBAL DEFAULT 12 pthread_cond_destroy@GLIBC_2.2.5 + 2139: 0000000000035a50 137 FUNC WEAK DEFAULT 12 ldexp@@GLIBC_2.2.5 + 2140: 00000000000c5250 525 FUNC WEAK DEFAULT 12 fgetpwent_r@@GLIBC_2.2.5 + 2141: 000000000010c510 38 FUNC GLOBAL DEFAULT 12 pthread_cond_destroy@@GLIBC_2.3.2 + 2142: 00000000000c5560 144 FUNC WEAK DEFAULT 12 __wait@@GLIBC_2.2.5 + 2143: 00000000000f9350 40 FUNC GLOBAL DEFAULT 12 gcvt@@GLIBC_2.2.5 + 2144: 0000000000072830 143 FUNC WEAK DEFAULT 12 fwprintf@@GLIBC_2.2.5 + 2145: 00000000001355a0 346 FUNC GLOBAL DEFAULT 12 xdr_bytes@@GLIBC_2.2.5 + 2146: 00000000000398f0 88 FUNC WEAK DEFAULT 12 setenv@@GLIBC_2.2.5 + 2147: 00000000000f52e0 33 FUNC GLOBAL DEFAULT 12 setpriority@@GLIBC_2.2.5 + 2148: 000000000013d9c0 146 FUNC GLOBAL DEFAULT 12 __libc_dlopen_mode@@GLIBC_PRIVATE + 2149: 00000000000ee440 152 FUNC GLOBAL DEFAULT 12 posix_spawn_file_actions_addopen@@GLIBC_2.2.5 + 2150: 000000000002e4f0 73 FUNC WEAK DEFAULT 12 nl_langinfo_l@@GLIBC_2.3 + 2151: 000000000007d630 126 FUNC GLOBAL DEFAULT 12 _IO_default_doallocate@@GLIBC_2.2.5 + 2152: 00000000000239c0 8 FUNC GLOBAL DEFAULT 12 __gconv_get_modules_db@@GLIBC_PRIVATE + 2153: 0000000000116df0 37 FUNC GLOBAL DEFAULT 12 __recvfrom_chk@@GLIBC_2.4 + 2154: 000000000006f160 320 FUNC GLOBAL DEFAULT 12 _IO_fread@@GLIBC_2.2.5 + 2155: 00000000000c1790 408 FUNC GLOBAL DEFAULT 12 fgetgrent@@GLIBC_2.2.5 + 2156: 00000000000f5ae0 33 FUNC GLOBAL DEFAULT 12 setdomainname@@GLIBC_2.2.5 + 2157: 00000000000efb90 90 FUNC WEAK DEFAULT 12 write@@GLIBC_2.2.5 + 2158: 0000000000114a50 100 FUNC GLOBAL DEFAULT 12 __clock_settime@@GLIBC_PRIVATE + 2159: 000000000011c7c0 335 FUNC GLOBAL DEFAULT 12 getservbyport@@GLIBC_2.2.5 + 2160: 0000000000122fd0 54 FUNC WEAK DEFAULT 12 if_freenameindex@@GLIBC_2.2.5 + 2161: 00000000000407b0 10 FUNC WEAK DEFAULT 12 strtod_l@@GLIBC_2.3 + 2162: 000000000011ae70 149 FUNC GLOBAL DEFAULT 12 getnetent@@GLIBC_2.2.5 + 2163: 00000000000a81b0 664 FUNC WEAK DEFAULT 12 wcslen@@GLIBC_2.2.5 + 2164: 000000000013b5e0 100 FUNC WEAK DEFAULT 12 getutline_r@@GLIBC_2.2.5 + 2165: 00000000000f40b0 71 FUNC GLOBAL DEFAULT 12 posix_fallocate@@GLIBC_2.2.5 + 2166: 00000000000f02d0 33 FUNC GLOBAL DEFAULT 12 __pipe@@GLIBC_2.2.5 + 2167: 0000000000078460 255 FUNC GLOBAL DEFAULT 12 fseeko@@GLIBC_2.2.5 + 2168: 000000000012a000 170 FUNC GLOBAL DEFAULT 12 xdrrec_endofrecord@@GLIBC_2.2.5 + 2169: 0000000000104470 721 FUNC WEAK DEFAULT 12 lckpwdf@@GLIBC_2.2.5 + 2170: 0000000000102d40 74 FUNC WEAK DEFAULT 12 towctrans_l@@GLIBC_2.3 + 2171: 0000000000125330 36 FUNC GLOBAL DEFAULT 12 inet6_opt_set_val@@GLIBC_2.5 + 2172: 0000000000048600 22447 FUNC GLOBAL DEFAULT 12 vfprintf@@GLIBC_2.2.5 + 2173: 000000000008c840 16 FUNC GLOBAL DEFAULT 12 strcoll@@GLIBC_2.2.5 + 2174: 00000000000362b0 158 FUNC WEAK DEFAULT 12 ssignal@@GLIBC_2.2.5 + 2175: 000000000003a5f0 112 FUNC WEAK DEFAULT 12 random@@GLIBC_2.2.5 + 2176: 00000000000c8b20 82 FUNC GLOBAL DEFAULT 12 globfree@@GLIBC_2.2.5 + 2177: 00000000000feff0 33 FUNC GLOBAL DEFAULT 12 delete_module@@GLIBC_2.2.5 + 2178: 00000000003c4b60 520 OBJECT GLOBAL DEFAULT 29 _sys_siglist@@GLIBC_2.3.3 + 2179: 00000000003c4b60 512 OBJECT GLOBAL DEFAULT 29 _sys_siglist@GLIBC_2.2.5 + 2180: 00000000000974e0 30 FUNC GLOBAL DEFAULT 12 basename@@GLIBC_2.2.5 + 2181: 000000000010a500 139 FUNC WEAK DEFAULT 12 argp_state_help@@GLIBC_2.2.5 + 2182: 00000000000a9df0 16 FUNC GLOBAL DEFAULT 12 __wcstold_internal@@GLIBC_2.2.5 + 2183: 0000000000118a40 5 FUNC WEAK DEFAULT 12 ntohl@@GLIBC_2.2.5 + 2184: 00000000000f8cd0 134 FUNC GLOBAL DEFAULT 12 closelog@@GLIBC_2.2.5 + 2185: 00000000000e3810 27 FUNC GLOBAL DEFAULT 12 getopt_long_only@@GLIBC_2.2.5 + 2186: 00000000000c6c70 8 FUNC GLOBAL DEFAULT 12 getpgrp@@GLIBC_2.2.5 + 2187: 000000000002f500 9 FUNC GLOBAL DEFAULT 12 isascii@@GLIBC_2.2.5 + 2188: 00000000000fd210 164 FUNC WEAK DEFAULT 12 get_nprocs_conf@@GLIBC_2.2.5 + 2189: 00000000000a8520 219 FUNC GLOBAL DEFAULT 12 wcsncmp@@GLIBC_2.2.5 + 2190: 00000000000e1b10 39 FUNC WEAK DEFAULT 12 re_exec@@GLIBC_2.2.5 + 2191: 000000000012f1b0 32 FUNC GLOBAL DEFAULT 12 clnt_pcreateerror@@GLIBC_2.2.5 + 2192: 0000000000100a10 439 FUNC WEAK DEFAULT 12 monstartup@@GLIBC_2.2.5 + 2193: 0000000000116ec0 16 FUNC GLOBAL DEFAULT 12 __ptsname_r_chk@@GLIBC_2.4 + 2194: 00000000000eff80 273 FUNC WEAK DEFAULT 12 __fcntl@@GLIBC_2.2.5 + 2195: 0000000000118a50 7 FUNC WEAK DEFAULT 12 ntohs@@GLIBC_2.2.5 + 2196: 0000000000053500 138 FUNC WEAK DEFAULT 12 snprintf@@GLIBC_2.2.5 + 2197: 000000000007c9a0 94 FUNC GLOBAL DEFAULT 12 __overflow@@GLIBC_2.2.5 + 2198: 00000000000b3e30 379 FUNC GLOBAL DEFAULT 12 __isoc99_fwscanf@@GLIBC_2.7 + 2199: 00000000000f3ee0 30 FUNC GLOBAL DEFAULT 12 posix_fadvise64@@GLIBC_2.2.5 + 2200: 000000000012b200 53 FUNC GLOBAL DEFAULT 12 xdr_cryptkeyarg@@GLIBC_2.2.5 + 2201: 000000000003af80 16 FUNC GLOBAL DEFAULT 12 __strtoul_internal@@GLIBC_2.2.5 + 2202: 00000000000a8d10 9 FUNC WEAK DEFAULT 12 wmemmove@@GLIBC_2.2.5 + 2203: 00000000000c77e0 1775 FUNC WEAK DEFAULT 12 sysconf@@GLIBC_2.2.5 + 2204: 0000000000116700 449 FUNC GLOBAL DEFAULT 12 __gets_chk@@GLIBC_2.3.4 + 2205: 000000000008a9d0 122 FUNC GLOBAL DEFAULT 12 _obstack_free@@GLIBC_2.2.5 + 2206: 0000000000120b50 306 FUNC GLOBAL DEFAULT 12 setnetgrent@@GLIBC_2.2.5 + 2207: 00000000000fec90 43 FUNC GLOBAL DEFAULT 12 gnu_dev_makedev@@GLIBC_2.3.3 + 2208: 0000000000135020 188 FUNC GLOBAL DEFAULT 12 xdr_u_hyper@@GLIBC_2.2.5 + 2209: 00000000000ef5a0 85 FUNC GLOBAL DEFAULT 12 __xmknodat@@GLIBC_2.4 + 2210: 00000000000aa710 10 FUNC WEAK DEFAULT 12 wcstoull_l@@GLIBC_2.3 + 2211: 000000000006e3b0 757 FUNC GLOBAL DEFAULT 12 _IO_fdopen@@GLIBC_2.2.5 + 2212: 0000000000124950 226 FUNC GLOBAL DEFAULT 12 inet6_option_find@@GLIBC_2.3.3 + 2213: 000000000002f5c0 19 FUNC WEAK DEFAULT 12 isgraph_l@@GLIBC_2.3 + 2214: 000000000011ccc0 136 FUNC GLOBAL DEFAULT 12 getservent@@GLIBC_2.2.5 + 2215: 000000000012f800 640 FUNC GLOBAL DEFAULT 12 clnttcp_create@@GLIBC_2.2.5 + 2216: 0000000000117ef0 16 FUNC GLOBAL DEFAULT 12 __ttyname_r_chk@@GLIBC_2.4 + 2217: 000000000003a410 102 FUNC GLOBAL DEFAULT 12 wctomb@@GLIBC_2.2.5 + 2218: 00000000003ccdd8 8 OBJECT GLOBAL DEFAULT 34 locs@@GLIBC_2.2.5 + 2219: 00000000000797f0 148 FUNC GLOBAL DEFAULT 12 fputs_unlocked@@GLIBC_2.2.5 + 2220: 00000000003c7720 8 OBJECT WEAK DEFAULT 33 __memalign_hook@@GLIBC_2.2.5 + 2221: 0000000000036fb0 7 FUNC GLOBAL DEFAULT 12 siggetmask@@GLIBC_2.2.5 + 2222: 0000000000072650 49 FUNC GLOBAL DEFAULT 12 putwchar_unlocked@@GLIBC_2.2.5 + 2223: 0000000000100330 33 FUNC WEAK DEFAULT 12 semget@@GLIBC_2.2.5 + 2224: 00000000000c40e0 260 FUNC GLOBAL DEFAULT 12 putpwent@@GLIBC_2.2.5 + 2225: 000000000007ebc0 29 FUNC GLOBAL DEFAULT 12 _IO_str_init_readonly@@GLIBC_2.2.5 + 2226: 0000000000128540 162 FUNC GLOBAL DEFAULT 12 xdr_accepted_reply@@GLIBC_2.2.5 + 2227: 000000000003a9e0 328 FUNC WEAK DEFAULT 12 initstate_r@@GLIBC_2.2.5 + 2228: 0000000000071500 117 FUNC WEAK DEFAULT 12 __vsscanf@@GLIBC_2.2.5 + 2229: 00000000000a8b30 267 FUNC GLOBAL DEFAULT 12 wcsstr@@GLIBC_2.2.5 + 2230: 0000000000085b60 224 FUNC GLOBAL DEFAULT 12 free@@GLIBC_2.2.5 + 2231: 000000000007a070 8 FUNC GLOBAL DEFAULT 12 _IO_file_seek@@GLIBC_2.2.5 + 2232: 000000000008ac40 44 FUNC GLOBAL DEFAULT 12 __libc_dynarray_at_failure@@GLIBC_PRIVATE + 2233: 000000000002f3b0 25 FUNC GLOBAL DEFAULT 12 ispunct@@GLIBC_2.2.5 + 2234: 00000000003c9e10 4 OBJECT GLOBAL DEFAULT 34 __daylight@@GLIBC_2.2.5 + 2235: 0000000000115410 2 FUNC GLOBAL DEFAULT 12 __cyg_profile_func_exit@@GLIBC_2.2.5 + 2236: 00000000000a8730 772 FUNC GLOBAL DEFAULT 12 wcsrchr@@GLIBC_2.2.5 + 2237: 000000000010c300 38 FUNC GLOBAL DEFAULT 12 pthread_attr_getinheritsched@@GLIBC_2.2.5 + 2238: 0000000000116e50 16 FUNC GLOBAL DEFAULT 12 __readlinkat_chk@@GLIBC_2.5 + 2239: 0000000000114180 121 FUNC GLOBAL DEFAULT 12 __nss_hosts_lookup2@@GLIBC_PRIVATE + 2240: 00000000001312a0 223 FUNC GLOBAL DEFAULT 12 key_decryptsession@@GLIBC_2.2.5 + 2241: 00000000000fc1e0 224 FUNC GLOBAL DEFAULT 12 vwarn@@GLIBC_2.2.5 + 2242: 00000000000a8da0 39 FUNC WEAK DEFAULT 12 wcpcpy@@GLIBC_2.2.5 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libcairo.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libcairo.so.2.txt new file mode 100644 index 000000000000..27434ebf6f37 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libcairo.so.2.txt @@ -0,0 +1,860 @@ +Library: /lib64/libcairo.so.2 +Package: cairo-1.15.12-4.el7.x86_64 + + +Symbol table '.dynsym' contains 854 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_picture + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite_glyphs_32 + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictscreen_next + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Set_Var_Design_Coordinates + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_composite32 + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XQueryColors + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindVisualFormat + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_equal + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Set_Transform + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_free_picture + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternDestroy + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_lookup + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXMakeCurrent + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XUnlockDisplay + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFree + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glEnable + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_valid@PNG15_0 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Load_Sfnt_Table + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_error@PNG15_0 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_depth_visuals_iterator + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_insert + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND frexp@GLIBC_2.2.5 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_rectangles + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite_glyphs_8 + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.2.5 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (4) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_expand_gray_1_2_4_to_8@PNG15_0 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_connection_has_error + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Set_Char_Size + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_composite_glyphs + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND snprintf@GLIBC_2.2.5 (4) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_contains_point + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindStandardFormat + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod_l@GLIBC_2.3 (5) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND newlocale@GLIBC_2.3 (5) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternDuplicate + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Var_Design_Coordinates + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_bits + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glIsEnabled + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __longjmp_chk@GLIBC_2.11 (6) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateLinearGradient + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitExtension + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poll_for_reply + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ceil@GLIBC_2.2.5 (3) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.2.5 (4) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_remove + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Transform + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glBlendFuncSeparate + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_fill + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.2.5 (4) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_change_gc + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_fn@PNG15_0 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_maximum_request_length + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_get_mask_format + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tan@GLIBC_2.2.5 (3) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Decompose + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternDel + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_detach + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_MM_Var + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Load_Glyph + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (7) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_add_triangles + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_info_struct@PNG15_0 (2) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_format + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_create_pixmap + 67: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 68: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.2.5 (4) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDisable + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_stride + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.2.5 (4) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeColormap + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_free_glyphs + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Bitmap_Convert + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XExtendedMaxRequestSize + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __finite@GLIBC_2.2.5 (3) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateGlyphSet + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_radial_gradient + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glClear + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictvisual_next + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddDouble + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictforminfo_next + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreatePicture + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.2.5 (8) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (4) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (7) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glClearStencil + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddString + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_composite_glyphs_no_mask + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetClipMask + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glReadBuffer + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmCreatePixmap + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetPictureClipRectangles + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcFontMatch + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreePicture + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXChooseFBConfig + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglQueryContext + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflate + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGetError + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_intersect + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit_ + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_destroy_function + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_IHDR@PNG15_0 (2) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (4) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (4) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (4) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_extension_data + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_IHDR@PNG15_0 (2) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_free_gc + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_init_rects + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_destroy + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glStencilFunc + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderChangePicture + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcConfigGetCurrent + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_image_reply + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetFTFace + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_write_end@PNG15_0 (2) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_get_image + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_put_image + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Done_FreeType + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreeGlyphs + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_tRNS_to_alpha@PNG15_0 (2) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderComposite + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_glyph_set + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Vector_Transform + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglGetCurrentContext + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Bitmap_New + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (7) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateWindow + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_data + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_io_ptr@PNG15_0 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_copy_area + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateColormap + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_query_version_reply + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (8) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glClearColor + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_longjmp_fn@PNG15_0 (2) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_image_data + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFillRectangle + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_info@PNG15_0 (2) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_prefetch_extension_data + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_write_info@PNG15_0 (2) + 144: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcat_chk@GLIBC_2.3.4 (7) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglMakeCurrent + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFillRectangles + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fmod@GLIBC_2.2.5 (3) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glReadPixels + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_wait_for_reply + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglGetProcAddress + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_prefetch_maximum_request_length + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_setup_roots_iterator + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_contains_rectangle + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglQueryString + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQuerySubpixelOrder + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (4) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.2.5 (4) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_packing@PNG15_0 (2) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ldiv@GLIBC_2.2.5 (4) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_init + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (4) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCopyArea + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (4) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_set_picture_transform + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDrawBuffer + 168: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglGetCurrentSurface + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XDestroyWindow + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glActiveTexture + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ferror@GLIBC_2.2.5 (4) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XESetCloseDisplay + 174: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND xcb_shm_id + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateEnd + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetCurrentContext + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_free_glyph_set + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_filter + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_set_picture_filter + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Translate + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_repeat + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_conical_gradient + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_set_picture_clip_rectangles + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_copy + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_height + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictdepth_next + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXSwapBuffers + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glColorMask + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (5) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglSwapBuffers + 191: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (4) + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmGetImage + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFillRectangle + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_not_empty + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_setup + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_trapezoids + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateSolidFill + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glBlendFunc + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_palette_to_rgb@PNG15_0 (2) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetString + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetPictureFilter + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_write_image@PNG15_0 (2) + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglCreatePbufferSurface + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_create_pixmap_checked + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeTrapezoids + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreeGC + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeTriStrip + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_send_request + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (4) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glBindTexture + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_depth + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetVisualFromFBConfig + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_image@PNG15_0 (2) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderQueryVersion + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_error_ptr@PNG15_0 (2) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_X11_Font_Format + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmQueryVersion + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_GlyphSlot_Embolden + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Library_SetLcdFilter + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XLockDisplay + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.2.5 (9) + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_fill_rectangles + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_ref + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDepthMask + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pow@GLIBC_2.2.5 (3) + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCreateRadialGradient + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glStencilOp + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglDestroySurface + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime_r@GLIBC_2.2.5 (4) + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFreeGlyphSet + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (4) + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_First_Char + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_unref + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XScreenNumberOfScreen + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Bitmap_Done + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewind@GLIBC_2.2.5 (4) + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDeleteTextures + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Init_FreeType + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_flush + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (4) + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_thaw + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_rasterize_trapezoid + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glPixelStorei + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_component_alpha + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGetIntegerv + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tmpfile@GLIBC_2.2.5 (4) + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetCurrentDrawable + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property_value + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_detach_checked + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_n_rects + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_query_version + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (4) + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmQueryExtension + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite_glyphs_16 + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (4) + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_screens_iterator + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (4) + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreateGC + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_extents + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDrawElements + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_interlace_handling@PNG15_0 (2) + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_transform + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (4) + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_version_reply + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freelocale@GLIBC_2.3 (5) + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_add_glyphs + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetInteger + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_end@PNG15_0 (2) + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (8) + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFlush + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_change_picture + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (4) + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property_reply + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glTexImage2D + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XInitImage + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_screen_allowed_depths_iterator + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_filler@PNG15_0 (2) + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddBool + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSync + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.2.5 (8) + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sincos@GLIBC_2.2.5 (3) + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGet + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_read_struct@PNG15_0 (2) + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSendEvent + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderAddGlyphs + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XChangeGC + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetDefault + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (10) + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderFindFormat + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XPutImage + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_image + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (4) + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glDrawArrays + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XNextRequest + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_format_supported_destination + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_gray_to_rgb@PNG15_0 (2) + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_reply + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_set_clip_region32 + 300: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmAttach + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND acos@GLIBC_2.2.5 (3) + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_radial_gradient + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.2.5 (4) + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (4) + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glScissor + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_blt + 307: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_freeze + 308: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeText32 + 309: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_solid_fill + 310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_update_info@PNG15_0 (2) + 311: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_attach_checked + 312: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND xcb_render_id + 313: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_New_Face + 314: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _XReadEvents + 315: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_solid_fill + 316: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_create_linear_gradient + 317: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_packswap@PNG15_0 (2) + 318: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glTexSubImage2D + 319: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_create_gc + 320: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXQueryContext + 321: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_put_image + 322: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_subtract + 323: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (4) + 324: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (4) + 325: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_free_pixmap + 326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XGetImage + 327: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcNameConstant + 328: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_discard_reply + 329: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAllocColor + 330: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmget@GLIBC_2.2.5 (4) + 331: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.2.5 (4) + 332: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGetString + 333: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (4) + 334: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.2.5 (9) + 335: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeText16 + 336: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (4) + 337: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_formats_iterator + 338: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_GlyphSlot_Oblique + 339: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_write_user_transform_fn@PNG15_0 (2) + 340: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_pict_formats_subpixels + 341: 0000000000000000 0 FUNC GLOBAL DEFAULT UND difftime@GLIBC_2.2.5 (4) + 342: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.2.5 (4) + 343: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_strip_16@PNG15_0 (2) + 344: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderCompositeText8 + 345: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.2.5 (9) + 346: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcInitBringUptoDate + 347: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_attach + 348: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XAddExtension + 349: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_request_check + 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Outline_Get_CBox + 351: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_generate_id + 352: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetClipRectangles + 353: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_width + 354: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_input_focus + 355: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (4) + 356: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcConfigSubstitute + 357: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_screen_next + 358: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_fini + 359: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictdepth_visuals_iterator + 360: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_union + 361: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmPutImage + 362: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XSetErrorHandler + 363: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XFreePixmap + 364: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (7) + 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXGetProcAddress + 366: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.2.5 (4) + 367: 0000000000000000 0 FUNC GLOBAL DEFAULT UND modf@GLIBC_2.2.5 (3) + 368: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_user_transform_fn@PNG15_0 (2) + 369: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcDefaultSubstitute + 370: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_destroy_read_struct@PNG15_0 (2) + 371: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Glyph_Name + 372: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glViewport + 373: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_get_property_value_length + 374: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_pictscreen_depths_iterator + 375: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_composite + 376: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_shm_get_image_reply + 377: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XMaxRequestSize + 378: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (4) + 379: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_destroy_write_struct@PNG15_0 (2) + 380: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (8) + 381: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (4) + 382: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_visualtype_next + 383: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Done_Face + 384: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternAddInteger + 385: 0000000000000000 0 FUNC GLOBAL DEFAULT UND floor@GLIBC_2.2.5 (3) + 386: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rand@GLIBC_2.2.5 (4) + 387: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.2.5 (4) + 388: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.2.5 (8) + 389: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XCreatePixmap + 390: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XRenderSetPictureTransform + 391: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_transform_point_3d + 392: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternCreate + 393: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_bKGD@PNG15_0 (2) + 394: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcFreeTypeCharIndex + 395: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_create_linear_gradient + 396: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (8) + 397: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_translate + 398: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Render_Glyph + 399: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Next_Char + 400: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_write_struct@PNG15_0 (2) + 401: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ctime_r@GLIBC_2.2.5 (4) + 402: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.2.5 (4) + 403: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.2.5 (11) + 404: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glTexParameteri + 405: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrt@GLIBC_2.2.5 (3) + 406: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (8) + 407: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_write_fn@PNG15_0 (2) + 408: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XShmDetach + 409: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_region32_init_rect + 410: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (12) + 411: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_glyph_cache_create + 412: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XEventsQueued + 413: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pixman_image_get_component_alpha + 414: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_render_query_version + 415: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncat_chk@GLIBC_2.3.4 (7) + 416: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sin@GLIBC_2.2.5 (3) + 417: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FT_Get_Var_Blend_Coordinates + 418: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_poly_fill_rectangle + 419: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glGenTextures + 420: 0000000000000000 0 FUNC GLOBAL DEFAULT UND hypot@GLIBC_2.2.5 (3) + 421: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND xcb_big_requests_id + 422: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.2.5 (4) + 423: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.2.5 (4) + 424: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (4) + 425: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glXQueryExtensionsString + 426: 0000000000000000 0 FUNC GLOBAL DEFAULT UND FcPatternGetBool + 427: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eglChooseConfig + 428: 0000000000000000 0 FUNC GLOBAL DEFAULT UND xcb_depth_next + 429: 000000000002e570 64 FUNC GLOBAL DEFAULT 12 cairo_device_finish + 430: 0000000000029c00 58 FUNC GLOBAL DEFAULT 12 cairo_rectangle_list_destroy + 431: 00000000000a7d10 155 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_create_for_bitmap + 432: 0000000000066b90 392 FUNC GLOBAL DEFAULT 12 cairo_recording_surface_create + 433: 0000000000056730 279 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_for_surface + 434: 000000000006d0c0 795 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_glyph_extents + 435: 0000000000030130 27 FUNC GLOBAL DEFAULT 12 cairo_font_options_get_subpixel_order + 436: 000000000007bd20 33 FUNC GLOBAL DEFAULT 12 cairo_surface_get_device_scale + 437: 0000000000089370 38 FUNC GLOBAL DEFAULT 12 cairo_set_line_join + 438: 00000000000eedf0 81 FUNC GLOBAL DEFAULT 12 cairo_svg_surface_create + 439: 000000000007d180 169 FUNC GLOBAL DEFAULT 12 cairo_surface_create_similar_image + 440: 000000000008a6e0 319 FUNC GLOBAL DEFAULT 12 cairo_text_extents + 441: 000000000002e530 60 FUNC GLOBAL DEFAULT 12 cairo_device_flush + 442: 00000000000bdc70 26 FUNC GLOBAL DEFAULT 12 cairo_gl_device_set_thread_aware + 443: 0000000000089e10 38 FUNC GLOBAL DEFAULT 12 cairo_clip_preserve + 444: 000000000007bbe0 313 FUNC GLOBAL DEFAULT 12 cairo_surface_set_device_scale + 445: 00000000000894e0 38 FUNC GLOBAL DEFAULT 12 cairo_rotate + 446: 00000000000a80c0 45 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_display + 447: 00000000000896b0 38 FUNC GLOBAL DEFAULT 12 cairo_line_to + 448: 000000000007adf0 19 FUNC GLOBAL DEFAULT 12 cairo_surface_get_device + 449: 0000000000063cb0 31 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_set_acquire + 450: 000000000005be70 58 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_surface + 451: 00000000000afc50 298 FUNC GLOBAL DEFAULT 12 cairo_xcb_surface_set_drawable + 452: 0000000000057650 323 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_set_corner_color_rgba + 453: 0000000000069ea0 42 FUNC GLOBAL DEFAULT 12 cairo_region_is_empty + 454: 000000000008a5d0 29 FUNC GLOBAL DEFAULT 12 cairo_get_tolerance + 455: 0000000000089340 35 FUNC GLOBAL DEFAULT 12 cairo_set_line_cap + 456: 000000000002e5b0 214 FUNC GLOBAL DEFAULT 12 cairo_device_destroy + 457: 0000000000089de0 38 FUNC GLOBAL DEFAULT 12 cairo_clip + 458: 0000000000076c30 84 FUNC GLOBAL DEFAULT 12 cairo_device_observer_print + 459: 00000000000a8160 45 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_visual + 460: 0000000000089170 35 FUNC GLOBAL DEFAULT 12 cairo_set_source_rgba + 461: 000000000007b3f0 137 FUNC GLOBAL DEFAULT 12 cairo_surface_supports_mime_type + 462: 0000000000063d20 17 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_get_snapshot + 463: 0000000000069c00 78 FUNC GLOBAL DEFAULT 12 cairo_region_union + 464: 000000000002e710 20 FUNC GLOBAL DEFAULT 12 cairo_device_set_user_data + 465: 0000000000056fd0 461 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_curve_to + 466: 000000000002ffd0 137 FUNC GLOBAL DEFAULT 12 cairo_font_options_equal + 467: 0000000000088900 83 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_set_text_to_glyphs_func + 468: 0000000000030060 97 FUNC GLOBAL DEFAULT 12 cairo_font_options_hash + 469: 00000000000da1e0 246 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_dsc_comment + 470: 000000000006dd10 219 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_text_extents + 471: 00000000000c8400 45 FUNC GLOBAL DEFAULT 12 cairo_glx_device_get_display + 472: 0000000000057d80 71 FUNC GLOBAL DEFAULT 12 cairo_pattern_set_extend + 473: 000000000008a820 385 FUNC GLOBAL DEFAULT 12 cairo_text_path + 474: 0000000000088ac0 6 FUNC GLOBAL DEFAULT 12 cairo_version + 475: 00000000000558b0 50 FUNC GLOBAL DEFAULT 12 cairo_path_destroy + 476: 000000000007b140 161 FUNC GLOBAL DEFAULT 12 cairo_surface_get_mime_data + 477: 000000000002e690 78 FUNC GLOBAL DEFAULT 12 cairo_device_acquire + 478: 0000000000056d10 266 FUNC GLOBAL DEFAULT 12 cairo_pattern_destroy + 479: 00000000000ce4f0 193 FUNC GLOBAL DEFAULT 12 cairo_script_surface_create_for_target + 480: 00000000000ef990 431 FUNC GLOBAL DEFAULT 12 cairo_tee_surface_remove + 481: 00000000000895e0 21 FUNC GLOBAL DEFAULT 12 cairo_device_to_user + 482: 000000000002fb70 19 FUNC GLOBAL DEFAULT 12 cairo_font_face_get_type + 483: 000000000002fbc0 9 FUNC GLOBAL DEFAULT 12 cairo_font_face_get_user_data + 484: 00000000000a8120 53 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_screen + 485: 000000000002fbb0 4 FUNC GLOBAL DEFAULT 12 cairo_font_face_status + 486: 000000000008a240 27 FUNC GLOBAL DEFAULT 12 cairo_get_scaled_font + 487: 0000000000057dd0 4 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_extend + 488: 000000000002fe70 50 FUNC GLOBAL DEFAULT 12 cairo_font_options_destroy + 489: 000000000008a0f0 38 FUNC GLOBAL DEFAULT 12 cairo_set_font_matrix + 490: 00000000000e6900 121 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_set_page_label + 491: 00000000000efb40 142 FUNC GLOBAL DEFAULT 12 cairo_tee_surface_index + 492: 0000000000336398 0 NOTYPE GLOBAL DEFAULT 25 _end + 493: 00000000000afa20 404 FUNC GLOBAL DEFAULT 12 cairo_xcb_surface_create_with_xrender_format + 494: 00000000000899e0 38 FUNC GLOBAL DEFAULT 12 cairo_paint + 495: 00000000000eeee0 22 FUNC GLOBAL DEFAULT 12 cairo_svg_version_to_string + 496: 000000000007be80 36 FUNC GLOBAL DEFAULT 12 cairo_surface_get_device_offset + 497: 0000000000088f80 74 FUNC GLOBAL DEFAULT 12 cairo_destroy + 498: 0000000000076b30 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_finish_callback + 499: 00000000000da030 82 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_get_eps + 500: 0000000000076bc0 101 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_elapsed + 501: 00000000000888a0 83 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_set_render_glyph_func + 502: 00000000000c7eb0 52 FUNC GLOBAL DEFAULT 12 cairo_egl_device_get_display + 503: 00000000000896e0 38 FUNC GLOBAL DEFAULT 12 cairo_curve_to + 504: 0000000000069780 81 FUNC GLOBAL DEFAULT 12 cairo_region_create_rectangle + 505: 0000000000089650 38 FUNC GLOBAL DEFAULT 12 cairo_new_sub_path + 506: 00000000000892a0 35 FUNC GLOBAL DEFAULT 12 cairo_set_antialias + 507: 000000000006c590 9 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_user_data + 508: 00000000000ba050 69 FUNC GLOBAL DEFAULT 12 cairo_image_surface_create_from_png_stream + 509: 0000000000089a40 59 FUNC GLOBAL DEFAULT 12 cairo_mask + 510: 000000000002fa60 26 FUNC GLOBAL DEFAULT 12 cairo_font_face_reference + 511: 00000000000ce5c0 242 FUNC GLOBAL DEFAULT 12 cairo_script_from_recording_surface + 512: 0000000000089d20 88 FUNC GLOBAL DEFAULT 12 cairo_stroke_extents + 513: 000000000006c570 27 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_reference_count + 514: 000000000006e6e0 88 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_scale_matrix + 515: 0000000000069530 53 FUNC GLOBAL DEFAULT 12 cairo_region_create + 516: 00000000000e6980 90 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_set_thumbnail_size + 517: 0000000000069830 85 FUNC GLOBAL DEFAULT 12 cairo_region_destroy + 518: 000000000005bfc0 58 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_color_stop_count + 519: 00000000000422a0 500 FUNC GLOBAL DEFAULT 12 cairo_matrix_invert + 520: 00000000000889c0 52 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_get_init_func + 521: 0000000000089cb0 105 FUNC GLOBAL DEFAULT 12 cairo_in_fill + 522: 00000000000893d0 82 FUNC GLOBAL DEFAULT 12 cairo_get_dash_count + 523: 00000000000892d0 35 FUNC GLOBAL DEFAULT 12 cairo_set_fill_rule + 524: 000000000005c120 80 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_get_patch_count + 525: 0000000000089000 19 FUNC GLOBAL DEFAULT 12 cairo_get_reference_count + 526: 0000000000030250 47 FUNC GLOBAL DEFAULT 12 cairo_font_options_set_variations + 527: 00000000000c5af0 235 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_swapbuffers + 528: 00000000000893a0 35 FUNC GLOBAL DEFAULT 12 cairo_set_dash + 529: 0000000000056e50 20 FUNC GLOBAL DEFAULT 12 cairo_pattern_set_user_data + 530: 0000000000089be0 38 FUNC GLOBAL DEFAULT 12 cairo_copy_page + 531: 00000000000a81c0 47 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_width + 532: 0000000000081b40 734 FUNC GLOBAL DEFAULT 12 cairo_toy_font_face_create + 533: 0000000000076a70 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_fill_callback + 534: 00000000000577a0 13 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_set_corner_color_rgb + 535: 00000000000c8460 166 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_create_for_window + 536: 00000000000ef7d0 206 FUNC GLOBAL DEFAULT 12 cairo_tee_surface_add + 537: 00000000000898a0 38 FUNC GLOBAL DEFAULT 12 cairo_rel_move_to + 538: 000000000003e420 81 FUNC GLOBAL DEFAULT 12 cairo_format_stride_for_width + 539: 0000000000089080 35 FUNC GLOBAL DEFAULT 12 cairo_push_group_with_content + 540: 000000000007cad0 77 FUNC GLOBAL DEFAULT 12 cairo_surface_show_page + 541: 000000000005c080 154 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_radial_circles + 542: 00000000000e67d0 169 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_add_outline + 543: 00000000000d32d0 20 FUNC GLOBAL DEFAULT 12 cairo_ft_font_face_get_synthesize + 544: 0000000000089140 43 FUNC GLOBAL DEFAULT 12 cairo_set_source_rgb + 545: 000000000005beb0 258 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_color_stop_rgba + 546: 000000000007ca60 100 FUNC GLOBAL DEFAULT 12 cairo_surface_copy_page + 547: 00000000000b9f80 195 FUNC GLOBAL DEFAULT 12 cairo_image_surface_create_from_png + 548: 000000000007ba10 46 FUNC GLOBAL DEFAULT 12 cairo_surface_flush + 549: 0000000000056cf0 4 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_type + 550: 000000000007c410 139 FUNC GLOBAL DEFAULT 12 cairo_surface_unmap_image + 551: 000000000002fb90 27 FUNC GLOBAL DEFAULT 12 cairo_font_face_get_reference_count + 552: 000000000008a070 38 FUNC GLOBAL DEFAULT 12 cairo_set_font_face + 553: 000000000007b6f0 365 FUNC GLOBAL DEFAULT 12 cairo_surface_destroy + 554: 00000000000d32b0 22 FUNC GLOBAL DEFAULT 12 cairo_ft_font_face_unset_synthesize + 555: 000000000003e190 51 FUNC GLOBAL DEFAULT 12 cairo_image_surface_get_height + 556: 000000000003e0d0 52 FUNC GLOBAL DEFAULT 12 cairo_image_surface_get_data + 557: 0000000000076a10 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_paint_callback + 558: 00000000000a80f0 48 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_drawable + 559: 00000000000d3150 167 FUNC GLOBAL DEFAULT 12 cairo_ft_font_face_create_for_pattern + 560: 000000000009d620 76 FUNC GLOBAL DEFAULT 12 cairo_xlib_device_debug_cap_xrender_version + 561: 0000000000057280 834 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_end_patch + 562: 00000000000da090 322 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_set_size + 563: 000000000008ad40 27 FUNC GLOBAL DEFAULT 12 cairo_copy_path_flat + 564: 0000000000069a10 4 FUNC GLOBAL DEFAULT 12 cairo_region_status + 565: 0000000000063c90 17 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_get_callback_data + 566: 000000000003e150 51 FUNC GLOBAL DEFAULT 12 cairo_image_surface_get_width + 567: 000000000002e6e0 19 FUNC GLOBAL DEFAULT 12 cairo_device_get_reference_count + 568: 0000000000056f70 83 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_move_to + 569: 000000000002fed0 243 FUNC GLOBAL DEFAULT 12 cairo_font_options_merge + 570: 0000000000056e20 19 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_reference_count + 571: 0000000000030230 27 FUNC GLOBAL DEFAULT 12 cairo_font_options_get_hint_metrics + 572: 0000000000334988 0 NOTYPE GLOBAL DEFAULT 24 _edata + 573: 0000000000089a10 38 FUNC GLOBAL DEFAULT 12 cairo_paint_with_alpha + 574: 0000000000076da0 70 FUNC GLOBAL DEFAULT 12 cairo_device_observer_fill_elapsed + 575: 0000000000089110 38 FUNC GLOBAL DEFAULT 12 cairo_set_operator + 576: 000000000002e3d0 58 FUNC GLOBAL DEFAULT 12 cairo_device_reference + 577: 00000000000d9f20 97 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_restrict_to_level + 578: 0000000000041e40 52 FUNC GLOBAL DEFAULT 12 cairo_matrix_transform_distance + 579: 0000000000076d50 70 FUNC GLOBAL DEFAULT 12 cairo_device_observer_mask_elapsed + 580: 0000000000089430 26 FUNC GLOBAL DEFAULT 12 cairo_get_dash + 581: 00000000000898d0 38 FUNC GLOBAL DEFAULT 12 cairo_rel_line_to + 582: 0000000000088a80 52 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_get_unicode_to_glyph_func + 583: 0000000000089ed0 105 FUNC GLOBAL DEFAULT 12 cairo_in_clip + 584: 00000000000abaf0 66 FUNC GLOBAL DEFAULT 12 cairo_xcb_device_debug_cap_xshm_version + 585: 0000000000089c10 38 FUNC GLOBAL DEFAULT 12 cairo_show_page + 586: 0000000000089620 38 FUNC GLOBAL DEFAULT 12 cairo_new_path + 587: 000000000006e740 87 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_font_options + 588: 000000000007bd50 300 FUNC GLOBAL DEFAULT 12 cairo_surface_set_device_offset + 589: 00000000000577b0 1016 FUNC GLOBAL DEFAULT 12 cairo_pattern_add_color_stop_rgba + 590: 0000000000089a80 156 FUNC GLOBAL DEFAULT 12 cairo_mask_surface + 591: 000000000009d670 42 FUNC GLOBAL DEFAULT 12 cairo_xlib_device_debug_set_precision + 592: 00000000000675e0 105 FUNC GLOBAL DEFAULT 12 cairo_recording_surface_get_extents + 593: 0000000000089c40 105 FUNC GLOBAL DEFAULT 12 cairo_in_stroke + 594: 0000000000076df0 70 FUNC GLOBAL DEFAULT 12 cairo_device_observer_stroke_elapsed + 595: 000000000006bef0 1650 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_create + 596: 000000000005c2e0 288 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_get_corner_color_rgba + 597: 000000000007beb0 178 FUNC GLOBAL DEFAULT 12 cairo_surface_set_fallback_resolution + 598: 00000000000c58e0 324 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_create_for_texture + 599: 0000000000089540 38 FUNC GLOBAL DEFAULT 12 cairo_set_matrix + 600: 0000000000088e90 103 FUNC GLOBAL DEFAULT 12 cairo_create + 601: 000000000008a9d0 29 FUNC GLOBAL DEFAULT 12 cairo_get_line_width + 602: 000000000006afe0 27 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_type + 603: 0000000000056850 392 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_linear + 604: 0000000000076a40 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_mask_callback + 605: 0000000000089020 35 FUNC GLOBAL DEFAULT 12 cairo_save + 606: 000000000007cb90 118 FUNC GLOBAL DEFAULT 12 cairo_surface_mark_dirty + 607: 0000000000056cb0 58 FUNC GLOBAL DEFAULT 12 cairo_pattern_reference + 608: 0000000000089b20 38 FUNC GLOBAL DEFAULT 12 cairo_stroke + 609: 00000000000301d0 22 FUNC GLOBAL DEFAULT 12 cairo_font_options_set_hint_style + 610: 00000000000ce460 142 FUNC GLOBAL DEFAULT 12 cairo_script_surface_create + 611: 000000000003e1d0 51 FUNC GLOBAL DEFAULT 12 cairo_image_surface_get_stride + 612: 00000000000da360 125 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_dsc_begin_page_setup + 613: 0000000000041b90 191 FUNC GLOBAL DEFAULT 12 cairo_matrix_multiply + 614: 0000000000056e70 248 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_begin_patch + 615: 00000000000571a0 218 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_line_to + 616: 000000000002e700 9 FUNC GLOBAL DEFAULT 12 cairo_device_get_user_data + 617: 00000000000453d0 35 FUNC GLOBAL DEFAULT 12 cairo_glyph_allocate + 618: 00000000000300d0 21 FUNC GLOBAL DEFAULT 12 cairo_font_options_set_antialias + 619: 00000000000e66e0 28 FUNC GLOBAL DEFAULT 12 cairo_pdf_get_versions + 620: 000000000002fda0 99 FUNC GLOBAL DEFAULT 12 cairo_font_options_create + 621: 000000000008a120 28 FUNC GLOBAL DEFAULT 12 cairo_get_font_matrix + 622: 0000000000089900 38 FUNC GLOBAL DEFAULT 12 cairo_rel_curve_to + 623: 0000000000056720 13 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_rgb + 624: 00000000000a8190 47 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_depth + 625: 0000000000063cd0 47 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_get_acquire + 626: 0000000000076aa0 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_stroke_callback + 627: 0000000000030210 22 FUNC GLOBAL DEFAULT 12 cairo_font_options_set_hint_metrics + 628: 0000000000056bd0 222 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_mesh + 629: 0000000000076b00 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_flush_callback + 630: 0000000000056d00 4 FUNC GLOBAL DEFAULT 12 cairo_pattern_status + 631: 0000000000089510 38 FUNC GLOBAL DEFAULT 12 cairo_transform + 632: 000000000008a560 69 FUNC GLOBAL DEFAULT 12 cairo_glyph_path + 633: 000000000006b000 4 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_status + 634: 000000000008adc0 4 FUNC GLOBAL DEFAULT 12 cairo_status + 635: 0000000000078690 572 FUNC GLOBAL DEFAULT 12 cairo_surface_create_for_rectangle + 636: 00000000000e6670 109 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_restrict_to_version + 637: 0000000000088a00 52 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_get_render_glyph_func + 638: 0000000000076e40 70 FUNC GLOBAL DEFAULT 12 cairo_device_observer_glyphs_elapsed + 639: 0000000000063c70 24 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_set_callback_data + 640: 0000000000076c90 98 FUNC GLOBAL DEFAULT 12 cairo_device_observer_elapsed + 641: 000000000008aa10 23 FUNC GLOBAL DEFAULT 12 cairo_get_line_join + 642: 0000000000069b10 78 FUNC GLOBAL DEFAULT 12 cairo_region_intersect + 643: 0000000000069570 383 FUNC GLOBAL DEFAULT 12 cairo_region_create_rectangles + 644: 00000000000569e0 484 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_radial + 645: 0000000000089e70 89 FUNC GLOBAL DEFAULT 12 cairo_clip_extents + 646: 000000000003e070 81 FUNC GLOBAL DEFAULT 12 cairo_image_surface_create + 647: 000000000008a9f0 23 FUNC GLOBAL DEFAULT 12 cairo_get_line_cap + 648: 00000000000d9fb0 22 FUNC GLOBAL DEFAULT 12 cairo_ps_level_to_string + 649: 000000000007b100 50 FUNC GLOBAL DEFAULT 12 cairo_surface_set_user_data + 650: 0000000000089450 38 FUNC GLOBAL DEFAULT 12 cairo_set_miter_limit + 651: 0000000000063b90 212 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_raster_source + 652: 00000000000c7e00 166 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_create_for_egl + 653: 0000000000089bb0 38 FUNC GLOBAL DEFAULT 12 cairo_fill_preserve + 654: 0000000000088f30 58 FUNC GLOBAL DEFAULT 12 cairo_reference + 655: 00000000000e6720 166 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_set_size + 656: 000000000002fe10 76 FUNC GLOBAL DEFAULT 12 cairo_font_options_copy + 657: 00000000000a7ea0 180 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_set_size + 658: 000000000002feb0 28 FUNC GLOBAL DEFAULT 12 cairo_font_options_status + 659: 000000000006c5c0 104 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_extents + 660: 000000000003e110 59 FUNC GLOBAL DEFAULT 12 cairo_image_surface_get_format + 661: 000000000007cc30 64 FUNC GLOBAL DEFAULT 12 cairo_surface_has_show_text_glyphs + 662: 0000000000041e80 78 FUNC GLOBAL DEFAULT 12 cairo_matrix_transform_point + 663: 0000000000045400 5 FUNC GLOBAL DEFAULT 12 cairo_glyph_free + 664: 000000000008a190 82 FUNC GLOBAL DEFAULT 12 cairo_get_font_options + 665: 00000000000eff98 0 FUNC GLOBAL DEFAULT 13 _fini + 666: 0000000000041b30 83 FUNC GLOBAL DEFAULT 12 cairo_matrix_init_rotate + 667: 000000000008aa50 28 FUNC GLOBAL DEFAULT 12 cairo_get_matrix + 668: 000000000007b040 64 FUNC GLOBAL DEFAULT 12 cairo_surface_reference + 669: 0000000000089fc0 88 FUNC GLOBAL DEFAULT 12 cairo_select_font_face + 670: 000000000006e690 72 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_ctm + 671: 000000000008a9b0 23 FUNC GLOBAL DEFAULT 12 cairo_get_fill_rule + 672: 00000000000c5ab0 23 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_get_width + 673: 0000000000056e40 9 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_user_data + 674: 000000000006e640 72 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_font_matrix + 675: 0000000000089480 38 FUNC GLOBAL DEFAULT 12 cairo_translate + 676: 0000000000088a40 52 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_get_text_to_glyphs_func + 677: 0000000000081ec0 52 FUNC GLOBAL DEFAULT 12 cairo_toy_font_face_get_weight + 678: 000000000002e420 30 FUNC GLOBAL DEFAULT 12 cairo_device_get_type + 679: 00000000000891a0 49 FUNC GLOBAL DEFAULT 12 cairo_set_source_surface + 680: 00000000000c8430 45 FUNC GLOBAL DEFAULT 12 cairo_glx_device_get_context + 681: 00000000000699b0 86 FUNC GLOBAL DEFAULT 12 cairo_region_get_extents + 682: 00000000000eee50 101 FUNC GLOBAL DEFAULT 12 cairo_svg_surface_restrict_to_version + 683: 0000000000041ad0 42 FUNC GLOBAL DEFAULT 12 cairo_matrix_init_translate + 684: 00000000000ce3e0 87 FUNC GLOBAL DEFAULT 12 cairo_script_write_comment + 685: 00000000000130f8 0 FUNC GLOBAL DEFAULT 9 _init + 686: 00000000000d33d0 80 FUNC GLOBAL DEFAULT 12 cairo_ft_scaled_font_unlock_face + 687: 00000000000c5730 426 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_create + 688: 0000000000089220 42 FUNC GLOBAL DEFAULT 12 cairo_pop_group_to_source + 689: 0000000000045410 27 FUNC GLOBAL DEFAULT 12 cairo_text_cluster_allocate + 690: 0000000000041c50 106 FUNC GLOBAL DEFAULT 12 cairo_matrix_translate + 691: 00000000000890b0 7 FUNC GLOBAL DEFAULT 12 cairo_push_group + 692: 00000000000887d0 102 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_create + 693: 000000000008ad60 96 FUNC GLOBAL DEFAULT 12 cairo_append_path + 694: 0000000000089e40 38 FUNC GLOBAL DEFAULT 12 cairo_reset_clip + 695: 0000000000076ad0 48 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_add_glyphs_callback + 696: 0000000000089d80 88 FUNC GLOBAL DEFAULT 12 cairo_fill_extents + 697: 00000000000d9f90 28 FUNC GLOBAL DEFAULT 12 cairo_ps_get_levels + 698: 00000000000abbf0 42 FUNC GLOBAL DEFAULT 12 cairo_xcb_device_debug_set_precision + 699: 0000000000030280 5 FUNC GLOBAL DEFAULT 12 cairo_font_options_get_variations + 700: 0000000000063d00 24 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_set_snapshot + 701: 000000000007b080 27 FUNC GLOBAL DEFAULT 12 cairo_surface_get_reference_count + 702: 000000000006bb10 64 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_reference + 703: 00000000000eef60 99 FUNC GLOBAL DEFAULT 12 cairo_svg_surface_get_document_unit + 704: 00000000000c7b70 644 FUNC GLOBAL DEFAULT 12 cairo_egl_device_create + 705: 000000000005c000 114 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_linear_points + 706: 00000000000895a0 21 FUNC GLOBAL DEFAULT 12 cairo_user_to_device + 707: 00000000000894b0 38 FUNC GLOBAL DEFAULT 12 cairo_scale + 708: 0000000000088fe0 20 FUNC GLOBAL DEFAULT 12 cairo_set_user_data + 709: 0000000000045430 5 FUNC GLOBAL DEFAULT 12 cairo_text_cluster_free + 710: 000000000008aa70 24 FUNC GLOBAL DEFAULT 12 cairo_get_target + 711: 000000000007b2a0 327 FUNC GLOBAL DEFAULT 12 cairo_surface_set_mime_data + 712: 0000000000076920 225 FUNC GLOBAL DEFAULT 12 cairo_surface_create_observer + 713: 000000000008a0c0 38 FUNC GLOBAL DEFAULT 12 cairo_set_font_size + 714: 0000000000057bb0 13 FUNC GLOBAL DEFAULT 12 cairo_pattern_add_color_stop_rgb + 715: 0000000000069fc0 70 FUNC GLOBAL DEFAULT 12 cairo_region_equal + 716: 000000000002fbd0 28 FUNC GLOBAL DEFAULT 12 cairo_font_face_set_user_data + 717: 000000000008a5f0 23 FUNC GLOBAL DEFAULT 12 cairo_get_antialias + 718: 0000000000069910 25 FUNC GLOBAL DEFAULT 12 cairo_region_num_rectangles + 719: 00000000000d32f0 215 FUNC GLOBAL DEFAULT 12 cairo_ft_scaled_font_lock_face + 720: 00000000000c7ef0 52 FUNC GLOBAL DEFAULT 12 cairo_egl_device_get_context + 721: 0000000000041b00 34 FUNC GLOBAL DEFAULT 12 cairo_matrix_init_scale + 722: 00000000000a7bb0 341 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_create + 723: 00000000000d3200 141 FUNC GLOBAL DEFAULT 12 cairo_ft_font_face_create_for_ft_face + 724: 000000000008a630 165 FUNC GLOBAL DEFAULT 12 cairo_get_current_point + 725: 000000000008aa90 619 FUNC GLOBAL DEFAULT 12 cairo_show_text + 726: 0000000000088960 83 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_set_unicode_to_glyph_func + 727: 0000000000069930 113 FUNC GLOBAL DEFAULT 12 cairo_region_get_rectangle + 728: 0000000000076d00 67 FUNC GLOBAL DEFAULT 12 cairo_device_observer_paint_elapsed + 729: 0000000000089710 193 FUNC GLOBAL DEFAULT 12 cairo_arc + 730: 00000000000897e0 177 FUNC GLOBAL DEFAULT 12 cairo_arc_negative + 731: 000000000007ba40 401 FUNC GLOBAL DEFAULT 12 cairo_surface_mark_dirty_rectangle + 732: 000000000008a140 71 FUNC GLOBAL DEFAULT 12 cairo_set_font_options + 733: 0000000000030110 22 FUNC GLOBAL DEFAULT 12 cairo_font_options_set_subpixel_order + 734: 000000000005bd90 213 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_rgba + 735: 00000000000d9e60 81 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_create + 736: 00000000000890c0 68 FUNC GLOBAL DEFAULT 12 cairo_pop_group + 737: 0000000000057d20 71 FUNC GLOBAL DEFAULT 12 cairo_pattern_set_filter + 738: 00000000000a7db0 180 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_create_with_xrender_format + 739: 00000000000c80e0 788 FUNC GLOBAL DEFAULT 12 cairo_glx_device_create + 740: 0000000000334988 0 NOTYPE GLOBAL DEFAULT 25 __bss_start + 741: 000000000006c5a0 28 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_set_user_data + 742: 00000000000e6610 81 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_create + 743: 0000000000089600 21 FUNC GLOBAL DEFAULT 12 cairo_device_to_user_distance + 744: 00000000000d9ec0 89 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_create_for_stream + 745: 0000000000041a60 30 FUNC GLOBAL DEFAULT 12 cairo_matrix_init + 746: 000000000009d6a0 72 FUNC GLOBAL DEFAULT 12 cairo_xlib_device_debug_get_precision + 747: 0000000000089270 38 FUNC GLOBAL DEFAULT 12 cairo_set_tolerance + 748: 00000000000abb40 167 FUNC GLOBAL DEFAULT 12 cairo_xcb_device_debug_cap_xrender_version + 749: 000000000006bb50 504 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_destroy + 750: 00000000000ce380 40 FUNC GLOBAL DEFAULT 12 cairo_script_create + 751: 0000000000069f70 69 FUNC GLOBAL DEFAULT 12 cairo_region_contains_point + 752: 00000000000ce3b0 48 FUNC GLOBAL DEFAULT 12 cairo_script_create_for_stream + 753: 00000000000891e0 56 FUNC GLOBAL DEFAULT 12 cairo_set_source + 754: 00000000000b9e30 222 FUNC GLOBAL DEFAULT 12 cairo_surface_write_to_png + 755: 0000000000089f60 38 FUNC GLOBAL DEFAULT 12 cairo_tag_begin + 756: 0000000000069ef0 121 FUNC GLOBAL DEFAULT 12 cairo_region_contains_rectangle + 757: 000000000006d5f0 1824 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_text_to_glyphs + 758: 000000000007bff0 36 FUNC GLOBAL DEFAULT 12 cairo_surface_get_fallback_resolution + 759: 0000000000088840 83 FUNC GLOBAL DEFAULT 12 cairo_user_font_face_set_init_func + 760: 0000000000057d70 4 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_filter + 761: 00000000000d3290 20 FUNC GLOBAL DEFAULT 12 cairo_ft_font_face_set_synthesize + 762: 000000000007ade0 4 FUNC GLOBAL DEFAULT 12 cairo_surface_status + 763: 0000000000041d30 75 FUNC GLOBAL DEFAULT 12 cairo_matrix_rotate + 764: 0000000000063d60 17 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_get_copy + 765: 000000000008a0a0 28 FUNC GLOBAL DEFAULT 12 cairo_get_font_face + 766: 000000000007d400 299 FUNC GLOBAL DEFAULT 12 cairo_surface_map_to_image + 767: 000000000002fa90 216 FUNC GLOBAL DEFAULT 12 cairo_font_face_destroy + 768: 0000000000063d40 24 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_set_copy + 769: 00000000000da2e0 117 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_dsc_begin_setup + 770: 00000000000ce450 4 FUNC GLOBAL DEFAULT 12 cairo_script_get_mode + 771: 0000000000063d80 24 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_set_finish + 772: 000000000005c400 236 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_get_control_point + 773: 00000000000ce440 4 FUNC GLOBAL DEFAULT 12 cairo_script_set_mode + 774: 000000000002c660 62 FUNC GLOBAL DEFAULT 12 cairo_debug_reset_static_data + 775: 0000000000069c50 151 FUNC GLOBAL DEFAULT 12 cairo_region_union_rectangle + 776: 00000000000b9f10 97 FUNC GLOBAL DEFAULT 12 cairo_surface_write_to_png_stream + 777: 00000000000eed90 89 FUNC GLOBAL DEFAULT 12 cairo_svg_surface_create_for_stream + 778: 0000000000076b60 86 FUNC GLOBAL DEFAULT 12 cairo_surface_observer_print + 779: 000000000008a5b0 26 FUNC GLOBAL DEFAULT 12 cairo_get_operator + 780: 000000000008ad00 24 FUNC GLOBAL DEFAULT 12 cairo_get_group_target + 781: 00000000000ef750 124 FUNC GLOBAL DEFAULT 12 cairo_tee_surface_create + 782: 0000000000056670 168 FUNC GLOBAL DEFAULT 12 cairo_pattern_create_rgba + 783: 00000000000301f0 27 FUNC GLOBAL DEFAULT 12 cairo_font_options_get_hint_style + 784: 00000000000a7e70 45 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_xrender_format + 785: 00000000000af690 738 FUNC GLOBAL DEFAULT 12 cairo_xcb_surface_create + 786: 0000000000069a20 78 FUNC GLOBAL DEFAULT 12 cairo_region_subtract + 787: 0000000000089680 38 FUNC GLOBAL DEFAULT 12 cairo_move_to + 788: 00000000000eef00 89 FUNC GLOBAL DEFAULT 12 cairo_svg_surface_set_document_unit + 789: 000000000008aa30 29 FUNC GLOBAL DEFAULT 12 cairo_get_miter_limit + 790: 0000000000089f40 27 FUNC GLOBAL DEFAULT 12 cairo_copy_clip_rectangle_list + 791: 000000000008a260 116 FUNC GLOBAL DEFAULT 12 cairo_glyph_extents + 792: 000000000008a610 23 FUNC GLOBAL DEFAULT 12 cairo_has_current_point + 793: 0000000000081e80 52 FUNC GLOBAL DEFAULT 12 cairo_toy_font_face_get_slant + 794: 0000000000063da0 17 FUNC GLOBAL DEFAULT 12 cairo_raster_source_pattern_get_finish + 795: 00000000000afbc0 144 FUNC GLOBAL DEFAULT 12 cairo_xcb_surface_set_size + 796: 0000000000069890 115 FUNC GLOBAL DEFAULT 12 cairo_region_copy + 797: 0000000000069b60 151 FUNC GLOBAL DEFAULT 12 cairo_region_intersect_rectangle + 798: 000000000007d230 463 FUNC GLOBAL DEFAULT 12 cairo_surface_create_similar + 799: 00000000000a7f60 352 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_set_drawable + 800: 000000000002e410 15 FUNC GLOBAL DEFAULT 12 cairo_device_status + 801: 0000000000069a70 151 FUNC GLOBAL DEFAULT 12 cairo_region_subtract_rectangle + 802: 00000000000450f0 728 FUNC GLOBAL DEFAULT 12 cairo_status_to_string + 803: 000000000008a1f0 77 FUNC GLOBAL DEFAULT 12 cairo_set_scaled_font + 804: 000000000008a020 77 FUNC GLOBAL DEFAULT 12 cairo_font_extents + 805: 00000000000eeec0 28 FUNC GLOBAL DEFAULT 12 cairo_svg_get_versions + 806: 0000000000057bc0 296 FUNC GLOBAL DEFAULT 12 cairo_pattern_set_matrix + 807: 000000000002e440 89 FUNC GLOBAL DEFAULT 12 cairo_device_release + 808: 0000000000089300 50 FUNC GLOBAL DEFAULT 12 cairo_set_line_width + 809: 0000000000067470 270 FUNC GLOBAL DEFAULT 12 cairo_recording_surface_ink_extents + 810: 0000000000088ad0 8 FUNC GLOBAL DEFAULT 12 cairo_version_string + 811: 000000000008ad20 27 FUNC GLOBAL DEFAULT 12 cairo_copy_path + 812: 00000000000c5ad0 23 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_get_height + 813: 000000000008a340 543 FUNC GLOBAL DEFAULT 12 cairo_show_text_glyphs + 814: 00000000000e6880 115 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_set_metadata + 815: 00000000000e6700 22 FUNC GLOBAL DEFAULT 12 cairo_pdf_version_to_string + 816: 00000000000697e0 67 FUNC GLOBAL DEFAULT 12 cairo_region_reference + 817: 0000000000089050 35 FUNC GLOBAL DEFAULT 12 cairo_restore + 818: 000000000003e480 202 FUNC GLOBAL DEFAULT 12 cairo_image_surface_create_for_data + 819: 0000000000089570 38 FUNC GLOBAL DEFAULT 12 cairo_identity_matrix + 820: 00000000000a81f0 47 FUNC GLOBAL DEFAULT 12 cairo_xlib_surface_get_height + 821: 00000000000abad0 17 FUNC GLOBAL DEFAULT 12 cairo_xcb_device_get_connection + 822: 00000000000300f0 27 FUNC GLOBAL DEFAULT 12 cairo_font_options_get_antialias + 823: 0000000000089250 24 FUNC GLOBAL DEFAULT 12 cairo_get_source + 824: 0000000000057cf0 48 FUNC GLOBAL DEFAULT 12 cairo_pattern_get_matrix + 825: 000000000007b9c0 68 FUNC GLOBAL DEFAULT 12 cairo_surface_finish + 826: 0000000000089b50 38 FUNC GLOBAL DEFAULT 12 cairo_stroke_preserve + 827: 00000000000e65b0 89 FUNC GLOBAL DEFAULT 12 cairo_pdf_surface_create_for_stream + 828: 000000000007add0 4 FUNC GLOBAL DEFAULT 12 cairo_surface_get_content + 829: 000000000007adc0 4 FUNC GLOBAL DEFAULT 12 cairo_surface_get_type + 830: 0000000000089990 70 FUNC GLOBAL DEFAULT 12 cairo_path_extents + 831: 0000000000069cf0 205 FUNC GLOBAL DEFAULT 12 cairo_region_xor + 832: 0000000000089b80 38 FUNC GLOBAL DEFAULT 12 cairo_fill + 833: 0000000000069ed0 25 FUNC GLOBAL DEFAULT 12 cairo_region_translate + 834: 0000000000089930 38 FUNC GLOBAL DEFAULT 12 cairo_rectangle + 835: 00000000000895c0 21 FUNC GLOBAL DEFAULT 12 cairo_user_to_device_distance + 836: 00000000000d9fd0 85 FUNC GLOBAL DEFAULT 12 cairo_ps_surface_set_eps + 837: 0000000000081e20 96 FUNC GLOBAL DEFAULT 12 cairo_toy_font_face_get_family + 838: 000000000008a2e0 86 FUNC GLOBAL DEFAULT 12 cairo_show_glyphs + 839: 000000000006e610 37 FUNC GLOBAL DEFAULT 12 cairo_scaled_font_get_font_face + 840: 0000000000041a30 42 FUNC GLOBAL DEFAULT 12 cairo_matrix_init_identity + 841: 0000000000089960 38 FUNC GLOBAL DEFAULT 12 cairo_close_path + 842: 000000000005c170 365 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_get_path + 843: 00000000000abc20 72 FUNC GLOBAL DEFAULT 12 cairo_xcb_device_debug_get_precision + 844: 00000000000575d0 122 FUNC GLOBAL DEFAULT 12 cairo_mesh_pattern_set_control_point + 845: 0000000000041cc0 104 FUNC GLOBAL DEFAULT 12 cairo_matrix_scale + 846: 0000000000088fd0 9 FUNC GLOBAL DEFAULT 12 cairo_get_user_data + 847: 0000000000069dc0 221 FUNC GLOBAL DEFAULT 12 cairo_region_xor_rectangle + 848: 0000000000089f90 38 FUNC GLOBAL DEFAULT 12 cairo_tag_end + 849: 00000000000d3110 49 FUNC GLOBAL DEFAULT 12 cairo_ft_font_options_substitute + 850: 00000000000af980 159 FUNC GLOBAL DEFAULT 12 cairo_xcb_surface_create_for_bitmap + 851: 000000000007b570 137 FUNC GLOBAL DEFAULT 12 cairo_surface_get_font_options + 852: 000000000007b0e0 19 FUNC GLOBAL DEFAULT 12 cairo_surface_get_user_data + 853: 00000000000c5a30 121 FUNC GLOBAL DEFAULT 12 cairo_gl_surface_set_size diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libcups.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libcups.so.2.txt new file mode 100644 index 000000000000..f7304e77d3aa --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libcups.so.2.txt @@ -0,0 +1,681 @@ +Library: /lib64/libcups.so.2 +Package: cups-libs-1.6.3-52.el7_9.x86_64 + + +Symbol table '.dynsym' contains 675 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.2.5 (3) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (4) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND symlink@GLIBC_2.2.5 (3) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ERR_error_string@libcrypto.so.10 (5) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendto@GLIBC_2.2.5 (4) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getservbyname@GLIBC_2.2.5 (3) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit2_ + 9: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.2.5 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.2.5 (3) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_resolver_free + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_client_new + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (6) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoll@GLIBC_2.2.5 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BIO_ctrl@libcrypto.so.10 (5) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (6) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (3) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_set_cipher_list@libssl.so.10 (7) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_free@libssl.so.10 (7) + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND GSS_C_NT_HOSTBASED_SERVICE@gssapi_krb5_2_MIT (8) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (3) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_name_join + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND srandom@GLIBC_2.2.5 (3) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (3) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.2.5 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_load_error_strings@libssl.so.10 (7) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execlp@GLIBC_2.2.5 (3) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkstemp@GLIBC_2.2.5 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_record_browser_new + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.2.5 (4) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir_r@GLIBC_2.2.5 (3) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (4) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (3) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_client_free + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND RAND_seed@libcrypto.so.10 (5) + 37: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (3) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (3) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (3) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.2.5 (3) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflate + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_address_snprint + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchmod@GLIBC_2.2.5 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (3) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (3) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (3) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.2.5 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_write@libssl.so.10 (7) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND random@GLIBC_2.2.5 (3) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewinddir@GLIBC_2.2.5 (3) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_free@libssl.so.10 (7) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_release_buffer@gssapi_krb5_2_MIT (8) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_new@libssl.so.10 (7) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (3) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.2.5 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (4) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (3) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_new@libssl.so.10 (7) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateEnd + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_set_bio@libssl.so.10 (7) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_init_sec_context@gssapi_krb5_2_MIT (8) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.2.5 (4) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (2) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_putc@GLIBC_2.2.5 (3) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.2.5 (3) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.2.5 (3) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (3) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.2.5 (3) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_CTX_ctrl@libssl.so.10 (7) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND crc32 + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (3) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_quit + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.2.5 (3) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (4) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sleep@GLIBC_2.2.5 (3) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (4) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvfrom@GLIBC_2.2.5 (4) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_open@GLIBC_2.2.5 (3) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.2.5 (3) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_wrlock@GLIBC_2.2.5 (4) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflate + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_close@GLIBC_2.2.5 (3) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam@GLIBC_2.2.5 (3) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.3.4 (2) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (9) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (4) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_browser_new + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (2) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit2_ + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime@GLIBC_2.2.5 (3) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.2.5 (3) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.2.5 (3) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.2.5 (3) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (3) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.2.5 (3) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_set_func + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.2.5 (3) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_string_list_get_pair + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lockf@GLIBC_2.2.5 (3) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (3) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (3) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_shutdown@libssl.so.10 (7) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateEnd + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.2.5 (3) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BIO_new@libcrypto.so.10 (5) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.2.5 (3) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (3) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_read@libssl.so.10 (7) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (6) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_import_name@gssapi_krb5_2_MIT (8) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (3) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (10) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tcgetattr@GLIBC_2.2.5 (3) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (3) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_library_init@libssl.so.10 (7) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyname@GLIBC_2.2.5 (3) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid@GLIBC_2.2.5 (3) + 119: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (3) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (3) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (3) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (3) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (3) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_pending@libssl.so.10 (7) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wait@GLIBC_2.2.5 (4) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.2.5 (3) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.2.5 (4) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.2.5 (3) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.2.5 (3) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ERR_get_error@libcrypto.so.10 (5) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tcsetattr@GLIBC_2.2.5 (3) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.2.5 (3) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_rdlock@GLIBC_2.2.5 (4) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (3) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_string_list_find + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fmod@GLIBC_2.2.5 (11) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_record_browser_free + 139: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (3) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.2.5 (3) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.2.5 (3) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_get + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_connect@libssl.so.10 (7) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_delete_sec_context@gssapi_krb5_2_MIT (8) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.2.5 (4) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (3) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (3) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (4) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSLv23_client_method@libssl.so.10 (7) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (3) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (4) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (4) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.2.5 (3) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (3) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.2.5 (3) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (3) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SSL_get_SSL_CTX@libssl.so.10 (7) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (3) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (3) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (3) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_unlock@GLIBC_2.2.5 (4) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_init@GLIBC_2.2.5 (4) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (3) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (2) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.2.5 (4) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_init@GLIBC_2.2.5 (3) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_iterate + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.2.5 (3) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (2) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_resolver_new + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_new + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_simple_poll_free + 173: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv@GLIBC_2.2.5 (3) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gss_release_name@gssapi_krb5_2_MIT (8) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND umask@GLIBC_2.2.5 (3) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (3) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND avahi_service_browser_free + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.2.5 (4) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strdup@GLIBC_2.2.5 (3) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.2.5 (4) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.2.5 (3) + 183: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 184: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.2.5 (3) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (3) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (4) + 188: 000000000004f060 122 FUNC GLOBAL DEFAULT 11 cupsCancelJob2 + 189: 0000000000027790 126 FUNC GLOBAL DEFAULT 11 cupsFileStdout + 190: 0000000000017e50 57 FUNC GLOBAL DEFAULT 11 cupsArrayCount + 191: 00000000000422e0 52 FUNC GLOBAL DEFAULT 11 ppdOpen2 + 192: 0000000000028640 169 FUNC GLOBAL DEFAULT 11 cupsPutFile + 193: 0000000000047240 514 FUNC GLOBAL DEFAULT 11 _pwgMediaForPWG + 194: 000000000004b7c0 443 FUNC GLOBAL DEFAULT 11 _cupsSNMPWalk + 195: 0000000000018920 92 FUNC GLOBAL DEFAULT 11 cupsArrayPrev + 196: 000000000002cf40 440 FUNC GLOBAL DEFAULT 11 httpAddrLookup + 197: 0000000000038000 74 FUNC GLOBAL DEFAULT 11 _cupsMessageNew + 198: 0000000000033120 83 FUNC GLOBAL DEFAULT 11 ippGetVersion + 199: 000000000003f050 12823 FUNC GLOBAL DEFAULT 11 _ppdOpen + 200: 0000000000029700 69 FUNC GLOBAL DEFAULT 11 httpGetBlocking + 201: 0000000000029dd0 209 FUNC GLOBAL DEFAULT 11 httpInitialize + 202: 000000000002f520 369 FUNC GLOBAL DEFAULT 11 httpGetDateTime + 203: 000000000002c720 170 FUNC GLOBAL DEFAULT 11 httpEncryption + 204: 0000000000028820 57 FUNC GLOBAL DEFAULT 11 _cupsGlobalLock + 205: 00000000000311c0 153 FUNC GLOBAL DEFAULT 11 ippAddBooleans + 206: 000000000001f7b0 50 FUNC GLOBAL DEFAULT 11 cupsCancelDestJob + 207: 00000000000243b0 55 FUNC GLOBAL DEFAULT 11 ppdEmit + 208: 000000000003aac0 2284 FUNC GLOBAL DEFAULT 11 cupsMarkOptions + 209: 00000000000267d0 111 FUNC GLOBAL DEFAULT 11 cupsFileLock + 210: 000000000004c800 50 FUNC GLOBAL DEFAULT 11 _cupsRWLockWrite + 211: 0000000000031660 201 FUNC GLOBAL DEFAULT 11 ippAddRanges + 212: 0000000000033540 89 FUNC GLOBAL DEFAULT 11 ippSetGroupTag + 213: 0000000000047f30 802 FUNC GLOBAL DEFAULT 11 _cupsSetHTTPError + 214: 0000000000033ca0 2729 FUNC GLOBAL DEFAULT 11 ippReadIO + 215: 000000000004be60 209 FUNC GLOBAL DEFAULT 11 _cups_strncasecmp + 216: 00000000000361c0 77 FUNC GLOBAL DEFAULT 11 ippPort + 217: 000000000004c5d0 121 FUNC GLOBAL DEFAULT 11 cupsTempFile + 218: 0000000000046200 630 FUNC GLOBAL DEFAULT 11 _pwgInputSlotForSource + 219: 000000000002af50 144 FUNC GLOBAL DEFAULT 11 httpWait + 220: 00000000000225f0 569 FUNC GLOBAL DEFAULT 11 cupsCopyDestInfo + 221: 000000000003a4f0 109 FUNC GLOBAL DEFAULT 11 ppdMarkOption + 222: 000000000003d0e0 977 FUNC GLOBAL DEFAULT 11 ppdPageSize + 223: 000000000004a770 194 FUNC GLOBAL DEFAULT 11 _cupsSNMPOIDToString + 224: 0000000000015350 2900 FUNC GLOBAL DEFAULT 11 cupsAdminGetServerSettings + 225: 0000000000018590 84 FUNC GLOBAL DEFAULT 11 cupsArrayIndex + 226: 0000000000032a40 247 FUNC GLOBAL DEFAULT 11 ippFindNextAttribute + 227: 00000000000317d0 192 FUNC GLOBAL DEFAULT 11 ippAddResolutions + 228: 0000000000046b70 425 FUNC GLOBAL DEFAULT 11 _pwgGenerateSize + 229: 0000000000049210 539 FUNC GLOBAL DEFAULT 11 cupsSideChannelSNMPWalk + 230: 000000000002fe40 106 FUNC GLOBAL DEFAULT 11 httpSeparate + 231: 000000000004c880 70 FUNC GLOBAL DEFAULT 11 _cupsThreadCreate + 232: 000000000004a840 138 FUNC GLOBAL DEFAULT 11 _cupsSNMPOpen + 233: 000000000002d740 57 FUNC GLOBAL DEFAULT 11 httpAddrConnect + 234: 000000000002c620 57 FUNC GLOBAL DEFAULT 11 httpReconnect + 235: 0000000000046de0 1117 FUNC GLOBAL DEFAULT 11 _pwgMediaForPPD + 236: 000000000004bfd0 101 FUNC GLOBAL DEFAULT 11 _cups_strlcpy + 237: 000000000003a7e0 573 FUNC GLOBAL DEFAULT 11 _ppdParseOptions + 238: 0000000000036c60 379 FUNC GLOBAL DEFAULT 11 ippTagValue + 239: 0000000000029480 63 FUNC GLOBAL DEFAULT 11 httpCopyCredentials + 240: 0000000000029840 265 FUNC GLOBAL DEFAULT 11 httpGetLength2 + 241: 00000000000428d0 3040 FUNC GLOBAL DEFAULT 11 _ppdCacheCreateWithFile + 242: 0000000000033380 126 FUNC GLOBAL DEFAULT 11 ippSetBoolean + 243: 0000000000031890 92 FUNC GLOBAL DEFAULT 11 ippAddSeparator + 244: 00000000000312e0 153 FUNC GLOBAL DEFAULT 11 ippAddCollections + 245: 000000000004f630 240 FUNC GLOBAL DEFAULT 11 cupsGetDefault2 + 246: 00000000000507b0 313 FUNC GLOBAL DEFAULT 11 cupsGetServerPPD + 247: 000000000001d440 1325 FUNC GLOBAL DEFAULT 11 cupsConnectDest + 248: 000000000002f6a0 1947 FUNC GLOBAL DEFAULT 11 httpSeparateURI + 249: 0000000000029a20 814 FUNC GLOBAL DEFAULT 11 httpGetSubField2 + 250: 0000000000029120 53 FUNC GLOBAL DEFAULT 11 _httpBIOMethods + 251: 000000000004b9c0 293 FUNC GLOBAL DEFAULT 11 _cupsStrAlloc + 252: 0000000000268068 0 NOTYPE GLOBAL DEFAULT 24 _end + 253: 000000000003bf40 230 FUNC GLOBAL DEFAULT 11 httpMD5 + 254: 0000000000026d70 691 FUNC GLOBAL DEFAULT 11 cupsFilePrintf + 255: 0000000000019ff0 223 FUNC GLOBAL DEFAULT 11 cupsBackendReport + 256: 0000000000022ad0 448 FUNC GLOBAL DEFAULT 11 cupsGetDestMediaBySize + 257: 0000000000042480 52 FUNC GLOBAL DEFAULT 11 ppdOpenFile + 258: 00000000000233d0 203 FUNC GLOBAL DEFAULT 11 ppdEmitJCLEnd + 259: 00000000000434b0 6053 FUNC GLOBAL DEFAULT 11 _ppdCacheCreateWithPPD + 260: 0000000000027860 95 FUNC GLOBAL DEFAULT 11 cupsFileUnlock + 261: 000000000003eea0 126 FUNC GLOBAL DEFAULT 11 ppdErrorString + 262: 00000000000336b0 69 FUNC GLOBAL DEFAULT 11 ippSetOperation + 263: 000000000001e050 1436 FUNC GLOBAL DEFAULT 11 _cupsGetDests + 264: 0000000000037f60 52 FUNC GLOBAL DEFAULT 11 cupsLangDefault + 265: 000000000001d970 158 FUNC GLOBAL DEFAULT 11 cupsFreeDests + 266: 000000000003ef20 216 FUNC GLOBAL DEFAULT 11 _ppdGetEncoding + 267: 000000000002caf0 196 FUNC GLOBAL DEFAULT 11 httpAddrEqual + 268: 0000000000032bf0 86 FUNC GLOBAL DEFAULT 11 ippGetBoolean + 269: 00000000000387b0 95 FUNC GLOBAL DEFAULT 11 _ppdFreeLanguages + 270: 0000000000267e24 4 OBJECT GLOBAL DEFAULT 23 _cups_debug_fd + 271: 0000000000017e90 85 FUNC GLOBAL DEFAULT 11 cupsArrayCurrent + 272: 0000000000032f40 123 FUNC GLOBAL DEFAULT 11 ippGetResolution + 273: 0000000000033000 58 FUNC GLOBAL DEFAULT 11 ippGetStatusCode + 274: 0000000000038f90 149 FUNC GLOBAL DEFAULT 11 ppdLocalizeAttr + 275: 0000000000017da0 169 FUNC GLOBAL DEFAULT 11 cupsArrayClear + 276: 00000000000249a0 85 FUNC GLOBAL DEFAULT 11 _ippFindOption + 277: 000000000002a2a0 57 FUNC GLOBAL DEFAULT 11 httpSetExpect + 278: 00000000000294c0 46 FUNC GLOBAL DEFAULT 11 _httpCreateCredentials + 279: 00000000000228c0 515 FUNC GLOBAL DEFAULT 11 cupsGetDestMediaByName + 280: 000000000004f0e0 71 FUNC GLOBAL DEFAULT 11 cupsCancelJob + 281: 000000000003eb90 772 FUNC GLOBAL DEFAULT 11 ppdClose + 282: 0000000000042320 163 FUNC GLOBAL DEFAULT 11 ppdOpenFd + 283: 0000000000031410 153 FUNC GLOBAL DEFAULT 11 ippAddIntegers + 284: 00000000000487e0 817 FUNC GLOBAL DEFAULT 11 cupsDoIORequest + 285: 0000000000037430 491 FUNC GLOBAL DEFAULT 11 _cupsSetLocale + 286: 000000000002cda0 413 FUNC GLOBAL DEFAULT 11 httpAddrString + 287: 000000000002c8d0 52 FUNC GLOBAL DEFAULT 11 _httpTLSSetOptions + 288: 000000000001ebc0 161 FUNC GLOBAL DEFAULT 11 cupsSetDefaultDest + 289: 00000000000276a0 126 FUNC GLOBAL DEFAULT 11 cupsFileStderr + 290: 0000000000045b90 128 FUNC GLOBAL DEFAULT 11 _ppdCacheGetType + 291: 000000000002aea0 171 FUNC GLOBAL DEFAULT 11 httpUpdate + 292: 0000000000047450 914 FUNC GLOBAL DEFAULT 11 _pwgInitSize + 293: 0000000000014b00 2117 FUNC GLOBAL DEFAULT 11 cupsAdminExportSamba + 294: 000000000004bf40 132 FUNC GLOBAL DEFAULT 11 _cups_strlcat + 295: 0000000000037fa0 90 FUNC GLOBAL DEFAULT 11 _cupsMessageLookup + 296: 0000000000027250 254 FUNC GLOBAL DEFAULT 11 cupsFileRead + 297: 000000000004f3a0 174 FUNC GLOBAL DEFAULT 11 cupsFreeJobs + 298: 00000000000278c0 371 FUNC GLOBAL DEFAULT 11 cupsFileWrite + 299: 0000000000030240 75 FUNC GLOBAL DEFAULT 11 _httpEncodeURI + 300: 000000000002c660 117 FUNC GLOBAL DEFAULT 11 httpConnectEncrypt + 301: 0000000000032cf0 85 FUNC GLOBAL DEFAULT 11 ippGetDate + 302: 000000000002ca60 129 FUNC GLOBAL DEFAULT 11 httpAddrAny + 303: 000000000002a7c0 201 FUNC GLOBAL DEFAULT 11 _httpWait + 304: 0000000000036de0 454 FUNC GLOBAL DEFAULT 11 _cupsLangPrintError + 305: 000000000002e2c0 1046 FUNC GLOBAL DEFAULT 11 httpAssembleURI + 306: 00000000000479b0 114 FUNC GLOBAL DEFAULT 11 _cupsNextDelay + 307: 0000000000031140 113 FUNC GLOBAL DEFAULT 11 ippAddBoolean + 308: 000000000002a720 146 FUNC GLOBAL DEFAULT 11 httpSetTimeout + 309: 000000000004d1b0 978 FUNC GLOBAL DEFAULT 11 _cupsGetPassword + 310: 000000000001be00 92 FUNC GLOBAL DEFAULT 11 ppdNextCustomParam + 311: 0000000000039a70 292 FUNC GLOBAL DEFAULT 11 ppdFindOption + 312: 0000000000032820 187 FUNC GLOBAL DEFAULT 11 ippDeleteAttribute + 313: 0000000000037180 422 FUNC GLOBAL DEFAULT 11 _cupsLangPrintf + 314: 000000000004c6c0 52 FUNC GLOBAL DEFAULT 11 _cupsMutexInit + 315: 0000000000037330 249 FUNC GLOBAL DEFAULT 11 _cupsLangPuts + 316: 0000000000026840 60 FUNC GLOBAL DEFAULT 11 cupsFileNumber + 317: 000000000002f150 69 FUNC GLOBAL DEFAULT 11 httpDecode64 + 318: 000000000004e6b0 134 FUNC GLOBAL DEFAULT 11 cupsSetEncryption + 319: 000000000004cfe0 463 FUNC GLOBAL DEFAULT 11 cupsUTF32ToUTF8 + 320: 00000000000188b0 108 FUNC GLOBAL DEFAULT 11 cupsArrayNext + 321: 000000000004c7c0 50 FUNC GLOBAL DEFAULT 11 _cupsRWLockRead + 322: 0000000000045b10 128 FUNC GLOBAL DEFAULT 11 _ppdCacheGetSource + 323: 000000000003a720 92 FUNC GLOBAL DEFAULT 11 ppdFirstOption + 324: 000000000004c840 50 FUNC GLOBAL DEFAULT 11 _cupsRWUnlock + 325: 000000000004f130 489 FUNC GLOBAL DEFAULT 11 cupsCreateJob + 326: 000000000002f1a0 509 FUNC GLOBAL DEFAULT 11 httpEncode64_2 + 327: 000000000004c650 108 FUNC GLOBAL DEFAULT 11 cupsTempFile2 + 328: 0000000000028a30 57 FUNC GLOBAL DEFAULT 11 _cupsGlobalUnlock + 329: 0000000000017ef0 222 FUNC GLOBAL DEFAULT 11 cupsArrayDelete + 330: 00000000000315e0 125 FUNC GLOBAL DEFAULT 11 ippAddRange + 331: 0000000000050510 124 FUNC GLOBAL DEFAULT 11 cupsGetPPD2 + 332: 0000000000027030 196 FUNC GLOBAL DEFAULT 11 cupsFilePutChar + 333: 000000000004dbe0 101 FUNC GLOBAL DEFAULT 11 cupsSetPasswordCB + 334: 000000000004b030 61 FUNC GLOBAL DEFAULT 11 _cupsSNMPSetDebug + 335: 0000000000038810 403 FUNC GLOBAL DEFAULT 11 _ppdGetLanguages + 336: 000000000004fef0 1429 FUNC GLOBAL DEFAULT 11 cupsGetPPD3 + 337: 000000000004f760 1867 FUNC GLOBAL DEFAULT 11 cupsGetJobs2 + 338: 0000000000267ea8 0 NOTYPE GLOBAL DEFAULT 23 _edata + 339: 000000000004da30 81 FUNC GLOBAL DEFAULT 11 cupsGetPassword + 340: 000000000001daa0 331 FUNC GLOBAL DEFAULT 11 cupsAddDest + 341: 0000000000037800 126 FUNC GLOBAL DEFAULT 11 cupsLangFlush + 342: 00000000000294f0 93 FUNC GLOBAL DEFAULT 11 _httpDisconnect + 343: 0000000000048e70 373 FUNC GLOBAL DEFAULT 11 cupsSideChannelWrite + 344: 0000000000048c00 59 FUNC GLOBAL DEFAULT 11 cupsDoRequest + 345: 000000000003f000 75 FUNC GLOBAL DEFAULT 11 ppdLastError + 346: 00000000000389b0 103 FUNC GLOBAL DEFAULT 11 _ppdHashName + 347: 00000000000185f0 88 FUNC GLOBAL DEFAULT 11 cupsArrayInsert + 348: 00000000000508f0 489 FUNC GLOBAL DEFAULT 11 cupsStartDocument + 349: 00000000000424c0 61 FUNC GLOBAL DEFAULT 11 ppdSetConformance + 350: 0000000000038580 152 FUNC GLOBAL DEFAULT 11 _cupsLangString + 351: 0000000000035730 239 FUNC GLOBAL DEFAULT 11 ippErrorString + 352: 00000000000398f0 153 FUNC GLOBAL DEFAULT 11 ppdLocalizeMarkerName + 353: 000000000002c190 58 FUNC GLOBAL DEFAULT 11 httpOptions + 354: 000000000002b930 54 FUNC GLOBAL DEFAULT 11 httpRead + 355: 0000000000032c50 85 FUNC GLOBAL DEFAULT 11 ippGetCollection + 356: 0000000000267e20 4 OBJECT GLOBAL DEFAULT 23 _cups_debug_level + 357: 0000000000038a20 331 FUNC GLOBAL DEFAULT 11 _ppdLocalizedAttr + 358: 0000000000042270 105 FUNC GLOBAL DEFAULT 11 ppdOpen + 359: 0000000000031b90 844 FUNC GLOBAL DEFAULT 11 ippAddStrings + 360: 0000000000032f00 61 FUNC GLOBAL DEFAULT 11 ippGetRequestId + 361: 000000000002ed30 533 FUNC GLOBAL DEFAULT 11 _httpAssembleUUID + 362: 0000000000024860 248 FUNC GLOBAL DEFAULT 11 ppdEmitFd + 363: 0000000000031ee0 1333 FUNC GLOBAL DEFAULT 11 ippCopyAttribute + 364: 00000000000468a0 297 FUNC GLOBAL DEFAULT 11 _pwgFormatInches + 365: 0000000000017d40 85 FUNC GLOBAL DEFAULT 11 cupsArrayAdd + 366: 0000000000036210 61 FUNC GLOBAL DEFAULT 11 ippSetPort + 367: 00000000000181d0 387 FUNC GLOBAL DEFAULT 11 cupsArrayFind + 368: 000000000002cc30 156 FUNC GLOBAL DEFAULT 11 httpAddrLocalhost + 369: 0000000000026ae0 519 FUNC GLOBAL DEFAULT 11 cupsFileOpen + 370: 0000000000050dc0 85 FUNC GLOBAL DEFAULT 11 cupsPrintFile2 + 371: 000000000003bc50 87 FUNC GLOBAL DEFAULT 11 _cupsMD5Init + 372: 000000000002d2f0 239 FUNC GLOBAL DEFAULT 11 httpGetHostname + 373: 000000000002a5a0 219 FUNC GLOBAL DEFAULT 11 httpClose + 374: 0000000000033a50 583 FUNC GLOBAL DEFAULT 11 ippSetValueTag + 375: 000000000004c220 699 FUNC GLOBAL DEFAULT 11 _cupsStrScand + 376: 000000000004a680 114 FUNC GLOBAL DEFAULT 11 _cupsSNMPIsOID + 377: 0000000000027460 568 FUNC GLOBAL DEFAULT 11 cupsFileSeek + 378: 0000000000036250 78 FUNC GLOBAL DEFAULT 11 ippTagString + 379: 0000000000045290 146 FUNC GLOBAL DEFAULT 11 _ppdCacheGetOutputBin + 380: 0000000000048c40 557 FUNC GLOBAL DEFAULT 11 cupsSideChannelRead + 381: 000000000002c450 458 FUNC GLOBAL DEFAULT 11 httpReconnect2 + 382: 00000000000331c0 71 FUNC GLOBAL DEFAULT 11 ippNextAttribute + 383: 0000000000019330 487 FUNC GLOBAL DEFAULT 11 _cupsSetNegotiateAuthString + 384: 00000000000187c0 60 FUNC GLOBAL DEFAULT 11 cupsArrayNew + 385: 0000000000022d90 313 FUNC GLOBAL DEFAULT 11 cupsDirRead + 386: 000000000002ff20 705 FUNC GLOBAL DEFAULT 11 httpStatus + 387: 0000000000015eb0 6577 FUNC GLOBAL DEFAULT 11 cupsAdminSetServerSettings + 388: 0000000000031100 50 FUNC GLOBAL DEFAULT 11 _cupsBufferRelease + 389: 000000000002ebb0 384 FUNC GLOBAL DEFAULT 11 httpAssembleURIf + 390: 000000000003a650 194 FUNC GLOBAL DEFAULT 11 ppdMarkDefaults + 391: 00000000000332c0 185 FUNC GLOBAL DEFAULT 11 ippNewRequest + 392: 000000000004bb80 181 FUNC GLOBAL DEFAULT 11 _cupsStrFree + 393: 00000000000262b0 373 FUNC GLOBAL DEFAULT 11 cupsFileGetLine + 394: 000000000001f4e0 55 FUNC GLOBAL DEFAULT 11 cupsGetDests + 395: 0000000000038050 1016 FUNC GLOBAL DEFAULT 11 _cupsMessageLoad + 396: 000000000002afe0 52 FUNC GLOBAL DEFAULT 11 httpCheck + 397: 000000000002a040 338 FUNC GLOBAL DEFAULT 11 httpSetAuthString + 398: 0000000000018360 324 FUNC GLOBAL DEFAULT 11 _cupsArrayAddStrings + 399: 00000000000297d0 105 FUNC GLOBAL DEFAULT 11 httpGetField + 400: 0000000000048ff0 143 FUNC GLOBAL DEFAULT 11 cupsSideChannelDoRequest + 401: 000000000004bc40 87 FUNC GLOBAL DEFAULT 11 _cupsStrRetain + 402: 0000000000038b70 1050 FUNC GLOBAL DEFAULT 11 ppdLocalize + 403: 000000000001f150 57 FUNC GLOBAL DEFAULT 11 cupsSetDests + 404: 000000000004c740 50 FUNC GLOBAL DEFAULT 11 _cupsMutexUnlock + 405: 0000000000046d20 187 FUNC GLOBAL DEFAULT 11 _pwgMediaForLegacy + 406: 000000000001f7f0 429 FUNC GLOBAL DEFAULT 11 cupsCloseDestJob + 407: 0000000000033210 170 FUNC GLOBAL DEFAULT 11 ippNew + 408: 000000000002a2e0 335 FUNC GLOBAL DEFAULT 11 httpSetField + 409: 0000000000033630 121 FUNC GLOBAL DEFAULT 11 ippSetName + 410: 000000000004bd70 79 FUNC GLOBAL DEFAULT 11 _cups_strcpy + 411: 0000000000035d60 331 FUNC GLOBAL DEFAULT 11 ippOpValue + 412: 0000000000025f40 148 FUNC GLOBAL DEFAULT 11 cupsFileFlush + 413: 0000000000018980 321 FUNC GLOBAL DEFAULT 11 cupsArrayRemove + 414: 0000000000022c90 107 FUNC GLOBAL DEFAULT 11 cupsDirClose + 415: 0000000000032d50 69 FUNC GLOBAL DEFAULT 11 ippGetGroupTag + 416: 000000000004da90 127 FUNC GLOBAL DEFAULT 11 cupsGetPassword2 + 417: 0000000000048260 1041 FUNC GLOBAL DEFAULT 11 cupsSendRequest + 418: 000000000004db60 124 FUNC GLOBAL DEFAULT 11 cupsSetCredentials + 419: 000000000002c0d0 58 FUNC GLOBAL DEFAULT 11 httpDelete + 420: 00000000000362a0 2118 FUNC GLOBAL DEFAULT 11 ippAttributeString + 421: 0000000000032b40 92 FUNC GLOBAL DEFAULT 11 ippFindAttribute + 422: 00000000000335a0 132 FUNC GLOBAL DEFAULT 11 ippSetInteger + 423: 000000000004e000 114 FUNC GLOBAL DEFAULT 11 cupsSetUser + 424: 0000000000028860 463 FUNC GLOBAL DEFAULT 11 _cupsGlobals + 425: 0000000000037710 78 FUNC GLOBAL DEFAULT 11 cupsLangEncoding + 426: 000000000002d100 483 FUNC GLOBAL DEFAULT 11 httpGetHostByName + 427: 0000000000026560 618 FUNC GLOBAL DEFAULT 11 cupsFileGetConf + 428: 0000000000031060 154 FUNC GLOBAL DEFAULT 11 _cupsBufferGet + 429: 000000000003c1c0 929 FUNC GLOBAL DEFAULT 11 cupsNotifySubject + 430: 0000000000029590 121 FUNC GLOBAL DEFAULT 11 httpFlushWrite + 431: 0000000000047d50 469 FUNC GLOBAL DEFAULT 11 cupsGetResponse + 432: 0000000000047bc0 397 FUNC GLOBAL DEFAULT 11 _cupsConnect + 433: 0000000000018ba0 62 FUNC GLOBAL DEFAULT 11 cupsArrayUserData + 434: 00000000000377c0 50 FUNC GLOBAL DEFAULT 11 _cupsMessageFree + 435: 00000000000293c0 94 FUNC GLOBAL DEFAULT 11 httpBlocking + 436: 000000000001bb30 245 FUNC GLOBAL DEFAULT 11 ppdConflicts + 437: 0000000000047b30 142 FUNC GLOBAL DEFAULT 11 cupsReadResponseData + 438: 0000000000050d60 85 FUNC GLOBAL DEFAULT 11 cupsPrintFile + 439: 000000000004c950 555 FUNC GLOBAL DEFAULT 11 cupsCharsetToUTF8 + 440: 000000000004a4c0 133 FUNC GLOBAL DEFAULT 11 _cupsSNMPCopyOID + 441: 0000000000048680 350 FUNC GLOBAL DEFAULT 11 cupsWriteRequestData + 442: 00000000000250c0 107 FUNC GLOBAL DEFAULT 11 cupsEncodeOptions + 443: 000000000001f9a0 447 FUNC GLOBAL DEFAULT 11 cupsCreateDestJob + 444: 0000000000046480 675 FUNC GLOBAL DEFAULT 11 _pwgMediaTypeForType + 445: 000000000003a780 92 FUNC GLOBAL DEFAULT 11 ppdNextOption + 446: 000000000004f320 122 FUNC GLOBAL DEFAULT 11 cupsFinishDocument + 447: 0000000000050e68 0 FUNC GLOBAL DEFAULT 12 _fini + 448: 00000000000258a0 910 FUNC GLOBAL DEFAULT 11 _cupsFileCheck + 449: 000000000004c700 50 FUNC GLOBAL DEFAULT 11 _cupsMutexLock + 450: 000000000004dfb0 75 FUNC GLOBAL DEFAULT 11 cupsSetServerCertCB + 451: 0000000000018ad0 105 FUNC GLOBAL DEFAULT 11 cupsArrayRestore + 452: 000000000004e790 77 FUNC GLOBAL DEFAULT 11 _cupsGSSServiceName + 453: 000000000001f520 645 FUNC GLOBAL DEFAULT 11 cupsGetNamedDest + 454: 0000000000028080 517 FUNC GLOBAL DEFAULT 11 cupsGetFd + 455: 0000000000039990 214 FUNC GLOBAL DEFAULT 11 ppdFindChoice + 456: 000000000004a480 50 FUNC GLOBAL DEFAULT 11 _cupsSNMPClose + 457: 0000000000022d00 137 FUNC GLOBAL DEFAULT 11 cupsDirOpen + 458: 000000000003c930 105 FUNC GLOBAL DEFAULT 11 cupsGetOption + 459: 0000000000031730 145 FUNC GLOBAL DEFAULT 11 ippAddResolution + 460: 000000000003db90 64 FUNC GLOBAL DEFAULT 11 ppdPageWidth + 461: 000000000002d7d0 1940 FUNC GLOBAL DEFAULT 11 httpAddrGetList + 462: 0000000000029750 62 FUNC GLOBAL DEFAULT 11 httpGetCookie + 463: 000000000002ef50 509 FUNC GLOBAL DEFAULT 11 httpDecode64_2 + 464: 0000000000027350 257 FUNC GLOBAL DEFAULT 11 cupsFileRewind + 465: 0000000000045850 696 FUNC GLOBAL DEFAULT 11 _ppdCacheGetSize + 466: 0000000000025d70 68 FUNC GLOBAL DEFAULT 11 cupsFileEOF + 467: 000000000004c8d0 114 FUNC GLOBAL DEFAULT 11 _cupsCharmapFlush + 468: 000000000004bdc0 156 FUNC GLOBAL DEFAULT 11 _cups_strcasecmp + 469: 0000000000019b50 257 FUNC GLOBAL DEFAULT 11 cupsBackChannelRead + 470: 000000000004c4e0 229 FUNC GLOBAL DEFAULT 11 cupsTempFd + 471: 000000000002cd40 87 FUNC GLOBAL DEFAULT 11 _httpAddrSetPort + 472: 000000000003bcb0 316 FUNC GLOBAL DEFAULT 11 _cupsMD5Append + 473: 0000000000033950 252 FUNC GLOBAL DEFAULT 11 ippSetString + 474: 0000000000032cb0 61 FUNC GLOBAL DEFAULT 11 ippGetCount + 475: 0000000000014260 2198 FUNC GLOBAL DEFAULT 11 cupsAdminCreateWindowsPPD + 476: 00000000000119d8 0 FUNC GLOBAL DEFAULT 9 _init + 477: 00000000000324d0 209 FUNC GLOBAL DEFAULT 11 ippDateToTime + 478: 0000000000022f70 1049 FUNC GLOBAL DEFAULT 11 ppdCollect2 + 479: 0000000000046730 354 FUNC GLOBAL DEFAULT 11 _pwgPageSizeForMedia + 480: 0000000000044c60 146 FUNC GLOBAL DEFAULT 11 _ppdCacheGetBin + 481: 0000000000026430 297 FUNC GLOBAL DEFAULT 11 cupsFileGets + 482: 0000000000033040 137 FUNC GLOBAL DEFAULT 11 ippGetString + 483: 0000000000037880 1748 FUNC GLOBAL DEFAULT 11 cupsLangGet + 484: 000000000002cbc0 105 FUNC GLOBAL DEFAULT 11 httpAddrLength + 485: 00000000000376c0 75 FUNC GLOBAL DEFAULT 11 _cupsEncodingName + 486: 0000000000028290 196 FUNC GLOBAL DEFAULT 11 cupsGetFile + 487: 00000000000299a0 59 FUNC GLOBAL DEFAULT 11 httpGetState + 488: 000000000003d4c0 1741 FUNC GLOBAL DEFAULT 11 ppdPageSizeLimits + 489: 0000000000018b40 89 FUNC GLOBAL DEFAULT 11 cupsArraySave + 490: 000000000003ce10 166 FUNC GLOBAL DEFAULT 11 cupsRemoveOption + 491: 0000000000029550 56 FUNC GLOBAL DEFAULT 11 httpError + 492: 0000000000026880 593 FUNC GLOBAL DEFAULT 11 cupsFileOpenFd + 493: 0000000000050490 116 FUNC GLOBAL DEFAULT 11 cupsGetPPD + 494: 0000000000050e20 71 FUNC GLOBAL DEFAULT 11 cupsPrintFiles + 495: 000000000002c890 54 FUNC GLOBAL DEFAULT 11 httpWrite + 496: 0000000000027100 328 FUNC GLOBAL DEFAULT 11 cupsFilePuts + 497: 000000000003c740 352 FUNC GLOBAL DEFAULT 11 cupsAddOption + 498: 000000000004cb80 604 FUNC GLOBAL DEFAULT 11 cupsUTF8ToCharset + 499: 000000000003c030 385 FUNC GLOBAL DEFAULT 11 httpMD5Final + 500: 000000000004f720 52 FUNC GLOBAL DEFAULT 11 cupsGetDefault + 501: 0000000000027720 108 FUNC GLOBAL DEFAULT 11 cupsFileStdin + 502: 0000000000039030 2232 FUNC GLOBAL DEFAULT 11 ppdLocalizeIPPReason + 503: 0000000000047970 58 FUNC GLOBAL DEFAULT 11 cupsLastErrorString + 504: 0000000000022ed0 90 FUNC GLOBAL DEFAULT 11 cupsDirRewind + 505: 0000000000025c30 225 FUNC GLOBAL DEFAULT 11 _cupsFileCheckFilter + 506: 0000000000027b60 1302 FUNC GLOBAL DEFAULT 11 cupsGetDevices + 507: 0000000000032da0 92 FUNC GLOBAL DEFAULT 11 ippGetInteger + 508: 0000000000029420 84 FUNC GLOBAL DEFAULT 11 httpClearCookie + 509: 000000000002f3a0 81 FUNC GLOBAL DEFAULT 11 httpEncode64 + 510: 0000000000018510 61 FUNC GLOBAL DEFAULT 11 cupsArrayGetIndex + 511: 00000000000318f0 668 FUNC GLOBAL DEFAULT 11 ippAddString + 512: 000000000003c9a0 1125 FUNC GLOBAL DEFAULT 11 cupsParseOptions + 513: 0000000000033180 52 FUNC GLOBAL DEFAULT 11 ippLength + 514: 000000000004e600 92 FUNC GLOBAL DEFAULT 11 cupsEncryption + 515: 0000000000023390 53 FUNC GLOBAL DEFAULT 11 ppdCollect + 516: 0000000000019520 1574 FUNC GLOBAL DEFAULT 11 cupsDoAuthentication + 517: 0000000000029950 74 FUNC GLOBAL DEFAULT 11 httpGetLength + 518: 000000000001b0d0 2651 FUNC GLOBAL DEFAULT 11 cupsResolveConflicts + 519: 0000000000018d90 1020 FUNC GLOBAL DEFAULT 11 _ppdNormalizeMakeAndModel + 520: 000000000002a220 114 FUNC GLOBAL DEFAULT 11 httpSetCookie + 521: 0000000000028360 725 FUNC GLOBAL DEFAULT 11 cupsPutFd + 522: 000000000002c110 58 FUNC GLOBAL DEFAULT 11 httpGet + 523: 0000000000267ea8 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 524: 000000000002f400 202 FUNC GLOBAL DEFAULT 11 httpGetDateString2 + 525: 000000000001da10 133 FUNC GLOBAL DEFAULT 11 cupsGetDest + 526: 0000000000026cf0 124 FUNC GLOBAL DEFAULT 11 cupsFilePeekChar + 527: 000000000004dcc0 748 FUNC GLOBAL DEFAULT 11 cupsSetServer + 528: 00000000000234a0 3707 FUNC GLOBAL DEFAULT 11 ppdEmitString + 529: 0000000000022830 139 FUNC GLOBAL DEFAULT 11 cupsFreeDestInfo + 530: 000000000004bca0 200 FUNC GLOBAL DEFAULT 11 _cupsStrStatistics + 531: 000000000004a700 102 FUNC GLOBAL DEFAULT 11 _cupsSNMPIsOIDPrefixed + 532: 0000000000029080 154 FUNC GLOBAL DEFAULT 11 httpAddCredential + 533: 0000000000025dc0 369 FUNC GLOBAL DEFAULT 11 cupsFileFind + 534: 00000000000337f0 178 FUNC GLOBAL DEFAULT 11 ippSetResolution + 535: 000000000001af90 319 FUNC GLOBAL DEFAULT 11 cupsGetConflicts + 536: 0000000000033900 69 FUNC GLOBAL DEFAULT 11 ippSetStatusCode + 537: 00000000000328e0 185 FUNC GLOBAL DEFAULT 11 ippAddOctetString + 538: 0000000000045150 311 FUNC GLOBAL DEFAULT 11 _ppdCacheGetMediaType + 539: 00000000000329a0 155 FUNC GLOBAL DEFAULT 11 ippDeleteValues + 540: 000000000002a930 626 FUNC GLOBAL DEFAULT 11 httpGets + 541: 0000000000031540 160 FUNC GLOBAL DEFAULT 11 ippAddInteger + 542: 0000000000030290 1339 FUNC GLOBAL DEFAULT 11 _httpResolveURI + 543: 0000000000049080 388 FUNC GLOBAL DEFAULT 11 cupsSideChannelSNMPGet + 544: 0000000000031260 121 FUNC GLOBAL DEFAULT 11 ippAddCollection + 545: 0000000000035eb0 770 FUNC GLOBAL DEFAULT 11 ippEnumValue + 546: 0000000000034750 103 FUNC GLOBAL DEFAULT 11 ippRead + 547: 000000000001bd10 136 FUNC GLOBAL DEFAULT 11 ppdFindCustomParam + 548: 0000000000029610 46 FUNC GLOBAL DEFAULT 11 _httpFreeCredentials + 549: 000000000001bda0 92 FUNC GLOBAL DEFAULT 11 ppdFirstCustomParam + 550: 000000000004e740 77 FUNC GLOBAL DEFAULT 11 cupsUser + 551: 0000000000032e80 113 FUNC GLOBAL DEFAULT 11 ippGetRange + 552: 000000000001df20 289 FUNC GLOBAL DEFAULT 11 _cupsGetDestResource + 553: 000000000002c850 58 FUNC GLOBAL DEFAULT 11 httpTrace + 554: 0000000000050590 537 FUNC GLOBAL DEFAULT 11 cupsGetPrinters + 555: 0000000000021d60 2185 FUNC GLOBAL DEFAULT 11 cupsCopyDestConflicts + 556: 0000000000025d20 69 FUNC GLOBAL DEFAULT 11 cupsFileCompression + 557: 00000000000301f0 76 FUNC GLOBAL DEFAULT 11 _httpDecodeURI + 558: 0000000000033700 145 FUNC GLOBAL DEFAULT 11 ippSetRange + 559: 0000000000029790 60 FUNC GLOBAL DEFAULT 11 httpGetFd + 560: 0000000000032e40 61 FUNC GLOBAL DEFAULT 11 ippGetOperation + 561: 000000000002a1a0 124 FUNC GLOBAL DEFAULT 11 httpSetCredentials + 562: 000000000003dbd0 64 FUNC GLOBAL DEFAULT 11 ppdPageLength + 563: 0000000000032ba0 69 FUNC GLOBAL DEFAULT 11 ippFirstAttribute + 564: 0000000000035660 103 FUNC GLOBAL DEFAULT 11 ippWrite + 565: 000000000003a460 137 FUNC GLOBAL DEFAULT 11 ppdIsMarked + 566: 00000000000337a0 69 FUNC GLOBAL DEFAULT 11 ippSetRequestId + 567: 0000000000044d00 428 FUNC GLOBAL DEFAULT 11 _ppdCacheGetFinishingOptions + 568: 0000000000018cc0 203 FUNC GLOBAL DEFAULT 11 ppdFindNextAttr + 569: 000000000002b020 710 FUNC GLOBAL DEFAULT 11 _httpPeek + 570: 000000000004c780 52 FUNC GLOBAL DEFAULT 11 _cupsRWInit + 571: 000000000002bb40 355 FUNC GLOBAL DEFAULT 11 httpPrintf + 572: 000000000002c7d0 58 FUNC GLOBAL DEFAULT 11 httpPost + 573: 0000000000032e00 59 FUNC GLOBAL DEFAULT 11 ippGetName + 574: 000000000001e9c0 158 FUNC GLOBAL DEFAULT 11 cupsRemoveDest + 575: 00000000000330d0 69 FUNC GLOBAL DEFAULT 11 ippGetValueTag + 576: 0000000000029d90 56 FUNC GLOBAL DEFAULT 11 httpGetVersion + 577: 0000000000018650 92 FUNC GLOBAL DEFAULT 11 cupsArrayLast + 578: 000000000002a680 146 FUNC GLOBAL DEFAULT 11 httpSetLength + 579: 000000000002abb0 744 FUNC GLOBAL DEFAULT 11 _httpUpdate + 580: 0000000000034870 184 FUNC GLOBAL DEFAULT 11 ippTimeToDate + 581: 0000000000035970 197 FUNC GLOBAL DEFAULT 11 ippOpString + 582: 000000000004e660 77 FUNC GLOBAL DEFAULT 11 cupsServer + 583: 0000000000045330 1301 FUNC GLOBAL DEFAULT 11 _ppdCacheGetPageSize + 584: 000000000004b170 1607 FUNC GLOBAL DEFAULT 11 _cupsSNMPWrite + 585: 0000000000044eb0 280 FUNC GLOBAL DEFAULT 11 _ppdCacheGetFinishingValues + 586: 0000000000044fd0 373 FUNC GLOBAL DEFAULT 11 _ppdCacheGetInputSlot + 587: 000000000004feb0 63 FUNC GLOBAL DEFAULT 11 cupsGetJobs + 588: 0000000000036fb0 454 FUNC GLOBAL DEFAULT 11 _cupsLangPrintFilter + 589: 0000000000018840 107 FUNC GLOBAL DEFAULT 11 _cupsArrayNewStrings + 590: 00000000000299e0 61 FUNC GLOBAL DEFAULT 11 httpGetStatus + 591: 0000000000019c60 329 FUNC GLOBAL DEFAULT 11 cupsBackChannelWrite + 592: 00000000000423d0 163 FUNC GLOBAL DEFAULT 11 _ppdOpenFile + 593: 0000000000045c10 1511 FUNC GLOBAL DEFAULT 11 _ppdCacheWriteFile + 594: 00000000000314b0 139 FUNC GLOBAL DEFAULT 11 ippAddOutOfBand + 595: 000000000002d780 75 FUNC GLOBAL DEFAULT 11 httpAddrFreeList + 596: 000000000001ea60 339 FUNC GLOBAL DEFAULT 11 cupsCopyDest + 597: 000000000001f190 134 FUNC GLOBAL DEFAULT 11 _cupsUserDefault + 598: 000000000002b860 195 FUNC GLOBAL DEFAULT 11 httpFlush + 599: 0000000000037760 92 FUNC GLOBAL DEFAULT 11 cupsLangFree + 600: 0000000000031380 137 FUNC GLOBAL DEFAULT 11 ippAddDate + 601: 000000000003cec0 534 FUNC GLOBAL DEFAULT 11 _cupsGet1284Values + 602: 00000000000469d0 209 FUNC GLOBAL DEFAULT 11 _pwgFormatMillimeters + 603: 000000000002f4d0 75 FUNC GLOBAL DEFAULT 11 httpGetDateString + 604: 000000000001fb60 136 FUNC GLOBAL DEFAULT 11 cupsFinishDestDocument + 605: 000000000004a550 303 FUNC GLOBAL DEFAULT 11 _cupsSNMPDefaultCommunity + 606: 00000000000243f0 1125 FUNC GLOBAL DEFAULT 11 ppdEmitJCL + 607: 00000000000426d0 510 FUNC GLOBAL DEFAULT 11 _ppdCacheDestroy + 608: 000000000001bc30 105 FUNC GLOBAL DEFAULT 11 ppdInstallableConflict + 609: 0000000000027a40 282 FUNC GLOBAL DEFAULT 11 cupsFilePutConf + 610: 0000000000033400 158 FUNC GLOBAL DEFAULT 11 ippSetCollection + 611: 00000000000325b0 179 FUNC GLOBAL DEFAULT 11 ippDelete + 612: 000000000003a3f0 105 FUNC GLOBAL DEFAULT 11 ppdFindMarkedChoice + 613: 000000000002d3e0 864 FUNC GLOBAL DEFAULT 11 httpAddrConnect2 + 614: 0000000000035a40 800 FUNC GLOBAL DEFAULT 11 ippEnumString + 615: 0000000000047930 57 FUNC GLOBAL DEFAULT 11 cupsLastError + 616: 00000000000347c0 77 FUNC GLOBAL DEFAULT 11 ippReadFile + 617: 000000000002feb0 110 FUNC GLOBAL DEFAULT 11 httpSeparate2 + 618: 00000000000218d0 1154 FUNC GLOBAL DEFAULT 11 cupsCheckDestSupported + 619: 000000000003c570 124 FUNC GLOBAL DEFAULT 11 cupsNotifyText + 620: 00000000000334a0 152 FUNC GLOBAL DEFAULT 11 ippSetDate + 621: 000000000002a430 359 FUNC GLOBAL DEFAULT 11 httpClearFields + 622: 0000000000029eb0 387 FUNC GLOBAL DEFAULT 11 _httpCreate + 623: 000000000004cde0 508 FUNC GLOBAL DEFAULT 11 cupsUTF8ToUTF32 + 624: 000000000004b070 249 FUNC GLOBAL DEFAULT 11 _cupsSNMPStringToOID + 625: 0000000000020280 227 FUNC GLOBAL DEFAULT 11 cupsLocalizeDestValue + 626: 000000000004dc50 101 FUNC GLOBAL DEFAULT 11 cupsSetPasswordCB2 + 627: 0000000000018800 56 FUNC GLOBAL DEFAULT 11 cupsArrayNew2 + 628: 00000000000296c0 62 FUNC GLOBAL DEFAULT 11 httpGetAuthString + 629: 0000000000018be0 218 FUNC GLOBAL DEFAULT 11 ppdFindAttr + 630: 0000000000048b20 223 FUNC GLOBAL DEFAULT 11 cupsDoFileRequest + 631: 0000000000029d50 56 FUNC GLOBAL DEFAULT 11 httpGetSubField + 632: 0000000000034930 3375 FUNC GLOBAL DEFAULT 11 ippWriteIO + 633: 00000000000477f0 313 FUNC GLOBAL DEFAULT 11 _pwgMediaForSize + 634: 000000000003c8a0 144 FUNC GLOBAL DEFAULT 11 cupsFreeOptions + 635: 00000000000186b0 257 FUNC GLOBAL DEFAULT 11 cupsArrayNew3 + 636: 0000000000026220 140 FUNC GLOBAL DEFAULT 11 cupsFileGetChar + 637: 0000000000050ae0 633 FUNC GLOBAL DEFAULT 11 cupsPrintFiles2 + 638: 0000000000027810 69 FUNC GLOBAL DEFAULT 11 cupsFileTell + 639: 000000000002ccd0 109 FUNC GLOBAL DEFAULT 11 _httpAddrPort + 640: 000000000002c150 58 FUNC GLOBAL DEFAULT 11 httpHead + 641: 000000000004e080 1396 FUNC GLOBAL DEFAULT 11 _cupsSetDefaults + 642: 000000000002b2f0 1384 FUNC GLOBAL DEFAULT 11 httpRead2 + 643: 0000000000018550 61 FUNC GLOBAL DEFAULT 11 cupsArrayGetInsert + 644: 00000000000356d0 85 FUNC GLOBAL DEFAULT 11 ippWriteFile + 645: 000000000001ec70 1233 FUNC GLOBAL DEFAULT 11 cupsSetDests2 + 646: 000000000001bca0 97 FUNC GLOBAL DEFAULT 11 ppdFindCustomOption + 647: 0000000000019e90 351 FUNC GLOBAL DEFAULT 11 cupsBackendDeviceURI + 648: 000000000003bdf0 194 FUNC GLOBAL DEFAULT 11 _cupsMD5Finish + 649: 000000000003bec0 115 FUNC GLOBAL DEFAULT 11 httpMD5String + 650: 000000000004c040 470 FUNC GLOBAL DEFAULT 11 _cupsStrFormatd + 651: 000000000004a8d0 1886 FUNC GLOBAL DEFAULT 11 _cupsSNMPRead + 652: 000000000001f220 692 FUNC GLOBAL DEFAULT 11 cupsGetDests2 + 653: 00000000000201e0 152 FUNC GLOBAL DEFAULT 11 cupsLocalizeDestOption + 654: 000000000004baf0 141 FUNC GLOBAL DEFAULT 11 _cupsStrFlush + 655: 000000000002c810 58 FUNC GLOBAL DEFAULT 11 httpPut + 656: 0000000000032fc0 57 FUNC GLOBAL DEFAULT 11 ippGetState + 657: 0000000000047a30 249 FUNC GLOBAL DEFAULT 11 _cupsSetError + 658: 0000000000034810 84 FUNC GLOBAL DEFAULT 11 ippSetVersion + 659: 0000000000029640 126 FUNC GLOBAL DEFAULT 11 httpFreeCredentials + 660: 00000000000184b0 92 FUNC GLOBAL DEFAULT 11 cupsArrayFirst + 661: 000000000001e5f0 973 FUNC GLOBAL DEFAULT 11 cupsEnumDests + 662: 00000000000338b0 73 FUNC GLOBAL DEFAULT 11 ippSetState + 663: 0000000000032420 164 FUNC GLOBAL DEFAULT 11 ippCopyAttributes + 664: 0000000000017fd0 506 FUNC GLOBAL DEFAULT 11 cupsArrayDup + 665: 000000000004f450 473 FUNC GLOBAL DEFAULT 11 cupsGetClasses + 666: 0000000000024a00 1717 FUNC GLOBAL DEFAULT 11 cupsEncodeOptions2 + 667: 0000000000035820 331 FUNC GLOBAL DEFAULT 11 ippErrorValue + 668: 000000000002b970 458 FUNC GLOBAL DEFAULT 11 httpWrite2 + 669: 000000000002c910 323 FUNC GLOBAL DEFAULT 11 dnsReloadResolver + 670: 0000000000025fe0 566 FUNC GLOBAL DEFAULT 11 cupsFileClose + 671: 000000000002c6e0 52 FUNC GLOBAL DEFAULT 11 httpConnect + 672: 000000000001fbf0 452 FUNC GLOBAL DEFAULT 11 cupsStartDestDocument + 673: 0000000000024320 132 FUNC GLOBAL DEFAULT 11 ppdEmitAfterOrder + 674: 000000000004db10 75 FUNC GLOBAL DEFAULT 11 cupsSetClientCertCB diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdbus-1.so.3.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdbus-1.so.3.txt new file mode 100644 index 000000000000..f6f1350a0b71 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdbus-1.so.3.txt @@ -0,0 +1,651 @@ +Library: /lib64/libdbus-1.so.3 +Package: dbus-libs-1.10.24-15.el7.x86_64 + + +Symbol table '.dynsym' contains 645 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.2.5 (4) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (4) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigprocmask@GLIBC_2.2.5 (4) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (5) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (4) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sd_is_socket@LIBSYSTEMD_209 (6) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (5) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (4) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (7) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (4) + 11: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresgid@GLIBC_2.2.5 (4) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.2.5 (4) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.2.5 (7) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.2.5 (4) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (4) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (4) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (7) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (8) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setenv@GLIBC_2.2.5 (4) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (7) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (4) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.3.2 (9) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir_r@GLIBC_2.2.5 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (4) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (4) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clearenv@GLIBC_2.2.5 (4) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.2.5 (4) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (4) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.2.5 (4) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.2.5 (4) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.2.5 (7) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (10) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (4) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept4@GLIBC_2.10 (11) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.2.5 (4) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.2.5 (7) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (7) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.2.5 (7) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nanosleep@GLIBC_2.2.5 (7) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.2.5 (4) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (4) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sd_listen_fds@LIBSYSTEMD_209 (6) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (4) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (4) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_destroy@GLIBC_2.2.5 (7) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (7) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.2.5 (4) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.2.5 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (4) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (7) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (4) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (9) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.2.5 (4) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (4) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (4) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.2.5 (4) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dirfd@GLIBC_2.2.5 (4) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.2.5 (4) + 61: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (4) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (12) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socketpair@GLIBC_2.2.5 (4) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresuid@GLIBC_2.2.5 (4) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.2.5 (4) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (4) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.3.2 (9) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (7) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.2.5 (7) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (4) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (4) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_getres@GLIBC_2.17 (8) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (4) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.2.5 (4) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.2.5 (4) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_setclock@GLIBC_2.3.3 (13) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.3.4 (5) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncpy_chk@GLIBC_2.3.4 (5) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (4) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam_r@GLIBC_2.2.5 (4) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.2.5 (7) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchmod@GLIBC_2.2.5 (4) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_init@GLIBC_2.2.5 (7) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.2.5 (4) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.2.5 (4) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.2.5 (4) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (4) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.2.5 (7) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.3.2 (9) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrouplist@GLIBC_2.2.5 (4) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.2.5 (7) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.3.2 (9) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (7) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (4) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.2.5 (4) + 97: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.2.5 (4) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unsetenv@GLIBC_2.2.5 (4) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.2.5 (7) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.2.5 (4) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (4) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execvp@GLIBC_2.2.5 (4) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (7) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (4) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (5) + 107: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.2.5 (4) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (4) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (7) + 111: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (4) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaddset@GLIBC_2.2.5 (4) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execv@GLIBC_2.2.5 (4) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.2.5 (7) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsprintf_chk@GLIBC_2.3.4 (5) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (7) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.2.5 (4) + 118: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (4) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (4) + 120: 0000000000033ca0 156 FUNC GLOBAL DEFAULT 12 _dbus_concat_dir_and_file@@LIBDBUS_PRIVATE_1.10.24 + 121: 0000000000022b40 383 FUNC GLOBAL DEFAULT 12 dbus_message_new_error@@LIBDBUS_1_3 + 122: 000000000002edd0 52 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_string@@LIBDBUS_PRIVATE_1.10.24 + 123: 000000000002d970 10 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_new@@LIBDBUS_PRIVATE_1.10.24 + 124: 0000000000031e40 201 FUNC GLOBAL DEFAULT 12 _dbus_string_replace_len@@LIBDBUS_PRIVATE_1.10.24 + 125: 0000000000031b20 169 FUNC GLOBAL DEFAULT 12 _dbus_string_append_printf_valist@@LIBDBUS_PRIVATE_1.10.24 + 126: 0000000000017f80 114 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_message_unix_fds@@LIBDBUS_1_3 + 127: 000000000002fdd0 52 FUNC GLOBAL DEFAULT 12 _dbus_list_pop_first@@LIBDBUS_PRIVATE_1.10.24 + 128: 0000000000022430 68 FUNC GLOBAL DEFAULT 12 dbus_message_has_interface@@LIBDBUS_1_3 + 129: 000000000002fe50 87 FUNC GLOBAL DEFAULT 12 _dbus_list_copy@@LIBDBUS_PRIVATE_1.10.24 + 130: 000000000001ac00 426 FUNC GLOBAL DEFAULT 12 _dbus_header_set_field_basic@@LIBDBUS_PRIVATE_1.10.24 + 131: 0000000000033410 80 FUNC GLOBAL DEFAULT 12 _dbus_pipe_write@@LIBDBUS_PRIVATE_1.10.24 + 132: 000000000002a190 130 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_next@@LIBDBUS_1_3 + 133: 0000000000012480 529 FUNC GLOBAL DEFAULT 12 dbus_bus_request_name@@LIBDBUS_1_3 + 134: 0000000000037d90 86 FUNC GLOBAL DEFAULT 12 _dbus_is_a_number@@LIBDBUS_PRIVATE_1.10.24 + 135: 0000000000027310 188 FUNC GLOBAL DEFAULT 12 dbus_server_set_auth_mechanisms@@LIBDBUS_1_3 + 136: 0000000000016000 190 FUNC GLOBAL DEFAULT 12 dbus_connection_send@@LIBDBUS_1_3 + 137: 00000000000273d0 15 FUNC GLOBAL DEFAULT 12 dbus_server_allocate_data_slot@@LIBDBUS_1_3 + 138: 0000000000030f70 71 FUNC GLOBAL DEFAULT 12 dbus_shutdown@@LIBDBUS_1_3 + 139: 000000000002a220 118 FUNC GLOBAL DEFAULT 12 dbus_signature_validate@@LIBDBUS_1_3 + 140: 000000000002df40 160 FUNC GLOBAL DEFAULT 12 dbus_watch_handle@@LIBDBUS_1_3 + 141: 00000000000271f0 277 FUNC GLOBAL DEFAULT 12 dbus_server_set_timeout_functions@@LIBDBUS_1_3 + 142: 000000000001fb20 489 FUNC GLOBAL DEFAULT 12 dbus_message_copy@@LIBDBUS_1_3 + 143: 00000000000281a0 92 FUNC GLOBAL DEFAULT 12 _dbus_create_uuid@@LIBDBUS_PRIVATE_1.10.24 + 144: 0000000000025d00 196 FUNC GLOBAL DEFAULT 12 dbus_pending_call_steal_reply@@LIBDBUS_1_3 + 145: 000000000024eef8 8 OBJECT GLOBAL DEFAULT 24 _dbus_no_memory_message@@LIBDBUS_PRIVATE_1.10.24 + 146: 0000000000023a40 68 FUNC GLOBAL DEFAULT 12 dbus_message_free_data_slot@@LIBDBUS_1_3 + 147: 0000000000026c70 118 FUNC GLOBAL DEFAULT 12 dbus_server_ref@@LIBDBUS_1_3 + 148: 0000000000025a90 14 FUNC GLOBAL DEFAULT 12 _dbus_pending_call_ref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 149: 0000000000031f10 179 FUNC GLOBAL DEFAULT 12 _dbus_string_find_eol@@LIBDBUS_PRIVATE_1.10.24 + 150: 000000000000ea00 1304 FUNC GLOBAL DEFAULT 12 dbus_parse_address@@LIBDBUS_1_3 + 151: 0000000000032240 82 FUNC GLOBAL DEFAULT 12 _dbus_string_skip_blank@@LIBDBUS_PRIVATE_1.10.24 + 152: 0000000000027430 227 FUNC GLOBAL DEFAULT 12 dbus_server_set_data@@LIBDBUS_1_3 + 153: 0000000000031600 39 FUNC GLOBAL DEFAULT 12 _dbus_string_init_const@@LIBDBUS_PRIVATE_1.10.24 + 154: 0000000000022cc0 407 FUNC GLOBAL DEFAULT 12 dbus_message_new_error_printf@@LIBDBUS_1_3 + 155: 00000000000114d0 39 FUNC GLOBAL DEFAULT 12 _dbus_auth_set_credentials@@LIBDBUS_PRIVATE_1.10.24 + 156: 000000000002a590 247 FUNC GLOBAL DEFAULT 12 dbus_validate_path@@LIBDBUS_1_3 + 157: 000000000001b930 134 FUNC GLOBAL DEFAULT 12 _dbus_marshal_byteswap@@LIBDBUS_PRIVATE_1.10.24 + 158: 0000000000031660 117 FUNC GLOBAL DEFAULT 12 _dbus_string_compact@@LIBDBUS_PRIVATE_1.10.24 + 159: 0000000000032440 85 FUNC GLOBAL DEFAULT 12 _dbus_string_equal@@LIBDBUS_PRIVATE_1.10.24 + 160: 00000000000309a0 392 FUNC GLOBAL DEFAULT 12 _dbus_type_to_string@@LIBDBUS_PRIVATE_1.10.24 + 161: 00000000000186a0 5 FUNC GLOBAL DEFAULT 12 _dbus_credentials_get_pid@@LIBDBUS_PRIVATE_1.10.24 + 162: 0000000000013a50 9 FUNC GLOBAL DEFAULT 12 _dbus_connection_set_pending_fds_function@@LIBDBUS_PRIVATE_1.10.24 + 163: 000000000002fcf0 52 FUNC GLOBAL DEFAULT 12 _dbus_list_find_last@@LIBDBUS_PRIVATE_1.10.24 + 164: 000000000002e860 92 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_remove_int@@LIBDBUS_PRIVATE_1.10.24 + 165: 000000000001fda0 71 FUNC GLOBAL DEFAULT 12 dbus_message_get_type@@LIBDBUS_1_3 + 166: 00000000000170a0 99 FUNC GLOBAL DEFAULT 12 dbus_connection_read_write_dispatch@@LIBDBUS_1_3 + 167: 00000000000324a0 99 FUNC GLOBAL DEFAULT 12 _dbus_string_equal_len@@LIBDBUS_PRIVATE_1.10.24 + 168: 0000000000032510 86 FUNC GLOBAL DEFAULT 12 _dbus_string_equal_substring@@LIBDBUS_PRIVATE_1.10.24 + 169: 0000000000033b80 10 FUNC GLOBAL DEFAULT 12 _dbus_atomic_dec@@LIBDBUS_PRIVATE_1.10.24 + 170: 0000000000011f70 13 FUNC GLOBAL DEFAULT 12 dbus_bus_get_private@@LIBDBUS_1_3 + 171: 00000000000266f0 5 FUNC GLOBAL DEFAULT 12 _dbus_server_ref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 172: 0000000000011f60 10 FUNC GLOBAL DEFAULT 12 dbus_bus_get@@LIBDBUS_1_3 + 173: 000000000002dc20 68 FUNC GLOBAL DEFAULT 12 dbus_watch_get_fd@@LIBDBUS_1_3 + 174: 00000000000174a0 198 FUNC GLOBAL DEFAULT 12 dbus_connection_try_register_object_path@@LIBDBUS_1_3 + 175: 0000000000011300 13 FUNC GLOBAL DEFAULT 12 _dbus_auth_bytes_sent@@LIBDBUS_PRIVATE_1.10.24 + 176: 00000000000360e0 359 FUNC GLOBAL DEFAULT 12 _dbus_printf_string_upper_bound@@LIBDBUS_PRIVATE_1.10.24 + 177: 000000000002def0 71 FUNC GLOBAL DEFAULT 12 dbus_watch_get_enabled@@LIBDBUS_1_3 + 178: 0000000000038330 89 FUNC GLOBAL DEFAULT 12 _dbus_username_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 179: 0000000000033b70 10 FUNC GLOBAL DEFAULT 12 _dbus_atomic_inc@@LIBDBUS_PRIVATE_1.10.24 + 180: 00000000000321d0 110 FUNC GLOBAL DEFAULT 12 _dbus_string_find_blank@@LIBDBUS_PRIVATE_1.10.24 + 181: 0000000000031d40 18 FUNC GLOBAL DEFAULT 12 _dbus_string_copy@@LIBDBUS_PRIVATE_1.10.24 + 182: 000000000002fef0 88 FUNC GLOBAL DEFAULT 12 _dbus_list_foreach@@LIBDBUS_PRIVATE_1.10.24 + 183: 0000000000013a60 110 FUNC GLOBAL DEFAULT 12 dbus_connection_ref@@LIBDBUS_1_3 + 184: 000000000002f320 85 FUNC GLOBAL DEFAULT 12 _dbus_uuid_encode@@LIBDBUS_PRIVATE_1.10.24 + 185: 000000000001cdd0 126 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_write_basic@@LIBDBUS_PRIVATE_1.10.24 + 186: 00000000000112e0 27 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_bytes_to_send@@LIBDBUS_PRIVATE_1.10.24 + 187: 0000000000031d20 32 FUNC GLOBAL DEFAULT 12 _dbus_string_delete@@LIBDBUS_PRIVATE_1.10.24 + 188: 000000000001c130 132 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_read_fixed_multi@@LIBDBUS_PRIVATE_1.10.24 + 189: 0000000000027b70 851 FUNC GLOBAL DEFAULT 12 _dbus_server_new_for_tcp_socket@@LIBDBUS_PRIVATE_1.10.24 + 190: 000000000002e770 36 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_lookup_string@@LIBDBUS_PRIVATE_1.10.24 + 191: 0000000000016720 131 FUNC GLOBAL DEFAULT 12 dbus_connection_open_private@@LIBDBUS_1_3 + 192: 0000000000018100 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_received_size@@LIBDBUS_1_3 + 193: 0000000000026150 120 FUNC GLOBAL DEFAULT 12 dbus_pending_call_get_data@@LIBDBUS_1_3 + 194: 0000000000033df0 9 FUNC GLOBAL DEFAULT 12 _dbus_exit@@LIBDBUS_PRIVATE_1.10.24 + 195: 000000000001cbd0 15 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_init_values_only@@LIBDBUS_PRIVATE_1.10.24 + 196: 00000000000184c0 4 FUNC GLOBAL DEFAULT 12 _dbus_credentials_ref@@LIBDBUS_PRIVATE_1.10.24 + 197: 00000000000140f0 202 FUNC GLOBAL DEFAULT 12 dbus_connection_set_wakeup_main_function@@LIBDBUS_1_3 + 198: 000000000002f280 157 FUNC GLOBAL DEFAULT 12 _dbus_generate_uuid@@LIBDBUS_PRIVATE_1.10.24 + 199: 000000000002feb0 49 FUNC GLOBAL DEFAULT 12 _dbus_list_get_length@@LIBDBUS_PRIVATE_1.10.24 + 200: 00000000000266e0 9 FUNC GLOBAL DEFAULT 12 _dbus_server_toggle_all_watches@@LIBDBUS_PRIVATE_1.10.24 + 201: 0000000000010e50 190 FUNC GLOBAL DEFAULT 12 _dbus_auth_unref@@LIBDBUS_PRIVATE_1.10.24 + 202: 000000000002d8c0 104 FUNC GLOBAL DEFAULT 12 _dbus_watch_new@@LIBDBUS_PRIVATE_1.10.24 + 203: 0000000000030e70 32 FUNC GLOBAL DEFAULT 12 dbus_realloc@@LIBDBUS_1_3 + 204: 0000000000021cd0 237 FUNC GLOBAL DEFAULT 12 dbus_message_append_args@@LIBDBUS_1_3 + 205: 0000000000031790 138 FUNC GLOBAL DEFAULT 12 _dbus_string_steal_data@@LIBDBUS_PRIVATE_1.10.24 + 206: 0000000000015810 746 FUNC GLOBAL DEFAULT 12 dbus_connection_send_with_reply@@LIBDBUS_1_3 + 207: 0000000000016150 164 FUNC GLOBAL DEFAULT 12 dbus_connection_close@@LIBDBUS_1_3 + 208: 0000000000030f30 62 FUNC GLOBAL DEFAULT 12 _dbus_register_shutdown_func@@LIBDBUS_PRIVATE_1.10.24 + 209: 0000000000038a00 181 FUNC GLOBAL DEFAULT 12 _dbus_string_parse_int@@LIBDBUS_PRIVATE_1.10.24 + 210: 0000000000013d70 122 FUNC GLOBAL DEFAULT 12 dbus_connection_set_exit_on_disconnect@@LIBDBUS_1_3 + 211: 00000000000318e0 5 FUNC GLOBAL DEFAULT 12 _dbus_string_set_length@@LIBDBUS_PRIVATE_1.10.24 + 212: 000000000001d860 744 FUNC GLOBAL DEFAULT 12 _dbus_validate_signature_with_reason@@LIBDBUS_PRIVATE_1.10.24 + 213: 0000000000023580 34 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_return_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 214: 0000000000020000 106 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_arg_type@@LIBDBUS_1_3 + 215: 0000000000012d60 221 FUNC GLOBAL DEFAULT 12 dbus_bus_remove_match@@LIBDBUS_1_3 + 216: 00000000000130d0 125 FUNC GLOBAL DEFAULT 12 _dbus_connection_unlock@@LIBDBUS_PRIVATE_1.10.24 + 217: 0000000000038da0 20 FUNC GLOBAL DEFAULT 12 _dbus_error_from_system_errno@@LIBDBUS_PRIVATE_1.10.24 + 218: 0000000000013a30 14 FUNC GLOBAL DEFAULT 12 _dbus_connection_ref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 219: 0000000000021fe0 100 FUNC GLOBAL DEFAULT 12 dbus_message_set_auto_start@@LIBDBUS_1_3 + 220: 0000000000018510 57 FUNC GLOBAL DEFAULT 12 _dbus_credentials_new_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 221: 0000000000020d50 270 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_element_count@@LIBDBUS_1_3 + 222: 0000000000023470 111 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_unref@@LIBDBUS_PRIVATE_1.10.24 + 223: 000000000002f920 88 FUNC GLOBAL DEFAULT 12 _dbus_list_get_stats@@LIBDBUS_PRIVATE_1.10.24 + 224: 000000000002fd30 34 FUNC GLOBAL DEFAULT 12 _dbus_list_remove_last@@LIBDBUS_PRIVATE_1.10.24 + 225: 00000000000318d0 12 FUNC GLOBAL DEFAULT 12 _dbus_string_shorten@@LIBDBUS_PRIVATE_1.10.24 + 226: 00000000000128b0 486 FUNC GLOBAL DEFAULT 12 dbus_bus_name_has_owner@@LIBDBUS_1_3 + 227: 000000000001b430 185 FUNC GLOBAL DEFAULT 12 _dbus_header_delete_field@@LIBDBUS_PRIVATE_1.10.24 + 228: 0000000000017b20 299 FUNC GLOBAL DEFAULT 12 dbus_connection_list_registered@@LIBDBUS_1_3 + 229: 0000000000025b40 72 FUNC GLOBAL DEFAULT 12 dbus_pending_call_ref@@LIBDBUS_1_3 + 230: 0000000000021500 650 FUNC GLOBAL DEFAULT 12 dbus_message_iter_open_container@@LIBDBUS_1_3 + 231: 00000000000315e0 26 FUNC GLOBAL DEFAULT 12 _dbus_string_init_const_len@@LIBDBUS_PRIVATE_1.10.24 + 232: 00000000000184d0 52 FUNC GLOBAL DEFAULT 12 _dbus_credentials_unref@@LIBDBUS_PRIVATE_1.10.24 + 233: 000000000002eed0 256 FUNC GLOBAL DEFAULT 12 _dbus_warn@@LIBDBUS_PRIVATE_1.10.24 + 234: 0000000000031e10 18 FUNC GLOBAL DEFAULT 12 _dbus_string_move@@LIBDBUS_PRIVATE_1.10.24 + 235: 000000000002a2a0 153 FUNC GLOBAL DEFAULT 12 dbus_signature_validate_single@@LIBDBUS_1_3 + 236: 0000000000019070 154 FUNC GLOBAL DEFAULT 12 dbus_move_error@@LIBDBUS_1_3 + 237: 0000000000032ca0 74 FUNC GLOBAL DEFAULT 12 _dbus_string_validate_nul@@LIBDBUS_PRIVATE_1.10.24 + 238: 000000000002e530 41 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_init@@LIBDBUS_PRIVATE_1.10.24 + 239: 0000000000013e60 172 FUNC GLOBAL DEFAULT 12 dbus_connection_free_preallocated_send@@LIBDBUS_1_3 + 240: 00000000000234e0 12 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_buffer@@LIBDBUS_PRIVATE_1.10.24 + 241: 00000000000122d0 430 FUNC GLOBAL DEFAULT 12 dbus_bus_get_id@@LIBDBUS_1_3 + 242: 000000000002dcd0 4 FUNC GLOBAL DEFAULT 12 _dbus_watch_get_pollable@@LIBDBUS_PRIVATE_1.10.24 + 243: 0000000000017c50 15 FUNC GLOBAL DEFAULT 12 dbus_connection_allocate_data_slot@@LIBDBUS_1_3 + 244: 0000000000010d70 201 FUNC GLOBAL DEFAULT 12 _dbus_auth_server_new@@LIBDBUS_PRIVATE_1.10.24 + 245: 0000000000017180 114 FUNC GLOBAL DEFAULT 12 dbus_connection_set_allow_anonymous@@LIBDBUS_1_3 + 246: 000000000002d940 15 FUNC GLOBAL DEFAULT 12 _dbus_watch_invalidate@@LIBDBUS_PRIVATE_1.10.24 + 247: 0000000000022530 133 FUNC GLOBAL DEFAULT 12 dbus_message_get_member@@LIBDBUS_1_3 + 248: 0000000000022480 165 FUNC GLOBAL DEFAULT 12 dbus_message_set_member@@LIBDBUS_1_3 + 249: 0000000000030fc0 100 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_new@@LIBDBUS_PRIVATE_1.10.24 + 250: 0000000000031140 21 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_dealloc@@LIBDBUS_PRIVATE_1.10.24 + 251: 0000000000023a90 227 FUNC GLOBAL DEFAULT 12 dbus_message_set_data@@LIBDBUS_1_3 + 252: 0000000000023460 7 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_ref@@LIBDBUS_PRIVATE_1.10.24 + 253: 0000000000023990 8 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_is_corrupted@@LIBDBUS_PRIVATE_1.10.24 + 254: 000000000002e560 122 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_next@@LIBDBUS_PRIVATE_1.10.24 + 255: 0000000000023170 132 FUNC GLOBAL DEFAULT 12 dbus_message_has_sender@@LIBDBUS_1_3 + 256: 0000000000022160 133 FUNC GLOBAL DEFAULT 12 dbus_message_get_path@@LIBDBUS_1_3 + 257: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS LIBDBUS_PRIVATE_1.10.24 + 258: 0000000000033ba0 20 FUNC GLOBAL DEFAULT 12 _dbus_poll@@LIBDBUS_PRIVATE_1.10.24 + 259: 000000000000efc0 214 FUNC GLOBAL DEFAULT 12 dbus_address_unescape_value@@LIBDBUS_1_3 + 260: 000000000002ea30 9 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_free_preallocated_entry@@LIBDBUS_PRIVATE_1.10.24 + 261: 000000000001fd10 134 FUNC GLOBAL DEFAULT 12 dbus_message_ref@@LIBDBUS_1_3 + 262: 00000000000322a0 59 FUNC GLOBAL DEFAULT 12 _dbus_string_skip_white@@LIBDBUS_PRIVATE_1.10.24 + 263: 0000000000017280 254 FUNC GLOBAL DEFAULT 12 dbus_connection_add_filter@@LIBDBUS_1_3 + 264: 00000000000141c0 202 FUNC GLOBAL DEFAULT 12 dbus_connection_set_dispatch_status_function@@LIBDBUS_1_3 + 265: 000000000002e800 89 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_remove_string@@LIBDBUS_PRIVATE_1.10.24 + 266: 0000000000026cf0 125 FUNC GLOBAL DEFAULT 12 dbus_server_unref@@LIBDBUS_1_3 + 267: 000000000002ed60 97 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_string_preallocated@@LIBDBUS_PRIVATE_1.10.24 + 268: 0000000000017e70 14 FUNC GLOBAL DEFAULT 12 dbus_connection_set_change_sigpipe@@LIBDBUS_1_3 + 269: 0000000000018180 114 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_received_unix_fds@@LIBDBUS_1_3 + 270: 0000000000010e40 7 FUNC GLOBAL DEFAULT 12 _dbus_auth_ref@@LIBDBUS_PRIVATE_1.10.24 + 271: 0000000000011310 15 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_buffer@@LIBDBUS_PRIVATE_1.10.24 + 272: 00000000000327c0 561 FUNC GLOBAL DEFAULT 12 _dbus_string_hex_decode@@LIBDBUS_PRIVATE_1.10.24 + 273: 00000000000318b0 27 FUNC GLOBAL DEFAULT 12 _dbus_string_lengthen@@LIBDBUS_PRIVATE_1.10.24 + 274: 0000000000021790 233 FUNC GLOBAL DEFAULT 12 dbus_message_iter_close_container@@LIBDBUS_1_3 + 275: 0000000000021e20 364 FUNC GLOBAL DEFAULT 12 dbus_message_new_signal@@LIBDBUS_1_3 + 276: 00000000000323d0 112 FUNC GLOBAL DEFAULT 12 _dbus_string_chop_white@@LIBDBUS_PRIVATE_1.10.24 + 277: 00000000000176d0 198 FUNC GLOBAL DEFAULT 12 dbus_connection_try_register_fallback@@LIBDBUS_1_3 + 278: 00000000000187f0 27 FUNC GLOBAL DEFAULT 12 _dbus_credentials_are_anonymous@@LIBDBUS_PRIVATE_1.10.24 + 279: 0000000000015d60 217 FUNC GLOBAL DEFAULT 12 dbus_connection_return_message@@LIBDBUS_1_3 + 280: 00000000000239d0 5 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_max_message_size@@LIBDBUS_PRIVATE_1.10.24 + 281: 000000000001c5f0 98 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_get_signature@@LIBDBUS_PRIVATE_1.10.24 + 282: 0000000000025ec0 190 FUNC GLOBAL DEFAULT 12 _dbus_pending_call_new_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 283: 000000000002dde0 82 FUNC GLOBAL DEFAULT 12 _dbus_watch_unref@@LIBDBUS_PRIVATE_1.10.24 + 284: 000000000001c0c0 47 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_read_basic@@LIBDBUS_PRIVATE_1.10.24 + 285: 000000000000e970 139 FUNC GLOBAL DEFAULT 12 dbus_address_entry_get_value@@LIBDBUS_1_3 + 286: 0000000000022240 165 FUNC GLOBAL DEFAULT 12 dbus_message_get_path_decomposed@@LIBDBUS_1_3 + 287: 0000000000021030 764 FUNC GLOBAL DEFAULT 12 dbus_message_iter_append_basic@@LIBDBUS_1_3 + 288: 0000000000027520 128 FUNC GLOBAL DEFAULT 12 dbus_server_get_data@@LIBDBUS_1_3 + 289: 0000000000036250 147 FUNC GLOBAL DEFAULT 12 _dbus_get_tmpdir@@LIBDBUS_PRIVATE_1.10.24 + 290: 0000000000011500 5 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_identity@@LIBDBUS_PRIVATE_1.10.24 + 291: 000000000002e7a0 44 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_lookup_int@@LIBDBUS_PRIVATE_1.10.24 + 292: 0000000000034750 105 FUNC GLOBAL DEFAULT 12 _dbus_ensure_directory@@LIBDBUS_PRIVATE_1.10.24 + 293: 0000000000031c90 78 FUNC GLOBAL DEFAULT 12 _dbus_string_append_len@@LIBDBUS_PRIVATE_1.10.24 + 294: 0000000000018ec0 181 FUNC GLOBAL DEFAULT 12 dbus_error_has_name@@LIBDBUS_1_3 + 295: 00000000000208d0 293 FUNC GLOBAL DEFAULT 12 dbus_message_get_args@@LIBDBUS_1_3 + 296: 00000000000221f0 68 FUNC GLOBAL DEFAULT 12 dbus_message_has_path@@LIBDBUS_1_3 + 297: 0000000000032120 14 FUNC GLOBAL DEFAULT 12 _dbus_string_find@@LIBDBUS_PRIVATE_1.10.24 + 298: 0000000000020800 203 FUNC GLOBAL DEFAULT 12 dbus_message_get_args_valist@@LIBDBUS_1_3 + 299: 0000000000032130 158 FUNC GLOBAL DEFAULT 12 _dbus_string_split_on_byte@@LIBDBUS_PRIVATE_1.10.24 + 300: 0000000000023030 165 FUNC GLOBAL DEFAULT 12 dbus_message_is_error@@LIBDBUS_1_3 + 301: 000000000002aed0 8 FUNC GLOBAL DEFAULT 12 dbus_timeout_get_enabled@@LIBDBUS_1_3 + 302: 0000000000017cb0 278 FUNC GLOBAL DEFAULT 12 dbus_connection_set_data@@LIBDBUS_1_3 + 303: 0000000000033730 37 FUNC GLOBAL DEFAULT 12 _dbus_write_socket_with_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 304: 00000000000186c0 5 FUNC GLOBAL DEFAULT 12 _dbus_credentials_get_windows_sid@@LIBDBUS_PRIVATE_1.10.24 + 305: 0000000000014800 211 FUNC GLOBAL DEFAULT 12 dbus_connection_set_windows_user_function@@LIBDBUS_1_3 + 306: 0000000000032700 190 FUNC GLOBAL DEFAULT 12 _dbus_string_hex_encode@@LIBDBUS_PRIVATE_1.10.24 + 307: 0000000000034d10 92 FUNC GLOBAL DEFAULT 12 _dbus_close@@LIBDBUS_PRIVATE_1.10.24 + 308: 0000000000033490 220 FUNC GLOBAL DEFAULT 12 _dbus_ensure_standard_fds@@LIBDBUS_PRIVATE_1.10.24 + 309: 0000000000030e10 19 FUNC GLOBAL DEFAULT 12 dbus_malloc@@LIBDBUS_1_3 + 310: 000000000002e490 156 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_unref@@LIBDBUS_PRIVATE_1.10.24 + 311: 000000000002fa10 31 FUNC GLOBAL DEFAULT 12 _dbus_list_append@@LIBDBUS_PRIVATE_1.10.24 + 312: 0000000000022a50 232 FUNC GLOBAL DEFAULT 12 dbus_message_new_method_return@@LIBDBUS_1_3 + 313: 000000000002b190 7 FUNC GLOBAL DEFAULT 12 dbus_threads_init_default@@LIBDBUS_1_3 + 314: 0000000000031200 10 FUNC GLOBAL DEFAULT 12 _dbus_pipe_init_stdout@@LIBDBUS_PRIVATE_1.10.24 + 315: 0000000000030e30 19 FUNC GLOBAL DEFAULT 12 dbus_malloc0@@LIBDBUS_1_3 + 316: 000000000002fd60 19 FUNC GLOBAL DEFAULT 12 _dbus_list_get_last@@LIBDBUS_PRIVATE_1.10.24 + 317: 000000000002fb10 80 FUNC GLOBAL DEFAULT 12 _dbus_list_insert_before_link@@LIBDBUS_PRIVATE_1.10.24 + 318: 0000000000033b90 6 FUNC GLOBAL DEFAULT 12 _dbus_atomic_get@@LIBDBUS_PRIVATE_1.10.24 + 319: 000000000002fa70 21 FUNC GLOBAL DEFAULT 12 _dbus_list_append_link@@LIBDBUS_PRIVATE_1.10.24 + 320: 0000000000018080 114 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_received_size@@LIBDBUS_1_3 + 321: 0000000000013ad0 119 FUNC GLOBAL DEFAULT 12 dbus_connection_get_is_connected@@LIBDBUS_1_3 + 322: 0000000000030440 42 FUNC GLOBAL DEFAULT 12 _dbus_marshal_read_uint32@@LIBDBUS_PRIVATE_1.10.24 + 323: 00000000000347c0 101 FUNC GLOBAL DEFAULT 12 _dbus_create_directory@@LIBDBUS_PRIVATE_1.10.24 + 324: 0000000000038e20 20 FUNC GLOBAL DEFAULT 12 _dbus_strerror_from_errno@@LIBDBUS_PRIVATE_1.10.24 + 325: 0000000000018630 110 FUNC GLOBAL DEFAULT 12 _dbus_credentials_include@@LIBDBUS_PRIVATE_1.10.24 + 326: 00000000000270d0 277 FUNC GLOBAL DEFAULT 12 dbus_server_set_watch_functions@@LIBDBUS_1_3 + 327: 000000000024eef0 8 OBJECT GLOBAL DEFAULT 24 _dbus_return_if_fail_warning_format@@LIBDBUS_PRIVATE_1.10.24 + 328: 000000000002aec0 13 FUNC GLOBAL DEFAULT 12 dbus_timeout_handle@@LIBDBUS_1_3 + 329: 0000000000030da0 2 FUNC GLOBAL DEFAULT 12 _dbus_verbose_bytes_of_string@@LIBDBUS_PRIVATE_1.10.24 + 330: 0000000000013a40 9 FUNC GLOBAL DEFAULT 12 _dbus_connection_get_pending_fds_count@@LIBDBUS_PRIVATE_1.10.24 + 331: 0000000000013cd0 151 FUNC GLOBAL DEFAULT 12 dbus_connection_can_send_type@@LIBDBUS_1_3 + 332: 0000000000022690 165 FUNC GLOBAL DEFAULT 12 dbus_message_set_error_name@@LIBDBUS_1_3 + 333: 0000000000018fd0 149 FUNC GLOBAL DEFAULT 12 dbus_set_error_const@@LIBDBUS_1_3 + 334: 000000000001d670 88 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_write_fixed_multi@@LIBDBUS_PRIVATE_1.10.24 + 335: 0000000000015d00 93 FUNC GLOBAL DEFAULT 12 dbus_connection_flush@@LIBDBUS_1_3 + 336: 00000000000315d0 4 FUNC GLOBAL DEFAULT 12 _dbus_string_init@@LIBDBUS_PRIVATE_1.10.24 + 337: 00000000000241e0 35 FUNC GLOBAL DEFAULT 12 dbus_get_version@@LIBDBUS_1_3 + 338: 000000000002fce0 13 FUNC GLOBAL DEFAULT 12 _dbus_list_get_last_link@@LIBDBUS_PRIVATE_1.10.24 + 339: 0000000000020eb0 198 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_fixed_array@@LIBDBUS_1_3 + 340: 0000000000014eb0 216 FUNC GLOBAL DEFAULT 12 dbus_connection_borrow_message@@LIBDBUS_1_3 + 341: 000000000002f990 5 FUNC GLOBAL DEFAULT 12 _dbus_list_free_link@@LIBDBUS_PRIVATE_1.10.24 + 342: 0000000000014750 171 FUNC GLOBAL DEFAULT 12 dbus_connection_get_windows_user@@LIBDBUS_1_3 + 343: 0000000000032d10 532 FUNC GLOBAL DEFAULT 12 _dbus_file_get_contents@@LIBDBUS_PRIVATE_1.10.24 + 344: 000000000002adb0 41 FUNC GLOBAL DEFAULT 12 dbus_timeout_set_data@@LIBDBUS_1_3 + 345: 0000000000026d70 157 FUNC GLOBAL DEFAULT 12 dbus_server_disconnect@@LIBDBUS_1_3 + 346: 0000000000033d40 176 FUNC GLOBAL DEFAULT 12 _dbus_sleep_milliseconds@@LIBDBUS_PRIVATE_1.10.24 + 347: 0000000000023be0 148 FUNC GLOBAL DEFAULT 12 dbus_message_type_from_string@@LIBDBUS_1_3 + 348: 00000000000177a0 347 FUNC GLOBAL DEFAULT 12 dbus_connection_register_fallback@@LIBDBUS_1_3 + 349: 0000000000018f80 71 FUNC GLOBAL DEFAULT 12 dbus_error_is_set@@LIBDBUS_1_3 + 350: 0000000000015e40 233 FUNC GLOBAL DEFAULT 12 dbus_connection_steal_borrowed_message@@LIBDBUS_1_3 + 351: 0000000000038c40 142 FUNC GLOBAL DEFAULT 12 _dbus_generate_random_ascii@@LIBDBUS_PRIVATE_1.10.24 + 352: 0000000000018200 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_received_unix_fds@@LIBDBUS_1_3 + 353: 0000000000013df0 112 FUNC GLOBAL DEFAULT 12 dbus_connection_preallocate_send@@LIBDBUS_1_3 + 354: 000000000002dce0 71 FUNC GLOBAL DEFAULT 12 dbus_watch_get_flags@@LIBDBUS_1_3 + 355: 000000000002e3b0 208 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_new@@LIBDBUS_PRIVATE_1.10.24 + 356: 0000000000017e80 114 FUNC GLOBAL DEFAULT 12 dbus_connection_set_max_message_size@@LIBDBUS_1_3 + 357: 000000000002e6c0 9 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_uintptr_key@@LIBDBUS_PRIVATE_1.10.24 + 358: 0000000000018a70 266 FUNC GLOBAL DEFAULT 12 _dbus_credentials_to_string_append@@LIBDBUS_PRIVATE_1.10.24 + 359: 0000000000014040 169 FUNC GLOBAL DEFAULT 12 dbus_connection_set_timeout_functions@@LIBDBUS_1_3 + 360: 0000000000030130 36 FUNC GLOBAL DEFAULT 12 _dbus_marshal_set_uint32@@LIBDBUS_PRIVATE_1.10.24 + 361: 000000000002abc0 18 FUNC GLOBAL DEFAULT 12 _dbus_timeout_set_enabled@@LIBDBUS_PRIVATE_1.10.24 + 362: 000000000002d930 7 FUNC GLOBAL DEFAULT 12 _dbus_watch_ref@@LIBDBUS_PRIVATE_1.10.24 + 363: 000000000002a090 169 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_get_signature@@LIBDBUS_1_3 + 364: 000000000002fba0 103 FUNC GLOBAL DEFAULT 12 _dbus_list_unlink@@LIBDBUS_PRIVATE_1.10.24 + 365: 000000000002a790 247 FUNC GLOBAL DEFAULT 12 dbus_validate_member@@LIBDBUS_1_3 + 366: 000000000002ff50 27 FUNC GLOBAL DEFAULT 12 _dbus_list_length_is_one@@LIBDBUS_PRIVATE_1.10.24 + 367: 000000000002e920 125 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_int@@LIBDBUS_PRIVATE_1.10.24 + 368: 0000000000026040 85 FUNC GLOBAL DEFAULT 12 dbus_pending_call_unref@@LIBDBUS_1_3 + 369: 0000000000031e30 5 FUNC GLOBAL DEFAULT 12 _dbus_string_copy_len@@LIBDBUS_PRIVATE_1.10.24 + 370: 000000000002ad90 4 FUNC GLOBAL DEFAULT 12 dbus_timeout_get_interval@@LIBDBUS_1_3 + 371: 0000000000031890 23 FUNC GLOBAL DEFAULT 12 _dbus_string_copy_to_buffer_with_nul@@LIBDBUS_PRIVATE_1.10.24 + 372: 000000000001d560 269 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_set_basic@@LIBDBUS_PRIVATE_1.10.24 + 373: 000000000002fda0 43 FUNC GLOBAL DEFAULT 12 _dbus_list_pop_first_link@@LIBDBUS_PRIVATE_1.10.24 + 374: 0000000000020f80 176 FUNC GLOBAL DEFAULT 12 dbus_message_iter_init_append@@LIBDBUS_1_3 + 375: 0000000000013f90 169 FUNC GLOBAL DEFAULT 12 dbus_connection_set_watch_functions@@LIBDBUS_1_3 + 376: 000000000002ab50 72 FUNC GLOBAL DEFAULT 12 _dbus_timeout_new@@LIBDBUS_PRIVATE_1.10.24 + 377: 0000000000021980 844 FUNC GLOBAL DEFAULT 12 dbus_message_append_args_valist@@LIBDBUS_1_3 + 378: 00000000000316f0 96 FUNC GLOBAL DEFAULT 12 _dbus_string_insert_bytes@@LIBDBUS_PRIVATE_1.10.24 + 379: 0000000000032ae0 438 FUNC GLOBAL DEFAULT 12 _dbus_string_validate_utf8@@LIBDBUS_PRIVATE_1.10.24 + 380: 00000000000235b0 901 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_queue_messages@@LIBDBUS_PRIVATE_1.10.24 + 381: 0000000000010f10 187 FUNC GLOBAL DEFAULT 12 _dbus_auth_client_new@@LIBDBUS_PRIVATE_1.10.24 + 382: 000000000002e5e0 30 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_remove_entry@@LIBDBUS_PRIVATE_1.10.24 + 383: 0000000000023b80 87 FUNC GLOBAL DEFAULT 12 dbus_message_get_data@@LIBDBUS_1_3 + 384: 0000000000022ef0 150 FUNC GLOBAL DEFAULT 12 dbus_message_is_method_call@@LIBDBUS_1_3 + 385: 00000000000186b0 5 FUNC GLOBAL DEFAULT 12 _dbus_credentials_get_unix_uid@@LIBDBUS_PRIVATE_1.10.24 + 386: 0000000000030db0 38 FUNC GLOBAL DEFAULT 12 _dbus_first_type_in_signature@@LIBDBUS_PRIVATE_1.10.24 + 387: 0000000000018300 239 FUNC GLOBAL DEFAULT 12 _dbus_connection_get_stats@@LIBDBUS_PRIVATE_1.10.24 + 388: 0000000000010fd0 76 FUNC GLOBAL DEFAULT 12 _dbus_auth_set_mechanisms@@LIBDBUS_PRIVATE_1.10.24 + 389: 0000000000021330 449 FUNC GLOBAL DEFAULT 12 dbus_message_iter_append_fixed_array@@LIBDBUS_1_3 + 390: 0000000000018280 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_outgoing_size@@LIBDBUS_1_3 + 391: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS LIBDBUS_1_3 + 392: 000000000001e900 5 FUNC GLOBAL DEFAULT 12 _dbus_validate_error_name@@LIBDBUS_PRIVATE_1.10.24 + 393: 0000000000031970 96 FUNC GLOBAL DEFAULT 12 _dbus_string_append@@LIBDBUS_PRIVATE_1.10.24 + 394: 00000000000230e0 132 FUNC GLOBAL DEFAULT 12 dbus_message_has_destination@@LIBDBUS_1_3 + 395: 0000000000018980 79 FUNC GLOBAL DEFAULT 12 _dbus_credentials_clear@@LIBDBUS_PRIVATE_1.10.24 + 396: 0000000000023c80 68 FUNC GLOBAL DEFAULT 12 dbus_message_type_to_string@@LIBDBUS_1_3 + 397: 0000000000018a20 75 FUNC GLOBAL DEFAULT 12 _dbus_credentials_same_user@@LIBDBUS_PRIVATE_1.10.24 + 398: 0000000000022050 91 FUNC GLOBAL DEFAULT 12 dbus_message_get_auto_start@@LIBDBUS_1_3 + 399: 0000000000033a40 16 FUNC GLOBAL DEFAULT 12 _dbus_getpid@@LIBDBUS_PRIVATE_1.10.24 + 400: 0000000000033a60 16 FUNC GLOBAL DEFAULT 12 _dbus_geteuid@@LIBDBUS_PRIVATE_1.10.24 + 401: 0000000000013f10 120 FUNC GLOBAL DEFAULT 12 dbus_connection_get_dispatch_status@@LIBDBUS_1_3 + 402: 0000000000031fd0 327 FUNC GLOBAL DEFAULT 12 _dbus_string_find_to@@LIBDBUS_PRIVATE_1.10.24 + 403: 0000000000016690 139 FUNC GLOBAL DEFAULT 12 dbus_connection_open@@LIBDBUS_1_3 + 404: 0000000000020070 1932 FUNC GLOBAL DEFAULT 12 _dbus_message_iter_get_args_valist@@LIBDBUS_PRIVATE_1.10.24 + 405: 0000000000017380 286 FUNC GLOBAL DEFAULT 12 dbus_connection_remove_filter@@LIBDBUS_1_3 + 406: 000000000002ea20 9 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_preallocate_entry@@LIBDBUS_PRIVATE_1.10.24 + 407: 0000000000011020 692 FUNC GLOBAL DEFAULT 12 _dbus_auth_do_work@@LIBDBUS_PRIVATE_1.10.24 + 408: 000000000001cd00 201 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_unrecurse@@LIBDBUS_PRIVATE_1.10.24 + 409: 0000000000025b90 161 FUNC GLOBAL DEFAULT 12 dbus_pending_call_set_notify@@LIBDBUS_1_3 + 410: 0000000000031630 40 FUNC GLOBAL DEFAULT 12 _dbus_string_free@@LIBDBUS_PRIVATE_1.10.24 + 411: 000000000001c050 52 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_get_current_type@@LIBDBUS_PRIVATE_1.10.24 + 412: 0000000000036440 381 FUNC GLOBAL DEFAULT 12 _dbus_lookup_user_bus@@LIBDBUS_PRIVATE_1.10.24 + 413: 000000000002fc10 18 FUNC GLOBAL DEFAULT 12 _dbus_list_remove_link@@LIBDBUS_PRIVATE_1.10.24 + 414: 0000000000033570 80 FUNC GLOBAL DEFAULT 12 _dbus_write_socket@@LIBDBUS_PRIVATE_1.10.24 + 415: 000000000001db50 143 FUNC GLOBAL DEFAULT 12 _dbus_validate_path@@LIBDBUS_PRIVATE_1.10.24 + 416: 0000000000011320 8 FUNC GLOBAL DEFAULT 12 _dbus_auth_return_buffer@@LIBDBUS_PRIVATE_1.10.24 + 417: 000000000002fc30 70 FUNC GLOBAL DEFAULT 12 _dbus_list_remove@@LIBDBUS_PRIVATE_1.10.24 + 418: 00000000000366f0 82 FUNC GLOBAL DEFAULT 12 _dbus_delete_directory@@LIBDBUS_PRIVATE_1.10.24 + 419: 0000000000022640 68 FUNC GLOBAL DEFAULT 12 dbus_message_has_member@@LIBDBUS_1_3 + 420: 000000000002abb0 4 FUNC GLOBAL DEFAULT 12 _dbus_timeout_set_interval@@LIBDBUS_PRIVATE_1.10.24 + 421: 0000000000033870 177 FUNC GLOBAL DEFAULT 12 _dbus_read@@LIBDBUS_PRIVATE_1.10.24 + 422: 0000000000025dd0 60 FUNC GLOBAL DEFAULT 12 dbus_pending_call_block@@LIBDBUS_1_3 + 423: 0000000000026f10 160 FUNC GLOBAL DEFAULT 12 dbus_server_get_id@@LIBDBUS_1_3 + 424: 0000000000037df0 405 FUNC GLOBAL DEFAULT 12 _dbus_user_database_lookup@@LIBDBUS_PRIVATE_1.10.24 + 425: 00000000000319d0 50 FUNC GLOBAL DEFAULT 12 _dbus_string_init_from_string@@LIBDBUS_PRIVATE_1.10.24 + 426: 000000000002f980 5 FUNC GLOBAL DEFAULT 12 _dbus_list_alloc_link@@LIBDBUS_PRIVATE_1.10.24 + 427: 0000000000021880 243 FUNC GLOBAL DEFAULT 12 dbus_message_iter_abandon_container@@LIBDBUS_1_3 + 428: 0000000000033930 5 FUNC GLOBAL DEFAULT 12 _dbus_read_socket@@LIBDBUS_PRIVATE_1.10.24 + 429: 0000000000023e50 351 FUNC GLOBAL DEFAULT 12 dbus_message_demarshal@@LIBDBUS_1_3 + 430: 000000000000ef20 148 FUNC GLOBAL DEFAULT 12 dbus_address_escape_value@@LIBDBUS_1_3 + 431: 0000000000014540 222 FUNC GLOBAL DEFAULT 12 dbus_connection_get_adt_audit_session_data@@LIBDBUS_1_3 + 432: 0000000000030e90 71 FUNC GLOBAL DEFAULT 12 dbus_free_string_array@@LIBDBUS_1_3 + 433: 000000000002ade0 49 FUNC GLOBAL DEFAULT 12 _dbus_timeout_unref@@LIBDBUS_PRIVATE_1.10.24 + 434: 000000000000e920 56 FUNC GLOBAL DEFAULT 12 dbus_address_entries_free@@LIBDBUS_1_3 + 435: 0000000000011330 24 FUNC GLOBAL DEFAULT 12 _dbus_auth_get_unused_bytes@@LIBDBUS_PRIVATE_1.10.24 + 436: 0000000000026000 54 FUNC GLOBAL DEFAULT 12 _dbus_pending_call_unref_and_unlock@@LIBDBUS_PRIVATE_1.10.24 + 437: 000000000002d980 281 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_set_functions@@LIBDBUS_PRIVATE_1.10.24 + 438: 0000000000022f90 150 FUNC GLOBAL DEFAULT 12 dbus_message_is_signal@@LIBDBUS_1_3 + 439: 000000000002d8a0 18 FUNC GLOBAL DEFAULT 12 _dbus_watch_set_oom_last_time@@LIBDBUS_PRIVATE_1.10.24 + 440: 0000000000031030 54 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_free@@LIBDBUS_PRIVATE_1.10.24 + 441: 0000000000023cd0 371 FUNC GLOBAL DEFAULT 12 dbus_message_marshal@@LIBDBUS_1_3 + 442: 0000000000038ac0 181 FUNC GLOBAL DEFAULT 12 _dbus_string_parse_uint@@LIBDBUS_PRIVATE_1.10.24 + 443: 0000000000022880 133 FUNC GLOBAL DEFAULT 12 dbus_message_get_destination@@LIBDBUS_1_3 + 444: 0000000000020c60 230 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_basic@@LIBDBUS_1_3 + 445: 000000000002fa90 122 FUNC GLOBAL DEFAULT 12 _dbus_list_insert_after@@LIBDBUS_PRIVATE_1.10.24 + 446: 0000000000023a30 15 FUNC GLOBAL DEFAULT 12 dbus_message_allocate_data_slot@@LIBDBUS_1_3 + 447: 0000000000017dd0 150 FUNC GLOBAL DEFAULT 12 dbus_connection_get_data@@LIBDBUS_1_3 + 448: 000000000001bf70 211 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_init_types_only@@LIBDBUS_PRIVATE_1.10.24 + 449: 0000000000017570 347 FUNC GLOBAL DEFAULT 12 dbus_connection_register_object_path@@LIBDBUS_1_3 + 450: 000000000002f9a0 97 FUNC GLOBAL DEFAULT 12 _dbus_list_prepend@@LIBDBUS_PRIVATE_1.10.24 + 451: 00000000000388c0 151 FUNC GLOBAL DEFAULT 12 _dbus_string_append_int@@LIBDBUS_PRIVATE_1.10.24 + 452: 00000000000126a0 513 FUNC GLOBAL DEFAULT 12 dbus_bus_release_name@@LIBDBUS_1_3 + 453: 0000000000023fb0 212 FUNC GLOBAL DEFAULT 12 dbus_message_demarshal_bytes_needed@@LIBDBUS_1_3 + 454: 000000000001ae30 103 FUNC GLOBAL DEFAULT 12 _dbus_header_get_field_raw@@LIBDBUS_PRIVATE_1.10.24 + 455: 0000000000032570 65 FUNC GLOBAL DEFAULT 12 _dbus_string_equal_c_str@@LIBDBUS_PRIVATE_1.10.24 + 456: 0000000000015b00 506 FUNC GLOBAL DEFAULT 12 dbus_connection_send_with_reply_and_block@@LIBDBUS_1_3 + 457: 00000000000143e0 171 FUNC GLOBAL DEFAULT 12 dbus_connection_get_unix_user@@LIBDBUS_1_3 + 458: 0000000000038960 151 FUNC GLOBAL DEFAULT 12 _dbus_string_append_uint@@LIBDBUS_PRIVATE_1.10.24 + 459: 0000000000015220 482 FUNC GLOBAL DEFAULT 12 dbus_connection_send_preallocated@@LIBDBUS_1_3 + 460: 0000000000014aa0 25 FUNC GLOBAL DEFAULT 12 _dbus_connection_unref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 461: 0000000000032aa0 51 FUNC GLOBAL DEFAULT 12 _dbus_string_toupper_ascii@@LIBDBUS_PRIVATE_1.10.24 + 462: 0000000000013b50 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_is_authenticated@@LIBDBUS_1_3 + 463: 00000000000120c0 522 FUNC GLOBAL DEFAULT 12 dbus_bus_get_unix_user@@LIBDBUS_1_3 + 464: 0000000000020a00 146 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_element_type@@LIBDBUS_1_3 + 465: 000000000002aa90 181 FUNC GLOBAL DEFAULT 12 dbus_validate_utf8@@LIBDBUS_1_3 + 466: 000000000001e970 38 FUNC GLOBAL DEFAULT 12 _dbus_validate_signature@@LIBDBUS_PRIVATE_1.10.24 + 467: 000000000002dd80 96 FUNC GLOBAL DEFAULT 12 dbus_watch_set_data@@LIBDBUS_1_3 + 468: 0000000000017200 122 FUNC GLOBAL DEFAULT 12 dbus_connection_set_route_peer_messages@@LIBDBUS_1_3 + 469: 000000000001bea0 195 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_init@@LIBDBUS_PRIVATE_1.10.24 + 470: 0000000000031230 7 FUNC GLOBAL DEFAULT 12 _dbus_pipe_invalidate@@LIBDBUS_PRIVATE_1.10.24 + 471: 0000000000037c60 34 FUNC GLOBAL DEFAULT 12 _dbus_group_info_free_allocated@@LIBDBUS_PRIVATE_1.10.24 + 472: 0000000000025c40 68 FUNC GLOBAL DEFAULT 12 dbus_pending_call_cancel@@LIBDBUS_1_3 + 473: 00000000000280f0 174 FUNC GLOBAL DEFAULT 12 dbus_internal_do_not_use_get_uuid@@LIBDBUS_1_3 + 474: 000000000001e7c0 192 FUNC GLOBAL DEFAULT 12 _dbus_validate_interface@@LIBDBUS_PRIVATE_1.10.24 + 475: 0000000000033c40 92 FUNC GLOBAL DEFAULT 12 _dbus_get_real_time@@LIBDBUS_PRIVATE_1.10.24 + 476: 000000000002fc80 78 FUNC GLOBAL DEFAULT 12 _dbus_list_clear@@LIBDBUS_PRIVATE_1.10.24 + 477: 000000000002a3e0 146 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_recurse@@LIBDBUS_1_3 + 478: 000000000002fcd0 4 FUNC GLOBAL DEFAULT 12 _dbus_list_get_first_link@@LIBDBUS_PRIVATE_1.10.24 + 479: 00000000000227d0 165 FUNC GLOBAL DEFAULT 12 dbus_message_set_destination@@LIBDBUS_1_3 + 480: 000000000001c2a0 46 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_next@@LIBDBUS_PRIVATE_1.10.24 + 481: 0000000000011f80 181 FUNC GLOBAL DEFAULT 12 dbus_bus_set_unique_name@@LIBDBUS_1_3 + 482: 0000000000037d50 34 FUNC GLOBAL DEFAULT 12 _dbus_user_info_free_allocated@@LIBDBUS_PRIVATE_1.10.24 + 483: 00000000000187c0 48 FUNC GLOBAL DEFAULT 12 _dbus_credentials_are_empty@@LIBDBUS_PRIVATE_1.10.24 + 484: 0000000000031070 206 FUNC GLOBAL DEFAULT 12 _dbus_mem_pool_alloc@@LIBDBUS_PRIVATE_1.10.24 + 485: 000000000002dbd0 67 FUNC GLOBAL DEFAULT 12 dbus_watch_get_unix_fd@@LIBDBUS_1_3 + 486: 000000000001e910 43 FUNC GLOBAL DEFAULT 12 _dbus_validate_bus_name@@LIBDBUS_PRIVATE_1.10.24 + 487: 000000000001f090 520 FUNC GLOBAL DEFAULT 12 dbus_message_unref@@LIBDBUS_1_3 + 488: 000000000001e300 177 FUNC GLOBAL DEFAULT 12 _dbus_validate_body_with_reason@@LIBDBUS_PRIVATE_1.10.24 + 489: 0000000000038110 25 FUNC GLOBAL DEFAULT 12 _dbus_user_database_get_uid@@LIBDBUS_PRIVATE_1.10.24 + 490: 000000000002ada0 5 FUNC GLOBAL DEFAULT 12 dbus_timeout_get_data@@LIBDBUS_1_3 + 491: 0000000000018e00 76 FUNC GLOBAL DEFAULT 12 dbus_error_init@@LIBDBUS_1_3 + 492: 0000000000023500 116 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_get_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 493: 0000000000035f80 347 FUNC GLOBAL DEFAULT 12 _dbus_socketpair@@LIBDBUS_PRIVATE_1.10.24 + 494: 0000000000020aa0 194 FUNC GLOBAL DEFAULT 12 dbus_message_iter_recurse@@LIBDBUS_1_3 + 495: 0000000000019110 256 FUNC GLOBAL DEFAULT 12 _dbus_set_error_valist@@LIBDBUS_PRIVATE_1.10.24 + 496: 000000000001c090 15 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_get_element_type@@LIBDBUS_PRIVATE_1.10.24 + 497: 0000000000021dc0 92 FUNC GLOBAL DEFAULT 12 dbus_message_set_no_reply@@LIBDBUS_1_3 + 498: 0000000000014620 211 FUNC GLOBAL DEFAULT 12 dbus_connection_set_unix_user_function@@LIBDBUS_1_3 + 499: 00000000000240f0 79 FUNC GLOBAL DEFAULT 12 dbus_message_get_allow_interactive_authorization@@LIBDBUS_1_3 + 500: 000000000001d6d0 15 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_write_reader@@LIBDBUS_PRIVATE_1.10.24 + 501: 000000000002deb0 49 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_remove_watch@@LIBDBUS_PRIVATE_1.10.24 + 502: 000000000001c1c0 224 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_recurse@@LIBDBUS_PRIVATE_1.10.24 + 503: 0000000000026700 45 FUNC GLOBAL DEFAULT 12 _dbus_server_unref_unlocked@@LIBDBUS_PRIVATE_1.10.24 + 504: 0000000000034840 50 FUNC GLOBAL DEFAULT 12 _dbus_fd_set_close_on_exec@@LIBDBUS_PRIVATE_1.10.24 + 505: 0000000000011350 27 FUNC GLOBAL DEFAULT 12 _dbus_auth_delete_unused_bytes@@LIBDBUS_PRIVATE_1.10.24 + 506: 0000000000024140 145 FUNC GLOBAL DEFAULT 12 dbus_get_local_machine_id@@LIBDBUS_1_3 + 507: 000000000001f590 19 FUNC GLOBAL DEFAULT 12 _dbus_message_get_unix_fds@@LIBDBUS_PRIVATE_1.10.24 + 508: 0000000000038690 22 FUNC GLOBAL DEFAULT 12 _dbus_clearenv@@LIBDBUS_PRIVATE_1.10.24 + 509: 0000000000016980 1545 FUNC GLOBAL DEFAULT 12 dbus_connection_dispatch@@LIBDBUS_1_3 + 510: 000000000002afa0 18 FUNC GLOBAL DEFAULT 12 _dbus_rmutex_unlock@@LIBDBUS_PRIVATE_1.10.24 + 511: 000000000001f7a0 187 FUNC GLOBAL DEFAULT 12 dbus_message_set_reply_serial@@LIBDBUS_1_3 + 512: 000000000002efd0 275 FUNC GLOBAL DEFAULT 12 _dbus_warn_check_failed@@LIBDBUS_PRIVATE_1.10.24 + 513: 0000000000025c90 101 FUNC GLOBAL DEFAULT 12 dbus_pending_call_get_completed@@LIBDBUS_1_3 + 514: 0000000000031750 50 FUNC GLOBAL DEFAULT 12 _dbus_string_insert_byte@@LIBDBUS_PRIVATE_1.10.24 + 515: 000000000001a480 7 FUNC GLOBAL DEFAULT 12 _dbus_header_get_byte_order@@LIBDBUS_PRIVATE_1.10.24 + 516: 0000000000022740 133 FUNC GLOBAL DEFAULT 12 dbus_message_get_error_name@@LIBDBUS_1_3 + 517: 0000000000031220 15 FUNC GLOBAL DEFAULT 12 _dbus_pipe_is_stdout_or_stderr@@LIBDBUS_PRIVATE_1.10.24 + 518: 0000000000032a60 51 FUNC GLOBAL DEFAULT 12 _dbus_string_tolower_ascii@@LIBDBUS_PRIVATE_1.10.24 + 519: 000000000001c660 36 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_init@@LIBDBUS_PRIVATE_1.10.24 + 520: 000000000002daa0 55 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_free@@LIBDBUS_PRIVATE_1.10.24 + 521: 00000000000234f0 5 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_return_buffer@@LIBDBUS_PRIVATE_1.10.24 + 522: 000000000002a080 10 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_get_current_type@@LIBDBUS_1_3 + 523: 0000000000012c70 229 FUNC GLOBAL DEFAULT 12 dbus_bus_add_match@@LIBDBUS_1_3 + 524: 0000000000013c50 120 FUNC GLOBAL DEFAULT 12 dbus_connection_get_server_id@@LIBDBUS_1_3 + 525: 000000000002a360 119 FUNC GLOBAL DEFAULT 12 dbus_type_is_container@@LIBDBUS_1_3 + 526: 000000000002e6d0 9 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_string_key@@LIBDBUS_PRIVATE_1.10.24 + 527: 000000000002fd80 19 FUNC GLOBAL DEFAULT 12 _dbus_list_get_first@@LIBDBUS_PRIVATE_1.10.24 + 528: 0000000000020e60 80 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_array_len@@LIBDBUS_1_3 + 529: 000000000002a500 132 FUNC GLOBAL DEFAULT 12 dbus_type_is_fixed@@LIBDBUS_1_3 + 530: 000000000002d890 10 FUNC GLOBAL DEFAULT 12 _dbus_watch_get_oom_last_time@@LIBDBUS_PRIVATE_1.10.24 + 531: 0000000000014f90 177 FUNC GLOBAL DEFAULT 12 dbus_connection_unref@@LIBDBUS_1_3 + 532: 00000000000365e0 5 FUNC GLOBAL DEFAULT 12 _dbus_flush_caches@@LIBDBUS_PRIVATE_1.10.24 + 533: 0000000000014290 213 FUNC GLOBAL DEFAULT 12 dbus_connection_get_socket@@LIBDBUS_1_3 + 534: 0000000000018470 77 FUNC GLOBAL DEFAULT 12 _dbus_credentials_new@@LIBDBUS_PRIVATE_1.10.24 + 535: 000000000001ff20 106 FUNC GLOBAL DEFAULT 12 dbus_message_iter_has_next@@LIBDBUS_1_3 + 536: 0000000000019210 291 FUNC GLOBAL DEFAULT 12 dbus_set_error@@LIBDBUS_1_3 + 537: 0000000000017900 254 FUNC GLOBAL DEFAULT 12 dbus_connection_unregister_object_path@@LIBDBUS_1_3 + 538: 00000000000189d0 73 FUNC GLOBAL DEFAULT 12 _dbus_credentials_copy@@LIBDBUS_PRIVATE_1.10.24 + 539: 000000000002e9a0 125 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_insert_uintptr@@LIBDBUS_PRIVATE_1.10.24 + 540: 0000000000012aa0 453 FUNC GLOBAL DEFAULT 12 dbus_bus_start_service_by_name@@LIBDBUS_1_3 + 541: 0000000000017c60 68 FUNC GLOBAL DEFAULT 12 dbus_connection_free_data_slot@@LIBDBUS_1_3 + 542: 0000000000026970 761 FUNC GLOBAL DEFAULT 12 dbus_server_listen@@LIBDBUS_1_3 + 543: 000000000002a890 247 FUNC GLOBAL DEFAULT 12 dbus_validate_error_name@@LIBDBUS_1_3 + 544: 0000000000037fc0 20 FUNC GLOBAL DEFAULT 12 _dbus_user_database_unlock_system@@LIBDBUS_PRIVATE_1.10.24 + 545: 0000000000033460 34 FUNC GLOBAL DEFAULT 12 _dbus_pipe_close@@LIBDBUS_PRIVATE_1.10.24 + 546: 0000000000022e60 131 FUNC GLOBAL DEFAULT 12 dbus_message_get_signature@@LIBDBUS_1_3 + 547: 0000000000031bd0 177 FUNC GLOBAL DEFAULT 12 _dbus_string_append_printf@@LIBDBUS_PRIVATE_1.10.24 + 548: 0000000000024090 92 FUNC GLOBAL DEFAULT 12 dbus_message_set_allow_interactive_authorization@@LIBDBUS_1_3 + 549: 000000000002a480 124 FUNC GLOBAL DEFAULT 12 dbus_type_is_basic@@LIBDBUS_1_3 + 550: 0000000000013310 119 FUNC GLOBAL DEFAULT 12 dbus_connection_has_messages_to_send@@LIBDBUS_1_3 + 551: 0000000000031210 8 FUNC GLOBAL DEFAULT 12 _dbus_pipe_is_valid@@LIBDBUS_PRIVATE_1.10.24 + 552: 0000000000026e10 125 FUNC GLOBAL DEFAULT 12 dbus_server_get_is_connected@@LIBDBUS_1_3 + 553: 00000000000130b0 22 FUNC GLOBAL DEFAULT 12 _dbus_connection_lock@@LIBDBUS_PRIVATE_1.10.24 + 554: 0000000000018700 177 FUNC GLOBAL DEFAULT 12 _dbus_credentials_are_superset@@LIBDBUS_PRIVATE_1.10.24 + 555: 0000000000013bd0 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_is_anonymous@@LIBDBUS_1_3 + 556: 0000000000011530 29 FUNC GLOBAL DEFAULT 12 _dbus_auth_set_context@@LIBDBUS_PRIVATE_1.10.24 + 557: 0000000000012040 120 FUNC GLOBAL DEFAULT 12 dbus_bus_get_unique_name@@LIBDBUS_1_3 + 558: 0000000000033bc0 122 FUNC GLOBAL DEFAULT 12 _dbus_get_monotonic_time@@LIBDBUS_PRIVATE_1.10.24 + 559: 0000000000032320 162 FUNC GLOBAL DEFAULT 12 _dbus_string_pop_line@@LIBDBUS_PRIVATE_1.10.24 + 560: 000000000001cbe0 135 FUNC GLOBAL DEFAULT 12 _dbus_type_writer_recurse@@LIBDBUS_PRIVATE_1.10.24 + 561: 00000000000223a0 133 FUNC GLOBAL DEFAULT 12 dbus_message_get_interface@@LIBDBUS_1_3 + 562: 0000000000017110 99 FUNC GLOBAL DEFAULT 12 dbus_connection_read_write@@LIBDBUS_1_3 + 563: 000000000001fdf0 293 FUNC GLOBAL DEFAULT 12 dbus_message_iter_init@@LIBDBUS_1_3 + 564: 0000000000020b70 229 FUNC GLOBAL DEFAULT 12 dbus_message_iter_get_signature@@LIBDBUS_1_3 + 565: 000000000000e960 4 FUNC GLOBAL DEFAULT 12 dbus_address_entry_get_method@@LIBDBUS_1_3 + 566: 0000000000014370 99 FUNC GLOBAL DEFAULT 12 dbus_connection_get_unix_fd@@LIBDBUS_1_3 + 567: 0000000000026fb0 186 FUNC GLOBAL DEFAULT 12 dbus_server_set_new_connection_function@@LIBDBUS_1_3 + 568: 0000000000033e00 28 FUNC GLOBAL DEFAULT 12 _dbus_strerror@@LIBDBUS_PRIVATE_1.10.24 + 569: 0000000000018550 10 FUNC GLOBAL DEFAULT 12 _dbus_credentials_add_pid@@LIBDBUS_PRIVATE_1.10.24 + 570: 0000000000018e50 109 FUNC GLOBAL DEFAULT 12 dbus_error_free@@LIBDBUS_1_3 + 571: 0000000000014490 171 FUNC GLOBAL DEFAULT 12 dbus_connection_get_unix_process_id@@LIBDBUS_1_3 + 572: 00000000000260a0 166 FUNC GLOBAL DEFAULT 12 dbus_pending_call_set_data@@LIBDBUS_1_3 + 573: 000000000001f9a0 383 FUNC GLOBAL DEFAULT 12 dbus_message_new_method_call@@LIBDBUS_1_3 + 574: 0000000000018560 10 FUNC GLOBAL DEFAULT 12 _dbus_credentials_add_unix_uid@@LIBDBUS_PRIVATE_1.10.24 + 575: 000000000001ff90 106 FUNC GLOBAL DEFAULT 12 dbus_message_iter_next@@LIBDBUS_1_3 + 576: 000000000001f860 141 FUNC GLOBAL DEFAULT 12 dbus_message_get_reply_serial@@LIBDBUS_1_3 + 577: 000000000001d4e0 117 FUNC GLOBAL DEFAULT 12 _dbus_type_reader_delete@@LIBDBUS_PRIVATE_1.10.24 + 578: 0000000000031ce0 54 FUNC GLOBAL DEFAULT 12 _dbus_string_append_byte@@LIBDBUS_PRIVATE_1.10.24 + 579: 000000000002e7d0 36 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_lookup_uintptr@@LIBDBUS_PRIVATE_1.10.24 + 580: 000000000001e940 43 FUNC GLOBAL DEFAULT 12 _dbus_validate_bus_namespace@@LIBDBUS_PRIVATE_1.10.24 + 581: 0000000000038cd0 200 FUNC GLOBAL DEFAULT 12 _dbus_error_from_errno@@LIBDBUS_PRIVATE_1.10.24 + 582: 0000000000030e50 18 FUNC GLOBAL DEFAULT 12 dbus_free@@LIBDBUS_1_3 + 583: 000000000002e660 9 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_value@@LIBDBUS_PRIVATE_1.10.24 + 584: 000000000002f220 81 FUNC GLOBAL DEFAULT 12 _dbus_string_array_contains@@LIBDBUS_PRIVATE_1.10.24 + 585: 000000000002fe10 52 FUNC GLOBAL DEFAULT 12 _dbus_list_pop_last@@LIBDBUS_PRIVATE_1.10.24 + 586: 0000000000025e10 79 FUNC GLOBAL DEFAULT 12 dbus_pending_call_allocate_data_slot@@LIBDBUS_1_3 + 587: 000000000002f0f0 68 FUNC GLOBAL DEFAULT 12 _dbus_strdup@@LIBDBUS_PRIVATE_1.10.24 + 588: 0000000000022910 165 FUNC GLOBAL DEFAULT 12 dbus_message_set_sender@@LIBDBUS_1_3 + 589: 00000000000229c0 133 FUNC GLOBAL DEFAULT 12 dbus_message_get_sender@@LIBDBUS_1_3 + 590: 00000000000325c0 104 FUNC GLOBAL DEFAULT 12 _dbus_string_starts_with_c_str@@LIBDBUS_PRIVATE_1.10.24 + 591: 000000000002fb60 64 FUNC GLOBAL DEFAULT 12 _dbus_list_insert_after_link@@LIBDBUS_PRIVATE_1.10.24 + 592: 0000000000038600 36 FUNC GLOBAL DEFAULT 12 _dbus_getenv@@LIBDBUS_PRIVATE_1.10.24 + 593: 000000000002af60 18 FUNC GLOBAL DEFAULT 12 _dbus_rmutex_lock@@LIBDBUS_PRIVATE_1.10.24 + 594: 0000000000023960 9 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_pop_message@@LIBDBUS_PRIVATE_1.10.24 + 595: 00000000000233b0 164 FUNC GLOBAL DEFAULT 12 _dbus_message_loader_new@@LIBDBUS_PRIVATE_1.10.24 + 596: 0000000000033ab0 21 FUNC GLOBAL DEFAULT 12 _dbus_append_user_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 597: 000000000002de40 107 FUNC GLOBAL DEFAULT 12 _dbus_watch_list_add_watch@@LIBDBUS_PRIVATE_1.10.24 + 598: 000000000001e880 127 FUNC GLOBAL DEFAULT 12 _dbus_validate_member@@LIBDBUS_PRIVATE_1.10.24 + 599: 00000000000386b0 517 FUNC GLOBAL DEFAULT 12 _dbus_split_paths_and_append@@LIBDBUS_PRIVATE_1.10.24 + 600: 0000000000015f30 105 FUNC GLOBAL DEFAULT 12 dbus_connection_pop_message@@LIBDBUS_1_3 + 601: 0000000000014700 70 FUNC GLOBAL DEFAULT 12 _dbus_connection_get_linux_security_label@@LIBDBUS_PRIVATE_1.10.24 + 602: 0000000000038390 89 FUNC GLOBAL DEFAULT 12 _dbus_homedir_from_current_process@@LIBDBUS_PRIVATE_1.10.24 + 603: 000000000001f8f0 162 FUNC GLOBAL DEFAULT 12 dbus_message_new@@LIBDBUS_1_3 + 604: 0000000000026e90 120 FUNC GLOBAL DEFAULT 12 dbus_server_get_address@@LIBDBUS_1_3 + 605: 0000000000017a00 283 FUNC GLOBAL DEFAULT 12 dbus_connection_get_object_path_data@@LIBDBUS_1_3 + 606: 0000000000023290 267 FUNC GLOBAL DEFAULT 12 dbus_set_error_from_message@@LIBDBUS_1_3 + 607: 00000000000367d0 316 FUNC GLOBAL DEFAULT 12 _dbus_close_all@@LIBDBUS_PRIVATE_1.10.24 + 608: 000000000002ee10 4 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_get_n_entries@@LIBDBUS_PRIVATE_1.10.24 + 609: 000000000002a140 78 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_get_element_type@@LIBDBUS_1_3 + 610: 000000000002e6b0 9 FUNC GLOBAL DEFAULT 12 _dbus_hash_iter_get_int_key@@LIBDBUS_PRIVATE_1.10.24 + 611: 000000000002dd30 65 FUNC GLOBAL DEFAULT 12 dbus_watch_get_data@@LIBDBUS_1_3 + 612: 000000000002a990 247 FUNC GLOBAL DEFAULT 12 dbus_validate_bus_name@@LIBDBUS_1_3 + 613: 0000000000038300 37 FUNC GLOBAL DEFAULT 12 _dbus_user_database_get_system@@LIBDBUS_PRIVATE_1.10.24 + 614: 000000000002fa30 59 FUNC GLOBAL DEFAULT 12 _dbus_list_prepend_link@@LIBDBUS_PRIVATE_1.10.24 + 615: 0000000000025e60 92 FUNC GLOBAL DEFAULT 12 dbus_pending_call_free_data_slot@@LIBDBUS_1_3 + 616: 0000000000011810 579 FUNC GLOBAL DEFAULT 12 dbus_bus_register@@LIBDBUS_1_3 + 617: 000000000002a690 247 FUNC GLOBAL DEFAULT 12 dbus_validate_interface@@LIBDBUS_1_3 + 618: 0000000000034d70 5 FUNC GLOBAL DEFAULT 12 _dbus_close_socket@@LIBDBUS_PRIVATE_1.10.24 + 619: 0000000000037f90 39 FUNC GLOBAL DEFAULT 12 _dbus_user_database_lock_system@@LIBDBUS_PRIVATE_1.10.24 + 620: 00000000000233a0 14 FUNC GLOBAL DEFAULT 12 dbus_message_contains_unix_fds@@LIBDBUS_1_3 + 621: 00000000000273e0 68 FUNC GLOBAL DEFAULT 12 dbus_server_free_data_slot@@LIBDBUS_1_3 + 622: 000000000002dc70 67 FUNC GLOBAL DEFAULT 12 dbus_watch_get_socket@@LIBDBUS_1_3 + 623: 00000000000311f0 3 FUNC GLOBAL DEFAULT 12 _dbus_pipe_init@@LIBDBUS_PRIVATE_1.10.24 + 624: 000000000002b0a0 234 FUNC GLOBAL DEFAULT 12 dbus_threads_init@@LIBDBUS_1_3 + 625: 000000000001f720 34 FUNC GLOBAL DEFAULT 12 dbus_message_lock@@LIBDBUS_1_3 + 626: 0000000000018570 52 FUNC GLOBAL DEFAULT 12 _dbus_credentials_add_windows_sid@@LIBDBUS_PRIVATE_1.10.24 + 627: 0000000000035eb0 145 FUNC GLOBAL DEFAULT 12 _dbus_dup@@LIBDBUS_PRIVATE_1.10.24 + 628: 00000000000220b0 165 FUNC GLOBAL DEFAULT 12 dbus_message_set_path@@LIBDBUS_1_3 + 629: 00000000000333a0 101 FUNC GLOBAL DEFAULT 12 _dbus_delete_file@@LIBDBUS_PRIVATE_1.10.24 + 630: 000000000002e8c0 89 FUNC GLOBAL DEFAULT 12 _dbus_hash_table_remove_uintptr@@LIBDBUS_PRIVATE_1.10.24 + 631: 00000000000222f0 165 FUNC GLOBAL DEFAULT 12 dbus_message_set_interface@@LIBDBUS_1_3 + 632: 000000000002a070 8 FUNC GLOBAL DEFAULT 12 dbus_signature_iter_init@@LIBDBUS_1_3 + 633: 0000000000018000 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_message_unix_fds@@LIBDBUS_1_3 + 634: 0000000000017f00 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_max_message_size@@LIBDBUS_1_3 + 635: 00000000000385d0 47 FUNC GLOBAL DEFAULT 12 dbus_setenv@@LIBDBUS_1_3 + 636: 0000000000023200 132 FUNC GLOBAL DEFAULT 12 dbus_message_has_signature@@LIBDBUS_1_3 + 637: 0000000000031820 69 FUNC GLOBAL DEFAULT 12 _dbus_string_copy_data@@LIBDBUS_PRIVATE_1.10.24 + 638: 00000000000183f0 117 FUNC GLOBAL DEFAULT 12 dbus_connection_get_outgoing_unix_fds@@LIBDBUS_1_3 + 639: 0000000000038480 33 FUNC GLOBAL DEFAULT 12 _dbus_user_database_get_username@@LIBDBUS_PRIVATE_1.10.24 + 640: 0000000000033a50 16 FUNC GLOBAL DEFAULT 12 _dbus_getuid@@LIBDBUS_PRIVATE_1.10.24 + 641: 000000000001f750 71 FUNC GLOBAL DEFAULT 12 dbus_message_get_serial@@LIBDBUS_1_3 + 642: 000000000001f5b0 92 FUNC GLOBAL DEFAULT 12 dbus_message_set_serial@@LIBDBUS_1_3 + 643: 000000000002a340 31 FUNC GLOBAL DEFAULT 12 dbus_type_is_valid@@LIBDBUS_1_3 + 644: 0000000000021f90 79 FUNC GLOBAL DEFAULT 12 dbus_message_get_no_reply@@LIBDBUS_1_3 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdl.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdl.so.2.txt new file mode 100644 index 000000000000..0acdb603841d --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdl.so.2.txt @@ -0,0 +1,46 @@ +Library: /lib64/libdl.so.2 +Package: glibc-2.17-326.el7_9.x86_64 + + +Symbol table '.dynsym' contains 40 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __asprintf@GLIBC_2.2.5 (6) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (6) + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_key_create + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_getspecific + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (6) + 7: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.2.5 (6) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (6) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __dcgettext@GLIBC_2.2.5 (6) + 10: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 11: 0000000000000000 0 OBJECT WEAK DEFAULT UND environ@GLIBC_2.2.5 (6) + 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (7) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_vsym@GLIBC_PRIVATE (8) + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_once + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_addr@GLIBC_PRIVATE (8) + 16: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _libc_intl_domainname@GLIBC_2.2.5 (6) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_sym@GLIBC_PRIVATE (8) + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_rtld_di_serinfo@GLIBC_PRIVATE (7) + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.2.5 (6) + 21: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 22: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_setspecific + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (6) + 24: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global@GLIBC_PRIVATE (7) + 25: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (6) + 26: 0000000000001070 52 FUNC GLOBAL DEFAULT 13 dlclose@@GLIBC_2.2.5 + 27: 00000000000017c0 79 FUNC GLOBAL DEFAULT 13 dlinfo@@GLIBC_2.3.3 + 28: 0000000000001690 48 FUNC GLOBAL DEFAULT 13 dladdr1@@GLIBC_2.3.3 + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.5 + 30: 00000000000010d0 113 FUNC GLOBAL DEFAULT 13 dlsym@@GLIBC_2.2.5 + 31: 0000000000001670 27 FUNC GLOBAL DEFAULT 13 dladdr@@GLIBC_2.2.5 + 32: 0000000000001010 79 FUNC GLOBAL DEFAULT 13 dlopen@@GLIBC_2.2.5 + 33: 00000000002030c0 8 OBJECT GLOBAL DEFAULT 26 _dlfcn_hook@@GLIBC_PRIVATE + 34: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.3 + 35: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.4 + 36: 00000000000018e0 85 FUNC GLOBAL DEFAULT 13 dlmopen@@GLIBC_2.3.4 + 37: 0000000000001340 503 FUNC GLOBAL DEFAULT 13 dlerror@@GLIBC_2.2.5 + 38: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 39: 0000000000001170 118 FUNC WEAK DEFAULT 13 dlvsym@@GLIBC_2.2.5 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdrm.so.2.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdrm.so.2.txt new file mode 100644 index 000000000000..f97ead8f85d4 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libdrm.so.2.txt @@ -0,0 +1,257 @@ +Library: /lib64/libdrm.so.2 +Package: libdrm-2.4.97-2.el7.x86_64 + + +Symbol table '.dynsym' contains 251 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (3) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (3) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (2) + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.2.5 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (4) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (2) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (5) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND log2@GLIBC_2.2.5 (6) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fscanf@GLIBC_2.2.5 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.2.5 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getdelim@GLIBC_2.2.5 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.2.5 (2) + 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realpath@GLIBC_2.3 (7) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (8) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.2.5 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vasprintf_chk@GLIBC_2.8 (9) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (2) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (2) + 47: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpagesize@GLIBC_2.2.5 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (3) + 50: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (2) + 52: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND usleep@GLIBC_2.2.5 (2) + 55: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (3) + 57: 0000000000007160 89 FUNC GLOBAL DEFAULT 11 drmAgpDeviceId + 58: 000000000000b9b0 363 FUNC GLOBAL DEFAULT 11 drmModeGetPlane + 59: 0000000000009930 127 FUNC GLOBAL DEFAULT 11 drmSLCreate + 60: 0000000000006da0 83 FUNC GLOBAL DEFAULT 11 drmAgpBind + 61: 000000000000c570 129 FUNC GLOBAL DEFAULT 11 drmModeCreateLease + 62: 0000000000008820 10 FUNC GLOBAL DEFAULT 11 drmGetRenderDeviceNameFromFd + 63: 0000000000005bc0 5 FUNC GLOBAL DEFAULT 11 drmFreeBusid + 64: 000000000000bf10 45 FUNC GLOBAL DEFAULT 11 drmModeAtomicAlloc + 65: 0000000000009d70 212 FUNC GLOBAL DEFAULT 11 drmSLLookupNeighbors + 66: 000000000000a460 18 FUNC GLOBAL DEFAULT 11 drmModeFreeCrtc + 67: 000000000000af20 156 FUNC GLOBAL DEFAULT 11 drmModeAttachMode + 68: 00000000000067d0 96 FUNC GLOBAL DEFAULT 11 drmCreateContext + 69: 0000000000008670 215 FUNC GLOBAL DEFAULT 11 drmGetNodeTypeFromFd + 70: 000000000000bb20 34 FUNC GLOBAL DEFAULT 11 drmModeFreePlane + 71: 0000000000006c20 34 FUNC GLOBAL DEFAULT 11 drmAgpRelease + 72: 00000000000082e0 40 FUNC GLOBAL DEFAULT 11 drmCommandNone + 73: 000000000000b910 154 FUNC GLOBAL DEFAULT 11 drmModeSetPlane + 74: 00000000000082d0 7 FUNC GLOBAL DEFAULT 11 drmOpen + 75: 000000000000b060 542 FUNC GLOBAL DEFAULT 11 drmModeGetProperty + 76: 000000000000a9b0 41 FUNC GLOBAL DEFAULT 11 drmModeRmFB + 77: 00000000000099b0 124 FUNC GLOBAL DEFAULT 11 drmSLDestroy + 78: 00000000000073b0 204 FUNC GLOBAL DEFAULT 11 drmError + 79: 00000000000083c0 259 FUNC GLOBAL DEFAULT 11 drmOpenOnceWithType + 80: 0000000000005aa0 64 FUNC GLOBAL DEFAULT 11 drmAvailable + 81: 0000000000009580 58 FUNC GLOBAL DEFAULT 11 drmHashLookup + 82: 00000000000069d0 96 FUNC GLOBAL DEFAULT 11 drmCreateDrawable + 83: 000000000000c130 34 FUNC GLOBAL DEFAULT 11 drmModeAtomicFree + 84: 0000000000003a68 0 FUNC GLOBAL DEFAULT 9 _init + 85: 000000000000a7d0 135 FUNC GLOBAL DEFAULT 11 drmModeAddFB + 86: 0000000000005cf0 104 FUNC GLOBAL DEFAULT 11 drmGetMagic + 87: 000000000000bcb0 433 FUNC GLOBAL DEFAULT 11 drmModeObjectGetProperties + 88: 0000000000007480 83 FUNC GLOBAL DEFAULT 11 drmCtlInstHandler + 89: 0000000000005e40 114 FUNC GLOBAL DEFAULT 11 drmRmMap + 90: 00000000000057f0 109 FUNC GLOBAL DEFAULT 11 drmOpenControl + 91: 0000000000005f40 311 FUNC GLOBAL DEFAULT 11 drmMarkBufs + 92: 0000000000006e00 87 FUNC GLOBAL DEFAULT 11 drmAgpUnbind + 93: 000000000000ae60 149 FUNC GLOBAL DEFAULT 11 drmModeGetEncoder + 94: 00000000000074e0 87 FUNC GLOBAL DEFAULT 11 drmCtlUninstHandler + 95: 0000000000008f20 302 FUNC GLOBAL DEFAULT 11 drmGetDeviceNameFromFd2 + 96: 0000000000006830 83 FUNC GLOBAL DEFAULT 11 drmSwitchToContext + 97: 000000000000af00 10 FUNC GLOBAL DEFAULT 11 drmModeGetConnector + 98: 00000000000088d0 221 FUNC GLOBAL DEFAULT 11 drmFreeDevice + 99: 0000000000007290 284 FUNC GLOBAL DEFAULT 11 drmWaitVBlank + 100: 0000000000008380 49 FUNC GLOBAL DEFAULT 11 drmCommandWriteRead + 101: 0000000000009bb0 307 FUNC GLOBAL DEFAULT 11 drmSLDelete + 102: 0000000000005710 217 FUNC GLOBAL DEFAULT 11 drmGetEntry + 103: 0000000000007100 89 FUNC GLOBAL DEFAULT 11 drmAgpVendorId + 104: 0000000000006ca0 144 FUNC GLOBAL DEFAULT 11 drmAgpAlloc + 105: 0000000000007230 87 FUNC GLOBAL DEFAULT 11 drmScatterGatherFree + 106: 000000000000a3f0 66 FUNC GLOBAL DEFAULT 11 drmModeFreeResources + 107: 000000000000c520 75 FUNC GLOBAL DEFAULT 11 drmModeDestroyPropertyBlob + 108: 0000000000006a30 75 FUNC GLOBAL DEFAULT 11 drmDestroyDrawable + 109: 0000000000006890 106 FUNC GLOBAL DEFAULT 11 drmSetContextFlags + 110: 000000000000a4d0 5 FUNC GLOBAL DEFAULT 11 drmModeFreeEncoder + 111: 000000000000b840 99 FUNC GLOBAL DEFAULT 11 drmModePageFlip + 112: 0000000000009100 102 FUNC GLOBAL DEFAULT 11 drmSyncobjHandleToFD + 113: 0000000000005bd0 161 FUNC GLOBAL DEFAULT 11 drmGetBusid + 114: 00000000000085a0 207 FUNC GLOBAL DEFAULT 11 drmGetDeviceNameFromFd + 115: 000000000000c070 14 FUNC GLOBAL DEFAULT 11 drmModeAtomicGetCursor + 116: 0000000000005b10 89 FUNC GLOBAL DEFAULT 11 drmGetCap + 117: 0000000000009e90 38 FUNC GLOBAL DEFAULT 11 drmSLFirst + 118: 000000000000ad70 120 FUNC GLOBAL DEFAULT 11 drmModeSetCursor2 + 119: 0000000000006bf0 34 FUNC GLOBAL DEFAULT 11 drmAgpAcquire + 120: 00000000000058d0 50 FUNC GLOBAL DEFAULT 11 drmFreeVersion + 121: 0000000000005c80 105 FUNC GLOBAL DEFAULT 11 drmSetBusid + 122: 0000000000005650 13 FUNC GLOBAL DEFAULT 11 drmMalloc + 123: 000000000000b600 96 FUNC GLOBAL DEFAULT 11 drmModeCrtcGetGamma + 124: 0000000000009770 46 FUNC GLOBAL DEFAULT 11 drmHashFirst + 125: 0000000000007990 1088 FUNC GLOBAL DEFAULT 11 drmGetStats + 126: 0000000000005350 337 FUNC GLOBAL DEFAULT 11 drmMsg + 127: 0000000000005910 396 FUNC GLOBAL DEFAULT 11 drmGetVersion + 128: 00000000000076a0 20 FUNC GLOBAL DEFAULT 11 drmDelContextTag + 129: 000000000000b2b0 217 FUNC GLOBAL DEFAULT 11 drmModeGetPropertyBlob + 130: 0000000000006b80 100 FUNC GLOBAL DEFAULT 11 drmCrtcQueueSequence + 131: 0000000000008750 91 FUNC GLOBAL DEFAULT 11 drmPrimeHandleToFD + 132: 0000000000009370 76 FUNC GLOBAL DEFAULT 11 drmSyncobjSignal + 133: 0000000000005340 8 FUNC GLOBAL DEFAULT 11 drmSetServerInfo + 134: 0000000000009cf0 116 FUNC GLOBAL DEFAULT 11 drmSLLookup + 135: 0000000000006240 281 FUNC GLOBAL DEFAULT 11 drmGetBufInfo + 136: 0000000000007780 112 FUNC GLOBAL DEFAULT 11 drmGetContextPrivateMapping + 137: 000000000000b660 96 FUNC GLOBAL DEFAULT 11 drmModeCrtcSetGamma + 138: 00000000000060e0 168 FUNC GLOBAL DEFAULT 11 drmClose + 139: 0000000000008830 159 FUNC GLOBAL DEFAULT 11 drmDevicesEqual + 140: 0000000000009860 105 FUNC GLOBAL DEFAULT 11 drmRandomDouble + 141: 00000000000077f0 208 FUNC GLOBAL DEFAULT 11 drmGetMap + 142: 0000000000008aa0 63 FUNC GLOBAL DEFAULT 11 drmFreeDevices + 143: 000000000000a9e0 172 FUNC GLOBAL DEFAULT 11 drmModeGetFB + 144: 000000000000ad00 107 FUNC GLOBAL DEFAULT 11 drmModeSetCursor + 145: 00000000000096e0 130 FUNC GLOBAL DEFAULT 11 drmHashNext + 146: 00000000000078c0 200 FUNC GLOBAL DEFAULT 11 drmGetClient + 147: 0000000000008f10 15 FUNC GLOBAL DEFAULT 11 drmGetDevices + 148: 0000000000008590 12 FUNC GLOBAL DEFAULT 11 drmDropMaster + 149: 000000000000c490 129 FUNC GLOBAL DEFAULT 11 drmModeCreatePropertyBlob + 150: 0000000000009520 93 FUNC GLOBAL DEFAULT 11 drmHashDestroy + 151: 000000000000adf0 110 FUNC GLOBAL DEFAULT 11 drmModeMoveCursor + 152: 00000000000084e0 157 FUNC GLOBAL DEFAULT 11 drmCloseOnce + 153: 000000000000b3c0 86 FUNC GLOBAL DEFAULT 11 drmModeConnectorSetProperty + 154: 000000000000a860 260 FUNC GLOBAL DEFAULT 11 drmModeAddFB2WithModifiers + 155: 0000000000005d60 75 FUNC GLOBAL DEFAULT 11 drmAuthMagic + 156: 00000000002102b0 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 157: 000000000000ac10 232 FUNC GLOBAL DEFAULT 11 drmModeSetCrtc + 158: 0000000000009170 94 FUNC GLOBAL DEFAULT 11 drmSyncobjFDToHandle + 159: 0000000000005ec0 120 FUNC GLOBAL DEFAULT 11 drmAddBufs + 160: 0000000000006a80 99 FUNC GLOBAL DEFAULT 11 drmUpdateDrawableInfo + 161: 000000000000bf40 132 FUNC GLOBAL DEFAULT 11 drmModeAtomicDuplicate + 162: 0000000000009050 85 FUNC GLOBAL DEFAULT 11 drmSyncobjCreate + 163: 000000000000b6c0 379 FUNC GLOBAL DEFAULT 11 drmHandleEvent + 164: 0000000000007540 146 FUNC GLOBAL DEFAULT 11 drmFinish + 165: 00000000000071c0 112 FUNC GLOBAL DEFAULT 11 drmScatterGatherAlloc + 166: 000000000000a480 66 FUNC GLOBAL DEFAULT 11 drmModeFreeConnector + 167: 0000000000005db0 136 FUNC GLOBAL DEFAULT 11 drmAddMap + 168: 00000000000095c0 163 FUNC GLOBAL DEFAULT 11 drmHashInsert + 169: 000000000000a3d0 18 FUNC GLOBAL DEFAULT 11 drmModeFreeModeInfo + 170: 0000000000007dd0 133 FUNC GLOBAL DEFAULT 11 drmSetInterfaceVersion + 171: 000000000000bfd0 145 FUNC GLOBAL DEFAULT 11 drmModeAtomicMerge + 172: 0000000000007e60 1126 FUNC GLOBAL DEFAULT 11 drmOpenWithType + 173: 000000000000b8b0 95 FUNC GLOBAL DEFAULT 11 drmModePageFlipTarget + 174: 000000000000c080 9 FUNC GLOBAL DEFAULT 11 drmModeAtomicSetCursor + 175: 0000000000006fe0 91 FUNC GLOBAL DEFAULT 11 drmAgpSize + 176: 000000000000c6e0 217 FUNC GLOBAL DEFAULT 11 drmModeGetLease + 177: 0000000000007040 91 FUNC GLOBAL DEFAULT 11 drmAgpMemoryUsed + 178: 000000000000bb50 299 FUNC GLOBAL DEFAULT 11 drmModeGetPlaneResources + 179: 0000000000005660 5 FUNC GLOBAL DEFAULT 11 drmFree + 180: 00000000000064f0 208 FUNC GLOBAL DEFAULT 11 drmDMA + 181: 00000000000076c0 89 FUNC GLOBAL DEFAULT 11 drmGetContextTag + 182: 0000000000006ec0 96 FUNC GLOBAL DEFAULT 11 drmAgpVersionMinor + 183: 000000000000bea0 99 FUNC GLOBAL DEFAULT 11 drmModeObjectSetProperty + 184: 0000000000210cb0 0 NOTYPE GLOBAL DEFAULT 23 _end + 185: 0000000000008810 7 FUNC GLOBAL DEFAULT 11 drmGetPrimaryDeviceNameFromFd + 186: 0000000000008d70 13 FUNC GLOBAL DEFAULT 11 drmGetDevice + 187: 00000000000091d0 85 FUNC GLOBAL DEFAULT 11 drmSyncobjImportSyncFile + 188: 0000000000009500 32 FUNC GLOBAL DEFAULT 11 drmHashCreate + 189: 000000000000a4e0 745 FUNC GLOBAL DEFAULT 11 drmModeGetResources + 190: 000000000000c81c 0 FUNC GLOBAL DEFAULT 12 _fini + 191: 00000000000087b0 85 FUNC GLOBAL DEFAULT 11 drmPrimeFDToHandle + 192: 0000000000008350 48 FUNC GLOBAL DEFAULT 11 drmCommandWrite + 193: 00000000000084d0 13 FUNC GLOBAL DEFAULT 11 drmOpenOnce + 194: 00000000002102b0 0 NOTYPE GLOBAL DEFAULT 22 _edata + 195: 0000000000005ae0 39 FUNC GLOBAL DEFAULT 11 drmGetLibVersion + 196: 0000000000006900 112 FUNC GLOBAL DEFAULT 11 drmGetContextFlags + 197: 000000000000af10 7 FUNC GLOBAL DEFAULT 11 drmModeGetConnectorCurrent + 198: 00000000000065c0 151 FUNC GLOBAL DEFAULT 11 drmGetLock + 199: 0000000000006f80 91 FUNC GLOBAL DEFAULT 11 drmAgpBase + 200: 000000000000c160 802 FUNC GLOBAL DEFAULT 11 drmModeAtomicCommit + 201: 0000000000006c50 76 FUNC GLOBAL DEFAULT 11 drmAgpEnable + 202: 0000000000006660 70 FUNC GLOBAL DEFAULT 11 drmUnlock + 203: 0000000000007720 90 FUNC GLOBAL DEFAULT 11 drmAddContextPrivateMapping + 204: 0000000000008d80 399 FUNC GLOBAL DEFAULT 11 drmGetDevices2 + 205: 000000000000ab00 257 FUNC GLOBAL DEFAULT 11 drmModeGetCrtc + 206: 000000000000b280 42 FUNC GLOBAL DEFAULT 11 drmModeFreeProperty + 207: 0000000000006e60 96 FUNC GLOBAL DEFAULT 11 drmAgpVersionMajor + 208: 0000000000007650 70 FUNC GLOBAL DEFAULT 11 drmAddContextTag + 209: 000000000000b390 34 FUNC GLOBAL DEFAULT 11 drmModeFreePropertyBlob + 210: 0000000000009820 16 FUNC GLOBAL DEFAULT 11 drmRandomDestroy + 211: 00000000000070a0 91 FUNC GLOBAL DEFAULT 11 drmAgpMemoryAvail + 212: 000000000000c090 146 FUNC GLOBAL DEFAULT 11 drmModeAtomicAddProperty + 213: 0000000000005860 109 FUNC GLOBAL DEFAULT 11 drmOpenRender + 214: 0000000000006080 88 FUNC GLOBAL DEFAULT 11 drmFreeBufs + 215: 0000000000009230 102 FUNC GLOBAL DEFAULT 11 drmSyncobjExportSyncFile + 216: 000000000000bc80 34 FUNC GLOBAL DEFAULT 11 drmModeFreePlaneResources + 217: 0000000000006f20 91 FUNC GLOBAL DEFAULT 11 drmAgpGetMode + 218: 0000000000009830 48 FUNC GLOBAL DEFAULT 11 drmRandom + 219: 000000000000a970 50 FUNC GLOBAL DEFAULT 11 drmModeAddFB2 + 220: 000000000000c7c0 92 FUNC GLOBAL DEFAULT 11 drmModeRevokeLease + 221: 0000000000005640 8 FUNC GLOBAL DEFAULT 11 drmGetHashTable + 222: 00000000000075e0 104 FUNC GLOBAL DEFAULT 11 drmGetInterruptFromBusID + 223: 00000000000067c0 5 FUNC GLOBAL DEFAULT 11 drmFreeReservedContextList + 224: 0000000000006190 158 FUNC GLOBAL DEFAULT 11 drmMap + 225: 0000000000006d30 105 FUNC GLOBAL DEFAULT 11 drmAgpFree + 226: 0000000000006970 83 FUNC GLOBAL DEFAULT 11 drmDestroyContext + 227: 0000000000005b70 69 FUNC GLOBAL DEFAULT 11 drmSetClientCap + 228: 0000000000009a30 373 FUNC GLOBAL DEFAULT 11 drmSLInsert + 229: 0000000000009ec0 282 FUNC GLOBAL DEFAULT 11 drmSLDump + 230: 0000000000008580 12 FUNC GLOBAL DEFAULT 11 drmSetMaster + 231: 0000000000009670 107 FUNC GLOBAL DEFAULT 11 drmHashDelete + 232: 00000000000097a0 122 FUNC GLOBAL DEFAULT 11 drmRandomCreate + 233: 00000000000066b0 265 FUNC GLOBAL DEFAULT 11 drmGetReservedContextList + 234: 0000000000006360 297 FUNC GLOBAL DEFAULT 11 drmMapBufs + 235: 000000000000c600 217 FUNC GLOBAL DEFAULT 11 drmModeListLessees + 236: 0000000000006490 83 FUNC GLOBAL DEFAULT 11 drmUnmapBufs + 237: 000000000000be70 42 FUNC GLOBAL DEFAULT 11 drmModeFreeObjectProperties + 238: 00000000000092a0 128 FUNC GLOBAL DEFAULT 11 drmSyncobjWait + 239: 00000000000056b0 87 FUNC GLOBAL DEFAULT 11 drmIoctl + 240: 0000000000006af0 137 FUNC GLOBAL DEFAULT 11 drmCrtcGetSequence + 241: 0000000000008ae0 652 FUNC GLOBAL DEFAULT 11 drmGetDevice2 + 242: 0000000000008310 49 FUNC GLOBAL DEFAULT 11 drmCommandRead + 243: 000000000000aa90 104 FUNC GLOBAL DEFAULT 11 drmModeDirtyFB + 244: 000000000000a440 18 FUNC GLOBAL DEFAULT 11 drmModeFreeFB + 245: 000000000000afc0 156 FUNC GLOBAL DEFAULT 11 drmModeDetachMode + 246: 0000000000006230 7 FUNC GLOBAL DEFAULT 11 drmUnmap + 247: 0000000000009e50 55 FUNC GLOBAL DEFAULT 11 drmSLNext + 248: 0000000000009320 76 FUNC GLOBAL DEFAULT 11 drmSyncobjReset + 249: 000000000000b420 471 FUNC GLOBAL DEFAULT 11 drmCheckModesettingSupported + 250: 00000000000090b0 70 FUNC GLOBAL DEFAULT 11 drmSyncobjDestroy diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libexpat.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libexpat.so.1.txt new file mode 100644 index 000000000000..6d05850c9f61 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libexpat.so.1.txt @@ -0,0 +1,110 @@ +Library: /lib64/libexpat.so.1 +Package: expat-2.1.0-15.el7_9.x86_64 + + +Symbol table '.dynsym' contains 104 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND srand@GLIBC_2.2.5 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (2) + 8: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (4) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.2.5 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 15: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 16: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rand@GLIBC_2.2.5 (2) + 18: 000000000001b210 738 FUNC GLOBAL DEFAULT 11 XmlInitUnknownEncoding + 19: 000000000000e4a0 9 FUNC GLOBAL DEFAULT 11 XML_FreeContentModel + 20: 000000000000da40 8 FUNC GLOBAL DEFAULT 11 XML_SetEndDoctypeDeclHandler + 21: 000000000000e330 48 FUNC GLOBAL DEFAULT 11 XML_GetParsingStatus + 22: 000000000001b510 8 FUNC GLOBAL DEFAULT 11 XmlGetUtf16InternalEncoding + 23: 000000000000e4c0 15 FUNC GLOBAL DEFAULT 11 XML_MemRealloc + 24: 000000000001b520 85 FUNC GLOBAL DEFAULT 11 XmlInitEncoding + 25: 000000000000e570 8 FUNC GLOBAL DEFAULT 11 XML_ExpatVersion + 26: 000000000000db50 27 FUNC GLOBAL DEFAULT 11 XML_SetHashSalt + 27: 000000000000da30 8 FUNC GLOBAL DEFAULT 11 XML_SetStartDoctypeDeclHandler + 28: 000000000000cfb0 2229 FUNC GLOBAL DEFAULT 11 XML_ExternalEntityParserCreate + 29: 000000000000dd00 764 FUNC GLOBAL DEFAULT 11 XML_GetBuffer + 30: 000000000000e450 71 FUNC GLOBAL DEFAULT 11 XML_GetCurrentColumnNumber + 31: 000000000000d9f0 8 FUNC GLOBAL DEFAULT 11 XML_SetEndCdataSectionHandler + 32: 000000000000d9e0 8 FUNC GLOBAL DEFAULT 11 XML_SetStartCdataSectionHandler + 33: 000000000000e390 35 FUNC GLOBAL DEFAULT 11 XML_GetCurrentByteCount + 34: 000000000000e4e0 82 FUNC GLOBAL DEFAULT 11 XML_DefaultCurrent + 35: 000000000001b6a0 26 FUNC GLOBAL DEFAULT 11 XmlInitUnknownEncodingNS + 36: 000000000000e580 24 FUNC GLOBAL DEFAULT 11 XML_ExpatVersionInfo + 37: 000000000001b1a0 84 FUNC GLOBAL DEFAULT 11 XmlUtf16Encode + 38: 000000000000e3c0 52 FUNC GLOBAL DEFAULT 11 XML_GetInputContext + 39: 000000000000dab0 8 FUNC GLOBAL DEFAULT 11 XML_SetExternalEntityRefHandler + 40: 000000000000d950 7 FUNC GLOBAL DEFAULT 11 XML_GetSpecifiedAttributeCount + 41: 000000000000d8d0 21 FUNC GLOBAL DEFAULT 11 XML_SetUserData + 42: 000000000000e540 35 FUNC GLOBAL DEFAULT 11 XML_ErrorString + 43: 000000000000d970 9 FUNC GLOBAL DEFAULT 11 XML_SetElementHandler + 44: 000000000000da70 15 FUNC GLOBAL DEFAULT 11 XML_SetNamespaceDeclHandler + 45: 000000000001d30c 0 FUNC GLOBAL DEFAULT 12 _fini + 46: 000000000001b200 6 FUNC GLOBAL DEFAULT 11 XmlSizeOfUnknownEncoding + 47: 000000000000d960 7 FUNC GLOBAL DEFAULT 11 XML_GetIdAttributeIndex + 48: 000000000000db00 8 FUNC GLOBAL DEFAULT 11 XML_SetAttlistDeclHandler + 49: 000000000000d8b0 25 FUNC GLOBAL DEFAULT 11 XML_SetReturnNSTriplet + 50: 000000000000dae0 15 FUNC GLOBAL DEFAULT 11 XML_SetUnknownEncodingHandler + 51: 000000000000d9d0 15 FUNC GLOBAL DEFAULT 11 XML_SetCdataSectionHandler + 52: 000000000001b650 79 FUNC GLOBAL DEFAULT 11 XmlParseXmlDeclNS + 53: 000000000000da20 15 FUNC GLOBAL DEFAULT 11 XML_SetDoctypeDeclHandler + 54: 000000000000da00 15 FUNC GLOBAL DEFAULT 11 XML_SetDefaultHandler + 55: 0000000000003c30 0 FUNC GLOBAL DEFAULT 9 _init + 56: 000000000001d2f0 25 FUNC GLOBAL DEFAULT 11 XmlPrologStateInitExternalEntity + 57: 000000000000d9a0 5 FUNC GLOBAL DEFAULT 11 XML_SetCharacterDataHandler + 58: 000000000000cf50 9 FUNC GLOBAL DEFAULT 11 XML_ParserCreate + 59: 000000000001b5d0 8 FUNC GLOBAL DEFAULT 11 XmlGetUtf8InternalEncodingNS + 60: 000000000000db30 26 FUNC GLOBAL DEFAULT 11 XML_SetParamEntityParsing + 61: 000000000000e4d0 9 FUNC GLOBAL DEFAULT 11 XML_MemFree + 62: 000000000000daf0 8 FUNC GLOBAL DEFAULT 11 XML_SetElementDeclHandler + 63: 000000000000e4b0 9 FUNC GLOBAL DEFAULT 11 XML_MemMalloc + 64: 000000000000da80 8 FUNC GLOBAL DEFAULT 11 XML_SetStartNamespaceDeclHandler + 65: 000000000001b5e0 8 FUNC GLOBAL DEFAULT 11 XmlGetUtf16InternalEncodingNS + 66: 000000000000db70 386 FUNC GLOBAL DEFAULT 11 XML_ParseBuffer + 67: 000000000000d880 34 FUNC GLOBAL DEFAULT 11 XML_UseForeignDTD + 68: 000000000000c7f0 79 FUNC GLOBAL DEFAULT 11 XML_SetEncoding + 69: 000000000000d870 5 FUNC GLOBAL DEFAULT 11 XML_UseParserAsHandlerArg + 70: 000000000000da90 8 FUNC GLOBAL DEFAULT 11 XML_SetEndNamespaceDeclHandler + 71: 000000000000d990 5 FUNC GLOBAL DEFAULT 11 XML_SetEndElementHandler + 72: 000000000000e400 75 FUNC GLOBAL DEFAULT 11 XML_GetCurrentLineNumber + 73: 000000000000db20 8 FUNC GLOBAL DEFAULT 11 XML_SetXmlDeclHandler + 74: 000000000000d9b0 8 FUNC GLOBAL DEFAULT 11 XML_SetProcessingInstructionHandler + 75: 000000000001afc0 192 FUNC GLOBAL DEFAULT 11 XmlUtf8Encode + 76: 000000000000d980 5 FUNC GLOBAL DEFAULT 11 XML_SetStartElementHandler + 77: 000000000000dad0 8 FUNC GLOBAL DEFAULT 11 XML_SetSkippedEntityHandler + 78: 000000000000e240 234 FUNC GLOBAL DEFAULT 11 XML_ResumeParser + 79: 000000000000db10 8 FUNC GLOBAL DEFAULT 11 XML_SetEntityDeclHandler + 80: 000000000000c840 656 FUNC GLOBAL DEFAULT 11 XML_ParserFree + 81: 000000000000daa0 8 FUNC GLOBAL DEFAULT 11 XML_SetNotStandaloneHandler + 82: 000000000000cf40 7 FUNC GLOBAL DEFAULT 11 XML_ParserCreate_MM + 83: 000000000000cf60 69 FUNC GLOBAL DEFAULT 11 XML_ParserCreateNS + 84: 000000000022a0d8 0 NOTYPE GLOBAL DEFAULT 22 _edata + 85: 000000000000da50 8 FUNC GLOBAL DEFAULT 11 XML_SetUnparsedEntityDeclHandler + 86: 000000000000d8f0 76 FUNC GLOBAL DEFAULT 11 XML_SetBase + 87: 000000000000d940 8 FUNC GLOBAL DEFAULT 11 XML_GetBase + 88: 000000000001b500 8 FUNC GLOBAL DEFAULT 11 XmlGetUtf8InternalEncoding + 89: 000000000000dac0 15 FUNC GLOBAL DEFAULT 11 XML_SetExternalEntityRefHandlerArg + 90: 000000000001d2d0 32 FUNC GLOBAL DEFAULT 11 XmlPrologStateInit + 91: 000000000022a0e0 0 NOTYPE GLOBAL DEFAULT 23 _end + 92: 000000000000d9c0 8 FUNC GLOBAL DEFAULT 11 XML_SetCommentHandler + 93: 000000000001b580 79 FUNC GLOBAL DEFAULT 11 XmlParseXmlDecl + 94: 000000000000e1c0 128 FUNC GLOBAL DEFAULT 11 XML_StopParser + 95: 000000000000e360 7 FUNC GLOBAL DEFAULT 11 XML_GetErrorCode + 96: 000000000000e5a0 8 FUNC GLOBAL DEFAULT 11 XML_GetFeatureList + 97: 000000000000da10 15 FUNC GLOBAL DEFAULT 11 XML_SetDefaultHandlerExpand + 98: 000000000000e000 447 FUNC GLOBAL DEFAULT 11 XML_Parse + 99: 000000000001b5f0 85 FUNC GLOBAL DEFAULT 11 XmlInitEncodingNS + 100: 000000000000c3c0 1059 FUNC GLOBAL DEFAULT 11 XML_ParserReset + 101: 000000000000da60 8 FUNC GLOBAL DEFAULT 11 XML_SetNotationDeclHandler + 102: 000000000022a0d8 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 103: 000000000000e370 29 FUNC GLOBAL DEFAULT 11 XML_GetCurrentByteIndex diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libfreetype.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libfreetype.so.6.txt new file mode 100644 index 000000000000..0d000ab88b01 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libfreetype.so.6.txt @@ -0,0 +1,704 @@ +Library: /lib64/libfreetype.so.6 +Package: freetype-2.8-14.el7_9.1.x86_64 + + +Symbol table '.dynsym' contains 698 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_IHDR@PNG15_0 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_palette_to_rgb@PNG15_0 (3) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (2) + 8: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflate + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_read_struct@PNG15_0 (3) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (4) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_filler@PNG15_0 (3) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_interlace_handling@PNG15_0 (3) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BZ2_bzDecompressInit + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_image@PNG15_0 (3) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BZ2_bzDecompressEnd + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_packing@PNG15_0 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_valid@PNG15_0 (3) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_end@PNG15_0 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.2.5 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_gray_to_rgb@PNG15_0 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_info@PNG15_0 (3) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat64@GLIBC_2.2.5 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_error_ptr@PNG15_0 (3) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (5) + 37: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (6) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateEnd + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_get_io_ptr@PNG15_0 (3) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap64@GLIBC_2.2.5 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BZ2_bzDecompress + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_fn@PNG15_0 (3) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_read_update_info@PNG15_0 (3) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_error@PNG15_0 (3) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_read_user_transform_fn@PNG15_0 (3) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __longjmp_chk@GLIBC_2.11 (7) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open64@GLIBC_2.2.5 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_strip_16@PNG15_0 (3) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_create_info_struct@PNG15_0 (3) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_tRNS_to_alpha@PNG15_0 (3) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit2_ + 58: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.2.5 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateReset + 61: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_destroy_read_struct@PNG15_0 (3) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_longjmp_fn@PNG15_0 (3) + 64: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND png_set_expand_gray_1_2_4_to_8@PNG15_0 (3) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (5) + 68: 00000000002bda20 40 OBJECT GLOBAL DEFAULT 19 af_arab_script_class + 69: 00000000002bcf60 40 OBJECT GLOBAL DEFAULT 19 af_sinh_script_class + 70: 0000000000077ca0 175 FUNC GLOBAL DEFAULT 11 FTC_Manager_Lookup_Size + 71: 000000000001eb00 307 FUNC GLOBAL DEFAULT 11 FT_CMap_Done + 72: 000000000001ec40 309 FUNC GLOBAL DEFAULT 11 FT_CMap_New + 73: 000000000001eef0 129 FUNC GLOBAL DEFAULT 11 ft_hash_str_init + 74: 00000000002bdce0 32 OBJECT GLOBAL DEFAULT 19 t1_cmap_classes + 75: 0000000000091a20 20 OBJECT GLOBAL DEFAULT 13 af_latn_dflt_style_class + 76: 0000000000091f60 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_ordn_style_class + 77: 00000000002bd6e0 40 OBJECT GLOBAL DEFAULT 19 af_deva_script_class + 78: 000000000001f7e0 53 FUNC GLOBAL DEFAULT 11 FT_List_Add + 79: 000000000001bf30 71 FUNC GLOBAL DEFAULT 11 FT_Tan + 80: 00000000002bd260 40 OBJECT GLOBAL DEFAULT 19 af_latp_script_class + 81: 000000000001a3a0 56 FUNC GLOBAL DEFAULT 11 FT_Outline_Translate + 82: 0000000000023870 223 FUNC GLOBAL DEFAULT 11 FT_Glyph_Copy + 83: 00000000002bdb20 120 OBJECT GLOBAL DEFAULT 19 ft_smooth_lcdv_renderer_class + 84: 000000000001e6e0 497 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CheckPoints + 85: 000000000001cd40 31 FUNC GLOBAL DEFAULT 11 ft_glyphslot_set_bitmap + 86: 00000000002bb9e0 64 OBJECT GLOBAL DEFAULT 19 af_latin_writing_system_class + 87: 00000000000920c0 20 OBJECT GLOBAL DEFAULT 13 af_bamu_dflt_style_class + 88: 0000000000091d80 20 OBJECT GLOBAL DEFAULT 13 af_grek_c2cp_style_class + 89: 0000000000027db0 155 FUNC GLOBAL DEFAULT 11 FT_Get_WinFNT_Header + 90: 0000000000018da0 117 FUNC GLOBAL DEFAULT 11 FT_Select_Charmap + 91: 00000000000124c0 0 FUNC GLOBAL DEFAULT 9 _init + 92: 0000000000025890 50 FUNC GLOBAL DEFAULT 11 FT_Stroker_Set + 93: 00000000002bdaa0 120 OBJECT GLOBAL DEFAULT 19 ft_raster1_renderer_class + 94: 00000000002bc1f0 24 OBJECT GLOBAL DEFAULT 19 t1_decoder_funcs + 95: 000000000001fc40 119 FUNC GLOBAL DEFAULT 11 FT_List_Finalize + 96: 00000000002bd3a0 40 OBJECT GLOBAL DEFAULT 19 af_khmr_script_class + 97: 00000000002bd7e0 40 OBJECT GLOBAL DEFAULT 19 af_cher_script_class + 98: 00000000002bd560 40 OBJECT GLOBAL DEFAULT 19 af_goth_script_class + 99: 0000000000023ca0 142 FUNC GLOBAL DEFAULT 11 FT_TrueTypeGX_Validate + 100: 00000000000233d0 86 FUNC GLOBAL DEFAULT 11 FT_Get_Gasp + 101: 0000000000018b50 156 FUNC GLOBAL DEFAULT 11 FT_Set_Pixel_Sizes + 102: 00000000002bc560 72 OBJECT GLOBAL DEFAULT 19 psnames_module_class + 103: 00000000000919e0 20 OBJECT GLOBAL DEFAULT 13 af_latp_dflt_style_class + 104: 00000000002bcfe0 40 OBJECT GLOBAL DEFAULT 19 af_saur_script_class + 105: 000000000001a570 107 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_Bitmap + 106: 00000000000910a0 56 OBJECT GLOBAL DEFAULT 13 af_knda_nonbase_uniranges + 107: 000000000001c390 64 FUNC GLOBAL DEFAULT 11 FT_Angle_Diff + 108: 00000000000808d0 262 FUNC GLOBAL DEFAULT 11 FT_Gzip_Uncompress + 109: 00000000000910f0 16 OBJECT GLOBAL DEFAULT 13 af_kali_nonbase_uniranges + 110: 0000000000091900 20 OBJECT GLOBAL DEFAULT 13 af_orkh_dflt_style_class + 111: 000000000001a260 169 FUNC GLOBAL DEFAULT 11 FT_Outline_Copy + 112: 0000000000091270 16 OBJECT GLOBAL DEFAULT 13 af_glag_nonbase_uniranges + 113: 0000000000091d60 20 OBJECT GLOBAL DEFAULT 13 af_grek_c2sc_style_class + 114: 000000000001a3e0 206 FUNC GLOBAL DEFAULT 11 FT_Outline_Reverse + 115: 00000000002bb760 72 OBJECT GLOBAL DEFAULT 19 sfnt_module_class + 116: 00000000000185a0 948 FUNC GLOBAL DEFAULT 11 FT_Request_Metrics + 117: 000000000001be10 86 FUNC GLOBAL DEFAULT 11 FT_Atan2 + 118: 00000000000919a0 20 OBJECT GLOBAL DEFAULT 13 af_mlym_dflt_style_class + 119: 00000000002bce20 40 OBJECT GLOBAL DEFAULT 19 af_thai_script_class + 120: 0000000000091e20 20 OBJECT GLOBAL DEFAULT 13 af_ethi_dflt_style_class + 121: 000000000001a860 1147 FUNC GLOBAL DEFAULT 11 FT_Outline_EmboldenXY + 122: 00000000002bd0a0 40 OBJECT GLOBAL DEFAULT 19 af_orkh_script_class + 123: 000000000001e080 280 FUNC GLOBAL DEFAULT 11 FT_Stream_EnterFrame + 124: 0000000000026dc0 525 FUNC GLOBAL DEFAULT 11 FT_Stroker_EndSubPath + 125: 0000000000090c50 8 OBJECT GLOBAL DEFAULT 13 af_olck_nonbase_uniranges + 126: 0000000000017a30 206 FUNC GLOBAL DEFAULT 11 FT_Matrix_Multiply + 127: 0000000000024640 26 FUNC GLOBAL DEFAULT 11 FT_OpenType_Free + 128: 0000000000091e80 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_dflt_style_class + 129: 000000000001cb10 47 FUNC GLOBAL DEFAULT 11 FT_Stream_Free + 130: 00000000000178c0 94 FUNC GLOBAL DEFAULT 11 FT_MulDiv_No_Round + 131: 0000000000018e70 37 FUNC GLOBAL DEFAULT 11 FT_Get_Char_Index + 132: 00000000002bd220 40 OBJECT GLOBAL DEFAULT 19 af_lisu_script_class + 133: 0000000000091840 20 OBJECT GLOBAL DEFAULT 13 af_sund_dflt_style_class + 134: 0000000000018d10 140 FUNC GLOBAL DEFAULT 11 FT_Get_Track_Kerning + 135: 0000000000022a70 77 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Done + 136: 00000000000262c0 2695 FUNC GLOBAL DEFAULT 11 FT_Stroker_CubicTo + 137: 0000000000091360 56 OBJECT GLOBAL DEFAULT 13 af_deva_uniranges + 138: 00000000000913a0 40 OBJECT GLOBAL DEFAULT 13 af_cyrl_nonbase_uniranges + 139: 0000000000077c90 5 FUNC GLOBAL DEFAULT 11 FTC_Manager_Lookup_Face + 140: 0000000000091c40 20 OBJECT GLOBAL DEFAULT 13 af_gujr_dflt_style_class + 141: 00000000000914e0 16 OBJECT GLOBAL DEFAULT 13 af_cakm_uniranges + 142: 000000000001b0d0 55 FUNC GLOBAL DEFAULT 11 FT_Stream_GetULong + 143: 0000000000091030 8 OBJECT GLOBAL DEFAULT 13 af_khms_nonbase_uniranges + 144: 00000000000912e0 40 OBJECT GLOBAL DEFAULT 13 af_ethi_uniranges + 145: 0000000000016f10 59 FUNC GLOBAL DEFAULT 11 FT_Add_Default_Modules + 146: 000000000001b010 37 FUNC GLOBAL DEFAULT 11 FT_Stream_GetUShortLE + 147: 0000000000091aa0 20 OBJECT GLOBAL DEFAULT 13 af_latn_smcp_style_class + 148: 0000000000091bc0 20 OBJECT GLOBAL DEFAULT 13 af_knda_dflt_style_class + 149: 0000000000091ce0 20 OBJECT GLOBAL DEFAULT 13 af_grek_smcp_style_class + 150: 000000000001e9d0 153 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CheckSubGlyphs + 151: 000000000001bc80 185 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadULongLE + 152: 0000000000023e00 6 FUNC GLOBAL DEFAULT 11 FT_Library_SetLcdFilterWeights + 153: 0000000000023d50 122 FUNC GLOBAL DEFAULT 11 FT_ClassicKern_Validate + 154: 00000000002bd5a0 40 OBJECT GLOBAL DEFAULT 19 af_glag_script_class + 155: 000000000001d780 153 FUNC GLOBAL DEFAULT 11 ft_glyphslot_alloc_bitmap + 156: 000000000001bbb0 193 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadLong + 157: 000000000001a1e0 113 FUNC GLOBAL DEFAULT 11 FT_Outline_Check + 158: 0000000000090960 56 OBJECT GLOBAL DEFAULT 13 af_orya_nonbase_uniranges + 159: 0000000000091780 20 OBJECT GLOBAL DEFAULT 13 af_vaii_dflt_style_class + 160: 00000000002bc180 72 OBJECT GLOBAL DEFAULT 19 psaux_module_class + 161: 00000000002bb560 104 OBJECT GLOBAL DEFAULT 19 tt_cmap6_class_rec + 162: 0000000000027c00 108 FUNC GLOBAL DEFAULT 11 FT_Get_PS_Font_Info + 163: 000000000001ed80 325 FUNC GLOBAL DEFAULT 11 FT_Outline_New_Internal + 164: 0000000000090da0 112 OBJECT GLOBAL DEFAULT 13 af_latp_uniranges + 165: 000000000001c990 112 FUNC GLOBAL DEFAULT 11 ft_hash_str_free + 166: 0000000000090a60 16 OBJECT GLOBAL DEFAULT 13 af_thai_uniranges + 167: 0000000000076f20 15 FUNC GLOBAL DEFAULT 11 FTC_CMapCache_New + 168: 00000000002bd3e0 40 OBJECT GLOBAL DEFAULT 19 af_knda_script_class + 169: 0000000000091de0 20 OBJECT GLOBAL DEFAULT 13 af_geok_dflt_style_class + 170: 0000000000094900 55997 OBJECT GLOBAL DEFAULT 13 ft_adobe_glyph_list + 171: 000000000001af90 25 FUNC GLOBAL DEFAULT 11 FT_Stream_GetChar + 172: 0000000000090a10 8 OBJECT GLOBAL DEFAULT 13 af_tfng_nonbase_uniranges + 173: 00000000002bdba0 120 OBJECT GLOBAL DEFAULT 19 ft_smooth_lcd_renderer_class + 174: 0000000000023830 63 FUNC GLOBAL DEFAULT 11 FT_Done_Glyph + 175: 00000000000353d0 249 FUNC GLOBAL DEFAULT 11 TT_New_Context + 176: 0000000000019ae0 21 FUNC GLOBAL DEFAULT 11 FT_Reference_Library + 177: 00000000002bbaa0 64 OBJECT GLOBAL DEFAULT 19 af_cjk_writing_system_class + 178: 00000000002bd320 40 OBJECT GLOBAL DEFAULT 19 af_lao_script_class + 179: 000000000001ae80 133 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadAt + 180: 0000000000090b00 32 OBJECT GLOBAL DEFAULT 13 af_taml_nonbase_uniranges + 181: 000000000001c360 34 FUNC GLOBAL DEFAULT 11 FT_Vector_From_Polar + 182: 0000000000076b00 1045 FUNC GLOBAL DEFAULT 11 FTC_SBitCache_LookupScaler + 183: 00000000002b94a0 192 OBJECT GLOBAL DEFAULT 19 t1cid_driver_class + 184: 0000000000091ba0 20 OBJECT GLOBAL DEFAULT 13 af_khmr_dflt_style_class + 185: 000000000001bf80 374 FUNC GLOBAL DEFAULT 11 FT_Vector_Rotate + 186: 0000000000017140 82 FUNC GLOBAL DEFAULT 11 FT_Init_FreeType + 187: 0000000000080e10 485 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenLZW + 188: 00000000002bcc60 40 OBJECT GLOBAL DEFAULT 19 af_hani_script_class + 189: 0000000000091100 16 OBJECT GLOBAL DEFAULT 13 af_kali_uniranges + 190: 0000000000018200 20 FUNC GLOBAL DEFAULT 11 ft_validator_error + 191: 0000000000090c00 16 OBJECT GLOBAL DEFAULT 13 af_osma_uniranges + 192: 0000000000027a10 121 FUNC GLOBAL DEFAULT 11 FT_GlyphSlot_Oblique + 193: 00000000000180b0 82 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Add + 194: 0000000000091580 16 OBJECT GLOBAL DEFAULT 13 af_avst_nonbase_uniranges + 195: 000000000001c220 69 FUNC GLOBAL DEFAULT 11 FT_Hypot + 196: 0000000000091b80 20 OBJECT GLOBAL DEFAULT 13 af_khms_dflt_style_class + 197: 00000000002bd0e0 40 OBJECT GLOBAL DEFAULT 19 af_olck_script_class + 198: 0000000000091420 16 OBJECT GLOBAL DEFAULT 13 af_cprt_uniranges + 199: 00000000002bba20 64 OBJECT GLOBAL DEFAULT 19 af_indic_writing_system_class + 200: 000000000001b270 169 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadUShort + 201: 0000000000090b20 16 OBJECT GLOBAL DEFAULT 13 af_taml_uniranges + 202: 0000000000090a40 32 OBJECT GLOBAL DEFAULT 13 af_thai_nonbase_uniranges + 203: 0000000000090c90 16 OBJECT GLOBAL DEFAULT 13 af_nkoo_uniranges + 204: 00000000002bd6a0 40 OBJECT GLOBAL DEFAULT 19 af_dsrt_script_class + 205: 000000000001f0f0 758 FUNC GLOBAL DEFAULT 11 FT_Raccess_Get_DataOffsets + 206: 000000000001cce0 87 FUNC GLOBAL DEFAULT 11 ft_glyphslot_free_bitmap + 207: 0000000000091c00 20 OBJECT GLOBAL DEFAULT 13 af_hebr_dflt_style_class + 208: 0000000000091f00 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_smcp_style_class + 209: 0000000000022990 220 FUNC GLOBAL DEFAULT 11 FT_GlyphSlot_Own_Bitmap + 210: 000000000001fbe0 92 FUNC GLOBAL DEFAULT 11 FT_List_Iterate + 211: 0000000000090950 16 OBJECT GLOBAL DEFAULT 13 af_sylo_uniranges + 212: 0000000000080cd0 54 FUNC GLOBAL DEFAULT 11 ft_lzwstate_reset + 213: 00000000002bbec0 72 OBJECT GLOBAL DEFAULT 19 otv_module_class + 214: 0000000000019c40 1433 FUNC GLOBAL DEFAULT 11 FT_Outline_Decompose + 215: 00000000002bd4e0 40 OBJECT GLOBAL DEFAULT 19 af_gujr_script_class + 216: 0000000000018000 107 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Rewind + 217: 0000000000026fd0 151 FUNC GLOBAL DEFAULT 11 FT_Stroker_GetBorderCounts + 218: 0000000000021930 346 FUNC GLOBAL DEFAULT 11 FT_Done_Library + 219: 000000000001f9f0 204 FUNC GLOBAL DEFAULT 11 FT_Done_Size + 220: 0000000000090b70 24 OBJECT GLOBAL DEFAULT 13 af_sinh_nonbase_uniranges + 221: 0000000000090d20 32 OBJECT GLOBAL DEFAULT 13 af_mymr_uniranges + 222: 0000000000023220 159 FUNC GLOBAL DEFAULT 11 FT_Get_CID_From_Glyph_Index + 223: 00000000000920e0 20 OBJECT GLOBAL DEFAULT 13 af_avst_dflt_style_class + 224: 0000000000091760 20 OBJECT GLOBAL DEFAULT 13 af_limb_dflt_style_class + 225: 0000000000090e10 8 OBJECT GLOBAL DEFAULT 13 af_latb_nonbase_uniranges + 226: 00000000002ba820 192 OBJECT GLOBAL DEFAULT 19 pcf_driver_class + 227: 00000000000197f0 85 FUNC GLOBAL DEFAULT 11 FT_Lookup_Renderer + 228: 000000000001d8a0 389 FUNC GLOBAL DEFAULT 11 FT_New_GlyphSlot + 229: 0000000000019130 199 FUNC GLOBAL DEFAULT 11 FT_Get_Glyph_Name + 230: 00000000000909a0 16 OBJECT GLOBAL DEFAULT 13 af_orya_uniranges + 231: 0000000000091040 16 OBJECT GLOBAL DEFAULT 13 af_khms_uniranges + 232: 0000000000017f10 26 FUNC GLOBAL DEFAULT 11 ft_corner_orientation + 233: 00000000002bc720 72 OBJECT GLOBAL DEFAULT 19 autofit_module_class + 234: 0000000000091b40 20 OBJECT GLOBAL DEFAULT 13 af_latn_c2cp_style_class + 235: 0000000000021430 102 FUNC GLOBAL DEFAULT 11 FT_New_Memory_Face + 236: 0000000000091be0 20 OBJECT GLOBAL DEFAULT 13 af_kali_dflt_style_class + 237: 00000000002bd860 40 OBJECT GLOBAL DEFAULT 19 af_cans_script_class + 238: 00000000000a25c0 512 OBJECT GLOBAL DEFAULT 13 t1_standard_encoding + 239: 0000000000018140 36 FUNC GLOBAL DEFAULT 11 ft_hash_num_lookup + 240: 0000000000024450 130 FUNC GLOBAL DEFAULT 11 FT_Get_MM_Blend_Coordinates + 241: 00000000002be7e0 0 NOTYPE GLOBAL DEFAULT 22 _edata + 242: 000000000001afe0 37 FUNC GLOBAL DEFAULT 11 FT_Stream_GetShort + 243: 0000000000030b60 13251 FUNC GLOBAL DEFAULT 11 TT_RunIns + 244: 00000000002bd660 40 OBJECT GLOBAL DEFAULT 19 af_ethi_script_class + 245: 000000000001fac0 70 FUNC GLOBAL DEFAULT 11 FT_List_Up + 246: 0000000000091308 8 OBJECT GLOBAL DEFAULT 13 af_dsrt_nonbase_uniranges + 247: 0000000000018460 129 FUNC GLOBAL DEFAULT 11 ft_synthesize_vertical_metrics + 248: 00000000002bd120 40 OBJECT GLOBAL DEFAULT 19 af_none_script_class + 249: 0000000000024270 231 FUNC GLOBAL DEFAULT 11 FT_Set_MM_Blend_Coordinates + 250: 000000000001ad40 18 FUNC GLOBAL DEFAULT 11 FT_Stream_Close + 251: 0000000000019bc0 126 FUNC GLOBAL DEFAULT 11 FT_Get_SubGlyph_Info + 252: 0000000000091180 48 OBJECT GLOBAL DEFAULT 13 af_guru_nonbase_uniranges + 253: 0000000000024570 202 FUNC GLOBAL DEFAULT 11 FT_OpenType_Validate + 254: 0000000000091020 16 OBJECT GLOBAL DEFAULT 13 af_lao_uniranges + 255: 0000000000019770 73 FUNC GLOBAL DEFAULT 11 FT_Face_GetCharsOfVariant + 256: 00000000000240f0 231 FUNC GLOBAL DEFAULT 11 FT_Set_Var_Design_Coordinates + 257: 00000000002bb980 32 OBJECT GLOBAL DEFAULT 19 af_autofitter_interface + 258: 0000000000090d90 8 OBJECT GLOBAL DEFAULT 13 af_latp_nonbase_uniranges + 259: 0000000000076720 15 FUNC GLOBAL DEFAULT 11 FTC_SBitCache_New + 260: 0000000000022270 492 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Copy + 261: 00000000000214b0 420 FUNC GLOBAL DEFAULT 11 FT_Remove_Module + 262: 00000000000192e0 132 FUNC GLOBAL DEFAULT 11 FT_Load_Sfnt_Table + 263: 000000000001b950 185 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadULong + 264: 0000000000091e60 20 OBJECT GLOBAL DEFAULT 13 af_deva_dflt_style_class + 265: 0000000000091da0 20 OBJECT GLOBAL DEFAULT 13 af_goth_dflt_style_class + 266: 000000000001bd40 193 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadLongLE + 267: 0000000000027070 183 FUNC GLOBAL DEFAULT 11 FT_Stroker_GetCounts + 268: 00000000002bcea0 40 OBJECT GLOBAL DEFAULT 19 af_tavt_script_class + 269: 0000000000091b20 20 OBJECT GLOBAL DEFAULT 13 af_latn_c2sc_style_class + 270: 0000000000019280 89 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_Table + 271: 000000000001a660 74 FUNC GLOBAL DEFAULT 11 FT_Outline_Transform + 272: 0000000000090ac0 48 OBJECT GLOBAL DEFAULT 13 af_tavt_nonbase_uniranges + 273: 00000000002bcda0 40 OBJECT GLOBAL DEFAULT 19 af_vaii_script_class + 274: 0000000000018110 36 FUNC GLOBAL DEFAULT 11 ft_hash_str_lookup + 275: 00000000000912d0 16 OBJECT GLOBAL DEFAULT 13 af_ethi_nonbase_uniranges + 276: 0000000000092020 20 OBJECT GLOBAL DEFAULT 13 af_cari_dflt_style_class + 277: 00000000000911b0 16 OBJECT GLOBAL DEFAULT 13 af_guru_uniranges + 278: 000000000001e660 124 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CreateExtra + 279: 000000000001ea70 129 FUNC GLOBAL DEFAULT 11 ft_hash_num_init + 280: 0000000000091e00 20 OBJECT GLOBAL DEFAULT 13 af_geor_dflt_style_class + 281: 0000000000019ac0 17 FUNC GLOBAL DEFAULT 11 ft_property_string_set + 282: 00000000000197c0 41 FUNC GLOBAL DEFAULT 11 FT_Activate_Size + 283: 0000000000018ab0 154 FUNC GLOBAL DEFAULT 11 FT_Set_Char_Size + 284: 0000000000091280 24 OBJECT GLOBAL DEFAULT 13 af_glag_uniranges + 285: 0000000000019610 109 FUNC GLOBAL DEFAULT 11 FT_Face_GetCharVariantIndex + 286: 0000000000091700 20 OBJECT GLOBAL DEFAULT 13 af_tibt_dflt_style_class + 287: 000000000001af20 98 FUNC GLOBAL DEFAULT 11 FT_Stream_TryRead + 288: 0000000000016ed0 9 FUNC GLOBAL DEFAULT 11 FT_Done_Memory + 289: 0000000000091ac0 20 OBJECT GLOBAL DEFAULT 13 af_latn_sinf_style_class + 290: 0000000000091d00 20 OBJECT GLOBAL DEFAULT 13 af_grek_sinf_style_class + 291: 0000000000091258 8 OBJECT GLOBAL DEFAULT 13 af_goth_nonbase_uniranges + 292: 000000000001da30 140 FUNC GLOBAL DEFAULT 11 FT_Done_GlyphSlot + 293: 0000000000091fa0 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_c2cp_style_class + 294: 0000000000023190 142 FUNC GLOBAL DEFAULT 11 FT_Get_CID_Is_Internally_CID_Keyed + 295: 00000000002bcce0 40 OBJECT GLOBAL DEFAULT 19 af_sylo_script_class + 296: 0000000000090c10 8 OBJECT GLOBAL DEFAULT 13 af_osge_nonbase_uniranges + 297: 0000000000027d30 125 FUNC GLOBAL DEFAULT 11 FT_Get_PS_Font_Value + 298: 0000000000090ab0 16 OBJECT GLOBAL DEFAULT 13 af_telu_uniranges + 299: 000000000001fdb0 163 FUNC GLOBAL DEFAULT 11 FT_Done_Face + 300: 0000000000090c70 8 OBJECT GLOBAL DEFAULT 13 af_none_nonbase_uniranges + 301: 0000000000023df0 2 FUNC GLOBAL DEFAULT 11 ft_lcd_filter_fir + 302: 000000000001be70 61 FUNC GLOBAL DEFAULT 11 FT_Vector_Unit + 303: 0000000000091cc0 20 OBJECT GLOBAL DEFAULT 13 af_grek_subs_style_class + 304: 00000000002bb460 104 OBJECT GLOBAL DEFAULT 19 tt_cmap10_class_rec + 305: 000000000001b150 56 FUNC GLOBAL DEFAULT 11 FT_Stream_GetULongLE + 306: 00000000002bd8a0 40 OBJECT GLOBAL DEFAULT 19 af_cakm_script_class + 307: 00000000000916e0 20 OBJECT GLOBAL DEFAULT 13 af_hani_dflt_style_class + 308: 0000000000025730 22 FUNC GLOBAL DEFAULT 11 FT_Outline_GetOutsideBorder + 309: 00000000000916d0 16 OBJECT GLOBAL DEFAULT 13 af_adlm_uniranges + 310: 00000000002bc0c0 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_expert_class_rec + 311: 00000000002bb5e0 104 OBJECT GLOBAL DEFAULT 19 tt_cmap4_class_rec + 312: 0000000000090ee0 264 OBJECT GLOBAL DEFAULT 13 af_latn_uniranges + 313: 0000000000077a80 486 FUNC GLOBAL DEFAULT 11 FTC_Manager_RemoveFaceID + 314: 000000000001beb0 61 FUNC GLOBAL DEFAULT 11 FT_Cos + 315: 000000000001b110 57 FUNC GLOBAL DEFAULT 11 FT_Stream_GetLong + 316: 00000000002b7aa0 64 OBJECT GLOBAL DEFAULT 19 ft_outline_glyph_class + 317: 0000000000091440 16 OBJECT GLOBAL DEFAULT 13 af_copt_uniranges + 318: 0000000000077c70 29 FUNC GLOBAL DEFAULT 11 FTC_Node_Unref + 319: 0000000000023f60 111 FUNC GLOBAL DEFAULT 11 FT_Get_Multi_Master + 320: 0000000000019860 208 FUNC GLOBAL DEFAULT 11 FT_Render_Glyph_Internal + 321: 00000000000230b0 213 FUNC GLOBAL DEFAULT 11 FT_Get_CID_Registry_Ordering_Supplement + 322: 000000000001af10 15 FUNC GLOBAL DEFAULT 11 FT_Stream_Read + 323: 0000000000023dd0 26 FUNC GLOBAL DEFAULT 11 FT_ClassicKern_Free + 324: 0000000000091f80 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_c2sc_style_class + 325: 00000000000909c0 32 OBJECT GLOBAL DEFAULT 13 af_limb_nonbase_uniranges + 326: 0000000000090a80 40 OBJECT GLOBAL DEFAULT 13 af_telu_nonbase_uniranges + 327: 0000000000092000 20 OBJECT GLOBAL DEFAULT 13 af_cher_dflt_style_class + 328: 000000000001c410 110 FUNC GLOBAL DEFAULT 11 ft_mem_alloc + 329: 0000000000018960 113 FUNC GLOBAL DEFAULT 11 FT_Select_Size + 330: 00000000002bbe20 72 OBJECT GLOBAL DEFAULT 19 gxv_module_class + 331: 0000000000019970 112 FUNC GLOBAL DEFAULT 11 FT_Get_Module + 332: 00000000000189e0 196 FUNC GLOBAL DEFAULT 11 FT_Request_Size + 333: 00000000000772a0 797 FUNC GLOBAL DEFAULT 11 FTC_CMapCache_Lookup + 334: 0000000000018bf0 278 FUNC GLOBAL DEFAULT 11 FT_Get_Kerning + 335: 0000000000090bf0 8 OBJECT GLOBAL DEFAULT 13 af_osma_nonbase_uniranges + 336: 0000000000071e40 21 FUNC GLOBAL DEFAULT 11 ps_hints_apply + 337: 00000000002bd420 40 OBJECT GLOBAL DEFAULT 19 af_kali_script_class + 338: 0000000000091980 20 OBJECT GLOBAL DEFAULT 13 af_mymr_dflt_style_class + 339: 00000000000778f0 257 FUNC GLOBAL DEFAULT 11 FTC_Manager_Done + 340: 00000000000760d0 15 FUNC GLOBAL DEFAULT 11 FTC_ImageCache_New + 341: 00000000002ba140 80 OBJECT GLOBAL DEFAULT 19 pfr_cmap_class_rec + 342: 00000000002bcc20 40 OBJECT GLOBAL DEFAULT 19 af_writing_system_classes + 343: 0000000000090b30 24 OBJECT GLOBAL DEFAULT 13 af_sund_nonbase_uniranges + 344: 0000000000091f20 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_sinf_style_class + 345: 00000000000232f0 43 FUNC GLOBAL DEFAULT 11 FT_Get_X11_Font_Format + 346: 0000000000090d80 16 OBJECT GLOBAL DEFAULT 13 af_lisu_uniranges + 347: 00000000002bcf20 40 OBJECT GLOBAL DEFAULT 19 af_sund_script_class + 348: 000000000001c890 18 FUNC GLOBAL DEFAULT 11 ft_mem_free + 349: 00000000000181d0 31 FUNC GLOBAL DEFAULT 11 ft_validator_init + 350: 00000000000220d0 188 FUNC GLOBAL DEFAULT 11 FT_Get_BDF_Charset_ID + 351: 000000000001e5c0 149 FUNC GLOBAL DEFAULT 11 ft_mem_realloc + 352: 0000000000023d30 26 FUNC GLOBAL DEFAULT 11 FT_TrueTypeGX_Free + 353: 0000000000090910 16 OBJECT GLOBAL DEFAULT 13 af_tibt_uniranges + 354: 000000000001bef0 62 FUNC GLOBAL DEFAULT 11 FT_Sin + 355: 0000000000091800 20 OBJECT GLOBAL DEFAULT 13 af_tavt_dflt_style_class + 356: 000000000001ae50 25 FUNC GLOBAL DEFAULT 11 FT_Stream_Skip + 357: 0000000000091c80 20 OBJECT GLOBAL DEFAULT 13 af_grek_titl_style_class + 358: 0000000000018f40 133 FUNC GLOBAL DEFAULT 11 FT_Get_First_Char + 359: 0000000000017c90 135 FUNC GLOBAL DEFAULT 11 FT_Vector_Transform_Scaled + 360: 000000000001b320 671 FUNC GLOBAL DEFAULT 11 FT_Raccess_Get_HeaderInfo + 361: 0000000000090c80 16 OBJECT GLOBAL DEFAULT 13 af_nkoo_nonbase_uniranges + 362: 0000000000027240 44 FUNC GLOBAL DEFAULT 11 FT_Stroker_Export + 363: 000000000001f6a0 123 FUNC GLOBAL DEFAULT 11 ft_mem_dup + 364: 0000000000023a80 536 FUNC GLOBAL DEFAULT 11 FT_Glyph_To_Bitmap + 365: 000000000001c950 55 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Done + 366: 0000000000090c60 16 OBJECT GLOBAL DEFAULT 13 af_olck_uniranges + 367: 00000000002bd960 40 OBJECT GLOBAL DEFAULT 19 af_bamu_script_class + 368: 000000000001b5c0 169 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadShort + 369: 0000000000091590 16 OBJECT GLOBAL DEFAULT 13 af_avst_uniranges + 370: 0000000000091260 16 OBJECT GLOBAL DEFAULT 13 af_goth_uniranges + 371: 00000000002ba560 192 OBJECT GLOBAL DEFAULT 19 t42_driver_class + 372: 000000000001b0a0 46 FUNC GLOBAL DEFAULT 11 FT_Stream_GetOffset + 373: 000000000001adb0 159 FUNC GLOBAL DEFAULT 11 FT_Raccess_Guess + 374: 000000000001f0e0 16 FUNC GLOBAL DEFAULT 11 ft_hash_num_insert + 375: 00000000002b93e0 80 OBJECT GLOBAL DEFAULT 19 cff_cmap_unicode_class_rec + 376: 000000000001c480 88 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_New + 377: 0000000000091ae0 20 OBJECT GLOBAL DEFAULT 13 af_latn_pcap_style_class + 378: 0000000000091d20 20 OBJECT GLOBAL DEFAULT 13 af_grek_pcap_style_class + 379: 0000000000027a90 362 FUNC GLOBAL DEFAULT 11 FT_GlyphSlot_Embolden + 380: 0000000000026d50 97 FUNC GLOBAL DEFAULT 11 FT_Stroker_BeginSubPath + 381: 0000000000090b50 24 OBJECT GLOBAL DEFAULT 13 af_sund_uniranges + 382: 0000000000091820 20 OBJECT GLOBAL DEFAULT 13 af_taml_dflt_style_class + 383: 0000000000081000 231 FUNC GLOBAL DEFAULT 11 ft_lzwstate_done + 384: 0000000000090c40 16 OBJECT GLOBAL DEFAULT 13 af_orkh_uniranges + 385: 00000000000918c0 20 OBJECT GLOBAL DEFAULT 13 af_osma_dflt_style_class + 386: 00000000002ba6c0 192 OBJECT GLOBAL DEFAULT 19 winfnt_driver_class + 387: 0000000000091090 16 OBJECT GLOBAL DEFAULT 13 af_khmr_uniranges + 388: 0000000000025b60 1881 FUNC GLOBAL DEFAULT 11 FT_Stroker_ConicTo + 389: 00000000002b9440 80 OBJECT GLOBAL DEFAULT 19 cff_cmap_encoding_class_rec + 390: 00000000002bc260 104 OBJECT GLOBAL DEFAULT 19 ps_parser_funcs + 391: 0000000000024360 231 FUNC GLOBAL DEFAULT 11 FT_Set_Var_Blend_Coordinates + 392: 000000000001d490 394 FUNC GLOBAL DEFAULT 11 FT_Get_Advances + 393: 0000000000092060 20 OBJECT GLOBAL DEFAULT 13 af_cakm_dflt_style_class + 394: 00000000002bd1a0 40 OBJECT GLOBAL DEFAULT 19 af_mymr_script_class + 395: 000000000001c270 237 FUNC GLOBAL DEFAULT 11 FT_Vector_Polarize + 396: 00000000000917c0 20 OBJECT GLOBAL DEFAULT 13 af_thai_dflt_style_class + 397: 0000000000024040 172 FUNC GLOBAL DEFAULT 11 FT_Set_MM_Design_Coordinates + 398: 0000000000027270 1273 FUNC GLOBAL DEFAULT 11 FT_Stroker_ParseOutline + 399: 0000000000090af0 16 OBJECT GLOBAL DEFAULT 13 af_tavt_uniranges + 400: 00000000002bc220 64 OBJECT GLOBAL DEFAULT 19 t1_builder_funcs + 401: 0000000000091570 16 OBJECT GLOBAL DEFAULT 13 af_bamu_uniranges + 402: 000000000001cd60 1828 FUNC GLOBAL DEFAULT 11 FT_Load_Glyph + 403: 000000000001f0d0 14 FUNC GLOBAL DEFAULT 11 ft_hash_str_insert + 404: 000000000001ae70 5 FUNC GLOBAL DEFAULT 11 FT_Stream_Pos + 405: 00000000002bcca0 40 OBJECT GLOBAL DEFAULT 19 af_tibt_script_class + 406: 000000000001df90 147 FUNC GLOBAL DEFAULT 11 FT_Outline_Done_Internal + 407: 00000000000259d0 389 FUNC GLOBAL DEFAULT 11 FT_Stroker_LineTo + 408: 00000000002bd020 40 OBJECT GLOBAL DEFAULT 19 af_osma_script_class + 409: 0000000000091960 20 OBJECT GLOBAL DEFAULT 13 af_nkoo_dflt_style_class + 410: 0000000000091dc0 20 OBJECT GLOBAL DEFAULT 13 af_glag_dflt_style_class + 411: 0000000000091a00 20 OBJECT GLOBAL DEFAULT 13 af_latb_dflt_style_class + 412: 0000000000090c30 8 OBJECT GLOBAL DEFAULT 13 af_orkh_nonbase_uniranges + 413: 00000000000182f0 25 FUNC GLOBAL DEFAULT 11 FT_Reference_Face + 414: 0000000000091740 20 OBJECT GLOBAL DEFAULT 13 af_orya_dflt_style_class + 415: 0000000000018170 83 FUNC GLOBAL DEFAULT 11 ft_service_list_lookup + 416: 000000000008e6c0 96 OBJECT GLOBAL DEFAULT 13 tt_default_graphics_state + 417: 00000000000920a0 20 OBJECT GLOBAL DEFAULT 13 af_beng_dflt_style_class + 418: 00000000002ba9a0 192 OBJECT GLOBAL DEFAULT 19 bdf_driver_class + 419: 00000000000912a0 24 OBJECT GLOBAL DEFAULT 13 af_geok_uniranges + 420: 000000000001ace0 8 FUNC GLOBAL DEFAULT 11 FT_Outline_Embolden + 421: 00000000000917e0 20 OBJECT GLOBAL DEFAULT 13 af_telu_dflt_style_class + 422: 0000000000016e90 64 FUNC GLOBAL DEFAULT 11 FT_New_Memory + 423: 0000000000091410 8 OBJECT GLOBAL DEFAULT 13 af_cprt_nonbase_uniranges + 424: 00000000002bd2e0 40 OBJECT GLOBAL DEFAULT 19 af_latn_script_class + 425: 00000000000911f0 16 OBJECT GLOBAL DEFAULT 13 af_gujr_uniranges + 426: 000000000001f720 52 FUNC GLOBAL DEFAULT 11 ft_mem_strdup + 427: 0000000000091880 20 OBJECT GLOBAL DEFAULT 13 af_shaw_dflt_style_class + 428: 0000000000091560 16 OBJECT GLOBAL DEFAULT 13 af_bamu_nonbase_uniranges + 429: 0000000000091c20 20 OBJECT GLOBAL DEFAULT 13 af_guru_dflt_style_class + 430: 0000000000018e20 72 FUNC GLOBAL DEFAULT 11 FT_Get_Charmap_Index + 431: 00000000000a23c0 512 OBJECT GLOBAL DEFAULT 13 t1_expert_encoding + 432: 000000000001f550 332 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_LangTag + 433: 00000000002bcd20 40 OBJECT GLOBAL DEFAULT 19 af_orya_script_class + 434: 000000000001c7e0 165 FUNC GLOBAL DEFAULT 11 FT_New_Library + 435: 00000000002bc780 680 OBJECT GLOBAL DEFAULT 19 af_style_classes + 436: 0000000000091720 20 OBJECT GLOBAL DEFAULT 13 af_sylo_dflt_style_class + 437: 00000000000915a0 16 OBJECT GLOBAL DEFAULT 13 af_armn_nonbase_uniranges + 438: 00000000000917a0 20 OBJECT GLOBAL DEFAULT 13 af_tfng_dflt_style_class + 439: 00000000002b7ae0 64 OBJECT GLOBAL DEFAULT 19 ft_bitmap_glyph_class + 440: 000000000001f760 59 FUNC GLOBAL DEFAULT 11 ft_mem_strcpyn + 441: 000000000001fb10 193 FUNC GLOBAL DEFAULT 11 FT_Set_Renderer + 442: 00000000000914c0 24 OBJECT GLOBAL DEFAULT 13 af_cakm_nonbase_uniranges + 443: 0000000000091f40 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_pcap_style_class + 444: 000000000001e4a0 274 FUNC GLOBAL DEFAULT 11 ft_mem_qrealloc + 445: 0000000000027c70 68 FUNC GLOBAL DEFAULT 11 FT_Has_PS_Glyph_Names + 446: 0000000000018fd0 182 FUNC GLOBAL DEFAULT 11 FT_Face_Properties + 447: 00000000000177b0 18 FUNC GLOBAL DEFAULT 11 FT_RoundFix + 448: 000000000001f980 46 FUNC GLOBAL DEFAULT 11 FT_List_Insert + 449: 00000000000179d0 84 FUNC GLOBAL DEFAULT 11 FT_DivFix + 450: 000000000001b720 169 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadShortLE + 451: 0000000000092140 20 OBJECT GLOBAL DEFAULT 13 af_adlm_dflt_style_class + 452: 0000000000092100 20 OBJECT GLOBAL DEFAULT 13 af_armn_dflt_style_class + 453: 000000000001b040 37 FUNC GLOBAL DEFAULT 11 FT_Stream_GetShortLE + 454: 00000000000247d0 125 FUNC GLOBAL DEFAULT 11 FT_Get_PFR_Kerning + 455: 0000000000024850 91 FUNC GLOBAL DEFAULT 11 FT_Get_PFR_Advance + 456: 0000000000091a80 20 OBJECT GLOBAL DEFAULT 13 af_latn_subs_style_class + 457: 0000000000091200 64 OBJECT GLOBAL DEFAULT 13 af_grek_nonbase_uniranges + 458: 000000000006c5a0 69 FUNC GLOBAL DEFAULT 11 af_shaper_buf_create + 459: 0000000000016ef0 3 FUNC GLOBAL DEFAULT 11 FT_Trace_Get_Count + 460: 000000000001c3d0 49 FUNC GLOBAL DEFAULT 11 ft_mem_qalloc + 461: 0000000000090ba0 8 OBJECT GLOBAL DEFAULT 13 af_shaw_nonbase_uniranges + 462: 0000000000091b60 20 OBJECT GLOBAL DEFAULT 13 af_lao_dflt_style_class + 463: 0000000000025750 251 FUNC GLOBAL DEFAULT 11 FT_Stroker_New + 464: 0000000000027cc0 108 FUNC GLOBAL DEFAULT 11 FT_Get_PS_Font_Private + 465: 000000000001a4b0 192 FUNC GLOBAL DEFAULT 11 FT_Outline_Render + 466: 00000000002bb660 104 OBJECT GLOBAL DEFAULT 19 tt_cmap2_class_rec + 467: 0000000000017b00 139 FUNC GLOBAL DEFAULT 11 FT_Matrix_Invert + 468: 0000000000019410 125 FUNC GLOBAL DEFAULT 11 FT_Get_CMap_Language_ID + 469: 00000000000177d0 11 FUNC GLOBAL DEFAULT 11 FT_CeilFix + 470: 00000000002bcde0 40 OBJECT GLOBAL DEFAULT 19 af_tfng_script_class + 471: 0000000000090ca0 104 OBJECT GLOBAL DEFAULT 13 af_mymr_nonbase_uniranges + 472: 00000000000919c0 20 OBJECT GLOBAL DEFAULT 13 af_lisu_dflt_style_class + 473: 00000000000760e0 764 FUNC GLOBAL DEFAULT 11 FTC_ImageCache_Lookup + 474: 000000000006adc0 3 FUNC GLOBAL DEFAULT 11 af_shaper_get_coverage + 475: 000000000001a5e0 120 FUNC GLOBAL DEFAULT 11 FT_Vector_Transform + 476: 0000000000022210 46 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Init + 477: 0000000000019370 156 FUNC GLOBAL DEFAULT 11 FT_Sfnt_Table_Info + 478: 00000000002bc060 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_custom_class_rec + 479: 0000000000090d60 16 OBJECT GLOBAL DEFAULT 13 af_mlym_uniranges + 480: 00000000002bd620 40 OBJECT GLOBAL DEFAULT 19 af_geor_script_class + 481: 0000000000091480 16 OBJECT GLOBAL DEFAULT 13 af_cari_uniranges + 482: 00000000000912c0 16 OBJECT GLOBAL DEFAULT 13 af_geor_uniranges + 483: 00000000002bbba0 48 OBJECT GLOBAL DEFAULT 19 ft_grays_raster + 484: 0000000000081b40 571 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenBzip2 + 485: 00000000002bd8e0 40 OBJECT GLOBAL DEFAULT 19 af_buhd_script_class + 486: 00000000002bc1d0 24 OBJECT GLOBAL DEFAULT 19 afm_parser_funcs + 487: 000000000001d620 261 FUNC GLOBAL DEFAULT 11 FT_Get_Advance + 488: 0000000000018310 324 FUNC GLOBAL DEFAULT 11 FT_Match_Size + 489: 0000000000091680 56 OBJECT GLOBAL DEFAULT 13 af_arab_uniranges + 490: 000000000001ad60 67 FUNC GLOBAL DEFAULT 11 FT_Stream_Seek + 491: 00000000002bd9a0 40 OBJECT GLOBAL DEFAULT 19 af_avst_script_class + 492: 000000000001e050 37 FUNC GLOBAL DEFAULT 11 FT_Stream_ReleaseFrame + 493: 00000000000177e0 7 FUNC GLOBAL DEFAULT 11 FT_FloorFix + 494: 0000000000090a00 16 OBJECT GLOBAL DEFAULT 13 af_vaii_uniranges + 495: 0000000000016f00 3 FUNC GLOBAL DEFAULT 11 FT_Trace_Get_Name + 496: 0000000000023e10 6 FUNC GLOBAL DEFAULT 11 FT_Library_SetLcdFilter + 497: 0000000000090e40 136 OBJECT GLOBAL DEFAULT 13 af_latn_nonbase_uniranges + 498: 00000000000181f0 6 FUNC GLOBAL DEFAULT 11 ft_validator_run + 499: 0000000000019510 155 FUNC GLOBAL DEFAULT 11 FT_Set_Charmap + 500: 000000000001b7d0 185 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadUOffset + 501: 000000000001a6b0 425 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_Orientation + 502: 0000000000092120 20 OBJECT GLOBAL DEFAULT 13 af_arab_dflt_style_class + 503: 00000000000a2ae0 516 OBJECT GLOBAL DEFAULT 13 ft_mac_names + 504: 0000000000091a40 20 OBJECT GLOBAL DEFAULT 13 af_latn_titl_style_class + 505: 0000000000091940 20 OBJECT GLOBAL DEFAULT 13 af_none_dflt_style_class + 506: 0000000000091920 20 OBJECT GLOBAL DEFAULT 13 af_olck_dflt_style_class + 507: 0000000000091ee0 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_subs_style_class + 508: 00000000000244e0 130 FUNC GLOBAL DEFAULT 11 FT_Get_Var_Blend_Coordinates + 509: 0000000000076f30 261 FUNC GLOBAL DEFAULT 11 FTC_Manager_LookupSize + 510: 0000000000091e40 20 OBJECT GLOBAL DEFAULT 13 af_dsrt_dflt_style_class + 511: 00000000000918a0 20 OBJECT GLOBAL DEFAULT 13 af_saur_dflt_style_class + 512: 00000000000214a0 11 FUNC GLOBAL DEFAULT 11 FT_Open_Face + 513: 0000000000019ab0 11 FUNC GLOBAL DEFAULT 11 FT_Property_Get + 514: 00000000000913e0 48 OBJECT GLOBAL DEFAULT 13 af_cyrl_uniranges + 515: 0000000000091520 48 OBJECT GLOBAL DEFAULT 13 af_beng_nonbase_uniranges + 516: 0000000000081140 1064 FUNC GLOBAL DEFAULT 11 ft_lzwstate_io + 517: 0000000000019930 54 FUNC GLOBAL DEFAULT 11 FT_Render_Glyph + 518: 0000000000092160 1984 OBJECT GLOBAL DEFAULT 13 af_blue_stringsets + 519: 00000000000912b8 8 OBJECT GLOBAL DEFAULT 13 af_geor_nonbase_uniranges + 520: 00000000002bd360 40 OBJECT GLOBAL DEFAULT 19 af_khms_script_class + 521: 00000000000196e0 52 FUNC GLOBAL DEFAULT 11 FT_Face_GetVariantSelectors + 522: 00000000002bb2e0 104 OBJECT GLOBAL DEFAULT 19 tt_cmap14_class_rec + 523: 00000000000232c0 43 FUNC GLOBAL DEFAULT 11 FT_Get_Font_Format + 524: 0000000000091d40 20 OBJECT GLOBAL DEFAULT 13 af_grek_ordn_style_class + 525: 000000000001ca00 272 FUNC GLOBAL DEFAULT 11 FT_Stream_New + 526: 0000000000016f50 487 FUNC GLOBAL DEFAULT 11 FT_Set_Default_Properties + 527: 0000000000022190 124 FUNC GLOBAL DEFAULT 11 FT_Get_BDF_Property + 528: 0000000000091490 8 OBJECT GLOBAL DEFAULT 13 af_cans_nonbase_uniranges + 529: 0000000000092040 20 OBJECT GLOBAL DEFAULT 13 af_cans_dflt_style_class + 530: 00000000000184f0 176 FUNC GLOBAL DEFAULT 11 FT_Select_Metrics + 531: 0000000000022ac0 1508 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Embolden + 532: 00000000002bd9e0 40 OBJECT GLOBAL DEFAULT 19 af_armn_script_class + 533: 0000000000091fc0 20 OBJECT GLOBAL DEFAULT 13 af_cprt_dflt_style_class + 534: 0000000000091550 16 OBJECT GLOBAL DEFAULT 13 af_beng_uniranges + 535: 0000000000018220 193 FUNC GLOBAL DEFAULT 11 FT_Set_Transform + 536: 0000000000091430 16 OBJECT GLOBAL DEFAULT 13 af_copt_nonbase_uniranges + 537: 000000000001a310 134 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_CBox + 538: 00000000002bd160 40 OBJECT GLOBAL DEFAULT 19 af_nkoo_script_class + 539: 0000000000016ee0 2 FUNC GLOBAL DEFAULT 11 ft_debug_init + 540: 0000000000024660 3 FUNC GLOBAL DEFAULT 11 FT_Face_CheckTrueTypePatents + 541: 0000000000090bb0 16 OBJECT GLOBAL DEFAULT 13 af_shaw_uniranges + 542: 0000000000091a60 20 OBJECT GLOBAL DEFAULT 13 af_latn_sups_style_class + 543: 0000000000091ca0 20 OBJECT GLOBAL DEFAULT 13 af_grek_sups_style_class + 544: 0000000000025710 22 FUNC GLOBAL DEFAULT 11 FT_Outline_GetInsideBorder + 545: 00000000002bba60 64 OBJECT GLOBAL DEFAULT 19 af_dummy_writing_system_class + 546: 00000000002b9160 192 OBJECT GLOBAL DEFAULT 19 cff_driver_class + 547: 0000000000024670 3 FUNC GLOBAL DEFAULT 11 FT_Face_SetUnpatentedHinting + 548: 0000000000091860 20 OBJECT GLOBAL DEFAULT 13 af_sinh_dflt_style_class + 549: 0000000000091320 64 OBJECT GLOBAL DEFAULT 13 af_deva_nonbase_uniranges + 550: 0000000000016cf0 405 FUNC GLOBAL DEFAULT 11 FT_Stream_Open + 551: 0000000000091120 48 OBJECT GLOBAL DEFAULT 13 af_hebr_nonbase_uniranges + 552: 00000000002bcfa0 40 OBJECT GLOBAL DEFAULT 19 af_shaw_script_class + 553: 00000000002bcd60 40 OBJECT GLOBAL DEFAULT 19 af_limb_script_class + 554: 0000000000021ec0 518 FUNC GLOBAL DEFAULT 11 FT_Outline_Get_BBox + 555: 000000000006c600 378 FUNC GLOBAL DEFAULT 11 af_shaper_get_cluster + 556: 00000000002bda60 40 OBJECT GLOBAL DEFAULT 19 af_adlm_script_class + 557: 00000000000278a0 356 FUNC GLOBAL DEFAULT 11 FT_Glyph_StrokeBorder + 558: 0000000000023730 78 FUNC GLOBAL DEFAULT 11 FT_Glyph_Transform + 559: 000000000001cbd0 169 FUNC GLOBAL DEFAULT 11 FT_Attach_Stream + 560: 0000000000019490 126 FUNC GLOBAL DEFAULT 11 FT_Get_CMap_Format + 561: 0000000000019b00 58 FUNC GLOBAL DEFAULT 11 FT_Library_Version + 562: 00000000000177f0 102 FUNC GLOBAL DEFAULT 11 FT_MulDiv + 563: 000000000001acf0 26 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_Name_Count + 564: 0000000000080520 941 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenGzip + 565: 0000000000091ea0 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_titl_style_class + 566: 0000000000019aa0 14 FUNC GLOBAL DEFAULT 11 FT_Property_Set + 567: 0000000000091478 8 OBJECT GLOBAL DEFAULT 13 af_cari_nonbase_uniranges + 568: 00000000002bcee0 40 OBJECT GLOBAL DEFAULT 19 af_taml_script_class + 569: 00000000002bce60 40 OBJECT GLOBAL DEFAULT 19 af_telu_script_class + 570: 00000000000914a0 24 OBJECT GLOBAL DEFAULT 13 af_cans_uniranges + 571: 0000000000091298 8 OBJECT GLOBAL DEFAULT 13 af_geok_nonbase_uniranges + 572: 000000000001f7a0 52 FUNC GLOBAL DEFAULT 11 FT_List_Find + 573: 0000000000017d20 491 FUNC GLOBAL DEFAULT 11 FT_Vector_NormLen + 574: 00000000002bd720 40 OBJECT GLOBAL DEFAULT 19 af_cyrl_script_class + 575: 00000000002bbb60 48 OBJECT GLOBAL DEFAULT 19 ft_standard_raster + 576: 000000000001c8b0 155 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Reset + 577: 00000000000914f0 16 OBJECT GLOBAL DEFAULT 13 af_buhd_nonbase_uniranges + 578: 0000000000019b60 83 FUNC GLOBAL DEFAULT 11 FT_Get_TrueType_Engine_Type + 579: 0000000000091150 24 OBJECT GLOBAL DEFAULT 13 af_hebr_uniranges + 580: 00000000000171a0 32 FUNC GLOBAL DEFAULT 11 FT_Done_FreeType + 581: 000000000001e8e0 239 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_CopyPoints + 582: 0000000000091c60 20 OBJECT GLOBAL DEFAULT 13 af_grek_dflt_style_class + 583: 00000000000911c0 48 OBJECT GLOBAL DEFAULT 13 af_gujr_nonbase_uniranges + 584: 000000000006c5f0 12 FUNC GLOBAL DEFAULT 11 af_shaper_buf_destroy + 585: 00000000002bd760 40 OBJECT GLOBAL DEFAULT 19 af_cprt_script_class + 586: 00000000002bd1e0 40 OBJECT GLOBAL DEFAULT 19 af_mlym_script_class + 587: 00000000002bd060 40 OBJECT GLOBAL DEFAULT 19 af_osge_script_class + 588: 0000000000077180 190 FUNC GLOBAL DEFAULT 11 FTC_Manager_LookupFace + 589: 000000000001f820 352 FUNC GLOBAL DEFAULT 11 FT_New_Size + 590: 00000000000915b0 24 OBJECT GLOBAL DEFAULT 13 af_armn_uniranges + 591: 00000000000909e0 16 OBJECT GLOBAL DEFAULT 13 af_limb_uniranges + 592: 00000000002bd7a0 40 OBJECT GLOBAL DEFAULT 19 af_copt_script_class + 593: 0000000000019850 7 FUNC GLOBAL DEFAULT 11 FT_Get_Renderer + 594: 0000000000091ec0 20 OBJECT GLOBAL DEFAULT 13 af_cyrl_sups_style_class + 595: 0000000000019680 87 FUNC GLOBAL DEFAULT 11 FT_Face_GetCharVariantIsDefault + 596: 0000000000092080 20 OBJECT GLOBAL DEFAULT 13 af_buhd_dflt_style_class + 597: 0000000000091460 24 OBJECT GLOBAL DEFAULT 13 af_cher_uniranges + 598: 00000000000907a0 24 OBJECT GLOBAL DEFAULT 13 af_hani_nonbase_uniranges + 599: 000000000001afb0 37 FUNC GLOBAL DEFAULT 11 FT_Stream_GetUShort + 600: 0000000000090d40 32 OBJECT GLOBAL DEFAULT 13 af_mlym_nonbase_uniranges + 601: 0000000000017f30 205 FUNC GLOBAL DEFAULT 11 ft_corner_is_flat + 602: 00000000000241e0 130 FUNC GLOBAL DEFAULT 11 FT_Get_Var_Design_Coordinates + 603: 00000000000909f0 8 OBJECT GLOBAL DEFAULT 13 af_vaii_nonbase_uniranges + 604: 00000000002bd5e0 40 OBJECT GLOBAL DEFAULT 19 af_geok_script_class + 605: 00000000002bb6e0 104 OBJECT GLOBAL DEFAULT 19 tt_cmap0_class_rec + 606: 000000000001e1a0 52 FUNC GLOBAL DEFAULT 11 FT_Stream_ExtractFrame + 607: 0000000000025850 58 FUNC GLOBAL DEFAULT 11 FT_Stroker_Rewind + 608: 0000000000090c78 8 OBJECT GLOBAL DEFAULT 13 af_none_uniranges + 609: 00000000002bd520 40 OBJECT GLOBAL DEFAULT 19 af_grek_script_class + 610: 0000000000091450 8 OBJECT GLOBAL DEFAULT 13 af_cher_nonbase_uniranges + 611: 00000000000a27c0 782 OBJECT GLOBAL DEFAULT 13 ft_sid_names + 612: 000000000001b890 185 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadOffset + 613: 0000000000090d70 8 OBJECT GLOBAL DEFAULT 13 af_lisu_nonbase_uniranges + 614: 00000000000908c0 80 OBJECT GLOBAL DEFAULT 13 af_tibt_nonbase_uniranges + 615: 0000000000091310 16 OBJECT GLOBAL DEFAULT 13 af_dsrt_uniranges + 616: 0000000000021660 713 FUNC GLOBAL DEFAULT 11 FT_Add_Module + 617: 00000000000763e0 827 FUNC GLOBAL DEFAULT 11 FTC_ImageCache_LookupScaler + 618: 0000000000024700 207 FUNC GLOBAL DEFAULT 11 FT_Get_PFR_Metrics + 619: 0000000000090bc0 24 OBJECT GLOBAL DEFAULT 13 af_saur_nonbase_uniranges + 620: 00000000002ba020 192 OBJECT GLOBAL DEFAULT 19 pfr_driver_class + 621: 00000000000a2d00 3696 OBJECT GLOBAL DEFAULT 13 ft_standard_glyph_names + 622: 000000000001e210 655 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadFields + 623: 00000000002bc2e0 32 OBJECT GLOBAL DEFAULT 19 ps_table_funcs + 624: 0000000000018070 55 FUNC GLOBAL DEFAULT 11 FT_GlyphLoader_Prepare + 625: 00000000000918e0 20 OBJECT GLOBAL DEFAULT 13 af_osge_dflt_style_class + 626: 0000000000090c20 16 OBJECT GLOBAL DEFAULT 13 af_osge_uniranges + 627: 00000000002be7e8 0 NOTYPE GLOBAL DEFAULT 23 _end + 628: 000000000001f3f0 347 FUNC GLOBAL DEFAULT 11 FT_Get_Sfnt_Name + 629: 00000000002bbae0 72 OBJECT GLOBAL DEFAULT 19 pshinter_module_class + 630: 0000000000023780 170 FUNC GLOBAL DEFAULT 11 FT_Glyph_Get_CBox + 631: 0000000000019b40 27 FUNC GLOBAL DEFAULT 11 FT_Set_Debug_Hook + 632: 00000000002bd820 40 OBJECT GLOBAL DEFAULT 19 af_cari_script_class + 633: 00000000000910e0 16 OBJECT GLOBAL DEFAULT 13 af_knda_uniranges + 634: 000000000001cc80 85 FUNC GLOBAL DEFAULT 11 FT_Attach_File + 635: 00000000002bd2a0 40 OBJECT GLOBAL DEFAULT 19 af_latb_script_class + 636: 00000000002b85e0 192 OBJECT GLOBAL DEFAULT 19 t1_driver_class + 637: 000000000001e030 22 FUNC GLOBAL DEFAULT 11 FT_Outline_Done + 638: 00000000000915e0 160 OBJECT GLOBAL DEFAULT 13 af_arab_nonbase_uniranges + 639: 0000000000090b90 16 OBJECT GLOBAL DEFAULT 13 af_sinh_uniranges + 640: 0000000000091500 16 OBJECT GLOBAL DEFAULT 13 af_buhd_uniranges + 641: 0000000000023320 165 FUNC GLOBAL DEFAULT 11 FT_Get_FSType_Flags + 642: 00000000002bd4a0 40 OBJECT GLOBAL DEFAULT 19 af_guru_script_class + 643: 0000000000023950 300 FUNC GLOBAL DEFAULT 11 FT_Get_Glyph + 644: 000000000001ad10 40 FUNC GLOBAL DEFAULT 11 FT_Stream_OpenMemory + 645: 0000000000019200 118 FUNC GLOBAL DEFAULT 11 FT_Get_Postscript_Name + 646: 000000000001eed0 22 FUNC GLOBAL DEFAULT 11 FT_Outline_New + 647: 0000000000023fd0 111 FUNC GLOBAL DEFAULT 11 FT_Get_MM_Var + 648: 000000000001b070 46 FUNC GLOBAL DEFAULT 11 FT_Stream_GetUOffset + 649: 000000000001d730 67 FUNC GLOBAL DEFAULT 11 FT_Load_Char + 650: 0000000000018ea0 157 FUNC GLOBAL DEFAULT 11 FT_Get_Next_Char + 651: 000000000001e1e0 48 FUNC GLOBAL DEFAULT 11 FT_Stream_ExitFrame + 652: 00000000002b7b20 192 OBJECT GLOBAL DEFAULT 19 tt_driver_class + 653: 000000000006c780 58 FUNC GLOBAL DEFAULT 11 af_shaper_get_elem + 654: 00000000000916c0 16 OBJECT GLOBAL DEFAULT 13 af_adlm_nonbase_uniranges + 655: 0000000000090be0 16 OBJECT GLOBAL DEFAULT 13 af_saur_uniranges + 656: 00000000002bc000 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_unicode_class_rec + 657: 00000000002bd460 40 OBJECT GLOBAL DEFAULT 19 af_hebr_script_class + 658: 0000000000019720 73 FUNC GLOBAL DEFAULT 11 FT_Face_GetVariantsOfChar + 659: 0000000000019090 155 FUNC GLOBAL DEFAULT 11 FT_Get_Name_Index + 660: 00000000002bb360 104 OBJECT GLOBAL DEFAULT 19 tt_cmap13_class_rec + 661: 000000000001b670 169 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadUShortLE + 662: 00000000002bb3e0 104 OBJECT GLOBAL DEFAULT 19 tt_cmap12_class_rec + 663: 000000000001b1d0 160 FUNC GLOBAL DEFAULT 11 FT_Stream_ReadChar + 664: 0000000000091060 40 OBJECT GLOBAL DEFAULT 13 af_khmr_nonbase_uniranges + 665: 0000000000020740 88 FUNC GLOBAL DEFAULT 11 FT_New_Face + 666: 0000000000091fe0 20 OBJECT GLOBAL DEFAULT 13 af_copt_dflt_style_class + 667: 0000000000022460 1321 FUNC GLOBAL DEFAULT 11 FT_Bitmap_Convert + 668: 00000000000258d0 245 FUNC GLOBAL DEFAULT 11 FT_Stroker_Done + 669: 0000000000091b00 20 OBJECT GLOBAL DEFAULT 13 af_latn_ordn_style_class + 670: 000000000001b190 58 FUNC GLOBAL DEFAULT 11 FT_Stream_GetLongLE + 671: 00000000002bb4e0 104 OBJECT GLOBAL DEFAULT 19 tt_cmap8_class_rec + 672: 0000000000027770 301 FUNC GLOBAL DEFAULT 11 FT_Glyph_Stroke + 673: 0000000000077a00 127 FUNC GLOBAL DEFAULT 11 FTC_Manager_Reset + 674: 0000000000027130 257 FUNC GLOBAL DEFAULT 11 FT_Stroker_ExportBorder + 675: 00000000002bdc20 120 OBJECT GLOBAL DEFAULT 19 ft_smooth_renderer_class + 676: 0000000000022240 46 FUNC GLOBAL DEFAULT 11 FT_Bitmap_New + 677: 0000000000090920 40 OBJECT GLOBAL DEFAULT 13 af_sylo_nonbase_uniranges + 678: 000000000001f9b0 61 FUNC GLOBAL DEFAULT 11 FT_List_Remove + 679: 0000000000077710 467 FUNC GLOBAL DEFAULT 11 FTC_Manager_New + 680: 0000000000017920 32 FUNC GLOBAL DEFAULT 11 FT_MulFix + 681: 00000000002bca40 464 OBJECT GLOBAL DEFAULT 19 af_script_classes + 682: 0000000000091000 32 OBJECT GLOBAL DEFAULT 13 af_lao_nonbase_uniranges + 683: 00000000002be7e0 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 684: 0000000000090e20 32 OBJECT GLOBAL DEFAULT 13 af_latb_uniranges + 685: 000000000008d924 0 FUNC GLOBAL DEFAULT 12 _fini + 686: 0000000000091240 24 OBJECT GLOBAL DEFAULT 13 af_grek_uniranges + 687: 000000000001c100 274 FUNC GLOBAL DEFAULT 11 FT_Vector_Length + 688: 0000000000090a20 16 OBJECT GLOBAL DEFAULT 13 af_tfng_uniranges + 689: 00000000002bd920 40 OBJECT GLOBAL DEFAULT 19 af_beng_script_class + 690: 00000000000907c0 248 OBJECT GLOBAL DEFAULT 13 af_hani_uniranges + 691: 0000000000017b90 243 FUNC GLOBAL DEFAULT 11 FT_Matrix_Multiply_Scaled + 692: 0000000000076730 965 FUNC GLOBAL DEFAULT 11 FTC_SBitCache_Lookup + 693: 00000000002bc120 80 OBJECT GLOBAL DEFAULT 19 t1_cmap_standard_class_rec + 694: 0000000000092920 5161 OBJECT GLOBAL DEFAULT 13 af_blue_strings + 695: 00000000000199e0 36 FUNC GLOBAL DEFAULT 11 FT_Get_Module_Interface + 696: 0000000000019a10 144 FUNC GLOBAL DEFAULT 11 ft_module_get_service + 697: 0000000000080d10 243 FUNC GLOBAL DEFAULT 11 ft_lzwstate_init diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgbm.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgbm.so.1.txt new file mode 100644 index 000000000000..5f22a2d0e872 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgbm.so.1.txt @@ -0,0 +1,121 @@ +Library: /lib64/libgbm.so.1 +Package: mesa-libgbm-18.3.4-12.el7_9.x86_64 + + +Symbol table '.dynsym' contains 115 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 000000000020d428 0 NOTYPE LOCAL DEFAULT 23 _edata + 2: 000000000020d430 0 NOTYPE LOCAL DEFAULT 24 _end + 3: 000000000020d428 0 NOTYPE LOCAL DEFAULT 24 __bss_start + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetBuffer + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (3) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetErrorCode + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmFreeVersion + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ParserCreate + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetCurrentLineNumber + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (4) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (5) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_resource_get_user_data + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_resource_instance_of + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_GetCurrentColumnNumber + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fnmatch@GLIBC_2.2.5 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ParserFree + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pow@GLIBC_2.2.5 (6) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND scandir@GLIBC_2.2.5 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_SetUserData + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (4) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strspn@GLIBC_2.2.5 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND alphasort@GLIBC_2.2.5 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetDevice2 + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (4) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_Parse + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __asprintf_chk@GLIBC_2.8 (7) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.2.5 (2) + 45: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ParseBuffer + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (8) + 48: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND program_invocation_name@GLIBC_2.2.5 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.2.5 (9) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetVersion + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.2.5 (9) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmFreeDevices + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (2) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_ErrorString + 58: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __progname_full@GLIBC_2.2.5 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (4) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XML_SetElementHandler + 61: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 62: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND wl_buffer_interface + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetDevices2 + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmGetDeviceNameFromFd2 + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (3) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.2.5 (2) + 67: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.2.5 (9) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmFreeDevice + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (4) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmCommandWriteRead + 73: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND drmIoctl + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (4) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlerror@GLIBC_2.2.5 (9) + 78: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (2) + 79: 0000000000003090 12 FUNC GLOBAL DEFAULT 11 gbm_surface_destroy + 80: 00000000000030a0 12 FUNC GLOBAL DEFAULT 11 gbm_surface_lock_front_buffer + 81: 0000000000002ea0 9 FUNC GLOBAL DEFAULT 11 gbm_bo_set_user_data + 82: 0000000000008450 0 FUNC GLOBAL DEFAULT 12 _fini + 83: 0000000000002fa0 82 FUNC GLOBAL DEFAULT 11 gbm_bo_map + 84: 0000000000002eb0 5 FUNC GLOBAL DEFAULT 11 gbm_bo_get_user_data + 85: 00000000000030c0 12 FUNC GLOBAL DEFAULT 11 gbm_surface_has_free_buffers + 86: 0000000000002e10 12 FUNC GLOBAL DEFAULT 11 gbm_bo_get_offset + 87: 0000000000002e40 12 FUNC GLOBAL DEFAULT 11 gbm_bo_get_fd + 88: 0000000000002b00 9 FUNC GLOBAL DEFAULT 11 gbm_device_get_format_modifier_plane_count + 89: 0000000000002458 0 FUNC GLOBAL DEFAULT 9 _init + 90: 0000000000002e60 18 FUNC GLOBAL DEFAULT 11 gbm_bo_get_handle_for_plane + 91: 0000000000002b10 25 FUNC GLOBAL DEFAULT 11 gbm_device_destroy + 92: 00000000000030b0 12 FUNC GLOBAL DEFAULT 11 gbm_surface_release_buffer + 93: 0000000000002ef0 58 FUNC GLOBAL DEFAULT 11 gbm_bo_create + 94: 0000000000003010 28 FUNC GLOBAL DEFAULT 11 gbm_surface_create + 95: 0000000000002b70 4 FUNC GLOBAL DEFAULT 11 gbm_bo_get_format + 96: 0000000000002b40 4 FUNC GLOBAL DEFAULT 11 gbm_bo_get_height + 97: 0000000000002e20 4 FUNC GLOBAL DEFAULT 11 gbm_bo_get_device + 98: 0000000000002f30 95 FUNC GLOBAL DEFAULT 11 gbm_bo_create_with_modifiers + 99: 0000000000002e50 12 FUNC GLOBAL DEFAULT 11 gbm_bo_get_plane_count + 100: 0000000000002a20 168 FUNC GLOBAL DEFAULT 11 gbm_create_device + 101: 0000000000002b30 4 FUNC GLOBAL DEFAULT 11 gbm_bo_get_width + 102: 0000000000002ad0 4 FUNC GLOBAL DEFAULT 11 gbm_device_get_fd + 103: 0000000000002e30 5 FUNC GLOBAL DEFAULT 11 gbm_bo_get_handle + 104: 0000000000002b60 7 FUNC GLOBAL DEFAULT 11 gbm_bo_get_stride + 105: 0000000000002e90 12 FUNC GLOBAL DEFAULT 11 gbm_bo_write + 106: 0000000000002af0 9 FUNC GLOBAL DEFAULT 11 gbm_device_is_format_supported + 107: 0000000000002e80 12 FUNC GLOBAL DEFAULT 11 gbm_bo_get_modifier + 108: 0000000000003000 12 FUNC GLOBAL DEFAULT 11 gbm_bo_unmap + 109: 0000000000002b80 645 FUNC GLOBAL DEFAULT 11 gbm_bo_get_bpp + 110: 0000000000003030 87 FUNC GLOBAL DEFAULT 11 gbm_surface_create_with_modifiers + 111: 0000000000002ae0 5 FUNC GLOBAL DEFAULT 11 gbm_device_get_backend_name + 112: 0000000000002b50 12 FUNC GLOBAL DEFAULT 11 gbm_bo_get_stride_for_plane + 113: 0000000000002ec0 35 FUNC GLOBAL DEFAULT 11 gbm_bo_destroy + 114: 0000000000002f90 9 FUNC GLOBAL DEFAULT 11 gbm_bo_import diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgcc_s.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgcc_s.so.1.txt new file mode 100644 index 000000000000..dd67b5789234 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgcc_s.so.1.txt @@ -0,0 +1,177 @@ +Library: /lib64/libgcc_s.so.1 +Package: libgcc-4.8.5-44.el7.x86_64 + + +Symbol table '.dynsym' contains 171 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dl_iterate_phdr@GLIBC_2.2.5 (13) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (13) + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __pthread_key_create + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (13) + 5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (13) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_getspecific + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (13) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (13) + 10: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_key_create + 11: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (14) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_once + 14: 0000000000000000 0 FUNC WEAK DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (13) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (13) + 16: 0000000000000000 0 NOTYPE WEAK DEFAULT UND pthread_setspecific + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (13) + 18: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 19: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 20: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (13) + 21: 0000000000000000 0 FUNC WEAK DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (13) + 22: 00000000000033c0 34 FUNC GLOBAL DEFAULT 12 __mulvsi3@@GCC_3.0 + 23: 000000000000a860 924 FUNC GLOBAL DEFAULT 12 __floatuntitf@@GCC_4.3.0 + 24: 000000000000c140 445 FUNC GLOBAL DEFAULT 12 __letf2@@GCC_4.3.0 + 25: 00000000000056e0 451 FUNC GLOBAL DEFAULT 12 __modti3@@GCC_3.0 + 26: 0000000000004c30 7 FUNC GLOBAL DEFAULT 12 __bswapdi2@@GCC_4.3.0 + 27: 0000000000005510 69 FUNC GLOBAL DEFAULT 12 __floatuntixf@@GCC_4.2.0 + 28: 00000000000097b0 132 FUNC GLOBAL DEFAULT 12 __unordtf2@@GCC_4.3.0 + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.0 + 30: 00000000000120f0 342 FUNC GLOBAL DEFAULT 12 __emutls_get_address@@GCC_4.3.0 + 31: 0000000000006ec0 2714 FUNC GLOBAL DEFAULT 12 __divtf3@@GCC_4.3.0 + 32: 0000000000003170 37 FUNC GLOBAL DEFAULT 12 __ucmpti2@@GCC_3.0 + 33: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.3 + 34: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.4 + 35: 0000000000003220 38 FUNC GLOBAL DEFAULT 12 __addvdi3@@GCC_3.0 + 36: 00000000000030e0 86 FUNC GLOBAL DEFAULT 12 __ashrti3@@GCC_3.0 + 37: 0000000000003280 85 FUNC GLOBAL DEFAULT 12 __addvti3@@GCC_3.4.4 + 38: 00000000000037b0 54 FUNC GLOBAL DEFAULT 12 __paritydi2@@GCC_3.4 + 39: 00000000000037f0 57 FUNC GLOBAL DEFAULT 12 __parityti2@@GCC_3.4 + 40: 0000000000003080 81 FUNC GLOBAL DEFAULT 12 __ashlti3@@GCC_3.0 + 41: 0000000000009a20 269 FUNC GLOBAL DEFAULT 12 __floatsitf@@GCC_4.3.0 + 42: 000000000000fdc0 199 FUNC GLOBAL DEFAULT 12 _Unwind_Resume@@GCC_3.0 + 43: 000000000000ff90 151 FUNC GLOBAL DEFAULT 12 _Unwind_Backtrace@@GCC_3.3 + 44: 0000000000003bf0 746 FUNC GLOBAL DEFAULT 12 __muldc3@@GCC_4.0.0 + 45: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.4.2 + 46: 000000000000caa0 1580 FUNC GLOBAL DEFAULT 12 __multc3@GCC_4.0.0 + 47: 000000000000caa0 1580 FUNC GLOBAL DEFAULT 12 __multc3@@GCC_4.3.0 + 48: 000000000000c300 309 FUNC GLOBAL DEFAULT 12 __eqtf2@@GCC_4.3.0 + 49: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.4.4 + 50: 0000000000003000 24 FUNC GLOBAL DEFAULT 12 __negti2@@GCC_3.0 + 51: 0000000000003880 81 FUNC GLOBAL DEFAULT 12 __powidf2@@GCC_4.0.0 + 52: 000000000000d0d0 142 FUNC GLOBAL DEFAULT 12 __powitf2@@GCC_4.3.0 + 53: 000000000000d0d0 142 FUNC GLOBAL DEFAULT 12 __powitf2@GCC_4.0.0 + 54: 0000000000003660 9 FUNC GLOBAL DEFAULT 12 __clzdi2@@GCC_3.4 + 55: 0000000000003670 31 FUNC GLOBAL DEFAULT 12 __clzti2@@GCC_3.4 + 56: 00000000000058b0 280 FUNC GLOBAL DEFAULT 12 __udivti3@@GCC_3.0 + 57: 0000000000009ed0 269 FUNC GLOBAL DEFAULT 12 __floatditf@@GCC_4.3.0 + 58: 0000000000005160 202 FUNC GLOBAL DEFAULT 12 __floattisf@@GCC_3.0 + 59: 000000000000b640 1099 FUNC GLOBAL DEFAULT 12 __trunctfdf2@@GCC_4.3.0 + 60: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.8.0 + 61: 000000000000ac00 525 FUNC GLOBAL DEFAULT 12 __extendsftf2@@GCC_4.3.0 + 62: 0000000000009da0 304 FUNC GLOBAL DEFAULT 12 __fixunstfdi@@GCC_4.3.0 + 63: 000000000000d4a0 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetLanguageSpecificData@@GCC_3.0 + 64: 000000000000d4c0 36 FUNC GLOBAL DEFAULT 12 _Unwind_FindEnclosingFunction@@GCC_3.3 + 65: 000000000000d470 21 FUNC GLOBAL DEFAULT 12 _Unwind_GetIPInfo@@GCC_4.2.0 + 66: 000000000000a2d0 438 FUNC GLOBAL DEFAULT 12 __fixunstfti@@GCC_4.3.0 + 67: 00000000000118e0 275 FUNC GLOBAL DEFAULT 12 __deregister_frame_info_bases@@GCC_3.0 + 68: 0000000000003620 17 FUNC GLOBAL DEFAULT 12 __ffsdi2@@GCC_3.0 + 69: 0000000000003640 31 FUNC GLOBAL DEFAULT 12 __ffsti2@@GCC_3.0 + 70: 0000000000004e00 57 FUNC GLOBAL DEFAULT 12 __fixxfti@@GCC_3.0 + 71: 000000000000d4f0 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetDataRelBase@@GCC_3.0 + 72: 00000000000045e0 810 FUNC GLOBAL DEFAULT 12 __divdc3@@GCC_4.0.0 + 73: 000000000000c440 1632 FUNC GLOBAL DEFAULT 12 __divtc3@@GCC_4.3.0 + 74: 000000000000c440 1632 FUNC GLOBAL DEFAULT 12 __divtc3@GCC_4.0.0 + 75: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.2.0 + 76: 00000000000033a0 26 FUNC GLOBAL DEFAULT 12 __mulvdi3@@GCC_3.0 + 77: 00000000000033f0 400 FUNC GLOBAL DEFAULT 12 __mulvti3@@GCC_3.4.4 + 78: 00000000000031d0 28 FUNC GLOBAL DEFAULT 12 __absvsi2@@GCC_3.0 + 79: 00000000000118c0 26 FUNC GLOBAL DEFAULT 12 __register_frame_table@@GCC_3.0 + 80: 0000000000008670 4416 FUNC GLOBAL DEFAULT 12 __subtf3@@GCC_4.3.0 + 81: 000000000000b040 498 FUNC GLOBAL DEFAULT 12 __extendxftf2@@GCC_4.3.0 + 82: 0000000000003ee0 1014 FUNC GLOBAL DEFAULT 12 __mulxc3@@GCC_4.0.0 + 83: 0000000000008300 878 FUNC GLOBAL DEFAULT 12 __negtf2@@GCC_4.3.0 + 84: 0000000000011830 114 FUNC GLOBAL DEFAULT 12 __register_frame_info_table_bases@@GCC_3.0 + 85: 00000000000038e0 87 FUNC GLOBAL DEFAULT 12 __powixf2@@GCC_4.0.0 + 86: 0000000000005230 202 FUNC GLOBAL DEFAULT 12 __floattidf@@GCC_3.0 + 87: 000000000000d4b0 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetRegionStart@@GCC_3.0 + 88: 000000000000a490 972 FUNC GLOBAL DEFAULT 12 __floattitf@@GCC_4.3.0 + 89: 0000000000005300 45 FUNC GLOBAL DEFAULT 12 __floattixf@@GCC_3.0 + 90: 000000000000ba90 1253 FUNC GLOBAL DEFAULT 12 __trunctfxf2@@GCC_4.3.0 + 91: 0000000000011a40 506 FUNC GLOBAL DEFAULT 12 _Unwind_Find_FDE@@GCC_3.0 + 92: 000000000000d490 8 FUNC GLOBAL DEFAULT 12 _Unwind_SetIP@@GCC_3.0 + 93: 000000000000d460 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetIP@@GCC_3.0 + 94: 00000000000059d0 326 FUNC GLOBAL DEFAULT 12 __umodti3@@GCC_3.0 + 95: 0000000000004d10 106 FUNC GLOBAL DEFAULT 12 __fixunsxfdi@@GCC_3.0 + 96: 0000000000011770 126 FUNC GLOBAL DEFAULT 12 __register_frame_info_bases@@GCC_3.0 + 97: 0000000000002c50 669 FUNC GLOBAL DEFAULT 12 __cpu_indicator_init@@GCC_4.8.0 + 98: 0000000000004f80 471 FUNC GLOBAL DEFAULT 12 __fixunsxfti@@GCC_3.0 + 99: 0000000000004910 772 FUNC GLOBAL DEFAULT 12 __divxc3@@GCC_4.0.0 + 100: 0000000000003310 37 FUNC GLOBAL DEFAULT 12 __subvsi3@@GCC_3.0 + 101: 0000000000004d80 51 FUNC GLOBAL DEFAULT 12 __fixsfti@@GCC_3.0 + 102: 0000000000005d90 4397 FUNC GLOBAL DEFAULT 12 __addtf3@@GCC_4.3.0 + 103: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.3.0 + 104: 00000000000035b0 32 FUNC GLOBAL DEFAULT 12 __negvsi2@@GCC_3.0 + 105: 00000000000031b0 30 FUNC GLOBAL DEFAULT 12 __absvdi2@@GCC_3.0 + 106: 00000000000031f0 37 FUNC GLOBAL DEFAULT 12 __absvti2@@GCC_3.4.4 + 107: 0000000000002fe0 24 FUNC GLOBAL DEFAULT 12 __multi3@@GCC_3.0 + 108: 000000000000ff70 26 FUNC GLOBAL DEFAULT 12 _Unwind_DeleteException@@GCC_3.0 + 109: 0000000000003020 85 FUNC GLOBAL DEFAULT 12 __lshrti3@@GCC_3.0 + 110: 000000000000d400 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetCFA@@GCC_3.3 + 111: 000000000000d160 2 FUNC GLOBAL DEFAULT 12 __enable_execute_stack@@GCC_3.4.2 + 112: 00000000000036c0 90 FUNC GLOBAL DEFAULT 12 __popcountdi2@@GCC_3.4 + 113: 000000000000c300 309 FUNC GLOBAL DEFAULT 12 __netf2@GCC_3.0 + 114: 000000000000c300 309 FUNC GLOBAL DEFAULT 12 __netf2@@GCC_4.3.0 + 115: 0000000000003720 134 FUNC GLOBAL DEFAULT 12 __popcountti2@@GCC_3.4 + 116: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.0.0 + 117: 00000000000031a0 2 FUNC GLOBAL DEFAULT 12 __clear_cache@@GCC_3.0 + 118: 0000000000009b30 235 FUNC GLOBAL DEFAULT 12 __floatunsitf@@GCC_4.3.0 + 119: 0000000000009840 250 FUNC GLOBAL DEFAULT 12 __fixtfsi@@GCC_4.3.0 + 120: 0000000000004dc0 52 FUNC GLOBAL DEFAULT 12 __fixdfti@@GCC_3.0 + 121: 0000000000003140 37 FUNC GLOBAL DEFAULT 12 __cmpti2@@GCC_3.0 + 122: 000000000000ae10 560 FUNC GLOBAL DEFAULT 12 __extenddftf2@@GCC_4.3.0 + 123: 0000000000004c20 5 FUNC GLOBAL DEFAULT 12 __bswapsi2@@GCC_4.3.0 + 124: 000000000000fb80 341 FUNC GLOBAL DEFAULT 12 _Unwind_RaiseException@@GCC_3.0 + 125: 0000000000009fe0 235 FUNC GLOBAL DEFAULT 12 __floatunditf@@GCC_4.3.0 + 126: 0000000000005330 230 FUNC GLOBAL DEFAULT 12 __floatuntisf@@GCC_4.2.0 + 127: 0000000000003250 37 FUNC GLOBAL DEFAULT 12 __addvsi3@@GCC_3.0 + 128: 000000000000bf80 437 FUNC GLOBAL DEFAULT 12 __gttf2@@GCC_4.3.0 + 129: 000000000000bf80 437 FUNC GLOBAL DEFAULT 12 __gttf2@GCC_3.0 + 130: 0000000000011a10 37 FUNC GLOBAL DEFAULT 12 __deregister_frame@@GCC_3.0 + 131: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_3.3.1 + 132: 0000000000003690 6 FUNC GLOBAL DEFAULT 12 __ctzdi2@@GCC_3.4 + 133: 0000000000005560 371 FUNC GLOBAL DEFAULT 12 __divti3@@GCC_3.0 + 134: 0000000000003940 680 FUNC GLOBAL DEFAULT 12 __mulsc3@@GCC_4.0.0 + 135: 00000000000036a0 28 FUNC GLOBAL DEFAULT 12 __ctzti2@@GCC_3.4 + 136: 0000000000011800 38 FUNC GLOBAL DEFAULT 12 __register_frame@@GCC_3.0 + 137: 00000000000118b0 9 FUNC GLOBAL DEFAULT 12 __register_frame_info_table@@GCC_3.0 + 138: 0000000000003830 80 FUNC GLOBAL DEFAULT 12 __powisf2@@GCC_4.0.0 + 139: 0000000000004c40 36 FUNC GLOBAL DEFAULT 12 __clrsbdi2@@GCC_4.7.0 + 140: 0000000000004c70 62 FUNC GLOBAL DEFAULT 12 __clrsbti2@@GCC_4.7.0 + 141: 000000000000bf80 437 FUNC GLOBAL DEFAULT 12 __getf2@@GCC_4.3.0 + 142: 0000000000004cb0 43 FUNC GLOBAL DEFAULT 12 __fixunssfdi@@GCC_3.0 + 143: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GCC_4.7.0 + 144: 000000000000b240 1015 FUNC GLOBAL DEFAULT 12 __trunctfsf2@@GCC_4.3.0 + 145: 0000000000007960 2460 FUNC GLOBAL DEFAULT 12 __multf3@@GCC_4.3.0 + 146: 000000000000fe90 221 FUNC GLOBAL DEFAULT 12 _Unwind_Resume_or_Rethrow@@GCC_3.3 + 147: 0000000000012250 53 FUNC GLOBAL DEFAULT 12 __emutls_register_common@@GCC_4.3.0 + 148: 0000000000004e40 159 FUNC GLOBAL DEFAULT 12 __fixunssfti@@GCC_3.0 + 149: 00000000000032e0 46 FUNC GLOBAL DEFAULT 12 __subvdi3@@GCC_3.0 + 150: 0000000000003340 85 FUNC GLOBAL DEFAULT 12 __subvti3@@GCC_3.4.4 + 151: 00000000002153f0 16 OBJECT GLOBAL DEFAULT 26 __cpu_model@@GCC_4.8.0 + 152: 0000000000009c20 372 FUNC GLOBAL DEFAULT 12 __fixtfdi@@GCC_4.3.0 + 153: 00000000000117f0 9 FUNC GLOBAL DEFAULT 12 __register_frame_info@@GCC_3.0 + 154: 0000000000005b30 463 FUNC GLOBAL DEFAULT 12 __udivmodti4@@GCC_3.0 + 155: 0000000000003580 39 FUNC GLOBAL DEFAULT 12 __negvdi2@@GCC_3.0 + 156: 000000000000a0d0 508 FUNC GLOBAL DEFAULT 12 __fixtfti@@GCC_4.3.0 + 157: 000000000000c140 445 FUNC GLOBAL DEFAULT 12 __lttf2@@GCC_4.3.0 + 158: 00000000000035d0 71 FUNC GLOBAL DEFAULT 12 __negvti2@@GCC_3.4.4 + 159: 0000000000011a00 5 FUNC GLOBAL DEFAULT 12 __deregister_frame_info@@GCC_3.0 + 160: 0000000000004ce0 47 FUNC GLOBAL DEFAULT 12 __fixunsdfdi@@GCC_3.0 + 161: 000000000000c140 445 FUNC GLOBAL DEFAULT 12 __lttf2@GCC_3.0 + 162: 0000000000011e00 636 FUNC GLOBAL DEFAULT 12 __gcc_personality_v0@@GCC_3.3.1 + 163: 0000000000004ee0 151 FUNC GLOBAL DEFAULT 12 __fixunsdfti@@GCC_3.0 + 164: 0000000000009940 210 FUNC GLOBAL DEFAULT 12 __fixunstfsi@@GCC_4.3.0 + 165: 000000000000d410 80 FUNC GLOBAL DEFAULT 12 _Unwind_SetGR@@GCC_3.0 + 166: 00000000000042e0 760 FUNC GLOBAL DEFAULT 12 __divsc3@@GCC_4.0.0 + 167: 0000000000005420 230 FUNC GLOBAL DEFAULT 12 __floatuntidf@@GCC_4.2.0 + 168: 000000000000d3b0 72 FUNC GLOBAL DEFAULT 12 _Unwind_GetGR@@GCC_3.0 + 169: 000000000000d500 8 FUNC GLOBAL DEFAULT 12 _Unwind_GetTextRelBase@@GCC_3.0 + 170: 000000000000fce0 212 FUNC GLOBAL DEFAULT 12 _Unwind_ForcedUnwind@@GCC_3.0 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgio-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgio-2.0.so.0.txt new file mode 100644 index 000000000000..62d2dceacbe6 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgio-2.0.so.0.txt @@ -0,0 +1,2914 @@ +Library: /lib64/libgio-2.0.so.0 +Package: glib2-2.56.1-9.el7_9.x86_64 + + +Symbol table '.dynsym' contains 2908 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_object + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_validate + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_module_get_type + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_update + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_new_full + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_move + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_pop_thread_default + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_memdup + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_is_variant + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_objv + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int64 + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_new + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND symlink@GLIBC_2.2.5 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_get_first_value + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_get_string + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_string + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_value + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_sort + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_sort + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_bytestring + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_remove + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkdir_with_parents + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_take_ref + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_new_table@MOUNT_2.19 (3) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_clear + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND endmntent@GLIBC_2.2.5 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.2.5 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_unset + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_priority + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdupv + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_parsed + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_shutdown + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_get_dirname + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_is_absolute + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_uint16 + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_run_dispose + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_string + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_command_line_sync + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_find + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_new + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_has_key + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__ENUM + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_get_data + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_free + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateReset + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_get_builtin_optmap@MOUNT_2.19 (3) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boxed + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_string + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __gcc_personality_v0@GCC_3.3.1 (4) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_va + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__BOOLEAN + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unlink + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_new + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_push_tail + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_override_property + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_keys + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_iconv_open + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_objv + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_string_list + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_values + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.2.5 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_equal + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_byte + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_prepend + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_new + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcngettext@GLIBC_2.2.5 (2) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_module_use + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dir_close + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_of_type + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_value + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_set_size + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_shell_parse_argv + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_new + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getfilecon_raw + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_pton@GLIBC_2.2.5 (2) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_lock + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_ignore_unknown_options + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (5) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrgid_r@GLIBC_2.2.5 (2) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateEnd + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_add + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unix_open_pipe + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_string + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_ref_sink + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_freeze_notify + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strtoll + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_children + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.2.5 (2) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_time_val_from_iso8601 + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_double + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_modify_unix_fd + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dir_read_name + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_get_basename + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_int32 + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_is_dict_entry + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __h_errno_location@GLIBC_2.2.5 (5) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_open + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (2) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_string + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_from_name + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_strv + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_dup_string + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_quit + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unix_new + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_add + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_get_size + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new_with_free_func + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_is_empty + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_new_valist + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_data + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_print + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_byteswap + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_signature + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_lookup_extended + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_string + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_free + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND utimes@GLIBC_2.2.5 (2) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_schar + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_new + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_new + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_steal_all + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_random_int + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_init + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_add_value + 136: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_pointer + 138: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.2.5 (5) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_instance_private + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_enum + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_object + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emit_by_name + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateGetHeader@ZLIB_1.2.2 (6) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_type + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup_extended + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_keys_as_array + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmmsg@GLIBC_2.14 (7) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND splice@GLIBC_2.5 (8) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_new + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND llistxattr@GLIBC_2.3 (9) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.2.5 (2) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (2) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_to_utf8 + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_clear_error + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_get_fstype@MOUNT_2.19 (3) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmmsg@GLIBC_2.12 (10) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boolean + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_normal_form + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_unlock + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.2.5 (2) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_boolean + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_get_keys + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (2) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_double + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_close + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_enum + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND openat@GLIBC_2.4 (11) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_property + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_get_time + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_child_watch_add + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_string + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflate + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_foreach + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_remove_key + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strpbrk@GLIBC_2.2.5 (2) + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove_index + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__VARIANT + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename_valist + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_length + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_int + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freecon + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_copy + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_broadcast + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit_ + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data_full + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc_n + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_set_data_full + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_from_data + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_unref + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_poll + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (5) + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_to_uri + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_printerr + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_remove_range + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (2) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (2) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_environ_getenv + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.2.5 (5) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_first + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_convert + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup@GLIBC_2.2.5 (2) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unix_set_fd_nonblocking + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_new + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND if_nametoindex@GLIBC_2.2.5 (2) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free_full + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_command_line_async + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_size + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __uflow@GLIBC_2.2.5 (2) + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uint + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_optstr_get_flags@MOUNT_2.19 (3) + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_condition_get_type + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dup_bytestring_array + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_free + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_is_a + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_print + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_string_list + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_gtype + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_tokenize_and_fold + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_variant + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_end + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new_with_free_func + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_install_property + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_insert_value + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_unprocessed + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_unref + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_uint + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_ref + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_move_to_front + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 242: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_new_tuple + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unsetenv + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_new_file + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_filename_charsets + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_set_marshal + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_free_full + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_contains + 249: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_foreach + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_casefold + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__STRING + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_next + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (12) + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_ref + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_remove_index + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_insert_before + 259: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_unescape_segment + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_end_parse + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_parse_strv + 262: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hostname_is_ip_address + 263: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_async_with_pipes + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (2) + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_insert + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_uint16 + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hostname_is_non_ascii + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_clear + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dcgettext + 272: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_copy + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (2) + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_access + 275: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_printf_escaped + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_dict_entry + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_has_group + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_notify + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (2) + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getmntent_r@GLIBC_2.2.5 (2) + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_sized_new + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_new + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_close_pid + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_strv + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_language_names + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_new + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strndup + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_unref + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgetxattr@GLIBC_2.3 (9) + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setfilecon_raw + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit2_ + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_int + 293: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_equal + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_error + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new_valist + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handler_find + 297: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_read_line + 299: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_replace_literal + 300: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgetfilecon_raw + 301: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_system_config_dirs + 302: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_length + 303: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_read_link + 304: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (2) + 305: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_private_set + 306: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_system_data_dirs + 307: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_from_utf8 + 308: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_boolean + 309: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 310: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_init + 311: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_classify + 312: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_get_digest + 313: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove_all + 314: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_clear + 315: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflate + 316: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.2.5 (2) + 317: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0_n + 318: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_accumulator_first_wins + 319: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_next + 320: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_data + 321: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_floating + 322: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (2) + 323: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hostname_to_ascii + 324: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 325: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib_gettext + 326: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 327: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_sink + 328: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_gtype + 329: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref + 330: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_child_value + 331: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_next + 332: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_boxed + 333: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 334: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_parse + 335: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_utf8_skip + 336: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_weak_unref + 337: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.2.5 (2) + 338: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __dn_expand@GLIBC_2.2.5 (13) + 339: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_ref + 340: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_invoke_full + 341: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_length + 342: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_uint64 + 343: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 344: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 345: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 346: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_get_length + 347: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_set_size + 348: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fnmatch@GLIBC_2.2.5 (2) + 349: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_int32 + 350: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_len + 351: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_locale_string + 352: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_get_target@MOUNT_2.19 (3) + 353: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_new + 354: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_lock + 355: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_free_iter@MOUNT_2.19 (3) + 356: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_steal + 357: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_remove_group + 358: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 359: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_fundamentally_a + 360: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new_take + 361: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_remove + 362: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_free + 363: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_time_new_from_timeval_local + 364: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_name + 365: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_propagate_prefixed_error + 366: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_string + 367: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 368: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_ninit@GLIBC_2.2.5 (2) + 369: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_ulong + 370: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_write_chars + 371: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_end_iter + 372: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 373: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_array + 374: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_emitv + 375: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_new_iter@MOUNT_2.19 (3) + 376: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handlers_disconnect_matched + 377: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_string + 378: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_new + 379: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_new_static + 380: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (2) + 381: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (2) + 382: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateEnd + 383: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lchown@GLIBC_2.2.5 (2) + 384: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 385: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strstr_len + 386: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_environ_setenv + 387: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_release + 388: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_copy + 389: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkstemp_full + 390: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_checked_ + 391: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.2.5 (2) + 392: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (9) + 393: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_add_weak_pointer + 394: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_set_boolean + 395: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_iteration + 396: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_init@GLIBC_2.2.5 (2) + 397: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_insert_vals + 398: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 399: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 400: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_size + 401: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 402: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_next + 403: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_find_program_in_path + 404: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_unref + 405: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_remove + 406: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_from_bytes + 407: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_init + 408: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_trylock + 409: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateReset + 410: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_summary + 411: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_prev + 412: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_fundamental + 413: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_get_contents + 414: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 415: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_key + 416: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_last + 417: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_free + 418: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_start_group + 419: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __read_chk@GLIBC_2.4 (11) + 420: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_pointer + 421: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (2) + 422: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.2.5 (2) + 423: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_parse_scheme + 424: 0000000000000000 0 FUNC GLOBAL DEFAULT UND link@GLIBC_2.2.5 (2) + 425: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_unlock + 426: 0000000000000000 0 FUNC GLOBAL DEFAULT UND statfs@GLIBC_2.2.5 (2) + 427: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_module_unuse + 428: 0000000000000000 0 FUNC GLOBAL DEFAULT UND flistxattr@GLIBC_2.3 (9) + 429: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setxattr@GLIBC_2.3 (9) + 430: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 431: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_get_value_by_nick + 432: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data + 433: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_variant + 434: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_ref + 435: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_shell_quote + 436: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_double + 437: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (2) + 438: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_boolean + 439: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_current_source + 440: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 441: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_insert + 442: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_new_literal + 443: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_to_data + 444: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (2) + 445: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_propagate_error + 446: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_uint64 + 447: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_loop + 448: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new_seconds + 449: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_get_ready_time + 450: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_push_thread_default + 451: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.2.5 (2) + 452: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_init + 453: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_string_is_valid + 454: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_install_properties + 455: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.2.5 (5) + 456: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_free + 457: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_uri_escaped + 458: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_uchar + 459: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_environ + 460: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_fixed_array + 461: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref_thread_default + 462: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_copy_deep + 463: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek + 464: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_element + 465: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_begin_iter + 466: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_lookup + 467: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get + 468: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_ref + 469: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_vprintf + 470: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.2.5 (5) + 471: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_uint32 + 472: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_iter_remove + 473: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_newv + 474: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_snprintf + 475: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_lock + 476: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_append + 477: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_source_new + 478: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND in6addr_any@GLIBC_2.2.5 (2) + 479: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_accumulator_true_handled + 480: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_config_dir + 481: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_init + 482: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_try_string + 483: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_ensure + 484: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.2.5 (2) + 485: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_enum + 486: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_close + 487: 0000000000000000 0 FUNC GLOBAL DEFAULT UND is_selinux_enabled + 488: 0000000000000000 0 FUNC GLOBAL DEFAULT UND kill@GLIBC_2.2.5 (2) + 489: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_end + 490: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_compare + 491: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (2) + 492: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_unescape_string + 493: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_free_table@MOUNT_2.19 (3) + 494: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_compute_checksum_for_string + 495: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_boolean + 496: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_set_max_threads + 497: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 498: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_get_char + 499: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get + 500: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_object_path + 501: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_concat + 502: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_nquery@GLIBC_2.2.5 (13) + 503: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateSetHeader@ZLIB_1.2.2 (6) + 504: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_pointer + 505: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.2.5 (2) + 506: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set + 507: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_boxed + 508: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove_link + 509: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_set + 510: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_default + 511: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_insert_sorted + 512: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_get_type + 513: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_new + 514: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error + 515: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_wait + 516: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_free + 517: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.2.5 (5) + 518: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_set_size + 519: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (2) + 520: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.2.5 (2) + 521: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_object + 522: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.2.5 (2) + 523: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_ref + 524: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free_1 + 525: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_add_group + 526: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uint64 + 527: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (5) + 528: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_variant + 529: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_cmpnum + 530: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_init + 531: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_unref + 532: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_init + 533: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_variant + 534: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_container + 535: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_unref + 536: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 537: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_get_type + 538: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchmod@GLIBC_2.2.5 (2) + 539: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_locale_string_list + 540: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_prepend_c + 541: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_matches + 542: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 543: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_display_basename + 544: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_weak_ref_get + 545: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_value + 546: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_handle + 547: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 548: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 549: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_dummy_callback + 550: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_impl + 551: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handler_disconnect + 552: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_child_watch_source_new + 553: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_int_hash + 554: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_init1@GLIBC_2.9 (14) + 555: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_new + 556: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new_full + 557: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_symbol + 558: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_ascii_table + 559: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_parse_debug_string + 560: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_check_format_string + 561: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_parse + 562: 0000000000000000 0 FUNC GLOBAL DEFAULT UND raise@GLIBC_2.2.5 (5) + 563: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_default_interface_peek + 564: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_clear + 565: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_equal + 566: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 567: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchomp + 568: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_sort + 569: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 570: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.2.5 (2) + 571: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_new + 572: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_bytestring + 573: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_invoke + 574: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 575: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_last + 576: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 577: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 578: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_table_parse_fstab@MOUNT_2.19 (3) + 579: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_open_tmp + 580: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_prgname + 581: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_has_handler_pending + 582: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (2) + 583: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (2) + 584: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_get_fstab_path@MOUNT_2.19 (3) + 585: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_sized_new + 586: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_flags + 587: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (2) + 588: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_create_watch + 589: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 590: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_iconv + 591: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_object_path + 592: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_nnodes + 593: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unix_fd_source_new + 594: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_remove + 595: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_convert_error_quark + 596: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_unref + 597: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_bytestring_array + 598: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_object + 599: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get_iter_at_pos + 600: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_get_groups + 601: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_has_prefix + 602: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_get_context + 603: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_closure_ref + 604: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_get_type + 605: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_schar + 606: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name + 607: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_child + 608: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_uint64 + 609: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (5) + 610: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_free + 611: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_new + 612: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_from_uri + 613: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_source_new + 614: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 615: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchug + 616: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_lookup + 617: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_remove + 618: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_data + 619: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 620: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove + 621: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strv_get_type + 622: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strjoinv + 623: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_variant + 624: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_replace + 625: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 626: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_add_prerequisite + 627: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_iconv_close + 628: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_split + 629: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_insert_sorted + 630: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_handler_is_connected + 631: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_boolean + 632: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_setenv + 633: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_int16 + 634: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_load_from_file + 635: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_va + 636: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (11) + 637: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_peek_string + 638: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 639: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.2.5 (2) + 640: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_get_position + 641: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_boxed + 642: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_remove_weak_pointer + 643: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_tuple + 644: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strncasecmp + 645: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_contains + 646: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_copy + 647: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_n_children + 648: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_sort + 649: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_new + 650: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 651: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_unref + 652: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_tolower + 653: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 654: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_ref + 655: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_invoke + 656: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__VOID + 657: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_collate_key + 658: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.2.5 (5) + 659: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cond_signal + 660: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_add_child_source + 661: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_rm_watch@GLIBC_2.4 (11) + 662: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 663: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_lookup_value + 664: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_self + 665: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_append + 666: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_locale_to_utf8 + 667: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_reverse + 668: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_1 + 669: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_interface_install_property + 670: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_byte + 671: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_get + 672: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_double + 673: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_uri_escape_string + 674: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_data_dir + 675: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (2) + 676: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getxattr@GLIBC_2.3 (9) + 677: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_iter_is_end + 678: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 679: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 680: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 681: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_random_int_range + 682: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_flags + 683: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 684: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_int16 + 685: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_class_find_property + 686: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_strv + 687: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_int64 + 688: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_boxed + 689: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chown@GLIBC_2.2.5 (2) + 690: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_get_length + 691: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (2) + 692: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_data_as_bytes + 693: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstatat@GLIBC_2.4 (11) + 694: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_path_skip_root + 695: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_unref + 696: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inflateInit_ + 697: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __res_nclose@GLIBC_2.2.5 (2) + 698: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_supported + 699: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 700: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_base64_encode + 701: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_async + 702: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 703: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_unlock + 704: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_strdup_options@MOUNT_2.19 (3) + 705: 0000000000000000 0 FUNC GLOBAL DEFAULT UND deflateInit2_ + 706: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_set_sort_function + 707: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_remove_index_fast + 708: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_print_string + 709: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_query_unix_fd + 710: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_add_full + 711: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_set_size + 712: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_init + 713: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_replace_qdata + 714: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (9) + 715: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error_literal + 716: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_new + 717: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 718: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (2) + 719: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_insert_c + 720: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 721: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_object + 722: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_peek_head + 723: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (2) + 724: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_lock + 725: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename + 726: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_unref + 727: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_monotonic_time + 728: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_has_regular_mtab@MOUNT_2.19 (3) + 729: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.2.5 (2) + 730: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_get_contents + 731: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata_full + 732: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lgetxattr@GLIBC_2.3 (9) + 733: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_unref + 734: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_name + 735: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_get_bytes + 736: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_set_contents + 737: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_xdigit_value + 738: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_VOID__OBJECT + 739: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (2) + 740: 0000000000000000 0 FUNC GLOBAL DEFAULT UND remove@GLIBC_2.2.5 (2) + 741: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_position + 742: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_is_empty + 743: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_fs_get_source@MOUNT_2.19 (3) + 744: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unref + 745: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 746: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_remove_unix_fd + 747: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_flush + 748: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_idle_add + 749: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_ready_time + 750: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (2) + 751: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_open + 752: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 753: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strerror + 754: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_lookup + 755: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_table_next_fs@MOUNT_2.19 (3) + 756: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_unlock + 757: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_ulong + 758: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_uint + 759: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_concat + 760: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_int64 + 761: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lgetfilecon_raw + 762: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_type_string + 763: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 764: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_add_watch@GLIBC_2.4 (11) + 765: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_path + 766: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.2.5 (2) + 767: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.2.5 (2) + 768: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_acquire + 769: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message + 770: 0000000000000000 0 FUNC GLOBAL DEFAULT UND endservent@GLIBC_2.2.5 (2) + 771: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_set_translation_domain + 772: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_usleep + 773: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_signal_connect_closure_by_id + 774: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_get_type + 775: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_new + 776: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_module_error + 777: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind_textdomain_codeset@GLIBC_2.2.5 (2) + 778: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_close + 779: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_attach + 780: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_home_dir + 781: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_element_stack + 782: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_is_destroyed + 783: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name_from_instance + 784: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 785: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (2) + 786: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_notify_by_pspec + 787: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_free + 788: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_uint32 + 789: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_uchar + 790: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 791: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_warn_message + 792: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcspn@GLIBC_2.2.5 (2) + 793: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.2.5 (2) + 794: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_object + 795: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_current_time + 796: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_copy + 797: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 798: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.2.5 (5) + 799: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 800: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_has_suffix + 801: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_tree_foreach + 802: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_interface_peek_parent + 803: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_unref + 804: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mkstemp + 805: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_clear + 806: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_fixed_array + 807: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_value_holds + 808: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 809: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new_take_string + 810: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dngettext + 811: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc_n + 812: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.2.5 (2) + 813: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_cclosure_marshal_generic + 814: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_timeout_add + 815: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_description + 816: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_cache_dir + 817: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mnt_table_parse_mtab@MOUNT_2.19 (3) + 818: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int + 819: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_new + 820: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_aton@GLIBC_2.2.5 (2) + 821: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_add_unix_fd + 822: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_iter_next_value + 823: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_get_int64 + 824: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_string + 825: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_gtype + 826: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_set_ulong + 827: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 828: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.2.5 (2) + 829: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_special_dir + 830: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strdown + 831: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_property + 832: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 833: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach_remove + 834: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_pool_push + 835: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_add_entries + 836: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 837: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gai_strerror@GLIBC_2.2.5 (2) + 838: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_get_gtype + 839: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_hash + 840: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_signature + 841: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_add_interface_static + 842: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_to_string + 843: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_error_quark + 844: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_main_group + 845: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_filename_display_name + 846: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dgettext + 847: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_bytestring + 848: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_sequence_sort_changed + 849: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_private_get + 850: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (5) + 851: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_run + 852: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listxattr@GLIBC_2.3 (9) + 853: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove + 854: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_parse_error_quark + 855: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_is_tuple + 856: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_prefix_error + 857: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _Unwind_Resume@GCC_3.0 (15) + 858: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_collect_attributes + 859: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_thaw_notify + 860: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.2.5 (2) + 861: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inotify_init@GLIBC_2.4 (11) + 862: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.2.5 (5) + 863: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_full + 864: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_unref + 865: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 866: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (2) + 867: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_new + 868: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 869: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 870: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 871: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 872: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 873: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_prgname + 874: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.2.5 (2) + 875: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (7) + 876: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (5) + 877: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strjoin + 878: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 879: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fchown@GLIBC_2.2.5 (2) + 880: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND in6addr_loopback@GLIBC_2.2.5 (2) + 881: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_new + 882: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_take_variant + 883: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_user_runtime_dir + 884: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_dir_open + 885: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (5) + 886: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_file_test + 887: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_value_dup_variant + 888: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (2) + 889: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam@GLIBC_2.2.5 (2) + 890: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_string + 891: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 892: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.2.5 (2) + 893: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_get_type + 894: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_equal + 895: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 896: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_get_handle + 897: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_environ_unsetenv + 898: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.2.5 (2) + 899: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.2.5 (2) + 900: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strcasecmp + 901: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_load_from_data + 902: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_queue_pop_head + 903: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 904: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strlcpy + 905: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib__private__ + 906: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_param_spec_flags + 907: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_spawn_check_exit_status + 908: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_get_thread_default + 909: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopendir@GLIBC_2.4 (11) + 910: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_clear + 911: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_current_dir + 912: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_error_quark + 913: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getservbyname@GLIBC_2.2.5 (2) + 914: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_context_set_help_enabled + 915: 00000000000b3790 1093 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_for_bus_sync + 916: 00000000000dfc20 152 FUNC GLOBAL DEFAULT 11 g_test_dbus_get_type + 917: 000000000005a130 182 FUNC GLOBAL DEFAULT 11 g_file_info_get_symbolic_icon + 918: 00000000000b3df0 82 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_authorize_authenticated_peer + 919: 000000000008a5a0 357 FUNC GLOBAL DEFAULT 11 g_subprocess_new + 920: 0000000000076520 213 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_lookup + 921: 00000000000982f0 162 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_database + 922: 000000000008bfe0 86 FUNC GLOBAL DEFAULT 11 g_socket_service_start + 923: 00000000000865d0 234 FUNC GLOBAL DEFAULT 11 g_socket_control_message_deserialize + 924: 000000000006cbe0 56 FUNC GLOBAL DEFAULT 11 g_network_address_new + 925: 0000000000076980 55 FUNC GLOBAL DEFAULT 11 g_resolver_free_addresses + 926: 00000000000ac3d0 12 FUNC GLOBAL DEFAULT 11 g_menu_model_iterate_item_links + 927: 00000000000a6ff0 145 FUNC GLOBAL DEFAULT 11 g_action_group_action_state_changed + 928: 0000000000114560 13 FUNC GLOBAL DEFAULT 11 g_settings_list_children + 929: 000000000006d7b0 90 FUNC GLOBAL DEFAULT 11 g_network_address_get_port + 930: 0000000000060830 151 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_loopback + 931: 0000000000059260 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_uint64 + 932: 00000000000f7f40 219 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_get + 933: 0000000000112b80 269 FUNC GLOBAL DEFAULT 11 g_settings_new_full + 934: 000000000008d800 117 FUNC GLOBAL DEFAULT 11 g_task_set_task_data + 935: 00000000000a4a90 9 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_environ + 936: 000000000004b6d0 112 FUNC GLOBAL DEFAULT 11 g_file_get_parent + 937: 0000000000077290 55 FUNC GLOBAL DEFAULT 11 g_resolver_free_targets + 938: 00000000000a2040 130 FUNC GLOBAL DEFAULT 11 g_application_set_option_context_description + 939: 0000000000062570 137 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_flowinfo + 940: 0000000000098e20 278 FUNC GLOBAL DEFAULT 11 g_dtls_connection_shutdown_async + 941: 00000000000564a0 276 FUNC GLOBAL DEFAULT 11 g_file_icon_get_type + 942: 000000000006e990 89 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_set_networks + 943: 0000000000064560 147 FUNC GLOBAL DEFAULT 11 g_input_stream_read_bytes + 944: 0000000000057f50 91 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_unref + 945: 0000000000114130 161 FUNC GLOBAL DEFAULT 11 g_settings_reset + 946: 0000000000077460 132 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_records_finish + 947: 000000000007d7f0 96 FUNC GLOBAL DEFAULT 11 g_socket_get_keepalive + 948: 000000000007da30 88 FUNC GLOBAL DEFAULT 11 g_socket_get_family + 949: 0000000000097ad0 141 FUNC GLOBAL DEFAULT 11 g_tls_password_set_description + 950: 00000000000fe300 88 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_get_fd + 951: 0000000000092a60 217 FUNC GLOBAL DEFAULT 11 g_tls_certificate_new_from_files + 952: 000000000003d9c0 164 FUNC GLOBAL DEFAULT 11 g_cancellable_reset + 953: 00000000000594d0 161 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_object + 954: 00000000000fe470 93 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_get_close_fd + 955: 000000000009e9d0 98 FUNC GLOBAL DEFAULT 11 g_bus_name_owner_flags_get_type + 956: 00000000000a6980 137 FUNC GLOBAL DEFAULT 11 g_action_group_has_action + 957: 00000000000d6030 161 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_error_valist + 958: 00000000000cecf0 102 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_finish + 959: 00000000000a2170 34 FUNC GLOBAL DEFAULT 11 g_application_id_is_valid + 960: 00000000000a7c40 295 FUNC GLOBAL DEFAULT 11 g_simple_action_group_get_type + 961: 000000000005e930 143 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_set_close_base_stream + 962: 0000000000078570 210 FUNC GLOBAL DEFAULT 11 g_resource_open_stream + 963: 00000000000c3db0 409 FUNC GLOBAL DEFAULT 11 g_dbus_connection_register_object_with_closures + 964: 00000000000b17d0 188 FUNC GLOBAL DEFAULT 11 g_dbus_generate_guid + 965: 00000000000dfde0 90 FUNC GLOBAL DEFAULT 11 g_test_dbus_get_bus_address + 966: 0000000000113f70 26 FUNC GLOBAL DEFAULT 11 g_settings_apply + 967: 0000000000095960 360 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_issuer_async + 968: 000000000008c0e0 26 FUNC GLOBAL DEFAULT 11 g_srv_target_free + 969: 0000000000094380 38 FUNC GLOBAL DEFAULT 11 g_tls_error_quark + 970: 000000000006e770 220 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_add_network + 971: 00000000000ad1e0 25 FUNC GLOBAL DEFAULT 11 g_menu_new + 972: 000000000009e5e0 98 FUNC GLOBAL DEFAULT 11 g_resource_flags_get_type + 973: 000000000009e030 98 FUNC GLOBAL DEFAULT 11 g_file_type_get_type + 974: 00000000000a4aa0 128 FUNC GLOBAL DEFAULT 11 g_application_command_line_getenv + 975: 000000000009fbf0 121 FUNC GLOBAL DEFAULT 11 g_list_model_get_item + 976: 0000000000081160 230 FUNC GLOBAL DEFAULT 11 g_socket_get_broadcast + 977: 0000000000042710 135 FUNC GLOBAL DEFAULT 11 g_data_input_stream_set_byte_order + 978: 0000000000082d00 114 FUNC GLOBAL DEFAULT 11 g_socket_address_get_native_size + 979: 000000000005c0b0 152 FUNC GLOBAL DEFAULT 11 g_file_monitor_get_type + 980: 000000000006abe0 90 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_size + 981: 00000000000f95e0 83 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_free + 982: 0000000000052120 62 FUNC GLOBAL DEFAULT 11 g_file_new_for_path + 983: 0000000000098f40 230 FUNC GLOBAL DEFAULT 11 g_dtls_connection_shutdown_finish + 984: 0000000000076d80 175 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_name_finish + 985: 00000000000745d0 174 FUNC GLOBAL DEFAULT 11 g_proxy_connect + 986: 00000000000616c0 174 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_to_string + 987: 00000000000637e0 239 FUNC GLOBAL DEFAULT 11 g_input_stream_close_finish + 988: 0000000000068c30 112 FUNC GLOBAL DEFAULT 11 g_mount_can_eject + 989: 000000000005a480 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_etag + 990: 00000000000d4bc0 109 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_lookup + 991: 00000000000907a0 86 FUNC GLOBAL DEFAULT 11 g_themed_icon_new_with_default_fallbacks + 992: 000000000009dd90 98 FUNC GLOBAL DEFAULT 11 g_mount_mount_flags_get_type + 993: 00000000000acf90 128 FUNC GLOBAL DEFAULT 11 g_menu_item_get_type + 994: 0000000000059c80 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_file_type + 995: 000000000006b540 25 FUNC GLOBAL DEFAULT 11 g_mount_operation_new + 996: 000000000003ddd0 240 FUNC GLOBAL DEFAULT 11 g_cancellable_connect + 997: 00000000000ac2a0 12 FUNC GLOBAL DEFAULT 11 g_menu_model_get_n_items + 998: 000000000004e080 246 FUNC GLOBAL DEFAULT 11 g_file_open_readwrite_finish + 999: 00000000000a9de0 139 FUNC GLOBAL DEFAULT 11 g_action_get_type + 1000: 000000000008ad80 126 FUNC GLOBAL DEFAULT 11 g_subprocess_get_status + 1001: 00000000000c47c0 631 FUNC GLOBAL DEFAULT 11 g_dbus_connection_register_subtree + 1002: 0000000000040d90 284 FUNC GLOBAL DEFAULT 11 g_credentials_is_same_user + 1003: 000000000009eff0 98 FUNC GLOBAL DEFAULT 11 g_dbus_send_message_flags_get_type + 1004: 0000000000072ff0 125 FUNC GLOBAL DEFAULT 11 g_permission_acquire_async + 1005: 0000000000039af0 75 FUNC GLOBAL DEFAULT 11 g_app_launch_context_unsetenv + 1006: 0000000000053470 285 FUNC GLOBAL DEFAULT 11 g_file_stop_mountable_finish + 1007: 000000000007ded0 11 FUNC GLOBAL DEFAULT 11 g_socket_leave_multicast_group_ssm + 1008: 0000000000084a10 71 FUNC GLOBAL DEFAULT 11 g_socket_client_set_proxy_resolver + 1009: 00000000000a7fa0 66 FUNC GLOBAL DEFAULT 11 g_remote_action_group_activate_action_full + 1010: 0000000000113120 378 FUNC GLOBAL DEFAULT 11 g_settings_set_enum + 1011: 0000000000091cf0 130 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_default_database + 1012: 000000000008acb0 104 FUNC GLOBAL DEFAULT 11 g_subprocess_send_signal + 1013: 00000000000a1420 295 FUNC GLOBAL DEFAULT 11 g_application_get_type + 1014: 00000000000a8b70 586 FUNC GLOBAL DEFAULT 11 g_dbus_connection_export_action_group + 1015: 00000000000934d0 136 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_type + 1016: 000000000006ac40 90 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_data_size + 1017: 0000000000062600 137 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_scope_id + 1018: 0000000000113410 378 FUNC GLOBAL DEFAULT 11 g_settings_set_flags + 1019: 00000000000436f0 222 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_upto_async + 1020: 0000000000071730 478 FUNC GLOBAL DEFAULT 11 g_output_stream_splice_async + 1021: 00000000000fac60 154 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_compare + 1022: 0000000000048c80 89 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_get_icon + 1023: 000000000009b440 112 FUNC GLOBAL DEFAULT 11 g_volume_get_icon + 1024: 000000000006ba60 135 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_choice + 1025: 00000000000da100 110 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_flush + 1026: 000000000005e8d0 92 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_get_close_base_stream + 1027: 00000000000a7400 46 FUNC GLOBAL DEFAULT 11 g_action_map_remove_action + 1028: 0000000000064d10 38 FUNC GLOBAL DEFAULT 11 g_io_error_quark + 1029: 000000000005d600 275 FUNC GLOBAL DEFAULT 11 g_file_output_stream_query_info_async + 1030: 0000000000059ec0 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_name + 1031: 0000000000094e20 460 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_chain_async + 1032: 0000000000084760 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_timeout + 1033: 000000000009f920 98 FUNC GLOBAL DEFAULT 11 g_network_connectivity_get_type + 1034: 00000000000a4e50 89 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_exit_status + 1035: 00000000000b27b0 1626 FUNC GLOBAL DEFAULT 11 g_dbus_is_supported_address + 1036: 0000000000053720 438 FUNC GLOBAL DEFAULT 11 g_file_load_bytes + 1037: 0000000000042e20 185 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_uint64 + 1038: 000000000004b3b0 112 FUNC GLOBAL DEFAULT 11 g_file_get_path + 1039: 000000000007dee0 169 FUNC GLOBAL DEFAULT 11 g_socket_get_available_bytes + 1040: 0000000000042ee0 505 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line + 1041: 000000000004f8a0 357 FUNC GLOBAL DEFAULT 11 g_file_query_writable_namespaces + 1042: 00000000000b0950 241 FUNC GLOBAL DEFAULT 11 g_notification_add_button + 1043: 00000000000846b0 8 FUNC GLOBAL DEFAULT 11 g_socket_client_get_protocol + 1044: 0000000000087120 25 FUNC GLOBAL DEFAULT 11 g_socket_listener_new + 1045: 00000000000dffa0 1338 FUNC GLOBAL DEFAULT 11 g_test_dbus_up + 1046: 0000000000053be0 237 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_dup + 1047: 000000000010f790 52 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_summary + 1048: 000000000004de10 246 FUNC GLOBAL DEFAULT 11 g_file_replace_finish + 1049: 00000000000a21a0 107 FUNC GLOBAL DEFAULT 11 g_application_new + 1050: 00000000000f45e0 298 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_action_name + 1051: 0000000000076600 130 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_lookup_finish + 1052: 0000000000053160 250 FUNC GLOBAL DEFAULT 11 g_file_measure_disk_usage_async + 1053: 0000000000059da0 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_is_backup + 1054: 0000000000070c20 217 FUNC GLOBAL DEFAULT 11 g_output_stream_close_finish + 1055: 00000000000536b0 110 FUNC GLOBAL DEFAULT 11 g_file_supports_thread_contexts + 1056: 000000000004dce0 300 FUNC GLOBAL DEFAULT 11 g_file_replace_contents_bytes_async + 1057: 0000000000040eb0 123 FUNC GLOBAL DEFAULT 11 g_credentials_get_native + 1058: 00000000000a6e30 137 FUNC GLOBAL DEFAULT 11 g_action_group_action_added + 1059: 000000000009f5a0 98 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_flags_get_type + 1060: 000000000010e890 21 FUNC GLOBAL DEFAULT 11 g_settings_list_relocatable_schemas + 1061: 000000000004e720 208 FUNC GLOBAL DEFAULT 11 g_file_make_directory + 1062: 0000000000069380 285 FUNC GLOBAL DEFAULT 11 g_mount_remount_finish + 1063: 00000000000ad600 185 FUNC GLOBAL DEFAULT 11 g_menu_item_get_attribute_value + 1064: 000000000009fa00 139 FUNC GLOBAL DEFAULT 11 g_list_model_get_type + 1065: 00000000000877d0 443 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_socket + 1066: 0000000000068b50 112 FUNC GLOBAL DEFAULT 11 g_mount_get_drive + 1067: 0000000000114df0 532 FUNC GLOBAL DEFAULT 11 g_settings_create_action + 1068: 0000000000071c40 355 FUNC GLOBAL DEFAULT 11 g_output_stream_write_all + 1069: 00000000000c7c40 137 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_destination + 1070: 00000000000dfed0 123 FUNC GLOBAL DEFAULT 11 g_test_dbus_stop + 1071: 000000000010f7d0 60 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_description + 1072: 000000000009dbd0 98 FUNC GLOBAL DEFAULT 11 g_file_attribute_status_get_type + 1073: 00000000000d5da0 332 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_dbus_error + 1074: 00000000000604c0 151 FUNC GLOBAL DEFAULT 11 g_inet_address_new_loopback + 1075: 0000000000048370 85 FUNC GLOBAL DEFAULT 11 g_emblem_get_origin + 1076: 00000000000cb920 109 FUNC GLOBAL DEFAULT 11 g_bus_watch_name_with_closures + 1077: 000000000008dc80 86 FUNC GLOBAL DEFAULT 11 g_task_get_source_tag + 1078: 000000000004c390 202 FUNC GLOBAL DEFAULT 11 g_file_query_info_async + 1079: 000000000003e950 34 FUNC GLOBAL DEFAULT 11 g_charset_converter_set_use_fallback + 1080: 000000000004d530 177 FUNC GLOBAL DEFAULT 11 g_file_read_async + 1081: 0000000000078530 52 FUNC GLOBAL DEFAULT 11 g_resource_load + 1082: 00000000000e9ec0 1515 FUNC GLOBAL DEFAULT 11 g_file_monitor_source_handle_event + 1083: 0000000000044080 188 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_uint16 + 1084: 00000000000c7940 164 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_path + 1085: 00000000000a00b0 224 FUNC GLOBAL DEFAULT 11 g_list_store_get_type + 1086: 0000000000059fe0 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_edit_name + 1087: 0000000000038a30 229 FUNC GLOBAL DEFAULT 11 g_app_info_equal + 1088: 0000000000043d10 108 FUNC GLOBAL DEFAULT 11 g_data_output_stream_new + 1089: 000000000008d8f0 122 FUNC GLOBAL DEFAULT 11 g_task_set_check_cancellable + 1090: 0000000000055ba0 95 FUNC GLOBAL DEFAULT 11 g_file_enumerator_has_pending + 1091: 00000000000d50e0 112 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_lookup_interface + 1092: 00000000000d9460 30 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_object_path + 1093: 00000000000391d0 229 FUNC GLOBAL DEFAULT 11 g_app_info_remove_supports_type + 1094: 00000000000617d0 89 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_address + 1095: 000000000009f7d0 98 FUNC GLOBAL DEFAULT 11 g_test_dbus_flags_get_type + 1096: 00000000000a7e70 105 FUNC GLOBAL DEFAULT 11 g_simple_action_group_remove + 1097: 000000000010f810 53 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_value_type + 1098: 00000000000b23a0 170 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_stream + 1099: 000000000003efd0 279 FUNC GLOBAL DEFAULT 11 g_converter_convert + 1100: 000000000006b6b0 127 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_password + 1101: 0000000000055390 414 FUNC GLOBAL DEFAULT 11 g_file_enumerator_next_files_async + 1102: 0000000000082250 361 FUNC GLOBAL DEFAULT 11 g_socket_set_multicast_ttl + 1103: 0000000000090610 214 FUNC GLOBAL DEFAULT 11 g_themed_icon_new_from_names + 1104: 00000000000f5920 147 FUNC GLOBAL DEFAULT 11 g_content_type_is_a + 1105: 00000000000f5f50 796 FUNC GLOBAL DEFAULT 11 g_content_type_guess + 1106: 00000000000c6f50 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_reply_serial + 1107: 00000000000dadb0 30 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_object_path + 1108: 000000000003bdd0 236 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_peek + 1109: 000000000008eaf0 133 FUNC GLOBAL DEFAULT 11 g_task_had_error + 1110: 000000000004f000 246 FUNC GLOBAL DEFAULT 11 g_file_delete_finish + 1111: 0000000000085fb0 161 FUNC GLOBAL DEFAULT 11 g_socket_connection_connect_finish + 1112: 00000000001141f0 146 FUNC GLOBAL DEFAULT 11 g_settings_is_writable + 1113: 00000000000c79f0 247 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_signal + 1114: 0000000000067520 310 FUNC GLOBAL DEFAULT 11 g_io_stream_close_async + 1115: 0000000000072a50 317 FUNC GLOBAL DEFAULT 11 g_output_stream_write_all_async + 1116: 0000000000088e60 65 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_stdin_fd + 1117: 00000000000777c0 517 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_name_async + 1118: 000000000009f0d0 98 FUNC GLOBAL DEFAULT 11 g_dbus_message_byte_order_get_type + 1119: 00000000000825c0 444 FUNC GLOBAL DEFAULT 11 g_socket_bind + 1120: 000000000039d208 0 NOTYPE GLOBAL DEFAULT 26 _edata + 1121: 000000000008e620 137 FUNC GLOBAL DEFAULT 11 g_task_return_boolean + 1122: 00000000000f5880 147 FUNC GLOBAL DEFAULT 11 g_content_type_equals + 1123: 00000000000f8020 89 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_get_length + 1124: 000000000007a880 98 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_handle_cancellation + 1125: 0000000000080a70 266 FUNC GLOBAL DEFAULT 11 g_socket_get_option + 1126: 000000000010d340 137 FUNC GLOBAL DEFAULT 11 g_settings_backend_writable_changed + 1127: 0000000000053590 285 FUNC GLOBAL DEFAULT 11 g_file_poll_mountable_finish + 1128: 000000000008cf40 137 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_set_ignore_hosts + 1129: 00000000000f6540 112 FUNC GLOBAL DEFAULT 11 g_file_descriptor_based_get_fd + 1130: 00000000000ad450 208 FUNC GLOBAL DEFAULT 11 g_menu_item_set_attribute + 1131: 0000000000095460 316 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_for_handle_async + 1132: 00000000000fad80 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_fs_type + 1133: 000000000009d8c0 98 FUNC GLOBAL DEFAULT 11 g_app_info_create_flags_get_type + 1134: 0000000000065800 68 FUNC GLOBAL DEFAULT 11 g_io_extension_point_lookup + 1135: 0000000000086480 106 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_level + 1136: 00000000000f4500 115 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_has_key + 1137: 0000000000034e20 0 FUNC GLOBAL DEFAULT 9 _init + 1138: 00000000000a6ec0 137 FUNC GLOBAL DEFAULT 11 g_action_group_action_removed + 1139: 0000000000085430 5 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_uri_finish + 1140: 00000000000ad990 15 FUNC GLOBAL DEFAULT 11 g_menu_item_set_section + 1141: 00000000000762d0 139 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_get_type + 1142: 00000000000d8a50 111 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_properties + 1143: 000000000007deb0 11 FUNC GLOBAL DEFAULT 11 g_socket_leave_multicast_group + 1144: 00000000000d9e00 473 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_remove_interface + 1145: 00000000000cb990 109 FUNC GLOBAL DEFAULT 11 g_bus_watch_name_on_connection_with_closures + 1146: 00000000000adcd0 65 FUNC GLOBAL DEFAULT 11 g_menu_item_new_section + 1147: 00000000000abc80 81 FUNC GLOBAL DEFAULT 11 g_simple_action_new_stateful + 1148: 000000000005e2f0 251 FUNC GLOBAL DEFAULT 11 g_file_io_stream_query_info + 1149: 000000000010e430 105 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_type + 1150: 0000000000091c30 111 FUNC GLOBAL DEFAULT 11 g_tls_backend_supports_tls + 1151: 00000000000f59d0 73 FUNC GLOBAL DEFAULT 11 g_content_type_is_unknown + 1152: 00000000000f2b50 13 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_is_hidden + 1153: 0000000000113d20 40 FUNC GLOBAL DEFAULT 11 g_settings_set_uint64 + 1154: 0000000000045640 120 FUNC GLOBAL DEFAULT 11 g_drive_can_start_degraded + 1155: 000000000003a1d0 174 FUNC GLOBAL DEFAULT 11 g_async_initable_init_async + 1156: 00000000000dd580 105 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_flags + 1157: 00000000000c2be0 86 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_guid + 1158: 00000000000a1fc0 124 FUNC GLOBAL DEFAULT 11 g_application_set_option_context_summary + 1159: 000000000004e410 246 FUNC GLOBAL DEFAULT 11 g_file_replace_readwrite_finish + 1160: 000000000007a7d0 170 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new + 1161: 00000000000c7030 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_interface + 1162: 000000000008d970 100 FUNC GLOBAL DEFAULT 11 g_task_set_source_tag + 1163: 00000000000a9fc0 112 FUNC GLOBAL DEFAULT 11 g_action_get_state_type + 1164: 00000000000b0e50 208 FUNC GLOBAL DEFAULT 11 g_notification_set_default_action_and_target + 1165: 00000000000fa8b0 20 FUNC GLOBAL DEFAULT 11 g_unix_mounts_changed_since + 1166: 000000000009c440 106 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_mounts + 1167: 0000000000054b00 59 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_new + 1168: 000000000009f530 98 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_flags_get_type + 1169: 00000000000add70 16 FUNC GLOBAL DEFAULT 11 g_menu_append_section + 1170: 00000000000a27c0 134 FUNC GLOBAL DEFAULT 11 g_application_get_is_remote + 1171: 000000000009f370 98 FUNC GLOBAL DEFAULT 11 g_tls_password_flags_get_type + 1172: 00000000000fb2b0 26 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_can_eject + 1173: 000000000009b710 117 FUNC GLOBAL DEFAULT 11 g_volume_can_eject + 1174: 0000000000086390 128 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_type + 1175: 00000000000f3f50 89 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_startup_wm_class + 1176: 0000000000058a00 192 FUNC GLOBAL DEFAULT 11 g_file_info_remove_attribute + 1177: 0000000000091da0 27 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_client_connection_type + 1178: 000000000007aa70 86 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_op_res_gpointer + 1179: 00000000000ad170 13 FUNC GLOBAL DEFAULT 11 g_menu_append_item + 1180: 0000000000076b90 332 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_service_async + 1181: 00000000000a6aa0 137 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_state_type + 1182: 000000000004ee00 208 FUNC GLOBAL DEFAULT 11 g_file_delete + 1183: 000000000007df90 297 FUNC GLOBAL DEFAULT 11 g_socket_shutdown + 1184: 00000000000cba00 235 FUNC GLOBAL DEFAULT 11 g_bus_unwatch_name + 1185: 00000000000d94a0 97 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_interface + 1186: 00000000000ce890 327 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_cached_property + 1187: 0000000000043400 81 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_until_finish + 1188: 00000000000d54d0 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_connection + 1189: 00000000000456c0 285 FUNC GLOBAL DEFAULT 11 g_drive_start_finish + 1190: 0000000000066740 301 FUNC GLOBAL DEFAULT 11 g_io_scheduler_job_send_to_mainloop + 1191: 000000000006dd70 76 FUNC GLOBAL DEFAULT 11 g_network_monitor_can_reach_async + 1192: 00000000000cfa90 40 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_sync + 1193: 00000000000abb80 134 FUNC GLOBAL DEFAULT 11 g_simple_action_set_state_hint + 1194: 0000000000051db0 325 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable_with_operation_finish + 1195: 000000000010e2a0 140 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_unref + 1196: 0000000000081250 352 FUNC GLOBAL DEFAULT 11 g_socket_get_multicast_loopback + 1197: 00000000000ab040 224 FUNC GLOBAL DEFAULT 11 g_property_action_get_type + 1198: 00000000000a6d90 153 FUNC GLOBAL DEFAULT 11 g_action_group_activate_action + 1199: 000000000006f850 129 FUNC GLOBAL DEFAULT 11 g_network_service_set_scheme + 1200: 000000000007a510 155 FUNC GLOBAL DEFAULT 11 g_seekable_truncate + 1201: 0000000000044ee0 122 FUNC GLOBAL DEFAULT 11 g_drive_can_poll_for_media + 1202: 000000000005f1a0 877 FUNC GLOBAL DEFAULT 11 g_icon_to_string + 1203: 000000000004cf70 254 FUNC GLOBAL DEFAULT 11 g_file_replace + 1204: 000000000009f140 98 FUNC GLOBAL DEFAULT 11 g_application_flags_get_type + 1205: 00000000000dcc70 542 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_sync + 1206: 00000000000b0740 108 FUNC GLOBAL DEFAULT 11 g_notification_set_urgent + 1207: 00000000000735e0 112 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_is_readable + 1208: 00000000000fd8c0 151 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_set_close_fd + 1209: 0000000000114400 335 FUNC GLOBAL DEFAULT 11 g_settings_get_child + 1210: 00000000000d2920 67 FUNC GLOBAL DEFAULT 11 g_dbus_arg_info_unref + 1211: 0000000000045970 285 FUNC GLOBAL DEFAULT 11 g_drive_stop_finish + 1212: 00000000000c9620 85 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_locked + 1213: 00000000001129b0 179 FUNC GLOBAL DEFAULT 11 g_settings_new_with_backend + 1214: 00000000000690e0 325 FUNC GLOBAL DEFAULT 11 g_mount_unmount_with_operation_finish + 1215: 000000000003a380 167 FUNC GLOBAL DEFAULT 11 g_async_initable_newv_async + 1216: 000000000004ac30 323 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable_with_operation + 1217: 00000000000c67b0 85 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_message_type + 1218: 0000000000077650 354 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_name + 1219: 00000000000a04d0 188 FUNC GLOBAL DEFAULT 11 g_list_store_append + 1220: 00000000000a7d90 105 FUNC GLOBAL DEFAULT 11 g_simple_action_group_lookup + 1221: 0000000000073ee0 228 FUNC GLOBAL DEFAULT 11 g_pollable_source_new_full + 1222: 000000000004bf70 235 FUNC GLOBAL DEFAULT 11 g_file_query_info + 1223: 000000000009b540 112 FUNC GLOBAL DEFAULT 11 g_volume_get_uuid + 1224: 00000000000cfac0 5 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_with_unix_fd_list + 1225: 000000000005f890 952 FUNC GLOBAL DEFAULT 11 g_icon_deserialize + 1226: 000000000004f240 177 FUNC GLOBAL DEFAULT 11 g_file_trash_async + 1227: 000000000008d090 137 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_set_uri_proxy + 1228: 00000000000a4b20 23 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_is_remote + 1229: 0000000000044200 184 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_uint32 + 1230: 00000000000c6810 167 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_message_type + 1231: 000000000008f5c0 158 FUNC GLOBAL DEFAULT 11 g_tcp_wrapper_connection_get_type + 1232: 00000000000622e0 56 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_new + 1233: 000000000003b4a0 249 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_get_type + 1234: 0000000000069f10 25 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_new + 1235: 00000000000f3470 80 FUNC GLOBAL DEFAULT 11 g_app_info_get_default_for_uri_scheme + 1236: 0000000000040c90 251 FUNC GLOBAL DEFAULT 11 g_credentials_to_string + 1237: 000000000003cdd0 89 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_get_auto_grow + 1238: 000000000006f320 90 FUNC GLOBAL DEFAULT 11 g_network_service_get_protocol + 1239: 0000000000075010 9 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_password + 1240: 0000000000084700 72 FUNC GLOBAL DEFAULT 11 g_socket_client_set_local_address + 1241: 0000000000084820 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_tls_validation_flags + 1242: 00000000000d59f0 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_parameters + 1243: 000000000009b3d0 112 FUNC GLOBAL DEFAULT 11 g_volume_get_name + 1244: 00000000000430e0 114 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_utf8 + 1245: 00000000000c4210 78 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call + 1246: 00000000000807a0 40 FUNC GLOBAL DEFAULT 11 g_socket_send_messages + 1247: 00000000000f2c20 5 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_filename + 1248: 00000000000a6c50 137 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_state + 1249: 0000000000090930 265 FUNC GLOBAL DEFAULT 11 g_themed_icon_prepend_name + 1250: 000000000005ae30 196 FUNC GLOBAL DEFAULT 11 g_file_info_set_symlink_target + 1251: 0000000000058bf0 177 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_status + 1252: 00000000000686f0 263 FUNC GLOBAL DEFAULT 11 g_mount_guess_content_type + 1253: 000000000003d560 70 FUNC GLOBAL DEFAULT 11 g_bytes_icon_new + 1254: 0000000000071a30 81 FUNC GLOBAL DEFAULT 11 g_output_stream_clear_pending + 1255: 000000000003da90 72 FUNC GLOBAL DEFAULT 11 g_cancellable_set_error_if_cancelled + 1256: 00000000000657f0 7 FUNC GLOBAL DEFAULT 11 g_io_modules_scan_all_in_directory + 1257: 00000000000844b0 168 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_host_async + 1258: 0000000000063190 152 FUNC GLOBAL DEFAULT 11 g_input_stream_get_type + 1259: 0000000000065e50 9 FUNC GLOBAL DEFAULT 11 g_io_extension_ref_class + 1260: 000000000004f300 213 FUNC GLOBAL DEFAULT 11 g_file_trash_finish + 1261: 00000000000c4790 5 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_with_unix_fd_list + 1262: 0000000000044840 239 FUNC GLOBAL DEFAULT 11 g_drive_poll_for_media + 1263: 0000000000073ff0 29 FUNC GLOBAL DEFAULT 11 g_pollable_stream_write + 1264: 0000000000067440 223 FUNC GLOBAL DEFAULT 11 g_io_stream_set_pending + 1265: 0000000000055f70 117 FUNC GLOBAL DEFAULT 11 g_file_enumerator_get_child + 1266: 0000000000052330 62 FUNC GLOBAL DEFAULT 11 g_file_parse_name + 1267: 000000000009e110 98 FUNC GLOBAL DEFAULT 11 g_file_monitor_event_get_type + 1268: 0000000000063a70 494 FUNC GLOBAL DEFAULT 11 g_input_stream_read_async + 1269: 000000000009e260 98 FUNC GLOBAL DEFAULT 11 g_password_save_get_type + 1270: 00000000000ab790 268 FUNC GLOBAL DEFAULT 11 g_simple_action_set_state + 1271: 000000000009acc0 76 FUNC GLOBAL DEFAULT 11 g_vfs_get_local + 1272: 00000000000b2710 147 FUNC GLOBAL DEFAULT 11 g_dbus_is_address + 1273: 00000000000a3ce0 97 FUNC GLOBAL DEFAULT 11 g_application_get_is_busy + 1274: 0000000000097a70 90 FUNC GLOBAL DEFAULT 11 g_tls_password_get_description + 1275: 0000000000059d10 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_is_hidden + 1276: 00000000000a6bc0 137 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_enabled + 1277: 000000000009f060 98 FUNC GLOBAL DEFAULT 11 g_credentials_type_get_type + 1278: 000000000008c100 105 FUNC GLOBAL DEFAULT 11 g_srv_target_get_type + 1279: 00000000000fbb70 6 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_abstract_names_supported + 1280: 0000000000070d00 92 FUNC GLOBAL DEFAULT 11 g_output_stream_is_closed + 1281: 00000000000adc00 13 FUNC GLOBAL DEFAULT 11 g_menu_prepend + 1282: 00000000000f3160 141 FUNC GLOBAL DEFAULT 11 g_app_info_get_all_for_type + 1283: 00000000000f2b60 182 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_new + 1284: 000000000009a8e0 301 FUNC GLOBAL DEFAULT 11 g_vfs_get_file_for_uri + 1285: 0000000000086300 71 FUNC GLOBAL DEFAULT 11 g_socket_connection_factory_create_connection + 1286: 0000000000062320 393 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_new_from_string + 1287: 00000000000cfae0 5 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_with_unix_fd_list_sync + 1288: 00000000000ac6d0 61 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_name + 1289: 00000000000847d0 8 FUNC GLOBAL DEFAULT 11 g_socket_client_get_tls + 1290: 0000000000043320 81 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_finish + 1291: 00000000000dd070 102 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_finish + 1292: 000000000003dae0 255 FUNC GLOBAL DEFAULT 11 g_cancellable_make_pollfd + 1293: 000000000005e4e0 148 FUNC GLOBAL DEFAULT 11 g_file_io_stream_get_etag + 1294: 0000000000081d60 276 FUNC GLOBAL DEFAULT 11 g_socket_set_keepalive + 1295: 000000000004b0b0 239 FUNC GLOBAL DEFAULT 11 g_file_poll_mountable + 1296: 000000000008a8a0 131 FUNC GLOBAL DEFAULT 11 g_subprocess_get_stderr_pipe + 1297: 00000000000bade0 147 FUNC GLOBAL DEFAULT 11 g_dbus_error_strip_remote_error + 1298: 000000000008ac20 50 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_check + 1299: 00000000000591b0 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_int32 + 1300: 0000000000082bf0 106 FUNC GLOBAL DEFAULT 11 g_socket_address_get_family + 1301: 00000000000426a0 108 FUNC GLOBAL DEFAULT 11 g_data_input_stream_new + 1302: 000000000007e5e0 210 FUNC GLOBAL DEFAULT 11 g_socket_condition_check + 1303: 00000000000d5410 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_property_info + 1304: 0000000000073a20 112 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_is_writable + 1305: 00000000000779d0 8 FUNC GLOBAL DEFAULT 11 g_resource_ref + 1306: 0000000000042950 89 FUNC GLOBAL DEFAULT 11 g_data_input_stream_get_newline_type + 1307: 0000000000051f00 259 FUNC GLOBAL DEFAULT 11 g_file_monitor_directory + 1308: 0000000000073e20 177 FUNC GLOBAL DEFAULT 11 g_pollable_source_new + 1309: 0000000000054030 105 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_get_type + 1310: 0000000000071180 94 FUNC GLOBAL DEFAULT 11 g_output_stream_has_pending + 1311: 0000000000051b80 263 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable + 1312: 00000000000f6d80 83 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_credentials_finish + 1313: 00000000000c28d0 225 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_for_address_sync + 1314: 00000000000d78a0 242 FUNC GLOBAL DEFAULT 11 g_dbus_server_stop + 1315: 0000000000099530 163 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_validation_flags + 1316: 00000000000fab20 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_get_mount_path + 1317: 0000000000065e60 5 FUNC GLOBAL DEFAULT 11 g_io_extension_get_type + 1318: 00000000000f59c0 5 FUNC GLOBAL DEFAULT 11 g_content_type_is_mime_type + 1319: 00000000000f8430 25 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_new + 1320: 0000000000044c90 112 FUNC GLOBAL DEFAULT 11 g_drive_is_media_check_automatic + 1321: 00000000000f34c0 322 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_implementations + 1322: 000000000006be80 158 FUNC GLOBAL DEFAULT 11 g_native_socket_address_get_type + 1323: 0000000000112a70 261 FUNC GLOBAL DEFAULT 11 g_settings_new_with_backend_and_path + 1324: 000000000006db80 77 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_network_available + 1325: 00000000000c85f0 191 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_arg0 + 1326: 000000000009ef10 98 FUNC GLOBAL DEFAULT 11 g_dbus_server_flags_get_type + 1327: 000000000007b860 145 FUNC GLOBAL DEFAULT 11 g_simple_async_report_gerror_in_idle + 1328: 0000000000081ff0 230 FUNC GLOBAL DEFAULT 11 g_socket_set_broadcast + 1329: 000000000008cec0 127 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_set_default_proxy + 1330: 00000000000f6860 743 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_fd + 1331: 00000000000c6610 128 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_type + 1332: 0000000000089160 357 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_spawn + 1333: 0000000000058e40 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_string + 1334: 0000000000084680 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_socket_type + 1335: 000000000009ea40 98 FUNC GLOBAL DEFAULT 11 g_bus_name_watcher_flags_get_type + 1336: 0000000000097310 353 FUNC GLOBAL DEFAULT 11 g_tls_interaction_request_certificate_finish + 1337: 0000000000085470 139 FUNC GLOBAL DEFAULT 11 g_socket_connectable_get_type + 1338: 00000000000f7600 158 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_get_type + 1339: 00000000000dbeb0 344 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_type + 1340: 00000000001141e0 5 FUNC GLOBAL DEFAULT 11 g_settings_sync + 1341: 00000000000d2620 16 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_ref + 1342: 000000000010f650 105 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_type + 1343: 0000000000093f80 115 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_require_close_notify + 1344: 000000000008ac70 50 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_check_finish + 1345: 000000000008e940 190 FUNC GLOBAL DEFAULT 11 g_task_return_new_error + 1346: 00000000000d5990 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_message + 1347: 00000000000408a0 249 FUNC GLOBAL DEFAULT 11 g_converter_output_stream_get_type + 1348: 0000000000078860 278 FUNC GLOBAL DEFAULT 11 g_resource_enumerate_children + 1349: 0000000000061890 345 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_matches + 1350: 00000000000607a0 143 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_any + 1351: 0000000000113d50 47 FUNC GLOBAL DEFAULT 11 g_settings_get_double + 1352: 00000000000398d0 120 FUNC GLOBAL DEFAULT 11 g_app_info_can_delete + 1353: 0000000000113890 201 FUNC GLOBAL DEFAULT 11 g_settings_set + 1354: 00000000000e04e0 404 FUNC GLOBAL DEFAULT 11 g_test_dbus_down + 1355: 0000000000114570 91 FUNC GLOBAL DEFAULT 11 g_settings_get_range + 1356: 000000000005a280 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_size + 1357: 00000000000938d0 115 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_use_system_certdb + 1358: 0000000000073300 89 FUNC GLOBAL DEFAULT 11 g_permission_get_can_acquire + 1359: 000000000008ae90 134 FUNC GLOBAL DEFAULT 11 g_subprocess_get_if_exited + 1360: 00000000000846c0 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_protocol + 1361: 00000000000fa8d0 20 FUNC GLOBAL DEFAULT 11 g_unix_mount_points_changed_since + 1362: 000000000004d3a0 251 FUNC GLOBAL DEFAULT 11 g_file_replace_readwrite + 1363: 0000000000066f00 66 FUNC GLOBAL DEFAULT 11 g_io_stream_get_output_stream + 1364: 00000000000da6e0 107 FUNC GLOBAL DEFAULT 11 g_dbus_object_proxy_get_connection + 1365: 0000000000096ea0 353 FUNC GLOBAL DEFAULT 11 g_tls_interaction_ask_password_finish + 1366: 000000000007bd50 136 FUNC GLOBAL DEFAULT 11 g_simple_io_stream_get_type + 1367: 000000000009e1f0 98 FUNC GLOBAL DEFAULT 11 g_ask_password_flags_get_type + 1368: 0000000000091ca0 73 FUNC GLOBAL DEFAULT 11 g_tls_backend_supports_dtls + 1369: 00000000000968d0 355 FUNC GLOBAL DEFAULT 11 g_tls_interaction_ask_password_async + 1370: 00000000000457e0 120 FUNC GLOBAL DEFAULT 11 g_drive_can_stop + 1371: 0000000000080910 346 FUNC GLOBAL DEFAULT 11 g_socket_get_credentials + 1372: 000000000009b170 263 FUNC GLOBAL DEFAULT 11 g_volume_mount + 1373: 000000000009e6c0 98 FUNC GLOBAL DEFAULT 11 g_socket_family_get_type + 1374: 000000000005cb50 409 FUNC GLOBAL DEFAULT 11 g_filename_completer_get_completion_suffix + 1375: 00000000000c7fd0 137 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_error_name + 1376: 00000000000f66f0 358 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_fd + 1377: 000000000007d8b0 141 FUNC GLOBAL DEFAULT 11 g_socket_set_listen_backlog + 1378: 000000000005e3f0 239 FUNC GLOBAL DEFAULT 11 g_file_io_stream_query_info_finish + 1379: 000000000009ad50 379 FUNC GLOBAL DEFAULT 11 g_vfs_register_uri_scheme + 1380: 0000000000052160 62 FUNC GLOBAL DEFAULT 11 g_file_new_for_uri + 1381: 00000000000c9790 458 FUNC GLOBAL DEFAULT 11 g_dbus_message_copy + 1382: 0000000000097f90 152 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_type + 1383: 00000000000ced60 502 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_sync + 1384: 0000000000083110 128 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_get_type + 1385: 00000000000d4810 381 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_generate_xml + 1386: 000000000004ecc0 315 FUNC GLOBAL DEFAULT 11 g_file_make_symbolic_link + 1387: 00000000000c2df0 101 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_peer_credentials + 1388: 0000000000059f50 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_display_name + 1389: 00000000000cfa50 41 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call + 1390: 000000000006a000 73 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_add_data + 1391: 00000000000f64b0 139 FUNC GLOBAL DEFAULT 11 g_file_descriptor_based_get_type + 1392: 00000000000ad860 233 FUNC GLOBAL DEFAULT 11 g_menu_item_get_link + 1393: 0000000000095ad0 311 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_issuer_finish + 1394: 000000000009ba30 277 FUNC GLOBAL DEFAULT 11 g_volume_eject_finish + 1395: 00000000000a49f0 124 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_options_dict + 1396: 000000000003a430 167 FUNC GLOBAL DEFAULT 11 g_async_initable_new_valist_async + 1397: 00000000000804b0 137 FUNC GLOBAL DEFAULT 11 g_socket_condition_wait + 1398: 00000000000ceb30 438 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new + 1399: 00000000000ad010 331 FUNC GLOBAL DEFAULT 11 g_menu_insert_item + 1400: 0000000000052be0 406 FUNC GLOBAL DEFAULT 11 g_file_replace_contents + 1401: 00000000000f2c50 5 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_generic_name + 1402: 0000000000074f00 182 FUNC GLOBAL DEFAULT 11 g_proxy_address_new + 1403: 0000000000062790 139 FUNC GLOBAL DEFAULT 11 g_initable_get_type + 1404: 00000000000f3ec0 137 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_lookup_get_default_for_uri_scheme + 1405: 00000000000dedb0 78 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_new + 1406: 0000000000066450 280 FUNC GLOBAL DEFAULT 11 g_io_scheduler_push_job + 1407: 000000000003d910 115 FUNC GLOBAL DEFAULT 11 g_cancellable_pop_current + 1408: 00000000000977b0 107 FUNC GLOBAL DEFAULT 11 g_tls_password_get_value + 1409: 00000000000aa1e0 184 FUNC GLOBAL DEFAULT 11 g_action_activate + 1410: 0000000000059400 153 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute + 1411: 00000000000f5bf0 53 FUNC GLOBAL DEFAULT 11 g_content_type_get_mime_type + 1412: 0000000000065280 99 FUNC GLOBAL DEFAULT 11 g_io_module_new + 1413: 0000000000065850 4 FUNC GLOBAL DEFAULT 11 g_io_extension_point_set_required_type + 1414: 000000000010e4a0 148 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_new_from_directory + 1415: 0000000000097e90 147 FUNC GLOBAL DEFAULT 11 g_tls_server_connection_get_type + 1416: 00000000000d76c0 86 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_guid + 1417: 00000000000a7d70 25 FUNC GLOBAL DEFAULT 11 g_simple_action_group_new + 1418: 0000000000044390 195 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_uint64 + 1419: 0000000000071910 274 FUNC GLOBAL DEFAULT 11 g_output_stream_close_async + 1420: 00000000000a73a0 46 FUNC GLOBAL DEFAULT 11 g_action_map_lookup_action + 1421: 0000000000047ef0 224 FUNC GLOBAL DEFAULT 11 g_emblem_get_type + 1422: 0000000000069230 325 FUNC GLOBAL DEFAULT 11 g_mount_eject_with_operation_finish + 1423: 0000000000085d00 446 FUNC GLOBAL DEFAULT 11 g_socket_connection_connect_async + 1424: 000000000004e340 207 FUNC GLOBAL DEFAULT 11 g_file_replace_readwrite_async + 1425: 000000000005b020 366 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_new + 1426: 00000000000a2bf0 171 FUNC GLOBAL DEFAULT 11 g_application_activate + 1427: 00000000000d8b30 132 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_connection + 1428: 000000000005a950 196 FUNC GLOBAL DEFAULT 11 g_file_info_set_edit_name + 1429: 00000000000aca40 61 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_name + 1430: 00000000000b3dd0 25 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_new + 1431: 0000000000073070 132 FUNC GLOBAL DEFAULT 11 g_permission_acquire_finish + 1432: 00000000000d77e0 178 FUNC GLOBAL DEFAULT 11 g_dbus_server_start + 1433: 00000000000f3e30 139 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_lookup_get_type + 1434: 00000000000847a0 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_enable_proxy + 1435: 00000000000cf360 125 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_name_owner + 1436: 0000000000113c00 39 FUNC GLOBAL DEFAULT 11 g_settings_set_int + 1437: 0000000000055a50 239 FUNC GLOBAL DEFAULT 11 g_file_enumerator_close_finish + 1438: 0000000000113cc0 39 FUNC GLOBAL DEFAULT 11 g_settings_set_uint + 1439: 00000000000bac80 341 FUNC GLOBAL DEFAULT 11 g_dbus_error_set_dbus_error + 1440: 000000000004f770 302 FUNC GLOBAL DEFAULT 11 g_file_query_settable_attributes + 1441: 0000000000090860 204 FUNC GLOBAL DEFAULT 11 g_themed_icon_append_name + 1442: 00000000000c7120 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_member + 1443: 000000000009ece0 98 FUNC GLOBAL DEFAULT 11 g_dbus_message_type_get_type + 1444: 000000000008c1f0 5 FUNC GLOBAL DEFAULT 11 g_srv_target_get_port + 1445: 00000000000cf810 182 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_set_interface_info + 1446: 00000000000fb0d0 26 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_can_eject + 1447: 00000000000bfdb0 222 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flush_sync + 1448: 000000000009ec00 98 FUNC GLOBAL DEFAULT 11 g_dbus_capability_flags_get_type + 1449: 000000000004dfc0 177 FUNC GLOBAL DEFAULT 11 g_file_open_readwrite_async + 1450: 000000000009daf0 98 FUNC GLOBAL DEFAULT 11 g_file_attribute_type_get_type + 1451: 00000000000d4150 105 FUNC GLOBAL DEFAULT 11 g_dbus_signal_info_get_type + 1452: 00000000000fbb40 8 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_address_type + 1453: 0000000000071660 201 FUNC GLOBAL DEFAULT 11 g_output_stream_write_bytes_async + 1454: 000000000004d250 208 FUNC GLOBAL DEFAULT 11 g_file_create_readwrite + 1455: 000000000007aed0 185 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_error_va + 1456: 000000000008b1f0 350 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_finish + 1457: 000000000006a050 58 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_new_from_data + 1458: 0000000000052640 268 FUNC GLOBAL DEFAULT 11 g_file_query_default_handler + 1459: 0000000000047fd0 265 FUNC GLOBAL DEFAULT 11 g_emblem_new + 1460: 0000000000039b90 226 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_display + 1461: 0000000000060b90 114 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_node_local + 1462: 00000000000a6ce0 169 FUNC GLOBAL DEFAULT 11 g_action_group_change_action_state + 1463: 0000000000038eb0 181 FUNC GLOBAL DEFAULT 11 g_app_info_set_as_last_used_for_type + 1464: 000000000006ba00 89 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_choice + 1465: 000000000010d160 137 FUNC GLOBAL DEFAULT 11 g_settings_backend_changed + 1466: 00000000000c7af0 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_sender + 1467: 00000000000a6a10 137 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_parameter_type + 1468: 000000000009e7a0 98 FUNC GLOBAL DEFAULT 11 g_socket_msg_flags_get_type + 1469: 000000000006db60 21 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_default + 1470: 00000000000f2c30 8 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_categories + 1471: 0000000000041280 763 FUNC GLOBAL DEFAULT 11 g_datagram_based_receive_messages + 1472: 0000000000059310 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_int64 + 1473: 000000000004b570 112 FUNC GLOBAL DEFAULT 11 g_file_hash + 1474: 0000000000073190 125 FUNC GLOBAL DEFAULT 11 g_permission_release_async + 1475: 000000000004c870 208 FUNC GLOBAL DEFAULT 11 g_file_find_enclosing_mount + 1476: 000000000008ce80 56 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_new + 1477: 00000000000c4bf0 132 FUNC GLOBAL DEFAULT 11 g_bus_get_sync + 1478: 000000000003cc30 233 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_set_buffer_size + 1479: 000000000009bf00 128 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_type + 1480: 000000000009c4b0 145 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_volume_for_uuid + 1481: 000000000003df70 140 FUNC GLOBAL DEFAULT 11 g_cancellable_source_new + 1482: 00000000000c7090 137 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_interface + 1483: 000000000009b4b0 144 FUNC GLOBAL DEFAULT 11 g_volume_get_symbolic_icon + 1484: 00000000000bae80 732 FUNC GLOBAL DEFAULT 11 g_dbus_error_encode_gerror + 1485: 000000000004c9c0 177 FUNC GLOBAL DEFAULT 11 g_file_find_enclosing_mount_async + 1486: 0000000000072360 152 FUNC GLOBAL DEFAULT 11 g_output_stream_close + 1487: 00000000000a2760 93 FUNC GLOBAL DEFAULT 11 g_application_get_is_registered + 1488: 0000000000039340 112 FUNC GLOBAL DEFAULT 11 g_app_info_get_icon + 1489: 0000000000090800 86 FUNC GLOBAL DEFAULT 11 g_themed_icon_get_names + 1490: 00000000000641e0 432 FUNC GLOBAL DEFAULT 11 g_input_stream_read + 1491: 00000000000c6dc0 86 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_unix_fd_list + 1492: 00000000000cd940 344 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_type + 1493: 0000000000113e40 70 FUNC GLOBAL DEFAULT 11 g_settings_set_strv + 1494: 0000000000043eb0 88 FUNC GLOBAL DEFAULT 11 g_data_output_stream_get_byte_order + 1495: 00000000000f6360 319 FUNC GLOBAL DEFAULT 11 g_content_type_guess_for_tree + 1496: 0000000000045060 277 FUNC GLOBAL DEFAULT 11 g_drive_eject_finish + 1497: 0000000000039f10 35 FUNC GLOBAL DEFAULT 11 g_app_info_monitor_get + 1498: 000000000010e610 494 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_list_schemas + 1499: 00000000000bfce0 207 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flush_finish + 1500: 000000000003b7b0 257 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_set_buffer_size + 1501: 00000000000b0d90 187 FUNC GLOBAL DEFAULT 11 g_notification_set_default_action + 1502: 0000000000043f10 172 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_byte + 1503: 000000000009d750 224 FUNC GLOBAL DEFAULT 11 g_zlib_decompressor_get_type + 1504: 0000000000051800 263 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable + 1505: 00000000000a7090 98 FUNC GLOBAL DEFAULT 11 g_action_group_query_action + 1506: 00000000000d2af0 90 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_unref + 1507: 0000000000043230 228 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_until_async + 1508: 0000000000070780 217 FUNC GLOBAL DEFAULT 11 g_output_stream_write_finish + 1509: 00000000000adbc0 50 FUNC GLOBAL DEFAULT 11 g_menu_insert + 1510: 0000000000078f20 24 FUNC GLOBAL DEFAULT 11 g_static_resource_init + 1511: 00000000000d5a50 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_user_data + 1512: 000000000008c220 325 FUNC GLOBAL DEFAULT 11 g_srv_target_list_sort + 1513: 00000000000c8060 169 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_signature + 1514: 0000000000053350 285 FUNC GLOBAL DEFAULT 11 g_file_start_mountable_finish + 1515: 00000000000d93d0 139 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_type + 1516: 000000000008ea00 238 FUNC GLOBAL DEFAULT 11 g_task_return_error_if_cancelled + 1517: 00000000000fbb50 20 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_is_abstract + 1518: 000000000003a5e0 139 FUNC GLOBAL DEFAULT 11 g_async_result_get_type + 1519: 000000000007b560 193 FUNC GLOBAL DEFAULT 11 g_simple_async_result_run_in_thread + 1520: 000000000003a6e0 112 FUNC GLOBAL DEFAULT 11 g_async_result_get_source_object + 1521: 0000000000070b40 217 FUNC GLOBAL DEFAULT 11 g_output_stream_flush_finish + 1522: 00000000000f5c30 173 FUNC GLOBAL DEFAULT 11 g_content_type_get_generic_icon_name + 1523: 000000000009af50 227 FUNC GLOBAL DEFAULT 11 g_vfs_unregister_uri_scheme + 1524: 000000000009df50 98 FUNC GLOBAL DEFAULT 11 g_file_copy_flags_get_type + 1525: 0000000000088f00 65 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_stdout_fd + 1526: 0000000000087c90 1670 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_any_inet_port + 1527: 0000000000068970 112 FUNC GLOBAL DEFAULT 11 g_mount_get_icon + 1528: 00000000000864f0 106 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_msg_type + 1529: 000000000008af20 169 FUNC GLOBAL DEFAULT 11 g_subprocess_get_exit_status + 1530: 0000000000097cb0 141 FUNC GLOBAL DEFAULT 11 g_tls_password_set_warning + 1531: 000000000004e620 246 FUNC GLOBAL DEFAULT 11 g_file_copy_finish + 1532: 00000000000711e0 223 FUNC GLOBAL DEFAULT 11 g_output_stream_set_pending + 1533: 000000000009a730 152 FUNC GLOBAL DEFAULT 11 g_vfs_get_type + 1534: 0000000000113ba0 40 FUNC GLOBAL DEFAULT 11 g_settings_set_string + 1535: 00000000000a8dc0 5 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unexport_action_group + 1536: 00000000000bfc70 104 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_capabilities + 1537: 00000000000c3f50 697 FUNC GLOBAL DEFAULT 11 g_dbus_connection_emit_signal + 1538: 00000000000a3b70 171 FUNC GLOBAL DEFAULT 11 g_application_unmark_busy + 1539: 000000000003ce30 135 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_set_auto_grow + 1540: 000000000008c1e0 4 FUNC GLOBAL DEFAULT 11 g_srv_target_get_hostname + 1541: 000000000010ee90 328 FUNC GLOBAL DEFAULT 11 g_settings_schema_list_children + 1542: 000000000009d9a0 98 FUNC GLOBAL DEFAULT 11 g_converter_result_get_type + 1543: 000000000008a810 131 FUNC GLOBAL DEFAULT 11 g_subprocess_get_stdout_pipe + 1544: 00000000000d4000 105 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_get_type + 1545: 000000000009ef80 98 FUNC GLOBAL DEFAULT 11 g_dbus_signal_flags_get_type + 1546: 0000000000113bd0 41 FUNC GLOBAL DEFAULT 11 g_settings_get_int + 1547: 0000000000062950 148 FUNC GLOBAL DEFAULT 11 g_initable_new_valist + 1548: 00000000000c2b80 90 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_exit_on_close + 1549: 0000000000093090 116 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_set_server_identity + 1550: 00000000000a20d0 157 FUNC GLOBAL DEFAULT 11 g_application_set_action_group + 1551: 000000000039d208 0 NOTYPE GLOBAL DEFAULT 27 __bss_start + 1552: 00000000000708e0 207 FUNC GLOBAL DEFAULT 11 g_output_stream_write_all_finish + 1553: 0000000000044f60 255 FUNC GLOBAL DEFAULT 11 g_drive_eject + 1554: 000000000010f850 377 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_range + 1555: 0000000000060960 175 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_site_local + 1556: 00000000000f3210 597 FUNC GLOBAL DEFAULT 11 g_app_info_get_default_for_type + 1557: 00000000000f76b0 73 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_new + 1558: 0000000000040c70 25 FUNC GLOBAL DEFAULT 11 g_credentials_new + 1559: 0000000000039530 155 FUNC GLOBAL DEFAULT 11 g_app_info_launch_uris + 1560: 000000000005b480 139 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_enumerate_namespace + 1561: 000000000007aad0 122 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_op_res_gssize + 1562: 00000000000922f0 128 FUNC GLOBAL DEFAULT 11 g_tls_certificate_get_type + 1563: 000000000010e900 438 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_lookup + 1564: 00000000000fd960 93 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_get_close_fd + 1565: 000000000010f0f0 5 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_id + 1566: 000000000008afd0 142 FUNC GLOBAL DEFAULT 11 g_subprocess_get_if_signaled + 1567: 00000000000fae80 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_is_loopback + 1568: 000000000006f380 90 FUNC GLOBAL DEFAULT 11 g_network_service_get_domain + 1569: 00000000000add60 13 FUNC GLOBAL DEFAULT 11 g_menu_prepend_section + 1570: 000000000004d950 246 FUNC GLOBAL DEFAULT 11 g_file_append_to_finish + 1571: 000000000005a650 165 FUNC GLOBAL DEFAULT 11 g_file_info_set_is_hidden + 1572: 0000000000043d80 135 FUNC GLOBAL DEFAULT 11 g_data_output_stream_set_byte_order + 1573: 000000000007dbd0 89 FUNC GLOBAL DEFAULT 11 g_socket_get_fd + 1574: 000000000005d820 239 FUNC GLOBAL DEFAULT 11 g_file_output_stream_query_info_finish + 1575: 0000000000113cf0 43 FUNC GLOBAL DEFAULT 11 g_settings_get_uint64 + 1576: 00000000000a4b40 332 FUNC GLOBAL DEFAULT 11 g_application_command_line_print + 1577: 00000000000565c0 108 FUNC GLOBAL DEFAULT 11 g_file_icon_new + 1578: 0000000000097b60 119 FUNC GLOBAL DEFAULT 11 g_tls_password_get_warning + 1579: 0000000000054b40 105 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_ref + 1580: 0000000000087080 152 FUNC GLOBAL DEFAULT 11 g_socket_listener_get_type + 1581: 000000000004be70 246 FUNC GLOBAL DEFAULT 11 g_file_enumerate_children_finish + 1582: 000000000008f170 248 FUNC GLOBAL DEFAULT 11 g_tcp_connection_get_type + 1583: 0000000000071f40 162 FUNC GLOBAL DEFAULT 11 g_output_stream_printf + 1584: 000000000009ed50 98 FUNC GLOBAL DEFAULT 11 g_dbus_message_flags_get_type + 1585: 00000000000a41b0 284 FUNC GLOBAL DEFAULT 11 g_application_unbind_busy_property + 1586: 00000000000582d0 353 FUNC GLOBAL DEFAULT 11 g_file_info_copy_into + 1587: 00000000000747d0 112 FUNC GLOBAL DEFAULT 11 g_proxy_supports_hostname + 1588: 00000000000d8980 157 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_vtable + 1589: 00000000000c6920 167 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_flags + 1590: 000000000007bde0 56 FUNC GLOBAL DEFAULT 11 g_simple_io_stream_new + 1591: 00000000000f9cf0 105 FUNC GLOBAL DEFAULT 11 g_unix_mount_entry_get_type + 1592: 0000000000052ad0 13 FUNC GLOBAL DEFAULT 11 g_file_load_contents_async + 1593: 0000000000064390 310 FUNC GLOBAL DEFAULT 11 g_input_stream_read_all + 1594: 000000000007dd50 96 FUNC GLOBAL DEFAULT 11 g_socket_is_connected + 1595: 000000000009edc0 98 FUNC GLOBAL DEFAULT 11 g_dbus_message_header_field_get_type + 1596: 00000000000dce90 467 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new + 1597: 000000000007adc0 137 FUNC GLOBAL DEFAULT 11 g_simple_async_result_take_error + 1598: 00000000000aa490 356 FUNC GLOBAL DEFAULT 11 g_action_print_detailed_name + 1599: 000000000004d890 187 FUNC GLOBAL DEFAULT 11 g_file_append_to_async + 1600: 00000000000d29e0 74 FUNC GLOBAL DEFAULT 11 g_dbus_signal_info_unref + 1601: 000000000005f030 139 FUNC GLOBAL DEFAULT 11 g_icon_get_type + 1602: 0000000000054c60 289 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_add + 1603: 00000000000860c0 12 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_local_address + 1604: 00000000000890a0 177 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_spawnv + 1605: 00000000000f83a0 8 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_get_fd_list + 1606: 0000000000091c10 21 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_default + 1607: 0000000000060b10 114 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_link_local + 1608: 000000000006f3e0 98 FUNC GLOBAL DEFAULT 11 g_network_service_get_scheme + 1609: 00000000000a6f50 153 FUNC GLOBAL DEFAULT 11 g_action_group_action_enabled_changed + 1610: 0000000000084670 8 FUNC GLOBAL DEFAULT 11 g_socket_client_get_socket_type + 1611: 0000000000039060 229 FUNC GLOBAL DEFAULT 11 g_app_info_add_supports_type + 1612: 00000000000b16f0 91 FUNC GLOBAL DEFAULT 11 g_dbus_is_member_name + 1613: 000000000003b9d0 132 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_new_sized + 1614: 00000000000586c0 171 FUNC GLOBAL DEFAULT 11 g_file_info_has_attribute + 1615: 0000000000039450 112 FUNC GLOBAL DEFAULT 11 g_app_info_supports_uris + 1616: 0000000000098a20 147 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_rehandshake_mode + 1617: 000000000009e180 98 FUNC GLOBAL DEFAULT 11 g_io_error_enum_get_type + 1618: 0000000000058d90 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_object + 1619: 0000000000039b40 70 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_environment + 1620: 00000000000dadf0 97 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_object + 1621: 000000000007aca0 145 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_from_error + 1622: 000000000008c200 5 FUNC GLOBAL DEFAULT 11 g_srv_target_get_priority + 1623: 0000000000088d80 139 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_flags + 1624: 00000000000c47b0 5 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_with_unix_fd_list_sync + 1625: 0000000000044540 139 FUNC GLOBAL DEFAULT 11 g_drive_get_type + 1626: 000000000009a3e0 295 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get + 1627: 00000000000ad160 10 FUNC GLOBAL DEFAULT 11 g_menu_prepend_item + 1628: 0000000000093240 161 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_accepted_cas + 1629: 0000000000085c60 158 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_type + 1630: 000000000006dc70 66 FUNC GLOBAL DEFAULT 11 g_network_monitor_can_reach + 1631: 00000000000520c0 94 FUNC GLOBAL DEFAULT 11 g_file_monitor + 1632: 0000000000073570 112 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_can_poll + 1633: 00000000000f7830 89 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_get_credentials + 1634: 0000000000073fd0 29 FUNC GLOBAL DEFAULT 11 g_pollable_stream_read + 1635: 00000000000f9640 131 FUNC GLOBAL DEFAULT 11 g_unix_mount_copy + 1636: 00000000000aa320 354 FUNC GLOBAL DEFAULT 11 g_action_parse_detailed_name + 1637: 000000000009f4c0 98 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_flags_get_type + 1638: 0000000000073b10 137 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_create_source + 1639: 0000000000085570 133 FUNC GLOBAL DEFAULT 11 g_socket_connectable_proxy_enumerate + 1640: 00000000000602f0 157 FUNC GLOBAL DEFAULT 11 g_inet_address_get_type + 1641: 00000000000ba2c0 308 FUNC GLOBAL DEFAULT 11 g_dbus_error_register_error_domain + 1642: 0000000000074580 68 FUNC GLOBAL DEFAULT 11 g_proxy_get_default_for_protocol + 1643: 00000000000dd5f0 132 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_name_owner + 1644: 000000000008f7b0 89 FUNC GLOBAL DEFAULT 11 g_tcp_wrapper_connection_get_base_io_stream + 1645: 000000000005bc60 275 FUNC GLOBAL DEFAULT 11 g_file_input_stream_query_info_async + 1646: 000000000007c930 351 FUNC GLOBAL DEFAULT 11 g_socket_get_type + 1647: 0000000000043460 477 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_upto + 1648: 00000000000f7d60 172 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_peek_fds + 1649: 00000000000c1ce0 566 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message_with_reply_sync + 1650: 0000000000092fd0 177 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_server_identity + 1651: 0000000000068340 323 FUNC GLOBAL DEFAULT 11 g_mount_unmount_with_operation + 1652: 0000000000039150 120 FUNC GLOBAL DEFAULT 11 g_app_info_can_remove_supports_type + 1653: 0000000000095130 223 FUNC GLOBAL DEFAULT 11 g_tls_database_create_certificate_handle + 1654: 0000000000098900 155 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_require_close_notify + 1655: 000000000004bc30 235 FUNC GLOBAL DEFAULT 11 g_file_enumerate_children + 1656: 000000000003e900 76 FUNC GLOBAL DEFAULT 11 g_charset_converter_new + 1657: 000000000004aae0 323 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable_with_operation + 1658: 00000000000c7180 137 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_member + 1659: 000000000010f6c0 137 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_key + 1660: 0000000000071a90 432 FUNC GLOBAL DEFAULT 11 g_output_stream_write + 1661: 00000000000f7e10 294 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_append + 1662: 0000000000099660 177 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_server_identity + 1663: 000000000010e380 53 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_ref + 1664: 0000000000043640 168 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_until + 1665: 0000000000067870 81 FUNC GLOBAL DEFAULT 11 g_io_stream_clear_pending + 1666: 0000000000042a60 182 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_int16 + 1667: 00000000000df1e0 415 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_export_uniquely + 1668: 000000000010d460 328 FUNC GLOBAL DEFAULT 11 g_settings_backend_flatten_tree + 1669: 00000000000860d0 89 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_remote_address + 1670: 000000000009da10 98 FUNC GLOBAL DEFAULT 11 g_data_stream_byte_order_get_type + 1671: 000000000007f830 425 FUNC GLOBAL DEFAULT 11 g_socket_send_with_blocking + 1672: 000000000009dc40 98 FUNC GLOBAL DEFAULT 11 g_file_query_info_flags_get_type + 1673: 000000000009dcb0 98 FUNC GLOBAL DEFAULT 11 g_file_create_flags_get_type + 1674: 00000000000b3c20 128 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_get_type + 1675: 00000000000a2850 134 FUNC GLOBAL DEFAULT 11 g_application_get_dbus_connection + 1676: 00000000000997a0 161 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_accepted_cas + 1677: 000000000003dbe0 69 FUNC GLOBAL DEFAULT 11 g_cancellable_get_fd + 1678: 000000000007ddb0 231 FUNC GLOBAL DEFAULT 11 g_socket_listen + 1679: 0000000000065100 99 FUNC GLOBAL DEFAULT 11 g_io_module_scope_block + 1680: 0000000000038b90 112 FUNC GLOBAL DEFAULT 11 g_app_info_get_name + 1681: 00000000000941c0 132 FUNC GLOBAL DEFAULT 11 g_tls_connection_handshake + 1682: 00000000000b3e50 79 FUNC GLOBAL DEFAULT 11 g_dbus_auth_observer_allow_mechanism + 1683: 00000000000fa420 23 FUNC GLOBAL DEFAULT 11 g_unix_mounts_get + 1684: 0000000000074fe0 9 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_destination_hostname + 1685: 0000000000039a90 95 FUNC GLOBAL DEFAULT 11 g_app_launch_context_setenv + 1686: 00000000000c81c0 360 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_body + 1687: 0000000000099030 276 FUNC GLOBAL DEFAULT 11 g_dtls_connection_close + 1688: 0000000000040f70 196 FUNC GLOBAL DEFAULT 11 g_credentials_get_unix_user + 1689: 00000000000c7b50 137 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_sender + 1690: 00000000000fb050 51 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_icon + 1691: 000000000003bf40 376 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_read_byte + 1692: 00000000000ea4b0 136 FUNC GLOBAL DEFAULT 11 g_local_file_monitor_get_type + 1693: 0000000000073100 132 FUNC GLOBAL DEFAULT 11 g_permission_release + 1694: 000000000004ccd0 208 FUNC GLOBAL DEFAULT 11 g_file_append_to + 1695: 00000000000d7a40 112 FUNC GLOBAL DEFAULT 11 g_dbus_interface_get_info + 1696: 00000000000ad980 15 FUNC GLOBAL DEFAULT 11 g_menu_item_set_submenu + 1697: 00000000000adc20 65 FUNC GLOBAL DEFAULT 11 g_menu_item_new_submenu + 1698: 00000000000fb860 249 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_type + 1699: 0000000000063e80 430 FUNC GLOBAL DEFAULT 11 g_input_stream_skip_async + 1700: 00000000000514f0 230 FUNC GLOBAL DEFAULT 11 g_file_set_attributes_finish + 1701: 000000000009f300 98 FUNC GLOBAL DEFAULT 11 g_tls_rehandshake_mode_get_type + 1702: 0000000000093e30 161 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_peer_certificate + 1703: 0000000000068a70 112 FUNC GLOBAL DEFAULT 11 g_mount_get_uuid + 1704: 00000000000ca430 406 FUNC GLOBAL DEFAULT 11 g_bus_own_name_on_connection + 1705: 00000000000bff00 207 FUNC GLOBAL DEFAULT 11 g_dbus_connection_close_finish + 1706: 000000000039f0e8 0 NOTYPE GLOBAL DEFAULT 27 _end + 1707: 00000000000d5d80 7 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_value + 1708: 0000000000073760 382 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_read_nonblocking + 1709: 0000000000086fc0 183 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_socket_async + 1710: 0000000000080740 94 FUNC GLOBAL DEFAULT 11 g_socket_send_to + 1711: 000000000009f760 98 FUNC GLOBAL DEFAULT 11 g_socket_listener_event_get_type + 1712: 0000000000085420 5 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_service_finish + 1713: 000000000008eb80 85 FUNC GLOBAL DEFAULT 11 g_task_get_completed + 1714: 000000000004c250 153 FUNC GLOBAL DEFAULT 11 g_file_query_exists + 1715: 0000000000088c00 128 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_get_type + 1716: 0000000000052930 403 FUNC GLOBAL DEFAULT 11 g_file_load_partial_contents_finish + 1717: 000000000004fec0 264 FUNC GLOBAL DEFAULT 11 g_file_set_attributes_from_info + 1718: 0000000000097930 89 FUNC GLOBAL DEFAULT 11 g_tls_password_get_flags + 1719: 00000000000d8d70 107 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_object_path + 1720: 00000000000d8790 155 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_set_flags + 1721: 00000000000d5470 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_method_name + 1722: 0000000000048e70 234 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_new + 1723: 00000000000f7700 150 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_new_with_credentials + 1724: 00000000000f7b10 25 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_new + 1725: 00000000000fad40 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_device_path + 1726: 00000000000942f0 132 FUNC GLOBAL DEFAULT 11 g_tls_connection_handshake_finish + 1727: 000000000008bf60 119 FUNC GLOBAL DEFAULT 11 g_socket_service_is_active + 1728: 000000000007d6f0 159 FUNC GLOBAL DEFAULT 11 g_socket_set_blocking + 1729: 000000000003fcd0 132 FUNC GLOBAL DEFAULT 11 g_converter_input_stream_new + 1730: 00000000000ba400 47 FUNC GLOBAL DEFAULT 11 g_dbus_error_quark + 1731: 000000000006aaf0 105 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_new + 1732: 000000000009dfc0 98 FUNC GLOBAL DEFAULT 11 g_file_monitor_flags_get_type + 1733: 00000000000faf00 144 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_icon + 1734: 0000000000068900 112 FUNC GLOBAL DEFAULT 11 g_mount_get_name + 1735: 00000000000c3770 313 FUNC GLOBAL DEFAULT 11 g_dbus_connection_signal_unsubscribe + 1736: 000000000004b490 112 FUNC GLOBAL DEFAULT 11 g_file_get_parse_name + 1737: 00000000000ac2b0 12 FUNC GLOBAL DEFAULT 11 g_menu_model_iterate_item_attributes + 1738: 00000000000bf500 144 FUNC GLOBAL DEFAULT 11 g_dbus_connection_start_message_processing + 1739: 0000000000087af0 93 FUNC GLOBAL DEFAULT 11 g_socket_listener_set_backlog + 1740: 00000000000fa980 40 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_get + 1741: 0000000000074ff0 9 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_destination_port + 1742: 000000000005d110 249 FUNC GLOBAL DEFAULT 11 g_file_output_stream_get_type + 1743: 000000000011b550 0 FUNC GLOBAL DEFAULT 12 _fini + 1744: 000000000008c210 5 FUNC GLOBAL DEFAULT 11 g_srv_target_get_weight + 1745: 0000000000051620 41 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_uint32 + 1746: 00000000000c8710 1425 FUNC GLOBAL DEFAULT 11 g_dbus_message_to_blob + 1747: 0000000000089050 66 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_child_setup + 1748: 00000000000394c0 112 FUNC GLOBAL DEFAULT 11 g_app_info_supports_files + 1749: 000000000007a8f0 86 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_source_tag + 1750: 0000000000053260 231 FUNC GLOBAL DEFAULT 11 g_file_measure_disk_usage_finish + 1751: 00000000000bab90 236 FUNC GLOBAL DEFAULT 11 g_dbus_error_set_dbus_error_valist + 1752: 00000000000fabe0 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_is_readonly + 1753: 00000000000720e0 216 FUNC GLOBAL DEFAULT 11 g_output_stream_flush + 1754: 00000000000f2fa0 141 FUNC GLOBAL DEFAULT 11 g_app_info_get_recommended_for_type + 1755: 000000000007b4b0 172 FUNC GLOBAL DEFAULT 11 g_simple_async_result_complete_in_idle + 1756: 00000000000fd7f0 88 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_get_fd + 1757: 0000000000068050 236 FUNC GLOBAL DEFAULT 11 g_loadable_icon_load_finish + 1758: 0000000000088cc0 64 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_environ + 1759: 000000000010e330 79 FUNC GLOBAL DEFAULT 11 g_settings_schema_unref + 1760: 0000000000078830 34 FUNC GLOBAL DEFAULT 11 g_resource_get_info + 1761: 00000000000fb090 51 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_symbolic_icon + 1762: 000000000006dc20 69 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_connectivity + 1763: 000000000008f270 50 FUNC GLOBAL DEFAULT 11 g_tcp_connection_set_graceful_disconnect + 1764: 0000000000097820 125 FUNC GLOBAL DEFAULT 11 g_tls_password_set_value_full + 1765: 000000000009b790 120 FUNC GLOBAL DEFAULT 11 g_volume_should_automount + 1766: 0000000000096830 152 FUNC GLOBAL DEFAULT 11 g_tls_interaction_get_type + 1767: 00000000000c8500 57 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_error_valist + 1768: 0000000000053cd0 153 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_unref + 1769: 0000000000055960 239 FUNC GLOBAL DEFAULT 11 g_file_enumerator_next_files_finish + 1770: 000000000006cc20 121 FUNC GLOBAL DEFAULT 11 g_network_address_new_loopback + 1771: 0000000000069780 159 FUNC GLOBAL DEFAULT 11 g_mount_unshadow + 1772: 00000000000c86b0 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_num_unix_fds + 1773: 00000000000409a0 132 FUNC GLOBAL DEFAULT 11 g_converter_output_stream_new + 1774: 00000000000c47a0 5 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_with_unix_fd_list_finish + 1775: 00000000000398c0 5 FUNC GLOBAL DEFAULT 11 g_app_info_launch_default_for_uri_finish + 1776: 00000000000516e0 285 FUNC GLOBAL DEFAULT 11 g_file_mount_mountable_finish + 1777: 0000000000058950 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_type + 1778: 00000000000666a0 153 FUNC GLOBAL DEFAULT 11 g_io_scheduler_cancel_all_jobs + 1779: 0000000000076ce0 85 FUNC GLOBAL DEFAULT 11 g_resolver_get_default + 1780: 000000000003da70 19 FUNC GLOBAL DEFAULT 11 g_cancellable_is_cancelled + 1781: 000000000006ddc0 48 FUNC GLOBAL DEFAULT 11 g_network_monitor_can_reach_finish + 1782: 00000000000928d0 278 FUNC GLOBAL DEFAULT 11 g_tls_certificate_new_from_pem + 1783: 0000000000061f40 249 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_type + 1784: 00000000000f7a70 152 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_get_type + 1785: 000000000003cbd0 90 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_get_buffer_size + 1786: 00000000000c6fb0 117 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_reply_serial + 1787: 00000000000c8cb0 117 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_num_unix_fds + 1788: 000000000003d720 152 FUNC GLOBAL DEFAULT 11 g_cancellable_get_type + 1789: 000000000004b340 112 FUNC GLOBAL DEFAULT 11 g_file_get_basename + 1790: 0000000000088ff0 92 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_fd + 1791: 00000000000d7520 307 FUNC GLOBAL DEFAULT 11 g_dbus_server_new_sync + 1792: 000000000007f9e0 26 FUNC GLOBAL DEFAULT 11 g_socket_send + 1793: 00000000000c8330 449 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_error_literal + 1794: 0000000000044460 211 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_string + 1795: 0000000000051150 682 FUNC GLOBAL DEFAULT 11 g_file_move + 1796: 00000000000acf00 136 FUNC GLOBAL DEFAULT 11 g_menu_get_type + 1797: 0000000000074010 222 FUNC GLOBAL DEFAULT 11 g_pollable_stream_write_all + 1798: 00000000000c6690 25 FUNC GLOBAL DEFAULT 11 g_dbus_message_new + 1799: 0000000000042be0 179 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_int32 + 1800: 00000000000ac710 61 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_value + 1801: 00000000000b0480 137 FUNC GLOBAL DEFAULT 11 g_notification_set_title + 1802: 000000000010d5b0 196 FUNC GLOBAL DEFAULT 11 g_settings_backend_changed_tree + 1803: 00000000000847e0 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_tls + 1804: 00000000000fadc0 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_options + 1805: 000000000007b110 356 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_error + 1806: 0000000000060720 22 FUNC GLOBAL DEFAULT 11 g_inet_address_get_native_size + 1807: 00000000000961e0 59 FUNC GLOBAL DEFAULT 11 g_tls_file_database_new + 1808: 00000000000f31f0 17 FUNC GLOBAL DEFAULT 11 g_app_info_reset_type_associations + 1809: 00000000000aa030 204 FUNC GLOBAL DEFAULT 11 g_action_change_state + 1810: 000000000003b750 90 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_get_buffer_size + 1811: 00000000000f5e70 10 FUNC GLOBAL DEFAULT 11 g_content_type_get_symbolic_icon + 1812: 00000000000ca830 731 FUNC GLOBAL DEFAULT 11 g_bus_unown_name + 1813: 00000000000a47c0 152 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_type + 1814: 00000000000d9480 30 FUNC GLOBAL DEFAULT 11 g_dbus_object_get_interfaces + 1815: 00000000000615a0 281 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_new_from_string + 1816: 00000000000734d0 147 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_get_type + 1817: 00000000000abc10 99 FUNC GLOBAL DEFAULT 11 g_simple_action_new + 1818: 000000000006e620 324 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_get_type + 1819: 0000000000052e00 250 FUNC GLOBAL DEFAULT 11 g_file_replace_contents_finish + 1820: 000000000007dc30 273 FUNC GLOBAL DEFAULT 11 g_socket_get_local_address + 1821: 00000000000add20 50 FUNC GLOBAL DEFAULT 11 g_menu_insert_section + 1822: 0000000000085ed0 223 FUNC GLOBAL DEFAULT 11 g_socket_connection_connect + 1823: 0000000000057f00 67 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_ref + 1824: 000000000008ddb0 144 FUNC GLOBAL DEFAULT 11 g_task_attach_source + 1825: 0000000000084560 168 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_uri_async + 1826: 000000000004b740 227 FUNC GLOBAL DEFAULT 11 g_file_has_parent + 1827: 000000000007f820 16 FUNC GLOBAL DEFAULT 11 g_socket_receive_with_blocking + 1828: 000000000003ef40 139 FUNC GLOBAL DEFAULT 11 g_converter_get_type + 1829: 0000000000038c00 141 FUNC GLOBAL DEFAULT 11 g_app_info_get_display_name + 1830: 00000000000c1ad0 207 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message_with_reply_finish + 1831: 00000000000418d0 246 FUNC GLOBAL DEFAULT 11 g_datagram_based_create_source + 1832: 00000000000a1aa0 619 FUNC GLOBAL DEFAULT 11 g_application_add_main_option_entries + 1833: 00000000000a9ee0 112 FUNC GLOBAL DEFAULT 11 g_action_get_name + 1834: 0000000000038f70 229 FUNC GLOBAL DEFAULT 11 g_app_info_set_as_default_for_extension + 1835: 00000000000d25d0 16 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_ref + 1836: 000000000007a4a0 112 FUNC GLOBAL DEFAULT 11 g_seekable_can_truncate + 1837: 000000000004c460 246 FUNC GLOBAL DEFAULT 11 g_file_query_info_finish + 1838: 0000000000077060 418 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_service + 1839: 0000000000044e60 117 FUNC GLOBAL DEFAULT 11 g_drive_can_eject + 1840: 00000000000c8110 164 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_signature + 1841: 0000000000077560 38 FUNC GLOBAL DEFAULT 11 g_resolver_error_quark + 1842: 000000000007e2c0 15 FUNC GLOBAL DEFAULT 11 g_socket_is_closed + 1843: 000000000008b350 436 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate + 1844: 0000000000081580 381 FUNC GLOBAL DEFAULT 11 g_socket_check_connect_result + 1845: 00000000000d5350 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_interface_name + 1846: 000000000008b120 204 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_async + 1847: 0000000000092da0 147 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_type + 1848: 0000000000063230 255 FUNC GLOBAL DEFAULT 11 g_input_stream_read_finish + 1849: 0000000000094250 150 FUNC GLOBAL DEFAULT 11 g_tls_connection_handshake_async + 1850: 000000000007da90 89 FUNC GLOBAL DEFAULT 11 g_socket_get_socket_type + 1851: 0000000000085ec0 12 FUNC GLOBAL DEFAULT 11 g_socket_connection_is_connected + 1852: 00000000000f85b0 65 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_append_fd + 1853: 00000000000998b0 147 FUNC GLOBAL DEFAULT 11 g_dtls_server_connection_get_type + 1854: 0000000000058ef0 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_byte_string + 1855: 000000000010c070 743 FUNC GLOBAL DEFAULT 11 g_keyfile_settings_backend_new + 1856: 000000000006a9c0 301 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_type + 1857: 000000000008a710 97 FUNC GLOBAL DEFAULT 11 g_subprocess_get_identifier + 1858: 00000000000c66b0 85 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_byte_order + 1859: 000000000009fc70 104 FUNC GLOBAL DEFAULT 11 g_list_model_get_object + 1860: 000000000010eb90 5 FUNC GLOBAL DEFAULT 11 g_settings_schema_get_path + 1861: 0000000000069fd0 38 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_new_from_bytes + 1862: 00000000000552f0 152 FUNC GLOBAL DEFAULT 11 g_file_enumerator_get_type + 1863: 000000000004ca80 246 FUNC GLOBAL DEFAULT 11 g_file_find_enclosing_mount_finish + 1864: 000000000005ca10 128 FUNC GLOBAL DEFAULT 11 g_filename_completer_get_type + 1865: 00000000000ac2d0 255 FUNC GLOBAL DEFAULT 11 g_menu_model_get_item_attribute + 1866: 00000000000fa9c0 121 FUNC GLOBAL DEFAULT 11 g_unix_mount_compare + 1867: 00000000000a73d0 46 FUNC GLOBAL DEFAULT 11 g_action_map_add_action + 1868: 0000000000094b00 625 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_chain + 1869: 00000000000b03b0 99 FUNC GLOBAL DEFAULT 11 g_notification_new + 1870: 000000000006b910 89 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_password_save + 1871: 00000000000fae40 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_is_user_mountable + 1872: 000000000005aaf0 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_symbolic_icon + 1873: 000000000005cb30 25 FUNC GLOBAL DEFAULT 11 g_filename_completer_new + 1874: 000000000005be80 239 FUNC GLOBAL DEFAULT 11 g_file_input_stream_query_info_finish + 1875: 0000000000068fc0 277 FUNC GLOBAL DEFAULT 11 g_mount_eject_finish + 1876: 00000000000f7b30 364 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_new_from_array + 1877: 00000000000d5d90 5 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_value_with_unix_fd_list + 1878: 00000000000d8de0 702 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_export + 1879: 00000000000f76a0 6 FUNC GLOBAL DEFAULT 11 g_unix_credentials_message_is_supported + 1880: 000000000010e870 21 FUNC GLOBAL DEFAULT 11 g_settings_list_schemas + 1881: 00000000000df0c0 142 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_get_connection + 1882: 000000000003cad0 249 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_get_type + 1883: 00000000000b36d0 187 FUNC GLOBAL DEFAULT 11 g_dbus_address_escape_value + 1884: 00000000000ad9a0 78 FUNC GLOBAL DEFAULT 11 g_menu_item_set_action_and_target_value + 1885: 0000000000055530 307 FUNC GLOBAL DEFAULT 11 g_file_enumerator_close_async + 1886: 000000000008e410 187 FUNC GLOBAL DEFAULT 11 g_task_propagate_pointer + 1887: 0000000000087ab0 52 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_finish + 1888: 000000000009bd60 120 FUNC GLOBAL DEFAULT 11 g_volume_enumerate_identifiers + 1889: 00000000000d25e0 16 FUNC GLOBAL DEFAULT 11 g_dbus_method_info_ref + 1890: 000000000004cb80 208 FUNC GLOBAL DEFAULT 11 g_file_read + 1891: 00000000000437d0 81 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_upto_finish + 1892: 00000000000aef20 483 FUNC GLOBAL DEFAULT 11 g_dbus_connection_export_menu_model + 1893: 000000000004f3e0 293 FUNC GLOBAL DEFAULT 11 g_file_set_display_name + 1894: 00000000000fb010 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_guess_name + 1895: 00000000000939f0 162 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_database + 1896: 00000000000ba110 418 FUNC GLOBAL DEFAULT 11 g_dbus_error_register_error + 1897: 00000000000d9aa0 218 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_set_object_path + 1898: 0000000000113f90 26 FUNC GLOBAL DEFAULT 11 g_settings_revert + 1899: 0000000000096140 147 FUNC GLOBAL DEFAULT 11 g_tls_file_database_get_type + 1900: 0000000000058b40 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_status + 1901: 0000000000058440 117 FUNC GLOBAL DEFAULT 11 g_file_info_dup + 1902: 00000000000c6e20 291 FUNC GLOBAL DEFAULT 11 g_dbus_message_bytes_needed + 1903: 00000000000480e0 295 FUNC GLOBAL DEFAULT 11 g_emblem_new_with_origin + 1904: 0000000000048db0 186 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_add_emblem + 1905: 0000000000052520 285 FUNC GLOBAL DEFAULT 11 g_file_mount_enclosing_volume_finish + 1906: 0000000000060a10 127 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_multicast + 1907: 0000000000043fc0 188 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_int16 + 1908: 00000000000df380 243 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_is_exported + 1909: 000000000005aa20 208 FUNC GLOBAL DEFAULT 11 g_file_info_set_icon + 1910: 0000000000073210 132 FUNC GLOBAL DEFAULT 11 g_permission_release_finish + 1911: 0000000000058d60 39 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_as_string + 1912: 0000000000058ac0 127 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_data + 1913: 000000000009b5b0 112 FUNC GLOBAL DEFAULT 11 g_volume_get_drive + 1914: 0000000000048d40 111 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_clear_emblems + 1915: 000000000009cca0 224 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_get_type + 1916: 0000000000094a80 128 FUNC GLOBAL DEFAULT 11 g_tls_database_get_type + 1917: 0000000000091de0 114 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_dtls_client_connection_type + 1918: 000000000007a6f0 224 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_type + 1919: 00000000000fa4c0 125 FUNC GLOBAL DEFAULT 11 g_unix_mount_for + 1920: 00000000000faec0 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_name + 1921: 0000000000063630 161 FUNC GLOBAL DEFAULT 11 g_input_stream_read_bytes_finish + 1922: 000000000008c040 83 FUNC GLOBAL DEFAULT 11 g_socket_service_stop + 1923: 00000000000524b0 105 FUNC GLOBAL DEFAULT 11 g_file_new_for_commandline_arg_and_cwd + 1924: 000000000008ae00 142 FUNC GLOBAL DEFAULT 11 g_subprocess_get_successful + 1925: 0000000000068870 141 FUNC GLOBAL DEFAULT 11 g_mount_get_default_location + 1926: 000000000009cdc0 89 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_get_file_info + 1927: 0000000000095210 447 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_for_handle + 1928: 00000000000c9720 111 FUNC GLOBAL DEFAULT 11 g_dbus_message_lock + 1929: 0000000000051680 42 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_uint64 + 1930: 0000000000078b30 332 FUNC GLOBAL DEFAULT 11 g_resources_lookup_data + 1931: 00000000000a4950 155 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_arguments + 1932: 00000000000c6710 151 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_byte_order + 1933: 00000000000ca7c0 111 FUNC GLOBAL DEFAULT 11 g_bus_own_name_on_connection_with_closures + 1934: 00000000000c6b70 216 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_header + 1935: 0000000000084640 34 FUNC GLOBAL DEFAULT 11 g_socket_client_set_family + 1936: 0000000000041b30 443 FUNC GLOBAL DEFAULT 11 g_datagram_based_condition_wait + 1937: 00000000000f3fb0 115 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_string + 1938: 00000000000d25f0 16 FUNC GLOBAL DEFAULT 11 g_dbus_signal_info_ref + 1939: 00000000000f3610 1599 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_search + 1940: 0000000000097010 447 FUNC GLOBAL DEFAULT 11 g_tls_interaction_invoke_request_certificate + 1941: 000000000008dc20 88 FUNC GLOBAL DEFAULT 11 g_task_get_return_on_cancel + 1942: 000000000004e510 269 FUNC GLOBAL DEFAULT 11 g_file_copy_async + 1943: 0000000000093b60 172 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_certificate + 1944: 0000000000088eb0 68 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_stdout_file_path + 1945: 00000000000a6910 112 FUNC GLOBAL DEFAULT 11 g_action_group_list_actions + 1946: 00000000000d5210 128 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_type + 1947: 000000000010e5f0 21 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_get_default + 1948: 0000000000069f30 153 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_add_bytes + 1949: 0000000000112fb0 358 FUNC GLOBAL DEFAULT 11 g_settings_get_enum + 1950: 0000000000045860 271 FUNC GLOBAL DEFAULT 11 g_drive_stop + 1951: 00000000000709b0 166 FUNC GLOBAL DEFAULT 11 g_output_stream_write_bytes_finish + 1952: 000000000009f290 98 FUNC GLOBAL DEFAULT 11 g_tls_authentication_mode_get_type + 1953: 000000000009fb10 106 FUNC GLOBAL DEFAULT 11 g_list_model_get_item_type + 1954: 00000000000f8570 61 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_steal_fds + 1955: 000000000009a570 171 FUNC GLOBAL DEFAULT 11 g_volume_monitor_adopt_orphan_mount + 1956: 00000000000dd430 102 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_for_bus_finish + 1957: 000000000007e0c0 330 FUNC GLOBAL DEFAULT 11 g_socket_close + 1958: 0000000000042800 135 FUNC GLOBAL DEFAULT 11 g_data_input_stream_set_newline_type + 1959: 00000000000d4db0 181 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_lookup_property + 1960: 0000000000076fe0 128 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_address_finish + 1961: 00000000000f9e90 130 FUNC GLOBAL DEFAULT 11 g_unix_is_system_fs_type + 1962: 00000000000733c0 224 FUNC GLOBAL DEFAULT 11 g_permission_impl_update + 1963: 00000000000873c0 1028 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_inet_port + 1964: 0000000000113b70 45 FUNC GLOBAL DEFAULT 11 g_settings_get_string + 1965: 000000000005b3f0 138 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_matches + 1966: 0000000000086060 89 FUNC GLOBAL DEFAULT 11 g_socket_connection_get_socket + 1967: 0000000000059050 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_boolean + 1968: 00000000000a0190 78 FUNC GLOBAL DEFAULT 11 g_list_store_new + 1969: 0000000000062510 90 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_port + 1970: 0000000000045540 120 FUNC GLOBAL DEFAULT 11 g_drive_get_start_stop_type + 1971: 000000000009fb80 106 FUNC GLOBAL DEFAULT 11 g_list_model_get_n_items + 1972: 00000000000cf0d0 363 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_for_bus_sync + 1973: 000000000009ec70 98 FUNC GLOBAL DEFAULT 11 g_dbus_call_flags_get_type + 1974: 00000000000781a0 38 FUNC GLOBAL DEFAULT 11 g_resource_error_quark + 1975: 000000000008a930 11 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_finish + 1976: 0000000000060560 151 FUNC GLOBAL DEFAULT 11 g_inet_address_new_any + 1977: 0000000000113760 293 FUNC GLOBAL DEFAULT 11 g_settings_get + 1978: 000000000004d100 208 FUNC GLOBAL DEFAULT 11 g_file_open_readwrite + 1979: 00000000000a9f50 112 FUNC GLOBAL DEFAULT 11 g_action_get_parameter_type + 1980: 000000000005afb0 105 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_get_type + 1981: 000000000006dbd0 77 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_network_metered + 1982: 0000000000052ae0 5 FUNC GLOBAL DEFAULT 11 g_file_load_contents_finish + 1983: 000000000003bd70 94 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_get_available + 1984: 00000000000a2210 90 FUNC GLOBAL DEFAULT 11 g_application_get_application_id + 1985: 0000000000072080 95 FUNC GLOBAL DEFAULT 11 g_output_stream_write_bytes + 1986: 000000000006d8f0 2 FUNC GLOBAL DEFAULT 11 g_networking_init + 1987: 000000000009da80 98 FUNC GLOBAL DEFAULT 11 g_data_stream_newline_type_get_type + 1988: 000000000008db60 86 FUNC GLOBAL DEFAULT 11 g_task_get_cancellable + 1989: 00000000000ad200 169 FUNC GLOBAL DEFAULT 11 g_menu_remove + 1990: 00000000000978a0 141 FUNC GLOBAL DEFAULT 11 g_tls_password_set_value + 1991: 0000000000059e30 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_is_symlink + 1992: 000000000004dc10 207 FUNC GLOBAL DEFAULT 11 g_file_replace_async + 1993: 00000000000fab60 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_get_device_path + 1994: 0000000000042d60 185 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_int64 + 1995: 00000000000aca30 9 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_next + 1996: 0000000000087140 240 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_socket + 1997: 000000000009f3e0 98 FUNC GLOBAL DEFAULT 11 g_tls_interaction_result_get_type + 1998: 00000000000940a0 115 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_rehandshake_mode + 1999: 00000000000789e0 332 FUNC GLOBAL DEFAULT 11 g_resources_open_stream + 2000: 0000000000098730 161 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_peer_certificate + 2001: 000000000006ab80 89 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_get_data + 2002: 000000000007a380 112 FUNC GLOBAL DEFAULT 11 g_seekable_can_seek + 2003: 00000000000896c0 180 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_async + 2004: 000000000004c560 208 FUNC GLOBAL DEFAULT 11 g_file_query_filesystem_info + 2005: 0000000000112910 147 FUNC GLOBAL DEFAULT 11 g_settings_new_with_path + 2006: 00000000000bf490 98 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_stream + 2007: 0000000000068da0 277 FUNC GLOBAL DEFAULT 11 g_mount_unmount_finish + 2008: 0000000000069710 108 FUNC GLOBAL DEFAULT 11 g_mount_shadow + 2009: 000000000004f590 209 FUNC GLOBAL DEFAULT 11 g_file_set_display_name_async + 2010: 00000000000faf90 128 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_symbolic_icon + 2011: 000000000008d880 99 FUNC GLOBAL DEFAULT 11 g_task_set_priority + 2012: 0000000000092ea0 163 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_validation_flags + 2013: 00000000000cfa80 13 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_finish + 2014: 00000000000f7270 83 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_credentials_finish + 2015: 0000000000055c00 116 FUNC GLOBAL DEFAULT 11 g_file_enumerator_set_pending + 2016: 0000000000063930 94 FUNC GLOBAL DEFAULT 11 g_input_stream_has_pending + 2017: 00000000000abaf0 135 FUNC GLOBAL DEFAULT 11 g_simple_action_set_enabled + 2018: 000000000008dce0 200 FUNC GLOBAL DEFAULT 11 g_task_run_in_thread_sync + 2019: 00000000000820e0 361 FUNC GLOBAL DEFAULT 11 g_socket_set_multicast_loopback + 2020: 00000000000396b0 112 FUNC GLOBAL DEFAULT 11 g_app_info_should_show + 2021: 00000000000d40e0 105 FUNC GLOBAL DEFAULT 11 g_dbus_method_info_get_type + 2022: 00000000000f65f0 40 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_credentials_async + 2023: 00000000000f27c0 224 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_type + 2024: 00000000000582b0 25 FUNC GLOBAL DEFAULT 11 g_file_info_new + 2025: 0000000000041110 198 FUNC GLOBAL DEFAULT 11 g_credentials_set_unix_user + 2026: 00000000000a28e0 134 FUNC GLOBAL DEFAULT 11 g_application_get_dbus_object_path + 2027: 0000000000083340 132 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_next_finish + 2028: 00000000000c7210 132 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_path + 2029: 00000000000cf520 196 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_set_default_timeout + 2030: 0000000000044df0 112 FUNC GLOBAL DEFAULT 11 g_drive_has_media + 2031: 0000000000092690 83 FUNC GLOBAL DEFAULT 11 g_tls_certificate_get_issuer + 2032: 000000000009e730 98 FUNC GLOBAL DEFAULT 11 g_socket_type_get_type + 2033: 0000000000068490 323 FUNC GLOBAL DEFAULT 11 g_mount_eject_with_operation + 2034: 00000000000fae00 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_is_readonly + 2035: 0000000000044140 184 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_int32 + 2036: 0000000000093cc0 162 FUNC GLOBAL DEFAULT 11 g_tls_connection_set_interaction + 2037: 000000000007b340 211 FUNC GLOBAL DEFAULT 11 g_simple_async_result_complete + 2038: 000000000005a1f0 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_content_type + 2039: 000000000010d8e0 9 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_ref + 2040: 0000000000092b40 309 FUNC GLOBAL DEFAULT 11 g_tls_certificate_is_same + 2041: 00000000000cf240 90 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_connection + 2042: 000000000009de00 98 FUNC GLOBAL DEFAULT 11 g_mount_unmount_flags_get_type + 2043: 0000000000062820 130 FUNC GLOBAL DEFAULT 11 g_initable_init + 2044: 00000000000c7be0 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_destination + 2045: 0000000000070a60 217 FUNC GLOBAL DEFAULT 11 g_output_stream_splice_finish + 2046: 00000000000482f0 86 FUNC GLOBAL DEFAULT 11 g_emblem_get_icon + 2047: 0000000000039d70 137 FUNC GLOBAL DEFAULT 11 g_app_launch_context_launch_failed + 2048: 000000000005a880 196 FUNC GLOBAL DEFAULT 11 g_file_info_set_display_name + 2049: 000000000005b190 427 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_subtract + 2050: 000000000007a3f0 174 FUNC GLOBAL DEFAULT 11 g_seekable_seek + 2051: 000000000008a780 131 FUNC GLOBAL DEFAULT 11 g_subprocess_get_stdin_pipe + 2052: 00000000000a7310 139 FUNC GLOBAL DEFAULT 11 g_action_map_get_type + 2053: 00000000000a2970 337 FUNC GLOBAL DEFAULT 11 g_application_register + 2054: 000000000010c6d0 25 FUNC GLOBAL DEFAULT 11 g_memory_settings_backend_new + 2055: 0000000000067db0 147 FUNC GLOBAL DEFAULT 11 g_loadable_icon_get_type + 2056: 00000000000905c0 70 FUNC GLOBAL DEFAULT 11 g_themed_icon_new + 2057: 00000000000598e0 137 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_uint32 + 2058: 000000000009a840 145 FUNC GLOBAL DEFAULT 11 g_vfs_get_file_for_path + 2059: 000000000007dec0 14 FUNC GLOBAL DEFAULT 11 g_socket_join_multicast_group_ssm + 2060: 00000000000f2c40 5 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_keywords + 2061: 00000000000d8c70 252 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_has_connection + 2062: 000000000008e2c0 183 FUNC GLOBAL DEFAULT 11 g_task_run_in_thread + 2063: 000000000005c2c0 88 FUNC GLOBAL DEFAULT 11 g_file_monitor_is_cancelled + 2064: 00000000000d4310 1266 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_generate_xml + 2065: 00000000000a7f00 147 FUNC GLOBAL DEFAULT 11 g_remote_action_group_get_type + 2066: 00000000000721c0 402 FUNC GLOBAL DEFAULT 11 g_output_stream_splice + 2067: 00000000000d7720 85 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_flags + 2068: 00000000000c8540 172 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_error + 2069: 000000000005a310 220 FUNC GLOBAL DEFAULT 11 g_file_info_get_modification_time + 2070: 00000000000ad180 81 FUNC GLOBAL DEFAULT 11 g_menu_freeze + 2071: 00000000000419d0 342 FUNC GLOBAL DEFAULT 11 g_datagram_based_condition_check + 2072: 00000000000624b0 89 FUNC GLOBAL DEFAULT 11 g_inet_socket_address_get_address + 2073: 00000000000584c0 271 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_mask + 2074: 00000000000a25c0 135 FUNC GLOBAL DEFAULT 11 g_application_set_inactivity_timeout + 2075: 00000000000fb960 43 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_new + 2076: 00000000000a4de0 102 FUNC GLOBAL DEFAULT 11 g_application_command_line_set_exit_status + 2077: 0000000000078c80 358 FUNC GLOBAL DEFAULT 11 g_resources_enumerate_children + 2078: 000000000006cca0 671 FUNC GLOBAL DEFAULT 11 g_network_address_parse + 2079: 00000000000d25c0 16 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_ref + 2080: 00000000000a2430 90 FUNC GLOBAL DEFAULT 11 g_application_get_resource_base_path + 2081: 000000000009b930 255 FUNC GLOBAL DEFAULT 11 g_volume_eject + 2082: 00000000000add80 453 FUNC GLOBAL DEFAULT 11 g_menu_item_new_from_model + 2083: 00000000000a2340 88 FUNC GLOBAL DEFAULT 11 g_application_get_flags + 2084: 00000000000763d0 300 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_lookup_async + 2085: 0000000000050000 185 FUNC GLOBAL DEFAULT 11 g_file_copy_attributes + 2086: 00000000000b15c0 181 FUNC GLOBAL DEFAULT 11 g_dbus_is_name + 2087: 00000000000b1890 101 FUNC GLOBAL DEFAULT 11 g_dbus_is_guid + 2088: 000000000008b060 174 FUNC GLOBAL DEFAULT 11 g_subprocess_get_term_sig + 2089: 00000000000f9f20 175 FUNC GLOBAL DEFAULT 11 g_unix_is_system_device_path + 2090: 00000000000ac3e0 12 FUNC GLOBAL DEFAULT 11 g_menu_model_get_item_link + 2091: 0000000000088c80 52 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_new + 2092: 0000000000113de0 39 FUNC GLOBAL DEFAULT 11 g_settings_set_boolean + 2093: 000000000007d790 95 FUNC GLOBAL DEFAULT 11 g_socket_get_blocking + 2094: 0000000000078980 37 FUNC GLOBAL DEFAULT 11 g_resources_register + 2095: 00000000000f6620 40 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_credentials_async + 2096: 0000000000060400 185 FUNC GLOBAL DEFAULT 11 g_inet_address_new_from_string + 2097: 00000000000429b0 168 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_byte + 2098: 0000000000054bb0 164 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_list_lookup + 2099: 0000000000112c90 260 FUNC GLOBAL DEFAULT 11 g_settings_get_value + 2100: 000000000005a7b0 196 FUNC GLOBAL DEFAULT 11 g_file_info_set_name + 2101: 00000000000808a0 101 FUNC GLOBAL DEFAULT 11 g_socket_receive_from + 2102: 00000000000a3890 8 FUNC GLOBAL DEFAULT 11 g_application_get_default + 2103: 0000000000078f40 80 FUNC GLOBAL DEFAULT 11 g_static_resource_fini + 2104: 000000000003a280 243 FUNC GLOBAL DEFAULT 11 g_async_initable_init_finish + 2105: 00000000000f2c70 357 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_show_in + 2106: 000000000009c3d0 106 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_volumes + 2107: 00000000000b0660 121 FUNC GLOBAL DEFAULT 11 g_notification_set_icon + 2108: 0000000000052280 169 FUNC GLOBAL DEFAULT 11 g_file_new_tmp + 2109: 00000000000ac2c0 12 FUNC GLOBAL DEFAULT 11 g_menu_model_get_item_attribute_value + 2110: 000000000007ae50 127 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new_take_error + 2111: 0000000000081000 345 FUNC GLOBAL DEFAULT 11 g_socket_get_ttl + 2112: 00000000000c2500 230 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_finish + 2113: 000000000009ab60 337 FUNC GLOBAL DEFAULT 11 g_vfs_parse_name + 2114: 00000000000c3c00 431 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unregister_object + 2115: 00000000000ac130 128 FUNC GLOBAL DEFAULT 11 g_menu_model_get_type + 2116: 000000000003bb90 255 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_fill_finish + 2117: 0000000000066350 4 FUNC GLOBAL DEFAULT 11 g_io_extension_get_name + 2118: 0000000000080700 62 FUNC GLOBAL DEFAULT 11 g_socket_send_message + 2119: 00000000000adcb0 13 FUNC GLOBAL DEFAULT 11 g_menu_prepend_submenu + 2120: 0000000000067190 589 FUNC GLOBAL DEFAULT 11 g_io_stream_splice_async + 2121: 000000000006b880 129 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_domain + 2122: 0000000000074740 130 FUNC GLOBAL DEFAULT 11 g_proxy_connect_finish + 2123: 00000000000de8e0 243 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_get_type + 2124: 000000000008ac60 5 FUNC GLOBAL DEFAULT 11 g_subprocess_wait_check_async + 2125: 000000000009f840 98 FUNC GLOBAL DEFAULT 11 g_subprocess_flags_get_type + 2126: 00000000000b0820 292 FUNC GLOBAL DEFAULT 11 g_notification_add_button_with_target_value + 2127: 000000000008f660 332 FUNC GLOBAL DEFAULT 11 g_tcp_wrapper_connection_new + 2128: 000000000008e6b0 185 FUNC GLOBAL DEFAULT 11 g_task_propagate_boolean + 2129: 00000000000619f0 216 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_equal + 2130: 000000000008a370 224 FUNC GLOBAL DEFAULT 11 g_subprocess_get_type + 2131: 00000000000dd510 107 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_name + 2132: 000000000009f610 98 FUNC GLOBAL DEFAULT 11 g_tls_certificate_request_flags_get_type + 2133: 0000000000113db0 41 FUNC GLOBAL DEFAULT 11 g_settings_get_boolean + 2134: 00000000000f8300 158 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_get_type + 2135: 00000000000f8450 32 FUNC GLOBAL DEFAULT 11 g_unix_fd_message_new_with_fd_list + 2136: 000000000005ce40 98 FUNC GLOBAL DEFAULT 11 g_filename_completer_set_dirs_only + 2137: 0000000000071120 95 FUNC GLOBAL DEFAULT 11 g_output_stream_is_closing + 2138: 000000000010f750 53 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_name + 2139: 000000000006bc50 114 FUNC GLOBAL DEFAULT 11 g_mount_operation_reply + 2140: 00000000000813b0 345 FUNC GLOBAL DEFAULT 11 g_socket_get_multicast_ttl + 2141: 00000000000a3e30 285 FUNC GLOBAL DEFAULT 11 g_application_send_notification + 2142: 0000000000044d00 120 FUNC GLOBAL DEFAULT 11 g_drive_is_removable + 2143: 0000000000085240 92 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_host + 2144: 00000000000397a0 277 FUNC GLOBAL DEFAULT 11 g_app_info_launch_default_for_uri_async + 2145: 00000000000638d0 92 FUNC GLOBAL DEFAULT 11 g_input_stream_is_closed + 2146: 00000000000931c0 115 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_set_use_ssl3 + 2147: 000000000009cd80 53 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_new + 2148: 000000000007e410 396 FUNC GLOBAL DEFAULT 11 g_socket_create_source + 2149: 0000000000069de0 301 FUNC GLOBAL DEFAULT 11 g_memory_input_stream_get_type + 2150: 0000000000088d40 9 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_getenv + 2151: 000000000006d670 217 FUNC GLOBAL DEFAULT 11 g_network_address_parse_uri + 2152: 000000000007d640 99 FUNC GLOBAL DEFAULT 11 g_socket_new + 2153: 000000000006c0b0 122 FUNC GLOBAL DEFAULT 11 g_native_socket_address_new + 2154: 00000000000ad9f0 208 FUNC GLOBAL DEFAULT 11 g_menu_item_set_action_and_target + 2155: 00000000000b0030 453 FUNC GLOBAL DEFAULT 11 g_dbus_menu_model_get + 2156: 0000000000076a40 157 FUNC GLOBAL DEFAULT 11 g_resolver_get_type + 2157: 0000000000067aa0 161 FUNC GLOBAL DEFAULT 11 g_io_stream_close_finish + 2158: 00000000000c8d30 264 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_unix_fd_list + 2159: 00000000000d88d0 157 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_info + 2160: 00000000000f4580 89 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_list_actions + 2161: 0000000000074e60 158 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_type + 2162: 0000000000067fa0 174 FUNC GLOBAL DEFAULT 11 g_loadable_icon_load_async + 2163: 00000000000f43d0 171 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_locale_string + 2164: 00000000000f43c0 5 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_launch_uris_as_manager + 2165: 000000000008e820 60 FUNC GLOBAL DEFAULT 11 g_task_report_error + 2166: 000000000005edf0 92 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_get_close_base_stream + 2167: 0000000000086250 169 FUNC GLOBAL DEFAULT 11 g_socket_connection_factory_lookup_type + 2168: 00000000000df150 134 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_export + 2169: 0000000000052750 468 FUNC GLOBAL DEFAULT 11 g_file_load_contents + 2170: 00000000000af110 5 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unexport_menu_model + 2171: 000000000010efe0 259 FUNC GLOBAL DEFAULT 11 g_settings_schema_list_keys + 2172: 00000000000d41c0 105 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_get_type + 2173: 00000000000cf440 90 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_interface_name + 2174: 00000000000b3380 181 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_stream_finish + 2175: 00000000000f5a20 453 FUNC GLOBAL DEFAULT 11 g_content_type_get_description + 2176: 0000000000081700 371 FUNC GLOBAL DEFAULT 11 g_socket_get_remote_address + 2177: 00000000000d53b0 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_method_info + 2178: 00000000000faba0 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_get_fs_type + 2179: 00000000000d8bc0 168 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_connections + 2180: 00000000000955a0 311 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_for_handle_finish + 2181: 00000000000736d0 137 FUNC GLOBAL DEFAULT 11 g_pollable_input_stream_create_source + 2182: 00000000000b07b0 98 FUNC GLOBAL DEFAULT 11 g_notification_set_priority + 2183: 000000000005ecf0 158 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_get_type + 2184: 00000000000d28d0 67 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_unref + 2185: 0000000000085300 92 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_uri + 2186: 00000000000c25f0 292 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_sync + 2187: 0000000000077210 128 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_service_finish + 2188: 000000000004afa0 271 FUNC GLOBAL DEFAULT 11 g_file_stop_mountable + 2189: 000000000007e700 608 FUNC GLOBAL DEFAULT 11 g_socket_condition_timed_wait + 2190: 000000000004b420 112 FUNC GLOBAL DEFAULT 11 g_file_get_uri + 2191: 00000000000d7b20 216 FUNC GLOBAL DEFAULT 11 g_dbus_interface_dup_object + 2192: 0000000000058fa0 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_stringv + 2193: 00000000000c01c0 379 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message + 2194: 0000000000066360 4 FUNC GLOBAL DEFAULT 11 g_io_extension_get_priority + 2195: 0000000000066db0 152 FUNC GLOBAL DEFAULT 11 g_io_stream_get_type + 2196: 00000000000fb0f0 447 FUNC GLOBAL DEFAULT 11 g_unix_mount_guess_should_display + 2197: 00000000000d60e0 316 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_error + 2198: 0000000000058230 128 FUNC GLOBAL DEFAULT 11 g_file_info_get_type + 2199: 000000000005e7d0 158 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_get_type + 2200: 000000000008ad20 86 FUNC GLOBAL DEFAULT 11 g_subprocess_force_exit + 2201: 0000000000039950 120 FUNC GLOBAL DEFAULT 11 g_app_info_delete + 2202: 00000000000d9c20 469 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_add_interface + 2203: 000000000007a310 112 FUNC GLOBAL DEFAULT 11 g_seekable_tell + 2204: 00000000000a1f40 124 FUNC GLOBAL DEFAULT 11 g_application_set_option_context_parameter_string + 2205: 000000000003cff0 132 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_new_sized + 2206: 0000000000072f60 132 FUNC GLOBAL DEFAULT 11 g_permission_acquire + 2207: 00000000000971d0 311 FUNC GLOBAL DEFAULT 11 g_tls_interaction_request_certificate + 2208: 0000000000095e60 332 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificates_issued_by_async + 2209: 000000000004ce20 208 FUNC GLOBAL DEFAULT 11 g_file_create + 2210: 00000000000d9a50 78 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_new + 2211: 000000000009e0a0 98 FUNC GLOBAL DEFAULT 11 g_filesystem_preview_type_get_type + 2212: 00000000000a3ae0 130 FUNC GLOBAL DEFAULT 11 g_application_mark_busy + 2213: 00000000000442c0 195 FUNC GLOBAL DEFAULT 11 g_data_output_stream_put_int64 + 2214: 000000000004b2d0 112 FUNC GLOBAL DEFAULT 11 g_file_get_uri_scheme + 2215: 0000000000087230 398 FUNC GLOBAL DEFAULT 11 g_socket_listener_add_address + 2216: 0000000000095c10 447 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificates_issued_by + 2217: 0000000000084850 21 FUNC GLOBAL DEFAULT 11 g_socket_client_get_proxy_resolver + 2218: 0000000000068ec0 255 FUNC GLOBAL DEFAULT 11 g_mount_eject + 2219: 00000000000f2a90 180 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_new_from_filename + 2220: 0000000000076500 26 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_get_default + 2221: 00000000000c7e40 290 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_reply + 2222: 0000000000053a70 353 FUNC GLOBAL DEFAULT 11 g_file_load_bytes_finish + 2223: 0000000000082b10 224 FUNC GLOBAL DEFAULT 11 g_socket_address_get_type + 2224: 000000000004b5e0 234 FUNC GLOBAL DEFAULT 11 g_file_equal + 2225: 000000000008b510 236 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_utf8_async + 2226: 000000000008c1c0 20 FUNC GLOBAL DEFAULT 11 g_srv_target_copy + 2227: 00000000000393b0 155 FUNC GLOBAL DEFAULT 11 g_app_info_launch + 2228: 0000000000044bb0 112 FUNC GLOBAL DEFAULT 11 g_drive_has_volumes + 2229: 000000000007db70 89 FUNC GLOBAL DEFAULT 11 g_socket_get_protocol + 2230: 00000000000427a0 88 FUNC GLOBAL DEFAULT 11 g_data_input_stream_get_byte_order + 2231: 000000000010ebb0 9 FUNC GLOBAL DEFAULT 11 g_settings_schema_has_key + 2232: 0000000000066870 225 FUNC GLOBAL DEFAULT 11 g_io_scheduler_job_send_to_mainloop_async + 2233: 000000000005c320 158 FUNC GLOBAL DEFAULT 11 g_file_monitor_cancel + 2234: 0000000000074680 185 FUNC GLOBAL DEFAULT 11 g_proxy_connect_async + 2235: 00000000000926f0 12 FUNC GLOBAL DEFAULT 11 g_tls_certificate_verify + 2236: 0000000000093c10 161 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_certificate + 2237: 000000000009ce20 184 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_set_file_info + 2238: 0000000000051650 41 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_int32 + 2239: 00000000000f96d0 147 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_copy + 2240: 00000000000d4070 105 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_get_type + 2241: 0000000000052d80 117 FUNC GLOBAL DEFAULT 11 g_file_replace_contents_async + 2242: 00000000000d4990 545 FUNC GLOBAL DEFAULT 11 g_dbus_node_info_new_for_xml + 2243: 000000000006d810 90 FUNC GLOBAL DEFAULT 11 g_network_address_get_scheme + 2244: 000000000007b6d0 388 FUNC GLOBAL DEFAULT 11 g_simple_async_report_error_in_idle + 2245: 000000000010e3c0 105 FUNC GLOBAL DEFAULT 11 g_settings_schema_source_get_type + 2246: 00000000000aca80 61 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_value + 2247: 0000000000059a60 137 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_uint64 + 2248: 0000000000072ec0 152 FUNC GLOBAL DEFAULT 11 g_permission_get_type + 2249: 0000000000051910 285 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable_finish + 2250: 00000000000a3f50 151 FUNC GLOBAL DEFAULT 11 g_application_withdraw_notification + 2251: 00000000000aa170 112 FUNC GLOBAL DEFAULT 11 g_action_get_enabled + 2252: 0000000000091dc0 27 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_server_connection_type + 2253: 00000000000ba430 710 FUNC GLOBAL DEFAULT 11 g_dbus_error_unregister_error + 2254: 0000000000063990 223 FUNC GLOBAL DEFAULT 11 g_input_stream_set_pending + 2255: 0000000000039e00 128 FUNC GLOBAL DEFAULT 11 g_app_info_monitor_get_type + 2256: 0000000000093aa0 177 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_database + 2257: 0000000000058850 242 FUNC GLOBAL DEFAULT 11 g_file_info_list_attributes + 2258: 0000000000038df0 181 FUNC GLOBAL DEFAULT 11 g_app_info_set_as_default_for_type + 2259: 0000000000052f00 354 FUNC GLOBAL DEFAULT 11 g_file_measure_disk_usage + 2260: 000000000004bb90 147 FUNC GLOBAL DEFAULT 11 g_file_get_child + 2261: 00000000000dd4a0 107 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_get_connection + 2262: 0000000000044ab0 112 FUNC GLOBAL DEFAULT 11 g_drive_get_icon + 2263: 0000000000088d20 19 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_unsetenv + 2264: 00000000000411f0 139 FUNC GLOBAL DEFAULT 11 g_datagram_based_get_type + 2265: 00000000000a7ff0 66 FUNC GLOBAL DEFAULT 11 g_remote_action_group_change_action_state_full + 2266: 00000000000846f0 9 FUNC GLOBAL DEFAULT 11 g_socket_client_get_local_address + 2267: 00000000000d5290 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_sender + 2268: 00000000000fb990 141 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_new_with_type + 2269: 000000000007b9a0 180 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_check_cancellable + 2270: 000000000009bde0 120 FUNC GLOBAL DEFAULT 11 g_volume_get_activation_root + 2271: 00000000000a2ca0 237 FUNC GLOBAL DEFAULT 11 g_application_open + 2272: 0000000000061770 93 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_family + 2273: 000000000004ef40 177 FUNC GLOBAL DEFAULT 11 g_file_delete_async + 2274: 0000000000064b50 317 FUNC GLOBAL DEFAULT 11 g_input_stream_read_all_async + 2275: 0000000000043c10 249 FUNC GLOBAL DEFAULT 11 g_data_output_stream_get_type + 2276: 0000000000114640 411 FUNC GLOBAL DEFAULT 11 g_settings_bind_writable + 2277: 00000000000452d0 285 FUNC GLOBAL DEFAULT 11 g_drive_poll_for_media_finish + 2278: 00000000000bea60 230 FUNC GLOBAL DEFAULT 11 g_dbus_connection_close + 2279: 00000000000712c0 469 FUNC GLOBAL DEFAULT 11 g_output_stream_write_async + 2280: 00000000000989a0 115 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_rehandshake_mode + 2281: 00000000000773a0 185 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_records_async + 2282: 000000000007d6b0 50 FUNC GLOBAL DEFAULT 11 g_socket_new_from_fd + 2283: 00000000000da470 243 FUNC GLOBAL DEFAULT 11 g_dbus_object_proxy_get_type + 2284: 000000000009e3b0 98 FUNC GLOBAL DEFAULT 11 g_io_stream_splice_flags_get_type + 2285: 00000000000f3c50 465 FUNC GLOBAL DEFAULT 11 g_app_info_get_all + 2286: 000000000009f8b0 98 FUNC GLOBAL DEFAULT 11 g_notification_priority_get_type + 2287: 00000000000cb780 410 FUNC GLOBAL DEFAULT 11 g_bus_watch_name_on_connection + 2288: 0000000000099430 147 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_get_type + 2289: 000000000009eea0 98 FUNC GLOBAL DEFAULT 11 g_dbus_subtree_flags_get_type + 2290: 0000000000086410 106 FUNC GLOBAL DEFAULT 11 g_socket_control_message_get_size + 2291: 00000000000c0130 140 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_last_serial + 2292: 00000000000c3100 1645 FUNC GLOBAL DEFAULT 11 g_dbus_connection_signal_subscribe + 2293: 0000000000045180 325 FUNC GLOBAL DEFAULT 11 g_drive_eject_with_operation_finish + 2294: 000000000009de70 98 FUNC GLOBAL DEFAULT 11 g_drive_start_flags_get_type + 2295: 0000000000098b50 174 FUNC GLOBAL DEFAULT 11 g_dtls_connection_handshake_async + 2296: 00000000000fa540 875 FUNC GLOBAL DEFAULT 11 g_unix_mount_points_get + 2297: 000000000006b560 90 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_username + 2298: 000000000004b8f0 229 FUNC GLOBAL DEFAULT 11 g_file_has_prefix + 2299: 00000000000739b0 112 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_can_poll + 2300: 000000000007dea0 14 FUNC GLOBAL DEFAULT 11 g_socket_join_multicast_group + 2301: 0000000000084350 350 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_async + 2302: 000000000005e1d0 275 FUNC GLOBAL DEFAULT 11 g_file_io_stream_query_info_async + 2303: 00000000000d91b0 339 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_unexport_from_connection + 2304: 0000000000061550 76 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_new + 2305: 00000000000ad370 220 FUNC GLOBAL DEFAULT 11 g_menu_item_set_attribute_value + 2306: 0000000000083190 132 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_next + 2307: 000000000004e860 177 FUNC GLOBAL DEFAULT 11 g_file_make_directory_async + 2308: 0000000000068800 112 FUNC GLOBAL DEFAULT 11 g_mount_get_root + 2309: 00000000000a2b50 153 FUNC GLOBAL DEFAULT 11 g_application_release + 2310: 0000000000086560 99 FUNC GLOBAL DEFAULT 11 g_socket_control_message_serialize + 2311: 000000000003a750 81 FUNC GLOBAL DEFAULT 11 g_async_result_legacy_propagate_error + 2312: 0000000000075020 8 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_uri + 2313: 0000000000113c30 43 FUNC GLOBAL DEFAULT 11 g_settings_get_int64 + 2314: 00000000000454c0 120 FUNC GLOBAL DEFAULT 11 g_drive_enumerate_identifiers + 2315: 000000000003dcf0 210 FUNC GLOBAL DEFAULT 11 g_cancellable_cancel + 2316: 00000000000979f0 116 FUNC GLOBAL DEFAULT 11 g_tls_password_set_flags + 2317: 000000000005b510 99 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_enumerate_next + 2318: 000000000009be60 120 FUNC GLOBAL DEFAULT 11 g_volume_get_sort_key + 2319: 00000000000515e0 32 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_string + 2320: 00000000000500c0 4071 FUNC GLOBAL DEFAULT 11 g_file_copy + 2321: 000000000010f370 75 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_unref + 2322: 000000000007a950 152 FUNC GLOBAL DEFAULT 11 g_simple_async_result_propagate_error + 2323: 000000000009f680 98 FUNC GLOBAL DEFAULT 11 g_io_module_scope_flags_get_type + 2324: 000000000004f670 246 FUNC GLOBAL DEFAULT 11 g_file_set_display_name_finish + 2325: 00000000000bcd70 276 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_type + 2326: 0000000000066eb0 66 FUNC GLOBAL DEFAULT 11 g_io_stream_get_input_stream + 2327: 00000000000cf300 90 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_name + 2328: 000000000009e880 98 FUNC GLOBAL DEFAULT 11 g_zlib_compressor_format_get_type + 2329: 00000000000c2fc0 307 FUNC GLOBAL DEFAULT 11 g_dbus_connection_remove_filter + 2330: 00000000000df480 128 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_unexport + 2331: 0000000000044d80 112 FUNC GLOBAL DEFAULT 11 g_drive_is_media_removable + 2332: 00000000000a7ee0 5 FUNC GLOBAL DEFAULT 11 g_simple_action_group_add_entries + 2333: 00000000000673e0 94 FUNC GLOBAL DEFAULT 11 g_io_stream_has_pending + 2334: 0000000000088f50 68 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_stderr_file_path + 2335: 00000000000a9e70 112 FUNC GLOBAL DEFAULT 11 g_action_get_state + 2336: 000000000009bca0 191 FUNC GLOBAL DEFAULT 11 g_volume_get_identifier + 2337: 00000000000b1c10 1049 FUNC GLOBAL DEFAULT 11 g_dbus_gvalue_to_gvariant + 2338: 00000000000c68c0 85 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_flags + 2339: 0000000000074fd0 9 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_destination_protocol + 2340: 00000000000d4cf0 181 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_lookup_signal + 2341: 000000000004a940 139 FUNC GLOBAL DEFAULT 11 g_file_get_type + 2342: 0000000000076360 112 FUNC GLOBAL DEFAULT 11 g_proxy_resolver_is_supported + 2343: 0000000000093d70 177 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_interaction + 2344: 000000000010d8f0 9 FUNC GLOBAL DEFAULT 11 g_settings_schema_ref + 2345: 0000000000099950 84 FUNC GLOBAL DEFAULT 11 g_dtls_server_connection_new + 2346: 00000000000789b0 37 FUNC GLOBAL DEFAULT 11 g_resources_unregister + 2347: 000000000004e240 246 FUNC GLOBAL DEFAULT 11 g_file_create_readwrite_finish + 2348: 000000000004b9e0 229 FUNC GLOBAL DEFAULT 11 g_file_get_relative_path + 2349: 000000000004fc90 299 FUNC GLOBAL DEFAULT 11 g_file_set_attribute + 2350: 0000000000091e60 114 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_dtls_server_connection_type + 2351: 0000000000088d00 19 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_setenv + 2352: 000000000004c6b0 188 FUNC GLOBAL DEFAULT 11 g_file_query_filesystem_info_async + 2353: 00000000000606c0 90 FUNC GLOBAL DEFAULT 11 g_inet_address_to_bytes + 2354: 00000000000694a0 285 FUNC GLOBAL DEFAULT 11 g_mount_guess_content_type_finish + 2355: 00000000000943b0 82 FUNC GLOBAL DEFAULT 11 g_tls_connection_emit_accept_certificate + 2356: 00000000000adc10 16 FUNC GLOBAL DEFAULT 11 g_menu_append + 2357: 0000000000048ce0 90 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_get_emblems + 2358: 000000000007b900 145 FUNC GLOBAL DEFAULT 11 g_simple_async_report_take_gerror_in_idle + 2359: 00000000000aa2a0 117 FUNC GLOBAL DEFAULT 11 g_action_name_is_valid + 2360: 000000000004da50 187 FUNC GLOBAL DEFAULT 11 g_file_create_async + 2361: 0000000000113c90 41 FUNC GLOBAL DEFAULT 11 g_settings_get_uint + 2362: 000000000004bad0 183 FUNC GLOBAL DEFAULT 11 g_file_resolve_relative_path + 2363: 00000000000dfe40 136 FUNC GLOBAL DEFAULT 11 g_test_dbus_add_service_dir + 2364: 00000000000446f0 323 FUNC GLOBAL DEFAULT 11 g_drive_eject_with_operation + 2365: 00000000000b3440 519 FUNC GLOBAL DEFAULT 11 g_dbus_address_get_stream_sync + 2366: 000000000009f1b0 98 FUNC GLOBAL DEFAULT 11 g_tls_error_get_type + 2367: 00000000000a01e0 244 FUNC GLOBAL DEFAULT 11 g_list_store_insert + 2368: 0000000000096a40 355 FUNC GLOBAL DEFAULT 11 g_tls_interaction_request_certificate_async + 2369: 0000000000084630 7 FUNC GLOBAL DEFAULT 11 g_socket_client_get_family + 2370: 00000000000c6ad0 155 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_header + 2371: 0000000000078df0 302 FUNC GLOBAL DEFAULT 11 g_resources_get_info + 2372: 000000000006b730 89 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_anonymous + 2373: 00000000000a06e0 460 FUNC GLOBAL DEFAULT 11 g_list_store_splice + 2374: 000000000007d9a0 135 FUNC GLOBAL DEFAULT 11 g_socket_set_timeout + 2375: 00000000000ad950 38 FUNC GLOBAL DEFAULT 11 g_menu_item_set_label + 2376: 0000000000038c90 112 FUNC GLOBAL DEFAULT 11 g_app_info_get_description + 2377: 0000000000098880 115 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_require_close_notify + 2378: 000000000009e2d0 98 FUNC GLOBAL DEFAULT 11 g_mount_operation_result_get_type + 2379: 000000000009b620 112 FUNC GLOBAL DEFAULT 11 g_volume_get_mount + 2380: 00000000000f9590 75 FUNC GLOBAL DEFAULT 11 g_unix_mount_free + 2381: 000000000006d960 155 FUNC GLOBAL DEFAULT 11 g_network_monitor_get_type + 2382: 00000000000d5ef0 137 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_gerror + 2383: 000000000005b920 249 FUNC GLOBAL DEFAULT 11 g_file_input_stream_get_type + 2384: 00000000000adc70 50 FUNC GLOBAL DEFAULT 11 g_menu_insert_submenu + 2385: 000000000007b630 151 FUNC GLOBAL DEFAULT 11 g_simple_async_result_is_valid + 2386: 0000000000088fa0 65 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_take_stderr_fd + 2387: 000000000008daa0 85 FUNC GLOBAL DEFAULT 11 g_task_get_priority + 2388: 0000000000055ce0 648 FUNC GLOBAL DEFAULT 11 g_file_enumerator_iterate + 2389: 000000000003d440 276 FUNC GLOBAL DEFAULT 11 g_bytes_icon_get_type + 2390: 000000000004c2f0 151 FUNC GLOBAL DEFAULT 11 g_file_query_file_type + 2391: 000000000007f7f0 33 FUNC GLOBAL DEFAULT 11 g_socket_receive + 2392: 0000000000060e90 265 FUNC GLOBAL DEFAULT 11 g_inet_address_equal + 2393: 0000000000064d40 23 FUNC GLOBAL DEFAULT 11 g_io_error_from_errno + 2394: 00000000000a0420 169 FUNC GLOBAL DEFAULT 11 g_list_store_sort + 2395: 000000000009b280 323 FUNC GLOBAL DEFAULT 11 g_volume_eject_with_operation + 2396: 00000000000adcc0 16 FUNC GLOBAL DEFAULT 11 g_menu_append_submenu + 2397: 0000000000061450 243 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_type + 2398: 0000000000076d40 61 FUNC GLOBAL DEFAULT 11 g_resolver_set_default + 2399: 000000000003a140 139 FUNC GLOBAL DEFAULT 11 g_async_initable_get_type + 2400: 00000000000da830 179 FUNC GLOBAL DEFAULT 11 g_dbus_object_proxy_new + 2401: 0000000000076220 158 FUNC GLOBAL DEFAULT 11 g_proxy_address_enumerator_get_type + 2402: 000000000010d7f0 42 FUNC GLOBAL DEFAULT 11 g_settings_backend_get_default + 2403: 0000000000078370 271 FUNC GLOBAL DEFAULT 11 g_resource_new_from_data + 2404: 000000000009b040 139 FUNC GLOBAL DEFAULT 11 g_volume_get_type + 2405: 00000000000489e0 243 FUNC GLOBAL DEFAULT 11 g_emblemed_icon_get_type + 2406: 0000000000098460 172 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_certificate + 2407: 0000000000051600 32 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_byte_string + 2408: 000000000008e770 161 FUNC GLOBAL DEFAULT 11 g_task_return_error + 2409: 0000000000043380 114 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_finish_utf8 + 2410: 000000000008c0a0 25 FUNC GLOBAL DEFAULT 11 g_socket_service_new + 2411: 00000000000d7c00 175 FUNC GLOBAL DEFAULT 11 g_dbus_interface_set_object + 2412: 00000000000d90a0 268 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_unexport + 2413: 0000000000114d80 71 FUNC GLOBAL DEFAULT 11 g_settings_bind + 2414: 00000000000992f0 82 FUNC GLOBAL DEFAULT 11 g_dtls_connection_emit_accept_certificate + 2415: 00000000000d79b0 139 FUNC GLOBAL DEFAULT 11 g_dbus_interface_get_type + 2416: 00000000000987e0 147 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_peer_certificate_errors + 2417: 0000000000084c20 1554 FUNC GLOBAL DEFAULT 11 g_socket_client_connect + 2418: 0000000000097f30 84 FUNC GLOBAL DEFAULT 11 g_tls_server_connection_new + 2419: 000000000003a670 112 FUNC GLOBAL DEFAULT 11 g_async_result_get_user_data + 2420: 0000000000065c70 124 FUNC GLOBAL DEFAULT 11 g_io_extension_point_get_extension_by_name + 2421: 000000000005ac90 165 FUNC GLOBAL DEFAULT 11 g_file_info_set_size + 2422: 000000000007a9f0 116 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_op_res_gpointer + 2423: 00000000000651f0 136 FUNC GLOBAL DEFAULT 11 g_io_module_get_type + 2424: 00000000000dff50 68 FUNC GLOBAL DEFAULT 11 g_test_dbus_unset + 2425: 00000000000b0330 128 FUNC GLOBAL DEFAULT 11 g_notification_get_type + 2426: 000000000009a7d0 106 FUNC GLOBAL DEFAULT 11 g_vfs_is_active + 2427: 000000000009e960 98 FUNC GLOBAL DEFAULT 11 g_bus_type_get_type + 2428: 00000000000fba30 5 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_path + 2429: 00000000000ba890 762 FUNC GLOBAL DEFAULT 11 g_dbus_error_new_for_dbus_error + 2430: 00000000000ce9e0 330 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_set_cached_property + 2431: 000000000003e980 4 FUNC GLOBAL DEFAULT 11 g_charset_converter_get_use_fallback + 2432: 000000000007d940 89 FUNC GLOBAL DEFAULT 11 g_socket_get_timeout + 2433: 00000000000654c0 810 FUNC GLOBAL DEFAULT 11 g_io_modules_scan_all_in_directory_with_scope + 2434: 000000000008f350 11 FUNC GLOBAL DEFAULT 11 g_tcp_connection_get_graceful_disconnect + 2435: 0000000000064600 273 FUNC GLOBAL DEFAULT 11 g_input_stream_skip + 2436: 00000000000d5f80 161 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_return_error_literal + 2437: 000000000008e560 184 FUNC GLOBAL DEFAULT 11 g_task_propagate_int + 2438: 00000000000c2720 184 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_for_address + 2439: 0000000000084750 8 FUNC GLOBAL DEFAULT 11 g_socket_client_get_timeout + 2440: 00000000000ac3f0 23 FUNC GLOBAL DEFAULT 11 g_menu_model_items_changed + 2441: 0000000000113e10 45 FUNC GLOBAL DEFAULT 11 g_settings_get_strv + 2442: 00000000001132a0 356 FUNC GLOBAL DEFAULT 11 g_settings_get_flags + 2443: 00000000000d42a0 105 FUNC GLOBAL DEFAULT 11 g_dbus_annotation_info_get_type + 2444: 0000000000045a90 120 FUNC GLOBAL DEFAULT 11 g_drive_get_sort_key + 2445: 0000000000039720 116 FUNC GLOBAL DEFAULT 11 g_app_info_launch_default_for_uri + 2446: 00000000000afd00 136 FUNC GLOBAL DEFAULT 11 g_dbus_menu_model_get_type + 2447: 0000000000052470 53 FUNC GLOBAL DEFAULT 11 g_file_new_for_commandline_arg + 2448: 00000000000a4c90 332 FUNC GLOBAL DEFAULT 11 g_application_command_line_printerr + 2449: 00000000000ac410 152 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_type + 2450: 0000000000061830 89 FUNC GLOBAL DEFAULT 11 g_inet_address_mask_get_length + 2451: 00000000000c27e0 230 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new_for_address_finish + 2452: 000000000004d5f0 239 FUNC GLOBAL DEFAULT 11 g_file_load_partial_contents_async + 2453: 000000000009e8f0 98 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_type_get_type + 2454: 000000000006e8d0 188 FUNC GLOBAL DEFAULT 11 g_network_monitor_base_remove_network + 2455: 00000000000c4c80 129 FUNC GLOBAL DEFAULT 11 g_bus_get_finish + 2456: 00000000000a3ff0 444 FUNC GLOBAL DEFAULT 11 g_application_bind_busy_property + 2457: 0000000000065410 171 FUNC GLOBAL DEFAULT 11 g_io_extension_point_register + 2458: 00000000000f2e00 5 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_set_desktop_env + 2459: 000000000005a3f0 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_symlink_target + 2460: 000000000006ad30 158 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_steal_as_bytes + 2461: 00000000000652f0 257 FUNC GLOBAL DEFAULT 11 g_io_modules_load_all_in_directory_with_scope + 2462: 000000000009b690 117 FUNC GLOBAL DEFAULT 11 g_volume_can_mount + 2463: 0000000000065c20 4 FUNC GLOBAL DEFAULT 11 g_io_extension_point_get_required_type + 2464: 00000000000516b0 42 FUNC GLOBAL DEFAULT 11 g_file_set_attribute_int64 + 2465: 00000000000932f0 202 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_copy_session_state + 2466: 0000000000082d80 125 FUNC GLOBAL DEFAULT 11 g_socket_address_to_native + 2467: 000000000009e490 98 FUNC GLOBAL DEFAULT 11 g_resolver_error_get_type + 2468: 000000000003d8c0 75 FUNC GLOBAL DEFAULT 11 g_cancellable_push_current + 2469: 00000000000ac5f0 204 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_get_next + 2470: 000000000008db00 86 FUNC GLOBAL DEFAULT 11 g_task_get_context + 2471: 00000000000ad520 220 FUNC GLOBAL DEFAULT 11 g_menu_item_set_link + 2472: 000000000008e4d0 137 FUNC GLOBAL DEFAULT 11 g_task_return_int + 2473: 00000000000c4270 77 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_sync + 2474: 00000000000dfce0 88 FUNC GLOBAL DEFAULT 11 g_test_dbus_get_flags + 2475: 0000000000093ee0 147 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_peer_certificate_errors + 2476: 00000000000399d0 152 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_type + 2477: 0000000000078130 105 FUNC GLOBAL DEFAULT 11 g_resource_get_type + 2478: 0000000000039c80 226 FUNC GLOBAL DEFAULT 11 g_app_launch_context_get_startup_notify_id + 2479: 0000000000060c90 114 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_site_local + 2480: 000000000004db10 246 FUNC GLOBAL DEFAULT 11 g_file_create_finish + 2481: 0000000000044a40 112 FUNC GLOBAL DEFAULT 11 g_drive_get_name + 2482: 00000000000d8690 89 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_flags + 2483: 00000000000dd0e0 457 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_for_bus_sync + 2484: 00000000000879d0 207 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_socket_finish + 2485: 000000000005b340 117 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_matches_only + 2486: 0000000000077d70 34 FUNC GLOBAL DEFAULT 11 g_resource_unref + 2487: 000000000003fbd0 249 FUNC GLOBAL DEFAULT 11 g_converter_input_stream_get_type + 2488: 00000000000d7660 86 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_client_address + 2489: 000000000010f9d0 305 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_range_check + 2490: 000000000005ccf0 330 FUNC GLOBAL DEFAULT 11 g_filename_completer_get_completions + 2491: 0000000000096d70 294 FUNC GLOBAL DEFAULT 11 g_tls_interaction_ask_password + 2492: 00000000000f6b50 429 FUNC GLOBAL DEFAULT 11 g_unix_connection_send_credentials + 2493: 0000000000065cf0 337 FUNC GLOBAL DEFAULT 11 g_io_extension_point_implement + 2494: 0000000000073910 147 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_get_type + 2495: 00000000000cf2a0 89 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_flags + 2496: 000000000009b810 277 FUNC GLOBAL DEFAULT 11 g_volume_mount_finish + 2497: 00000000000985c0 162 FUNC GLOBAL DEFAULT 11 g_dtls_connection_set_interaction + 2498: 000000000005dce0 249 FUNC GLOBAL DEFAULT 11 g_file_io_stream_get_type + 2499: 0000000000082e00 589 FUNC GLOBAL DEFAULT 11 g_socket_address_new_from_native + 2500: 0000000000081510 108 FUNC GLOBAL DEFAULT 11 g_socket_speaks_ipv4 + 2501: 0000000000067c10 83 FUNC GLOBAL DEFAULT 11 g_io_stream_splice_finish + 2502: 00000000000650d0 34 FUNC GLOBAL DEFAULT 11 g_io_module_scope_free + 2503: 0000000000072570 327 FUNC GLOBAL DEFAULT 11 g_output_stream_flush_async + 2504: 000000000008c170 71 FUNC GLOBAL DEFAULT 11 g_srv_target_new + 2505: 00000000000b1750 123 FUNC GLOBAL DEFAULT 11 g_dbus_is_interface_name + 2506: 00000000000c6c80 216 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_header_fields + 2507: 000000000008b780 484 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_utf8 + 2508: 00000000000ab120 237 FUNC GLOBAL DEFAULT 11 g_property_action_new + 2509: 00000000000bf3a0 235 FUNC GLOBAL DEFAULT 11 g_bus_get + 2510: 00000000000adac0 166 FUNC GLOBAL DEFAULT 11 g_menu_item_set_detailed_action + 2511: 000000000009e570 98 FUNC GLOBAL DEFAULT 11 g_resource_error_get_type + 2512: 00000000000628b0 148 FUNC GLOBAL DEFAULT 11 g_initable_newv + 2513: 00000000000c8e40 385 FUNC GLOBAL DEFAULT 11 g_dbus_message_to_gerror + 2514: 00000000000c2e60 339 FUNC GLOBAL DEFAULT 11 g_dbus_connection_add_filter + 2515: 0000000000067990 221 FUNC GLOBAL DEFAULT 11 g_io_stream_close + 2516: 000000000005f510 883 FUNC GLOBAL DEFAULT 11 g_icon_new_for_string + 2517: 00000000000d4e70 419 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_cache_build + 2518: 00000000000ca730 136 FUNC GLOBAL DEFAULT 11 g_bus_own_name_with_closures + 2519: 0000000000060a90 114 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_global + 2520: 00000000000f9d60 105 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_type + 2521: 0000000000038d70 120 FUNC GLOBAL DEFAULT 11 g_app_info_get_commandline + 2522: 000000000005d720 251 FUNC GLOBAL DEFAULT 11 g_file_output_stream_query_info + 2523: 000000000009dd20 98 FUNC GLOBAL DEFAULT 11 g_file_measure_flags_get_type + 2524: 00000000000c29c0 124 FUNC GLOBAL DEFAULT 11 g_dbus_connection_set_exit_on_close + 2525: 000000000008dbc0 85 FUNC GLOBAL DEFAULT 11 g_task_get_check_cancellable + 2526: 00000000000cf3e0 90 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_object_path + 2527: 00000000000599a0 137 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_int32 + 2528: 000000000006b4a0 152 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_type + 2529: 000000000003d5b0 86 FUNC GLOBAL DEFAULT 11 g_bytes_icon_get_bytes + 2530: 00000000000fa440 121 FUNC GLOBAL DEFAULT 11 g_unix_mount_at + 2531: 00000000000832c0 125 FUNC GLOBAL DEFAULT 11 g_socket_address_enumerator_next_async + 2532: 0000000000039a70 25 FUNC GLOBAL DEFAULT 11 g_app_launch_context_new + 2533: 00000000000a4a80 9 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_cwd + 2534: 0000000000051c90 285 FUNC GLOBAL DEFAULT 11 g_file_eject_mountable_finish + 2535: 00000000000a34c0 964 FUNC GLOBAL DEFAULT 11 g_application_run + 2536: 000000000005f0c0 112 FUNC GLOBAL DEFAULT 11 g_icon_hash + 2537: 0000000000084810 8 FUNC GLOBAL DEFAULT 11 g_socket_client_get_tls_validation_flags + 2538: 0000000000098ac0 130 FUNC GLOBAL DEFAULT 11 g_dtls_connection_handshake + 2539: 0000000000058770 218 FUNC GLOBAL DEFAULT 11 g_file_info_has_namespace + 2540: 0000000000087aa0 5 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept_async + 2541: 0000000000096bb0 447 FUNC GLOBAL DEFAULT 11 g_tls_interaction_invoke_ask_password + 2542: 00000000000f6650 159 FUNC GLOBAL DEFAULT 11 g_unix_connection_get_type + 2543: 0000000000076e30 234 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_address + 2544: 00000000000fd6c0 301 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_get_type + 2545: 000000000005d910 148 FUNC GLOBAL DEFAULT 11 g_file_output_stream_get_etag + 2546: 00000000000a0640 156 FUNC GLOBAL DEFAULT 11 g_list_store_remove_all + 2547: 00000000000fa9b0 5 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_new + 2548: 000000000008b600 382 FUNC GLOBAL DEFAULT 11 g_subprocess_communicate_utf8_finish + 2549: 000000000003b960 108 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_new + 2550: 00000000000685e0 271 FUNC GLOBAL DEFAULT 11 g_mount_remount + 2551: 0000000000086180 208 FUNC GLOBAL DEFAULT 11 g_socket_connection_factory_register_type + 2552: 00000000000ac6c0 9 FUNC GLOBAL DEFAULT 11 g_menu_attribute_iter_next + 2553: 00000000000f6270 228 FUNC GLOBAL DEFAULT 11 g_content_types_get_registered + 2554: 00000000000c2400 242 FUNC GLOBAL DEFAULT 11 g_dbus_connection_new + 2555: 00000000000a3a80 82 FUNC GLOBAL DEFAULT 11 g_application_quit + 2556: 000000000009d930 98 FUNC GLOBAL DEFAULT 11 g_converter_flags_get_type + 2557: 00000000000fba40 9 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_get_path_len + 2558: 0000000000093110 163 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_get_use_ssl3 + 2559: 000000000006f160 243 FUNC GLOBAL DEFAULT 11 g_network_service_get_type + 2560: 0000000000112da0 227 FUNC GLOBAL DEFAULT 11 g_settings_get_user_value + 2561: 0000000000059750 153 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_byte_string + 2562: 0000000000044c20 112 FUNC GLOBAL DEFAULT 11 g_drive_get_volumes + 2563: 000000000004b830 181 FUNC GLOBAL DEFAULT 11 g_file_get_child_for_display_name + 2564: 0000000000112430 152 FUNC GLOBAL DEFAULT 11 g_settings_get_type + 2565: 000000000006bd50 136 FUNC GLOBAL DEFAULT 11 g_native_volume_monitor_get_type + 2566: 00000000000be9b0 164 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flush + 2567: 00000000000ad2b0 187 FUNC GLOBAL DEFAULT 11 g_menu_remove_all + 2568: 000000000009e650 98 FUNC GLOBAL DEFAULT 11 g_resource_lookup_flags_get_type + 2569: 000000000008a510 143 FUNC GLOBAL DEFAULT 11 g_subprocess_newv + 2570: 0000000000091ee0 127 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_file_database_type + 2571: 000000000009aa10 327 FUNC GLOBAL DEFAULT 11 g_vfs_get_supported_uri_schemes + 2572: 000000000009f6f0 98 FUNC GLOBAL DEFAULT 11 g_socket_client_event_get_type + 2573: 000000000004d6e0 246 FUNC GLOBAL DEFAULT 11 g_file_read_finish + 2574: 00000000000fe1d0 301 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_get_type + 2575: 00000000000c2c40 98 FUNC GLOBAL DEFAULT 11 g_dbus_connection_get_unique_name + 2576: 0000000000113e90 212 FUNC GLOBAL DEFAULT 11 g_settings_delay + 2577: 0000000000059820 137 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_boolean + 2578: 000000000005c400 251 FUNC GLOBAL DEFAULT 11 g_file_monitor_emit_event + 2579: 000000000003fd60 9 FUNC GLOBAL DEFAULT 11 g_converter_input_stream_get_converter + 2580: 000000000009c360 106 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_connected_drives + 2581: 000000000008fd20 30 FUNC GLOBAL DEFAULT 11 g_threaded_socket_service_new + 2582: 0000000000065080 65 FUNC GLOBAL DEFAULT 11 g_io_module_scope_new + 2583: 0000000000044930 271 FUNC GLOBAL DEFAULT 11 g_drive_start + 2584: 00000000000dadd0 30 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_objects + 2585: 000000000007ad40 127 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new_from_error + 2586: 000000000008e860 215 FUNC GLOBAL DEFAULT 11 g_task_report_new_error + 2587: 0000000000088e10 68 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_stdin_file_path + 2588: 00000000000732a0 88 FUNC GLOBAL DEFAULT 11 g_permission_get_allowed + 2589: 00000000000f4480 115 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_boolean + 2590: 000000000006b820 90 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_domain + 2591: 0000000000071db0 395 FUNC GLOBAL DEFAULT 11 g_output_stream_vprintf + 2592: 00000000000a6540 139 FUNC GLOBAL DEFAULT 11 g_action_group_get_type + 2593: 00000000000b0a50 211 FUNC GLOBAL DEFAULT 11 g_notification_add_button_with_target + 2594: 0000000000052010 176 FUNC GLOBAL DEFAULT 11 g_file_monitor_file + 2595: 00000000000976d0 152 FUNC GLOBAL DEFAULT 11 g_tls_password_get_type + 2596: 0000000000038d00 112 FUNC GLOBAL DEFAULT 11 g_app_info_get_executable + 2597: 0000000000065400 7 FUNC GLOBAL DEFAULT 11 g_io_modules_load_all_in_directory + 2598: 000000000003a4e0 184 FUNC GLOBAL DEFAULT 11 g_async_initable_new_async + 2599: 00000000000d71d0 224 FUNC GLOBAL DEFAULT 11 g_dbus_server_get_type + 2600: 00000000000853b0 83 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_finish + 2601: 00000000000f5e60 7 FUNC GLOBAL DEFAULT 11 g_content_type_get_icon + 2602: 0000000000060740 88 FUNC GLOBAL DEFAULT 11 g_inet_address_get_family + 2603: 00000000000772d0 197 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_records + 2604: 000000000007d850 89 FUNC GLOBAL DEFAULT 11 g_socket_get_listen_backlog + 2605: 0000000000038b20 112 FUNC GLOBAL DEFAULT 11 g_app_info_get_id + 2606: 0000000000114dd0 25 FUNC GLOBAL DEFAULT 11 g_settings_unbind + 2607: 00000000000a2560 89 FUNC GLOBAL DEFAULT 11 g_application_get_inactivity_timeout + 2608: 00000000000fe3d0 151 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_set_close_fd + 2609: 00000000000d96d0 243 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_get_type + 2610: 000000000005ed90 86 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_get_base_stream + 2611: 000000000008cd80 243 FUNC GLOBAL DEFAULT 11 g_simple_proxy_resolver_get_type + 2612: 000000000003dc30 181 FUNC GLOBAL DEFAULT 11 g_cancellable_release_fd + 2613: 00000000000f5e80 102 FUNC GLOBAL DEFAULT 11 g_content_type_can_be_executable + 2614: 0000000000098c00 130 FUNC GLOBAL DEFAULT 11 g_dtls_connection_handshake_finish + 2615: 00000000000852a0 82 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_service + 2616: 000000000006b5c0 129 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_username + 2617: 00000000000ac750 152 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_type + 2618: 00000000000bf590 91 FUNC GLOBAL DEFAULT 11 g_dbus_connection_is_closed + 2619: 000000000005c3e0 18 FUNC GLOBAL DEFAULT 11 g_file_monitor_set_rate_limit + 2620: 000000000007be60 136 FUNC GLOBAL DEFAULT 11 g_simple_permission_get_type + 2621: 000000000010d010 152 FUNC GLOBAL DEFAULT 11 g_settings_backend_get_type + 2622: 000000000009ad10 57 FUNC GLOBAL DEFAULT 11 g_vfs_get_default + 2623: 0000000000060600 192 FUNC GLOBAL DEFAULT 11 g_inet_address_to_string + 2624: 0000000000078f90 15 FUNC GLOBAL DEFAULT 11 g_static_resource_get_resource + 2625: 000000000004b1a0 112 FUNC GLOBAL DEFAULT 11 g_file_is_native + 2626: 00000000000d9fe0 285 FUNC GLOBAL DEFAULT 11 g_dbus_object_skeleton_remove_interface_by_name + 2627: 00000000000fd850 99 FUNC GLOBAL DEFAULT 11 g_unix_input_stream_new + 2628: 000000000003f0f0 104 FUNC GLOBAL DEFAULT 11 g_converter_reset + 2629: 00000000000ac930 251 FUNC GLOBAL DEFAULT 11 g_menu_link_iter_get_next + 2630: 00000000000a2ad0 122 FUNC GLOBAL DEFAULT 11 g_application_hold + 2631: 000000000003d8a0 25 FUNC GLOBAL DEFAULT 11 g_cancellable_new + 2632: 000000000010c8f0 25 FUNC GLOBAL DEFAULT 11 g_null_settings_backend_new + 2633: 000000000006f2c0 89 FUNC GLOBAL DEFAULT 11 g_network_service_get_service + 2634: 000000000005a510 134 FUNC GLOBAL DEFAULT 11 g_file_info_get_sort_order + 2635: 000000000008da40 86 FUNC GLOBAL DEFAULT 11 g_task_get_task_data + 2636: 00000000000c69d0 85 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_serial + 2637: 0000000000069690 125 FUNC GLOBAL DEFAULT 11 g_mount_is_shadowed + 2638: 00000000000cfad0 5 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_call_with_unix_fd_list_finish + 2639: 000000000004c0e0 364 FUNC GLOBAL DEFAULT 11 g_file_peek_path + 2640: 000000000007ab50 86 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_op_res_gssize + 2641: 000000000008e1b0 260 FUNC GLOBAL DEFAULT 11 g_task_set_return_on_cancel + 2642: 000000000009f220 98 FUNC GLOBAL DEFAULT 11 g_tls_certificate_flags_get_type + 2643: 00000000000538e0 387 FUNC GLOBAL DEFAULT 11 g_file_load_bytes_async + 2644: 000000000007a280 139 FUNC GLOBAL DEFAULT 11 g_seekable_get_type + 2645: 0000000000052370 251 FUNC GLOBAL DEFAULT 11 g_file_new_build_filename + 2646: 000000000008ab20 255 FUNC GLOBAL DEFAULT 11 g_subprocess_wait + 2647: 00000000000dee00 276 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_server_set_connection + 2648: 0000000000094000 155 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_require_close_notify + 2649: 0000000000042600 158 FUNC GLOBAL DEFAULT 11 g_data_input_stream_get_type + 2650: 0000000000059bb0 203 FUNC GLOBAL DEFAULT 11 g_file_info_get_deletion_date + 2651: 00000000000d4c30 181 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_lookup_method + 2652: 000000000007bef0 52 FUNC GLOBAL DEFAULT 11 g_simple_permission_new + 2653: 000000000005fd70 232 FUNC GLOBAL DEFAULT 11 g_icon_serialize + 2654: 00000000000995e0 115 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_set_validation_flags + 2655: 0000000000068bc0 112 FUNC GLOBAL DEFAULT 11 g_mount_can_unmount + 2656: 00000000000807d0 140 FUNC GLOBAL DEFAULT 11 g_socket_receive_messages + 2657: 0000000000073ba0 382 FUNC GLOBAL DEFAULT 11 g_pollable_output_stream_write_nonblocking + 2658: 0000000000087bf0 155 FUNC GLOBAL DEFAULT 11 g_socket_listener_close + 2659: 00000000000585d0 97 FUNC GLOBAL DEFAULT 11 g_file_info_unset_attribute_mask + 2660: 00000000000c7f70 94 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_error_name + 2661: 00000000000c6d60 86 FUNC GLOBAL DEFAULT 11 g_dbus_message_get_body + 2662: 00000000000d6220 137 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_take_error + 2663: 00000000000a7e00 105 FUNC GLOBAL DEFAULT 11 g_simple_action_group_insert + 2664: 00000000001145d0 98 FUNC GLOBAL DEFAULT 11 g_settings_range_check + 2665: 00000000000983a0 177 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_database + 2666: 000000000009dee0 98 FUNC GLOBAL DEFAULT 11 g_drive_start_stop_type_get_type + 2667: 000000000008ebe0 91 FUNC GLOBAL DEFAULT 11 g_task_is_valid + 2668: 00000000000842b0 152 FUNC GLOBAL DEFAULT 11 g_socket_client_get_type + 2669: 00000000000c38b0 835 FUNC GLOBAL DEFAULT 11 g_dbus_connection_register_object + 2670: 000000000010d2b0 137 FUNC GLOBAL DEFAULT 11 g_settings_backend_path_changed + 2671: 000000000004e180 187 FUNC GLOBAL DEFAULT 11 g_file_create_readwrite_async + 2672: 0000000000040a30 9 FUNC GLOBAL DEFAULT 11 g_converter_output_stream_get_converter + 2673: 0000000000091ae0 136 FUNC GLOBAL DEFAULT 11 g_threaded_resolver_get_type + 2674: 000000000004ae90 271 FUNC GLOBAL DEFAULT 11 g_file_start_mountable + 2675: 0000000000040f30 51 FUNC GLOBAL DEFAULT 11 g_credentials_set_native + 2676: 0000000000059680 153 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_string + 2677: 00000000000a4f20 102 FUNC GLOBAL DEFAULT 11 g_application_command_line_create_file_for_arg + 2678: 0000000000063560 207 FUNC GLOBAL DEFAULT 11 g_input_stream_read_all_finish + 2679: 00000000000ba700 61 FUNC GLOBAL DEFAULT 11 g_dbus_error_is_remote_error + 2680: 0000000000087990 52 FUNC GLOBAL DEFAULT 11 g_socket_listener_accept + 2681: 00000000000cf5f0 117 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_interface_info + 2682: 0000000000051400 236 FUNC GLOBAL DEFAULT 11 g_file_set_attributes_async + 2683: 00000000000a1d10 404 FUNC GLOBAL DEFAULT 11 g_application_add_main_option + 2684: 00000000000689e0 144 FUNC GLOBAL DEFAULT 11 g_mount_get_symbolic_icon + 2685: 000000000009ee30 98 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_flags_get_type + 2686: 00000000000389c0 112 FUNC GLOBAL DEFAULT 11 g_app_info_dup + 2687: 0000000000081e80 361 FUNC GLOBAL DEFAULT 11 g_socket_set_ttl + 2688: 0000000000055b40 93 FUNC GLOBAL DEFAULT 11 g_file_enumerator_is_closed + 2689: 00000000000fe360 99 FUNC GLOBAL DEFAULT 11 g_unix_output_stream_new + 2690: 0000000000095fb0 311 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificates_issued_by_finish + 2691: 00000000000956e0 495 FUNC GLOBAL DEFAULT 11 g_tls_database_lookup_certificate_issuer + 2692: 00000000000a4a70 12 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_stdin + 2693: 0000000000080540 442 FUNC GLOBAL DEFAULT 11 g_socket_accept + 2694: 000000000005ad40 232 FUNC GLOBAL DEFAULT 11 g_file_info_set_modification_time + 2695: 000000000004ad80 271 FUNC GLOBAL DEFAULT 11 g_file_mount_enclosing_volume + 2696: 000000000005a5a0 165 FUNC GLOBAL DEFAULT 11 g_file_info_set_file_type + 2697: 0000000000113960 526 FUNC GLOBAL DEFAULT 11 g_settings_get_mapped + 2698: 0000000000112e90 276 FUNC GLOBAL DEFAULT 11 g_settings_get_default_value + 2699: 00000000000d2a80 106 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_unref + 2700: 0000000000094120 147 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_rehandshake_mode + 2701: 000000000009fce0 132 FUNC GLOBAL DEFAULT 11 g_list_model_items_changed + 2702: 000000000007abb0 136 FUNC GLOBAL DEFAULT 11 g_simple_async_result_set_op_res_gboolean + 2703: 000000000005e870 86 FUNC GLOBAL DEFAULT 11 g_filter_input_stream_get_base_stream + 2704: 0000000000085440 29 FUNC GLOBAL DEFAULT 11 g_socket_client_add_application_proxy + 2705: 00000000000f7ca0 188 FUNC GLOBAL DEFAULT 11 g_unix_fd_list_steal_fds + 2706: 0000000000044b20 144 FUNC GLOBAL DEFAULT 11 g_drive_get_symbolic_icon + 2707: 00000000000f4710 524 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_launch_action + 2708: 000000000003bec0 123 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_peek_buffer + 2709: 0000000000092f50 115 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_set_validation_flags + 2710: 000000000009eb90 98 FUNC GLOBAL DEFAULT 11 g_dbus_connection_flags_get_type + 2711: 0000000000088d50 40 FUNC GLOBAL DEFAULT 11 g_subprocess_launcher_set_cwd + 2712: 000000000009e810 98 FUNC GLOBAL DEFAULT 11 g_socket_protocol_get_type + 2713: 00000000000a23a0 141 FUNC GLOBAL DEFAULT 11 g_application_set_flags + 2714: 000000000005af00 165 FUNC GLOBAL DEFAULT 11 g_file_info_set_sort_order + 2715: 000000000009e420 98 FUNC GLOBAL DEFAULT 11 g_emblem_origin_get_type + 2716: 00000000000adb70 70 FUNC GLOBAL DEFAULT 11 g_menu_item_new + 2717: 0000000000043160 196 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_line_async + 2718: 000000000008bec0 158 FUNC GLOBAL DEFAULT 11 g_socket_service_get_type + 2719: 000000000005bd80 251 FUNC GLOBAL DEFAULT 11 g_file_input_stream_query_info + 2720: 00000000000d5020 184 FUNC GLOBAL DEFAULT 11 g_dbus_interface_info_cache_release + 2721: 00000000000dad20 139 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_type + 2722: 00000000000d7780 85 FUNC GLOBAL DEFAULT 11 g_dbus_server_is_active + 2723: 00000000000ca5d0 340 FUNC GLOBAL DEFAULT 11 g_bus_own_name + 2724: 00000000000c7cd0 363 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_method_call + 2725: 000000000006b790 135 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_anonymous + 2726: 000000000004c770 246 FUNC GLOBAL DEFAULT 11 g_file_query_filesystem_info_finish + 2727: 00000000000fa8f0 128 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_get_type + 2728: 00000000000f2a30 81 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_new_from_keyfile + 2729: 000000000009e340 98 FUNC GLOBAL DEFAULT 11 g_output_stream_splice_flags_get_type + 2730: 00000000000d4230 105 FUNC GLOBAL DEFAULT 11 g_dbus_arg_info_get_type + 2731: 000000000009db60 98 FUNC GLOBAL DEFAULT 11 g_file_attribute_info_flags_get_type + 2732: 0000000000085360 77 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_service_async + 2733: 000000000008fc80 158 FUNC GLOBAL DEFAULT 11 g_threaded_socket_service_get_type + 2734: 0000000000098510 161 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_certificate + 2735: 0000000000055800 297 FUNC GLOBAL DEFAULT 11 g_file_enumerator_close + 2736: 0000000000065c30 62 FUNC GLOBAL DEFAULT 11 g_io_extension_point_get_extensions + 2737: 0000000000059b20 137 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_int64 + 2738: 0000000000081c80 222 FUNC GLOBAL DEFAULT 11 g_socket_set_option + 2739: 0000000000067ef0 174 FUNC GLOBAL DEFAULT 11 g_loadable_icon_load + 2740: 000000000004b500 112 FUNC GLOBAL DEFAULT 11 g_file_dup + 2741: 0000000000113590 454 FUNC GLOBAL DEFAULT 11 g_settings_set_value + 2742: 00000000000a7430 617 FUNC GLOBAL DEFAULT 11 g_action_map_add_action_entries + 2743: 00000000000f2c60 11 FUNC GLOBAL DEFAULT 11 g_desktop_app_info_get_nodisplay + 2744: 0000000000075000 9 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_username + 2745: 000000000005abc0 196 FUNC GLOBAL DEFAULT 11 g_file_info_set_content_type + 2746: 0000000000113fb0 116 FUNC GLOBAL DEFAULT 11 g_settings_get_has_unapplied + 2747: 00000000000adf50 219 FUNC GLOBAL DEFAULT 11 g_menu_item_set_icon + 2748: 00000000000608d0 133 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_link_local + 2749: 00000000000c1550 304 FUNC GLOBAL DEFAULT 11 g_dbus_connection_send_message_with_reply + 2750: 00000000000ce750 317 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_cached_property_names + 2751: 00000000000aa100 112 FUNC GLOBAL DEFAULT 11 g_action_get_state_hint + 2752: 000000000003dec0 118 FUNC GLOBAL DEFAULT 11 g_cancellable_disconnect + 2753: 0000000000092530 345 FUNC GLOBAL DEFAULT 11 g_tls_certificate_list_new_from_file + 2754: 000000000010fe00 70 FUNC GLOBAL DEFAULT 11 g_settings_schema_key_get_default_value + 2755: 00000000000c8fd0 1602 FUNC GLOBAL DEFAULT 11 g_dbus_message_print + 2756: 000000000006f260 81 FUNC GLOBAL DEFAULT 11 g_network_service_new + 2757: 00000000000a9a20 136 FUNC GLOBAL DEFAULT 11 g_dbus_action_group_get + 2758: 00000000000c74e0 1105 FUNC GLOBAL DEFAULT 11 g_dbus_message_new_from_blob + 2759: 00000000000ab440 224 FUNC GLOBAL DEFAULT 11 g_simple_action_get_type + 2760: 0000000000068ae0 112 FUNC GLOBAL DEFAULT 11 g_mount_get_volume + 2761: 0000000000055670 389 FUNC GLOBAL DEFAULT 11 g_file_enumerator_next_file + 2762: 00000000000a38a0 8 FUNC GLOBAL DEFAULT 11 g_application_set_default + 2763: 00000000000cef60 347 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_for_bus + 2764: 0000000000055c80 89 FUNC GLOBAL DEFAULT 11 g_file_enumerator_get_container + 2765: 000000000004ea00 698 FUNC GLOBAL DEFAULT 11 g_file_make_directory_with_parents + 2766: 00000000000a6b30 137 FUNC GLOBAL DEFAULT 11 g_action_group_get_action_state_hint + 2767: 000000000006aca0 142 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_steal_data + 2768: 00000000000f5ef0 94 FUNC GLOBAL DEFAULT 11 g_content_type_from_mime_type + 2769: 000000000005a700 165 FUNC GLOBAL DEFAULT 11 g_file_info_set_is_symlink + 2770: 00000000000a9900 276 FUNC GLOBAL DEFAULT 11 g_dbus_action_group_get_type + 2771: 00000000000994d0 84 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_new + 2772: 000000000004f100 208 FUNC GLOBAL DEFAULT 11 g_file_trash + 2773: 0000000000042b20 182 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_uint16 + 2774: 0000000000059100 171 FUNC GLOBAL DEFAULT 11 g_file_info_get_attribute_uint32 + 2775: 00000000000629f0 182 FUNC GLOBAL DEFAULT 11 g_initable_new + 2776: 0000000000091b80 139 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_type + 2777: 00000000000fba20 10 FUNC GLOBAL DEFAULT 11 g_unix_socket_address_new_abstract + 2778: 0000000000099150 214 FUNC GLOBAL DEFAULT 11 g_dtls_connection_close_async + 2779: 0000000000084610 25 FUNC GLOBAL DEFAULT 11 g_socket_client_new + 2780: 000000000007af90 374 FUNC GLOBAL DEFAULT 11 g_simple_async_result_new_error + 2781: 000000000009e500 98 FUNC GLOBAL DEFAULT 11 g_resolver_record_type_get_type + 2782: 000000000006cae0 243 FUNC GLOBAL DEFAULT 11 g_network_address_get_type + 2783: 0000000000093950 155 FUNC GLOBAL DEFAULT 11 g_tls_connection_get_use_system_certdb + 2784: 0000000000066e50 92 FUNC GLOBAL DEFAULT 11 g_io_stream_is_closed + 2785: 00000000000f9dd0 183 FUNC GLOBAL DEFAULT 11 g_unix_is_mount_path_system_internal + 2786: 0000000000084790 8 FUNC GLOBAL DEFAULT 11 g_socket_client_get_enable_proxy + 2787: 00000000000d52f0 86 FUNC GLOBAL DEFAULT 11 g_dbus_method_invocation_get_object_path + 2788: 00000000000695c0 203 FUNC GLOBAL DEFAULT 11 g_mount_guess_content_type_sync + 2789: 000000000009eab0 98 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_flags_get_type + 2790: 00000000000c4a40 350 FUNC GLOBAL DEFAULT 11 g_dbus_connection_unregister_subtree + 2791: 00000000000f3030 291 FUNC GLOBAL DEFAULT 11 g_app_info_get_fallback_for_type + 2792: 0000000000097770 54 FUNC GLOBAL DEFAULT 11 g_tls_password_new + 2793: 0000000000081a70 522 FUNC GLOBAL DEFAULT 11 g_socket_connect + 2794: 00000000000dae60 175 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_get_interface + 2795: 0000000000085500 112 FUNC GLOBAL DEFAULT 11 g_socket_connectable_enumerate + 2796: 0000000000063e00 128 FUNC GLOBAL DEFAULT 11 g_input_stream_read_bytes_async + 2797: 000000000008d9e0 86 FUNC GLOBAL DEFAULT 11 g_task_get_source_object + 2798: 000000000005ee50 143 FUNC GLOBAL DEFAULT 11 g_filter_output_stream_set_close_base_stream + 2799: 00000000000d2610 16 FUNC GLOBAL DEFAULT 11 g_dbus_arg_info_ref + 2800: 000000000009d830 30 FUNC GLOBAL DEFAULT 11 g_zlib_decompressor_new + 2801: 000000000003a7b0 142 FUNC GLOBAL DEFAULT 11 g_async_result_is_tagged + 2802: 00000000000a2270 195 FUNC GLOBAL DEFAULT 11 g_application_set_application_id + 2803: 000000000009bb50 325 FUNC GLOBAL DEFAULT 11 g_volume_eject_with_operation_finish + 2804: 000000000007ac40 85 FUNC GLOBAL DEFAULT 11 g_simple_async_result_get_op_res_gboolean + 2805: 00000000001128c0 70 FUNC GLOBAL DEFAULT 11 g_settings_new + 2806: 0000000000074fc0 9 FUNC GLOBAL DEFAULT 11 g_proxy_address_get_protocol + 2807: 000000000009c550 145 FUNC GLOBAL DEFAULT 11 g_volume_monitor_get_mount_for_uuid + 2808: 000000000010d3d0 137 FUNC GLOBAL DEFAULT 11 g_settings_backend_path_writable_changed + 2809: 0000000000098670 177 FUNC GLOBAL DEFAULT 11 g_dtls_connection_get_interaction + 2810: 0000000000070600 152 FUNC GLOBAL DEFAULT 11 g_output_stream_get_type + 2811: 000000000009f450 98 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_flags_get_type + 2812: 00000000000fac20 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_is_system_internal + 2813: 00000000000b0c90 244 FUNC GLOBAL DEFAULT 11 g_notification_set_default_action_and_target_value + 2814: 00000000000cf4a0 115 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_get_default_timeout + 2815: 0000000000092e40 84 FUNC GLOBAL DEFAULT 11 g_tls_client_connection_new + 2816: 00000000000b0570 137 FUNC GLOBAL DEFAULT 11 g_notification_set_body + 2817: 0000000000068ca0 255 FUNC GLOBAL DEFAULT 11 g_mount_unmount + 2818: 00000000000595b0 153 FUNC GLOBAL DEFAULT 11 g_file_info_set_attribute_stringv + 2819: 0000000000064030 335 FUNC GLOBAL DEFAULT 11 g_input_stream_close_async + 2820: 0000000000080860 64 FUNC GLOBAL DEFAULT 11 g_socket_receive_message + 2821: 00000000000744f0 139 FUNC GLOBAL DEFAULT 11 g_proxy_get_type + 2822: 0000000000041040 196 FUNC GLOBAL DEFAULT 11 g_credentials_get_unix_pid + 2823: 0000000000058640 118 FUNC GLOBAL DEFAULT 11 g_file_info_clear_status + 2824: 00000000000bffd0 338 FUNC GLOBAL DEFAULT 11 g_dbus_connection_close_sync + 2825: 00000000000d2a30 67 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_unref + 2826: 0000000000069820 120 FUNC GLOBAL DEFAULT 11 g_mount_get_sort_key + 2827: 000000000010d1f0 177 FUNC GLOBAL DEFAULT 11 g_settings_backend_keys_changed + 2828: 000000000006d750 89 FUNC GLOBAL DEFAULT 11 g_network_address_get_hostname + 2829: 00000000000fad00 53 FUNC GLOBAL DEFAULT 11 g_unix_mount_point_get_mount_path + 2830: 000000000003e990 4 FUNC GLOBAL DEFAULT 11 g_charset_converter_get_num_fallbacks + 2831: 000000000009f990 98 FUNC GLOBAL DEFAULT 11 g_settings_bind_flags_get_type + 2832: 00000000000ad6c0 406 FUNC GLOBAL DEFAULT 11 g_menu_item_get_attribute + 2833: 00000000000a1eb0 137 FUNC GLOBAL DEFAULT 11 g_application_add_option_group + 2834: 00000000000cf0c0 5 FUNC GLOBAL DEFAULT 11 g_dbus_proxy_new_for_bus_finish + 2835: 000000000004a9d0 271 FUNC GLOBAL DEFAULT 11 g_file_mount_mountable + 2836: 00000000000b1680 110 FUNC GLOBAL DEFAULT 11 g_dbus_is_unique_name + 2837: 0000000000073360 89 FUNC GLOBAL DEFAULT 11 g_permission_get_can_release + 2838: 000000000006b650 89 FUNC GLOBAL DEFAULT 11 g_mount_operation_get_password + 2839: 0000000000085410 5 FUNC GLOBAL DEFAULT 11 g_socket_client_connect_to_host_finish + 2840: 00000000000f2e10 392 FUNC GLOBAL DEFAULT 11 g_app_info_create_from_commandline + 2841: 000000000004e920 213 FUNC GLOBAL DEFAULT 11 g_file_make_directory_finish + 2842: 000000000006b970 135 FUNC GLOBAL DEFAULT 11 g_mount_operation_set_password_save + 2843: 00000000000dd2b0 372 FUNC GLOBAL DEFAULT 11 g_dbus_object_manager_client_new_for_bus + 2844: 00000000000d7ab0 112 FUNC GLOBAL DEFAULT 11 g_dbus_interface_get_object + 2845: 000000000003cf80 108 FUNC GLOBAL DEFAULT 11 g_buffered_output_stream_new + 2846: 000000000006ab60 23 FUNC GLOBAL DEFAULT 11 g_memory_output_stream_new_resizable + 2847: 000000000008d5d0 416 FUNC GLOBAL DEFAULT 11 g_task_get_type + 2848: 0000000000060c10 114 FUNC GLOBAL DEFAULT 11 g_inet_address_get_is_mc_org_local + 2849: 00000000000392c0 120 FUNC GLOBAL DEFAULT 11 g_app_info_get_supported_types + 2850: 00000000000a02e0 311 FUNC GLOBAL DEFAULT 11 g_list_store_insert_sorted + 2851: 000000000005f130 112 FUNC GLOBAL DEFAULT 11 g_icon_equal + 2852: 00000000000d8ac0 98 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_flush + 2853: 00000000000455c0 120 FUNC GLOBAL DEFAULT 11 g_drive_can_start + 2854: 00000000000a0590 169 FUNC GLOBAL DEFAULT 11 g_list_store_remove + 2855: 0000000000051a30 325 FUNC GLOBAL DEFAULT 11 g_file_unmount_mountable_with_operation_finish + 2856: 00000000000c4260 13 FUNC GLOBAL DEFAULT 11 g_dbus_connection_call_finish + 2857: 00000000000c6a30 151 FUNC GLOBAL DEFAULT 11 g_dbus_message_set_serial + 2858: 000000000009eb20 98 FUNC GLOBAL DEFAULT 11 g_dbus_error_get_type + 2859: 000000000005a070 182 FUNC GLOBAL DEFAULT 11 g_file_info_get_icon + 2860: 00000000000453f0 199 FUNC GLOBAL DEFAULT 11 g_drive_get_identifier + 2861: 000000000008d770 130 FUNC GLOBAL DEFAULT 11 g_task_new + 2862: 0000000000064180 81 FUNC GLOBAL DEFAULT 11 g_input_stream_clear_pending + 2863: 0000000000042ca0 179 FUNC GLOBAL DEFAULT 11 g_data_input_stream_read_uint32 + 2864: 00000000000ac290 12 FUNC GLOBAL DEFAULT 11 g_menu_model_is_mutable + 2865: 000000000009d850 101 FUNC GLOBAL DEFAULT 11 g_zlib_decompressor_get_file_info + 2866: 000000000003b5a0 430 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_fill_async + 2867: 00000000001147e0 1426 FUNC GLOBAL DEFAULT 11 g_settings_bind_with_mapping + 2868: 000000000005b580 235 FUNC GLOBAL DEFAULT 11 g_file_attribute_matcher_to_string + 2869: 0000000000038830 139 FUNC GLOBAL DEFAULT 11 g_app_info_get_type + 2870: 0000000000091d80 27 FUNC GLOBAL DEFAULT 11 g_tls_backend_get_certificate_type + 2871: 00000000000dfcc0 30 FUNC GLOBAL DEFAULT 11 g_test_dbus_new + 2872: 00000000000fa970 2 FUNC GLOBAL DEFAULT 11 g_unix_mount_monitor_set_rate_limit + 2873: 000000000008e380 137 FUNC GLOBAL DEFAULT 11 g_task_return_pointer + 2874: 0000000000076f20 187 FUNC GLOBAL DEFAULT 11 g_resolver_lookup_by_address_async + 2875: 00000000000d81e0 243 FUNC GLOBAL DEFAULT 11 g_dbus_interface_skeleton_get_type + 2876: 00000000000636e0 255 FUNC GLOBAL DEFAULT 11 g_input_stream_skip_finish + 2877: 00000000000f6de0 1039 FUNC GLOBAL DEFAULT 11 g_unix_connection_receive_credentials + 2878: 000000000003d990 36 FUNC GLOBAL DEFAULT 11 g_cancellable_get_current + 2879: 000000000004bda0 202 FUNC GLOBAL DEFAULT 11 g_file_enumerate_children_async + 2880: 0000000000040bf0 128 FUNC GLOBAL DEFAULT 11 g_credentials_get_type + 2881: 0000000000064720 221 FUNC GLOBAL DEFAULT 11 g_input_stream_close + 2882: 000000000004b210 183 FUNC GLOBAL DEFAULT 11 g_file_has_uri_scheme + 2883: 0000000000085600 143 FUNC GLOBAL DEFAULT 11 g_socket_connectable_to_string + 2884: 000000000003ba60 292 FUNC GLOBAL DEFAULT 11 g_buffered_input_stream_fill + 2885: 0000000000094ff0 311 FUNC GLOBAL DEFAULT 11 g_tls_database_verify_chain_finish + 2886: 00000000000cb630 322 FUNC GLOBAL DEFAULT 11 g_bus_watch_name + 2887: 000000000003a5a0 36 FUNC GLOBAL DEFAULT 11 g_async_initable_new_finish + 2888: 00000000000d2970 102 FUNC GLOBAL DEFAULT 11 g_dbus_method_info_unref + 2889: 00000000000929f0 112 FUNC GLOBAL DEFAULT 11 g_tls_certificate_new_from_file + 2890: 00000000000ba740 323 FUNC GLOBAL DEFAULT 11 g_dbus_error_get_remote_error + 2891: 00000000000a4eb0 98 FUNC GLOBAL DEFAULT 11 g_application_command_line_get_platform_data + 2892: 000000000003e6b0 276 FUNC GLOBAL DEFAULT 11 g_charset_converter_get_type + 2893: 00000000000681d0 139 FUNC GLOBAL DEFAULT 11 g_mount_get_type + 2894: 0000000000060390 99 FUNC GLOBAL DEFAULT 11 g_inet_address_new_from_bytes + 2895: 0000000000098c90 390 FUNC GLOBAL DEFAULT 11 g_dtls_connection_shutdown + 2896: 0000000000099230 186 FUNC GLOBAL DEFAULT 11 g_dtls_connection_close_finish + 2897: 0000000000041580 843 FUNC GLOBAL DEFAULT 11 g_datagram_based_send_messages + 2898: 0000000000114550 13 FUNC GLOBAL DEFAULT 11 g_settings_list_keys + 2899: 0000000000078650 473 FUNC GLOBAL DEFAULT 11 g_resource_lookup_data + 2900: 00000000000566e0 86 FUNC GLOBAL DEFAULT 11 g_file_icon_get_file + 2901: 0000000000113d80 37 FUNC GLOBAL DEFAULT 11 g_settings_set_double + 2902: 00000000000904e0 224 FUNC GLOBAL DEFAULT 11 g_themed_icon_get_type + 2903: 0000000000099720 116 FUNC GLOBAL DEFAULT 11 g_dtls_client_connection_set_server_identity + 2904: 00000000000d2600 16 FUNC GLOBAL DEFAULT 11 g_dbus_property_info_ref + 2905: 0000000000113c60 40 FUNC GLOBAL DEFAULT 11 g_settings_set_int64 + 2906: 00000000000a2490 201 FUNC GLOBAL DEFAULT 11 g_application_set_resource_base_path + 2907: 00000000000b1900 772 FUNC GLOBAL DEFAULT 11 g_dbus_gvariant_to_gvalue diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libglib-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libglib-2.0.so.0.txt new file mode 100644 index 000000000000..95aeb2441ace --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libglib-2.0.so.0.txt @@ -0,0 +1,1885 @@ +Library: /lib64/libglib-2.0.so.0 +Package: glib2-2.56.1-9.el7_9.x86_64 + + +Symbol table '.dynsym' contains 1879 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_dfa_exec + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND utime@GLIBC_2.2.5 (3) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (4) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (3) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.2.5 (5) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_sigmask@GLIBC_2.2.5 (5) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (3) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_detach@GLIBC_2.2.5 (5) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime@GLIBC_2.2.5 (3) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (3) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (5) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (3) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (3) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND remove@GLIBC_2.2.5 (3) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (3) + 19: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.2.5 (3) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.2.5 (3) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (3) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcscoll@GLIBC_2.2.5 (3) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (3) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresgid@GLIBC_2.2.5 (3) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.2.5 (3) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.2.5 (5) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.2.5 (3) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv@GLIBC_2.2.5 (3) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ferror@GLIBC_2.2.5 (3) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND isatty@GLIBC_2.2.5 (3) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.2.5 (5) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (3) + 34: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdin@GLIBC_2.2.5 (3) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.2.5 (3) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.2.5 (3) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (5) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_compile2 + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (6) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setenv@GLIBC_2.2.5 (3) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (5) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (3) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND textdomain@GLIBC_2.2.5 (3) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_init@GLIBC_2.2.5 (5) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.2.5 (3) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod_l@GLIBC_2.3 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (3) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (3) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid@GLIBC_2.2.5 (3) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bindtextdomain@GLIBC_2.2.5 (3) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.2.5 (3) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.2.5 (3) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.2.5 (3) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (3) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.2.5 (3) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid_r@GLIBC_2.2.5 (3) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_tryrdlock@GLIBC_2.2.5 (5) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chdir@GLIBC_2.2.5 (3) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_destroy@GLIBC_2.2.5 (5) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (7) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (3) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcsxfrm@GLIBC_2.2.5 (3) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (3) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.2.5 (3) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (3) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.2.5 (5) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (5) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fdelt_chk@GLIBC_2.15 (8) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND newlocale@GLIBC_2.3 (2) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.2.5 (5) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nanosleep@GLIBC_2.2.5 (5) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (3) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkostemp@GLIBC_2.7 (9) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime_r@GLIBC_2.2.5 (3) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup@GLIBC_2.2.5 (3) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.2.5 (5) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (3) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (3) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_exec + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (3) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND geteuid@GLIBC_2.2.5 (3) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freopen@GLIBC_2.2.5 (3) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fscanf@GLIBC_2.2.5 (3) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getcwd@GLIBC_2.2.5 (3) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_trywrlock@GLIBC_2.2.5 (5) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (5) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rewinddir@GLIBC_2.2.5 (3) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.2.5 (3) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strspn@GLIBC_2.2.5 (3) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (3) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputc@GLIBC_2.2.5 (3) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_yield@GLIBC_2.2.5 (3) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (3) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (5) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (3) + 96: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.2.5 (3) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_init@GLIBC_2.2.5 (5) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (3) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_wrlock@GLIBC_2.2.5 (5) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fallocate@GLIBC_2.10 (10) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_rdlock@GLIBC_2.2.5 (5) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execve@GLIBC_2.2.5 (3) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (3) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (3) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_fullinfo + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.2.5 (3) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_get_stringtable_entries + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dirfd@GLIBC_2.2.5 (3) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (4) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND syscall@GLIBC_2.2.5 (3) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.2.5 (3) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.2.5 (3) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_config + 114: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (3) + 116: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND environ@GLIBC_2.2.5 (3) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigfillset@GLIBC_2.2.5 (3) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (11) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND kill@GLIBC_2.2.5 (3) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setname_np@GLIBC_2.12 (12) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND time@GLIBC_2.2.5 (3) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getresuid@GLIBC_2.2.5 (3) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.2.5 (3) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgid@GLIBC_2.2.5 (3) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.2.5 (3) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (3) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (3) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uselocale@GLIBC_2.3 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror_r@GLIBC_2.2.5 (3) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.2.5 (5) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (5) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.2.5 (5) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_exit@GLIBC_2.2.5 (5) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (3) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.2.5 (3) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (3) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.2.5 (3) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.2.5 (3) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vasprintf_chk@GLIBC_2.8 (13) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.2.5 (3) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (3) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_unlock@GLIBC_2.2.5 (5) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.2.5 (3) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.2.5 (3) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strpbrk@GLIBC_2.2.5 (3) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind_textdomain_codeset@GLIBC_2.2.5 (3) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.3.4 (4) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setstacksize@GLIBC_2.2.5 (5) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strncpy_chk@GLIBC_2.3.4 (4) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setrlimit@GLIBC_2.2.5 (3) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strsignal@GLIBC_2.2.5 (3) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (3) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (4) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopen@GLIBC_2.2.5 (3) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam_r@GLIBC_2.2.5 (3) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (3) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.2.5 (3) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoull_l@GLIBC_2.3.3 (14) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (4) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_close@GLIBC_2.2.5 (3) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_get_stringnumber + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND timegm@GLIBC_2.2.5 (3) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.2.5 (5) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setvbuf@GLIBC_2.2.5 (3) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.2.5 (3) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chmod@GLIBC_2.2.5 (3) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.2.5 (3) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (3) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.2.5 (5) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.2.5 (5) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.2.5 (5) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pcre_study + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (5) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.2.5 (3) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (3) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcngettext@GLIBC_2.2.5 (3) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND perror@GLIBC_2.2.5 (3) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.2.5 (3) + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.2.5 (5) + 180: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.2.5 (3) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unsetenv@GLIBC_2.2.5 (3) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (3) + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fstatfs@GLIBC_2.2.5 (3) + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_destroy@GLIBC_2.2.5 (5) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execvp@GLIBC_2.2.5 (3) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.2.5 (3) + 188: 0000000000000000 0 FUNC GLOBAL DEFAULT UND creat@GLIBC_2.2.5 (3) + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.2.5 (3) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe2@GLIBC_2.9 (15) + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memset_chk@GLIBC_2.3.4 (4) + 192: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.2.5 (3) + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_delete@GLIBC_2.2.5 (5) + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoll_l@GLIBC_2.3.3 (14) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getppid@GLIBC_2.2.5 (3) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (3) + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eventfd@GLIBC_2.7 (9) + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (3) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (4) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getrlimit@GLIBC_2.2.5 (3) + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.2.5 (3) + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND posix_memalign@GLIBC_2.2.5 (3) + 203: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (3) + 205: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND pcre_free + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_rwlock_destroy@GLIBC_2.2.5 (5) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (5) + 208: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (3) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execv@GLIBC_2.2.5 (3) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.2.5 (5) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (3) + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsprintf_chk@GLIBC_2.3.4 (4) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (5) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.2.5 (5) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (2) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (2) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv_open@GLIBC_2.2.5 (3) + 218: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (3) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (4) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (3) + 221: 0000000000074860 65 FUNC GLOBAL DEFAULT 11 g_thread_pool_move_to_front + 222: 0000000000073ac0 58 FUNC GLOBAL DEFAULT 11 g_thread_exit + 223: 000000000001c150 42 FUNC GLOBAL DEFAULT 11 g_mem_chunk_free + 224: 0000000000059480 80 FUNC GLOBAL DEFAULT 11 g_option_context_set_summary + 225: 0000000000074a40 96 FUNC GLOBAL DEFAULT 11 g_timer_continue + 226: 0000000000076bc0 2327 FUNC GLOBAL DEFAULT 11 g_time_zone_adjust_time + 227: 000000000002d0b0 147 FUNC GLOBAL DEFAULT 11 g_compute_checksum_for_bytes + 228: 0000000000033660 105 FUNC GLOBAL DEFAULT 11 g_date_time_ref + 229: 0000000000073a70 79 FUNC GLOBAL DEFAULT 11 g_thread_self + 230: 000000000005ee70 53 FUNC GLOBAL DEFAULT 11 g_match_info_get_regex + 231: 000000000003c800 282 FUNC GLOBAL DEFAULT 11 g_hook_insert_before + 232: 00000000000440c0 179 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_bytes + 233: 0000000000020270 159 FUNC GLOBAL DEFAULT 11 g_async_queue_timed_pop + 234: 0000000000037a40 211 FUNC GLOBAL DEFAULT 11 g_error_copy + 235: 0000000000020760 3 FUNC GLOBAL DEFAULT 11 g_atomic_int_get + 236: 00000000000372a0 380 FUNC GLOBAL DEFAULT 11 g_environ_setenv + 237: 0000000000024900 213 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_visited + 238: 0000000000065d20 233 FUNC GLOBAL DEFAULT 11 g_sequence_foreach_range + 239: 0000000000087560 211 FUNC GLOBAL DEFAULT 11 g_variant_new_from_bytes + 240: 000000000004b450 152 FUNC GLOBAL DEFAULT 11 g_main_context_push_thread_default + 241: 000000000001f000 38 FUNC GLOBAL DEFAULT 11 g_ptr_array_new_with_free_func + 242: 0000000000064850 185 FUNC GLOBAL DEFAULT 11 g_scanner_input_text + 243: 0000000000024de0 309 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_groups + 244: 0000000000315520 8 OBJECT GLOBAL DEFAULT 26 __glib_assert_msg + 245: 0000000000034060 36 FUNC GLOBAL DEFAULT 11 g_date_time_add + 246: 00000000000245c0 213 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_added + 247: 0000000000020310 133 FUNC GLOBAL DEFAULT 11 g_async_queue_timed_pop_unlocked + 248: 000000000002ec60 384 FUNC GLOBAL DEFAULT 11 g_uri_list_extract_uris + 249: 0000000000081240 74 FUNC GLOBAL DEFAULT 11 g_variant_get_int64 + 250: 0000000000074400 131 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_max_threads + 251: 00000000000806a0 35 FUNC GLOBAL DEFAULT 11 g_variant_new_int32 + 252: 00000000000458a0 380 FUNC GLOBAL DEFAULT 11 g_key_file_get_locale_string_list + 253: 00000000000621c0 305 FUNC GLOBAL DEFAULT 11 g_scanner_error + 254: 000000000006b300 131 FUNC GLOBAL DEFAULT 11 g_ascii_strdown + 255: 0000000000062ad0 340 FUNC GLOBAL DEFAULT 11 g_scanner_scope_remove_symbol + 256: 0000000000090470 99 FUNC GLOBAL DEFAULT 11 g_unix_set_fd_nonblocking + 257: 000000000004b870 845 FUNC GLOBAL DEFAULT 11 g_main_context_prepare + 258: 000000000001c180 6 FUNC GLOBAL DEFAULT 11 g_allocator_new + 259: 000000000001f6d0 58 FUNC GLOBAL DEFAULT 11 g_ptr_array_sort + 260: 000000000002d6c0 197 FUNC GLOBAL DEFAULT 11 g_iconv_open + 261: 000000000001e7f0 53 FUNC GLOBAL DEFAULT 11 g_array_get_element_size + 262: 0000000000022eb0 248 FUNC GLOBAL DEFAULT 11 g_bookmark_file_remove_item + 263: 000000000001ef20 58 FUNC GLOBAL DEFAULT 11 g_array_sort_with_data + 264: 000000000007f780 54 FUNC GLOBAL DEFAULT 11 g_get_application_name + 265: 00000000000261e0 115 FUNC GLOBAL DEFAULT 11 g_bytes_new + 266: 00000000000739c0 24 FUNC GLOBAL DEFAULT 11 g_thread_try_new + 267: 0000000000045440 217 FUNC GLOBAL DEFAULT 11 g_key_file_set_locale_string + 268: 0000000000053e40 1109 FUNC GLOBAL DEFAULT 11 g_log_writer_journald + 269: 00000000000594d0 53 FUNC GLOBAL DEFAULT 11 g_option_context_get_summary + 270: 0000000000091b80 4 FUNC GLOBAL DEFAULT 11 g_io_channel_unix_get_fd + 271: 0000000000073400 321 FUNC GLOBAL DEFAULT 11 g_test_get_filename + 272: 000000000001e610 239 FUNC GLOBAL DEFAULT 11 g_array_sized_new + 273: 000000000008e4e0 1064 FUNC GLOBAL DEFAULT 11 g_variant_type_info_get + 274: 000000000004ca10 122 FUNC GLOBAL DEFAULT 11 g_main_context_remove_poll + 275: 000000000003b9d0 240 FUNC GLOBAL DEFAULT 11 g_hash_table_get_keys_as_array + 276: 000000000002fd60 42 FUNC GLOBAL DEFAULT 11 g_datalist_init + 277: 000000000004da90 10 FUNC GLOBAL DEFAULT 11 g_mapped_file_new_from_fd + 278: 000000000001d230 227 FUNC GLOBAL DEFAULT 11 g_relation_delete + 279: 000000000006e7f0 203 FUNC GLOBAL DEFAULT 11 g_string_printf + 280: 0000000000092f00 1595 FUNC GLOBAL DEFAULT 11 g_spawn_sync + 281: 000000000005e9f0 81 FUNC GLOBAL DEFAULT 11 g_random_double + 282: 00000000000249e0 189 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_visited + 283: 000000000004b1f0 113 FUNC GLOBAL DEFAULT 11 g_get_current_time + 284: 000000000006db90 13 FUNC GLOBAL DEFAULT 11 g_string_prepend_len + 285: 0000000000035200 1717 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_iso8601 + 286: 00000000000668a0 201 FUNC GLOBAL DEFAULT 11 g_sequence_sort_changed + 287: 000000000005d950 294 FUNC GLOBAL DEFAULT 11 g_queue_push_nth_link + 288: 000000000001e740 42 FUNC GLOBAL DEFAULT 11 g_array_set_clear_func + 289: 00000000000205c0 139 FUNC GLOBAL DEFAULT 11 g_async_queue_remove + 290: 000000000003cbf0 228 FUNC GLOBAL DEFAULT 11 g_hook_list_marshal_check + 291: 0000000000041e00 182 FUNC GLOBAL DEFAULT 11 g_io_channel_write + 292: 0000000000022650 1846 FUNC GLOBAL DEFAULT 11 g_bookmark_file_to_data + 293: 000000000004c990 122 FUNC GLOBAL DEFAULT 11 g_main_context_add_poll + 294: 00000000000856c0 153 FUNC GLOBAL DEFAULT 11 g_variant_format_string_scan_type + 295: 000000000001ddc0 179 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_reader_lock + 296: 000000000002c7e0 988 FUNC GLOBAL DEFAULT 11 g_checksum_update + 297: 0000000000049bd0 67 FUNC GLOBAL DEFAULT 11 g_source_get_context + 298: 0000000000067780 38 FUNC GLOBAL DEFAULT 11 g_shell_error_quark + 299: 000000000006ad10 39 FUNC GLOBAL DEFAULT 11 g_ascii_strtoull + 300: 000000000007b060 232 FUNC GLOBAL DEFAULT 11 g_unichar_digit_value + 301: 0000000000314a00 48 OBJECT GLOBAL DEFAULT 24 g_timeout_funcs + 302: 00000000000810b0 74 FUNC GLOBAL DEFAULT 11 g_variant_get_byte + 303: 0000000000066ed0 142 FUNC GLOBAL DEFAULT 11 g_sequence_get + 304: 000000000004c660 115 FUNC GLOBAL DEFAULT 11 g_main_loop_unref + 305: 0000000000024760 213 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_modified + 306: 000000000001c210 2 FUNC GLOBAL DEFAULT 11 g_slist_push_allocator + 307: 0000000000036010 54 FUNC GLOBAL DEFAULT 11 g_date_time_to_unix + 308: 000000000003cfc0 98 FUNC GLOBAL DEFAULT 11 g_hook_find_data + 309: 000000000005e380 273 FUNC GLOBAL DEFAULT 11 g_rand_set_seed_array + 310: 000000000006da10 156 FUNC GLOBAL DEFAULT 11 g_string_assign + 311: 0000000000080d50 70 FUNC GLOBAL DEFAULT 11 g_variant_new_bytestring + 312: 000000000004d610 18 FUNC GLOBAL DEFAULT 11 g_child_watch_add + 313: 000000000007c350 325 FUNC GLOBAL DEFAULT 11 g_ucs4_to_utf8 + 314: 0000000000314740 168 OBJECT GLOBAL DEFAULT 24 g_thread_functions_for_glib_use + 315: 000000000001fca0 76 FUNC GLOBAL DEFAULT 11 g_async_queue_new_full + 316: 000000000003dd90 38 FUNC GLOBAL DEFAULT 11 g_hostname_is_non_ascii + 317: 0000000000057700 301 FUNC GLOBAL DEFAULT 11 g_option_context_add_group + 318: 0000000000079b40 120 FUNC GLOBAL DEFAULT 11 g_unichar_isalpha + 319: 000000000003e280 494 FUNC GLOBAL DEFAULT 11 g_hostname_is_ip_address + 320: 000000000005dac0 114 FUNC GLOBAL DEFAULT 11 g_queue_unlink + 321: 00000000000660f0 145 FUNC GLOBAL DEFAULT 11 g_sequence_append + 322: 000000000007e8f0 251 FUNC GLOBAL DEFAULT 11 g_uri_unescape_segment + 323: 000000000003ada0 238 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_next + 324: 000000000001e770 53 FUNC GLOBAL DEFAULT 11 g_array_ref + 325: 000000000005d8c0 131 FUNC GLOBAL DEFAULT 11 g_queue_peek_nth_link + 326: 000000000003ce30 116 FUNC GLOBAL DEFAULT 11 g_hook_destroy + 327: 000000000001c640 82 FUNC GLOBAL DEFAULT 11 g_cache_key_foreach + 328: 0000000000315020 4 OBJECT GLOBAL DEFAULT 26 g_mem_gc_friendly + 329: 0000000000031650 201 FUNC GLOBAL DEFAULT 11 g_date_get_day_of_year + 330: 000000000001e230 7 FUNC GLOBAL DEFAULT 11 g_static_private_init + 331: 0000000000069cd0 134 FUNC GLOBAL DEFAULT 11 g_slist_remove + 332: 000000000002f840 587 FUNC GLOBAL DEFAULT 11 g_datalist_id_replace_data + 333: 0000000000051a70 41 FUNC GLOBAL DEFAULT 11 g_try_malloc0_n + 334: 0000000000037640 97 FUNC GLOBAL DEFAULT 11 g_unsetenv + 335: 000000000008b9d0 858 FUNC GLOBAL DEFAULT 11 g_variant_parse_error_print_context + 336: 0000000000314ba0 48 OBJECT GLOBAL DEFAULT 24 g_unix_fd_source_funcs + 337: 0000000000026260 9 FUNC GLOBAL DEFAULT 11 g_bytes_new_static + 338: 000000000008fac0 54 FUNC GLOBAL DEFAULT 11 g_variant_type_checked_ + 339: 0000000000080730 36 FUNC GLOBAL DEFAULT 11 g_variant_new_uint64 + 340: 000000000001d020 106 FUNC GLOBAL DEFAULT 11 g_relation_index + 341: 000000000006c950 139 FUNC GLOBAL DEFAULT 11 g_str_has_prefix + 342: 000000000005d4c0 89 FUNC GLOBAL DEFAULT 11 g_queue_push_tail + 343: 000000000003ea60 342 FUNC GLOBAL DEFAULT 11 g_io_channel_flush + 344: 000000000007ee20 60 FUNC GLOBAL DEFAULT 11 g_atexit + 345: 00000000000204e0 105 FUNC GLOBAL DEFAULT 11 g_async_queue_sort + 346: 0000000000066250 193 FUNC GLOBAL DEFAULT 11 g_sequence_insert_before + 347: 000000000006f6b0 12 FUNC GLOBAL DEFAULT 11 g_test_rand_int + 348: 0000000000061ee0 545 FUNC GLOBAL DEFAULT 11 g_regex_escape_string + 349: 000000000005d050 59 FUNC GLOBAL DEFAULT 11 g_queue_free + 350: 000000000004b5c0 159 FUNC GLOBAL DEFAULT 11 g_main_context_pop_thread_default + 351: 0000000000060b70 80 FUNC GLOBAL DEFAULT 11 g_regex_get_has_cr_or_lf + 352: 0000000000080760 35 FUNC GLOBAL DEFAULT 11 g_variant_new_handle + 353: 0000000000076b90 12 FUNC GLOBAL DEFAULT 11 g_time_zone_new_utc + 354: 0000000000086d10 86 FUNC GLOBAL DEFAULT 11 g_variant_dict_unref + 355: 0000000000090590 18 FUNC GLOBAL DEFAULT 11 g_unix_signal_add + 356: 0000000000054810 172 FUNC GLOBAL DEFAULT 11 g_test_assert_expected_messages_internal + 357: 000000000001f190 215 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_index_fast + 358: 000000000007b360 133 FUNC GLOBAL DEFAULT 11 g_utf8_strdown + 359: 000000000004b2c0 145 FUNC GLOBAL DEFAULT 11 g_get_monotonic_time + 360: 0000000000063050 53 FUNC GLOBAL DEFAULT 11 g_scanner_cur_token + 361: 000000000005fe40 53 FUNC GLOBAL DEFAULT 11 g_regex_ref + 362: 0000000000074b50 153 FUNC GLOBAL DEFAULT 11 g_usleep + 363: 000000000004b370 18 FUNC GLOBAL DEFAULT 11 g_main_current_source + 364: 0000000000020b80 593 FUNC GLOBAL DEFAULT 11 g_base64_encode_step + 365: 0000000000073820 45 FUNC GLOBAL DEFAULT 11 g_thread_unref + 366: 000000000003cdb0 126 FUNC GLOBAL DEFAULT 11 g_hook_get + 367: 0000000000083660 63 FUNC GLOBAL DEFAULT 11 g_variant_iter_new + 368: 000000000006a9f0 336 FUNC GLOBAL DEFAULT 11 g_strconcat + 369: 0000000000031eb0 294 FUNC GLOBAL DEFAULT 11 g_date_get_monday_weeks_in_year + 370: 00000000000262b0 53 FUNC GLOBAL DEFAULT 11 g_bytes_get_size + 371: 0000000000087bf0 101 FUNC GLOBAL DEFAULT 11 g_variant_n_children + 372: 000000000005f0b0 198 FUNC GLOBAL DEFAULT 11 g_match_info_fetch + 373: 000000000004ab70 130 FUNC GLOBAL DEFAULT 11 g_main_context_find_source_by_id + 374: 0000000000314ca8 0 NOTYPE GLOBAL DEFAULT 25 _edata + 375: 000000000006c220 158 FUNC GLOBAL DEFAULT 11 g_strdupv + 376: 0000000000033a30 43 FUNC GLOBAL DEFAULT 11 g_date_time_new_now_utc + 377: 000000000006c6c0 214 FUNC GLOBAL DEFAULT 11 g_strrstr + 378: 000000000006dfb0 497 FUNC GLOBAL DEFAULT 11 g_string_insert_unichar + 379: 000000000003b350 7 FUNC GLOBAL DEFAULT 11 g_hash_table_insert + 380: 000000000006e1b0 61 FUNC GLOBAL DEFAULT 11 g_string_append_unichar + 381: 0000000000054ad0 389 FUNC GLOBAL DEFAULT 11 g_printerr + 382: 00000000000807c0 115 FUNC GLOBAL DEFAULT 11 g_variant_new_variant + 383: 000000000007ea00 140 FUNC GLOBAL DEFAULT 11 g_uri_parse_scheme + 384: 0000000000024210 246 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_mime_type + 385: 0000000000054710 80 FUNC GLOBAL DEFAULT 11 g_assert_warning + 386: 000000000004ee80 105 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_ref + 387: 0000000000068d30 1415 FUNC GLOBAL DEFAULT 11 g_slice_alloc + 388: 0000000000051860 17 FUNC GLOBAL DEFAULT 11 g_free + 389: 0000000000030e70 205 FUNC GLOBAL DEFAULT 11 g_date_set_day + 390: 00000000000646f0 158 FUNC GLOBAL DEFAULT 11 g_scanner_get_next_token + 391: 00000000000704b0 115 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_pop + 392: 0000000000035e60 109 FUNC GLOBAL DEFAULT 11 g_date_time_get_minute + 393: 000000000001a3c0 0 FUNC GLOBAL DEFAULT 9 _init + 394: 000000000006a2a0 61 FUNC GLOBAL DEFAULT 11 g_slist_concat + 395: 000000000007e730 66 FUNC GLOBAL DEFAULT 11 g_unichar_compose + 396: 000000000008fb00 65 FUNC GLOBAL DEFAULT 11 g_variant_type_new + 397: 000000000006dd10 667 FUNC GLOBAL DEFAULT 11 g_string_append_uri_escaped + 398: 0000000000080700 36 FUNC GLOBAL DEFAULT 11 g_variant_new_int64 + 399: 000000000005dee0 112 FUNC GLOBAL DEFAULT 11 g_queue_push_nth + 400: 000000000003b4e0 7 FUNC GLOBAL DEFAULT 11 g_hash_table_steal + 401: 000000000003ef40 215 FUNC GLOBAL DEFAULT 11 g_io_channel_unref + 402: 0000000000024000 149 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_title + 403: 0000000000074130 299 FUNC GLOBAL DEFAULT 11 g_thread_pool_push + 404: 000000000005dd90 99 FUNC GLOBAL DEFAULT 11 g_queue_remove + 405: 0000000000083630 46 FUNC GLOBAL DEFAULT 11 g_variant_iter_init + 406: 0000000000037540 53 FUNC GLOBAL DEFAULT 11 g_getenv + 407: 000000000006a440 5 FUNC GLOBAL DEFAULT 11 g_chdir + 408: 0000000000039340 177 FUNC GLOBAL DEFAULT 11 g_file_open_tmp + 409: 000000000006b710 135 FUNC GLOBAL DEFAULT 11 g_strdelimit + 410: 000000000007b8d0 242 FUNC GLOBAL DEFAULT 11 g_utf8_get_char + 411: 0000000000066c90 275 FUNC GLOBAL DEFAULT 11 g_sequence_lookup_iter + 412: 0000000000026540 103 FUNC GLOBAL DEFAULT 11 g_bytes_hash + 413: 0000000000024b80 285 FUNC GLOBAL DEFAULT 11 g_bookmark_file_add_group + 414: 000000000006a420 5 FUNC GLOBAL DEFAULT 11 g_rename + 415: 000000000003e8c0 61 FUNC GLOBAL DEFAULT 11 g_io_channel_get_line_term + 416: 000000000003bc10 502 FUNC GLOBAL DEFAULT 11 g_hmac_new + 417: 0000000000081530 62 FUNC GLOBAL DEFAULT 11 g_variant_get_variant + 418: 000000000005c2e0 137 FUNC GLOBAL DEFAULT 11 g_pattern_spec_equal + 419: 000000000007e620 267 FUNC GLOBAL DEFAULT 11 g_unichar_decompose + 420: 000000000008ed30 99 FUNC GLOBAL DEFAULT 11 g_variant_type_copy + 421: 00000000000539b0 260 FUNC GLOBAL DEFAULT 11 g_log_remove_handler + 422: 000000000004c6e0 313 FUNC GLOBAL DEFAULT 11 g_main_loop_run + 423: 000000000006e6f0 193 FUNC GLOBAL DEFAULT 11 g_string_append_vprintf + 424: 000000000006a370 5 FUNC GLOBAL DEFAULT 11 g_slist_insert_sorted_with_data + 425: 000000000004b390 10 FUNC GLOBAL DEFAULT 11 g_source_is_destroyed + 426: 0000000000069be0 225 FUNC GLOBAL DEFAULT 11 g_slist_insert_before + 427: 0000000000080bd0 182 FUNC GLOBAL DEFAULT 11 g_variant_new_strv + 428: 00000000000f47c8 4 OBJECT GLOBAL DEFAULT 13 glib_binary_age + 429: 000000000005e940 65 FUNC GLOBAL DEFAULT 11 g_random_int + 430: 000000000001db60 42 FUNC GLOBAL DEFAULT 11 g_static_mutex_init + 431: 000000000006b470 48 FUNC GLOBAL DEFAULT 11 g_ascii_xdigit_value + 432: 0000000000040520 450 FUNC GLOBAL DEFAULT 11 g_io_channel_read_line_string + 433: 000000000006a3a0 5 FUNC GLOBAL DEFAULT 11 g_access + 434: 0000000000020880 23 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_or + 435: 000000000007fb60 181 FUNC GLOBAL DEFAULT 11 g_get_user_special_dir + 436: 00000000000774e0 1713 FUNC GLOBAL DEFAULT 11 g_time_zone_find_interval + 437: 0000000000035ed0 109 FUNC GLOBAL DEFAULT 11 g_date_time_get_second + 438: 000000000006ebe0 150 FUNC GLOBAL DEFAULT 11 g_string_chunk_insert_const + 439: 000000000003e9e0 58 FUNC GLOBAL DEFAULT 11 g_io_channel_set_close_on_unref + 440: 0000000000036d60 61 FUNC GLOBAL DEFAULT 11 g_date_time_is_daylight_savings + 441: 000000000006d5a0 99 FUNC GLOBAL DEFAULT 11 g_string_free + 442: 0000000000061b50 129 FUNC GLOBAL DEFAULT 11 g_regex_replace_literal + 443: 000000000003cb40 172 FUNC GLOBAL DEFAULT 11 g_hook_list_invoke_check + 444: 0000000000070e80 2791 FUNC GLOBAL DEFAULT 11 g_test_init + 445: 000000000007f100 17 FUNC GLOBAL DEFAULT 11 g_get_user_name + 446: 000000000006b690 105 FUNC GLOBAL DEFAULT 11 g_strcasecmp + 447: 0000000000033ab0 79 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_unix_utc + 448: 0000000000058fa0 53 FUNC GLOBAL DEFAULT 11 g_option_group_ref + 449: 0000000000081720 382 FUNC GLOBAL DEFAULT 11 g_variant_get_fixed_array + 450: 0000000000086ac0 340 FUNC GLOBAL DEFAULT 11 g_variant_dict_insert + 451: 0000000000052c30 939 FUNC GLOBAL DEFAULT 11 g_logv + 452: 0000000000030d60 8 FUNC GLOBAL DEFAULT 11 g_date_set_time + 453: 00000000000215f0 124 FUNC GLOBAL DEFAULT 11 g_pointer_bit_unlock + 454: 0000000000025ee0 286 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_icon + 455: 000000000002c7b0 34 FUNC GLOBAL DEFAULT 11 g_checksum_free + 456: 00000000000794a0 42 FUNC GLOBAL DEFAULT 11 g_tree_replace + 457: 000000000003cce0 204 FUNC GLOBAL DEFAULT 11 g_hook_list_marshal + 458: 000000000001fe10 59 FUNC GLOBAL DEFAULT 11 g_async_queue_unref_and_unlock + 459: 000000000007b260 104 FUNC GLOBAL DEFAULT 11 g_unichar_type + 460: 000000000002cbc0 258 FUNC GLOBAL DEFAULT 11 g_checksum_get_string + 461: 000000000002eed0 83 FUNC GLOBAL DEFAULT 11 g_filename_display_basename + 462: 000000000008eda0 61 FUNC GLOBAL DEFAULT 11 g_variant_type_peek_string + 463: 0000000000044da0 521 FUNC GLOBAL DEFAULT 11 g_key_file_get_string + 464: 00000000000341f0 39 FUNC GLOBAL DEFAULT 11 g_date_time_compare + 465: 0000000000079610 172 FUNC GLOBAL DEFAULT 11 g_tree_foreach + 466: 0000000000037150 42 FUNC GLOBAL DEFAULT 11 g_dir_rewind + 467: 000000000006d7b0 571 FUNC GLOBAL DEFAULT 11 g_string_insert_len + 468: 00000000000308c0 110 FUNC GLOBAL DEFAULT 11 g_date_get_day + 469: 000000000003b650 105 FUNC GLOBAL DEFAULT 11 g_hash_table_foreach_remove + 470: 0000000000074a00 51 FUNC GLOBAL DEFAULT 11 g_timer_reset + 471: 00000000000578b0 53 FUNC GLOBAL DEFAULT 11 g_option_context_get_main_group + 472: 000000000001dc30 42 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_init + 473: 00000000000616c0 630 FUNC GLOBAL DEFAULT 11 g_regex_replace_eval + 474: 0000000000045f60 329 FUNC GLOBAL DEFAULT 11 g_key_file_set_boolean_list + 475: 0000000000060bc0 73 FUNC GLOBAL DEFAULT 11 g_regex_get_max_lookbehind + 476: 0000000000083e00 293 FUNC GLOBAL DEFAULT 11 g_variant_builder_clear + 477: 0000000000039580 69 FUNC GLOBAL DEFAULT 11 g_build_filename_valist + 478: 0000000000030d70 8 FUNC GLOBAL DEFAULT 11 g_date_set_time_val + 479: 000000000008fee0 64 FUNC GLOBAL DEFAULT 11 g_vfprintf + 480: 00000000000445c0 53 FUNC GLOBAL DEFAULT 11 g_key_file_ref + 481: 00000000000746e0 166 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_max_unused_threads + 482: 000000000006dc90 61 FUNC GLOBAL DEFAULT 11 g_string_append_c + 483: 000000000004ac50 300 FUNC GLOBAL DEFAULT 11 g_main_context_find_source_by_funcs_user_data + 484: 000000000005d660 118 FUNC GLOBAL DEFAULT 11 g_queue_pop_head + 485: 0000000000090f80 18 FUNC GLOBAL DEFAULT 11 g_mutex_unlock + 486: 0000000000083a70 714 FUNC GLOBAL DEFAULT 11 g_variant_builder_init + 487: 000000000005dcb0 66 FUNC GLOBAL DEFAULT 11 g_queue_peek_tail + 488: 0000000000087b60 142 FUNC GLOBAL DEFAULT 11 g_variant_get_data_as_bytes + 489: 000000000003e900 113 FUNC GLOBAL DEFAULT 11 g_io_channel_set_flags + 490: 0000000000063090 53 FUNC GLOBAL DEFAULT 11 g_scanner_cur_value + 491: 000000000003c060 147 FUNC GLOBAL DEFAULT 11 g_hmac_get_string + 492: 000000000006eba0 61 FUNC GLOBAL DEFAULT 11 g_string_chunk_insert + 493: 000000000006ff50 96 FUNC GLOBAL DEFAULT 11 g_test_queue_destroy + 494: 000000000003c960 151 FUNC GLOBAL DEFAULT 11 g_hook_next_valid + 495: 0000000000080090 7 FUNC GLOBAL DEFAULT 11 g_format_size + 496: 0000000000086190 273 FUNC GLOBAL DEFAULT 11 g_variant_get + 497: 000000000008eee0 106 FUNC GLOBAL DEFAULT 11 g_variant_type_is_container + 498: 000000000005e790 56 FUNC GLOBAL DEFAULT 11 g_rand_double_range + 499: 00000000000630d0 53 FUNC GLOBAL DEFAULT 11 g_scanner_cur_line + 500: 0000000000047310 301 FUNC GLOBAL DEFAULT 11 g_key_file_has_key + 501: 0000000000079cc0 131 FUNC GLOBAL DEFAULT 11 g_unichar_isgraph + 502: 000000000007b7c0 257 FUNC GLOBAL DEFAULT 11 g_utf8_strlen + 503: 00000000000481d0 171 FUNC GLOBAL DEFAULT 11 g_list_remove_link + 504: 00000000000519e0 81 FUNC GLOBAL DEFAULT 11 g_realloc_n + 505: 0000000000069ba0 13 FUNC GLOBAL DEFAULT 11 g_slist_free_1 + 506: 000000000002d840 5 FUNC GLOBAL DEFAULT 11 g_iconv + 507: 0000000000062e50 294 FUNC GLOBAL DEFAULT 11 g_scanner_scope_lookup_symbol + 508: 000000000003d750 1597 FUNC GLOBAL DEFAULT 11 g_hostname_to_ascii + 509: 000000000006bd90 555 FUNC GLOBAL DEFAULT 11 g_strsplit + 510: 00000000000487c0 7 FUNC GLOBAL DEFAULT 11 g_list_insert_sorted + 511: 000000000001f3c0 192 FUNC GLOBAL DEFAULT 11 g_ptr_array_set_size + 512: 000000000006ca30 620 FUNC GLOBAL DEFAULT 11 g_str_tokenize_and_fold + 513: 0000000000035bf0 115 FUNC GLOBAL DEFAULT 11 g_date_time_get_day_of_year + 514: 000000000004ce00 57 FUNC GLOBAL DEFAULT 11 g_timeout_source_new + 515: 00000000000631a0 123 FUNC GLOBAL DEFAULT 11 g_scanner_sync_file_offset + 516: 0000000000034250 652 FUNC GLOBAL DEFAULT 11 g_date_time_get_ymd + 517: 0000000000045310 300 FUNC GLOBAL DEFAULT 11 g_key_file_set_string_list + 518: 0000000000022280 230 FUNC GLOBAL DEFAULT 11 g_bookmark_file_load_from_file + 519: 000000000003aed0 10 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_remove + 520: 0000000000037580 177 FUNC GLOBAL DEFAULT 11 g_setenv + 521: 0000000000070230 25 FUNC GLOBAL DEFAULT 11 g_test_trap_has_passed + 522: 000000000006a390 5 FUNC GLOBAL DEFAULT 11 g_slist_sort_with_data + 523: 0000000000087980 163 FUNC GLOBAL DEFAULT 11 g_variant_ref_sink + 524: 0000000000020100 69 FUNC GLOBAL DEFAULT 11 g_async_queue_pop_unlocked + 525: 000000000006a040 51 FUNC GLOBAL DEFAULT 11 g_slist_nth_data + 526: 0000000000037c90 99 FUNC GLOBAL DEFAULT 11 g_propagate_error + 527: 0000000000055c80 135 FUNC GLOBAL DEFAULT 11 g_node_copy_deep + 528: 000000000007c700 535 FUNC GLOBAL DEFAULT 11 g_utf16_to_ucs4 + 529: 0000000000030a70 142 FUNC GLOBAL DEFAULT 11 g_date_is_leap_year + 530: 0000000000314cc8 4 OBJECT GLOBAL DEFAULT 26 g_thread_use_default_impl + 531: 000000000007b620 51 FUNC GLOBAL DEFAULT 11 g_unicode_script_to_iso15924 + 532: 0000000000079ee0 146 FUNC GLOBAL DEFAULT 11 g_unichar_isspace + 533: 000000000004b270 70 FUNC GLOBAL DEFAULT 11 g_get_real_time + 534: 000000000007b6e0 59 FUNC GLOBAL DEFAULT 11 g_utf8_find_prev_char + 535: 000000000007f830 208 FUNC GLOBAL DEFAULT 11 g_get_user_data_dir + 536: 0000000000031950 201 FUNC GLOBAL DEFAULT 11 g_date_is_last_of_month + 537: 00000000000837a0 129 FUNC GLOBAL DEFAULT 11 g_variant_iter_next_value + 538: 000000000003caa0 153 FUNC GLOBAL DEFAULT 11 g_hook_list_invoke + 539: 00000000000904e0 76 FUNC GLOBAL DEFAULT 11 g_unix_signal_source_new + 540: 0000000000024f20 452 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_groups + 541: 000000000001faf0 145 FUNC GLOBAL DEFAULT 11 g_byte_array_remove_range + 542: 00000000000f47d8 4 OBJECT GLOBAL DEFAULT 13 glib_major_version + 543: 00000000000576c0 53 FUNC GLOBAL DEFAULT 11 g_option_context_get_strict_posix + 544: 0000000000062fc0 129 FUNC GLOBAL DEFAULT 11 g_scanner_scope_foreach_symbol + 545: 0000000000036e40 340 FUNC GLOBAL DEFAULT 11 g_date_time_format + 546: 0000000000087c60 286 FUNC GLOBAL DEFAULT 11 g_variant_get_child_value + 547: 000000000005e350 41 FUNC GLOBAL DEFAULT 11 g_rand_new_with_seed + 548: 0000000000046db0 337 FUNC GLOBAL DEFAULT 11 g_key_file_set_double_list + 549: 000000000004bcb0 780 FUNC GLOBAL DEFAULT 11 g_main_context_check + 550: 0000000000069fe0 37 FUNC GLOBAL DEFAULT 11 g_slist_reverse + 551: 000000000003ddc0 1105 FUNC GLOBAL DEFAULT 11 g_hostname_to_unicode + 552: 0000000000047be0 8 FUNC GLOBAL DEFAULT 11 glib__private__ + 553: 0000000000020850 9 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_add + 554: 0000000000057600 58 FUNC GLOBAL DEFAULT 11 g_option_context_set_ignore_unknown_options + 555: 0000000000031a20 266 FUNC GLOBAL DEFAULT 11 g_date_add_months + 556: 00000000000262f0 53 FUNC GLOBAL DEFAULT 11 g_bytes_ref + 557: 00000000000909f0 131 FUNC GLOBAL DEFAULT 11 g_rw_lock_reader_lock + 558: 000000000005e130 277 FUNC GLOBAL DEFAULT 11 g_rand_copy + 559: 0000000000057680 58 FUNC GLOBAL DEFAULT 11 g_option_context_set_strict_posix + 560: 000000000005ccc0 227 FUNC GLOBAL DEFAULT 11 g_quark_from_static_string + 561: 000000000007b9d0 92 FUNC GLOBAL DEFAULT 11 g_utf8_pointer_to_offset + 562: 0000000000080ff0 65 FUNC GLOBAL DEFAULT 11 g_variant_get_type_string + 563: 0000000000061be0 192 FUNC GLOBAL DEFAULT 11 g_regex_check_replacement + 564: 0000000000069e60 154 FUNC GLOBAL DEFAULT 11 g_slist_delete_link + 565: 00000000000805c0 73 FUNC GLOBAL DEFAULT 11 g_variant_new_boolean + 566: 000000000001fab0 14 FUNC GLOBAL DEFAULT 11 g_byte_array_prepend + 567: 000000000007a140 131 FUNC GLOBAL DEFAULT 11 g_unichar_isdefined + 568: 0000000000057640 53 FUNC GLOBAL DEFAULT 11 g_option_context_get_ignore_unknown_options + 569: 00000000000517f0 102 FUNC GLOBAL DEFAULT 11 g_realloc + 570: 000000000006f780 9 FUNC GLOBAL DEFAULT 11 g_test_timer_last + 571: 000000000006d1f0 762 FUNC GLOBAL DEFAULT 11 g_ascii_string_to_unsigned + 572: 000000000008f3b0 121 FUNC GLOBAL DEFAULT 11 g_variant_type_element + 573: 0000000000024840 189 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_modified + 574: 00000000000677b0 283 FUNC GLOBAL DEFAULT 11 g_shell_quote + 575: 000000000008f4c0 100 FUNC GLOBAL DEFAULT 11 g_variant_type_next + 576: 000000000006a450 16 FUNC GLOBAL DEFAULT 11 g_stat + 577: 00000000000554d0 262 FUNC GLOBAL DEFAULT 11 g_node_insert_after + 578: 000000000001c240 2 FUNC GLOBAL DEFAULT 11 g_node_pop_allocator + 579: 0000000000051a40 41 FUNC GLOBAL DEFAULT 11 g_try_malloc_n + 580: 0000000000020840 15 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_compare_and_exchange + 581: 0000000000074490 131 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_num_threads + 582: 000000000006a840 46 FUNC GLOBAL DEFAULT 11 g_strnfill + 583: 000000000005c370 131 FUNC GLOBAL DEFAULT 11 g_pattern_match_string + 584: 000000000005de90 76 FUNC GLOBAL DEFAULT 11 g_queue_insert_before + 585: 00000000000397d0 53 FUNC GLOBAL DEFAULT 11 g_path_is_absolute + 586: 0000000000061110 37 FUNC GLOBAL DEFAULT 11 g_regex_match_all + 587: 0000000000066680 141 FUNC GLOBAL DEFAULT 11 g_sequence_remove_range + 588: 000000000007f1b0 197 FUNC GLOBAL DEFAULT 11 g_get_tmp_dir + 589: 0000000000067020 27 FUNC GLOBAL DEFAULT 11 g_sequence_is_empty + 590: 0000000000048670 111 FUNC GLOBAL DEFAULT 11 g_list_insert + 591: 0000000000091140 279 FUNC GLOBAL DEFAULT 11 g_cond_wait_until + 592: 0000000000062300 305 FUNC GLOBAL DEFAULT 11 g_scanner_warn + 593: 000000000006fec0 130 FUNC GLOBAL DEFAULT 11 g_test_add_data_func_full + 594: 0000000000044810 393 FUNC GLOBAL DEFAULT 11 g_key_file_get_keys + 595: 000000000006a1c0 66 FUNC GLOBAL DEFAULT 11 g_slist_append + 596: 000000000007fca0 121 FUNC GLOBAL DEFAULT 11 g_get_system_config_dirs + 597: 000000000001c700 54 FUNC GLOBAL DEFAULT 11 g_completion_new + 598: 0000000000048150 117 FUNC GLOBAL DEFAULT 11 g_list_remove_all + 599: 0000000000074950 42 FUNC GLOBAL DEFAULT 11 g_timer_destroy + 600: 0000000000081fc0 230 FUNC GLOBAL DEFAULT 11 g_variant_dup_objv + 601: 0000000000033f80 99 FUNC GLOBAL DEFAULT 11 g_date_time_new_local + 602: 000000000007be90 488 FUNC GLOBAL DEFAULT 11 g_utf8_to_ucs4_fast + 603: 00000000000736c0 142 FUNC GLOBAL DEFAULT 11 g_once_init_enter + 604: 0000000000037960 159 FUNC GLOBAL DEFAULT 11 g_error_new_literal + 605: 0000000000055bd0 72 FUNC GLOBAL DEFAULT 11 g_node_last_child + 606: 00000000000822d0 3840 FUNC GLOBAL DEFAULT 11 g_variant_print_string + 607: 000000000008d6f0 141 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_is_signature + 608: 000000000001ef60 83 FUNC GLOBAL DEFAULT 11 g_ptr_array_sized_new + 609: 000000000002f780 9 FUNC GLOBAL DEFAULT 11 g_datalist_id_get_data + 610: 000000000004af00 81 FUNC GLOBAL DEFAULT 11 g_source_remove_by_funcs_user_data + 611: 0000000000081060 80 FUNC GLOBAL DEFAULT 11 g_variant_get_boolean + 612: 000000000001c8e0 779 FUNC GLOBAL DEFAULT 11 g_completion_complete + 613: 000000000003c670 106 FUNC GLOBAL DEFAULT 11 g_hook_destroy_link + 614: 0000000000031820 298 FUNC GLOBAL DEFAULT 11 g_date_get_sunday_week_of_year + 615: 000000000004cf40 18 FUNC GLOBAL DEFAULT 11 g_timeout_add + 616: 0000000000043e60 294 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_file + 617: 00000000000836a0 74 FUNC GLOBAL DEFAULT 11 g_variant_iter_copy + 618: 00000000000487e0 7 FUNC GLOBAL DEFAULT 11 g_list_sort + 619: 0000000000069b70 10 FUNC GLOBAL DEFAULT 11 g_slist_alloc + 620: 0000000000080840 126 FUNC GLOBAL DEFAULT 11 g_variant_new_string + 621: 000000000006dba0 12 FUNC GLOBAL DEFAULT 11 g_string_insert + 622: 00000000000487f0 5 FUNC GLOBAL DEFAULT 11 g_list_sort_with_data + 623: 000000000004c920 105 FUNC GLOBAL DEFAULT 11 g_main_loop_get_context + 624: 00000000000f47cc 4 OBJECT GLOBAL DEFAULT 13 glib_interface_age + 625: 0000000000034150 18 FUNC GLOBAL DEFAULT 11 g_date_time_add_seconds + 626: 0000000000035930 334 FUNC GLOBAL DEFAULT 11 g_date_time_get_day_of_month + 627: 000000000003bf30 90 FUNC GLOBAL DEFAULT 11 g_hmac_update + 628: 0000000000024400 201 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_is_private + 629: 000000000008e370 50 FUNC GLOBAL DEFAULT 11 g_variant_type_info_query + 630: 0000000000090260 81 FUNC GLOBAL DEFAULT 11 g_vasprintf + 631: 000000000001c220 2 FUNC GLOBAL DEFAULT 11 g_slist_pop_allocator + 632: 000000000001f750 116 FUNC GLOBAL DEFAULT 11 g_ptr_array_foreach + 633: 0000000000054c60 82 FUNC GLOBAL DEFAULT 11 g_printf_string_upper_bound + 634: 0000000000314a70 8 OBJECT GLOBAL DEFAULT 24 glib_mem_profiler_table + 635: 000000000003bbb0 3 FUNC GLOBAL DEFAULT 11 g_int_hash + 636: 0000000000044b60 280 FUNC GLOBAL DEFAULT 11 g_key_file_get_value + 637: 00000000000820b0 246 FUNC GLOBAL DEFAULT 11 g_variant_get_strv + 638: 0000000000030990 96 FUNC GLOBAL DEFAULT 11 g_date_set_julian + 639: 0000000000020800 20 FUNC GLOBAL DEFAULT 11 g_atomic_int_xor + 640: 0000000000039bf0 391 FUNC GLOBAL DEFAULT 11 g_get_current_dir + 641: 0000000000060de0 90 FUNC GLOBAL DEFAULT 11 g_regex_match_simple + 642: 0000000000093790 195 FUNC GLOBAL DEFAULT 11 g_spawn_command_line_sync + 643: 000000000007d160 149 FUNC GLOBAL DEFAULT 11 g_utf8_strreverse + 644: 000000000008e3d0 42 FUNC GLOBAL DEFAULT 11 g_variant_type_info_query_element + 645: 000000000008c0f0 2276 FUNC GLOBAL DEFAULT 11 g_variant_serialised_get_child + 646: 000000000004dae0 53 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_contents + 647: 000000000006a470 5 FUNC GLOBAL DEFAULT 11 g_unlink + 648: 000000000001d7c0 43 FUNC GLOBAL DEFAULT 11 g_private_new + 649: 0000000000020830 7 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_set + 650: 0000000000072550 488 FUNC GLOBAL DEFAULT 11 g_assertion_message + 651: 0000000000059510 80 FUNC GLOBAL DEFAULT 11 g_option_context_set_description + 652: 000000000004ccd0 90 FUNC GLOBAL DEFAULT 11 g_main_context_wakeup + 653: 0000000000093720 105 FUNC GLOBAL DEFAULT 11 g_spawn_async + 654: 00000000000670f0 77 FUNC GLOBAL DEFAULT 11 g_sequence_foreach + 655: 000000000003e810 169 FUNC GLOBAL DEFAULT 11 g_io_channel_set_line_term + 656: 000000000005d040 10 FUNC GLOBAL DEFAULT 11 g_queue_new + 657: 000000000001cf10 105 FUNC GLOBAL DEFAULT 11 g_relation_new + 658: 0000000000062f80 61 FUNC GLOBAL DEFAULT 11 g_scanner_set_scope + 659: 0000000000032310 410 FUNC GLOBAL DEFAULT 11 g_date_to_struct_tm + 660: 0000000000090820 83 FUNC GLOBAL DEFAULT 11 g_rec_mutex_trylock + 661: 000000000004f380 53 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_element_stack + 662: 000000000006e660 133 FUNC GLOBAL DEFAULT 11 g_string_up + 663: 000000000003bac0 115 FUNC GLOBAL DEFAULT 11 g_hash_table_get_values + 664: 000000000001e240 121 FUNC GLOBAL DEFAULT 11 g_static_private_get + 665: 0000000000048760 50 FUNC GLOBAL DEFAULT 11 g_list_foreach + 666: 0000000000055b30 155 FUNC GLOBAL DEFAULT 11 g_node_n_nodes + 667: 00000000000923a0 38 FUNC GLOBAL DEFAULT 11 g_spawn_error_quark + 668: 00000000000808c0 179 FUNC GLOBAL DEFAULT 11 g_variant_new_take_string + 669: 000000000002d850 5 FUNC GLOBAL DEFAULT 11 g_iconv_close + 670: 0000000000022080 505 FUNC GLOBAL DEFAULT 11 g_bookmark_file_load_from_data + 671: 0000000000060c10 53 FUNC GLOBAL DEFAULT 11 g_regex_get_compile_flags + 672: 000000000006aba0 238 FUNC GLOBAL DEFAULT 11 g_strtod + 673: 000000000007bd20 365 FUNC GLOBAL DEFAULT 11 g_utf8_get_char_validated + 674: 000000000006dab0 18 FUNC GLOBAL DEFAULT 11 g_string_append_len + 675: 000000000003e680 250 FUNC GLOBAL DEFAULT 11 g_io_channel_error_from_errno + 676: 000000000003e220 95 FUNC GLOBAL DEFAULT 11 g_hostname_is_ascii_encoded + 677: 0000000000026110 53 FUNC GLOBAL DEFAULT 11 g_bytes_unref + 678: 00000000000840e0 235 FUNC GLOBAL DEFAULT 11 g_variant_builder_open + 679: 0000000000091030 75 FUNC GLOBAL DEFAULT 11 g_mutex_trylock + 680: 00000000000836f0 65 FUNC GLOBAL DEFAULT 11 g_variant_iter_n_children + 681: 0000000000084410 248 FUNC GLOBAL DEFAULT 11 g_variant_builder_close + 682: 0000000000025740 1013 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_app_info + 683: 000000000004ca90 8 FUNC GLOBAL DEFAULT 11 g_source_get_current_time + 684: 0000000000031330 86 FUNC GLOBAL DEFAULT 11 g_date_copy + 685: 000000000007e780 356 FUNC GLOBAL DEFAULT 11 g_unichar_fully_decompose + 686: 00000000000672d0 167 FUNC GLOBAL DEFAULT 11 g_sequence_get_iter_at_pos + 687: 000000000008d780 2575 FUNC GLOBAL DEFAULT 11 g_variant_serialised_is_normal + 688: 000000000006ea30 98 FUNC GLOBAL DEFAULT 11 g_string_chunk_clear + 689: 0000000000066a50 214 FUNC GLOBAL DEFAULT 11 g_sequence_insert_sorted + 690: 0000000000075d90 270 FUNC GLOBAL DEFAULT 11 g_time_zone_unref + 691: 0000000000091080 8 FUNC GLOBAL DEFAULT 11 g_cond_init + 692: 0000000000030850 108 FUNC GLOBAL DEFAULT 11 g_date_get_year + 693: 0000000000056170 218 FUNC GLOBAL DEFAULT 11 g_node_children_foreach + 694: 0000000000039f80 221 FUNC GLOBAL DEFAULT 11 g_dpgettext + 695: 0000000000061620 100 FUNC GLOBAL DEFAULT 11 g_regex_split_simple + 696: 0000000000051980 81 FUNC GLOBAL DEFAULT 11 g_malloc0_n + 697: 0000000000030930 90 FUNC GLOBAL DEFAULT 11 g_date_clear + 698: 000000000001e1d0 91 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_free + 699: 000000000004d550 189 FUNC GLOBAL DEFAULT 11 g_child_watch_add_full + 700: 000000000001fa30 5 FUNC GLOBAL DEFAULT 11 g_byte_array_free + 701: 0000000000314ca8 0 NOTYPE GLOBAL DEFAULT 26 __bss_start + 702: 0000000000086d70 227 FUNC GLOBAL DEFAULT 11 g_variant_dict_end + 703: 000000000004a2c0 110 FUNC GLOBAL DEFAULT 11 g_source_set_can_recurse + 704: 000000000006a430 5 FUNC GLOBAL DEFAULT 11 g_mkdir + 705: 0000000000059250 42 FUNC GLOBAL DEFAULT 11 g_option_group_set_error_hook + 706: 000000000003b950 115 FUNC GLOBAL DEFAULT 11 g_hash_table_get_keys + 707: 00000000000346d0 537 FUNC GLOBAL DEFAULT 11 g_date_time_add_months + 708: 000000000004f660 123 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_pop + 709: 00000000000348f0 939 FUNC GLOBAL DEFAULT 11 g_date_time_add_full + 710: 000000000007d140 29 FUNC GLOBAL DEFAULT 11 g_unichar_validate + 711: 00000000000841d0 564 FUNC GLOBAL DEFAULT 11 g_variant_builder_end + 712: 000000000003ad30 9 FUNC GLOBAL DEFAULT 11 g_hash_table_new + 713: 000000000002fd90 921 FUNC GLOBAL DEFAULT 11 g_dataset_id_set_data_full + 714: 000000000007faa0 189 FUNC GLOBAL DEFAULT 11 g_reload_user_special_dirs_cache + 715: 0000000000041ec0 241 FUNC GLOBAL DEFAULT 11 g_io_channel_seek + 716: 0000000000065cc0 91 FUNC GLOBAL DEFAULT 11 g_sequence_free + 717: 0000000000030590 12 FUNC GLOBAL DEFAULT 11 g_date_valid_month + 718: 0000000000090890 21 FUNC GLOBAL DEFAULT 11 g_rw_lock_clear + 719: 000000000002f050 180 FUNC GLOBAL DEFAULT 11 g_datalist_clear + 720: 000000000006a7b0 76 FUNC GLOBAL DEFAULT 11 g_memdup + 721: 000000000006a160 50 FUNC GLOBAL DEFAULT 11 g_slist_index + 722: 00000000000545d0 320 FUNC GLOBAL DEFAULT 11 g_warn_message + 723: 0000000000057470 57 FUNC GLOBAL DEFAULT 11 g_option_context_new + 724: 0000000000044470 322 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_data_dirs + 725: 0000000000074bf0 235 FUNC GLOBAL DEFAULT 11 g_time_val_add + 726: 0000000000021070 432 FUNC GLOBAL DEFAULT 11 g_base64_decode_step + 727: 00000000000377c0 152 FUNC GLOBAL DEFAULT 11 g_error_new_valist + 728: 0000000000066190 177 FUNC GLOBAL DEFAULT 11 g_sequence_prepend + 729: 00000000000907a0 21 FUNC GLOBAL DEFAULT 11 g_rec_mutex_clear + 730: 000000000001ec80 389 FUNC GLOBAL DEFAULT 11 g_array_remove_range + 731: 0000000000080e60 65 FUNC GLOBAL DEFAULT 11 g_variant_get_type + 732: 0000000000041cf0 257 FUNC GLOBAL DEFAULT 11 g_io_channel_read + 733: 0000000000079470 42 FUNC GLOBAL DEFAULT 11 g_tree_insert + 734: 00000000000795a0 111 FUNC GLOBAL DEFAULT 11 g_tree_lookup_extended + 735: 0000000000051ad0 6 FUNC GLOBAL DEFAULT 11 g_mem_is_system_malloc + 736: 000000000003be90 53 FUNC GLOBAL DEFAULT 11 g_hmac_ref + 737: 00000000000203a0 83 FUNC GLOBAL DEFAULT 11 g_async_queue_length + 738: 0000000000080b40 62 FUNC GLOBAL DEFAULT 11 g_variant_is_signature + 739: 0000000000079f80 122 FUNC GLOBAL DEFAULT 11 g_unichar_ismark + 740: 0000000000048410 42 FUNC GLOBAL DEFAULT 11 g_list_reverse + 741: 000000000001ff80 145 FUNC GLOBAL DEFAULT 11 g_async_queue_push_sorted_unlocked + 742: 0000000000026650 285 FUNC GLOBAL DEFAULT 11 g_bytes_unref_to_data + 743: 00000000000560c0 85 FUNC GLOBAL DEFAULT 11 g_node_first_sibling + 744: 00000000000870b0 249 FUNC GLOBAL DEFAULT 11 g_variant_byteswap + 745: 000000000003b4d0 10 FUNC GLOBAL DEFAULT 11 g_hash_table_remove + 746: 0000000000047f00 87 FUNC GLOBAL DEFAULT 11 g_list_prepend + 747: 0000000000040350 450 FUNC GLOBAL DEFAULT 11 g_io_channel_read_line + 748: 000000000005e7d0 359 FUNC GLOBAL DEFAULT 11 g_rand_int_range + 749: 000000000006a480 5 FUNC GLOBAL DEFAULT 11 g_remove + 750: 000000000001c1b0 2 FUNC GLOBAL DEFAULT 11 g_mem_chunk_reset + 751: 0000000000090ae0 75 FUNC GLOBAL DEFAULT 11 g_rw_lock_reader_unlock + 752: 000000000003bb40 22 FUNC GLOBAL DEFAULT 11 g_str_equal + 753: 0000000000073630 143 FUNC GLOBAL DEFAULT 11 g_once_impl + 754: 000000000008f2a0 263 FUNC GLOBAL DEFAULT 11 g_variant_type_is_subtype_of + 755: 000000000002d020 143 FUNC GLOBAL DEFAULT 11 g_compute_checksum_for_string + 756: 00000000000692c0 45 FUNC GLOBAL DEFAULT 11 g_slice_alloc0 + 757: 000000000006a490 5 FUNC GLOBAL DEFAULT 11 g_rmdir + 758: 000000000008eab0 370 FUNC GLOBAL DEFAULT 11 g_variant_type_string_scan + 759: 000000000003ff70 917 FUNC GLOBAL DEFAULT 11 g_io_channel_set_encoding + 760: 00000000000499d0 71 FUNC GLOBAL DEFAULT 11 g_main_context_default + 761: 0000000000069590 816 FUNC GLOBAL DEFAULT 11 g_slice_free_chain_with_offset + 762: 00000000000905f0 149 FUNC GLOBAL DEFAULT 11 g_unix_fd_add_full + 763: 0000000000043f90 294 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_data + 764: 000000000007b7a0 28 FUNC GLOBAL DEFAULT 11 g_utf8_prev_char + 765: 0000000000090c90 5 FUNC GLOBAL DEFAULT 11 g_thread_yield + 766: 0000000000048470 42 FUNC GLOBAL DEFAULT 11 g_list_nth_prev + 767: 000000000003afe0 140 FUNC GLOBAL DEFAULT 11 g_hash_table_unref + 768: 000000000005f180 110 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_named + 769: 000000000008ee40 147 FUNC GLOBAL DEFAULT 11 g_variant_type_is_definite + 770: 00000000000240a0 205 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_description + 771: 000000000004d150 338 FUNC GLOBAL DEFAULT 11 g_main_context_invoke_full + 772: 000000000006e560 97 FUNC GLOBAL DEFAULT 11 g_string_ascii_up + 773: 000000000001f840 58 FUNC GLOBAL DEFAULT 11 g_ptr_array_unref + 774: 0000000000051b00 26 FUNC GLOBAL DEFAULT 11 g_mem_profile + 775: 00000000000201c0 61 FUNC GLOBAL DEFAULT 11 g_async_queue_try_pop_unlocked + 776: 000000000007bb70 226 FUNC GLOBAL DEFAULT 11 g_unichar_to_utf8 + 777: 0000000000045040 705 FUNC GLOBAL DEFAULT 11 g_key_file_get_string_list + 778: 000000000006d6b0 51 FUNC GLOBAL DEFAULT 11 g_string_hash + 779: 00000000000678d0 811 FUNC GLOBAL DEFAULT 11 g_shell_unquote + 780: 000000000005ef70 80 FUNC GLOBAL DEFAULT 11 g_match_info_get_match_count + 781: 0000000000071b20 238 FUNC GLOBAL DEFAULT 11 g_test_minimized_result + 782: 000000000004f070 704 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_end_parse + 783: 000000000006ad40 39 FUNC GLOBAL DEFAULT 11 g_ascii_strtoll + 784: 00000000000542a0 287 FUNC GLOBAL DEFAULT 11 g_log_writer_standard_streams + 785: 000000000004f3c0 66 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_position + 786: 0000000000078430 671 FUNC GLOBAL DEFAULT 11 g_str_to_ascii + 787: 000000000005f500 504 FUNC GLOBAL DEFAULT 11 g_match_info_next + 788: 000000000005f000 167 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_pos + 789: 000000000006a360 7 FUNC GLOBAL DEFAULT 11 g_slist_insert_sorted + 790: 0000000000073920 149 FUNC GLOBAL DEFAULT 11 g_thread_new + 791: 0000000000074920 7 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_max_idle_time + 792: 000000000006b440 38 FUNC GLOBAL DEFAULT 11 g_ascii_digit_value + 793: 0000000000072500 74 FUNC GLOBAL DEFAULT 11 g_test_run + 794: 0000000000081b90 279 FUNC GLOBAL DEFAULT 11 g_variant_new_dict_entry + 795: 000000000006a2e0 32 FUNC GLOBAL DEFAULT 11 g_slist_length + 796: 000000000004ac00 74 FUNC GLOBAL DEFAULT 11 g_source_set_name_by_id + 797: 000000000003a180 58 FUNC GLOBAL DEFAULT 11 g_dcgettext + 798: 0000000000037a00 59 FUNC GLOBAL DEFAULT 11 g_error_free + 799: 0000000000033ff0 99 FUNC GLOBAL DEFAULT 11 g_date_time_new_utc + 800: 0000000000090f60 26 FUNC GLOBAL DEFAULT 11 g_mutex_lock + 801: 0000000000314720 8 OBJECT GLOBAL DEFAULT 24 g_thread_gettime + 802: 00000000000864b0 291 FUNC GLOBAL DEFAULT 11 g_variant_iter_next + 803: 00000000000487d0 5 FUNC GLOBAL DEFAULT 11 g_list_insert_sorted_with_data + 804: 000000000003c520 333 FUNC GLOBAL DEFAULT 11 g_hook_unref + 805: 000000000007fc20 121 FUNC GLOBAL DEFAULT 11 g_get_system_data_dirs + 806: 0000000000090c00 136 FUNC GLOBAL DEFAULT 11 g_private_replace + 807: 000000000003ac80 165 FUNC GLOBAL DEFAULT 11 g_hash_table_new_full + 808: 0000000000079ac0 120 FUNC GLOBAL DEFAULT 11 g_unichar_isalnum + 809: 0000000000073c40 462 FUNC GLOBAL DEFAULT 11 g_thread_pool_new + 810: 000000000001efc0 7 FUNC GLOBAL DEFAULT 11 g_ptr_array_new + 811: 00000000000909a0 75 FUNC GLOBAL DEFAULT 11 g_rw_lock_writer_unlock + 812: 000000000008d650 147 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_is_object_path + 813: 000000000006a380 7 FUNC GLOBAL DEFAULT 11 g_slist_sort + 814: 000000000006f790 33 FUNC GLOBAL DEFAULT 11 g_test_bug_base + 815: 0000000000046c10 413 FUNC GLOBAL DEFAULT 11 g_key_file_get_double_list + 816: 000000000003bc00 10 FUNC GLOBAL DEFAULT 11 g_double_hash + 817: 00000000000305b0 13 FUNC GLOBAL DEFAULT 11 g_date_valid_day + 818: 00000000000462d0 379 FUNC GLOBAL DEFAULT 11 g_key_file_get_int64 + 819: 000000000004f840 4705 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_parse + 820: 000000000004f010 90 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_unref + 821: 000000000001fad0 14 FUNC GLOBAL DEFAULT 11 g_byte_array_remove_index + 822: 000000000004ce90 171 FUNC GLOBAL DEFAULT 11 g_timeout_add_full + 823: 000000000006e1f0 53 FUNC GLOBAL DEFAULT 11 g_string_prepend_unichar + 824: 000000000001c1d0 2 FUNC GLOBAL DEFAULT 11 g_mem_chunk_info + 825: 000000000003be10 115 FUNC GLOBAL DEFAULT 11 g_hmac_copy + 826: 000000000003c3b0 161 FUNC GLOBAL DEFAULT 11 g_hook_alloc + 827: 0000000000087040 102 FUNC GLOBAL DEFAULT 11 g_variant_get_normal_form + 828: 0000000000026770 107 FUNC GLOBAL DEFAULT 11 g_bytes_unref_to_array + 829: 000000000001dc80 33 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_trylock + 830: 0000000000070580 88 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_free + 831: 0000000000020780 5 FUNC GLOBAL DEFAULT 11 g_atomic_int_inc + 832: 0000000000062800 203 FUNC GLOBAL DEFAULT 11 g_scanner_destroy + 833: 000000000006c5d0 225 FUNC GLOBAL DEFAULT 11 g_strstr_len + 834: 0000000000083830 485 FUNC GLOBAL DEFAULT 11 g_variant_lookup_value + 835: 000000000003b070 336 FUNC GLOBAL DEFAULT 11 g_hash_table_lookup + 836: 00000000000543c0 527 FUNC GLOBAL DEFAULT 11 g_log_writer_default + 837: 00000000000206c0 96 FUNC GLOBAL DEFAULT 11 g_async_queue_push_front + 838: 0000000000036110 61 FUNC GLOBAL DEFAULT 11 g_date_time_get_timezone_abbreviation + 839: 0000000000050c80 711 FUNC GLOBAL DEFAULT 11 g_markup_vprintf_escaped + 840: 00000000000675b0 219 FUNC GLOBAL DEFAULT 11 g_sequence_iter_move + 841: 00000000003158c8 0 NOTYPE GLOBAL DEFAULT 26 _end + 842: 000000000003aee0 172 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_replace + 843: 000000000007b3f0 287 FUNC GLOBAL DEFAULT 11 g_utf8_casefold + 844: 000000000003c320 130 FUNC GLOBAL DEFAULT 11 g_hook_list_init + 845: 000000000004af80 279 FUNC GLOBAL DEFAULT 11 g_source_add_unix_fd + 846: 000000000003e600 18 FUNC GLOBAL DEFAULT 11 g_io_add_watch + 847: 000000000005cbc0 251 FUNC GLOBAL DEFAULT 11 g_quark_from_string + 848: 0000000000053290 192 FUNC GLOBAL DEFAULT 11 g_log_writer_is_journald + 849: 00000000000525a0 61 FUNC GLOBAL DEFAULT 11 g_log_set_always_fatal + 850: 0000000000086c20 131 FUNC GLOBAL DEFAULT 11 g_variant_dict_remove + 851: 00000000000557d0 635 FUNC GLOBAL DEFAULT 11 g_node_traverse + 852: 0000000000080da0 182 FUNC GLOBAL DEFAULT 11 g_variant_new_bytestring_array + 853: 000000000001eb90 235 FUNC GLOBAL DEFAULT 11 g_array_remove_index_fast + 854: 00000000000832d0 245 FUNC GLOBAL DEFAULT 11 g_variant_equal + 855: 000000000001feb0 107 FUNC GLOBAL DEFAULT 11 g_async_queue_push_unlocked + 856: 000000000005c400 147 FUNC GLOBAL DEFAULT 11 g_pattern_match_simple + 857: 00000000000527f0 841 FUNC GLOBAL DEFAULT 11 g_log_structured + 858: 0000000000079430 59 FUNC GLOBAL DEFAULT 11 g_tree_destroy + 859: 000000000001e830 85 FUNC GLOBAL DEFAULT 11 g_array_free + 860: 0000000000090060 177 FUNC GLOBAL DEFAULT 11 g_sprintf + 861: 000000000007f710 37 FUNC GLOBAL DEFAULT 11 g_get_prgname + 862: 000000000001f980 10 FUNC GLOBAL DEFAULT 11 g_ptr_array_find + 863: 000000000004d960 300 FUNC GLOBAL DEFAULT 11 g_mapped_file_new + 864: 0000000000031560 103 FUNC GLOBAL DEFAULT 11 g_date_add_days + 865: 000000000003e470 107 FUNC GLOBAL DEFAULT 11 g_io_channel_init + 866: 000000000004c5a0 74 FUNC GLOBAL DEFAULT 11 g_main_loop_new + 867: 0000000000093e4c 0 FUNC GLOBAL DEFAULT 12 _fini + 868: 000000000007b580 157 FUNC GLOBAL DEFAULT 11 g_unichar_get_script + 869: 0000000000087b20 52 FUNC GLOBAL DEFAULT 11 g_variant_get_data + 870: 000000000001ee10 206 FUNC GLOBAL DEFAULT 11 g_array_set_size + 871: 000000000008b6f0 328 FUNC GLOBAL DEFAULT 11 g_variant_new_parsed_va + 872: 0000000000036ff0 168 FUNC GLOBAL DEFAULT 11 g_dir_open + 873: 000000000007d200 480 FUNC GLOBAL DEFAULT 11 g_utf8_make_valid + 874: 000000000006ab40 93 FUNC GLOBAL DEFAULT 11 g_ascii_strtod + 875: 0000000000026d90 1007 FUNC GLOBAL DEFAULT 11 g_get_language_names + 876: 0000000000023f30 205 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_title + 877: 000000000001c740 144 FUNC GLOBAL DEFAULT 11 g_completion_add_items + 878: 000000000004a370 117 FUNC GLOBAL DEFAULT 11 g_source_set_name + 879: 000000000004b660 517 FUNC GLOBAL DEFAULT 11 g_main_context_wait + 880: 0000000000063150 72 FUNC GLOBAL DEFAULT 11 g_scanner_eof + 881: 000000000001e7b0 58 FUNC GLOBAL DEFAULT 11 g_array_unref + 882: 000000000006cea0 38 FUNC GLOBAL DEFAULT 11 g_number_parser_error_quark + 883: 0000000000071d00 215 FUNC GLOBAL DEFAULT 11 g_test_message + 884: 000000000001fcf0 7 FUNC GLOBAL DEFAULT 11 g_async_queue_new + 885: 0000000000070220 7 FUNC GLOBAL DEFAULT 11 g_test_subprocess + 886: 0000000000061ca0 565 FUNC GLOBAL DEFAULT 11 g_regex_escape_nul + 887: 000000000003a060 41 FUNC GLOBAL DEFAULT 11 glib_pgettext + 888: 000000000005f420 171 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_all + 889: 000000000006c9e0 71 FUNC GLOBAL DEFAULT 11 g_strv_length + 890: 000000000005d1d0 126 FUNC GLOBAL DEFAULT 11 g_queue_foreach + 891: 000000000001c190 2 FUNC GLOBAL DEFAULT 11 g_allocator_free + 892: 000000000006f6e0 12 FUNC GLOBAL DEFAULT 11 g_test_rand_double_range + 893: 0000000000053850 25 FUNC GLOBAL DEFAULT 11 g_return_if_fail_warning + 894: 000000000003ff30 53 FUNC GLOBAL DEFAULT 11 g_io_channel_get_buffered + 895: 000000000006ba70 518 FUNC GLOBAL DEFAULT 11 g_strescape + 896: 0000000000091110 33 FUNC GLOBAL DEFAULT 11 g_cond_broadcast + 897: 0000000000045a20 388 FUNC GLOBAL DEFAULT 11 g_key_file_set_locale_string_list + 898: 000000000005dba0 91 FUNC GLOBAL DEFAULT 11 g_queue_delete_link + 899: 000000000003b4f0 139 FUNC GLOBAL DEFAULT 11 g_hash_table_remove_all + 900: 0000000000036e00 49 FUNC GLOBAL DEFAULT 11 g_date_time_to_utc + 901: 000000000005e4a0 45 FUNC GLOBAL DEFAULT 11 g_rand_new_with_seed_array + 902: 000000000003e780 74 FUNC GLOBAL DEFAULT 11 g_io_channel_set_buffer_size + 903: 000000000001c460 75 FUNC GLOBAL DEFAULT 11 g_cache_destroy + 904: 0000000000059340 121 FUNC GLOBAL DEFAULT 11 g_option_context_add_main_entries + 905: 0000000000055d80 241 FUNC GLOBAL DEFAULT 11 g_node_insert + 906: 0000000000074790 7 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_max_unused_threads + 907: 000000000001fba0 5 FUNC GLOBAL DEFAULT 11 g_byte_array_sort_with_data + 908: 0000000000055390 306 FUNC GLOBAL DEFAULT 11 g_node_insert_before + 909: 0000000000055f70 194 FUNC GLOBAL DEFAULT 11 g_node_child_position + 910: 000000000005ca60 8 FUNC GLOBAL DEFAULT 11 g_qsort_with_data + 911: 000000000001c4b0 181 FUNC GLOBAL DEFAULT 11 g_cache_insert + 912: 000000000002e940 437 FUNC GLOBAL DEFAULT 11 g_filename_from_uri + 913: 00000000003147e8 4 OBJECT GLOBAL DEFAULT 24 glib_on_error_halt + 914: 0000000000030c50 257 FUNC GLOBAL DEFAULT 11 g_date_set_time_t + 915: 000000000006b390 22 FUNC GLOBAL DEFAULT 11 g_ascii_toupper + 916: 000000000004f330 67 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_element + 917: 00000000000518e0 60 FUNC GLOBAL DEFAULT 11 g_try_realloc + 918: 00000000000336d0 123 FUNC GLOBAL DEFAULT 11 g_date_time_unref + 919: 000000000001c1f0 2 FUNC GLOBAL DEFAULT 11 g_list_push_allocator + 920: 000000000006bd10 126 FUNC GLOBAL DEFAULT 11 g_strchomp + 921: 000000000001c6a0 82 FUNC GLOBAL DEFAULT 11 g_cache_value_foreach + 922: 0000000000040fc0 2741 FUNC GLOBAL DEFAULT 11 g_io_channel_write_chars + 923: 0000000000077d90 209 FUNC GLOBAL DEFAULT 11 g_time_zone_is_dst + 924: 0000000000060c50 53 FUNC GLOBAL DEFAULT 11 g_regex_get_match_flags + 925: 000000000006f6f0 71 FUNC GLOBAL DEFAULT 11 g_test_timer_start + 926: 0000000000080c90 182 FUNC GLOBAL DEFAULT 11 g_variant_new_objv + 927: 0000000000036dc0 49 FUNC GLOBAL DEFAULT 11 g_date_time_to_local + 928: 0000000000086780 398 FUNC GLOBAL DEFAULT 11 g_variant_dict_lookup + 929: 000000000006a4a0 5 FUNC GLOBAL DEFAULT 11 g_fopen + 930: 000000000006f6c0 16 FUNC GLOBAL DEFAULT 11 g_test_rand_int_range + 931: 0000000000065c60 94 FUNC GLOBAL DEFAULT 11 g_sequence_new + 932: 00000000000251f0 783 FUNC GLOBAL DEFAULT 11 g_bookmark_file_set_app_info + 933: 000000000006a010 42 FUNC GLOBAL DEFAULT 11 g_slist_nth + 934: 000000000004d920 50 FUNC GLOBAL DEFAULT 11 g_mapped_file_unref + 935: 000000000006b7a0 183 FUNC GLOBAL DEFAULT 11 g_strcanon + 936: 0000000000060a90 53 FUNC GLOBAL DEFAULT 11 g_regex_get_pattern + 937: 00000000000309f0 126 FUNC GLOBAL DEFAULT 11 g_date_is_first_of_month + 938: 0000000000086380 293 FUNC GLOBAL DEFAULT 11 g_variant_get_child + 939: 0000000000073600 38 FUNC GLOBAL DEFAULT 11 g_thread_error_quark + 940: 000000000006e8c0 177 FUNC GLOBAL DEFAULT 11 g_string_append_printf + 941: 000000000003b360 10 FUNC GLOBAL DEFAULT 11 g_hash_table_replace + 942: 00000000000208e0 205 FUNC GLOBAL DEFAULT 11 g_on_error_stack_trace + 943: 000000000006b010 237 FUNC GLOBAL DEFAULT 11 g_strlcat + 944: 0000000000037df0 211 FUNC GLOBAL DEFAULT 11 g_propagate_prefixed_error + 945: 00000000000466d0 413 FUNC GLOBAL DEFAULT 11 g_key_file_get_integer_list + 946: 0000000000035c70 69 FUNC GLOBAL DEFAULT 11 g_date_time_get_hour + 947: 000000000004b180 110 FUNC GLOBAL DEFAULT 11 g_source_query_unix_fd + 948: 000000000004b3a0 162 FUNC GLOBAL DEFAULT 11 g_main_context_acquire + 949: 000000000001f500 116 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_fast + 950: 0000000000079e60 120 FUNC GLOBAL DEFAULT 11 g_unichar_ispunct + 951: 0000000000051ae0 26 FUNC GLOBAL DEFAULT 11 g_mem_set_vtable + 952: 000000000003c260 133 FUNC GLOBAL DEFAULT 11 g_compute_hmac_for_string + 953: 00000000000578f0 2523 FUNC GLOBAL DEFAULT 11 g_option_context_get_help + 954: 000000000001d8e0 23 FUNC GLOBAL DEFAULT 11 g_mutex_free + 955: 000000000004b360 16 FUNC GLOBAL DEFAULT 11 g_main_depth + 956: 0000000000069d60 112 FUNC GLOBAL DEFAULT 11 g_slist_remove_all + 957: 000000000004cd30 121 FUNC GLOBAL DEFAULT 11 g_source_modify_unix_fd + 958: 0000000000071de0 225 FUNC GLOBAL DEFAULT 11 g_test_bug + 959: 0000000000021220 211 FUNC GLOBAL DEFAULT 11 g_base64_decode + 960: 000000000005d190 59 FUNC GLOBAL DEFAULT 11 g_queue_reverse + 961: 000000000004caa0 134 FUNC GLOBAL DEFAULT 11 g_source_get_time + 962: 0000000000081b70 21 FUNC GLOBAL DEFAULT 11 g_variant_is_container + 963: 0000000000083f30 97 FUNC GLOBAL DEFAULT 11 g_variant_builder_unref + 964: 0000000000067000 26 FUNC GLOBAL DEFAULT 11 g_sequence_get_length + 965: 000000000008fdd0 72 FUNC GLOBAL DEFAULT 11 g_vprintf + 966: 000000000006a0b0 108 FUNC GLOBAL DEFAULT 11 g_slist_find_custom + 967: 000000000004a330 53 FUNC GLOBAL DEFAULT 11 g_source_get_can_recurse + 968: 00000000000324b0 265 FUNC GLOBAL DEFAULT 11 g_date_clamp + 969: 000000000004eef0 283 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_free + 970: 0000000000048340 181 FUNC GLOBAL DEFAULT 11 g_list_copy_deep + 971: 0000000000026cd0 69 FUNC GLOBAL DEFAULT 11 g_get_codeset + 972: 000000000001c1a0 2 FUNC GLOBAL DEFAULT 11 g_mem_chunk_clean + 973: 0000000000042bb0 38 FUNC GLOBAL DEFAULT 11 g_key_file_error_quark + 974: 000000000006a4d0 115 FUNC GLOBAL DEFAULT 11 g_close + 975: 000000000007b720 116 FUNC GLOBAL DEFAULT 11 g_utf8_find_next_char + 976: 00000000000344e0 486 FUNC GLOBAL DEFAULT 11 g_date_time_add_years + 977: 0000000000050ab0 459 FUNC GLOBAL DEFAULT 11 g_markup_escape_text + 978: 000000000005cb80 57 FUNC GLOBAL DEFAULT 11 g_quark_try_string + 979: 000000000001fac0 14 FUNC GLOBAL DEFAULT 11 g_byte_array_set_size + 980: 0000000000021490 84 FUNC GLOBAL DEFAULT 11 g_bit_unlock + 981: 0000000000022050 34 FUNC GLOBAL DEFAULT 11 g_bookmark_file_free + 982: 000000000005d320 107 FUNC GLOBAL DEFAULT 11 g_queue_sort + 983: 000000000005df90 138 FUNC GLOBAL DEFAULT 11 g_queue_insert_sorted + 984: 0000000000093540 471 FUNC GLOBAL DEFAULT 11 g_spawn_async_with_pipes + 985: 0000000000055730 74 FUNC GLOBAL DEFAULT 11 g_node_reverse_children + 986: 0000000000025500 306 FUNC GLOBAL DEFAULT 11 g_bookmark_file_add_application + 987: 000000000005dc00 91 FUNC GLOBAL DEFAULT 11 g_queue_pop_nth + 988: 000000000004af60 26 FUNC GLOBAL DEFAULT 11 g_clear_handle_id + 989: 0000000000039810 77 FUNC GLOBAL DEFAULT 11 g_path_skip_root + 990: 0000000000034170 123 FUNC GLOBAL DEFAULT 11 g_date_time_difference + 991: 000000000008f430 131 FUNC GLOBAL DEFAULT 11 g_variant_type_first + 992: 0000000000060ad0 73 FUNC GLOBAL DEFAULT 11 g_regex_get_max_backref + 993: 0000000000080980 291 FUNC GLOBAL DEFAULT 11 g_variant_new_printf + 994: 000000000002ede0 230 FUNC GLOBAL DEFAULT 11 g_filename_display_name + 995: 0000000000077cb0 209 FUNC GLOBAL DEFAULT 11 g_time_zone_get_offset + 996: 000000000006b860 521 FUNC GLOBAL DEFAULT 11 g_strcompress + 997: 000000000003e560 149 FUNC GLOBAL DEFAULT 11 g_io_add_watch_full + 998: 0000000000081cb0 65 FUNC GLOBAL DEFAULT 11 g_variant_classify + 999: 000000000002e440 155 FUNC GLOBAL DEFAULT 11 g_locale_to_utf8 + 1000: 000000000006a410 5 FUNC GLOBAL DEFAULT 11 g_creat + 1001: 0000000000048070 224 FUNC GLOBAL DEFAULT 11 g_list_remove + 1002: 000000000001c110 53 FUNC GLOBAL DEFAULT 11 g_mem_chunk_alloc0 + 1003: 0000000000037420 279 FUNC GLOBAL DEFAULT 11 g_environ_unsetenv + 1004: 0000000000066710 398 FUNC GLOBAL DEFAULT 11 g_sequence_sort_changed_iter + 1005: 000000000007ba30 136 FUNC GLOBAL DEFAULT 11 g_utf8_offset_to_pointer + 1006: 000000000005d0d0 59 FUNC GLOBAL DEFAULT 11 g_queue_clear + 1007: 0000000000020150 99 FUNC GLOBAL DEFAULT 11 g_async_queue_try_pop + 1008: 00000000000312c0 108 FUNC GLOBAL DEFAULT 11 g_date_get_julian + 1009: 0000000000047ec0 10 FUNC GLOBAL DEFAULT 11 g_list_alloc + 1010: 0000000000031010 177 FUNC GLOBAL DEFAULT 11 g_date_set_dmy + 1011: 000000000002e4e0 155 FUNC GLOBAL DEFAULT 11 g_locale_from_utf8 + 1012: 0000000000072430 194 FUNC GLOBAL DEFAULT 11 g_test_run_suite + 1013: 000000000007b660 52 FUNC GLOBAL DEFAULT 11 g_unicode_script_from_iso15924 + 1014: 000000000001df20 167 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_reader_unlock + 1015: 000000000003ceb0 261 FUNC GLOBAL DEFAULT 11 g_hook_find + 1016: 0000000000055e80 71 FUNC GLOBAL DEFAULT 11 g_node_n_children + 1017: 000000000001e9c0 207 FUNC GLOBAL DEFAULT 11 g_array_insert_vals + 1018: 000000000001ea90 243 FUNC GLOBAL DEFAULT 11 g_array_remove_index + 1019: 00000000000663e0 657 FUNC GLOBAL DEFAULT 11 g_sequence_move_range + 1020: 000000000007a1d0 178 FUNC GLOBAL DEFAULT 11 g_unichar_iszerowidth + 1021: 000000000008ecb0 5 FUNC GLOBAL DEFAULT 11 g_variant_type_free + 1022: 000000000001de80 147 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_reader_trylock + 1023: 000000000005d7d0 116 FUNC GLOBAL DEFAULT 11 g_queue_pop_tail + 1024: 0000000000026d20 99 FUNC GLOBAL DEFAULT 11 g_get_locale_variants + 1025: 00000000000370e0 110 FUNC GLOBAL DEFAULT 11 g_dir_read_name + 1026: 0000000000087ed0 216 FUNC GLOBAL DEFAULT 11 g_variant_is_normal_form + 1027: 000000000001db50 5 FUNC GLOBAL DEFAULT 11 g_once_init_enter_impl + 1028: 0000000000020f50 283 FUNC GLOBAL DEFAULT 11 g_base64_encode + 1029: 000000000006ffd0 587 FUNC GLOBAL DEFAULT 11 g_test_trap_fork + 1030: 0000000000048400 9 FUNC GLOBAL DEFAULT 11 g_list_copy + 1031: 0000000000039860 388 FUNC GLOBAL DEFAULT 11 g_mkdir_with_parents + 1032: 0000000000072aa0 454 FUNC GLOBAL DEFAULT 11 g_assertion_message_cmpnum + 1033: 0000000000048440 42 FUNC GLOBAL DEFAULT 11 g_list_nth + 1034: 00000000000487a0 20 FUNC GLOBAL DEFAULT 11 g_list_free_full + 1035: 000000000003b910 53 FUNC GLOBAL DEFAULT 11 g_hash_table_size + 1036: 000000000004a280 58 FUNC GLOBAL DEFAULT 11 g_source_get_ready_time + 1037: 0000000000024170 149 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_description + 1038: 0000000000049e70 124 FUNC GLOBAL DEFAULT 11 g_source_set_callback + 1039: 000000000001c1e0 2 FUNC GLOBAL DEFAULT 11 g_blow_chunks + 1040: 0000000000056040 116 FUNC GLOBAL DEFAULT 11 g_node_child_index + 1041: 0000000000090790 14 FUNC GLOBAL DEFAULT 11 g_rec_mutex_init + 1042: 000000000006a300 50 FUNC GLOBAL DEFAULT 11 g_slist_foreach + 1043: 0000000000048600 30 FUNC GLOBAL DEFAULT 11 g_list_last + 1044: 000000000006fda0 130 FUNC GLOBAL DEFAULT 11 g_test_add_func + 1045: 0000000000080b80 78 FUNC GLOBAL DEFAULT 11 g_variant_new_signature + 1046: 00000000000831d0 250 FUNC GLOBAL DEFAULT 11 g_variant_hash + 1047: 0000000000086910 153 FUNC GLOBAL DEFAULT 11 g_variant_dict_lookup_value + 1048: 000000000006a120 50 FUNC GLOBAL DEFAULT 11 g_slist_position + 1049: 0000000000037180 59 FUNC GLOBAL DEFAULT 11 g_dir_close + 1050: 0000000000080350 218 FUNC GLOBAL DEFAULT 11 g_uuid_string_is_valid + 1051: 000000000007d450 177 FUNC GLOBAL DEFAULT 11 g_utf8_collate + 1052: 000000000005ef30 53 FUNC GLOBAL DEFAULT 11 g_match_info_matches + 1053: 0000000000081920 92 FUNC GLOBAL DEFAULT 11 g_variant_dup_bytestring + 1054: 000000000006f9d0 179 FUNC GLOBAL DEFAULT 11 g_test_create_suite + 1055: 000000000008b840 182 FUNC GLOBAL DEFAULT 11 g_variant_new_parsed + 1056: 00000000000265b0 155 FUNC GLOBAL DEFAULT 11 g_bytes_compare + 1057: 000000000005d6e0 106 FUNC GLOBAL DEFAULT 11 g_queue_pop_head_link + 1058: 000000000001f5e0 233 FUNC GLOBAL DEFAULT 11 g_ptr_array_insert + 1059: 0000000000046f10 137 FUNC GLOBAL DEFAULT 11 g_key_file_set_comment + 1060: 0000000000030550 53 FUNC GLOBAL DEFAULT 11 g_date_valid + 1061: 00000000000797f0 112 FUNC GLOBAL DEFAULT 11 g_tree_height + 1062: 0000000000045d30 140 FUNC GLOBAL DEFAULT 11 g_key_file_set_boolean + 1063: 000000000006a4c0 5 FUNC GLOBAL DEFAULT 11 g_utime + 1064: 000000000004b4f0 157 FUNC GLOBAL DEFAULT 11 g_main_context_release + 1065: 000000000001e130 155 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_writer_unlock + 1066: 0000000000077ba0 268 FUNC GLOBAL DEFAULT 11 g_time_zone_get_abbreviation + 1067: 00000000000486e0 53 FUNC GLOBAL DEFAULT 11 g_list_concat + 1068: 0000000000066e60 98 FUNC GLOBAL DEFAULT 11 g_sequence_iter_get_sequence + 1069: 0000000000090880 14 FUNC GLOBAL DEFAULT 11 g_rw_lock_init + 1070: 000000000003afa0 53 FUNC GLOBAL DEFAULT 11 g_hash_table_ref + 1071: 000000000004bbc0 239 FUNC GLOBAL DEFAULT 11 g_main_context_query + 1072: 0000000000040310 53 FUNC GLOBAL DEFAULT 11 g_io_channel_get_encoding + 1073: 0000000000079770 125 FUNC GLOBAL DEFAULT 11 g_tree_search + 1074: 0000000000058fe0 562 FUNC GLOBAL DEFAULT 11 g_option_group_add_entries + 1075: 000000000002eb00 346 FUNC GLOBAL DEFAULT 11 g_filename_to_uri + 1076: 000000000003edb0 387 FUNC GLOBAL DEFAULT 11 g_io_channel_shutdown + 1077: 000000000003bbe0 22 FUNC GLOBAL DEFAULT 11 g_double_equal + 1078: 0000000000091ac0 187 FUNC GLOBAL DEFAULT 11 g_io_channel_unix_new + 1079: 0000000000036050 100 FUNC GLOBAL DEFAULT 11 g_date_time_to_timeval + 1080: 000000000003f020 620 FUNC GLOBAL DEFAULT 11 g_io_channel_seek_position + 1081: 000000000007a300 75 FUNC GLOBAL DEFAULT 11 g_unichar_iswide_cjk + 1082: 000000000003bba0 11 FUNC GLOBAL DEFAULT 11 g_int_equal + 1083: 0000000000064910 2876 FUNC GLOBAL DEFAULT 11 g_scanner_unexp_token + 1084: 0000000000057830 114 FUNC GLOBAL DEFAULT 11 g_option_context_set_main_group + 1085: 000000000001cc90 5 FUNC GLOBAL DEFAULT 11 g_completion_set_compare + 1086: 0000000000044650 59 FUNC GLOBAL DEFAULT 11 g_key_file_free + 1087: 0000000000052b40 236 FUNC GLOBAL DEFAULT 11 g_log_default_handler + 1088: 000000000001dcd0 46 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_lock_full + 1089: 000000000003b370 13 FUNC GLOBAL DEFAULT 11 g_hash_table_add + 1090: 000000000005cdb0 35 FUNC GLOBAL DEFAULT 11 g_quark_to_string + 1091: 00000000000574b0 200 FUNC GLOBAL DEFAULT 11 g_option_context_free + 1092: 000000000005eef0 53 FUNC GLOBAL DEFAULT 11 g_match_info_ref + 1093: 0000000000033b00 49 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_timeval_local + 1094: 0000000000093a10 2 FUNC GLOBAL DEFAULT 11 g_spawn_close_pid + 1095: 0000000000054900 389 FUNC GLOBAL DEFAULT 11 g_print + 1096: 000000000006f950 43 FUNC GLOBAL DEFAULT 11 g_test_skip + 1097: 0000000000045520 484 FUNC GLOBAL DEFAULT 11 g_key_file_get_locale_string + 1098: 000000000002f5d0 277 FUNC GLOBAL DEFAULT 11 g_datalist_id_remove_no_notify + 1099: 0000000000071c10 238 FUNC GLOBAL DEFAULT 11 g_test_maximized_result + 1100: 000000000001cbf0 84 FUNC GLOBAL DEFAULT 11 g_completion_complete_utf8 + 1101: 000000000008f600 113 FUNC GLOBAL DEFAULT 11 g_variant_type_value + 1102: 000000000004daa0 53 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_length + 1103: 0000000000020860 23 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_and + 1104: 0000000000080f20 194 FUNC GLOBAL DEFAULT 11 g_variant_new_tuple + 1105: 000000000006b100 43 FUNC GLOBAL DEFAULT 11 g_str_is_ascii + 1106: 00000000000575c0 53 FUNC GLOBAL DEFAULT 11 g_option_context_get_help_enabled + 1107: 0000000000046fa0 653 FUNC GLOBAL DEFAULT 11 g_key_file_get_comment + 1108: 000000000002e7b0 211 FUNC GLOBAL DEFAULT 11 g_filename_to_utf8 + 1109: 000000000005ea50 127 FUNC GLOBAL DEFAULT 11 g_random_double_range + 1110: 0000000000045bb0 384 FUNC GLOBAL DEFAULT 11 g_key_file_get_boolean + 1111: 000000000001fa90 5 FUNC GLOBAL DEFAULT 11 g_byte_array_unref + 1112: 0000000000048580 50 FUNC GLOBAL DEFAULT 11 g_list_position + 1113: 000000000003e4e0 53 FUNC GLOBAL DEFAULT 11 g_io_channel_ref + 1114: 0000000000051920 81 FUNC GLOBAL DEFAULT 11 g_malloc_n + 1115: 00000000000866b0 59 FUNC GLOBAL DEFAULT 11 g_variant_dict_new + 1116: 0000000000067080 101 FUNC GLOBAL DEFAULT 11 g_sequence_get_begin_iter + 1117: 000000000006a460 16 FUNC GLOBAL DEFAULT 11 g_lstat + 1118: 0000000000057580 50 FUNC GLOBAL DEFAULT 11 g_option_context_set_help_enabled + 1119: 00000000000818a0 114 FUNC GLOBAL DEFAULT 11 g_variant_get_bytestring + 1120: 0000000000020650 107 FUNC GLOBAL DEFAULT 11 g_async_queue_push_front_unlocked + 1121: 000000000007e5e0 57 FUNC GLOBAL DEFAULT 11 g_utf8_normalize + 1122: 0000000000037b40 242 FUNC GLOBAL DEFAULT 11 g_set_error + 1123: 0000000000079510 53 FUNC GLOBAL DEFAULT 11 g_tree_steal + 1124: 000000000005f390 129 FUNC GLOBAL DEFAULT 11 g_match_info_fetch_named_pos + 1125: 000000000006fba0 503 FUNC GLOBAL DEFAULT 11 g_test_add_vtable + 1126: 00000000000485c0 50 FUNC GLOBAL DEFAULT 11 g_list_index + 1127: 000000000001d9d0 2 FUNC GLOBAL DEFAULT 11 g_thread_set_priority + 1128: 000000000006b4a0 217 FUNC GLOBAL DEFAULT 11 g_ascii_strcasecmp + 1129: 0000000000023e20 258 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_uris + 1130: 0000000000090a80 83 FUNC GLOBAL DEFAULT 11 g_rw_lock_reader_trylock + 1131: 000000000006e9d0 83 FUNC GLOBAL DEFAULT 11 g_string_chunk_free + 1132: 0000000000069bb0 36 FUNC GLOBAL DEFAULT 11 g_slist_prepend + 1133: 0000000000083d40 65 FUNC GLOBAL DEFAULT 11 g_variant_builder_new + 1134: 000000000005eeb0 53 FUNC GLOBAL DEFAULT 11 g_match_info_get_string + 1135: 0000000000034140 15 FUNC GLOBAL DEFAULT 11 g_date_time_add_minutes + 1136: 0000000000022000 69 FUNC GLOBAL DEFAULT 11 g_bookmark_file_new + 1137: 000000000003d150 348 FUNC GLOBAL DEFAULT 11 g_hook_insert_sorted + 1138: 0000000000090b80 119 FUNC GLOBAL DEFAULT 11 g_private_set + 1139: 00000000000548c0 57 FUNC GLOBAL DEFAULT 11 g_set_print_handler + 1140: 000000000005d090 58 FUNC GLOBAL DEFAULT 11 g_queue_init + 1141: 000000000008ede0 83 FUNC GLOBAL DEFAULT 11 g_variant_type_dup_string + 1142: 000000000006e370 82 FUNC GLOBAL DEFAULT 11 g_string_overwrite + 1143: 000000000008f680 634 FUNC GLOBAL DEFAULT 11 g_variant_type_new_tuple + 1144: 00000000000910a0 59 FUNC GLOBAL DEFAULT 11 g_cond_wait + 1145: 000000000005e250 256 FUNC GLOBAL DEFAULT 11 g_rand_set_seed + 1146: 000000000002f1a0 659 FUNC GLOBAL DEFAULT 11 g_datalist_id_set_data_full + 1147: 000000000003d0c0 143 FUNC GLOBAL DEFAULT 11 g_hook_find_func_data + 1148: 000000000005fcc0 374 FUNC GLOBAL DEFAULT 11 g_match_info_expand_references + 1149: 000000000003fe70 186 FUNC GLOBAL DEFAULT 11 g_io_channel_set_buffered + 1150: 0000000000085f80 251 FUNC GLOBAL DEFAULT 11 g_variant_get_va + 1151: 0000000000039110 535 FUNC GLOBAL DEFAULT 11 g_file_set_contents + 1152: 00000000000702a0 520 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_push + 1153: 0000000000081150 74 FUNC GLOBAL DEFAULT 11 g_variant_get_uint16 + 1154: 000000000006eaa0 247 FUNC GLOBAL DEFAULT 11 g_string_chunk_insert_len + 1155: 000000000006b580 262 FUNC GLOBAL DEFAULT 11 g_ascii_strncasecmp + 1156: 000000000007ccc0 381 FUNC GLOBAL DEFAULT 11 g_ucs4_to_utf16 + 1157: 000000000008ea70 58 FUNC GLOBAL DEFAULT 11 g_variant_type_info_assert_no_infos + 1158: 000000000004db20 5 FUNC GLOBAL DEFAULT 11 g_mapped_file_free + 1159: 0000000000047440 194 FUNC GLOBAL DEFAULT 11 g_key_file_remove_group + 1160: 0000000000045710 387 FUNC GLOBAL DEFAULT 11 g_key_file_get_locale_for_key + 1161: 00000000000794d0 53 FUNC GLOBAL DEFAULT 11 g_tree_remove + 1162: 000000000002c710 48 FUNC GLOBAL DEFAULT 11 g_checksum_new + 1163: 0000000000044c80 275 FUNC GLOBAL DEFAULT 11 g_key_file_set_value + 1164: 0000000000072820 632 FUNC GLOBAL DEFAULT 11 g_test_trap_subprocess + 1165: 0000000000037d20 195 FUNC GLOBAL DEFAULT 11 g_prefix_error + 1166: 0000000000061140 124 FUNC GLOBAL DEFAULT 11 g_regex_get_string_number + 1167: 0000000000073810 9 FUNC GLOBAL DEFAULT 11 g_thread_ref + 1168: 0000000000090530 91 FUNC GLOBAL DEFAULT 11 g_unix_signal_add_full + 1169: 000000000005d150 53 FUNC GLOBAL DEFAULT 11 g_queue_get_length + 1170: 00000000000484a0 51 FUNC GLOBAL DEFAULT 11 g_list_nth_data + 1171: 0000000000041c10 38 FUNC GLOBAL DEFAULT 11 g_io_channel_error_quark + 1172: 0000000000025640 246 FUNC GLOBAL DEFAULT 11 g_bookmark_file_remove_application + 1173: 000000000004aa00 309 FUNC GLOBAL DEFAULT 11 g_source_add_child_source + 1174: 000000000001e3e0 68 FUNC GLOBAL DEFAULT 11 g_static_private_free + 1175: 0000000000053090 511 FUNC GLOBAL DEFAULT 11 g_log_structured_standard + 1176: 000000000006f990 64 FUNC GLOBAL DEFAULT 11 g_test_set_nonfatal_assertions + 1177: 000000000006ce00 147 FUNC GLOBAL DEFAULT 11 g_strv_contains + 1178: 000000000003e7d0 53 FUNC GLOBAL DEFAULT 11 g_io_channel_get_buffer_size + 1179: 00000000000821b0 246 FUNC GLOBAL DEFAULT 11 g_variant_get_objv + 1180: 0000000000031e00 163 FUNC GLOBAL DEFAULT 11 g_date_get_days_in_month + 1181: 00000000000213f0 142 FUNC GLOBAL DEFAULT 11 g_bit_lock + 1182: 000000000001f060 53 FUNC GLOBAL DEFAULT 11 g_ptr_array_ref + 1183: 0000000000055d10 107 FUNC GLOBAL DEFAULT 11 g_node_nth_child + 1184: 000000000001e920 153 FUNC GLOBAL DEFAULT 11 g_array_prepend_vals + 1185: 000000000005d750 53 FUNC GLOBAL DEFAULT 11 g_queue_peek_head_link + 1186: 000000000004ad80 249 FUNC GLOBAL DEFAULT 11 g_main_context_find_source_by_user_data + 1187: 000000000001fae0 14 FUNC GLOBAL DEFAULT 11 g_byte_array_remove_index_fast + 1188: 0000000000054a90 57 FUNC GLOBAL DEFAULT 11 g_set_printerr_handler + 1189: 0000000000085e70 266 FUNC GLOBAL DEFAULT 11 g_variant_new + 1190: 000000000003c100 131 FUNC GLOBAL DEFAULT 11 g_compute_hmac_for_data + 1191: 0000000000031720 253 FUNC GLOBAL DEFAULT 11 g_date_get_monday_week_of_year + 1192: 000000000004d2b0 16 FUNC GLOBAL DEFAULT 11 g_main_context_invoke + 1193: 000000000007f0e0 24 FUNC GLOBAL DEFAULT 11 g_bit_storage + 1194: 0000000000066b30 165 FUNC GLOBAL DEFAULT 11 g_sequence_search_iter + 1195: 000000000001d320 121 FUNC GLOBAL DEFAULT 11 g_relation_count + 1196: 0000000000055c20 90 FUNC GLOBAL DEFAULT 11 g_node_copy + 1197: 0000000000067c00 1624 FUNC GLOBAL DEFAULT 11 g_shell_parse_argv + 1198: 000000000001fe50 42 FUNC GLOBAL DEFAULT 11 g_async_queue_lock + 1199: 0000000000047290 113 FUNC GLOBAL DEFAULT 11 g_key_file_has_group + 1200: 0000000000093860 179 FUNC GLOBAL DEFAULT 11 g_spawn_command_line_async + 1201: 000000000001f580 88 FUNC GLOBAL DEFAULT 11 g_ptr_array_add + 1202: 0000000000049da0 197 FUNC GLOBAL DEFAULT 11 g_source_set_callback_indirect + 1203: 000000000004d140 15 FUNC GLOBAL DEFAULT 11 g_idle_remove_by_data + 1204: 0000000000052650 63 FUNC GLOBAL DEFAULT 11 g_log_set_default_handler + 1205: 000000000006f7c0 331 FUNC GLOBAL DEFAULT 11 g_test_create_case + 1206: 000000000001f710 58 FUNC GLOBAL DEFAULT 11 g_ptr_array_sort_with_data + 1207: 000000000007f050 55 FUNC GLOBAL DEFAULT 11 g_bit_nth_lsf + 1208: 000000000005e100 42 FUNC GLOBAL DEFAULT 11 g_rand_free + 1209: 000000000006ffb0 26 FUNC GLOBAL DEFAULT 11 g_test_queue_free + 1210: 000000000007d770 679 FUNC GLOBAL DEFAULT 11 g_utf8_collate_key_for_filename + 1211: 000000000001dc60 23 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_lock + 1212: 000000000006e230 313 FUNC GLOBAL DEFAULT 11 g_string_overwrite_len + 1213: 000000000008ec30 115 FUNC GLOBAL DEFAULT 11 g_variant_type_string_is_valid + 1214: 000000000006d650 83 FUNC GLOBAL DEFAULT 11 g_string_equal + 1215: 000000000006a4b0 5 FUNC GLOBAL DEFAULT 11 g_freopen + 1216: 0000000000055290 19 FUNC GLOBAL DEFAULT 11 g_node_new + 1217: 00000000000592f0 75 FUNC GLOBAL DEFAULT 11 g_option_group_set_translation_domain + 1218: 000000000006a760 68 FUNC GLOBAL DEFAULT 11 g_strdup + 1219: 0000000000067570 53 FUNC GLOBAL DEFAULT 11 g_sequence_iter_prev + 1220: 000000000005e990 89 FUNC GLOBAL DEFAULT 11 g_random_int_range + 1221: 0000000000026270 61 FUNC GLOBAL DEFAULT 11 g_bytes_get_data + 1222: 0000000000055330 91 FUNC GLOBAL DEFAULT 11 g_node_destroy + 1223: 0000000000088e40 38 FUNC GLOBAL DEFAULT 11 g_variant_parse_error_quark + 1224: 000000000004b0a0 209 FUNC GLOBAL DEFAULT 11 g_source_remove_unix_fd + 1225: 0000000000032950 1743 FUNC GLOBAL DEFAULT 11 g_date_set_parse + 1226: 000000000003ae90 53 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_get_hash_table + 1227: 0000000000049ef0 162 FUNC GLOBAL DEFAULT 11 g_source_set_funcs + 1228: 0000000000081330 86 FUNC GLOBAL DEFAULT 11 g_variant_get_double + 1229: 000000000004a030 53 FUNC GLOBAL DEFAULT 11 g_source_get_priority + 1230: 0000000000059430 75 FUNC GLOBAL DEFAULT 11 g_option_context_set_translation_domain + 1231: 0000000000020240 40 FUNC GLOBAL DEFAULT 11 g_async_queue_timeout_pop_unlocked + 1232: 000000000001d3a0 285 FUNC GLOBAL DEFAULT 11 g_relation_select + 1233: 00000000000517a0 78 FUNC GLOBAL DEFAULT 11 g_malloc0 + 1234: 000000000006b2e0 23 FUNC GLOBAL DEFAULT 11 g_ascii_tolower + 1235: 0000000000078700 4 FUNC GLOBAL DEFAULT 11 g_trash_stack_peek + 1236: 000000000006db20 65 FUNC GLOBAL DEFAULT 11 g_string_new_len + 1237: 0000000000076ba0 28 FUNC GLOBAL DEFAULT 11 g_time_zone_new_local + 1238: 000000000005d790 53 FUNC GLOBAL DEFAULT 11 g_queue_peek_tail_link + 1239: 000000000001c230 2 FUNC GLOBAL DEFAULT 11 g_node_push_allocator + 1240: 0000000000020820 4 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_get + 1241: 000000000004db30 53 FUNC GLOBAL DEFAULT 11 g_mapped_file_ref + 1242: 0000000000035af0 85 FUNC GLOBAL DEFAULT 11 g_date_time_get_day_of_week + 1243: 000000000004c5f0 105 FUNC GLOBAL DEFAULT 11 g_main_loop_ref + 1244: 00000000000315d0 127 FUNC GLOBAL DEFAULT 11 g_date_subtract_days + 1245: 000000000006f6d0 12 FUNC GLOBAL DEFAULT 11 g_test_rand_double + 1246: 0000000000047ef0 13 FUNC GLOBAL DEFAULT 11 g_list_free_1 + 1247: 0000000000030130 82 FUNC GLOBAL DEFAULT 11 g_datalist_set_flags + 1248: 0000000000069fd0 9 FUNC GLOBAL DEFAULT 11 g_slist_copy + 1249: 0000000000030d80 237 FUNC GLOBAL DEFAULT 11 g_date_set_month + 1250: 00000000000552b0 115 FUNC GLOBAL DEFAULT 11 g_node_unlink + 1251: 0000000000091770 839 FUNC GLOBAL DEFAULT 11 g_io_channel_new_file + 1252: 0000000000062590 623 FUNC GLOBAL DEFAULT 11 g_scanner_new + 1253: 000000000001db30 28 FUNC GLOBAL DEFAULT 11 g_thread_create + 1254: 0000000000313b48 8 OBJECT GLOBAL DEFAULT 20 g_ascii_table + 1255: 00000000000207b0 7 FUNC GLOBAL DEFAULT 11 g_atomic_int_add + 1256: 000000000006dbb0 209 FUNC GLOBAL DEFAULT 11 g_string_insert_c + 1257: 000000000003a2b0 3 FUNC GLOBAL DEFAULT 11 g_direct_hash + 1258: 0000000000059220 42 FUNC GLOBAL DEFAULT 11 g_option_group_set_parse_hooks + 1259: 0000000000314980 48 OBJECT GLOBAL DEFAULT 24 g_idle_funcs + 1260: 000000000001f880 85 FUNC GLOBAL DEFAULT 11 g_ptr_array_free + 1261: 0000000000060060 18 FUNC GLOBAL DEFAULT 11 g_match_info_free + 1262: 0000000000051aa0 41 FUNC GLOBAL DEFAULT 11 g_try_realloc_n + 1263: 000000000007f690 124 FUNC GLOBAL DEFAULT 11 g_get_host_name + 1264: 0000000000020790 10 FUNC GLOBAL DEFAULT 11 g_atomic_int_dec_and_test + 1265: 000000000001d8c0 27 FUNC GLOBAL DEFAULT 11 g_mutex_new + 1266: 0000000000026000 266 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_icon + 1267: 000000000001dfd0 187 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_writer_lock + 1268: 0000000000079550 65 FUNC GLOBAL DEFAULT 11 g_tree_lookup + 1269: 0000000000036da0 21 FUNC GLOBAL DEFAULT 11 g_date_time_to_timezone + 1270: 00000000000385d0 26 FUNC GLOBAL DEFAULT 11 g_file_error_from_errno + 1271: 0000000000062c30 543 FUNC GLOBAL DEFAULT 11 g_scanner_lookup_symbol + 1272: 000000000008e910 338 FUNC GLOBAL DEFAULT 11 g_variant_type_info_unref + 1273: 000000000001fd00 53 FUNC GLOBAL DEFAULT 11 g_async_queue_ref + 1274: 0000000000067690 165 FUNC GLOBAL DEFAULT 11 g_sequence_swap + 1275: 0000000000048280 179 FUNC GLOBAL DEFAULT 11 g_list_delete_link + 1276: 000000000007e9f0 10 FUNC GLOBAL DEFAULT 11 g_uri_unescape_string + 1277: 000000000006a1a0 30 FUNC GLOBAL DEFAULT 11 g_slist_last + 1278: 0000000000067430 118 FUNC GLOBAL DEFAULT 11 g_sequence_iter_is_end + 1279: 0000000000039400 126 FUNC GLOBAL DEFAULT 11 g_dir_make_tmp + 1280: 000000000007f120 18 FUNC GLOBAL DEFAULT 11 g_get_real_name + 1281: 000000000008e460 120 FUNC GLOBAL DEFAULT 11 g_variant_type_info_ref + 1282: 000000000002d860 831 FUNC GLOBAL DEFAULT 11 g_convert_with_iconv + 1283: 0000000000083740 89 FUNC GLOBAL DEFAULT 11 g_variant_iter_free + 1284: 000000000001f030 38 FUNC GLOBAL DEFAULT 11 g_ptr_array_new_full + 1285: 000000000005d110 56 FUNC GLOBAL DEFAULT 11 g_queue_is_empty + 1286: 00000000000305c0 12 FUNC GLOBAL DEFAULT 11 g_date_valid_weekday + 1287: 00000000000811f0 73 FUNC GLOBAL DEFAULT 11 g_variant_get_uint32 + 1288: 0000000000079360 53 FUNC GLOBAL DEFAULT 11 g_tree_new_with_data + 1289: 000000000006f740 53 FUNC GLOBAL DEFAULT 11 g_test_timer_elapsed + 1290: 0000000000046b80 137 FUNC GLOBAL DEFAULT 11 g_key_file_set_double + 1291: 000000000002fa90 175 FUNC GLOBAL DEFAULT 11 g_datalist_get_data + 1292: 0000000000059fe0 8092 FUNC GLOBAL DEFAULT 11 g_pattern_match + 1293: 0000000000091090 2 FUNC GLOBAL DEFAULT 11 g_cond_clear + 1294: 000000000008e3b0 20 FUNC GLOBAL DEFAULT 11 g_variant_type_info_element + 1295: 00000000000905b0 57 FUNC GLOBAL DEFAULT 11 g_unix_fd_source_new + 1296: 0000000000060e40 37 FUNC GLOBAL DEFAULT 11 g_regex_match + 1297: 0000000000068b90 115 FUNC GLOBAL DEFAULT 11 g_slice_get_config + 1298: 0000000000021480 11 FUNC GLOBAL DEFAULT 11 g_bit_trylock + 1299: 000000000007fd50 822 FUNC GLOBAL DEFAULT 11 g_format_size_full + 1300: 0000000000080af0 78 FUNC GLOBAL DEFAULT 11 g_variant_new_object_path + 1301: 0000000000020550 105 FUNC GLOBAL DEFAULT 11 g_async_queue_remove_unlocked + 1302: 000000000005ead0 65 FUNC GLOBAL DEFAULT 11 g_random_set_seed + 1303: 00000000000484e0 34 FUNC GLOBAL DEFAULT 11 g_list_find + 1304: 0000000000053d90 102 FUNC GLOBAL DEFAULT 11 g_log_set_writer_func + 1305: 000000000001dad0 83 FUNC GLOBAL DEFAULT 11 g_thread_create_full + 1306: 000000000007f090 71 FUNC GLOBAL DEFAULT 11 g_bit_nth_msf + 1307: 0000000000073290 235 FUNC GLOBAL DEFAULT 11 g_test_build_filename + 1308: 000000000008f1e0 191 FUNC GLOBAL DEFAULT 11 g_variant_type_equal + 1309: 000000000007d3e0 104 FUNC GLOBAL DEFAULT 11 g_unichar_break_type + 1310: 000000000004f420 96 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_push + 1311: 0000000000090390 217 FUNC GLOBAL DEFAULT 11 g_unix_open_pipe + 1312: 000000000001dbf0 59 FUNC GLOBAL DEFAULT 11 g_static_mutex_free + 1313: 000000000006bc80 144 FUNC GLOBAL DEFAULT 11 g_strchug + 1314: 00000000000833d0 593 FUNC GLOBAL DEFAULT 11 g_variant_compare + 1315: 000000000001fd70 153 FUNC GLOBAL DEFAULT 11 g_async_queue_unref + 1316: 000000000008b520 5 FUNC GLOBAL DEFAULT 11 g_variant_parser_get_error_quark + 1317: 000000000007a350 324 FUNC GLOBAL DEFAULT 11 g_unichar_toupper + 1318: 000000000007ddd0 469 FUNC GLOBAL DEFAULT 11 g_unicode_canonical_ordering + 1319: 0000000000049890 298 FUNC GLOBAL DEFAULT 11 g_main_context_new + 1320: 00000000000209b0 458 FUNC GLOBAL DEFAULT 11 g_on_error_query + 1321: 0000000000073380 126 FUNC GLOBAL DEFAULT 11 g_test_get_dir + 1322: 0000000000031b30 333 FUNC GLOBAL DEFAULT 11 g_date_subtract_months + 1323: 0000000000021fd0 38 FUNC GLOBAL DEFAULT 11 g_bookmark_file_error_quark + 1324: 0000000000037860 243 FUNC GLOBAL DEFAULT 11 g_error_new + 1325: 00000000000539a0 8 FUNC GLOBAL DEFAULT 11 g_log_set_handler + 1326: 000000000003bbc0 13 FUNC GLOBAL DEFAULT 11 g_int64_equal + 1327: 000000000007a000 115 FUNC GLOBAL DEFAULT 11 g_unichar_isupper + 1328: 000000000005d2b0 105 FUNC GLOBAL DEFAULT 11 g_queue_find_custom + 1329: 00000000000628d0 502 FUNC GLOBAL DEFAULT 11 g_scanner_scope_add_symbol + 1330: 000000000004c4b0 74 FUNC GLOBAL DEFAULT 11 g_main_context_pending + 1331: 00000000000814e0 80 FUNC GLOBAL DEFAULT 11 g_variant_get_maybe + 1332: 0000000000070250 35 FUNC GLOBAL DEFAULT 11 g_test_trap_reached_timeout + 1333: 000000000006c410 437 FUNC GLOBAL DEFAULT 11 g_strjoin + 1334: 0000000000048620 77 FUNC GLOBAL DEFAULT 11 g_list_append + 1335: 0000000000051750 78 FUNC GLOBAL DEFAULT 11 g_malloc + 1336: 000000000006b250 131 FUNC GLOBAL DEFAULT 11 g_strreverse + 1337: 000000000004c820 131 FUNC GLOBAL DEFAULT 11 g_main_loop_quit + 1338: 000000000007c080 718 FUNC GLOBAL DEFAULT 11 g_utf8_to_ucs4 + 1339: 000000000008e420 57 FUNC GLOBAL DEFAULT 11 g_variant_type_info_member_info + 1340: 0000000000030520 42 FUNC GLOBAL DEFAULT 11 g_date_free + 1341: 0000000000055ed0 151 FUNC GLOBAL DEFAULT 11 g_node_find_child + 1342: 00000000000611c0 1108 FUNC GLOBAL DEFAULT 11 g_regex_split_full + 1343: 000000000005f4d0 38 FUNC GLOBAL DEFAULT 11 g_regex_error_quark + 1344: 000000000006d740 107 FUNC GLOBAL DEFAULT 11 g_string_set_size + 1345: 000000000007ea90 119 FUNC GLOBAL DEFAULT 11 g_uri_escape_string + 1346: 0000000000032110 500 FUNC GLOBAL DEFAULT 11 g_date_compare + 1347: 000000000002dba0 323 FUNC GLOBAL DEFAULT 11 g_convert + 1348: 0000000000037c40 65 FUNC GLOBAL DEFAULT 11 g_set_error_literal + 1349: 000000000001c1c0 2 FUNC GLOBAL DEFAULT 11 g_mem_chunk_print + 1350: 000000000001c570 201 FUNC GLOBAL DEFAULT 11 g_cache_remove + 1351: 0000000000049a90 161 FUNC GLOBAL DEFAULT 11 g_source_new + 1352: 000000000002e890 163 FUNC GLOBAL DEFAULT 11 g_filename_from_utf8 + 1353: 0000000000033a00 43 FUNC GLOBAL DEFAULT 11 g_date_time_new_now_local + 1354: 00000000000325c0 121 FUNC GLOBAL DEFAULT 11 g_date_order + 1355: 0000000000046450 116 FUNC GLOBAL DEFAULT 11 g_key_file_set_int64 + 1356: 000000000007f900 63 FUNC GLOBAL DEFAULT 11 g_get_user_config_dir + 1357: 0000000000020770 6 FUNC GLOBAL DEFAULT 11 g_atomic_int_set + 1358: 0000000000022fb0 113 FUNC GLOBAL DEFAULT 11 g_bookmark_file_has_item + 1359: 000000000006a870 105 FUNC GLOBAL DEFAULT 11 g_stpcpy + 1360: 000000000001d9b0 6 FUNC GLOBAL DEFAULT 11 g_thread_get_initialized + 1361: 0000000000070280 32 FUNC GLOBAL DEFAULT 11 g_test_log_buffer_new + 1362: 000000000005de00 135 FUNC GLOBAL DEFAULT 11 g_queue_remove_all + 1363: 0000000000090120 132 FUNC GLOBAL DEFAULT 11 g_vsnprintf + 1364: 000000000007ee60 481 FUNC GLOBAL DEFAULT 11 g_find_program_in_path + 1365: 000000000004db70 70 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_bytes + 1366: 000000000002f110 133 FUNC GLOBAL DEFAULT 11 g_dataset_destroy + 1367: 0000000000049ce0 177 FUNC GLOBAL DEFAULT 11 g_source_remove_poll + 1368: 0000000000072ff0 666 FUNC GLOBAL DEFAULT 11 g_test_trap_assertions + 1369: 000000000007b510 104 FUNC GLOBAL DEFAULT 11 g_unichar_get_mirror_char + 1370: 0000000000072740 124 FUNC GLOBAL DEFAULT 11 g_assertion_message_expr + 1371: 000000000007f7c0 100 FUNC GLOBAL DEFAULT 11 g_set_application_name + 1372: 0000000000074980 59 FUNC GLOBAL DEFAULT 11 g_timer_start + 1373: 000000000002ccd0 664 FUNC GLOBAL DEFAULT 11 g_checksum_get_digest + 1374: 0000000000090690 20 FUNC GLOBAL DEFAULT 11 g_unix_fd_add + 1375: 000000000001dd40 74 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_free + 1376: 000000000001c090 50 FUNC GLOBAL DEFAULT 11 g_mem_chunk_destroy + 1377: 000000000002c4b0 595 FUNC GLOBAL DEFAULT 11 g_checksum_reset + 1378: 000000000006d9f0 18 FUNC GLOBAL DEFAULT 11 g_string_append + 1379: 000000000008f530 78 FUNC GLOBAL DEFAULT 11 g_variant_type_n_items + 1380: 000000000008ffe0 124 FUNC GLOBAL DEFAULT 11 g_vsprintf + 1381: 0000000000056120 69 FUNC GLOBAL DEFAULT 11 g_node_last_sibling + 1382: 0000000000065e10 402 FUNC GLOBAL DEFAULT 11 g_sequence_range_get_midpoint + 1383: 00000000000214f0 186 FUNC GLOBAL DEFAULT 11 g_pointer_bit_lock + 1384: 0000000000044600 75 FUNC GLOBAL DEFAULT 11 g_key_file_unref + 1385: 000000000006fe30 130 FUNC GLOBAL DEFAULT 11 g_test_add_data_func + 1386: 000000000001cf80 149 FUNC GLOBAL DEFAULT 11 g_relation_destroy + 1387: 000000000003b580 59 FUNC GLOBAL DEFAULT 11 g_hash_table_destroy + 1388: 000000000001e090 147 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_writer_trylock + 1389: 0000000000034120 17 FUNC GLOBAL DEFAULT 11 g_date_time_add_hours + 1390: 000000000004f410 5 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_user_data + 1391: 000000000003c780 126 FUNC GLOBAL DEFAULT 11 g_hook_list_clear + 1392: 0000000000060020 52 FUNC GLOBAL DEFAULT 11 g_match_info_unref + 1393: 00000000003149c0 48 OBJECT GLOBAL DEFAULT 24 g_child_watch_funcs + 1394: 000000000003c6e0 153 FUNC GLOBAL DEFAULT 11 g_hook_ref + 1395: 000000000005db40 91 FUNC GLOBAL DEFAULT 11 g_queue_pop_nth_link + 1396: 0000000000055710 32 FUNC GLOBAL DEFAULT 11 g_node_depth + 1397: 0000000000067380 169 FUNC GLOBAL DEFAULT 11 g_sequence_move + 1398: 000000000003d030 135 FUNC GLOBAL DEFAULT 11 g_hook_find_func + 1399: 000000000008f160 115 FUNC GLOBAL DEFAULT 11 g_variant_type_hash + 1400: 0000000000037770 15 FUNC GLOBAL DEFAULT 11 g_get_environ + 1401: 000000000003bbd0 4 FUNC GLOBAL DEFAULT 11 g_int64_hash + 1402: 000000000001fa40 62 FUNC GLOBAL DEFAULT 11 g_byte_array_free_to_bytes + 1403: 000000000007f740 56 FUNC GLOBAL DEFAULT 11 g_set_prgname + 1404: 0000000000063110 53 FUNC GLOBAL DEFAULT 11 g_scanner_cur_position + 1405: 0000000000314a40 48 OBJECT GLOBAL DEFAULT 24 g_unix_signal_funcs + 1406: 000000000003bf90 193 FUNC GLOBAL DEFAULT 11 g_hmac_get_digest + 1407: 000000000001d090 416 FUNC GLOBAL DEFAULT 11 g_relation_insert + 1408: 000000000001fb90 5 FUNC GLOBAL DEFAULT 11 g_byte_array_sort + 1409: 00000000000264b0 137 FUNC GLOBAL DEFAULT 11 g_bytes_equal + 1410: 000000000006a3c0 79 FUNC GLOBAL DEFAULT 11 g_open + 1411: 0000000000093920 239 FUNC GLOBAL DEFAULT 11 g_spawn_check_exit_status + 1412: 00000000000246a0 189 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_added + 1413: 000000000003c460 186 FUNC GLOBAL DEFAULT 11 g_hook_free + 1414: 0000000000052fe0 172 FUNC GLOBAL DEFAULT 11 g_log + 1415: 000000000005d520 99 FUNC GLOBAL DEFAULT 11 g_queue_copy + 1416: 0000000000033b40 49 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_timeval_utc + 1417: 000000000008f110 65 FUNC GLOBAL DEFAULT 11 g_variant_type_is_variant + 1418: 000000000002c490 27 FUNC GLOBAL DEFAULT 11 g_checksum_type_get_length + 1419: 000000000006a930 182 FUNC GLOBAL DEFAULT 11 g_strdup_printf + 1420: 0000000000048720 30 FUNC GLOBAL DEFAULT 11 g_list_first + 1421: 000000000001f990 16 FUNC GLOBAL DEFAULT 11 g_byte_array_new + 1422: 000000000001e890 137 FUNC GLOBAL DEFAULT 11 g_array_append_vals + 1423: 000000000003ca00 151 FUNC GLOBAL DEFAULT 11 g_hook_first_valid + 1424: 000000000008e330 54 FUNC GLOBAL DEFAULT 11 g_variant_type_info_get_type_string + 1425: 000000000008fb50 61 FUNC GLOBAL DEFAULT 11 glib_check_version + 1426: 00000000000872b0 395 FUNC GLOBAL DEFAULT 11 g_variant_new_fixed_array + 1427: 0000000000069f00 194 FUNC GLOBAL DEFAULT 11 g_slist_copy_deep + 1428: 000000000008f0c0 65 FUNC GLOBAL DEFAULT 11 g_variant_type_is_dict_entry + 1429: 0000000000030b70 214 FUNC GLOBAL DEFAULT 11 g_date_new_dmy + 1430: 0000000000074ce0 1305 FUNC GLOBAL DEFAULT 11 g_time_val_from_iso8601 + 1431: 000000000004c8b0 105 FUNC GLOBAL DEFAULT 11 g_main_loop_is_running + 1432: 000000000001f8e0 160 FUNC GLOBAL DEFAULT 11 g_ptr_array_find_with_equal_func + 1433: 000000000004ae80 78 FUNC GLOBAL DEFAULT 11 g_source_remove + 1434: 0000000000052690 56 FUNC GLOBAL DEFAULT 11 g_test_log_set_fatal_handler + 1435: 000000000005c2a0 59 FUNC GLOBAL DEFAULT 11 g_pattern_spec_free + 1436: 000000000006ee10 38 FUNC GLOBAL DEFAULT 11 g_strcmp0 + 1437: 0000000000067260 103 FUNC GLOBAL DEFAULT 11 g_sequence_sort + 1438: 0000000000313ba0 8 OBJECT GLOBAL DEFAULT 20 g_utf8_skip + 1439: 0000000000066f60 153 FUNC GLOBAL DEFAULT 11 g_sequence_set + 1440: 0000000000072ef0 255 FUNC GLOBAL DEFAULT 11 g_assertion_message_error + 1441: 000000000001d9c0 2 FUNC GLOBAL DEFAULT 11 g_thread_init_glib + 1442: 000000000001f9a0 128 FUNC GLOBAL DEFAULT 11 g_byte_array_new_take + 1443: 00000000000747a0 7 FUNC GLOBAL DEFAULT 11 g_thread_pool_get_num_unused_threads + 1444: 0000000000051880 26 FUNC GLOBAL DEFAULT 11 g_clear_pointer + 1445: 000000000001c880 91 FUNC GLOBAL DEFAULT 11 g_completion_clear_items + 1446: 000000000004c500 74 FUNC GLOBAL DEFAULT 11 g_main_context_iteration + 1447: 000000000001d9e0 234 FUNC GLOBAL DEFAULT 11 g_thread_foreach + 1448: 000000000007f940 184 FUNC GLOBAL DEFAULT 11 g_get_user_cache_dir + 1449: 0000000000314c20 48 OBJECT GLOBAL DEFAULT 24 g_io_watch_funcs + 1450: 00000000000449f0 354 FUNC GLOBAL DEFAULT 11 g_key_file_get_groups + 1451: 0000000000081290 74 FUNC GLOBAL DEFAULT 11 g_variant_get_uint64 + 1452: 0000000000040db0 526 FUNC GLOBAL DEFAULT 11 g_io_channel_read_unichar + 1453: 0000000000073b00 31 FUNC GLOBAL DEFAULT 11 g_get_num_processors + 1454: 000000000005c4a0 7 FUNC GLOBAL DEFAULT 11 g_poll + 1455: 000000000008f060 81 FUNC GLOBAL DEFAULT 11 g_variant_type_is_tuple + 1456: 0000000000084ae0 795 FUNC GLOBAL DEFAULT 11 g_variant_format_string_scan + 1457: 000000000003a090 226 FUNC GLOBAL DEFAULT 11 g_dpgettext2 + 1458: 0000000000039480 27 FUNC GLOBAL DEFAULT 11 g_build_pathv + 1459: 00000000000406f0 582 FUNC GLOBAL DEFAULT 11 g_io_channel_read_to_end + 1460: 00000000000792a0 127 FUNC GLOBAL DEFAULT 11 g_tree_new_full + 1461: 00000000000812e0 73 FUNC GLOBAL DEFAULT 11 g_variant_get_handle + 1462: 000000000006c8b0 155 FUNC GLOBAL DEFAULT 11 g_str_has_suffix + 1463: 0000000000055a50 214 FUNC GLOBAL DEFAULT 11 g_node_find + 1464: 0000000000067140 281 FUNC GLOBAL DEFAULT 11 g_sequence_sort_iter + 1465: 00000000003146c0 4 OBJECT GLOBAL DEFAULT 24 g_threads_got_initialized + 1466: 0000000000087a30 105 FUNC GLOBAL DEFAULT 11 g_variant_take_ref + 1467: 00000000000555e0 63 FUNC GLOBAL DEFAULT 11 g_node_prepend + 1468: 0000000000049a50 49 FUNC GLOBAL DEFAULT 11 g_main_context_ref_thread_default + 1469: 00000000000582d0 3146 FUNC GLOBAL DEFAULT 11 g_option_context_parse + 1470: 000000000003b5c0 139 FUNC GLOBAL DEFAULT 11 g_hash_table_steal_all + 1471: 000000000004ab40 42 FUNC GLOBAL DEFAULT 11 g_source_unref + 1472: 00000000000396c0 271 FUNC GLOBAL DEFAULT 11 g_file_read_link + 1473: 0000000000049fa0 141 FUNC GLOBAL DEFAULT 11 g_source_set_priority + 1474: 00000000000525e0 106 FUNC GLOBAL DEFAULT 11 g_log_set_fatal_mask + 1475: 0000000000075ee0 3234 FUNC GLOBAL DEFAULT 11 g_time_zone_new + 1476: 000000000001f270 325 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_range + 1477: 000000000004d4a0 163 FUNC GLOBAL DEFAULT 11 g_child_watch_source_new + 1478: 0000000000044180 751 FUNC GLOBAL DEFAULT 11 g_key_file_load_from_dirs + 1479: 000000000006a340 20 FUNC GLOBAL DEFAULT 11 g_slist_free_full + 1480: 0000000000090940 83 FUNC GLOBAL DEFAULT 11 g_rw_lock_writer_trylock + 1481: 0000000000075200 214 FUNC GLOBAL DEFAULT 11 g_time_val_to_iso8601 + 1482: 000000000003ea20 53 FUNC GLOBAL DEFAULT 11 g_io_channel_get_close_on_unref + 1483: 0000000000038b60 808 FUNC GLOBAL DEFAULT 11 g_file_get_contents + 1484: 0000000000039a40 257 FUNC GLOBAL DEFAULT 11 g_path_get_basename + 1485: 000000000005d390 82 FUNC GLOBAL DEFAULT 11 g_queue_push_head + 1486: 0000000000046650 116 FUNC GLOBAL DEFAULT 11 g_key_file_set_uint64 + 1487: 000000000007c4a0 606 FUNC GLOBAL DEFAULT 11 g_utf16_to_utf8 + 1488: 0000000000072db0 311 FUNC GLOBAL DEFAULT 11 g_assertion_message_cmpstr + 1489: 000000000001f480 116 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove + 1490: 00000000000595a0 102 FUNC GLOBAL DEFAULT 11 g_option_context_parse_strv + 1491: 0000000000084aa0 56 FUNC GLOBAL DEFAULT 11 g_variant_dict_ref + 1492: 0000000000056880 38 FUNC GLOBAL DEFAULT 11 g_option_error_quark + 1493: 0000000000068b00 130 FUNC GLOBAL DEFAULT 11 g_slice_set_config + 1494: 000000000006a080 34 FUNC GLOBAL DEFAULT 11 g_slist_find + 1495: 00000000000796c0 162 FUNC GLOBAL DEFAULT 11 g_tree_traverse + 1496: 00000000000385a0 38 FUNC GLOBAL DEFAULT 11 g_file_error_quark + 1497: 000000000006d540 82 FUNC GLOBAL DEFAULT 11 g_string_sized_new + 1498: 0000000000041a80 390 FUNC GLOBAL DEFAULT 11 g_io_channel_write_unichar + 1499: 0000000000030b00 101 FUNC GLOBAL DEFAULT 11 g_date_valid_dmy + 1500: 0000000000067530 53 FUNC GLOBAL DEFAULT 11 g_sequence_iter_next + 1501: 000000000007bb10 90 FUNC GLOBAL DEFAULT 11 g_utf8_strncpy + 1502: 0000000000081570 430 FUNC GLOBAL DEFAULT 11 g_variant_new_array + 1503: 0000000000081390 321 FUNC GLOBAL DEFAULT 11 g_variant_new_maybe + 1504: 000000000006ad70 331 FUNC GLOBAL DEFAULT 11 g_strerror + 1505: 00000000000739e0 139 FUNC GLOBAL DEFAULT 11 g_thread_join + 1506: 0000000000026b80 321 FUNC GLOBAL DEFAULT 11 g_get_charset + 1507: 0000000000083a20 67 FUNC GLOBAL DEFAULT 11 g_variant_builder_ref + 1508: 0000000000055780 74 FUNC GLOBAL DEFAULT 11 g_node_max_height + 1509: 000000000001fd40 42 FUNC GLOBAL DEFAULT 11 g_async_queue_ref_unlocked + 1510: 0000000000059560 53 FUNC GLOBAL DEFAULT 11 g_option_context_get_description + 1511: 00000000000399f0 70 FUNC GLOBAL DEFAULT 11 g_basename + 1512: 000000000007f140 105 FUNC GLOBAL DEFAULT 11 g_get_home_dir + 1513: 0000000000079320 53 FUNC GLOBAL DEFAULT 11 g_tree_new + 1514: 000000000006b1c0 135 FUNC GLOBAL DEFAULT 11 g_strup + 1515: 0000000000086a40 118 FUNC GLOBAL DEFAULT 11 g_variant_dict_insert_value + 1516: 0000000000074aa0 163 FUNC GLOBAL DEFAULT 11 g_timer_elapsed + 1517: 0000000000031d30 206 FUNC GLOBAL DEFAULT 11 g_date_subtract_years + 1518: 000000000002cf70 176 FUNC GLOBAL DEFAULT 11 g_compute_checksum_for_data + 1519: 0000000000090ef0 50 FUNC GLOBAL DEFAULT 11 g_mutex_clear + 1520: 0000000000068c10 283 FUNC GLOBAL DEFAULT 11 g_slice_get_config_state + 1521: 000000000002fc90 197 FUNC GLOBAL DEFAULT 11 g_dataset_foreach + 1522: 0000000000050f50 182 FUNC GLOBAL DEFAULT 11 g_markup_printf_escaped + 1523: 000000000004cc50 114 FUNC GLOBAL DEFAULT 11 g_main_context_get_poll_func + 1524: 000000000001c0d0 53 FUNC GLOBAL DEFAULT 11 g_mem_chunk_alloc + 1525: 000000000007b150 272 FUNC GLOBAL DEFAULT 11 g_unichar_xdigit_value + 1526: 00000000000862b0 198 FUNC GLOBAL DEFAULT 11 g_variant_builder_add + 1527: 00000000000250f0 242 FUNC GLOBAL DEFAULT 11 g_bookmark_file_has_application + 1528: 0000000000033a60 79 FUNC GLOBAL DEFAULT 11 g_date_time_new_from_unix_local + 1529: 000000000001c200 2 FUNC GLOBAL DEFAULT 11 g_list_pop_allocator + 1530: 000000000003e620 84 FUNC GLOBAL DEFAULT 11 g_io_channel_get_buffer_condition + 1531: 000000000006bfc0 518 FUNC GLOBAL DEFAULT 11 g_strsplit_set + 1532: 0000000000053870 301 FUNC GLOBAL DEFAULT 11 g_log_set_handler_full + 1533: 00000000000360c0 73 FUNC GLOBAL DEFAULT 11 g_date_time_get_utc_offset + 1534: 0000000000024ca0 317 FUNC GLOBAL DEFAULT 11 g_bookmark_file_remove_group + 1535: 000000000002fb40 328 FUNC GLOBAL DEFAULT 11 g_datalist_foreach + 1536: 000000000008f900 97 FUNC GLOBAL DEFAULT 11 g_variant_type_new_array + 1537: 000000000008f970 97 FUNC GLOBAL DEFAULT 11 g_variant_type_new_maybe + 1538: 000000000003b1c0 391 FUNC GLOBAL DEFAULT 11 g_hash_table_lookup_extended + 1539: 000000000005d250 20 FUNC GLOBAL DEFAULT 11 g_queue_free_full + 1540: 000000000003bb60 40 FUNC GLOBAL DEFAULT 11 g_str_hash + 1541: 0000000000038420 370 FUNC GLOBAL DEFAULT 11 g_file_test + 1542: 0000000000048740 32 FUNC GLOBAL DEFAULT 11 g_list_length + 1543: 000000000006d610 62 FUNC GLOBAL DEFAULT 11 g_string_free_to_bytes + 1544: 000000000008b900 196 FUNC GLOBAL DEFAULT 11 g_variant_builder_add_parsed + 1545: 00000000000305d0 8 FUNC GLOBAL DEFAULT 11 g_date_valid_julian + 1546: 000000000007bc60 90 FUNC GLOBAL DEFAULT 11 g_utf8_strchr + 1547: 000000000003b730 194 FUNC GLOBAL DEFAULT 11 g_hash_table_foreach + 1548: 0000000000046870 297 FUNC GLOBAL DEFAULT 11 g_key_file_set_integer_list + 1549: 0000000000033b80 878 FUNC GLOBAL DEFAULT 11 g_date_time_new + 1550: 000000000006c7a0 261 FUNC GLOBAL DEFAULT 11 g_strrstr_len + 1551: 000000000002c740 99 FUNC GLOBAL DEFAULT 11 g_checksum_copy + 1552: 0000000000086cb0 83 FUNC GLOBAL DEFAULT 11 g_variant_dict_clear + 1553: 0000000000046250 116 FUNC GLOBAL DEFAULT 11 g_key_file_set_integer + 1554: 00000000000793e0 75 FUNC GLOBAL DEFAULT 11 g_tree_unref + 1555: 0000000000058f90 5 FUNC GLOBAL DEFAULT 11 g_option_group_free + 1556: 0000000000069330 607 FUNC GLOBAL DEFAULT 11 g_slice_free1 + 1557: 000000000006dad0 76 FUNC GLOBAL DEFAULT 11 g_string_new + 1558: 0000000000087910 105 FUNC GLOBAL DEFAULT 11 g_variant_ref + 1559: 000000000001eee0 58 FUNC GLOBAL DEFAULT 11 g_array_sort + 1560: 000000000007bac0 70 FUNC GLOBAL DEFAULT 11 g_utf8_substring + 1561: 0000000000081a70 246 FUNC GLOBAL DEFAULT 11 g_variant_dup_bytestring_array + 1562: 000000000001dd90 42 FUNC GLOBAL DEFAULT 11 g_static_rw_lock_init + 1563: 0000000000085550 364 FUNC GLOBAL DEFAULT 11 g_variant_check_format_string + 1564: 0000000000069dd0 138 FUNC GLOBAL DEFAULT 11 g_slist_remove_link + 1565: 0000000000056420 131 FUNC GLOBAL DEFAULT 11 g_option_group_unref + 1566: 00000000000871b0 251 FUNC GLOBAL DEFAULT 11 g_variant_new_from_data + 1567: 000000000006a3b0 5 FUNC GLOBAL DEFAULT 11 g_chmod + 1568: 000000000005cf20 276 FUNC GLOBAL DEFAULT 11 g_intern_static_string + 1569: 0000000000079860 53 FUNC GLOBAL DEFAULT 11 g_tree_nnodes + 1570: 000000000003ad40 90 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_init + 1571: 000000000003d2b0 22 FUNC GLOBAL DEFAULT 11 g_hook_compare_ids + 1572: 000000000008f9e0 219 FUNC GLOBAL DEFAULT 11 g_variant_type_new_dict_entry + 1573: 000000000004a8d0 170 FUNC GLOBAL DEFAULT 11 g_source_attach + 1574: 0000000000020400 53 FUNC GLOBAL DEFAULT 11 g_async_queue_length_unlocked + 1575: 0000000000313b60 8 OBJECT GLOBAL DEFAULT 20 g_test_config_vars + 1576: 00000000000518c0 27 FUNC GLOBAL DEFAULT 11 g_try_malloc0 + 1577: 0000000000034ca0 99 FUNC GLOBAL DEFAULT 11 g_date_time_get_year + 1578: 0000000000070530 67 FUNC GLOBAL DEFAULT 11 g_test_log_msg_free + 1579: 000000000008d5f0 88 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_is_string + 1580: 0000000000090320 38 FUNC GLOBAL DEFAULT 11 g_unix_error_quark + 1581: 000000000004e2a0 38 FUNC GLOBAL DEFAULT 11 g_markup_error_quark + 1582: 00000000000908b0 131 FUNC GLOBAL DEFAULT 11 g_rw_lock_writer_lock + 1583: 000000000003af90 7 FUNC GLOBAL DEFAULT 11 g_hash_table_iter_steal + 1584: 000000000006e7c0 38 FUNC GLOBAL DEFAULT 11 g_string_vprintf + 1585: 0000000000061690 37 FUNC GLOBAL DEFAULT 11 g_regex_split + 1586: 0000000000038ed0 20 FUNC GLOBAL DEFAULT 11 g_mkstemp_full + 1587: 0000000000044690 384 FUNC GLOBAL DEFAULT 11 g_key_file_to_data + 1588: 00000000000460b0 414 FUNC GLOBAL DEFAULT 11 g_key_file_get_integer + 1589: 000000000007dfb0 241 FUNC GLOBAL DEFAULT 11 g_unicode_canonical_decomposition + 1590: 0000000000055670 145 FUNC GLOBAL DEFAULT 11 g_node_is_ancestor + 1591: 000000000001d920 23 FUNC GLOBAL DEFAULT 11 g_cond_free + 1592: 000000000004d120 18 FUNC GLOBAL DEFAULT 11 g_idle_add + 1593: 0000000000031c80 174 FUNC GLOBAL DEFAULT 11 g_date_add_years + 1594: 0000000000079c40 115 FUNC GLOBAL DEFAULT 11 g_unichar_isdigit + 1595: 00000000000800a0 423 FUNC GLOBAL DEFAULT 11 g_format_size_for_display + 1596: 000000000006b3b0 131 FUNC GLOBAL DEFAULT 11 g_ascii_strup + 1597: 000000000005ffb0 107 FUNC GLOBAL DEFAULT 11 g_regex_unref + 1598: 000000000007d510 593 FUNC GLOBAL DEFAULT 11 g_utf8_collate_key + 1599: 0000000000035fa0 103 FUNC GLOBAL DEFAULT 11 g_date_time_get_seconds + 1600: 00000000000207e0 20 FUNC GLOBAL DEFAULT 11 g_atomic_int_or + 1601: 0000000000087aa0 53 FUNC GLOBAL DEFAULT 11 g_variant_is_floating + 1602: 0000000000031230 140 FUNC GLOBAL DEFAULT 11 g_date_get_weekday + 1603: 000000000006a210 138 FUNC GLOBAL DEFAULT 11 g_slist_insert + 1604: 000000000007a8e0 306 FUNC GLOBAL DEFAULT 11 g_unichar_tolower + 1605: 000000000003a1c0 97 FUNC GLOBAL DEFAULT 11 g_dngettext + 1606: 000000000005cde0 308 FUNC GLOBAL DEFAULT 11 g_intern_string + 1607: 00000000000747d0 137 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_sort_function + 1608: 000000000004d000 69 FUNC GLOBAL DEFAULT 11 g_timeout_add_seconds + 1609: 000000000007b2d0 133 FUNC GLOBAL DEFAULT 11 g_utf8_strup + 1610: 00000000000449a0 75 FUNC GLOBAL DEFAULT 11 g_key_file_get_start_group + 1611: 0000000000020de0 353 FUNC GLOBAL DEFAULT 11 g_base64_encode_close + 1612: 0000000000066970 221 FUNC GLOBAL DEFAULT 11 g_sequence_insert_sorted_iter + 1613: 0000000000038e90 34 FUNC GLOBAL DEFAULT 11 g_mkdtemp_full + 1614: 00000000000305e0 150 FUNC GLOBAL DEFAULT 11 g_date_new_julian + 1615: 000000000004d050 39 FUNC GLOBAL DEFAULT 11 g_idle_source_new + 1616: 000000000001d5f0 113 FUNC GLOBAL DEFAULT 11 g_tuples_index + 1617: 000000000001c7d0 166 FUNC GLOBAL DEFAULT 11 g_completion_remove_items + 1618: 0000000000074930 31 FUNC GLOBAL DEFAULT 11 g_timer_new + 1619: 00000000000593c0 108 FUNC GLOBAL DEFAULT 11 g_option_context_set_translate_func + 1620: 000000000008ecc0 108 FUNC GLOBAL DEFAULT 11 g_variant_type_get_string_length + 1621: 000000000006e4f0 97 FUNC GLOBAL DEFAULT 11 g_string_ascii_down + 1622: 0000000000079d50 115 FUNC GLOBAL DEFAULT 11 g_unichar_islower + 1623: 0000000000020020 108 FUNC GLOBAL DEFAULT 11 g_async_queue_push_sorted + 1624: 000000000007afb0 167 FUNC GLOBAL DEFAULT 11 g_unichar_totitle + 1625: 00000000000339b0 72 FUNC GLOBAL DEFAULT 11 g_date_time_new_now + 1626: 0000000000045dc0 413 FUNC GLOBAL DEFAULT 11 g_key_file_get_boolean_list + 1627: 000000000002f790 163 FUNC GLOBAL DEFAULT 11 g_dataset_id_get_data + 1628: 0000000000066be0 163 FUNC GLOBAL DEFAULT 11 g_sequence_search + 1629: 000000000006f920 43 FUNC GLOBAL DEFAULT 11 g_test_incomplete + 1630: 0000000000037d00 31 FUNC GLOBAL DEFAULT 11 g_clear_error + 1631: 0000000000080430 243 FUNC GLOBAL DEFAULT 11 g_uuid_string_random + 1632: 000000000007a080 43 FUNC GLOBAL DEFAULT 11 g_unichar_istitle + 1633: 000000000004cdb0 66 FUNC GLOBAL DEFAULT 11 g_main_context_is_owner + 1634: 0000000000020090 99 FUNC GLOBAL DEFAULT 11 g_async_queue_pop + 1635: 000000000007a0b0 131 FUNC GLOBAL DEFAULT 11 g_unichar_isxdigit + 1636: 0000000000031390 147 FUNC GLOBAL DEFAULT 11 g_date_days_between + 1637: 0000000000030f40 205 FUNC GLOBAL DEFAULT 11 g_date_set_year + 1638: 00000000000748b0 102 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_max_idle_time + 1639: 000000000006f910 11 FUNC GLOBAL DEFAULT 11 g_test_fail + 1640: 0000000000064790 181 FUNC GLOBAL DEFAULT 11 g_scanner_input_file + 1641: 000000000004ce40 70 FUNC GLOBAL DEFAULT 11 g_timeout_source_new_seconds + 1642: 00000000000910e0 33 FUNC GLOBAL DEFAULT 11 g_cond_signal + 1643: 000000000006ad00 12 FUNC GLOBAL DEFAULT 11 g_ascii_dtostr + 1644: 00000000000747b0 23 FUNC GLOBAL DEFAULT 11 g_thread_pool_stop_unused_threads + 1645: 0000000000060c90 333 FUNC GLOBAL DEFAULT 11 g_regex_match_full + 1646: 00000000000469a0 465 FUNC GLOBAL DEFAULT 11 g_key_file_get_double + 1647: 0000000000087d80 128 FUNC GLOBAL DEFAULT 11 g_variant_store + 1648: 00000000000215b0 63 FUNC GLOBAL DEFAULT 11 g_pointer_bit_trylock + 1649: 0000000000073750 187 FUNC GLOBAL DEFAULT 11 g_once_init_leave + 1650: 0000000000034230 23 FUNC GLOBAL DEFAULT 11 g_date_time_equal + 1651: 0000000000034220 14 FUNC GLOBAL DEFAULT 11 g_date_time_hash + 1652: 0000000000047690 299 FUNC GLOBAL DEFAULT 11 g_key_file_save_to_file + 1653: 0000000000053e00 53 FUNC GLOBAL DEFAULT 11 g_log_writer_supports_color + 1654: 0000000000081100 74 FUNC GLOBAL DEFAULT 11 g_variant_get_int16 + 1655: 000000000007ce40 762 FUNC GLOBAL DEFAULT 11 g_utf8_validate + 1656: 000000000005e730 83 FUNC GLOBAL DEFAULT 11 g_rand_double + 1657: 000000000001e700 53 FUNC GLOBAL DEFAULT 11 g_array_new + 1658: 0000000000079bc0 115 FUNC GLOBAL DEFAULT 11 g_unichar_iscntrl + 1659: 000000000006e5d0 133 FUNC GLOBAL DEFAULT 11 g_string_down + 1660: 000000000001c250 523 FUNC GLOBAL DEFAULT 11 g_cache_new + 1661: 0000000000083fa0 318 FUNC GLOBAL DEFAULT 11 g_variant_builder_add_value + 1662: 000000000005dd50 56 FUNC GLOBAL DEFAULT 11 g_queue_index + 1663: 0000000000039b50 149 FUNC GLOBAL DEFAULT 11 g_path_get_dirname + 1664: 000000000008bf00 492 FUNC GLOBAL DEFAULT 11 g_variant_serialised_n_children + 1665: 0000000000081980 238 FUNC GLOBAL DEFAULT 11 g_variant_get_bytestring_array + 1666: 0000000000074260 414 FUNC GLOBAL DEFAULT 11 g_thread_pool_set_max_threads + 1667: 0000000000085dd0 155 FUNC GLOBAL DEFAULT 11 g_variant_new_va + 1668: 0000000000022370 724 FUNC GLOBAL DEFAULT 11 g_bookmark_file_load_from_data_dirs + 1669: 000000000006a800 60 FUNC GLOBAL DEFAULT 11 g_strndup + 1670: 000000000003c190 195 FUNC GLOBAL DEFAULT 11 g_compute_hmac_for_bytes + 1671: 0000000000039330 15 FUNC GLOBAL DEFAULT 11 g_mkstemp + 1672: 000000000005d270 53 FUNC GLOBAL DEFAULT 11 g_queue_find + 1673: 0000000000053ac0 705 FUNC GLOBAL DEFAULT 11 g_log_variant + 1674: 000000000003bb90 9 FUNC GLOBAL DEFAULT 11 g_direct_equal + 1675: 0000000000048510 108 FUNC GLOBAL DEFAULT 11 g_list_find_custom + 1676: 000000000006d6f0 69 FUNC GLOBAL DEFAULT 11 g_string_truncate + 1677: 000000000001c050 54 FUNC GLOBAL DEFAULT 11 g_mem_chunk_new + 1678: 0000000000039ef0 45 FUNC GLOBAL DEFAULT 11 g_strip_context + 1679: 0000000000080ab0 62 FUNC GLOBAL DEFAULT 11 g_variant_is_object_path + 1680: 00000000000395d0 19 FUNC GLOBAL DEFAULT 11 g_build_filenamev + 1681: 000000000008fe20 182 FUNC GLOBAL DEFAULT 11 g_printf + 1682: 000000000001ff20 96 FUNC GLOBAL DEFAULT 11 g_async_queue_push + 1683: 000000000005dc60 66 FUNC GLOBAL DEFAULT 11 g_queue_peek_head + 1684: 00000000000869b0 131 FUNC GLOBAL DEFAULT 11 g_variant_dict_contains + 1685: 000000000004bfc0 698 FUNC GLOBAL DEFAULT 11 g_main_context_dispatch + 1686: 0000000000049820 105 FUNC GLOBAL DEFAULT 11 g_main_context_ref + 1687: 000000000006e980 77 FUNC GLOBAL DEFAULT 11 g_string_chunk_new + 1688: 0000000000047ed0 18 FUNC GLOBAL DEFAULT 11 g_list_free + 1689: 0000000000025d30 53 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_size + 1690: 000000000001cc50 59 FUNC GLOBAL DEFAULT 11 g_completion_free + 1691: 000000000005d3f0 196 FUNC GLOBAL DEFAULT 11 g_queue_push_head_link + 1692: 000000000001fa20 16 FUNC GLOBAL DEFAULT 11 g_byte_array_sized_new + 1693: 000000000006dcd0 53 FUNC GLOBAL DEFAULT 11 g_string_prepend_c + 1694: 00000000000f47d0 4 OBJECT GLOBAL DEFAULT 13 glib_micro_version + 1695: 000000000004aed0 39 FUNC GLOBAL DEFAULT 11 g_source_remove_by_user_data + 1696: 00000000000395f0 194 FUNC GLOBAL DEFAULT 11 g_build_filename + 1697: 000000000005d850 106 FUNC GLOBAL DEFAULT 11 g_queue_pop_tail_link + 1698: 000000000004a070 164 FUNC GLOBAL DEFAULT 11 g_source_set_ready_time + 1699: 000000000003c920 50 FUNC GLOBAL DEFAULT 11 g_hook_prepend + 1700: 000000000002de90 1456 FUNC GLOBAL DEFAULT 11 g_convert_with_fallback + 1701: 000000000004a3f0 53 FUNC GLOBAL DEFAULT 11 g_source_get_name + 1702: 00000000000526d0 278 FUNC GLOBAL DEFAULT 11 g_log_structured_array + 1703: 000000000001dcb0 22 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_unlock + 1704: 0000000000066320 185 FUNC GLOBAL DEFAULT 11 g_sequence_remove + 1705: 00000000000261d0 15 FUNC GLOBAL DEFAULT 11 g_bytes_new_take + 1706: 0000000000060080 2563 FUNC GLOBAL DEFAULT 11 g_regex_new + 1707: 000000000001dd00 61 FUNC GLOBAL DEFAULT 11 g_static_rec_mutex_unlock_full + 1708: 000000000005dd00 65 FUNC GLOBAL DEFAULT 11 g_queue_peek_nth + 1709: 00000000000305a0 9 FUNC GLOBAL DEFAULT 11 g_date_valid_year + 1710: 000000000004d080 149 FUNC GLOBAL DEFAULT 11 g_idle_add_full + 1711: 000000000003e980 86 FUNC GLOBAL DEFAULT 11 g_io_channel_get_flags + 1712: 000000000004a980 115 FUNC GLOBAL DEFAULT 11 g_source_ref + 1713: 00000000000207a0 13 FUNC GLOBAL DEFAULT 11 g_atomic_int_compare_and_exchange + 1714: 000000000004a560 503 FUNC GLOBAL DEFAULT 11 g_main_context_unref + 1715: 00000000000208a0 23 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_xor + 1716: 00000000000518a0 30 FUNC GLOBAL DEFAULT 11 g_try_malloc + 1717: 0000000000055620 69 FUNC GLOBAL DEFAULT 11 g_node_get_root + 1718: 000000000008ff20 177 FUNC GLOBAL DEFAULT 11 g_fprintf + 1719: 0000000000090b30 67 FUNC GLOBAL DEFAULT 11 g_private_get + 1720: 0000000000049c20 177 FUNC GLOBAL DEFAULT 11 g_source_add_poll + 1721: 000000000003e520 53 FUNC GLOBAL DEFAULT 11 g_io_create_watch + 1722: 000000000004cf60 149 FUNC GLOBAL DEFAULT 11 g_timeout_add_seconds_full + 1723: 0000000000035f40 85 FUNC GLOBAL DEFAULT 11 g_date_time_get_microsecond + 1724: 00000000000822b0 27 FUNC GLOBAL DEFAULT 11 g_variant_print + 1725: 000000000005d590 204 FUNC GLOBAL DEFAULT 11 g_queue_push_tail_link + 1726: 000000000006ced0 786 FUNC GLOBAL DEFAULT 11 g_ascii_string_to_signed + 1727: 0000000000026150 123 FUNC GLOBAL DEFAULT 11 g_bytes_new_with_free_func + 1728: 000000000004ed40 319 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_new + 1729: 000000000007a290 102 FUNC GLOBAL DEFAULT 11 g_unichar_iswide + 1730: 000000000001efd0 42 FUNC GLOBAL DEFAULT 11 g_ptr_array_set_free_func + 1731: 0000000000043e30 42 FUNC GLOBAL DEFAULT 11 g_key_file_set_list_separator + 1732: 0000000000087ae0 52 FUNC GLOBAL DEFAULT 11 g_variant_get_size + 1733: 000000000006e3d0 283 FUNC GLOBAL DEFAULT 11 g_string_erase + 1734: 0000000000030510 10 FUNC GLOBAL DEFAULT 11 g_date_new + 1735: 000000000007dd60 101 FUNC GLOBAL DEFAULT 11 g_unichar_combining_class + 1736: 0000000000047230 93 FUNC GLOBAL DEFAULT 11 g_key_file_remove_comment + 1737: 00000000000244d0 233 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_is_private + 1738: 0000000000020440 145 FUNC GLOBAL DEFAULT 11 g_async_queue_sort_unlocked + 1739: 000000000001d670 150 FUNC GLOBAL DEFAULT 11 g_relation_print + 1740: 0000000000039f60 25 FUNC GLOBAL DEFAULT 11 glib_gettext + 1741: 000000000006f5c0 232 FUNC GLOBAL DEFAULT 11 g_test_log_type_name + 1742: 0000000000031fe0 294 FUNC GLOBAL DEFAULT 11 g_date_get_sunday_weeks_in_year + 1743: 00000000000674b0 62 FUNC GLOBAL DEFAULT 11 g_sequence_iter_is_begin + 1744: 0000000000034090 77 FUNC GLOBAL DEFAULT 11 g_date_time_add_days + 1745: 0000000000080610 36 FUNC GLOBAL DEFAULT 11 g_variant_new_byte + 1746: 00000000000786e0 23 FUNC GLOBAL DEFAULT 11 g_trash_stack_pop + 1747: 0000000000060b20 73 FUNC GLOBAL DEFAULT 11 g_regex_get_capture_count + 1748: 000000000006db70 17 FUNC GLOBAL DEFAULT 11 g_string_prepend + 1749: 0000000000081040 21 FUNC GLOBAL DEFAULT 11 g_variant_is_of_type + 1750: 0000000000090810 8 FUNC GLOBAL DEFAULT 11 g_rec_mutex_unlock + 1751: 0000000000047860 495 FUNC GLOBAL DEFAULT 11 g_parse_debug_string + 1752: 00000000000811a0 73 FUNC GLOBAL DEFAULT 11 g_variant_get_int32 + 1753: 00000000000674f0 56 FUNC GLOBAL DEFAULT 11 g_sequence_iter_get_position + 1754: 000000000002d5d0 38 FUNC GLOBAL DEFAULT 11 g_convert_error_quark + 1755: 000000000001f0a0 231 FUNC GLOBAL DEFAULT 11 g_ptr_array_remove_index + 1756: 0000000000080670 36 FUNC GLOBAL DEFAULT 11 g_variant_new_uint16 + 1757: 0000000000037230 100 FUNC GLOBAL DEFAULT 11 g_environ_getenv + 1758: 00000000000901b0 172 FUNC GLOBAL DEFAULT 11 g_snprintf + 1759: 0000000000092ed0 38 FUNC GLOBAL DEFAULT 11 g_spawn_exit_error_quark + 1760: 0000000000049a20 47 FUNC GLOBAL DEFAULT 11 g_main_context_get_thread_default + 1761: 00000000000865e0 202 FUNC GLOBAL DEFAULT 11 g_variant_dict_init + 1762: 0000000000038ec0 10 FUNC GLOBAL DEFAULT 11 g_mkdtemp + 1763: 000000000006aec0 122 FUNC GLOBAL DEFAULT 11 g_strsignal + 1764: 000000000002e580 557 FUNC GLOBAL DEFAULT 11 g_get_filename_charsets + 1765: 0000000000020200 62 FUNC GLOBAL DEFAULT 11 g_async_queue_timeout_pop + 1766: 0000000000060e70 671 FUNC GLOBAL DEFAULT 11 g_regex_match_all_full + 1767: 0000000000074520 113 FUNC GLOBAL DEFAULT 11 g_thread_pool_unprocessed + 1768: 00000000000692f0 52 FUNC GLOBAL DEFAULT 11 g_slice_copy + 1769: 0000000000081d00 424 FUNC GLOBAL DEFAULT 11 g_variant_get_string + 1770: 000000000008c9e0 1513 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_serialise + 1771: 000000000002f6f0 134 FUNC GLOBAL DEFAULT 11 g_datalist_id_dup_data + 1772: 000000000006cca0 350 FUNC GLOBAL DEFAULT 11 g_str_match_string + 1773: 000000000001d4c0 244 FUNC GLOBAL DEFAULT 11 g_relation_exists + 1774: 000000000007bcc0 90 FUNC GLOBAL DEFAULT 11 g_utf8_strrchr + 1775: 000000000006a8e0 75 FUNC GLOBAL DEFAULT 11 g_strdup_vprintf + 1776: 000000000006f980 14 FUNC GLOBAL DEFAULT 11 g_test_failed + 1777: 0000000000026330 383 FUNC GLOBAL DEFAULT 11 g_bytes_new_from_bytes + 1778: 000000000001fa80 5 FUNC GLOBAL DEFAULT 11 g_byte_array_ref + 1779: 000000000003b380 322 FUNC GLOBAL DEFAULT 11 g_hash_table_contains + 1780: 000000000007fa00 157 FUNC GLOBAL DEFAULT 11 g_get_user_runtime_dir + 1781: 00000000000745a0 308 FUNC GLOBAL DEFAULT 11 g_thread_pool_free + 1782: 0000000000059280 108 FUNC GLOBAL DEFAULT 11 g_option_group_set_translate_func + 1783: 0000000000078710 31 FUNC GLOBAL DEFAULT 11 g_trash_stack_height + 1784: 0000000000066db0 163 FUNC GLOBAL DEFAULT 11 g_sequence_lookup + 1785: 0000000000086e60 467 FUNC GLOBAL DEFAULT 11 g_variant_iter_loop + 1786: 0000000000030190 90 FUNC GLOBAL DEFAULT 11 g_datalist_unset_flags + 1787: 0000000000021300 230 FUNC GLOBAL DEFAULT 11 g_base64_decode_inplace + 1788: 0000000000040940 1128 FUNC GLOBAL DEFAULT 11 g_io_channel_read_chars + 1789: 00000000000394a0 219 FUNC GLOBAL DEFAULT 11 g_build_path + 1790: 000000000002f440 400 FUNC GLOBAL DEFAULT 11 g_dataset_id_remove_no_notify + 1791: 000000000006b700 7 FUNC GLOBAL DEFAULT 11 g_strncasecmp + 1792: 00000000000907c0 75 FUNC GLOBAL DEFAULT 11 g_rec_mutex_lock + 1793: 000000000003b6c0 105 FUNC GLOBAL DEFAULT 11 g_hash_table_foreach_steal + 1794: 0000000000035a80 99 FUNC GLOBAL DEFAULT 11 g_date_time_get_week_of_year + 1795: 00000000000207c0 20 FUNC GLOBAL DEFAULT 11 g_atomic_int_and + 1796: 000000000005da80 56 FUNC GLOBAL DEFAULT 11 g_queue_link_index + 1797: 000000000004cbc0 138 FUNC GLOBAL DEFAULT 11 g_main_context_set_poll_func + 1798: 000000000006af40 203 FUNC GLOBAL DEFAULT 11 g_strlcpy + 1799: 000000000005e4d0 284 FUNC GLOBAL DEFAULT 11 g_rand_new + 1800: 0000000000047510 373 FUNC GLOBAL DEFAULT 11 g_key_file_remove_key + 1801: 0000000000024aa0 224 FUNC GLOBAL DEFAULT 11 g_bookmark_file_has_group + 1802: 0000000000024310 237 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_mime_type + 1803: 0000000000081eb0 21 FUNC GLOBAL DEFAULT 11 g_variant_dup_string + 1804: 0000000000065fb0 313 FUNC GLOBAL DEFAULT 11 g_sequence_iter_compare + 1805: 000000000008f580 113 FUNC GLOBAL DEFAULT 11 g_variant_type_key + 1806: 000000000005bf80 792 FUNC GLOBAL DEFAULT 11 g_pattern_spec_new + 1807: 0000000000025b40 487 FUNC GLOBAL DEFAULT 11 g_bookmark_file_get_applications + 1808: 000000000004a890 58 FUNC GLOBAL DEFAULT 11 g_source_destroy + 1809: 0000000000053350 1278 FUNC GLOBAL DEFAULT 11 g_log_writer_format_fields + 1810: 0000000000054760 172 FUNC GLOBAL DEFAULT 11 g_test_expect_message + 1811: 000000000005e5f0 316 FUNC GLOBAL DEFAULT 11 g_rand_int + 1812: 000000000006ac90 100 FUNC GLOBAL DEFAULT 11 g_ascii_formatd + 1813: 000000000008ef50 97 FUNC GLOBAL DEFAULT 11 g_variant_type_is_basic + 1814: 0000000000081ed0 230 FUNC GLOBAL DEFAULT 11 g_variant_dup_strv + 1815: 0000000000086080 269 FUNC GLOBAL DEFAULT 11 g_variant_lookup + 1816: 0000000000058f20 110 FUNC GLOBAL DEFAULT 11 g_option_group_new + 1817: 0000000000090cd0 7 FUNC GLOBAL DEFAULT 11 g_mutex_init + 1818: 000000000003ed00 169 FUNC GLOBAL DEFAULT 11 g_io_channel_close + 1819: 000000000001db90 93 FUNC GLOBAL DEFAULT 11 g_static_mutex_get_mutex_impl + 1820: 0000000000022d90 278 FUNC GLOBAL DEFAULT 11 g_bookmark_file_to_file + 1821: 000000000001faa0 14 FUNC GLOBAL DEFAULT 11 g_byte_array_append + 1822: 000000000001d900 27 FUNC GLOBAL DEFAULT 11 g_cond_new + 1823: 0000000000080790 37 FUNC GLOBAL DEFAULT 11 g_variant_new_double + 1824: 00000000000340e0 61 FUNC GLOBAL DEFAULT 11 g_date_time_add_weeks + 1825: 0000000000025d70 354 FUNC GLOBAL DEFAULT 11 g_bookmark_file_move_item + 1826: 000000000008f010 65 FUNC GLOBAL DEFAULT 11 g_variant_type_is_array + 1827: 0000000000044fb0 129 FUNC GLOBAL DEFAULT 11 g_key_file_set_string + 1828: 0000000000080640 36 FUNC GLOBAL DEFAULT 11 g_variant_new_int16 + 1829: 0000000000039f20 62 FUNC GLOBAL DEFAULT 11 g_dgettext + 1830: 000000000008efc0 65 FUNC GLOBAL DEFAULT 11 g_variant_type_is_maybe + 1831: 000000000008cfd0 858 FUNC GLOBAL DEFAULT 11 g_variant_serialiser_needed_size + 1832: 0000000000031430 304 FUNC GLOBAL DEFAULT 11 g_date_get_iso8601_week_of_year + 1833: 0000000000051010 1853 FUNC GLOBAL DEFAULT 11 g_markup_collect_attributes + 1834: 00000000000786d0 10 FUNC GLOBAL DEFAULT 11 g_trash_stack_push + 1835: 0000000000037b20 25 FUNC GLOBAL DEFAULT 11 g_error_matches + 1836: 0000000000079dd0 131 FUNC GLOBAL DEFAULT 11 g_unichar_isprint + 1837: 000000000001d5c0 34 FUNC GLOBAL DEFAULT 11 g_tuples_destroy + 1838: 0000000000064680 102 FUNC GLOBAL DEFAULT 11 g_scanner_peek_next_token + 1839: 0000000000075ea0 58 FUNC GLOBAL DEFAULT 11 g_time_zone_ref + 1840: 000000000001fe80 42 FUNC GLOBAL DEFAULT 11 g_async_queue_unlock + 1841: 000000000006fa90 75 FUNC GLOBAL DEFAULT 11 g_test_get_root + 1842: 000000000001e2c0 276 FUNC GLOBAL DEFAULT 11 g_static_private_set + 1843: 00000000000358c0 99 FUNC GLOBAL DEFAULT 11 g_date_time_get_month + 1844: 0000000000043e00 34 FUNC GLOBAL DEFAULT 11 g_key_file_new + 1845: 000000000003bed0 91 FUNC GLOBAL DEFAULT 11 g_hmac_unref + 1846: 0000000000067040 53 FUNC GLOBAL DEFAULT 11 g_sequence_get_end_iter + 1847: 00000000000464d0 379 FUNC GLOBAL DEFAULT 11 g_key_file_get_uint64 + 1848: 00000000000208c0 5 FUNC GLOBAL DEFAULT 11 g_atomic_int_exchange_and_add + 1849: 00000000000376b0 185 FUNC GLOBAL DEFAULT 11 g_listenv + 1850: 0000000000047f60 266 FUNC GLOBAL DEFAULT 11 g_list_insert_before + 1851: 000000000005c4b0 60 FUNC GLOBAL DEFAULT 11 g_spaced_primes_closest + 1852: 000000000006c2c0 325 FUNC GLOBAL DEFAULT 11 g_strjoinv + 1853: 00000000000806d0 35 FUNC GLOBAL DEFAULT 11 g_variant_new_uint32 + 1854: 00000000000f47d4 4 OBJECT GLOBAL DEFAULT 13 glib_minor_version + 1855: 000000000006b130 135 FUNC GLOBAL DEFAULT 11 g_strdown + 1856: 000000000006c1d0 71 FUNC GLOBAL DEFAULT 11 g_strfreev + 1857: 0000000000069b80 18 FUNC GLOBAL DEFAULT 11 g_slist_free + 1858: 00000000000793a0 53 FUNC GLOBAL DEFAULT 11 g_tree_ref + 1859: 00000000000749c0 59 FUNC GLOBAL DEFAULT 11 g_timer_stop + 1860: 0000000000035b50 145 FUNC GLOBAL DEFAULT 11 g_date_time_get_week_numbering_year + 1861: 0000000000061940 526 FUNC GLOBAL DEFAULT 11 g_regex_replace + 1862: 0000000000032640 784 FUNC GLOBAL DEFAULT 11 g_date_strftime + 1863: 0000000000049b40 131 FUNC GLOBAL DEFAULT 11 g_source_get_id + 1864: 000000000008e400 20 FUNC GLOBAL DEFAULT 11 g_variant_type_info_n_members + 1865: 00000000000301f0 53 FUNC GLOBAL DEFAULT 11 g_datalist_get_flags + 1866: 000000000007c920 923 FUNC GLOBAL DEFAULT 11 g_utf8_to_utf16 + 1867: 000000000005efc0 53 FUNC GLOBAL DEFAULT 11 g_match_info_is_partial_match + 1868: 000000000008b530 436 FUNC GLOBAL DEFAULT 11 g_variant_parse + 1869: 00000000000307e0 108 FUNC GLOBAL DEFAULT 11 g_date_get_month + 1870: 00000000000876c0 235 FUNC GLOBAL DEFAULT 11 g_variant_unref + 1871: 000000000003b800 263 FUNC GLOBAL DEFAULT 11 g_hash_table_find + 1872: 000000000005df50 64 FUNC GLOBAL DEFAULT 11 g_queue_insert_after + 1873: 000000000007fd20 42 FUNC GLOBAL DEFAULT 11 g_nullify_pointer + 1874: 000000000008d330 694 FUNC GLOBAL DEFAULT 11 g_variant_serialised_byteswap + 1875: 000000000006fae0 91 FUNC GLOBAL DEFAULT 11 g_test_suite_add + 1876: 000000000001d940 101 FUNC GLOBAL DEFAULT 11 g_cond_timed_wait + 1877: 000000000006fb40 91 FUNC GLOBAL DEFAULT 11 g_test_suite_add_suite + 1878: 000000000004a7c0 208 FUNC GLOBAL DEFAULT 11 g_source_remove_child_source diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgobject-2.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgobject-2.0.so.0.txt new file mode 100644 index 000000000000..6e121f094f6e --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libgobject-2.0.so.0.txt @@ -0,0 +1,628 @@ +Library: /lib64/libgobject-2.0.so.0 +Package: glib2-2.56.1-9.el7_9.x86_64 + + +Symbol table '.dynsym' contains 622 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_destroy + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_time_unref + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_unref + 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_void + 6: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_double + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_match_info_unref + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_validate + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_take_ref + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ffi_prep_cif + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_unref + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_try_string + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_copy + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_set_data_full + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_io_channel_ref + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_unref + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_set_flags + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_ref + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_find + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_nullify_pointer + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 27: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_timeout_funcs + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_unref + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_unlock + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_string + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_is_of_type + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_remove + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_ref + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_free + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_unref + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_copy + 43: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_unix_fd_source_funcs + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_ref + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_get_flags + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_first_valid + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_unref + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_unref + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_destroy + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_copy + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_remove_no_notify + 56: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_sint32 + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_match_info_ref + 59: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_idle_funcs + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_destroy_link + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_remove + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_unref + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 67: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_io_watch_funcs + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_ref + 69: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_float + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_lock + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 73: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_uint64 + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_free + 75: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_sint64 + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_unref + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (2) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_ref + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_dict_unref + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_copy + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_sort + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_ref_sink + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib_gettext + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_loop_ref + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_time_zone_unref + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (4) + 94: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_pointer + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_lock + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_main_context_unref + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_type_copy + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_unref + 99: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_unref + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_byte_array_ref + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_bytes_ref + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (5) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_contains + 105: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ffi_type_uint32 + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_ref + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc_n + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_unref + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_ref + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_unset_flags + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_insert_before + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mapped_file_unref + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_1 + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc_n + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_parse_debug_string + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_reader_unlock + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_unlock + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_unref + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_list_clear + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_checksum_free + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_clear + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_ref + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_date_time_ref + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_lock + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ffi_call + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_get_data + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0_n + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rec_mutex_unlock + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_ref + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_option_group_ref + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_alloc + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 145: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND glib__private__ + 147: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_child_watch_funcs + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.2.5 (2) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_key_file_unref + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_get_data + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_source_set_callback_indirect + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_list_init + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdupv + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_replace_data + 160: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_qsort_with_data + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_regex_ref + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_add + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_thread_ref + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_string + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_rw_lock_writer_lock + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_foreach + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_ref + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_to_string + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_time_zone_ref + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strescape + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_datalist_id_dup_data + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hook_next_valid + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 175: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_unix_signal_funcs + 176: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_variant_builder_unref + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new_len + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdelimit + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 181: 0000000000036180 106 FUNC GLOBAL DEFAULT 11 g_value_array_new + 182: 0000000000025820 836 FUNC GLOBAL DEFAULT 11 g_signal_override_class_closure + 183: 0000000000012890 251 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__STRINGv + 184: 0000000000036000 267 FUNC GLOBAL DEFAULT 11 g_value_transform + 185: 00000000000279c0 2255 FUNC GLOBAL DEFAULT 11 g_signal_connect_data + 186: 0000000000016180 502 FUNC GLOBAL DEFAULT 11 g_object_class_override_property + 187: 0000000000036500 53 FUNC GLOBAL DEFAULT 11 g_value_array_prepend + 188: 0000000000012440 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLAGS + 189: 0000000000022b20 440 FUNC GLOBAL DEFAULT 11 g_signal_stop_emission + 190: 000000000001b0e0 109 FUNC GLOBAL DEFAULT 11 g_param_spec_ref_sink + 191: 000000000002e540 238 FUNC GLOBAL DEFAULT 11 g_type_remove_class_cache_func + 192: 0000000000019590 151 FUNC GLOBAL DEFAULT 11 g_object_dup_qdata + 193: 000000000001bb80 409 FUNC GLOBAL DEFAULT 11 g_param_values_cmp + 194: 0000000000034440 48 FUNC GLOBAL DEFAULT 11 g_type_ensure + 195: 0000000000034870 249 FUNC GLOBAL DEFAULT 11 g_type_module_use + 196: 0000000000034e50 275 FUNC GLOBAL DEFAULT 11 g_type_module_register_enum + 197: 0000000000030a70 582 FUNC GLOBAL DEFAULT 11 g_type_is_a + 198: 0000000000033f80 326 FUNC GLOBAL DEFAULT 11 g_type_class_get_instance_private_offset + 199: 0000000000012610 167 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLOATv + 200: 0000000000018700 710 FUNC GLOBAL DEFAULT 11 g_object_get_property + 201: 00000000000356f0 112 FUNC GLOBAL DEFAULT 11 g_value_unset + 202: 0000000000011190 196 FUNC GLOBAL DEFAULT 11 g_enum_get_value_by_name + 203: 0000000000026d80 147 FUNC GLOBAL DEFAULT 11 g_signal_get_invocation_hint + 204: 0000000000012b20 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOXED + 205: 0000000000012e00 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__OBJECT + 206: 000000000002ab00 19 FUNC GLOBAL DEFAULT 11 g_signal_accumulator_first_wins + 207: 0000000000032350 435 FUNC GLOBAL DEFAULT 11 g_type_interface_get_plugin + 208: 0000000000032040 769 FUNC GLOBAL DEFAULT 11 g_type_interface_prerequisites + 209: 000000000001bd20 74 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_new + 210: 000000000001f880 222 FUNC GLOBAL DEFAULT 11 g_param_spec_variant + 211: 000000000002e4b0 134 FUNC GLOBAL DEFAULT 11 g_type_add_class_cache_func + 212: 000000000000d010 105 FUNC GLOBAL DEFAULT 11 g_variant_builder_get_type + 213: 0000000000024530 3723 FUNC GLOBAL DEFAULT 11 g_signal_newv + 214: 000000000000c560 43 FUNC GLOBAL DEFAULT 11 g_object_bind_property + 215: 0000000000011d50 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UCHARv + 216: 000000000000ce50 105 FUNC GLOBAL DEFAULT 11 g_bytes_get_type + 217: 0000000000012d50 166 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__POINTERv + 218: 00000000000236f0 1969 FUNC GLOBAL DEFAULT 11 g_signal_stop_emission_by_name + 219: 0000000000030270 55 FUNC GLOBAL DEFAULT 11 g_type_qname + 220: 000000000002ef00 93 FUNC GLOBAL DEFAULT 11 g_type_class_peek_static + 221: 000000000000d710 454 FUNC GLOBAL DEFAULT 11 g_boxed_copy + 222: 000000000001c3c0 943 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_list + 223: 0000000000038ac0 86 FUNC GLOBAL DEFAULT 11 g_value_set_uchar + 224: 000000000000ef40 257 FUNC GLOBAL DEFAULT 11 g_closure_ref + 225: 0000000000013330 225 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__FLAGSv + 226: 0000000000019d10 5 FUNC GLOBAL DEFAULT 11 g_value_set_object_take_ownership + 227: 00000000000340d0 353 FUNC GLOBAL DEFAULT 11 g_type_add_class_private + 228: 000000000001b010 77 FUNC GLOBAL DEFAULT 11 g_param_spec_unref + 229: 0000000000038b20 70 FUNC GLOBAL DEFAULT 11 g_value_get_uchar + 230: 0000000000011a00 54 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VOIDv + 231: 000000000001b530 123 FUNC GLOBAL DEFAULT 11 g_param_spec_steal_qdata + 232: 0000000000034f70 275 FUNC GLOBAL DEFAULT 11 g_type_module_register_flags + 233: 0000000000017530 981 FUNC GLOBAL DEFAULT 11 g_object_setv + 234: 00000000000359f0 539 FUNC GLOBAL DEFAULT 11 g_value_register_transform_func + 235: 0000000000019990 180 FUNC GLOBAL DEFAULT 11 g_object_replace_data + 236: 0000000000014700 169 FUNC GLOBAL DEFAULT 11 g_object_ref + 237: 0000000000036110 105 FUNC GLOBAL DEFAULT 11 g_value_array_get_nth + 238: 00000000000391a0 132 FUNC GLOBAL DEFAULT 11 g_value_set_string + 239: 0000000000033110 427 FUNC GLOBAL DEFAULT 11 g_type_check_is_value_type + 240: 0000000000012110 166 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__LONGv + 241: 0000000000036680 86 FUNC GLOBAL DEFAULT 11 g_value_array_sort + 242: 000000000002e7b0 190 FUNC GLOBAL DEFAULT 11 g_type_class_unref + 243: 00000000000134e0 340 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_STRING__OBJECT_POINTERv + 244: 000000000000cde0 105 FUNC GLOBAL DEFAULT 11 g_byte_array_get_type + 245: 00000000000197e0 131 FUNC GLOBAL DEFAULT 11 g_object_get_data + 246: 0000000000033eb0 193 FUNC GLOBAL DEFAULT 11 g_type_instance_get_private + 247: 000000000000bea0 86 FUNC GLOBAL DEFAULT 11 g_binding_get_source + 248: 0000000000250f28 0 NOTYPE GLOBAL DEFAULT 26 _end + 249: 00000000000148b0 488 FUNC GLOBAL DEFAULT 11 g_object_unref + 250: 000000000000d1d0 105 FUNC GLOBAL DEFAULT 11 g_time_zone_get_type + 251: 000000000001ed60 131 FUNC GLOBAL DEFAULT 11 g_param_spec_int + 252: 00000000000390f0 91 FUNC GLOBAL DEFAULT 11 g_value_set_double + 253: 000000000001b5b0 58 FUNC GLOBAL DEFAULT 11 g_param_spec_get_redirect_target + 254: 000000000001b8a0 304 FUNC GLOBAL DEFAULT 11 g_param_value_validate + 255: 0000000000025580 323 FUNC GLOBAL DEFAULT 11 g_signal_new + 256: 0000000000019870 102 FUNC GLOBAL DEFAULT 11 g_object_set_data + 257: 0000000000010f50 243 FUNC GLOBAL DEFAULT 11 g_flags_register_static + 258: 0000000000033bd0 276 FUNC GLOBAL DEFAULT 11 g_type_add_instance_private + 259: 000000000001ec70 131 FUNC GLOBAL DEFAULT 11 g_param_spec_uchar + 260: 000000000001c950 149 FUNC GLOBAL DEFAULT 11 g_value_set_param + 261: 000000000000fe50 151 FUNC GLOBAL DEFAULT 11 g_cclosure_new_swap + 262: 000000000001ca90 70 FUNC GLOBAL DEFAULT 11 g_value_get_param + 263: 0000000000027150 2159 FUNC GLOBAL DEFAULT 11 g_signal_connect_closure + 264: 0000000000016380 150 FUNC GLOBAL DEFAULT 11 g_object_class_list_properties + 265: 0000000000039330 70 FUNC GLOBAL DEFAULT 11 g_value_get_string + 266: 0000000000038f90 83 FUNC GLOBAL DEFAULT 11 g_value_set_uint64 + 267: 0000000000033860 24 FUNC GLOBAL DEFAULT 11 g_type_name_from_class + 268: 00000000000196e0 116 FUNC GLOBAL DEFAULT 11 g_object_set_qdata_full + 269: 0000000000028fe0 660 FUNC GLOBAL DEFAULT 11 g_signal_emitv + 270: 000000000001b770 302 FUNC GLOBAL DEFAULT 11 g_param_value_defaults + 271: 0000000000024420 72 FUNC GLOBAL DEFAULT 11 g_signal_name + 272: 00000000000160f0 131 FUNC GLOBAL DEFAULT 11 g_object_interface_find_property + 273: 0000000000016e40 1553 FUNC GLOBAL DEFAULT 11 g_object_new_valist + 274: 000000000000d5c0 105 FUNC GLOBAL DEFAULT 11 g_checksum_get_type + 275: 000000000001f0c0 44 FUNC GLOBAL DEFAULT 11 g_param_spec_unichar + 276: 0000000000018f10 96 FUNC GLOBAL DEFAULT 11 g_object_add_weak_pointer + 277: 00000000000168c0 725 FUNC GLOBAL DEFAULT 11 g_object_new_with_properties + 278: 000000000001fdc0 219 FUNC GLOBAL DEFAULT 11 g_signal_handler_block + 279: 0000000000039150 71 FUNC GLOBAL DEFAULT 11 g_value_get_double + 280: 00000000000352c0 169 FUNC GLOBAL DEFAULT 11 g_type_plugin_complete_interface_info + 281: 000000000002e4a0 7 FUNC GLOBAL DEFAULT 11 g_type_get_type_registration_serial + 282: 00000000000190a0 107 FUNC GLOBAL DEFAULT 11 g_object_force_floating + 283: 0000000000035570 256 FUNC GLOBAL DEFAULT 11 g_value_init + 284: 0000000000011b80 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__CHAR + 285: 000000000000bac0 128 FUNC GLOBAL DEFAULT 11 g_binding_get_type + 286: 000000000002ae00 105 FUNC GLOBAL DEFAULT 11 g_io_channel_get_type + 287: 00000000000357b0 123 FUNC GLOBAL DEFAULT 11 g_value_peek_pointer + 288: 0000000000036540 53 FUNC GLOBAL DEFAULT 11 g_value_array_append + 289: 0000000000038ff0 70 FUNC GLOBAL DEFAULT 11 g_value_get_uint64 + 290: 0000000000012580 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLOAT + 291: 0000000000016420 135 FUNC GLOBAL DEFAULT 11 g_object_interface_list_properties + 292: 000000000001a540 195 FUNC GLOBAL DEFAULT 11 g_cclosure_new_object_swap + 293: 000000000001ae00 58 FUNC GLOBAL DEFAULT 11 g_param_spec_ref + 294: 000000000000cc20 105 FUNC GLOBAL DEFAULT 11 g_gstring_get_type + 295: 000000000001f470 129 FUNC GLOBAL DEFAULT 11 g_param_spec_param + 296: 0000000000032510 369 FUNC GLOBAL DEFAULT 11 g_type_check_instance_is_a + 297: 0000000000016710 272 FUNC GLOBAL DEFAULT 11 g_object_notify_by_pspec + 298: 000000000000c020 263 FUNC GLOBAL DEFAULT 11 g_binding_unbind + 299: 0000000000034660 209 FUNC GLOBAL DEFAULT 11 g_type_module_get_type + 300: 000000000002e630 134 FUNC GLOBAL DEFAULT 11 g_type_add_interface_check + 301: 000000000002ae70 90 FUNC GLOBAL DEFAULT 11 g_io_condition_get_type + 302: 00000000000393d0 83 FUNC GLOBAL DEFAULT 11 g_value_set_pointer + 303: 0000000000016ba0 661 FUNC GLOBAL DEFAULT 11 g_object_newv + 304: 0000000000028a20 262 FUNC GLOBAL DEFAULT 11 g_signal_handlers_disconnect_matched + 305: 00000000000261d0 2986 FUNC GLOBAL DEFAULT 11 g_signal_chain_from_overridden_handler + 306: 0000000000031bb0 55 FUNC GLOBAL DEFAULT 11 g_type_fundamental + 307: 0000000000038bd0 69 FUNC GLOBAL DEFAULT 11 g_value_get_boolean + 308: 0000000000012cc0 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__POINTER + 309: 0000000000019ae0 155 FUNC GLOBAL DEFAULT 11 g_object_steal_data + 310: 0000000000011e00 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__INT + 311: 00000000000389c0 70 FUNC GLOBAL DEFAULT 11 g_value_get_char + 312: 000000000000d080 105 FUNC GLOBAL DEFAULT 11 g_variant_dict_get_type + 313: 0000000000019b80 213 FUNC GLOBAL DEFAULT 11 g_value_set_object + 314: 000000000000e810 217 FUNC GLOBAL DEFAULT 11 g_closure_set_meta_marshal + 315: 0000000000038960 86 FUNC GLOBAL DEFAULT 11 g_value_set_char + 316: 000000000000be40 85 FUNC GLOBAL DEFAULT 11 g_binding_get_flags + 317: 000000000000d630 105 FUNC GLOBAL DEFAULT 11 g_option_group_get_type + 318: 0000000000023030 1715 FUNC GLOBAL DEFAULT 11 g_signal_parse_name + 319: 000000000025043e 0 NOTYPE GLOBAL DEFAULT 25 _edata + 320: 0000000000030fc0 470 FUNC GLOBAL DEFAULT 11 g_type_set_qdata + 321: 0000000000035110 104 FUNC GLOBAL DEFAULT 11 g_type_plugin_use + 322: 0000000000019dc0 334 FUNC GLOBAL DEFAULT 11 g_signal_connect_object + 323: 00000000000168b0 6 FUNC GLOBAL DEFAULT 11 g_object_get_type + 324: 00000000000184d0 243 FUNC GLOBAL DEFAULT 11 g_object_set + 325: 0000000000030ee0 214 FUNC GLOBAL DEFAULT 11 g_type_get_qdata + 326: 00000000000256d0 323 FUNC GLOBAL DEFAULT 11 g_signal_new_class_handler + 327: 000000000001b450 94 FUNC GLOBAL DEFAULT 11 g_param_spec_set_qdata + 328: 000000000001ebe0 131 FUNC GLOBAL DEFAULT 11 g_param_spec_char + 329: 000000000000d4e0 105 FUNC GLOBAL DEFAULT 11 g_markup_parse_context_get_type + 330: 000000000001a920 12 FUNC GLOBAL DEFAULT 11 g_weak_ref_init + 331: 0000000000033040 193 FUNC GLOBAL DEFAULT 11 g_type_check_instance + 332: 0000000000011c10 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__CHARv + 333: 000000000001b3e0 105 FUNC GLOBAL DEFAULT 11 g_param_spec_get_qdata + 334: 00000000000332c0 410 FUNC GLOBAL DEFAULT 11 g_type_check_value + 335: 0000000000030d80 342 FUNC GLOBAL DEFAULT 11 g_type_interfaces + 336: 0000000000019d20 70 FUNC GLOBAL DEFAULT 11 g_value_get_object + 337: 000000000000f8e0 443 FUNC GLOBAL DEFAULT 11 g_closure_invoke + 338: 00000000000103c0 1926 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_generic_va + 339: 0000000000011980 125 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VOID + 340: 000000000001b080 89 FUNC GLOBAL DEFAULT 11 g_param_spec_sink + 341: 000000000002ef60 228 FUNC GLOBAL DEFAULT 11 g_type_class_peek_parent + 342: 000000000001a7d0 330 FUNC GLOBAL DEFAULT 11 g_weak_ref_set + 343: 0000000000039b10 91 FUNC GLOBAL DEFAULT 11 g_value_set_gtype + 344: 0000000000035d90 433 FUNC GLOBAL DEFAULT 11 g_value_set_instance + 345: 00000000000395a0 70 FUNC GLOBAL DEFAULT 11 g_value_get_variant + 346: 000000000001f7a0 211 FUNC GLOBAL DEFAULT 11 g_param_spec_override + 347: 0000000000031a10 274 FUNC GLOBAL DEFAULT 11 g_type_add_interface_static + 348: 0000000000033cf0 445 FUNC GLOBAL DEFAULT 11 g_type_class_adjust_private_offset + 349: 0000000000039b70 70 FUNC GLOBAL DEFAULT 11 g_value_get_gtype + 350: 000000000001cae0 79 FUNC GLOBAL DEFAULT 11 g_value_dup_param + 351: 000000000002a3a0 1840 FUNC GLOBAL DEFAULT 11 g_signal_emit_by_name + 352: 0000000000039ab0 91 FUNC GLOBAL DEFAULT 11 g_gtype_get_type + 353: 000000000000d470 105 FUNC GLOBAL DEFAULT 11 g_pollfd_get_type + 354: 0000000000038c20 82 FUNC GLOBAL DEFAULT 11 g_value_set_int + 355: 000000000000f360 394 FUNC GLOBAL DEFAULT 11 g_closure_invalidate + 356: 000000000001a730 61 FUNC GLOBAL DEFAULT 11 g_object_compat_control + 357: 0000000000010e50 243 FUNC GLOBAL DEFAULT 11 g_enum_register_static + 358: 00000000000366e0 126 FUNC GLOBAL DEFAULT 11 g_value_array_sort_with_data + 359: 0000000000035cc0 201 FUNC GLOBAL DEFAULT 11 g_value_copy + 360: 000000000001ca80 5 FUNC GLOBAL DEFAULT 11 g_value_set_param_take_ownership + 361: 0000000000028910 262 FUNC GLOBAL DEFAULT 11 g_signal_handlers_unblock_matched + 362: 0000000000013640 188 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__BOXED_BOXED + 363: 000000000000d6a0 105 FUNC GLOBAL DEFAULT 11 g_strv_get_type + 364: 000000000001cb30 196 FUNC GLOBAL DEFAULT 11 g_param_spec_get_default_value + 365: 0000000000017ee0 497 FUNC GLOBAL DEFAULT 11 g_object_getv + 366: 0000000000012750 175 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__DOUBLEv + 367: 000000000001fea0 228 FUNC GLOBAL DEFAULT 11 g_signal_handler_unblock + 368: 000000000000dcf0 188 FUNC GLOBAL DEFAULT 11 g_value_take_boxed + 369: 00000000000253c0 186 FUNC GLOBAL DEFAULT 11 g_signal_set_va_marshaller + 370: 000000000001cc00 12 FUNC GLOBAL DEFAULT 11 g_param_spec_get_name_quark + 371: 0000000000011400 197 FUNC GLOBAL DEFAULT 11 g_flags_get_value_by_nick + 372: 000000000000d400 105 FUNC GLOBAL DEFAULT 11 g_source_get_type + 373: 0000000000033460 493 FUNC GLOBAL DEFAULT 11 g_type_check_value_holds + 374: 0000000000015f20 263 FUNC GLOBAL DEFAULT 11 g_object_interface_install_property + 375: 000000000000d0f0 105 FUNC GLOBAL DEFAULT 11 g_error_get_type + 376: 0000000000011e90 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__INTv + 377: 000000000000fcd0 122 FUNC GLOBAL DEFAULT 11 g_closure_set_marshal + 378: 000000000000cad0 105 FUNC GLOBAL DEFAULT 11 g_value_get_type + 379: 0000000000035f50 163 FUNC GLOBAL DEFAULT 11 g_value_type_transformable + 380: 0000000000032b80 728 FUNC GLOBAL DEFAULT 11 g_type_check_instance_cast + 381: 000000000000c910 6 FUNC GLOBAL DEFAULT 11 g_variant_get_gtype + 382: 000000000001f5f0 49 FUNC GLOBAL DEFAULT 11 g_param_spec_gtype + 383: 000000000000f050 773 FUNC GLOBAL DEFAULT 11 g_closure_unref + 384: 0000000000038e30 83 FUNC GLOBAL DEFAULT 11 g_value_set_ulong + 385: 0000000000035830 448 FUNC GLOBAL DEFAULT 11 g_value_init_from_instance + 386: 000000000002eea0 81 FUNC GLOBAL DEFAULT 11 g_type_class_peek + 387: 000000000001f630 215 FUNC GLOBAL DEFAULT 11 g_param_spec_value_array + 388: 0000000000011050 145 FUNC GLOBAL DEFAULT 11 g_enum_complete_type_info + 389: 0000000000038e90 70 FUNC GLOBAL DEFAULT 11 g_value_get_ulong + 390: 00000000000392a0 116 FUNC GLOBAL DEFAULT 11 g_value_take_string + 391: 0000000000016030 188 FUNC GLOBAL DEFAULT 11 g_object_class_find_property + 392: 00000000000116c0 347 FUNC GLOBAL DEFAULT 11 g_flags_to_string + 393: 0000000000011550 181 FUNC GLOBAL DEFAULT 11 g_flags_get_first_value + 394: 0000000000033a00 455 FUNC GLOBAL DEFAULT 11 g_type_class_add_private + 395: 000000000002aad0 43 FUNC GLOBAL DEFAULT 11 g_signal_accumulator_true_handled + 396: 000000000001bd70 285 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_insert + 397: 000000000001a320 333 FUNC GLOBAL DEFAULT 11 g_object_watch_closure + 398: 000000000000ff60 249 FUNC GLOBAL DEFAULT 11 g_signal_type_cclosure_new + 399: 00000000000301f0 115 FUNC GLOBAL DEFAULT 11 g_type_name + 400: 0000000000020a90 694 FUNC GLOBAL DEFAULT 11 g_signal_handler_disconnect + 401: 0000000000030120 200 FUNC GLOBAL DEFAULT 11 g_type_default_interface_unref + 402: 000000000002ede0 190 FUNC GLOBAL DEFAULT 11 g_type_class_unref_uncached + 403: 0000000000016820 137 FUNC GLOBAL DEFAULT 11 g_object_thaw_notify + 404: 000000000001f5c0 37 FUNC GLOBAL DEFAULT 11 g_param_spec_pointer + 405: 0000000000039a00 171 FUNC GLOBAL DEFAULT 11 g_pointer_type_register_static + 406: 0000000000030680 510 FUNC GLOBAL DEFAULT 11 g_type_register_static + 407: 0000000000036380 376 FUNC GLOBAL DEFAULT 11 g_value_array_insert + 408: 00000000000361f0 136 FUNC GLOBAL DEFAULT 11 g_value_array_free + 409: 000000000000c590 260 FUNC GLOBAL DEFAULT 11 g_object_bind_property_with_closures + 410: 00000000000131a0 197 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINT_POINTERv + 411: 000000000001b4b0 116 FUNC GLOBAL DEFAULT 11 g_param_spec_set_qdata_full + 412: 000000000001ef10 131 FUNC GLOBAL DEFAULT 11 g_param_spec_ulong + 413: 0000000000011260 196 FUNC GLOBAL DEFAULT 11 g_flags_get_value_by_name + 414: 0000000000017910 1475 FUNC GLOBAL DEFAULT 11 g_object_set_valist + 415: 0000000000013110 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINT_POINTER + 416: 0000000000011cc0 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UCHAR + 417: 0000000000015e10 261 FUNC GLOBAL DEFAULT 11 g_object_class_install_properties + 418: 0000000000039bbc 0 FUNC GLOBAL DEFAULT 12 _fini + 419: 000000000000bfc0 86 FUNC GLOBAL DEFAULT 11 g_binding_get_target_property + 420: 0000000000023eb0 823 FUNC GLOBAL DEFAULT 11 g_signal_lookup + 421: 0000000000039660 917 FUNC GLOBAL DEFAULT 11 g_strdup_value_contents + 422: 000000000001c300 187 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_list_owned + 423: 000000000002b230 58 FUNC GLOBAL DEFAULT 11 g_source_set_dummy_callback + 424: 0000000000030960 55 FUNC GLOBAL DEFAULT 11 g_type_parent + 425: 000000000000cd70 105 FUNC GLOBAL DEFAULT 11 g_ptr_array_get_type + 426: 0000000000011f40 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINT + 427: 000000000001a6b0 128 FUNC GLOBAL DEFAULT 11 g_initially_unowned_get_type + 428: 000000000002b0d0 337 FUNC GLOBAL DEFAULT 11 g_source_set_closure + 429: 0000000000035c10 163 FUNC GLOBAL DEFAULT 11 g_value_type_compatible + 430: 00000000000349c0 706 FUNC GLOBAL DEFAULT 11 g_type_module_register_type + 431: 000000000001b6d0 158 FUNC GLOBAL DEFAULT 11 g_param_value_set_default + 432: 00000000000118d0 85 FUNC GLOBAL DEFAULT 11 g_value_set_flags + 433: 0000000000012080 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__LONG + 434: 000000000000cbb0 105 FUNC GLOBAL DEFAULT 11 g_date_get_type + 435: 0000000000011930 69 FUNC GLOBAL DEFAULT 11 g_value_get_flags + 436: 00000000000186d0 35 FUNC GLOBAL DEFAULT 11 g_object_set_property + 437: 0000000000012a20 251 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__PARAMv + 438: 00000000000180e0 1000 FUNC GLOBAL DEFAULT 11 g_object_get_valist + 439: 000000000000a030 0 FUNC GLOBAL DEFAULT 9 _init + 440: 0000000000018fd0 70 FUNC GLOBAL DEFAULT 11 g_object_is_floating + 441: 000000000000fdd0 119 FUNC GLOBAL DEFAULT 11 g_cclosure_new + 442: 000000000000c130 1071 FUNC GLOBAL DEFAULT 11 g_object_bind_property_full + 443: 0000000000031280 3 FUNC GLOBAL DEFAULT 11 g_type_get_instance_count + 444: 000000000000db70 180 FUNC GLOBAL DEFAULT 11 g_value_set_boxed + 445: 0000000000025480 248 FUNC GLOBAL DEFAULT 11 g_signal_new_valist + 446: 0000000000030420 605 FUNC GLOBAL DEFAULT 11 g_type_register_fundamental + 447: 000000000001f420 79 FUNC GLOBAL DEFAULT 11 g_param_spec_string + 448: 0000000000015d40 206 FUNC GLOBAL DEFAULT 11 g_object_class_install_property + 449: 000000000001be90 174 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_remove + 450: 0000000000038c80 69 FUNC GLOBAL DEFAULT 11 g_value_get_int + 451: 000000000000da30 147 FUNC GLOBAL DEFAULT 11 g_value_get_boxed + 452: 0000000000012990 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__PARAM + 453: 000000000000f700 476 FUNC GLOBAL DEFAULT 11 g_closure_remove_finalize_notifier + 454: 0000000000013700 476 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv + 455: 0000000000032940 305 FUNC GLOBAL DEFAULT 11 g_type_add_interface_dynamic + 456: 000000000000ca60 105 FUNC GLOBAL DEFAULT 11 g_closure_get_type + 457: 0000000000036280 253 FUNC GLOBAL DEFAULT 11 g_value_array_copy + 458: 00000000000309a0 55 FUNC GLOBAL DEFAULT 11 g_type_depth + 459: 000000000001f380 145 FUNC GLOBAL DEFAULT 11 g_param_spec_double + 460: 0000000000017460 200 FUNC GLOBAL DEFAULT 11 g_object_new + 461: 0000000000022ce0 559 FUNC GLOBAL DEFAULT 11 g_signal_add_emission_hook + 462: 000000000000d240 105 FUNC GLOBAL DEFAULT 11 g_key_file_get_type + 463: 0000000000019c60 168 FUNC GLOBAL DEFAULT 11 g_value_take_object + 464: 00000000000185d0 243 FUNC GLOBAL DEFAULT 11 g_object_get + 465: 0000000000025b70 217 FUNC GLOBAL DEFAULT 11 g_signal_override_class_handler + 466: 000000000000bf60 86 FUNC GLOBAL DEFAULT 11 g_binding_get_source_property + 467: 0000000000038d30 69 FUNC GLOBAL DEFAULT 11 g_value_get_uint + 468: 0000000000035670 113 FUNC GLOBAL DEFAULT 11 g_value_reset + 469: 000000000001f1e0 245 FUNC GLOBAL DEFAULT 11 g_param_spec_flags + 470: 000000000001b9d0 432 FUNC GLOBAL DEFAULT 11 g_param_value_convert + 471: 0000000000036580 243 FUNC GLOBAL DEFAULT 11 g_value_array_remove + 472: 000000000001bf40 957 FUNC GLOBAL DEFAULT 11 g_param_spec_pool_lookup + 473: 0000000000038cd0 82 FUNC GLOBAL DEFAULT 11 g_value_set_uint + 474: 0000000000038de0 70 FUNC GLOBAL DEFAULT 11 g_value_get_long + 475: 000000000002a2f0 172 FUNC GLOBAL DEFAULT 11 g_signal_emit + 476: 00000000000189d0 745 FUNC GLOBAL DEFAULT 11 g_object_disconnect + 477: 0000000000028310 542 FUNC GLOBAL DEFAULT 11 g_signal_handlers_destroy + 478: 00000000000339c0 58 FUNC GLOBAL DEFAULT 11 g_type_init + 479: 0000000000028290 120 FUNC GLOBAL DEFAULT 11 g_signal_handler_is_connected + 480: 000000000001f030 131 FUNC GLOBAL DEFAULT 11 g_param_spec_uint64 + 481: 000000000000ec60 385 FUNC GLOBAL DEFAULT 11 g_closure_add_finalize_notifier + 482: 0000000000038d80 83 FUNC GLOBAL DEFAULT 11 g_value_set_long + 483: 0000000000019760 123 FUNC GLOBAL DEFAULT 11 g_object_steal_qdata + 484: 000000000000dc30 188 FUNC GLOBAL DEFAULT 11 g_value_set_static_boxed + 485: 00000000000241f0 558 FUNC GLOBAL DEFAULT 11 g_signal_list_ids + 486: 0000000000034240 505 FUNC GLOBAL DEFAULT 11 g_type_class_get_private + 487: 0000000000019f10 1029 FUNC GLOBAL DEFAULT 11 g_object_connect + 488: 00000000000347f0 116 FUNC GLOBAL DEFAULT 11 g_type_module_set_name + 489: 000000000001b5f0 92 FUNC GLOBAL DEFAULT 11 g_param_spec_get_nick + 490: 00000000000164b0 123 FUNC GLOBAL DEFAULT 11 g_object_run_dispose + 491: 0000000000030880 219 FUNC GLOBAL DEFAULT 11 g_type_register_static_simple + 492: 000000000001a770 94 FUNC GLOBAL DEFAULT 11 g_weak_ref_get + 493: 000000000000cec0 105 FUNC GLOBAL DEFAULT 11 g_regex_get_type + 494: 000000000001f500 181 FUNC GLOBAL DEFAULT 11 g_param_spec_boxed + 495: 000000000001edf0 131 FUNC GLOBAL DEFAULT 11 g_param_spec_uint + 496: 0000000000016590 371 FUNC GLOBAL DEFAULT 11 g_object_notify + 497: 0000000000034740 164 FUNC GLOBAL DEFAULT 11 g_type_module_unuse + 498: 0000000000038a10 86 FUNC GLOBAL DEFAULT 11 g_value_set_schar + 499: 0000000000033880 24 FUNC GLOBAL DEFAULT 11 g_type_name_from_instance + 500: 0000000000028530 717 FUNC GLOBAL DEFAULT 11 g_signal_handler_find + 501: 000000000001ee80 131 FUNC GLOBAL DEFAULT 11 g_param_spec_long + 502: 000000000025043e 0 NOTYPE GLOBAL DEFAULT 26 __bss_start + 503: 0000000000038a70 70 FUNC GLOBAL DEFAULT 11 g_value_get_schar + 504: 0000000000025c50 1397 FUNC GLOBAL DEFAULT 11 g_signal_chain_from_overridden + 505: 0000000000039320 5 FUNC GLOBAL DEFAULT 11 g_value_set_string_take_ownership + 506: 0000000000035760 69 FUNC GLOBAL DEFAULT 11 g_value_fits_pointer + 507: 000000000001c770 478 FUNC GLOBAL DEFAULT 11 g_param_type_register_static + 508: 000000000000cb40 105 FUNC GLOBAL DEFAULT 11 g_value_array_get_type + 509: 000000000001a610 147 FUNC GLOBAL DEFAULT 11 g_closure_new_object + 510: 0000000000022f10 276 FUNC GLOBAL DEFAULT 11 g_signal_remove_emission_hook + 511: 000000000002e870 1392 FUNC GLOBAL DEFAULT 11 g_type_class_ref + 512: 000000000000e8f0 868 FUNC GLOBAL DEFAULT 11 g_closure_add_marshal_guards + 513: 000000000001b190 587 FUNC GLOBAL DEFAULT 11 g_param_spec_internal + 514: 00000000000198e0 167 FUNC GLOBAL DEFAULT 11 g_object_dup_data + 515: 0000000000250618 8 OBJECT GLOBAL DEFAULT 26 g_param_spec_types + 516: 000000000001a470 195 FUNC GLOBAL DEFAULT 11 g_cclosure_new_object + 517: 000000000002f390 3383 FUNC GLOBAL DEFAULT 11 g_type_default_interface_ref + 518: 000000000000f590 355 FUNC GLOBAL DEFAULT 11 g_closure_remove_invalidate_notifier + 519: 0000000000038ee0 83 FUNC GLOBAL DEFAULT 11 g_value_set_int64 + 520: 00000000000124d0 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__FLAGSv + 521: 0000000000011610 174 FUNC GLOBAL DEFAULT 11 g_enum_to_string + 522: 0000000000011fd0 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__UINTv + 523: 00000000000395f0 100 FUNC GLOBAL DEFAULT 11 g_value_dup_variant + 524: 0000000000038f40 70 FUNC GLOBAL DEFAULT 11 g_value_get_int64 + 525: 0000000000011a40 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOOLEAN + 526: 000000000001f710 133 FUNC GLOBAL DEFAULT 11 g_param_spec_object + 527: 0000000000031290 375 FUNC GLOBAL DEFAULT 11 g_type_test_flags + 528: 000000000001b150 54 FUNC GLOBAL DEFAULT 11 g_param_spec_get_name + 529: 00000000000327a0 412 FUNC GLOBAL DEFAULT 11 g_type_register_dynamic + 530: 00000000000114d0 128 FUNC GLOBAL DEFAULT 11 g_enum_get_value + 531: 000000000000cc90 105 FUNC GLOBAL DEFAULT 11 g_hash_table_get_type + 532: 000000000000d160 105 FUNC GLOBAL DEFAULT 11 g_date_time_get_type + 533: 0000000000012e90 227 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__OBJECTv + 534: 0000000000039040 91 FUNC GLOBAL DEFAULT 11 g_value_set_float + 535: 0000000000013270 188 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_BOOLEAN__FLAGS + 536: 0000000000012390 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ENUMv + 537: 000000000000d2b0 105 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_type + 538: 0000000000011ad0 165 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOOLEANv + 539: 0000000000018f70 96 FUNC GLOBAL DEFAULT 11 g_object_remove_weak_pointer + 540: 00000000000110f0 145 FUNC GLOBAL DEFAULT 11 g_flags_complete_type_info + 541: 00000000000390a0 71 FUNC GLOBAL DEFAULT 11 g_value_get_float + 542: 00000000000302b0 94 FUNC GLOBAL DEFAULT 11 g_type_from_name + 543: 0000000000039380 74 FUNC GLOBAL DEFAULT 11 g_value_dup_string + 544: 0000000000032ae0 155 FUNC GLOBAL DEFAULT 11 g_type_check_class_is_a + 545: 000000000000e5d0 562 FUNC GLOBAL DEFAULT 11 g_closure_new_simple + 546: 0000000000039430 70 FUNC GLOBAL DEFAULT 11 g_value_get_pointer + 547: 0000000000035090 115 FUNC GLOBAL DEFAULT 11 g_type_plugin_get_type + 548: 000000000000dad0 155 FUNC GLOBAL DEFAULT 11 g_value_dup_boxed + 549: 000000000000d390 105 FUNC GLOBAL DEFAULT 11 g_main_context_get_type + 550: 0000000000033650 516 FUNC GLOBAL DEFAULT 11 g_type_value_table_peek + 551: 0000000000019410 105 FUNC GLOBAL DEFAULT 11 g_object_get_qdata + 552: 000000000001efa0 131 FUNC GLOBAL DEFAULT 11 g_param_spec_int64 + 553: 0000000000035180 104 FUNC GLOBAL DEFAULT 11 g_type_plugin_unuse + 554: 0000000000018cc0 277 FUNC GLOBAL DEFAULT 11 g_object_weak_ref + 555: 0000000000012300 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ENUM + 556: 0000000000039510 130 FUNC GLOBAL DEFAULT 11 g_value_take_variant + 557: 000000000002f050 380 FUNC GLOBAL DEFAULT 11 g_type_interface_peek + 558: 00000000000311a0 218 FUNC GLOBAL DEFAULT 11 g_type_query + 559: 0000000000028800 262 FUNC GLOBAL DEFAULT 11 g_signal_handlers_block_matched + 560: 000000000001f2e0 145 FUNC GLOBAL DEFAULT 11 g_param_spec_float + 561: 00000000000351f0 193 FUNC GLOBAL DEFAULT 11 g_type_plugin_complete_type_info + 562: 0000000000012250 166 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ULONGv + 563: 000000000000cf30 105 FUNC GLOBAL DEFAULT 11 g_match_info_get_type + 564: 000000000002e6c0 238 FUNC GLOBAL DEFAULT 11 g_type_remove_interface_check + 565: 0000000000038b70 89 FUNC GLOBAL DEFAULT 11 g_value_set_boolean + 566: 0000000000016530 91 FUNC GLOBAL DEFAULT 11 g_object_freeze_notify + 567: 000000000000bf00 86 FUNC GLOBAL DEFAULT 11 g_binding_get_target + 568: 000000000000cfa0 105 FUNC GLOBAL DEFAULT 11 g_variant_type_get_gtype + 569: 0000000000012800 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__STRING + 570: 0000000000012bb0 259 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__BOXEDv + 571: 0000000000026e20 811 FUNC GLOBAL DEFAULT 11 g_signal_connect_closure_by_id + 572: 000000000000b840 98 FUNC GLOBAL DEFAULT 11 g_binding_flags_get_type + 573: 0000000000010060 854 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_generic + 574: 00000000000121c0 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__ULONG + 575: 000000000000c920 318 FUNC GLOBAL DEFAULT 11 g_boxed_type_register_static + 576: 000000000000ddb0 5 FUNC GLOBAL DEFAULT 11 g_value_set_boxed_take_ownership + 577: 0000000000028b30 1192 FUNC GLOBAL DEFAULT 11 g_signal_has_handler_pending + 578: 000000000000d550 105 FUNC GLOBAL DEFAULT 11 g_thread_get_type + 579: 00000000000126c0 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__DOUBLE + 580: 000000000000f4f0 146 FUNC GLOBAL DEFAULT 11 g_closure_sink + 581: 0000000000031730 736 FUNC GLOBAL DEFAULT 11 g_type_free_instance + 582: 0000000000019270 359 FUNC GLOBAL DEFAULT 11 g_object_remove_toggle_ref + 583: 0000000000011880 69 FUNC GLOBAL DEFAULT 11 g_value_get_enum + 584: 0000000000019630 172 FUNC GLOBAL DEFAULT 11 g_object_replace_qdata + 585: 0000000000031410 794 FUNC GLOBAL DEFAULT 11 g_type_create_instance + 586: 0000000000011820 83 FUNC GLOBAL DEFAULT 11 g_value_set_enum + 587: 0000000000011330 205 FUNC GLOBAL DEFAULT 11 g_enum_get_value_by_nick + 588: 00000000000193e0 34 FUNC GLOBAL DEFAULT 11 g_clear_object + 589: 0000000000019530 94 FUNC GLOBAL DEFAULT 11 g_object_set_qdata + 590: 0000000000029280 4201 FUNC GLOBAL DEFAULT 11 g_signal_emit_valist + 591: 0000000000013010 251 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VARIANTv + 592: 0000000000019020 127 FUNC GLOBAL DEFAULT 11 g_object_ref_sink + 593: 0000000000013420 188 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_STRING__OBJECT_POINTER + 594: 0000000000032a80 83 FUNC GLOBAL DEFAULT 11 g_type_check_instance_is_fundamentally_a + 595: 000000000001a930 21 FUNC GLOBAL DEFAULT 11 g_weak_ref_clear + 596: 0000000000033960 90 FUNC GLOBAL DEFAULT 11 g_type_init_with_debug_flags + 597: 000000000001f0f0 235 FUNC GLOBAL DEFAULT 11 g_param_spec_enum + 598: 000000000002f1d0 444 FUNC GLOBAL DEFAULT 11 g_type_interface_peek_parent + 599: 00000000000309e0 137 FUNC GLOBAL DEFAULT 11 g_type_next_base + 600: 0000000000039480 130 FUNC GLOBAL DEFAULT 11 g_value_set_variant + 601: 000000000001b650 115 FUNC GLOBAL DEFAULT 11 g_param_spec_get_blurb + 602: 0000000000030cc0 188 FUNC GLOBAL DEFAULT 11 g_type_children + 603: 0000000000031b30 59 FUNC GLOBAL DEFAULT 11 g_type_get_plugin + 604: 0000000000019a50 130 FUNC GLOBAL DEFAULT 11 g_object_set_data_full + 605: 000000000000cd00 105 FUNC GLOBAL DEFAULT 11 g_array_get_type + 606: 00000000000300d0 75 FUNC GLOBAL DEFAULT 11 g_type_default_interface_peek + 607: 0000000000019d70 79 FUNC GLOBAL DEFAULT 11 g_value_dup_object + 608: 0000000000031bf0 1091 FUNC GLOBAL DEFAULT 11 g_type_interface_add_prerequisite + 609: 0000000000039230 107 FUNC GLOBAL DEFAULT 11 g_value_set_static_string + 610: 000000000000edf0 321 FUNC GLOBAL DEFAULT 11 g_closure_add_invalidate_notifier + 611: 000000000000d8e0 325 FUNC GLOBAL DEFAULT 11 g_boxed_free + 612: 0000000000012f80 141 FUNC GLOBAL DEFAULT 11 g_cclosure_marshal_VOID__VARIANT + 613: 0000000000034c90 435 FUNC GLOBAL DEFAULT 11 g_type_module_add_interface + 614: 000000000001c9f0 137 FUNC GLOBAL DEFAULT 11 g_value_take_param + 615: 0000000000018de0 295 FUNC GLOBAL DEFAULT 11 g_object_weak_unref + 616: 0000000000031b70 55 FUNC GLOBAL DEFAULT 11 g_type_fundamental_next + 617: 000000000001ed00 89 FUNC GLOBAL DEFAULT 11 g_param_spec_boolean + 618: 0000000000019120 324 FUNC GLOBAL DEFAULT 11 g_object_add_toggle_ref + 619: 000000000000d320 105 FUNC GLOBAL DEFAULT 11 g_main_loop_get_type + 620: 0000000000024470 192 FUNC GLOBAL DEFAULT 11 g_signal_query + 621: 0000000000032e60 465 FUNC GLOBAL DEFAULT 11 g_type_check_class_cast diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libm.so.6.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libm.so.6.txt new file mode 100644 index 000000000000..558b0e65fdd7 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libm.so.6.txt @@ -0,0 +1,422 @@ +Library: /lib64/libm.so.6 +Package: glibc-2.17-326.el7_9.x86_64 + + +Symbol table '.dynsym' contains 416 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtold_nan@GLIBC_PRIVATE (5) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (6) + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 4: 0000000000000000 0 TLS GLOBAL DEFAULT UND errno@GLIBC_PRIVATE (5) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (6) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtod_nan@GLIBC_PRIVATE (5) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (6) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (6) + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 10: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (7) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtof_nan@GLIBC_PRIVATE (5) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (6) + 13: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (6) + 15: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 16: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (6) + 17: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (6) + 18: 0000000000026020 60 FUNC GLOBAL DEFAULT 13 j1@@GLIBC_2.2.5 + 19: 000000000002a380 36 FUNC GLOBAL DEFAULT 13 __finite@@GLIBC_2.2.5 + 20: 000000000002a0d0 6 FUNC WEAK DEFAULT 13 lrint@@GLIBC_2.2.5 + 21: 00000000000338d0 931 FUNC WEAK DEFAULT 13 clogf@@GLIBC_2.2.5 + 22: 0000000000034560 671 FUNC WEAK DEFAULT 13 ctanhf@@GLIBC_2.2.5 + 23: 0000000000032730 484 FUNC GLOBAL DEFAULT 13 __log2f_finite@@GLIBC_2.15 + 24: 000000000003c720 948 FUNC WEAK DEFAULT 13 clogl@@GLIBC_2.2.5 + 25: 0000000000026fa0 5 FUNC WEAK DEFAULT 13 cimag@@GLIBC_2.2.5 + 26: 000000000003d380 651 FUNC WEAK DEFAULT 13 ctanhl@@GLIBC_2.2.5 + 27: 0000000000012260 638 FUNC GLOBAL DEFAULT 13 __yn_finite@@GLIBC_2.15 + 28: 00000000000261b0 177 FUNC WEAK DEFAULT 13 gamma@@GLIBC_2.2.5 + 29: 0000000000025cf0 122 FUNC WEAK DEFAULT 13 pow10@@GLIBC_2.2.5 + 30: 0000000000035a40 6 FUNC WEAK DEFAULT 13 llrintf@@GLIBC_2.2.5 + 31: 000000000002a0a0 48 IFUNC WEAK DEFAULT 13 fma@@GLIBC_2.2.5 + 32: 000000000003ed80 15 FUNC WEAK DEFAULT 13 llrintl@@GLIBC_2.2.5 + 33: 0000000000025ee0 137 FUNC WEAK DEFAULT 13 hypot@@GLIBC_2.2.5 + 34: 0000000000016390 5 FUNC GLOBAL DEFAULT 13 __sqrt_finite@@GLIBC_2.15 + 35: 00000000000260d0 68 FUNC GLOBAL DEFAULT 13 jn@@GLIBC_2.2.5 + 36: 000000000001add0 345 FUNC WEAK DEFAULT 13 nextafter@@GLIBC_2.2.5 + 37: 0000000000033f40 907 FUNC WEAK DEFAULT 13 csinf@@GLIBC_2.2.5 + 38: 00000000000272a0 859 FUNC WEAK DEFAULT 13 csinh@@GLIBC_2.2.5 + 39: 0000000000031100 261 FUNC WEAK DEFAULT 13 nexttowardf@@GLIBC_2.2.5 + 40: 0000000000031d50 57 FUNC GLOBAL DEFAULT 13 j0f@@GLIBC_2.2.5 + 41: 000000000003cd60 903 FUNC WEAK DEFAULT 13 csinl@@GLIBC_2.2.5 + 42: 0000000000039f50 645 FUNC WEAK DEFAULT 13 nexttowardl@@GLIBC_2.2.5 + 43: 000000000003abd0 82 FUNC WEAK DEFAULT 13 j0l@@GLIBC_2.2.5 + 44: 0000000000026270 148 FUNC WEAK DEFAULT 13 lgamma_r@@GLIBC_2.2.5 + 45: 00000000000084c0 53 FUNC GLOBAL DEFAULT 13 feenableexcept@@GLIBC_2.2.5 + 46: 0000000000016190 504 FUNC GLOBAL DEFAULT 13 __sinh_finite@@GLIBC_2.15 + 47: 0000000000011010 743 FUNC GLOBAL DEFAULT 13 __j0_finite@@GLIBC_2.15 + 48: 0000000000032b00 34 IFUNC WEAK DEFAULT 13 nearbyintf@@GLIBC_2.2.5 + 49: 0000000000008130 3 FUNC WEAK DEFAULT 13 matherr@@GLIBC_2.2.5 + 50: 0000000000031b20 106 FUNC WEAK DEFAULT 13 exp10f@@GLIBC_2.2.5 + 51: 0000000000031250 227 FUNC WEAK DEFAULT 13 scalblnf@@GLIBC_2.2.5 + 52: 000000000003bbd0 33 FUNC WEAK DEFAULT 13 nearbyintl@@GLIBC_2.2.5 + 53: 0000000000025bc0 5 FUNC WEAK DEFAULT 13 drem@@GLIBC_2.2.5 + 54: 000000000003a8f0 125 FUNC WEAK DEFAULT 13 exp10l@@GLIBC_2.2.5 + 55: 000000000003a1f0 272 FUNC WEAK DEFAULT 13 scalblnl@@GLIBC_2.2.5 + 56: 0000000000032480 160 FUNC WEAK DEFAULT 13 fdimf@@GLIBC_2.2.5 + 57: 0000000000038430 859 FUNC GLOBAL DEFAULT 13 __powl_finite@@GLIBC_2.15 + 58: 0000000000028890 42 FUNC WEAK DEFAULT 13 cacos@@GLIBC_2.2.5 + 59: 0000000000031e00 64 FUNC GLOBAL DEFAULT 13 j1f@@GLIBC_2.2.5 + 60: 000000000002c950 381 FUNC GLOBAL DEFAULT 13 __ynf_finite@@GLIBC_2.15 + 61: 000000000001a990 34 IFUNC WEAK DEFAULT 13 floor@@GLIBC_2.2.5 + 62: 000000000003b750 30 FUNC WEAK DEFAULT 13 fdiml@@GLIBC_2.2.5 + 63: 000000000003ba10 36 FUNC GLOBAL DEFAULT 13 __log2l_finite@@GLIBC_2.15 + 64: 0000000000033e10 233 FUNC WEAK DEFAULT 13 casinf@@GLIBC_2.2.5 + 65: 00000000000288c0 410 FUNC WEAK DEFAULT 13 casinh@@GLIBC_2.2.5 + 66: 0000000000025d70 118 FUNC WEAK DEFAULT 13 fmod@@GLIBC_2.2.5 + 67: 0000000000031d90 99 FUNC GLOBAL DEFAULT 13 y0f@@GLIBC_2.2.5 + 68: 000000000003acd0 82 FUNC WEAK DEFAULT 13 j1l@@GLIBC_2.2.5 + 69: 000000000003cc60 221 FUNC WEAK DEFAULT 13 casinl@@GLIBC_2.2.5 + 70: 000000000003ac30 151 FUNC WEAK DEFAULT 13 y0l@@GLIBC_2.2.5 + 71: 0000000000025bd0 154 FUNC WEAK DEFAULT 13 exp@@GLIBC_2.2.5 + 72: 0000000000008310 303 FUNC GLOBAL DEFAULT 13 fesetenv@@GLIBC_2.2.5 + 73: 000000000001f830 56 IFUNC WEAK DEFAULT 13 sin@@GLIBC_2.2.5 + 74: 0000000000035c40 18 FUNC GLOBAL DEFAULT 13 __finitef@@GLIBC_2.2.5 + 75: 000000000002a0e0 165 FUNC WEAK DEFAULT 13 lround@@GLIBC_2.2.5 + 76: 0000000000029390 995 FUNC WEAK DEFAULT 13 clog10@@GLIBC_2.2.5 + 77: 000000000001b200 44 FUNC WEAK DEFAULT 13 significand@@GLIBC_2.2.5 + 78: 0000000000031f70 155 FUNC WEAK DEFAULT 13 gammaf@@GLIBC_2.2.5 + 79: 000000000003f140 15 FUNC GLOBAL DEFAULT 13 __finitel@@GLIBC_2.2.5 + 80: 0000000000032440 21 FUNC WEAK DEFAULT 13 fmaxf@@GLIBC_2.2.5 + 81: 0000000000037060 508 FUNC GLOBAL DEFAULT 13 __j1l_finite@@GLIBC_2.15 + 82: 00000000000342d0 655 FUNC WEAK DEFAULT 13 ctanf@@GLIBC_2.2.5 + 83: 00000000000335b0 795 FUNC WEAK DEFAULT 13 ccoshf@@GLIBC_2.2.5 + 84: 00000000000285c0 708 FUNC WEAK DEFAULT 13 ctanh@@GLIBC_2.2.5 + 85: 000000000003af60 178 FUNC WEAK DEFAULT 13 gammal@@GLIBC_2.2.5 + 86: 000000000003b710 21 FUNC WEAK DEFAULT 13 fmaxl@@GLIBC_2.2.5 + 87: 000000000003d0f0 644 FUNC WEAK DEFAULT 13 ctanl@@GLIBC_2.2.5 + 88: 000000000003c3b0 877 FUNC WEAK DEFAULT 13 ccoshl@@GLIBC_2.2.5 + 89: 000000000002b220 245 FUNC GLOBAL DEFAULT 13 __coshf_finite@@GLIBC_2.15 + 90: 0000000000031e40 99 FUNC GLOBAL DEFAULT 13 y1f@@GLIBC_2.2.5 + 91: 000000000002fc10 824 FUNC WEAK DEFAULT 13 cosf@@GLIBC_2.2.5 + 92: 000000000003b020 165 FUNC WEAK DEFAULT 13 lgammal_r@@GLIBC_2.2.5 + 93: 0000000000025b50 110 FUNC WEAK DEFAULT 13 cosh@@GLIBC_2.2.5 + 94: 000000000003ad30 151 FUNC WEAK DEFAULT 13 y1l@@GLIBC_2.2.5 + 95: 0000000000027f40 25 FUNC WEAK DEFAULT 13 ccos@@GLIBC_2.2.5 + 96: 0000000000039450 233 FUNC WEAK DEFAULT 13 cosl@@GLIBC_2.2.5 + 97: 0000000000038390 36 FUNC GLOBAL DEFAULT 13 __logl_finite@@GLIBC_2.15 + 98: 0000000000008500 16 FUNC GLOBAL DEFAULT 13 fegetexcept@@GLIBC_2.2.5 + 99: 0000000000032590 413 FUNC WEAK DEFAULT 13 remquof@@GLIBC_2.2.5 + 100: 000000000000ae60 40 IFUNC GLOBAL DEFAULT 13 __acos_finite@@GLIBC_2.15 + 101: 000000000003b7b0 541 FUNC WEAK DEFAULT 13 remquol@@GLIBC_2.2.5 + 102: 00000000000263d0 429 FUNC WEAK DEFAULT 13 pow@@GLIBC_2.2.5 + 103: 0000000000031cd0 124 FUNC WEAK DEFAULT 13 hypotf@@GLIBC_2.2.5 + 104: 0000000000008200 71 FUNC GLOBAL DEFAULT 13 fesetexceptflag@@GLIBC_2.2.5 + 105: 00000000000258a0 56 IFUNC GLOBAL DEFAULT 13 tan@@GLIBC_2.2.5 + 106: 0000000000033c80 398 FUNC WEAK DEFAULT 13 catanf@@GLIBC_2.2.5 + 107: 000000000002a6d0 10 FUNC GLOBAL DEFAULT 13 __signbit@@GLIBC_2.2.5 + 108: 0000000000301130 4 OBJECT GLOBAL DEFAULT 28 signgam@@GLIBC_2.2.5 + 109: 0000000000028d10 419 FUNC WEAK DEFAULT 13 catanh@@GLIBC_2.2.5 + 110: 000000000001af30 361 FUNC WEAK DEFAULT 13 nexttoward@@GLIBC_2.2.5 + 111: 000000000003ab30 151 FUNC WEAK DEFAULT 13 hypotl@@GLIBC_2.2.5 + 112: 000000000003cae0 381 FUNC WEAK DEFAULT 13 catanl@@GLIBC_2.2.5 + 113: 00000000000082e0 33 FUNC GLOBAL DEFAULT 13 feholdexcept@@GLIBC_2.2.5 + 114: 0000000000026cc0 377 FUNC GLOBAL DEFAULT 13 __exp2_finite@@GLIBC_2.15 + 115: 000000000001b0a0 34 IFUNC WEAK DEFAULT 13 rint@@GLIBC_2.2.5 + 116: 0000000000010ac0 745 FUNC GLOBAL DEFAULT 13 __hypot_finite@@GLIBC_2.15 + 117: 0000000000032920 346 FUNC GLOBAL DEFAULT 13 __exp2f_finite@@GLIBC_2.15 + 118: 000000000002a3b0 21 FUNC WEAK DEFAULT 13 copysign@@GLIBC_2.2.5 + 119: 0000000000025c70 122 FUNC WEAK DEFAULT 13 exp2@@GLIBC_2.2.5 + 120: 00000000000268c0 417 FUNC WEAK DEFAULT 13 remquo@@GLIBC_2.2.5 + 121: 0000000000036260 240 FUNC GLOBAL DEFAULT 13 __atanhl_finite@@GLIBC_2.15 + 122: 0000000000031890 57 FUNC WEAK DEFAULT 13 acosf@@GLIBC_2.2.5 + 123: 0000000000025a50 45 FUNC WEAK DEFAULT 13 acosh@@GLIBC_2.2.5 + 124: 000000000003a5d0 78 FUNC WEAK DEFAULT 13 acosl@@GLIBC_2.2.5 + 125: 0000000000035520 963 FUNC GLOBAL DEFAULT 13 __clog10f@@GLIBC_2.2.5 + 126: 000000000002e5f0 5 FUNC GLOBAL DEFAULT 13 __sqrtf_finite@@GLIBC_2.15 + 127: 0000000000031bf0 213 FUNC WEAK DEFAULT 13 tgammaf@@GLIBC_2.2.5 + 128: 000000000002e3b0 115 FUNC GLOBAL DEFAULT 13 __scalbf_finite@@GLIBC_2.15 + 129: 000000000003e140 964 FUNC GLOBAL DEFAULT 13 __clog10l@@GLIBC_2.2.5 + 130: 0000000000026780 176 FUNC WEAK DEFAULT 13 fdim@@GLIBC_2.2.5 + 131: 0000000000033250 856 FUNC WEAK DEFAULT 13 csinhf@@GLIBC_2.2.5 + 132: 000000000003aa30 246 FUNC WEAK DEFAULT 13 tgammal@@GLIBC_2.2.5 + 133: 0000000000032a80 117 FUNC WEAK DEFAULT 13 roundf@@GLIBC_2.2.5 + 134: 0000000000014720 269 FUNC GLOBAL DEFAULT 13 __log10_finite@@GLIBC_2.15 + 135: 000000000003c050 864 FUNC WEAK DEFAULT 13 csinhl@@GLIBC_2.2.5 + 136: 000000000000fd60 338 FUNC GLOBAL DEFAULT 13 __cosh_finite@@GLIBC_2.15 + 137: 000000000003ba80 332 FUNC WEAK DEFAULT 13 roundl@@GLIBC_2.2.5 + 138: 0000000000036350 384 FUNC GLOBAL DEFAULT 13 __coshl_finite@@GLIBC_2.15 + 139: 0000000000025cf0 122 FUNC WEAK DEFAULT 13 exp10@@GLIBC_2.2.5 + 140: 000000000000fc00 56 IFUNC GLOBAL DEFAULT 13 __atan2_finite@@GLIBC_2.15 + 141: 000000000002e600 141 FUNC GLOBAL DEFAULT 13 __gammaf_r_finite@@GLIBC_2.15 + 142: 000000000002b320 437 FUNC GLOBAL DEFAULT 13 __expf_finite@@GLIBC_2.15 + 143: 0000000000037b00 2116 FUNC GLOBAL DEFAULT 13 __lgammal_r_finite@@GLIBC_2.15 + 144: 0000000000008a00 228 FUNC GLOBAL DEFAULT 13 __acosh_finite@@GLIBC_2.15 + 145: 0000000000031a30 114 FUNC WEAK DEFAULT 13 expf@@GLIBC_2.2.5 + 146: 000000000001b0e0 278 FUNC WEAK DEFAULT 13 scalbln@@GLIBC_2.2.5 + 147: 000000000003a7e0 139 FUNC WEAK DEFAULT 13 expl@@GLIBC_2.2.5 + 148: 0000000000031940 61 FUNC WEAK DEFAULT 13 atan2f@@GLIBC_2.2.5 + 149: 0000000000027e60 220 FUNC WEAK DEFAULT 13 casin@@GLIBC_2.2.5 + 150: 00000000000323a0 38 FUNC WEAK DEFAULT 13 sqrtf@@GLIBC_2.2.5 + 151: 000000000003a6b0 80 FUNC WEAK DEFAULT 13 atan2l@@GLIBC_2.2.5 + 152: 00000000000082d0 9 FUNC GLOBAL DEFAULT 13 fegetenv@@GLIBC_2.2.5 + 153: 000000000003b630 54 FUNC WEAK DEFAULT 13 sqrtl@@GLIBC_2.2.5 + 154: 000000000002a5b0 130 FUNC WEAK DEFAULT 13 frexp@@GLIBC_2.2.5 + 155: 0000000000035f20 215 FUNC GLOBAL DEFAULT 13 __acoshl_finite@@GLIBC_2.15 + 156: 0000000000011860 669 FUNC GLOBAL DEFAULT 13 __j1_finite@@GLIBC_2.15 + 157: 0000000000030930 863 FUNC WEAK DEFAULT 13 expm1f@@GLIBC_2.2.5 + 158: 000000000002c320 685 FUNC GLOBAL DEFAULT 13 __y1f_finite@@GLIBC_2.15 + 159: 00000000000388e0 130 FUNC GLOBAL DEFAULT 13 __scalbl_finite@@GLIBC_2.15 + 160: 0000000000031a20 5 FUNC WEAK DEFAULT 13 dremf@@GLIBC_2.2.5 + 161: 0000000000039e30 129 FUNC WEAK DEFAULT 13 expm1l@@GLIBC_2.2.5 + 162: 0000000000008270 14 FUNC GLOBAL DEFAULT 13 fegetround@@GLIBC_2.2.5 + 163: 000000000003a7d0 5 FUNC WEAK DEFAULT 13 dreml@@GLIBC_2.2.5 + 164: 000000000002d660 217 FUNC GLOBAL DEFAULT 13 __log10f_finite@@GLIBC_2.15 + 165: 0000000000026ff0 685 FUNC WEAK DEFAULT 13 cexp@@GLIBC_2.2.5 + 166: 0000000000038970 455 FUNC GLOBAL DEFAULT 13 __sinhl_finite@@GLIBC_2.15 + 167: 0000000000027f60 909 FUNC WEAK DEFAULT 13 csin@@GLIBC_2.2.5 + 168: 0000000000027cd0 398 FUNC WEAK DEFAULT 13 catan@@GLIBC_2.2.5 + 169: 0000000000032400 56 FUNC GLOBAL DEFAULT 13 __fpclassifyf@@GLIBC_2.2.5 + 170: 0000000000035d00 213 FUNC WEAK DEFAULT 13 scalbnf@@GLIBC_2.2.5 + 171: 0000000000032530 81 FUNC WEAK DEFAULT 13 truncf@@GLIBC_2.2.5 + 172: 0000000000032320 23 FUNC WEAK DEFAULT 13 scalbf@@GLIBC_2.2.5 + 173: 0000000000032130 397 FUNC WEAK DEFAULT 13 powf@@GLIBC_2.2.5 + 174: 000000000003b6b0 85 FUNC GLOBAL DEFAULT 13 __fpclassifyl@@GLIBC_2.2.5 + 175: 000000000003f290 17 FUNC WEAK DEFAULT 13 scalbnl@@GLIBC_2.2.5 + 176: 000000000003b780 33 FUNC WEAK DEFAULT 13 truncl@@GLIBC_2.2.5 + 177: 000000000003b590 43 FUNC WEAK DEFAULT 13 scalbl@@GLIBC_2.2.5 + 178: 000000000003b1f0 737 FUNC WEAK DEFAULT 13 powl@@GLIBC_2.2.5 + 179: 000000000002a490 279 FUNC WEAK DEFAULT 13 scalbn@@GLIBC_2.2.5 + 180: 000000000002a280 85 FUNC WEAK DEFAULT 13 log2@@GLIBC_2.2.5 + 181: 00000000000364d0 125 FUNC GLOBAL DEFAULT 13 __expl_finite@@GLIBC_2.15 + 182: 0000000000031ab0 106 FUNC WEAK DEFAULT 13 exp2f@@GLIBC_2.2.5 + 183: 0000000000026e40 152 FUNC WEAK DEFAULT 13 round@@GLIBC_2.2.5 + 184: 000000000003a870 125 FUNC WEAK DEFAULT 13 exp2l@@GLIBC_2.2.5 + 185: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.15 + 186: 0000000000036550 21 FUNC GLOBAL DEFAULT 13 __fmodl_finite@@GLIBC_2.15 + 187: 00000000000146e0 56 IFUNC GLOBAL DEFAULT 13 __log_finite@@GLIBC_2.15 + 188: 000000000002b6a0 172 FUNC GLOBAL DEFAULT 13 __hypotf_finite@@GLIBC_2.15 + 189: 00000000000292d0 45 FUNC WEAK DEFAULT 13 cpow@@GLIBC_2.2.5 + 190: 00000000000103c0 56 IFUNC GLOBAL DEFAULT 13 __exp_finite@@GLIBC_2.15 + 191: 00000000000282f0 714 FUNC WEAK DEFAULT 13 ctan@@GLIBC_2.2.5 + 192: 000000000002a380 36 FUNC WEAK DEFAULT 13 finite@@GLIBC_2.2.5 + 193: 0000000000025df0 239 FUNC WEAK DEFAULT 13 tgamma@@GLIBC_2.2.5 + 194: 0000000000019f80 1485 FUNC WEAK DEFAULT 13 erfc@@GLIBC_2.2.5 + 195: 000000000002ff50 1237 FUNC WEAK DEFAULT 13 erff@@GLIBC_2.2.5 + 196: 000000000001ad50 120 FUNC WEAK DEFAULT 13 logb@@GLIBC_2.2.5 + 197: 0000000000032090 77 FUNC WEAK DEFAULT 13 logf@@GLIBC_2.2.5 + 198: 0000000000039540 1045 FUNC WEAK DEFAULT 13 erfl@@GLIBC_2.2.5 + 199: 000000000003b0d0 131 FUNC WEAK DEFAULT 13 logl@@GLIBC_2.2.5 + 200: 0000000000031780 257 FUNC WEAK DEFAULT 13 tanhf@@GLIBC_2.2.5 + 201: 00000000000160f0 146 FUNC GLOBAL DEFAULT 13 __scalb_finite@@GLIBC_2.15 + 202: 000000000002bc10 683 FUNC GLOBAL DEFAULT 13 __y0f_finite@@GLIBC_2.15 + 203: 000000000002a640 137 FUNC WEAK DEFAULT 13 ldexp@@GLIBC_2.2.5 + 204: 0000000000035c40 18 FUNC WEAK DEFAULT 13 finitef@@GLIBC_2.2.5 + 205: 000000000003a4a0 294 FUNC WEAK DEFAULT 13 tanhl@@GLIBC_2.2.5 + 206: 000000000002a0e0 165 FUNC WEAK DEFAULT 13 llround@@GLIBC_2.2.5 + 207: 000000000003f140 15 FUNC WEAK DEFAULT 13 finitel@@GLIBC_2.2.5 + 208: 0000000000026fd0 17 FUNC WEAK DEFAULT 13 carg@@GLIBC_2.2.5 + 209: 0000000000028ec0 1026 FUNC WEAK DEFAULT 13 csqrt@@GLIBC_2.2.5 + 210: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.5 + 211: 000000000002c5d0 888 FUNC GLOBAL DEFAULT 13 __jnf_finite@@GLIBC_2.15 + 212: 000000000002aee0 567 FUNC GLOBAL DEFAULT 13 __atan2f_finite@@GLIBC_2.15 + 213: 00000000000266c0 48 FUNC WEAK DEFAULT 13 ilogb@@GLIBC_2.2.5 + 214: 0000000000031370 888 FUNC WEAK DEFAULT 13 sinf@@GLIBC_2.2.5 + 215: 0000000000026620 110 FUNC WEAK DEFAULT 13 sinh@@GLIBC_2.2.5 + 216: 0000000000032b40 957 FUNC WEAK DEFAULT 13 sincosf@@GLIBC_2.2.5 + 217: 000000000003a310 238 FUNC WEAK DEFAULT 13 sinl@@GLIBC_2.2.5 + 218: 000000000003bc00 370 FUNC WEAK DEFAULT 13 sincosl@@GLIBC_2.2.5 + 219: 0000000000015a50 1691 FUNC GLOBAL DEFAULT 13 __remainder_finite@@GLIBC_2.15 + 220: 0000000000036570 600 FUNC GLOBAL DEFAULT 13 __hypotl_finite@@GLIBC_2.15 + 221: 0000000000035a10 48 IFUNC WEAK DEFAULT 13 fmaf@@GLIBC_2.2.5 + 222: 000000000003e510 2147 FUNC WEAK DEFAULT 13 fmal@@GLIBC_2.2.5 + 223: 0000000000015a20 40 IFUNC GLOBAL DEFAULT 13 __pow_finite@@GLIBC_2.15 + 224: 00000000000378d0 547 FUNC GLOBAL DEFAULT 13 __ynl_finite@@GLIBC_2.15 + 225: 0000000000008250 25 FUNC GLOBAL DEFAULT 13 fetestexcept@@GLIBC_2.2.5 + 226: 0000000000011de0 1147 FUNC GLOBAL DEFAULT 13 __jn_finite@@GLIBC_2.15 + 227: 0000000000026740 23 FUNC WEAK DEFAULT 13 fmax@@GLIBC_2.2.5 + 228: 0000000000025a10 60 FUNC WEAK DEFAULT 13 acos@@GLIBC_2.2.5 + 229: 0000000000035b50 36 FUNC GLOBAL DEFAULT 13 __exp10f_finite@@GLIBC_2.15 + 230: 0000000000026310 85 FUNC WEAK DEFAULT 13 log@@GLIBC_2.2.5 + 231: 0000000000011300 763 FUNC GLOBAL DEFAULT 13 __y0_finite@@GLIBC_2.15 + 232: 0000000000030ce0 771 FUNC WEAK DEFAULT 13 log1pf@@GLIBC_2.2.5 + 233: 0000000000036c00 598 FUNC GLOBAL DEFAULT 13 __y0l_finite@@GLIBC_2.15 + 234: 0000000000031900 57 FUNC WEAK DEFAULT 13 asinf@@GLIBC_2.2.5 + 235: 0000000000017000 353 FUNC WEAK DEFAULT 13 asinh@@GLIBC_2.2.5 + 236: 0000000000035520 963 FUNC WEAK DEFAULT 13 clog10f@@GLIBC_2.2.5 + 237: 0000000000030430 1265 FUNC WEAK DEFAULT 13 erfcf@@GLIBC_2.2.5 + 238: 0000000000039f00 56 FUNC WEAK DEFAULT 13 log1pl@@GLIBC_2.2.5 + 239: 000000000003a660 78 FUNC WEAK DEFAULT 13 asinl@@GLIBC_2.2.5 + 240: 000000000003e140 964 FUNC WEAK DEFAULT 13 clog10l@@GLIBC_2.2.5 + 241: 0000000000039960 1229 FUNC WEAK DEFAULT 13 erfcl@@GLIBC_2.2.5 + 242: 0000000000025ac0 64 FUNC WEAK DEFAULT 13 atan2@@GLIBC_2.2.5 + 243: 0000000000008440 52 FUNC GLOBAL DEFAULT 13 feupdateenv@@GLIBC_2.2.5 + 244: 0000000000037490 1079 FUNC GLOBAL DEFAULT 13 __jnl_finite@@GLIBC_2.15 + 245: 00000000000316f0 130 FUNC WEAK DEFAULT 13 tanf@@GLIBC_2.2.5 + 246: 0000000000035a50 125 FUNC WEAK DEFAULT 13 lroundf@@GLIBC_2.2.5 + 247: 00000000000258e0 290 FUNC WEAK DEFAULT 13 tanh@@GLIBC_2.2.5 + 248: 0000000000026370 85 FUNC WEAK DEFAULT 13 log10@@GLIBC_2.2.5 + 249: 0000000000035ad0 125 FUNC WEAK DEFAULT 13 llroundf@@GLIBC_2.2.5 + 250: 0000000000036250 13 FUNC GLOBAL DEFAULT 13 __atan2l_finite@@GLIBC_2.15 + 251: 000000000003a400 160 FUNC WEAK DEFAULT 13 tanl@@GLIBC_2.2.5 + 252: 0000000000026fb0 2 FUNC WEAK DEFAULT 13 creal@@GLIBC_2.2.5 + 253: 000000000003ed90 237 FUNC WEAK DEFAULT 13 lroundl@@GLIBC_2.2.5 + 254: 0000000000031980 64 FUNC WEAK DEFAULT 13 atanhf@@GLIBC_2.2.5 + 255: 00000000000319c0 93 FUNC WEAK DEFAULT 13 coshf@@GLIBC_2.2.5 + 256: 000000000003ee80 237 FUNC WEAK DEFAULT 13 llroundl@@GLIBC_2.2.5 + 257: 000000000000ae90 40 IFUNC GLOBAL DEFAULT 13 __asin_finite@@GLIBC_2.15 + 258: 000000000003a700 92 FUNC WEAK DEFAULT 13 atanhl@@GLIBC_2.2.5 + 259: 000000000003a760 104 FUNC WEAK DEFAULT 13 coshl@@GLIBC_2.2.5 + 260: 0000000000030c90 12 FUNC WEAK DEFAULT 13 fabsf@@GLIBC_2.2.5 + 261: 0000000000039ec0 7 FUNC WEAK DEFAULT 13 fabsl@@GLIBC_2.2.5 + 262: 0000000000025fb0 111 FUNC GLOBAL DEFAULT 13 y0@@GLIBC_2.2.5 + 263: 0000000000026060 111 FUNC GLOBAL DEFAULT 13 y1@@GLIBC_2.2.5 + 264: 00000000003010d8 4 OBJECT GLOBAL DEFAULT 27 _LIB_VERSION@@GLIBC_2.2.5 + 265: 000000000002fbd0 34 IFUNC WEAK DEFAULT 13 ceilf@@GLIBC_2.2.5 + 266: 000000000002a3d0 183 FUNC WEAK DEFAULT 13 modf@@GLIBC_2.2.5 + 267: 0000000000039420 39 FUNC WEAK DEFAULT 13 ceill@@GLIBC_2.2.5 + 268: 0000000000031b20 106 FUNC WEAK DEFAULT 13 pow10f@@GLIBC_2.2.5 + 269: 000000000002aca0 561 FUNC GLOBAL DEFAULT 13 __asinf_finite@@GLIBC_2.15 + 270: 000000000003ba40 49 FUNC GLOBAL DEFAULT 13 __exp2l_finite@@GLIBC_2.15 + 271: 000000000002f850 577 FUNC WEAK DEFAULT 13 atanf@@GLIBC_2.2.5 + 272: 000000000003a8f0 125 FUNC WEAK DEFAULT 13 pow10l@@GLIBC_2.2.5 + 273: 0000000000025b00 65 FUNC WEAK DEFAULT 13 atanh@@GLIBC_2.2.5 + 274: 0000000000034e30 430 FUNC WEAK DEFAULT 13 catanhf@@GLIBC_2.2.5 + 275: 000000000003ef70 125 FUNC GLOBAL DEFAULT 13 __exp10l_finite@@GLIBC_2.15 + 276: 0000000000039300 9 FUNC WEAK DEFAULT 13 atanl@@GLIBC_2.2.5 + 277: 0000000000008190 99 FUNC GLOBAL DEFAULT 13 feraiseexcept@@GLIBC_2.2.5 + 278: 000000000003daf0 350 FUNC WEAK DEFAULT 13 catanhl@@GLIBC_2.2.5 + 279: 00000000000322c0 88 FUNC WEAK DEFAULT 13 remainderf@@GLIBC_2.2.5 + 280: 0000000000032f00 48 FUNC WEAK DEFAULT 13 conjf@@GLIBC_2.2.5 + 281: 0000000000026a70 584 FUNC GLOBAL DEFAULT 13 __log2_finite@@GLIBC_2.15 + 282: 000000000002faa0 293 FUNC WEAK DEFAULT 13 cbrtf@@GLIBC_2.2.5 + 283: 0000000000038b40 7 FUNC GLOBAL DEFAULT 13 __sqrtl_finite@@GLIBC_2.15 + 284: 000000000003b4e0 175 FUNC WEAK DEFAULT 13 remainderl@@GLIBC_2.2.5 + 285: 000000000001a9d0 885 FUNC WEAK DEFAULT 13 log1p@@GLIBC_2.2.5 + 286: 0000000000035eb0 8 FUNC GLOBAL DEFAULT 13 __signbitf@@GLIBC_2.2.5 + 287: 0000000000031340 42 FUNC WEAK DEFAULT 13 significandf@@GLIBC_2.2.5 + 288: 000000000003bd80 11 FUNC WEAK DEFAULT 13 conjl@@GLIBC_2.2.5 + 289: 0000000000039310 262 FUNC WEAK DEFAULT 13 cbrtl@@GLIBC_2.2.5 + 290: 0000000000026580 120 FUNC WEAK DEFAULT 13 remainder@@GLIBC_2.2.5 + 291: 000000000002d740 2028 FUNC GLOBAL DEFAULT 13 __powf_finite@@GLIBC_2.15 + 292: 000000000003f3e0 19 FUNC GLOBAL DEFAULT 13 __signbitl@@GLIBC_2.2.5 + 293: 000000000003a300 9 FUNC WEAK DEFAULT 13 significandl@@GLIBC_2.2.5 + 294: 0000000000032f40 13 FUNC WEAK DEFAULT 13 crealf@@GLIBC_2.2.5 + 295: 000000000003bda0 5 FUNC WEAK DEFAULT 13 creall@@GLIBC_2.2.5 + 296: 0000000000026120 135 FUNC GLOBAL DEFAULT 13 yn@@GLIBC_2.2.5 + 297: 0000000000032340 93 FUNC WEAK DEFAULT 13 sinhf@@GLIBC_2.2.5 + 298: 0000000000035b80 77 FUNC WEAK DEFAULT 13 log2f@@GLIBC_2.2.5 + 299: 0000000000031eb0 64 FUNC GLOBAL DEFAULT 13 jnf@@GLIBC_2.2.5 + 300: 000000000003b5c0 104 FUNC WEAK DEFAULT 13 sinhl@@GLIBC_2.2.5 + 301: 0000000000035a40 6 FUNC WEAK DEFAULT 13 lrintf@@GLIBC_2.2.5 + 302: 0000000000031050 168 FUNC WEAK DEFAULT 13 nextafterf@@GLIBC_2.2.5 + 303: 000000000003eff0 131 FUNC WEAK DEFAULT 13 log2l@@GLIBC_2.2.5 + 304: 000000000003add0 139 FUNC WEAK DEFAULT 13 jnl@@GLIBC_2.2.5 + 305: 0000000000029390 995 FUNC GLOBAL DEFAULT 13 __clog10@@GLIBC_2.2.5 + 306: 0000000000039f50 645 FUNC WEAK DEFAULT 13 nextafterl@@GLIBC_2.2.5 + 307: 000000000003ed80 15 FUNC WEAK DEFAULT 13 lrintl@@GLIBC_2.2.5 + 308: 0000000000019990 34 IFUNC WEAK DEFAULT 13 ceil@@GLIBC_2.2.5 + 309: 000000000002c0b0 616 FUNC GLOBAL DEFAULT 13 __j1f_finite@@GLIBC_2.15 + 310: 0000000000032f30 13 FUNC WEAK DEFAULT 13 cimagf@@GLIBC_2.2.5 + 311: 0000000000032520 9 FUNC WEAK DEFAULT 13 nanf@@GLIBC_2.2.5 + 312: 000000000003bd90 5 FUNC WEAK DEFAULT 13 cimagl@@GLIBC_2.2.5 + 313: 0000000000033f00 52 FUNC WEAK DEFAULT 13 ccosf@@GLIBC_2.2.5 + 314: 0000000000027600 779 FUNC WEAK DEFAULT 13 ccosh@@GLIBC_2.2.5 + 315: 000000000003b770 9 FUNC WEAK DEFAULT 13 nanl@@GLIBC_2.2.5 + 316: 000000000003cd40 23 FUNC WEAK DEFAULT 13 ccosl@@GLIBC_2.2.5 + 317: 0000000000038b50 212 FUNC GLOBAL DEFAULT 13 __gammal_r_finite@@GLIBC_2.15 + 318: 00000000000318d0 43 FUNC WEAK DEFAULT 13 acoshf@@GLIBC_2.2.5 + 319: 0000000000030ff0 84 FUNC WEAK DEFAULT 13 logbf@@GLIBC_2.2.5 + 320: 000000000003a620 63 FUNC WEAK DEFAULT 13 acoshl@@GLIBC_2.2.5 + 321: 0000000000036000 581 FUNC GLOBAL DEFAULT 13 __asinl_finite@@GLIBC_2.15 + 322: 0000000000025a80 60 FUNC WEAK DEFAULT 13 asin@@GLIBC_2.2.5 + 323: 000000000001a980 13 FUNC WEAK DEFAULT 13 fabs@@GLIBC_2.2.5 + 324: 000000000002d3d0 645 FUNC GLOBAL DEFAULT 13 __logf_finite@@GLIBC_2.15 + 325: 00000000000124e0 2470 FUNC GLOBAL DEFAULT 13 __lgamma_r_finite@@GLIBC_2.15 + 326: 0000000000032010 127 FUNC WEAK DEFAULT 13 lgammaf_r@@GLIBC_2.2.5 + 327: 00000000000163a0 176 FUNC GLOBAL DEFAULT 13 __gamma_r_finite@@GLIBC_2.15 + 328: 0000000000039f40 9 FUNC WEAK DEFAULT 13 logbl@@GLIBC_2.2.5 + 329: 0000000000035de0 88 FUNC WEAK DEFAULT 13 frexpf@@GLIBC_2.2.5 + 330: 0000000000031ef0 120 FUNC GLOBAL DEFAULT 13 ynf@@GLIBC_2.2.5 + 331: 000000000002a0d0 6 FUNC WEAK DEFAULT 13 llrint@@GLIBC_2.2.5 + 332: 0000000000026600 23 FUNC WEAK DEFAULT 13 scalb@@GLIBC_2.2.5 + 333: 000000000003f2b0 132 FUNC WEAK DEFAULT 13 frexpl@@GLIBC_2.2.5 + 334: 000000000003ae60 255 FUNC WEAK DEFAULT 13 ynl@@GLIBC_2.2.5 + 335: 000000000002e2a0 258 FUNC GLOBAL DEFAULT 13 __remainderf_finite@@GLIBC_2.15 + 336: 0000000000037260 555 FUNC GLOBAL DEFAULT 13 __y1l_finite@@GLIBC_2.15 + 337: 0000000000026830 9 FUNC WEAK DEFAULT 13 nan@@GLIBC_2.2.5 + 338: 00000000000261b0 177 FUNC WEAK DEFAULT 13 lgamma@@GLIBC_2.2.5 + 339: 0000000000034800 103 FUNC WEAK DEFAULT 13 cacosf@@GLIBC_2.2.5 + 340: 0000000000028a60 675 FUNC WEAK DEFAULT 13 cacosh@@GLIBC_2.2.5 + 341: 000000000002a190 232 FUNC GLOBAL DEFAULT 13 __exp10_finite@@GLIBC_2.15 + 342: 0000000000038400 36 FUNC GLOBAL DEFAULT 13 __log10l_finite@@GLIBC_2.15 + 343: 0000000000035490 131 FUNC WEAK DEFAULT 13 cprojf@@GLIBC_2.2.5 + 344: 0000000000027910 947 FUNC WEAK DEFAULT 13 clog@@GLIBC_2.2.5 + 345: 000000000003d610 55 FUNC WEAK DEFAULT 13 cacosl@@GLIBC_2.2.5 + 346: 0000000000034a90 921 FUNC WEAK DEFAULT 13 cacoshf@@GLIBC_2.2.5 + 347: 000000000003e0c0 119 FUNC WEAK DEFAULT 13 cprojl@@GLIBC_2.2.5 + 348: 000000000003d7f0 767 FUNC WEAK DEFAULT 13 cacoshl@@GLIBC_2.2.5 + 349: 0000000000011b00 736 FUNC GLOBAL DEFAULT 13 __y1_finite@@GLIBC_2.15 + 350: 000000000002b120 255 FUNC GLOBAL DEFAULT 13 __atanhf_finite@@GLIBC_2.15 + 351: 0000000000032f70 23 FUNC WEAK DEFAULT 13 cargf@@GLIBC_2.2.5 + 352: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.4 + 353: 0000000000019810 56 IFUNC GLOBAL DEFAULT 13 atan@@GLIBC_2.2.5 + 354: 0000000000031f70 155 FUNC WEAK DEFAULT 13 lgammaf@@GLIBC_2.2.5 + 355: 0000000000029300 131 FUNC WEAK DEFAULT 13 cproj@@GLIBC_2.2.5 + 356: 000000000002a8f0 705 FUNC GLOBAL DEFAULT 13 __acosf_finite@@GLIBC_2.15 + 357: 0000000000026fc0 5 FUNC WEAK DEFAULT 13 cabs@@GLIBC_2.2.5 + 358: 000000000003bdc0 21 FUNC WEAK DEFAULT 13 cargl@@GLIBC_2.2.5 + 359: 000000000003af60 178 FUNC WEAK DEFAULT 13 lgammal@@GLIBC_2.2.5 + 360: 0000000000026840 117 FUNC WEAK DEFAULT 13 trunc@@GLIBC_2.2.5 + 361: 0000000000030ca0 34 IFUNC WEAK DEFAULT 13 floorf@@GLIBC_2.2.5 + 362: 0000000000008140 40 FUNC GLOBAL DEFAULT 13 feclearexcept@@GLIBC_2.2.5 + 363: 000000000001a550 1061 FUNC WEAK DEFAULT 13 expm1@@GLIBC_2.2.5 + 364: 0000000000039ed0 39 FUNC WEAK DEFAULT 13 floorl@@GLIBC_2.2.5 + 365: 000000000000fc40 274 FUNC GLOBAL DEFAULT 13 __atanh_finite@@GLIBC_2.15 + 366: 000000000002f700 327 FUNC WEAK DEFAULT 13 asinhf@@GLIBC_2.2.5 + 367: 000000000002cad0 2290 FUNC GLOBAL DEFAULT 13 __lgammaf_r_finite@@GLIBC_2.15 + 368: 000000000002b960 678 FUNC GLOBAL DEFAULT 13 __j0f_finite@@GLIBC_2.15 + 369: 0000000000026f20 106 FUNC WEAK DEFAULT 13 sincos@@GLIBC_2.2.5 + 370: 00000000000391e0 278 FUNC WEAK DEFAULT 13 asinhl@@GLIBC_2.2.5 + 371: 00000000000320e0 77 FUNC WEAK DEFAULT 13 log10f@@GLIBC_2.2.5 + 372: 0000000000035e40 101 FUNC WEAK DEFAULT 13 ldexpf@@GLIBC_2.2.5 + 373: 0000000000032f90 689 FUNC WEAK DEFAULT 13 cexpf@@GLIBC_2.2.5 + 374: 000000000003b160 131 FUNC WEAK DEFAULT 13 log10l@@GLIBC_2.2.5 + 375: 000000000003f340 146 FUNC WEAK DEFAULT 13 ldexpl@@GLIBC_2.2.5 + 376: 0000000000034fe0 1032 FUNC WEAK DEFAULT 13 csqrtf@@GLIBC_2.2.5 + 377: 000000000003bde0 622 FUNC WEAK DEFAULT 13 cexpl@@GLIBC_2.2.5 + 378: 00000000000199d0 1445 FUNC WEAK DEFAULT 13 erf@@GLIBC_2.2.5 + 379: 0000000000008170 29 FUNC GLOBAL DEFAULT 13 fegetexceptflag@@GLIBC_2.2.5 + 380: 0000000000032f50 23 FUNC WEAK DEFAULT 13 cabsf@@GLIBC_2.2.5 + 381: 000000000003dc50 989 FUNC WEAK DEFAULT 13 csqrtl@@GLIBC_2.2.5 + 382: 00000000000323d0 48 FUNC WEAK DEFAULT 13 ilogbf@@GLIBC_2.2.5 + 383: 000000000003bdb0 5 FUNC WEAK DEFAULT 13 cabsl@@GLIBC_2.2.5 + 384: 00000000000388c0 23 FUNC GLOBAL DEFAULT 13 __remainderl_finite@@GLIBC_2.15 + 385: 000000000003b670 55 FUNC WEAK DEFAULT 13 ilogbl@@GLIBC_2.2.5 + 386: 0000000000026760 23 FUNC WEAK DEFAULT 13 fmin@@GLIBC_2.2.5 + 387: 0000000000008280 70 FUNC GLOBAL DEFAULT 13 fesetround@@GLIBC_2.2.5 + 388: 0000000000034870 538 FUNC WEAK DEFAULT 13 casinhf@@GLIBC_2.2.5 + 389: 000000000002abc0 212 FUNC GLOBAL DEFAULT 13 __acoshf_finite@@GLIBC_2.15 + 390: 000000000003d650 413 FUNC WEAK DEFAULT 13 casinhl@@GLIBC_2.2.5 + 391: 0000000000019850 318 FUNC WEAK DEFAULT 13 cbrt@@GLIBC_2.2.5 + 392: 0000000000035f00 25 FUNC GLOBAL DEFAULT 13 __acosl_finite@@GLIBC_2.15 + 393: 00000000000108c0 504 FUNC GLOBAL DEFAULT 13 __fmod_finite@@GLIBC_2.15 + 394: 0000000000026690 41 FUNC WEAK DEFAULT 13 sqrt@@GLIBC_2.2.5 + 395: 000000000002e430 445 FUNC GLOBAL DEFAULT 13 __sinhf_finite@@GLIBC_2.15 + 396: 00000000000353f0 153 FUNC WEAK DEFAULT 13 cpowf@@GLIBC_2.2.5 + 397: 00000000000369c0 561 FUNC GLOBAL DEFAULT 13 __j0l_finite@@GLIBC_2.15 + 398: 0000000000031b90 86 FUNC WEAK DEFAULT 13 fmodf@@GLIBC_2.2.5 + 399: 000000000001f7f0 56 IFUNC WEAK DEFAULT 13 cos@@GLIBC_2.2.5 + 400: 000000000003e030 141 FUNC WEAK DEFAULT 13 cpowl@@GLIBC_2.2.5 + 401: 0000000000032460 21 FUNC WEAK DEFAULT 13 fminf@@GLIBC_2.2.5 + 402: 0000000000008480 49 FUNC GLOBAL DEFAULT 13 fedisableexcept@@GLIBC_2.2.5 + 403: 000000000003a970 181 FUNC WEAK DEFAULT 13 fmodl@@GLIBC_2.2.5 + 404: 0000000000035c60 18 FUNC WEAK DEFAULT 13 copysignf@@GLIBC_2.2.5 + 405: 0000000000035c80 121 FUNC WEAK DEFAULT 13 modff@@GLIBC_2.2.5 + 406: 000000000003b730 19 FUNC WEAK DEFAULT 13 fminl@@GLIBC_2.2.5 + 407: 000000000003f150 30 FUNC WEAK DEFAULT 13 copysignl@@GLIBC_2.2.5 + 408: 0000000000026f90 13 FUNC WEAK DEFAULT 13 conj@@GLIBC_2.2.5 + 409: 000000000003f170 281 FUNC WEAK DEFAULT 13 modfl@@GLIBC_2.2.5 + 410: 0000000000031210 34 IFUNC WEAK DEFAULT 13 rintf@@GLIBC_2.2.5 + 411: 0000000000026ee0 34 IFUNC WEAK DEFAULT 13 nearbyint@@GLIBC_2.2.5 + 412: 000000000003a1e0 7 FUNC WEAK DEFAULT 13 rintl@@GLIBC_2.2.5 + 413: 000000000002b4e0 438 FUNC GLOBAL DEFAULT 13 __fmodf_finite@@GLIBC_2.15 + 414: 00000000000266f0 80 FUNC GLOBAL DEFAULT 13 __fpclassify@@GLIBC_2.2.5 + 415: 0000000000025f70 60 FUNC GLOBAL DEFAULT 13 j0@@GLIBC_2.2.5 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnspr4.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnspr4.so.txt new file mode 100644 index 000000000000..5f06cbcb0e9b --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnspr4.so.txt @@ -0,0 +1,588 @@ +Library: /lib64/libnspr4.so +Package: nspr-4.25.0-2.el7_9.x86_64 + + +Symbol table '.dynsym' contains 582 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND inet_ntop@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (3) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.2.5 (4) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semget@GLIBC_2.2.5 (2) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.2.5 (4) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcasecmp@GLIBC_2.2.5 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (4) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpriority@GLIBC_2.2.5 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime_r@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND secure_getenv@GLIBC_2.17 (5) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.3.2 (6) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkdir@GLIBC_2.2.5 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.2.5 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.2.5 (4) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmdt@GLIBC_2.2.5 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (4) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __h_errno_location@GLIBC_2.2.5 (4) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_kill@GLIBC_2.2.5 (4) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.3.2 (6) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.2.5 (2) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.2.5 (4) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat64@GLIBC_2.2.5 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (2) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.2.5 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND msync@GLIBC_2.2.5 (4) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyname_r@GLIBC_2.2.5 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rmdir@GLIBC_2.2.5 (2) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND chdir@GLIBC_2.2.5 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (7) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dup2@GLIBC_2.2.5 (2) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.2.5 (4) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setspecific@GLIBC_2.2.5 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (4) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fdelt_chk@GLIBC_2.15 (8) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_init@GLIBC_2.2.5 (4) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (2) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.2.5 (2) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.2.5 (2) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.2.5 (4) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dladdr@GLIBC_2.2.5 (9) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (2) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setpriority@GLIBC_2.2.5 (2) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.2.5 (2) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strnlen@GLIBC_2.2.5 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendto@GLIBC_2.2.5 (4) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (4) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pipe@GLIBC_2.2.5 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getnameinfo@GLIBC_2.2.5 (2) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (2) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_yield@GLIBC_2.2.5 (2) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (2) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (4) + 70: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.2.5 (2) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_init@GLIBC_2.2.5 (4) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (2) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (6) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.2.5 (2) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execve@GLIBC_2.2.5 (2) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putenv@GLIBC_2.2.5 (2) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat64@GLIBC_2.2.5 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (3) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND syscall@GLIBC_2.2.5 (2) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.2.5 (2) + 83: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (2) + 85: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND environ@GLIBC_2.2.5 (2) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (10) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socketpair@GLIBC_2.2.5 (2) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND kill@GLIBC_2.2.5 (2) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stpcpy_chk@GLIBC_2.3.4 (3) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND select@GLIBC_2.2.5 (2) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (2) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.3.2 (6) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (2) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setdetachstate@GLIBC_2.2.5 (4) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.2.5 (9) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap64@GLIBC_2.2.5 (2) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getspecific@GLIBC_2.2.5 (4) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (4) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutexattr_settype@GLIBC_2.2.5 (4) + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (2) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (2) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND listen@GLIBC_2.2.5 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvfrom@GLIBC_2.2.5 (4) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (2) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.2.5 (11) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.2.5 (2) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.2.5 (9) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setstacksize@GLIBC_2.2.5 (4) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setrlimit@GLIBC_2.2.5 (2) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendfile@GLIBC_2.2.5 (2) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (3) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (2) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyname2_r@GLIBC_2.2.5 (2) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_create@GLIBC_2.2.5 (4) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_condattr_init@GLIBC_2.2.5 (4) + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.2.5 (2) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bind@GLIBC_2.2.5 (2) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open64@GLIBC_2.2.5 (4) + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.2.5 (2) + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.2.5 (4) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.2.5 (4) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.3.2 (6) + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND waitpid@GLIBC_2.2.5 (4) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.3.2 (6) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (4) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND access@GLIBC_2.2.5 (2) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmctl@GLIBC_2.2.5 (2) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (2) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostbyaddr_r@GLIBC_2.2.5 (2) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sysconf@GLIBC_2.2.5 (2) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_join@GLIBC_2.2.5 (4) + 134: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND rename@GLIBC_2.2.5 (2) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND accept@GLIBC_2.2.5 (4) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semctl@GLIBC_2.2.5 (2) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.2.5 (2) + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (2) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmat@GLIBC_2.2.5 (2) + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shmget@GLIBC_2.2.5 (2) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_destroy@GLIBC_2.2.5 (4) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigwait@GLIBC_2.2.5 (4) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND semop@GLIBC_2.2.5 (2) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.2.5 (2) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpagesize@GLIBC_2.2.5 (2) + 147: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.2.5 (2) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_key_delete@GLIBC_2.2.5 (4) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (4) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek64@GLIBC_2.2.5 (4) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (3) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getrlimit@GLIBC_2.2.5 (2) + 153: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftok@GLIBC_2.2.5 (2) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.2.5 (2) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getprotobynumber_r@GLIBC_2.2.5 (2) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getprotobyname_r@GLIBC_2.2.5 (2) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (2) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.2.5 (9) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sleep@GLIBC_2.2.5 (2) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (4) + 162: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaddset@GLIBC_2.2.5 (2) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND execv@GLIBC_2.2.5 (2) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fork@GLIBC_2.2.5 (4) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (2) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (4) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_trylock@GLIBC_2.2.5 (4) + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dlerror@GLIBC_2.2.5 (9) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (12) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (12) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.2.5 (2) + 173: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (2) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (2) + 175: 000000000001c9a0 38 FUNC GLOBAL DEFAULT 11 PR_FreeAddrInfo + 176: 0000000000027560 92 FUNC GLOBAL DEFAULT 11 PR_Delete + 177: 0000000000027650 24 FUNC GLOBAL DEFAULT 11 PR_GetFileInfo + 178: 0000000000015a00 52 FUNC GLOBAL DEFAULT 11 PR_DeleteSharedMemory + 179: 0000000000015510 283 FUNC GLOBAL DEFAULT 11 PR_FPrintZoneStats + 180: 000000000000e450 9 FUNC GLOBAL DEFAULT 11 PR_Bind + 181: 000000000000e3c0 9 FUNC GLOBAL DEFAULT 11 PR_Seek64 + 182: 000000000001afc0 11 FUNC GLOBAL DEFAULT 11 LL_MinInt + 183: 00000000000284f0 139 FUNC GLOBAL DEFAULT 11 PR_FD_NISSET + 184: 0000000000016370 71 FUNC GLOBAL DEFAULT 11 PR_GetCounterNameFromHandle + 185: 000000000001c720 41 FUNC GLOBAL DEFAULT 11 PR_ntohll + 186: 000000000000e440 9 FUNC GLOBAL DEFAULT 11 PR_Accept + 187: 0000000000020290 3 FUNC GLOBAL DEFAULT 11 PR_GMTParameters + 188: 000000000000e550 12 FUNC GLOBAL DEFAULT 11 PR_SendFile + 189: 0000000000027a90 204 FUNC GLOBAL DEFAULT 11 PR_NewTCPSocketPair + 190: 0000000000029ea0 261 FUNC GLOBAL DEFAULT 11 PR_SetCurrentThreadName + 191: 0000000000014e10 65 FUNC GLOBAL DEFAULT 11 PR_FindSymbol + 192: 000000000001afd0 8 FUNC GLOBAL DEFAULT 11 LL_MaxUint + 193: 000000000000e4f0 12 FUNC GLOBAL DEFAULT 11 PR_TransmitFile + 194: 0000000000026ee0 8 FUNC GLOBAL DEFAULT 11 PR_GetTCPMethods + 195: 0000000000013fc0 83 FUNC GLOBAL DEFAULT 11 PR_CNotifyAll + 196: 0000000000012270 172 FUNC GLOBAL DEFAULT 11 PR_snprintf + 197: 000000000001e8f0 108 FUNC GLOBAL DEFAULT 11 PR_JoinJob + 198: 0000000000029970 40 FUNC GLOBAL DEFAULT 11 PR_SetThreadGCAble + 199: 000000000001d1b0 282 FUNC GLOBAL DEFAULT 11 PR_GetSystemInfo + 200: 000000000001bda0 598 FUNC GLOBAL DEFAULT 11 PR_GetHostByAddr + 201: 000000000001b760 320 FUNC GLOBAL DEFAULT 11 PR_GetHostByName + 202: 000000000001fc50 773 FUNC GLOBAL DEFAULT 11 PR_GetTraceEntries + 203: 000000000001caa0 46 FUNC GLOBAL DEFAULT 11 PR_GetCanonNameFromAddrInfo + 204: 0000000000020c00 453 FUNC GLOBAL DEFAULT 11 PR_LocalTimeParameters + 205: 0000000000027200 104 FUNC GLOBAL DEFAULT 11 PR_AllocFileDesc + 206: 0000000000023510 258 FUNC GLOBAL DEFAULT 11 PR_ExitMonitor + 207: 0000000000023ba0 111 FUNC GLOBAL DEFAULT 11 PR_WaitSemaphore + 208: 0000000000027e00 97 FUNC GLOBAL DEFAULT 11 PR_ImportUDPSocket + 209: 0000000000027940 227 FUNC GLOBAL DEFAULT 11 PR_ReadDir + 210: 0000000000029510 24 FUNC GLOBAL DEFAULT 11 PR_UnblockInterrupt + 211: 0000000000015ee0 5 FUNC GLOBAL DEFAULT 11 PR_AtomicIncrement + 212: 0000000000023c90 197 FUNC GLOBAL DEFAULT 11 PR_DeleteSemaphore + 213: 000000000000f460 8 FUNC GLOBAL DEFAULT 11 PR_GetDefaultIOMethods + 214: 000000000000e390 9 FUNC GLOBAL DEFAULT 11 PR_Read + 215: 0000000000029930 5 FUNC GLOBAL DEFAULT 11 PR_GetThreadID + 216: 000000000001a520 7 FUNC GLOBAL DEFAULT 11 PR_Initialized + 217: 0000000000014240 99 FUNC GLOBAL DEFAULT 11 PR_RWLock_Unlock + 218: 0000000000013d00 358 FUNC GLOBAL DEFAULT 11 PR_CEnterMonitor + 219: 0000000000028fe0 29 FUNC GLOBAL DEFAULT 11 PR_CreateThread + 220: 000000000000d5f0 337 FUNC GLOBAL DEFAULT 11 PR_CreateWaitGroup + 221: 000000000001ae70 33 FUNC GLOBAL DEFAULT 11 PR_IntervalToMilliseconds + 222: 000000000000e640 799 FUNC GLOBAL DEFAULT 11 PR_EmulateSendFile + 223: 00000000000294f0 24 FUNC GLOBAL DEFAULT 11 PR_BlockInterrupt + 224: 000000000000e150 288 FUNC GLOBAL DEFAULT 11 PR_EnumerateWaitGroup + 225: 0000000000028240 55 FUNC GLOBAL DEFAULT 11 PR_FD_ZERO + 226: 000000000002a000 2 FUNC GLOBAL DEFAULT 11 PR_SetThreadRecycleMode + 227: 000000000000e3f0 9 FUNC GLOBAL DEFAULT 11 PR_GetOpenFileInfo + 228: 000000000000e110 62 FUNC GLOBAL DEFAULT 11 PR_DestroyMWaitEnumerator + 229: 000000000000e530 12 FUNC GLOBAL DEFAULT 11 PR_GetSocketOption + 230: 000000000000d4b0 314 FUNC GLOBAL DEFAULT 11 PR_CancelWaitGroup + 231: 0000000000028160 108 FUNC GLOBAL DEFAULT 11 PR_SetSysfdTableSize + 232: 0000000000028110 74 FUNC GLOBAL DEFAULT 11 PR_GetSysfdTableMax + 233: 00000000000148f0 279 FUNC GLOBAL DEFAULT 11 PR_GetLibraryPath + 234: 0000000000015a40 5 FUNC GLOBAL DEFAULT 11 PR_OpenAnonFileMap + 235: 000000000023dd20 0 NOTYPE GLOBAL DEFAULT 24 _end + 236: 00000000000159e0 5 FUNC GLOBAL DEFAULT 11 PR_DetachSharedMemory + 237: 000000000001a550 2 FUNC GLOBAL DEFAULT 11 PR_EnableClockInterrupts + 238: 000000000001a590 39 FUNC GLOBAL DEFAULT 11 PR_Initialize + 239: 0000000000029000 29 FUNC GLOBAL DEFAULT 11 PR_CreateThreadGCAble + 240: 000000000001a730 5 FUNC GLOBAL DEFAULT 11 PR_SetStdioRedirect + 241: 000000000001d1a0 6 FUNC GLOBAL DEFAULT 11 PR_GetPathSeparator + 242: 000000000001c770 547 FUNC GLOBAL DEFAULT 11 PR_GetAddrInfoByName + 243: 000000000001a7b0 388 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetInheritableFD + 244: 000000000000ff90 130 FUNC GLOBAL DEFAULT 11 PR_LogFlush + 245: 000000000000e410 9 FUNC GLOBAL DEFAULT 11 PR_Sync + 246: 000000000001af80 17 FUNC GLOBAL DEFAULT 11 PR_FloorLog2 + 247: 0000000000027f20 62 FUNC GLOBAL DEFAULT 11 PR_FileDesc2NativeHandle + 248: 000000000001a1b0 118 FUNC GLOBAL DEFAULT 11 PR_ErrorInstallTable + 249: 000000000001ac50 251 FUNC GLOBAL DEFAULT 11 PR_CallOnceWithArg + 250: 0000000000015e60 106 FUNC GLOBAL DEFAULT 11 PR_ResetAlarm + 251: 0000000000016410 69 FUNC GLOBAL DEFAULT 11 PR_DecrementCounter + 252: 0000000000015f00 5 FUNC GLOBAL DEFAULT 11 PR_AtomicSet + 253: 0000000000010b40 86 FUNC GLOBAL DEFAULT 11 PR_WaitForPollableEvent + 254: 000000000001ae20 45 FUNC GLOBAL DEFAULT 11 PR_MicrosecondsToInterval + 255: 00000000000163c0 69 FUNC GLOBAL DEFAULT 11 PR_IncrementCounter + 256: 000000000001a940 325 FUNC GLOBAL DEFAULT 11 PR_GetInheritedFD + 257: 00000000000278b0 122 FUNC GLOBAL DEFAULT 11 PR_OpenDir + 258: 0000000000026ec0 8 FUNC GLOBAL DEFAULT 11 PR_GetFileMethods + 259: 000000000001d0c0 23 FUNC GLOBAL DEFAULT 11 PR_CreateOrderedLock + 260: 000000000001d420 52 FUNC GLOBAL DEFAULT 11 PR_GetPhysicalMemorySize + 261: 0000000000023190 255 FUNC GLOBAL DEFAULT 11 PR_WaitCondVar + 262: 000000000001d180 6 FUNC GLOBAL DEFAULT 11 PR_GetDirectorySeparator + 263: 0000000000027f60 14 FUNC GLOBAL DEFAULT 11 PR_ChangeFileDescNativeHandle + 264: 000000000000e510 12 FUNC GLOBAL DEFAULT 11 PR_GetSockName + 265: 0000000000029360 9 FUNC GLOBAL DEFAULT 11 PR_GetThreadType + 266: 000000000001c750 21 FUNC GLOBAL DEFAULT 11 PR_htonll + 267: 0000000000019f60 54 FUNC GLOBAL DEFAULT 11 PR_GetErrorText + 268: 000000000001ef40 247 FUNC GLOBAL DEFAULT 11 PR_DestroyTrace + 269: 0000000000027270 47 FUNC GLOBAL DEFAULT 11 _pr_test_ipv6_socket + 270: 0000000000029e60 58 FUNC GLOBAL DEFAULT 11 PR_GetSP + 271: 0000000000015a70 23 FUNC GLOBAL DEFAULT 11 PR_GetInheritedFileMap + 272: 0000000000027d20 97 FUNC GLOBAL DEFAULT 11 PR_ImportPipe + 273: 000000000001f1d0 755 FUNC GLOBAL DEFAULT 11 PR_SetTraceOption + 274: 00000000000126c0 4458 FUNC GLOBAL DEFAULT 11 PR_sscanf + 275: 000000000000db60 1372 FUNC GLOBAL DEFAULT 11 PR_WaitRecvReady + 276: 000000000001e220 701 FUNC GLOBAL DEFAULT 11 PR_CreateThreadPool + 277: 0000000000016460 90 FUNC GLOBAL DEFAULT 11 PR_AddToCounter + 278: 0000000000010b10 44 FUNC GLOBAL DEFAULT 11 PR_SetPollableEvent + 279: 000000000001ad70 42 FUNC GLOBAL DEFAULT 11 PR_IntervalNow + 280: 0000000000023d60 46 FUNC GLOBAL DEFAULT 11 PRP_TryLock + 281: 0000000000027550 5 FUNC GLOBAL DEFAULT 11 PR_Open + 282: 0000000000014f40 5 FUNC GLOBAL DEFAULT 11 PR_FindFunctionSymbolAndLibrary + 283: 000000000000d3c0 226 FUNC GLOBAL DEFAULT 11 PR_CancelWaitFileDesc + 284: 000000000000e3b0 9 FUNC GLOBAL DEFAULT 11 PR_Seek + 285: 0000000000019860 736 FUNC GLOBAL DEFAULT 11 PR_cnvtf + 286: 000000000001af50 35 FUNC GLOBAL DEFAULT 11 PR_CeilingLog2 + 287: 000000000001d100 26 FUNC GLOBAL DEFAULT 11 PR_UnlockOrderedLock + 288: 0000000000012080 133 FUNC GLOBAL DEFAULT 11 PR_vsmprintf + 289: 000000000001e540 11 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Write + 290: 0000000000019b90 103 FUNC GLOBAL DEFAULT 11 PR_GetEnv + 291: 0000000000029100 53 FUNC GLOBAL DEFAULT 11 PR_DetachThread + 292: 0000000000019e20 17 FUNC GLOBAL DEFAULT 11 PR_GetError + 293: 000000000001f520 71 FUNC GLOBAL DEFAULT 11 PR_GetTraceNameFromHandle + 294: 000000000000d750 289 FUNC GLOBAL DEFAULT 11 PR_DestroyWaitGroup + 295: 0000000000019e60 35 FUNC GLOBAL DEFAULT 11 PR_SetError + 296: 000000000001f760 1253 FUNC GLOBAL DEFAULT 11 PR_RecordTraceEntries + 297: 000000000000e380 9 FUNC GLOBAL DEFAULT 11 PR_Close + 298: 0000000000013e70 127 FUNC GLOBAL DEFAULT 11 PR_CExitMonitor + 299: 0000000000027cb0 97 FUNC GLOBAL DEFAULT 11 PR_ImportFile + 300: 0000000000019d00 266 FUNC GLOBAL DEFAULT 11 PR_DuplicateEnvironment + 301: 000000000023b3e8 0 NOTYPE GLOBAL DEFAULT 23 _edata + 302: 0000000000022e40 71 FUNC GLOBAL DEFAULT 11 PR_NewLock + 303: 000000000001b8a0 1278 FUNC GLOBAL DEFAULT 11 PR_GetIPNodeByName + 304: 000000000000e3d0 9 FUNC GLOBAL DEFAULT 11 PR_Available + 305: 000000000001e560 138 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Connect + 306: 0000000000028370 123 FUNC GLOBAL DEFAULT 11 PR_FD_ISSET + 307: 0000000000015fd0 67 FUNC GLOBAL DEFAULT 11 PR_DestroyStack + 308: 0000000000029350 16 FUNC GLOBAL DEFAULT 11 PR_GetThreadScope + 309: 0000000000029030 5 FUNC GLOBAL DEFAULT 11 SetExecutionEnvironment + 310: 000000000001ada0 42 FUNC GLOBAL DEFAULT 11 PR_TicksPerSecond + 311: 0000000000023130 86 FUNC GLOBAL DEFAULT 11 PR_Unlock + 312: 000000000001e990 575 FUNC GLOBAL DEFAULT 11 PR_JoinThreadPool + 313: 000000000000fb30 291 FUNC GLOBAL DEFAULT 11 PR_PopIOLayer + 314: 000000000001d5a0 70 FUNC GLOBAL DEFAULT 11 PR_ScanStackPointers + 315: 0000000000023760 74 FUNC GLOBAL DEFAULT 11 PR_PostSem + 316: 000000000002a590 72 FUNC GLOBAL DEFAULT 11 PR_Now + 317: 000000000001d470 277 FUNC GLOBAL DEFAULT 11 PR_ThreadScanStackPointers + 318: 0000000000027a50 17 FUNC GLOBAL DEFAULT 11 PR_NewTCPSocket + 319: 0000000000016580 84 FUNC GLOBAL DEFAULT 11 PR_FindNextCounterQname + 320: 000000000001a560 2 FUNC GLOBAL DEFAULT 11 PR_BlockClockInterrupts + 321: 00000000000237b0 139 FUNC GLOBAL DEFAULT 11 PR_WaitSem + 322: 000000000001e730 434 FUNC GLOBAL DEFAULT 11 PR_CancelJob + 323: 000000000000d000 95 FUNC GLOBAL DEFAULT 11 PR_SetFDCacheSize + 324: 00000000000299a0 40 FUNC GLOBAL DEFAULT 11 PR_ClearThreadGCAble + 325: 000000000001cca0 523 FUNC GLOBAL DEFAULT 11 PR_NetAddrToString + 326: 000000000000e490 12 FUNC GLOBAL DEFAULT 11 PR_Send + 327: 000000000001aaa0 5 FUNC GLOBAL DEFAULT 11 PR_DetachProcess + 328: 0000000000015980 78 FUNC GLOBAL DEFAULT 11 PR_OpenSharedMemory + 329: 0000000000029230 5 FUNC GLOBAL DEFAULT 11 PR_AttachThread + 330: 0000000000015d00 114 FUNC GLOBAL DEFAULT 11 PR_DestroyAlarm + 331: 0000000000014030 276 FUNC GLOBAL DEFAULT 11 PR_NewRWLock + 332: 000000000001e530 8 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Read + 333: 0000000000028440 172 FUNC GLOBAL DEFAULT 11 PR_FD_NCLR + 334: 00000000000107e0 23 FUNC GLOBAL DEFAULT 11 PR_Abort + 335: 000000000000e520 12 FUNC GLOBAL DEFAULT 11 PR_GetPeerName + 336: 00000000000275c0 138 FUNC GLOBAL DEFAULT 11 PR_Access + 337: 0000000000010910 5 FUNC GLOBAL DEFAULT 11 PR_CloseFileMap + 338: 0000000000014e60 5 FUNC GLOBAL DEFAULT 11 PR_FindFunctionSymbol + 339: 00000000000202a0 814 FUNC GLOBAL DEFAULT 11 PR_ExplodeTime + 340: 000000000000e480 12 FUNC GLOBAL DEFAULT 11 PR_Recv + 341: 000000000000e560 217 FUNC GLOBAL DEFAULT 11 PR_EmulateAcceptRead + 342: 0000000000023750 13 FUNC GLOBAL DEFAULT 11 PR_NotifyAll + 343: 00000000000123f0 177 FUNC GLOBAL DEFAULT 11 PR_sprintf_append + 344: 0000000000023d90 92 FUNC GLOBAL DEFAULT 11 PRP_NewNakedCondVar + 345: 0000000000022e90 18 FUNC GLOBAL DEFAULT 11 PR_DestroyLock + 346: 000000000001e960 48 FUNC GLOBAL DEFAULT 11 PR_ShutdownThreadPool + 347: 000000000001c710 5 FUNC GLOBAL DEFAULT 11 PR_htonl + 348: 000000000001d5f0 92 FUNC GLOBAL DEFAULT 11 PR_GetStackSpaceLeft + 349: 000000000001c0c0 189 FUNC GLOBAL DEFAULT 11 PR_GetProtoByNumber + 350: 0000000000023890 168 FUNC GLOBAL DEFAULT 11 PR_NewSem + 351: 0000000000019e40 17 FUNC GLOBAL DEFAULT 11 PR_GetOSError + 352: 0000000000014c30 48 FUNC GLOBAL DEFAULT 11 PR_LoadLibrary + 353: 0000000000027a80 12 FUNC GLOBAL DEFAULT 11 PR_OpenTCPSocket + 354: 0000000000011f50 106 FUNC GLOBAL DEFAULT 11 PR_vsxprintf + 355: 000000000000f470 112 FUNC GLOBAL DEFAULT 11 PR_CreateIOLayerStub + 356: 0000000000027850 5 FUNC GLOBAL DEFAULT 11 PR_MkDir + 357: 0000000000012110 182 FUNC GLOBAL DEFAULT 11 PR_smprintf + 358: 000000000001c9d0 207 FUNC GLOBAL DEFAULT 11 PR_EnumerateAddrInfo + 359: 000000000001ade0 49 FUNC GLOBAL DEFAULT 11 PR_MillisecondsToInterval + 360: 000000000000e4d0 12 FUNC GLOBAL DEFAULT 11 PR_RecvFrom + 361: 0000000000027ee0 50 FUNC GLOBAL DEFAULT 11 PR_DestroySocketPollFd + 362: 0000000000014f50 228 FUNC GLOBAL DEFAULT 11 PR_LoadStaticLibrary + 363: 0000000000029530 170 FUNC GLOBAL DEFAULT 11 PR_Sleep + 364: 000000000001c700 7 FUNC GLOBAL DEFAULT 11 PR_htons + 365: 000000000000ff30 92 FUNC GLOBAL DEFAULT 11 PR_SetLogFile + 366: 000000000001aa90 5 FUNC GLOBAL DEFAULT 11 PR_CreateProcess + 367: 0000000000015920 44 FUNC GLOBAL DEFAULT 11 PR_GetPageShift + 368: 000000000000e400 9 FUNC GLOBAL DEFAULT 11 PR_GetOpenFileInfo64 + 369: 0000000000015f10 5 FUNC GLOBAL DEFAULT 11 PR_AtomicAdd + 370: 000000000001d170 5 FUNC GLOBAL DEFAULT 11 PR_GetRandomNoise + 371: 000000000001ab10 5 FUNC GLOBAL DEFAULT 11 PR_KillProcess + 372: 000000000001d460 5 FUNC GLOBAL DEFAULT 11 PR_GetGCRegisters + 373: 00000000000233e0 19 FUNC GLOBAL DEFAULT 11 PR_NewNamedMonitor + 374: 00000000000164c0 90 FUNC GLOBAL DEFAULT 11 PR_SubtractFromCounter + 375: 0000000000015a50 26 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetInheritableFileMap + 376: 000000000001a1a0 8 FUNC GLOBAL DEFAULT 11 PR_ErrorLanguages + 377: 0000000000015ef0 5 FUNC GLOBAL DEFAULT 11 PR_AtomicDecrement + 378: 0000000000023840 67 FUNC GLOBAL DEFAULT 11 PR_DestroySem + 379: 000000000001afa0 3 FUNC GLOBAL DEFAULT 11 LL_Zero + 380: 0000000000012320 193 FUNC GLOBAL DEFAULT 11 PR_vsprintf_append + 381: 000000000002cf14 12 FUNC GLOBAL DEFAULT 11 _PR_x86_64_AtomicDecrement + 382: 0000000000026d40 2 FUNC GLOBAL DEFAULT 11 PT_FPrintStats + 383: 000000000001c5f0 208 FUNC GLOBAL DEFAULT 11 PR_IsNetAddrType + 384: 0000000000023440 71 FUNC GLOBAL DEFAULT 11 PR_GetMonitorEntryCount + 385: 00000000000297b0 363 FUNC GLOBAL DEFAULT 11 PR_Cleanup + 386: 0000000000026df0 135 FUNC GLOBAL DEFAULT 11 PR_GetSpecialFD + 387: 0000000000015630 79 FUNC GLOBAL DEFAULT 11 PR_Malloc + 388: 000000000001c2f0 373 FUNC GLOBAL DEFAULT 11 PR_InitializeNetAddr + 389: 0000000000029cb0 427 FUNC GLOBAL DEFAULT 11 PR_ResumeAll + 390: 0000000000018670 4583 FUNC GLOBAL DEFAULT 11 PR_dtoa + 391: 000000000001ae50 18 FUNC GLOBAL DEFAULT 11 PR_IntervalToSeconds + 392: 0000000000014300 115 FUNC GLOBAL DEFAULT 11 PR_NewThreadPrivateIndex + 393: 000000000000e420 9 FUNC GLOBAL DEFAULT 11 PR_Connect + 394: 000000000001d0f0 12 FUNC GLOBAL DEFAULT 11 PR_LockOrderedLock + 395: 000000000001f570 84 FUNC GLOBAL DEFAULT 11 PR_FindNextTraceQname + 396: 0000000000014c60 424 FUNC GLOBAL DEFAULT 11 PR_UnloadLibrary + 397: 000000000000ce20 8 FUNC GLOBAL DEFAULT 11 libVersionPoint + 398: 0000000000029960 9 FUNC GLOBAL DEFAULT 11 PR_SetThreadDumpProc + 399: 000000000002cf60 0 FUNC GLOBAL DEFAULT 12 _fini + 400: 000000000000e3a0 9 FUNC GLOBAL DEFAULT 11 PR_Write + 401: 00000000000282d0 156 FUNC GLOBAL DEFAULT 11 PR_FD_CLR + 402: 0000000000016090 475 FUNC GLOBAL DEFAULT 11 PR_CreateCounter + 403: 0000000000023940 601 FUNC GLOBAL DEFAULT 11 PR_OpenSemaphore + 404: 0000000000019c00 103 FUNC GLOBAL DEFAULT 11 PR_GetEnvSecure + 405: 0000000000016270 247 FUNC GLOBAL DEFAULT 11 PR_DestroyCounter + 406: 0000000000014020 8 FUNC GLOBAL DEFAULT 11 PR_CSetOnMonitorRecycle + 407: 0000000000015700 438 FUNC GLOBAL DEFAULT 11 PR_Realloc + 408: 0000000000029950 3 FUNC GLOBAL DEFAULT 11 PR_SetThreadAffinityMask + 409: 00000000000165e0 84 FUNC GLOBAL DEFAULT 11 PR_FindNextCounterRname + 410: 0000000000028580 538 FUNC GLOBAL DEFAULT 11 PR_Select + 411: 0000000000027760 97 FUNC GLOBAL DEFAULT 11 PR_CloseDir + 412: 0000000000016640 302 FUNC GLOBAL DEFAULT 11 PR_GetCounterHandleFromName + 413: 0000000000029380 4 FUNC GLOBAL DEFAULT 11 PR_GetThreadPriority + 414: 000000000001e4e0 78 FUNC GLOBAL DEFAULT 11 PR_QueueJob + 415: 0000000000019f40 17 FUNC GLOBAL DEFAULT 11 PR_GetErrorTextLength + 416: 0000000000027a30 17 FUNC GLOBAL DEFAULT 11 PR_NewUDPSocket + 417: 0000000000020b00 255 FUNC GLOBAL DEFAULT 11 PR_ImplodeTime + 418: 000000000001c470 375 FUNC GLOBAL DEFAULT 11 PR_SetNetAddr + 419: 0000000000015d80 213 FUNC GLOBAL DEFAULT 11 PR_SetAlarm + 420: 000000000002cf20 5 FUNC GLOBAL DEFAULT 11 _PR_x86_64_AtomicSet + 421: 000000000001ab60 240 FUNC GLOBAL DEFAULT 11 PR_CallOnce + 422: 0000000000019c70 142 FUNC GLOBAL DEFAULT 11 PR_SetEnv + 423: 0000000000029ff0 2 FUNC GLOBAL DEFAULT 11 PR_SetConcurrency + 424: 000000000000b948 0 FUNC GLOBAL DEFAULT 9 _init + 425: 000000000001a230 91 FUNC GLOBAL DEFAULT 11 PR_ErrorInstallCallback + 426: 0000000000027b60 197 FUNC GLOBAL DEFAULT 11 PR_CreatePipe + 427: 000000000000e500 12 FUNC GLOBAL DEFAULT 11 PR_AcceptRead + 428: 0000000000014470 36 FUNC GLOBAL DEFAULT 11 PR_GetThreadPrivate + 429: 0000000000029ac0 483 FUNC GLOBAL DEFAULT 11 PR_SuspendAll + 430: 00000000000295e0 64 FUNC GLOBAL DEFAULT 11 PR_Yield + 431: 000000000000d940 541 FUNC GLOBAL DEFAULT 11 PR_AddWaitFileDesc + 432: 000000000001e5f0 318 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Timer + 433: 0000000000029fb0 19 FUNC GLOBAL DEFAULT 11 PR_GetThreadName + 434: 0000000000015a90 5 FUNC GLOBAL DEFAULT 11 PR_ExportFileMapAsString + 435: 00000000000232d0 272 FUNC GLOBAL DEFAULT 11 PR_NewMonitor + 436: 000000000001a600 183 FUNC GLOBAL DEFAULT 11 PR_ResetProcessAttr + 437: 0000000000027e70 104 FUNC GLOBAL DEFAULT 11 PR_CreateSocketPollFd + 438: 0000000000027930 5 FUNC GLOBAL DEFAULT 11 PR_Poll + 439: 00000000000159f0 5 FUNC GLOBAL DEFAULT 11 PR_CloseSharedMemory + 440: 0000000000011fc0 172 FUNC GLOBAL DEFAULT 11 PR_sxprintf + 441: 0000000000022ee0 2 FUNC GLOBAL DEFAULT 11 PR_AssertCurrentThreadOwnsLock + 442: 0000000000013ef0 104 FUNC GLOBAL DEFAULT 11 PR_CWait + 443: 000000000001a580 5 FUNC GLOBAL DEFAULT 11 PR_Init + 444: 0000000000014150 53 FUNC GLOBAL DEFAULT 11 PR_DestroyRWLock + 445: 0000000000015040 133 FUNC GLOBAL DEFAULT 11 PR_GetLibraryFilePathname + 446: 0000000000015aa0 5 FUNC GLOBAL DEFAULT 11 PR_ImportFileMapFromString + 447: 0000000000010b00 5 FUNC GLOBAL DEFAULT 11 PR_DestroyPollableEvent + 448: 000000000001a440 206 FUNC GLOBAL DEFAULT 11 PR_VersionCheck + 449: 0000000000027400 321 FUNC GLOBAL DEFAULT 11 PR_OpenFile + 450: 000000000001a6c0 57 FUNC GLOBAL DEFAULT 11 PR_DestroyProcessAttr + 451: 0000000000010900 5 FUNC GLOBAL DEFAULT 11 PR_MemUnmap + 452: 000000000001f040 399 FUNC GLOBAL DEFAULT 11 PR_Trace + 453: 000000000001c6c0 26 FUNC GLOBAL DEFAULT 11 PR_ConvertIPv4AddrToIPv6 + 454: 0000000000027a70 12 FUNC GLOBAL DEFAULT 11 PR_OpenUDPSocket + 455: 0000000000027f70 185 FUNC GLOBAL DEFAULT 11 PR_LockFile + 456: 0000000000023e70 20 FUNC GLOBAL DEFAULT 11 PRP_NakedBroadcast + 457: 000000000001add0 13 FUNC GLOBAL DEFAULT 11 PR_SecondsToInterval + 458: 000000000000fda0 391 FUNC GLOBAL DEFAULT 11 PR_NewLogModule + 459: 000000000001d0e0 12 FUNC GLOBAL DEFAULT 11 PR_DestroyOrderedLock + 460: 000000000023b3e8 0 NOTYPE GLOBAL DEFAULT 24 __bss_start + 461: 0000000000029020 5 FUNC GLOBAL DEFAULT 11 GetExecutionEnvironment + 462: 0000000000026ed0 8 FUNC GLOBAL DEFAULT 11 PR_GetPipeMethods + 463: 00000000000276c0 157 FUNC GLOBAL DEFAULT 11 PR_Rename + 464: 0000000000023c80 16 FUNC GLOBAL DEFAULT 11 PR_CloseSemaphore + 465: 00000000000100e0 81 FUNC GLOBAL DEFAULT 11 PR_SetLogBuffering + 466: 000000000001a540 2 FUNC GLOBAL DEFAULT 11 PR_DisableClockInterrupts + 467: 00000000000158c0 21 FUNC GLOBAL DEFAULT 11 PR_Free + 468: 00000000000159d0 5 FUNC GLOBAL DEFAULT 11 PR_AttachSharedMemory + 469: 0000000000014ac0 361 FUNC GLOBAL DEFAULT 11 PR_LoadLibraryWithFlags + 470: 0000000000013880 177 FUNC GLOBAL DEFAULT 11 PR_fprintf + 471: 0000000000023400 52 FUNC GLOBAL DEFAULT 11 PR_DestroyMonitor + 472: 000000000001aab0 73 FUNC GLOBAL DEFAULT 11 PR_CreateProcessDetached + 473: 0000000000014380 238 FUNC GLOBAL DEFAULT 11 PR_SetThreadPrivate + 474: 0000000000029940 3 FUNC GLOBAL DEFAULT 11 PR_GetThreadAffinityMask + 475: 000000000001c000 189 FUNC GLOBAL DEFAULT 11 PR_GetProtoByName + 476: 000000000001f5d0 84 FUNC GLOBAL DEFAULT 11 PR_FindNextTraceRname + 477: 0000000000029390 199 FUNC GLOBAL DEFAULT 11 PR_SetThreadPriority + 478: 0000000000022450 201 FUNC GLOBAL DEFAULT 11 PR_FormatTime + 479: 0000000000023290 18 FUNC GLOBAL DEFAULT 11 PR_NotifyCondVar + 480: 0000000000015680 119 FUNC GLOBAL DEFAULT 11 PR_Calloc + 481: 000000000001f4d0 80 FUNC GLOBAL DEFAULT 11 PR_GetTraceOption + 482: 0000000000023df0 22 FUNC GLOBAL DEFAULT 11 PRP_DestroyNakedCondVar + 483: 0000000000014850 154 FUNC GLOBAL DEFAULT 11 PR_SetLibraryPath + 484: 0000000000028030 107 FUNC GLOBAL DEFAULT 11 PR_TLockFile + 485: 0000000000019e90 176 FUNC GLOBAL DEFAULT 11 PR_SetErrorText + 486: 0000000000014ab0 5 FUNC GLOBAL DEFAULT 11 PR_FreeLibraryName + 487: 0000000000027860 69 FUNC GLOBAL DEFAULT 11 PR_RmDir + 488: 0000000000023490 2 FUNC GLOBAL DEFAULT 11 PR_AssertCurrentThreadInMonitor + 489: 000000000000e4a0 42 FUNC GLOBAL DEFAULT 11 PR_Writev + 490: 0000000000026ef0 8 FUNC GLOBAL DEFAULT 11 PR_GetUDPMethods + 491: 0000000000027c30 125 FUNC GLOBAL DEFAULT 11 PR_SetFDInheritable + 492: 00000000000283f0 75 FUNC GLOBAL DEFAULT 11 PR_FD_NSET + 493: 0000000000016550 44 FUNC GLOBAL DEFAULT 11 PR_SetCounter + 494: 000000000000e370 6 FUNC GLOBAL DEFAULT 11 PR_GetDescType + 495: 0000000000023e10 62 FUNC GLOBAL DEFAULT 11 PRP_NakedWait + 496: 0000000000029370 6 FUNC GLOBAL DEFAULT 11 PR_GetThreadState + 497: 000000000000e470 9 FUNC GLOBAL DEFAULT 11 PR_Listen + 498: 000000000000e430 15 FUNC GLOBAL DEFAULT 11 PR_ConnectContinue + 499: 000000000001afb0 11 FUNC GLOBAL DEFAULT 11 LL_MaxInt + 500: 000000000000e4e0 12 FUNC GLOBAL DEFAULT 11 PR_SendTo + 501: 000000000000f840 230 FUNC GLOBAL DEFAULT 11 PR_PushIOLayer + 502: 0000000000026e80 51 FUNC GLOBAL DEFAULT 11 PR_GetConnectStatus + 503: 0000000000023620 263 FUNC GLOBAL DEFAULT 11 PR_Wait + 504: 00000000000234a0 110 FUNC GLOBAL DEFAULT 11 PR_EnterMonitor + 505: 000000000000f730 116 FUNC GLOBAL DEFAULT 11 PR_GetNameForIdentity + 506: 00000000000103f0 1004 FUNC GLOBAL DEFAULT 11 PR_LogPrint + 507: 0000000000027670 65 FUNC GLOBAL DEFAULT 11 PR_GetFileInfo64 + 508: 000000000001d2d0 327 FUNC GLOBAL DEFAULT 11 PR_GetNumberOfProcessors + 509: 000000000001f630 302 FUNC GLOBAL DEFAULT 11 PR_GetTraceHandleFromName + 510: 00000000000232b0 21 FUNC GLOBAL DEFAULT 11 PR_NotifyAllCondVar + 511: 000000000001a570 2 FUNC GLOBAL DEFAULT 11 PR_UnblockClockInterrupts + 512: 00000000000280a0 107 FUNC GLOBAL DEFAULT 11 PR_UnlockFile + 513: 0000000000016520 42 FUNC GLOBAL DEFAULT 11 PR_GetCounter + 514: 0000000000023730 23 FUNC GLOBAL DEFAULT 11 PR_Notify + 515: 000000000000e0c0 72 FUNC GLOBAL DEFAULT 11 PR_CreateMWaitEnumerator + 516: 0000000000019fa0 446 FUNC GLOBAL DEFAULT 11 PR_ErrorToString + 517: 000000000001ed70 459 FUNC GLOBAL DEFAULT 11 PR_CreateTrace + 518: 000000000001ab00 5 FUNC GLOBAL DEFAULT 11 PR_WaitProcess + 519: 0000000000022ef0 84 FUNC GLOBAL DEFAULT 11 PR_NewCondVar + 520: 0000000000010800 92 FUNC GLOBAL DEFAULT 11 PR_Assert + 521: 000000000000e540 12 FUNC GLOBAL DEFAULT 11 PR_SetSocketOption + 522: 000000000002cf28 9 FUNC GLOBAL DEFAULT 11 _PR_x86_64_AtomicAdd + 523: 0000000000016050 60 FUNC GLOBAL DEFAULT 11 PR_StackPop + 524: 0000000000029040 188 FUNC GLOBAL DEFAULT 11 PR_JoinThread + 525: 0000000000027d90 97 FUNC GLOBAL DEFAULT 11 PR_ImportTCPSocket + 526: 000000000000f560 449 FUNC GLOBAL DEFAULT 11 PR_GetUniqueIdentity + 527: 00000000000174c0 4515 FUNC GLOBAL DEFAULT 11 PR_strtod + 528: 00000000000205d0 1323 FUNC GLOBAL DEFAULT 11 PR_NormalizeTime + 529: 00000000000121d0 149 FUNC GLOBAL DEFAULT 11 PR_vsnprintf + 530: 000000000001a740 98 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetCurrentDirectory + 531: 0000000000023e50 20 FUNC GLOBAL DEFAULT 11 PRP_NakedNotify + 532: 0000000000014190 68 FUNC GLOBAL DEFAULT 11 PR_RWLock_Rlock + 533: 0000000000013830 73 FUNC GLOBAL DEFAULT 11 PR_vfprintf + 534: 0000000000014e70 194 FUNC GLOBAL DEFAULT 11 PR_FindSymbolAndLibrary + 535: 000000000001cad0 459 FUNC GLOBAL DEFAULT 11 PR_StringToNetAddr + 536: 000000000001c1d0 275 FUNC GLOBAL DEFAULT 11 PR_EnumerateHostEnt + 537: 0000000000012070 5 FUNC GLOBAL DEFAULT 11 PR_smprintf_free + 538: 00000000000108e0 5 FUNC GLOBAL DEFAULT 11 PR_GetMemMapAlignment + 539: 000000000000f1c0 167 FUNC GLOBAL DEFAULT 11 _pr_push_ipv6toipv4_layer + 540: 0000000000029920 9 FUNC GLOBAL DEFAULT 11 PR_ProcessExit + 541: 00000000000108f0 5 FUNC GLOBAL DEFAULT 11 PR_MemMap + 542: 0000000000016020 46 FUNC GLOBAL DEFAULT 11 PR_StackPush + 543: 00000000000141e0 85 FUNC GLOBAL DEFAULT 11 PR_RWLock_Wlock + 544: 000000000001d190 5 FUNC GLOBAL DEFAULT 11 PR_GetDirectorySepartor + 545: 000000000000e3e0 9 FUNC GLOBAL DEFAULT 11 PR_Available64 + 546: 00000000000281d0 112 FUNC GLOBAL DEFAULT 11 PR_Stat + 547: 000000000001a700 45 FUNC GLOBAL DEFAULT 11 PR_ProcessAttrSetStdioRedirect + 548: 000000000001c6f0 5 FUNC GLOBAL DEFAULT 11 PR_ntohl + 549: 00000000000223f0 85 FUNC GLOBAL DEFAULT 11 PR_ParseTimeString + 550: 0000000000029460 97 FUNC GLOBAL DEFAULT 11 PR_Interrupt + 551: 0000000000022eb0 33 FUNC GLOBAL DEFAULT 11 PR_Lock + 552: 00000000000272a0 350 FUNC GLOBAL DEFAULT 11 PR_Socket + 553: 000000000001a510 8 FUNC GLOBAL DEFAULT 11 PR_GetVersion + 554: 0000000000028280 66 FUNC GLOBAL DEFAULT 11 PR_FD_SET + 555: 0000000000010860 120 FUNC GLOBAL DEFAULT 11 PR_CreateFileMap + 556: 0000000000023c10 111 FUNC GLOBAL DEFAULT 11 PR_PostSemaphore + 557: 00000000000299d0 240 FUNC GLOBAL DEFAULT 11 PR_EnumerateThreads + 558: 000000000000f7d0 108 FUNC GLOBAL DEFAULT 11 PR_GetIdentitiesLayer + 559: 000000000001c6e0 7 FUNC GLOBAL DEFAULT 11 PR_ntohs + 560: 0000000000015f20 164 FUNC GLOBAL DEFAULT 11 PR_CreateStack + 561: 000000000000e460 12 FUNC GLOBAL DEFAULT 11 PR_Shutdown + 562: 0000000000020df0 510 FUNC GLOBAL DEFAULT 11 PR_USPacificTimeParameters + 563: 0000000000013f60 83 FUNC GLOBAL DEFAULT 11 PR_CNotify + 564: 000000000001a5c0 59 FUNC GLOBAL DEFAULT 11 PR_NewProcessAttr + 565: 00000000000294d0 17 FUNC GLOBAL DEFAULT 11 PR_ClearInterrupt + 566: 0000000000022520 1825 FUNC GLOBAL DEFAULT 11 PR_FormatTimeUSEnglish + 567: 00000000000277d0 127 FUNC GLOBAL DEFAULT 11 PR_MakeDir + 568: 0000000000022f50 50 FUNC GLOBAL DEFAULT 11 PR_DestroyCondVar + 569: 0000000000029140 238 FUNC GLOBAL DEFAULT 11 PR_GetCurrentThread + 570: 0000000000010920 5 FUNC GLOBAL DEFAULT 11 PR_SyncMemMap + 571: 000000000001e550 11 FUNC GLOBAL DEFAULT 11 PR_QueueJob_Accept + 572: 000000000002cf08 12 FUNC GLOBAL DEFAULT 11 _PR_x86_64_AtomicIncrement + 573: 0000000000014a10 155 FUNC GLOBAL DEFAULT 11 PR_GetLibraryName + 574: 000000000001aea0 33 FUNC GLOBAL DEFAULT 11 PR_IntervalToMicroseconds + 575: 000000000001a160 64 FUNC GLOBAL DEFAULT 11 PR_ErrorToName + 576: 000000000000f4e0 120 FUNC GLOBAL DEFAULT 11 PR_CreateIOLayer + 577: 00000000000109d0 293 FUNC GLOBAL DEFAULT 11 PR_NewPollableEvent + 578: 0000000000020ff0 5105 FUNC GLOBAL DEFAULT 11 PR_ParseTimeStringToExplodedTime + 579: 000000000000f7b0 24 FUNC GLOBAL DEFAULT 11 PR_GetLayersIdentity + 580: 0000000000015950 36 FUNC GLOBAL DEFAULT 11 PR_GetPageSize + 581: 0000000000015c40 184 FUNC GLOBAL DEFAULT 11 PR_CreateAlarm diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnss3.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnss3.so.txt new file mode 100644 index 000000000000..8b64a0e7f1a5 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnss3.so.txt @@ -0,0 +1,1220 @@ +Library: /lib64/libnss3.so +Package: nss-3.53.1-3.el7_9.x86_64 + + +Symbol table '.dynsym' contains 1214 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLock + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcat + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Connect + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderAbort_Util@NSSUTIL_3.12 (56) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgGetLabel@NSSUTIL_3.14 (57) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_AsciiToTime_Util@NSSUTIL_3.12 (56) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDTag_Util@NSSUTIL_3.12 (56) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyCondVar + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Alloc_Util@NSSUTIL_3.12 (56) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearStreaming_Util@NSSUTIL_3.12 (56) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearTakeFromBuf_Util@NSSUTIL_3.12 (56) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetHostByName + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (58) + 14: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_OctetStringTemplate_Util@NSSUTIL_3.12 (56) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Strdup_Util@NSSUTIL_3.12 (56) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1Encode_Util@NSSUTIL_3.12 (56) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_Encode_Util@NSSUTIL_3.12 (56) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (58) + 19: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stdout@GLIBC_2.2.5 (58) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderUpdate_Util@NSSUTIL_3.12 (56) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (58) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetThreadPrivate + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_StringToOID@NSSUTIL_3.12 (56) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GenTime2FormattedAscii_Util@NSSUTIL_3.12 (56) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaAllocate + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (58) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ZfreeItem_Util@NSSUTIL_3.12 (56) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_New_Util@NSSUTIL_3.12 (56) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_UnlockWrite_Util@NSSUTIL_3.12 (56) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_DestroyDigestInfo_Util@NSSUTIL_3.12 (56) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (58) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyMonitor + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Accept + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CompareAlgorithmID_Util@NSSUTIL_3.12 (56) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Listen + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Close + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncasecmp + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgDecodeNumber@NSSUTIL_3.14 (57) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearNotifyProc_Util@NSSUTIL_3.12 (56) + 41: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BMPStringTemplate_Util@NSSUTIL_3.12 (56) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_EncodeTimeChoice_Util@NSSUTIL_3.12 (56) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_DoubleEscape@NSSUTIL_3.14 (57) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_ConvertAsciiToItem_Util@NSSUTIL_3.12 (56) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZAlloc_Util@NSSUTIL_3.12 (56) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_UTCDayToAscii_Util@NSSUTIL_3.12 (56) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeItem_Util@NSSUTIL_3.12 (56) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_Hash@NSSUTIL_3.12 (56) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CreateDigestInfo_Util@NSSUTIL_3.12 (56) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetCurrentThread + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncpyz + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (58) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalToMilliseconds + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_LockRead_Util@NSSUTIL_3.12 (56) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_htonl + 56: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_T61StringTemplate@NSSUTIL_3.12 (56) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareValues + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgParseSlotInfo@NSSUTIL_3.14 (57) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Encoder_Create_Util@NSSUTIL_3.12 (56) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_FreeArena_Util@NSSUTIL_3.12 (56) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgStrip@NSSUTIL_3.14 (57) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ExitMonitor + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Now + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_DupItem_Util@NSSUTIL_3.12 (56) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetUCS2_UTF8ConversionFunction_Util@NSSUTIL_3.12 (56) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcasecmp + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (58) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Shutdown + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgFetchValue@NSSUTIL_3.14 (57) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ConvertIPv4AddrToIPv6 + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (59) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeInteger_Util@NSSUTIL_3.12 (56) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Access + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetEnvSecure + 75: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_UTF8StringTemplate_Util@NSSUTIL_3.12 (56) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_Base64Encode + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Realloc + 78: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_IntegerTemplate_Util@NSSUTIL_3.12 (56) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strfree + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (58) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CompareDigestInfo_Util@NSSUTIL_3.12 (56) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZFree_Util@NSSUTIL_3.12 (56) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetTakeFromBuf_Util@NSSUTIL_3.12 (56) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_NewArena_Util@NSSUTIL_3.12 (56) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (58) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeToUTCTime_Util@NSSUTIL_3.12 (56) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_Escape@NSSUTIL_3.14 (57) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearFilterProc_Util@NSSUTIL_3.12 (56) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetNotifyProc_Util@NSSUTIL_3.12 (56) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CopyItem_Util@NSSUTIL_3.12 (56) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyLock + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_ASCIIConversion_Util@NSSUTIL_3.12 (56) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgGetParamValue@NSSUTIL_3.14 (57) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (58) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_SetUInteger@NSSUTIL_3.12 (56) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgSkipParameter@NSSUTIL_3.14 (57) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SecondsToInterval + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_FindSymbol + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeItem_Util@NSSUTIL_3.12 (56) + 100: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PrintableStringTemplate@NSSUTIL_3.12 (56) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NetAddrToString + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyRWLock + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgIsBlank@NSSUTIL_3.14 (57) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BTOA_ConvertItemToAscii_Util@NSSUTIL_3.12 (56) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strdup + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_UnlockRead_Util@NSSUTIL_3.12 (56) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_Destroy_Util@NSSUTIL_3.12 (56) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Decoder_Update_Util@NSSUTIL_3.12 (56) + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_DestroyCheapArena@NSSUTIL_3.24 (60) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnce + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDByTag_Util@NSSUTIL_3.12 (56) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (58) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableDestroy + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearNotifyProc_Util@NSSUTIL_3.12 (56) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1Decode_Util@NSSUTIL_3.12 (56) + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyCondVar + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewTCPSocket + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Free_Util@NSSUTIL_3.12 (56) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaUnmark_Util@NSSUTIL_3.12 (56) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalNow + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_sprintf_append + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (58) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Sleep + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcatn + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_CreateURI@NSSUTIL_3.31 (61) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeToGeneralizedTime_Util@NSSUTIL_3.12 (56) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _SGN_VerifyPKCS1DigestInfo@NSSUTIL_3.17.1 (62) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64_EncodeItem_Util@NSSUTIL_3.12 (56) + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ConnectContinue + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_LockWrite_Util@NSSUTIL_3.12 (56) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (63) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetUCS4_UTF8ConversionFunction_Util@NSSUTIL_3.12 (56) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_TicksPerSecond + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_AddEntry_Util@NSSUTIL_3.12 (56) + 135: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaRelease + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (58) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetStreaming_Util@NSSUTIL_3.12 (56) + 139: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToEnumeratedTemplate@NSSUTIL_3.12 (56) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Write + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_NewHashTable + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (64) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookup + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_DestroyAlgorithmID_Util@NSSUTIL_3.12 (56) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strnstr + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSRWLock_HaveWriteLock_Util@NSSUTIL_3.12 (56) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableAdd + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_InitializePRErrorTable@NSSUTIL_3.13 (65) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_EscapeSize@NSSUTIL_3.14 (57) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaZAlloc_Util@NSSUTIL_3.12 (56) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Decoder_Destroy_Util@NSSUTIL_3.12 (56) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Realloc_Util@NSSUTIL_3.12 (56) + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_UTCTimeToAscii_Util@NSSUTIL_3.12 (56) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_AllocItem_Util@NSSUTIL_3.12 (56) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeToGeneralizedTimeArena_Util@NSSUTIL_3.12 (56) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ItemsAreEqual_Util@NSSUTIL_3.12 (56) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_RegExpValid@NSSUTIL_3.12 (56) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (58) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_PutEnv_Util@NSSUTIL_3.12 (56) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaStrdup_Util@NSSUTIL_3.12 (56) + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_WaitCondVar + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetThreadPrivate + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewMonitor + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_DestroyURI@NSSUTIL_3.31 (61) + 165: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_IA5StringTemplate_Util@NSSUTIL_3.12 (56) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_GetAlgorithmPolicy@NSSUTIL_3.12.3 (66) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgHasFlag@NSSUTIL_3.14 (57) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strlen + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetNotifyProc_Util@NSSUTIL_3.12 (56) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_FindFunctionSymbol + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewCondVar + 172: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_ObjectIDTemplate_Util@NSSUTIL_3.12 (56) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgParseCipherFlags@NSSUTIL_3.14 (57) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_UnloadLibrary + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1LengthLength_Util@NSSUTIL_3.12 (56) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ErrorToString + 177: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_UniversalStringTemplate@NSSUTIL_3.12 (56) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_DecodeDigestInfo@NSSUTIL_3.12 (56) + 179: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECOID_AlgorithmIDTemplate_Util@NSSUTIL_3.12 (56) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_GetError_Util@NSSUTIL_3.12 (56) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_MkModuleSpec@NSSUTIL_3.14 (57) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ArenaDupItem_Util@NSSUTIL_3.12 (56) + 183: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_GeneralizedTimeTemplate_Util@NSSUTIL_3.12 (56) + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Encoder_Destroy_Util@NSSUTIL_3.12 (56) + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_Lengths_Util@NSSUTIL_3.12 (56) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDTagDescription_Util@NSSUTIL_3.12 (56) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Recv + 188: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SequenceOfAnyTemplate@NSSUTIL_3.12 (56) + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaAlloc_Util@NSSUTIL_3.12 (56) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_InitCheapArena@NSSUTIL_3.24 (60) + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_FinishArenaPool + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Lock + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strstr + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderFinish_Util@NSSUTIL_3.12 (56) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CopyDigestInfo_Util@NSSUTIL_3.12 (56) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_UTF8Conversion_Util@NSSUTIL_3.12 (56) + 197: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderStart_Util@NSSUTIL_3.12 (56) + 198: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_EnumeratedTemplate@NSSUTIL_3.12 (56) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_AddNSSFlagToModuleSpec@NSSUTIL_3.39 (67) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_InitArenaPool + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareStrings + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_StringToNetAddr + 203: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BitStringTemplate_Util@NSSUTIL_3.12 (56) + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnceWithArg + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaGrow_Util@NSSUTIL_3.12 (56) + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (63) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LogPrint + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalToSeconds + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_SetAlgorithmID_Util@NSSUTIL_3.12 (56) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeInteger_Util@NSSUTIL_3.12 (56) + 211: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GetUInteger@NSSUTIL_3.12 (56) + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (58) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_DoubleEscapeSize@NSSUTIL_3.14 (57) + 214: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_AnyTemplate_Util@NSSUTIL_3.12 (56) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_DecodeTimeChoice_Util@NSSUTIL_3.12 (56) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableRemove + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_htons + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetFilterProc_Util@NSSUTIL_3.12 (56) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GeneralizedTimeToTime_Util@NSSUTIL_3.12 (56) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetErrorText + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_AsciiToData_Util@NSSUTIL_3.12 (56) + 222: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderStart_Util@NSSUTIL_3.12 (56) + 223: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_FormatURI@NSSUTIL_3.31 (61) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Poll + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableEnumerateEntries + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgParseModuleSpecEx@NSSUTIL_3.21 (68) + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_ArgReadLong@NSSUTIL_3.14 (57) + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_RegExpCaseSearch@NSSUTIL_3.12 (56) + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewThreadPrivateIndex + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_FreeItem_Util@NSSUTIL_3.12 (56) + 231: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_UTCTimeToTime_Util@NSSUTIL_3.12 (56) + 232: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Decoder_Create_Util@NSSUTIL_3.12 (56) + 233: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_HashCompare@NSSUTIL_3.12 (56) + 234: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GeneralizedDayToAscii_Util@NSSUTIL_3.12 (56) + 235: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDByMechanism@NSSUTIL_3.12 (56) + 236: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeUnsignedInteger_Util@NSSUTIL_3.12 (56) + 237: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (58) + 238: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyAllCondVar + 239: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOID_Util@NSSUTIL_3.12 (56) + 240: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64Encoder_Update_Util@NSSUTIL_3.12 (56) + 241: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_EnumerateHostEnt + 242: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 243: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_MkNSSString@NSSUTIL_3.14 (57) + 244: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_GetPathAttribute@NSSUTIL_3.31 (61) + 245: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CompareItem_Util@NSSUTIL_3.12 (56) + 246: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CopyAlgorithmID_Util@NSSUTIL_3.12 (56) + 247: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetUCS2_ASCIIConversionFunction_Util@NSSUTIL_3.12 (56) + 248: 0000000000000000 0 FUNC GLOBAL DEFAULT UND BTOA_DataToAscii_Util@NSSUTIL_3.12 (56) + 249: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToAnyTemplate_Util@NSSUTIL_3.12 (56) + 250: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLogModule + 251: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_snprintf + 252: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_SetAlgorithmPolicy@NSSUTIL_3.12.3 (66) + 253: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_EnterMonitor + 254: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_GetAlgorithmTag_Util@NSSUTIL_3.12 (56) + 255: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Bind + 256: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_Init@NSSUTIL_3.12 (56) + 257: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderAbort_Util@NSSUTIL_3.12 (56) + 258: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_Shutdown@NSSUTIL_3.12 (56) + 259: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_NullTemplate_Util@NSSUTIL_3.12 (56) + 260: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf + 261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (63) + 262: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SequenceOfObjectIDTemplate@NSSUTIL_3.12 (56) + 263: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 264: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_LoadLibraryFromOrigin@NSSUTIL_3.12.5 (69) + 265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS4_UTF8Conversion@NSSUTIL_3.12 (56) + 266: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GetInteger_Util@NSSUTIL_3.12 (56) + 267: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11URI_ParseURI@NSSUTIL_3.31 (61) + 268: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LoadLibrary + 269: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf_free + 270: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_TimeChoiceDayToAscii_Util@NSSUTIL_3.12 (56) + 271: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_QuickDERDecodeItem_Util@NSSUTIL_3.12 (56) + 272: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToGeneralizedTimeTemplate@NSSUTIL_3.12 (56) + 273: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_StoreHeader@NSSUTIL_3.12 (56) + 274: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Free + 275: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (58) + 276: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaMark_Util@NSSUTIL_3.12 (56) + 277: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Send + 278: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ISO88591_UTF8Conversion@NSSUTIL_3.12 (56) + 279: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_IntervalToMicroseconds + 280: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_LengthLength@NSSUTIL_3.12 (56) + 281: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashString + 282: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_InitializeNetAddr + 283: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetError_Util@NSSUTIL_3.12 (56) + 284: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (58) + 285: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Unlock + 286: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSBase64_DecodeBuffer_Util@NSSUTIL_3.12 (56) + 287: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (70) + 288: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (70) + 289: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Calloc + 290: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetError + 291: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderUpdate_Util@NSSUTIL_3.12 (56) + 292: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaRelease_Util@NSSUTIL_3.12 (56) + 293: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (58) + 294: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Malloc + 295: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_KnownCertExtenOID@NSSUTIL_3.12 (56) + 296: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderFinish_Util@NSSUTIL_3.12 (56) + 297: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSSUTIL_MkSlotString@NSSUTIL_3.14 (57) + 298: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetEnv + 299: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SkipTemplate@NSSUTIL_3.12 (56) + 300: 0000000000062950 148 FUNC GLOBAL DEFAULT 12 SECMOD_HasRemovableSlots@@NSS_3.9.3 + 301: 00000000000f61c0 64 OBJECT GLOBAL DEFAULT 14 SECKEY_DSAPublicKeyTemplate@@NSS_3.2 + 302: 000000000001eb10 15 FUNC GLOBAL DEFAULT 12 CERT_StartCRLExtensions@@NSS_3.10 + 303: 00000000000676b0 92 FUNC GLOBAL DEFAULT 12 CERT_NewCertList@@NSS_3.2 + 304: 00000000000668a0 380 FUNC GLOBAL DEFAULT 12 CERT_MakeCANickname@@NSS_3.4 + 305: 000000000006fe20 58 FUNC GLOBAL DEFAULT 12 CERT_GetAVATag@@NSS_3.2 + 306: 000000000002b7e0 582 FUNC GLOBAL DEFAULT 12 SECKEY_ECParamsToKeySize@@NSS_3.12 + 307: 0000000000024e80 263 FUNC GLOBAL DEFAULT 12 CERT_GetSSLCACerts@@NSS_3.2 + 308: 000000000002b0d0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SubjectPublicKeyInfoTemplate@@NSS_3.4 + 309: 0000000000065e50 8 FUNC GLOBAL DEFAULT 12 CERT_GetDefaultCertDB@@NSS_3.2 + 310: 00000000000591e0 9 FUNC GLOBAL DEFAULT 12 PK11_GetSlotFromKey@@NSS_3.2 + 311: 0000000000036990 111 FUNC GLOBAL DEFAULT 12 PK11_ImportDERCert@@NSS_3.6 + 312: 000000000001dda0 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_HaveWriteLock@@NSS_3.2 + 313: 00000000000f5100 32 OBJECT GLOBAL DEFAULT 14 SEC_IA5StringTemplate@@NSS_3.2 + 314: 0000000000068c60 264 FUNC GLOBAL DEFAULT 12 CERT_MergeExtensions@@NSS_3.10 + 315: 0000000000024f90 226 FUNC GLOBAL DEFAULT 12 CERT_DistNamesFromCertList@@NSS_3.12.6 + 316: 0000000000065040 16 FUNC GLOBAL DEFAULT 12 CERT_GetDomainComponentName@@NSS_3.2 + 317: 000000000004a1a0 39 FUNC GLOBAL DEFAULT 12 PK11_MechanismToAlgtag@@NSS_3.4 + 318: 000000000032d0c0 32 OBJECT GLOBAL DEFAULT 20 SEC_SetOfAnyTemplate@@NSS_3.2 + 319: 00000000000480e0 974 FUNC GLOBAL DEFAULT 12 PK11_GetBlockSize@@NSS_3.2 + 320: 000000000006d7f0 283 FUNC GLOBAL DEFAULT 12 CERT_FindNameConstraintsExten@@NSS_3.12 + 321: 000000000001d730 5 FUNC GLOBAL DEFAULT 12 PORT_Free@@NSS_3.2 + 322: 000000000002f720 153 FUNC GLOBAL DEFAULT 12 VFY_VerifyData@@NSS_3.2 + 323: 0000000000059200 19 FUNC GLOBAL DEFAULT 12 PK11_GetNextSymKey@@NSS_3.4 + 324: 000000000005cbb0 399 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKeyWithFlagsPerm@@NSS_3.9 + 325: 00000000000480d0 7 FUNC GLOBAL DEFAULT 12 PK11_GetKeyGen@@NSS_3.4 + 326: 000000000001d720 5 FUNC GLOBAL DEFAULT 12 PORT_ZAlloc@@NSS_3.2 + 327: 000000000006f270 298 FUNC GLOBAL DEFAULT 12 CERT_SaveSMimeProfile@@NSS_3.2 + 328: 0000000000036d60 137 FUNC GLOBAL DEFAULT 12 PK11_ImportCertForKey@@NSS_3.3 + 329: 000000000005e640 4 FUNC GLOBAL DEFAULT 12 PK11_GetDisabledReason@@NSS_3.8 + 330: 000000000002ac20 47 FUNC GLOBAL DEFAULT 12 HASH_GetHashObjectByOidTag@@NSS_3.8 + 331: 0000000000056950 40 FUNC GLOBAL DEFAULT 12 PK11_ImportDERPrivateKeyInfo@@NSS_3.3 + 332: 000000000001dd10 5 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Destroy@@NSS_3.2 + 333: 00000000000f5120 32 OBJECT GLOBAL DEFAULT 14 SEC_GeneralizedTimeTemplate@@NSS_3.2 + 334: 0000000000069b30 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_CrlTemplate@@NSS_3.2 + 335: 00000000000552b0 3 FUNC GLOBAL DEFAULT 12 __PBE_GenerateBits@@NSS_3.2 + 336: 000000000006e680 121 FUNC GLOBAL DEFAULT 12 CERT_FindCertByDERCert@@NSS_3.2 + 337: 0000000000067710 76 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertList@@NSS_3.2 + 338: 00000000000557c0 391 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetIV@@NSS_3.3 + 339: 0000000000032b40 2999 FUNC GLOBAL DEFAULT 12 PK11_GenerateKeyPairWithOpFlags@@NSS_3.12 + 340: 0000000000059b60 53 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenSymKey@@NSS_3.4 + 341: 000000000005a580 49 FUNC GLOBAL DEFAULT 12 PK11_TokenKeyGenWithFlags@@NSS_3.10.2 + 342: 000000000002c1b0 792 FUNC GLOBAL DEFAULT 12 SECKEY_ConvertToPublicKey@@NSS_3.2 + 343: 000000000006ed90 3 FUNC GLOBAL DEFAULT 12 CERT_GetDBContentVersion@@NSS_3.2 + 344: 0000000000050ac0 244 FUNC GLOBAL DEFAULT 12 PK11_WriteRawAttribute@@NSS_3.12 + 345: 00000000000362a0 84 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromNickname@@NSS_3.2 + 346: 0000000000059250 46 FUNC GLOBAL DEFAULT 12 PK11_SetSymKeyUserData@@NSS_3.11 + 347: 000000000001d890 5 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDByTag@@NSS_3.2 + 348: 000000000002d630 87 FUNC GLOBAL DEFAULT 12 SGN_Begin@@NSS_3.2 + 349: 000000000001fe00 129 FUNC GLOBAL DEFAULT 12 CERT_OCSPCacheSettings@@NSS_3.11.7 + 350: 000000000002ac50 31 FUNC GLOBAL DEFAULT 12 HASH_ResultLenByOidTag@@NSS_3.10 + 351: 000000000005e730 86 FUNC GLOBAL DEFAULT 12 PK11_IsFriendly@@NSS_3.2 + 352: 00000000000f5060 32 OBJECT GLOBAL DEFAULT 14 SEC_UTCTimeTemplate@@NSS_3.2 + 353: 0000000000051020 328 FUNC GLOBAL DEFAULT 12 PK11_FindGenericObjects@@NSS_3.9.2 + 354: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.1 + 355: 0000000000032300 235 FUNC GLOBAL DEFAULT 12 PK11_CopyTokenPrivKeyToSessionPrivKey@@NSS_3.11 + 356: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.2 + 357: 0000000000057cb0 836 FUNC GLOBAL DEFAULT 12 PK11SDR_Decrypt@@NSS_3.2 + 358: 0000000000054770 116 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetCryptoAlgorithm@@NSS_3.2 + 359: 000000000001fdb0 65 FUNC GLOBAL DEFAULT 12 CERT_SetOCSPFailureMode@@NSS_3.11.7 + 360: 000000000001dde0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_AnyTemplate@@NSS_3.2 + 361: 0000000000061310 34 FUNC GLOBAL DEFAULT 12 PK11_IsFIPS@@NSS_3.2 + 362: 0000000000065e60 232 FUNC GLOBAL DEFAULT 12 CERT_AddOKDomainName@@NSS_3.4 + 363: 000000000005ee10 120 FUNC GLOBAL DEFAULT 12 PK11_NeedUserInit@@NSS_3.2 + 364: 000000000005c870 282 FUNC GLOBAL DEFAULT 12 PK11_UnwrapSymKeyWithFlagsPerm@@NSS_3.9 + 365: 000000000001dd40 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_New@@NSS_3.2 + 366: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.7 + 367: 000000000006e670 11 FUNC GLOBAL DEFAULT 12 CERT_FindCertByIssuerAndSNCX@@NSS_3.33 + 368: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11.9 + 369: 0000000000071290 14 FUNC GLOBAL DEFAULT 12 CERT_EncodeNameConstraintsExtension@@NSS_3.15 + 370: 000000000001d9c0 5 FUNC GLOBAL DEFAULT 12 SGN_CompareDigestInfo@@NSS_3.2 + 371: 000000000002dec0 326 FUNC GLOBAL DEFAULT 12 SEC_GetSignatureAlgorithmOidTag@@NSS_3.10 + 372: 000000000001da80 5 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTimeArena@@NSS_3.11.7 + 373: 0000000000020c00 108 FUNC GLOBAL DEFAULT 12 CERT_GetSubjectPublicKeyDigest@@NSS_3.15.4 + 374: 0000000000039050 4 FUNC GLOBAL DEFAULT 12 _PK11_ContextGetAEADSimulation@@NSS_3.52 + 375: 000000000001ce80 168 FUNC GLOBAL DEFAULT 12 NSS_Initialize@@NSS_3.2 + 376: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.7.1 + 377: 0000000000070690 661 FUNC GLOBAL DEFAULT 12 CERT_DecodeAVAValue@@NSS_3.4 + 378: 0000000000030f50 16 FUNC GLOBAL DEFAULT 12 PK11_SetPrivateKeyNickname@@NSS_3.4 + 379: 000000000005e950 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotName@@NSS_3.2 + 380: 000000000006d200 7 FUNC GLOBAL DEFAULT 12 CERT_GetCertificateNames@@NSS_3.10 + 381: 000000000001da70 5 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTime@@NSS_3.11.7 + 382: 000000000002dcd0 86 FUNC GLOBAL DEFAULT 12 SEC_DerSignDataWithAlgorithmID@@NSS_3.34 + 383: 0000000000069640 159 FUNC GLOBAL DEFAULT 12 CERT_CompleteCRLDecodeEntries@@NSS_3.6 + 384: 0000000000037cf0 185 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromDERCertItem@@NSS_3.12.1 + 385: 000000000006fb00 62 FUNC GLOBAL DEFAULT 12 CERT_EncodePolicyMappingExtension@@NSS_3.12 + 386: 000000000001dcb0 5 FUNC GLOBAL DEFAULT 12 BTOA_ConvertItemToAscii@@NSS_3.2 + 387: 0000000000024b60 485 FUNC GLOBAL DEFAULT 12 CERT_FindUserCertsByUsage@@NSS_3.4 + 388: 0000000000070540 50 FUNC GLOBAL DEFAULT 12 CERT_DestroyName@@NSS_3.2 + 389: 000000000001d9f0 5 FUNC GLOBAL DEFAULT 12 DER_GetInteger@@NSS_3.2 + 390: 000000000001d820 5 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_ASCIIConversionFunction@@NSS_3.2 + 391: 000000000001dc00 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetTakeFromBuf@@NSS_3.2 + 392: 00000000000619e0 416 FUNC GLOBAL DEFAULT 12 SECMOD_AddNewModuleEx@@NSS_3.4 + 393: 000000000005ef80 42 FUNC GLOBAL DEFAULT 12 PK11_IsInternalKeySlot@@NSS_3.12.4 + 394: 0000000000060d10 338 FUNC GLOBAL DEFAULT 12 PK11_WaitForTokenEvent@@NSS_3.7 + 395: 0000000000053f90 886 FUNC GLOBAL DEFAULT 12 SECMOD_LoadModule@@NSS_3.4 + 396: 00000000000f5040 32 OBJECT GLOBAL DEFAULT 14 SEC_UTF8StringTemplate@@NSS_3.4 + 397: 00000000000712b0 191 FUNC GLOBAL DEFAULT 12 CERT_DecodeAuthInfoAccessExtension@@NSS_3.10 + 398: 0000000000026a10 1030 FUNC GLOBAL DEFAULT 12 CERT_VerifyCACertForUsage@@NSS_3.6 + 399: 0000000000030f70 306 FUNC GLOBAL DEFAULT 12 PK11_GetPQGParamsFromPrivateKey@@NSS_3.4 + 400: 0000000000064a80 7 FUNC GLOBAL DEFAULT 12 CERT_NameToAscii@@NSS_3.2 + 401: 0000000000065890 105 FUNC GLOBAL DEFAULT 12 CERT_GetCertTimes@@NSS_3.3 + 402: 0000000000033700 30 FUNC GLOBAL DEFAULT 12 PK11_GenerateKeyPairWithFlags@@NSS_3.10.2 + 403: 0000000000020030 62 FUNC GLOBAL DEFAULT 12 SEC_GetRegisteredHttpClient@@NSS_3.12 + 404: 00000000000232d0 196 FUNC GLOBAL DEFAULT 12 CERT_GetOCSPResponseStatus@@NSS_3.6 + 405: 0000000000070e20 334 FUNC GLOBAL DEFAULT 12 CERT_EncodeBasicConstraintValue@@NSS_3.5 + 406: 000000000001e700 540 FUNC GLOBAL DEFAULT 12 CERT_CreateCertificateRequest@@NSS_3.2 + 407: 000000000001d650 166 FUNC GLOBAL DEFAULT 12 NSS_OptionGet@@NSS_3.21 + 408: 000000000001fcc0 61 FUNC GLOBAL DEFAULT 12 SEC_RegisterDefaultHttpClient@@NSS_3.11.1 + 409: 000000000001dbf0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearStreaming@@NSS_3.2 + 410: 0000000000056980 40 FUNC GLOBAL DEFAULT 12 PK11_ImportPrivateKeyInfo@@NSS_3.2 + 411: 00000000000684f0 254 FUNC GLOBAL DEFAULT 12 CERT_FindSubjectKeyIDExtension@@NSS_3.7 + 412: 000000000001bc90 130 FUNC GLOBAL DEFAULT 12 NSS_Shutdown@@NSS_3.2 + 413: 0000000000064ea0 59 FUNC GLOBAL DEFAULT 12 CERT_GetNextEmailAddress@@NSS_3.7 + 414: 000000000001fd60 73 FUNC GLOBAL DEFAULT 12 CERT_ClearOCSPCache@@NSS_3.11.7 + 415: 000000000005fa10 10 FUNC GLOBAL DEFAULT 12 PK11_IsPresent@@NSS_3.2 + 416: 00000000000552a0 3 FUNC GLOBAL DEFAULT 12 __PBE_CreateContext@@NSS_3.2 + 417: 0000000000024d50 10 FUNC GLOBAL DEFAULT 12 CERT_FreeDistNames@@NSS_3.2 + 418: 00000000000548f0 291 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetKeyLength@@NSS_3.2 + 419: 000000000001dca0 5 FUNC GLOBAL DEFAULT 12 ATOB_ConvertAsciiToItem@@NSS_3.2 + 420: 000000000002acb0 6 FUNC GLOBAL DEFAULT 12 HASH_ResultLenContext@@NSS_3.10 + 421: 0000000000057500 82 FUNC GLOBAL DEFAULT 12 PK11_PQG_DestroyParams@@NSS_3.3 + 422: 000000000002acc0 99 FUNC GLOBAL DEFAULT 12 HASH_Create@@NSS_3.4 + 423: 000000000006c1f0 9 FUNC GLOBAL DEFAULT 12 CERT_GetPrevGeneralName@@NSS_3.10 + 424: 0000000000027ce0 205 FUNC GLOBAL DEFAULT 12 CERT_GetCertChainFromCert@@NSS_3.4 + 425: 0000000000069900 7 FUNC GLOBAL DEFAULT 12 CERT_DecodeDERCrl@@NSS_3.2 + 426: 000000000001d590 8 FUNC GLOBAL DEFAULT 12 NSS_GetVersion@@NSS_3.13 + 427: 000000000005e6e0 4 FUNC GLOBAL DEFAULT 12 PK11_IsReadOnly@@NSS_3.2 + 428: 0000000000038900 215 FUNC GLOBAL DEFAULT 12 PK11_GetAllSlotsForCert@@NSS_3.12 + 429: 000000000004f140 614 FUNC GLOBAL DEFAULT 12 PK11_VerifyWithMechanism@@NSS_3.22 + 430: 0000000000037940 533 FUNC GLOBAL DEFAULT 12 PK11_TraverseCertsForNicknameInSlot@@NSS_3.2 + 431: 00000000000606e0 14 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlotMultiple@@NSS_3.2 + 432: 000000000002b0b0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_RSAPublicKeyTemplate@@NSS_3.2 + 433: 000000000001da20 5 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToTime@@NSS_3.2 + 434: 000000000002f1a0 53 FUNC GLOBAL DEFAULT 12 VFY_Update@@NSS_3.2 + 435: 000000000002bc70 113 FUNC GLOBAL DEFAULT 12 SECKEY_BigIntegerBitLength@@NSS_3.19.1 + 436: 0000000000060a00 126 FUNC GLOBAL DEFAULT 12 PK11_GenerateRandomOnSlot@@NSS_3.11 + 437: 00000000000484b0 989 FUNC GLOBAL DEFAULT 12 PK11_GetIVLength@@NSS_3.3 + 438: 0000000000032290 108 FUNC GLOBAL DEFAULT 12 PK11_ExportEncryptedPrivateKeyInfo@@NSS_3.2 + 439: 0000000000049500 1861 FUNC GLOBAL DEFAULT 12 PK11_ParamFromAlgid@@NSS_3.2 + 440: 000000000001dd50 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_Destroy@@NSS_3.2 + 441: 0000000000063c90 379 FUNC GLOBAL DEFAULT 12 CERT_AsciiToName@@NSS_3.2 + 442: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.1 + 443: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.3 + 444: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.4 + 445: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.5 + 446: 0000000000036150 84 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromURI@@NSS_3.31 + 447: 00000000000659e0 111 FUNC GLOBAL DEFAULT 12 SEC_GetCrlTimes@@NSS_3.18 + 448: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.6 + 449: 0000000000025600 37 FUNC GLOBAL DEFAULT 12 CERT_CertTimesValid@@NSS_3.2 + 450: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.7 + 451: 000000000001dd00 5 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Destroy@@NSS_3.2 + 452: 0000000000023ce0 103 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPSingleResponseGood@@NSS_3.14.1 + 453: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.9 + 454: 00000000000709d0 292 FUNC GLOBAL DEFAULT 12 CERT_CompareAVA@@NSS_3.30 + 455: 0000000000025180 10 FUNC GLOBAL DEFAULT 12 CERT_ImportCAChainTrusted@@NSS_3.3 + 456: 000000000005e970 8 FUNC GLOBAL DEFAULT 12 PK11_GetCurrentWrapIndex@@NSS_3.2 + 457: 0000000000066800 150 FUNC GLOBAL DEFAULT 12 CERT_GetCertIssuerAndSN@@NSS_3.2 + 458: 0000000000060720 51 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlotWithAttributes@@NSS_3.14 + 459: 000000000006f470 276 FUNC GLOBAL DEFAULT 12 CERT_DecodeCertificatePoliciesExtension@@NSS_3.2 + 460: 0000000000050840 46 FUNC GLOBAL DEFAULT 12 PK11_UnlinkGenericObject@@NSS_3.9.2 + 461: 000000000032df40 128 OBJECT GLOBAL DEFAULT 20 CERT_SubjectPublicKeyInfoTemplate@@NSS_3.4 + 462: 000000000001de10 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BooleanTemplate@@NSS_3.4 + 463: 0000000000069530 265 FUNC GLOBAL DEFAULT 12 CERT_KeyFromDERCrl@@NSS_3.4 + 464: 0000000000061380 31 FUNC GLOBAL DEFAULT 12 SECMOD_InternaltoPubMechFlags@@NSS_3.16.1 + 465: 0000000000035f60 352 FUNC GLOBAL DEFAULT 12 PK11_GetCertsMatchingPrivateKey@@NSS_3.47 + 466: 000000000001de20 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_GeneralizedTimeTemplate@@NSS_3.2 + 467: 000000000001db70 5 FUNC GLOBAL DEFAULT 12 SEC_QuickDERDecodeItem@@NSS_3.6 + 468: 0000000000061da0 15 FUNC GLOBAL DEFAULT 12 SECMOD_DeleteModule@@NSS_3.4 + 469: 000000000002ade0 156 FUNC GLOBAL DEFAULT 12 HASH_HashBuf@@NSS_3.10 + 470: 0000000000033ce0 242 FUNC GLOBAL DEFAULT 12 PK11_CheckSSOPassword@@NSS_3.3 + 471: 000000000032ef60 160 OBJECT GLOBAL DEFAULT 20 CERT_IssuerAndSNTemplate@@NSS_3.2 + 472: 0000000000062cc0 139 FUNC GLOBAL DEFAULT 12 SECMOD_CloseUserDB@@NSS_3.11 + 473: 00000000000508f0 83 FUNC GLOBAL DEFAULT 12 PK11_DestroyGenericObjects@@NSS_3.9.2 + 474: 000000000005eaf0 536 FUNC GLOBAL DEFAULT 12 PK11_GetTokenInfo@@NSS_3.2 + 475: 0000000000055610 432 FUNC GLOBAL DEFAULT 12 PBE_CreateContext@@NSS_3.3 + 476: 0000000000068410 68 FUNC GLOBAL DEFAULT 12 CERT_FindCertBySubjectKeyID@@NSS_3.7 + 477: 000000000005a9f0 813 FUNC GLOBAL DEFAULT 12 PK11_WrapSymKey@@NSS_3.2 + 478: 0000000000032ae0 81 FUNC GLOBAL DEFAULT 12 PK11_ImportEncryptedPrivateKeyInfo@@NSS_3.2 + 479: 000000000001d5a0 166 FUNC GLOBAL DEFAULT 12 NSS_OptionSet@@NSS_3.21 + 480: 000000000006eba0 12 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddrForUsage@@NSS_3.12.9 + 481: 0000000000065050 16 FUNC GLOBAL DEFAULT 12 CERT_GetOrgUnitName@@NSS_3.2 + 482: 000000000001db80 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderStart@@NSS_3.2 + 483: 000000000006d750 147 FUNC GLOBAL DEFAULT 12 CERT_GetImposedNameConstraints@@NSS_3.19 + 484: 00000000000606f0 36 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlot@@NSS_3.2 + 485: 000000000001bae0 65 FUNC GLOBAL DEFAULT 12 PK11_UnconfigurePKCS11@@NSS_3.11.9 + 486: 000000000032e340 32 OBJECT GLOBAL DEFAULT 20 SECKEY_PointerToPrivateKeyInfoTemplate@@NSS_3.2 + 487: 000000000001eb40 228 FUNC GLOBAL DEFAULT 12 CERT_FindCRLNumberExten@@NSS_3.12 + 488: 0000000000021590 875 FUNC GLOBAL DEFAULT 12 CERT_DecodeOCSPResponse@@NSS_3.6 + 489: 000000000032f560 32 OBJECT GLOBAL DEFAULT 20 CERT_NameTemplate@@NSS_3.4 + 490: 0000000000055950 385 FUNC GLOBAL DEFAULT 12 PK11_PBEKeyGen@@NSS_3.2 + 491: 00000000000363c0 199 FUNC GLOBAL DEFAULT 12 PK11_FindCertsFromNickname@@NSS_3.3 + 492: 0000000000029fd0 8 FUNC GLOBAL DEFAULT 12 CERT_GetClassicOCSPEnabledSoftFailurePolicy@@NSS_3.12 + 493: 000000000001dc80 5 FUNC GLOBAL DEFAULT 12 BTOA_DataToAscii@@NSS_3.2 + 494: 000000000005feb0 146 FUNC GLOBAL DEFAULT 12 PK11_FindSlotByName@@NSS_3.2 + 495: 000000000002c840 486 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPrivateKeyInfo@@NSS_3.2 + 496: 000000000001d8a0 5 FUNC GLOBAL DEFAULT 12 SECOID_SetAlgorithmID@@NSS_3.2 + 497: 000000000001cd60 141 FUNC GLOBAL DEFAULT 12 NSS_Init@@NSS_3.2 + 498: 0000000000061bd0 456 FUNC GLOBAL DEFAULT 12 SECMOD_DeleteModuleEx@@NSS_3.12 + 499: 000000000004fe80 133 FUNC GLOBAL DEFAULT 12 PK11_PrivDecrypt@@NSS_3.16.2 + 500: 0000000000036df0 84 FUNC GLOBAL DEFAULT 12 PK11_ImportDERCertForKey@@NSS_3.3 + 501: 000000000006ebb0 10 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddrForUsageCX@@NSS_3.33 + 502: 000000000001de00 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BitStringTemplate@@NSS_3.2 + 503: 0000000000025100 98 FUNC GLOBAL DEFAULT 12 CERT_ImportCRL@@NSS_3.3 + 504: 000000000002ba30 574 FUNC GLOBAL DEFAULT 12 SECKEY_ECParamsToBasePointOrderLen@@NSS_3.12 + 505: 0000000000030f20 5 FUNC GLOBAL DEFAULT 12 PK11_DEREncodePublicKey@@NSS_3.3 + 506: 000000000005e630 4 FUNC GLOBAL DEFAULT 12 PK11_IsDisabled@@NSS_3.4 + 507: 000000000002b7d0 12 FUNC GLOBAL DEFAULT 12 CERT_ExtractPublicKey@@NSS_3.2 + 508: 000000000001da60 5 FUNC GLOBAL DEFAULT 12 DER_TimeChoiceDayToAscii@@NSS_3.11.7 + 509: 000000000001ddb0 24 FUNC GLOBAL DEFAULT 12 __nss_InitLock@@NSS_3.2 + 510: 000000000005cfd0 5 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyHandle@@NSS_3.12.3 + 511: 0000000000031380 65 FUNC GLOBAL DEFAULT 12 PK11_FindKeyByKeyID@@NSS_3.3 + 512: 000000000002ac70 53 FUNC GLOBAL DEFAULT 12 HASH_ResultLen@@NSS_3.4 + 513: 000000000002d070 135 FUNC GLOBAL DEFAULT 12 SECKEY_CacheStaticFlags@@NSS_3.10 + 514: 000000000001da10 5 FUNC GLOBAL DEFAULT 12 DER_AsciiToTime@@NSS_3.5 + 515: 000000000005d5e0 113 FUNC GLOBAL DEFAULT 12 PK11_FreeSlotListElement@@NSS_3.11 + 516: 000000000002d6c0 877 FUNC GLOBAL DEFAULT 12 SGN_End@@NSS_3.2 + 517: 00000000000597d0 273 FUNC GLOBAL DEFAULT 12 PK11_FindFixedKey@@NSS_3.2 + 518: 0000000000036300 181 FUNC GLOBAL DEFAULT 12 PK11_FindCertsFromEmailAddress@@NSS_3.12.9 + 519: 0000000000070160 361 FUNC GLOBAL DEFAULT 12 CERT_CreateRDN@@NSS_3.2.1 + 520: 000000000032e360 192 OBJECT GLOBAL DEFAULT 20 SECKEY_PrivateKeyInfoTemplate@@NSS_3.2 + 521: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.13.2 + 522: 000000000001d840 5 FUNC GLOBAL DEFAULT 12 PORT_UCS2_UTF8Conversion@@NSS_3.2 + 523: 0000000000059240 5 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyUserData@@NSS_3.11 + 524: 000000000002dcb0 22 FUNC GLOBAL DEFAULT 12 SEC_DerSignData@@NSS_3.2 + 525: 000000000032e200 128 OBJECT GLOBAL DEFAULT 20 SECKEY_EncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 526: 000000000004a1d0 258 FUNC GLOBAL DEFAULT 12 PK11_GetPadMechanism@@NSS_3.4 + 527: 000000000006c1e0 9 FUNC GLOBAL DEFAULT 12 CERT_GetNextGeneralName@@NSS_3.10 + 528: 000000000001da50 5 FUNC GLOBAL DEFAULT 12 DER_GeneralizedDayToAscii@@NSS_3.11.7 + 529: 0000000000055c00 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_PointerToPrivateKeyInfoTemplate@@NSS_3.2 + 530: 0000000000056cb0 1385 FUNC GLOBAL DEFAULT 12 PK11_PQG_ParamGenV2@@NSS_3.14 + 531: 000000000032d100 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToAnyTemplate@@NSS_3.2 + 532: 000000000005c7a0 200 FUNC GLOBAL DEFAULT 12 PK11_UnwrapSymKeyWithFlags@@NSS_3.2 + 533: 000000000005ce30 8 FUNC GLOBAL DEFAULT 12 PK11_SetFortezzaHack@@NSS_3.2 + 534: 0000000000068a80 80 FUNC GLOBAL DEFAULT 12 CERT_AddExtension@@NSS_3.5 + 535: 00000000000705b0 209 FUNC GLOBAL DEFAULT 12 CERT_CopyName@@NSS_3.4 + 536: 000000000001dd30 5 FUNC GLOBAL DEFAULT 12 NSSBase64_EncodeItem@@NSS_3.4 + 537: 0000000000048e90 301 FUNC GLOBAL DEFAULT 12 PK11_IVFromParam@@NSS_3.2 + 538: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.10 + 539: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.11 + 540: 0000000000030ed0 68 FUNC GLOBAL DEFAULT 12 PK11_ExportPrivateKeyInfo@@NSS_3.2 + 541: 000000000004db10 61 FUNC GLOBAL DEFAULT 12 PK11_DestroyObject@@NSS_3.2 + 542: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.9.2 + 543: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12 + 544: 0000000000050a30 8 FUNC GLOBAL DEFAULT 12 PK11_CreateGenericObject@@NSS_3.12 + 545: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.9.3 + 546: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.13 + 547: 0000000000050bc0 118 FUNC GLOBAL DEFAULT 12 PK11_ReadRawAttribute@@NSS_3.9.2 + 548: 000000000005ad20 1216 FUNC GLOBAL DEFAULT 12 PK11_DeriveWithTemplate@@NSS_3.12.9 + 549: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.14 + 550: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.15 + 551: 0000000000023290 59 FUNC GLOBAL DEFAULT 12 CERT_ForcePostMethodForOCSP@@NSS_3.15.4 + 552: 000000000003bb20 5 FUNC GLOBAL DEFAULT 12 SECMOD_GetReadLock@@NSS_3.3 + 553: 000000000001d810 5 FUNC GLOBAL DEFAULT 12 PORT_SetUCS4_UTF8ConversionFunction@@NSS_3.2 + 554: 000000000005c740 86 FUNC GLOBAL DEFAULT 12 PK11_UnwrapSymKey@@NSS_3.2 + 555: 000000000004eef0 582 FUNC GLOBAL DEFAULT 12 PK11_VerifyRecover@@NSS_3.3 + 556: 000000000001dd90 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockWrite@@NSS_3.2 + 557: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.18 + 558: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.19 + 559: 0000000000025170 7 FUNC GLOBAL DEFAULT 12 CERT_ImportCAChain@@NSS_3.2 + 560: 0000000000060460 638 FUNC GLOBAL DEFAULT 12 PK11_GetBestSlotMultipleWithAttributes@@NSS_3.14 + 561: 0000000000060f30 8 FUNC GLOBAL DEFAULT 12 SECMOD_GetInternalModule@@NSS_3.3 + 562: 000000000005a700 453 FUNC GLOBAL DEFAULT 12 PK11_PubWrapSymKey@@NSS_3.2 + 563: 000000000006b7e0 502 FUNC GLOBAL DEFAULT 12 CERT_CacheCRL@@NSS_3.10 + 564: 00000000000494c0 30 FUNC GLOBAL DEFAULT 12 PK11_GenerateNewParam@@NSS_3.2 + 565: 00000000000652e0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_TimeChoiceTemplate@@NSS_3.9 + 566: 000000000001d190 444 FUNC GLOBAL DEFAULT 12 NSS_RegisterShutdown@@NSS_3.11.1 + 567: 000000000006e820 185 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNickname@@NSS_3.2 + 568: 0000000000055bd0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_EncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 569: 0000000000049c50 1349 FUNC GLOBAL DEFAULT 12 PK11_ParamToAlgid@@NSS_3.2 + 570: 00000000000340e0 132 FUNC GLOBAL DEFAULT 12 PK11_LogoutAll@@NSS_3.4 + 571: 0000000000069b40 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SignedCrlTemplate@@NSS_3.10 + 572: 000000000001d440 321 FUNC GLOBAL DEFAULT 12 NSS_VersionCheck@@NSS_3.2 + 573: 0000000000033750 13 FUNC GLOBAL DEFAULT 12 PK11_GetLowLevelKeyIDForPrivateKey@@NSS_3.3 + 574: 000000000001d800 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaStrdup@@NSS_3.2 + 575: 00000000000337c0 364 FUNC GLOBAL DEFAULT 12 PK11_ListPublicKeysInSlot@@NSS_3.4 + 576: 0000000000070c00 180 FUNC GLOBAL DEFAULT 12 CERT_CompareName@@NSS_3.2 + 577: 000000000005e720 4 FUNC GLOBAL DEFAULT 12 PK11_NeedLogin@@NSS_3.2 + 578: 0000000000059bb0 5 FUNC GLOBAL DEFAULT 12 __PK11_GetKeyData@@NSS_3.2 + 579: 000000000002d5d0 83 FUNC GLOBAL DEFAULT 12 SGN_DestroyContext@@NSS_3.2 + 580: 0000000000065020 16 FUNC GLOBAL DEFAULT 12 CERT_GetStateName@@NSS_3.2 + 581: 0000000000057660 11 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetSubPrimeFromParams@@NSS_3.3 + 582: 000000000005e6c0 5 FUNC GLOBAL DEFAULT 12 PK11_GetModule@@NSS_3.3 + 583: 000000000003ae80 404 FUNC GLOBAL DEFAULT 12 PK11_DigestKey@@NSS_3.2 + 584: 00000000000374a0 468 FUNC GLOBAL DEFAULT 12 PK11_FindCertAndKeyByRecipientList@@NSS_3.2 + 585: 000000000002b6c0 36 FUNC GLOBAL DEFAULT 12 SECKEY_UpdateCertPQG@@NSS_3.2 + 586: 000000000005c990 216 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKey@@NSS_3.2 + 587: 00000000000684a0 15 FUNC GLOBAL DEFAULT 12 CERT_StartCertExtensions@@NSS_3.5 + 588: 00000000000221b0 514 FUNC GLOBAL DEFAULT 12 CERT_VerifyOCSPResponseSignature@@NSS_3.6 + 589: 0000000000062130 38 FUNC GLOBAL DEFAULT 12 SECMOD_CanDeleteInternalModule@@NSS_3.5 + 590: 000000000002fc20 52 FUNC GLOBAL DEFAULT 12 DSAU_EncodeDerSigWithLen@@NSS_3.9 + 591: 00000000000696e0 529 FUNC GLOBAL DEFAULT 12 CERT_DecodeDERCrlWithFlags@@NSS_3.6 + 592: 0000000000020d50 101 FUNC GLOBAL DEFAULT 12 CERT_GetSubjectNameDigest@@NSS_3.15.4 + 593: 000000000001de80 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToAnyTemplate@@NSS_3.2 + 594: 0000000000025450 161 FUNC GLOBAL DEFAULT 12 CERT_CertListFromCert@@NSS_3.2 + 595: 0000000000068980 247 FUNC GLOBAL DEFAULT 12 CERT_AddExtensionByOID@@NSS_3.16.2 + 596: 000000000001bd90 212 FUNC GLOBAL DEFAULT 12 NSS_ShutdownContext@@NSS_3.12.5 + 597: 000000000001ec30 250 FUNC GLOBAL DEFAULT 12 CERT_FindCRLEntryReasonExten@@NSS_3.12 + 598: 000000000005e790 8 FUNC GLOBAL DEFAULT 12 PK11_GetTokenName@@NSS_3.2 + 599: 000000000001eb20 21 FUNC GLOBAL DEFAULT 12 CERT_StartCRLEntryExtensions@@NSS_3.10 + 600: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.14.1 + 601: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.21 + 602: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.22 + 603: 000000000006f410 21 FUNC GLOBAL DEFAULT 12 SECKEY_HashPassword@@NSS_3.3 + 604: 000000000001e6e0 26 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificateRequest@@NSS_3.2 + 605: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.14.3 + 606: 000000000001de70 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_OctetStringTemplate@@NSS_3.2 + 607: 0000000000038110 127 FUNC GLOBAL DEFAULT 12 PK11_ListCerts@@NSS_3.2 + 608: 0000000000031200 47 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenPublicKey@@NSS_3.4 + 609: 000000000006f3f0 24 FUNC GLOBAL DEFAULT 12 CERT_OpenCertDBFilename@@NSS_3.2 + 610: 0000000000060b30 71 FUNC GLOBAL DEFAULT 12 PK11_GenerateRandom@@NSS_3.2 + 611: 000000000002c730 68 FUNC GLOBAL DEFAULT 12 SECKEY_EncodeDERSubjectPublicKeyInfo@@NSS_3.3 + 612: 000000000001d7f0 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaUnmark@@NSS_3.2 + 613: 0000000000066590 276 FUNC GLOBAL DEFAULT 12 CERT_GetValidDNSPatternsFromCert@@NSS_3.12 + 614: 00000000000554b0 29 FUNC GLOBAL DEFAULT 12 PK11_CreatePBEAlgorithmID@@NSS_3.2 + 615: 000000000004db50 113 FUNC GLOBAL DEFAULT 12 PK11_DestroyTokenObject@@NSS_3.2 + 616: 000000000002a130 1431 FUNC GLOBAL DEFAULT 12 CERT_PKIXVerifyCert@@NSS_3.12 + 617: 0000000000060ea0 137 FUNC GLOBAL DEFAULT 12 SECMOD_GetSystemFIPSEnabled@@NSS_3.53 + 618: 00000000000629f0 444 FUNC GLOBAL DEFAULT 12 SECMOD_OpenNewSlot@@NSS_3.12.4 + 619: 000000000003ab30 483 FUNC GLOBAL DEFAULT 12 PK11_AEADOp@@NSS_3.52 + 620: 0000000000064ee0 106 FUNC GLOBAL DEFAULT 12 CERT_GetCertEmailAddress@@NSS_3.2 + 621: 0000000000030f40 13 FUNC GLOBAL DEFAULT 12 PK11_GetPublicKeyNickname@@NSS_3.4 + 622: 0000000000023220 100 FUNC GLOBAL DEFAULT 12 CERT_DisableOCSPDefaultResponder@@NSS_3.3 + 623: 0000000000063e10 69 FUNC GLOBAL DEFAULT 12 CERT_RFC1485_EscapeAndQuote@@NSS_3.2 + 624: 000000000005efb0 66 FUNC GLOBAL DEFAULT 12 PK11_GetInternalSlot@@NSS_3.2 + 625: 000000000005d6c0 18 FUNC GLOBAL DEFAULT 12 PK11_FreeSlotList@@NSS_3.2 + 626: 000000000003ad20 348 FUNC GLOBAL DEFAULT 12 PK11_DigestOp@@NSS_3.2 + 627: 000000000004f880 466 FUNC GLOBAL DEFAULT 12 PK11_Decrypt@@NSS_3.15 + 628: 000000000005bb00 3136 FUNC GLOBAL DEFAULT 12 PK11_PubDeriveWithKDF@@NSS_3.9 + 629: 0000000000037db0 9 FUNC GLOBAL DEFAULT 12 PK11_FindCertFromDERCert@@NSS_3.2 + 630: 000000000006f230 55 FUNC GLOBAL DEFAULT 12 CERT_GetCertIsPerm@@NSS_3.31 + 631: 000000000001e5a0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_CertificateRequestTemplate@@NSS_3.2 + 632: 000000000005d5c0 21 FUNC GLOBAL DEFAULT 12 PK11_FreeSlot@@NSS_3.2 + 633: 000000000002be00 89 FUNC GLOBAL DEFAULT 12 SECKEY_PublicKeyStrengthInBits@@NSS_3.8 + 634: 0000000000060b80 366 FUNC GLOBAL DEFAULT 12 PK11_ResetToken@@NSS_3.4 + 635: 0000000000070580 36 FUNC GLOBAL DEFAULT 12 CERT_AddRDN@@NSS_3.2.1 + 636: 0000000000054310 84 FUNC GLOBAL DEFAULT 12 SECMOD_LoadUserModule@@NSS_3.4 + 637: 000000000001dbd0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearNotifyProc@@NSS_3.2 + 638: 000000000006f3e0 2 FUNC GLOBAL DEFAULT 12 __CERT_ClosePermCertDB@@NSS_3.2 + 639: 0000000000051170 676 FUNC GLOBAL DEFAULT 12 PK11_FindRawCertsWithSubject@@NSS_3.45 + 640: 0000000000050600 539 FUNC GLOBAL DEFAULT 12 PK11_WrapPrivKey@@NSS_3.3 + 641: 0000000000025190 693 FUNC GLOBAL DEFAULT 12 CERT_CertChainFromCert@@NSS_3.2 + 642: 000000000002b0a0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_DSAPublicKeyTemplate@@NSS_3.2 + 643: 0000000000059be0 195 FUNC GLOBAL DEFAULT 12 PK11_GetKeyLength@@NSS_3.2 + 644: 00000000000710a0 63 FUNC GLOBAL DEFAULT 12 CERT_EncodeSubjectKeyID@@NSS_3.12 + 645: 000000000006fb80 62 FUNC GLOBAL DEFAULT 12 CERT_EncodeUserNotice@@NSS_3.12 + 646: 000000000005d010 19 FUNC GLOBAL DEFAULT 12 PK11_GetDefaultArray@@NSS_3.8 + 647: 000000000002c4d0 570 FUNC GLOBAL DEFAULT 12 SECKEY_CreateSubjectPublicKeyInfo@@NSS_3.2 + 648: 000000000001e5b0 302 FUNC GLOBAL DEFAULT 12 CERT_CreateCertificate@@NSS_3.5 + 649: 000000000002f1e0 758 FUNC GLOBAL DEFAULT 12 VFY_EndWithSignature@@NSS_3.3 + 650: 000000000001d750 5 FUNC GLOBAL DEFAULT 12 PORT_Strdup@@NSS_3.5 + 651: 000000000032e700 480 OBJECT GLOBAL DEFAULT 20 CERT_CertificateTemplate@@NSS_3.2 + 652: 000000000005ef20 86 FUNC GLOBAL DEFAULT 12 PK11_GetInternalKeySlot@@NSS_3.2 + 653: 0000000000027900 76 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertNow@@NSS_3.2 + 654: 0000000000065740 26 FUNC GLOBAL DEFAULT 12 CERT_DestroyValidity@@NSS_3.5 + 655: 000000000006de90 167 FUNC GLOBAL DEFAULT 12 SEC_DeletePermCertificate@@NSS_3.2 + 656: 000000000001d980 5 FUNC GLOBAL DEFAULT 12 SECITEM_ZfreeItem@@NSS_3.2 + 657: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.30 + 658: 000000000001d850 5 FUNC GLOBAL DEFAULT 12 PORT_UCS2_ASCIIConversion@@NSS_3.2 + 659: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.31 + 660: 0000000000071170 97 FUNC GLOBAL DEFAULT 12 CERT_EncodeAltNameExtension@@NSS_3.7 + 661: 0000000000057730 11 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetHFromVerify@@NSS_3.3 + 662: 000000000001db60 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeItem@@NSS_3.2 + 663: 000000000002a000 8 FUNC GLOBAL DEFAULT 12 CERT_GetPKIXVerifyNistRevocationPolicy@@NSS_3.12 + 664: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.33 + 665: 000000000004fc40 87 FUNC GLOBAL DEFAULT 12 PK11_PubDecryptRaw@@NSS_3.2 + 666: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.34 + 667: 0000000000055480 42 FUNC GLOBAL DEFAULT 12 PK11_DestroyPBEParams@@NSS_3.3.1 + 668: 000000000001d9a0 5 FUNC GLOBAL DEFAULT 12 SGN_DestroyDigestInfo@@NSS_3.2 + 669: 000000000001d7c0 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaGrow@@NSS_3.2 + 670: 0000000000064e70 42 FUNC GLOBAL DEFAULT 12 CERT_GetFirstEmailAddress@@NSS_3.7 + 671: 000000000006df40 46 FUNC GLOBAL DEFAULT 12 CERT_ChangeCertTrust@@NSS_3.2 + 672: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.39 + 673: 00000000000613a0 4 FUNC GLOBAL DEFAULT 12 SECMOD_PubCipherFlagstoInternal@@NSS_3.4 + 674: 0000000000065900 214 FUNC GLOBAL DEFAULT 12 CERT_CheckCertValidTimes@@NSS_3.2 + 675: 0000000000067250 35 FUNC GLOBAL DEFAULT 12 CERT_IsRootDERCert@@NSS_3.8 + 676: 0000000000037780 443 FUNC GLOBAL DEFAULT 12 PK11_TraverseCertsForSubjectInSlot@@NSS_3.2 + 677: 000000000001de50 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_NullTemplate@@NSS_3.4 + 678: 000000000006c470 433 FUNC GLOBAL DEFAULT 12 CERT_DecodeGeneralName@@NSS_3.4 + 679: 000000000032e1e0 32 OBJECT GLOBAL DEFAULT 20 SECKEY_PointerToEncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 680: 000000000006b260 291 FUNC GLOBAL DEFAULT 12 SEC_FindCrlByName@@NSS_3.2 + 681: 000000000005ca70 310 FUNC GLOBAL DEFAULT 12 PK11_PubUnwrapSymKeyWithFlags@@NSS_3.6 + 682: 0000000000050a40 14 FUNC GLOBAL DEFAULT 12 PK11_CreateManagedGenericObject@@NSS_3.34 + 683: 000000000001da90 5 FUNC GLOBAL DEFAULT 12 DER_GeneralizedTimeToTime@@NSS_3.2 + 684: 0000000000050870 56 FUNC GLOBAL DEFAULT 12 PK11_LinkGenericObject@@NSS_3.9.2 + 685: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.15.4 + 686: 000000000002a070 188 FUNC GLOBAL DEFAULT 12 CERT_AllocCERTRevocationFlags@@NSS_3.12.10 + 687: 000000000006e2b0 921 FUNC GLOBAL DEFAULT 12 CERT_NewTempCertificate@@NSS_3.12 + 688: 0000000000062be0 223 FUNC GLOBAL DEFAULT 12 SECMOD_OpenUserDB@@NSS_3.11 + 689: 000000000005a030 829 FUNC GLOBAL DEFAULT 12 PK11_KeyGenWithTemplate@@NSS_3.12.9 + 690: 00000000000547f0 22 FUNC GLOBAL DEFAULT 12 SEC_PKCS5IsAlgorithmPBEAlg@@NSS_3.2 + 691: 000000000003bb30 5 FUNC GLOBAL DEFAULT 12 SECMOD_ReleaseReadLock@@NSS_3.3 + 692: 000000000001d350 229 FUNC GLOBAL DEFAULT 12 NSS_UnregisterShutdown@@NSS_3.11.1 + 693: 000000000005a6c0 56 FUNC GLOBAL DEFAULT 12 PK11_MoveSymKey@@NSS_3.9 + 694: 000000000005b1e0 38 FUNC GLOBAL DEFAULT 12 PK11_Derive@@NSS_3.2 + 695: 0000000000056810 310 FUNC GLOBAL DEFAULT 12 PK11_ImportDERPrivateKeyInfoAndReturnKey@@NSS_3.4 + 696: 000000000003b020 41 FUNC GLOBAL DEFAULT 12 PK11_Finalize@@NSS_3.2 + 697: 0000000000071370 147 FUNC GLOBAL DEFAULT 12 CERT_EncodeInfoAccessExtension@@NSS_3.12 + 698: 0000000000060f40 8 FUNC GLOBAL DEFAULT 12 SECMOD_GetDefaultModuleList@@NSS_3.3 + 699: 00000000000f5160 32 OBJECT GLOBAL DEFAULT 14 SEC_BitStringTemplate@@NSS_3.2 + 700: 0000000000061180 395 FUNC GLOBAL DEFAULT 12 PK11_GetModuleURI@@NSS_3.31 + 701: 0000000000055ae0 7 FUNC GLOBAL DEFAULT 12 PK11_GetPBEIV@@NSS_3.6 + 702: 000000000002ef50 179 FUNC GLOBAL DEFAULT 12 VFY_CreateContextWithAlgorithmID@@NSS_3.12 + 703: 0000000000021520 98 FUNC GLOBAL DEFAULT 12 CERT_DestroyOCSPRequest@@NSS_3.6 + 704: 000000000002d5a0 37 FUNC GLOBAL DEFAULT 12 SGN_NewContextWithAlgorithmID@@NSS_3.34 + 705: 000000000001de40 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IntegerTemplate@@NSS_3.2 + 706: 0000000000061db0 599 FUNC GLOBAL DEFAULT 12 SECMOD_DeleteInternalModule@@NSS_3.3 + 707: 000000000002b0e0 153 FUNC GLOBAL DEFAULT 12 SECKEY_CreateRSAPrivateKey@@NSS_3.2 + 708: 0000000000057650 11 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetPrimeFromParams@@NSS_3.3 + 709: 00000000000311a0 85 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenPrivateKey@@NSS_3.4 + 710: 0000000000055bf0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_PrivateKeyInfoTemplate@@NSS_3.2 + 711: 0000000000038350 297 FUNC GLOBAL DEFAULT 12 PK11_GetLowLevelKeyIDForCert@@NSS_3.3 + 712: 000000000004ecf0 309 FUNC GLOBAL DEFAULT 12 PK11_SignatureLen@@NSS_3.2 + 713: 000000000002aa70 106 FUNC GLOBAL DEFAULT 12 HASH_GetHashTypeByOidTag@@NSS_3.8 + 714: 0000000000054370 140 FUNC GLOBAL DEFAULT 12 SECMOD_UnloadUserModule@@NSS_3.4 + 715: 0000000000033c60 25 FUNC GLOBAL DEFAULT 12 PK11_SetSlotPWValues@@NSS_3.2 + 716: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.43 + 717: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.44 + 718: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.45 + 719: 000000000006d910 181 FUNC GLOBAL DEFAULT 12 CERT_CheckNameSpace@@NSS_3.12 + 720: 000000000002ccd0 4 FUNC GLOBAL DEFAULT 12 SECKEY_GetPublicKeyType@@NSS_3.3 + 721: 0000000000033760 92 FUNC GLOBAL DEFAULT 12 PK11_ListPrivateKeysInSlot@@NSS_3.3 + 722: 000000000003b050 514 FUNC GLOBAL DEFAULT 12 PK11_DigestFinal@@NSS_3.2 + 723: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.47 + 724: 00000000000702f0 112 FUNC GLOBAL DEFAULT 12 CERT_CopyRDN@@NSS_3.5 + 725: 000000000006e740 217 FUNC GLOBAL DEFAULT 12 CERT_FindCertByName@@NSS_3.2 + 726: 000000000001d790 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaAlloc@@NSS_3.2 + 727: 00000000000255f0 11 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificateList@@NSS_3.2 + 728: 0000000000069b20 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_IssuerAndSNTemplate@@NSS_3.2 + 729: 000000000001de60 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_ObjectIDTemplate@@NSS_3.2 + 730: 000000000005e980 5 FUNC GLOBAL DEFAULT 12 PK11_GetSlotID@@NSS_3.2 + 731: 000000000032ed80 320 OBJECT GLOBAL DEFAULT 20 CERT_CrlTemplate@@NSS_3.2 + 732: 000000000006ec20 362 FUNC GLOBAL DEFAULT 12 CERT_CreateSubjectCertList@@NSS_3.4 + 733: 0000000000039e60 156 FUNC GLOBAL DEFAULT 12 PK11_DigestBegin@@NSS_3.2 + 734: 000000000032e980 32 OBJECT GLOBAL DEFAULT 20 CERT_SetOfSignedCrlTemplate@@NSS_3.2 + 735: 0000000000061340 25 FUNC GLOBAL DEFAULT 12 SECMOD_UpdateModule@@NSS_3.4 + 736: 0000000000027950 284 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListByCANames@@NSS_3.4 + 737: 000000000004f6a0 466 FUNC GLOBAL DEFAULT 12 PK11_SignWithSymKey@@NSS_3.14.3 + 738: 000000000001cf30 225 FUNC GLOBAL DEFAULT 12 NSS_InitContext@@NSS_3.12.5 + 739: 0000000000030e10 191 FUNC GLOBAL DEFAULT 12 PK11_MakeKEAPubKey@@NSS_3.2 + 740: 000000000001d990 5 FUNC GLOBAL DEFAULT 12 SGN_CreateDigestInfo@@NSS_3.2 + 741: 000000000005ce40 140 FUNC GLOBAL DEFAULT 12 PK11_TokenKeyGen@@NSS_3.6 + 742: 000000000001dcc0 5 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Create@@NSS_3.2 + 743: 0000000000054810 22 FUNC GLOBAL DEFAULT 12 SEC_PKCS5IsAlgorithmPBEAlgTag@@NSS_3.12 + 744: 0000000000050820 5 FUNC GLOBAL DEFAULT 12 PK11_GetNextGenericObject@@NSS_3.9.2 + 745: 000000000001dc50 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeUnsignedInteger@@NSS_3.11.1 + 746: 0000000000024890 373 FUNC GLOBAL DEFAULT 12 CERT_FindUserCertByUsage@@NSS_3.4 + 747: 000000000002e010 1383 FUNC GLOBAL DEFAULT 12 SEC_CreateSignatureAlgorithmParameters@@NSS_3.34 + 748: 0000000000067760 32 FUNC GLOBAL DEFAULT 12 CERT_RemoveCertListNode@@NSS_3.6 + 749: 000000000002f590 5 FUNC GLOBAL DEFAULT 12 VFY_VerifyDigestDirect@@NSS_3.12 + 750: 0000000000039ac0 178 FUNC GLOBAL DEFAULT 12 __PK11_CreateContextByRawKey@@NSS_3.2 + 751: 00000000000209a0 244 FUNC GLOBAL DEFAULT 12 CERT_DecodeOCSPRequest@@NSS_3.14 + 752: 0000000000055bc0 7 FUNC GLOBAL DEFAULT 12 PK11_GetPBECryptoMechanism@@NSS_3.12 + 753: 0000000000065dd0 27 FUNC GLOBAL DEFAULT 12 CERT_DupCertificate@@NSS_3.2 + 754: 0000000000060f50 8 FUNC GLOBAL DEFAULT 12 SECMOD_GetDeadModuleList@@NSS_3.9 + 755: 000000000001db00 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderAbort@@NSS_3.9 + 756: 000000000002dca0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SignedDataTemplate@@NSS_3.2 + 757: 000000000001dc30 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeItem@@NSS_3.2 + 758: 000000000002d590 10 FUNC GLOBAL DEFAULT 12 SGN_NewContext@@NSS_3.2 + 759: 000000000006db70 79 FUNC GLOBAL DEFAULT 12 CERT_GetCertTrust@@NSS_3.2 + 760: 000000000006f430 24 FUNC GLOBAL DEFAULT 12 __CERT_TraversePermCertsForSubject@@NSS_3.2 + 761: 0000000000053e40 35 FUNC GLOBAL DEFAULT 12 SECMOD_GetModuleSpecList@@NSS_3.4 + 762: 000000000004fd00 182 FUNC GLOBAL DEFAULT 12 PK11_PubEncryptRaw@@NSS_3.2 + 763: 000000000006d070 391 FUNC GLOBAL DEFAULT 12 CERT_GetConstrainedCertificateNames@@NSS_3.12.7 + 764: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.2 + 765: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.16.1 + 766: 0000000000050a50 98 FUNC GLOBAL DEFAULT 12 PK11_GetObjectHandle@@NSS_3.52 + 767: 0000000000065870 22 FUNC GLOBAL DEFAULT 12 CERT_SetSlopTime@@NSS_3.2 + 768: 0000000000059ae0 5 FUNC GLOBAL DEFAULT 12 PK11_GetWindow@@NSS_3.2 + 769: 000000000001d8f0 5 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTagDescription@@NSS_3.2 + 770: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.3 + 771: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.16.2 + 772: 0000000000053f50 62 FUNC GLOBAL DEFAULT 12 SECMOD_FreeModuleSpecList@@NSS_3.4 + 773: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.4 + 774: 0000000000021950 58 FUNC GLOBAL DEFAULT 12 CERT_DestroyOCSPResponse@@NSS_3.7 + 775: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.5 + 776: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.6 + 777: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.7 + 778: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.8 + 779: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.52 + 780: 000000000002adb0 13 FUNC GLOBAL DEFAULT 12 HASH_Begin@@NSS_3.4 + 781: 000000000002cee0 41 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPrivateKeyList@@NSS_3.3 + 782: 000000000002b620 148 FUNC GLOBAL DEFAULT 12 SECKEY_CopySubjectPublicKeyInfo@@NSS_3.4 + 783: 000000000001ea70 97 FUNC GLOBAL DEFAULT 12 CERT_GetCertificateRequestExtensions@@NSS_3.10 + 784: 000000000001deb0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UTCTimeTemplate@@NSS_3.2 + 785: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.9 + 786: 0000000000047530 1517 FUNC GLOBAL DEFAULT 12 PK11_GetKeyType@@NSS_3.3 + 787: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.53 + 788: 000000000001d950 5 FUNC GLOBAL DEFAULT 12 SECITEM_DupItem@@NSS_3.2 + 789: 0000000000059450 276 FUNC GLOBAL DEFAULT 12 PK11_ImportSymKey@@NSS_3.3 + 790: 0000000000059280 176 FUNC GLOBAL DEFAULT 12 PK11_SymKeyFromHandle@@NSS_3.2 + 791: 0000000000036620 872 FUNC GLOBAL DEFAULT 12 PK11_ImportCert@@NSS_3.5 + 792: 00000000000fc860 128 OBJECT GLOBAL DEFAULT 14 CERT_TimeChoiceTemplate@@NSS_3.9 + 793: 000000000001d7b0 5 FUNC GLOBAL DEFAULT 12 PORT_FreeArena@@NSS_3.2 + 794: 000000000006f130 242 FUNC GLOBAL DEFAULT 12 CERT_FindSMimeProfile@@NSS_3.2 + 795: 000000000005fa20 175 FUNC GLOBAL DEFAULT 12 SECMOD_HasRootCerts@@NSS_3.11 + 796: 000000000006b440 194 FUNC GLOBAL DEFAULT 12 CERT_CRLCacheRefreshIssuer@@NSS_3.7 + 797: 000000000002ce50 92 FUNC GLOBAL DEFAULT 12 SECKEY_NewPrivateKeyList@@NSS_3.3 + 798: 00000000000591f0 12 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyType@@NSS_3.9 + 799: 000000000001dce0 5 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Update@@NSS_3.2 + 800: 0000000000034230 489 FUNC GLOBAL DEFAULT 12 PK11_IsLoggedIn@@NSS_3.3 + 801: 00000000000684d0 20 FUNC GLOBAL DEFAULT 12 CERT_FindKeyUsageExtension@@NSS_3.4 + 802: 0000000000061360 26 FUNC GLOBAL DEFAULT 12 SECMOD_PubMechFlagstoInternal@@NSS_3.4 + 803: 000000000005e6d0 5 FUNC GLOBAL DEFAULT 12 PK11_GetDefaultFlags@@NSS_3.8 + 804: 0000000000023110 269 FUNC GLOBAL DEFAULT 12 CERT_EnableOCSPDefaultResponder@@NSS_3.3 + 805: 000000000001d940 5 FUNC GLOBAL DEFAULT 12 SECITEM_CopyItem@@NSS_3.2 + 806: 00000000000686f0 173 FUNC GLOBAL DEFAULT 12 CERT_CheckCertUsage@@NSS_3.3 + 807: 000000000006c220 354 FUNC GLOBAL DEFAULT 12 CERT_EncodeGeneralName@@NSS_3.4 + 808: 00000000000212b0 610 FUNC GLOBAL DEFAULT 12 CERT_AddOCSPAcceptableResponses@@NSS_3.6 + 809: 0000000000058380 383 FUNC GLOBAL DEFAULT 12 PK11_FreeSymKey@@NSS_3.2 + 810: 00000000000234e0 1106 FUNC GLOBAL DEFAULT 12 CERT_CheckOCSPStatus@@NSS_3.14 + 811: 00000000000609a0 86 FUNC GLOBAL DEFAULT 12 PK11_SeedRandom@@NSS_3.3 + 812: 000000000002ceb0 40 FUNC GLOBAL DEFAULT 12 SECKEY_RemovePrivateKeyListNode@@NSS_3.3 + 813: 000000000001fe90 9 FUNC GLOBAL DEFAULT 12 CERT_SetOCSPTimeout@@NSS_3.12 + 814: 0000000000070360 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_NameTemplate@@NSS_3.4 + 815: 000000000002f4e0 7 FUNC GLOBAL DEFAULT 12 VFY_End@@NSS_3.2 + 816: 000000000001d780 5 FUNC GLOBAL DEFAULT 12 PORT_NewArena@@NSS_3.2 + 817: 0000000000060760 143 FUNC GLOBAL DEFAULT 12 PK11_GetBestKeyLength@@NSS_3.2 + 818: 0000000000064a90 137 FUNC GLOBAL DEFAULT 12 CERT_DerNameToAscii@@NSS_3.4 + 819: 000000000001dbb0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderAbort@@NSS_3.9 + 820: 000000000001ded0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_sgn_DigestInfoTemplate@@NSS_3.2 + 821: 0000000000069910 94 FUNC GLOBAL DEFAULT 12 SEC_NewCrl@@NSS_3.2 + 822: 0000000000031520 1589 FUNC GLOBAL DEFAULT 12 PK11_ImportPublicKey@@NSS_3.4 + 823: 000000000004f670 44 FUNC GLOBAL DEFAULT 12 PK11_Sign@@NSS_3.2 + 824: 000000000002cce0 366 FUNC GLOBAL DEFAULT 12 SECKEY_ImportDERPublicKey@@NSS_3.3 + 825: 00000000000242a0 259 FUNC GLOBAL DEFAULT 12 CERT_CreateEncodedOCSPErrorResponse@@NSS_3.14.1 + 826: 0000000000033ab0 317 FUNC GLOBAL DEFAULT 12 PK11_CheckUserPassword@@NSS_3.2 + 827: 0000000000037dc0 72 FUNC GLOBAL DEFAULT 12 PK11_FindKeyByDERCert@@NSS_3.2 + 828: 00000000000552d0 6 FUNC GLOBAL DEFAULT 12 RSA_FormatBlock@@NSS_3.2 + 829: 000000000005a5c0 248 FUNC GLOBAL DEFAULT 12 PK11_ConvertSessionSymKeyToTokenSymKey@@NSS_3.6 + 830: 0000000000057710 4 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetCounterFromVerify@@NSS_3.3 + 831: 000000000032ea60 192 OBJECT GLOBAL DEFAULT 20 CERT_SignedCrlTemplate@@NSS_3.10 + 832: 00000000000376e0 149 FUNC GLOBAL DEFAULT 12 PK11_DeleteTokenCertAndKey@@NSS_3.3 + 833: 0000000000056c60 68 FUNC GLOBAL DEFAULT 12 PK11_ExportDERPrivateKeyInfo@@NSS_3.16.1 + 834: 0000000000062160 666 FUNC GLOBAL DEFAULT 12 SECMOD_UpdateSlotList@@NSS_3.9.3 + 835: 0000000000063e60 970 FUNC GLOBAL DEFAULT 12 CERT_GetOidString@@NSS_3.9 + 836: 000000000001d9d0 5 FUNC GLOBAL DEFAULT 12 DER_Encode@@NSS_3.4 + 837: 000000000005ced0 24 FUNC GLOBAL DEFAULT 12 PK11_KeyGen@@NSS_3.2 + 838: 00000000000f5080 32 OBJECT GLOBAL DEFAULT 14 SEC_OctetStringTemplate@@NSS_3.2 + 839: 0000000000061910 68 FUNC GLOBAL DEFAULT 12 SECMOD_LookupSlot@@NSS_3.2 + 840: 0000000000057250 33 FUNC GLOBAL DEFAULT 12 PK11_PQG_ParamGen@@NSS_3.3 + 841: 000000000005e570 190 FUNC GLOBAL DEFAULT 12 PK11_TokenRefresh@@NSS_3.7.1 + 842: 0000000000057280 626 FUNC GLOBAL DEFAULT 12 PK11_PQG_VerifyParams@@NSS_3.3 + 843: 000000000001dfa0 1514 FUNC GLOBAL DEFAULT 12 CERT_FormatName@@NSS_3.2 + 844: 0000000000059af0 109 FUNC GLOBAL DEFAULT 12 PK11_ExtractKeyValue@@NSS_3.3 + 845: 0000000000039b80 149 FUNC GLOBAL DEFAULT 12 PK11_CreateDigestContext@@NSS_3.2 + 846: 000000000002ca30 470 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyEncryptedPrivateKeyInfo@@NSS_3.2 + 847: 000000000001db50 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1Decode@@NSS_3.4 + 848: 0000000000065760 167 FUNC GLOBAL DEFAULT 12 CERT_CreateValidity@@NSS_3.5 + 849: 0000000000023e30 1131 FUNC GLOBAL DEFAULT 12 CERT_CreateEncodedOCSPSuccessResponse@@NSS_3.14.1 + 850: 000000000002f7c0 176 FUNC GLOBAL DEFAULT 12 VFY_VerifyDataWithAlgorithmID@@NSS_3.12 + 851: 000000000004fca0 87 FUNC GLOBAL DEFAULT 12 PK11_PrivDecryptPKCS1@@NSS_3.9.3 + 852: 000000000001de90 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToOctetStringTemplate@@NSS_3.2 + 853: 0000000000057680 136 FUNC GLOBAL DEFAULT 12 PK11_PQG_NewVerify@@NSS_3.3 + 854: 000000000005cd40 234 FUNC GLOBAL DEFAULT 12 PK11_CopySymKeyForSigning@@NSS_3.3 + 855: 000000000001d870 5 FUNC GLOBAL DEFAULT 12 SECOID_FindOID@@NSS_3.2 + 856: 000000000002f5a0 126 FUNC GLOBAL DEFAULT 12 VFY_VerifyDigest@@NSS_3.2 + 857: 0000000000067b50 76 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListForUserCerts@@NSS_3.6 + 858: 000000000001d960 5 FUNC GLOBAL DEFAULT 12 SECITEM_ArenaDupItem@@NSS_3.9 + 859: 000000000001dbc0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetNotifyProc@@NSS_3.2 + 860: 0000000000030f60 16 FUNC GLOBAL DEFAULT 12 PK11_SetPublicKeyNickname@@NSS_3.4 + 861: 0000000000057930 895 FUNC GLOBAL DEFAULT 12 PK11SDR_Encrypt@@NSS_3.2 + 862: 0000000000039f00 765 FUNC GLOBAL DEFAULT 12 PK11_CipherOp@@NSS_3.2 + 863: 0000000000054830 182 FUNC GLOBAL DEFAULT 12 SEC_PKCS5GetPBEAlgorithm@@NSS_3.2 + 864: 000000000001ddf0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BMPStringTemplate@@NSS_3.2 + 865: 000000000002dd30 396 FUNC GLOBAL DEFAULT 12 SGN_Digest@@NSS_3.2 + 866: 000000000001cdf0 141 FUNC GLOBAL DEFAULT 12 NSS_InitReadWrite@@NSS_3.2 + 867: 000000000001d920 5 FUNC GLOBAL DEFAULT 12 SECITEM_CompareItem@@NSS_3.2 + 868: 000000000005b480 1650 FUNC GLOBAL DEFAULT 12 PK11_PubDerive@@NSS_3.2 + 869: 00000000000552c0 2 FUNC GLOBAL DEFAULT 12 __PBE_DestroyContext@@NSS_3.2 + 870: 00000000000666b0 295 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertName@@NSS_3.2 + 871: 0000000000022f20 79 FUNC GLOBAL DEFAULT 12 CERT_EnableOCSPChecking@@NSS_3.2 + 872: 0000000000037020 428 FUNC GLOBAL DEFAULT 12 PK11_FindCertByIssuerAndSN@@NSS_3.2 + 873: 00000000000591d0 4 FUNC GLOBAL DEFAULT 12 PK11_GetMechanism@@NSS_3.2 + 874: 0000000000059cb0 253 FUNC GLOBAL DEFAULT 12 PK11_GetKeyStrength@@NSS_3.2 + 875: 0000000000033c80 89 FUNC GLOBAL DEFAULT 12 PK11_GetSlotPWValues@@NSS_3.3 + 876: 0000000000065a50 190 FUNC GLOBAL DEFAULT 12 SEC_CheckCrlTimes@@NSS_3.18 + 877: 000000000001d8e0 5 FUNC GLOBAL DEFAULT 12 SECOID_CompareAlgorithmID@@NSS_3.2 + 878: 0000000000067210 58 FUNC GLOBAL DEFAULT 12 CERT_IsCADERCert@@NSS_3.3 + 879: 000000000002be60 20 FUNC GLOBAL DEFAULT 12 SECKEY_PublicKeyStrength@@NSS_3.2 + 880: 000000000005cf20 166 FUNC GLOBAL DEFAULT 12 PK11_GenerateFortezzaIV@@NSS_3.2 + 881: 0000000000069970 18 FUNC GLOBAL DEFAULT 12 SEC_DupCrl@@NSS_3.9 + 882: 0000000000030f30 13 FUNC GLOBAL DEFAULT 12 PK11_GetPrivateKeyNickname@@NSS_3.4 + 883: 0000000000062880 206 FUNC GLOBAL DEFAULT 12 SECMOD_CancelWait@@NSS_3.9.3 + 884: 000000000002fc60 10 FUNC GLOBAL DEFAULT 12 DSAU_DecodeDerSig@@NSS_3.2 + 885: 0000000000065df0 73 FUNC GLOBAL DEFAULT 12 CERT_GetCertificateDer@@NSS_3.44 + 886: 0000000000070370 452 FUNC GLOBAL DEFAULT 12 CERT_CreateName@@NSS_3.2.1 + 887: 000000000002cf10 69 FUNC GLOBAL DEFAULT 12 SECKEY_AddPrivateKeyToListTail@@NSS_3.3 + 888: 000000000005d0c0 50 FUNC GLOBAL DEFAULT 12 PK11_GetFirstSafe@@NSS_3.2 + 889: 000000000002d690 47 FUNC GLOBAL DEFAULT 12 SGN_Update@@NSS_3.2 + 890: 0000000000021d60 51 FUNC GLOBAL DEFAULT 12 CERT_GetEncodedOCSPResponse@@NSS_3.14 + 891: 00000000000340d0 8 FUNC GLOBAL DEFAULT 12 PK11_SetPasswordFunc@@NSS_3.2 + 892: 000000000002ad30 86 FUNC GLOBAL DEFAULT 12 HASH_Clone@@NSS_3.10 + 893: 000000000004c610 26 FUNC GLOBAL DEFAULT 12 PK11_DestroyMergeLog@@NSS_3.12 + 894: 00000000000555d0 50 FUNC GLOBAL DEFAULT 12 PK11_RawPBEKeyGen@@NSS_3.4 + 895: 00000000000600f0 520 FUNC GLOBAL DEFAULT 12 PK11_GetAllTokens@@NSS_3.2 + 896: 000000000001be70 30 FUNC GLOBAL DEFAULT 12 NSS_IsInitialized@@NSS_3.9.2 + 897: 0000000000052df0 13 FUNC GLOBAL DEFAULT 12 SECMOD_GetDefaultModDBFlag@@NSS_3.12.5 + 898: 0000000000069b50 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SetOfSignedCrlTemplate@@NSS_3.2 + 899: 000000000005e700 11 FUNC GLOBAL DEFAULT 12 PK11_IsRemovable@@NSS_3.12 + 900: 0000000000020940 89 FUNC GLOBAL DEFAULT 12 CERT_EncodeOCSPRequest@@NSS_3.6 + 901: 00000000000677d0 7 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListTail@@NSS_3.2 + 902: 00000000000f50c0 32 OBJECT GLOBAL DEFAULT 14 SEC_NullTemplate@@NSS_3.4 + 903: 0000000000066a30 295 FUNC GLOBAL DEFAULT 12 CERT_IsCACert@@NSS_3.3 + 904: 000000000001db20 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearFilterProc@@NSS_3.2 + 905: 000000000001d9e0 5 FUNC GLOBAL DEFAULT 12 DER_Lengths@@NSS_3.2 + 906: 000000000001d760 5 FUNC GLOBAL DEFAULT 12 PORT_SetError@@NSS_3.2 + 907: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.2.1 + 908: 0000000000061130 80 FUNC GLOBAL DEFAULT 12 PK11_GetModInfo@@NSS_3.6 + 909: 0000000000068490 12 FUNC GLOBAL DEFAULT 12 CERT_FindCertExtension@@NSS_3.4 + 910: 000000000001dc40 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeInteger@@NSS_3.2 + 911: 000000000002dc60 63 FUNC GLOBAL DEFAULT 12 SEC_SignDataWithAlgorithmID@@NSS_3.34 + 912: 000000000005e6b0 7 FUNC GLOBAL DEFAULT 12 PK11_HasRootCerts@@NSS_3.4 + 913: 000000000005a8d0 278 FUNC GLOBAL DEFAULT 12 PK11_SymKeysToSameSlot@@NSS_3.52 + 914: 0000000000052dd0 8 FUNC GLOBAL DEFAULT 12 SECMOD_CreateModule@@NSS_3.4 + 915: 0000000000030d30 9 FUNC GLOBAL DEFAULT 12 PK11_GetSlotFromPrivateKey@@NSS_3.2 + 916: 000000000006fc00 62 FUNC GLOBAL DEFAULT 12 CERT_EncodeInhibitAnyExtension@@NSS_3.12 + 917: 0000000000023d50 103 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPSingleResponseUnknown@@NSS_3.14.1 + 918: 0000000000038060 168 FUNC GLOBAL DEFAULT 12 PK11_FindCertInSlot@@NSS_3.2 + 919: 0000000000070cc0 104 FUNC GLOBAL DEFAULT 12 CERT_EncodeAuthKeyID@@NSS_3.5 + 920: 000000000001dd60 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockRead@@NSS_3.2 + 921: 000000000001dac0 5 FUNC GLOBAL DEFAULT 12 DER_EncodeTimeChoice@@NSS_3.9 + 922: 000000000006f840 203 FUNC GLOBAL DEFAULT 12 CERT_DecodeUserNotice@@NSS_3.2 + 923: 0000000000059330 133 FUNC GLOBAL DEFAULT 12 PK11_GetWrapKey@@NSS_3.2 + 924: 00000000000593c0 81 FUNC GLOBAL DEFAULT 12 PK11_SetWrapKey@@NSS_3.2 + 925: 000000000001d8d0 5 FUNC GLOBAL DEFAULT 12 SECOID_DestroyAlgorithmID@@NSS_3.2 + 926: 000000000001fd00 96 FUNC GLOBAL DEFAULT 12 CERT_RegisterAlternateOCSPAIAInfoCallBack@@NSS_3.12.3 + 927: 0000000000039dc0 145 FUNC GLOBAL DEFAULT 12 PK11_RestoreContext@@NSS_3.2 + 928: 000000000004fa60 466 FUNC GLOBAL DEFAULT 12 PK11_Encrypt@@NSS_3.15 + 929: 000000000002eed0 112 FUNC GLOBAL DEFAULT 12 VFY_CreateContext@@NSS_3.2 + 930: 000000000001dc20 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1Encode@@NSS_3.2 + 931: 000000000001dc70 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1LengthLength@@NSS_3.2 + 932: 0000000000020aa0 57 FUNC GLOBAL DEFAULT 12 CERT_DestroyOCSPCertID@@NSS_3.6 + 933: 000000000002aa50 18 FUNC GLOBAL DEFAULT 12 HASH_GetHashObject@@NSS_3.2 + 934: 000000000002add0 13 FUNC GLOBAL DEFAULT 12 HASH_End@@NSS_3.4 + 935: 000000000006f450 24 FUNC GLOBAL DEFAULT 12 __CERT_TraversePermCertsForNickname@@NSS_3.2 + 936: 0000000000033930 380 FUNC GLOBAL DEFAULT 12 PK11_ListPrivKeysInSlot@@NSS_3.4 + 937: 000000000002b7a0 24 FUNC GLOBAL DEFAULT 12 CERT_GetCertKeyType@@NSS_3.39 + 938: 00000000000652f0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_CertificateTemplate@@NSS_3.2 + 939: 0000000000020f60 82 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPCertID@@NSS_3.6 + 940: 000000000002ad90 28 FUNC GLOBAL DEFAULT 12 HASH_Destroy@@NSS_3.4 + 941: 00000000000613b0 135 FUNC GLOBAL DEFAULT 12 SECMOD_IsModulePresent@@NSS_3.2 + 942: 000000000002b180 188 FUNC GLOBAL DEFAULT 12 SECKEY_CreateECPrivateKey@@NSS_3.8 + 943: 0000000000024b50 10 FUNC GLOBAL DEFAULT 12 CERT_FreeNicknames@@NSS_3.2 + 944: 000000000005e6f0 4 FUNC GLOBAL DEFAULT 12 PK11_IsHW@@NSS_3.2 + 945: 000000000003a200 2342 FUNC GLOBAL DEFAULT 12 PK11_AEADRawOp@@NSS_3.52 + 946: 000000000032de60 192 OBJECT GLOBAL DEFAULT 20 SECKEY_RSAPSSParamsTemplate@@NSS_3.13 + 947: 000000000005ff50 132 FUNC GLOBAL DEFAULT 12 PK11_DoesMechanism@@NSS_3.2 + 948: 0000000000059230 16 FUNC GLOBAL DEFAULT 12 PK11_SetSymKeyNickname@@NSS_3.4 + 949: 000000000002c780 189 FUNC GLOBAL DEFAULT 12 SECKEY_DecodeDERSubjectPublicKeyInfo@@NSS_3.4 + 950: 000000000004a5b0 27 FUNC GLOBAL DEFAULT 12 PK11_FortezzaMapSig@@NSS_3.2 + 951: 000000000002a010 82 FUNC GLOBAL DEFAULT 12 CERT_DestroyCERTRevocationFlags@@NSS_3.12.10 + 952: 000000000004dec0 7 FUNC GLOBAL DEFAULT 12 PK11_HasAttributeSet@@NSS_3.30 + 953: 0000000000059420 43 FUNC GLOBAL DEFAULT 12 PK11_VerifyKeyOK@@NSS_3.2 + 954: 0000000000024a10 308 FUNC GLOBAL DEFAULT 12 CERT_GetCertNicknames@@NSS_3.2 + 955: 0000000000039130 213 FUNC GLOBAL DEFAULT 12 PK11_SaveContextAlloc@@NSS_3.6 + 956: 0000000000069a00 115 FUNC GLOBAL DEFAULT 12 SEC_DestroyCrl@@NSS_3.2 + 957: 000000000006e8e0 70 FUNC GLOBAL DEFAULT 12 SEC_CertNicknameConflict@@NSS_3.3 + 958: 00000000000591c0 9 FUNC GLOBAL DEFAULT 12 PK11_ReferenceSymKey@@NSS_3.2 + 959: 000000000001dcd0 5 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Create@@NSS_3.2 + 960: 000000000001ddd0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECOID_AlgorithmIDTemplate@@NSS_3.2 + 961: 000000000001d740 5 FUNC GLOBAL DEFAULT 12 PORT_ZFree@@NSS_3.2 + 962: 0000000000067ea0 534 FUNC GLOBAL DEFAULT 12 CERT_ImportCerts@@NSS_3.2 + 963: 0000000000034180 7 FUNC GLOBAL DEFAULT 12 PK11_ProtectedAuthenticationPath@@NSS_3.4 + 964: 000000000006fbc0 62 FUNC GLOBAL DEFAULT 12 CERT_EncodeNoticeReference@@NSS_3.12 + 965: 00000000000341d0 48 FUNC GLOBAL DEFAULT 12 PK11_NeedPWInit@@NSS_3.3 + 966: 0000000000037390 259 FUNC GLOBAL DEFAULT 12 PK11_FindKeyByAnyCert@@NSS_3.2 + 967: 000000000002a6d0 297 FUNC GLOBAL DEFAULT 12 CERT_EncodeCRLDistributionPoints@@NSS_3.5 + 968: 0000000000038480 133 FUNC GLOBAL DEFAULT 12 PK11_ListCertsInSlot@@NSS_3.3 + 969: 00000000000f5140 32 OBJECT GLOBAL DEFAULT 14 SEC_BooleanTemplate@@NSS_3.4 + 970: 000000000002ec30 147 FUNC GLOBAL DEFAULT 12 VFY_DestroyContext@@NSS_3.2 + 971: 000000000005e7a0 417 FUNC GLOBAL DEFAULT 12 PK11_GetTokenURI@@NSS_3.31 + 972: 000000000005fad0 741 FUNC GLOBAL DEFAULT 12 PK11_FindSlotsByNames@@NSS_3.9 + 973: 000000000032d120 192 OBJECT GLOBAL DEFAULT 20 CERT_CertificateRequestTemplate@@NSS_3.2 + 974: 00000000000f50a0 32 OBJECT GLOBAL DEFAULT 14 SEC_ObjectIDTemplate@@NSS_3.2 + 975: 000000000002f6f0 42 FUNC GLOBAL DEFAULT 12 VFY_VerifyDataDirect@@NSS_3.12 + 976: 0000000000021a80 5 FUNC GLOBAL DEFAULT 12 CERT_PostOCSPRequest@@NSS_3.15 + 977: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.3.1 + 978: 000000000006c210 14 FUNC GLOBAL DEFAULT 12 CERT_GetPrevNameConstraint@@NSS_3.10 + 979: 0000000000068be0 120 FUNC GLOBAL DEFAULT 12 CERT_FinishExtensions@@NSS_3.5 + 980: 0000000000060a80 164 FUNC GLOBAL DEFAULT 12 PK11_RandomUpdate@@NSS_3.2 + 981: 000000000004a570 26 FUNC GLOBAL DEFAULT 12 PK11_MapSignKeyType@@NSS_3.11 + 982: 0000000000055be0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_PointerToEncryptedPrivateKeyInfoTemplate@@NSS_3.2 + 983: 000000000003b260 239 FUNC GLOBAL DEFAULT 12 PK11_HashBuf@@NSS_3.2 + 984: 000000000006f910 18 FUNC GLOBAL DEFAULT 12 CERT_DestroyUserNotice@@NSS_3.10 + 985: 000000000001e920 15 FUNC GLOBAL DEFAULT 12 CERT_StartCertificateRequestAttributes@@NSS_3.10 + 986: 000000000032dfc0 160 OBJECT GLOBAL DEFAULT 20 CERT_SignedDataTemplate@@NSS_3.2 + 987: 00000000000626e0 405 FUNC GLOBAL DEFAULT 12 SECMOD_WaitForAnyTokenEvent@@NSS_3.9.3 + 988: 0000000000061040 232 FUNC GLOBAL DEFAULT 12 SECMOD_FindSlot@@NSS_3.4 + 989: 00000000000712a0 5 FUNC GLOBAL DEFAULT 12 CERT_DecodeNameConstraintsExtension@@NSS_3.10 + 990: 000000000001d880 5 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTag@@NSS_3.2 + 991: 0000000000067840 7 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListHead@@NSS_3.15 + 992: 000000000006f9e0 18 FUNC GLOBAL DEFAULT 12 CERT_DestroyOidSequence@@NSS_3.9 + 993: 0000000000048e80 7 FUNC GLOBAL DEFAULT 12 PK11_ParamFromIV@@NSS_3.2 + 994: 000000000001d9b0 5 FUNC GLOBAL DEFAULT 12 SGN_CopyDigestInfo@@NSS_3.2 + 995: 0000000000039c20 404 FUNC GLOBAL DEFAULT 12 PK11_CloneContext@@NSS_3.2 + 996: 000000000004fdc0 182 FUNC GLOBAL DEFAULT 12 PK11_PubEncryptPKCS1@@NSS_3.9.3 + 997: 000000000005b210 170 FUNC GLOBAL DEFAULT 12 PK11_DeriveWithFlags@@NSS_3.2 + 998: 000000000032e640 192 OBJECT GLOBAL DEFAULT 20 SEC_SignedCertificateTemplate@@NSS_3.4 + 999: 000000000006eb80 18 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddrCX@@NSS_3.33 + 1000: 000000000001dcf0 5 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Update@@NSS_3.2 + 1001: 00000000000f51a0 32 OBJECT GLOBAL DEFAULT 14 SEC_AnyTemplate@@NSS_3.2 + 1002: 0000000000068b70 102 FUNC GLOBAL DEFAULT 12 CERT_EncodeAndAddBitStrExtension@@NSS_3.5 + 1003: 0000000000060f60 8 FUNC GLOBAL DEFAULT 12 SECMOD_GetDBModuleList@@NSS_3.9 + 1004: 000000000005e650 61 FUNC GLOBAL DEFAULT 12 PK11_UserDisableSlot@@NSS_3.8 + 1005: 000000000002b240 79 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPrivateKey@@NSS_3.2 + 1006: 00000000000598f0 483 FUNC GLOBAL DEFAULT 12 PK11_ListFixedKeysInSlot@@NSS_3.4 + 1007: 0000000000031ea0 1002 FUNC GLOBAL DEFAULT 12 PK11_ExportEncryptedPrivKeyInfo@@NSS_3.9 + 1008: 000000000004ff10 141 FUNC GLOBAL DEFAULT 12 PK11_PubEncrypt@@NSS_3.16.2 + 1009: 0000000000055290 10 FUNC GLOBAL DEFAULT 12 PBE_DestroyContext@@NSS_3.3 + 1010: 000000000002f130 103 FUNC GLOBAL DEFAULT 12 VFY_Begin@@NSS_3.2 + 1011: 000000000001db10 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetFilterProc@@NSS_3.2 + 1012: 000000000004c5c0 74 FUNC GLOBAL DEFAULT 12 PK11_CreateMergeLog@@NSS_3.12 + 1013: 00000000000f6200 128 OBJECT GLOBAL DEFAULT 14 SECKEY_RSAPublicKeyTemplate@@NSS_3.2 + 1014: 0000000000033720 37 FUNC GLOBAL DEFAULT 12 PK11_GenerateKeyPair@@NSS_3.2 + 1015: 00000000000508b0 63 FUNC GLOBAL DEFAULT 12 PK11_DestroyGenericObject@@NSS_3.9.2 + 1016: 000000000002cc10 90 FUNC GLOBAL DEFAULT 12 SECKEY_CopyPrivateKeyInfo@@NSS_3.2 + 1017: 00000000000360c0 140 FUNC GLOBAL DEFAULT 12 PK11_TraverseSlotCerts@@NSS_3.4 + 1018: 0000000000022e30 25 FUNC GLOBAL DEFAULT 12 CERT_GetOCSPStatusForCertID@@NSS_3.6 + 1019: 000000000001dbe0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetStreaming@@NSS_3.2 + 1020: 0000000000050830 4 FUNC GLOBAL DEFAULT 12 PK11_GetPrevGenericObject@@NSS_3.9.2 + 1021: 0000000000022ea0 126 FUNC GLOBAL DEFAULT 12 CERT_DisableOCSPChecking@@NSS_3.3 + 1022: 000000000001dc60 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeInteger@@NSS_3.2 + 1023: 0000000000027880 31 FUNC GLOBAL DEFAULT 12 CERT_VerifyCert@@NSS_3.2 + 1024: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.19.1 + 1025: 000000000001dba0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderFinish@@NSS_3.2 + 1026: 000000000001de30 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IA5StringTemplate@@NSS_3.2 + 1027: 0000000000036bb0 350 FUNC GLOBAL DEFAULT 12 PK11_KeyForCertExists@@NSS_3.3 + 1028: 0000000000064920 348 FUNC GLOBAL DEFAULT 12 CERT_NameToAsciiInvertible@@NSS_3.12.1 + 1029: 0000000000033de0 455 FUNC GLOBAL DEFAULT 12 PK11_InitPin@@NSS_3.2 + 1030: 0000000000052500 2241 FUNC GLOBAL DEFAULT 12 SECMOD_CreateModuleEx@@NSS_3.21 + 1031: 0000000000070d30 229 FUNC GLOBAL DEFAULT 12 CERT_DecodeAuthKeyID@@NSS_3.10 + 1032: 0000000000035d90 62 FUNC GLOBAL DEFAULT 12 PK11_GetCertFromPrivateKey@@NSS_3.9.3 + 1033: 0000000000022f70 405 FUNC GLOBAL DEFAULT 12 CERT_SetOCSPDefaultResponder@@NSS_3.3 + 1034: 000000000001d100 140 FUNC GLOBAL DEFAULT 12 NSS_NoDB_Init@@NSS_3.2 + 1035: 00000000000711e0 161 FUNC GLOBAL DEFAULT 12 CERT_DecodeAltNameExtension@@NSS_3.10 + 1036: 000000000001db90 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderUpdate@@NSS_3.2 + 1037: 000000000002a800 375 FUNC GLOBAL DEFAULT 12 CERT_DecodeCRLDistributionPoints@@NSS_3.10 + 1038: 000000000006eb60 17 FUNC GLOBAL DEFAULT 12 CERT_FindCertByNicknameOrEmailAddr@@NSS_3.2 + 1039: 00000000000617e0 190 FUNC GLOBAL DEFAULT 12 SECMOD_DestroyModule@@NSS_3.3 + 1040: 000000000001e930 313 FUNC GLOBAL DEFAULT 12 CERT_FinishCertificateRequestAttributes@@NSS_3.10 + 1041: 0000000000033fb0 273 FUNC GLOBAL DEFAULT 12 PK11_ChangePW@@NSS_3.2 + 1042: 00000000000361b0 229 FUNC GLOBAL DEFAULT 12 PK11_FindCertsFromURI@@NSS_3.31 + 1043: 000000000005e690 28 FUNC GLOBAL DEFAULT 12 PK11_UserEnableSlot@@NSS_3.8 + 1044: 0000000000061b80 11 FUNC GLOBAL DEFAULT 12 SECMOD_AddNewModule@@NSS_3.3 + 1045: 000000000006f930 171 FUNC GLOBAL DEFAULT 12 CERT_DecodeOidSequence@@NSS_3.2 + 1046: 000000000006e660 10 FUNC GLOBAL DEFAULT 12 CERT_FindCertByIssuerAndSN@@NSS_3.2 + 1047: 0000000000026f80 1487 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertificate@@NSS_3.6 + 1048: 000000000004c3d0 484 FUNC GLOBAL DEFAULT 12 PK11_MergeTokens@@NSS_3.12 + 1049: 0000000000038ea0 142 FUNC GLOBAL DEFAULT 12 PK11_DestroyContext@@NSS_3.2 + 1050: 0000000000037e10 102 FUNC GLOBAL DEFAULT 12 PK11_ImportCertForKeyToSlot@@NSS_3.2 + 1051: 0000000000065010 16 FUNC GLOBAL DEFAULT 12 CERT_GetLocalityName@@NSS_3.2 + 1052: 000000000006fb40 62 FUNC GLOBAL DEFAULT 12 CERT_EncodeCertPoliciesExtension@@NSS_3.12 + 1053: 000000000005b2c0 250 FUNC GLOBAL DEFAULT 12 PK11_DeriveWithFlagsPerm@@NSS_3.9 + 1054: 0000000000067280 251 FUNC GLOBAL DEFAULT 12 CERT_CompareValidityTimes@@NSS_3.11 + 1055: 0000000000061570 172 FUNC GLOBAL DEFAULT 12 SECMOD_FindModule@@NSS_3.4 + 1056: 000000000002f620 197 FUNC GLOBAL DEFAULT 12 VFY_VerifyDigestWithAlgorithmID@@NSS_3.12 + 1057: 0000000000029fe0 8 FUNC GLOBAL DEFAULT 12 CERT_GetClassicOCSPEnabledHardFailurePolicy@@NSS_3.12 + 1058: 0000000000059570 607 FUNC GLOBAL DEFAULT 12 PK11_ImportSymKeyWithFlags@@NSS_3.4 + 1059: 000000000001dc10 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearTakeFromBuf@@NSS_3.2 + 1060: 0000000000070090 110 FUNC GLOBAL DEFAULT 12 CERT_CreateAVA@@NSS_3.2.1 + 1061: 00000000000f5180 32 OBJECT GLOBAL DEFAULT 14 SEC_BMPStringTemplate@@NSS_3.2 + 1062: 0000000000050c40 156 FUNC GLOBAL DEFAULT 12 PK11_ReadRawAttributes@@NSS_3.52 + 1063: 000000000002bcf0 268 FUNC GLOBAL DEFAULT 12 SECKEY_CreateDHPrivateKey@@NSS_3.3 + 1064: 000000000002cc70 74 FUNC GLOBAL DEFAULT 12 SECKEY_CopyEncryptedPrivateKeyInfo@@NSS_3.2 + 1065: 00000000000569b0 684 FUNC GLOBAL DEFAULT 12 PK11_ExportPrivKeyInfo@@NSS_3.16.1 + 1066: 000000000001dec0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UTF8StringTemplate@@NSS_3.4 + 1067: 0000000000078ac0 119 FUNC GLOBAL DEFAULT 12 nss_DumpCertificateCacheInfo@@NSS_3.4 + 1068: 000000000032d040 128 OBJECT GLOBAL DEFAULT 20 sgn_DigestInfoTemplate@@NSS_3.2 + 1069: 0000000000062d50 542 FUNC GLOBAL DEFAULT 12 SECMOD_RestartModules@@NSS_3.12.9 + 1070: 00000000000310b0 232 FUNC GLOBAL DEFAULT 12 PK11_ConvertSessionPrivKeyToTokenPrivKey@@NSS_3.6 + 1071: 000000000004da80 135 FUNC GLOBAL DEFAULT 12 PK11_BlockData@@NSS_3.2 + 1072: 0000000000025630 920 FUNC GLOBAL DEFAULT 12 CERT_VerifySignedDataWithPublicKey@@NSS_3.7 + 1073: 000000000005ffe0 272 FUNC GLOBAL DEFAULT 12 PK11_TokenExists@@NSS_3.2 + 1074: 000000000002b0c0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECKEY_RSAPSSParamsTemplate@@NSS_3.13 + 1075: 00000000000575b0 147 FUNC GLOBAL DEFAULT 12 PK11_PQG_NewParams@@NSS_3.3 + 1076: 000000000004d2f0 136 FUNC GLOBAL DEFAULT 12 SEC_DeletePermCRL@@NSS_3.2 + 1077: 00000000000313d0 245 FUNC GLOBAL DEFAULT 12 PK11_MakeIDFromPubKey@@NSS_3.3 + 1078: 0000000000024d60 274 FUNC GLOBAL DEFAULT 12 CERT_DupDistNames@@NSS_3.12.6 + 1079: 000000000004a2e0 646 FUNC GLOBAL DEFAULT 12 PK11_MapPBEMechanismToCryptoMechanism@@NSS_3.2 + 1080: 000000000001ba60 127 FUNC GLOBAL DEFAULT 12 PK11_ConfigurePKCS11@@NSS_3.2 + 1081: 0000000000029ff0 8 FUNC GLOBAL DEFAULT 12 CERT_GetClassicOCSPDisabledPolicy@@NSS_3.12 + 1082: 000000000002c710 26 FUNC GLOBAL DEFAULT 12 SECKEY_DestroySubjectPublicKeyInfo@@NSS_3.2 + 1083: 000000000001d830 5 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_UTF8ConversionFunction@@NSS_3.2 + 1084: 000000000032e960 32 OBJECT GLOBAL DEFAULT 20 CERT_SequenceOfCertExtensionTemplate@@NSS_3.10 + 1085: 000000000006df70 807 FUNC GLOBAL DEFAULT 12 __CERT_AddTempCertToPerm@@NSS_3.4 + 1086: 000000000001d8c0 5 FUNC GLOBAL DEFAULT 12 SECOID_GetAlgorithmTag@@NSS_3.2 + 1087: 000000000002dc50 8 FUNC GLOBAL DEFAULT 12 SEC_SignData@@NSS_3.2 + 1088: 0000000000052de0 12 FUNC GLOBAL DEFAULT 12 SECMOD_GetSkipFirstFlag@@NSS_3.12.5 + 1089: 0000000000065310 8 FUNC GLOBAL DEFAULT 12 NSS_Get_CERT_SequenceOfCertExtensionTemplate@@NSS_3.10 + 1090: 0000000000067a10 222 FUNC GLOBAL DEFAULT 12 CERT_FilterCertListByUsage@@NSS_3.4 + 1091: 000000000002b290 87 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPublicKey@@NSS_3.2 + 1092: 000000000001d7e0 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaRelease@@NSS_3.2 + 1093: 0000000000065860 7 FUNC GLOBAL DEFAULT 12 CERT_GetSlopTime@@NSS_3.2 + 1094: 0000000000036d10 68 FUNC GLOBAL DEFAULT 12 PK11_KeyForDERCertExists@@NSS_3.3 + 1095: 00000000000259d0 71 FUNC GLOBAL DEFAULT 12 CERT_VerifySignedDataWithPublicKeyInfo@@NSS_3.7 + 1096: 00000000000554d0 23 FUNC GLOBAL DEFAULT 12 PK11_CreatePBEV2AlgorithmID@@NSS_3.12 + 1097: 00000000000210e0 453 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPRequest@@NSS_3.6 + 1098: 0000000000067950 191 FUNC GLOBAL DEFAULT 12 CERT_AddCertToListSorted@@NSS_3.12.5 + 1099: 000000000006e650 5 FUNC GLOBAL DEFAULT 12 __CERT_NewTempCertificate@@NSS_3.2 + 1100: 0000000000057220 33 FUNC GLOBAL DEFAULT 12 PK11_PQG_ParamGenSeedLen@@NSS_3.3 + 1101: 0000000000057670 11 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetBaseFromParams@@NSS_3.3 + 1102: 000000000001dee0 185 FUNC GLOBAL DEFAULT 12 CERT_Hexify@@NSS_3.2 + 1103: 000000000002ccc0 4 FUNC GLOBAL DEFAULT 12 SECKEY_GetPrivateKeyType@@NSS_3.3 + 1104: 0000000000065030 16 FUNC GLOBAL DEFAULT 12 CERT_GetOrgName@@NSS_3.2 + 1105: 0000000000067200 5 FUNC GLOBAL DEFAULT 12 __CERT_DecodeDERCertificate@@NSS_3.2 + 1106: 0000000000023940 419 FUNC GLOBAL DEFAULT 12 CERT_CacheOCSPResponseFromSideChannel@@NSS_3.12.6 + 1107: 0000000000057560 66 FUNC GLOBAL DEFAULT 12 PK11_PQG_DestroyVerify@@NSS_3.3 + 1108: 0000000000028690 16 FUNC GLOBAL DEFAULT 12 CERT_SetUsePKIXForValidation@@NSS_3.12 + 1109: 000000000002cff0 41 FUNC GLOBAL DEFAULT 12 SECKEY_DestroyPublicKeyList@@NSS_3.4 + 1110: 00000000000286a0 7 FUNC GLOBAL DEFAULT 12 CERT_GetUsePKIXForValidation@@NSS_3.12 + 1111: 00000000000472e0 110 FUNC GLOBAL DEFAULT 12 PK11_GetBestWrapMechanism@@NSS_3.2 + 1112: 0000000000059220 13 FUNC GLOBAL DEFAULT 12 PK11_GetSymKeyNickname@@NSS_3.4 + 1113: 000000000001d970 5 FUNC GLOBAL DEFAULT 12 SECITEM_FreeItem@@NSS_3.2 + 1114: 0000000000023dc0 103 FUNC GLOBAL DEFAULT 12 CERT_CreateOCSPSingleResponseRevoked@@NSS_3.14.1 + 1115: 000000000006c000 78 FUNC GLOBAL DEFAULT 12 CERT_GetGeneralNameTypeFromString@@NSS_3.16.2 + 1116: 000000000001d8b0 5 FUNC GLOBAL DEFAULT 12 SECOID_CopyAlgorithmID@@NSS_3.2 + 1117: 0000000000067af0 92 FUNC GLOBAL DEFAULT 12 CERT_IsUserCert@@NSS_3.6 + 1118: 000000000001db30 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetNotifyProc@@NSS_3.2 + 1119: 000000000004d920 346 FUNC GLOBAL DEFAULT 12 PK11_ImportCRL@@NSS_3.6 + 1120: 0000000000038510 1001 FUNC GLOBAL DEFAULT 12 PK11_FindCertAndKeyByRecipientListNew@@NSS_3.2 + 1121: 0000000000038fc0 135 FUNC GLOBAL DEFAULT 12 _PK11_ContextSetAEADSimulation@@NSS_3.52 + 1122: 0000000000061470 31 FUNC GLOBAL DEFAULT 12 SECMOD_ReferenceModule@@NSS_3.3 + 1123: 000000000004f3f0 634 FUNC GLOBAL DEFAULT 12 PK11_SignWithMechanism@@NSS_3.22 + 1124: 000000000002fbf0 48 FUNC GLOBAL DEFAULT 12 DSAU_EncodeDerSig@@NSS_3.2 + 1125: 0000000000025500 237 FUNC GLOBAL DEFAULT 12 CERT_DupCertList@@NSS_3.2 + 1126: 000000000001d7d0 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaMark@@NSS_3.2 + 1127: 000000000001d020 211 FUNC GLOBAL DEFAULT 12 NSS_InitWithMerge@@NSS_3.12 + 1128: 000000000001daa0 5 FUNC GLOBAL DEFAULT 12 CERT_GenTime2FormattedAscii@@NSS_3.2 + 1129: 00000000000710e0 137 FUNC GLOBAL DEFAULT 12 CERT_DecodePrivKeyUsagePeriodExtension@@NSS_3.10 + 1130: 00000000000552e0 403 FUNC GLOBAL DEFAULT 12 PK11_CreatePBEParams@@NSS_3.3.1 + 1131: 000000000001d910 5 FUNC GLOBAL DEFAULT 12 SECITEM_AllocItem@@NSS_3.2 + 1132: 000000000001d770 5 FUNC GLOBAL DEFAULT 12 PORT_GetError@@NSS_3.2 + 1133: 0000000000067500 422 FUNC GLOBAL DEFAULT 12 CERT_DecodeTrustString@@NSS_3.4 + 1134: 000000000001da00 5 FUNC GLOBAL DEFAULT 12 DER_TimeToUTCTime@@NSS_3.2 + 1135: 000000000002aae0 161 FUNC GLOBAL DEFAULT 12 HASH_GetHashOidTagByHashType@@NSS_3.43 + 1136: 000000000005e990 9 FUNC GLOBAL DEFAULT 12 PK11_GetModuleID@@NSS_3.2 + 1137: 000000000005e050 149 FUNC GLOBAL DEFAULT 12 PK11_UpdateSlotAttribute@@NSS_3.8 + 1138: 000000000001dad0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderStart@@NSS_3.2 + 1139: 000000000001dc90 5 FUNC GLOBAL DEFAULT 12 ATOB_AsciiToData@@NSS_3.2 + 1140: 000000000002ae80 7 FUNC GLOBAL DEFAULT 12 HASH_GetType@@NSS_3.12 + 1141: 000000000001daf0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderFinish@@NSS_3.2 + 1142: 000000000001d700 5 FUNC GLOBAL DEFAULT 12 PORT_Alloc@@NSS_3.2 + 1143: 000000000005e960 8 FUNC GLOBAL DEFAULT 12 PK11_GetSlotSeries@@NSS_3.2 + 1144: 0000000000025a20 92 FUNC GLOBAL DEFAULT 12 CERT_VerifySignedData@@NSS_3.4 + 1145: 0000000000057720 11 FUNC GLOBAL DEFAULT 12 PK11_PQG_GetSeedFromVerify@@NSS_3.3 + 1146: 000000000001d860 5 FUNC GLOBAL DEFAULT 12 NSS_PutEnv@@NSS_3.2 + 1147: 00000000000347f0 87 FUNC GLOBAL DEFAULT 12 PK11_Authenticate@@NSS_3.2 + 1148: 000000000005d760 112 FUNC GLOBAL DEFAULT 12 PK11_GetNextSafe@@NSS_3.4 + 1149: 000000000004ffa0 1620 FUNC GLOBAL DEFAULT 12 PK11_UnwrapPrivKey@@NSS_3.3 + 1150: 000000000001dae0 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderUpdate@@NSS_3.2 + 1151: 0000000000025a90 320 FUNC GLOBAL DEFAULT 12 CERT_FindCertIssuer@@NSS_3.3 + 1152: 000000000001d710 5 FUNC GLOBAL DEFAULT 12 PORT_Realloc@@NSS_3.2 + 1153: 000000000001dd80 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockRead@@NSS_3.2 + 1154: 000000000006b390 165 FUNC GLOBAL DEFAULT 12 SEC_FindCrlByDERCert@@NSS_3.2 + 1155: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.10 + 1156: 000000000002bf00 224 FUNC GLOBAL DEFAULT 12 SECKEY_CopyPrivateKey@@NSS_3.2 + 1157: 000000000002b7c0 5 FUNC GLOBAL DEFAULT 12 SECKEY_ExtractPublicKey@@NSS_3.3 + 1158: 0000000000033bf0 86 FUNC GLOBAL DEFAULT 12 PK11_Logout@@NSS_3.3 + 1159: 00000000000278a0 88 FUNC GLOBAL DEFAULT 12 CERT_VerifyCertificateNow@@NSS_3.6 + 1160: 0000000000060f70 8 FUNC GLOBAL DEFAULT 12 SECMOD_GetDefaultModuleListLock@@NSS_3.3 + 1161: 000000000002fc70 7 FUNC GLOBAL DEFAULT 12 DSAU_DecodeDerSigToLen@@NSS_3.9 + 1162: 000000000001da30 5 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToAscii@@NSS_3.2 + 1163: 0000000000069a80 151 FUNC GLOBAL DEFAULT 12 SEC_LookupCrls@@NSS_3.2 + 1164: 000000000002be80 122 FUNC GLOBAL DEFAULT 12 SECKEY_SignatureLen@@NSS_3.11.2 + 1165: 000000000001d900 5 FUNC GLOBAL DEFAULT 12 SECOID_AddEntry@@NSS_3.10 + 1166: 00000000000223c0 330 FUNC GLOBAL DEFAULT 12 CERT_GetOCSPAuthorityInfoAccessLocation@@NSS_3.4 + 1167: 000000000001d7a0 5 FUNC GLOBAL DEFAULT 12 PORT_ArenaZAlloc@@NSS_3.2 + 1168: 000000000001dab0 5 FUNC GLOBAL DEFAULT 12 DER_DecodeTimeChoice@@NSS_3.9 + 1169: 000000000001dd20 5 FUNC GLOBAL DEFAULT 12 NSSBase64_DecodeBuffer@@NSS_3.4 + 1170: 00000000000389e0 68 FUNC GLOBAL DEFAULT 12 __PK11_SetCertificateNickname@@NSS_3.18 + 1171: 000000000001d930 5 FUNC GLOBAL DEFAULT 12 SECITEM_ItemsAreEqual@@NSS_3.8 + 1172: 00000000000f51c0 128 OBJECT GLOBAL DEFAULT 14 SECOID_AlgorithmIDTemplate@@NSS_3.2 + 1173: 000000000005e9a0 333 FUNC GLOBAL DEFAULT 12 PK11_GetSlotInfo@@NSS_3.4 + 1174: 0000000000034170 7 FUNC GLOBAL DEFAULT 12 PK11_GetMinimumPwdLength@@NSS_3.4 + 1175: 0000000000056540 719 FUNC GLOBAL DEFAULT 12 PK11_ImportPrivateKeyInfoAndReturnKey@@NSS_3.4 + 1176: 0000000000065060 16 FUNC GLOBAL DEFAULT 12 CERT_GetCertUid@@NSS_3.2 + 1177: 000000000006f3a0 55 FUNC GLOBAL DEFAULT 12 CERT_GetCertIsTemp@@NSS_3.31 + 1178: 000000000002adc0 13 FUNC GLOBAL DEFAULT 12 HASH_Update@@NSS_3.4 + 1179: 0000000000064f50 172 FUNC GLOBAL DEFAULT 12 CERT_GetCommonName@@NSS_3.2 + 1180: 000000000006e700 50 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificate@@NSS_3.2 + 1181: 0000000000039a50 109 FUNC GLOBAL DEFAULT 12 PK11_CreateContextBySymKey@@NSS_3.2 + 1182: 00000000000494e0 31 FUNC GLOBAL DEFAULT 12 PK11_AlgtagToMechanism@@NSS_3.2 + 1183: 00000000000667e0 30 FUNC GLOBAL DEFAULT 12 CERT_CompareCerts@@NSS_3.12.3 + 1184: 000000000001dd70 5 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockWrite@@NSS_3.2 + 1185: 000000000006c200 14 FUNC GLOBAL DEFAULT 12 CERT_GetNextNameConstraint@@NSS_3.10 + 1186: 0000000000037e90 140 FUNC GLOBAL DEFAULT 12 PK11_FortezzaHasKEA@@NSS_3.2 + 1187: 0000000000036a70 315 FUNC GLOBAL DEFAULT 12 PK11_FindPrivateKeyFromCert@@NSS_3.2 + 1188: 000000000005d410 9 FUNC GLOBAL DEFAULT 12 PK11_ReferenceSlot@@NSS_3.3 + 1189: 0000000000039060 206 FUNC GLOBAL DEFAULT 12 PK11_SaveContext@@NSS_3.2 + 1190: 0000000000065300 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SignedCertificateTemplate@@NSS_3.4 + 1191: 000000000032d0e0 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToOctetStringTemplate@@NSS_3.2 + 1192: 000000000001da40 5 FUNC GLOBAL DEFAULT 12 DER_UTCDayToAscii@@NSS_3.2 + 1193: 0000000000030d40 202 FUNC GLOBAL DEFAULT 12 PK11_GetPrivateModulusLen@@NSS_3.2 + 1194: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.10.2 + 1195: 000000000006f590 18 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertificatePoliciesExtension@@NSS_3.2 + 1196: 000000000006fac0 62 FUNC GLOBAL DEFAULT 12 CERT_EncodePolicyConstraintsExtension@@NSS_3.12 + 1197: 0000000000032690 1089 FUNC GLOBAL DEFAULT 12 PK11_ImportEncryptedPrivateKeyInfoAndReturnKey@@NSS_3.13.2 + 1198: 0000000000059ba0 5 FUNC GLOBAL DEFAULT 12 PK11_GetKeyData@@NSS_3.3 + 1199: 000000000002bfe0 462 FUNC GLOBAL DEFAULT 12 SECKEY_CopyPublicKey@@NSS_3.6 + 1200: 000000000004f3b0 62 FUNC GLOBAL DEFAULT 12 PK11_Verify@@NSS_3.2 + 1201: 0000000000037fb0 176 FUNC GLOBAL DEFAULT 12 PK11_FindBestKEAMatch@@NSS_3.2 + 1202: 0000000000027b90 333 FUNC GLOBAL DEFAULT 12 CERT_NicknameStringsFromCertList@@NSS_3.4 + 1203: 000000000001db40 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearNotifyProc@@NSS_3.2 + 1204: 000000000005e710 4 FUNC GLOBAL DEFAULT 12 PK11_IsInternal@@NSS_3.2 + 1205: 0000000000070f70 289 FUNC GLOBAL DEFAULT 12 CERT_DecodeBasicConstraintValue@@NSS_3.2 + 1206: 0000000000031e80 29 FUNC GLOBAL DEFAULT 12 PK11_LoadPrivKey@@NSS_3.4 + 1207: 00000000000f50e0 32 OBJECT GLOBAL DEFAULT 14 SEC_IntegerTemplate@@NSS_3.2 + 1208: 0000000000065000 16 FUNC GLOBAL DEFAULT 12 CERT_GetCountryName@@NSS_3.2 + 1209: 000000000002ef40 5 FUNC GLOBAL DEFAULT 12 VFY_CreateContextDirect@@NSS_3.12 + 1210: 0000000000055280 4 FUNC GLOBAL DEFAULT 12 PBE_GenerateBits@@NSS_3.3 + 1211: 000000000006b9e0 645 FUNC GLOBAL DEFAULT 12 CERT_UncacheCRL@@NSS_3.10 + 1212: 000000000001dea0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SetOfAnyTemplate@@NSS_3.2 + 1213: 0000000000067450 77 FUNC GLOBAL DEFAULT 12 CERT_DestroyCertArray@@NSS_3.2 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnssutil3.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnssutil3.so.txt new file mode 100644 index 000000000000..f59b5136a17f --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libnssutil3.so.txt @@ -0,0 +1,338 @@ +Library: /lib64/libnssutil3.so +Package: nss-util-3.53.1-1.el7_9.x86_64 + + +Symbol table '.dynsym' contains 332 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLock + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (17) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyCondVar + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (18) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (18) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (18) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaAllocate + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.2.5 (18) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncasecmp + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ErrorInstallTable + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetCurrentThread + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (18) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetDirectorySeparator + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareValues + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GMTParameters + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strcasecmp + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (18) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (19) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_FreeArenaPool + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Access + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetEnvSecure + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ImplodeTime + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Realloc + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (18) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (18) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (18) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyLock + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (18) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncat@GLIBC_2.2.5 (18) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (20) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Rename + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnce + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (18) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableDestroy + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (18) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyCondVar + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putenv@GLIBC_2.2.5 (18) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (18) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (21) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND feof@GLIBC_2.2.5 (18) + 42: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaRelease + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (18) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_NewHashTable + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (22) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Delete + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookup + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableAdd + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strpbrk + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (18) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_WaitCondVar + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_ExplodeTime + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strlen + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_FormatTime + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewCondVar + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_SetError + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetLibraryFilePathname + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_FinishArenaPool + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ClearArenaPool + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Lock + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_InitArenaPool + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdopen@GLIBC_2.2.5 (18) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (18) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LocalTimeParameters + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (20) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (18) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NotifyAllCondVar + 69: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_ArenaGrow + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.2.5 (18) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_snprintf + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (18) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (21) + 76: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_LoadLibraryWithFlags + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_smprintf_free + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookupConst + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Free + 81: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (18) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (18) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Unlock + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (17) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (17) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Calloc + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_GetError + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Malloc + 89: 0000000000015cb0 83 FUNC GLOBAL DEFAULT 12 SECITEM_ZfreeItem_Util@@NSSUTIL_3.12 + 90: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.25 + 91: 0000000000015790 235 FUNC GLOBAL DEFAULT 12 SECITEM_ReallocItemV2@@NSSUTIL_3.15 + 92: 000000000001b6e0 661 FUNC GLOBAL DEFAULT 12 _NSSUTIL_GetSecmodName@@NSSUTIL_3.14 + 93: 0000000000020b80 32 OBJECT GLOBAL DEFAULT 14 SEC_T61StringTemplate@@NSSUTIL_3.12 + 94: 0000000000023f60 32 OBJECT GLOBAL DEFAULT 14 SEC_GeneralizedTimeTemplate_Util@@NSSUTIL_3.12 + 95: 000000000000fdc0 112 FUNC GLOBAL DEFAULT 12 ATOB_AsciiToData_Util@@NSSUTIL_3.12 + 96: 00000000000118f0 236 FUNC GLOBAL DEFAULT 12 SECOID_SetAlgorithmID_Util@@NSSUTIL_3.12 + 97: 00000000000103c0 601 FUNC GLOBAL DEFAULT 12 NSSBase64_EncodeItem_Util@@NSSUTIL_3.12 + 98: 000000000001cb50 24 FUNC GLOBAL DEFAULT 12 PK11URI_GetQueryAttribute@@NSSUTIL_3.31 + 99: 0000000000015530 63 FUNC GLOBAL DEFAULT 12 SEC_ASN1Encode_Util@@NSSUTIL_3.12 + 100: 0000000000017160 34 FUNC GLOBAL DEFAULT 12 PORT_ZFree_Util@@NSSUTIL_3.12 + 101: 0000000000015700 140 FUNC GLOBAL DEFAULT 12 SECITEM_ReallocItem@@NSSUTIL_3.12.3 + 102: 0000000000016dd0 53 FUNC GLOBAL DEFAULT 12 DER_TimeChoiceDayToAscii_Util@@NSSUTIL_3.12 + 103: 0000000000023f80 32 OBJECT GLOBAL DEFAULT 14 SEC_BooleanTemplate_Util@@NSSUTIL_3.12 + 104: 0000000000019650 26 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgIsBlank@@NSSUTIL_3.14 + 105: 0000000000016020 174 FUNC GLOBAL DEFAULT 12 SECITEM_DupArray@@NSSUTIL_3.15 + 106: 0000000000019e80 96 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgReadLong@@NSSUTIL_3.14 + 107: 0000000000015e30 5 FUNC GLOBAL DEFAULT 12 SECITEM_HashCompare@@NSSUTIL_3.12 + 108: 00000000000173c0 148 FUNC GLOBAL DEFAULT 12 PORT_NewArena_Util@@NSSUTIL_3.12 + 109: 0000000000013f20 12 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetFilterProc_Util@@NSSUTIL_3.12 + 110: 0000000000015620 7 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeInteger_Util@@NSSUTIL_3.12 + 111: 00000000000169f0 36 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTagDescription_Util@@NSSUTIL_3.12 + 112: 0000000000011860 108 FUNC GLOBAL DEFAULT 12 PORT_RegExpCaseSearch@@NSSUTIL_3.12 + 113: 000000000000e870 162 FUNC GLOBAL DEFAULT 12 DER_StoreHeader@@NSSUTIL_3.12 + 114: 0000000000019900 42 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgStrip@@NSSUTIL_3.14 + 115: 000000000001abd0 8 FUNC GLOBAL DEFAULT 12 NSSUTIL_MkModuleSpec@@NSSUTIL_3.14 + 116: 0000000000017950 5 FUNC GLOBAL DEFAULT 12 PORT_ISO88591_UTF8Conversion@@NSSUTIL_3.12 + 117: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.31 + 118: 000000000000f1e0 169 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToTime_Util@@NSSUTIL_3.12 + 119: 0000000000019de0 155 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgGetLabel@@NSSUTIL_3.14 + 120: 000000000022eb60 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToGeneralizedTimeTemplate@@NSSUTIL_3.12 + 121: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.33 + 122: 0000000000017b30 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToOctetStringTemplate_Util@@NSSUTIL_3.12 + 123: 0000000000010670 14 FUNC GLOBAL DEFAULT 12 BTOA_ConvertItemToAscii_Util@@NSSUTIL_3.12 + 124: 0000000000017b50 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UTF8StringTemplate_Util@@NSSUTIL_3.12 + 125: 0000000000019f40 67 FUNC GLOBAL DEFAULT 12 NSSUTIL_QuoteSize@@NSSUTIL_3.14 + 126: 0000000000017a10 44 FUNC GLOBAL DEFAULT 12 NSS_SecureMemcmp@@NSSUTIL_3.12.5 + 127: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.38 + 128: 0000000000010870 105 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockWrite_Util@@NSSUTIL_3.12 + 129: 0000000000016d10 85 FUNC GLOBAL DEFAULT 12 DER_UTCDayToAscii_Util@@NSSUTIL_3.12 + 130: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.39 + 131: 0000000000017b10 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_OctetStringTemplate_Util@@NSSUTIL_3.12 + 132: 0000000000016e70 139 FUNC GLOBAL DEFAULT 12 CERT_GenTime2FormattedAscii_Util@@NSSUTIL_3.12 + 133: 0000000000015470 9 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetNotifyProc_Util@@NSSUTIL_3.12 + 134: 0000000000015b30 70 FUNC GLOBAL DEFAULT 12 SECITEM_FreeItem_Util@@NSSUTIL_3.12 + 135: 00000000000154d0 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearStreaming_Util@@NSSUTIL_3.12 + 136: 0000000000010980 670 FUNC GLOBAL DEFAULT 12 SEC_StringToOID@@NSSUTIL_3.12 + 137: 0000000000017ad0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IA5StringTemplate_Util@@NSSUTIL_3.12 + 138: 00000000000153c0 164 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderStart_Util@@NSSUTIL_3.12 + 139: 00000000000117f0 100 FUNC GLOBAL DEFAULT 12 PORT_RegExpSearch@@NSSUTIL_3.12.7 + 140: 0000000000019c20 149 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgHasFlag@@NSSUTIL_3.14 + 141: 00000000000167b0 470 FUNC GLOBAL DEFAULT 12 SECOID_AddEntry_Util@@NSSUTIL_3.12 + 142: 000000000000e020 328 FUNC GLOBAL DEFAULT 12 DER_Lengths_Util@@NSSUTIL_3.12 + 143: 000000000001c9e0 332 FUNC GLOBAL DEFAULT 12 PK11URI_ParseURI@@NSSUTIL_3.31 + 144: 0000000000014080 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_T61StringTemplate@@NSSUTIL_3.12 + 145: 0000000000017230 49 FUNC GLOBAL DEFAULT 12 PORT_Realloc_Util@@NSSUTIL_3.12 + 146: 00000000000154a0 20 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderAbort_Util@@NSSUTIL_3.12 + 147: 00000000000175c0 204 FUNC GLOBAL DEFAULT 12 PORT_FreeArena_Util@@NSSUTIL_3.12 + 148: 0000000000016990 45 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDByTag_Util@@NSSUTIL_3.12 + 149: 000000000000dad0 167 FUNC GLOBAL DEFAULT 12 SEC_QuickDERDecodeItem_Util@@NSSUTIL_3.12 + 150: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12.3 + 151: 0000000000017270 65 FUNC GLOBAL DEFAULT 12 PORT_ZAlloc_Util@@NSSUTIL_3.12 + 152: 0000000000017190 7 FUNC GLOBAL DEFAULT 12 PORT_SetError_Util@@NSSUTIL_3.12 + 153: 000000000000f980 111 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Create_Util@@NSSUTIL_3.12 + 154: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12.5 + 155: 0000000000017480 248 FUNC GLOBAL DEFAULT 12 PORT_ArenaAlloc_Util@@NSSUTIL_3.12 + 156: 000000000001cb30 24 FUNC GLOBAL DEFAULT 12 PK11URI_GetPathAttribute@@NSSUTIL_3.31 + 157: 000000000000e830 54 FUNC GLOBAL DEFAULT 12 DER_LengthLength@@NSSUTIL_3.12 + 158: 0000000000017af0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_NullTemplate_Util@@NSSUTIL_3.12 + 159: 0000000000016a90 89 FUNC GLOBAL DEFAULT 12 NSS_SetAlgorithmPolicy@@NSSUTIL_3.12.3 + 160: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12.7 + 161: 000000000022eba0 32 OBJECT GLOBAL DEFAULT 20 SEC_SequenceOfAnyTemplate@@NSSUTIL_3.12 + 162: 0000000000014010 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_EnumeratedTemplate@@NSSUTIL_3.12 + 163: 0000000000023f40 32 OBJECT GLOBAL DEFAULT 14 SEC_IA5StringTemplate_Util@@NSSUTIL_3.12 + 164: 00000000000178f0 11 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_ASCIIConversionFunction_Util@@NSSUTIL_3.12 + 165: 00000000000119e0 53 FUNC GLOBAL DEFAULT 12 SECOID_CopyAlgorithmID_Util@@NSSUTIL_3.12 + 166: 0000000000015ff0 34 FUNC GLOBAL DEFAULT 12 SECITEM_ZfreeArray@@NSSUTIL_3.15 + 167: 00000000000154c0 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetStreaming_Util@@NSSUTIL_3.12 + 168: 0000000000023ee0 32 OBJECT GLOBAL DEFAULT 14 SEC_ObjectIDTemplate_Util@@NSSUTIL_3.12 + 169: 000000000000fb40 638 FUNC GLOBAL DEFAULT 12 NSSBase64_DecodeBuffer_Util@@NSSUTIL_3.12 + 170: 0000000000020bc0 32 OBJECT GLOBAL DEFAULT 14 SEC_EnumeratedTemplate@@NSSUTIL_3.12 + 171: 0000000000019b10 216 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgGetParamValue@@NSSUTIL_3.14 + 172: 0000000000020ba0 32 OBJECT GLOBAL DEFAULT 14 SEC_PrintableStringTemplate@@NSSUTIL_3.12 + 173: 0000000000017b20 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToAnyTemplate_Util@@NSSUTIL_3.12 + 174: 0000000000014020 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToEnumeratedTemplate@@NSSUTIL_3.12 + 175: 000000000000fe30 90 FUNC GLOBAL DEFAULT 12 ATOB_ConvertAsciiToItem_Util@@NSSUTIL_3.12 + 176: 000000000022ec80 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToAnyTemplate_Util@@NSSUTIL_3.12 + 177: 0000000000016c60 7 FUNC GLOBAL DEFAULT 12 UTIL_SetForkState@@NSSUTIL_3.12.3 + 178: 0000000000020b20 32 OBJECT GLOBAL DEFAULT 14 SEC_SkipTemplate@@NSSUTIL_3.12 + 179: 0000000000017a70 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SECOID_AlgorithmIDTemplate_Util@@NSSUTIL_3.12 + 180: 0000000000017a80 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_AnyTemplate_Util@@NSSUTIL_3.12 + 181: 0000000000011a20 62 FUNC GLOBAL DEFAULT 12 SECOID_DestroyAlgorithmID_Util@@NSSUTIL_3.12 + 182: 0000000000015ae0 70 FUNC GLOBAL DEFAULT 12 SECITEM_MakeItem@@NSSUTIL_3.38 + 183: 0000000000023fe0 32 OBJECT GLOBAL DEFAULT 14 SEC_AnyTemplate_Util@@NSSUTIL_3.12 + 184: 00000000000199e0 220 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgFetchValue@@NSSUTIL_3.14 + 185: 000000000000ddf0 151 FUNC GLOBAL DEFAULT 12 SGN_CopyDigestInfo_Util@@NSSUTIL_3.12 + 186: 000000000000f9f0 252 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Update_Util@@NSSUTIL_3.12 + 187: 0000000000012400 6696 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderUpdate_Util@@NSSUTIL_3.12 + 188: 000000000001c920 183 FUNC GLOBAL DEFAULT 12 PK11URI_CreateURI@@NSSUTIL_3.31 + 189: 0000000000017140 18 FUNC GLOBAL DEFAULT 12 PORT_Free_Util@@NSSUTIL_3.12 + 190: 0000000000015990 172 FUNC GLOBAL DEFAULT 12 SECITEM_ArenaDupItem_Util@@NSSUTIL_3.12 + 191: 000000000001a660 551 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseModuleSpecEx@@NSSUTIL_3.21 + 192: 0000000000014090 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PointerToGeneralizedTimeTemplate@@NSSUTIL_3.12 + 193: 0000000000010680 68 FUNC GLOBAL DEFAULT 12 NSSRWLock_Destroy_Util@@NSSUTIL_3.12 + 194: 0000000000016190 454 FUNC GLOBAL DEFAULT 12 PORT_LoadLibraryFromOrigin@@NSSUTIL_3.12.5 + 195: 000000000001c6b0 491 FUNC GLOBAL DEFAULT 12 PK11URI_FormatURI@@NSSUTIL_3.31 + 196: 00000000000171f0 61 FUNC GLOBAL DEFAULT 12 PORT_Strdup_Util@@NSSUTIL_3.12 + 197: 000000000000de90 59 FUNC GLOBAL DEFAULT 12 SGN_CompareDigestInfo_Util@@NSSUTIL_3.12 + 198: 00000000000154e0 8 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderSetTakeFromBuf_Util@@NSSUTIL_3.12 + 199: 0000000000013e30 78 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderFinish_Util@@NSSUTIL_3.12 + 200: 00000000000178e0 11 FUNC GLOBAL DEFAULT 12 PORT_SetUCS4_UTF8ConversionFunction_Util@@NSSUTIL_3.12 + 201: 0000000000015e40 383 FUNC GLOBAL DEFAULT 12 SECITEM_AllocArray@@NSSUTIL_3.15 + 202: 0000000000017ac0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_GeneralizedTimeTemplate_Util@@NSSUTIL_3.12 + 203: 0000000000019f90 14 FUNC GLOBAL DEFAULT 12 NSSUTIL_Quote@@NSSUTIL_3.14 + 204: 0000000000015dc0 105 FUNC GLOBAL DEFAULT 12 SECITEM_Hash@@NSSUTIL_3.12 + 205: 0000000000010820 66 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockRead_Util@@NSSUTIL_3.12 + 206: 0000000000017aa0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BitStringTemplate_Util@@NSSUTIL_3.12 + 207: 0000000000023f00 32 OBJECT GLOBAL DEFAULT 14 SEC_NullTemplate_Util@@NSSUTIL_3.12 + 208: 000000000000f550 13 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTime_Util@@NSSUTIL_3.12 + 209: 00000000000163f0 714 FUNC GLOBAL DEFAULT 12 SECOID_Init@@NSSUTIL_3.12 + 210: 0000000000017350 95 FUNC GLOBAL DEFAULT 12 PORT_ZAllocAlignedOffset_Util@@NSSUTIL_3.33 + 211: 0000000000014030 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SequenceOfAnyTemplate@@NSSUTIL_3.12 + 212: 0000000000015630 10 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeUnsignedInteger_Util@@NSSUTIL_3.12 + 213: 0000000000017900 11 FUNC GLOBAL DEFAULT 12 PORT_SetUCS2_UTF8ConversionFunction_Util@@NSSUTIL_3.12 + 214: 0000000000011a60 51 FUNC GLOBAL DEFAULT 12 SECOID_CompareAlgorithmID_Util@@NSSUTIL_3.12 + 215: 0000000000017b00 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_ObjectIDTemplate_Util@@NSSUTIL_3.12 + 216: 00000000000102b0 88 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Create_Util@@NSSUTIL_3.12 + 217: 000000000022eb40 32 OBJECT GLOBAL DEFAULT 20 SEC_SequenceOfObjectIDTemplate@@NSSUTIL_3.12 + 218: 0000000000019f30 11 FUNC GLOBAL DEFAULT 12 NSSUTIL_Escape@@NSSUTIL_3.14 + 219: 0000000000010370 66 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Destroy_Util@@NSSUTIL_3.12 + 220: 0000000000023ec0 32 OBJECT GLOBAL DEFAULT 14 SEC_OctetStringTemplate_Util@@NSSUTIL_3.12 + 221: 0000000000013f50 9 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetNotifyProc_Util@@NSSUTIL_3.12 + 222: 0000000000023fa0 32 OBJECT GLOBAL DEFAULT 14 SEC_BitStringTemplate_Util@@NSSUTIL_3.12 + 223: 000000000001abe0 789 FUNC GLOBAL DEFAULT 12 NSSUTIL_AddNSSFlagToModuleSpec@@NSSUTIL_3.39 + 224: 000000000000eb20 143 FUNC GLOBAL DEFAULT 12 DER_GetUInteger@@NSSUTIL_3.12 + 225: 0000000000015b80 295 FUNC GLOBAL DEFAULT 12 SECITEM_AllocItem_Util@@NSSUTIL_3.12 + 226: 0000000000013fb0 79 FUNC GLOBAL DEFAULT 12 SEC_ASN1Decode_Util@@NSSUTIL_3.12 + 227: 0000000000017860 7 FUNC GLOBAL DEFAULT 12 PORT_ArenaRelease_Util@@NSSUTIL_3.12 + 228: 0000000000023fc0 32 OBJECT GLOBAL DEFAULT 14 SEC_BMPStringTemplate_Util@@NSSUTIL_3.12 + 229: 0000000000023e80 32 OBJECT GLOBAL DEFAULT 14 SEC_UTF8StringTemplate_Util@@NSSUTIL_3.12 + 230: 000000000001a3c0 668 FUNC GLOBAL DEFAULT 12 NSSUTIL_MkSlotString@@NSSUTIL_3.14 + 231: 0000000000017810 68 FUNC GLOBAL DEFAULT 12 PORT_ArenaMark_Util@@NSSUTIL_3.12 + 232: 0000000000013e80 150 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderStart_Util@@NSSUTIL_3.12 + 233: 0000000000014050 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SkipTemplate@@NSSUTIL_3.12 + 234: 00000000000108e0 122 FUNC GLOBAL DEFAULT 12 NSSRWLock_UnlockWrite_Util@@NSSUTIL_3.12 + 235: 000000000000db80 201 FUNC GLOBAL DEFAULT 12 SGN_DecodeDigestInfo@@NSSUTIL_3.12 + 236: 0000000000010310 95 FUNC GLOBAL DEFAULT 12 NSSBase64Encoder_Update_Util@@NSSUTIL_3.12 + 237: 0000000000013f90 20 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderAbort_Util@@NSSUTIL_3.12 + 238: 00000000000107b0 101 FUNC GLOBAL DEFAULT 12 NSSRWLock_LockRead_Util@@NSSUTIL_3.12 + 239: 0000000000012390 98 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeInteger_Util@@NSSUTIL_3.12 + 240: 0000000000017980 135 FUNC GLOBAL DEFAULT 12 NSS_PutEnv_Util@@NSSUTIL_3.12 + 241: 000000000001a060 182 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseSlotFlags@@NSSUTIL_3.14 + 242: 0000000000016e10 85 FUNC GLOBAL DEFAULT 12 DER_UTCTimeToAscii_Util@@NSSUTIL_3.12 + 243: 00000000000118d0 27 FUNC GLOBAL DEFAULT 12 SECOID_GetAlgorithmTag_Util@@NSSUTIL_3.12 + 244: 00000000000169c0 39 FUNC GLOBAL DEFAULT 12 SECOID_KnownCertExtenOID@@NSSUTIL_3.12 + 245: 000000000000f290 691 FUNC GLOBAL DEFAULT 12 DER_TimeToGeneralizedTimeArena_Util@@NSSUTIL_3.12 + 246: 000000000000f560 169 FUNC GLOBAL DEFAULT 12 DER_GeneralizedTimeToTime_Util@@NSSUTIL_3.12 + 247: 0000000000016780 39 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDTag_Util@@NSSUTIL_3.12 + 248: 0000000000017890 68 FUNC GLOBAL DEFAULT 12 PORT_ArenaStrdup_Util@@NSSUTIL_3.12 + 249: 0000000000020b60 32 OBJECT GLOBAL DEFAULT 14 SEC_UniversalStringTemplate@@NSSUTIL_3.12 + 250: 000000000001b550 398 FUNC GLOBAL DEFAULT 12 _NSSUTIL_EvaluateConfigDir@@NSSUTIL_3.14 + 251: 000000000001a120 664 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseSlotInfo@@NSSUTIL_3.14 + 252: 0000000000019cc0 280 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgDecodeNumber@@NSSUTIL_3.14 + 253: 00000000000176d0 313 FUNC GLOBAL DEFAULT 12 PORT_ArenaGrow_Util@@NSSUTIL_3.12 + 254: 00000000000117d0 30 FUNC GLOBAL DEFAULT 12 PORT_RegExpValid@@NSSUTIL_3.12 + 255: 0000000000016d70 85 FUNC GLOBAL DEFAULT 12 DER_GeneralizedDayToAscii_Util@@NSSUTIL_3.12 + 256: 000000000022ec40 32 OBJECT GLOBAL DEFAULT 20 SEC_SetOfAnyTemplate_Util@@NSSUTIL_3.12 + 257: 0000000000016af0 362 FUNC GLOBAL DEFAULT 12 SECOID_Shutdown@@NSSUTIL_3.12 + 258: 0000000000015a50 135 FUNC GLOBAL DEFAULT 12 SECITEM_CopyItem_Util@@NSSUTIL_3.12 + 259: 000000000000e920 257 FUNC GLOBAL DEFAULT 12 DER_SetUInteger@@NSSUTIL_3.12 + 260: 000000000000faf0 66 FUNC GLOBAL DEFAULT 12 NSSBase64Decoder_Destroy_Util@@NSSUTIL_3.12 + 261: 00000000000173b0 5 FUNC GLOBAL DEFAULT 12 PORT_GetError_Util@@NSSUTIL_3.12 + 262: 000000000022ec60 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToOctetStringTemplate_Util@@NSSUTIL_3.12 + 263: 000000000001afa0 1456 FUNC GLOBAL DEFAULT 12 NSSUTIL_MkNSSString@@NSSUTIL_3.14 + 264: 00000000000172c0 130 FUNC GLOBAL DEFAULT 12 PORT_ZAllocAligned_Util@@NSSUTIL_3.33 + 265: 0000000000010620 69 FUNC GLOBAL DEFAULT 12 BTOA_DataToAscii_Util@@NSSUTIL_3.12 + 266: 0000000000015930 86 FUNC GLOBAL DEFAULT 12 SECITEM_ItemsAreEqual_Util@@NSSUTIL_3.12 + 267: 0000000000017960 27 FUNC GLOBAL DEFAULT 12 PORT_UCS2_ASCIIConversion_Util@@NSSUTIL_3.12 + 268: 000000000000f620 38 FUNC GLOBAL DEFAULT 12 NSS_InitializePRErrorTable@@NSSUTIL_3.13 + 269: 0000000000010960 21 FUNC GLOBAL DEFAULT 12 NSSRWLock_HaveWriteLock_Util@@NSSUTIL_3.12 + 270: 0000000000017880 2 FUNC GLOBAL DEFAULT 12 PORT_ArenaUnmark_Util@@NSSUTIL_3.12 + 271: 000000000001a890 457 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseModuleSpec@@NSSUTIL_3.14 + 272: 0000000000016f40 89 FUNC GLOBAL DEFAULT 12 DER_EncodeTimeChoice_Util@@NSSUTIL_3.12 + 273: 0000000000014000 16 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecodeItem_Util@@NSSUTIL_3.12 + 274: 0000000000019ac0 77 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgSkipParameter@@NSSUTIL_3.14 + 275: 000000000000ea30 227 FUNC GLOBAL DEFAULT 12 DER_GetInteger_Util@@NSSUTIL_3.12 + 276: 0000000000016c70 8 FUNC GLOBAL DEFAULT 12 NSSUTIL_GetVersion@@NSSUTIL_3.13 + 277: 0000000000014060 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_UniversalStringTemplate@@NSSUTIL_3.12 + 278: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.12 + 279: 0000000000014040 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SequenceOfObjectIDTemplate@@NSSUTIL_3.12 + 280: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.13 + 281: 000000000001af00 157 FUNC GLOBAL DEFAULT 12 NSSUTIL_ArgParseCipherFlags@@NSSUTIL_3.14 + 282: 00000000000171a0 65 FUNC GLOBAL DEFAULT 12 PORT_Alloc_Util@@NSSUTIL_3.12 + 283: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.14 + 284: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.15 + 285: 0000000000015640 30 FUNC GLOBAL DEFAULT 12 SEC_ASN1LengthLength_Util@@NSSUTIL_3.12 + 286: 000000000000f1c0 13 FUNC GLOBAL DEFAULT 12 DER_TimeToUTCTime_Util@@NSSUTIL_3.12 + 287: 0000000000014ae0 2244 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderUpdate_Util@@NSSUTIL_3.12 + 288: 0000000000013f30 24 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearFilterProc_Util@@NSSUTIL_3.12 + 289: 000000000000dc70 375 FUNC GLOBAL DEFAULT 12 SGN_CreateDigestInfo_Util@@NSSUTIL_3.12 + 290: 00000000000166c0 57 FUNC GLOBAL DEFAULT 12 SECOID_FindOIDByMechanism@@NSSUTIL_3.12 + 291: 000000000022ebc0 128 OBJECT GLOBAL DEFAULT 20 sgn_DigestInfoTemplate_Util@@NSSUTIL_3.12 + 292: 0000000000017910 29 FUNC GLOBAL DEFAULT 12 PORT_UCS4_UTF8Conversion@@NSSUTIL_3.12 + 293: 00000000000106d0 212 FUNC GLOBAL DEFAULT 12 NSSRWLock_New_Util@@NSSUTIL_3.12 + 294: 0000000000015fc0 34 FUNC GLOBAL DEFAULT 12 SECITEM_FreeArray@@NSSUTIL_3.15 + 295: 0000000000017460 26 FUNC GLOBAL DEFAULT 12 PORT_InitCheapArena@@NSSUTIL_3.24 + 296: 000000000000dc50 26 FUNC GLOBAL DEFAULT 12 SGN_DestroyDigestInfo_Util@@NSSUTIL_3.12 + 297: 0000000000013f60 17 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderClearNotifyProc_Util@@NSSUTIL_3.12 + 298: 0000000000015480 17 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearNotifyProc_Util@@NSSUTIL_3.12 + 299: 0000000000019fa0 75 FUNC GLOBAL DEFAULT 12 NSSUTIL_DoubleEscapeSize@@NSSUTIL_3.14 + 300: 0000000000019ff0 110 FUNC GLOBAL DEFAULT 12 NSSUTIL_DoubleEscape@@NSSUTIL_3.14 + 301: 0000000000016a20 99 FUNC GLOBAL DEFAULT 12 NSS_GetAlgorithmPolicy@@NSSUTIL_3.12.3 + 302: 00000000000153b0 10 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderFinish_Util@@NSSUTIL_3.12 + 303: 0000000000017b40 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_SetOfAnyTemplate_Util@@NSSUTIL_3.12 + 304: 0000000000013f80 5 FUNC GLOBAL DEFAULT 12 SEC_ASN1DecoderSetMaximumElementSize@@NSSUTIL_3.25 + 305: 0000000000017ae0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_IntegerTemplate_Util@@NSSUTIL_3.12 + 306: 000000000022eb80 32 OBJECT GLOBAL DEFAULT 20 SEC_PointerToEnumeratedTemplate@@NSSUTIL_3.12 + 307: 0000000000024000 128 OBJECT GLOBAL DEFAULT 14 SECOID_AlgorithmIDTemplate_Util@@NSSUTIL_3.12 + 308: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.17.1 + 309: 00000000000193a0 354 FUNC GLOBAL DEFAULT 12 NSSUTIL_DoModuleDBFunction@@NSSUTIL_3.14 + 310: 0000000000014070 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_PrintableStringTemplate@@NSSUTIL_3.12 + 311: 0000000000017a40 34 FUNC GLOBAL DEFAULT 12 NSS_SecureMemcmpZero@@NSSUTIL_3.33 + 312: 0000000000015a40 10 FUNC GLOBAL DEFAULT 12 SECITEM_DupItem_Util@@NSSUTIL_3.12 + 313: 0000000000016700 125 FUNC GLOBAL DEFAULT 12 SECOID_FindOID_Util@@NSSUTIL_3.12 + 314: 00000000000154f0 51 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncoderClearTakeFromBuf_Util@@NSSUTIL_3.12 + 315: 0000000000015570 169 FUNC GLOBAL DEFAULT 12 SEC_ASN1EncodeItem_Util@@NSSUTIL_3.12 + 316: 000000000000f1d0 9 FUNC GLOBAL DEFAULT 12 DER_AsciiToTime_Util@@NSSUTIL_3.12 + 317: 0000000000017a90 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BMPStringTemplate_Util@@NSSUTIL_3.12 + 318: 0000000000017930 29 FUNC GLOBAL DEFAULT 12 PORT_UCS2_UTF8Conversion_Util@@NSSUTIL_3.12 + 319: 0000000000019ee0 67 FUNC GLOBAL DEFAULT 12 NSSUTIL_EscapeSize@@NSSUTIL_3.14 + 320: 0000000000017ab0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_SEC_BooleanTemplate_Util@@NSSUTIL_3.12 + 321: 0000000000016f00 53 FUNC GLOBAL DEFAULT 12 DER_DecodeTimeChoice_Util@@NSSUTIL_3.12 + 322: 0000000000017b60 8 FUNC GLOBAL DEFAULT 12 NSS_Get_sgn_DigestInfoTemplate_Util@@NSSUTIL_3.12 + 323: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.21 + 324: 0000000000017580 60 FUNC GLOBAL DEFAULT 12 PORT_ArenaZAlloc_Util@@NSSUTIL_3.12 + 325: 0000000000010c20 429 FUNC GLOBAL DEFAULT 12 _SGN_VerifyPKCS1DigestInfo@@NSSUTIL_3.17.1 + 326: 0000000000017690 54 FUNC GLOBAL DEFAULT 12 PORT_DestroyCheapArena@@NSSUTIL_3.24 + 327: 000000000000e7b0 117 FUNC GLOBAL DEFAULT 12 DER_Encode_Util@@NSSUTIL_3.12 + 328: 000000000001c8a0 115 FUNC GLOBAL DEFAULT 12 PK11URI_DestroyURI@@NSSUTIL_3.31 + 329: 0000000000015880 175 FUNC GLOBAL DEFAULT 12 SECITEM_CompareItem_Util@@NSSUTIL_3.12 + 330: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSSUTIL_3.24 + 331: 0000000000023f20 32 OBJECT GLOBAL DEFAULT 14 SEC_IntegerTemplate_Util@@NSSUTIL_3.12 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libpango-1.0.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libpango-1.0.so.0.txt new file mode 100644 index 000000000000..fb5c0648b453 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libpango-1.0.so.0.txt @@ -0,0 +1,595 @@ +Library: /lib64/libpango-1.0.so.0 +Package: pango-1.42.4-4.el7_7.x86_64 + + +Symbol table '.dynsym' contains 589 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_data + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_static_string + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __uflow@GLIBC_2.2.5 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_build_filename + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_delete_link + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_direct_hash + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_replace_qdata + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_append + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_iszerowidth + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND funlockfile@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_reverse + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_full + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_new + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_length + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (2) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_enter + 20: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_unref + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_free + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_offset_to_pointer + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_unlock + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_intern_string + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strsplit + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND qsort@GLIBC_2.2.5 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_foreach + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_register_static + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_equal + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_isupper + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_once_init_leave + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strjoinv + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_data_full + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_concat + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_unref + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_copy + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_get_mirror_char + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_reverse + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_free + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strtod + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_name + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_prepend + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_length + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_strcasecmp + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_get_home_dir + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_set_error + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND th_uni2tis@LIBTHAI_0.1 (4) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_adjust_private_offset + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_assertion_message_expr + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_isalpha + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_strlen + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_return_if_fail_warning + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_new + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_error_quark + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_tolower + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sincos@GLIBC_2.2.5 (5) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strconcat + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND flockfile@GLIBC_2.2.5 (2) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_end_parse + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_get_char + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_quark_from_static_string + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_free + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_islower + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_prepend + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_new + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_remove_link + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strcmp0 + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_free + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_new + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_add + 80: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_ascii_table + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup_printf + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_peek_parent + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_new + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_new_full + 85: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_ref + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (2) + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (6) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value_by_nick + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_type + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc_n + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_array_append_vals + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_position + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_alloc + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_concat + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_delete_link + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND th_brk@LIBTHAI_0.1 (4) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_class_cast + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_add_private + 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_free_1 + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc_n + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_truncate + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ungetc@GLIBC_2.2.5 (2) + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_register_static_simple + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_insert + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_get_user_data + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fribidi_get_par_embedding_levels_ex + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_class_ref + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strpbrk@GLIBC_2.2.5 (2) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fribidi_get_bidi_type + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strfreev + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_printf + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_set_qdata_full + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_append + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_object_get_qdata + 116: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_flags_register_static + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_instance_get_private + 118: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.2.5 (2) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_break_type + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_destroy + 121: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_mutex_lock + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_str_hash + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_enum_get_value + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0_n + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fribidi_get_bracket + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_xdigit_value + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchug + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_realloc + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_memdup + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_is_a + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strchomp + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc0 + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_check_instance_cast + 137: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_copy + 139: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_malloc0 + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_boxed_type_register_static + 141: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_markup_parse_context_parse + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND floor@GLIBC_2.2.5 (5) + 143: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strdup + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_getenv + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ascii_dtostr + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_free1 + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slist_nth + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_ptr_array_free + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.2.5 (2) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_iswide + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_hash_table_lookup_extended + 152: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_free_1 + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_type_qname + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_unichar_get_script + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sqrt@GLIBC_2.2.5 (5) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_strndup + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_prev_char + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ceil@GLIBC_2.2.5 (5) + 160: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND g_utf8_skip + 161: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_slice_alloc + 162: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_append_len + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_string_insert_c + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_validate + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_utf8_pointer_to_offset + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_list_foreach + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_error_free + 169: 0000000000000000 0 FUNC GLOBAL DEFAULT UND g_log_structured_standard + 170: 000000000002b160 105 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_type + 171: 000000000002b510 8 FUNC GLOBAL DEFAULT 11 pango_version_string + 172: 0000000000021070 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_alignment + 173: 0000000000018d80 10 FUNC GLOBAL DEFAULT 11 pango_color_parse + 174: 0000000000015440 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_strikethrough_position + 175: 000000000002b2c0 169 FUNC GLOBAL DEFAULT 11 pango_tab_array_set_tab + 176: 00000000000212b0 142 FUNC GLOBAL DEFAULT 11 pango_layout_set_ellipsize + 177: 000000000001b480 371 FUNC GLOBAL DEFAULT 11 pango_coverage_set + 178: 0000000000015930 124 FUNC GLOBAL DEFAULT 11 pango_glyph_string_copy + 179: 000000000001a980 53 FUNC GLOBAL DEFAULT 11 pango_context_get_language + 180: 00000000000165a0 3 FUNC GLOBAL DEFAULT 11 pango_map_get_engine + 181: 0000000000028ab0 60 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_point + 182: 00000000000290b0 128 FUNC GLOBAL DEFAULT 11 pango_renderer_get_type + 183: 0000000000014ac0 846 FUNC GLOBAL DEFAULT 11 pango_font_description_to_string + 184: 000000000001aac0 53 FUNC GLOBAL DEFAULT 11 pango_context_get_base_gravity + 185: 000000000000e2d0 98 FUNC GLOBAL DEFAULT 11 pango_variant_get_type + 186: 0000000000016f60 49 FUNC GLOBAL DEFAULT 11 pango_attr_stretch_new + 187: 0000000000016c10 42 FUNC GLOBAL DEFAULT 11 pango_attribute_destroy + 188: 00000000000174a0 52 FUNC GLOBAL DEFAULT 11 pango_attr_foreground_alpha_new + 189: 0000000000013b20 91 FUNC GLOBAL DEFAULT 11 pango_font_description_set_family + 190: 00000000000261b0 473 FUNC GLOBAL DEFAULT 11 pango_layout_xy_to_index + 191: 000000000001aa50 102 FUNC GLOBAL DEFAULT 11 pango_context_set_base_gravity + 192: 0000000000015340 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_approximate_char_width + 193: 0000000000021b10 1134 FUNC GLOBAL DEFAULT 11 pango_layout_line_x_to_index + 194: 0000000000023990 62 FUNC GLOBAL DEFAULT 11 pango_layout_is_wrapped + 195: 0000000000013d40 56 FUNC GLOBAL DEFAULT 11 pango_font_description_get_stretch + 196: 000000000002c860 1214 FUNC GLOBAL DEFAULT 11 pango_shape_full + 197: 0000000000025690 307 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_char + 198: 0000000000024ff0 105 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_type + 199: 00000000000153c0 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_underline_position + 200: 0000000000020d10 86 FUNC GLOBAL DEFAULT 11 pango_layout_get_attributes + 201: 000000000001e8e0 58 FUNC GLOBAL DEFAULT 11 pango_gravity_get_for_script + 202: 0000000000014390 326 FUNC GLOBAL DEFAULT 11 pango_font_description_better_match + 203: 0000000000021610 388 FUNC GLOBAL DEFAULT 11 pango_layout_set_markup_with_accel + 204: 000000000000e730 98 FUNC GLOBAL DEFAULT 11 pango_script_get_type + 205: 0000000000015b30 669 FUNC GLOBAL DEFAULT 11 pango_glyph_string_extents_range + 206: 0000000000020ed0 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_justify + 207: 0000000000014280 266 FUNC GLOBAL DEFAULT 11 pango_font_description_merge + 208: 0000000000017630 90 FUNC GLOBAL DEFAULT 11 pango_attr_list_insert + 209: 000000000001a430 25 FUNC GLOBAL DEFAULT 11 pango_context_new + 210: 0000000000013b80 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_family + 211: 0000000000020c20 58 FUNC GLOBAL DEFAULT 11 pango_layout_set_spacing + 212: 0000000000021540 100 FUNC GLOBAL DEFAULT 11 pango_layout_get_text + 213: 0000000000028400 280 FUNC GLOBAL DEFAULT 11 pango_markup_parser_finish + 214: 000000000002cd20 16 FUNC GLOBAL DEFAULT 11 pango_shape + 215: 00000000000213a0 409 FUNC GLOBAL DEFAULT 11 pango_layout_set_text + 216: 0000000000025e30 215 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_run_extents + 217: 0000000000014740 69 FUNC GLOBAL DEFAULT 11 pango_font_descriptions_free + 218: 0000000000017b80 90 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_range + 219: 0000000000028890 193 FUNC GLOBAL DEFAULT 11 pango_matrix_rotate + 220: 000000000001e510 308 FUNC GLOBAL DEFAULT 11 pango_glyph_item_letter_space + 221: 000000000002bf60 3 FUNC GLOBAL DEFAULT 11 pango_config_key_get + 222: 00000000000291a0 122 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_rectangle + 223: 000000000000e110 98 FUNC GLOBAL DEFAULT 11 pango_bidi_type_get_type + 224: 00000000002452f0 0 NOTYPE GLOBAL DEFAULT 23 _end + 225: 00000000000167c0 146 FUNC GLOBAL DEFAULT 11 pango_attr_list_unref + 226: 000000000001e030 425 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_prev_cluster + 227: 0000000000016ea0 49 FUNC GLOBAL DEFAULT 11 pango_attr_style_new + 228: 0000000000017e70 104 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_get + 229: 000000000000e7a0 98 FUNC GLOBAL DEFAULT 11 pango_tab_align_get_type + 230: 000000000001ef80 158 FUNC GLOBAL DEFAULT 11 pango_language_matches + 231: 000000000001cd90 102 FUNC GLOBAL DEFAULT 11 pango_font_map_get_shape_engine_type + 232: 0000000000015260 94 FUNC GLOBAL DEFAULT 11 pango_font_get_metrics + 233: 00000000000183d0 402 FUNC GLOBAL DEFAULT 11 pango_bidi_type_for_unichar + 234: 00000000000151d0 105 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_type + 235: 0000000000029330 98 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_trapezoid + 236: 0000000000013f00 143 FUNC GLOBAL DEFAULT 11 pango_font_description_set_variations_static + 237: 000000000001d8a0 26 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_free + 238: 000000000001cd10 50 FUNC GLOBAL DEFAULT 11 pango_font_map_list_families + 239: 0000000000018840 31 FUNC GLOBAL DEFAULT 11 pango_unichar_direction + 240: 0000000000020920 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_context + 241: 0000000000021250 92 FUNC GLOBAL DEFAULT 11 pango_layout_get_single_paragraph_mode + 242: 0000000000017080 49 FUNC GLOBAL DEFAULT 11 pango_attr_strikethrough_new + 243: 0000000000015480 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_strikethrough_thickness + 244: 0000000000020f10 151 FUNC GLOBAL DEFAULT 11 pango_layout_set_auto_dir + 245: 0000000000015240 25 FUNC GLOBAL DEFAULT 11 pango_font_metrics_new + 246: 000000000001d420 136 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_get_type + 247: 000000000001b1e0 309 FUNC GLOBAL DEFAULT 11 pango_coverage_copy + 248: 0000000000016c40 129 FUNC GLOBAL DEFAULT 11 pango_attribute_equal + 249: 0000000000029c40 163 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_glyph_item + 250: 000000000002b620 5 FUNC GLOBAL DEFAULT 11 pango_trim_string + 251: 0000000000017210 235 FUNC GLOBAL DEFAULT 11 pango_attr_shape_new_with_data + 252: 000000000001a750 113 FUNC GLOBAL DEFAULT 11 pango_context_load_font + 253: 0000000000020790 107 FUNC GLOBAL DEFAULT 11 pango_layout_new + 254: 00000000000249d0 126 FUNC GLOBAL DEFAULT 11 pango_layout_get_pixel_extents + 255: 00000000000174e0 52 FUNC GLOBAL DEFAULT 11 pango_attr_background_alpha_new + 256: 000000000001d160 106 FUNC GLOBAL DEFAULT 11 pango_fontset_get_metrics + 257: 0000000000017db0 115 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_copy + 258: 000000000001c5a0 136 FUNC GLOBAL DEFAULT 11 pango_engine_lang_get_type + 259: 0000000000023cb0 123 FUNC GLOBAL DEFAULT 11 pango_layout_get_line + 260: 0000000000015110 27 FUNC GLOBAL DEFAULT 11 pango_font_find_shaper + 261: 000000000002c840 20 FUNC GLOBAL DEFAULT 11 pango_reorder_items + 262: 0000000000026390 60 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_baseline + 263: 0000000000024ab0 89 FUNC GLOBAL DEFAULT 11 pango_layout_get_size + 264: 00000000000215b0 85 FUNC GLOBAL DEFAULT 11 pango_layout_get_character_count + 265: 00000000000260f0 183 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line_yrange + 266: 000000000002aec0 59 FUNC GLOBAL DEFAULT 11 pango_tab_array_free + 267: 000000000002b370 154 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_tab + 268: 000000000001b900 434 FUNC GLOBAL DEFAULT 11 pango_coverage_to_bytes + 269: 0000000000029de0 238 FUNC GLOBAL DEFAULT 11 pango_renderer_part_changed + 270: 000000000002ae90 40 FUNC GLOBAL DEFAULT 11 pango_script_iter_new + 271: 0000000000015050 118 FUNC GLOBAL DEFAULT 11 pango_font_describe_with_absolute_size + 272: 0000000000017590 41 FUNC GLOBAL DEFAULT 11 pango_attr_list_new + 273: 0000000000015130 98 FUNC GLOBAL DEFAULT 11 pango_font_get_glyph_extents + 274: 00000000000239d0 62 FUNC GLOBAL DEFAULT 11 pango_layout_is_ellipsized + 275: 00000000000217b0 92 FUNC GLOBAL DEFAULT 11 pango_layout_context_changed + 276: 000000000001a6d0 115 FUNC GLOBAL DEFAULT 11 pango_context_list_families + 277: 00000000000156a0 128 FUNC GLOBAL DEFAULT 11 pango_font_face_get_type + 278: 000000000001d7c0 68 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_copy + 279: 000000000001deb0 372 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_next_cluster + 280: 000000000002c3c0 128 FUNC GLOBAL DEFAULT 11 pango_quantize_line_geometry + 281: 0000000000016a50 90 FUNC GLOBAL DEFAULT 11 pango_attribute_init + 282: 000000000001eab0 265 FUNC GLOBAL DEFAULT 11 pango_item_split + 283: 000000000002b520 53 FUNC GLOBAL DEFAULT 11 pango_version_check + 284: 0000000000025260 44 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_index + 285: 00000000000257d0 7 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_cluster + 286: 0000000000024a50 89 FUNC GLOBAL DEFAULT 11 pango_layout_get_pixel_size + 287: 000000000000e650 98 FUNC GLOBAL DEFAULT 11 pango_ellipsize_mode_get_type + 288: 000000000001f0a0 247 FUNC GLOBAL DEFAULT 11 pango_language_get_scripts + 289: 0000000000013c60 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_variant + 290: 0000000000014f30 33 FUNC GLOBAL DEFAULT 11 pango_parse_weight + 291: 0000000000245004 0 NOTYPE GLOBAL DEFAULT 22 _edata + 292: 0000000000018a10 105 FUNC GLOBAL DEFAULT 11 pango_color_get_type + 293: 0000000000015800 106 FUNC GLOBAL DEFAULT 11 pango_font_face_get_face_name + 294: 000000000000e1f0 98 FUNC GLOBAL DEFAULT 11 pango_coverage_level_get_type + 295: 000000000001b1b0 46 FUNC GLOBAL DEFAULT 11 pango_coverage_new + 296: 000000000001b400 124 FUNC GLOBAL DEFAULT 11 pango_coverage_get + 297: 000000000000e490 98 FUNC GLOBAL DEFAULT 11 pango_gravity_get_type + 298: 000000000000e340 98 FUNC GLOBAL DEFAULT 11 pango_weight_get_type + 299: 00000000000144e0 100 FUNC GLOBAL DEFAULT 11 pango_font_description_copy_static + 300: 000000000001d860 58 FUNC GLOBAL DEFAULT 11 pango_glyph_item_free + 301: 000000000001a590 216 FUNC GLOBAL DEFAULT 11 pango_context_set_font_map + 302: 000000000002afc0 99 FUNC GLOBAL DEFAULT 11 pango_tab_array_copy + 303: 000000000001d0f0 107 FUNC GLOBAL DEFAULT 11 pango_fontset_get_font + 304: 0000000000017460 61 FUNC GLOBAL DEFAULT 11 pango_attr_font_features_new + 305: 0000000000018860 5 FUNC GLOBAL DEFAULT 11 pango_get_mirror_char + 306: 0000000000013f90 88 FUNC GLOBAL DEFAULT 11 pango_font_description_set_variations + 307: 0000000000017030 74 FUNC GLOBAL DEFAULT 11 pango_attr_underline_color_new + 308: 00000000000257e0 140 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line_extents + 309: 000000000002b1d0 53 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_size + 310: 0000000000013bf0 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_style + 311: 000000000002c290 5 FUNC GLOBAL DEFAULT 11 pango_parse_enum + 312: 00000000000139e0 105 FUNC GLOBAL DEFAULT 11 pango_font_description_get_type + 313: 0000000000014190 145 FUNC GLOBAL DEFAULT 11 pango_font_description_unset_fields + 314: 0000000000021aa0 105 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_type + 315: 000000000002bf50 3 FUNC GLOBAL DEFAULT 11 pango_config_key_get_system + 316: 000000000002ab70 18 FUNC GLOBAL DEFAULT 11 pango_renderer_get_layout + 317: 000000000001ea30 10 FUNC GLOBAL DEFAULT 11 pango_item_new + 318: 0000000000015630 111 FUNC GLOBAL DEFAULT 11 pango_font_family_is_monospace + 319: 0000000000025290 89 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_run + 320: 0000000000016ee0 49 FUNC GLOBAL DEFAULT 11 pango_attr_weight_new + 321: 0000000000013e20 90 FUNC GLOBAL DEFAULT 11 pango_font_description_set_absolute_size + 322: 0000000000017a40 305 FUNC GLOBAL DEFAULT 11 pango_attr_list_splice + 323: 00000000000165d0 2 FUNC GLOBAL DEFAULT 11 pango_module_register + 324: 00000000000155b0 124 FUNC GLOBAL DEFAULT 11 pango_font_family_list_faces + 325: 0000000000014f60 33 FUNC GLOBAL DEFAULT 11 pango_parse_stretch + 326: 0000000000024f90 90 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_pixel_extents + 327: 0000000000023ed0 1458 FUNC GLOBAL DEFAULT 11 pango_layout_move_cursor_visually + 328: 0000000000017690 90 FUNC GLOBAL DEFAULT 11 pango_attr_list_insert_before + 329: 0000000000028750 82 FUNC GLOBAL DEFAULT 11 pango_matrix_scale + 330: 0000000000013a90 143 FUNC GLOBAL DEFAULT 11 pango_font_description_set_family_static + 331: 000000000001ed60 105 FUNC GLOBAL DEFAULT 11 pango_language_get_type + 332: 0000000000029990 99 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_glyph + 333: 0000000000014230 66 FUNC GLOBAL DEFAULT 11 pango_font_description_set_gravity + 334: 0000000000014070 281 FUNC GLOBAL DEFAULT 11 pango_font_description_merge_static + 335: 000000000001a9c0 74 FUNC GLOBAL DEFAULT 11 pango_context_set_base_dir + 336: 00000000000209b0 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_width + 337: 0000000000015300 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_descent + 338: 0000000000015400 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_underline_thickness + 339: 000000000001a900 122 FUNC GLOBAL DEFAULT 11 pango_context_set_language + 340: 0000000000025350 89 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line + 341: 0000000000028660 26 FUNC GLOBAL DEFAULT 11 pango_matrix_free + 342: 0000000000014640 243 FUNC GLOBAL DEFAULT 11 pango_font_description_hash + 343: 000000000002b210 176 FUNC GLOBAL DEFAULT 11 pango_tab_array_resize + 344: 0000000000021860 565 FUNC GLOBAL DEFAULT 11 pango_layout_line_index_to_x + 345: 000000000001d810 68 FUNC GLOBAL DEFAULT 11 pango_glyph_item_copy + 346: 000000000001f230 622 FUNC GLOBAL DEFAULT 11 pango_script_get_sample_language + 347: 000000000001c840 128 FUNC GLOBAL DEFAULT 11 pango_font_map_get_type + 348: 0000000000016590 3 FUNC GLOBAL DEFAULT 11 pango_find_map + 349: 0000000000028a30 61 FUNC GLOBAL DEFAULT 11 pango_matrix_get_font_scale_factor + 350: 0000000000021f80 780 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_extents + 351: 000000000000e260 98 FUNC GLOBAL DEFAULT 11 pango_style_get_type + 352: 0000000000016260 816 FUNC GLOBAL DEFAULT 11 pango_glyph_string_x_to_index + 353: 0000000000016e00 53 FUNC GLOBAL DEFAULT 11 pango_attr_size_new + 354: 000000000002c340 117 FUNC GLOBAL DEFAULT 11 pango_is_zero_width + 355: 000000000001b140 28 FUNC GLOBAL DEFAULT 11 pango_context_changed + 356: 0000000000029cf0 121 FUNC GLOBAL DEFAULT 11 pango_renderer_get_color + 357: 000000000000e0a0 98 FUNC GLOBAL DEFAULT 11 pango_underline_get_type + 358: 0000000000016bd0 62 FUNC GLOBAL DEFAULT 11 pango_attribute_copy + 359: 0000000000026010 213 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_char_extents + 360: 00000000000176f0 840 FUNC GLOBAL DEFAULT 11 pango_attr_list_change + 361: 000000000002a260 1810 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_layout_line + 362: 000000000001c920 61 FUNC GLOBAL DEFAULT 11 pango_font_map_load_font + 363: 0000000000013bc0 42 FUNC GLOBAL DEFAULT 11 pango_font_description_set_style + 364: 0000000000016980 122 FUNC GLOBAL DEFAULT 11 pango_attr_type_register + 365: 0000000000014790 810 FUNC GLOBAL DEFAULT 11 pango_font_description_from_string + 366: 0000000000015010 61 FUNC GLOBAL DEFAULT 11 pango_font_describe + 367: 0000000000028d20 558 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_pixel_rectangle + 368: 0000000000021340 89 FUNC GLOBAL DEFAULT 11 pango_layout_get_ellipsize + 369: 0000000000023c90 18 FUNC GLOBAL DEFAULT 11 pango_layout_get_lines_readonly + 370: 0000000000015dd0 18 FUNC GLOBAL DEFAULT 11 pango_glyph_string_extents + 371: 000000000002b4c0 53 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_positions_in_pixels + 372: 0000000000017420 49 FUNC GLOBAL DEFAULT 11 pango_attr_gravity_hint_new + 373: 00000000000173b0 99 FUNC GLOBAL DEFAULT 11 pango_attr_gravity_new + 374: 00000000000211b0 151 FUNC GLOBAL DEFAULT 11 pango_layout_set_single_paragraph_mode + 375: 0000000000028680 105 FUNC GLOBAL DEFAULT 11 pango_matrix_get_type + 376: 000000000001b160 74 FUNC GLOBAL DEFAULT 11 pango_context_get_serial + 377: 000000000001f020 122 FUNC GLOBAL DEFAULT 11 pango_language_get_sample_string + 378: 000000000001e650 285 FUNC GLOBAL DEFAULT 11 pango_glyph_item_get_logical_widths + 379: 000000000001de40 105 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_get_type + 380: 000000000001ea40 105 FUNC GLOBAL DEFAULT 11 pango_item_get_type + 381: 00000000000154c0 128 FUNC GLOBAL DEFAULT 11 pango_font_family_get_type + 382: 000000000001eef0 126 FUNC GLOBAL DEFAULT 11 pango_language_get_default + 383: 000000000001e870 110 FUNC GLOBAL DEFAULT 11 pango_gravity_get_for_script_and_width + 384: 0000000000013d10 42 FUNC GLOBAL DEFAULT 11 pango_font_description_set_stretch + 385: 000000000002c440 34 FUNC GLOBAL DEFAULT 11 pango_units_from_double + 386: 0000000000021010 82 FUNC GLOBAL DEFAULT 11 pango_layout_set_alignment + 387: 0000000000024b80 1039 FUNC GLOBAL DEFAULT 11 pango_layout_line_get_x_ranges + 388: 00000000000286f0 90 FUNC GLOBAL DEFAULT 11 pango_matrix_translate + 389: 000000000001ab00 53 FUNC GLOBAL DEFAULT 11 pango_context_get_gravity + 390: 000000000002cd30 0 FUNC GLOBAL DEFAULT 12 _fini + 391: 0000000000018960 26 FUNC GLOBAL DEFAULT 11 pango_color_free + 392: 0000000000020960 66 FUNC GLOBAL DEFAULT 11 pango_layout_set_width + 393: 000000000002bb50 59 FUNC GLOBAL DEFAULT 11 pango_skip_space + 394: 0000000000028610 76 FUNC GLOBAL DEFAULT 11 pango_matrix_copy + 395: 000000000000ef50 10602 FUNC GLOBAL DEFAULT 11 pango_default_break + 396: 000000000002abd0 36 FUNC GLOBAL DEFAULT 11 pango_script_iter_get_range + 397: 0000000000021850 14 FUNC GLOBAL DEFAULT 11 pango_layout_get_serial + 398: 0000000000020ca0 112 FUNC GLOBAL DEFAULT 11 pango_layout_set_attributes + 399: 000000000001c520 128 FUNC GLOBAL DEFAULT 11 pango_engine_get_type + 400: 000000000001e1e0 75 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_init_start + 401: 000000000001cd50 61 FUNC GLOBAL DEFAULT 11 pango_font_map_load_fontset + 402: 0000000000016e40 53 FUNC GLOBAL DEFAULT 11 pango_attr_size_new_absolute + 403: 0000000000020800 281 FUNC GLOBAL DEFAULT 11 pango_layout_copy + 404: 0000000000017190 49 FUNC GLOBAL DEFAULT 11 pango_attr_fallback_new + 405: 0000000000016db0 74 FUNC GLOBAL DEFAULT 11 pango_attr_background_new + 406: 000000000002c2a0 14 FUNC GLOBAL DEFAULT 11 pango_lookup_aliases + 407: 0000000000020ba0 58 FUNC GLOBAL DEFAULT 11 pango_layout_set_indent + 408: 0000000000011bb0 645 FUNC GLOBAL DEFAULT 11 pango_get_log_attrs + 409: 000000000002c480 130 FUNC GLOBAL DEFAULT 11 pango_extents_to_pixels + 410: 0000000000025460 146 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_line + 411: 000000000000e3b0 98 FUNC GLOBAL DEFAULT 11 pango_stretch_get_type + 412: 0000000000016d10 51 FUNC GLOBAL DEFAULT 11 pango_attr_language_new + 413: 0000000000029ed0 261 FUNC GLOBAL DEFAULT 11 pango_renderer_set_color + 414: 000000000001a450 214 FUNC GLOBAL DEFAULT 11 pango_context_set_matrix + 415: 000000000000e030 98 FUNC GLOBAL DEFAULT 11 pango_attr_type_get_type + 416: 000000000001ab90 53 FUNC GLOBAL DEFAULT 11 pango_context_get_gravity_hint + 417: 0000000000015df0 52 FUNC GLOBAL DEFAULT 11 pango_glyph_string_get_width + 418: 000000000000c5f0 0 FUNC GLOBAL DEFAULT 9 _init + 419: 000000000000e420 98 FUNC GLOBAL DEFAULT 11 pango_font_mask_get_type + 420: 0000000000017ee0 847 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_get_font + 421: 0000000000015ac0 105 FUNC GLOBAL DEFAULT 11 pango_glyph_string_get_type + 422: 000000000001c630 136 FUNC GLOBAL DEFAULT 11 pango_engine_shape_get_type + 423: 0000000000029ba0 124 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_glyphs + 424: 000000000002bf40 5 FUNC GLOBAL DEFAULT 11 pango_scan_int + 425: 00000000000287b0 218 FUNC GLOBAL DEFAULT 11 pango_matrix_concat + 426: 000000000001f1a0 135 FUNC GLOBAL DEFAULT 11 pango_language_includes_script + 427: 000000000002af00 186 FUNC GLOBAL DEFAULT 11 pango_tab_array_new + 428: 000000000001d790 25 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_append + 429: 0000000000017110 49 FUNC GLOBAL DEFAULT 11 pango_attr_rise_new + 430: 000000000001d950 1035 FUNC GLOBAL DEFAULT 11 pango_glyph_item_split + 431: 0000000000025420 58 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_layout + 432: 000000000001a530 86 FUNC GLOBAL DEFAULT 11 pango_context_get_matrix + 433: 0000000000015870 189 FUNC GLOBAL DEFAULT 11 pango_font_face_list_sizes + 434: 00000000000253e0 60 FUNC GLOBAL DEFAULT 11 pango_layout_iter_at_last_line + 435: 0000000000017d20 139 FUNC GLOBAL DEFAULT 11 pango_attr_list_get_iterator + 436: 0000000000017e30 59 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_destroy + 437: 0000000000014f00 33 FUNC GLOBAL DEFAULT 11 pango_parse_variant + 438: 0000000000020fb0 92 FUNC GLOBAL DEFAULT 11 pango_layout_get_auto_dir + 439: 0000000000028af0 558 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_rectangle + 440: 0000000000018930 44 FUNC GLOBAL DEFAULT 11 pango_color_copy + 441: 0000000000020c60 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_spacing + 442: 0000000000025550 137 FUNC GLOBAL DEFAULT 11 pango_layout_iter_next_run + 443: 000000000001e230 75 FUNC GLOBAL DEFAULT 11 pango_glyph_item_iter_init_end + 444: 0000000000023d30 99 FUNC GLOBAL DEFAULT 11 pango_layout_get_line_readonly + 445: 000000000001bac0 369 FUNC GLOBAL DEFAULT 11 pango_coverage_from_bytes + 446: 0000000000029b20 123 FUNC GLOBAL DEFAULT 11 pango_renderer_deactivate + 447: 0000000000013ca0 42 FUNC GLOBAL DEFAULT 11 pango_font_description_set_weight + 448: 0000000000013440 14 FUNC GLOBAL DEFAULT 11 pango_font_metrics_ref + 449: 0000000000017150 59 FUNC GLOBAL DEFAULT 11 pango_attr_scale_new + 450: 0000000000020e70 82 FUNC GLOBAL DEFAULT 11 pango_layout_set_justify + 451: 000000000001b600 760 FUNC GLOBAL DEFAULT 11 pango_coverage_max + 452: 0000000000245004 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 453: 000000000002b500 6 FUNC GLOBAL DEFAULT 11 pango_version + 454: 0000000000024b10 97 FUNC GLOBAL DEFAULT 11 pango_layout_get_baseline + 455: 0000000000029240 90 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_error_underline + 456: 0000000000023af0 134 FUNC GLOBAL DEFAULT 11 pango_layout_get_log_attrs + 457: 0000000000028520 235 FUNC GLOBAL DEFAULT 11 pango_parse_markup + 458: 0000000000020d70 156 FUNC GLOBAL DEFAULT 11 pango_layout_set_font_description + 459: 000000000001e7c0 79 FUNC GLOBAL DEFAULT 11 pango_gravity_to_rotation + 460: 0000000000020e10 86 FUNC GLOBAL DEFAULT 11 pango_layout_get_font_description + 461: 0000000000016cd0 61 FUNC GLOBAL DEFAULT 11 pango_attr_family_new + 462: 00000000000249a0 42 FUNC GLOBAL DEFAULT 11 pango_layout_get_extents + 463: 000000000001e810 83 FUNC GLOBAL DEFAULT 11 pango_gravity_get_for_matrix + 464: 000000000000e6c0 98 FUNC GLOBAL DEFAULT 11 pango_render_part_get_type + 465: 0000000000017520 105 FUNC GLOBAL DEFAULT 11 pango_attr_list_get_type + 466: 00000000000217a0 10 FUNC GLOBAL DEFAULT 11 pango_layout_set_markup + 467: 000000000002a980 389 FUNC GLOBAL DEFAULT 11 pango_renderer_draw_layout + 468: 000000000002ac00 531 FUNC GLOBAL DEFAULT 11 pango_script_iter_next + 469: 00000000000152c0 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_ascent + 470: 000000000002bff0 114 FUNC GLOBAL DEFAULT 11 pango_get_lib_subdirectory + 471: 0000000000028360 155 FUNC GLOBAL DEFAULT 11 pango_markup_parser_new + 472: 0000000000018230 283 FUNC GLOBAL DEFAULT 11 pango_attr_list_filter + 473: 0000000000014e10 189 FUNC GLOBAL DEFAULT 11 pango_font_description_to_filename + 474: 0000000000015790 111 FUNC GLOBAL DEFAULT 11 pango_font_face_is_synthesized + 475: 000000000001ab40 74 FUNC GLOBAL DEFAULT 11 pango_context_set_gravity_hint + 476: 000000000001edd0 278 FUNC GLOBAL DEFAULT 11 pango_language_from_string + 477: 0000000000023c30 84 FUNC GLOBAL DEFAULT 11 pango_layout_get_lines + 478: 0000000000013cd0 56 FUNC GLOBAL DEFAULT 11 pango_font_description_get_weight + 479: 000000000001b360 153 FUNC GLOBAL DEFAULT 11 pango_coverage_unref + 480: 0000000000014030 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_set_fields + 481: 0000000000013de0 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_size + 482: 0000000000029d70 97 FUNC GLOBAL DEFAULT 11 pango_renderer_get_alpha + 483: 00000000000170c0 74 FUNC GLOBAL DEFAULT 11 pango_attr_strikethrough_color_new + 484: 0000000000018a80 69 FUNC GLOBAL DEFAULT 11 pango_color_to_string + 485: 0000000000014ed0 33 FUNC GLOBAL DEFAULT 11 pango_parse_style + 486: 0000000000013d80 90 FUNC GLOBAL DEFAULT 11 pango_font_description_set_size + 487: 000000000000e5e0 98 FUNC GLOBAL DEFAULT 11 pango_wrap_mode_get_type + 488: 0000000000020be0 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_indent + 489: 0000000000011940 405 FUNC GLOBAL DEFAULT 11 pango_find_paragraph_boundary + 490: 00000000000118c0 114 FUNC GLOBAL DEFAULT 11 pango_break + 491: 0000000000017620 14 FUNC GLOBAL DEFAULT 11 pango_attr_list_ref + 492: 0000000000025180 122 FUNC GLOBAL DEFAULT 11 pango_layout_get_iter + 493: 000000000001ce00 121 FUNC GLOBAL DEFAULT 11 pango_font_map_get_serial + 494: 0000000000015e30 341 FUNC GLOBAL DEFAULT 11 pango_glyph_string_get_logical_widths + 495: 000000000000e500 98 FUNC GLOBAL DEFAULT 11 pango_gravity_hint_get_type + 496: 0000000000018570 719 FUNC GLOBAL DEFAULT 11 pango_log2vis_get_embedding_levels + 497: 0000000000013020 90 FUNC GLOBAL DEFAULT 11 pango_font_description_free + 498: 0000000000021150 95 FUNC GLOBAL DEFAULT 11 pango_layout_get_tabs + 499: 0000000000023a10 210 FUNC GLOBAL DEFAULT 11 pango_layout_get_unknown_glyphs_count + 500: 00000000000210b0 151 FUNC GLOBAL DEFAULT 11 pango_layout_set_tabs + 501: 000000000001e9e0 74 FUNC GLOBAL DEFAULT 11 pango_item_free + 502: 0000000000015720 106 FUNC GLOBAL DEFAULT 11 pango_font_face_describe + 503: 000000000001a670 86 FUNC GLOBAL DEFAULT 11 pango_context_get_font_map + 504: 0000000000025230 34 FUNC GLOBAL DEFAULT 11 pango_layout_iter_free + 505: 0000000000023b80 99 FUNC GLOBAL DEFAULT 11 pango_layout_get_log_attrs_readonly + 506: 0000000000013e80 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_size_is_absolute + 507: 00000000000209f0 98 FUNC GLOBAL DEFAULT 11 pango_layout_set_height + 508: 0000000000013ec0 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_gravity + 509: 0000000000017340 105 FUNC GLOBAL DEFAULT 11 pango_attr_shape_new + 510: 000000000001b320 53 FUNC GLOBAL DEFAULT 11 pango_coverage_ref + 511: 000000000002a210 80 FUNC GLOBAL DEFAULT 11 pango_renderer_set_matrix + 512: 00000000000151a0 35 FUNC GLOBAL DEFAULT 11 pango_font_get_font_map + 513: 0000000000015f90 710 FUNC GLOBAL DEFAULT 11 pango_glyph_string_index_to_x + 514: 000000000001d1d0 145 FUNC GLOBAL DEFAULT 11 pango_fontset_foreach + 515: 000000000001e280 653 FUNC GLOBAL DEFAULT 11 pango_glyph_item_apply_attrs + 516: 0000000000018350 113 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_get_attrs + 517: 000000000002b770 983 FUNC GLOBAL DEFAULT 11 pango_read_line + 518: 00000000000165b0 26 FUNC GLOBAL DEFAULT 11 pango_map_get_engines + 519: 000000000002b630 317 FUNC GLOBAL DEFAULT 11 pango_split_file_list + 520: 0000000000029fe0 137 FUNC GLOBAL DEFAULT 11 pango_renderer_set_alpha + 521: 0000000000025a90 920 FUNC GLOBAL DEFAULT 11 pango_layout_get_cursor_pos + 522: 0000000000014550 227 FUNC GLOBAL DEFAULT 11 pango_font_description_equal + 523: 000000000002bf70 114 FUNC GLOBAL DEFAULT 11 pango_get_sysconf_subdirectory + 524: 0000000000015380 53 FUNC GLOBAL DEFAULT 11 pango_font_metrics_get_approximate_digit_width + 525: 0000000000017be0 313 FUNC GLOBAL DEFAULT 11 pango_attr_iterator_next + 526: 0000000000020680 128 FUNC GLOBAL DEFAULT 11 pango_layout_get_type + 527: 0000000000020a60 53 FUNC GLOBAL DEFAULT 11 pango_layout_get_height + 528: 000000000001c8c0 83 FUNC GLOBAL DEFAULT 11 pango_font_map_create_context + 529: 0000000000016fa0 59 FUNC GLOBAL DEFAULT 11 pango_attr_font_desc_new + 530: 0000000000013ff0 53 FUNC GLOBAL DEFAULT 11 pango_font_description_get_variations + 531: 000000000002ab10 86 FUNC GLOBAL DEFAULT 11 pango_renderer_get_matrix + 532: 000000000001aa10 53 FUNC GLOBAL DEFAULT 11 pango_context_get_base_dir + 533: 000000000001ef70 4 FUNC GLOBAL DEFAULT 11 pango_language_to_string + 534: 0000000000016ff0 49 FUNC GLOBAL DEFAULT 11 pango_attr_underline_new + 535: 000000000001f990 15 FUNC GLOBAL DEFAULT 11 pango_layout_line_ref + 536: 0000000000025870 539 FUNC GLOBAL DEFAULT 11 pango_layout_index_to_pos + 537: 0000000000012f90 132 FUNC GLOBAL DEFAULT 11 pango_font_description_copy + 538: 000000000001d4b0 27 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_new + 539: 000000000002bb90 278 FUNC GLOBAL DEFAULT 11 pango_scan_word + 540: 0000000000028a70 58 FUNC GLOBAL DEFAULT 11 pango_matrix_transform_distance + 541: 000000000001d7b0 8 FUNC GLOBAL DEFAULT 11 pango_fontset_simple_size + 542: 0000000000016d60 74 FUNC GLOBAL DEFAULT 11 pango_attr_foreground_new + 543: 000000000001ad50 209 FUNC GLOBAL DEFAULT 11 pango_itemize + 544: 00000000000252f0 89 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_run_readonly + 545: 000000000001e920 184 FUNC GLOBAL DEFAULT 11 pango_item_copy + 546: 000000000002b030 294 FUNC GLOBAL DEFAULT 11 pango_tab_array_new_with_positions + 547: 0000000000013c30 42 FUNC GLOBAL DEFAULT 11 pango_font_description_set_variant + 548: 000000000001a7d0 69 FUNC GLOBAL DEFAULT 11 pango_context_load_fontset + 549: 000000000002aba0 5 FUNC GLOBAL DEFAULT 11 pango_script_for_unichar + 550: 000000000001f9a0 212 FUNC GLOBAL DEFAULT 11 pango_layout_iter_copy + 551: 000000000001a820 153 FUNC GLOBAL DEFAULT 11 pango_context_set_font_description + 552: 000000000001a8c0 53 FUNC GLOBAL DEFAULT 11 pango_context_get_font_description + 553: 0000000000015540 106 FUNC GLOBAL DEFAULT 11 pango_font_family_get_name + 554: 00000000000159b0 50 FUNC GLOBAL DEFAULT 11 pango_glyph_string_free + 555: 000000000002b410 174 FUNC GLOBAL DEFAULT 11 pango_tab_array_get_tabs + 556: 000000000000e570 98 FUNC GLOBAL DEFAULT 11 pango_alignment_get_type + 557: 000000000002ab90 9 FUNC GLOBAL DEFAULT 11 pango_renderer_get_layout_line + 558: 000000000001ddd0 105 FUNC GLOBAL DEFAULT 11 pango_glyph_item_get_type + 559: 000000000001abd0 374 FUNC GLOBAL DEFAULT 11 pango_itemize_with_base_dir + 560: 000000000002bcb0 512 FUNC GLOBAL DEFAULT 11 pango_scan_string + 561: 000000000001cfd0 128 FUNC GLOBAL DEFAULT 11 pango_fontset_get_type + 562: 00000000000203e0 108 FUNC GLOBAL DEFAULT 11 pango_layout_line_unref + 563: 0000000000013680 69 FUNC GLOBAL DEFAULT 11 pango_font_metrics_unref + 564: 00000000000253b0 42 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_line_readonly + 565: 00000000000159f0 48 FUNC GLOBAL DEFAULT 11 pango_glyph_string_new + 566: 0000000000014f90 128 FUNC GLOBAL DEFAULT 11 pango_font_get_type + 567: 000000000001ae30 782 FUNC GLOBAL DEFAULT 11 pango_context_get_metrics + 568: 000000000002abc0 13 FUNC GLOBAL DEFAULT 11 pango_script_iter_free + 569: 000000000002c470 13 FUNC GLOBAL DEFAULT 11 pango_units_to_double + 570: 00000000000263d0 72 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_layout_extents + 571: 0000000000015a20 160 FUNC GLOBAL DEFAULT 11 pango_glyph_string_set_size + 572: 000000000002c2b0 140 FUNC GLOBAL DEFAULT 11 pango_find_base_dir + 573: 0000000000020b40 92 FUNC GLOBAL DEFAULT 11 pango_layout_get_wrap + 574: 0000000000016f20 49 FUNC GLOBAL DEFAULT 11 pango_attr_variant_new + 575: 0000000000016a00 68 FUNC GLOBAL DEFAULT 11 pango_attr_type_get_name + 576: 00000000000150d0 61 FUNC GLOBAL DEFAULT 11 pango_font_get_coverage + 577: 00000000000171d0 49 FUNC GLOBAL DEFAULT 11 pango_attr_letter_spacing_new + 578: 0000000000028960 202 FUNC GLOBAL DEFAULT 11 pango_matrix_get_font_scale_factors + 579: 0000000000020aa0 151 FUNC GLOBAL DEFAULT 11 pango_layout_set_wrap + 580: 000000000000e180 98 FUNC GLOBAL DEFAULT 11 pango_direction_get_type + 581: 000000000001a340 128 FUNC GLOBAL DEFAULT 11 pango_context_get_type + 582: 0000000000023da0 300 FUNC GLOBAL DEFAULT 11 pango_layout_index_to_line_x + 583: 0000000000025f10 245 FUNC GLOBAL DEFAULT 11 pango_layout_iter_get_cluster_extents + 584: 00000000000175c0 93 FUNC GLOBAL DEFAULT 11 pango_attr_list_copy + 585: 0000000000023bf0 62 FUNC GLOBAL DEFAULT 11 pango_layout_get_line_count + 586: 0000000000013a50 52 FUNC GLOBAL DEFAULT 11 pango_font_description_new + 587: 000000000001ce80 119 FUNC GLOBAL DEFAULT 11 pango_font_map_changed + 588: 0000000000029ad0 74 FUNC GLOBAL DEFAULT 11 pango_renderer_activate diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libpthread.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libpthread.so.0.txt new file mode 100644 index 000000000000..7b001fcc723e --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libpthread.so.0.txt @@ -0,0 +1,339 @@ +Library: /lib64/libpthread.so.0 +Package: glibc-2.17-326.el7_9.x86_64 + + +Symbol table '.dynsym' contains 333 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clone@GLIBC_2.2.5 (11) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (11) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getrlimit@GLIBC_PRIVATE (12) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (11) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (11) + 6: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (11) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sched_getscheduler@GLIBC_2.2.5 (11) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlclose@GLIBC_PRIVATE (12) + 10: 0000000000000000 0 TLS GLOBAL DEFAULT UND errno@GLIBC_PRIVATE (12) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_fatal@GLIBC_PRIVATE (12) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tfind@GLIBC_2.2.5 (11) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __statfs@GLIBC_2.2.5 (11) + 14: 0000000000000000 0 TLS GLOBAL DEFAULT UND __resp@GLIBC_PRIVATE (12) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_secure_getenv@GLIBC_PRIVATE (12) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (11) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (11) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_system@GLIBC_PRIVATE (12) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (11) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (11) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __gettimeofday@GLIBC_2.2.5 (11) + 22: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __libc_enable_secure@GLIBC_PRIVATE (13) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (11) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_fork@GLIBC_PRIVATE (12) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tdelete@GLIBC_2.2.5 (11) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __register_atfork@GLIBC_2.3.2 (14) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_yield@GLIBC_2.2.5 (11) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_deallocate_tls@GLIBC_PRIVATE (13) + 29: 0000000000000000 0 OBJECT WEAK DEFAULT UND _environ@GLIBC_2.2.5 (11) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __tls_get_addr@GLIBC_2.3 (15) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sched_getparam@GLIBC_2.2.5 (11) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.2.5 (11) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (11) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getdelim@GLIBC_2.2.5 (11) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getmntent_r@GLIBC_2.2.5 (11) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat64@GLIBC_2.2.5 (11) + 37: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __libc_stack_end@GLIBC_2.2.5 (16) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (11) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_thread_freeres@GLIBC_PRIVATE (12) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __endmntent@GLIBC_2.2.5 (11) + 41: 0000000000000000 0 OBJECT WEAK DEFAULT UND environ@GLIBC_2.2.5 (11) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (17) + 43: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global_ro@GLIBC_PRIVATE (13) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND prctl@GLIBC_2.2.5 (11) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_current_sigrtmax_private@GLIBC_PRIVATE (12) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sched_setscheduler@GLIBC_2.2.5 (11) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlopen_mode@GLIBC_PRIVATE (12) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getpagesize@GLIBC_2.2.5 (11) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (11) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_get_priority_min@GLIBC_2.2.5 (11) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_make_stack_executable@GLIBC_PRIVATE (13) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_pthread_init@GLIBC_PRIVATE (12) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_init@GLIBC_PRIVATE (12) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sscanf@GLIBC_2.2.5 (11) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (11) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlsym@GLIBC_PRIVATE (12) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tsearch@GLIBC_2.2.5 (11) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (11) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mempcpy@GLIBC_2.2.5 (11) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_current_sigrtmin_private@GLIBC_PRIVATE (12) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND twalk@GLIBC_2.2.5 (11) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __madvise@GLIBC_PRIVATE (12) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dl_error_tsd@GLIBC_PRIVATE (12) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mprotect@GLIBC_2.2.5 (11) + 65: 0000000000000000 0 TLS GLOBAL DEFAULT UND __h_errno@GLIBC_PRIVATE (12) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (11) + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __mktemp@GLIBC_PRIVATE (12) + 68: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (11) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_allocate_tls@GLIBC_PRIVATE (13) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __setmntent@GLIBC_2.2.5 (11) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_setparam@GLIBC_2.2.5 (11) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_get_tls_static_info@GLIBC_PRIVATE (13) + 74: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __environ@GLIBC_2.2.5 (11) + 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sprintf@GLIBC_2.2.5 (11) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND link@GLIBC_2.2.5 (11) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (11) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sched_get_priority_max@GLIBC_2.2.5 (11) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getrlimit@GLIBC_2.2.5 (11) + 80: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _dl_allocate_tls_init@GLIBC_PRIVATE (13) + 82: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _rtld_global@GLIBC_PRIVATE (13) + 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_allocate_rtsig_private@GLIBC_PRIVATE (12) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_longjmp@GLIBC_PRIVATE (12) + 85: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (11) + 86: 000000000000f8c0 78 FUNC GLOBAL DEFAULT 13 pthread_getaffinity_np@@GLIBC_2.3.4 + 87: 000000000000e6d0 90 FUNC WEAK DEFAULT 13 write@@GLIBC_2.2.5 + 88: 000000000000f910 13 FUNC GLOBAL DEFAULT 13 pthread_getaffinity_np@GLIBC_2.3.3 + 89: 00000000000106e0 258 FUNC GLOBAL DEFAULT 13 pthread_setname_np@@GLIBC_2.12 + 90: 000000000000fd10 36 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setrobust@@GLIBC_2.12 + 91: 000000000000f0e0 144 FUNC WEAK DEFAULT 13 __wait@@GLIBC_2.2.5 + 92: 000000000000cf30 150 FUNC GLOBAL DEFAULT 13 __pthread_clock_gettime@@GLIBC_PRIVATE + 93: 000000000000b050 211 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_init@@GLIBC_2.2.5 + 94: 000000000000fd70 28 FUNC GLOBAL DEFAULT 13 __pthread_cleanup_routine@@GLIBC_2.3.3 + 95: 000000000000d8c0 189 FUNC GLOBAL DEFAULT 13 sem_close@@GLIBC_2.2.5 + 96: 000000000000c2b0 35 FUNC GLOBAL DEFAULT 13 pthread_cond_init@GLIBC_2.2.5 + 97: 000000000000b790 115 FUNC GLOBAL DEFAULT 13 pthread_cond_init@@GLIBC_2.3.2 + 98: 000000000000b020 40 FUNC GLOBAL DEFAULT 13 __pthread_mutexattr_settype@@GLIBC_2.2.5 + 99: 000000000000b020 40 FUNC WEAK DEFAULT 13 pthread_mutexattr_setkind_np@@GLIBC_2.2.5 + 100: 000000000000b600 88 FUNC GLOBAL DEFAULT 13 pthread_rwlock_trywrlock@@GLIBC_2.2.5 + 101: 0000000000009cd0 34 FUNC GLOBAL DEFAULT 13 pthread_mutex_destroy@@GLIBC_2.2.5 + 102: 000000000000b130 4 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_destroy@@GLIBC_2.2.5 + 103: 000000000000ebe0 169 FUNC WEAK DEFAULT 13 send@@GLIBC_2.2.5 + 104: 000000000000eed0 90 FUNC WEAK DEFAULT 13 open64@@GLIBC_2.2.5 + 105: 00000000000092d0 5 FUNC GLOBAL DEFAULT 13 pthread_yield@@GLIBC_2.2.5 + 106: 00000000000092c0 9 FUNC GLOBAL DEFAULT 13 pthread_equal@@GLIBC_2.2.5 + 107: 000000000000e730 90 FUNC WEAK DEFAULT 13 read@@GLIBC_2.2.5 + 108: 00000000000092e0 7 FUNC GLOBAL DEFAULT 13 pthread_getconcurrency@@GLIBC_2.2.5 + 109: 00000000000092b0 10 FUNC GLOBAL DEFAULT 13 pthread_self@@GLIBC_2.2.5 + 110: 000000000000b140 187 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_rdlock@@GLIBC_2.2.5 + 111: 000000000000c590 20 FUNC GLOBAL DEFAULT 13 pthread_spin_trylock@@GLIBC_2.2.5 + 112: 000000000000c870 119 FUNC GLOBAL DEFAULT 13 __pthread_getspecific@@GLIBC_2.2.5 + 113: 000000000000b360 173 FUNC GLOBAL DEFAULT 13 pthread_rwlock_wrlock@@GLIBC_2.2.5 + 114: 00000000000097e0 31 FUNC GLOBAL DEFAULT 13 pthread_attr_setscope@@GLIBC_2.2.5 + 115: 000000000000c510 23 FUNC GLOBAL DEFAULT 13 pthread_condattr_setpshared@@GLIBC_2.2.5 + 116: 000000000000eb20 96 FUNC WEAK DEFAULT 13 recvfrom@@GLIBC_2.2.5 + 117: 000000000000daf0 8 FUNC GLOBAL DEFAULT 13 sem_getvalue@@GLIBC_2.2.5 + 118: 000000000000f880 5 FUNC GLOBAL DEFAULT 13 __libc_current_sigrtmin@@GLIBC_2.2.5 + 119: 000000000000f520 5 FUNC GLOBAL DEFAULT 13 system@@GLIBC_2.2.5 + 120: 0000000000009440 154 FUNC GLOBAL DEFAULT 13 pthread_setschedparam@@GLIBC_2.2.5 + 121: 000000000000c7d0 94 FUNC GLOBAL DEFAULT 13 __pthread_key_create@@GLIBC_2.2.5 + 122: 000000000000c540 30 FUNC GLOBAL DEFAULT 13 pthread_condattr_setclock@@GLIBC_2.3.3 + 123: 0000000000010530 22 FUNC GLOBAL DEFAULT 13 pthread_mutex_getprioceiling@@GLIBC_2.4 + 124: 000000000000f0e0 144 FUNC WEAK DEFAULT 13 wait@@GLIBC_2.2.5 + 125: 000000000000e0c0 86 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_push_defer@@GLIBC_2.2.5 + 126: 00000000000107f0 267 FUNC GLOBAL DEFAULT 13 pthread_getname_np@@GLIBC_2.12 + 127: 00000000000096b0 11 FUNC GLOBAL DEFAULT 13 pthread_attr_getdetachstate@@GLIBC_2.2.5 + 128: 000000000000fd40 39 FUNC GLOBAL DEFAULT 13 pthread_mutex_consistent@@GLIBC_2.12 + 129: 00000000000090c0 115 FUNC GLOBAL DEFAULT 13 pthread_tryjoin_np@@GLIBC_2.3.3 + 130: 000000000000ca00 102 FUNC GLOBAL DEFAULT 13 pthread_sigmask@@GLIBC_2.2.5 + 131: 000000000000b600 88 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_trywrlock@@GLIBC_2.2.5 + 132: 000000000000df90 92 FUNC GLOBAL DEFAULT 13 __pthread_register_cancel_defer@@GLIBC_2.3.3 + 133: 000000000000f050 144 FUNC WEAK DEFAULT 13 tcdrain@@GLIBC_2.2.5 + 134: 000000000000cef0 28 FUNC GLOBAL DEFAULT 13 pthread_atfork@GLIBC_2.2.5 + 135: 000000000000b010 12 FUNC WEAK DEFAULT 13 pthread_mutexattr_getkind_np@@GLIBC_2.2.5 + 136: 0000000000009bc0 271 FUNC GLOBAL DEFAULT 13 pthread_mutex_init@@GLIBC_2.2.5 + 137: 000000000000b970 551 FUNC GLOBAL DEFAULT 13 pthread_cond_wait@@GLIBC_2.3.2 + 138: 000000000000c300 97 FUNC GLOBAL DEFAULT 13 pthread_cond_wait@GLIBC_2.2.5 + 139: 000000000000f850 18 FUNC GLOBAL DEFAULT 13 __h_errno_location@@GLIBC_2.2.5 + 140: 0000000000008ed0 39 FUNC GLOBAL DEFAULT 13 pthread_exit@@GLIBC_2.2.5 + 141: 000000000000cc70 280 FUNC GLOBAL DEFAULT 13 pthread_setcancelstate@@GLIBC_2.2.5 + 142: 000000000000c2e0 19 FUNC GLOBAL DEFAULT 13 pthread_cond_destroy@GLIBC_2.2.5 + 143: 000000000000b810 239 FUNC GLOBAL DEFAULT 13 pthread_cond_destroy@@GLIBC_2.3.2 + 144: 000000000000b020 40 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_settype@@GLIBC_2.2.5 + 145: 000000000000de70 84 FUNC GLOBAL DEFAULT 13 sem_timedwait@@GLIBC_2.2.5 + 146: 000000000000b690 134 FUNC GLOBAL DEFAULT 13 pthread_rwlock_unlock@@GLIBC_2.2.5 + 147: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.2 + 148: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.3 + 149: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.4 + 150: 000000000000ea70 169 FUNC WEAK DEFAULT 13 recv@@GLIBC_2.2.5 + 151: 000000000000ed50 90 FUNC WEAK DEFAULT 13 fsync@@GLIBC_2.2.5 + 152: 0000000000009150 344 FUNC GLOBAL DEFAULT 13 pthread_timedjoin_np@@GLIBC_2.3.3 + 153: 000000000000b010 12 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_gettype@@GLIBC_2.2.5 + 154: 0000000000010da0 17 FUNC GLOBAL DEFAULT 13 __errno_location@@GLIBC_2.2.5 + 155: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_PRIVATE + 156: 0000000000006d40 25 FUNC GLOBAL DEFAULT 13 __pthread_get_minstack@@GLIBC_PRIVATE + 157: 000000000000c830 52 FUNC GLOBAL DEFAULT 13 pthread_key_delete@@GLIBC_2.2.5 + 158: 000000000000cee0 14 FUNC WEAK DEFAULT 13 pthread_once@@GLIBC_2.2.5 + 159: 000000000000cad0 174 FUNC GLOBAL DEFAULT 13 pthread_sigqueue@@GLIBC_2.11 + 160: 000000000000f8b0 2 FUNC GLOBAL DEFAULT 13 pthread_kill_other_threads_np@GLIBC_2.2.5 + 161: 0000000000009810 11 FUNC GLOBAL DEFAULT 13 pthread_attr_setstackaddr@@GLIBC_2.2.5 + 162: 000000000000f4d0 70 FUNC GLOBAL DEFAULT 13 raise@@GLIBC_2.2.5 + 163: 000000000000ded0 117 FUNC GLOBAL DEFAULT 13 sem_post@@GLIBC_2.2.5 + 164: 000000000000ca70 82 FUNC GLOBAL DEFAULT 13 pthread_kill@@GLIBC_2.2.5 + 165: 0000000000009d00 396 FUNC GLOBAL DEFAULT 13 pthread_mutex_lock@@GLIBC_2.2.5 + 166: 000000000000afb0 9 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_init@@GLIBC_2.2.5 + 167: 000000000000c8f0 261 FUNC GLOBAL DEFAULT 13 pthread_setspecific@@GLIBC_2.2.5 + 168: 000000000000ef90 96 FUNC WEAK DEFAULT 13 pread64@@GLIBC_2.2.5 + 169: 000000000000c7c0 16 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_setpshared@@GLIBC_2.2.5 + 170: 000000000000e890 273 FUNC WEAK DEFAULT 13 __fcntl@@GLIBC_2.2.5 + 171: 000000000000eff0 96 FUNC WEAK DEFAULT 13 pwrite@@GLIBC_2.2.5 + 172: 0000000000009bc0 271 FUNC GLOBAL DEFAULT 13 __pthread_mutex_init@@GLIBC_2.2.5 + 173: 000000000000afe0 36 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setpshared@@GLIBC_2.2.5 + 174: 000000000000c090 222 FUNC GLOBAL DEFAULT 13 pthread_cond_signal@@GLIBC_2.3.2 + 175: 000000000000c400 99 FUNC GLOBAL DEFAULT 13 pthread_cond_signal@GLIBC_2.2.5 + 176: 000000000000ef90 96 FUNC WEAK DEFAULT 13 pread@@GLIBC_2.2.5 + 177: 000000000000b720 16 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_init@@GLIBC_2.2.5 + 178: 0000000000009760 8 FUNC GLOBAL DEFAULT 13 pthread_attr_getschedpolicy@@GLIBC_2.2.5 + 179: 000000000000ea10 90 FUNC WEAK DEFAULT 13 __connect@@GLIBC_2.2.5 + 180: 000000000000dff0 114 FUNC GLOBAL DEFAULT 13 __pthread_unregister_cancel_restore@@GLIBC_2.3.3 + 181: 0000000000010070 100 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setprioceiling@@GLIBC_2.4 + 182: 000000000000ee70 90 FUNC WEAK DEFAULT 13 __nanosleep@@GLIBC_2.2.6 + 183: 000000000000c370 139 FUNC GLOBAL DEFAULT 13 pthread_cond_timedwait@GLIBC_2.2.5 + 184: 000000000000bcb0 704 FUNC GLOBAL DEFAULT 13 pthread_cond_timedwait@@GLIBC_2.3.2 + 185: 000000000000b410 324 FUNC GLOBAL DEFAULT 13 pthread_rwlock_timedwrlock@@GLIBC_2.2.5 + 186: 000000000000e9b0 90 FUNC WEAK DEFAULT 13 accept@@GLIBC_2.2.5 + 187: 0000000000010b90 5 FUNC GLOBAL DEFAULT 13 __fork@@GLIBC_2.2.5 + 188: 000000000000c5b0 9 FUNC GLOBAL DEFAULT 13 pthread_spin_init@@GLIBC_2.2.5 + 189: 00000000000098b0 709 FUNC GLOBAL DEFAULT 13 pthread_getattr_np@@GLIBC_2.2.5 + 190: 000000000000ffd0 15 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getprotocol@@GLIBC_2.4 + 191: 000000000000edb0 90 FUNC WEAK DEFAULT 13 lseek64@@GLIBC_2.2.5 + 192: 000000000000d060 3 FUNC GLOBAL DEFAULT 13 sem_destroy@@GLIBC_2.2.5 + 193: 0000000000009800 10 FUNC GLOBAL DEFAULT 13 pthread_attr_getstackaddr@@GLIBC_2.2.5 + 194: 000000000000e890 273 FUNC WEAK DEFAULT 13 fcntl@@GLIBC_2.2.5 + 195: 0000000000009880 34 FUNC GLOBAL DEFAULT 13 pthread_attr_setstack@@GLIBC_2.2.5 + 196: 0000000000009d00 396 FUNC GLOBAL DEFAULT 13 __pthread_mutex_lock@@GLIBC_2.2.5 + 197: 00000000000097d0 14 FUNC GLOBAL DEFAULT 13 pthread_attr_getscope@@GLIBC_2.2.5 + 198: 00000000000069a0 926 FUNC GLOBAL DEFAULT 13 __pthread_initialize_minimal@@GLIBC_PRIVATE + 199: 000000000000cb80 167 FUNC GLOBAL DEFAULT 13 pthread_cancel@@GLIBC_2.2.5 + 200: 000000000000b050 211 FUNC GLOBAL DEFAULT 13 pthread_rwlock_init@@GLIBC_2.2.5 + 201: 000000000000fbf0 243 FUNC GLOBAL DEFAULT 13 pthread_attr_setaffinity_np@@GLIBC_2.3.4 + 202: 000000000000fcf0 13 FUNC GLOBAL DEFAULT 13 pthread_attr_setaffinity_np@GLIBC_2.3.3 + 203: 0000000000008120 2622 FUNC GLOBAL DEFAULT 13 pthread_create@@GLIBC_2.2.5 + 204: 000000000000c7a0 3 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_destroy@@GLIBC_2.2.5 + 205: 000000000000afc0 3 FUNC GLOBAL DEFAULT 13 __pthread_mutexattr_destroy@@GLIBC_2.2.5 + 206: 000000000000eff0 96 FUNC WEAK DEFAULT 13 pwrite64@@GLIBC_2.2.5 + 207: 0000000000009cd0 34 FUNC GLOBAL DEFAULT 13 __pthread_mutex_destroy@@GLIBC_2.2.5 + 208: 0000000000008f70 328 FUNC GLOBAL DEFAULT 13 pthread_join@@GLIBC_2.2.5 + 209: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.11 + 210: 000000000000c7b0 7 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_getpshared@@GLIBC_2.3.3 + 211: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.12 + 212: 000000000000c530 12 FUNC GLOBAL DEFAULT 13 pthread_condattr_getclock@@GLIBC_2.3.3 + 213: 000000000000d440 1054 FUNC GLOBAL DEFAULT 13 sem_open@@GLIBC_2.2.5 + 214: 0000000000009790 13 FUNC GLOBAL DEFAULT 13 pthread_attr_getinheritsched@@GLIBC_2.2.5 + 215: 000000000000f830 31 FUNC WEAK DEFAULT 13 sigaction@@GLIBC_2.2.5 + 216: 000000000000afd0 10 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getpshared@@GLIBC_2.2.5 + 217: 00000000000092f0 19 FUNC GLOBAL DEFAULT 13 pthread_setconcurrency@@GLIBC_2.2.5 + 218: 000000000000cee0 14 FUNC GLOBAL DEFAULT 13 __pthread_once@@GLIBC_2.2.5 + 219: 000000000000c570 25 FUNC GLOBAL DEFAULT 13 pthread_spin_lock@@GLIBC_2.2.5 + 220: 0000000000009700 7 FUNC GLOBAL DEFAULT 13 pthread_attr_getschedparam@@GLIBC_2.2.5 + 221: 000000000000b360 173 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_wrlock@@GLIBC_2.2.5 + 222: 000000000000d9c0 293 FUNC GLOBAL DEFAULT 13 sem_unlink@@GLIBC_2.2.5 + 223: 000000000000c870 119 FUNC GLOBAL DEFAULT 13 pthread_getspecific@@GLIBC_2.2.5 + 224: 000000000000e320 71 FUNC GLOBAL DEFAULT 13 __pthread_unwind@@GLIBC_PRIVATE + 225: 000000000000a4f0 2226 FUNC GLOBAL DEFAULT 13 pthread_mutex_timedlock@@GLIBC_2.2.5 + 226: 000000000000c630 54 FUNC GLOBAL DEFAULT 13 pthread_barrier_destroy@@GLIBC_2.2.5 + 227: 000000000000ffe0 33 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_setprotocol@@GLIBC_2.4 + 228: 0000000000010b90 5 FUNC GLOBAL DEFAULT 13 fork@@GLIBC_2.2.5 + 229: 000000000000e380 11 FUNC WEAK DEFAULT 13 siglongjmp@@GLIBC_2.2.5 + 230: 000000000000afb0 9 FUNC GLOBAL DEFAULT 13 __pthread_mutexattr_init@@GLIBC_2.2.5 + 231: 000000000000e370 15 FUNC GLOBAL DEFAULT 13 __pthread_unwind_next@@GLIBC_2.3.3 + 232: 0000000000009520 138 FUNC GLOBAL DEFAULT 13 pthread_setschedprio@@GLIBC_2.3.4 + 233: 000000000000f870 12 FUNC GLOBAL DEFAULT 13 __res_state@@GLIBC_2.2.5 + 234: 000000000000f590 79 FUNC WEAK DEFAULT 13 ftrylockfile@@GLIBC_2.2.5 + 235: 000000000000f5e0 28 FUNC WEAK DEFAULT 13 funlockfile@@GLIBC_2.2.5 + 236: 000000000000c5c0 100 FUNC GLOBAL DEFAULT 13 pthread_barrier_init@@GLIBC_2.2.5 + 237: 000000000000fd40 39 FUNC WEAK DEFAULT 13 pthread_mutex_consistent_np@@GLIBC_2.4 + 238: 0000000000009310 232 FUNC GLOBAL DEFAULT 13 pthread_getschedparam@@GLIBC_2.2.5 + 239: 000000000000aee0 148 FUNC GLOBAL DEFAULT 13 __pthread_mutex_unlock@@GLIBC_2.2.5 + 240: 000000000000f890 5 FUNC GLOBAL DEFAULT 13 __libc_current_sigrtmax@@GLIBC_2.2.5 + 241: 000000000000fd00 13 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getrobust@@GLIBC_2.12 + 242: 000000000000cf10 30 FUNC GLOBAL DEFAULT 13 pthread_getcpuclockid@@GLIBC_2.2.5 + 243: 000000000000df80 14 FUNC GLOBAL DEFAULT 13 __pthread_unregister_cancel@@GLIBC_2.3.3 + 244: 000000000000f8a0 5 FUNC GLOBAL DEFAULT 13 __libc_allocate_rtsig@@GLIBC_2.2.5 + 245: 000000000000b560 106 FUNC GLOBAL DEFAULT 13 pthread_rwlock_tryrdlock@@GLIBC_2.2.5 + 246: 00000000000097a0 39 FUNC GLOBAL DEFAULT 13 pthread_attr_setinheritsched@@GLIBC_2.2.5 + 247: 000000000000b200 342 FUNC GLOBAL DEFAULT 13 pthread_rwlock_timedrdlock@@GLIBC_2.2.5 + 248: 000000000000eed0 90 FUNC WEAK DEFAULT 13 __open@@GLIBC_2.2.5 + 249: 000000000000c790 9 FUNC GLOBAL DEFAULT 13 pthread_barrierattr_init@@GLIBC_2.2.5 + 250: 000000000000ee10 90 FUNC WEAK DEFAULT 13 msync@@GLIBC_2.2.5 + 251: 00000000000095f0 151 FUNC GLOBAL DEFAULT 13 pthread_attr_init@@GLIBC_2.2.5 + 252: 000000000000e120 136 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_pop_restore@@GLIBC_2.2.5 + 253: 000000000000cfd0 82 FUNC GLOBAL DEFAULT 13 __pthread_clock_settime@@GLIBC_PRIVATE + 254: 000000000000afc0 3 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_destroy@@GLIBC_2.2.5 + 255: 000000000000c7d0 94 FUNC GLOBAL DEFAULT 13 pthread_key_create@@GLIBC_2.2.5 + 256: 000000000000b140 187 FUNC GLOBAL DEFAULT 13 pthread_rwlock_rdlock@@GLIBC_2.2.5 + 257: 000000000000b690 134 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_unlock@@GLIBC_2.2.5 + 258: 000000000000b770 7 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_getkind_np@@GLIBC_2.2.5 + 259: 000000000000ea10 90 FUNC WEAK DEFAULT 13 connect@@GLIBC_2.2.5 + 260: 000000000000d030 45 FUNC GLOBAL DEFAULT 13 sem_init@@GLIBC_2.2.5 + 261: 000000000000df50 36 FUNC GLOBAL DEFAULT 13 __pthread_register_cancel@@GLIBC_2.3.3 + 262: 000000000000fb30 170 FUNC GLOBAL DEFAULT 13 pthread_attr_getaffinity_np@@GLIBC_2.3.4 + 263: 000000000000fbe0 13 FUNC GLOBAL DEFAULT 13 pthread_attr_getaffinity_np@GLIBC_2.3.3 + 264: 000000000000c170 311 FUNC GLOBAL DEFAULT 13 pthread_cond_broadcast@@GLIBC_2.3.2 + 265: 000000000000c470 99 FUNC GLOBAL DEFAULT 13 pthread_cond_broadcast@GLIBC_2.2.5 + 266: 0000000000008f00 80 FUNC GLOBAL DEFAULT 13 pthread_detach@@GLIBC_2.2.5 + 267: 0000000000009710 80 FUNC GLOBAL DEFAULT 13 pthread_attr_setschedparam@@GLIBC_2.2.5 + 268: 000000000000dc80 52 FUNC GLOBAL DEFAULT 13 sem_trywait@@GLIBC_2.2.5 + 269: 0000000000009ee0 1511 FUNC GLOBAL DEFAULT 13 __pthread_mutex_trylock@@GLIBC_2.2.5 + 270: 0000000000009840 23 FUNC GLOBAL DEFAULT 13 pthread_attr_setstacksize@@GLIBC_2.2.5 + 271: 000000000000b560 106 FUNC GLOBAL DEFAULT 13 __pthread_rwlock_tryrdlock@@GLIBC_2.2.5 + 272: 000000000000fb20 13 FUNC GLOBAL DEFAULT 13 pthread_setaffinity_np@GLIBC_2.3.3 + 273: 000000000000fa60 184 FUNC GLOBAL DEFAULT 13 pthread_setaffinity_np@@GLIBC_2.3.4 + 274: 000000000000c6a0 232 FUNC GLOBAL DEFAULT 13 pthread_barrier_wait@@GLIBC_2.2.5 + 275: 000000000000fd00 13 FUNC WEAK DEFAULT 13 pthread_mutexattr_getrobust_np@@GLIBC_2.4 + 276: 000000000000f590 79 FUNC GLOBAL DEFAULT 13 _IO_ftrylockfile@@GLIBC_2.2.5 + 277: 0000000000009770 26 FUNC GLOBAL DEFAULT 13 pthread_attr_setschedpolicy@@GLIBC_2.2.5 + 278: 000000000000e790 90 FUNC WEAK DEFAULT 13 __close@@GLIBC_2.2.5 + 279: 0000000000009690 20 FUNC GLOBAL DEFAULT 13 pthread_attr_destroy@@GLIBC_2.2.5 + 280: 000000000000ecf0 96 FUNC WEAK DEFAULT 13 sendto@@GLIBC_2.2.5 + 281: 000000000000f530 61 FUNC WEAK DEFAULT 13 flockfile@@GLIBC_2.2.5 + 282: 000000000000c5b0 9 FUNC GLOBAL DEFAULT 13 pthread_spin_unlock@@GLIBC_2.2.5 + 283: 000000000000b730 3 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_destroy@@GLIBC_2.2.5 + 284: 000000000000eed0 90 FUNC WEAK DEFAULT 13 open@@GLIBC_2.2.5 + 285: 0000000000009860 20 FUNC GLOBAL DEFAULT 13 pthread_attr_getstack@@GLIBC_2.2.5 + 286: 000000000000b750 17 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_setpshared@@GLIBC_2.2.5 + 287: 000000000000c4e0 9 FUNC GLOBAL DEFAULT 13 pthread_condattr_init@@GLIBC_2.2.5 + 288: 000000000000e090 36 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_pop@@GLIBC_2.2.5 + 289: 00000000000096f0 7 FUNC GLOBAL DEFAULT 13 pthread_attr_setguardsize@@GLIBC_2.2.5 + 290: 000000000000b130 4 FUNC GLOBAL DEFAULT 13 pthread_rwlock_destroy@@GLIBC_2.2.5 + 291: 000000000000c560 3 FUNC GLOBAL DEFAULT 13 pthread_spin_destroy@@GLIBC_2.2.5 + 292: 000000000000edb0 90 FUNC WEAK DEFAULT 13 __lseek@@GLIBC_2.2.5 + 293: 000000000000b780 16 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_setkind_np@@GLIBC_2.2.5 + 294: 000000000000ef30 90 FUNC WEAK DEFAULT 13 pause@@GLIBC_2.2.5 + 295: 000000000000eed0 90 FUNC WEAK DEFAULT 13 __open64@@GLIBC_2.2.5 + 296: 0000000000009820 21 FUNC GLOBAL DEFAULT 13 pthread_attr_getstacksize@@GLIBC_2.2.5 + 297: 000000000000dc40 53 FUNC GLOBAL DEFAULT 13 sem_wait@@GLIBC_2.2.5 + 298: 000000000000e790 90 FUNC WEAK DEFAULT 13 close@@GLIBC_2.2.5 + 299: 000000000000aee0 148 FUNC GLOBAL DEFAULT 13 pthread_mutex_unlock@@GLIBC_2.2.5 + 300: 000000000000eff0 96 FUNC WEAK DEFAULT 13 __pwrite64@@GLIBC_2.2.5 + 301: 000000000000e380 11 FUNC GLOBAL DEFAULT 13 longjmp@@GLIBC_2.2.5 + 302: 000000000000ee70 90 FUNC WEAK DEFAULT 13 nanosleep@@GLIBC_2.2.5 + 303: 0000000000010550 392 FUNC GLOBAL DEFAULT 13 pthread_mutex_setprioceiling@@GLIBC_2.4 + 304: 000000000000c8f0 261 FUNC GLOBAL DEFAULT 13 __pthread_setspecific@@GLIBC_2.2.5 + 305: 000000000000e680 67 FUNC GLOBAL DEFAULT 13 __vfork@@GLIBC_2.2.5 + 306: 000000000000e6d0 90 FUNC WEAK DEFAULT 13 __write@@GLIBC_2.2.5 + 307: 000000000000f5e0 28 FUNC GLOBAL DEFAULT 13 _IO_funlockfile@@GLIBC_2.2.5 + 308: 000000000000f530 61 FUNC GLOBAL DEFAULT 13 _IO_flockfile@@GLIBC_2.2.5 + 309: 00000000000096c0 29 FUNC GLOBAL DEFAULT 13 pthread_attr_setdetachstate@@GLIBC_2.2.5 + 310: 000000000000ebe0 169 FUNC WEAK DEFAULT 13 __send@@GLIBC_2.2.5 + 311: 000000000000f2d0 316 FUNC WEAK DEFAULT 13 sigwait@@GLIBC_2.2.5 + 312: 000000000000c4f0 3 FUNC GLOBAL DEFAULT 13 pthread_condattr_destroy@@GLIBC_2.2.5 + 313: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.4 + 314: 000000000000c500 10 FUNC GLOBAL DEFAULT 13 pthread_condattr_getpshared@@GLIBC_2.2.5 + 315: 000000000000ec90 90 FUNC WEAK DEFAULT 13 sendmsg@@GLIBC_2.2.5 + 316: 000000000000e730 90 FUNC WEAK DEFAULT 13 __read@@GLIBC_2.2.5 + 317: 000000000000edb0 90 FUNC WEAK DEFAULT 13 lseek@@GLIBC_2.2.5 + 318: 00000000000096e0 10 FUNC GLOBAL DEFAULT 13 pthread_attr_getguardsize@@GLIBC_2.2.5 + 319: 000000000000eb80 90 FUNC WEAK DEFAULT 13 recvmsg@@GLIBC_2.2.5 + 320: 0000000000010010 81 FUNC GLOBAL DEFAULT 13 pthread_mutexattr_getprioceiling@@GLIBC_2.4 + 321: 000000000000cd90 293 FUNC GLOBAL DEFAULT 13 pthread_setcanceltype@@GLIBC_2.2.5 + 322: 000000000000f170 150 FUNC WEAK DEFAULT 13 waitpid@@GLIBC_2.2.5 + 323: 000000000000b740 8 FUNC GLOBAL DEFAULT 13 pthread_rwlockattr_getpshared@@GLIBC_2.2.5 + 324: 000000000000fd10 36 FUNC WEAK DEFAULT 13 pthread_mutexattr_setrobust_np@@GLIBC_2.4 + 325: 000000000000e070 30 FUNC GLOBAL DEFAULT 13 _pthread_cleanup_push@@GLIBC_2.2.5 + 326: 0000000000009ee0 1511 FUNC GLOBAL DEFAULT 13 pthread_mutex_trylock@@GLIBC_2.2.5 + 327: 000000000000ef90 96 FUNC WEAK DEFAULT 13 __pread64@@GLIBC_2.2.5 + 328: 000000000000cc30 56 FUNC GLOBAL DEFAULT 13 pthread_testcancel@@GLIBC_2.2.5 + 329: 000000000000f830 31 FUNC GLOBAL DEFAULT 13 __sigaction@@GLIBC_2.2.5 + 330: 000000000000e680 67 FUNC WEAK DEFAULT 13 vfork@@GLIBC_2.2.5 + 331: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.5 + 332: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.6 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/librt.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/librt.so.1.txt new file mode 100644 index 000000000000..a98f5ed0cd79 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/librt.so.1.txt @@ -0,0 +1,124 @@ +Library: /lib64/librt.so.1 +Package: glibc-2.17-326.el7_9.x86_64 + + +Symbol table '.dynsym' contains 118 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (7) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.2.5 (8) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_pwrite@GLIBC_PRIVATE (9) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_create@GLIBC_2.2.5 (8) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_sigmask@GLIBC_2.2.5 (8) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_detach@GLIBC_2.2.5 (8) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fdatasync@GLIBC_2.2.5 (7) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (7) + 9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 10: 0000000000000000 0 TLS GLOBAL DEFAULT UND errno@GLIBC_PRIVATE (9) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_fatal@GLIBC_PRIVATE (9) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cancel@GLIBC_2.2.5 (8) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __statfs@GLIBC_2.2.5 (7) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_setschedparam@GLIBC_2.2.5 (8) + 15: 0000000000000000 0 FUNC WEAK DEFAULT UND __pthread_once@GLIBC_2.2.5 (8) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (8) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (8) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.2.5 (7) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_once@GLIBC_2.2.5 (8) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (7) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (7) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (7) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clock_nanosleep@GLIBC_PRIVATE (9) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __register_atfork@GLIBC_2.3.2 (10) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __pthread_unwind@GLIBC_PRIVATE (11) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (8) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_init@GLIBC_2.2.5 (8) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (12) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __pthread_get_minstack@GLIBC_PRIVATE (11) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (7) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __getmntent_r@GLIBC_2.2.5 (7) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __endmntent@GLIBC_2.2.5 (7) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.2.5 (7) + 34: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigfillset@GLIBC_2.2.5 (7) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (13) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clock_getres@GLIBC_PRIVATE (9) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clock_gettime@GLIBC_PRIVATE (9) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_getschedparam@GLIBC_2.2.5 (8) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setdetachstate@GLIBC_2.2.5 (8) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlopen_mode@GLIBC_PRIVATE (9) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (8) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_exit@GLIBC_2.2.5 (8) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (7) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_setstacksize@GLIBC_2.2.5 (8) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (7) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_dlsym@GLIBC_PRIVATE (9) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_barrier_init@GLIBC_2.2.5 (8) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mempcpy@GLIBC_2.2.5 (7) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fsync@GLIBC_2.2.5 (8) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_self@GLIBC_2.2.5 (8) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_timedwait@GLIBC_2.3.2 (12) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (8) + 54: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_attr_destroy@GLIBC_2.2.5 (8) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __setmntent@GLIBC_2.2.5 (7) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pread@GLIBC_2.2.5 (8) + 58: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fortify_fail@GLIBC_PRIVATE (9) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clock_getcpuclockid@GLIBC_PRIVATE (9) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_barrier_wait@GLIBC_2.2.5 (8) + 62: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (7) + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (8) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __clock_settime@GLIBC_PRIVATE (9) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (7) + 66: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.7 + 67: 0000000000003420 784 FUNC GLOBAL DEFAULT 13 aio_suspend@@GLIBC_2.2.5 + 68: 0000000000004d10 98 FUNC WEAK DEFAULT 13 mq_timedreceive@@GLIBC_2.3.4 + 69: 0000000000004d80 8 : 10 GLOBAL DEFAULT 13 clock_getres@@GLIBC_2.2.5 + 70: 00000000000042c0 44 FUNC GLOBAL DEFAULT 13 timer_settime@@GLIBC_2.3.3 + 71: 00000000000042f0 19 FUNC GLOBAL DEFAULT 13 timer_settime@GLIBC_2.2.5 + 72: 00000000000025c0 135 FUNC WEAK DEFAULT 13 aio_fsync64@@GLIBC_2.2.5 + 73: 0000000000002d70 101 FUNC WEAK DEFAULT 13 aio_init@@GLIBC_2.2.5 + 74: 00000000000025b0 4 FUNC GLOBAL DEFAULT 13 aio_error@@GLIBC_2.2.5 + 75: 0000000000004ca0 98 FUNC WEAK DEFAULT 13 mq_timedsend@@GLIBC_2.3.4 + 76: 0000000000003330 27 FUNC WEAK DEFAULT 13 aio_read64@@GLIBC_2.2.5 + 77: 00000000000048b0 33 FUNC WEAK DEFAULT 13 mq_setattr@@GLIBC_2.3.4 + 78: 0000000000004620 322 FUNC GLOBAL DEFAULT 13 shm_unlink@@GLIBC_2.2.5 + 79: 0000000000004da0 8 : 10 GLOBAL DEFAULT 13 clock_settime@@GLIBC_2.2.5 + 80: 0000000000004c80 8 FUNC GLOBAL DEFAULT 13 mq_send@@GLIBC_2.3.4 + 81: 00000000000025c0 135 FUNC GLOBAL DEFAULT 13 aio_fsync@@GLIBC_2.2.5 + 82: 0000000000003350 5 FUNC WEAK DEFAULT 13 aio_return64@@GLIBC_2.2.5 + 83: 0000000000003350 5 FUNC GLOBAL DEFAULT 13 aio_return@@GLIBC_2.2.5 + 84: 00000000000025b0 4 FUNC WEAK DEFAULT 13 aio_error64@@GLIBC_2.2.5 + 85: 0000000000003730 30 FUNC WEAK DEFAULT 13 aio_write64@@GLIBC_2.2.5 + 86: 0000000000004850 79 FUNC GLOBAL DEFAULT 13 mq_unlink@@GLIBC_2.3.4 + 87: 0000000000003330 27 FUNC GLOBAL DEFAULT 13 aio_read@@GLIBC_2.2.5 + 88: 0000000000003420 784 FUNC WEAK DEFAULT 13 aio_suspend64@@GLIBC_2.2.5 + 89: 0000000000002410 405 FUNC GLOBAL DEFAULT 13 aio_cancel@@GLIBC_2.2.5 + 90: 0000000000004250 19 FUNC GLOBAL DEFAULT 13 timer_getoverrun@GLIBC_2.2.5 + 91: 0000000000004220 38 FUNC GLOBAL DEFAULT 13 timer_getoverrun@@GLIBC_2.3.3 + 92: 0000000000004800 26 FUNC GLOBAL DEFAULT 13 __mq_open_2@@GLIBC_2.7 + 93: 0000000000003bc0 36 FUNC GLOBAL DEFAULT 13 lio_listio@@GLIBC_2.4 + 94: 0000000000003bf0 36 FUNC GLOBAL DEFAULT 13 lio_listio@GLIBC_2.2.5 + 95: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.2.5 + 96: 0000000000004b10 360 FUNC GLOBAL DEFAULT 13 mq_notify@@GLIBC_2.3.4 + 97: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.3 + 98: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.3.4 + 99: 00000000000044a0 379 FUNC GLOBAL DEFAULT 13 shm_open@@GLIBC_2.2.5 + 100: 0000000000002410 405 FUNC WEAK DEFAULT 13 aio_cancel64@@GLIBC_2.2.5 + 101: 0000000000003bc0 36 FUNC GLOBAL DEFAULT 13 lio_listio64@@GLIBC_2.4 + 102: 0000000000003bf0 36 FUNC GLOBAL DEFAULT 13 lio_listio64@GLIBC_2.2.5 + 103: 0000000000004270 38 FUNC GLOBAL DEFAULT 13 timer_gettime@@GLIBC_2.3.3 + 104: 00000000000042a0 19 FUNC GLOBAL DEFAULT 13 timer_gettime@GLIBC_2.2.5 + 105: 0000000000004770 133 FUNC GLOBAL DEFAULT 13 mq_open@@GLIBC_2.3.4 + 106: 0000000000004db0 8 : 10 GLOBAL DEFAULT 13 clock_getcpuclockid@@GLIBC_2.2.5 + 107: 0000000000004c90 8 FUNC GLOBAL DEFAULT 13 mq_receive@@GLIBC_2.3.4 + 108: 00000000000040c0 118 FUNC GLOBAL DEFAULT 13 timer_create@GLIBC_2.2.5 + 109: 0000000000003e70 579 FUNC GLOBAL DEFAULT 13 timer_create@@GLIBC_2.3.3 + 110: 0000000000003730 30 FUNC GLOBAL DEFAULT 13 aio_write@@GLIBC_2.2.5 + 111: 0000000000004dc0 8 : 10 GLOBAL DEFAULT 13 clock_nanosleep@@GLIBC_2.2.5 + 112: 0000000000004820 37 FUNC GLOBAL DEFAULT 13 mq_close@@GLIBC_2.3.4 + 113: 00000000000048a0 10 FUNC GLOBAL DEFAULT 13 mq_getattr@@GLIBC_2.3.4 + 114: 0000000000004d90 8 : 10 GLOBAL DEFAULT 13 clock_gettime@@GLIBC_2.2.5 + 115: 00000000000041f0 44 FUNC GLOBAL DEFAULT 13 timer_delete@GLIBC_2.2.5 + 116: 0000000000004140 165 FUNC GLOBAL DEFAULT 13 timer_delete@@GLIBC_2.3.3 + 117: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS GLIBC_2.4 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libsmime3.so.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libsmime3.so.txt new file mode 100644 index 000000000000..fda55a2441ad --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libsmime3.so.txt @@ -0,0 +1,410 @@ +Library: /lib64/libsmime3.so +Package: nss-3.53.1-3.el7_9.x86_64 + + +Symbol table '.dynsym' contains 404 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.9.3 + 2: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.8 + 3: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.4 + 4: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.6 + 5: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.2 + 6: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.9 + 7: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.15 + 8: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.13 + 9: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.7 + 10: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.3 + 11: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.2.1 + 12: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.18 + 13: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.10 + 14: 0000000000000000 0 OBJECT LOCAL DEFAULT ABS NSS_3.12.10 + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_NewLock + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_IsCADERCert@NSS_3.3 (20) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderAbort_Util@NSSUTIL_3.12 (21) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_OptionGet@NSS_3.21 (22) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_GetPrivateKeyType@NSS_3.3 (20) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDTag_Util@NSSUTIL_3.12 (21) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetInternalSlot@NSS_3.2 (23) + 22: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECKEY_PointerToEncryptedPrivateKeyInfoTemplate@NSS_3.2 (23) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Alloc_Util@NSSUTIL_3.12 (21) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetBlockSize@NSS_3.2 (23) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GenerateRandom@NSS_3.2 (23) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearStreaming_Util@NSSUTIL_3.12 (21) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearTakeFromBuf_Util@NSSUTIL_3.12 (21) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyEncryptedPrivateKeyInfo@NSS_3.2 (23) + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_OctetStringTemplate_Util@NSSUTIL_3.12 (21) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Strdup_Util@NSSUTIL_3.12 (21) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1Encode_Util@NSSUTIL_3.12 (21) + 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderUpdate_Util@NSSUTIL_3.12 (21) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __CERT_DecodeDERCertificate@NSS_3.2 (23) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_NewCertList@NSS_3.2 (23) + 36: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECKEY_PointerToPrivateKeyInfoTemplate@NSS_3.2 (23) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_PubUnwrapSymKey@NSS_3.2 (23) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FilterCertListByUsage@NSS_3.4 (24) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5IsAlgorithmPBEAlgTag@NSS_3.12 (25) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_VerifyCert@NSS_3.2 (23) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ZfreeItem_Util@NSSUTIL_3.12 (21) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DestroyContext@NSS_3.2 (23) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_DestroyDigestInfo_Util@NSSUTIL_3.12 (21) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindCertAndKeyByRecipientListNew@NSS_3.2 (23) + 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CompareAlgorithmID_Util@NSSUTIL_3.12 (21) + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetBestSlot@NSS_3.2 (23) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ParamFromAlgid@NSS_3.2 (23) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDigestDirect@NSS_3.12 (25) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_strncasecmp + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderClearNotifyProc_Util@NSSUTIL_3.12 (21) + 51: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BMPStringTemplate_Util@NSSUTIL_3.12 (21) + 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_PublicKeyStrength@NSS_3.2 (23) + 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CipherOp@NSS_3.2 (23) + 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_EncodeTimeChoice_Util@NSSUTIL_3.12 (21) + 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_ConvertAsciiToItem_Util@NSSUTIL_3.12 (21) + 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZAlloc_Util@NSSUTIL_3.12 (21) + 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeItem_Util@NSSUTIL_3.12 (21) + 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CreateDigestInfo_Util@NSSUTIL_3.12 (21) + 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_VersionCheck@NSS_3.2 (23) + 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DigestFinal@NSS_3.2 (23) + 61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_ResultLen@NSS_3.4 (24) + 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_CompareValues + 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_FreeArena_Util@NSSUTIL_3.12 (21) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_NewTempCertificate@NSS_3.12 (25) + 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyPrivateKey@NSS_3.2 (23) + 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Now + 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_DupItem_Util@NSSUTIL_3.12 (21) + 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (26) + 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DupCertificate@NSS_3.2 (23) + 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (27) + 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecodeInteger_Util@NSSUTIL_3.12 (21) + 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (26) + 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ZFree_Util@NSSUTIL_3.12 (21) + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ReferenceSymKey@NSS_3.2 (23) + 75: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND CERT_TimeChoiceTemplate@NSS_3.9 (28) + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetTakeFromBuf_Util@NSSUTIL_3.12 (21) + 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_NewArena_Util@NSSUTIL_3.12 (21) + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindPrivateKeyFromCert@NSS_3.2 (23) + 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportPublicKey@NSS_3.4 (24) + 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearFilterProc_Util@NSSUTIL_3.12 (21) + 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetNotifyProc_Util@NSSUTIL_3.12 (21) + 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ExportEncryptedPrivateKeyInfo@NSS_3.2 (23) + 83: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_SetOfAnyTemplate_Util@NSSUTIL_3.12 (21) + 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CopyItem_Util@NSSUTIL_3.12 (21) + 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportCertForKeyToSlot@NSS_3.2 (23) + 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyPrivateKeyInfo@NSS_3.2 (23) + 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_DestroyLock + 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_ASCIIConversion_Util@NSSUTIL_3.12 (21) + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_IsInternal@NSS_3.2 (23) + 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (26) + 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertificateList@NSS_3.2 (23) + 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_CertChainFromCert@NSS_3.2 (23) + 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyPublicKey@NSS_3.2 (23) + 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeItem_Util@NSSUTIL_3.12 (21) + 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyPrivateKey@NSS_3.2 (23) + 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreatePBEAlgorithmID@NSS_3.2 (23) + 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FreeSlot@NSS_3.2 (23) + 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindCertByIssuerAndSN@NSS_3.2 (23) + 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroySubjectPublicKeyInfo@NSS_3.2 (23) + 100: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND sgn_DigestInfoTemplate_Util@NSSUTIL_3.12 (21) + 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindKeyByAnyCert@NSS_3.2 (23) + 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_IsHW@NSS_3.2 (23) + 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_CallOnce + 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_GetHashObjectByOidTag@NSS_3.8 (29) + 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ReferenceSlot@NSS_3.3 (20) + 106: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOIDByTag_Util@NSSUTIL_3.12 (21) + 107: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (26) + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableDestroy + 109: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DestroyPBEParams@NSS_3.3.1 (30) + 110: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderClearNotifyProc_Util@NSSUTIL_3.12 (21) + 111: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Free_Util@NSSUTIL_3.12 (21) + 112: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaUnmark_Util@NSSUTIL_3.12 (21) + 113: 0000000000000000 0 FUNC GLOBAL DEFAULT UND HASH_GetHashTypeByOidTag@NSS_3.8 (29) + 114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_PublicKeyStrengthInBits@NSS_3.8 (29) + 115: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (26) + 116: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND CERT_SetOfSignedCrlTemplate@NSS_3.2 (23) + 117: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5IsAlgorithmPBEAlg@NSS_3.2 (23) + 118: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND CERT_IssuerAndSNTemplate@NSS_3.2 (23) + 119: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CopyPublicKey@NSS_3.6 (31) + 120: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_HashBuf@NSS_3.2 (23) + 121: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 122: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertificate@NSS_3.2 (23) + 123: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetStreaming_Util@NSSUTIL_3.12 (21) + 124: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_NewHashTable + 125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (32) + 126: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_DestroyAlgorithmID_Util@NSSUTIL_3.12 (21) + 127: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5GetCryptoAlgorithm@NSS_3.2 (23) + 128: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableAdd + 129: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_SetSymKeyUserData@NSS_3.11 (33) + 130: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GetCertIssuerAndSN@NSS_3.2 (23) + 131: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GetDefaultCertDB@NSS_3.2 (23) + 132: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaZAlloc_Util@NSSUTIL_3.12 (21) + 133: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_Realloc_Util@NSSUTIL_3.12 (21) + 134: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_AllocItem_Util@NSSUTIL_3.12 (21) + 135: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_PBEKeyGen@NSS_3.2 (23) + 136: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ItemsAreEqual_Util@NSSUTIL_3.12 (21) + 137: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaStrdup_Util@NSSUTIL_3.12 (21) + 138: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertList@NSS_3.2 (23) + 139: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_IA5StringTemplate_Util@NSSUTIL_3.12 (21) + 140: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderSetNotifyProc_Util@NSSUTIL_3.12 (21) + 141: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_ObjectIDTemplate_Util@NSSUTIL_3.12 (21) + 142: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_SignData@NSS_3.2 (23) + 143: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SECOID_AlgorithmIDTemplate_Util@NSSUTIL_3.12 (21) + 144: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindCertByDERCert@NSS_3.2 (23) + 145: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_GetError_Util@NSSUTIL_3.12 (21) + 146: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_KeyGen@NSS_3.2 (23) + 147: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_ArenaDupItem_Util@NSSUTIL_3.12 (21) + 148: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FreeSymKey@NSS_3.2 (23) + 149: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaAlloc_Util@NSSUTIL_3.12 (21) + 150: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindSubjectKeyIDExtension@NSS_3.7 (34) + 151: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_GetPublicKeyType@NSS_3.3 (20) + 152: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Lock + 153: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreateContextBySymKey@NSS_3.2 (23) + 154: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderFinish_Util@NSSUTIL_3.12 (21) + 155: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_CopyDigestInfo_Util@NSSUTIL_3.12 (21) + 156: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_UCS2_UTF8Conversion_Util@NSSUTIL_3.12 (21) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetInternalKeySlot@NSS_3.2 (23) + 158: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderStart_Util@NSSUTIL_3.12 (21) + 159: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyEncryptedPrivateKeyInfo@NSS_3.2 (23) + 160: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetSlotFromKey@NSS_3.2 (23) + 161: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_BitStringTemplate_Util@NSSUTIL_3.12 (21) + 162: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaGrow_Util@NSSUTIL_3.12 (21) + 163: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportDERCert@NSS_3.6 (31) + 164: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DigestBegin@NSS_3.2 (23) + 165: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_SetAlgorithmID_Util@NSSUTIL_3.12 (21) + 166: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncodeInteger_Util@NSSUTIL_3.12 (21) + 167: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindSMimeProfile@NSS_3.2 (23) + 168: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (26) + 169: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_AnyTemplate_Util@NSSUTIL_3.12 (21) + 170: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_GetCommonName@NSS_3.2 (23) + 171: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_DecodeTimeChoice_Util@NSSUTIL_3.12 (21) + 172: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_AlgtagToMechanism@NSS_3.2 (23) + 173: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderSetFilterProc_Util@NSSUTIL_3.12 (21) + 174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_PubWrapSymKey@NSS_3.2 (23) + 175: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ATOB_AsciiToData_Util@NSSUTIL_3.12 (21) + 176: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderStart_Util@NSSUTIL_3.12 (21) + 177: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_PKCS5GetKeyLength@NSS_3.2 (23) + 178: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_CertListFromCert@NSS_3.2 (23) + 179: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_FreeItem_Util@NSSUTIL_3.12 (21) + 180: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SGN_Digest@NSS_3.2 (23) + 181: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_TraverseCertsForSubjectInSlot@NSS_3.2 (23) + 182: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetPBECryptoMechanism@NSS_3.12 (25) + 183: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GenerateNewParam@NSS_3.2 (23) + 184: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ExportPrivateKeyInfo@NSS_3.2 (23) + 185: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_FindOID_Util@NSSUTIL_3.12 (21) + 186: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_SaveSMimeProfile@NSS_3.2 (23) + 187: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetKeyStrength@NSS_3.2 (23) + 188: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 189: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECITEM_CompareItem_Util@NSSUTIL_3.12 (21) + 190: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_CopyAlgorithmID_Util@NSSUTIL_3.12 (21) + 191: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindCertAndKeyByRecipientList@NSS_3.2 (23) + 192: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_CreateSubjectPublicKeyInfo@NSS_3.2 (23) + 193: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_DestroyCertArray@NSS_3.2 (23) + 194: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_FindCertBySubjectKeyID@NSS_3.7 (34) + 195: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_FindKeyByDERCert@NSS_3.2 (23) + 196: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_DigestOp@NSS_3.2 (23) + 197: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToAnyTemplate_Util@NSSUTIL_3.12 (21) + 198: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreatePBEParams@NSS_3.3.1 (30) + 199: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_GetSignatureAlgorithmOidTag@NSS_3.10 (35) + 200: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportEncryptedPrivateKeyInfo@NSS_3.2 (23) + 201: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetSymKeyUserData@NSS_3.11 (33) + 202: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECOID_GetAlgorithmTag_Util@NSSUTIL_3.12 (21) + 203: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderAbort_Util@NSSUTIL_3.12 (21) + 204: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_CreatePBEV2AlgorithmID@NSS_3.12 (25) + 205: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SECKEY_DestroyPrivateKeyInfo@NSS_3.2 (23) + 206: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_ImportCerts@NSS_3.2 (23) + 207: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_SetPasswordFunc@NSS_3.2 (23) + 208: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_TraverseCertsForNicknameInSlot@NSS_3.2 (23) + 209: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDataDirect@NSS_3.12 (25) + 210: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_IsRootDERCert@NSS_3.8 (29) + 211: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 212: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_AddCertToListTail@NSS_3.2 (23) + 213: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_GetTokenName@NSS_3.2 (23) + 214: 0000000000000000 0 FUNC GLOBAL DEFAULT UND DER_GetInteger_Util@NSSUTIL_3.12 (21) + 215: 0000000000000000 0 FUNC GLOBAL DEFAULT UND CERT_ExtractPublicKey@NSS_3.2 (23) + 216: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ImportPrivateKeyInfo@NSS_3.2 (23) + 217: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDigestWithAlgorithmID@NSS_3.12 (25) + 218: 0000000000000000 0 FUNC GLOBAL DEFAULT UND NSS_RegisterShutdown@NSS_3.11.1 (36) + 219: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_QuickDERDecodeItem_Util@NSSUTIL_3.12 (21) + 220: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PL_HashTableLookupConst + 221: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PK11_ParamToAlgid@NSS_3.2 (23) + 222: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (26) + 223: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND SEC_PointerToOctetStringTemplate_Util@NSSUTIL_3.12 (21) + 224: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaMark_Util@NSSUTIL_3.12 (21) + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_SetError_Util@NSSUTIL_3.12 (21) + 226: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PR_Unlock + 227: 0000000000000000 0 FUNC GLOBAL DEFAULT UND VFY_VerifyDataWithAlgorithmID@NSS_3.12 (25) + 228: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1DecoderUpdate_Util@NSSUTIL_3.12 (21) + 229: 0000000000000000 0 FUNC GLOBAL DEFAULT UND PORT_ArenaRelease_Util@NSSUTIL_3.12 (21) + 230: 0000000000000000 0 FUNC GLOBAL DEFAULT UND SEC_ASN1EncoderFinish_Util@NSSUTIL_3.12 (21) + 231: 000000000001c0d0 15 FUNC GLOBAL DEFAULT 12 SEC_PKCS7VerifySignature@@NSS_3.2 + 232: 000000000000fe60 30 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_Create@@NSS_3.2 + 233: 000000000001b550 166 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderUpdate@@NSS_3.2 + 234: 000000000000cef0 5 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_GetContentInfo@@NSS_3.2 + 235: 000000000001b7e0 66 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContentIsSigned@@NSS_3.4 + 236: 000000000001c1e0 10 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetSignerEmailAddress@@NSS_3.4 + 237: 0000000000014320 2539 FUNC GLOBAL DEFAULT 12 SEC_PKCS12Encode@@NSS_3.2 + 238: 000000000001a430 116 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateCertsOnly@@NSS_3.3 + 239: 000000000001a4b0 65 FUNC GLOBAL DEFAULT 12 SEC_PKCS7AddCertificate@@NSS_3.3 + 240: 000000000000eaa0 54 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_GetSignerInfo@@NSS_3.2 + 241: 000000000000d690 71 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_IsEncrypted@@NSS_3.4.1 + 242: 0000000000010300 64 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetVersion@@NSS_3.2 + 243: 000000000000f650 225 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddDigest@@NSS_3.2 + 244: 0000000000017e40 1506 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderImportBags@@NSS_3.2 + 245: 000000000001d230 115 FUNC GLOBAL DEFAULT 12 SEC_PKCS7Encode@@NSS_3.3 + 246: 000000000000a260 65 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetBulkKey@@NSS_3.2 + 247: 000000000001c0e0 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7VerifyDetachedSignature@@NSS_3.4 + 248: 00000000000170b0 30 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderSetTargetTokenCAs@@NSS_3.8 + 249: 000000000000d640 67 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_ContentLevel@@NSS_3.2 + 250: 000000000000eec0 311 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_VerifyCertsOnly@@NSS_3.2 + 251: 0000000000012ac0 105 FUNC GLOBAL DEFAULT 12 SEC_PKCS12SetPreferredCipher@@NSS_3.2 + 252: 000000000000f080 65 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddCertChain@@NSS_3.2 + 253: 0000000000010b00 255 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddSMIMEEncKeyPrefs@@NSS_3.2 + 254: 0000000000018540 57 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderIterateInit@@NSS_3.10 + 255: 000000000000a2d0 19 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetBulkKeySize@@NSS_3.2 + 256: 0000000000019440 586 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecryptContents@@NSS_3.2 + 257: 000000000000dcc0 35 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_Create@@NSS_3.2 + 258: 0000000000019f60 752 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateSignedData@@NSS_3.2 + 259: 0000000000018f40 46 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContentType@@NSS_3.2 + 260: 000000000000e0b0 123 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_UnwrapBulkKey@@NSS_3.7.2 + 261: 000000000000de60 94 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_Destroy@@NSS_3.2 + 262: 000000000001a5c0 14 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateData@@NSS_3.2 + 263: 000000000000f8b0 324 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_SetDigestValue@@NSS_3.4 + 264: 000000000000b660 228 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Start@@NSS_3.2 + 265: 0000000000010c00 255 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddMSSMIMEEncKeyPrefs@@NSS_3.6 + 266: 000000000000b750 35 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Cancel@@NSS_3.2 + 267: 000000000000e130 510 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_GetCertAndKey@@NSS_3.8 + 268: 000000000000cc80 123 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Cancel@@NSS_3.2 + 269: 00000000000108f0 39 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSignerCommonName@@NSS_3.2 + 270: 000000000001d110 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderAbort@@NSS_3.9 + 271: 0000000000011980 200 FUNC GLOBAL DEFAULT 12 NSS_CMSUtil_VerificationStatusToString@@NSS_3.2 + 272: 0000000000009e70 116 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetContent@@NSS_3.2 + 273: 00000000000097e0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_NSSCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 274: 000000000001b7b0 40 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContentIsEncrypted@@NSS_3.4 + 275: 000000000001a250 303 FUNC GLOBAL DEFAULT 12 SEC_PKCS7AddSigningTime@@NSS_3.2 + 276: 0000000000010510 992 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_Verify@@NSS_3.16 + 277: 000000000000e710 241 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_Destroy@@NSS_3.2 + 278: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.12.2 + 279: 000000000000f450 73 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddCertificate@@NSS_3.2 + 280: 0000000000019150 198 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetContent@@NSS_3.2 + 281: 00000000000142b0 57 FUNC GLOBAL DEFAULT 12 SEC_PKCS12AddCertAndKey@@NSS_3.2 + 282: 000000000000fa00 185 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddSignerInfo@@NSS_3.2 + 283: 0000000000010e40 207 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_IncludeCerts@@NSS_3.2 + 284: 000000000000bf20 236 FUNC GLOBAL DEFAULT 12 NSS_CMSEncryptedData_Create@@NSS_3.2 + 285: 000000000000d410 240 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_Create@@NSS_3.2 + 286: 0000000000011b50 1594 FUNC GLOBAL DEFAULT 12 NSS_SMIMEUtil_FindBulkAlgForRecipients@@NSS_3.2 + 287: 00000000000102f0 8 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetCertList@@NSS_3.2 + 288: 0000000000018ea0 146 FUNC GLOBAL DEFAULT 12 CERT_DecodeCertFromPackage@@NSS_3.4 + 289: 0000000000014160 321 FUNC GLOBAL DEFAULT 12 SEC_PKCS12AddCertOrChainAndKey@@NSS_3.12.2 + 290: 000000000000a170 52 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetContentEncAlgTag@@NSS_3.2 + 291: 000000000000fb20 153 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_VerifySignerInfo@@NSS_3.2 + 292: 0000000000009e60 13 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_EncryptedData@@NSS_3.2 + 293: 000000000001b400 332 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderStart@@NSS_3.2 + 294: 0000000000012a00 62 FUNC GLOBAL DEFAULT 12 SEC_PKCS12IsEncryptionAllowed@@NSS_3.2 + 295: 0000000000009df0 55 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_Data@@NSS_3.2 + 296: 000000000001c1d0 10 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetSignerCommonName@@NSS_3.4 + 297: 0000000000009d30 192 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent@@NSS_3.2 + 298: 000000000000fe80 50 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_Destroy@@NSS_3.2 + 299: 000000000000dd80 217 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateWithSubjKeyIDFromCert@@NSS_3.7 + 300: 000000000000e330 73 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_Encode@@NSS_3.8 + 301: 00000000000123e0 138 FUNC GLOBAL DEFAULT 12 NSS_SMIMEUtil_CreateMSSMIMEEncKeyPrefs@@NSS_3.12.10 + 302: 000000000000f030 68 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_AddCertList@@NSS_3.2 + 303: 000000000000dcf0 39 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateNew@@NSS_3.8 + 304: 0000000000019270 454 FUNC GLOBAL DEFAULT 12 SEC_PKCS7SetContent@@NSS_3.4 + 305: 00000000000188e0 1458 FUNC GLOBAL DEFAULT 12 CERT_DecodeCertPackage@@NSS_3.2 + 306: 0000000000012990 106 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecryptionAllowed@@NSS_3.10 + 307: 000000000000ee80 31 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_GetDigestAlgs@@NSS_3.2 + 308: 0000000000019220 74 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetEncryptionAlgorithm@@NSS_3.2 + 309: 000000000000f000 45 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_HasDigests@@NSS_3.2 + 310: 0000000000225720 32 OBJECT GLOBAL DEFAULT 20 NSS_PointerToCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 311: 0000000000010980 199 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddSigningTime@@NSS_3.2 + 312: 0000000000017540 550 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderFinish@@NSS_3.2 + 313: 000000000000bc00 84 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_Update@@NSS_3.2 + 314: 00000000000131d0 608 FUNC GLOBAL DEFAULT 12 SEC_PKCS12CreatePasswordPrivSafe@@NSS_3.2 + 315: 000000000000b7d0 73 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_CreateFromDER@@NSS_3.2 + 316: 0000000000011a50 242 FUNC GLOBAL DEFAULT 12 NSS_CMSDEREncode@@NSS_3.2 + 317: 000000000000f4a0 423 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_SetDigests@@NSS_3.2 + 318: 000000000000c010 18 FUNC GLOBAL DEFAULT 12 NSS_CMSEncryptedData_Destroy@@NSS_3.2 + 319: 0000000000017cb0 396 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderRenameCertNicknames@@NSS_3.18 + 320: 000000000000d5d0 4 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_GetContentInfo@@NSS_3.2 + 321: 000000000001d090 114 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderFinish@@NSS_3.2 + 322: 000000000000cdf0 156 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_Create@@NSS_3.2 + 323: 0000000000012520 28 FUNC GLOBAL DEFAULT 12 NSSSMIME_VersionCheck@@NSS_3.2.1 + 324: 000000000000be80 146 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_FinishSingle@@NSS_3.2 + 325: 000000000000d6e0 87 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_IsSigned@@NSS_3.4 + 326: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.7.2 + 327: 0000000000018870 110 FUNC GLOBAL DEFAULT 12 CERT_ConvertAndDecodeCertificate@@NSS_3.9.3 + 328: 0000000000009e30 13 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_SignedData@@NSS_3.2 + 329: 0000000000017770 226 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderGetCerts@@NSS_3.4 + 330: 000000000000b780 76 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Finish@@NSS_3.2 + 331: 000000000000cf00 108 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_AddRecipient@@NSS_3.2 + 332: 000000000001b830 76 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetSigningTime@@NSS_3.4 + 333: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.4.1 + 334: 000000000000cd00 234 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Finish@@NSS_3.2 + 335: 000000000000fe30 34 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_CreateWithSubjKeyID@@NSS_3.6 + 336: 000000000000bcb0 456 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_FinishMultiple@@NSS_3.2 + 337: 000000000000bbb0 69 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_StartSingle@@NSS_3.2 + 338: 000000000001c0f0 24 FUNC GLOBAL DEFAULT 12 SEC_PKCS7VerifyDetachedSignatureAtTime@@NSS_3.15 + 339: 0000000000009ce0 71 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetDontStream@@NSS_3.12.10 + 340: 00000000000170d0 85 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderUpdate@@NSS_3.2 + 341: 0000000000014d10 149 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DestroyExportContext@@NSS_3.2 + 342: 0000000000012540 8 FUNC GLOBAL DEFAULT 12 NSSSMIME_GetVersion@@NSS_3.13 + 343: 000000000001a5b0 5 FUNC GLOBAL DEFAULT 12 SEC_PKCS7AddRecipient@@NSS_3.2 + 344: 000000000001d080 16 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderUpdate@@NSS_3.2 + 345: 0000000000017130 1034 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderVerify@@NSS_3.2 + 346: 000000000000ce90 87 FUNC GLOBAL DEFAULT 12 NSS_CMSEnvelopedData_Destroy@@NSS_3.2 + 347: 0000000000013430 193 FUNC GLOBAL DEFAULT 12 SEC_PKCS12CreateUnencryptedSafe@@NSS_3.2 + 348: 0000000000018f70 463 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DestroyContentInfo@@NSS_3.2 + 349: 000000000000d610 43 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_ContentLevelCount@@NSS_3.2 + 350: 000000000001e240 151 FUNC GLOBAL DEFAULT 12 SECMIME_DecryptionAllowed@@NSS_3.4 + 351: 0000000000019690 36 FUNC GLOBAL DEFAULT 12 SEC_PKCS7GetCertificateList@@NSS_3.2 + 352: 000000000001a5d0 233 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateEncryptedData@@NSS_3.2 + 353: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS NSS_3.16 + 354: 000000000000b820 134 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestedData_Create@@NSS_3.2 + 355: 0000000000010d00 315 FUNC GLOBAL DEFAULT 12 NSS_SMIMESignerInfo_SaveSMIMEProfile@@NSS_3.4 + 356: 000000000001cfc0 180 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncoderStart@@NSS_3.2 + 357: 0000000000018580 540 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderIterateNext@@NSS_3.10 + 358: 0000000000224f80 32 OBJECT GLOBAL DEFAULT 20 NSSCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 359: 000000000000af10 209 FUNC GLOBAL DEFAULT 12 NSS_CMSDecoder_Update@@NSS_3.2 + 360: 0000000000009e40 13 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_EnvelopedData@@NSS_3.2 + 361: 000000000000dd50 38 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateWithSubjKeyID@@NSS_3.7 + 362: 000000000000a1d0 55 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContentEncAlg@@NSS_3.2 + 363: 000000000000b8b0 18 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestedData_Destroy@@NSS_3.2 + 364: 000000000000cbb0 199 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Update@@NSS_3.2 + 365: 0000000000013150 113 FUNC GLOBAL DEFAULT 12 SEC_PKCS12AddPasswordIntegrity@@NSS_3.2 + 366: 000000000000dd20 35 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_CreateFromDER@@NSS_3.8 + 367: 0000000000017860 1093 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderValidateBags@@NSS_3.2 + 368: 000000000000f120 805 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_ImportCerts@@NSS_3.2 + 369: 0000000000013090 190 FUNC GLOBAL DEFAULT 12 SEC_PKCS12CreateExportContext@@NSS_3.2 + 370: 0000000000012a40 114 FUNC GLOBAL DEFAULT 12 SEC_PKCS12EnableCipher@@NSS_3.2 + 371: 000000000000df20 395 FUNC GLOBAL DEFAULT 12 NSS_CMSRecipientInfo_WrapBulkKey@@NSS_3.7.2 + 372: 0000000000010340 135 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSigningTime@@NSS_3.2 + 373: 00000000000097f0 8 FUNC GLOBAL DEFAULT 12 NSS_Get_NSS_PointerToCMSGenericWrapperDataTemplate@@NSS_3.12.10 + 374: 000000000000eea0 31 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_GetContentInfo@@NSS_3.2 + 375: 000000000000c030 5 FUNC GLOBAL DEFAULT 12 NSS_CMSEncryptedData_GetContentInfo@@NSS_3.2 + 376: 000000000000fec0 7 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetVerificationStatus@@NSS_3.2 + 377: 000000000001a380 163 FUNC GLOBAL DEFAULT 12 SEC_PKCS7IncludeCertChain@@NSS_3.2 + 378: 000000000000e690 127 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_Create@@NSS_3.2 + 379: 000000000001b740 102 FUNC GLOBAL DEFAULT 12 SEC_PKCS7IsContentEmpty@@NSS_3.2 + 380: 000000000000d5e0 35 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_GetContent@@NSS_3.2 + 381: 000000000001b600 92 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderFinish@@NSS_3.2 + 382: 000000000001b6c0 8 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecoderAbort@@NSS_3.9 + 383: 0000000000009e50 13 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_SetContent_DigestedData@@NSS_3.2 + 384: 000000000001b6d0 107 FUNC GLOBAL DEFAULT 12 SEC_PKCS7ContainsCertsOrCrls@@NSS_3.4 + 385: 000000000000bac0 239 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_StartMultiple@@NSS_3.2 + 386: 0000000000009ef0 50 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetContentTypeTag@@NSS_3.2 + 387: 0000000000016e30 639 FUNC GLOBAL DEFAULT 12 SEC_PKCS12DecoderStart@@NSS_3.2 + 388: 000000000000ea70 45 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_SignerInfoCount@@NSS_3.2 + 389: 000000000000a2b0 27 FUNC GLOBAL DEFAULT 12 NSS_CMSContentInfo_GetBulkKey@@NSS_3.2 + 390: 000000000000d5b0 17 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_Copy@@NSS_3.2 + 391: 0000000000019140 14 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CopyContentInfo@@NSS_3.4 + 392: 000000000000fbc0 227 FUNC GLOBAL DEFAULT 12 NSS_CMSSignedData_CreateCertsOnly@@NSS_3.2 + 393: 000000000000d560 70 FUNC GLOBAL DEFAULT 12 NSS_CMSMessage_Destroy@@NSS_3.2 + 394: 000000000001d2b0 71 FUNC GLOBAL DEFAULT 12 SEC_PKCS7EncodeItem@@NSS_3.9.3 + 395: 00000000000113f0 341 FUNC GLOBAL DEFAULT 12 NSS_CMSType_RegisterContentType@@NSS_3.12.10 + 396: 0000000000010920 55 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSignerEmailAddress@@NSS_3.2 + 397: 000000000000c9e0 457 FUNC GLOBAL DEFAULT 12 NSS_CMSEncoder_Start@@NSS_3.2 + 398: 000000000000bc60 74 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestContext_Cancel@@NSS_3.2 + 399: 00000000000103d0 84 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_GetSigningCertificate@@NSS_3.2 + 400: 0000000000010a50 171 FUNC GLOBAL DEFAULT 12 NSS_CMSSignerInfo_AddSMIMECaps@@NSS_3.2 + 401: 000000000001b660 89 FUNC GLOBAL DEFAULT 12 SEC_PKCS7DecodeItem@@NSS_3.2 + 402: 000000000001a500 162 FUNC GLOBAL DEFAULT 12 SEC_PKCS7CreateEnvelopedData@@NSS_3.2 + 403: 000000000000b8d0 5 FUNC GLOBAL DEFAULT 12 NSS_CMSDigestedData_GetContentInfo@@NSS_3.2 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libwayland-cursor.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libwayland-cursor.so.0.txt new file mode 100644 index 000000000000..ca4ea34c11c4 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libwayland-cursor.so.0.txt @@ -0,0 +1,57 @@ +Library: /lib64/libwayland-cursor.so +Package: libwayland-cursor-1.15.0-1.el7.x86_64 + + +Symbol table '.dynsym' contains 50 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 3: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND wl_shm_pool_interface + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (3) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND unlink@GLIBC_2.2.5 (2) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fread@GLIBC_2.2.5 (2) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (4) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_proxy_marshal_constructor + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ftruncate@GLIBC_2.2.5 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mkostemp@GLIBC_2.7 (5) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (3) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (2) + 23: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (6) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND posix_fallocate@GLIBC_2.2.5 (2) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.2.5 (2) + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (2) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (2) + 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 33: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND wl_buffer_interface + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (2) + 35: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_proxy_destroy + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wl_proxy_marshal + 38: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 39: 00000000002071c0 0 NOTYPE GLOBAL DEFAULT 24 _edata + 40: 00000000002071d0 0 NOTYPE GLOBAL DEFAULT 25 _end + 41: 0000000000001410 100 FUNC GLOBAL DEFAULT 12 wl_cursor_image_get_buffer + 42: 0000000000001af0 132 FUNC GLOBAL DEFAULT 12 wl_cursor_frame_and_duration + 43: 00000000000017b0 246 FUNC GLOBAL DEFAULT 12 wl_cursor_theme_destroy + 44: 00000000000018b0 104 FUNC GLOBAL DEFAULT 12 wl_cursor_theme_get_cursor + 45: 00000000002071c0 0 NOTYPE GLOBAL DEFAULT 25 __bss_start + 46: 0000000000001000 0 FUNC GLOBAL DEFAULT 9 _init + 47: 0000000000002db4 0 FUNC GLOBAL DEFAULT 13 _fini + 48: 0000000000001b80 7 FUNC GLOBAL DEFAULT 12 wl_cursor_frame + 49: 0000000000001480 805 FUNC GLOBAL DEFAULT 12 wl_cursor_theme_load + diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libxcb.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libxcb.so.1.txt new file mode 100644 index 000000000000..ad0ecf7c291c --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libxcb.so.1.txt @@ -0,0 +1,737 @@ +Library: /lib64/libxcb.so.1 +Package: libxcb-1.13-1.el7.x86_64 + + +Symbol table '.dynsym' contains 731 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (2) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (3) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recv@GLIBC_2.2.5 (2) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XauGetBestAuthByAddr + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (2) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_broadcast@GLIBC_2.3.2 (4) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendmsg@GLIBC_2.2.5 (2) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND writev@GLIBC_2.2.5 (2) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setsockopt@GLIBC_2.2.5 (2) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fcntl@GLIBC_2.2.5 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (2) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_wait@GLIBC_2.3.2 (4) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpeername@GLIBC_2.2.5 (2) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND shutdown@GLIBC_2.2.5 (2) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (5) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.2.5 (2) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (2) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (2) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (2) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_signal@GLIBC_2.3.2 (4) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockopt@GLIBC_2.2.5 (2) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (2) + 28: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (6) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND XauDisposeAuth + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_init@GLIBC_2.3.2 (4) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.2.5 (2) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (2) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (3) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND recvmsg@GLIBC_2.2.5 (2) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND poll@GLIBC_2.2.5 (2) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (2) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_cond_destroy@GLIBC_2.3.2 (4) + 40: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getsockname@GLIBC_2.2.5 (2) + 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (2) + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gethostname@GLIBC_2.2.5 (2) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND connect@GLIBC_2.2.5 (2) + 45: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getaddrinfo@GLIBC_2.2.5 (2) + 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_init@GLIBC_2.2.5 (2) + 48: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2) + 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_lock@GLIBC_2.2.5 (2) + 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freeaddrinfo@GLIBC_2.2.5 (2) + 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.2.5 (2) + 52: 0000000000010440 13 FUNC GLOBAL DEFAULT 12 xcb_format_next + 53: 0000000000017580 158 FUNC GLOBAL DEFAULT 12 xcb_set_dashes_checked + 54: 000000000001c840 102 FUNC GLOBAL DEFAULT 12 xcb_set_close_down_mode + 55: 000000000000c440 162 FUNC GLOBAL DEFAULT 12 xcb_prefetch_maximum_request_length + 56: 000000000001ba60 54 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_value_list_sizeof + 57: 000000000001a090 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_reply + 58: 000000000001aaa0 201 FUNC GLOBAL DEFAULT 12 xcb_create_cursor_checked + 59: 0000000000013100 5 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name_name + 60: 000000000000cf70 110 FUNC GLOBAL DEFAULT 12 xcb_send_fd + 61: 0000000000013330 25 FUNC GLOBAL DEFAULT 12 xcb_change_property_data_end + 62: 00000000000157d0 154 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info + 63: 000000000001a3a0 22 FUNC GLOBAL DEFAULT 12 xcb_free_colors_pixels_end + 64: 0000000000018fb0 4 FUNC GLOBAL DEFAULT 12 xcb_poly_text_8_sizeof + 65: 0000000000019ff0 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_pixels + 66: 00000000000104b0 5 FUNC GLOBAL DEFAULT 12 xcb_depth_visuals + 67: 0000000000010a20 5 FUNC GLOBAL DEFAULT 12 xcb_setup_pixmap_formats_length + 68: 0000000000010240 19 FUNC GLOBAL DEFAULT 12 xcb_fontable_end + 69: 0000000000015a20 238 FUNC GLOBAL DEFAULT 12 xcb_set_font_path_checked + 70: 000000000001a220 8 FUNC GLOBAL DEFAULT 12 xcb_free_colors_sizeof + 71: 0000000000015230 23 FUNC GLOBAL DEFAULT 12 xcb_charinfo_end + 72: 0000000000013bf0 154 FUNC GLOBAL DEFAULT 12 xcb_grab_pointer_unchecked + 73: 0000000000015db0 125 FUNC GLOBAL DEFAULT 12 xcb_create_pixmap_checked + 74: 0000000000019170 172 FUNC GLOBAL DEFAULT 12 xcb_poly_text_16_checked + 75: 000000000001a7a0 8 FUNC GLOBAL DEFAULT 12 xcb_query_colors_sizeof + 76: 0000000000011bc0 183 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_aux_checked + 77: 0000000000014da0 105 FUNC GLOBAL DEFAULT 12 xcb_get_input_focus + 78: 0000000000014a40 124 FUNC GLOBAL DEFAULT 12 xcb_translate_coordinates + 79: 000000000001a550 37 FUNC GLOBAL DEFAULT 12 xcb_store_colors_items_length + 80: 0000000000019cd0 133 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_unchecked + 81: 0000000000017880 18 FUNC GLOBAL DEFAULT 12 xcb_set_clip_rectangles_rectangles_length + 82: 0000000000013900 133 FUNC GLOBAL DEFAULT 12 xcb_convert_selection_checked + 83: 00000000000107c0 18 FUNC GLOBAL DEFAULT 12 xcb_setup_failed_reason_end + 84: 00000000000136d0 5 FUNC GLOBAL DEFAULT 12 xcb_list_properties_atoms_length + 85: 0000000000018800 5 FUNC GLOBAL DEFAULT 12 xcb_fill_poly_points + 86: 0000000000014e90 105 FUNC GLOBAL DEFAULT 12 xcb_query_keymap + 87: 0000000000011f20 109 FUNC GLOBAL DEFAULT 12 xcb_destroy_subwindows_checked + 88: 0000000000011c80 180 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_aux + 89: 0000000000014280 106 FUNC GLOBAL DEFAULT 12 xcb_ungrab_keyboard + 90: 00000000000107b0 5 FUNC GLOBAL DEFAULT 12 xcb_setup_failed_reason_length + 91: 000000000000b360 0 FUNC GLOBAL DEFAULT 9 _init + 92: 000000000001cd50 8 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping_sizeof + 93: 0000000000015c90 105 FUNC GLOBAL DEFAULT 12 xcb_get_font_path + 94: 0000000000013d10 106 FUNC GLOBAL DEFAULT 12 xcb_ungrab_pointer + 95: 000000000001b5b0 11 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping_sizeof + 96: 0000000000016940 182 FUNC GLOBAL DEFAULT 12 xcb_create_gc_aux + 97: 0000000000017f10 5 FUNC GLOBAL DEFAULT 12 xcb_poly_point_points + 98: 00000000000112c0 280 FUNC GLOBAL DEFAULT 12 xcb_create_window_aux_checked + 99: 00000000000176c0 5 FUNC GLOBAL DEFAULT 12 xcb_set_dashes_dashes + 100: 000000000001c530 63 FUNC GLOBAL DEFAULT 12 xcb_host_end + 101: 000000000001a400 153 FUNC GLOBAL DEFAULT 12 xcb_store_colors_checked + 102: 0000000000015910 5 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_properties + 103: 0000000000014590 106 FUNC GLOBAL DEFAULT 12 xcb_allow_events + 104: 0000000000015da0 5 FUNC GLOBAL DEFAULT 12 xcb_get_font_path_reply + 105: 00000000000136c0 5 FUNC GLOBAL DEFAULT 12 xcb_list_properties_atoms + 106: 0000000000015200 19 FUNC GLOBAL DEFAULT 12 xcb_fontprop_end + 107: 000000000001c6e0 5 FUNC GLOBAL DEFAULT 12 xcb_list_hosts_reply + 108: 0000000000015220 13 FUNC GLOBAL DEFAULT 12 xcb_charinfo_next + 109: 0000000000010ab0 48 FUNC GLOBAL DEFAULT 12 xcb_setup_next + 110: 0000000000018f60 5 FUNC GLOBAL DEFAULT 12 xcb_get_image_data + 111: 00000000000155a0 17 FUNC GLOBAL DEFAULT 12 xcb_str_name_end + 112: 000000000001d5d0 5 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list_ids + 113: 0000000000019670 118 FUNC GLOBAL DEFAULT 12 xcb_create_colormap_checked + 114: 000000000000ed00 154 FUNC GLOBAL DEFAULT 12 xcb_get_extension_data + 115: 0000000000013320 12 FUNC GLOBAL DEFAULT 12 xcb_change_property_data_length + 116: 000000000001c2a0 102 FUNC GLOBAL DEFAULT 12 xcb_get_screen_saver_unchecked + 117: 00000000000192e0 12 FUNC GLOBAL DEFAULT 12 xcb_poly_text_16_items_length + 118: 0000000000018ec0 149 FUNC GLOBAL DEFAULT 12 xcb_get_image_unchecked + 119: 000000000001d300 110 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_version + 120: 0000000000013650 106 FUNC GLOBAL DEFAULT 12 xcb_list_properties_unchecked + 121: 000000000001b270 83 FUNC GLOBAL DEFAULT 12 xcb_list_extensions_sizeof + 122: 0000000000010230 13 FUNC GLOBAL DEFAULT 12 xcb_fontable_next + 123: 0000000000018600 5 FUNC GLOBAL DEFAULT 12 xcb_poly_arc_arcs + 124: 000000000001a030 26 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_masks + 125: 0000000000010620 63 FUNC GLOBAL DEFAULT 12 xcb_screen_end + 126: 000000000000bb30 61 FUNC GLOBAL DEFAULT 12 xcb_get_setup + 127: 0000000000015eb0 109 FUNC GLOBAL DEFAULT 12 xcb_free_pixmap_checked + 128: 000000000001a9f0 157 FUNC GLOBAL DEFAULT 12 xcb_lookup_color_unchecked + 129: 0000000000010680 5 FUNC GLOBAL DEFAULT 12 xcb_setup_request_authorization_protocol_name + 130: 0000000000014a10 21 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events_events_iterator + 131: 00000000000109e0 18 FUNC GLOBAL DEFAULT 12 xcb_setup_vendor_end + 132: 0000000000018480 38 FUNC GLOBAL DEFAULT 12 xcb_poly_rectangle_rectangles_iterator + 133: 0000000000017b90 174 FUNC GLOBAL DEFAULT 12 xcb_copy_area + 134: 000000000001be30 5 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_control_reply + 135: 0000000000014420 121 FUNC GLOBAL DEFAULT 12 xcb_ungrab_key_checked + 136: 000000000001b700 5 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping_reply + 137: 00000000000108a0 48 FUNC GLOBAL DEFAULT 12 xcb_setup_authenticate_next + 138: 0000000000014d30 110 FUNC GLOBAL DEFAULT 12 xcb_set_input_focus + 139: 0000000000015970 5 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_name_length + 140: 000000000001a3d0 23 FUNC GLOBAL DEFAULT 12 xcb_coloritem_end + 141: 0000000000016a00 5 FUNC GLOBAL DEFAULT 12 xcb_create_gc_value_list + 142: 000000000001bd40 5 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_value_list + 143: 000000000001d460 101 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_range_unchecked + 144: 0000000000018870 153 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_rectangle_checked + 145: 0000000000015d00 102 FUNC GLOBAL DEFAULT 12 xcb_get_font_path_unchecked + 146: 0000000000014f90 160 FUNC GLOBAL DEFAULT 12 xcb_open_font_checked + 147: 000000000001b410 171 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_mapping_checked + 148: 000000000001a930 5 FUNC GLOBAL DEFAULT 12 xcb_query_colors_reply + 149: 000000000001c130 124 FUNC GLOBAL DEFAULT 12 xcb_set_screen_saver_checked + 150: 0000000000010410 13 FUNC GLOBAL DEFAULT 12 xcb_arc_next + 151: 00000000000156e0 151 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_unchecked + 152: 000000000001a370 5 FUNC GLOBAL DEFAULT 12 xcb_free_colors_pixels + 153: 0000000000010380 13 FUNC GLOBAL DEFAULT 12 xcb_button_next + 154: 0000000000019d60 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_reply + 155: 0000000000018150 8 FUNC GLOBAL DEFAULT 12 xcb_poly_segment_sizeof + 156: 0000000000018b70 37 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_arc_arcs_length + 157: 000000000001cf40 146 FUNC GLOBAL DEFAULT 12 xcb_set_modifier_mapping_unchecked + 158: 000000000001b990 204 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_value_list_unpack + 159: 0000000000012e60 5 FUNC GLOBAL DEFAULT 12 xcb_query_tree_children + 160: 000000000000cfe0 273 FUNC GLOBAL DEFAULT 12 xcb_take_socket + 161: 0000000000014a00 4 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events_events_length + 162: 0000000000014520 109 FUNC GLOBAL DEFAULT 12 xcb_allow_events_checked + 163: 0000000000011a80 24 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_sizeof + 164: 0000000000016a10 1265 FUNC GLOBAL DEFAULT 12 xcb_change_gc_value_list_serialize + 165: 0000000000019310 8 FUNC GLOBAL DEFAULT 12 xcb_image_text_8_sizeof + 166: 0000000000018830 38 FUNC GLOBAL DEFAULT 12 xcb_fill_poly_points_iterator + 167: 000000000001ce80 5 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping_reply + 168: 000000000001b4c0 168 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_mapping + 169: 000000000000cf40 14 FUNC GLOBAL DEFAULT 12 xcb_send_request_with_fds + 170: 0000000000017f70 8 FUNC GLOBAL DEFAULT 12 xcb_poly_line_sizeof + 171: 00000000000150d0 5 FUNC GLOBAL DEFAULT 12 xcb_open_font_name + 172: 0000000000013880 106 FUNC GLOBAL DEFAULT 12 xcb_get_selection_owner_unchecked + 173: 000000000001b580 12 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_mapping_keysyms_length + 174: 00000000000184b0 11 FUNC GLOBAL DEFAULT 12 xcb_poly_arc_sizeof + 175: 0000000000017f20 18 FUNC GLOBAL DEFAULT 12 xcb_poly_point_points_length + 176: 0000000000014830 106 FUNC GLOBAL DEFAULT 12 xcb_query_pointer_unchecked + 177: 0000000000019ef0 120 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells + 178: 0000000000010450 19 FUNC GLOBAL DEFAULT 12 xcb_format_end + 179: 00000000000157b0 5 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_reply + 180: 000000000001a770 13 FUNC GLOBAL DEFAULT 12 xcb_rgb_next + 181: 000000000001d560 101 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list_unchecked + 182: 0000000000019b10 109 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps + 183: 0000000000010140 13 FUNC GLOBAL DEFAULT 12 xcb_font_next + 184: 000000000001bf20 133 FUNC GLOBAL DEFAULT 12 xcb_change_pointer_control_checked + 185: 0000000000019130 12 FUNC GLOBAL DEFAULT 12 xcb_poly_text_8_items_length + 186: 0000000000015b10 235 FUNC GLOBAL DEFAULT 12 xcb_set_font_path + 187: 0000000000013f60 118 FUNC GLOBAL DEFAULT 12 xcb_ungrab_button + 188: 00000000000113e0 277 FUNC GLOBAL DEFAULT 12 xcb_create_window_aux + 189: 000000000001a750 18 FUNC GLOBAL DEFAULT 12 xcb_store_named_color_name_end + 190: 000000000001ad10 198 FUNC GLOBAL DEFAULT 12 xcb_create_glyph_cursor + 191: 0000000000015350 5 FUNC GLOBAL DEFAULT 12 xcb_query_font_properties + 192: 0000000000014390 141 FUNC GLOBAL DEFAULT 12 xcb_grab_key + 193: 000000000001d5e0 4 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list_ids_length + 194: 0000000000010690 5 FUNC GLOBAL DEFAULT 12 xcb_setup_request_authorization_protocol_name_length + 195: 0000000000013d80 174 FUNC GLOBAL DEFAULT 12 xcb_grab_button_checked + 196: 0000000000012c10 106 FUNC GLOBAL DEFAULT 12 xcb_circulate_window + 197: 0000000000010330 18 FUNC GLOBAL DEFAULT 12 xcb_keycode_end + 198: 0000000000018450 5 FUNC GLOBAL DEFAULT 12 xcb_poly_rectangle_rectangles + 199: 0000000000018a10 11 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_arc_sizeof + 200: 0000000000018120 13 FUNC GLOBAL DEFAULT 12 xcb_segment_next + 201: 000000000001c760 102 FUNC GLOBAL DEFAULT 12 xcb_set_access_control + 202: 0000000000018310 153 FUNC GLOBAL DEFAULT 12 xcb_poly_rectangle_checked + 203: 0000000000012480 109 FUNC GLOBAL DEFAULT 12 xcb_unmap_subwindows_checked + 204: 0000000000010360 19 FUNC GLOBAL DEFAULT 12 xcb_keycode32_end + 205: 0000000000010ae0 63 FUNC GLOBAL DEFAULT 12 xcb_setup_end + 206: 000000000001d0f0 8 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping_keycodes_length + 207: 000000000000da50 123 FUNC GLOBAL DEFAULT 12 xcb_wait_for_reply + 208: 0000000000011b30 140 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes + 209: 0000000000012250 106 FUNC GLOBAL DEFAULT 12 xcb_map_window + 210: 0000000000010260 13 FUNC GLOBAL DEFAULT 12 xcb_bool32_next + 211: 0000000000015780 5 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_names_length + 212: 0000000000018ce0 232 FUNC GLOBAL DEFAULT 12 xcb_put_image + 213: 00000000000180f0 38 FUNC GLOBAL DEFAULT 12 xcb_poly_line_points_iterator + 214: 0000000000018b60 5 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_arc_arcs + 215: 000000000001c500 48 FUNC GLOBAL DEFAULT 12 xcb_host_next + 216: 00000000000106f0 38 FUNC GLOBAL DEFAULT 12 xcb_setup_request_authorization_protocol_data_end + 217: 000000000001a8f0 5 FUNC GLOBAL DEFAULT 12 xcb_query_colors_colors + 218: 0000000000011f90 106 FUNC GLOBAL DEFAULT 12 xcb_destroy_subwindows + 219: 000000000001bb50 134 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control + 220: 0000000000014a30 5 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events_reply + 221: 00000000000173a0 180 FUNC GLOBAL DEFAULT 12 xcb_change_gc_aux + 222: 00000000000183b0 150 FUNC GLOBAL DEFAULT 12 xcb_poly_rectangle + 223: 0000000000015f90 1265 FUNC GLOBAL DEFAULT 12 xcb_create_gc_value_list_serialize + 224: 000000000001c5d0 105 FUNC GLOBAL DEFAULT 12 xcb_list_hosts + 225: 0000000000010270 19 FUNC GLOBAL DEFAULT 12 xcb_bool32_end + 226: 00000000000182a0 5 FUNC GLOBAL DEFAULT 12 xcb_poly_segment_segments + 227: 000000000001a680 164 FUNC GLOBAL DEFAULT 12 xcb_store_named_color + 228: 0000000000019070 169 FUNC GLOBAL DEFAULT 12 xcb_poly_text_8 + 229: 0000000000012d70 12 FUNC GLOBAL DEFAULT 12 xcb_query_tree_sizeof + 230: 00000000000189c0 18 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_rectangle_rectangles_length + 231: 00000000000102c0 13 FUNC GLOBAL DEFAULT 12 xcb_timestamp_next + 232: 000000000001bbe0 167 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_aux_checked + 233: 000000000001a580 57 FUNC GLOBAL DEFAULT 12 xcb_store_colors_items_iterator + 234: 0000000000018e10 11 FUNC GLOBAL DEFAULT 12 xcb_get_image_sizeof + 235: 000000000001b6e0 17 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping_keysyms_end + 236: 000000000000bb70 58 FUNC GLOBAL DEFAULT 12 xcb_get_file_descriptor + 237: 00000000000166e0 54 FUNC GLOBAL DEFAULT 12 xcb_create_gc_value_list_sizeof + 238: 0000000000018460 18 FUNC GLOBAL DEFAULT 12 xcb_poly_rectangle_rectangles_length + 239: 00000000000176e0 18 FUNC GLOBAL DEFAULT 12 xcb_set_dashes_dashes_end + 240: 0000000000017160 54 FUNC GLOBAL DEFAULT 12 xcb_change_gc_value_list_sizeof + 241: 0000000000018fa0 5 FUNC GLOBAL DEFAULT 12 xcb_get_image_reply + 242: 000000000001cb90 102 FUNC GLOBAL DEFAULT 12 xcb_force_screen_saver + 243: 000000000000f6b0 35 FUNC GLOBAL DEFAULT 12 xcb_sumof + 244: 000000000001c4d0 5 FUNC GLOBAL DEFAULT 12 xcb_host_address_length + 245: 000000000001d5f0 17 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list_ids_end + 246: 000000000001cc10 145 FUNC GLOBAL DEFAULT 12 xcb_set_pointer_mapping + 247: 0000000000013ab0 151 FUNC GLOBAL DEFAULT 12 xcb_send_event + 248: 000000000001d0e0 5 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping_keycodes + 249: 00000000000153d0 48 FUNC GLOBAL DEFAULT 12 xcb_query_font_char_infos_iterator + 250: 0000000000013990 124 FUNC GLOBAL DEFAULT 12 xcb_convert_selection + 251: 00000000000152e0 106 FUNC GLOBAL DEFAULT 12 xcb_query_font_unchecked + 252: 0000000000019b00 12 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps_sizeof + 253: 000000000001d000 105 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping + 254: 00000000002273a0 0 NOTYPE GLOBAL DEFAULT 24 _edata + 255: 0000000000012d80 109 FUNC GLOBAL DEFAULT 12 xcb_query_tree + 256: 000000000001aa90 5 FUNC GLOBAL DEFAULT 12 xcb_lookup_color_reply + 257: 0000000000018be0 4 FUNC GLOBAL DEFAULT 12 xcb_put_image_sizeof + 258: 0000000000019480 5 FUNC GLOBAL DEFAULT 12 xcb_image_text_8_string + 259: 000000000000dcb0 260 FUNC GLOBAL DEFAULT 12 xcb_wait_for_special_event + 260: 000000000001b2d0 105 FUNC GLOBAL DEFAULT 12 xcb_list_extensions + 261: 000000000001ade0 109 FUNC GLOBAL DEFAULT 12 xcb_free_cursor_checked + 262: 000000000001a4a0 150 FUNC GLOBAL DEFAULT 12 xcb_store_colors + 263: 0000000000019640 5 FUNC GLOBAL DEFAULT 12 xcb_image_text_16_string_length + 264: 00000000000138f0 5 FUNC GLOBAL DEFAULT 12 xcb_get_selection_owner_reply + 265: 0000000000019ec0 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_named_color_reply + 266: 0000000000018fc0 172 FUNC GLOBAL DEFAULT 12 xcb_poly_text_8_checked + 267: 0000000000015f20 106 FUNC GLOBAL DEFAULT 12 xcb_free_pixmap + 268: 0000000000014ac0 121 FUNC GLOBAL DEFAULT 12 xcb_translate_coordinates_unchecked + 269: 00000000000101d0 13 FUNC GLOBAL DEFAULT 12 xcb_atom_next + 270: 0000000000015030 157 FUNC GLOBAL DEFAULT 12 xcb_open_font + 271: 0000000000015640 154 FUNC GLOBAL DEFAULT 12 xcb_list_fonts + 272: 000000000001c1b0 121 FUNC GLOBAL DEFAULT 12 xcb_set_screen_saver + 273: 00000000000103f0 19 FUNC GLOBAL DEFAULT 12 xcb_rectangle_end + 274: 00000000000100c0 19 FUNC GLOBAL DEFAULT 12 xcb_window_end + 275: 0000000000011e30 5 FUNC GLOBAL DEFAULT 12 xcb_get_window_attributes_reply + 276: 0000000000017460 5 FUNC GLOBAL DEFAULT 12 xcb_change_gc_value_list + 277: 0000000000017f80 154 FUNC GLOBAL DEFAULT 12 xcb_poly_line_checked + 278: 0000000000013fe0 125 FUNC GLOBAL DEFAULT 12 xcb_change_active_pointer_grab_checked + 279: 00000000000189e0 38 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_rectangle_rectangles_iterator + 280: 00000000000120e0 124 FUNC GLOBAL DEFAULT 12 xcb_reparent_window_checked + 281: 0000000000013e30 171 FUNC GLOBAL DEFAULT 12 xcb_grab_button + 282: 0000000000018200 150 FUNC GLOBAL DEFAULT 12 xcb_poly_segment + 283: 0000000000011eb0 106 FUNC GLOBAL DEFAULT 12 xcb_destroy_window + 284: 00000000000148f0 117 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events + 285: 0000000000015400 5 FUNC GLOBAL DEFAULT 12 xcb_query_font_reply + 286: 000000000000d100 63 FUNC GLOBAL DEFAULT 12 xcb_flush + 287: 0000000000012ad0 189 FUNC GLOBAL DEFAULT 12 xcb_configure_window_aux + 288: 0000000000018300 8 FUNC GLOBAL DEFAULT 12 xcb_poly_rectangle_sizeof + 289: 000000000001d210 101 FUNC GLOBAL DEFAULT 12 xcb_big_requests_enable + 290: 00000000000157c0 8 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_sizeof + 291: 000000000000bbb0 3 FUNC GLOBAL DEFAULT 12 xcb_connection_has_error + 292: 000000000001d4d0 5 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_range_reply + 293: 000000000001a0a0 12 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes_sizeof + 294: 000000000001d120 5 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping_reply + 295: 00000000000142f0 149 FUNC GLOBAL DEFAULT 12 xcb_grab_key_checked + 296: 000000000001a5c0 8 FUNC GLOBAL DEFAULT 12 xcb_store_named_color_sizeof + 297: 000000000001a5d0 167 FUNC GLOBAL DEFAULT 12 xcb_store_named_color_checked + 298: 0000000000013810 109 FUNC GLOBAL DEFAULT 12 xcb_get_selection_owner + 299: 00000000000103e0 13 FUNC GLOBAL DEFAULT 12 xcb_rectangle_next + 300: 00000000000110e0 233 FUNC GLOBAL DEFAULT 12 xcb_create_window_checked + 301: 00000000000194d0 176 FUNC GLOBAL DEFAULT 12 xcb_image_text_16_checked + 302: 00000000000146e0 105 FUNC GLOBAL DEFAULT 12 xcb_ungrab_server_checked + 303: 000000000000e8a0 322 FUNC GLOBAL DEFAULT 12 xcb_poll_for_reply + 304: 0000000000015580 5 FUNC GLOBAL DEFAULT 12 xcb_str_name + 305: 00000000000104a0 15 FUNC GLOBAL DEFAULT 12 xcb_depth_sizeof + 306: 0000000000018910 150 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_rectangle + 307: 0000000000012160 121 FUNC GLOBAL DEFAULT 12 xcb_reparent_window + 308: 000000000001c320 8 FUNC GLOBAL DEFAULT 12 xcb_change_hosts_sizeof + 309: 000000000001a3c0 13 FUNC GLOBAL DEFAULT 12 xcb_coloritem_next + 310: 000000000001a2d0 150 FUNC GLOBAL DEFAULT 12 xcb_free_colors + 311: 000000000001d370 107 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_version_unchecked + 312: 0000000000012ba0 109 FUNC GLOBAL DEFAULT 12 xcb_circulate_window_checked + 313: 0000000000013440 18 FUNC GLOBAL DEFAULT 12 xcb_get_property_sizeof + 314: 0000000000017700 8 FUNC GLOBAL DEFAULT 12 xcb_set_clip_rectangles_sizeof + 315: 0000000000015790 22 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_names_iterator + 316: 00000000000102a0 19 FUNC GLOBAL DEFAULT 12 xcb_visualid_end + 317: 000000000000c6d0 86 FUNC GLOBAL DEFAULT 12 xcb_writev + 318: 0000000000019f70 117 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_unchecked + 319: 0000000000018750 175 FUNC GLOBAL DEFAULT 12 xcb_fill_poly + 320: 000000000001b570 5 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_mapping_keysyms + 321: 0000000000010170 13 FUNC GLOBAL DEFAULT 12 xcb_gcontext_next + 322: 000000000001caf0 5 FUNC GLOBAL DEFAULT 12 xcb_rotate_properties_atoms_length + 323: 0000000000018640 57 FUNC GLOBAL DEFAULT 12 xcb_poly_arc_arcs_iterator + 324: 0000000000013460 134 FUNC GLOBAL DEFAULT 12 xcb_get_property + 325: 0000000000011500 5 FUNC GLOBAL DEFAULT 12 xcb_create_window_value_list + 326: 00000000000101b0 19 FUNC GLOBAL DEFAULT 12 xcb_colormap_end + 327: 000000000001d1a0 102 FUNC GLOBAL DEFAULT 12 xcb_no_operation + 328: 0000000000013710 117 FUNC GLOBAL DEFAULT 12 xcb_set_selection_owner_checked + 329: 0000000000019b80 106 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps_unchecked + 330: 000000000001ce40 5 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping_map + 331: 000000000001c120 5 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_control_reply + 332: 00000000000104d0 22 FUNC GLOBAL DEFAULT 12 xcb_depth_visuals_iterator + 333: 0000000000014970 117 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events_unchecked + 334: 00000000000172e0 183 FUNC GLOBAL DEFAULT 12 xcb_change_gc_aux_checked + 335: 0000000000017d00 185 FUNC GLOBAL DEFAULT 12 xcb_copy_plane + 336: 0000000000019d80 160 FUNC GLOBAL DEFAULT 12 xcb_alloc_named_color + 337: 0000000000015370 22 FUNC GLOBAL DEFAULT 12 xcb_query_font_properties_iterator + 338: 0000000000015590 4 FUNC GLOBAL DEFAULT 12 xcb_str_name_length + 339: 000000000001bac0 137 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_checked + 340: 00000000000177c0 166 FUNC GLOBAL DEFAULT 12 xcb_set_clip_rectangles + 341: 0000000000016f10 580 FUNC GLOBAL DEFAULT 12 xcb_change_gc_value_list_unpack + 342: 0000000000016490 580 FUNC GLOBAL DEFAULT 12 xcb_create_gc_value_list_unpack + 343: 0000000000019c30 5 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps_reply + 344: 00000000000147c0 109 FUNC GLOBAL DEFAULT 12 xcb_query_pointer + 345: 0000000000010a60 5 FUNC GLOBAL DEFAULT 12 xcb_setup_roots_length + 346: 0000000000010300 19 FUNC GLOBAL DEFAULT 12 xcb_keysym_end + 347: 0000000000014c00 165 FUNC GLOBAL DEFAULT 12 xcb_warp_pointer + 348: 0000000000012eb0 8 FUNC GLOBAL DEFAULT 12 xcb_intern_atom_sizeof + 349: 000000000001ccb0 142 FUNC GLOBAL DEFAULT 12 xcb_set_pointer_mapping_unchecked + 350: 000000000001a010 18 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_pixels_end + 351: 0000000000010750 63 FUNC GLOBAL DEFAULT 12 xcb_setup_request_end + 352: 0000000000010120 19 FUNC GLOBAL DEFAULT 12 xcb_cursor_end + 353: 0000000000010860 5 FUNC GLOBAL DEFAULT 12 xcb_setup_authenticate_reason + 354: 00000000000194a0 18 FUNC GLOBAL DEFAULT 12 xcb_image_text_8_string_end + 355: 000000000001a950 160 FUNC GLOBAL DEFAULT 12 xcb_lookup_color + 356: 0000000000010320 13 FUNC GLOBAL DEFAULT 12 xcb_keycode_next + 357: 0000000000010870 8 FUNC GLOBAL DEFAULT 12 xcb_setup_authenticate_reason_length + 358: 000000000001c640 102 FUNC GLOBAL DEFAULT 12 xcb_list_hosts_unchecked + 359: 0000000000018f80 20 FUNC GLOBAL DEFAULT 12 xcb_get_image_data_end + 360: 000000000001b1c0 153 FUNC GLOBAL DEFAULT 12 xcb_query_extension_unchecked + 361: 00000000000155c0 48 FUNC GLOBAL DEFAULT 12 xcb_str_next + 362: 0000000000016720 24 FUNC GLOBAL DEFAULT 12 xcb_create_gc_sizeof + 363: 000000000001a730 5 FUNC GLOBAL DEFAULT 12 xcb_store_named_color_name + 364: 000000000001a940 8 FUNC GLOBAL DEFAULT 12 xcb_lookup_color_sizeof + 365: 000000000001ca40 157 FUNC GLOBAL DEFAULT 12 xcb_rotate_properties + 366: 0000000000015390 37 FUNC GLOBAL DEFAULT 12 xcb_query_font_char_infos + 367: 0000000000018bf0 235 FUNC GLOBAL DEFAULT 12 xcb_put_image_checked + 368: 00000000000182b0 18 FUNC GLOBAL DEFAULT 12 xcb_poly_segment_segments_length + 369: 0000000000010850 12 FUNC GLOBAL DEFAULT 12 xcb_setup_authenticate_sizeof + 370: 0000000000013ca0 109 FUNC GLOBAL DEFAULT 12 xcb_ungrab_pointer_checked + 371: 000000000001bdc0 102 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_control_unchecked + 372: 000000000001bfb0 133 FUNC GLOBAL DEFAULT 12 xcb_change_pointer_control + 373: 0000000000013140 5 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name_reply + 374: 000000000001c920 106 FUNC GLOBAL DEFAULT 12 xcb_kill_client + 375: 0000000000018ac0 154 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_arc + 376: 000000000001baa0 24 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_sizeof + 377: 00000000000124f0 106 FUNC GLOBAL DEFAULT 12 xcb_unmap_subwindows + 378: 0000000000018160 153 FUNC GLOBAL DEFAULT 12 xcb_poly_segment_checked + 379: 000000000001a1d0 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes_pixels + 380: 0000000000010880 23 FUNC GLOBAL DEFAULT 12 xcb_setup_authenticate_reason_end + 381: 0000000000018860 8 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_rectangle_sizeof + 382: 0000000000019a90 106 FUNC GLOBAL DEFAULT 12 xcb_uninstall_colormap + 383: 0000000000017dd0 154 FUNC GLOBAL DEFAULT 12 xcb_poly_point_checked + 384: 0000000000013590 15 FUNC GLOBAL DEFAULT 12 xcb_get_property_value_length + 385: 000000000001a850 146 FUNC GLOBAL DEFAULT 12 xcb_query_colors_unchecked + 386: 000000000001c7d0 105 FUNC GLOBAL DEFAULT 12 xcb_set_close_down_mode_checked + 387: 00000000000179b0 135 FUNC GLOBAL DEFAULT 12 xcb_clear_area_checked + 388: 000000000000bbc0 154 FUNC GLOBAL DEFAULT 12 xcb_disconnect + 389: 000000000001c470 5 FUNC GLOBAL DEFAULT 12 xcb_change_hosts_address + 390: 0000000000010470 13 FUNC GLOBAL DEFAULT 12 xcb_visualtype_next + 391: 000000000001c6f0 105 FUNC GLOBAL DEFAULT 12 xcb_set_access_control_checked + 392: 0000000000019490 5 FUNC GLOBAL DEFAULT 12 xcb_image_text_8_string_length + 393: 000000000000eb70 10 FUNC GLOBAL DEFAULT 12 xcb_poll_for_queued_event + 394: 0000000000019160 4 FUNC GLOBAL DEFAULT 12 xcb_poly_text_16_sizeof + 395: 000000000001a140 133 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes_unchecked + 396: 0000000000010390 18 FUNC GLOBAL DEFAULT 12 xcb_button_end + 397: 0000000000018610 37 FUNC GLOBAL DEFAULT 12 xcb_poly_arc_arcs_length + 398: 0000000000013c90 5 FUNC GLOBAL DEFAULT 12 xcb_grab_pointer_reply + 399: 000000000001ab70 198 FUNC GLOBAL DEFAULT 12 xcb_create_cursor + 400: 000000000001b5c0 117 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping + 401: 000000000000d520 76 FUNC GLOBAL DEFAULT 12 xcb_discard_reply64 + 402: 0000000000015250 18 FUNC GLOBAL DEFAULT 12 xcb_query_font_sizeof + 403: 000000000001c310 5 FUNC GLOBAL DEFAULT 12 xcb_get_screen_saver_reply + 404: 00000000000194c0 9 FUNC GLOBAL DEFAULT 12 xcb_image_text_16_sizeof + 405: 0000000000012870 57 FUNC GLOBAL DEFAULT 12 xcb_configure_window_value_list_sizeof + 406: 000000000000bc60 731 FUNC GLOBAL DEFAULT 12 xcb_connect_to_fd + 407: 000000000000db30 248 FUNC GLOBAL DEFAULT 12 xcb_request_check + 408: 0000000000019bf0 5 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps_cmaps + 409: 000000000001aec0 155 FUNC GLOBAL DEFAULT 12 xcb_recolor_cursor_checked + 410: 00000000000101e0 19 FUNC GLOBAL DEFAULT 12 xcb_atom_end + 411: 0000000000012970 149 FUNC GLOBAL DEFAULT 12 xcb_configure_window + 412: 000000000001cc00 8 FUNC GLOBAL DEFAULT 12 xcb_set_pointer_mapping_sizeof + 413: 000000000001cea0 149 FUNC GLOBAL DEFAULT 12 xcb_set_modifier_mapping + 414: 00000000000135a0 28 FUNC GLOBAL DEFAULT 12 xcb_get_property_value_end + 415: 0000000000011d50 109 FUNC GLOBAL DEFAULT 12 xcb_get_window_attributes + 416: 0000000000013700 5 FUNC GLOBAL DEFAULT 12 xcb_list_properties_reply + 417: 00000000000184c0 157 FUNC GLOBAL DEFAULT 12 xcb_poly_arc_checked + 418: 0000000000018ba0 57 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_arc_arcs_iterator + 419: 0000000000014b40 5 FUNC GLOBAL DEFAULT 12 xcb_translate_coordinates_reply + 420: 000000000001ce50 5 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping_map_length + 421: 0000000000012330 106 FUNC GLOBAL DEFAULT 12 xcb_map_subwindows + 422: 00000000000135c0 5 FUNC GLOBAL DEFAULT 12 xcb_get_property_reply + 423: 00000000000135e0 109 FUNC GLOBAL DEFAULT 12 xcb_list_properties + 424: 0000000000019e20 157 FUNC GLOBAL DEFAULT 12 xcb_alloc_named_color_unchecked + 425: 00000000000159b0 5 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_reply + 426: 00000000000148b0 13 FUNC GLOBAL DEFAULT 12 xcb_timecoord_next + 427: 0000000000013350 117 FUNC GLOBAL DEFAULT 12 xcb_delete_property_checked + 428: 0000000000013020 109 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name + 429: 000000000001b120 156 FUNC GLOBAL DEFAULT 12 xcb_query_extension + 430: 00000000000149f0 5 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events_events + 431: 000000000001af60 152 FUNC GLOBAL DEFAULT 12 xcb_recolor_cursor + 432: 00000000000197e0 106 FUNC GLOBAL DEFAULT 12 xcb_free_colormap + 433: 000000000000eda0 79 FUNC GLOBAL DEFAULT 12 xcb_prefetch_extension_data + 434: 0000000000014750 102 FUNC GLOBAL DEFAULT 12 xcb_ungrab_server + 435: 0000000000011080 54 FUNC GLOBAL DEFAULT 12 xcb_create_window_value_list_sizeof + 436: 000000000001b6d0 4 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping_keysyms_length + 437: 0000000000019320 173 FUNC GLOBAL DEFAULT 12 xcb_image_text_8_checked + 438: 000000000001c8b0 109 FUNC GLOBAL DEFAULT 12 xcb_kill_client_checked + 439: 000000000001c480 5 FUNC GLOBAL DEFAULT 12 xcb_change_hosts_address_length + 440: 000000000000f660 66 FUNC GLOBAL DEFAULT 12 xcb_popcount + 441: 000000000001bd50 105 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_control + 442: 00000000000123a0 109 FUNC GLOBAL DEFAULT 12 xcb_unmap_window_checked + 443: 0000000000011e40 109 FUNC GLOBAL DEFAULT 12 xcb_destroy_window_checked + 444: 0000000000010a70 49 FUNC GLOBAL DEFAULT 12 xcb_setup_roots_iterator + 445: 0000000000010090 19 FUNC GLOBAL DEFAULT 12 xcb_char2b_end + 446: 0000000000012ec0 156 FUNC GLOBAL DEFAULT 12 xcb_intern_atom + 447: 000000000001a0b0 135 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes + 448: 000000000000dad0 91 FUNC GLOBAL DEFAULT 12 xcb_wait_for_reply64 + 449: 000000000000f6f0 1140 FUNC GLOBAL DEFAULT 12 xcb_connect_to_display_with_auth_info + 450: 0000000000017e70 151 FUNC GLOBAL DEFAULT 12 xcb_poly_point + 451: 000000000001d610 5 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list_reply + 452: 000000000000cf60 14 FUNC GLOBAL DEFAULT 12 xcb_send_request + 453: 0000000000012a10 192 FUNC GLOBAL DEFAULT 12 xcb_configure_window_aux_checked + 454: 000000000001a740 5 FUNC GLOBAL DEFAULT 12 xcb_store_named_color_name_length + 455: 00000000000178a0 38 FUNC GLOBAL DEFAULT 12 xcb_set_clip_rectangles_rectangles_iterator + 456: 000000000001a050 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_masks_length + 457: 000000000001b640 117 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping_unchecked + 458: 0000000000012e70 5 FUNC GLOBAL DEFAULT 12 xcb_query_tree_children_length + 459: 000000000000ca10 1326 FUNC GLOBAL DEFAULT 12 xcb_send_request_with_fds64 + 460: 0000000000010290 13 FUNC GLOBAL DEFAULT 12 xcb_visualid_next + 461: 000000000001be40 105 FUNC GLOBAL DEFAULT 12 xcb_bell_checked + 462: 00000000000182d0 38 FUNC GLOBAL DEFAULT 12 xcb_poly_segment_segments_iterator + 463: 000000000001d4e0 11 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list_sizeof + 464: 000000000001b6c0 5 FUNC GLOBAL DEFAULT 12 xcb_get_keyboard_mapping_keysyms + 465: 000000000001cdd0 102 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping_unchecked + 466: 00000000000180d0 18 FUNC GLOBAL DEFAULT 12 xcb_poly_line_points_length + 467: 0000000000010420 23 FUNC GLOBAL DEFAULT 12 xcb_arc_end + 468: 000000000001ce60 18 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping_map_end + 469: 0000000000015410 5 FUNC GLOBAL DEFAULT 12 xcb_query_text_extents_sizeof + 470: 0000000000013120 18 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name_name_end + 471: 0000000000015630 8 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_sizeof + 472: 0000000000014170 133 FUNC GLOBAL DEFAULT 12 xcb_grab_keyboard_unchecked + 473: 000000000001d4f0 104 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_list + 474: 000000000000d4a0 113 FUNC GLOBAL DEFAULT 12 xcb_discard_reply + 475: 00000000000144a0 118 FUNC GLOBAL DEFAULT 12 xcb_ungrab_key + 476: 000000000000d660 199 FUNC GLOBAL DEFAULT 12 xcb_unregister_for_special_event + 477: 0000000000019140 19 FUNC GLOBAL DEFAULT 12 xcb_poly_text_8_items_end + 478: 000000000001a3f0 11 FUNC GLOBAL DEFAULT 12 xcb_store_colors_sizeof + 479: 000000000001b3c0 22 FUNC GLOBAL DEFAULT 12 xcb_list_extensions_names_iterator + 480: 00000000000180c0 5 FUNC GLOBAL DEFAULT 12 xcb_poly_line_points + 481: 000000000001c6c0 22 FUNC GLOBAL DEFAULT 12 xcb_list_hosts_hosts_iterator + 482: 0000000000014e80 5 FUNC GLOBAL DEFAULT 12 xcb_get_input_focus_reply + 483: 000000000001d3e0 5 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_version_reply + 484: 0000000000010b30 23 FUNC GLOBAL DEFAULT 12 xcb_client_message_data_end + 485: 00000000000107e0 48 FUNC GLOBAL DEFAULT 12 xcb_setup_failed_next + 486: 000000000001a210 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes_reply + 487: 0000000000019630 5 FUNC GLOBAL DEFAULT 12 xcb_image_text_16_string + 488: 0000000000016880 185 FUNC GLOBAL DEFAULT 12 xcb_create_gc_aux_checked + 489: 00000000000148e0 11 FUNC GLOBAL DEFAULT 12 xcb_get_motion_events_sizeof + 490: 0000000000018020 151 FUNC GLOBAL DEFAULT 12 xcb_poly_line + 491: 0000000000015360 5 FUNC GLOBAL DEFAULT 12 xcb_query_font_properties_length + 492: 00000000000171a0 24 FUNC GLOBAL DEFAULT 12 xcb_change_gc_sizeof + 493: 0000000000015570 7 FUNC GLOBAL DEFAULT 12 xcb_str_sizeof + 494: 000000000001a230 153 FUNC GLOBAL DEFAULT 12 xcb_free_colors_checked + 495: 0000000000012ea0 5 FUNC GLOBAL DEFAULT 12 xcb_query_tree_reply + 496: 0000000000012b90 5 FUNC GLOBAL DEFAULT 12 xcb_configure_window_value_list + 497: 0000000000014210 109 FUNC GLOBAL DEFAULT 12 xcb_ungrab_keyboard_checked + 498: 00000000000140e0 133 FUNC GLOBAL DEFAULT 12 xcb_grab_keyboard + 499: 000000000001c230 105 FUNC GLOBAL DEFAULT 12 xcb_get_screen_saver + 500: 0000000000015930 22 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_properties_iterator + 501: 0000000000014b50 166 FUNC GLOBAL DEFAULT 12 xcb_warp_pointer_checked + 502: 0000000000019850 117 FUNC GLOBAL DEFAULT 12 xcb_copy_colormap_and_free_checked + 503: 00000000000102f0 13 FUNC GLOBAL DEFAULT 12 xcb_keysym_next + 504: 0000000000012f60 153 FUNC GLOBAL DEFAULT 12 xcb_intern_atom_unchecked + 505: 00000000000127b0 180 FUNC GLOBAL DEFAULT 12 xcb_configure_window_value_list_unpack + 506: 0000000000014e10 102 FUNC GLOBAL DEFAULT 12 xcb_get_input_focus_unchecked + 507: 0000000000015110 109 FUNC GLOBAL DEFAULT 12 xcb_close_font_checked + 508: 0000000000014f70 5 FUNC GLOBAL DEFAULT 12 xcb_query_keymap_reply + 509: 000000000001d3f0 101 FUNC GLOBAL DEFAULT 12 xcb_xc_misc_get_xid_range + 510: 0000000000019770 109 FUNC GLOBAL DEFAULT 12 xcb_free_colormap_checked + 511: 0000000000017710 169 FUNC GLOBAL DEFAULT 12 xcb_set_clip_rectangles_checked + 512: 0000000000015c10 22 FUNC GLOBAL DEFAULT 12 xcb_set_font_path_font_iterator + 513: 0000000000011d40 5 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_value_list + 514: 00000000000108d0 63 FUNC GLOBAL DEFAULT 12 xcb_setup_authenticate_end + 515: 0000000000014670 102 FUNC GLOBAL DEFAULT 12 xcb_grab_server + 516: 0000000000018690 178 FUNC GLOBAL DEFAULT 12 xcb_fill_poly_checked + 517: 000000000001d130 105 FUNC GLOBAL DEFAULT 12 xcb_no_operation_checked + 518: 000000000001d100 23 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping_keycodes_end + 519: 000000000001cb00 18 FUNC GLOBAL DEFAULT 12 xcb_rotate_properties_atoms_end + 520: 000000000001c330 158 FUNC GLOBAL DEFAULT 12 xcb_change_hosts_checked + 521: 000000000001c4c0 5 FUNC GLOBAL DEFAULT 12 xcb_host_address + 522: 000000000001ce90 12 FUNC GLOBAL DEFAULT 12 xcb_set_modifier_mapping_sizeof + 523: 00000000000199b0 106 FUNC GLOBAL DEFAULT 12 xcb_install_colormap + 524: 000000000001b340 102 FUNC GLOBAL DEFAULT 12 xcb_list_extensions_unchecked + 525: 0000000000019940 109 FUNC GLOBAL DEFAULT 12 xcb_install_colormap_checked + 526: 0000000000019580 173 FUNC GLOBAL DEFAULT 12 xcb_image_text_16 + 527: 000000000001a000 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_pixels_length + 528: 00000000000192f0 19 FUNC GLOBAL DEFAULT 12 xcb_poly_text_16_items_end + 529: 0000000000015950 25 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_name + 530: 0000000000227390 16 OBJECT GLOBAL DEFAULT 24 xcb_xc_misc_id + 531: 000000000001c0b0 102 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_control_unchecked + 532: 000000000001bc90 164 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_aux + 533: 0000000000015420 154 FUNC GLOBAL DEFAULT 12 xcb_query_text_extents + 534: 000000000001b100 5 FUNC GLOBAL DEFAULT 12 xcb_query_best_size_reply + 535: 0000000000012560 577 FUNC GLOBAL DEFAULT 12 xcb_configure_window_value_list_serialize + 536: 00000000000105d0 22 FUNC GLOBAL DEFAULT 12 xcb_screen_allowed_depths_iterator + 537: 0000000000018a20 157 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_arc_checked + 538: 0000000000010f00 380 FUNC GLOBAL DEFAULT 12 xcb_create_window_value_list_unpack + 539: 0000000000013000 5 FUNC GLOBAL DEFAULT 12 xcb_intern_atom_reply + 540: 000000000000d490 5 FUNC GLOBAL DEFAULT 12 xcb_get_reply_fds + 541: 00000000000153c0 4 FUNC GLOBAL DEFAULT 12 xcb_query_font_char_infos_length + 542: 0000000000017870 5 FUNC GLOBAL DEFAULT 12 xcb_set_clip_rectangles_rectangles + 543: 00000000000196f0 117 FUNC GLOBAL DEFAULT 12 xcb_create_colormap + 544: 00000000000111d0 230 FUNC GLOBAL DEFAULT 12 xcb_create_window + 545: 0000000000010520 63 FUNC GLOBAL DEFAULT 12 xcb_depth_end + 546: 0000000000018f70 7 FUNC GLOBAL DEFAULT 12 xcb_get_image_data_length + 547: 000000000001d070 102 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping_unchecked + 548: 00000000000122c0 109 FUNC GLOBAL DEFAULT 12 xcb_map_subwindows_checked + 549: 000000000001beb0 102 FUNC GLOBAL DEFAULT 12 xcb_bell + 550: 00000000000174f0 117 FUNC GLOBAL DEFAULT 12 xcb_copy_gc + 551: 0000000000015560 5 FUNC GLOBAL DEFAULT 12 xcb_query_text_extents_reply + 552: 00000000000150f0 18 FUNC GLOBAL DEFAULT 12 xcb_open_font_name_end + 553: 0000000000011a40 54 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_value_list_sizeof + 554: 0000000000018de0 12 FUNC GLOBAL DEFAULT 12 xcb_put_image_data_length + 555: 00000000000109d0 5 FUNC GLOBAL DEFAULT 12 xcb_setup_vendor_length + 556: 0000000000015180 106 FUNC GLOBAL DEFAULT 12 xcb_close_font + 557: 0000000000010150 19 FUNC GLOBAL DEFAULT 12 xcb_font_end + 558: 00000000000128b0 25 FUNC GLOBAL DEFAULT 12 xcb_configure_window_sizeof + 559: 000000000001c6b0 5 FUNC GLOBAL DEFAULT 12 xcb_list_hosts_hosts_length + 560: 0000000000015c30 83 FUNC GLOBAL DEFAULT 12 xcb_get_font_path_sizeof + 561: 0000000000019c00 5 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps_cmaps_length + 562: 00000000000107a0 5 FUNC GLOBAL DEFAULT 12 xcb_setup_failed_reason + 563: 000000000001c4b0 16 FUNC GLOBAL DEFAULT 12 xcb_host_sizeof + 564: 0000000000017470 117 FUNC GLOBAL DEFAULT 12 xcb_copy_gc_checked + 565: 000000000001b3e0 5 FUNC GLOBAL DEFAULT 12 xcb_list_extensions_reply + 566: 0000000000014600 105 FUNC GLOBAL DEFAULT 12 xcb_grab_server_checked + 567: 0000000000018810 18 FUNC GLOBAL DEFAULT 12 xcb_fill_poly_points_length + 568: 000000000001cff0 12 FUNC GLOBAL DEFAULT 12 xcb_get_modifier_mapping_sizeof + 569: 00000000000148a0 5 FUNC GLOBAL DEFAULT 12 xcb_query_pointer_reply + 570: 0000000000018130 19 FUNC GLOBAL DEFAULT 12 xcb_segment_end + 571: 000000000001c990 12 FUNC GLOBAL DEFAULT 12 xcb_rotate_properties_sizeof + 572: 000000000001a060 39 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_masks_end + 573: 00000000000106a0 18 FUNC GLOBAL DEFAULT 12 xcb_setup_request_authorization_protocol_name_end + 574: 0000000000013790 117 FUNC GLOBAL DEFAULT 12 xcb_set_selection_owner + 575: 0000000000013310 5 FUNC GLOBAL DEFAULT 12 xcb_change_property_data + 576: 0000000000010b20 13 FUNC GLOBAL DEFAULT 12 xcb_client_message_data_next + 577: 0000000000017620 155 FUNC GLOBAL DEFAULT 12 xcb_set_dashes + 578: 0000000000013580 5 FUNC GLOBAL DEFAULT 12 xcb_get_property_value + 579: 000000000001c570 89 FUNC GLOBAL DEFAULT 12 xcb_list_hosts_sizeof + 580: 0000000000010790 8 FUNC GLOBAL DEFAULT 12 xcb_setup_failed_sizeof + 581: 0000000000012cf0 106 FUNC GLOBAL DEFAULT 12 xcb_get_geometry_unchecked + 582: 0000000000019650 22 FUNC GLOBAL DEFAULT 12 xcb_image_text_16_string_iterator + 583: 0000000000010350 13 FUNC GLOBAL DEFAULT 12 xcb_keycode32_next + 584: 0000000000019220 169 FUNC GLOBAL DEFAULT 12 xcb_poly_text_16 + 585: 00000000000101a0 13 FUNC GLOBAL DEFAULT 12 xcb_colormap_next + 586: 0000000000013240 207 FUNC GLOBAL DEFAULT 12 xcb_change_property + 587: 0000000000014f00 102 FUNC GLOBAL DEFAULT 12 xcb_query_keymap_unchecked + 588: 00000000000106c0 26 FUNC GLOBAL DEFAULT 12 xcb_setup_request_authorization_protocol_data + 589: 000000000000f6e0 13 FUNC GLOBAL DEFAULT 12 xcb_parse_display + 590: 0000000000019c10 18 FUNC GLOBAL DEFAULT 12 xcb_list_installed_colormaps_cmaps_end + 591: 00000000000198d0 110 FUNC GLOBAL DEFAULT 12 xcb_copy_colormap_and_free + 592: 000000000001b3f0 19 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_mapping_sizeof + 593: 00000000000105c0 5 FUNC GLOBAL DEFAULT 12 xcb_screen_allowed_depths_length + 594: 00000000000151f0 13 FUNC GLOBAL DEFAULT 12 xcb_fontprop_next + 595: 0000000000018df0 19 FUNC GLOBAL DEFAULT 12 xcb_put_image_data_end + 596: 0000000000010720 48 FUNC GLOBAL DEFAULT 12 xcb_setup_request_next + 597: 0000000000010080 13 FUNC GLOBAL DEFAULT 12 xcb_char2b_next + 598: 0000000000012d60 5 FUNC GLOBAL DEFAULT 12 xcb_get_geometry_reply + 599: 000000000000cf50 11 FUNC GLOBAL DEFAULT 12 xcb_send_request64 + 600: 00000000000105f0 48 FUNC GLOBAL DEFAULT 12 xcb_screen_next + 601: 0000000000012df0 106 FUNC GLOBAL DEFAULT 12 xcb_query_tree_unchecked + 602: 0000000000015920 5 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_properties_length + 603: 000000000001cfe0 5 FUNC GLOBAL DEFAULT 12 xcb_set_modifier_mapping_reply + 604: 00000000000100f0 19 FUNC GLOBAL DEFAULT 12 xcb_pixmap_end + 605: 0000000000013ee0 121 FUNC GLOBAL DEFAULT 12 xcb_ungrab_button_checked + 606: 0000000000019c40 133 FUNC GLOBAL DEFAULT 12 xcb_alloc_color + 607: 0000000000017c40 188 FUNC GLOBAL DEFAULT 12 xcb_copy_plane_checked + 608: 000000000000fb70 10 FUNC GLOBAL DEFAULT 12 xcb_connect + 609: 000000000001b000 120 FUNC GLOBAL DEFAULT 12 xcb_query_best_size + 610: 0000000000010a00 26 FUNC GLOBAL DEFAULT 12 xcb_setup_pixmap_formats + 611: 0000000000018680 8 FUNC GLOBAL DEFAULT 12 xcb_fill_poly_sizeof + 612: 00000000000100b0 13 FUNC GLOBAL DEFAULT 12 xcb_window_next + 613: 000000000001a910 22 FUNC GLOBAL DEFAULT 12 xcb_query_colors_colors_iterator + 614: 00000000000106e0 5 FUNC GLOBAL DEFAULT 12 xcb_setup_request_authorization_protocol_data_length + 615: 0000000000014200 5 FUNC GLOBAL DEFAULT 12 xcb_grab_keyboard_reply + 616: 000000000001b710 625 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_control_value_list_serialize + 617: 00000000000148c0 19 FUNC GLOBAL DEFAULT 12 xcb_timecoord_end + 618: 0000000000017a40 133 FUNC GLOBAL DEFAULT 12 xcb_clear_area + 619: 0000000000017dc0 8 FUNC GLOBAL DEFAULT 12 xcb_poly_point_sizeof + 620: 000000000001ae50 106 FUNC GLOBAL DEFAULT 12 xcb_free_cursor + 621: 0000000000010110 13 FUNC GLOBAL DEFAULT 12 xcb_cursor_next + 622: 00000000000171c0 143 FUNC GLOBAL DEFAULT 12 xcb_change_gc_checked + 623: 000000000000dc30 113 FUNC GLOBAL DEFAULT 12 xcb_wait_for_event + 624: 00000000000178d0 109 FUNC GLOBAL DEFAULT 12 xcb_free_gc_checked + 625: 0000000000017f40 38 FUNC GLOBAL DEFAULT 12 xcb_poly_point_points_iterator + 626: 00000000000176d0 5 FUNC GLOBAL DEFAULT 12 xcb_set_dashes_dashes_length + 627: 0000000000013090 106 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name_unchecked + 628: 00000000000103b0 13 FUNC GLOBAL DEFAULT 12 xcb_point_next + 629: 00000000000128d0 152 FUNC GLOBAL DEFAULT 12 xcb_configure_window_checked + 630: 00000000000154c0 151 FUNC GLOBAL DEFAULT 12 xcb_query_text_extents_unchecked + 631: 00000000000189b0 5 FUNC GLOBAL DEFAULT 12 xcb_poly_fill_rectangle_rectangles + 632: 000000000001a780 19 FUNC GLOBAL DEFAULT 12 xcb_rgb_end + 633: 000000000001cd60 105 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_mapping + 634: 000000000001cae0 5 FUNC GLOBAL DEFAULT 12 xcb_rotate_properties_atoms + 635: 00000000000102d0 19 FUNC GLOBAL DEFAULT 12 xcb_timestamp_end + 636: 000000000000ee80 337 FUNC GLOBAL DEFAULT 12 xcb_generate_id + 637: 0000000000015980 37 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_name_end + 638: 0000000000012000 109 FUNC GLOBAL DEFAULT 12 xcb_change_save_set_checked + 639: 0000000000011dc0 106 FUNC GLOBAL DEFAULT 12 xcb_get_window_attributes_unchecked + 640: 00000000000110c0 24 FUNC GLOBAL DEFAULT 12 xcb_create_window_sizeof + 641: 000000000001c490 18 FUNC GLOBAL DEFAULT 12 xcb_change_hosts_address_end + 642: 0000000000010200 13 FUNC GLOBAL DEFAULT 12 xcb_drawable_next + 643: 000000000001c9a0 160 FUNC GLOBAL DEFAULT 12 xcb_rotate_properties_checked + 644: 00000000000100e0 13 FUNC GLOBAL DEFAULT 12 xcb_pixmap_next + 645: 0000000000012070 106 FUNC GLOBAL DEFAULT 12 xcb_change_save_set + 646: 0000000000019d70 8 FUNC GLOBAL DEFAULT 12 xcb_alloc_named_color_sizeof + 647: 0000000000017ad0 181 FUNC GLOBAL DEFAULT 12 xcb_copy_area_checked + 648: 00000000000118c0 380 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_value_list_unpack + 649: 0000000000010210 19 FUNC GLOBAL DEFAULT 12 xcb_drawable_end + 650: 000000000001b260 5 FUNC GLOBAL DEFAULT 12 xcb_query_extension_reply + 651: 0000000000227408 0 NOTYPE GLOBAL DEFAULT 25 _end + 652: 0000000000010480 23 FUNC GLOBAL DEFAULT 12 xcb_visualtype_end + 653: 000000000001a1e0 5 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes_pixels_length + 654: 00000000000121e0 109 FUNC GLOBAL DEFAULT 12 xcb_map_window_checked + 655: 000000000001c3d0 155 FUNC GLOBAL DEFAULT 12 xcb_change_hosts + 656: 00000000000193d0 170 FUNC GLOBAL DEFAULT 12 xcb_image_text_8 + 657: 0000000000019ed0 18 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_cells_sizeof + 658: 0000000000013a10 154 FUNC GLOBAL DEFAULT 12 xcb_send_event_checked + 659: 0000000000012e80 18 FUNC GLOBAL DEFAULT 12 xcb_query_tree_children_end + 660: 0000000000010560 89 FUNC GLOBAL DEFAULT 12 xcb_screen_sizeof + 661: 0000000000018e20 149 FUNC GLOBAL DEFAULT 12 xcb_get_image + 662: 000000000000c4f0 160 FUNC GLOBAL DEFAULT 12 xcb_get_maximum_request_length + 663: 0000000000017250 140 FUNC GLOBAL DEFAULT 12 xcb_change_gc + 664: 000000000001a1f0 18 FUNC GLOBAL DEFAULT 12 xcb_alloc_color_planes_pixels_end + 665: 00000000000135d0 12 FUNC GLOBAL DEFAULT 12 xcb_list_properties_sizeof + 666: 0000000000019120 5 FUNC GLOBAL DEFAULT 12 xcb_poly_text_8_items + 667: 000000000001a7b0 149 FUNC GLOBAL DEFAULT 12 xcb_query_colors + 668: 00000000000155f0 63 FUNC GLOBAL DEFAULT 12 xcb_str_end + 669: 0000000000017940 106 FUNC GLOBAL DEFAULT 12 xcb_free_gc + 670: 0000000000010a30 38 FUNC GLOBAL DEFAULT 12 xcb_setup_pixmap_formats_iterator + 671: 0000000000014cb0 117 FUNC GLOBAL DEFAULT 12 xcb_set_input_focus_checked + 672: 0000000000013150 15 FUNC GLOBAL DEFAULT 12 xcb_change_property_sizeof + 673: 000000000000eb80 112 FUNC GLOBAL DEFAULT 12 xcb_poll_for_special_event + 674: 0000000000015c00 5 FUNC GLOBAL DEFAULT 12 xcb_set_font_path_font_length + 675: 0000000000015d70 5 FUNC GLOBAL DEFAULT 12 xcb_get_font_path_path_length + 676: 000000000001a900 5 FUNC GLOBAL DEFAULT 12 xcb_query_colors_colors_length + 677: 0000000000014f80 8 FUNC GLOBAL DEFAULT 12 xcb_open_font_sizeof + 678: 00000000000103c0 19 FUNC GLOBAL DEFAULT 12 xcb_point_end + 679: 0000000000016740 149 FUNC GLOBAL DEFAULT 12 xcb_create_gc_checked + 680: 0000000000017570 8 FUNC GLOBAL DEFAULT 12 xcb_set_dashes_sizeof + 681: 0000000000013160 210 FUNC GLOBAL DEFAULT 12 xcb_change_property_checked + 682: 0000000000019a20 109 FUNC GLOBAL DEFAULT 12 xcb_uninstall_colormap_checked + 683: 000000000001c040 105 FUNC GLOBAL DEFAULT 12 xcb_get_pointer_control + 684: 0000000000012c80 109 FUNC GLOBAL DEFAULT 12 xcb_get_geometry + 685: 000000000001c4e0 18 FUNC GLOBAL DEFAULT 12 xcb_host_address_end + 686: 0000000000010660 27 FUNC GLOBAL DEFAULT 12 xcb_setup_request_sizeof + 687: 0000000000010b50 929 FUNC GLOBAL DEFAULT 12 xcb_create_window_value_list_serialize + 688: 0000000000014060 122 FUNC GLOBAL DEFAULT 12 xcb_change_active_pointer_grab + 689: 00000000000133d0 110 FUNC GLOBAL DEFAULT 12 xcb_delete_property + 690: 00000000000134f0 133 FUNC GLOBAL DEFAULT 12 xcb_get_property_unchecked + 691: 0000000000013b50 157 FUNC GLOBAL DEFAULT 12 xcb_grab_pointer + 692: 0000000000015270 109 FUNC GLOBAL DEFAULT 12 xcb_query_font + 693: 000000000001b590 27 FUNC GLOBAL DEFAULT 12 xcb_change_keyboard_mapping_keysyms_end + 694: 00000000000104c0 5 FUNC GLOBAL DEFAULT 12 xcb_depth_visuals_length + 695: 00000000000136e0 18 FUNC GLOBAL DEFAULT 12 xcb_list_properties_atoms_end + 696: 000000000001d280 101 FUNC GLOBAL DEFAULT 12 xcb_big_requests_enable_unchecked + 697: 00000000000192d0 5 FUNC GLOBAL DEFAULT 12 xcb_poly_text_16_items + 698: 000000000001b3b0 5 FUNC GLOBAL DEFAULT 12 xcb_list_extensions_names_length + 699: 00000000000167e0 149 FUNC GLOBAL DEFAULT 12 xcb_create_gc + 700: 000000000000e9f0 225 FUNC GLOBAL DEFAULT 12 xcb_poll_for_reply64 + 701: 000000000001a540 5 FUNC GLOBAL DEFAULT 12 xcb_store_colors_items + 702: 00000000000104f0 48 FUNC GLOBAL DEFAULT 12 xcb_depth_next + 703: 0000000000010180 19 FUNC GLOBAL DEFAULT 12 xcb_gcontext_end + 704: 0000000000018dd0 5 FUNC GLOBAL DEFAULT 12 xcb_put_image_data + 705: 0000000000013010 8 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name_sizeof + 706: 0000000000018560 154 FUNC GLOBAL DEFAULT 12 xcb_poly_arc + 707: 00000000002273a0 0 NOTYPE GLOBAL DEFAULT 25 __bss_start + 708: 0000000000010810 63 FUNC GLOBAL DEFAULT 12 xcb_setup_failed_end + 709: 000000000001b080 117 FUNC GLOBAL DEFAULT 12 xcb_query_best_size_unchecked + 710: 000000000001d618 0 FUNC GLOBAL DEFAULT 13 _fini + 711: 000000000001d2f0 5 FUNC GLOBAL DEFAULT 12 xcb_big_requests_enable_reply + 712: 000000000000eb60 7 FUNC GLOBAL DEFAULT 12 xcb_poll_for_event + 713: 0000000000011aa0 143 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_checked + 714: 000000000001ac40 201 FUNC GLOBAL DEFAULT 12 xcb_create_glyph_cursor_checked + 715: 0000000000013110 5 FUNC GLOBAL DEFAULT 12 xcb_get_atom_name_name_length + 716: 000000000001a380 18 FUNC GLOBAL DEFAULT 12 xcb_free_colors_pixels_length + 717: 000000000000d570 237 FUNC GLOBAL DEFAULT 12 xcb_register_for_special_xge + 718: 0000000000011510 929 FUNC GLOBAL DEFAULT 12 xcb_change_window_attributes_value_list_serialize + 719: 000000000001cb20 105 FUNC GLOBAL DEFAULT 12 xcb_force_screen_saver_checked + 720: 0000000000227380 16 OBJECT GLOBAL DEFAULT 24 xcb_big_requests_id + 721: 0000000000010910 164 FUNC GLOBAL DEFAULT 12 xcb_setup_sizeof + 722: 0000000000015e30 122 FUNC GLOBAL DEFAULT 12 xcb_create_pixmap + 723: 00000000000159c0 83 FUNC GLOBAL DEFAULT 12 xcb_set_font_path_sizeof + 724: 000000000001b110 8 FUNC GLOBAL DEFAULT 12 xcb_query_extension_sizeof + 725: 00000000000109c0 5 FUNC GLOBAL DEFAULT 12 xcb_setup_vendor + 726: 0000000000015d80 22 FUNC GLOBAL DEFAULT 12 xcb_get_font_path_path_iterator + 727: 000000000001cd40 5 FUNC GLOBAL DEFAULT 12 xcb_set_pointer_mapping_reply + 728: 00000000000150e0 5 FUNC GLOBAL DEFAULT 12 xcb_open_font_name_length + 729: 0000000000015870 151 FUNC GLOBAL DEFAULT 12 xcb_list_fonts_with_info_unchecked + 730: 0000000000012410 106 FUNC GLOBAL DEFAULT 12 xcb_unmap_window diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libxkbcommon.so.0.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libxkbcommon.so.0.txt new file mode 100644 index 000000000000..f26d3f404b66 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libxkbcommon.so.0.txt @@ -0,0 +1,144 @@ +Library: /lib64/libxkbcommon.so.0 +Package: libxkbcommon-0.7.1-3.el7.x86_64 + + +Symbol table '.dynsym' contains 138 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (5) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (6) + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (5) + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (6) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (6) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (6) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (6) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND secure_getenv@GLIBC_2.17 (7) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtod@GLIBC_2.2.5 (6) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (6) + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (6) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND eaccess@GLIBC_2.4 (8) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (8) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mmap@GLIBC_2.2.5 (6) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (6) + 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND snprintf@GLIBC_2.2.5 (6) + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (6) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs@GLIBC_2.2.5 (6) + 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (6) + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strdup@GLIBC_2.2.5 (6) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (6) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (6) + 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __asprintf_chk@GLIBC_2.8 (9) + 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (6) + 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (6) + 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strndup@GLIBC_2.2.5 (6) + 28: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (6) + 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (10) + 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.2.5 (6) + 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (6) + 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (6) + 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncasecmp@GLIBC_2.2.5 (6) + 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (6) + 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.3.4 (5) + 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (6) + 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strcpy_chk@GLIBC_2.3.4 (5) + 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND munmap@GLIBC_2.2.5 (6) + 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (6) + 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.2.5 (6) + 42: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (6) + 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bsearch@GLIBC_2.2.5 (6) + 45: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (6) + 47: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (6) + 48: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND stderr@GLIBC_2.2.5 (6) + 49: 000000000001d4e0 70 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_layout@@V_0.5.0 + 50: 000000000001ad80 19 FUNC GLOBAL DEFAULT 12 xkb_context_get_user_data@@V_0.5.0 + 51: 000000000001ba30 286 FUNC GLOBAL DEFAULT 12 xkb_keysym_get_name@@V_0.5.0 + 52: 000000000001c0c0 256 FUNC GLOBAL DEFAULT 12 xkb_keysym_to_utf32@@V_0.5.0 + 53: 000000000001aaf0 4 FUNC GLOBAL DEFAULT 12 xkb_context_get_log_verbosity@@V_0.5.0 + 54: 000000000001ada0 5 FUNC GLOBAL DEFAULT 12 xkb_context_set_user_data@@V_0.5.0 + 55: 000000000001dec0 104 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_syms@@V_0.5.0 + 56: 000000000001e960 7 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_consumed_mods@@V_0.5.0 + 57: 000000000001ca70 154 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_get_syms_by_level@@V_0.5.0 + 58: 000000000001d920 8 FUNC GLOBAL DEFAULT 12 xkb_state_ref@@V_0.5.0 + 59: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS V_0.7.0 + 60: 000000000001cb20 4 FUNC GLOBAL DEFAULT 12 xkb_keymap_max_keycode@@V_0.5.0 + 61: 000000000001cbd0 119 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_by_name@@V_0.6.0 + 62: 000000000001aa10 4 FUNC GLOBAL DEFAULT 12 xkb_context_num_include_paths@@V_0.5.0 + 63: 0000000000006dd0 169 FUNC GLOBAL DEFAULT 12 xkb_compose_table_new_from_file@@V_0.5.0 + 64: 000000000001a9f0 18 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_reset_defaults@@V_0.5.0 + 65: 000000000001e8a0 59 FUNC GLOBAL DEFAULT 12 xkb_state_mod_mask_remove_consumed@@V_0.5.0 + 66: 000000000001e420 7 FUNC GLOBAL DEFAULT 12 xkb_state_mod_index_is_consumed@@V_0.5.0 + 67: 000000000001c8b0 104 FUNC GLOBAL DEFAULT 12 xkb_keymap_layout_get_index@@V_0.5.0 + 68: 000000000001e150 55 FUNC GLOBAL DEFAULT 12 xkb_state_mod_name_is_active@@V_0.5.0 + 69: 000000000001bbf0 994 FUNC GLOBAL DEFAULT 12 xkb_keysym_from_name@@V_0.5.0 + 70: 000000000001c830 49 FUNC GLOBAL DEFAULT 12 xkb_keymap_mod_get_index@@V_0.5.0 + 71: 000000000001e690 442 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_utf8@@V_0.5.0 + 72: 000000000001c880 35 FUNC GLOBAL DEFAULT 12 xkb_keymap_layout_get_name@@V_0.5.0 + 73: 000000000001e850 72 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_utf32@@V_0.5.0 + 74: 000000000001a6f0 379 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_append@@V_0.5.0 + 75: 000000000001e8e0 121 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_consumed_mods2@@V_0.7.0 + 76: 0000000000006a20 134 FUNC GLOBAL DEFAULT 12 xkb_compose_state_feed@@V_0.5.0 + 77: 000000000001ca00 104 FUNC GLOBAL DEFAULT 12 xkb_keymap_led_get_index@@V_0.5.0 + 78: 000000000001d8e0 64 FUNC GLOBAL DEFAULT 12 xkb_state_new@@V_0.5.0 + 79: 0000000000006b10 162 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_utf8@@V_0.5.0 + 80: 000000000001c800 35 FUNC GLOBAL DEFAULT 12 xkb_keymap_mod_get_name@@V_0.5.0 + 81: 000000000001df30 44 FUNC GLOBAL DEFAULT 12 xkb_state_serialize_mods@@V_0.5.0 + 82: 000000000001d990 8 FUNC GLOBAL DEFAULT 12 xkb_state_get_keymap@@V_0.5.0 + 83: 000000000001aae0 4 FUNC GLOBAL DEFAULT 12 xkb_context_set_log_level@@V_0.5.0 + 84: 000000000001d450 106 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_level@@V_0.5.0 + 85: 000000000001e320 70 FUNC GLOBAL DEFAULT 12 xkb_state_led_index_is_active@@V_0.5.0 + 86: 0000000000006e80 162 FUNC GLOBAL DEFAULT 12 xkb_compose_table_new_from_buffer@@V_0.5.0 + 87: 0000000000006d50 121 FUNC GLOBAL DEFAULT 12 xkb_compose_table_unref@@V_0.5.0 + 88: 0000000000006ac0 70 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_status@@V_0.5.0 + 89: 000000000001c920 33 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_layouts_for_key@@V_0.5.0 + 90: 0000000000006d40 7 FUNC GLOBAL DEFAULT 12 xkb_compose_table_ref@@V_0.5.0 + 91: 0000000000006bc0 28 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_one_sym@@V_0.5.0 + 92: 000000000001c870 7 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_layouts@@V_0.5.0 + 93: 000000000001e480 118 FUNC GLOBAL DEFAULT 12 xkb_state_key_get_one_sym@@V_0.5.0 + 94: 000000000001aab0 19 FUNC GLOBAL DEFAULT 12 xkb_context_set_log_fn@@V_0.5.0 + 95: 000000000001c200 8 FUNC GLOBAL DEFAULT 12 xkb_keymap_ref@@V_0.5.0 + 96: 000000000001aa20 49 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_get@@V_0.5.0 + 97: 000000000001c6a0 216 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_file@@V_0.5.0 + 98: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS V_0.5.0 + 99: 000000000001aa70 55 FUNC GLOBAL DEFAULT 12 xkb_context_unref@@V_0.5.0 + 100: 00000000000069c0 7 FUNC GLOBAL DEFAULT 12 xkb_compose_state_ref@@V_0.5.0 + 101: 000000000001c210 469 FUNC GLOBAL DEFAULT 12 xkb_keymap_unref@@V_0.5.0 + 102: 000000000001d930 84 FUNC GLOBAL DEFAULT 12 xkb_state_unref@@V_0.5.0 + 103: 000000000001aa60 7 FUNC GLOBAL DEFAULT 12 xkb_context_ref@@V_0.5.0 + 104: 000000000001d9a0 926 FUNC GLOBAL DEFAULT 12 xkb_state_update_key@@V_0.5.0 + 105: 000000000001e020 67 FUNC GLOBAL DEFAULT 12 xkb_state_mod_index_is_active@@V_0.5.0 + 106: 000000000001cc50 34 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_repeats@@V_0.5.0 + 107: 000000000001e190 230 FUNC GLOBAL DEFAULT 12 xkb_state_mod_names_are_active@@V_0.5.0 + 108: 000000000001e070 220 FUNC GLOBAL DEFAULT 12 xkb_state_mod_indices_are_active@@V_0.5.0 + 109: 000000000001cb10 4 FUNC GLOBAL DEFAULT 12 xkb_keymap_min_keycode@@V_0.5.0 + 110: 000000000001cb30 110 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_for_each@@V_0.5.0 + 111: 000000000001c3f0 358 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_names@@V_0.5.0 + 112: 000000000001cba0 48 FUNC GLOBAL DEFAULT 12 xkb_keymap_key_get_name@@V_0.6.0 + 113: 0000000000006a10 5 FUNC GLOBAL DEFAULT 12 xkb_compose_state_get_compose_table@@V_0.5.0 + 114: 00000000000069d0 50 FUNC GLOBAL DEFAULT 12 xkb_compose_state_unref@@V_0.5.0 + 115: 000000000001dd40 377 FUNC GLOBAL DEFAULT 12 xkb_state_update_mask@@V_0.5.0 + 116: 000000000001c950 92 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_levels_for_key@@V_0.5.0 + 117: 000000000001ab00 4 FUNC GLOBAL DEFAULT 12 xkb_context_set_log_verbosity@@V_0.5.0 + 118: 000000000001dfb0 44 FUNC GLOBAL DEFAULT 12 xkb_state_serialize_layout@@V_0.5.0 + 119: 0000000000006f30 425 FUNC GLOBAL DEFAULT 12 xkb_compose_table_new_from_locale@@V_0.5.0 + 120: 000000000001aad0 4 FUNC GLOBAL DEFAULT 12 xkb_context_get_log_level@@V_0.5.0 + 121: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS V_0.6.0 + 122: 000000000001a870 184 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_append_default@@V_0.5.0 + 123: 0000000000006970 75 FUNC GLOBAL DEFAULT 12 xkb_compose_state_new@@V_0.5.0 + 124: 000000000001c7f0 7 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_mods@@V_0.5.0 + 125: 000000000001ab10 612 FUNC GLOBAL DEFAULT 12 xkb_context_new@@V_0.5.0 + 126: 000000000001c1c0 54 FUNC GLOBAL DEFAULT 12 xkb_keysym_to_utf8@@V_0.5.0 + 127: 000000000001e3a0 120 FUNC GLOBAL DEFAULT 12 xkb_state_mod_index_is_consumed2@@V_0.7.0 + 128: 000000000001c560 248 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_buffer@@V_0.5.0 + 129: 000000000001a930 185 FUNC GLOBAL DEFAULT 12 xkb_context_include_path_clear@@V_0.5.0 + 130: 000000000001e370 34 FUNC GLOBAL DEFAULT 12 xkb_state_led_name_is_active@@V_0.5.0 + 131: 000000000001e280 90 FUNC GLOBAL DEFAULT 12 xkb_state_layout_index_is_active@@V_0.5.0 + 132: 0000000000006ab0 15 FUNC GLOBAL DEFAULT 12 xkb_compose_state_reset@@V_0.5.0 + 133: 000000000001e2e0 55 FUNC GLOBAL DEFAULT 12 xkb_state_layout_name_is_active@@V_0.5.0 + 134: 000000000001c660 60 FUNC GLOBAL DEFAULT 12 xkb_keymap_new_from_string@@V_0.5.0 + 135: 000000000001c780 106 FUNC GLOBAL DEFAULT 12 xkb_keymap_get_as_string@@V_0.5.0 + 136: 000000000001c9c0 51 FUNC GLOBAL DEFAULT 12 xkb_keymap_led_get_name@@V_0.5.0 + 137: 000000000001c9b0 7 FUNC GLOBAL DEFAULT 12 xkb_keymap_num_leds@@V_0.5.0 diff --git a/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libz.so.1.txt b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libz.so.1.txt new file mode 100644 index 000000000000..580441d4b851 --- /dev/null +++ b/test/jdk/jb/build/ResolveSymbolsTest/externalLibs/x86_64/libz.so.1.txt @@ -0,0 +1,116 @@ +Library: /lib64/libz.so.1 +Package: zlib-1.2.7-21.el7_9.x86_64 + + +Symbol table '.dynsym' contains 110 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (13) + 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (13) + 3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (13) + 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND write@GLIBC_2.2.5 (13) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (13) + 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (14) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (13) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (13) + 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memchr@GLIBC_2.2.5 (13) + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND read@GLIBC_2.2.5 (13) + 12: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (15) + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (13) + 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __vsnprintf_chk@GLIBC_2.3.4 (16) + 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND open@GLIBC_2.2.5 (13) + 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses + 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcat@GLIBC_2.2.5 (13) + 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek64@GLIBC_2.2.5 (13) + 20: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strerror@GLIBC_2.2.5 (13) + 22: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (13) + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (16) + 24: 0000000000007c30 174 FUNC GLOBAL DEFAULT 12 inflateResetKeep@@ZLIB_1.2.5.2 + 25: 000000000000c8b0 70 FUNC GLOBAL DEFAULT 12 gzbuffer@@ZLIB_1.2.3.5 + 26: 00000000000027c0 22 FUNC GLOBAL DEFAULT 12 adler32_combine@@ZLIB_1.2.2 + 27: 0000000000002c80 5 FUNC GLOBAL DEFAULT 12 crc32_combine64@@ZLIB_1.2.3.3 + 28: 000000000000ce40 103 FUNC GLOBAL DEFAULT 12 gzdopen + 29: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.3.3 + 30: 0000000000009f50 54 FUNC GLOBAL DEFAULT 12 inflateSyncPoint + 31: 000000000000c950 88 FUNC GLOBAL DEFAULT 12 gzoffset64@@ZLIB_1.2.3.5 + 32: 000000000000da20 5 FUNC GLOBAL DEFAULT 12 gzgetc_@@ZLIB_1.2.5.2 + 33: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.3.4 + 34: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.3.5 + 35: 00000000000041a0 199 FUNC GLOBAL DEFAULT 12 deflateResetKeep@@ZLIB_1.2.5.2 + 36: 000000000000c9b0 5 FUNC GLOBAL DEFAULT 12 gzoffset@@ZLIB_1.2.3.5 + 37: 000000000000c880 35 FUNC GLOBAL DEFAULT 12 gzclose + 38: 0000000000007440 55 FUNC GLOBAL DEFAULT 12 inflateBackEnd@@ZLIB_1.2.0 + 39: 000000000000a260 33 FUNC GLOBAL DEFAULT 12 inflateUndermine@@ZLIB_1.2.3.3 + 40: 000000000000ceb0 71 FUNC GLOBAL DEFAULT 12 gzclearerr@@ZLIB_1.2.0.2 + 41: 0000000000007dd0 224 FUNC GLOBAL DEFAULT 12 inflateInit2_ + 42: 00000000000027e0 22 FUNC GLOBAL DEFAULT 12 adler32_combine64@@ZLIB_1.2.3.3 + 43: 0000000000009cd0 215 FUNC GLOBAL DEFAULT 12 inflateSetDictionary + 44: 000000000000e2c0 215 FUNC GLOBAL DEFAULT 12 gzputc + 45: 0000000000007d20 168 FUNC GLOBAL DEFAULT 12 inflateReset2@@ZLIB_1.2.3.4 + 46: 000000000000c770 261 FUNC GLOBAL DEFAULT 12 uncompress + 47: 000000000000dce0 60 FUNC GLOBAL DEFAULT 12 gzdirect@@ZLIB_1.2.2.3 + 48: 000000000000e3e0 485 FUNC GLOBAL DEFAULT 12 gzprintf + 49: 0000000000002330 1154 FUNC GLOBAL DEFAULT 12 adler32 + 50: 0000000000002c70 5 FUNC GLOBAL DEFAULT 12 crc32_combine@@ZLIB_1.2.2 + 51: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.0.2 + 52: 00000000000043c0 165 FUNC GLOBAL DEFAULT 12 deflatePrime@@ZLIB_1.2.0.8 + 53: 0000000000004600 4493 FUNC GLOBAL DEFAULT 12 deflate + 54: 00000000000044b0 322 FUNC GLOBAL DEFAULT 12 deflateBound@@ZLIB_1.2.0 + 55: 000000000000ce20 13 FUNC GLOBAL DEFAULT 12 gzopen + 56: 0000000000005980 762 FUNC GLOBAL DEFAULT 12 deflateInit2_ + 57: 000000000000c750 30 FUNC GLOBAL DEFAULT 12 compressBound@@ZLIB_1.2.0 + 58: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.0.8 + 59: 0000000000009db0 46 FUNC GLOBAL DEFAULT 12 inflateGetHeader@@ZLIB_1.2.2 + 60: 000000000000e3a0 59 FUNC GLOBAL DEFAULT 12 gzputs + 61: 000000000000c610 6 FUNC GLOBAL DEFAULT 12 zlibCompileFlags@@ZLIB_1.2.0.2 + 62: 000000000000a290 88 FUNC GLOBAL DEFAULT 12 inflateMark@@ZLIB_1.2.3.4 + 63: 0000000000005fc0 240 FUNC GLOBAL DEFAULT 12 inflateBackInit_@@ZLIB_1.2.0 + 64: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.0 + 65: 000000000000ce30 13 FUNC GLOBAL DEFAULT 12 gzopen64@@ZLIB_1.2.3.3 + 66: 0000000000009f90 712 FUNC GLOBAL DEFAULT 12 inflateCopy@@ZLIB_1.2.0 + 67: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.2 + 68: 000000000000d790 483 FUNC GLOBAL DEFAULT 12 gzread + 69: 0000000000004470 54 FUNC GLOBAL DEFAULT 12 deflateTune@@ZLIB_1.2.2.3 + 70: 0000000000007f30 7483 FUNC GLOBAL DEFAULT 12 inflate + 71: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.5.1 + 72: 000000000000c660 216 FUNC GLOBAL DEFAULT 12 compress2 + 73: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.5.2 + 74: 0000000000005790 255 FUNC GLOBAL DEFAULT 12 deflateParams + 75: 0000000000007ce0 54 FUNC GLOBAL DEFAULT 12 inflateReset + 76: 000000000000c740 11 FUNC GLOBAL DEFAULT 12 compress + 77: 000000000000e640 191 FUNC GLOBAL DEFAULT 12 gzsetparams + 78: 000000000000e120 409 FUNC GLOBAL DEFAULT 12 gzwrite + 79: 000000000000e5d0 100 FUNC GLOBAL DEFAULT 12 gzflush + 80: 0000000000007eb0 15 FUNC GLOBAL DEFAULT 12 inflateInit_ + 81: 000000000000c600 8 FUNC GLOBAL DEFAULT 12 zlibVersion + 82: 000000000000da30 320 FUNC GLOBAL DEFAULT 12 gzungetc@@ZLIB_1.2.0.2 + 83: 00000000000029a0 709 FUNC GLOBAL DEFAULT 12 crc32 + 84: 000000000000cfa0 429 FUNC GLOBAL DEFAULT 12 gzseek64@@ZLIB_1.2.3.3 + 85: 0000000000003f60 563 FUNC GLOBAL DEFAULT 12 deflateSetDictionary + 86: 0000000000009de0 366 FUNC GLOBAL DEFAULT 12 inflateSync + 87: 000000000000c9c0 28 FUNC GLOBAL DEFAULT 12 gzeof + 88: 0000000000009c70 87 FUNC GLOBAL DEFAULT 12 inflateEnd + 89: 0000000000005890 231 FUNC GLOBAL DEFAULT 12 deflateEnd + 90: 000000000000d980 148 FUNC GLOBAL DEFAULT 12 gzgetc + 91: 0000000000004380 62 FUNC GLOBAL DEFAULT 12 deflatePending@@ZLIB_1.2.5.1 + 92: 0000000000004350 40 FUNC GLOBAL DEFAULT 12 deflateSetHeader@@ZLIB_1.2.2 + 93: 000000000000dd20 141 FUNC GLOBAL DEFAULT 12 gzclose_r@@ZLIB_1.2.3.5 + 94: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.2.3 + 95: 000000000000c940 5 FUNC GLOBAL DEFAULT 12 gztell + 96: 000000000000cf00 159 FUNC GLOBAL DEFAULT 12 gzrewind + 97: 0000000000000000 0 OBJECT GLOBAL DEFAULT ABS ZLIB_1.2.2.4 + 98: 000000000000c620 21 FUNC GLOBAL DEFAULT 12 zError + 99: 000000000000c900 55 FUNC GLOBAL DEFAULT 12 gztell64@@ZLIB_1.2.3.3 + 100: 000000000000e700 216 FUNC GLOBAL DEFAULT 12 gzclose_w@@ZLIB_1.2.3.5 + 101: 0000000000004270 212 FUNC GLOBAL DEFAULT 12 deflateReset + 102: 0000000000005cb0 770 FUNC GLOBAL DEFAULT 12 deflateCopy + 103: 00000000000060b0 5003 FUNC GLOBAL DEFAULT 12 inflateBack@@ZLIB_1.2.0 + 104: 0000000000007ec0 110 FUNC GLOBAL DEFAULT 12 inflatePrime@@ZLIB_1.2.2.4 + 105: 000000000000d150 5 FUNC GLOBAL DEFAULT 12 gzseek + 106: 0000000000005c80 41 FUNC GLOBAL DEFAULT 12 deflateInit_ + 107: 000000000000c9e0 58 FUNC GLOBAL DEFAULT 12 gzerror + 108: 0000000000002990 8 FUNC GLOBAL DEFAULT 12 get_crc_table + 109: 000000000000db70 356 FUNC GLOBAL DEFAULT 12 gzgets diff --git a/test/jdk/jb/build/VerifyDependencies.java b/test/jdk/jb/build/VerifyDependencies.java new file mode 100644 index 000000000000..d3965d26ab95 --- /dev/null +++ b/test/jdk/jb/build/VerifyDependencies.java @@ -0,0 +1,130 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.BufferedReader; +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @test + * @summary VerifyDependencies checks readability verifies that a Linux shared + * library has no dependency on symbols from glibc version higher than 2.17 + * @run main VerifyDependencies + * @requires (os.family == "linux") + */ + +public class VerifyDependencies { + + public static void verifyLibrary(String libraryPath) throws IOException { + Process process; + BufferedReader reader; + String line; + + System.out.println("checking " + libraryPath); + System.out.println("========================="); + + process = Runtime.getRuntime().exec("readelf -Ws " + libraryPath); + reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + while ((line = reader.readLine()) != null) { + System.out.println(line); + if (line.contains("GLIBC_")) { + String version = extractVersion(line); + if (compareVersions(version, "2.17") > 0) { + throw new RuntimeException(libraryPath + " has a dependency on glibc version " + version); + } + } + } + System.out.println(libraryPath + " has no dependency on glibc version higher than 2.17"); + } + + private static String extractVersion(String line) { + int glibcIndex = line.indexOf("GLIBC_"); + int versionDelimiter = line.indexOf(" ", glibcIndex); + if ( versionDelimiter >= 0 && versionDelimiter < line.length()) + return line.substring(glibcIndex + 6, versionDelimiter); + + return line.substring(line.indexOf("GLIBC_") + 6); + } + + private static int compareVersions(String version1, String version2) { + String[] parts1 = version1.split("\\."); + String[] parts2 = version2.split("\\."); + + int major1 = Integer.parseInt(parts1[0]); + int minor1 = parts1.length > 1 ? Integer.parseInt(parts1[1]) : 0; + + int major2 = Integer.parseInt(parts2[0]); + int minor2 = parts2.length > 1 ? Integer.parseInt(parts2[1]) : 0; + + if (major1 == major2) { + System.out.printf("\tcomparing %s with %s\n", minor1, minor2); + return Integer.compare(minor1, minor2); + } + + return Integer.compare(major1, major2); + } + + private static void findFiles(File directory, FilenameFilter filter) throws IOException { + File[] files = directory.listFiles(filter); + + if (files.length == 0) { + return; + } else { + for (File file : files) { + System.out.println(file.getAbsolutePath()); + verifyLibrary(file.getAbsolutePath()); + } + } + + for (File subDirectory : directory.listFiles(File::isDirectory)) { + findFiles(subDirectory, filter); + } + } + + private static void findInDirectory(String directoryPath, boolean findLibs) throws IOException { + String libPattern = ".so"; + + File directory = new File(directoryPath); + + if (!directory.isDirectory()) { + System.out.println(directoryPath + " is not a directory."); + System.exit(1); + } + + FilenameFilter filter = new FilenameFilter() { + public boolean accept(File dir, String name) { + return findLibs ? name.endsWith(libPattern) : true; + } + }; + + findFiles(directory, filter); + } + + public static void main(String[] args) throws IOException { + String javaHome = System.getProperty("java.home"); + findInDirectory(javaHome + "/bin", false); + findInDirectory(javaHome + "/lib", true); + } +} diff --git a/test/jdk/jb/build/check_for_artifacts.sh b/test/jdk/jb/build/check_for_artifacts.sh new file mode 100755 index 000000000000..1d201acc53c5 --- /dev/null +++ b/test/jdk/jb/build/check_for_artifacts.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# +# Copyright 2000-2022 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# The test checks all required JBR artifacts were built and published + +dirname=$1 +jbsdk_version=$2 +build_number=$3 + + +read -r -d '' allArtifacts << EndOFArtifactsList +jbr-${jbsdk_version}-linux-aarch64-b${build_number}.tar.gz +jbr-${jbsdk_version}-linux-musl-aarch64-b${build_number}.tar.gz +jbr-${jbsdk_version}-linux-musl-x64-b${build_number}.tar.gz +jbr-${jbsdk_version}-linux-x64-b${build_number}.tar.gz +jbr-${jbsdk_version}-linux-x86-b${build_number}.tar.gz +jbr-${jbsdk_version}-osx-aarch64-b${build_number}.tar.gz +jbr-${jbsdk_version}-osx-x64-b${build_number}.tar.gz +jbr-${jbsdk_version}-windows-x64-b${build_number}.tar.gz +jbr-${jbsdk_version}-windows-x86-b${build_number}.tar.gz + +jbr_fd-${jbsdk_version}-linux-aarch64-b${build_number}.tar.gz +jbr_fd-${jbsdk_version}-linux-x64-b${build_number}.tar.gz +jbr_fd-${jbsdk_version}-osx-aarch64-b${build_number}.tar.gz +jbr_fd-${jbsdk_version}-osx-x64-b${build_number}.tar.gz +jbr_fd-${jbsdk_version}-windows-x64-b${build_number}.tar.gz + +jbr_jcef-${jbsdk_version}-linux-aarch64-b${build_number}.tar.gz +jbr_jcef-${jbsdk_version}-linux-x64-b${build_number}.tar.gz +jbr_jcef-${jbsdk_version}-osx-aarch64-b${build_number}.tar.gz +jbr_jcef-${jbsdk_version}-osx-aarch64-b${build_number}.pkg +jbr_jcef-${jbsdk_version}-osx-x64-b${build_number}.tar.gz +jbr_jcef-${jbsdk_version}-osx-x64-b${build_number}.pkg +jbr_jcef-${jbsdk_version}-windows-x64-b${build_number}.tar.gz + +jbr-${jbsdk_version}-osx-aarch64-b${build_number}.pkg +jbr-${jbsdk_version}-osx-x64-b${build_number}.pkg +jbrsdk-${jbsdk_version}-osx-aarch64-b${build_number}.pkg +jbrsdk-${jbsdk_version}-osx-x64-b${build_number}.pkg + +jbrsdk-${jbsdk_version}-linux-aarch64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-musl-aarch64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-musl-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-x86-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-osx-aarch64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-osx-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-windows-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-windows-x86-b${build_number}.tar.gz + +jbrsdk-${jbsdk_version}-linux-test-aarch64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-musl-test-aarch64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-musl-test-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-test-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-test-x86-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-osx-test-aarch64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-osx-test-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-windows-test-x64-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-windows-test-x86-b${build_number}.tar.gz + +jbrsdk-${jbsdk_version}-linux-aarch64-fastdebug-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-linux-x64-fastdebug-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-osx-aarch64-fastdebug-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-osx-x64-fastdebug-b${build_number}.tar.gz +jbrsdk-${jbsdk_version}-windows-x64-fastdebug-b${build_number}.tar.gz + +jbrsdk-${jbsdk_version}-linux-aarch64-fastdebug-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-linux-musl-aarch64-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-linux-musl-x64-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-linux-x64-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-linux-x64-fastdebug-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-linux-x86-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-osx-aarch64-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-osx-aarch64-fastdebug-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-osx-x64-b${build_number}_diz.tar.gz +jbrsdk-${jbsdk_version}-osx-x64-fastdebug-b${build_number}_diz.tar.gz + +jbrsdk_jcef-${jbsdk_version}-linux-aarch64-b${build_number}.tar.gz +jbrsdk_jcef-${jbsdk_version}-linux-x64-b${build_number}.tar.gz +jbrsdk_jcef-${jbsdk_version}-osx-aarch64-b${build_number}.pkg +jbrsdk_jcef-${jbsdk_version}-osx-aarch64-b${build_number}.tar.gz +jbrsdk_jcef-${jbsdk_version}-osx-x64-b${build_number}.pkg +jbrsdk_jcef-${jbsdk_version}-osx-x64-b${build_number}.tar.gz +jbrsdk_jcef-${jbsdk_version}-windows-x64-b${build_number}.tar.gz + +jbrsdk_jcef-${jbsdk_version}-linux-x64-b${build_number}_diz.tar.gz +jbrsdk_jcef-${jbsdk_version}-osx-aarch64-b${build_number}_diz.tar.gz +jbrsdk_jcef-${jbsdk_version}-osx-x64-b${build_number}_diz.tar.gz + +EndOFArtifactsList + +testname="JBRArtifacts" +count=$(echo $allArtifacts | wc -w) +n=0 +echo \#\#teamcity[testStarted name=\'$testname\'] +echo "Non existing artifacts:" +for artifact in $allArtifacts; do + isFound=$(ls $dirname | grep -c $artifact) + if [ $isFound -eq 0 ]; then + n=$((n+1)) + echo -e "\t$artifact" + fi +done + +echo "Extra artifacts:" +for relpath in $(ls $dirname); do + filename=$(basename $relpath) + isFound=$(echo $allArtifacts | grep -c $filename) + if [ $isFound -eq 0 ]; then + n=$((n+1)) + echo -e "\t$filename" + fi +done +if [ $n -eq 0 ]; then + echo \#\#teamcity[testFinished name=\'$testname\'] +else + echo \#\#teamcity[testFailed name=\'$testname\' message=\'Some artifacts cannot be found\'] +fi + +exit $n \ No newline at end of file diff --git a/test/jdk/jb/build/permissions458.sh b/test/jdk/jb/build/permissions458.sh new file mode 100644 index 000000000000..45d5615303fb --- /dev/null +++ b/test/jdk/jb/build/permissions458.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# @test +# @summary permissions458.sh checks readability permissions of JDK build +# @run shell permissions458.sh + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +FIND="/usr/bin/find" +files=$(${FIND} ${TESTJAVA} -not -perm -444) +if [ $? != 0 ]; then + echo "Command failed." + exit 1 +elif [ "$files" ]; then + echo "Files with no readability permissions:" + ls -l $files + echo "\nTest failed" + exit 1 +fi \ No newline at end of file diff --git a/test/jdk/jb/hotspot/AbortHandler.java b/test/jdk/jb/hotspot/AbortHandler.java new file mode 100644 index 000000000000..883711c0113a --- /dev/null +++ b/test/jdk/jb/hotspot/AbortHandler.java @@ -0,0 +1,115 @@ +/* + * Copyright 2022-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @requires (os.family == "mac" | os.family == "linux") + * @summary Verifies that double-free causes hs_err file to be generated + * (it is implied that the underlying malloc() is capable of + * detecting this and will abort() in that case). + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @run main AbortHandler + */ + +import jdk.internal.misc.Unsafe; +import jdk.test.lib.Asserts; +import jdk.test.lib.Platform; +import jdk.test.lib.Utils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import java.util.ArrayList; +import java.nio.file.Paths; +import java.nio.file.Path; +import java.nio.file.Files; + +public class AbortHandler { + static final String MARKER_TEXT = "SHOULD NOT REACH HERE"; + static final String HS_ERR_FILE_NAME = "hs_err.txt"; + static final Unsafe unsafe = Unsafe.getUnsafe(); + + public static void main(String args[]) throws Exception { + if (args.length > 0 && args[0].equals("--test")) { + final long addr = unsafe.allocateMemory(42); + unsafe.freeMemory(addr); + unsafe.freeMemory(addr); + unsafe.freeMemory(addr); + unsafe.freeMemory(addr); + System.out.println(MARKER_TEXT); // not supposed to get here if libc detected double-free + } else { + verifyErrorFileNotCreated(null); // with default options + verifyErrorFileNotCreated("-Djbr.catch.SIGABRT=false"); + verifyErrorFileNotCreated("-Djbr.catch.SIGABRT"); + verifyErrorFileCreated(); // with the option that enables SIGABRT to be caught + } + } + + public static void verifyErrorFileNotCreated(String option) throws Exception { + ArrayList opts = new ArrayList<>(); + opts.add("--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED"); + opts.add("-XX:-CreateCoredumpOnCrash"); + if (option != null) { + opts.add(option); + } + opts.add("AbortHandler"); + opts.add("--test"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(opts); + if (pb.command().contains("-Djbr.catch.SIGABRT=true")) { + System.out.println("Test is being executed with -Djbr.catch.SIGABRT=true."); + System.out.println("Skipping verification that hs_err is not generated."); + return; + } + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + final String hs_err_file = output.firstMatch("# *(\\S*hs_err_pid\\d+\\.log)", 1); + if (hs_err_file != null) { + throw new RuntimeException("hs_err_pid file generated with default options"); + } + } + + public static void verifyErrorFileCreated() throws Exception { + ArrayList opts = new ArrayList<>(); + opts.add("--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED"); + opts.add("-XX:-CreateCoredumpOnCrash"); + opts.add("-Djbr.catch.SIGABRT=true"); + opts.add("AbortHandler"); + opts.add("--test"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(opts); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + output.shouldNotContain(MARKER_TEXT); + + final String hs_err_file = output.firstMatch("# *(\\S*hs_err_pid\\d+\\.log)", 1); + if (hs_err_file == null) { + throw new RuntimeException("Did not find hs_err_pid file in output"); + } + + final Path hsErrPath = Paths.get(hs_err_file); + if (!Files.exists(hsErrPath)) { + throw new RuntimeException("hs_err_pid file missing at " + hsErrPath + ".\n"); + } + + System.out.println(hs_err_file + " was created"); + } +} diff --git a/test/jdk/jb/hotspot/AsyncProfilerRunnerTest.java b/test/jdk/jb/hotspot/AsyncProfilerRunnerTest.java new file mode 100644 index 000000000000..2be8d12dd4b6 --- /dev/null +++ b/test/jdk/jb/hotspot/AsyncProfilerRunnerTest.java @@ -0,0 +1,186 @@ +/* + * Copyright 2022-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +/* + * @test + * @requires os.family == "mac" + * @summary Regression test for JBR-5627. + * The test downloads async-profiler-2.9 from github and runs the simple UI application AsyncProfilerHelper + * with profiling. It checks that profiling completes successfully. + * @modules java.base/jdk.internal.misc + * @run main AsyncProfilerRunnerTest + */ + +public class AsyncProfilerRunnerTest { + static final String ASYNC_PROFILER_2_9_MACOS = "async-profiler-2.9-macos"; + static final String ASYNC_PROFILER_2_9_MACOS_ZIP = ASYNC_PROFILER_2_9_MACOS + ".zip"; + static final String ASYNC_PROFILER_2_9_MACOS_URL = "https://github.com/jvm-profiling-tools/async-profiler/releases/download/v2.9/" + ASYNC_PROFILER_2_9_MACOS_ZIP; + + static final String CURRENT_DIR=System.getProperty("user.dir"); + static final String TEST_JDK = System.getProperty("test.jdk"); + + public static void main(String[] args) { + + try { + downloadFile(ASYNC_PROFILER_2_9_MACOS_URL, ASYNC_PROFILER_2_9_MACOS_ZIP); + System.out.println("File downloaded successfully!"); + + extractZipFile(ASYNC_PROFILER_2_9_MACOS_ZIP, CURRENT_DIR); + System.out.println("File extracted successfully!"); + + String[] profilerCommand = new String[] { + TEST_JDK + "/bin/java", + "-agentpath:" + + CURRENT_DIR + "/" + ASYNC_PROFILER_2_9_MACOS + + "/build/libasyncProfiler.so=version,start,event=cpu,jfr,threads,jfrsync=profile,file=profile.html,title=test", + "AsyncProfilerHelper" + }; + + System.out.println("running the helper against: " + profilerCommand[0]); + System.out.println(" agent parameters: " + profilerCommand[1]); + ProcessResult result = runProfilerCommand(profilerCommand); + System.out.println("Process output:\n" + result.output()); + System.out.println("Process error:\n" + result.error()); + + int exitCode = result.exitCode(); + if (exitCode != 0) + throw new RuntimeException("Process exit code: " + exitCode); + + } catch (IOException | InterruptedException e) { + System.out.println("An error occurred: " + e.getMessage()); + } + } + + public static void downloadFile(String fileUrl, String destinationPath) throws IOException { + System.out.println("Downloading: " + fileUrl); + + HttpURLConnection connection = (HttpURLConnection) new URL(fileUrl).openConnection(); + + if (connection.getResponseCode() != 200) + throw new RuntimeException(connection.getResponseMessage()); + + Files.copy(connection.getInputStream(), Paths.get(destinationPath), StandardCopyOption.REPLACE_EXISTING); + } + + public static void extractZipFile(String zipFilePath, String extractPath) throws IOException { + File destDir = new File(extractPath); + if (!destDir.exists()) { + destDir.mkdir(); + } + try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) { + ZipEntry entry = zipIn.getNextEntry(); + while (entry != null) { + String filePath = extractPath + File.separator + entry.getName(); + if (!entry.isDirectory()) { + extractFile(zipIn, filePath); + } else { + File dir = new File(filePath); + dir.mkdir(); + } + zipIn.closeEntry(); + entry = zipIn.getNextEntry(); + } + } + } + + public static void extractFile(ZipInputStream zipIn, String filePath) throws IOException { + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); + byte[] bytesIn = new byte[4096]; + int read; + while ((read = zipIn.read(bytesIn)) != -1) { + bos.write(bytesIn, 0, read); + } + bos.close(); + } + + public static ProcessResult runProfilerCommand(String[] profilerCommand) throws IOException, InterruptedException { + + Process process = Runtime.getRuntime().exec(profilerCommand); + process.waitFor(); + + String output = readStream(process.getInputStream()); + String error = readStream(process.getErrorStream()); + int exitCode = process.exitValue(); + + return new ProcessResult(output, error, exitCode); + } + + public static String readStream(InputStream stream) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + StringBuilder output = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + output.append(line).append("\n"); + } + return output.toString(); + } + + record ProcessResult(String output, String error, int exitCode) { + public ProcessResult(String output, String error, int exitCode) { + this.output = output; + this.error = error; + this.exitCode = exitCode; + } + } +} + +class AsyncProfilerHelper { + private static JFrame frame; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeLater(AsyncProfilerHelper::initUI); + } finally { + SwingUtilities.invokeAndWait(AsyncProfilerHelper::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("AsyncProfilerHelper"); + frame.setBounds(200, 200, 500, 300); + frame.setVisible(true); + JWindow w = new JWindow(frame); + w.setBounds(300, 250, 200, 200); + w.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } +} \ No newline at end of file diff --git a/test/jdk/jb/hotspot/DetectVirtualization.java b/test/jdk/jb/hotspot/DetectVirtualization.java new file mode 100644 index 000000000000..451dc02b6fb3 --- /dev/null +++ b/test/jdk/jb/hotspot/DetectVirtualization.java @@ -0,0 +1,50 @@ +/* + * Copyright 2022-2024 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @summary Verifies that the system property describing virtualization + * is present + * @library /test/lib + * @run main DetectVirtualization + */ + +public class DetectVirtualization { + static final String VIRT_PROPERTY_NAME = "intellij.os.virtualization"; + + public static void main(String args[]) { + String virtualization = System.getProperty(VIRT_PROPERTY_NAME); + System.out.println("Detected virtualization: " + virtualization); + switch (virtualization) { + case "Xen": + case "KVM": + case "VMWare": + case "HyperV": + case "none": + break; + default: + throw new RuntimeException(VIRT_PROPERTY_NAME + " has an unexpected value " + virtualization); + } + } +} diff --git a/test/jdk/jb/hotspot/JNIRefsInCrashLog.java b/test/jdk/jb/hotspot/JNIRefsInCrashLog.java new file mode 100644 index 000000000000..ba8f26d73ebc --- /dev/null +++ b/test/jdk/jb/hotspot/JNIRefsInCrashLog.java @@ -0,0 +1,70 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * @test + * @summary Verifies that the HotSpot crash log includes information + * about the number of JNI references and their associated + * memory consumption. + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @run main JNIRefsInCrashLog + */ + +import jdk.internal.misc.Unsafe; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import java.util.ArrayList; + + +public class JNIRefsInCrashLog { + static final Unsafe unsafe = Unsafe.getUnsafe(); + + public static void main(String args[]) throws Exception { + if (args.length > 0 && args[0].equals("--test")) { + System.out.println("Proceeding to crash JVM with OOME"); + crashJVM(); + System.out.println("...shouldn't reach here"); + } else { + generateAndVerifyCrashLogContents(); + } + } + + static void crashJVM() { + long[][][] array = new long[Integer.MAX_VALUE][][]; + for (int i = 0; i < Integer.MAX_VALUE; i++) { + array[i] = new long[Integer.MAX_VALUE][Integer.MAX_VALUE]; + } + int random = (int) (Math.random() * Integer.MAX_VALUE); + System.out.println(array[random][42][0]); + } + + public static void generateAndVerifyCrashLogContents() throws Exception { + ArrayList opts = new ArrayList<>(); + opts.add("--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED"); + opts.add("-Xmx8m"); + opts.add("-XX:-CreateCoredumpOnCrash"); + opts.add("-XX:+CrashOnOutOfMemoryError"); + opts.add("-XX:+ErrorFileToStdout"); + opts.add(JNIRefsInCrashLog.class.getName()); + opts.add("--test"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(opts); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.outputTo(System.out); + output.shouldContain("JNI global refs memory usage:"); + } +} diff --git a/test/jdk/jb/hotspot/JNIRefsInJstack.java b/test/jdk/jb/hotspot/JNIRefsInJstack.java new file mode 100644 index 000000000000..4ec99ba26bc3 --- /dev/null +++ b/test/jdk/jb/hotspot/JNIRefsInJstack.java @@ -0,0 +1,63 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @summary Verifies that jstack includes information on memory + * consumed by JNI global/weak references + * @library /test/lib + * @run main/othervm JNIRefsInJstack + */ + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.Platform; + +import java.io.IOException; + +public class JNIRefsInJstack { + + public static void main(String[] args) { + + long pid = ProcessHandle.current().pid(); + final OutputAnalyzer jstackOutput = runJstack(pid); + jstackOutput.shouldHaveExitValue(0) + .shouldContain("JNI global refs memory usage:"); + } + + + static OutputAnalyzer runJstack(long pid) { + try { + final String JSTACK = JDKToolFinder.getTestJDKTool("jstack"); + final ProcessBuilder pb = new ProcessBuilder(JSTACK, String.valueOf(pid)); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.outputTo(System.out); + output.shouldHaveExitValue(0); + return output; + } catch (IOException e) { + throw new RuntimeException("Launching jstack failed", e); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/hotspot/OOMEStacksInCrashLog.java b/test/jdk/jb/hotspot/OOMEStacksInCrashLog.java new file mode 100644 index 000000000000..8dbb9569127c --- /dev/null +++ b/test/jdk/jb/hotspot/OOMEStacksInCrashLog.java @@ -0,0 +1,121 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * @test + * @summary Verifies that the HotSpot crash log includes recent OOME + * stack traces and some classloader statistics. + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @run main OOMEStacksInCrashLog + */ + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; + + +public class OOMEStacksInCrashLog { + public static void main(String args[]) throws Exception { + if (args.length > 0 && args[0].equals("--test")) { + loadClasses(); + + System.out.println("Proceeding to crash JVM with OOME"); + crashJVM(); + System.out.println("...shouldn't reach here"); + } else { + generateAndVerifyCrashLogContents(); + } + } + + static void crashJVM() { + System.out.println("------- first attempt to crash -------"); + long[][][] array = new long[100][][]; + for (int i = 0; i < 100; i++) { + System.out.println("------- crash attempt #" + i + "-------"); + array[i] = new long[1000][1000]; + } + int random = (int) (Math.random() * 100); + + System.out.println(array[random][42][0]); + System.out.println(class1); + System.out.println(class2); + System.out.println(class3); + } + + static class MyClassLoader extends ClassLoader { + public MyClassLoader(ClassLoader parent) { + super("my test classloader", parent); + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + if (name.equals("OOMEStacksInCrashLog")) { + try (final InputStream classStream = OOMEStacksInCrashLog.class.getClassLoader() + .getResourceAsStream("OOMEStacksInCrashLog.class")) { + byte[] classBytes = classStream.readAllBytes(); + final Class c = defineClass(name, classBytes, 0, classBytes.length); + resolveClass(c); + return c; + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + return super.findClass(name); + } + } + } + + static Class class1; + static Class class2; + static Class class3; + + static void loadClasses() throws Exception { + MyClassLoader loader1 = new MyClassLoader(OOMEStacksInCrashLog.class.getClassLoader()); + class1 = loader1.findClass("OOMEStacksInCrashLog"); + + MyClassLoader loader2 = new MyClassLoader(OOMEStacksInCrashLog.class.getClassLoader()); + class2 = loader2.findClass("OOMEStacksInCrashLog"); + + MyClassLoader loader3 = new MyClassLoader(OOMEStacksInCrashLog.class.getClassLoader()); + class3 = loader3.findClass("OOMEStacksInCrashLog"); + } + + public static void generateAndVerifyCrashLogContents() throws Exception { + ArrayList opts = new ArrayList<>(); + opts.add("--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED"); + opts.add("-Xmx20m"); + opts.add("-XX:-CreateCoredumpOnCrash"); + opts.add("-XX:+CrashOnOutOfMemoryError"); + opts.add("-XX:+ErrorFileToStdout"); + opts.add(OOMEStacksInCrashLog.class.getName()); + opts.add("--test"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(opts); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.outputTo(System.out); + output.shouldContain("OOME stack traces (most recent first)"); + output.shouldContain("OOMEStacksInCrashLog.crashJVM()"); + + output.shouldContain("Loader bootstrap"); + output.shouldContain("Loader OOMEStacksInCrashLog$MyClassLoader"); + output.shouldContain("Classloader memory used:"); + output.shouldContain("OOMEStacksInCrashLog : loaded 4 times"); + } +} diff --git a/test/jdk/jb/hotspot/RSSInCrashLog.java b/test/jdk/jb/hotspot/RSSInCrashLog.java new file mode 100644 index 000000000000..632b8391debc --- /dev/null +++ b/test/jdk/jb/hotspot/RSSInCrashLog.java @@ -0,0 +1,79 @@ +/* + * Copyright 2024 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * @test + * @summary Verifies that the HotSpot crash log includes RSS information. + * @library /test/lib + * @run main RSSInCrashLog + */ + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +import java.util.ArrayList; +import java.util.Optional; + +public class RSSInCrashLog { + public static void main(String args[]) throws Exception { + if (args.length > 0 && args[0].equals("--test")) { + System.out.println("Proceeding to crash JVM with OOME"); + crashJVM(); + System.out.println("...shouldn't reach here"); + } else { + generateAndVerifyCrashLogContents(); + } + } + + static void crashJVM() { + System.out.println("------- first attempt to crash -------"); + long[][][] array = new long[100][][]; + for (int i = 0; i < 100; i++) { + System.out.println("------- crash attempt #" + i + "-------"); + array[i] = new long[1000][1000]; + } + int random = (int) (Math.random() * 100); + + System.out.println(array[random][42][0]); + } + + public static void generateAndVerifyCrashLogContents() throws Exception { + ArrayList opts = new ArrayList<>(); + opts.add("-Xmx20m"); + opts.add("-XX:-CreateCoredumpOnCrash"); + opts.add("-XX:+CrashOnOutOfMemoryError"); + opts.add("-XX:+ErrorFileToStdout"); + opts.add(RSSInCrashLog.class.getName()); + opts.add("--test"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(opts); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.outputTo(System.out); + output.shouldContain("Process memory usage"); + output.shouldContain("Resident Set Size: "); + + Optional rssLine = output.asLines().stream().filter(it -> it.startsWith("Resident Set Size:")).findAny(); + String rssValue = rssLine.get().split(" ")[3]; + if (!rssValue.endsWith("K")) { + throw new RuntimeException("RSS '" + rssValue + "' does not end with 'K'"); + } + rssValue = rssValue.substring(0, rssValue.length() - 1); + long rss = Long.parseLong(rssValue); + System.out.println("Parsed RSS: " + rss); + if (rss < 10) { + throw new RuntimeException("RSS is unusually small: " + rss + "K"); + } + } +} diff --git a/test/jdk/jb/hotspot/RSSInVmInfo.java b/test/jdk/jb/hotspot/RSSInVmInfo.java new file mode 100644 index 000000000000..e8f0d0a90b49 --- /dev/null +++ b/test/jdk/jb/hotspot/RSSInVmInfo.java @@ -0,0 +1,64 @@ +/* + * Copyright 2024 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/* + * @test + * @summary Verifies that the VM.info jcmd includes RSS information. + * @library /test/lib + * @run main/othervm RSSInVmInfo + */ + +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.process.OutputAnalyzer; + +import java.io.IOException; +import java.util.Optional; + +public class RSSInVmInfo { + public static void main(String args[]) throws Exception { + long pid = ProcessHandle.current().pid(); + final OutputAnalyzer output = runJCmd(pid); + output.outputTo(System.out); + output.shouldContain("Process memory usage"); + output.shouldContain("Resident Set Size: "); + + Optional rssLine = output.asLines().stream().filter(it -> it.startsWith("Resident Set Size:")).findAny(); + String rssValue = rssLine.get().split(" ")[3]; + if (!rssValue.endsWith("K")) { + throw new RuntimeException("RSS '" + rssValue + "' does not end with 'K'"); + } + rssValue = rssValue.substring(0, rssValue.length() - 1); + long rss = Long.parseLong(rssValue); + System.out.println("Parsed RSS: " + rss); + if (rss < 10) { + throw new RuntimeException("RSS is unusually small: " + rss + "K"); + } + } + + static OutputAnalyzer runJCmd(long pid) { + try { + final String jcmd = JDKToolFinder.getTestJDKTool("jcmd"); + final ProcessBuilder pb = new ProcessBuilder(jcmd, String.valueOf(pid), "VM.info"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.outputTo(System.out); + output.shouldHaveExitValue(0); + return output; + } catch (IOException e) { + throw new RuntimeException("Launching jcmd failed", e); + } + } +} diff --git a/test/jdk/jb/java/a11y/DeadlockTest.java b/test/jdk/jb/java/a11y/DeadlockTest.java new file mode 100644 index 000000000000..e30e849644d8 --- /dev/null +++ b/test/jdk/jb/java/a11y/DeadlockTest.java @@ -0,0 +1,137 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary JBR-3413 use timeout in CAccessibility.invokeAndWait + * @author anton.tarasov@jetbrains.com + * @compile --add-exports java.desktop/com.apple.concurrent=ALL-UNNAMED DeadlockTest.java + * @run main/othervm/manual --add-exports java.desktop/com.apple.concurrent=ALL-UNNAMED DeadlockTest + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; + +import com.apple.concurrent.Dispatch; + +public class DeadlockTest { + static final int COUNTER_THRESHOLD = 2; + static final int WAIT_SECONDS = 10; + + static final AtomicInteger COUNTER_1 = new AtomicInteger(0); + static final AtomicInteger COUNTER_2 = new AtomicInteger(0); + + static final CountDownLatch START_LATCH = new CountDownLatch(1); + static final CountDownLatch TEST_LATCH = new CountDownLatch(1); + static final JFrame FRAME = new JFrame("frame"); + + public static void main(String[] args) throws InterruptedException { + // System.setProperty("sun.lwawt.macosx.CAccessibility.invokeTimeoutSeconds", "1"); + + EventQueue.invokeLater(DeadlockTest::showInstructions); + START_LATCH.await(); + + try { + if (!TEST_LATCH.await(WAIT_SECONDS, TimeUnit.SECONDS)) { + throw new RuntimeException("Test FAILED!"); + } + System.out.println("Test PASSED."); + } finally { + FRAME.dispose(); + } + } + + static void showInstructions() { + JFrame frame = new JFrame("Test Instructions"); + frame.setLayout(new BorderLayout()); + JLabel label = new JLabel("Start VoiceOver (Cmd + F5) and press \"Test\"."); + label.setBorder(BorderFactory.createEmptyBorder(20, 10, 20, 10)); + frame.add(label, BorderLayout.NORTH); + JPanel panel = new JPanel(); + JButton testButton = new JButton("Test"); + panel.add(testButton); + testButton.addActionListener(e -> { + Timer t = new Timer(500, ev -> EventQueue.invokeLater(DeadlockTest::test)); + t.setRepeats(false); + t.start(); + frame.dispose(); + }); + frame.add(panel, BorderLayout.SOUTH); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + + /** + * Transfers focus b/w two buttons and performs blocking execution on every focus gain. + */ + static void test() { + START_LATCH.countDown(); + + JButton button1 = new JButton("button1"); + JButton button2 = new JButton("button2"); + + Supplier condition = () -> { + if (COUNTER_1.get() >= COUNTER_THRESHOLD && + COUNTER_2.get() >= COUNTER_THRESHOLD) + { + TEST_LATCH.countDown(); + return true; + } + return false; + }; + + button1.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + Dispatch.getInstance().getBlockingMainQueueExecutor(). + execute(() -> System.out.println("button1: " + COUNTER_1.incrementAndGet() + ": " + Thread.currentThread().getName())); + + if (!condition.get()) EventQueue.invokeLater(button2::requestFocusInWindow); + } + }); + + button2.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + Dispatch.getInstance().getBlockingMainQueueExecutor(). + execute(() -> System.out.println("button2: " + COUNTER_2.incrementAndGet() + ": " + Thread.currentThread().getName())); + + if (!condition.get()) EventQueue.invokeLater(button1::requestFocusInWindow); + } + }); + + FRAME.setLayout(new FlowLayout()); + FRAME.add(button1); + FRAME.add(button2); + FRAME.setLocationRelativeTo(null); + FRAME.pack(); + FRAME.setVisible(true); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/api/backend/FindDependenciesTest.java b/test/jdk/jb/java/api/backend/FindDependenciesTest.java new file mode 100644 index 000000000000..7ae2e8211fe8 --- /dev/null +++ b/test/jdk/jb/java/api/backend/FindDependenciesTest.java @@ -0,0 +1,104 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @modules java.base/com.jetbrains.internal:+open + * @build com.jetbrains.* com.jetbrains.api.FindDependencies com.jetbrains.jbr.FindDependencies + * @run main FindDependenciesTest + */ + +import com.jetbrains.internal.JBRApi; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.jetbrains.Util.*; +import static com.jetbrains.api.FindDependencies.*; +import static com.jetbrains.jbr.FindDependencies.*; + +public class FindDependenciesTest { + + public static void main(String[] args) throws Throwable { + JBRApi.ModuleRegistry r = init(new String[] {}, names(""" + A AL AR ARL /*ARR is skipped*/ ARRL ARRR + BV B1 B2 B3 B4 B5 B6 B7 B8 B9 + C1 !C3 C5 C6 + """).toArray(String[]::new)); + // Simple tree with non-proxy type ARR + validateDependencies(AR.class, cs("AR ARL /*ARR is skipped*/ ARRL ARRR")); + validateDependencies(A.class, cs("A AL AR ARL /*ARR is skipped*/ ARRL ARRR")); + validateDependencies(ARRR.class, ARRR.class); + // Complex graph with many cycles + for (Class c : cs("B4 B6 B2 B3 B5")) { + validateDependencies(c, cs("BV B2 B3 B4 B5 B6 B7 B8 B9")); + } + validateDependencies(B1.class, cs("BV B1 B2 B3 B4 B5 B6 B7 B8 B9")); + validateDependencies(B7.class, B7.class, BV.class); + validateDependencies(B8.class, B8.class, BV.class); + validateDependencies(B9.class, B9.class); + validateDependencies(BV.class, BV.class); + // Client proxy dependencies + r.clientProxy(C3.class.getName(), C2.class.getName()); + r.proxy(C5.class.getName(), C4.class.getName()); + validateDependencies(C1.class, C1.class, C3.class, C5.class, C6.class); + validateDependencies(C5.class, C5.class, C6.class); + validateDependencies(C6.class, C6.class); + validateDependencies(C3.class, C3.class, C5.class, C6.class); + } + + private static Class[] cs(String interfaces) { + return names(interfaces).map(c -> { + try { + return Class.forName(c); + } catch (ClassNotFoundException e) { + throw new Error(e); + } + }).toArray(Class[]::new); + } + private static Stream names(String interfaces) { + return Stream.of(interfaces.replaceAll("/\\*[^*]*\\*/", "").split("(\s|\n)+")).map(String::strip) + .map(s -> { + if (s.startsWith("!")) return "com.jetbrains.jbr.FindDependencies$" + s.substring(1); + else return "com.jetbrains.api.FindDependencies$" + s; + }); + } + + private static void validateDependencies(Class src, Class... expected) throws Throwable { + Set> actual = getProxyDependencies(src); + if (actual.size() != expected.length || !actual.containsAll(List.of(expected))) { + throw new Error("Invalid proxy dependencies for class " + src + + ". Expected: [" + Stream.of(expected).map(Class::getSimpleName).collect(Collectors.joining(" ")) + + "]. Actual: [" + actual.stream().map(Class::getSimpleName).collect(Collectors.joining(" ")) + "]."); + } + } + + private static final ReflectedMethod getProxyDependencies = + getMethod("com.jetbrains.internal.ProxyDependencyManager", "getProxyDependencies", Class.class); + @SuppressWarnings("unchecked") + static Set> getProxyDependencies(Class interFace) throws Throwable { + return (Set>) getProxyDependencies.invoke(null, interFace); + } +} diff --git a/test/jdk/jb/java/api/backend/MethodMappingTest.java b/test/jdk/jb/java/api/backend/MethodMappingTest.java new file mode 100644 index 000000000000..7fa80b7868e4 --- /dev/null +++ b/test/jdk/jb/java/api/backend/MethodMappingTest.java @@ -0,0 +1,78 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @modules java.base/com.jetbrains.internal:+open + * @build com.jetbrains.* com.jetbrains.api.MethodMapping com.jetbrains.jbr.MethodMapping + * @run main MethodMappingTest + */ + +import com.jetbrains.internal.JBRApi; + +import static com.jetbrains.Util.*; +import static com.jetbrains.api.MethodMapping.*; +import static com.jetbrains.jbr.MethodMapping.*; + +public class MethodMappingTest { + + public static void main(String[] args) throws Throwable { + JBRApi.ModuleRegistry r = init(); + // Simple empty interface + r.proxy(SimpleEmpty.class.getName(), SimpleEmptyImpl.class.getName()); + requireImplemented(SimpleEmpty.class); + // Plain method mapping + r.proxy(PlainFail.class.getName(), PlainImpl.class.getName()); + r.service(Plain.class.getName(), PlainImpl.class.getName()) + .withStatic("c", "main", MethodMappingTest.class.getName()); + requireNotImplemented(PlainFail.class); + requireImplemented(Plain.class); + // Callback (client proxy) + r.clientProxy(Callback.class.getName(), ApiCallback.class.getName()); + requireImplemented(Callback.class); + // 2-way + r.twoWayProxy(ApiTwoWay.class.getName(), JBRTwoWay.class.getName()); + requireImplemented(ApiTwoWay.class); + requireImplemented(JBRTwoWay.class); + // Conversion + r.twoWayProxy(Conversion.class.getName(), ConversionImpl.class.getName()); + r.proxy(ConversionSelf.class.getName(), ConversionSelfImpl.class.getName()); + r.proxy(ConversionFail.class.getName(), ConversionFailImpl.class.getName()); + requireImplemented(Conversion.class); + requireImplemented(ConversionImpl.class); + requireImplemented(ConversionSelf.class); + requireNotImplemented(ConversionFail.class); + } + + private static final ReflectedMethod methodsImplemented = getMethod("com.jetbrains.internal.Proxy", "areAllMethodsImplemented"); + private static void requireImplemented(Class interFace) throws Throwable { + if (!(boolean) methodsImplemented.invoke(getProxy(interFace))) { + throw new Error("All methods must be implemented"); + } + } + private static void requireNotImplemented(Class interFace) throws Throwable { + if ((boolean) methodsImplemented.invoke(getProxy(interFace))) { + throw new Error("Not all methods must be implemented"); + } + } +} diff --git a/test/jdk/jb/java/api/backend/ProxyInfoResolvingTest.java b/test/jdk/jb/java/api/backend/ProxyInfoResolvingTest.java new file mode 100644 index 000000000000..5ef678d7e954 --- /dev/null +++ b/test/jdk/jb/java/api/backend/ProxyInfoResolvingTest.java @@ -0,0 +1,68 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @modules java.base/com.jetbrains.internal:+open + * @build com.jetbrains.* com.jetbrains.api.ProxyInfoResolving com.jetbrains.jbr.ProxyInfoResolving + * @run main ProxyInfoResolvingTest + */ + +import com.jetbrains.internal.JBRApi; + +import java.util.Objects; + +import static com.jetbrains.Util.*; +import static com.jetbrains.api.ProxyInfoResolving.*; +import static com.jetbrains.jbr.ProxyInfoResolving.*; + +public class ProxyInfoResolvingTest { + + public static void main(String[] args) throws Throwable { + JBRApi.ModuleRegistry r = init(); + // No mapping defined -> null + requireNull(getProxy(ProxyInfoResolvingTest.class)); + // Invalid JBR-side target class -> null + r.proxy(InterfaceWithoutImplementation.class.getName(), "absentImpl"); + requireNull(getProxy(InterfaceWithoutImplementation.class)); + // Invalid JBR-side target static method mapping -> null + r.service(ServiceWithoutImplementation.class.getName()) + .withStatic("someMethod", "someMethod", "NoClass"); + requireNull(getProxy(ServiceWithoutImplementation.class)); + // Service without target class or static method mapping -> null + r.service(EmptyService.class.getName()); + requireNull(getProxy(EmptyService.class)); + // Class passed instead of interface for client proxy -> error + r.clientProxy(ClientProxyClass.class.getName(), ClientProxyClassImpl.class.getName()); + mustFail(() -> getProxy(ClientProxyClass.class), RuntimeException.class); + // Class passed instead of interface for proxy -> null + r.proxy(ProxyClass.class.getName(), ProxyClassImpl.class.getName()); + requireNull(getProxy(ProxyClass.class)); + // Valid proxy + r.proxy(ValidApi.class.getName(), ValidApiImpl.class.getName()); + Objects.requireNonNull(getProxy(ValidApi.class)); + // Multiple implementations + r.proxy(ValidApi2.class.getName(), "MissingClass", ValidApi2Impl.class.getName()); + Objects.requireNonNull(getProxy(ValidApi2.class)); + } +} diff --git a/test/jdk/jb/java/api/backend/ProxyRegistrationTest.java b/test/jdk/jb/java/api/backend/ProxyRegistrationTest.java new file mode 100644 index 000000000000..60556339abde --- /dev/null +++ b/test/jdk/jb/java/api/backend/ProxyRegistrationTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @modules java.base/com.jetbrains.internal:+open + * @build com.jetbrains.* + * @run main ProxyRegistrationTest + */ + +import com.jetbrains.internal.JBRApi; + +import static com.jetbrains.Util.*; + +public class ProxyRegistrationTest { + + public static void main(String[] args) { + JBRApi.ModuleRegistry r = init(); + // Only service may not have target type + r.service("s"); + mustFail(() -> r.proxy("i"), IllegalArgumentException.class); + mustFail(() -> r.proxy("i", null), NullPointerException.class); + mustFail(() -> r.clientProxy("i", null), NullPointerException.class); + mustFail(() -> r.twoWayProxy("i", null), NullPointerException.class); + // Invalid 2-way mapping + r.proxy("a", "b"); + mustFail(() -> r.clientProxy("b", "c"), IllegalArgumentException.class); + mustFail(() -> r.clientProxy("c", "a"), IllegalArgumentException.class); + } +} diff --git a/test/jdk/jb/java/api/backend/RealTest.java b/test/jdk/jb/java/api/backend/RealTest.java new file mode 100644 index 000000000000..80643bb46b03 --- /dev/null +++ b/test/jdk/jb/java/api/backend/RealTest.java @@ -0,0 +1,86 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @modules java.base/com.jetbrains.internal:+open + * @build com.jetbrains.* com.jetbrains.api.Real com.jetbrains.jbr.Real + * @run main RealTest + */ + +import com.jetbrains.internal.JBRApi; + +import java.util.Objects; + +import static com.jetbrains.Util.*; +import static com.jetbrains.api.Real.*; +import static com.jetbrains.jbr.Real.*; + +public class RealTest { + + public static void main(String[] args) { + init() + .service(Service.class.getName(), ServiceImpl.class.getName()) + .twoWayProxy(Api2Way.class.getName(), JBR2Way.class.getName()) + .twoWayProxy(ApiLazyNumber.class.getName(), JBRLazyNumber.class.getName()); + + // Get service + Service service = Objects.requireNonNull(JBRApi.getService(Service.class)); + + // Test JBR-side proxy wrapping & unwrapping + Api2Way stw = Objects.requireNonNull(service.get2Way()); + Api2Way nstw = Objects.requireNonNull(service.passthrough(stw)); + // stw and nstw are different proxy objects, because *real* object is on JBR-side + if (stw.getClass() != nstw.getClass()) { + throw new Error("Different classes when passing through the same object"); + } + + // Test client-side proxy wrapping & unwrapping + TwoWayImpl tw = new TwoWayImpl(); + Api2Way ntw = service.passthrough(tw); + if (tw != ntw) { + throw new Error("Client pass through doesn't work, there are probably issues with extracting target object"); + } + // Service must have set tw.value by calling accept() + Objects.requireNonNull(tw.value); + + // Passing through null object -> null + requireNull(service.passthrough(null)); + + if (!service.isSelf(service)) { + throw new Error("service.isSelf(service) == false"); + } + + if (service.sum(() -> 200, () -> 65).get() != 265) { + throw new Error("Lazy numbers conversion error"); + } + } + + private static class TwoWayImpl implements Api2Way { + private Object value; + @Override + public void accept(Object o) { + value = o; + } + } +} diff --git a/test/jdk/jb/java/api/backend/ReflectiveBootstrapTest.java b/test/jdk/jb/java/api/backend/ReflectiveBootstrapTest.java new file mode 100644 index 000000000000..4c6f7c72e38a --- /dev/null +++ b/test/jdk/jb/java/api/backend/ReflectiveBootstrapTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @build com.jetbrains.JBR + * @run main ReflectiveBootstrapTest + */ + +import com.jetbrains.JBR; + +import java.lang.invoke.MethodHandles; +import java.util.Objects; + +public class ReflectiveBootstrapTest { + + public static void main(String[] args) throws Exception { + JBR.ServiceApi api = (JBR.ServiceApi) Class.forName("com.jetbrains.bootstrap.JBRApiBootstrap") + .getMethod("bootstrap", MethodHandles.Lookup.class) + .invoke(null, MethodHandles.privateLookupIn(JBR.class, MethodHandles.lookup())); + Objects.requireNonNull(api, "JBR API bootstrap failed"); + } +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/JBR.java b/test/jdk/jb/java/api/backend/com/jetbrains/JBR.java new file mode 100644 index 000000000000..e3eb6e93ea53 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/JBR.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +/** + * Special open JBR API frontend for tests. + */ +public class JBR { + + public interface ServiceApi { + + T getService(Class interFace); + } + + static final class Metadata { + static String[] KNOWN_SERVICES = {}; + static String[] KNOWN_PROXIES = {}; + } +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/Util.java b/test/jdk/jb/java/api/backend/com/jetbrains/Util.java new file mode 100644 index 000000000000..99d9a68e6781 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/Util.java @@ -0,0 +1,105 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains; + +import com.jetbrains.internal.JBRApi; + +import java.lang.invoke.MethodHandles; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class Util { + + public static ReflectedMethod getMethod(String className, String method, Class... parameterTypes) { + try { + Method m = Class.forName(className, false, JBRApi.class.getClassLoader()) + .getDeclaredMethod(method, parameterTypes); + m.setAccessible(true); + return (o, a) -> { + try { + return m.invoke(o, a); + } catch (IllegalAccessException e) { + throw new Error(e); + } catch (InvocationTargetException e) { + throw e.getCause(); + } + }; + } catch (NoSuchMethodException | ClassNotFoundException e) { + throw new Error(e); + } + } + + public static JBRApi.ModuleRegistry init() { + return init(new String[0], new String[0]); + } + + /** + * Set known services & proxies at runtime and invoke internal + * {@link JBRApi#init} bypassing {@link com.jetbrains.bootstrap.JBRApiBootstrap#bootstrap} + * in order not to init normal JBR API modules. + */ + public static JBRApi.ModuleRegistry init(String[] knownServices, String[] knownProxies) { + JBR.Metadata.KNOWN_SERVICES = knownServices; + JBR.Metadata.KNOWN_PROXIES = knownProxies; + JBRApi.init(MethodHandles.lookup()); + return JBRApi.registerModule(MethodHandles.lookup(), JBR.class.getModule()::addExports); + } + + private static final ReflectedMethod getProxy = getMethod(JBRApi.class.getName(), "getProxy", Class.class); + public static Object getProxy(Class interFace) throws Throwable { + return getProxy.invoke(null, interFace); + } + + public static void requireNull(Object o) { + if (o != null) throw new RuntimeException("Value must be null"); + } + + @SafeVarargs + public static void mustFail(ThrowingRunnable action, Class... exceptionTypeChain) { + try { + action.run(); + } catch(Throwable exception) { + Throwable e = exception; + error: { + for (Class c : exceptionTypeChain) { + if (e == null || !c.isInstance(e)) break error; + e = e.getCause(); + } + if (e == null) return; + } + throw new Error("Unexpected exception", exception); + } + throw new Error("Operation must fail, but succeeded"); + } + + @FunctionalInterface + public interface ThrowingRunnable { + void run() throws Throwable; + } + + @FunctionalInterface + public interface ReflectedMethod { + Object invoke(Object obj, Object... args) throws Throwable; + } +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/api/FindDependencies.java b/test/jdk/jb/java/api/backend/com/jetbrains/api/FindDependencies.java new file mode 100644 index 000000000000..9ddc1e1dfc06 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/api/FindDependencies.java @@ -0,0 +1,76 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.api; + +public class FindDependencies { + public interface A { + void f(AL l, AR r); + } + public interface AL {} + public interface AR { + void f(ARL l, ARR r); + } + public interface ARL {} + public interface ARR { + void f(ARRL l, ARRR r); + } + public interface ARRL {} + public interface ARRR {} + + public interface BV {} + public interface B1 { + void f(BV bvs, B2 t, BV bve); + } + public interface B2 { + void f(BV bvs, B3 t, BV bve); + } + public interface B3 { + void f(B8 l, BV bvs, B4 t, B2 b, BV bve, B9 r); + } + public interface B4 { + void f(BV bvs, B2 b, B5 t, BV bve); + } + public interface B5 { + void f(BV bvs, B6 s, B3 b, B7 t, BV bve); + } + public interface B6 { + void f(BV bvs, B5 b, BV bve); + } + public interface B7 { + void f(BV v); + } + public interface B8 { + void f(BV v); + } + public interface B9 {} + + public interface C1 { + void f(C2 c); + } + public interface C2 {} + public interface C5 { + void f(C6 c); + } + public interface C6 {} +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/api/MethodMapping.java b/test/jdk/jb/java/api/backend/com/jetbrains/api/MethodMapping.java new file mode 100644 index 000000000000..d71ff0394fdb --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/api/MethodMapping.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.api; + +public class MethodMapping { + public interface SimpleEmpty {} + public interface Plain { + void a(); + boolean b(); + void c(String... a); + } + public interface PlainFail extends Plain {} + public interface ApiCallback { + void hello(); + } + public interface ApiTwoWay { + void something(); + } + public interface Conversion { + SimpleEmpty convert(Plain a, ApiCallback b, ApiTwoWay c); + } + public interface ConversionSelf extends Conversion { + ConversionSelf convert(Object a, Object b, Object c); + } + public interface ConversionFail extends Conversion { + void missingMethod(); + } +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/api/ProxyInfoResolving.java b/test/jdk/jb/java/api/backend/com/jetbrains/api/ProxyInfoResolving.java new file mode 100644 index 000000000000..e885f1430b55 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/api/ProxyInfoResolving.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.api; + +public class ProxyInfoResolving { + public interface InterfaceWithoutImplementation {} + public interface ServiceWithoutImplementation {} + public interface EmptyService {} + public static class ClientProxyClassImpl {} + public static class ProxyClass {} + public interface ValidApi {} + public interface ValidApi2 {} +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/api/Real.java b/test/jdk/jb/java/api/backend/com/jetbrains/api/Real.java new file mode 100644 index 000000000000..b65757d763a2 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/api/Real.java @@ -0,0 +1,50 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.api; + +import java.util.function.Consumer; + +public class Real { + + public interface Service { + Api2Way get2Way(); + Api2Way passthrough(Api2Way a); + boolean isSelf(Service a); + ApiLazyNumber sum(ApiLazyNumber a, ApiLazyNumber b); + /** + * When generating bridge class, convertible method parameters are changed to Objects, + * which may cause name collisions + */ + void testMethodNameConflict(Api2Way a); + void testMethodNameConflict(ApiLazyNumber a); + } + + @FunctionalInterface + public interface Api2Way extends Consumer {} + + @FunctionalInterface + public interface ApiLazyNumber { + int get(); + } +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/jbr/FindDependencies.java b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/FindDependencies.java new file mode 100644 index 000000000000..45e7c4012157 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/FindDependencies.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.jbr; + +public class FindDependencies { + public interface C3 { + void f(C4 c); + } + public interface C4 {} +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/jbr/MethodMapping.java b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/MethodMapping.java new file mode 100644 index 000000000000..1ce467872054 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/MethodMapping.java @@ -0,0 +1,51 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.jbr; + +public class MethodMapping { + public static class SimpleEmptyImpl {} + public static class PlainImpl { + public void a() {} + public boolean b() { + return false; + } + } + public interface Callback { + void hello(); + } + public interface JBRTwoWay { + void something(); + } + public interface ConversionImpl { + default SimpleEmptyImpl convert(PlainImpl a, Callback b, JBRTwoWay c) { + return null; + } + } + public static class ConversionSelfImpl implements ConversionImpl { + public ConversionSelfImpl convert(Object a, Object b, Object c) { + return null; + } + } + public static class ConversionFailImpl implements ConversionImpl {} +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/jbr/ProxyInfoResolving.java b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/ProxyInfoResolving.java new file mode 100644 index 000000000000..b5f103703a0b --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/ProxyInfoResolving.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.jbr; + +public class ProxyInfoResolving { + public static class ClientProxyClass {} + public static class ProxyClassImpl {} + public static class ValidApiImpl {} + public static class ValidApi2Impl {} +} diff --git a/test/jdk/jb/java/api/backend/com/jetbrains/jbr/Real.java b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/Real.java new file mode 100644 index 000000000000..67487fcbf011 --- /dev/null +++ b/test/jdk/jb/java/api/backend/com/jetbrains/jbr/Real.java @@ -0,0 +1,55 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.jetbrains.jbr; + +import java.util.function.Consumer; + +public class Real { + + public static class ServiceImpl { + JBR2Way get2Way() { + return a -> {}; + } + JBR2Way passthrough(JBR2Way a) { + if (a != null) a.accept(a); + return a; + } + boolean isSelf(ServiceImpl a) { + return a == this; + } + JBRLazyNumber sum(JBRLazyNumber a, JBRLazyNumber b) { + return () -> a.get() + b.get(); + } + void testMethodNameConflict(JBR2Way a) {} + void testMethodNameConflict(JBRLazyNumber a) {} + } + + @FunctionalInterface + public interface JBR2Way extends Consumer {} + + @FunctionalInterface + public interface JBRLazyNumber { + int get(); + } +} diff --git a/test/jdk/jb/java/api/frontend/CustomTitleBarDoubleClick.java b/test/jdk/jb/java/api/frontend/CustomTitleBarDoubleClick.java new file mode 100644 index 000000000000..c005c922f167 --- /dev/null +++ b/test/jdk/jb/java/api/frontend/CustomTitleBarDoubleClick.java @@ -0,0 +1,114 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @requires os.family == "mac" | os.family == "windows" + @key headful + @summary Test that window state changes on titlebar double-click + @library ../../../../java/awt/regtesthelpers + @build Util + @run main CustomTitleBarDoubleClick +*/ + +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import test.java.awt.regtesthelpers.Util; + +public class CustomTitleBarDoubleClick implements WindowListener, WindowStateListener { + //Declare things used in the test, like buttons and labels here + private final static Rectangle BOUNDS = new Rectangle(300, 300, 300, 300); + private final static int TITLE_BAR_OFFSET = 10; + + JFrame frame; + Robot robot; + volatile boolean stateChanged; + + public static void main(final String[] args) { + CustomTitleBarDoubleClick app = new CustomTitleBarDoubleClick(); + app.start(); + } + + public void start () { + robot = Util.createRobot(); + robot.setAutoDelay(100); + robot.mouseMove(BOUNDS.x + (BOUNDS.width / 2), + BOUNDS.y + (BOUNDS.height/ 2)); + + frame = new JFrame("CustomTitleBarDoubleClick"); // Custom decorations doesn't work for AWT Frames on macOS + frame.setBounds(BOUNDS); + frame.addWindowListener(this); + frame.addWindowStateListener(this); + + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(50); + JBR.getWindowDecorations().setCustomTitleBar(frame, titleBar); + frame.setVisible(true); + robot.delay(2000); + if (!stateChanged) throw new AWTError("Test failed"); + } + + // Move the mouse into the title bar and double click to maximize the Frame + static boolean hasRun = false; + + private void doTest() { + if (hasRun) return; + hasRun = true; + + System.out.println("doing test"); + robot.mouseMove(BOUNDS.x + (BOUNDS.width / 2), + BOUNDS.y + TITLE_BAR_OFFSET); + robot.delay(50); + // Util.waitForIdle(robot) seem always hangs here. + // Need to use it instead robot.delay() when the bug become fixed. + System.out.println("1st press: currentTimeMillis: " + System.currentTimeMillis()); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.delay(50); + System.out.println("1st release: currentTimeMillis: " + System.currentTimeMillis()); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + robot.delay(50); + System.out.println("2nd press: currentTimeMillis: " + System.currentTimeMillis()); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.delay(50); + System.out.println("2nd release: currentTimeMillis: " + System.currentTimeMillis()); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + System.out.println("done: currentTimeMillis: " + System.currentTimeMillis()); + } + + public void windowActivated(WindowEvent e) {doTest();} + public void windowClosed(WindowEvent e) {} + public void windowClosing(WindowEvent e) {} + public void windowDeactivated(WindowEvent e) {} + public void windowDeiconified(WindowEvent e) {} + public void windowIconified(WindowEvent e) {} + public void windowOpened(WindowEvent e) {} + + public void windowStateChanged(WindowEvent e) { + stateChanged = true; // On macOS double-click may cause window to be maximized or iconified depending on AppleActionOnDoubleClick setting + } + +} diff --git a/test/jdk/jb/java/api/frontend/FileDialogTest.java b/test/jdk/jb/java/api/frontend/FileDialogTest.java new file mode 100644 index 000000000000..2b48db572a2d --- /dev/null +++ b/test/jdk/jb/java/api/frontend/FileDialogTest.java @@ -0,0 +1,114 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @requires (os.family == "mac") + * @run main/manual JBRApiTest + */ + +import com.jetbrains.JBRFileDialog; + +import java.awt.*; +import java.io.File; +import java.util.Arrays; +import java.util.List; + +public class FileDialogTest { + + private static final File directory = new File("FileDialogTest").getAbsoluteFile(); + private static void refresh() { + for (File f : directory.listFiles()) f.delete(); + } + + public static void main(String[] args) throws Exception { + directory.mkdirs(); + refresh(); + var dialog = new FileDialog((Frame) null); + dialog.setTitle("Press Save"); + dialog.setDirectory(directory.getAbsolutePath()); + dialog.setFile("PASS"); + dialog.setMode(FileDialog.SAVE); + dialog.setVisible(true); + var file = new File(directory, "PASS"); + check(dialog, file); + + refresh(); + file = new File(directory, "OPEN ME"); + file.createNewFile(); + dialog = open(JBRFileDialog.SELECT_FILES_HINT); + dialog.setVisible(true); + check(dialog, file); + + refresh(); + file.mkdir(); + dialog = open(JBRFileDialog.SELECT_DIRECTORIES_HINT); + dialog.setVisible(true); + check(dialog, file); + + refresh(); + file = new File(directory, "OPEN US"); + file.createNewFile(); + var file2 = new File(directory, "OPEN US"); + file2.mkdir(); + dialog = open(JBRFileDialog.SELECT_FILES_HINT | JBRFileDialog.SELECT_DIRECTORIES_HINT); + dialog.setMultipleMode(true); + dialog.setVisible(true); + check(dialog, file, file2); + + refresh(); + new File(directory, "CREATE DIRECTORY").createNewFile(); + new File(directory, "AND OPEN IT").createNewFile(); + dialog = open(JBRFileDialog.SELECT_DIRECTORIES_HINT | JBRFileDialog.CREATE_DIRECTORIES_HINT); + dialog.setVisible(true); + file = dialog.getFiles()[0]; + dialog.dispose(); + if (!file.isDirectory() || !file.exists()) { + throw new RuntimeException("Selected file doesn't exist"); + } + } + + private static FileDialog open(int hints) { + var dialog = new FileDialog((Frame) null); + dialog.setMode(FileDialog.LOAD); + JBRFileDialog.get(dialog).setHints(hints); + return dialog; + } + + private static void check(FileDialog dialog, File... expected) { + List actual = List.of(dialog.getFiles()); + dialog.dispose(); + boolean match = expected.length == actual.size(); + if (match) { + for (File f : expected) { + if (!actual.contains(f)) { + match = false; + break; + } + } + } + if (!match) { + throw new RuntimeException("Invalid files, expected: " + Arrays.toString(expected) + ", actual: " + actual); + } + } +} diff --git a/test/jdk/jb/java/api/frontend/FontExtensionsTest.java b/test/jdk/jb/java/api/frontend/FontExtensionsTest.java new file mode 100644 index 000000000000..ae3a541688e9 --- /dev/null +++ b/test/jdk/jb/java/api/frontend/FontExtensionsTest.java @@ -0,0 +1,267 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @summary checking visualisation of drawing text with custom OpenType's features + @modules java.desktop/com.jetbrains.desktop:+open + @run main FontExtensionsTest +*/ + +import com.jetbrains.FontExtensions; +import com.jetbrains.JBR; + +import java.awt.*; +import java.awt.font.TextAttribute; +import java.awt.image.BufferedImage; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.jetbrains.desktop.FontExtensions.featuresToString; +import static com.jetbrains.desktop.FontExtensions.getFeatures; + +public class FontExtensionsTest { + @Retention(RetentionPolicy.RUNTIME) + private @interface JBRTest {} + + private static final int IMG_WIDTH = 500; + private static final int IMG_HEIGHT = 50; + private static final String LIGATURES_STRING = "== != -> <>"; + private static final String FRACTION_STRING = "1/2"; + private static final String ZERO_STRING = "0"; + private static final String TEST_STRING = "hello abc 012345 " + FRACTION_STRING + LIGATURES_STRING; + private static final Font BASE_FONT = new Font("JetBrains Mono", Font.PLAIN, 20); + + private static BufferedImage getImageWithString(Font font, String str) { + BufferedImage img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB); + Graphics g = img.getGraphics(); + g.setColor(Color.white); + g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT); + + g.setColor(Color.black); + g.setFont(font); + g.drawString(str, 20, 20); + g.dispose(); + + return img; + } + + private static Boolean isImageEquals(BufferedImage first, BufferedImage second) { + for (int y = 0; y < first.getHeight(); y++) { + for (int x = 0; x < first.getWidth(); x++) { + if (first.getRGB(x, y) != second.getRGB(x, y)) { + return false; + } + } + } + return true; + } + + private static Font fontWithFeatures(Font font, FontExtensions.FeatureTag... features) { + return JBR.getFontExtensions().deriveFontWithFeatures(font, new FontExtensions.Features(features)); + } + + private static Font fontWithFeatures(FontExtensions.FeatureTag... features) { + return fontWithFeatures(BASE_FONT, features); + } + + private static Boolean textDrawingEquals(Font font1, Font font2, String text) { + BufferedImage image1 = getImageWithString(font1, text); + BufferedImage image2 = getImageWithString(font2, text); + return isImageEquals(image1, image2); + } + + private static String fontFeaturesAsString(Font font) { + return featuresToString(getFeatures(font)); + } + + @JBRTest + private static Boolean testFeatureFromString() { + return FontExtensions.FeatureTag.getFeatureTag("frac").isPresent() && + FontExtensions.FeatureTag.getFeatureTag("FrAc").isPresent() && + FontExtensions.FeatureTag.getFeatureTag("ss10").isPresent() && + FontExtensions.FeatureTag.getFeatureTag("tttt").isEmpty(); + } + + @JBRTest + private static Boolean testFeaturesToString1() { + Font font = JBR.getFontExtensions().deriveFontWithFeatures(BASE_FONT, new FontExtensions.Features(Map.of( + FontExtensions.FeatureTag.ZERO, FontExtensions.FEATURE_ON, + FontExtensions.FeatureTag.SALT, 123, + FontExtensions.FeatureTag.FRAC, FontExtensions.FEATURE_OFF))); + String features = "calt=0;frac=0;kern=0;liga=0;salt=123;zero=1"; + return fontFeaturesAsString(font).equals(features); + } + + @JBRTest + private static Boolean testFeaturesToString2() { + Font font = BASE_FONT.deriveFont(Map.of(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON, + TextAttribute.KERNING, TextAttribute.KERNING_ON)); + String features = "calt=1;kern=1;liga=1"; + return fontFeaturesAsString(font).equals(features); + } + + @JBRTest + private static Boolean testDisablingLigatureByDefault() { + return textDrawingEquals(BASE_FONT, fontWithFeatures(FontExtensions.FeatureTag.ZERO), LIGATURES_STRING); + } + + @JBRTest + private static Boolean testSettingValuesToFeatures() { + Font font = JBR.getFontExtensions().deriveFontWithFeatures(BASE_FONT, new FontExtensions.Features(Map.of( + FontExtensions.FeatureTag.ZERO, FontExtensions.FEATURE_ON, + FontExtensions.FeatureTag.SALT, 123, + FontExtensions.FeatureTag.FRAC, 9999))); + return textDrawingEquals(fontWithFeatures(FontExtensions.FeatureTag.FRAC, FontExtensions.FeatureTag.ZERO, + FontExtensions.FeatureTag.SALT), font, TEST_STRING); + } + + @JBRTest + private static Boolean testLigature() { + Font font = BASE_FONT.deriveFont(Map.of(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON)); + return !textDrawingEquals(BASE_FONT, font, LIGATURES_STRING); + } + + // TODO include this test when will be found suitable example + // @JBRTest + private static Boolean testKerning() { + Font font = BASE_FONT.deriveFont(Map.of(TextAttribute.KERNING, TextAttribute.KERNING_ON)); + return !textDrawingEquals(BASE_FONT, font, TEST_STRING); + } + + @JBRTest + private static Boolean testTracking() { + Font font = BASE_FONT.deriveFont(Map.of(TextAttribute.TRACKING, 0.3f)); + return !textDrawingEquals(BASE_FONT, font, TEST_STRING); + } + + @JBRTest + private static Boolean testWeight() { + Font font = BASE_FONT.deriveFont(Map.of(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); + return !textDrawingEquals(BASE_FONT, font, TEST_STRING); + } + + @JBRTest + private static Boolean testDisablingFeatures() { + Font font = JBR.getFontExtensions().deriveFontWithFeatures(BASE_FONT, new FontExtensions.Features(Map.of( + FontExtensions.FeatureTag.ZERO, FontExtensions.FEATURE_OFF, + FontExtensions.FeatureTag.FRAC, FontExtensions.FEATURE_OFF))); + return textDrawingEquals(BASE_FONT, font, TEST_STRING); + } + + @JBRTest + private static Boolean testFeaturesZero() { + return !textDrawingEquals(BASE_FONT, fontWithFeatures(FontExtensions.FeatureTag.ZERO), ZERO_STRING); + } + + @JBRTest + private static Boolean testFeaturesFrac() { + return !textDrawingEquals(BASE_FONT, fontWithFeatures(FontExtensions.FeatureTag.FRAC), FRACTION_STRING); + } + + @JBRTest + private static Boolean testFeaturesDerive1() { + Font fontFZ1 = fontWithFeatures(FontExtensions.FeatureTag.FRAC, FontExtensions.FeatureTag.ZERO). + deriveFont(Map.of(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON)); + Font fontFZ2 = fontWithFeatures(BASE_FONT.deriveFont(Map.of(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON)), + FontExtensions.FeatureTag.FRAC, FontExtensions.FeatureTag.ZERO); + return textDrawingEquals(fontFZ1, fontFZ2, TEST_STRING); + } + + @JBRTest + private static Boolean testFeaturesDerive2() { + Font fontFZ1 = fontWithFeatures(FontExtensions.FeatureTag.FRAC, FontExtensions.FeatureTag.ZERO); + Font fontFZ2 = fontWithFeatures(BASE_FONT.deriveFont(Map.of(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON)), + FontExtensions.FeatureTag.FRAC, FontExtensions.FeatureTag.ZERO); + fontFZ2 = fontFZ2.deriveFont(Map.of(TextAttribute.LIGATURES, false)); + return textDrawingEquals(fontFZ1, fontFZ2, TEST_STRING); + } + + @JBRTest + private static Boolean testTrackingWithFeatures() { + Font font = BASE_FONT.deriveFont(Map.of(TextAttribute.TRACKING, 0.3f)); + return !textDrawingEquals(font, fontWithFeatures(font, FontExtensions.FeatureTag.ZERO), TEST_STRING); + } + + @JBRTest + private static Boolean testFeaturesEmpty() { + return textDrawingEquals(BASE_FONT, fontWithFeatures(), TEST_STRING); + } + + @JBRTest + private static Boolean getAvailableFeatures1() { + Set features = JBR.getFontOpenTypeFeatures().getAvailableFeatures(BASE_FONT); + Set expected = + Set.of(FontExtensions.FeatureTag.SS01, FontExtensions.FeatureTag.CV03, FontExtensions.FeatureTag.ZERO); + return features.containsAll(expected.stream().map(FontExtensions.FeatureTag::getName).toList()); + } + + @JBRTest + private static Boolean getAvailableFeatures2() { + Set features = JBR.getFontOpenTypeFeatures().getAvailableFeatures(new Font("Inconsolata", Font.PLAIN, 20)); + return features.isEmpty(); + } + + @JBRTest + private static Boolean getAvailableFeatures3() { + Set features = JBR.getFontOpenTypeFeatures().getAvailableFeatures(new Font("Inter", Font.PLAIN, 20)); + Set expected = + Set.of(FontExtensions.FeatureTag.SS01, FontExtensions.FeatureTag.SS02, FontExtensions.FeatureTag.SS03); + return features.containsAll(expected.stream().map(FontExtensions.FeatureTag::getName).toList()); + } + + public static void main(final String[] args) { + if (!JBR.isFontExtensionsSupported()) { + throw new RuntimeException("JBR FontExtension API is not available"); + } + + if (!JBR.isFontOpenTypeFeaturesSupported()) { + throw new RuntimeException("JBR FontOpenTypeFeatures API is not available"); + } + + String error = ""; + try { + for (final Method method : FontExtensionsTest.class.getDeclaredMethods()) { + if (method.isAnnotationPresent(JBRTest.class)) { + System.out.print("Testing " + method.getName() + "..."); + boolean statusOk = (boolean) method.invoke(null); + if (!statusOk) { + error += System.lineSeparator() + "Test failed: " + method.getName(); + } + System.out.println(statusOk ? "passed" : "failed"); + } + } + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException("JBR: internal error during testing"); + } + + if (!error.isEmpty()) { + throw new RuntimeException(error); + } + } +} diff --git a/test/jdk/jb/java/api/frontend/FontMetricsAccessorTest.java b/test/jdk/jb/java/api/frontend/FontMetricsAccessorTest.java new file mode 100644 index 000000000000..6e4d4331cb08 --- /dev/null +++ b/test/jdk/jb/java/api/frontend/FontMetricsAccessorTest.java @@ -0,0 +1,161 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.FontMetricsAccessor; +import com.jetbrains.JBR; + +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; + +/** + * @test + * @summary verify the implementation of FontMetricsAccessor in JBR API + */ + +public class FontMetricsAccessorTest { + private static final FontMetricsAccessor ACCESSOR = JBR.getFontMetricsAccessor(); + private static final Font FONT = new Font(Font.SERIF, Font.ITALIC, 12); + private static final FontRenderContext CONTEXT = new FontRenderContext(AffineTransform.getScaleInstance(2, 2), + true, true); + + public static void main(final String[] args) { + if (!JBR.isFontMetricsAccessorSupported()) { + throw new RuntimeException("JBR FontMetricsAccessor API is not available"); + } + testGetMetricsInstance(); + testNotRoundedMetrics(); + testOverriding(); + testRemoveAllOverrides(); + } + + private static void testGetMetricsInstance() { + BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + Graphics2D g = img.createGraphics(); + g.setTransform(CONTEXT.getTransform()); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, CONTEXT.getAntiAliasingHint()); + g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, CONTEXT.getFractionalMetricsHint()); + g.setFont(FONT); + + FontMetrics expectedFromGraphics = g.getFontMetrics(); + FontMetrics actualFromAccessor = ACCESSOR.getMetrics(g.getFont(), g.getFontRenderContext()); + if (actualFromAccessor != expectedFromGraphics) { + throw new RuntimeException("Font metrics instance doesn't match one obtained from Graphics2D"); + } + } + + private static void testNotRoundedMetrics() { + FontMetrics baseMetrics = ACCESSOR.getMetrics(FONT, CONTEXT); + for (char character = 'A'; character <= 'Z'; character++) { + int roundedAdvance = baseMetrics.charWidth(character); + float notRoundedAdvance = ACCESSOR.codePointWidth(baseMetrics, character); + if (Math.round(notRoundedAdvance) != roundedAdvance) { + throw new RuntimeException("Unexpected advance returned: notRoundedAdvance=" + notRoundedAdvance + + ", roundedAdvance=" + roundedAdvance + ", character=" + character); + } + } + + float baseAdvance = ACCESSOR.codePointWidth(baseMetrics, 'A'); + for (int scale = 2; scale <= 10; scale++) { + Font scaledFont = FONT.deriveFont(FONT.getSize2D() / scale); + float scaledAdvance = ACCESSOR.codePointWidth(ACCESSOR.getMetrics(scaledFont, CONTEXT), 'A'); + if (Math.abs(scaledAdvance * scale - baseAdvance) > 0.1) { + throw new RuntimeException("Unexpected advance returned: baseAdvance=" + baseAdvance + + ", scaledAdvance=" + scaledAdvance + ", scale=" + scale); + } + } + } + + private static void testOverriding() { + FontMetrics metrics = ACCESSOR.getMetrics(FONT, CONTEXT); + + if (ACCESSOR.hasOverride(metrics)) { + throw new RuntimeException("Override is reported incorrectly"); + } + + float aWidth = ACCESSOR.codePointWidth(metrics, 'A'); + float bWidth = ACCESSOR.codePointWidth(metrics, 'B'); + float bWidthOverride = bWidth * 2; + + ACCESSOR.setOverride(metrics, cp -> cp == 'B' ? bWidthOverride : Float.NaN); + + if (!ACCESSOR.hasOverride(metrics)) { + throw new RuntimeException("Override is not reported"); + } + + float aWidthAfterOverride = ACCESSOR.codePointWidth(metrics, 'A'); + float bWidthAfterOverride = ACCESSOR.codePointWidth(metrics, 'B'); + + if (aWidthAfterOverride != aWidth) { + throw new RuntimeException("Override works where it shouldn't: aWidthAfterOverride=" + aWidthAfterOverride + + ", aWidth=" + aWidth); + } + if (bWidthAfterOverride != bWidthOverride) { + throw new RuntimeException("Override doesn't work: bWidthAfterOverride=" + bWidthAfterOverride + + ", bWidthOverride=" + bWidthOverride); + } + + ACCESSOR.setOverride(metrics, null); + + if (ACCESSOR.hasOverride(metrics)) { + throw new RuntimeException("Override is reported after clearing"); + } + + float aWidthAfterReset = ACCESSOR.codePointWidth(metrics, 'A'); + float bWidthAfterReset = ACCESSOR.codePointWidth(metrics, 'B'); + + if (aWidthAfterReset != aWidth) { + throw new RuntimeException("Override has an effect after reset: aWidthAfterReset=" + aWidthAfterReset + + ", aWidth=" + aWidth); + } + if (bWidthAfterReset != bWidth) { + throw new RuntimeException("Override has an effect after reset: bWidthAfterReset=" + bWidthAfterReset + + ", bWidth=" + bWidth); + } + } + + private static void testRemoveAllOverrides() { + FontMetrics m1 = ACCESSOR.getMetrics(FONT, CONTEXT); + FontMetrics m2 = ACCESSOR.getMetrics(FONT.deriveFont(24f), CONTEXT); + + float m1Width = ACCESSOR.codePointWidth(m1, 'A'); + float m2Width = ACCESSOR.codePointWidth(m2, 'B'); + + ACCESSOR.setOverride(m1, cp -> 12345f); + ACCESSOR.setOverride(m2, cp -> 67890f); + ACCESSOR.removeAllOverrides(); + + if (ACCESSOR.hasOverride(m1) || ACCESSOR.hasOverride(m2)) { + throw new RuntimeException("Override is reported after clearing"); + } + + float m1WidthAfterReset = ACCESSOR.codePointWidth(m1, 'A'); + float m2WidthAfterReset = ACCESSOR.codePointWidth(m2, 'B'); + + if (m1WidthAfterReset != m1Width || m2WidthAfterReset != m2Width) { + throw new RuntimeException("Override has an effect after reset: m1Width=" + m1Width + ", m2Width=" + m2Width + + ", m1WidthAfterReset=" + m1WidthAfterReset + ", m2WidthAfterReset=" + m2WidthAfterReset); + } + } +} diff --git a/test/jdk/jb/java/api/frontend/JBRApiTest.java b/test/jdk/jb/java/api/frontend/JBRApiTest.java new file mode 100644 index 000000000000..2bf4e17e93e5 --- /dev/null +++ b/test/jdk/jb/java/api/frontend/JBRApiTest.java @@ -0,0 +1,64 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @run main JBRApiTest + */ + +import com.jetbrains.JBR; +import com.jetbrains.JBRFileDialog; + +import java.awt.*; +import java.lang.reflect.Field; +import java.util.List; +import java.util.Objects; + +public class JBRApiTest { + + public static void main(String[] args) throws Exception { + if (!JBR.getApiVersion().matches("\\w+\\.\\d+\\.\\d+\\.\\d+")) throw new Error("Invalid JBR API version: " + JBR.getApiVersion()); + if (!JBR.isAvailable()) throw new Error("JBR API is not available"); + checkMetadata(); + testServices(); + } + + private static void checkMetadata() throws Exception { + Class metadata = Class.forName(JBR.class.getName() + "$Metadata"); + Field field = metadata.getDeclaredField("KNOWN_SERVICES"); + field.setAccessible(true); + List knownServices = List.of((String[]) field.get(null)); + if (!knownServices.contains("com.jetbrains.JBR$ServiceApi")) { + throw new Error("com.jetbrains.JBR$ServiceApi was not found in known services of com.jetbrains.JBR$Metadata"); + } + } + + private static void testServices() { + Objects.requireNonNull(JBR.getFontExtensions().getSubpixelResolution()); + Objects.requireNonNull(JBRFileDialog.get(new FileDialog((Frame) null))); + Objects.requireNonNull(JBR.getAccessibleAnnouncer()); + if (!System.getProperty("os.name").toLowerCase().contains("linux")) { + Objects.requireNonNull(JBR.getRoundedCornersManager()); + } + } +} diff --git a/test/jdk/jb/java/api/frontend/JstackTest.java b/test/jdk/jb/java/api/frontend/JstackTest.java new file mode 100644 index 000000000000..c6b7796d0c13 --- /dev/null +++ b/test/jdk/jb/java/api/frontend/JstackTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * @test + * @summary Verifies that jstack includes whatever the supplier + * provided to Jstack.includeInfoFrom() returns. + * @library /test/lib + * @run main JstackTest + */ + +import com.jetbrains.JBR; + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.Platform; + +import java.io.IOException; + +public class JstackTest { + final static String MAGIC_STRING = "Additional info:\nthis appears in jstack's output"; + + public static void main(String[] args) { + JBR.getJstack().includeInfoFrom( () -> MAGIC_STRING ); + long pid = ProcessHandle.current().pid(); + final OutputAnalyzer jstackOutput = runJstack(pid); + jstackOutput + .shouldHaveExitValue(0) + .shouldContain(MAGIC_STRING); + } + + static OutputAnalyzer runJstack(long pid) { + try { + final String JSTACK = JDKToolFinder.getTestJDKTool("jstack"); + final ProcessBuilder pb = new ProcessBuilder(JSTACK, String.valueOf(pid)); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.outputTo(System.out); + output.shouldHaveExitValue(0); + return output; + } catch (IOException e) { + throw new RuntimeException("Launching jstack failed", e); + } + } +} diff --git a/test/jdk/jb/java/api/frontend/TestSetRoundedCorners.java b/test/jdk/jb/java/api/frontend/TestSetRoundedCorners.java new file mode 100644 index 000000000000..972266cebd80 --- /dev/null +++ b/test/jdk/jb/java/api/frontend/TestSetRoundedCorners.java @@ -0,0 +1,174 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; + +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.lang.reflect.InvocationTargetException; + +/** + * @test + * @summary JBR-4563 Rounded corners for native Window on Mac OS + * @summary JBR-4787 Rounded corners for native Window on Windows 11 + * @author Alexander Lobas + * @requires (os.family == "mac" | os.family == "windows") + * @run main/manual TestSetRoundedCorners + */ +public class TestSetRoundedCorners { + private static final int TD_RED = 50; + private static final int TD = 0; + private static final int DELAY = 1000; + + private static TestSetRoundedCorners theTest; + + private final Robot robot; + private JFrame frame; + private JFrame testFrame; + + public TestSetRoundedCorners() { + try { + robot = new Robot(); + } catch (AWTException ex) { + throw new RuntimeException(ex); + } + } + + public void performTest(Object roundParams) { + if (!JBR.isRoundedCornersManagerSupported()) { + throw new RuntimeException("JBR Rounded API is not available"); + } + + runSwing(() -> { + frame = new JFrame(""); + frame.setUndecorated(true); + JPanel panel = new JPanel(); + panel.setOpaque(true); + panel.setBackground(Color.RED); + frame.setContentPane(panel); + frame.setBounds(100, 100, 300, 300); + frame.setVisible(true); + + testFrame = new JFrame(""); + testFrame.setUndecorated(true); + JPanel testPanel = new JPanel(); + testPanel.setOpaque(true); + testPanel.setBackground(Color.GREEN); + testFrame.setContentPane(testPanel); + testFrame.setBounds(150, 150, 50, 50); + testFrame.setVisible(true); + }); + + robot.delay(DELAY); + + // check that window without rounded corners + validateColor(51, 51, Color.GREEN, "0"); + validateColor(51, 99, Color.GREEN, "0"); + validateColor(99, 51, Color.GREEN, "0"); + validateColor(99, 99, Color.GREEN, "0"); + + runSwing(() -> testFrame.setVisible(false)); + robot.delay(DELAY); + + runSwing(() -> { + JBR.getRoundedCornersManager().setRoundedCorners(testFrame, roundParams); + testFrame.setVisible(true); + }); + robot.delay(DELAY); + + // check that window with rounded corners + validateColor(51, 51, Color.RED, "1"); + validateColor(51, 99, Color.RED, "1"); + validateColor(99, 51, Color.RED, "1"); + validateColor(99, 99, Color.RED, "1"); + + runSwing(() -> dispose()); + } + + private Color getTestPixel(int x, int y) { + Rectangle bounds = frame.getBounds(); + BufferedImage screenImage = robot.createScreenCapture(bounds); + int rgb = screenImage.getRGB(x, y); + int red = (rgb >> 16) & 0xFF; + int green = (rgb >> 8) & 0xFF; + int blue = rgb & 0xFF; + return new Color(red, green, blue); + } + + private static boolean validateColor(Color actual, Color expected) { + return Math.abs(actual.getRed() - expected.getRed()) <= TD_RED && + Math.abs(actual.getGreen() - expected.getGreen()) <= TD && + Math.abs(actual.getBlue() - expected.getBlue()) <= TD; + } + + private void validateColor(int x, int y, Color expected, String place) { + Color actual = getTestPixel(x, y); + if (!validateColor(actual, expected)) { + throw new RuntimeException( + "Test failed [" + place + "]. Incorrect color " + actual + " instead " + expected + " at (" + x + "," + y + ")"); + } + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException e) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + public void dispose() { + if (frame != null) { + frame.dispose(); + frame = null; + } + if (testFrame != null) { + testFrame.dispose(); + testFrame = null; + } + } + + public static void runTest(Object roundParams) { + try { + runSwing(() -> theTest = new TestSetRoundedCorners()); + theTest.performTest(roundParams); + } finally { + if (theTest != null) { + runSwing(() -> theTest.dispose()); + } + } + } + + public static void main(String[] args) { + String osName = System.getProperty("os.name"); + if (osName.contains("Windows 11")) { + runTest("full"); + } else if (osName.contains("OS X")) { + runTest(10F); + } else { + System.out.println("This test is for MacOS or Windows 11 only. Automatically passed on other platforms."); + } + } +} diff --git a/test/jdk/jb/java/api/frontend/WindowMoveTest.java b/test/jdk/jb/java/api/frontend/WindowMoveTest.java new file mode 100644 index 000000000000..7115f4038f1d --- /dev/null +++ b/test/jdk/jb/java/api/frontend/WindowMoveTest.java @@ -0,0 +1,55 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Verifies that WindowMove test service of JBR is supported + * on Linux and not supported elsewhere. + * @run main WindowMoveTest + * @run main/othervm -Djava.awt.headless=true WindowMoveTest + */ + +import com.jetbrains.JBR; +import java.awt.GraphicsEnvironment; + +public class WindowMoveTest { + + public static void main(String[] args) throws Exception { + final String os = System.getProperty("os.name"); + if ("linux".equalsIgnoreCase(os)) { + final boolean isHeadless = GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance(); + if (JBR.isWindowMoveSupported()) { + if (isHeadless) + throw new RuntimeException("JBR.isWindowMoveSupported says it is supported in the headless mode"); + } else { + if (!isHeadless) + throw new RuntimeException("JBR.isWindowMoveSupported says it is NOT supported on Linux"); + } + // Use: JBR.getWindowMove().startMovingTogetherWithMouse(jframe, MouseEvent.BUTTON1); + } else { + if (JBR.isWindowMoveSupported()) { + throw new RuntimeException("JBR.isWindowMoveSupported says it's supported on " + os + "where it is NOT implemented"); + } + } + } +} diff --git a/test/jdk/jb/java/awt/CustomTitleBar/ActionListenerTest.java b/test/jdk/jb/java/awt/CustomTitleBar/ActionListenerTest.java new file mode 100644 index 000000000000..a94229cedbc3 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/ActionListenerTest.java @@ -0,0 +1,157 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.utils.MouseUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.lang.invoke.MethodHandles; +import java.util.List; + +/* + * @test + * @summary Verify mouse events in custom title bar's area added by ActionListener + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 ActionListenerTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 ActionListenerTest + */ +public class ActionListenerTest { + + public static void main(String... args) { + TaskResult awtResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createFrameWithCustomTitleBar, TestUtils::createDialogWithCustomTitleBar), actionListenerAWT); + TaskResult swingResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createJFrameWithCustomTitleBar, TestUtils::createJFrameWithCustomTitleBar), actionListenerSwing); + + TaskResult result = awtResult.merge(swingResult); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task actionListenerAWT = new Task("Using of action listener in AWT") { + + private Button button; + private boolean actionListenerGotEvent = false; + + @Override + protected void init() { + actionListenerGotEvent = false; + } + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void customizeWindow() { + button = new Button(); + button.setLocation(window.getWidth() / 2, 0); + button.addActionListener(a -> { + actionListenerGotEvent = true; + }); + window.add(button); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws AWTException { + doClick(window, button.getLocationOnScreen(), button.getWidth(), button.getHeight()); + + if (!actionListenerGotEvent) { + err("button didn't get event by action listener"); + } + } + }; + + private static final Task actionListenerSwing = new Task("Using of action listener in Swing") { + + private JButton button; + private boolean actionListenerGotEvent = false; + + @Override + protected void init() { + actionListenerGotEvent = false; + } + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void customizeWindow() { + button = new JButton(); + button.setLocation(window.getWidth() / 2, 0); + button.addActionListener(a -> { + actionListenerGotEvent = true; + }); + window.add(button); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws AWTException { + doClick(window, button.getLocationOnScreen(), button.getWidth(), button.getHeight()); + + if (!actionListenerGotEvent) { + err("button didn't get event by action listener"); + } + } + }; + + private static void doClick(Window window, Point location, int w, int h) throws AWTException { + Robot robot = new Robot(); + robot.waitForIdle(); + int x = location.x + w / 2; + int y = location.y + h / 2; + System.out.println("Click at (" + x + ", " + y + ")"); + + MouseUtils.verifyLocationAndMove(robot, window, x, y); + MouseUtils.verifyLocationAndClick(robot, window, x, y, InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + MouseUtils.verifyLocationAndClick(robot, window, x, y, InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + MouseUtils.verifyLocationAndClick(robot, window, x, y, InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + } + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/ChangeTitleBarHeightTest.java b/test/jdk/jb/java/awt/CustomTitleBar/ChangeTitleBarHeightTest.java new file mode 100644 index 000000000000..df188cb1f4df --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/ChangeTitleBarHeightTest.java @@ -0,0 +1,80 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.lang.invoke.MethodHandles; + +/* + * @test + * @summary Verify modifying of title bar height + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 ChangeTitleBarHeightTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 ChangeTitleBarHeightTest + */ +public class ChangeTitleBarHeightTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), changeTitleBarHeight); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + + } + + private static final Task changeTitleBarHeight = new Task("Changing of title bar height") { + + private final float initialHeight = 50; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(initialHeight); + } + + @Override + public void test() { + passed = passed && TestUtils.checkTitleBarHeight(titleBar, initialHeight); + + float newHeight = 100; + titleBar.setHeight(newHeight); + passed = passed && TestUtils.checkTitleBarHeight(titleBar, newHeight); + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/CheckFullScreen.java b/test/jdk/jb/java/awt/CustomTitleBar/CheckFullScreen.java new file mode 100644 index 000000000000..3e214ca701d2 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/CheckFullScreen.java @@ -0,0 +1,81 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; + +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.GraphicsEnvironment; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.io.IOException; + +/* + * @test + * @summary Verify modifying of title bar height + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 CheckFullScreen + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 CheckFullScreen + */ +public class CheckFullScreen { + + public static void main(String... args) throws AWTException, IOException { + Frame f = new Frame(){ + @Override + public void paint(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(Color.BLUE); + g.fillRect(r.x, r.y, r.width, 100); + super.paint(g); + } + }; + + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(100); + JBR.getWindowDecorations().setCustomTitleBar(f, titleBar); + + f.setVisible(true); + GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(f); + + Robot robot = new Robot(); + robot.delay(5000); + + BufferedImage image = ScreenShotHelpers.takeScreenshot(f); + ScreenShotHelpers.storeScreenshot("fullscreen", image); + } + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/CreateTitleBarTest.java b/test/jdk/jb/java/awt/CustomTitleBar/CreateTitleBarTest.java new file mode 100644 index 000000000000..feacbc0747bc --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/CreateTitleBarTest.java @@ -0,0 +1,79 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.lang.invoke.MethodHandles; + +/* + * @test + * @summary Verify creating to a custom title bar + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 CreateTitleBarTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 CreateTitleBarTest + */ +public class CreateTitleBarTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), createTitleBar); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + + } + + private static final Task createTitleBar = new Task("Create title bar with default settings") { + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void test() { + passed = passed && TestUtils.checkTitleBarHeight(titleBar, TestUtils.TITLE_BAR_HEIGHT); + passed = passed && TestUtils.checkFrameInsets(window); + + if (titleBar.getLeftInset() == 0 && titleBar.getRightInset() == 0) { + err("Left or right space must be occupied by system controls"); + } + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java b/test/jdk/jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java new file mode 100644 index 000000000000..d0f30d98e3b6 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java @@ -0,0 +1,159 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.event.WindowStateListener; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; +import java.util.List; + +/* + * @test + * @summary Detect and check behavior of clicking to native controls + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 DialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 DialogNativeControlsTest + */ +public class DialogNativeControlsTest { + + public static void main(String... args) { + TaskResult result = nativeControlClicks.run(TestUtils::createDialogWithCustomTitleBar); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + + } + + private static final Task nativeControlClicks = new Task("Native controls clicks") { + private boolean closingActionCalled; + private boolean maximizingActionDetected; + + private final WindowListener windowListener = new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + closingActionCalled = true; + } + + }; + + private final WindowStateListener windowStateListener = new WindowAdapter() { + @Override + public void windowStateChanged(WindowEvent e) { + if (e.getNewState() == 6) { + maximizingActionDetected = true; + } + } + }; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + protected void init() { + closingActionCalled = false; + maximizingActionDetected = false; + } + + @Override + protected void cleanup() { + window.removeWindowListener(windowListener); + window.removeWindowStateListener(windowStateListener); + } + + @Override + protected void customizeWindow() { + window.addWindowListener(windowListener); + window.addWindowStateListener(windowStateListener); + } + + @Override + public void test() throws Exception { + robot.waitForIdle(); + robot.mouseMove(window.getLocationOnScreen().x + window.getWidth() / 2, + window.getLocationOnScreen().y + window.getHeight() / 2); + robot.waitForIdle(); + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar); + + if (foundControls.size() == 0) { + passed = false; + System.out.println("Error: no controls found"); + } + + foundControls.forEach(control -> { + System.out.println("Using control: " + control); + int x = window.getLocationOnScreen().x + control.getX1() + (control.getX2() - control.getX1()) / 2; + int y = window.getLocationOnScreen().y + control.getY1() + (control.getY2() - control.getY1()) / 2; + System.out.println("Click to (" + x + ", " + y + ")"); + + int screenX = window.getBounds().x; + int screenY = window.getBounds().y; + int h = window.getBounds().height; + int w = window.getBounds().width; + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + window.setBounds(screenX, screenY, w, h); + window.setVisible(true); + robot.waitForIdle(); + }); + + if (System.getProperty("os.name").toLowerCase().startsWith("mac") && !maximizingActionDetected) { + err("maximizing action was not detected"); + } + + if (!closingActionCalled) { + err("closing action was not detected"); + } + + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java b/test/jdk/jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java new file mode 100644 index 000000000000..cf47e9c4e82d --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java @@ -0,0 +1,192 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import test.jb.testhelpers.TitleBar.CommonAPISuite; + +import javax.swing.JFrame; +import java.awt.Frame; +import java.awt.Window; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.event.WindowStateListener; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; +import java.util.List; +import java.util.function.Function; + +/* + * @test + * @summary Detect and check behavior of clicking to native controls + * @requires (os.family == "windows") | (os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 FrameNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 FrameNativeControlsTest + */ +public class FrameNativeControlsTest { + + public static void main(String... args) { + List> functions = List.of(TestUtils::createFrameWithCustomTitleBar); + TaskResult result = CommonAPISuite.runTestSuite(functions, frameNativeControlsClicks); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task frameNativeControlsClicks = new Task("Frame native controls clicks") { + private boolean closingActionCalled; + private boolean iconifyingActionCalled; + private boolean maximizingActionDetected; + private boolean deiconifyindActionDetected; + + private final WindowListener windowListener = new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + closingActionCalled = true; + } + + @Override + public void windowIconified(WindowEvent e) { + iconifyingActionCalled = true; + + if (window.getName().equals("Frame")) { + ((Frame) window).setState(Frame.NORMAL); + } else if (window.getName().equals("JFrame")) { + ((JFrame) window).setState(JFrame.NORMAL); + } + + window.setVisible(true); + window.requestFocus(); + } + }; + + private final WindowStateListener windowStateListener = new WindowAdapter() { + @Override + public void windowStateChanged(WindowEvent e) { + System.out.println("change " + e.getOldState() + " -> " + e.getNewState()); + if (e.getNewState() == 6) { + maximizingActionDetected = true; + } + if (e.getOldState() == 1 && e.getNewState() == 0) { + deiconifyindActionDetected = true; + } + } + }; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + protected void init() { + closingActionCalled = false; + iconifyingActionCalled = false; + maximizingActionDetected = false; + deiconifyindActionDetected = false; + } + + @Override + protected void cleanup() { + window.removeWindowListener(windowListener); + window.removeWindowStateListener(windowStateListener); + } + + @Override + protected void customizeWindow() { + window.addWindowListener(windowListener); + window.addWindowStateListener(windowStateListener); + } + + @Override + public void test() throws Exception { + robot.delay(500); + robot.mouseMove(window.getLocationOnScreen().x + window.getWidth() / 2, + window.getLocationOnScreen().y + window.getHeight() / 2); + robot.delay(500); + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar); + + if (foundControls.isEmpty()) { + passed = false; + System.out.println("Error: no controls found"); + } + + foundControls.forEach(control -> { + System.out.println("Using control: " + control); + int x = window.getLocationOnScreen().x + control.getX1() + (control.getX2() - control.getX1()) / 2; + int y = window.getLocationOnScreen().y + control.getY1() + (control.getY2() - control.getY1()) / 2; + System.out.println("Click to (" + x + ", " + y + ")"); + + int screenX = window.getBounds().x; + int screenY = window.getBounds().y; + int h = window.getBounds().height; + int w = window.getBounds().width; + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + window.setBounds(screenX, screenY, w, h); + window.setVisible(true); + robot.waitForIdle(); + }); + + if (!maximizingActionDetected) { + err("maximizing action was not detected"); + } + + if (!closingActionCalled) { + err("closing action was not detected"); + } + + if (!iconifyingActionCalled) { + err("iconifying action was not detected"); + } + if (!deiconifyindActionDetected) { + err("deiconifying action was not detected"); + } + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/HiddenNativeControlsTest.java b/test/jdk/jb/java/awt/CustomTitleBar/HiddenNativeControlsTest.java new file mode 100644 index 000000000000..73308e47ae76 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/HiddenNativeControlsTest.java @@ -0,0 +1,112 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; + +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; +import java.util.List; + +/* + * @test + * @summary Verify a property to change visibility of native controls + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 HiddenNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 HiddenNativeControlsTest + */ +public class HiddenNativeControlsTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), hiddenControls); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task hiddenControls = new Task("Hidden native controls") { + + private static final String PROPERTY_NAME = "controls.visible"; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + titleBar.putProperty(PROPERTY_NAME, false); + } + + @Override + public void test() throws Exception { + Robot robot = new Robot(); + robot.delay(1000); + robot.mouseMove(0, 0); + robot.delay(1000); + + passed = passed && TestUtils.checkTitleBarHeight(titleBar, TestUtils.TITLE_BAR_HEIGHT); + passed = passed && TestUtils.checkFrameInsets(window); + + if (!"false".equals(titleBar.getProperties().get(PROPERTY_NAME).toString())) { + err("controls.visible isn't false"); + } + if (titleBar.getLeftInset() != 0 || titleBar.getRightInset() != 0) { + err("System controls are hidden so insets must be zero"); + } + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + + System.out.println("image w = " + image.getWidth() + " h = " + image.getHeight()); + + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar, true); + System.out.println("Found controls at the title bar:"); + foundControls.forEach(System.out::println); + + if (!foundControls.isEmpty()) { + err("controls are disabled, but found in the screenshot"); + } + + if (!passed) { + String path = ScreenShotHelpers.storeScreenshot("hidden-controls-test-" + window.getName(), image); + System.out.println("Screenshot stored in " + path); + } + } + + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/HitTestClientArea.java b/test/jdk/jb/java/awt/CustomTitleBar/HitTestClientArea.java new file mode 100644 index 000000000000..764ffd5e88d1 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/HitTestClientArea.java @@ -0,0 +1,302 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; + +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.utils.MouseUtils; +import util.AWTTask; +import util.SwingTask; + +import javax.swing.JPanel; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.invoke.MethodHandles; +import java.util.Arrays; +import java.util.List; + +/* + * @test + * @summary Verify control under native actions in custom title bar + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 HitTestClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 HitTestClientArea + + */ +public class HitTestClientArea { + + private static final List BUTTON_MASKS = List.of( + InputEvent.BUTTON1_DOWN_MASK, + InputEvent.BUTTON2_DOWN_MASK, + InputEvent.BUTTON3_DOWN_MASK + ); + private static final int PANEL_WIDTH = 400; + private static final int PANEL_HEIGHT = (int) TestUtils.TITLE_BAR_HEIGHT; + + public static void main(String... args) { + TaskResult awtResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createFrameWithCustomTitleBar, TestUtils::createDialogWithCustomTitleBar), hitTestClientAreaAWT); + TaskResult swingResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createJFrameWithCustomTitleBar, TestUtils::createJFrameWithCustomTitleBar), hitTestClientAreaSwing); + + TaskResult result = awtResult.merge(swingResult); + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task hitTestClientAreaAWT = new AWTTask("Hit test client area AWT") { + private final int[] gotClicks = new int[BUTTON_MASKS.size()]; + private static boolean mousePressed = false; + private static boolean mouseReleased = false; + + @Override + protected void cleanup() { + Arrays.fill(gotClicks, 0); + mousePressed = false; + mouseReleased = false; + } + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + protected void customizeWindow() { + Panel panel = new Panel() { + @Override + public void paint(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(Color.CYAN); + g.fillRect(r.x, r.y, PANEL_WIDTH, PANEL_HEIGHT); + super.paint(g); + } + }; + panel.setBounds(0, 0, PANEL_WIDTH, PANEL_HEIGHT); + panel.setSize(PANEL_WIDTH, PANEL_HEIGHT); + panel.addMouseListener(new MouseAdapter() { + private void hit() { + titleBar.forceHitTest(true); + } + + @Override + public void mouseClicked(MouseEvent e) { + hit(); + if (e.getButton() >= 1 && e.getButton() <= 3) { + gotClicks[e.getButton() - 1]++; + } + } + + @Override + public void mousePressed(MouseEvent e) { + hit(); + mousePressed = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + hit(); + mouseReleased = true; + } + }); + + window.add(panel); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws AWTException { + Robot robot = new Robot(); + + int initialX = window.getLocationOnScreen().x + PANEL_WIDTH / 2; + int initialY = window.getLocationOnScreen().y + PANEL_HEIGHT / 2; + + window.requestFocus(); + for (Integer mask: BUTTON_MASKS) { + MouseUtils.verifyLocationAndClick(robot, window, initialX, initialY, mask); + } + + Point initialLocation = window.getLocationOnScreen(); + MouseUtils.verifyLocationAndMove(robot, window, initialX, initialY); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + for (int i = 0; i < 10; i++) { + initialX += 3; + initialY += 3; + robot.delay(300); + MouseUtils.verifyLocationAndMove(robot, window, initialX, initialY); + } + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + Point newLocation = window.getLocationOnScreen(); + + for (int i = 0; i < BUTTON_MASKS.size(); i++) { + System.out.println("Button no " + (i+1) + " clicks count = " + gotClicks[i]); + if (gotClicks[i] == 0) { + err("Mouse click to button no " + (i+1) + " was not registered"); + } + } + + boolean moved = initialLocation.x < newLocation.x && initialLocation.y < newLocation.y; + if (moved) { + err("Window was moved, but drag'n drop action must be disabled in the client area"); + } + + if (!mousePressed) { + err("Mouse press to the client area wasn't detected"); + } + if (!mouseReleased) { + err("Mouse release to the client area wasn't detected"); + } + } + + }; + + private static final Task hitTestClientAreaSwing = new SwingTask("Hit test client area Swing") { + + private final int[] gotClicks = new int[BUTTON_MASKS.size()]; + private static boolean mousePressed = false; + private static boolean mouseReleased = false; + + @Override + protected void cleanup() { + Arrays.fill(gotClicks, 0); + mousePressed = false; + mouseReleased = false; + titleBar = null; + } + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + protected void customizeWindow() { + JPanel panel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Rectangle r = g.getClipBounds(); + g.setColor(Color.CYAN); + g.fillRect(r.x, r.y, PANEL_WIDTH, PANEL_HEIGHT); + } + }; + + final int effectiveWidth = window.getWidth() - window.getInsets().left - window.getInsets().right; + panel.setPreferredSize(new Dimension(effectiveWidth, (int) TestUtils.TITLE_BAR_HEIGHT)); + panel.setBounds(0, 0, effectiveWidth, (int) TestUtils.TITLE_BAR_HEIGHT); + panel.addMouseListener(new MouseAdapter() { + private void hit() { + titleBar.forceHitTest(true); + } + + @Override + public void mouseClicked(MouseEvent e) { + hit(); + if (e.getButton() >= 1 && e.getButton() <= 3) { + gotClicks[e.getButton() - 1]++; + } + } + + @Override + public void mousePressed(MouseEvent e) { + hit(); + mousePressed = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + hit(); + mouseReleased = true; + } + }); + + window.add(panel); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws AWTException { + Robot robot = new Robot(); + + int initialX = window.getLocationOnScreen().x + PANEL_WIDTH / 2; + int initialY = window.getLocationOnScreen().y + PANEL_HEIGHT / 2; + + for (Integer mask: BUTTON_MASKS) { + MouseUtils.verifyLocationAndClick(robot, window, initialX, initialY, mask); + } + + Point initialLocation = window.getLocationOnScreen(); + robot.waitForIdle(); + MouseUtils.verifyLocationAndMove(robot, window, initialX, initialY); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + for (int i = 0; i < 10; i++) { + initialX += 3; + initialY += 3; + robot.delay(300); + MouseUtils.verifyLocationAndMove(robot, window, initialX, initialY); + } + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + Point newLocation = window.getLocationOnScreen(); + + for (int i = 0; i < BUTTON_MASKS.size(); i++) { + System.out.println("Button no " + (i+1) + " clicks count = " + gotClicks[i]); + if (gotClicks[i] == 0) { + err("Mouse click to button no " + (i+1) + " was not registered"); + } + } + + boolean moved = initialLocation.x < newLocation.x && initialLocation.y < newLocation.y; + if (moved) { + err("Window was moved, but drag'n drop action must be disabled in the client area"); + } + + if (!mousePressed) { + err("Mouse press to the client area wasn't detected"); + } + if (!mouseReleased) { + err("Mouse release to the client area wasn't detected"); + } + } + + }; + + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/HitTestNonClientArea.java b/test/jdk/jb/java/awt/CustomTitleBar/HitTestNonClientArea.java new file mode 100644 index 000000000000..827157aca823 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/HitTestNonClientArea.java @@ -0,0 +1,274 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import util.*; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import test.jb.testhelpers.utils.MouseUtils; +import javax.swing.*; +import java.awt.AWTException; +import java.awt.Button; +import java.awt.Color; +import java.awt.Panel; +import java.awt.Point; +import java.awt.Robot; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.invoke.MethodHandles; +import java.util.Arrays; +import java.util.List; + +/* + * @test + * @summary Verify control under native actions in custom title bar + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 HitTestNonClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 HitTestNonClientArea + + */ +public class HitTestNonClientArea { + + private static final List BUTTON_MASKS = List.of( + InputEvent.BUTTON1_DOWN_MASK, + InputEvent.BUTTON2_DOWN_MASK, + InputEvent.BUTTON3_DOWN_MASK + ); + private static final int BUTTON_WIDTH = 80; + private static final int BUTTON_HEIGHT = 40; + + + public static void main(String... args) { + TaskResult awtResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createFrameWithCustomTitleBar, TestUtils::createDialogWithCustomTitleBar), hitTestNonClientAreaAWT); + TaskResult swingResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createJFrameWithCustomTitleBar, TestUtils::createJFrameWithCustomTitleBar), hitTestNonClientAreaSwing); + + TaskResult result = awtResult.merge(swingResult); + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + + private static final Task hitTestNonClientAreaAWT = new AWTTask("Hit test non-client area AWT") { + + private final boolean[] gotClicks = new boolean[BUTTON_MASKS.size()]; + private Button button; + + @Override + protected void cleanup() { + Arrays.fill(gotClicks, false); + titleBar = null; + } + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void customizeWindow() { + button = new Button(); + button.setBackground(Color.CYAN); + button.setSize(BUTTON_WIDTH, BUTTON_HEIGHT); + MouseAdapter adapter = new MouseAdapter() { + private void hit() { + titleBar.forceHitTest(false); + } + + @Override + public void mouseClicked(MouseEvent e) { + hit(); + if (e.getButton() >= 1 && e.getButton() <= 3) { + gotClicks[e.getButton() - 1] = true; + } + } + + @Override + public void mousePressed(MouseEvent e) { + hit(); + } + + @Override + public void mouseReleased(MouseEvent e) { + hit(); + } + }; + button.addMouseListener(adapter); + button.addMouseMotionListener(adapter); + + Panel panel = new Panel(); + panel.setBounds(300, 20, 100, 50); + panel.add(button); + window.add(panel); + } + + @Override + public void test() throws AWTException { + Robot robot = new Robot(); + + int initialX = button.getLocationOnScreen().x + button.getWidth() / 2; + int initialY = button.getLocationOnScreen().y + button.getHeight() / 2; + + for (Integer mask: BUTTON_MASKS) { + MouseUtils.verifyLocationAndClick(robot, window, initialX, initialY, mask); + } + + Point initialLocation = window.getLocationOnScreen(); + robot.waitForIdle(); + MouseUtils.verifyLocationAndMove(robot, window, initialX, initialY); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + for (int i = 0; i < 10; i++) { + initialX += 3; + initialY += 3; + robot.delay(300); + MouseUtils.verifyLocationAndMove(robot, window, initialX, initialY); + } + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + Point newLocation = window.getLocationOnScreen(); + + passed = initialLocation.x < newLocation.x && initialLocation.y < newLocation.y; + if (!passed) { + System.out.println("Window location was changed"); + } + for (int i = 0; i < BUTTON_MASKS.size(); i++) { + if (!gotClicks[i]) { + err("Mouse click to button no " + (i+1) + " was not registered"); + } + } + } + }; + + private static final Task hitTestNonClientAreaSwing = new SwingTask("Hit test non-client area Swing") { + + private final boolean[] gotClicks = new boolean[BUTTON_MASKS.size()]; + private JButton button; + + @Override + protected void cleanup() { + Arrays.fill(gotClicks, false); + titleBar = null; + } + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void customizeWindow() { + button = new JButton(); + button.setBackground(Color.CYAN); + button.setSize(BUTTON_WIDTH, BUTTON_HEIGHT); + MouseAdapter adapter = new MouseAdapter() { + private void hit() { + titleBar.forceHitTest(false); + } + + @Override + public void mouseClicked(MouseEvent e) { + hit(); + if (e.getButton() >= 1 && e.getButton() <= 3) { + gotClicks[e.getButton() - 1] = true; + } + } + + @Override + public void mousePressed(MouseEvent e) { + hit(); + } + + @Override + public void mouseReleased(MouseEvent e) { + hit(); + } + }; + button.addMouseListener(adapter); + button.addMouseMotionListener(adapter); + + Panel panel = new Panel(); + panel.setBounds(300, 20, 100, 50); + panel.add(button); + window.add(panel); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws AWTException { + Robot robot = new Robot(); + + int initialX = button.getLocationOnScreen().x + button.getWidth() / 2; + int initialY = button.getLocationOnScreen().y + button.getHeight() / 2; + + for (Integer mask: BUTTON_MASKS) { + robot.waitForIdle(); + + robot.mouseMove(initialX, initialY); + robot.mousePress(mask); + robot.mouseRelease(mask); + + robot.waitForIdle(); + } + + Point initialLocation = window.getLocationOnScreen(); + robot.waitForIdle(); + robot.mouseMove(initialX, initialY); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + for (int i = 0; i < 10; i++) { + initialX += 3; + initialY += 3; + robot.delay(300); + robot.mouseMove(initialX, initialY); + } + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + Point newLocation = window.getLocationOnScreen(); + + passed = initialLocation.x < newLocation.x && initialLocation.y < newLocation.y; + if (!passed) { + System.out.println("Window location was changed"); + } + for (int i = 0; i < BUTTON_MASKS.size(); i++) { + if (!gotClicks[i]) { + err("Mouse click to button no " + (i+1) + " was not registered"); + } + } + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java b/test/jdk/jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java new file mode 100644 index 000000000000..cbfae66971f1 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java @@ -0,0 +1,163 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import util.*; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import java.awt.Robot; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.event.WindowStateListener; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; +import java.util.List; + +/* + * @test + * @summary Detect and check behavior of clicking to native controls + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 JDialogNativeControlsTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 JDialogNativeControlsTest + */ +public class JDialogNativeControlsTest { + + public static void main(String... args) { + TaskResult result = nativeControlClicks.run(TestUtils::createJDialogWithCustomTitleBar); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task nativeControlClicks = new Task("Native controls clicks") { + private boolean closingActionCalled; + private boolean maximizingActionDetected; + + private final WindowListener windowListener = new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + closingActionCalled = true; + } + }; + + private final WindowStateListener windowStateListener = new WindowAdapter() { + @Override + public void windowStateChanged(WindowEvent e) { + System.out.println("change " + e.getOldState() + " -> " + e.getNewState()); + if (e.getNewState() == 6) { + maximizingActionDetected = true; + } + } + }; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + protected void init() { + closingActionCalled = false; + maximizingActionDetected = false; + } + + @Override + protected void cleanup() { + window.removeWindowListener(windowListener); + window.removeWindowStateListener(windowStateListener); + } + + @Override + protected void customizeWindow() { + window.addWindowListener(windowListener); + window.addWindowStateListener(windowStateListener); + } + + @Override + public void test() throws Exception { + robot.delay(500); + robot.mouseMove(window.getLocationOnScreen().x + window.getWidth() / 2, + window.getLocationOnScreen().y + window.getHeight() / 2); + robot.delay(500); + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar); + + if (foundControls.size() == 0) { + passed = false; + System.out.println("Error: no controls found"); + } + + foundControls.forEach(control -> { + System.out.println("Using control: " + control); + int x = window.getLocationOnScreen().x + control.getX1() + (control.getX2() - control.getX1()) / 2; + int y = window.getLocationOnScreen().y + control.getY1() + (control.getY2() - control.getY1()) / 2; + System.out.println("Click to (" + x + ", " + y + ")"); + + int screenX = window.getBounds().x; + int screenY = window.getBounds().y; + int h = window.getBounds().height; + int w = window.getBounds().width; + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + window.setBounds(screenX, screenY, w, h); + window.setVisible(true); + robot.waitForIdle(); + }); + + final String os = System.getProperty("os.name").toLowerCase(); + if (os.startsWith("mac os")) { + if (!maximizingActionDetected) { + err("maximizing action was not detected"); + } + } + + if (!closingActionCalled) { + err("closing action was not detected"); + } + + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/MaximizeWindowTest.java b/test/jdk/jb/java/awt/CustomTitleBar/MaximizeWindowTest.java new file mode 100644 index 000000000000..96351716d616 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/MaximizeWindowTest.java @@ -0,0 +1,157 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.awt.AWTException; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.Robot; +import java.awt.Window; +import java.awt.event.InputEvent; +import java.lang.invoke.MethodHandles; +import java.util.List; +import java.util.function.Function; + +/* + * @test + * @summary Verify ability to maximize window by clicking to custom title bar area + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 MaximizeWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 MaximizeWindowTest + */ +public class MaximizeWindowTest { + + public static void main(String... args) { + final String os = System.getProperty("os.name").toLowerCase(); + List> functions; + if (os.startsWith("windows")) { + functions = List.of(TestUtils::createFrameWithCustomTitleBar, TestUtils::createJFrameWithCustomTitleBar); + } else { + functions = TestUtils.getWindowCreationFunctions(); + } + + TaskResult result = CommonAPISuite.runTestSuite(functions, maximizeWindow); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task maximizeWindow = new Task("Maximize window") { + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void test() throws AWTException { + setResizable(true); + setWindowSize(window, titleBar); + int initialWidth = window.getWidth(); + int initialHeight = window.getHeight(); + doubleClickToTitleBar(window, titleBar); + + System.out.printf(String.format("Initial size (w = %d, h = %d)%n", window.getWidth(), window.getHeight())); + System.out.printf(String.format("New size (w = %d, h = %d)%n", window.getWidth(), window.getHeight())); + if (initialHeight == window.getHeight() && initialWidth == window.getWidth()) { + err("Frame size wasn't changed after double click to title bar"); + } + + setResizable(false); + setWindowSize(window, titleBar); + initialWidth = window.getWidth(); + initialHeight = window.getHeight(); + doubleClickToTitleBar(window, titleBar); + System.out.printf(String.format("Initial size (w = %d, h = %d)%n", window.getWidth(), window.getHeight())); + System.out.printf(String.format("New size (w = %d, h = %d)%n", window.getWidth(), window.getHeight())); + if (initialHeight != window.getHeight() || initialWidth != window.getWidth()) { + err("Frame size was changed after double click to title bar, but resize is disabled"); + } + } + + private void setResizable(boolean value) { + if (window instanceof Frame frame) { + frame.setResizable(value); + } else if (window instanceof Dialog dialog) { + dialog.setResizable(value); + } + } + }; + + + private static void setWindowSize(Window window, WindowDecorations.CustomTitleBar titleBar) { + System.out.println("Window was created with bounds: " + window.getBounds()); + + int w = window.getBounds().width / 2; + int h = Math.max(window.getBounds().height / 2, 20 + (int) titleBar.getHeight()); + window.setBounds(window.getBounds().x, window.getBounds().y, w, h); + + System.out.println("New window bounds: " + window.getBounds()); + window.setSize(w, h); + } + + private static void doubleClickToTitleBar(Window window, WindowDecorations.CustomTitleBar titleBar) throws AWTException { + int leftX = window.getInsets().left + (int) titleBar.getLeftInset(); + int rightX = window.getBounds().width - window.getInsets().right - (int) titleBar.getRightInset(); + int x = window.getLocationOnScreen().x + leftX + (rightX - leftX) / 2; + int topY = window.getInsets().top; + int bottomY = (int) TestUtils.TITLE_BAR_HEIGHT; + int y = window.getLocationOnScreen().y + (bottomY - topY) / 2; + + System.out.println("Window bounds: " + window.getBounds()); + System.out.println("Window insets: " + window.getInsets()); + System.out.println("Window location on screen: " + window.getLocationOnScreen()); + System.out.println("leftX = " + leftX + ", rightX = " + rightX); + System.out.println("topY = " + topY + ", bottomY = " + bottomY); + System.out.println("Double click to (" + x + ", " + y + ")"); + + Robot robot = new Robot(); + + robot.delay(1000); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(1000); + } + +} diff --git a/test/jdk/jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java b/test/jdk/jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java new file mode 100644 index 000000000000..c007a6d78b0d --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java @@ -0,0 +1,110 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Frame; +import java.awt.Point; +import java.awt.Robot; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/* + * @test + * @summary Regression test for JBR-3157 Maximized window with custom decorations isn't focused on showing + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm MaximizedWindowFocusTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 MaximizedWindowFocusTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 MaximizedWindowFocusTest + */ +public class MaximizedWindowFocusTest { + + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static JButton button; + private static final CompletableFuture frame2Focused = new CompletableFuture<>(); + + public static void main(String... args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(MaximizedWindowFocusTest::initUI); + robot.delay(1000); + clickOn(button); + frame2Focused.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(MaximizedWindowFocusTest::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("MaximizedCustomDecorationsTest"); + button = new JButton("Open maximized frame"); + button.addActionListener(e -> { + frame1.dispose(); + frame2 = new JFrame("Frame with custom decorations"); + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(100); + JBR.getWindowDecorations().setCustomTitleBar(frame2, titleBar); + + frame2.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + frame2Focused.complete(true); + } + }); + frame2.setExtendedState(Frame.MAXIMIZED_BOTH); + frame2.setVisible(true); + }); + frame1.add(button); + frame1.pack(); + frame1.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void clickAt(int x, int y) { + robot.delay(500); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(500); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/MinimizingWindowTest.java b/test/jdk/jb/java/awt/CustomTitleBar/MinimizingWindowTest.java new file mode 100644 index 000000000000..7d6a2e502025 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/MinimizingWindowTest.java @@ -0,0 +1,163 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import util.*; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import java.awt.Frame; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.event.WindowStateListener; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; +import java.util.List; + +/* + * @test + * @summary Detect and check behavior of clicking to native controls + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 MinimizingWindowTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 MinimizingWindowTest + */ +public class MinimizingWindowTest { + + public static void main(String... args) { + TaskResult result = minimizingWindowTest.run(TestUtils::createFrameWithCustomTitleBar); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task minimizingWindowTest = new Task("Frame native controls clicks") { + private boolean iconifyingActionCalled; + private boolean iconifyingActionDetected; + + private final WindowListener windowListener = new WindowAdapter() { + + @Override + public void windowIconified(WindowEvent e) { + iconifyingActionCalled = true; + } + }; + + private final WindowStateListener windowStateListener = new WindowAdapter() { + @Override + public void windowStateChanged(WindowEvent e) { + System.out.println("change " + e.getOldState() + " -> " + e.getNewState()); + if (e.getOldState() == 0 && e.getNewState() == 1) { + iconifyingActionDetected = true; + ((Frame) window).setState(Frame.NORMAL); + window.setVisible(true); + } + } + }; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + protected void init() { + iconifyingActionCalled = false; + iconifyingActionDetected = false; + } + + @Override + protected void cleanup() { + window.removeWindowListener(windowListener); + window.removeWindowStateListener(windowStateListener); + } + + @Override + protected void customizeWindow() { + window.addWindowListener(windowListener); + window.addWindowStateListener(windowStateListener); + } + + @Override + public void test() throws Exception { + robot.waitForIdle(); + robot.mouseMove(window.getLocationOnScreen().x + window.getWidth() / 2, + window.getLocationOnScreen().y + window.getHeight() / 2); + robot.waitForIdle(); + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar); + + if (foundControls.size() == 0) { + err("no controls found"); + } + + foundControls.forEach(control -> { + System.out.println("Using control: " + control); + int x = window.getLocationOnScreen().x + control.getX1() + (control.getX2() - control.getX1()) / 2; + int y = window.getLocationOnScreen().y + control.getY1() + (control.getY2() - control.getY1()) / 2; + System.out.println("Click to (" + x + ", " + y + ")"); + + int screenX = window.getBounds().x; + int screenY = window.getBounds().y; + int h = window.getBounds().height; + int w = window.getBounds().width; + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + window.setBounds(screenX, screenY, w, h); + window.setVisible(true); + robot.waitForIdle(); + }); + + if (!iconifyingActionCalled || !iconifyingActionDetected) { + err("iconifying action was not detected"); + } + + if (!passed) { + String path = ScreenShotHelpers.storeScreenshot("minimizing-window-test-" + window.getName(), image); + System.out.println("Screenshot stored in " + path); + } + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java b/test/jdk/jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java new file mode 100644 index 000000000000..3321ce9c9b3d --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java @@ -0,0 +1,393 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; +import util.*; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.invoke.MethodHandles; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/* + * @test + * @summary Verify mouse events on custom title bar area + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 MouseEventsOnClientArea + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 MouseEventsOnClientArea + */ +public class MouseEventsOnClientArea { + + private static final List BUTTON_MASKS = List.of( + InputEvent.BUTTON1_DOWN_MASK, + InputEvent.BUTTON2_DOWN_MASK, + InputEvent.BUTTON3_DOWN_MASK + ); + + private static final int PANEL_WIDTH = 400; + private static final int PANEL_HEIGHT = (int) TestUtils.TITLE_BAR_HEIGHT; + + public static void main(String... args) { + TaskResult AWTResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createFrameWithCustomTitleBar, TestUtils::createDialogWithCustomTitleBar), mouseClicksTestAWT); + TaskResult SwingResult = CommonAPISuite.runTestSuite(List.of(TestUtils::createJFrameWithCustomTitleBar, TestUtils::createJDialogWithCustomTitleBar), mouseClicksTestSwing); + + TaskResult result = AWTResult.merge(SwingResult); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task mouseClicksTestAWT = new AWTTask("mouseCliensAWT") { + + private final boolean[] buttonsPressed = new boolean[BUTTON_MASKS.size()]; + private final boolean[] buttonsReleased = new boolean[BUTTON_MASKS.size()]; + private final boolean[] buttonsClicked = new boolean[BUTTON_MASKS.size()]; + + private boolean contentPressed = false; + private boolean contentReleased = false; + private boolean contentClicked = false; + + private final CountDownLatch latch = new CountDownLatch(12); + private Panel titlePanel; + private Panel contentPanel; + + @Override + protected void init() { + Arrays.fill(buttonsPressed, false); + Arrays.fill(buttonsReleased, false); + Arrays.fill(buttonsClicked, false); + } + + @Override + public void prepareTitleBar() { + titleBar = createTitleBar(); + } + + @Override + protected void customizeWindow() { + titlePanel = new Panel() { + @Override + public void paint(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(Color.CYAN); + g.fillRect(r.x, r.y, PANEL_WIDTH, PANEL_HEIGHT); + super.paint(g); + } + }; + final int effectiveWidth = window.getWidth() - window.getInsets().left - window.getInsets().right; + titlePanel.setPreferredSize(new Dimension(effectiveWidth, (int) TestUtils.TITLE_BAR_HEIGHT)); + titlePanel.setBounds(0, 0, effectiveWidth, (int) TestUtils.TITLE_BAR_HEIGHT); + titlePanel.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getButton() >= 1 && e.getButton() <= 3) { + if (!buttonsClicked[e.getButton() - 1]) { + buttonsClicked[e.getButton() - 1] = true; + latch.countDown(); + } + } + } + + @Override + public void mousePressed(MouseEvent e) { + if (e.getButton() >= 1 && e.getButton() <= 3) { + if (!buttonsPressed[e.getButton() - 1]) { + buttonsPressed[e.getButton() - 1] = true; + latch.countDown(); + } + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (e.getButton() >= 1 && e.getButton() <= 3) { + if (!buttonsReleased[e.getButton() - 1]) { + buttonsReleased[e.getButton() - 1] = true; + latch.countDown(); + } + } + } + }); + + final int contentHeight = window.getHeight() - window.getInsets().top - window.getInsets().bottom - (int) TestUtils.TITLE_BAR_HEIGHT; + contentPanel = new Panel() { + @Override + public void paint(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(Color.GREEN); + g.fillRect(r.x, r.y, effectiveWidth, contentHeight); + } + }; + contentPanel.setPreferredSize(new Dimension(effectiveWidth, contentHeight)); + contentPanel.setBounds(0, (int) TestUtils.TITLE_BAR_HEIGHT, effectiveWidth, contentHeight); + contentPanel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (!contentClicked) { + contentClicked = true; + latch.countDown(); + } + } + + @Override + public void mousePressed(MouseEvent e) { + if (!contentPressed) { + contentPressed = true; + latch.countDown(); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (!contentReleased) { + contentReleased = true; + latch.countDown(); + } + } + }); + + window.add(titlePanel); + window.add(contentPanel); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws AWTException, InterruptedException { + Robot robot = new Robot(); + + int x = titlePanel.getLocationOnScreen().x + titlePanel.getWidth() / 2; + int y = titlePanel.getLocationOnScreen().y + titlePanel.getHeight() / 2; + + BUTTON_MASKS.forEach(mask -> { + robot.delay(500); + + robot.mouseMove(x, y); + robot.mousePress(mask); + robot.mouseRelease(mask); + + robot.delay(500); + }); + + int centerX = contentPanel.getLocationOnScreen().x + contentPanel.getWidth() / 2; + int centerY = contentPanel.getLocationOnScreen().y + contentPanel.getHeight() / 2; + robot.delay(500); + robot.mouseMove(centerX, centerY); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + + boolean result = latch.await(3, TimeUnit.SECONDS); + System.out.println("result = " + result); + + boolean status = true; + for (int i = 0; i < BUTTON_MASKS.size(); i++) { + System.out.println("Button mask: " + BUTTON_MASKS.get(i)); + System.out.println("pressed = " + buttonsPressed[i]); + System.out.println("released = " + buttonsReleased[i]); + System.out.println("clicked = " + buttonsClicked[i]); + status = status && buttonsPressed[i] && buttonsReleased[i] && buttonsClicked[i]; + } + if (!status) { + err("some of mouse events weren't registered"); + } + } + }; + + private static final Task mouseClicksTestSwing = new SwingTask("mouseClicksSwing") { + + private final boolean[] buttonsPressed = new boolean[BUTTON_MASKS.size()]; + private final boolean[] buttonsReleased = new boolean[BUTTON_MASKS.size()]; + private final boolean[] buttonsClicked = new boolean[BUTTON_MASKS.size()]; + + private boolean contentPressed = false; + private boolean contentReleased = false; + private boolean contentClicked = false; + + private final CountDownLatch latch = new CountDownLatch(12); + + private JPanel titlePanel; + private JPanel contentPanel; + + @Override + protected void init() { + Arrays.fill(buttonsPressed, false); + Arrays.fill(buttonsReleased, false); + Arrays.fill(buttonsClicked, false); + } + + @Override + public void prepareTitleBar() { + titleBar = createTitleBar(); + } + + @Override + protected void customizeWindow() { + titlePanel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Rectangle r = g.getClipBounds(); + g.setColor(Color.CYAN); + g.fillRect(r.x, r.y, PANEL_WIDTH, PANEL_HEIGHT); + } + }; + final int effectiveWidth = window.getWidth() - window.getInsets().left - window.getInsets().right; + titlePanel.setPreferredSize(new Dimension(effectiveWidth, (int) TestUtils.TITLE_BAR_HEIGHT)); + titlePanel.setBounds(0, 0, effectiveWidth, (int) TestUtils.TITLE_BAR_HEIGHT); + titlePanel.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getButton() >= 1 && e.getButton() <= 3) { + buttonsClicked[e.getButton() - 1] = true; + } + } + + @Override + public void mousePressed(MouseEvent e) { + if (e.getButton() >= 1 && e.getButton() <= 3) { + buttonsPressed[e.getButton() - 1] = true; + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (e.getButton() >= 1 && e.getButton() <= 3) { + buttonsReleased[e.getButton() - 1] = true; + } + } + }); + + final int contentHeight = window.getHeight() - window.getInsets().top - window.getInsets().bottom - (int) TestUtils.TITLE_BAR_HEIGHT; + contentPanel = new JPanel() { + + @Override + protected void paintComponent(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(Color.GREEN); + g.fillRect(r.x, r.y, effectiveWidth, contentHeight); + } + }; + contentPanel.setPreferredSize(new Dimension(effectiveWidth, contentHeight)); + contentPanel.setBounds(0, (int) TestUtils.TITLE_BAR_HEIGHT, effectiveWidth, contentHeight); + contentPanel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (!contentClicked) { + contentClicked = true; + latch.countDown(); + } + } + + @Override + public void mousePressed(MouseEvent e) { + if (!contentPressed) { + contentPressed = true; + latch.countDown(); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (!contentReleased) { + contentReleased = true; + latch.countDown(); + } + } + }); + + window.add(titlePanel); + window.add(contentPanel); + window.setAlwaysOnTop(true); + } + + @Override + public void test() throws Exception { + Robot robot = new Robot(); + + int x = titlePanel.getLocationOnScreen().x + titlePanel.getWidth() / 2; + int y = titlePanel.getLocationOnScreen().y + titlePanel.getHeight() / 2; + + BUTTON_MASKS.forEach(mask -> { + robot.delay(500); + + robot.mouseMove(x, y); + robot.mousePress(mask); + robot.mouseRelease(mask); + + robot.delay(500); + }); + + int centerX = contentPanel.getLocationOnScreen().x + contentPanel.getWidth() / 2; + int centerY = contentPanel.getLocationOnScreen().y + contentPanel.getHeight() / 2; + robot.delay(500); + robot.mouseMove(centerX, centerY); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + + boolean result = latch.await(3, TimeUnit.SECONDS); + System.out.println("result = " + result); + + boolean status = true; + for (int i = 0; i < BUTTON_MASKS.size(); i++) { + System.out.println("Button mask: " + BUTTON_MASKS.get(i)); + System.out.println("pressed = " + buttonsPressed[i]); + System.out.println("released = " + buttonsReleased[i]); + System.out.println("clicked = " + buttonsClicked[i]); + status = status && buttonsPressed[i] && buttonsReleased[i] && buttonsClicked[i]; + } + if (!status) { + err("some of mouse events weren't registered"); + } + } + }; + + private static WindowDecorations.CustomTitleBar createTitleBar() { + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + return titleBar; + } + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java b/test/jdk/jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java new file mode 100644 index 000000000000..05038f267a8f --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java @@ -0,0 +1,137 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; +import java.awt.Robot; +import java.util.List; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; + +/* + * @test + * @summary Verify a property to change visibility of native controls + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 NativeControlsVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 NativeControlsVisibilityTest + */ +public class NativeControlsVisibilityTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), visibleControls); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task visibleControls = new Task("Visible native controls") { + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void test() throws Exception { + Robot robot = new Robot(); + robot.delay(500); + robot.mouseMove(window.getLocationOnScreen().x + window.getWidth() / 2, + window.getLocationOnScreen().y + window.getHeight() / 2); + robot.delay(500); + + passed = passed && TestUtils.checkTitleBarHeight(titleBar, TestUtils.TITLE_BAR_HEIGHT); + passed = passed && TestUtils.checkFrameInsets(window); + + if (titleBar.getLeftInset() == 0 && titleBar.getRightInset() == 0) { + passed = false; + System.out.println("Left or right inset must be non-zero"); + } + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar, false); + System.out.println("Found controls at the title bar:"); + foundControls.forEach(System.out::println); + + passed = verifyControls(foundControls, window.getName()); + + if (!passed) { + String path = ScreenShotHelpers.storeScreenshot("visible-controls-test-" + window.getName(), image); + System.out.println("Screenshot stored in " + path); + } + } + + private static boolean verifyControls(List foundControls, String windowName) { + final String os = System.getProperty("os.name").toLowerCase(); + if (os.startsWith("windows")) { + return verifyControlsOnWindows(foundControls, windowName); + } else if (os.startsWith("mac os")) { + return verifyControlsOnMac(foundControls); + } + return true; + } + + private static boolean verifyControlsOnWindows(List foundControls, String windowName) { + if (windowName.equals("Frame") || windowName.equals("JFrame")) { + if (foundControls.size() != 3) { + System.out.println("Error: there are must be 3 controls"); + return false; + } + } else if (windowName.equals("JDialog") || windowName.equals("Dialog")) { + if (foundControls.size() != 1) { + System.out.println("Error: there are must be 1 control"); + return false; + } + } + return true; + } + + private static boolean verifyControlsOnMac(List foundControls) { + if (foundControls.size() != 3) { + System.out.println("Error: there are must be 3 controls"); + return false; + } + return true; + } + }; + + + + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/WindowResizeTest.java b/test/jdk/jb/java/awt/CustomTitleBar/WindowResizeTest.java new file mode 100644 index 000000000000..94bd305c9a1e --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/WindowResizeTest.java @@ -0,0 +1,99 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.screenshot.RectCoordinates; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.awt.Dimension; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; + +/* + * @test + * @summary Verify custom title bar in case of window resizing + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 WindowResizeTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 WindowResizeTest + */ +public class WindowResizeTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), windowResizeTest); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task windowResizeTest = new Task("Window resize test") { + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void test() throws Exception { + Robot robot = new Robot(); + robot.delay(1000); + final float initialTitleBarHeight = titleBar.getHeight(); + + + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + final int newHeight = screenSize.height / 2; + final int newWidth = screenSize.width / 2; + + window.setSize(newWidth, newHeight); + robot.delay(1000); + + if (titleBar.getHeight() != initialTitleBarHeight) { + err("title bar height has been changed"); + } + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + + RectCoordinates coords = ScreenShotHelpers.findRectangleTitleBar(image, (int) titleBar.getHeight()); + System.out.println("Planned title bar rectangle coordinates: (" + coords.x1() + ", " + coords.y1() + + "), (" + coords.x2() + ", " + coords.y2() + ")"); + System.out.println("w = " + image.getWidth() + " h = " + image.getHeight()); + } + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/WindowVisibilityTest.java b/test/jdk/jb/java/awt/CustomTitleBar/WindowVisibilityTest.java new file mode 100644 index 000000000000..640b4439dfd9 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/WindowVisibilityTest.java @@ -0,0 +1,89 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.jetbrains.JBR; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.awt.Robot; +import java.lang.invoke.MethodHandles; + +/* + * @test + * @summary Verify custom title bar in case of changing visibility of a window + * @requires (os.family == "windows" | os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 WindowVisibilityTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 WindowVisibilityTest + */ +public class WindowVisibilityTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), visibilityTest); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task visibilityTest = new Task("visibilityTest") { + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + } + + @Override + public void test() throws Exception { + Robot robot = new Robot(); + + final float titleBarHeight = titleBar.getHeight(); + + window.setVisible(false); + robot.delay(1000); + + window.setVisible(true); + robot.delay(1000); + + if (titleBarHeight != titleBar.getHeight()) { + err("Error: title bar height has been changed"); + } + if (!titleBar.getContainingWindow().equals(window)) { + err("wrong containing window"); + } + } + + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java b/test/jdk/jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java new file mode 100644 index 000000000000..e5609a4332d7 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java @@ -0,0 +1,118 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.TitleBar.CommonAPISuite; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.TitleBar.Task; + +import java.awt.Color; +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.lang.invoke.MethodHandles; +import java.util.List; + +/* + * @test + * @summary Verify a property to change visibility of native controls + * @requires os.family == "windows" + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar ../../../testhelpers/utils + * @build TestUtils TaskResult Task CommonAPISuite MouseUtils ScreenShotHelpers Rect RectCoordinates MouseUtils + * @run main/othervm WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 WindowsControlWidthTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 WindowsControlWidthTest + */ +public class WindowsControlWidthTest { + + public static void main(String... args) { + TaskResult result = CommonAPISuite.runTestSuite(TestUtils.getWindowCreationFunctions(), nativeControlsWidth); + + if (!result.isPassed()) { + final String message = String.format("%s FAILED. %s", MethodHandles.lookup().lookupClass().getName(), result.getError()); + throw new RuntimeException(message); + } + } + + private static final Task nativeControlsWidth = new Task("Native controls width") { + + private static final String WIDTH_PROPERTY = "controls.width"; + private static final int CONTROLS_WIDTH = 80; + + @Override + public void prepareTitleBar() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + titleBar.putProperty(WIDTH_PROPERTY, CONTROLS_WIDTH); + } + + @Override + public void test() throws Exception { + passed = passed && TestUtils.checkTitleBarHeight(titleBar, TestUtils.TITLE_BAR_HEIGHT); + passed = passed && TestUtils.checkFrameInsets(window); + + if (titleBar.getLeftInset() == 0 && titleBar.getRightInset() == 0) { + err("Left or right inset must be non-zero"); + } + + BufferedImage image = ScreenShotHelpers.takeScreenshot(window); + + List foundControls = ScreenShotHelpers.findControls(image, window, titleBar); + + double uiScale = TestUtils.getUIScale(); + double adjustedControlsWidth = CONTROLS_WIDTH / uiScale; + + if (foundControls.size() == 0) { + err("controls not found"); + } else if (foundControls.size() == 3) { + System.out.println("3 controls found"); + int minX = foundControls.get(0).getX1(); + int maxX = foundControls.get(2).getX2(); + int dist = (foundControls.get(1).getX1() - foundControls.get(0).getX2() + foundControls.get(2).getX1() - foundControls.get(1).getX2()) / 2; + int calculatedWidth = maxX - minX + dist; + double diff = calculatedWidth / adjustedControlsWidth; + if (diff < 0.95 || diff > 1.05) { + err("control's width is much differ than the expected value"); + } + } else if (foundControls.size() == 1){ + System.out.println("1 control found"); + int calculatedWidth = foundControls.get(0).getX2() - foundControls.get(0).getX1(); + if (calculatedWidth < 0.5) { + err("control's width is much differ than the expected value"); + } + } else { + err("unexpected controls count = " + foundControls.size()); + } + } + + }; + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/CustomTitleBar/util/AWTTask.java b/test/jdk/jb/java/awt/CustomTitleBar/util/AWTTask.java new file mode 100644 index 000000000000..e5a6ecbbc1b4 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/util/AWTTask.java @@ -0,0 +1,61 @@ +package util; + +import com.jetbrains.WindowDecorations; + +import test.jb.testhelpers.TitleBar.Task; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import java.awt.*; +import java.util.function.Function; + +abstract public class AWTTask extends Task { + + public AWTTask(String name) { + super(name); + } + + @Override + public TaskResult run(Function windowCreator) { + System.out.printf("RUN TEST CASE: %s%n", name); + passed = true; + error = ""; + try { + robot = new Robot(); + } catch (AWTException e) { + e.printStackTrace(); + return new TaskResult(false, "ERROR: unable to init robot"); + } + + try { + runInternal(windowCreator); + } catch (Exception e) { + e.printStackTrace(); + return new TaskResult(false, "ERROR: An error occurred during test execution"); + } + + if (!TestUtils.isBasicTestCase()) { + boolean isMetConditions = TestUtils.checkScreenSizeConditions(window); + if (!isMetConditions) { + error += "SKIPPED: environment don't match screen size conditions"; + return new TaskResult(false, true, error); + } + } + + return new TaskResult(passed, error); + } + + private void runInternal(Function windowCreator) throws Exception { + try { + EventQueue.invokeAndWait(() -> { + prepareTitleBar(); + window = windowCreator.apply(titleBar); + customizeWindow(); + window.setVisible(true); + }); + + test(); + } finally { + EventQueue.invokeAndWait(this::disposeUI); + } + } +} diff --git a/test/jdk/jb/java/awt/CustomTitleBar/util/SwingTask.java b/test/jdk/jb/java/awt/CustomTitleBar/util/SwingTask.java new file mode 100644 index 000000000000..b921385b6305 --- /dev/null +++ b/test/jdk/jb/java/awt/CustomTitleBar/util/SwingTask.java @@ -0,0 +1,61 @@ +package util; + +import com.jetbrains.WindowDecorations; + +import test.jb.testhelpers.TitleBar.Task; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; +import javax.swing.*; +import java.awt.*; +import java.util.function.Function; + +abstract public class SwingTask extends Task { + public SwingTask(String name) { + super(name); + } + + @Override + public TaskResult run(Function windowCreator) { + System.out.printf("RUN TEST CASE: %s%n", name); + passed = true; + error = ""; + try { + robot = new Robot(); + } catch (AWTException e) { + e.printStackTrace(); + return new TaskResult(false, "ERROR: unable to init robot"); + } + + try { + runInternal(windowCreator); + } catch (Exception e) { + e.printStackTrace(); + return new TaskResult(false, "ERROR: An error occurred during test execution"); + } + + if (!TestUtils.isBasicTestCase()) { + boolean isMetConditions = TestUtils.checkScreenSizeConditions(window); + if (!isMetConditions) { + error += "SKIPPED: environment don't match screen size conditions"; + return new TaskResult(false, true, error); + } + } + + return new TaskResult(passed, error); + } + + private void runInternal(Function windowCreator) throws Exception { + try { + SwingUtilities.invokeAndWait(() -> { + prepareTitleBar(); + window = windowCreator.apply(titleBar); + customizeWindow(); + window.setVisible(true); + }); + + test(); + } finally { + SwingUtilities.invokeAndWait(this::disposeUI); + } + } +} diff --git a/test/jdk/jb/java/awt/Desktop/AboutHandlerTest.java b/test/jdk/jb/java/awt/Desktop/AboutHandlerTest.java new file mode 100644 index 000000000000..452496fb3a61 --- /dev/null +++ b/test/jdk/jb/java/awt/Desktop/AboutHandlerTest.java @@ -0,0 +1,103 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import java.awt.AWTException; +import java.awt.Desktop; +import java.awt.Robot; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @key headful + * @requires (os.family == "mac") + * @summary Regression test for JBR-1718. + * When opening the apps About dialog, "AboutHandler hits" should be written to the console and + * NO dialog should appear. + * @run main/othervm AboutHandlerTest + */ + +public class AboutHandlerTest { + + private static CountDownLatch doneSignal = new CountDownLatch(1); + + private static final int WAIT_TIME = 3000; + + private static Robot robot; + + private static JFrame myApp = new JFrame("MyApp"); + private static boolean testPassed = false; + + public static void main(String[] args) throws InterruptedException, AWTException { + + robot = new Robot(); + robot.setAutoDelay(50); + + long starttime = System.currentTimeMillis(); + Desktop.getDesktop().setAboutHandler(e -> { + System.out.println("AboutHandler hits"); + testPassed = true; + doneSignal.countDown(); + }); + + SwingUtilities.invokeLater(() -> { + doTest(); + }); + + // waiting for AboutHandler + doneSignal.await(WAIT_TIME, TimeUnit.SECONDS); + long endtime = System.currentTimeMillis(); + System.out.println("Duration (milisec): " + (endtime - starttime)); + myApp.dispose(); + + if (!testPassed) + throw new RuntimeException("AboutHandler was not hit"); + } + + private static void doTest() { + myApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + myApp.setBounds(10, 10, 100, 100); + myApp.setVisible(true); + + // move at Apple's menu + robot.mouseMove(0, 0); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + + // move at AboutHandlerTest menu + robot.keyPress(KeyEvent.VK_RIGHT); + robot.keyRelease(KeyEvent.VK_RIGHT); + + // move at the "About AboutHandlerTest" menu item + robot.keyPress(KeyEvent.VK_DOWN); + robot.keyRelease(KeyEvent.VK_DOWN); + + // hit the "About AboutHandlerTest" menu item + robot.keyPress(KeyEvent.VK_ENTER); + robot.keyRelease(KeyEvent.VK_ENTER); + } +} diff --git a/test/jdk/jb/java/awt/Focus/ActivationEventsOrder.java b/test/jdk/jb/java/awt/Focus/ActivationEventsOrder.java new file mode 100644 index 000000000000..a0e1869c8764 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/ActivationEventsOrder.java @@ -0,0 +1,111 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3989 Broken focus state after a quick succession of activation/deactivation events + * on Windows + * @key headful + */ + +public class ActivationEventsOrder { + private static final CompletableFuture success = new CompletableFuture<>(); + + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static JTextField field1; + private static JTextField field2; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(ActivationEventsOrder::initUI); + robot.delay(1000); // wait for windows to appear + SwingUtilities.invokeLater(ActivationEventsOrder::delayedFocusRequest); + robot.delay(1000); // wait for EDT to be frozen in Thread.sleep + clickOn(field1); + robot.delay(2000); // wait for freeze to be over + clickOn(field2); + robot.delay(1000); // wait for focus to settle down + pressAndRelease(KeyEvent.VK_ENTER); + success.get(5, TimeUnit.SECONDS); + } + finally { + SwingUtilities.invokeAndWait(ActivationEventsOrder::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("ActivationEventsOrder 1"); + field1 = new JTextField(); + frame1.add(field1); + frame1.setBounds(100, 100, 200, 100); + frame1.setVisible(true); + + frame2 = new JFrame("ActivationEventsOrder 2"); + field2 = new JTextField(); + frame2.add(field2); + frame2.setBounds(100, 300, 200, 100); + frame2.setVisible(true); + + field2.addActionListener(e -> success.complete(true)); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void delayedFocusRequest() { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + frame2.toFront(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/BrokenTraversalAWT.java b/test/jdk/jb/java/awt/Focus/BrokenTraversalAWT.java new file mode 100644 index 000000000000..dc3be63cf4ad --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/BrokenTraversalAWT.java @@ -0,0 +1,111 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +/** + * @test + * @summary Regression test for JBR-5045 Invisible component can break focus cycle + * @key headful + */ + +public class BrokenTraversalAWT { + private static Robot robot; + private static Frame frame; + private static Button button1; + private static Button button2; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + EventQueue.invokeAndWait(BrokenTraversalAWT::initUI); + robot.delay(1000); + clickOn(button1); + robot.delay(500); + checkFocus(button1); + pressAndReleaseTab(); + robot.delay(500); + checkFocus(button2); + pressAndReleaseTab(); + robot.delay(500); + checkFocus(button1); + } + finally { + EventQueue.invokeAndWait(BrokenTraversalAWT::disposeUI); + } + } + + private static void initUI() { + frame = new Frame("BrokenTraversalAWT"); + frame.setLayout(new FlowLayout()); + + button1 = new Button("1"); + frame.add(button1); + button2 = new Button("2"); + frame.add(button2); + + Panel p = new Panel(); + p.setVisible(false); + p.setFocusTraversalPolicyProvider(true); + p.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { + @Override + public Component getDefaultComponent(Container aContainer) { + return p; + } + }); + frame.add(p); + + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void checkFocus(Component component) throws Exception { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if (focusOwner != component) { + throw new IllegalStateException("Focus owner: " + focusOwner + ", expected: " + component); + } + } + + private static void pressAndReleaseTab() { + robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/BrokenTraversalSwing.java b/test/jdk/jb/java/awt/Focus/BrokenTraversalSwing.java new file mode 100644 index 000000000000..cad9fd414e47 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/BrokenTraversalSwing.java @@ -0,0 +1,114 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import javax.swing.*; + +/** + * @test + * @summary Regression test for JBR-5045 Invisible component can break focus cycle + * @key headful + */ + +public class BrokenTraversalSwing { + private static Robot robot; + private static JFrame frame; + private static JButton button1; + private static JButton button2; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + SwingUtilities.invokeAndWait(BrokenTraversalSwing::initUI); + robot.delay(1000); + clickOn(button1); + robot.delay(500); + checkFocus(button1); + pressAndReleaseTab(); + robot.delay(500); + checkFocus(button2); + pressAndReleaseTab(); + robot.delay(500); + checkFocus(button1); + } + finally { + SwingUtilities.invokeAndWait(BrokenTraversalSwing::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("BrokenTraversalSwing"); + frame.setLayout(new FlowLayout()); + + button1 = new JButton("1"); + frame.add(button1); + button2 = new JButton("2"); + frame.add(button2); + + JPanel p = new JPanel(); + JButton b = new JButton("3"); + b.setVisible(false); + b.setFocusTraversalPolicyProvider(true); + b.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { + @Override + public Component getDefaultComponent(Container aContainer) { + return b; + } + }); + p.add(b); + frame.add(p); + + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void checkFocus(Component component) throws Exception { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if (focusOwner != component) { + throw new IllegalStateException("Focus owner: " + focusOwner + ", expected: " + component); + } + } + + private static void pressAndReleaseTab() { + robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/ChainOfPopupsFocusTest.java b/test/jdk/jb/java/awt/Focus/ChainOfPopupsFocusTest.java new file mode 100644 index 000000000000..331e879a76bf --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/ChainOfPopupsFocusTest.java @@ -0,0 +1,203 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.KeyStroke; +import javax.swing.Popup; +import javax.swing.PopupFactory; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; +import java.awt.GraphicsEnvironment; +import java.awt.KeyboardFocusManager; +import java.awt.Point; +import java.awt.Robot; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +/** + * @test + * @summary Regression test for JBR-1417: JBR 11 does not support chain of popups + * @requires (jdk.version.major >= 8) + * @run main ChainOfPopupsFocusTest + */ + +/* + * Description: Test checks that focus goes to the parent popup when child popup is closed. + * Test opens several popups one by one, setting current popup as a parent for the next one. + * Then the popups are closed one by one. Test fails if focus went somewhere else than the parent popup. + */ + +public class ChainOfPopupsFocusTest implements Runnable, ActionListener { + + private static final int DEPTH = 5; + private static final String FRAMENAME = "MainFrame"; + private static final String POPUPNAME = "Popup"; + + private static volatile Component focusOwner; + private static volatile int popupsCount; + private static Robot robot; + private JFrame frame; + + public static void main(String[] args) throws Exception { + + robot = new Robot(); + robot.setAutoDelay(50); + + ChainOfPopupsFocusTest test = new ChainOfPopupsFocusTest(); + SwingUtilities.invokeAndWait(test); + robot.delay(1000); + + // Workaroud for JBR-2657 on Windows + // Click on the main test frame, so it gets focus when running from background process, + // otherwise it just flashes on the taskbar + Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint(); + robot.mouseMove((int) center.getX(), (int) center.getY()); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(1000); + + try { + SwingUtilities.invokeAndWait(() -> + focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()); + if(focusOwner == null || !focusOwner.getName().equals(FRAMENAME)) { + throw new RuntimeException("Test ERROR: " + FRAMENAME + " is not focused"); + } + + for (int count = 1; count <= DEPTH; count++) { + pressCtrlKey(KeyEvent.VK_M); + robot.delay(1000); + } + + if(popupsCount != DEPTH) { + throw new RuntimeException("Test ERROR: Number of open popups is " + + popupsCount + ", but " + DEPTH + " is expected"); + } + for (int count = DEPTH-1; count >= 0; count--) { + pressCtrlKey(KeyEvent.VK_X); + robot.delay(1000); + SwingUtilities.invokeAndWait(() -> + focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()); + String focusedComponent = (focusOwner != null ? focusOwner.getName() : "Nothing"); + String expectedComponent = (count == 0 ? FRAMENAME : POPUPNAME + count); + if(!focusedComponent.equals(expectedComponent)) { + throw new RuntimeException("Test FAILED: " + + focusedComponent + " is focused instead of " + expectedComponent); + } + } + } finally { + SwingUtilities.invokeAndWait(() -> test.frame.dispose()); + robot.delay(2000); + } + System.out.println("Test PASSED"); + } + + private static void pressCtrlKey(int vk) { + robot.keyPress(KeyEvent.VK_CONTROL); + robot.keyPress(vk); + robot.keyRelease(vk); + robot.keyRelease(KeyEvent.VK_CONTROL); + } + + @Override + public void run() { + JTextArea area = createTextArea(FRAMENAME); + frame = new JFrame(getClass().getSimpleName()); + frame.add(new JScrollPane(area)); + frame.pack(); + frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + frame.setLocationRelativeTo(null); + frame.setAlwaysOnTop(true); + frame.setVisible(true); + } + + private JTextArea createTextArea(String locatedOn) { + JTextArea area = new JTextArea(20, 40); + area.setName(locatedOn); + area.registerKeyboardAction(this, "show", KeyStroke.getKeyStroke("control M"), JComponent.WHEN_FOCUSED); + area.registerKeyboardAction(event -> SwingUtilities.getWindowAncestor((Component) event.getSource()).setVisible(false), KeyStroke.getKeyStroke("control X"), JComponent.WHEN_FOCUSED); + area.addComponentListener(new ComponentAdapter() { + @Override + public void componentShown(ComponentEvent event) { + area.requestFocus(); + } + }); + return area; + } + + @Override + public void actionPerformed(ActionEvent event) { + Component source = (Component) event.getSource(); + switch (event.getActionCommand()) { + case "show": + Point point = source.getLocationOnScreen(); + Component area = createTextArea(POPUPNAME + ++popupsCount); + Popup popup = PopupFactory.getSharedInstance().getPopup(source, new JScrollPane(area), point.x + 10, point.y + 10); + Window window = SwingUtilities.getWindowAncestor(area); + window.setAutoRequestFocus(true); + window.setFocusable(true); + window.setFocusableWindowState(true); + window.setFocusTraversalPolicy(new FocusTraversalPolicy() { + @Override + public Component getComponentAfter(Container container, Component component) { + return area; + } + + @Override + public Component getComponentBefore(Container container, Component component) { + return area; + } + + @Override + public Component getFirstComponent(Container container) { + return area; + } + + @Override + public Component getLastComponent(Container container) { + return area; + } + + @Override + public Component getDefaultComponent(Container container) { + return area; + } + }); + popup.show(); + break; + case "hide": + SwingUtilities.getWindowAncestor(source).setVisible(false); + break; + } + } +} diff --git a/test/jdk/jb/java/awt/Focus/ComplexFocusSequence.java b/test/jdk/jb/java/awt/Focus/ComplexFocusSequence.java new file mode 100644 index 000000000000..4eda7d1d863e --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/ComplexFocusSequence.java @@ -0,0 +1,155 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.*; +import java.io.File; +import java.util.concurrent.*; +import java.util.concurrent.locks.LockSupport; +import javax.swing.*; + +/** + * @test + * @summary Regression test for JBR-5684 Focus state is broken after closing of modal dialog in an inactive application + * @key headful + */ + +public class ComplexFocusSequence { + private static final CompletableFuture success = new CompletableFuture<>(); + + private static Robot robot; + private static JFrame frame; + private static JButton dialogButton; + private static Process otherProcess; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(ComplexFocusSequence::initUI); + launchOtherProcess(); + robot.delay(1000); + clickAt(200, 500); // make sure other process'es window is activated + robot.delay(1000); + SwingUtilities.invokeLater(ComplexFocusSequence::showInactiveDialog); + robot.delay(1000); + clickOn(dialogButton); + robot.delay(1000); + typeEnter(); + success.get(3, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(ComplexFocusSequence::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ComplexFocusSequence"); + JTextField textField = new JTextField(30); + textField.addActionListener(e -> success.complete(true)); + frame.add(textField); + frame.pack(); + frame.setLocation(100, 100); + frame.setVisible(true); + } + + private static void showInactiveDialog() { + JComboBox cb = new JComboBox<>(); + cb.setEditable(true); + JDialog d = new JDialog(frame, true); + d.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + cb.requestFocus(); + } + }); + d.add(cb, BorderLayout.CENTER); + dialogButton = new JButton("Close"); + dialogButton.addActionListener(ee -> { + d.dispose(); + spinEventLoop(); + }); + d.add(dialogButton, BorderLayout.SOUTH); + d.pack(); + d.setLocationRelativeTo(frame); + d.setVisible(true); + } + + private static void spinEventLoop() { + EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); + SecondaryLoop loop = eq.createSecondaryLoop(); + new Thread(() -> { + do { + LockSupport.parkNanos(100_000_000); + } while (!loop.exit()); + }).start(); + loop.enter(); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + if (otherProcess != null) otherProcess.destroyForcibly(); + } + + private static void launchOtherProcess() throws Exception { + otherProcess = Runtime.getRuntime().exec(new String[]{ + System.getProperty("java.home") + File.separator + "bin" + File.separator + "java", + "-cp", + System.getProperty("java.class.path"), + "ComplexFocusSequenceChild" + }); + if (otherProcess.getInputStream().read() == -1) { + throw new RuntimeException("Error starting process"); + } + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } + + private static void typeEnter() { + robot.keyPress(KeyEvent.VK_ENTER); + robot.keyRelease(KeyEvent.VK_ENTER); + } +} + +class ComplexFocusSequenceChild { + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + JFrame f = new JFrame("ComplexFocusSequence 2"); + f.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + System.out.println(); + } + }); + f.setBounds(100, 400, 200, 200); + f.setVisible(true); + }); + } +} diff --git a/test/jdk/jb/java/awt/Focus/ContextMenuAfterPopup.java b/test/jdk/jb/java/awt/Focus/ContextMenuAfterPopup.java new file mode 100644 index 000000000000..5dff9e23395c --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/ContextMenuAfterPopup.java @@ -0,0 +1,104 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + +/** + * @test + * @summary Regression test for JBR-4820 Focus lost after showing popup and context menu + * @key headful + */ + +public class ContextMenuAfterPopup { + private static Robot robot; + private static JFrame frame; + private static JTextField frameField; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + SwingUtilities.invokeAndWait(ContextMenuAfterPopup::initUI); + robot.delay(1000); + clickOn(frameField); + robot.delay(1000); + type(KeyEvent.VK_ENTER); + robot.delay(1000); + type(KeyEvent.VK_SPACE); + robot.delay(1000); + type(KeyEvent.VK_ESCAPE); + robot.delay(1000); + type(KeyEvent.VK_A); + robot.delay(1000); + if (!"a".equals(frameField.getText())) { + throw new RuntimeException(); + } + } finally { + SwingUtilities.invokeAndWait(ContextMenuAfterPopup::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ContextMenuAfterPopup"); + frameField = new JTextField(30); + frameField.addActionListener(e -> { + JWindow popup = new JWindow(frame); + JButton b = new JButton("Show context menu"); + b.addActionListener(ee -> { + popup.dispose(); + JPopupMenu pm = new JPopupMenu(); + pm.add("item 1"); + pm.add("item 2"); + pm.show(frameField, 20, 20); + }); + popup.add(b); + popup.pack(); + popup.setVisible(true); + }); + frame.add(frameField); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void type(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/EventsOnPopupShowing.java b/test/jdk/jb/java/awt/Focus/EventsOnPopupShowing.java new file mode 100644 index 000000000000..ad8ba36dab4c --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/EventsOnPopupShowing.java @@ -0,0 +1,103 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @test + * @summary Regression test for JBR-4021 Unexpected focus event order on window showing + * @key headful + */ + +public class EventsOnPopupShowing { + private static final AtomicInteger gainedCount = new AtomicInteger(); + + private static Robot robot; + private static JFrame frame; + private static JButton button; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(EventsOnPopupShowing::initUI); + robot.delay(1000); + clickOn(button); + robot.delay(3000); + if (gainedCount.get() != 1) { + throw new RuntimeException("Unexpected 'focus gained' count: " + gainedCount); + } + } finally { + SwingUtilities.invokeAndWait(EventsOnPopupShowing::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("EventsOnPopupShowing"); + button = new JButton("Start"); + button.addActionListener(e -> { + JDialog d = new JDialog(frame, "Dialog", true); + d.setBounds(300, 300, 200, 200); + new Timer(1000, ee -> d.dispose()) {{ setRepeats(false); }}.start(); + d.setVisible(true); + + JWindow w = new JWindow(frame); + w.add(new JTextField()); + w.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + gainedCount.incrementAndGet(); + } + }); + w.setBounds(300, 300, 200, 200); + w.setVisible(true); + try { + Thread.sleep(1000); // make sure all native events are processed + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + }); + frame.add(button); + frame.setBounds(200, 200, 200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/FileDialogClosing.java b/test/jdk/jb/java/awt/Focus/FileDialogClosing.java new file mode 100644 index 000000000000..f6c0d81ca1d9 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/FileDialogClosing.java @@ -0,0 +1,93 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @test + * @summary Regression test for JBR-4546 Focus is not returned back to IDE after closing "Open" dialog + * @key headful + */ + +public class FileDialogClosing { + private static final AtomicInteger pressedCount = new AtomicInteger(); + + private static Robot robot; + private static Frame frame; + private static Button button; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(FileDialogClosing::initUI); + robot.delay(1000); + clickOn(button); + robot.delay(1000); + pressAndRelease(KeyEvent.VK_ESCAPE); + robot.delay(1000); + pressAndRelease(KeyEvent.VK_SPACE); + robot.delay(1000); + if (pressedCount.get() != 2) { + throw new RuntimeException("Unexpected pressed count: " + pressedCount); + } + } finally { + SwingUtilities.invokeAndWait(FileDialogClosing::disposeUI); + } + } + + private static void initUI() { + frame = new Frame("FileDialogClosing"); + button = new Button("Open dialog"); + button.addActionListener(e -> { + pressedCount.incrementAndGet(); + new FileDialog(frame).setVisible(true); + }); + frame.add(button); + frame.setBounds(200, 200, 200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } +} diff --git a/test/jdk/jb/java/awt/Focus/FocusTraversalOrderTest.java b/test/jdk/jb/java/awt/Focus/FocusTraversalOrderTest.java new file mode 100644 index 000000000000..35da9c6868cb --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/FocusTraversalOrderTest.java @@ -0,0 +1,79 @@ +import java.awt.*; +import java.lang.reflect.InvocationTargetException; + +/* + * @test + * @summary JBR-6060 Verify that the focus traverse to the next component if the current focused became invisible + * @run main/othervm FocusTraversalOrderTest + */ +public class FocusTraversalOrderTest { + + private static Frame frame; + private static Button button0, button1, button2, button3, button4; + + public static void main(String... args) throws InterruptedException, InvocationTargetException, AWTException { + Robot robot = new Robot(); + try { + EventQueue.invokeAndWait(() -> { + frame = new Frame(); + frame.setLayout(new FlowLayout()); + frame.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy()); + button0 = new Button(); + button0.setFocusable(true); + frame.add(button0); + + button1 = new Button(); + button1.setFocusable(true); + frame.add(button1); + + button2 = new Button(); + button2.setFocusable(true); + frame.add(button2); + + button3 = new Button(); + button3.setFocusable(true); + frame.add(button3); + + button4 = new Button(); + button4.setFocusable(true); + frame.add(button4); + + frame.pack(); + frame.setVisible(true); + }); + frame.requestFocus(); + frame.toFront(); + robot.waitForIdle(); + button2.requestFocusInWindow(); + robot.waitForIdle(); + button2.setVisible(false); + robot.waitForIdle(); + + boolean isRightFocus = button3.isFocusOwner(); + if (!isRightFocus) { + System.out.println("ERROR: button3 expected to be focus owner"); + } + + FocusTraversalPolicy focusTraversalPolicy = frame.getFocusTraversalPolicy(); + Component compAfterButton2 = focusTraversalPolicy.getComponentAfter(frame, button2); + + boolean isRightNextComp = compAfterButton2.equals(button3); + if (!isRightNextComp) { + System.out.println("ERROR: the next component after button2 expected to be button3, but got " + compAfterButton2.getName()); + } + + if (!(isRightFocus && isRightNextComp)) { + throw new RuntimeException("TEST FAILED: the next component didn't gain the focus"); + } else { + System.out.println("TEST PASSED"); + } + } finally { + EventQueue.invokeAndWait(() -> { + if (frame != null) { + frame.dispose(); + } + }); + } + } + +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/FrameAfterPopup.java b/test/jdk/jb/java/awt/Focus/FrameAfterPopup.java new file mode 100644 index 000000000000..a46dae50ca8c --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/FrameAfterPopup.java @@ -0,0 +1,103 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-5109 New frame doesn't get focused sometimes if it's shown right after popup is + * closed + * @key headful + */ + +public class FrameAfterPopup { + private static final CompletableFuture success = new CompletableFuture<>(); + + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static JButton button; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + SwingUtilities.invokeAndWait(FrameAfterPopup::initUI); + robot.delay(1000); + clickOn(button); + robot.delay(1000); + pressAndRelease(KeyEvent.VK_SPACE); + success.get(5, TimeUnit.SECONDS); + } + finally { + SwingUtilities.invokeAndWait(FrameAfterPopup::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("FrameAfterPopup"); + frame1.setBounds(200, 200, 200, 200); + frame1.setVisible(true); + + JWindow w = new JWindow(frame1); + button = new JButton("New frame"); + button.addActionListener(e -> { + w.dispose(); + frame2 = new JFrame("Another frame"); + JButton b = new JButton("Finish"); + b.addActionListener(ee -> success.complete(true)); + frame2.add(b); + frame2.setBounds(300, 300, 200, 200); + frame2.setVisible(true); + }); + w.add(button); + w.setBounds(250, 250, 200, 200); + w.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/FullScreenFocusStealing.java b/test/jdk/jb/java/awt/Focus/FullScreenFocusStealing.java new file mode 100644 index 000000000000..5615e708a656 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/FullScreenFocusStealing.java @@ -0,0 +1,105 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.apple.eawt.Application; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.nio.file.Files; + +/** + * @test + * @summary Regression test for JBR-3686 Background window steals focus when converted to full screen on macOS + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/com.apple.eawt + */ + +public class FullScreenFocusStealing { + private static JFrame frame; + private static Process otherProcess; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(FullScreenFocusStealing::initUI); + launchProcessWithWindow(); + Application.getApplication().requestToggleFullScreen(frame); + Thread.sleep(1000); + assertProcessWindowIsStillFocused(); + } + finally { + SwingUtilities.invokeAndWait(FullScreenFocusStealing::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("FullScreenFocusStealing"); + frame.setBounds(100, 100, 200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + if (otherProcess != null) otherProcess.destroyForcibly(); + } + + private static void assertProcessWindowIsStillFocused() throws Exception { + otherProcess.getOutputStream().write('\n'); + otherProcess.getOutputStream().flush(); + if (otherProcess.getInputStream().read() != '1') { + throw new RuntimeException("Process window lost focus"); + } + } + + private static void launchProcessWithWindow() throws Exception { + String javaPath = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; + File tmpFile = File.createTempFile("FullScreenFocusStealing", ".java"); + tmpFile.deleteOnExit(); + Files.writeString(tmpFile.toPath(), "import javax.swing.*;\n" + + "import java.awt.event.*;\n" + + "\n" + + "public class TestWindow {\n" + + " private static JFrame frame;\n" + + " public static void main(String[] args) throws Exception {\n" + + " SwingUtilities.invokeLater(() -> {\n" + + " frame = new JFrame(\"FullScreenFocusStealing 2\");\n" + + " frame.addWindowFocusListener(new WindowAdapter() {\n" + + " @Override\n" + + " public void windowGainedFocus(WindowEvent e) {\n" + + " System.out.println();\n" + + " }\n" + + " });\n" + + " frame.setBounds(100, 400, 200, 200);\n" + + " frame.setVisible(true);\n" + + " });\n" + + " System.in.read();\n" + + " System.out.println(frame.isFocused() ? '1' : '0');\n" + + " }\n" + + "}\n"); + otherProcess = Runtime.getRuntime().exec(new String[]{javaPath, tmpFile.getAbsolutePath()}); + if (otherProcess.getInputStream().read() == -1) { + throw new RuntimeException("Error starting process"); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/MacSpecialFocusLostCase.java b/test/jdk/jb/java/awt/Focus/MacSpecialFocusLostCase.java new file mode 100644 index 000000000000..d1200db1cf74 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/MacSpecialFocusLostCase.java @@ -0,0 +1,85 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; + +/** + * @test + * @summary Regression test for JBR-4281 Window losing focus isn't detected in some cases on macOS + * @key headful + * @requires (os.family == "mac") + */ + +public class MacSpecialFocusLostCase { + private static Robot robot; + private static JFrame frame; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + SwingUtilities.invokeAndWait(MacSpecialFocusLostCase::initUI); + checkFocusedStatus(true); + pressCmdSpace(); // open Spotlight popup + checkFocusedStatus(false); + pressEsc(); // close Spotlight popup + checkFocusedStatus(true); + } finally { + pressEsc(); // make sure popup is closed in any case + SwingUtilities.invokeAndWait(MacSpecialFocusLostCase::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("MacSpecialFocusLostCase"); + frame.setBounds(200, 200, 300, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void checkFocusedStatus(boolean expected) throws Exception { + robot.delay(1000); + boolean[] result = new boolean[1]; + SwingUtilities.invokeAndWait(() -> result[0] = frame.isFocused()); + if (result[0] != expected) { + throw new RuntimeException(expected ? "Frame isn't focused" : "Frame is still focused"); + } + } + + private static void pressCmdSpace() { + robot.keyPress(KeyEvent.VK_META); + robot.keyPress(KeyEvent.VK_SPACE); + robot.keyRelease(KeyEvent.VK_SPACE); + robot.keyRelease(KeyEvent.VK_META); + } + + private static void pressEsc() { + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); + } +} diff --git a/test/jdk/jb/java/awt/Focus/MaximizedCustomDecorationsTest.java b/test/jdk/jb/java/awt/Focus/MaximizedCustomDecorationsTest.java new file mode 100644 index 000000000000..1c39243b8075 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/MaximizedCustomDecorationsTest.java @@ -0,0 +1,100 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3157 Maximized window with custom decorations isn't focused on showing + * @requires (os.family == "windows" | os.family == "mac") + * @key headful + * @run main/othervm --add-opens java.desktop/java.awt=ALL-UNNAMED MaximizedCustomDecorationsTest + */ + +public class MaximizedCustomDecorationsTest { + private static final CompletableFuture frame2Focused = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static JButton button; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(MaximizedCustomDecorationsTest::initUI); + robot.delay(1000); + clickOn(button); + frame2Focused.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(MaximizedCustomDecorationsTest::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("MaximizedCustomDecorationsTest"); + button = new JButton("Open maximized frame"); + button.addActionListener(e -> { + frame1.dispose(); + frame2 = new JFrame("Frame with custom decorations"); + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(80); + JBR.getWindowDecorations().setCustomTitleBar(frame2, titleBar); + frame2.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + frame2Focused.complete(true); + } + }); + frame2.setExtendedState(Frame.MAXIMIZED_BOTH); + frame2.setVisible(true); + }); + frame1.add(button); + frame1.pack(); + frame1.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/ModalDialogFromMenuTest.java b/test/jdk/jb/java/awt/Focus/ModalDialogFromMenuTest.java new file mode 100644 index 000000000000..f3953f0cd512 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/ModalDialogFromMenuTest.java @@ -0,0 +1,134 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.LockSupport; + +/** + * @test + * @summary Test for the case which was broken during development for JBR-2712 (Typeahead mechanism doesn't work on Windows) + * @key headful + */ + +public class ModalDialogFromMenuTest { + private static final CompletableFuture initFinished = new CompletableFuture<>(); + private static final CompletableFuture menuItemShown = new CompletableFuture<>(); + private static final CompletableFuture typedInDialog = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField frameField; + private static JMenuItem menuItem; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); // ensure different timestamps for key events (can impact typeahead logic) + try { + SwingUtilities.invokeAndWait(ModalDialogFromMenuTest::initUI); + initFinished.get(10, TimeUnit.SECONDS); + rightClickOn(frameField); + menuItemShown.get(10, TimeUnit.SECONDS); + clickOn(menuItem); + pressAndRelease(KeyEvent.VK_A); + typedInDialog.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(ModalDialogFromMenuTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ModalDialogFromMenuTest"); + frame.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + initFinished.complete(true); + } + }); + frameField = new JTextField(20); + JPopupMenu menu = new JPopupMenu(); + menuItem = new JMenuItem(new AbstractAction("open dialog") { + @Override + public void actionPerformed(ActionEvent e) { + JDialog d = new JDialog(frame, true); + JTextField dialogField = new JTextField(10); + dialogField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + typedInDialog.complete(true); + } + + @Override + public void removeUpdate(DocumentEvent e) {} + + @Override + public void changedUpdate(DocumentEvent e) {} + }); + d.add(dialogField); + d.pack(); + d.setVisible(true); + } + }); + menuItem.addHierarchyListener(e -> { + if (menuItem.isShowing()) menuItemShown.complete(true); + }); + menu.add(menuItem); + frameField.setComponentPopupMenu(menu); + frame.add(frameField); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y, int buttons) { + robot.mouseMove(x, y); + robot.mousePress(buttons); + robot.mouseRelease(buttons); + } + + private static void clickOn(Component component, int buttons) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2, buttons); + } + + private static void clickOn(Component component) { + clickOn(component, InputEvent.BUTTON1_DOWN_MASK); + } + + private static void rightClickOn(Component component) { + clickOn(component, InputEvent.BUTTON3_DOWN_MASK); + } +} diff --git a/test/jdk/jb/java/awt/Focus/ModalDialogOverSiblingTest.java b/test/jdk/jb/java/awt/Focus/ModalDialogOverSiblingTest.java new file mode 100644 index 000000000000..5add6c206734 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/ModalDialogOverSiblingTest.java @@ -0,0 +1,100 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.*; + +/** + * @test + * @summary Regression test for JBR-1752 Floating windows overlap modal dialogs + * @key headful + */ + +public class ModalDialogOverSiblingTest { + private static final CompletableFuture modalDialogButtonClicked = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JButton button1; + private static JButton button2; + private static JButton button3; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(ModalDialogOverSiblingTest::initUI); + robot.delay(2000); + clickOn(button1); + robot.delay(2000); + clickOn(button2); + robot.delay(2000); + clickOn(button3); + modalDialogButtonClicked.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(ModalDialogOverSiblingTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ModalDialogOverSiblingTest"); + frame.setLayout(new FlowLayout()); + button1 = new JButton("Open non-modal dialog"); + button1.addActionListener(e -> { + JDialog dialog = new JDialog(frame, "Non-modal", false); + dialog.setSize(200, 200); + dialog.setLocation(200, 400); + dialog.setVisible(true); + }); + frame.add(button1); + button2 = new JButton("Open modal dialog"); + button2.addActionListener(e -> { + JDialog dialog = new JDialog(frame, "Modal", true); + button3 = new JButton("Button"); + button3.addActionListener(event -> modalDialogButtonClicked.complete(true)); + dialog.add(button3); + dialog.setSize(150, 150); + dialog.setLocation(220, 420); + dialog.setVisible(true); + }); + frame.add(button2); + frame.pack(); + frame.setLocation(200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/NewFrameAfterDialogTest.java b/test/jdk/jb/java/awt/Focus/NewFrameAfterDialogTest.java new file mode 100644 index 000000000000..712917575635 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/NewFrameAfterDialogTest.java @@ -0,0 +1,99 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-2977 Opening a recent project in a new window doesn't bring this window to the front + * @key headful + */ + +public class NewFrameAfterDialogTest { + private static final CompletableFuture success = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JDialog dialog; + private static JFrame frame2; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(NewFrameAfterDialogTest::initUI); + robot.delay(3000); // wait for the frame to appear + clickOn(frame); + robot.delay(3000); // wait for dialog to appear + clickOn(dialog); + robot.delay(3000); // wait for second frame to appear + clickOn(frame2); + success.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(NewFrameAfterDialogTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("NewFrameAfterDialogTest"); + JButton button = new JButton("Open another frame"); + button.addActionListener(e -> { + dialog = new JDialog(frame, true); + JButton b = new JButton("Confirm"); + b.addActionListener(e2 -> dialog.dispose()); + dialog.add(b); + dialog.setSize(300, 300); + dialog.setLocationRelativeTo(null); + dialog.setVisible(true); + frame2 = new JFrame("Second frame"); + JButton b2 = new JButton("Close"); + b2.addActionListener(e3 -> success.complete(true)); + frame2.add(b2); + frame2.setSize(300, 300); + frame2.setLocationRelativeTo(null); + frame2.setVisible(true); + }); + frame.add(button); + frame.setSize(300, 300); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/PopupFromMenuTest.java b/test/jdk/jb/java/awt/Focus/PopupFromMenuTest.java new file mode 100644 index 000000000000..e0c8e2868ba4 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/PopupFromMenuTest.java @@ -0,0 +1,125 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.LockSupport; + +/** + * @test + * @summary Regression test for JBR-4131 Popup doesn't get focus if created from context menu + * @key headful + */ + +public class PopupFromMenuTest { + private static final CompletableFuture typedInPopup = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField frameField; + private static JMenuItem menuItem; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(PopupFromMenuTest::initUI); + robot.delay(1000); // wait for frame to appear + rightClickOn(frameField); + robot.delay(1000); // wait for context menu to appear + clickOn(menuItem); + robot.delay(1000); // wait for popup to appear + type(); + typedInPopup.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(PopupFromMenuTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("PopupFromMenuTest"); + frameField = new JTextField(20); + JPopupMenu menu = new JPopupMenu(); + menuItem = new JMenuItem(new AbstractAction("open popup") { + @Override + public void actionPerformed(ActionEvent e) { + JWindow popup = new JWindow(frame); + JTextField popupField = new JTextField(10); + popupField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + typedInPopup.complete(true); + } + + @Override + public void removeUpdate(DocumentEvent e) {} + + @Override + public void changedUpdate(DocumentEvent e) {} + }); + popup.add(popupField); + popup.pack(); + popup.setVisible(true); + popupField.requestFocus(); + LockSupport.parkNanos(100_000_000); + } + }); + menu.add(menuItem); + frameField.setComponentPopupMenu(menu); + frame.add(frameField); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void type() { + robot.keyPress(KeyEvent.VK_A); + robot.keyRelease(KeyEvent.VK_A); + } + + private static void clickAt(int x, int y, int buttons) { + robot.mouseMove(x, y); + robot.delay(50); // without this test fails sometimes on macOS (due to popup menu closing at once) + robot.mousePress(buttons); + robot.mouseRelease(buttons); + } + + private static void clickOn(Component component, int buttons) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2, buttons); + } + + private static void clickOn(Component component) { + clickOn(component, InputEvent.BUTTON1_DOWN_MASK); + } + + private static void rightClickOn(Component component) { + clickOn(component, InputEvent.BUTTON3_DOWN_MASK); + } +} diff --git a/test/jdk/jb/java/awt/Focus/PopupIncomingFocusTest.java b/test/jdk/jb/java/awt/Focus/PopupIncomingFocusTest.java new file mode 100644 index 000000000000..a4a81b8fa51e --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/PopupIncomingFocusTest.java @@ -0,0 +1,140 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.io.File; +import java.nio.file.Files; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-2533 Popup is not focused on click when switching from another application on macOS + * @key headful + */ + +public class PopupIncomingFocusTest { + private static final CompletableFuture popupOpened = new CompletableFuture<>(); + private static final CompletableFuture result = new CompletableFuture<>(); + private static Robot robot; + private static Process otherProcess; + private static JFrame frame; + private static JButton button; + private static JWindow popup; + private static JTextField field; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoWaitForIdle(true); + try { + SwingUtilities.invokeAndWait(PopupIncomingFocusTest::init); + robot.delay(1000); + launchProcessWithWindow(); + robot.delay(1000); + clickAt(button); + popupOpened.get(10, TimeUnit.SECONDS); + clickAt(400, 100); // other process' window + clickAt(field); + pressEnter(); + result.get(10, TimeUnit.SECONDS); + } + finally { + SwingUtilities.invokeAndWait(PopupIncomingFocusTest::shutdown); + } + } + + private static void init() { + button = new JButton("Open popup"); + button.addActionListener(e -> { + popup.setVisible(true); + }); + + frame = new JFrame("PIFT"); + frame.add(button); + frame.setBounds(50, 50, 200, 100); + + field = new JTextField(10); + field.getCaret().setBlinkRate(0); // prevent caret blink timer from keeping event thread running + field.addActionListener(e -> result.complete(Boolean.TRUE)); + + popup = new JWindow(frame); + popup.setType(Window.Type.POPUP); + popup.add(field); + popup.pack(); + popup.setLocation(50, 200); + popup.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + popupOpened.complete(Boolean.TRUE); + } + }); + + frame.setVisible(true); + } + + private static void shutdown() { + if (frame != null) frame.dispose(); + if (otherProcess != null) otherProcess.destroyForcibly(); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickAt(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } + + private static void pressEnter() { + robot.keyPress(KeyEvent.VK_ENTER); + robot.keyRelease(KeyEvent.VK_ENTER); + } + + private static void launchProcessWithWindow() throws Exception { + String javaPath = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; + otherProcess = Runtime.getRuntime().exec(new String[]{javaPath, + "-cp", + System.getProperty("java.class.path"), + "PopupIncomingFocusTestChild"}); + if (otherProcess.getInputStream().read() == -1) { + throw new RuntimeException("Error starting process"); + } + } +} + +class PopupIncomingFocusTestChild { + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(() -> { + JFrame f = new JFrame("PIFT 2"); + f.setBounds(300, 50, 200, 100); + f.setVisible(true); + }); + System.out.println(); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Focus/RequestFocusInParent.java b/test/jdk/jb/java/awt/Focus/RequestFocusInParent.java new file mode 100644 index 000000000000..82a3db661449 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/RequestFocusInParent.java @@ -0,0 +1,97 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3979 Focus is not transferred to parent window + * @key headful + */ + +public class RequestFocusInParent { + private static CompletableFuture result; + + private static Robot robot; + private static JFrame frame; + private static JButton button1; + private static JButton button2; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(RequestFocusInParent::initUI); + robot.delay(1000); // wait for frame to appear + clickOn(button1); + robot.delay(1000); // wait for popup to appear + SwingUtilities.invokeAndWait(() -> result = new CompletableFuture<>()); + clickOn(button2); + result.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(RequestFocusInParent::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("RequestFocusInParent"); + button1 = new JButton("Open popup"); + button1.addActionListener(e -> { + JWindow popup = new JWindow(frame); + button2 = new JButton("Return focus"); + button2.addActionListener(ee -> button1.requestFocus()); + popup.add(button2); + popup.setSize(100, 100); + popup.setLocation(100, 400); + popup.setVisible(true); + }); + button1.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (result != null) result.complete(true); + } + }); + frame.add(button1); + frame.setSize(100, 100); + frame.setLocation(100, 100); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/RobotSmokeTest.java b/test/jdk/jb/java/awt/Focus/RobotSmokeTest.java new file mode 100644 index 000000000000..23445c33667e --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/RobotSmokeTest.java @@ -0,0 +1,95 @@ +/* + * Copyright 2020-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.*; + +/** + * @test + * @summary Test validating basic java.awt.Robot functionality (mouse clicks and key presses) + * @key headful + */ + +public class RobotSmokeTest { + private static final CompletableFuture mouseClicked = new CompletableFuture<>(); + private static final CompletableFuture keyTyped = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField field; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(RobotSmokeTest::initUI); + robot.delay(5000); + clickOn(field); + mouseClicked.get(10, TimeUnit.SECONDS); + pressAndRelease(KeyEvent.VK_A); + keyTyped.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(RobotSmokeTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("RobotSmokeTest"); + field = new JTextField(20); + field.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + mouseClicked.complete(Boolean.TRUE); + } + }); + field.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + keyTyped.complete(Boolean.TRUE); + } + }); + frame.add(field); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/SecondLevelPopupTest.java b/test/jdk/jb/java/awt/Focus/SecondLevelPopupTest.java new file mode 100644 index 000000000000..157181d3e19f --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/SecondLevelPopupTest.java @@ -0,0 +1,109 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.*; + +/** + * @test + * @summary Regression test for JBR-3054 Focus is not returned to frame after closing of second-level popup on Windows + * @key headful + */ + +public class SecondLevelPopupTest { + private static CompletableFuture button1Focused; + private static Robot robot; + private static JFrame frame; + private static JButton button1; + private static JButton button2; + private static JButton button3; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(SecondLevelPopupTest::initUI); + robot.delay(2000); + clickOn(button1); + robot.delay(2000); + clickOn(button2); + robot.delay(2000); + SwingUtilities.invokeAndWait(() -> button1Focused = new CompletableFuture<>()); + clickOn(button3); + button1Focused.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(SecondLevelPopupTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("SecondLevelPopupTest"); + button1 = new JButton("Open popup"); + button1.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (button1Focused != null) button1Focused.complete(true); + } + }); + button1.addActionListener(e -> { + JWindow w = new JWindow(frame); + w.setFocusableWindowState(false); + button2 = new JButton("Open another popup"); + button2.addActionListener(ee -> { + JWindow ww = new JWindow(w); + button3 = new JButton("Close"); + button3.addActionListener(eee -> { + ww.dispose(); + }); + ww.add(button3); + ww.pack(); + ww.setLocation(200, 400); + ww.setVisible(true); + }); + w.add(button2); + w.pack(); + w.setLocation(200, 300); + w.setVisible(true); + }); + frame.add(button1); + frame.pack(); + frame.setLocation(200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/SequentialModalDialogsTest.java b/test/jdk/jb/java/awt/Focus/SequentialModalDialogsTest.java new file mode 100644 index 000000000000..97fbe13631f4 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/SequentialModalDialogsTest.java @@ -0,0 +1,120 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-2843 No caret in merge window + * @key headful + */ + +public class SequentialModalDialogsTest { + private static final CompletableFuture secondDialogShown = new CompletableFuture<>(); + private static final CompletableFuture typedInDialog = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JButton frameButton; + private static JTextField windowField; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(SequentialModalDialogsTest::initUI); + robot.delay(1000); + clickOn(frameButton); + secondDialogShown.get(10, TimeUnit.SECONDS); + pressAndRelease(KeyEvent.VK_ENTER); + typedInDialog.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(SequentialModalDialogsTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("SequentialModalDialogsTest"); + frameButton = new JButton("Open dialogs"); + frameButton.addActionListener(e -> { + showDialogs(); + }); + frame.add(frameButton); + frame.pack(); + frame.setVisible(true); + } + + private static void showDialogs() { + JDialog d1 = new JDialog(frame, true); + JTextField t1 = new JTextField("dialog 1"); + t1.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + // using invokeLater to emulate some moment after dialog showing + SwingUtilities.invokeLater(() -> d1.setVisible(false)); + } + }); + d1.add(t1); + d1.pack(); + d1.setVisible(true); + JDialog d2 = new JDialog(frame, true); + JTextField t2 = new JTextField("dialog 2"); + t2.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + // using invokeLater to emulate some moment after dialog showing + SwingUtilities.invokeLater(() -> secondDialogShown.complete(true)); + } + }); + t2.addActionListener(e -> typedInDialog.complete(true)); + d2.add(t2); + d2.pack(); + d2.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/TitleBarClickTest.java b/test/jdk/jb/java/awt/Focus/TitleBarClickTest.java new file mode 100644 index 000000000000..d47d0924c9db --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/TitleBarClickTest.java @@ -0,0 +1,139 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-2652 Window is not focused in some cases on Linux + * @key headful + */ +public class TitleBarClickTest { + private static final CompletableFuture f1Opened = new CompletableFuture<>(); + private static final CompletableFuture f2Opened = new CompletableFuture<>(); + private static final CompletableFuture t2Clicked = new CompletableFuture<>(); + private static CompletableFuture t1Focused; + private static CompletableFuture t2Focused; + + private static JFrame f1; + private static JFrame f2; + private static JTextField t1; + private static JTextField t2; + private static Robot robot; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + + try { + SwingUtilities.invokeAndWait(TitleBarClickTest::initFrame1); + f1Opened.get(10, TimeUnit.SECONDS); + SwingUtilities.invokeAndWait(TitleBarClickTest::initFrame2); + f2Opened.get(10, TimeUnit.SECONDS); + clickAt(t2); + t2Clicked.get(10, TimeUnit.SECONDS); + + SwingUtilities.invokeAndWait(() -> t1Focused = new CompletableFuture<>()); + clickAtTitle(f1); + t1Focused.get(10, TimeUnit.SECONDS); + + SwingUtilities.invokeAndWait(() -> t2Focused = new CompletableFuture<>()); + robot.delay(1000); // give WM a bit more time + f2.toFront(); + t2Focused.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(TitleBarClickTest::disposeUI); + } + } + + private static void initFrame1() { + f1 = new JFrame("first"); + f1.add(t1 = new JTextField()); + t1.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (t1Focused != null) t1Focused.complete(Boolean.TRUE); + } + }); + f1.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + f1Opened.complete(Boolean.TRUE); + } + }); + f1.setBounds(100, 100, 300, 100); + f1.setVisible(true); + } + + private static void initFrame2() { + f2 = new JFrame("second"); + f2.add(t2 = new JTextField()); + t2.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (t2Focused != null) t2Focused.complete(Boolean.TRUE); + } + }); + t2.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + t2Clicked.complete(Boolean.TRUE); + } + }); + f2.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + f2Opened.complete(Boolean.TRUE); + } + }); + f2.setBounds(450, 100, 300, 100); + f2.setVisible(true); + } + + private static void disposeUI() { + if (f1 != null) f1.dispose(); + if (f2 != null) f2.dispose(); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickAt(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } + + private static void clickAtTitle(Window window) { + int topInset = window.getInsets().top; + if (topInset <= 0) throw new RuntimeException("Window doesn't have title bar"); + Point location = window.getLocationOnScreen(); + clickAt(location.x + window.getWidth() / 2, location.y + topInset / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/TypeaheadRequestFocusTest.java b/test/jdk/jb/java/awt/Focus/TypeaheadRequestFocusTest.java new file mode 100644 index 000000000000..5e2875bb1692 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/TypeaheadRequestFocusTest.java @@ -0,0 +1,124 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.LockSupport; + +/** + * @test + * @summary Regression test for JBR-2712 Typeahead mechanism doesn't work on Windows + * @key headful + */ + +public class TypeaheadRequestFocusTest { + private static final CompletableFuture initFinished = new CompletableFuture<>(); + private static final CompletableFuture typedInPopup = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField frameField; + private static JTextField windowField; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); // ensure different timestamps for key events (can impact typeahead logic) + try { + SwingUtilities.invokeAndWait(TypeaheadRequestFocusTest::initUI); + initFinished.get(10, TimeUnit.SECONDS); + clickOn(frameField); + SwingUtilities.invokeAndWait(TypeaheadRequestFocusTest::showPopup); + robot.delay(1000); + pressAndRelease(KeyEvent.VK_ENTER); + pressAndRelease(KeyEvent.VK_A); + typedInPopup.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(TypeaheadRequestFocusTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("TypeaheadRequestFocusTest"); + frame.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + initFinished.complete(true); + } + }); + frameField = new JTextField(20); + frameField.addActionListener(e -> { + LockSupport.parkNanos(1_000_000_000L); + windowField.requestFocus(); + }); + frame.add(frameField); + frame.pack(); + frame.setVisible(true); + } + + private static void showPopup() { + JWindow window = new JWindow(frame); + windowField = new JTextField(20); + windowField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + typedInPopup.complete(true); + } + + @Override + public void removeUpdate(DocumentEvent e) {} + + @Override + public void changedUpdate(DocumentEvent e) {} + }); + window.add(windowField); + window.pack(); + window.setAutoRequestFocus(false); + window.setVisible(true); + window.setAutoRequestFocus(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/TypeaheadSetVisibleTest.java b/test/jdk/jb/java/awt/Focus/TypeaheadSetVisibleTest.java new file mode 100644 index 000000000000..0d74b3ec5bff --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/TypeaheadSetVisibleTest.java @@ -0,0 +1,115 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.LockSupport; + +/** + * @test + * @summary Regression test for JBR-2712 Typeahead mechanism doesn't work on Windows + * @key headful + */ + +public class TypeaheadSetVisibleTest { + private static final CompletableFuture initFinished = new CompletableFuture<>(); + private static final CompletableFuture typedInPopup = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField frameField; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); // ensure different timestamps for key events (can impact typeahead logic) + try { + SwingUtilities.invokeAndWait(TypeaheadSetVisibleTest::initUI); + initFinished.get(10, TimeUnit.SECONDS); + clickOn(frameField); + pressAndRelease(KeyEvent.VK_ENTER); + pressAndRelease(KeyEvent.VK_A); + typedInPopup.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(TypeaheadSetVisibleTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("TypeaheadSetVisibleTest"); + frame.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + initFinished.complete(true); + } + }); + frameField = new JTextField(20); + frameField.addActionListener(e -> { + LockSupport.parkNanos(1_000_000_000L); + JWindow window = new JWindow(frame); + JTextField windowField = new JTextField(20); + windowField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + typedInPopup.complete(true); + } + + @Override + public void removeUpdate(DocumentEvent e) {} + + @Override + public void changedUpdate(DocumentEvent e) {} + }); + window.add(windowField); + window.pack(); + window.setVisible(true); + }); + frame.add(frameField); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/TypeaheadToFrontTest.java b/test/jdk/jb/java/awt/Focus/TypeaheadToFrontTest.java new file mode 100644 index 000000000000..f2ba3f7f094c --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/TypeaheadToFrontTest.java @@ -0,0 +1,123 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.LockSupport; + +/** + * @test + * @summary Regression test for JBR-2712 Typeahead mechanism doesn't work on Windows + * @key headful + */ + +public class TypeaheadToFrontTest { + private static final CompletableFuture initFinished = new CompletableFuture<>(); + private static final CompletableFuture typedInPopup = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField frameField; + private static JWindow window; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); // ensure different timestamps for key events (can impact typeahead logic) + try { + SwingUtilities.invokeAndWait(TypeaheadToFrontTest::initUI); + initFinished.get(10, TimeUnit.SECONDS); + clickOn(frameField); + SwingUtilities.invokeAndWait(TypeaheadToFrontTest::showPopup); + pressAndRelease(KeyEvent.VK_ENTER); + pressAndRelease(KeyEvent.VK_A); + typedInPopup.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(TypeaheadToFrontTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("TypeaheadToFrontTest"); + frame.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + initFinished.complete(true); + } + }); + frameField = new JTextField(20); + frameField.addActionListener(e -> { + LockSupport.parkNanos(1_000_000_000L); + window.toFront(); + }); + frame.add(frameField); + frame.pack(); + frame.setVisible(true); + } + + private static void showPopup() { + window = new JWindow(frame); + JTextField windowField = new JTextField(20); + windowField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + typedInPopup.complete(true); + } + + @Override + public void removeUpdate(DocumentEvent e) {} + + @Override + public void changedUpdate(DocumentEvent e) {} + }); + window.add(windowField); + window.pack(); + window.setAutoRequestFocus(false); + window.setVisible(true); + window.setAutoRequestFocus(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/WindowWithoutParentTest.java b/test/jdk/jb/java/awt/Focus/WindowWithoutParentTest.java new file mode 100644 index 000000000000..277f0e6faca8 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/WindowWithoutParentTest.java @@ -0,0 +1,113 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-2854 [macOS] Undecorated window without parent steals focus on showing + * @key headful + */ + +public class WindowWithoutParentTest { + private static final CompletableFuture initFinished = new CompletableFuture<>(); + private static final CompletableFuture typedInField = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JTextField field; + private static JWindow window; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); // ensure different timestamps for key events (can impact typeahead logic) + try { + SwingUtilities.invokeAndWait(WindowWithoutParentTest::initUI); + initFinished.get(10, TimeUnit.SECONDS); + clickOn(field); + pressAndRelease(KeyEvent.VK_ENTER); + pressAndRelease(KeyEvent.VK_A); + typedInField.get(10, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(WindowWithoutParentTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("WindowWithoutParentTest"); + field = new JTextField(20); + field.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + initFinished.complete(true); + } + }); + field.addActionListener(e -> { + window = new JWindow(); + window.setSize(50, 50); + window.setVisible(true); + }); + field.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + typedInField.complete(true); + } + + @Override + public void removeUpdate(DocumentEvent e) {} + + @Override + public void changedUpdate(DocumentEvent e) {} + }); + frame.add(field); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (window != null) window.dispose(); + if (frame != null) frame.dispose(); + } + + private static void pressAndRelease(int keyCode) { + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + private static void clickAt(int x, int y) { + robot.delay(1000); // needed for GNOME, to give it some time to update internal state after window showing + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Focus/WrongFrameFocusedOnModalDialogClosing.java b/test/jdk/jb/java/awt/Focus/WrongFrameFocusedOnModalDialogClosing.java new file mode 100644 index 000000000000..b4186fd809d9 --- /dev/null +++ b/test/jdk/jb/java/awt/Focus/WrongFrameFocusedOnModalDialogClosing.java @@ -0,0 +1,107 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3662 Focus jumps to another project tab after closing modal dialog + * @key headful + */ + +public class WrongFrameFocusedOnModalDialogClosing { + private static CompletableFuture result; + + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static JDialog dialog; + private static JButton button; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(WrongFrameFocusedOnModalDialogClosing::initUI); + robot.delay(1000); // wait for frames to appear + clickOn(button); + robot.delay(1000); // wait for dialog to appear + SwingUtilities.invokeAndWait(() -> { + result = new CompletableFuture<>(); + dialog.dispose(); + }); + if (result.get(5, TimeUnit.SECONDS)) { + throw new RuntimeException("Wrong frame focused"); + } + } finally { + SwingUtilities.invokeAndWait(WrongFrameFocusedOnModalDialogClosing::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("WFFOMDC 1"); + frame1.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + if (result != null) result.complete(false); + } + }); + dialog = new JDialog(frame1, true); + button = new JButton("Open dialog"); + button.addActionListener(e -> dialog.setVisible(true)); + frame1.add(button); + frame1.setSize(100, 100); + frame1.setLocation(100, 100); + frame1.setVisible(true); + + frame2 = new JFrame("WFFOMDC 2"); + frame2.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + if (result != null) result.complete(true); + } + }); + frame2.setSize(100, 100); + frame2.setLocation(300, 100); + frame2.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Font/Font430.java b/test/jdk/jb/java/awt/Font/Font430.java new file mode 100644 index 000000000000..db983dab6125 --- /dev/null +++ b/test/jdk/jb/java/awt/Font/Font430.java @@ -0,0 +1,138 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.imageio.ImageIO; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +/* + * Description: The class is used by the test font430.sh. + */ +public class Font430 extends JFrame implements + WindowListener { + + private static boolean CALL_GET_FONT_METRICS = false; + private static String FILE_NAME; + static Font430 frame = new Font430("Font430"); + private static JEditorPane editorPane; + + private Font430(String name) { + super(name); + } + + public static void main(String[] args) { + + if (args.length > 0) + FILE_NAME = args[0]; + if (args.length > 1) + CALL_GET_FONT_METRICS = Boolean.valueOf(args[1]); + + SwingUtilities.invokeLater(Font430::createAndShowGUI); + } + + private static void createAndShowGUI() { + frame.setSize(200, 100); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.setLocationRelativeTo(null); + + frame.addComponentsToPane(); + + frame.pack(); + frame.setVisible(true); + } + + private void addComponentsToPane() { + editorPane = new JEditorPane("text/html", + "\u4e2d"); + editorPane.setCaretColor(getBackground()); + + if (CALL_GET_FONT_METRICS) { + editorPane.getFontMetrics(new Font("Segoe UI", Font.PLAIN, 12)); + } + + editorPane.setLocation(0, 0); + editorPane.setSize(200, 100); + + frame.add(editorPane); + + addWindowListener(this); + } + + @Override + public void windowOpened(WindowEvent e) { + BufferedImage screenShoot; + + Rectangle rect = editorPane.getBounds(); + try { + threadSleep(1000); + screenShoot = new BufferedImage(rect.width - 1, rect.height, BufferedImage.TYPE_INT_ARGB); + editorPane.paint(screenShoot.getGraphics()); + ImageIO.write(screenShoot, "png", new File(FILE_NAME)); + } catch (IOException ex) { + ex.printStackTrace(); + } + frame.setVisible(false); + frame.dispose(); + } + + @Override + public void windowClosing(WindowEvent e) { + } + + @Override + public void windowClosed(WindowEvent e) { + } + + @Override + public void windowIconified(WindowEvent e) { + } + + @Override + public void windowDeiconified(WindowEvent e) { + } + + @Override + public void windowActivated(WindowEvent e) { + } + + @Override + public void windowDeactivated(WindowEvent e) { + } + + static private void threadSleep(long ms) { + try { + Thread.sleep(1000); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } +} diff --git a/test/jdk/jb/java/awt/Font/Font467.java b/test/jdk/jb/java/awt/Font/Font467.java new file mode 100644 index 000000000000..49af1e8feca2 --- /dev/null +++ b/test/jdk/jb/java/awt/Font/Font467.java @@ -0,0 +1,115 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.imageio.ImageIO; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontFormatException; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsEnvironment; +import java.awt.font.GlyphVector; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +/* + * @test + * @summary regression test on JRE-467 Wrong rendering of variation sequences + * @run main/othervm Font467 font467_screenshot1.png font467_screenshot2.png + */ + +/* + * Description: The test draws the letter 'a' on the first step and 'a' with a variation selector. Because variation + * sequence being used is not standard, it is expected two identical letters 'a' will be rendered in both cases. + * + */ +public class Font467 { + + // A font supporting Unicode variation selectors is required + private static Font FONT; + + private static String SCREENSHOT_FILE_NAME1, SCREENSHOT_FILE_NAME2; + + public static void main(String[] args) throws Exception { + + String fontFileName = Font467.class.getResource("fonts/DejaVuSans.ttf").getFile(); + if (args.length > 0) + SCREENSHOT_FILE_NAME1 = args[0]; + if (args.length > 1) + SCREENSHOT_FILE_NAME2 = args[1]; + + try { + GraphicsEnvironment ge = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File(fontFileName))); + } catch (IOException | FontFormatException e) { + e.printStackTrace(); + } + + FONT = new Font("DejaVu Sans", Font.PLAIN, 12); + BufferedImage bufferedImage1 = drawImage("a"); + BufferedImage bufferedImage2 = drawImage("a\ufe00"); + + if (!imagesAreEqual(bufferedImage1, bufferedImage2)) { + try { + ImageIO.write(bufferedImage1, "png", new File(System.getProperty("test.classes") + + File.separator + SCREENSHOT_FILE_NAME1)); + ImageIO.write(bufferedImage2, "png", new File(System.getProperty("test.classes") + + File.separator + SCREENSHOT_FILE_NAME2)); + } catch (IOException | NullPointerException ex) { + ex.printStackTrace(); + } + throw new RuntimeException("Expected: screenshots must be equal"); + } + } + + private static BufferedImage drawImage(String text) { + int HEIGHT = 50; + int WIDTH = 20; + + BufferedImage bufferedImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB); + Graphics g = bufferedImage.createGraphics(); + Graphics2D g2d = (Graphics2D) g; + + g2d.setColor(Color.white); + g2d.fillRect(0, 0, WIDTH, HEIGHT); + + g2d.setFont(FONT); + g2d.setColor(Color.black); + GlyphVector gv = FONT.layoutGlyphVector(g2d.getFontRenderContext(), text.toCharArray(), 0, + text.length(), Font.LAYOUT_LEFT_TO_RIGHT); + g2d.drawGlyphVector(gv, 5, 10); + return bufferedImage; + } + + private static boolean imagesAreEqual(BufferedImage i1, BufferedImage i2) { + if (i1.getWidth() != i2.getWidth() || i1.getHeight() != i2.getHeight()) return false; + for (int i = 0; i < i1.getWidth(); i++) { + for (int j = 0; j < i1.getHeight(); j++) { + if (i1.getRGB(i, j) != i2.getRGB(i, j)) return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Font/JapaneseLocale/JapaneseLocaleTest.java b/test/jdk/jb/java/awt/Font/JapaneseLocale/JapaneseLocaleTest.java new file mode 100644 index 000000000000..ab981f50c25a --- /dev/null +++ b/test/jdk/jb/java/awt/Font/JapaneseLocale/JapaneseLocaleTest.java @@ -0,0 +1,53 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; + +/** + * @test + * @summary Regression test for JBR-2210 (JVM crashes on Windows with Japanese locale and UTF-8 enconding) + * @run main/othervm -Duser.language=ja -Duser.region=JP -Dfile.encoding=UTF-8 JapaneseLocaleTest + */ + +/* + * Description: + * Test checks that the JVM does not crash on with Japanese locale and UTF-8 enconding by JFrame creation. + */ + +public class JapaneseLocaleTest { + private static JFrame frame; + public static void main(String[] args) throws Exception{ + try { + EventQueue.invokeAndWait(JapaneseLocaleTest::initFrame); + } + finally { + EventQueue.invokeAndWait(() ->frame.dispose()); + } + } + + private static void initFrame(){ + frame = new JFrame(); + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Font/LibrariesCheck.java b/test/jdk/jb/java/awt/Font/LibrariesCheck.java new file mode 100644 index 000000000000..a898d14dc882 --- /dev/null +++ b/test/jdk/jb/java/awt/Font/LibrariesCheck.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2022, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies that a warning is issued when certain bundled libraries + * are loaded NOT from 'test.jdk'. + * @requires os.family == "mac" + * @library /test/lib + * @run main LibrariesCheck + */ + +import java.awt.Robot; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.JLabel; + +import java.nio.file.Path; +import java.nio.file.Files; +import java.util.Map; + +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Platform; + +public class LibrariesCheck { + public static void main(String[] args) throws Exception { + if (args.length > 0 && args[0].equals("runtest")) { + LibrariesCheck test = new LibrariesCheck(); + } else { + // Run the test with DYLD_LIBRARY_PATH pointing to a directory + // with a substitute libfontmanager. JBR is supposed to detect this + // and complain with a log message. + String dynamicLibPathEnvVarName = "DYLD_LIBRARY_PATH"; + Path tempDir = Files.createTempDirectory(LibrariesCheck.class.getName()); + String testLibName = System.mapLibraryName("fontmanager"); + Path testLibPath = tempDir.resolve(testLibName); + try { + Path jdkLibPath = Platform.libDir(); + Files.copy(jdkLibPath.resolve(testLibName), testLibPath); + + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + LibrariesCheck.class.getName(), + "runtest"); + + Map env = pb.environment(); + env.put(dynamicLibPathEnvVarName, tempDir.toString()); + + OutputAnalyzer oa = ProcessTools.executeProcess(pb); + oa.shouldContain("SEVERE").shouldContain(testLibName) + .shouldContain(dynamicLibPathEnvVarName); + } finally { + Files.delete(testLibPath); + Files.delete(tempDir); + } + } + } + + JFrame frame; + + LibrariesCheck() throws Exception { + try { + SwingUtilities.invokeAndWait(() -> { + frame = new JFrame("LibrariesCheck"); + JPanel panel = new JPanel(); + panel.add(new JLabel("some text")); + frame.getContentPane().add(panel); + frame.pack(); + frame.setVisible(true); + }); + + Robot robot = new Robot(); + robot.waitForIdle(); + + SwingUtilities.invokeAndWait(() -> { + frame.dispose(); + }); + } finally { + if (frame != null) { + frame.dispose(); + } + } + } +} diff --git a/test/jdk/jb/java/awt/Font/TextLayout/DrawTest.java b/test/jdk/jb/java/awt/Font/TextLayout/DrawTest.java new file mode 100644 index 000000000000..76a75f00c4e1 --- /dev/null +++ b/test/jdk/jb/java/awt/Font/TextLayout/DrawTest.java @@ -0,0 +1,156 @@ +/** + * @test 1.0 2016/08/25 + * @bug 8139176 + * @run main DrawTest + * @summary java.awt.TextLayout does not handle correctly the bolded logical fonts (Serif) + */ + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.Robot; +import java.awt.font.TextLayout; +import java.awt.image.BufferedImage; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + + +// The test against java.awt.font.TextLayout, it draws the text "Gerbera" twise +// via the methods Graphics.drawString and TextLayout.draw and then it checks +// that both output have the same width. +// The test does this checking for two styles of the font Serif - PLAIN and +// BOLD in course one by one. + +public class DrawTest { + static final Font plain = new Font("Serif", Font.PLAIN, 32); + static final Font bold = new Font("Serif", Font.BOLD, 32); + static int testCaseNo = 1; + static final String txt = "Gerbera"; + static boolean isPassed = true; + static String errMsg = ""; + static String testCaseName; + static JFrame frame; + static JPanel panel; + static Robot robot; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + + SwingUtilities.invokeAndWait(() -> createUI()); + robot.waitForIdle(); + robot.delay(100); + + BufferedImage paintImage; + for (testCaseNo = 1; testCaseNo <= 2; testCaseNo++) { + if (testCaseNo == 2) { + panel.revalidate(); + panel.repaint(); + } + paintImage = getScreenShot(panel); + int width1 = charWidth(paintImage, 0, 9, 116, 23); + int width2 = charWidth(paintImage, 0, 42, 116, 23); + + if (width1 != width2) { + String tmpMsg = testCaseName + ": test case FAILED Wrong width: " + width1 + " != " + width2; + System.out.println(tmpMsg); + if (errMsg.length() > 0) { + errMsg += "; "; + } + errMsg += tmpMsg; + isPassed = false; + } else + System.out.println(testCaseName + " test case PASSED"); + } + + frame.dispose(); + if (!isPassed) { + throw new RuntimeException(errMsg + " logical fonts (Serif) was not correctly handled"); + } + } + + private static void createUI() { + frame = new JFrame(); + frame.getContentPane().setPreferredSize(new Dimension(116, 75)); + frame.pack(); + frame.setVisible(true); + Insets insets = frame.getInsets(); + System.out.println(insets); + panel = new JPanel() { + + private void drawString(Graphics g, Font font) { + g.setFont(font); + g.drawString(txt, 0, 32); + } + + private void drawTextLayout(Graphics g, Font font) { + TextLayout tl = new TextLayout(txt, + font, + g.getFontMetrics(font).getFontRenderContext()); + tl.draw((Graphics2D) g, 0, 65); + } + + /** + * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) + */ + @Override + protected void paintComponent(Graphics g) { + g.setColor(Color.WHITE); + g.fillRect(0, 0, getWidth(), getHeight()); + g.setColor(Color.BLACK); + + int width; + TextLayout tl; + if (testCaseNo == 1) { + // Ok. + // For the PLAIN font, the text painted by g.drawString and the text layout are the same. + testCaseName = "PLAIN"; + drawString(g, plain); + drawTextLayout(g, plain); + } else { + // Not Ok. + // For the BOLD font, the text painted by g.drawString and the text layout are NOT the same. + testCaseName = "BOLD"; + drawString(g, bold); + drawTextLayout(g, bold); + } + } + }; + frame.getContentPane().add(panel); + frame.setVisible(true); + } + + static private BufferedImage getScreenShot(JPanel panel) { + BufferedImage bi = new BufferedImage( + panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_ARGB); + panel.paint(bi.getGraphics()); + return bi; + } + + private static int charWidth(BufferedImage bufferedImage, int x, int y, int width, int height) { + int rgb; + int returnWidth = 0; + for (int row = y; row < y + height; row++) { + for (int col = x; col < x + width; col++) { + // remove transparance + rgb = bufferedImage.getRGB(col, row) & 0x00FFFFFF; + + int r = rgb >> 16; + int g = (rgb >> 8) & 0x000000FF; + int b = rgb & 0x00000FF; + if (r == g && g == b && b == 255) + System.out.print(" ."); + else + System.out.print(" X"); + + if (rgb != 0xFFFFFF && returnWidth < col) + returnWidth = col; + } + System.out.println(); + } + return returnWidth; + } +} diff --git a/test/jdk/jb/java/awt/Font/font430.sh b/test/jdk/jb/java/awt/Font/font430.sh new file mode 100644 index 000000000000..2f141afe8bb9 --- /dev/null +++ b/test/jdk/jb/java/awt/Font/font430.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @summary font430.sh checks the 'physical' font object, created for 'Segoe UI' font and font-fallback-enabled one +# are not identical +# @run shell font430.sh + +if [ -z "${TESTSRC}" ]; then + echo "TESTSRC undefined: set to ." + TESTSRC=. +fi + +if [ -z "${TESTCLASSES}" ]; then + echo "TESTCLASSES undefined: set to ." + TESTCLASSES=. +fi + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +cd ${TESTSRC} +${TESTJAVA}/bin/javac -d ${TESTCLASSES} Font430.java + +${TESTJAVA}/bin/java -cp ${TESTCLASSES} Font430 t1.bmp true +${TESTJAVA}/bin/java -cp ${TESTCLASSES} Font430 t2.bmp false + +cmp t1.bmp t2.bmp +exit_code=$? + +case $exit_code in +0) echo "PASSED" + ;; +*) echo "FAILED: $exit_code" + mv t[1..2].bmp ${TESTCLASSES} + exit 1 + ;; +esac +exit 0 diff --git a/test/jdk/jb/java/awt/Graphics2D/TextRender/AlphaTextRender.java b/test/jdk/jb/java/awt/Graphics2D/TextRender/AlphaTextRender.java new file mode 100644 index 000000000000..f0a8212ff219 --- /dev/null +++ b/test/jdk/jb/java/awt/Graphics2D/TextRender/AlphaTextRender.java @@ -0,0 +1,166 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.image.BufferedImage; +import java.awt.image.VolatileImage; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; +import static java.awt.Color.*; + +/** + * @test + * @key headful + * @summary Check that increasing alpha of text on white background produces letters with decreasing brightness. + * Test runs two times to test accelerated OGL and Metal text rendering. + * @run main/othervm -Dsun.java2d.metal=False AlphaTextRender + * @run main/othervm -Dsun.java2d.metal=True AlphaTextRender + */ + +public class AlphaTextRender { + final static int WIDTH = 150; + final static int HEIGHT = 200; + final static File mtlImg = new File("t-alpha-metal.png"); + final static File oglImg = new File("t-alpha-ogl.png"); + + public static void main(final String[] args) throws IOException { + + GraphicsEnvironment ge = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsConfiguration gc = + ge.getDefaultScreenDevice().getDefaultConfiguration(); + + VolatileImage vi = gc.createCompatibleVolatileImage(WIDTH, HEIGHT); + BufferedImage bi = gc.createCompatibleImage(WIDTH, HEIGHT); + BufferedImage br = gc.createCompatibleImage(WIDTH, HEIGHT); + Color[] colors = { + WHITE, LIGHT_GRAY, GRAY, DARK_GRAY, BLACK, RED, PINK, ORANGE, YELLOW, MAGENTA, + CYAN, BLUE + }; + + int c = 10; + int maxAscent; + do { + Graphics2D g2d = vi.createGraphics(); + maxAscent = g2d.getFontMetrics().getMaxAscent(); + Font font = new Font("Serif", Font.PLAIN, 10); + g2d.setFont(font); + g2d.setColor(Color.WHITE); + g2d.fillRect(0, 0, WIDTH, HEIGHT); + int posy = maxAscent; + for (Color col : colors) { + g2d.setColor(col); + int posx = 10; + for (int j = 0; j < 20; j++) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, j/(float)20)); + g2d.drawString(String.valueOf('|'), posx, posy); + posx += g2d.getFontMetrics().charWidth('|') + 1; + } + posy += maxAscent; + } + g2d.dispose(); + } while (vi.contentsLost() && (--c > 0)); + + Graphics2D g2d = bi.createGraphics(); + g2d.drawImage(vi, 0, 0, null); + g2d.dispose(); + + g2d = br.createGraphics(); + g2d.drawImage(vi, 0, 0, null); + g2d.dispose(); + + int posy = 0; + int errors = 0; + for (Color color : colors) { + int r0 = 255; + int g0 = 255; + int b0 = 255; + int lmr = 0; + int lmg = 0; + int lmb = 0; + + int curErrors = 0; + boolean spike = false; + for (int j = 0; j < WIDTH; j++) { + Color c1 = new Color(bi.getRGB(j, posy + maxAscent / 2)); + int dr = Math.abs(c1.getRed() - WHITE.getRed()); + int dg = Math.abs(c1.getGreen() - WHITE.getGreen()); + int db = Math.abs(c1.getBlue() - WHITE.getBlue()); + + // Skip background and pick + if (dr + dg + db > 0) { + if (!spike) { + lmr = c1.getRed(); + lmg = c1.getGreen(); + lmb = c1.getBlue(); + spike = true; + } else { + lmr = Math.max(lmr, c1.getRed()); + lmg = Math.max(lmg, c1.getGreen()); + lmb = Math.max(lmb, c1.getBlue()); + } + } else if (spike) { // Compare current spike with the previous one + if (getColorValue(r0, g0, b0) < getColorValue(lmr, lmg, lmb)) { + curErrors++; + br.setRGB(j, posy + maxAscent / 2 - 2, BLACK.getRGB()); + br.setRGB(j, posy + maxAscent / 2 - 1, BLACK.getRGB()); + br.setRGB(j, posy + maxAscent / 2, BLACK.getRGB()); + br.setRGB(j, posy + maxAscent / 2 + 1, BLACK.getRGB()); + br.setRGB(j, posy + maxAscent / 2 + 2, BLACK.getRGB()); + } + r0 = lmr; + g0 = lmg; + b0 = lmb; + spike = false; + } + } + if (curErrors > 0) { + System.err.println("Error with color:" + color); + errors += curErrors; + } + + posy += maxAscent; + } + + if (errors > 0) { + String opt = System.getProperty("sun.java2d.metal"); + if (("true".equals(opt) || "True".equals(opt))) { + ImageIO.write(br, "png", mtlImg); + } else { + ImageIO.write(br, "png", oglImg); + } + throw new RuntimeException("Translucent text errors found: " + errors); + } + } + + private static double getColorValue(int r0, int g0, int b0) { + // Use simple addition for normalized color components + return r0 / 255.0 + g0 / 255.0 + b0 / 255.0; + } +} diff --git a/test/jdk/jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java b/test/jdk/jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java new file mode 100644 index 000000000000..9bff83144adc --- /dev/null +++ b/test/jdk/jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java @@ -0,0 +1,126 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.image.BufferedImage; +import java.awt.image.VolatileImage; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; +/** + * @test + * @key headful + * @summary Test runs two times to generate and compare images with accelerated OGL and Metal text rendering. + * @run main/othervm -Dsun.java2d.metal=False OGLMetalTextRender + * @run main/othervm -Dsun.java2d.metal=True OGLMetalTextRender + */ + +public class OGLMetalTextRender { + final static int WIDTH = 210; + final static int HEIGHT = 120; + final static int TD = 3; + final static File mtlImg = new File("t-metal.png"); + final static File oglImg = new File("t-ogl.png"); + final static File cmpImg = new File("t-mtlogl.png"); + + public static void main(final String[] args) throws IOException { + + GraphicsEnvironment ge = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsConfiguration gc = + ge.getDefaultScreenDevice().getDefaultConfiguration(); + + VolatileImage vi = gc.createCompatibleVolatileImage(WIDTH, 2*HEIGHT); + BufferedImage bi = gc.createCompatibleImage(WIDTH, 2*HEIGHT); + String text = "The quick brown fox jumps over the lazy dog"; + int c = 10; + do { + Graphics2D g2d = vi.createGraphics(); + Font font = new Font("Serif", Font.PLAIN, 10); + g2d.setFont(font); + g2d.setColor(Color.WHITE); + g2d.fillRect(0, 0, WIDTH, HEIGHT); + for (int i = 0; i <= 10; i++) { + g2d.setColor(new Color(0, 0, 0, i/10.0f)); + g2d.drawString(text, 10, 10*(i + 1)); + } + g2d.setColor(Color.BLACK); + g2d.fillRect(0, HEIGHT, WIDTH, HEIGHT); + for (int i = 0; i <= 10; i++) { + g2d.setColor(new Color(1.0f, 1.0f, 1.0f, i/10.0f)); + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); + g2d.drawString(text, 10, 10*(i + 1) + HEIGHT); + } + g2d.dispose(); + } while (vi.contentsLost() && (--c > 0)); + + Graphics2D g2d = bi.createGraphics(); + g2d.drawImage(vi, 0, 0, null); + g2d.dispose(); + int errors = 0; + BufferedImage result = new BufferedImage(WIDTH, 2*HEIGHT, BufferedImage.TYPE_INT_ARGB); + + String opt = System.getProperty("sun.java2d.metal"); + if (opt != null && ("true".equals(opt) || "True".equals(opt))) { + ImageIO.write(bi, "png", mtlImg); + if (oglImg.exists()) { + errors = compare(bi, ImageIO.read(oglImg), result); + } + } else { + ImageIO.write(bi, "png", oglImg); + if (mtlImg.exists()) { + errors = compare(bi, ImageIO.read(mtlImg), result); + } + } + + if (errors > 0) { + ImageIO.write(result, "png", cmpImg); + throw new RuntimeException("Metal vs OGL rendering mismatch, errors found: " + errors); + } + } + + private static int compare(BufferedImage bi1, BufferedImage bi2, + BufferedImage result) + { + int errors = 0; + for (int i = 0; i < WIDTH; i++) { + for (int j = 0; j < 2*HEIGHT; j++) { + Color c1 = new Color(bi1.getRGB(i, j)); + Color c2 = new Color(bi2.getRGB(i, j)); + int dr = Math.abs(c1.getRed() - c2.getRed()); + int dg = Math.abs(c1.getGreen() - c2.getGreen()); + int db = Math.abs(c1.getBlue() - c2.getBlue()); + if (dr+dg+db > TD) { + errors++; + result.setRGB(i, j, Color.RED.getRGB()); + } + } + } + return errors; + } +} diff --git a/test/jdk/jb/java/awt/Toolkit/AWTThreadingCMenuTest.java b/test/jdk/jb/java/awt/Toolkit/AWTThreadingCMenuTest.java new file mode 100644 index 000000000000..a1738e951f6f --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/AWTThreadingCMenuTest.java @@ -0,0 +1,96 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.util.function.Consumer; + +import static helper.ToolkitTestHelper.*; +import static helper.ToolkitTestHelper.TestCase.*; + +/* + * @test + * @summary tests that CMenu/CMenuItem methods wrapped with {AWTThreading.executeWaitToolkit} are normally callable + * @requires (os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx java.desktop/sun.awt + * @run main AWTThreadingCMenuTest + * @author Anton Tarasov + */ +public class AWTThreadingCMenuTest { + static { + System.setProperty("apple.laf.useScreenMenuBar", "true"); + } + + public static void main(String[] args) { + initTest(AWTThreadingCMenuTest.class); + + testCase(). + withCaption("populate Menu"). + withRunnable(AWTThreadingCMenuTest::test1, true). + withExpectedInLog("discarded", false). + withCompletionTimeout(1). + run(); + + testCase(). + withCaption("de-populate Menu"). + withRunnable(AWTThreadingCMenuTest::test2, true). + withExpectedInLog("discarded", false). + withCompletionTimeout(1). + run(); + + System.out.println("Test PASSED"); + } + + @SuppressWarnings("deprecation") + private static void test1() { + var bar = new JMenuBar(); + FRAME.setJMenuBar(bar); + + var menu = new JMenu("Menu"); + + Consumer addItem = text -> { + var item = new JMenuItem(text); + item.setLabel("label " + text); + menu.add(item); + menu.addSeparator(); + }; + + addItem.accept("one"); + addItem.accept("two"); + addItem.accept("three"); + + bar.add(menu); + + TEST_CASE_RESULT.complete(true); + } + + private static void test2() { + var bar = FRAME.getJMenuBar(); + var menu = bar.getMenu(0); + + for (int i = 0; i < FRAME.getJMenuBar().getMenuCount(); i++) { + menu.remove(i); + } + + TEST_CASE_RESULT.complete(true); + } +} diff --git a/test/jdk/jb/java/awt/Toolkit/AWTThreadingTest.java b/test/jdk/jb/java/awt/Toolkit/AWTThreadingTest.java new file mode 100644 index 000000000000..a71279a1fa76 --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/AWTThreadingTest.java @@ -0,0 +1,209 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.util.Arrays; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import sun.lwawt.macosx.CThreading; +import sun.lwawt.macosx.LWCToolkit; +import sun.awt.AWTThreading; + +import static helper.ToolkitTestHelper.*; +import static helper.ToolkitTestHelper.TestCase.*; + +/* + * @test + * @summary tests that AWTThreading can manage cross EDT/AppKit blocking invocation requests + * @requires (os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx java.desktop/sun.awt + * @run main AWTThreadingTest + * @author Anton Tarasov + */ +@SuppressWarnings("ConstantConditions") +public class AWTThreadingTest { + static final int TIMEOUT_SECONDS = 1; + + static final AtomicInteger ITER_COUNTER = new AtomicInteger(); + static final AtomicBoolean DUMP_STACK = new AtomicBoolean(false); + + static volatile Thread THREAD; + + public static void main(String[] args) { + DUMP_STACK.set(args.length > 0 && "dumpStack".equals(args[0])); + + initTest(AWTThreadingTest.class); + + testCase(). + withCaption("certain threads superposition"). + withRunnable(AWTThreadingTest::test1, false). + run(); + + testCase(). + withCaption("random threads superposition"). + withRunnable(AWTThreadingTest::test1, false). + run(); + + testCase(). + withCaption("JBR-4362"). + withRunnable(AWTThreadingTest::test2, false). + withCompletionTimeout(3). + run(); + + System.out.println("Test PASSED"); + } + + static void test1() { + ITER_COUNTER.set(0); + + var timer = new TestTimer(TIMEOUT_SECONDS * 3, TimeUnit.SECONDS); + EventQueue.invokeLater(() -> startThread(() -> + TEST_CASE_RESULT.isDone() || + timer.hasFinished())); + + waitTestCaseCompletion(TIMEOUT_SECONDS * 4); + + tryRun(THREAD::join); + + System.out.println(ITER_COUNTER + " iterations passed"); + } + + static void startThread(Supplier shouldExitLoop) { + THREAD = new Thread(() -> { + + while (!shouldExitLoop.get()) { + ITER_COUNTER.incrementAndGet(); + + var point_1 = new CountDownLatch(1); + var point_2 = new CountDownLatch(1); + var point_3 = new CountDownLatch(1); + var invocations = new CountDownLatch(2); + + // + // 1. Blocking invocation from AppKit to EDT + // + CThreading.executeOnAppKit(() -> { + // We're on AppKit, wait for the 2nd invocation to be on the AWTThreading-pool thread. + if (TEST_CASE_NUM == 1) await(point_1, TIMEOUT_SECONDS); + + tryRun(() -> LWCToolkit.invokeAndWait(() -> { + // We're being dispatched on EDT. + if (TEST_CASE_NUM == 1) point_2.countDown(); + + // Wait for the 2nd invocation to be executed on AppKit. + if (TEST_CASE_NUM == 1) await(point_3, TIMEOUT_SECONDS); + }, FRAME)); + + invocations.countDown(); + }); + + // + // 2. Blocking invocation from EDT to AppKit + // + EventQueue.invokeLater(() -> AWTThreading.executeWaitToolkit(() -> { + // We're on the AWTThreading-pool thread. + if (TEST_CASE_NUM == 1) point_1.countDown(); + + // Wait for the 1st invocation to start NSRunLoop and be dispatched + if (TEST_CASE_NUM == 1) await(point_2, TIMEOUT_SECONDS); + + // Perform in JavaRunLoopMode to be accepted by NSRunLoop started by LWCToolkit.invokeAndWait. + LWCToolkit.performOnMainThreadAndWait(() -> { + if (DUMP_STACK.get()) { + dumpAllThreads(); + } + // We're being executed on AppKit. + if (TEST_CASE_NUM == 1) point_3.countDown(); + }); + + invocations.countDown(); + })); + + await(invocations, TIMEOUT_SECONDS * 2); + } // while + + TEST_CASE_RESULT.complete(true); + }); + THREAD.setDaemon(true); + THREAD.start(); + } + + static void test2() { + var invocations = new CountDownLatch(1); + var invokeAndWaitCompleted = new AtomicBoolean(false); + + var log = new Consumer() { + public void accept(String msg) { + System.out.println(msg); + System.out.flush(); + } + }; + + CThreading.executeOnAppKit(() -> { + log.accept("executeOnAppKit - entered"); + + // + // It's expected that LWCToolkit.invokeAndWait() does not exit before its invocation completes. + // + tryRun(() -> LWCToolkit.invokeAndWait(() -> { + log.accept("\tinvokeAndWait - entered"); + + AWTThreading.executeWaitToolkit(() -> { + log.accept("\t\texecuteWaitToolkit - entered"); + + LWCToolkit.performOnMainThreadAndWait(() -> log.accept("\t\t\tperformOnMainThreadAndWait - entered")); + + log.accept("\t\t\tperformOnMainThreadAndWait - exited"); + }); + + invokeAndWaitCompleted.set(true); + log.accept("\t\texecuteWaitToolkit - exited"); + }, FRAME)); + + log.accept("\tinvokeAndWait - exited"); + + if (!invokeAndWaitCompleted.get()) { + TEST_CASE_RESULT.completeExceptionally(new Throwable("Premature exit from invokeAndWait")); + } + + invocations.countDown(); + }); + + await(invocations, TIMEOUT_SECONDS * 2); + log.accept("executeOnAppKit + await - exited"); + + TEST_CASE_RESULT.complete(true); + } + + static void dumpAllThreads() { + Thread.getAllStackTraces().keySet().forEach(t -> { + System.out.printf("%s\t%s\t%d\t%s\n", t.getName(), t.getState(), t.getPriority(), t.isDaemon() ? "Daemon" : "Normal"); + Arrays.asList(t.getStackTrace()).forEach(frame -> System.out.println("\tat " + frame)); + }); + System.out.println("\n\n"); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Toolkit/DetectingOSThemeTest.java b/test/jdk/jb/java/awt/Toolkit/DetectingOSThemeTest.java new file mode 100644 index 000000000000..84bda9f3dea2 --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/DetectingOSThemeTest.java @@ -0,0 +1,97 @@ +/* + * Copyright 2000-2024 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.io.*; + +/** + * @test + * @summary DetectingOSThemeTest checks that JBR could correctly detect OS theme and notify about theme changing in time + * @run main DetectingOSThemeTest + * @requires (os.family == "linux") + */ +public class DetectingOSThemeTest { + private static final int TIME_TO_WAIT = 2000; + private static final String LIGHT_THEME_NAME = "Light"; + private static final String DARK_THEME_NAME = "Dark"; + private static final String UNDEFINED_THEME_NAME = "Undefined"; + + private static String currentTheme() { + Boolean val = (Boolean) Toolkit.getDefaultToolkit().getDesktopProperty("awt.os.theme.isDark"); + if (val == null) { + return UNDEFINED_THEME_NAME; + } + return (val) ? DARK_THEME_NAME : LIGHT_THEME_NAME; + } + + private static void setOsDarkTheme(String val) { + try { + if (val.equals(DARK_THEME_NAME)) { + Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'"); + Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'"); + } else { + Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'"); + Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'default'"); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static String currentTheme = null; + + public static void main(String[] args) throws Exception { + currentTheme = currentTheme(); + if (currentTheme.equals(UNDEFINED_THEME_NAME)) { + throw new RuntimeException("Test Failed! Cannot detect current OS theme"); + } + + String initialTheme = currentTheme; + try { + setOsDarkTheme(LIGHT_THEME_NAME); + Thread.sleep(TIME_TO_WAIT); + if (!currentTheme().equals(LIGHT_THEME_NAME)) { + throw new RuntimeException("Test Failed! Initial OS theme supposed to be Light"); + } + + String[] themesOrder = {DARK_THEME_NAME, LIGHT_THEME_NAME, DARK_THEME_NAME}; + Toolkit.getDefaultToolkit().addPropertyChangeListener("awt.os.theme.isDark", evt -> { + currentTheme = currentTheme(); + }); + + for (String nextTheme : themesOrder) { + setOsDarkTheme(nextTheme); + Thread.sleep(TIME_TO_WAIT); + + if (!currentTheme().equals(nextTheme)) { + throw new RuntimeException("Test Failed! OS theme which was set doesn't match with detected"); + } + if (!currentTheme.equals(nextTheme)) { + throw new RuntimeException("Test Failed! Changing OS theme was not detected"); + } + } + } finally { + setOsDarkTheme(initialTheme); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Toolkit/GetScreenInsets468.java b/test/jdk/jb/java/awt/Toolkit/GetScreenInsets468.java new file mode 100644 index 000000000000..d9e3ed48038e --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/GetScreenInsets468.java @@ -0,0 +1,115 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Robot; +import java.awt.Toolkit; +import java.lang.reflect.InvocationTargetException; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; + +/* @test + * @summary regression test on JRE-468 Idea freezes on project loading + * @run main/othervm/timeout=360 GetScreenInsets468 100 + */ + +/* + * Description: The test creates frames one by one and after each creation it calls + * Toolkit.getDefaultToolkit().getScreenInsets. The number of frames can be specified + * by ITERATION_NUMBER, by default it equals 100. + */ + +public class GetScreenInsets468 implements Runnable { + + private static Robot robot; + + private static int ITERATION_NUMBER = 100; + private static final int ROBOT_DELAY = 200; + private static final int HANG_TIME_FACTOR = 10; + + private long initialDiffTime; + private int count = 0; + private JFrame frames[]; + + public synchronized void run() { + frames = new JFrame[ITERATION_NUMBER]; + + while (count < ITERATION_NUMBER) { + long startTime = System.currentTimeMillis(); + + frames[count] = new JFrame("Hang getScreenInsets Test " + count); + frames[count].setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frames[count].setSize(350, 250); + frames[count].setLocation(20 + count, 20 + count); + + frames[count].setVisible(true); + robot.delay(ROBOT_DELAY); + + Toolkit.getDefaultToolkit().getScreenInsets(frames[count].getGraphicsConfiguration()); + + long endTime = System.currentTimeMillis(); + long diffTime = endTime - startTime; + + System.out.println("count = " + count + + " initial time = " + initialDiffTime + + " current time = " + diffTime); + if (count > 1) { + if (initialDiffTime * HANG_TIME_FACTOR < diffTime) { + throw new RuntimeException("The test is near to be hang: iteration count = " + count + + " initial time = " + initialDiffTime + + " current time = " + diffTime); + } + } else { + initialDiffTime = diffTime; + } + count++; + } + } + + private void disposeAll() throws InterruptedException, InvocationTargetException { + + for (JFrame frame : frames) { + SwingUtilities.invokeAndWait(() -> { + frame.setVisible(false); + }); + + SwingUtilities.invokeAndWait(() -> { + frame.dispose(); + }); + robot.delay(100); + } + } + + public static void main(String[] args) throws Exception { + + robot = new Robot(); + + if (args.length > 0) + GetScreenInsets468.ITERATION_NUMBER = Integer.parseInt(args[0]); + + GetScreenInsets468 test = new GetScreenInsets468(); + SwingUtilities.invokeAndWait(test); + + test.disposeAll(); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java b/test/jdk/jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java new file mode 100644 index 000000000000..b9f1bbb5273c --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java @@ -0,0 +1,216 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.InvocationEvent; +import java.util.concurrent.*; +import java.util.function.Consumer; + +import sun.awt.AWTAccessor; +import sun.awt.AWTThreading; +import sun.lwawt.macosx.CThreading; +import sun.lwawt.macosx.LWCToolkit; + +import static helper.ToolkitTestHelper.*; +import static helper.ToolkitTestHelper.TestCase.*; + +/* + * @test + * @summary Tests different scenarios for LWCToolkit.invokeAndWait(). + * @requires (os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx java.desktop/sun.awt + * @run main LWCToolkitInvokeAndWaitTest + * @run main/othervm -Dlog.level.FINER=true LWCToolkitInvokeAndWaitTest + * @author Anton Tarasov + */ +@SuppressWarnings("ConstantConditions") +public class LWCToolkitInvokeAndWaitTest { + // This property is used in {CAccessibility} + static final int INVOKE_TIMEOUT_SECONDS = Integer.getInteger("sun.lwawt.macosx.CAccessibility.invokeTimeoutSeconds", 1); + + static final Runnable CONSUME_DISPATCHING = () -> TEST_CASE_RESULT.completeExceptionally(new Throwable("Unexpected dispatching!")); + + static volatile CountDownLatch EDT_FAST_FREE_LATCH; + + static { + System.setProperty("sun.lwawt.macosx.LWCToolkit.invokeAndWait.disposeOnEDTFree", "true"); + + AWTThreading.setAWTThreadingFactory(edt -> new AWTThreading(edt) { + @Override + public CompletableFuture onEventDispatchThreadFree(Runnable runnable) { + if (EDT_FAST_FREE_LATCH != null) { + // 1. wait for the invocation event to be dispatched + // 2. wait for EDT to become free + tryRun(EDT_FAST_FREE_LATCH::await); + + EDT_FAST_FREE_LATCH = null; + } + // if EDT is free the runnable should be called immediately + return super.onEventDispatchThreadFree(runnable); + } + @Override + public void notifyEventDispatchThreadFree() { + if (EDT_FAST_FREE_LATCH != null && + // if the invocation event is dispatched by now + EDT_FAST_FREE_LATCH.getCount() == 1) + { + EDT_FAST_FREE_LATCH.countDown(); + } + super.notifyEventDispatchThreadFree(); + } + }); + } + + public static void main(String[] args) { + initTest(LWCToolkitInvokeAndWaitTest.class); + + Consumer noop = e -> {}; + + testCase(). + withCaption("InvocationEvent is normally dispatched"). + withRunnable(() -> test1(noop, () -> System.out.println("I'm dispatched")), true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + run(); + + testCase(). + withCaption("InvocationEvent is lost"). + withRunnable(() -> test1(noop, CONSUME_DISPATCHING), true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + withExpectedInLog("lost", true). + run(); + + EDT_FAST_FREE_LATCH = new CountDownLatch(2); + testCase(). + withCaption("InvocationEvent is lost (EDT becomes fast free)"). + withRunnable(() -> test1(invocationEvent -> EDT_FAST_FREE_LATCH.countDown(), CONSUME_DISPATCHING), true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + withExpectedInLog("lost", true). + run(); + + testCase(). + withCaption("InvocationEvent is disposed"). + withRunnable(() -> test1(invocationEvent -> AWTAccessor.getInvocationEventAccessor().dispose(invocationEvent), CONSUME_DISPATCHING), true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + withExpectedInLog("disposed", true). + run(); + + testCase(). + withCaption("InvocationEvent is timed out (delayed before dispatching)"). + withRunnable(() -> test1(invocationEvent -> sleep(INVOKE_TIMEOUT_SECONDS * 4), CONSUME_DISPATCHING), true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + withExpectedInLog("timed out", true). + run(); + + testCase(). + withCaption("InvocationEvent is timed out (delayed during dispatching)"). + withRunnable(() -> test1(noop, () -> sleep(INVOKE_TIMEOUT_SECONDS * 4)), true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + withExpectedInLog("timed out", true). + run(); + + testCase(). + withCaption("invokeAndWait is discarded"). + withRunnable(LWCToolkitInvokeAndWaitTest::test2, true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + withExpectedInLog("discarded", true). + run(); + + testCase(). + withCaption("invokeAndWait is passed"). + withRunnable(LWCToolkitInvokeAndWaitTest::test3, true). + withCompletionTimeout(INVOKE_TIMEOUT_SECONDS * 2). + run(); + + System.out.println("Test PASSED"); + } + + static void test1(Consumer onBeforeDispatching, Runnable onDispatching) { + Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueue() { + @Override + protected void dispatchEvent(AWTEvent event) { + // + // Intercept the invocation posted from Appkit. + // + if (event instanceof AWTThreading.TrackedInvocationEvent) { + System.out.println("Before dispatching: " + event); + onBeforeDispatching.accept((InvocationEvent)event); + + if (onDispatching == CONSUME_DISPATCHING) { + System.out.println("Consuming: " + event); + return; + } + } + super.dispatchEvent(event); + } + }); + CThreading.executeOnAppKit(() -> tryRun(() -> { + // + // Post an invocation from AppKit. + // + LWCToolkit.invokeAndWait(onDispatching, FRAME, INVOKE_TIMEOUT_SECONDS); + TEST_CASE_RESULT.complete(true); + })); + } + + static void test2() { + EventQueue.invokeLater(() -> + // + // Blocking EDT. + // + LWCToolkit.performOnMainThreadAndWait(() -> { + // + // The invocation from AppKit should be discarded. + // + tryRun(() -> LWCToolkit.invokeAndWait(EMPTY_RUNNABLE, FRAME, INVOKE_TIMEOUT_SECONDS * 4)); + TEST_CASE_RESULT.complete(true); + })); + } + + static void test3() { + var point = new CountDownLatch(1); + + EventQueue.invokeLater(() -> { + // We're on EDT, wait for the second invocation to perform on AppKit. + await(point, INVOKE_TIMEOUT_SECONDS * 2); + + // This should be dispatched in the RunLoop started by LWCToolkit.invokeAndWait from the second invocation. + LWCToolkit.performOnMainThreadAndWait(() -> TEST_CASE_RESULT.complete(true)); + }); + + LWCToolkit.performOnMainThreadAndWait(() -> { + // Notify we're on AppKit. + point.countDown(); + + // The LWCToolkit.invokeAndWait call starts a native RunLoop. + tryRun(() -> LWCToolkit.invokeAndWait(EMPTY_RUNNABLE, FRAME)); + }); + } + + static void check(String expectedInLog) { + tryRun(() -> { + if (!TEST_CASE_RESULT.get(INVOKE_TIMEOUT_SECONDS * 2L, TimeUnit.SECONDS)) { + throw new RuntimeException("Test FAILED! (negative result)"); + } + }); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Toolkit/ScreenResolution.java b/test/jdk/jb/java/awt/Toolkit/ScreenResolution.java new file mode 100644 index 000000000000..c435c0123cf6 --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/ScreenResolution.java @@ -0,0 +1,39 @@ +/* + * Copyright 2017-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import java.awt.Toolkit; + +/* @test + * @summary checks that screen resolution is in acceptable range + */ + +public class ScreenResolution { + + public static void main(String[] args) throws Exception { + int pixelPerInch = java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); + + if (pixelPerInch <= 0 || pixelPerInch > 1000) + throw new RuntimeException("Invalid resolution: " + pixelPerInch); + } +} diff --git a/test/jdk/jb/java/awt/Toolkit/helper/ToolkitTestHelper.java b/test/jdk/jb/java/awt/Toolkit/helper/ToolkitTestHelper.java new file mode 100644 index 000000000000..18bb3a29d4a5 --- /dev/null +++ b/test/jdk/jb/java/awt/Toolkit/helper/ToolkitTestHelper.java @@ -0,0 +1,271 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package helper; + +import sun.awt.AWTThreading; +import sun.lwawt.macosx.CThreading; +import sun.lwawt.macosx.LWCToolkit; + +import javax.swing.*; +import javax.swing.Timer; +import java.awt.*; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.util.Optional; +import java.util.Random; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import java.util.logging.*; + +@SuppressWarnings("ConstantConditions") +public class ToolkitTestHelper { + public static final Runnable EMPTY_RUNNABLE = () -> {}; + + public static final TestLogHandler LOG_HANDLER = new TestLogHandler(); + + public static volatile CompletableFuture TEST_CASE_RESULT; + public static volatile int TEST_CASE_NUM; + public static volatile JFrame FRAME; + + private static volatile JLabel LABEL; + private static volatile Thread MAIN_THREAD; + + private static final Runnable UPDATE_LABEL = new Runnable() { + final Random rand = new Random(); + @Override + public void run() { + LABEL.setForeground(new Color(rand.nextFloat(), 0, rand.nextFloat())); + LABEL.setText("(" + TEST_CASE_NUM + ")"); + } + }; + + public static void initTest(Class testClass) { + MAIN_THREAD = Thread.currentThread(); + + assert MAIN_THREAD.getName().toLowerCase().contains("main"); + + loop(); // init the event threads + + tryRun(() -> { + Consumer> setLog = cls -> { + Logger log = LogManager.getLogManager().getLogger(cls.getName()); + log.setUseParentHandlers(false); + log.addHandler(LOG_HANDLER); + if (Boolean.getBoolean("log.level.FINER")) { + log.setLevel(Level.FINER); + } + }; + setLog.accept(AWTThreading.class); + setLog.accept(LWCToolkit.class); + }); + + Thread.UncaughtExceptionHandler handler = MAIN_THREAD.getUncaughtExceptionHandler(); + MAIN_THREAD.setUncaughtExceptionHandler((t, e) -> { + if (FRAME != null) FRAME.dispose(); + handler.uncaughtException(t, e); + }); + + CountDownLatch showLatch = new CountDownLatch(1); + tryRun(() -> EventQueue.invokeAndWait(() -> { + FRAME = new JFrame(testClass.getSimpleName()); + LABEL = new JLabel("0"); + LABEL.setFont(LABEL.getFont().deriveFont((float)30)); + LABEL.setHorizontalAlignment(SwingConstants.CENTER); + FRAME.add(LABEL, BorderLayout.CENTER); + FRAME.getContentPane().setBackground(Color.green); + FRAME.setLocationRelativeTo(null); + FRAME.setSize(200, 200); + FRAME.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + FRAME.addComponentListener(new ComponentAdapter() { + @Override + public void componentShown(ComponentEvent e) { + showLatch.countDown(); + } + }); + FRAME.setVisible(true); + })); + //noinspection ResultOfMethodCallIgnored + tryRun(() -> showLatch.await(1, TimeUnit.SECONDS)); + + Timer timer = new Timer(100, e -> UPDATE_LABEL.run()); + timer.setRepeats(true); + timer.start(); + + new Thread(() -> { + try { + MAIN_THREAD.join(); + } catch (InterruptedException ignored) { + } + if (FRAME != null) FRAME.dispose(); + timer.stop(); + }).start(); + } + + public static void waitTestCaseCompletion(int seconds) { + tryRun(() -> { + if (!TEST_CASE_RESULT.get(seconds, TimeUnit.SECONDS)) { + throw new RuntimeException("Test FAILED! (negative result)"); + } + }); + + loop(); // wait for the logging to be printed + } + + public static class TestCase { + volatile String caption = ""; + volatile Runnable testRunnable = EMPTY_RUNNABLE; + volatile int completionTimeoutSeconds = -1; + volatile String expectedInLog = ""; + volatile boolean expectedIncludedInLog = true; + + public static TestCase testCase() { + return new TestCase(); + } + + public TestCase withCaption(String caption) { + this.caption = caption; + return this; + } + + public TestCase withRunnable(Runnable testRunnable, boolean invokeOnEdt) { + this.testRunnable = invokeOnEdt ? () -> EventQueue.invokeLater(testRunnable) : testRunnable; + return this; + } + + public TestCase withCompletionTimeout(int seconds) { + this.completionTimeoutSeconds = seconds; + return this; + } + + public TestCase withExpectedInLog(String expectedInLog, boolean included) { + this.expectedInLog = expectedInLog; + this.expectedIncludedInLog = included; + return this; + } + + public void run() { + TEST_CASE_RESULT = new CompletableFuture<>(); + TEST_CASE_RESULT.whenComplete((r, e) -> Optional.of(e).ifPresent(Throwable::printStackTrace)); + + //noinspection NonAtomicOperationOnVolatileField + String prefix = "(" + (++TEST_CASE_NUM) + ")"; + + System.out.println("\n" + prefix + " TEST: " + caption); + UPDATE_LABEL.run(); + + testRunnable.run(); + + if (completionTimeoutSeconds >= 0) { + waitTestCaseCompletion(completionTimeoutSeconds); + + if (expectedIncludedInLog && !LOG_HANDLER.testContains(expectedInLog)) { + throw new RuntimeException("Test FAILED! (not found in the log: \"" + expectedInLog + "\")"); + + } else if (!expectedIncludedInLog && LOG_HANDLER.testContains(expectedInLog)) { + throw new RuntimeException("Test FAILED! (found in the log: \"" + expectedInLog + "\")"); + } + } + + System.out.println(prefix + " SUCCEEDED\n"); + } + } + + public static void tryRun(ThrowableRunnable runnable) { + tryCall(() -> { + runnable.run(); + return null; + }, null); + } + + public static T tryCall(Callable callable, T defValue) { + try { + return callable.call(); + } catch (Exception e) { + if (Thread.currentThread() == MAIN_THREAD) { + throw new RuntimeException("Test FAILED!", e); + } else { + TEST_CASE_RESULT.completeExceptionally(e); + } + } + return defValue; + } + + public static void await(CountDownLatch latch, int seconds) { + if (!tryCall(() -> latch.await(seconds, TimeUnit.SECONDS), false)) { + TEST_CASE_RESULT.completeExceptionally(new Throwable("Awaiting has timed out")); + } + } + + public static void sleep(int seconds) { + tryRun(() -> Thread.sleep(seconds * 1000L)); + } + + private static void loop() { + tryRun(() -> EventQueue.invokeAndWait(EMPTY_RUNNABLE)); + var latch = new CountDownLatch(1); + CThreading.executeOnAppKit(latch::countDown); + tryRun(latch::await); + } + + public interface ThrowableRunnable { + void run() throws Exception; + } + + public static class TestTimer { + private final long finishTime; + + public TestTimer(long timeFromNow, TimeUnit unit) { + finishTime = System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(timeFromNow, unit); + } + + public boolean hasFinished() { + return System.currentTimeMillis() >= finishTime; + } + } + + public static class TestLogHandler extends StreamHandler { + public StringBuilder buffer = new StringBuilder(); + + public TestLogHandler() { + // Use System.out to merge with the test printing. + super(System.out, new SimpleFormatter()); + setLevel(Level.ALL); + } + + @Override + public void publish(LogRecord record) { + buffer.append(record.getMessage()); + super.publish(record); + flush(); + } + + public boolean testContains(String str) { + boolean contains = buffer.toString().contains(str); + buffer.setLength(0); + return contains; + } + } +} diff --git a/test/jdk/jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java b/test/jdk/jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java new file mode 100644 index 000000000000..a1f782b255ec --- /dev/null +++ b/test/jdk/jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java @@ -0,0 +1,106 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.io.File; +import java.nio.file.Files; + +/** + * @test + * @summary Regression test for JBR-3671 Window order changes for a background app on macOS desktop space switch + * @key headful + * @requires (os.family == "mac") + * @compile MacSpacesUtil.java + * @run main BackgroundWindowOrderOnSpaceChange + */ + +public class BackgroundWindowOrderOnSpaceChange { + private static JFrame frame1; + private static JFrame frame2; + private static Process otherProcess; + + public static void main(String[] args) throws Exception { + MacSpacesUtil.ensureMoreThanOneSpaceExists(); + try { + SwingUtilities.invokeAndWait(BackgroundWindowOrderOnSpaceChange::initUI); + launchProcessWithWindow(); + MacSpacesUtil.switchToNextSpace(); + MacSpacesUtil.switchToPreviousSpace(); + Color color = new Robot().getPixelColor(400, 400); + if (!Color.green.equals(color)) { + throw new RuntimeException("Frame 1 isn't shown on top. Found color: " + color); + } + } + finally { + SwingUtilities.invokeAndWait(BackgroundWindowOrderOnSpaceChange::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("BackgroundWindowOrderOnSpaceChange 1"); + frame1.getContentPane().setBackground(Color.green); + frame1.setBounds(100, 100, 400, 400); + frame1.setVisible(true); + frame2 = new JFrame("BackgroundWindowOrderOnSpaceChange 2"); + frame2.getContentPane().setBackground(Color.red); + frame2.setBounds(300, 300, 400, 400); + frame2.setVisible(true); + frame1.toFront(); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + if (otherProcess != null) otherProcess.destroyForcibly(); + } + + private static void launchProcessWithWindow() throws Exception { + String javaPath = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; + File tmpFile = File.createTempFile("BackgroundWindowOrderOnSpaceChange", ".java"); + tmpFile.deleteOnExit(); + Files.writeString(tmpFile.toPath(), "import javax.swing.*;\n" + + "import java.awt.event.*;\n" + + "\n" + + "public class TestWindow {\n" + + " public static void main(String[] args) {\n" + + " SwingUtilities.invokeLater(() -> {\n" + + " JFrame f = new JFrame(\"BackgroundWindowOrderOnSpaceChange 3\");\n" + + " f.addWindowFocusListener(new WindowAdapter() {\n" + + " @Override\n" + + " public void windowGainedFocus(WindowEvent e) {\n" + + " System.out.println();\n" + + " }\n" + + " });\n" + + " f.setBounds(800, 100, 200, 200);\n" + + " f.setVisible(true);\n" + + " });\n" + + " }\n" + + "}\n"); + otherProcess = Runtime.getRuntime().exec(new String[]{javaPath, tmpFile.getAbsolutePath()}); + if (otherProcess.getInputStream().read() == -1) { + throw new RuntimeException("Error starting process"); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Window/FullScreenChildWindow.java b/test/jdk/jb/java/awt/Window/FullScreenChildWindow.java new file mode 100644 index 000000000000..828824450b25 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/FullScreenChildWindow.java @@ -0,0 +1,123 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.apple.eawt.Application; +import com.apple.eawt.FullScreenAdapter; +import com.apple.eawt.FullScreenUtilities; +import com.apple.eawt.event.FullScreenEvent; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3611 Unexpected workspace switch with dialog in full-screen mode on macOS + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/com.apple.eawt + * java.desktop/com.apple.eawt.event + * @compile MacSpacesUtil.java + * @run main FullScreenChildWindow +*/ + +public class FullScreenChildWindow { + private static final CompletableFuture shownAtFullScreen = new CompletableFuture<>(); + private static final CompletableFuture dialogShown = new CompletableFuture<>(); + + private static Robot robot; + private static JFrame frame2; + private static JFrame frame1; + private static JButton button; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(FullScreenChildWindow::initUI); + shownAtFullScreen.get(5, TimeUnit.SECONDS); + clickAt(button); + dialogShown.get(5, TimeUnit.SECONDS); + MacSpacesUtil.switchToPreviousSpace(); + if (!frame1.isFocused()) { + throw new RuntimeException("Unexpected state"); + } + } finally { + SwingUtilities.invokeAndWait(FullScreenChildWindow::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("FullScreenChildWindow(1)"); + frame1.setSize(100, 100); + frame1.setLocation(100, 100); + frame1.setVisible(true); + + frame2 = new JFrame("FullScreenChildWindow(2)"); + button = new JButton("Open dialog"); + button.addActionListener(e -> { + JDialog d = new JDialog(frame2, "dialog", false); + d.setSize(100, 100); + d.setLocationRelativeTo(null); + d.setAutoRequestFocus(false); + d.addWindowListener(new WindowAdapter() { + @Override + public void windowOpened(WindowEvent e) { + dialogShown.complete(true); + } + }); + d.setVisible(true); + }); + frame2.add(button); + frame2.setSize(100, 100); + frame2.setLocation(100, 300); + frame2.setVisible(true); + FullScreenUtilities.addFullScreenListenerTo(frame2, new FullScreenAdapter() { + @Override + public void windowEnteredFullScreen(FullScreenEvent e) { + shownAtFullScreen.complete(true); + } + }); + Application.getApplication().requestToggleFullScreen(frame2); + } + + private static void disposeUI() { + if (frame2 != null) frame2.dispose(); + if (frame1 != null) frame1.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickAt(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Window/FullScreenChildWindowShownBefore.java b/test/jdk/jb/java/awt/Window/FullScreenChildWindowShownBefore.java new file mode 100644 index 000000000000..a3b4156c8298 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/FullScreenChildWindowShownBefore.java @@ -0,0 +1,78 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.apple.eawt.Application; + +import java.awt.Window; +import javax.swing.*; + +/** + * @test + * @summary Regression test for JBR-3666 Child window stays on default space + * when full-screen mode is activated for parent window on macOS + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/com.apple.eawt + * @compile MacSpacesUtil.java + * @run main FullScreenChildWindowShownBefore + */ + +public class FullScreenChildWindowShownBefore { + private static JFrame frame; + private static JDialog dialog; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(FullScreenChildWindowShownBefore::initUI); + Thread.sleep(1000); // wait for windows to appear + SwingUtilities.invokeAndWait(() -> Application.getApplication().requestToggleFullScreen(frame)); + Thread.sleep(1000); // wait for transition to full screen to finish + ensureVisible(frame, 250, 150); + ensureVisible(dialog, 250, 250); + SwingUtilities.invokeAndWait(() -> Application.getApplication().requestToggleFullScreen(frame)); + Thread.sleep(1000); // wait for transition from full screen to finish + ensureVisible(frame, 250, 150); + ensureVisible(dialog, 250, 250); + } finally { + SwingUtilities.invokeAndWait(FullScreenChildWindowShownBefore::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("FullScreenChildWindowShownBefore"); + frame.setBounds(100, 100, 300, 300); + frame.setVisible(true); + + dialog = new JDialog(frame, false); + dialog.setBounds(200, 200, 100, 100); + dialog.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void ensureVisible(Window window, int x, int y) throws Exception { + if (!MacSpacesUtil.isWindowVisibleAtPoint(window, x, y)) throw new RuntimeException(window + " isn't visible"); + } +} diff --git a/test/jdk/jb/java/awt/Window/FullScreenInactiveDialog.java b/test/jdk/jb/java/awt/Window/FullScreenInactiveDialog.java new file mode 100644 index 000000000000..54108f68b242 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/FullScreenInactiveDialog.java @@ -0,0 +1,100 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.apple.eawt.Application; +import com.apple.eawt.FullScreenAdapter; +import com.apple.eawt.FullScreenUtilities; +import com.apple.eawt.event.FullScreenEvent; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * @test + * @summary Regression test for JBR-3633 Modal dialog is shown not at the same space as its parent + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/com.apple.eawt + * java.desktop/com.apple.eawt.event + * @compile MacSpacesUtil.java + * @run main FullScreenInactiveDialog + */ + +public class FullScreenInactiveDialog { + private static final CompletableFuture shownAtFullScreen = new CompletableFuture<>(); + + private static JFrame frame; + private static JDialog dialog; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(FullScreenInactiveDialog::initUI); + shownAtFullScreen.get(5, TimeUnit.SECONDS); + MacSpacesUtil.switchToPreviousSpace(); + SwingUtilities.invokeLater(FullScreenInactiveDialog::openDialog); + Thread.sleep(1000); + if (MacSpacesUtil.isWindowVisible(dialog)) { + throw new RuntimeException("Dialog is showing earlier than expected"); + } + Desktop.getDesktop().requestForeground(false); // simulates clicking on app icon in dock or switch using Cmd+Tab + Thread.sleep(1000); // wait for animation to finish + if (!MacSpacesUtil.isWindowVisible(dialog)) { + throw new RuntimeException("Dialog isn't showing when expected"); + } + if (!MacSpacesUtil.isWindowVisible(frame)) { + throw new RuntimeException("Frame isn't showing when expected"); + } + } finally { + SwingUtilities.invokeAndWait(FullScreenInactiveDialog::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("FullScreenInactiveDialog"); + frame.setSize(300, 100); + frame.setVisible(true); + + + FullScreenUtilities.addFullScreenListenerTo(frame, new FullScreenAdapter() { + @Override + public void windowEnteredFullScreen(FullScreenEvent e) { + shownAtFullScreen.complete(true); + } + }); + Application.getApplication().requestToggleFullScreen(frame); + } + + private static void openDialog() { + dialog = new JDialog(frame); + dialog.setSize(100, 100); + dialog.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } +} diff --git a/test/jdk/jb/java/awt/Window/FullScreenInactiveModalDialog.java b/test/jdk/jb/java/awt/Window/FullScreenInactiveModalDialog.java new file mode 100644 index 000000000000..471a7bdbfa0b --- /dev/null +++ b/test/jdk/jb/java/awt/Window/FullScreenInactiveModalDialog.java @@ -0,0 +1,96 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.apple.eawt.Application; +import com.apple.eawt.FullScreenAdapter; +import com.apple.eawt.FullScreenUtilities; +import com.apple.eawt.event.FullScreenEvent; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * @test + * @summary Regression test for JBR-3633 Modal dialog is shown not at the same space as its parent + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/com.apple.eawt + * java.desktop/com.apple.eawt.event + * @compile MacSpacesUtil.java + * @run main FullScreenInactiveModalDialog + */ + +public class FullScreenInactiveModalDialog { + private static final CompletableFuture shownAtFullScreen = new CompletableFuture<>(); + + private static JFrame frame; + private static JDialog dialog; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(FullScreenInactiveModalDialog::initUI); + shownAtFullScreen.get(5, TimeUnit.SECONDS); + MacSpacesUtil.switchToPreviousSpace(); + SwingUtilities.invokeLater(FullScreenInactiveModalDialog::openDialog); + Thread.sleep(1000); + if (MacSpacesUtil.isWindowVisible(dialog)) { + throw new RuntimeException("Dialog is showing earlier than expected"); + } + MacSpacesUtil.switchToNextSpace(); + if (!MacSpacesUtil.isWindowVisible(dialog)) { + throw new RuntimeException("Dialog isn't showing when expected"); + } + } finally { + SwingUtilities.invokeAndWait(FullScreenInactiveModalDialog::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("FullScreenInactiveModalDialog"); + frame.setSize(300, 100); + frame.setVisible(true); + + + FullScreenUtilities.addFullScreenListenerTo(frame, new FullScreenAdapter() { + @Override + public void windowEnteredFullScreen(FullScreenEvent e) { + shownAtFullScreen.complete(true); + } + }); + Application.getApplication().requestToggleFullScreen(frame); + } + + private static void openDialog() { + dialog = new JDialog(frame, true); + dialog.setSize(100, 100); + dialog.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } +} diff --git a/test/jdk/jb/java/awt/Window/FullScreenTwoFrames.java b/test/jdk/jb/java/awt/Window/FullScreenTwoFrames.java new file mode 100644 index 000000000000..d4b5e98660a3 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/FullScreenTwoFrames.java @@ -0,0 +1,97 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.apple.eawt.Application; +import com.apple.eawt.FullScreenAdapter; +import com.apple.eawt.FullScreenUtilities; +import com.apple.eawt.event.FullScreenEvent; + +import javax.swing.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3706 Toggling full screen mode for two frames doesn't work on macOS + * if invoked without delay + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/com.apple.eawt + * java.desktop/com.apple.eawt.event + */ + +public class FullScreenTwoFrames { + private static final CompletableFuture frame2Shown = new CompletableFuture<>(); + private static final CompletableFuture frame1AtFullScreen = new CompletableFuture<>(); + private static final CompletableFuture frame2AtFullScreen = new CompletableFuture<>(); + private static JFrame frame1; + private static JFrame frame2; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(FullScreenTwoFrames::initUI); + frame2Shown.get(5, TimeUnit.SECONDS); + Application.getApplication().requestToggleFullScreen(frame1); + Application.getApplication().requestToggleFullScreen(frame2); + frame1AtFullScreen.get(5, TimeUnit.SECONDS); + frame2AtFullScreen.get(5, TimeUnit.SECONDS); + } + finally { + SwingUtilities.invokeAndWait(FullScreenTwoFrames::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("FullScreenTwoFrames(1)"); + frame1.setBounds(100, 100, 200, 200); + FullScreenUtilities.addFullScreenListenerTo(frame1, new FullScreenAdapter() { + @Override + public void windowEnteredFullScreen(FullScreenEvent e) { + frame1AtFullScreen.complete(true); + } + }); + frame1.setVisible(true); + frame2 = new JFrame("FullScreenTwoFrames(2)"); + frame2.setBounds(100, 400, 200, 200); + frame2.addWindowListener(new WindowAdapter() { + @Override + public void windowOpened(WindowEvent e) { + frame2Shown.complete(true); + } + }); + FullScreenUtilities.addFullScreenListenerTo(frame2, new FullScreenAdapter() { + @Override + public void windowEnteredFullScreen(FullScreenEvent e) { + frame2AtFullScreen.complete(true); + } + }); + frame2.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } +} diff --git a/test/jdk/jb/java/awt/Window/MacNativeTransparentTitlebarWithCustomHeight.java b/test/jdk/jb/java/awt/Window/MacNativeTransparentTitlebarWithCustomHeight.java new file mode 100644 index 000000000000..1f1e00aaac5d --- /dev/null +++ b/test/jdk/jb/java/awt/Window/MacNativeTransparentTitlebarWithCustomHeight.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @key headful + * @summary [macosx] transparent titlebar with custom height test + * @author Grigorii Kargin + * @run main MacNativeTransparentTitleBarWithCustomHeight + * @requires (os.family == "mac") + */ + +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.lang.reflect.InvocationTargetException; +import javax.swing.*; + +public class MacNativeTransparentTitleBarWithCustomHeight +{ + private static final int TD = 10; + private static final Color darkSystemGray4 = new Color(58, 58, 60); + private static final Color lightSystemGray6 = new Color(242, 242, 247); + static MacNativeTransparentTitleBarWithCustomHeight theTest; + private Robot robot; + private JFrame frame; + private JRootPane rootPane; + + private int DELAY = 1000; + + public MacNativeTransparentTitleBarWithCustomHeight() { + try { + robot = new Robot(); + } catch (AWTException ex) { + throw new RuntimeException(ex); + } + } + + public void performTest() { + + runSwing(() -> { + frame = new JFrame(""); + frame.setBounds(100, 100, 300, 150); + rootPane = frame.getRootPane(); + JComponent contentPane = (JComponent) frame.getContentPane(); + JPanel comp = new JPanel(); + contentPane.add(comp); + comp.setBackground(Color.RED); + frame.setVisible(true); + }); + + // check that titlebar is not of background color + for (int px = 140; px < 160; px++) { + for (int py = 5; py < 20; py++) { + Color c = getTestPixel(px, py); + if (validateColor(c, Color.RED)) { + throw new RuntimeException("Test failed. Incorrect color " + c + + "at (" + px + "," + py + ")"); + } + } + } + + robot.delay(DELAY); + runSwing(() -> { + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(42f); + JBR.getWindowDecorations().setCustomTitleBar(frame, titleBar); + }); + robot.delay(DELAY); + + // check that titlebar is of background color + for (int px = 140; px < 160; px++) { + for (int py = 5; py < 20; py++) { + Color c = getTestPixel(px, py); + if (!validateColor(c, Color.RED)) { + throw new RuntimeException("Test failed. Incorrect color " + c + + "at (" + px + "," + py + ")"); + } + } + } + + runSwing(() -> frame.dispose()); + + frame = null; + rootPane = null; + } + + private Color getTestPixel(int x, int y) { + Rectangle bounds = frame.getBounds(); + BufferedImage screenImage = robot.createScreenCapture(bounds); + int rgb = screenImage.getRGB(x, y); + int red = (rgb >> 16) & 0xFF; + int green = (rgb >> 8) & 0xFF; + int blue = rgb & 0xFF; + Color c = new Color(red, green, blue); + return c; + } + + private boolean validateColor(Color c, Color expected) { + return Math.abs(c.getRed() - expected.getRed()) <= TD && + Math.abs(c.getGreen() - expected.getGreen()) <= TD && + Math.abs(c.getBlue() - expected.getBlue()) <= TD; + } + + public void dispose() { + if (frame != null) { + frame.dispose(); + frame = null; + } + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException e) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + public static void main(String[] args) { + if (!System.getProperty("os.name").contains("OS X")) { + System.out.println("This test is for MacOS only. Automatically passed on other platforms."); + return; + } + + try { + runSwing(() -> theTest = new MacNativeTransparentTitleBarWithCustomHeight()); + theTest.performTest(); + } finally { + if (theTest != null) { + runSwing(() -> theTest.dispose()); + } + } + } +} diff --git a/test/jdk/jb/java/awt/Window/MacSpacesUtil.java b/test/jdk/jb/java/awt/Window/MacSpacesUtil.java new file mode 100644 index 000000000000..6d453382443a --- /dev/null +++ b/test/jdk/jb/java/awt/Window/MacSpacesUtil.java @@ -0,0 +1,170 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +public class MacSpacesUtil { + public static boolean hasMoreThanOneSpace() throws Exception { + return Runtime.getRuntime().exec(new String[]{ + "plutil", + "-extract", + "SpacesDisplayConfiguration.Management Data.Monitors.0.Spaces.1", + "json", + "-o", + "-", + System.getProperty("user.home") + "/Library/Preferences/com.apple.spaces.plist" + }).waitFor() == 0; + } + + public static void addSpace() throws Exception { + toggleMissionControl(); + + // press button at top right corner to add a new space + Rectangle screenBounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice() + .getDefaultConfiguration().getBounds(); + int rightX = screenBounds.x + screenBounds.width; + int topY = screenBounds.y; + Robot robot = new Robot(); + robot.setAutoDelay(50); + robot.mouseMove(rightX, topY); + robot.mouseMove(rightX - 5, topY + 5); + robot.mouseMove(rightX - 10, topY + 10); + robot.delay(1000); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(1000); + + toggleMissionControl(); + } + + public static boolean isWindowVisibleAtPoint(Window window, int x, int y) throws Exception { + CountDownLatch movementDetected = new CountDownLatch(1); + MouseMotionListener listener = new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + movementDetected.countDown(); + } + }; + try { + SwingUtilities.invokeAndWait(() -> window.addMouseMotionListener(listener)); + Robot robot = new Robot(); + robot.mouseMove(x, y); + robot.delay(50); + robot.mouseMove(x + 1, y + 1); + return movementDetected.await(1, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(() -> window.removeMouseMotionListener(listener)); + } + } + + public static boolean isWindowVisible(Window window) throws Exception { + Rectangle bounds = window.getBounds(); + Insets insets = window.getInsets(); + bounds.x += insets.left; + bounds.y += insets.top; + bounds.width -= insets.left + insets.right; + bounds.height -= insets.top + insets.bottom; + return isWindowVisibleAtPoint(window, bounds.x + bounds.width / 2, bounds.y + bounds.height / 2); + } + + public static void verifyAdditionalSpaceExists() throws Exception { + AtomicReference frameRef = new AtomicReference<>(); + try { + SwingUtilities.invokeAndWait(() -> { + JFrame f = new JFrame("Spaces check"); + frameRef.set(f); + f.setBounds(100, 100, 200, 200); + f.setVisible(true); + Desktop.getDesktop().requestForeground(true); + }); + + if (!isWindowVisibleAtPoint(frameRef.get(), 200, 200)) { + throw new RuntimeException("Test frame not visible"); + } + + switchToNextSpace(); + + if (isWindowVisibleAtPoint(frameRef.get(), 200, 200)) { + throw new RuntimeException("Extra space isn't available"); + } + } finally { + switchToPreviousSpace(); + SwingUtilities.invokeAndWait(() -> { + JFrame f = frameRef.get(); + if (f != null) f.dispose(); + }); + } + } + + public static void toggleMissionControl() throws Exception { + Robot robot = new Robot(); + robot.setAutoDelay(50); + robot.keyPress(KeyEvent.VK_CONTROL); + robot.keyPress(KeyEvent.VK_UP); + robot.keyRelease(KeyEvent.VK_UP); + robot.keyRelease(KeyEvent.VK_CONTROL); + robot.delay(1000); // wait for animation to finish + } + + public static void switchToPreviousSpace() throws Exception { + Robot robot = new Robot(); + robot.setAutoDelay(50); + robot.keyPress(KeyEvent.VK_CONTROL); + robot.keyPress(KeyEvent.VK_LEFT); + robot.keyRelease(KeyEvent.VK_LEFT); + robot.keyRelease(KeyEvent.VK_CONTROL); + robot.delay(1000); // wait for animation to finish + } + + public static void switchToNextSpace() throws Exception { + Robot robot = new Robot(); + robot.setAutoDelay(50); + robot.keyPress(KeyEvent.VK_CONTROL); + robot.keyPress(KeyEvent.VK_RIGHT); + robot.keyRelease(KeyEvent.VK_RIGHT); + robot.keyRelease(KeyEvent.VK_CONTROL); + robot.delay(1000); // wait for animation to finish + } + + // press Control+Right while holding mouse pressed over window's header + public static void moveWindowToNextSpace(Window window) throws Exception { + Robot robot = new Robot(); + robot.setAutoDelay(50); + Point location = window.getLocationOnScreen(); + robot.mouseMove(location.x + window.getWidth() / 2, location.y + window.getInsets().top / 2); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + switchToNextSpace(); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + public static void ensureMoreThanOneSpaceExists() throws Exception { + if (hasMoreThanOneSpace()) return; + addSpace(); + verifyAdditionalSpaceExists(); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Window/ModalDialogAndPopup.java b/test/jdk/jb/java/awt/Window/ModalDialogAndPopup.java new file mode 100644 index 000000000000..4828d10de82e --- /dev/null +++ b/test/jdk/jb/java/awt/Window/ModalDialogAndPopup.java @@ -0,0 +1,78 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.*; + +/** + * @test + * @summary Regression test for JBR-4957 Modal dialog is hidden by sibling popup on Linux + * @key headful + */ + +public class ModalDialogAndPopup { + private static final CompletableFuture modalDialogButtonClicked = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeLater(ModalDialogAndPopup::initUI); + robot.delay(2000); + clickAt(350, 350); + robot.delay(1000); + clickAt(450, 350); + modalDialogButtonClicked.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(ModalDialogAndPopup::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ModalDialogAndPopup"); + frame.setBounds(200, 200, 500, 300); + frame.setVisible(true); + JWindow w = new JWindow(frame); + w.setBounds(300, 250, 200, 200); + w.setVisible(true); + JDialog d = new JDialog(frame, true); + JButton b = new JButton("button"); + b.addActionListener(e -> modalDialogButtonClicked.complete(true)); + d.add(b); + d.setBounds(400, 250, 200, 200); + d.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } +} diff --git a/test/jdk/jb/java/awt/Window/ModalDialogMinimizeOnKDE.java b/test/jdk/jb/java/awt/Window/ModalDialogMinimizeOnKDE.java new file mode 100644 index 000000000000..1feb552f22ed --- /dev/null +++ b/test/jdk/jb/java/awt/Window/ModalDialogMinimizeOnKDE.java @@ -0,0 +1,133 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3726 Modal windows 'disappear' on minimize in KDE + * @key headful + * @requires os.family == "linux" + * @modules java.desktop/java.awt:open + * java.desktop/sun.awt + * java.desktop/sun.awt.X11:open + */ + +public class ModalDialogMinimizeOnKDE { + private static final CompletableFuture dialogShown = new CompletableFuture<>(); + private static JFrame frame; + private static JDialog dialog; + + public static void main(String[] args) throws Exception { + if (!isKDE()) { + System.out.println("This test is only valid for KDE"); + return; + } + Robot robot = new Robot(); + try { + SwingUtilities.invokeLater(ModalDialogMinimizeOnKDE::initUI); + dialogShown.get(5, TimeUnit.SECONDS); + robot.delay(1000); + minimize(dialog); + robot.delay(1000); + if (frame.getState() != Frame.ICONIFIED) { + throw new RuntimeException("Parent frame isn't minimized"); + } + } finally { + SwingUtilities.invokeAndWait(ModalDialogMinimizeOnKDE::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ModalDialogMinimizeOnKDE"); + frame.setSize(300, 200); + frame.setVisible(true); + dialog = new JDialog(frame, true); + dialog.setSize(200, 100); + dialog.addWindowListener(new WindowAdapter() { + @Override + public void windowOpened(WindowEvent e) { + dialogShown.complete(true); + } + }); + dialog.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static boolean isKDE() throws Exception { + Class xwmCls = Class.forName("sun.awt.X11.XWM"); + + Field kdeField = xwmCls.getDeclaredField("KDE2_WM"); + kdeField.setAccessible(true); + + Method wmidMethod = xwmCls.getDeclaredMethod("getWMID"); + wmidMethod.setAccessible(true); + + return kdeField.get(null).equals(wmidMethod.invoke(null)); + } + + // We need to simulate user minimizing the dialog using button in title bar. + // As we don't know the location of the button (and it can depend on KDE version), + // we'll just use Xlib to minimize the window. + private static void minimize(JDialog dialog) throws Exception { + Class toolkitCls = Class.forName("sun.awt.SunToolkit"); + Method lockMethod = toolkitCls.getDeclaredMethod("awtLock"); + Method unlockMethod = toolkitCls.getDeclaredMethod("awtUnlock"); + + Class xToolkitClass = Class.forName("sun.awt.X11.XToolkit"); + Method displayMethod = xToolkitClass.getDeclaredMethod("getDisplay"); + + Class wrapperClass = Class.forName("sun.awt.X11.XlibWrapper"); + Method iconifyMethod = wrapperClass.getDeclaredMethod("XIconifyWindow", + long.class, long.class, long.class); + iconifyMethod.setAccessible(true); + + Class windowClass = Class.forName("sun.awt.X11.XBaseWindow"); + Method windowMethod = windowClass.getDeclaredMethod("getWindow"); + Method screenMethod = windowClass.getDeclaredMethod("getScreenNumber"); + screenMethod.setAccessible(true); + + Field peerField = Component.class.getDeclaredField("peer"); + peerField.setAccessible(true); + Object peer = peerField.get(dialog); + + lockMethod.invoke(null); + try { + iconifyMethod.invoke(null, + displayMethod.invoke(null), + windowMethod.invoke(peer), + screenMethod.invoke(peer)); + } finally { + unlockMethod.invoke(null); + } + } +} diff --git a/test/jdk/jb/java/awt/Window/NestedDialogHideTest.java b/test/jdk/jb/java/awt/Window/NestedDialogHideTest.java new file mode 100644 index 000000000000..80d8c52cf174 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/NestedDialogHideTest.java @@ -0,0 +1,103 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3072 Deadlock on nested dialog hiding + * @key headful + */ + +public class NestedDialogHideTest { + private static final CompletableFuture dialogHidden = new CompletableFuture<>(); + private static Robot robot; + private static JFrame frame; + private static JButton button1; + private static JButton button2; + private static JButton button3; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(NestedDialogHideTest::initUI); + robot.delay(2000); + clickAt(button1); + robot.delay(2000); + clickAt(button2); + robot.delay(2000); + clickAt(button3); + dialogHidden.get(5, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(NestedDialogHideTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("NestedDialogHideTest"); + button1 = new JButton("Open dialog"); + button1.addActionListener(e -> { + JDialog d = new JDialog(frame, "level 1"); + button2 = new JButton("Open nested dialog"); + button2.addActionListener(ee -> { + JDialog d2 = new JDialog(d, "level 2"); + button3 = new JButton("Hide"); + button3.addActionListener(eee -> d.setVisible(false)); + d2.add(button3); + d2.setBounds(240, 240, 200, 200); + d2.setVisible(true); + }); + d.add(button2); + d.setBounds(220, 220, 200, 200); + d.setVisible(true); + d.addComponentListener(new ComponentAdapter() { + @Override + public void componentHidden(ComponentEvent e) { + dialogHidden.complete(true); + } + }); + }); + frame.add(button1); + frame.setBounds(200, 200, 200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickAt(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Window/ParentMovingToAnotherSpace.java b/test/jdk/jb/java/awt/Window/ParentMovingToAnotherSpace.java new file mode 100644 index 000000000000..4bf5c017ace3 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/ParentMovingToAnotherSpace.java @@ -0,0 +1,81 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * @test + * @summary Regression test for JBR-4186 Unexpected desktop switch after moving a window to another desktop + * @key headful + * @requires (os.family == "mac") + * @compile MacSpacesUtil.java + * @run main ParentMovingToAnotherSpace + */ + +public class ParentMovingToAnotherSpace { + private static JFrame frame1; + private static JFrame frame2; + + public static void main(String[] args) throws Exception { + MacSpacesUtil.ensureMoreThanOneSpaceExists(); + try { + SwingUtilities.invokeAndWait(ParentMovingToAnotherSpace::initUI); + Thread.sleep(1000); // wait for windows to appear + MacSpacesUtil.moveWindowToNextSpace(frame2); + if (MacSpacesUtil.isWindowVisible(frame1)) { + throw new RuntimeException("Space switch didn't work"); + } + if (!MacSpacesUtil.isWindowVisible(frame2)) { + throw new RuntimeException("Frame isn't showing when expected"); + } + } finally { + MacSpacesUtil.switchToPreviousSpace(); + SwingUtilities.invokeAndWait(ParentMovingToAnotherSpace::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("ParentMovingToAnotherSpace-1"); + frame1.setBounds(100, 100, 300, 100); + frame1.setVisible(true); + + frame2 = new JFrame("ParentMovingToAnotherSpace-2"); + frame2.setBounds(100, 300, 300, 100); + frame2.setVisible(true); + + JWindow window = new JWindow(frame2); + window.setBounds(100, 500, 300, 100); + window.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } +} diff --git a/test/jdk/jb/java/awt/Window/PopupSizeOnOpeningTest.java b/test/jdk/jb/java/awt/Window/PopupSizeOnOpeningTest.java new file mode 100644 index 000000000000..106961055906 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/PopupSizeOnOpeningTest.java @@ -0,0 +1,103 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + +/** + * @test + * @summary Regression test for JBR-3024 Popups are shown with 1x1 size sometimes + * @key headful + */ + +public class PopupSizeOnOpeningTest { + private static Robot robot; + private static JFrame frame; + private static JLabel clickPlace; + private static JWindow popup; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(PopupSizeOnOpeningTest::initUI); + robot.delay(3000); + clickAt(clickPlace); // make sure frame is focused + + for (int i = 0; i < 10; i++) { + robot.delay(1000); + pressAndReleaseSpace(); // open popup + robot.delay(1000); + Dimension size = popup.getSize(); + if (size.width <= 1 || size.height <= 1) { + throw new RuntimeException("Unexpected popup size: " + size); + } + pressAndReleaseSpace(); // close popup + } + } finally { + SwingUtilities.invokeAndWait(PopupSizeOnOpeningTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("PopupSizeOnOpeningTest"); + frame.setLayout(new FlowLayout()); + frame.add(clickPlace = new JLabel("Click here")); + JButton openButton = new JButton("Open popup"); + openButton.addActionListener(e -> { + popup = new JWindow(frame); + JButton closeButton = new JButton("Close popup"); + closeButton.addActionListener(ev -> { + popup.dispose(); + popup = null; + }); + popup.add(closeButton); + popup.pack(); + popup.setLocationRelativeTo(frame); + popup.setVisible(true); + }); + frame.add(openButton); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void pressAndReleaseSpace() { + robot.keyPress(KeyEvent.VK_SPACE); + robot.keyRelease(KeyEvent.VK_SPACE); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickAt(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Window/RestoreFromFullScreen.java b/test/jdk/jb/java/awt/Window/RestoreFromFullScreen.java new file mode 100644 index 000000000000..d12004f410ef --- /dev/null +++ b/test/jdk/jb/java/awt/Window/RestoreFromFullScreen.java @@ -0,0 +1,71 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import javax.swing.*; + +/** + * @test + * @summary Regression test for JBR-5189 Can't exit fullscreen mode on ubuntu 22.10 + * @key headful + */ + +public class RestoreFromFullScreen { + private static final int INITIAL_WIDTH = 400; + private static final int INITIAL_HEIGHT = 300; + + private static JFrame frame; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(RestoreFromFullScreen::initUI); + Thread.sleep(1000); + SwingUtilities.invokeAndWait(() -> frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(frame)); + Thread.sleep(1000); + SwingUtilities.invokeAndWait(() -> { + if (frame.getWidth() <= INITIAL_WIDTH || frame.getHeight() <= INITIAL_HEIGHT) { + throw new RuntimeException("Full screen transition hasn't happened"); + } + frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(null); + }); + Thread.sleep(1000); + SwingUtilities.invokeAndWait(() -> { + if (frame.getWidth() != INITIAL_WIDTH || frame.getHeight() != INITIAL_HEIGHT) { + throw new RuntimeException("Restoring of the original size hasn't happened"); + } + }); + } finally { + SwingUtilities.invokeAndWait(RestoreFromFullScreen::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("RestoreFromFullScreen"); + frame.setBounds(200, 200, INITIAL_WIDTH, INITIAL_HEIGHT); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } +} diff --git a/test/jdk/jb/java/awt/Window/SiblingOrderTest.java b/test/jdk/jb/java/awt/Window/SiblingOrderTest.java new file mode 100644 index 000000000000..89b8426e1250 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/SiblingOrderTest.java @@ -0,0 +1,87 @@ +/* + * Copyright 2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-3353 Sibling popup window is shown below dialog on macOS + * @key headful + */ + +public class SiblingOrderTest { + private static Robot robot; + private static JFrame frame; + private static final CompletableFuture popupButtonPressed = new CompletableFuture<>(); + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(SiblingOrderTest::initUI); + click(); // button in frame + click(); // button in dialog + click(); // button in popup + popupButtonPressed.get(3, TimeUnit.SECONDS); + } finally { + SwingUtilities.invokeAndWait(SiblingOrderTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("SiblingOrderTest"); + JButton b = new JButton("Dialog"); + b.addActionListener(e -> { + JDialog d = new JDialog(frame, "Dialog"); + JButton b1 = new JButton("Popup"); + b1.addActionListener(e1 -> { + JWindow w = new JWindow(frame); + JButton b2 = new JButton("Finish"); + b2.addActionListener(e2 -> popupButtonPressed.complete(true)); + w.add(b2); + w.setBounds(150, 150, 100, 100); + w.setVisible(true); + }); + d.add(b1); + d.setBounds(100, 100, 200, 200); + d.setVisible(true); + }); + frame.add(b); + frame.setBounds(50, 50, 300, 300); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void click() { + robot.delay(1000); + robot.mouseMove(200, 200); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Window/TwoFramesAndDialogOnDifferentSpaces.java b/test/jdk/jb/java/awt/Window/TwoFramesAndDialogOnDifferentSpaces.java new file mode 100644 index 000000000000..83e05d089baf --- /dev/null +++ b/test/jdk/jb/java/awt/Window/TwoFramesAndDialogOnDifferentSpaces.java @@ -0,0 +1,110 @@ +/* + * Copyright 2000-2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * @test + * @summary Specific case for JBR-4186 Unexpected desktop switch after moving a window to another desktop + * @key headful + * @requires (os.family == "mac") + * @compile MacSpacesUtil.java + * @run main TwoFramesAndDialogOnDifferentSpaces + */ + +public class TwoFramesAndDialogOnDifferentSpaces { + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static JDialog dialog; + + public static void main(String[] args) throws Exception { + MacSpacesUtil.ensureMoreThanOneSpaceExists(); + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(TwoFramesAndDialogOnDifferentSpaces::initUI); + robot.delay(1000); + ensureVisibility(true, true, true); + MacSpacesUtil.moveWindowToNextSpace(frame1); + ensureVisibility(true, false, false); + MacSpacesUtil.switchToPreviousSpace(); + ensureVisibility(false, true, true); + clickOn(frame2); + robot.delay(1000); + MacSpacesUtil.switchToNextSpace(); + ensureVisibility(true, false, false); + } finally { + MacSpacesUtil.switchToPreviousSpace(); + SwingUtilities.invokeAndWait(TwoFramesAndDialogOnDifferentSpaces::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("TFADODS-1"); + frame1.setBounds(200, 200, 300, 100); + frame1.setVisible(true); + + frame2 = new JFrame("TFADODS-2"); + frame2.setBounds(200, 400, 300, 100); + frame2.setVisible(true); + + dialog = new JDialog(frame2, "TFADODS"); + dialog.setBounds(200, 600, 300, 100); + dialog.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + } + + private static void ensureVisibility(boolean frame1Visible, boolean frame2Visible, boolean dialogVisible) + throws Exception { + if (frame1Visible != MacSpacesUtil.isWindowVisible(frame1)) { + throw new RuntimeException("Frame 1 is " + (frame1Visible ? "not " : "") + " visible"); + } + if (frame2Visible != MacSpacesUtil.isWindowVisible(frame2)) { + throw new RuntimeException("Frame 2 is " + (frame2Visible ? "not " : "") + " visible"); + } + if (dialogVisible != MacSpacesUtil.isWindowVisible(dialog)) { + throw new RuntimeException("Dialog is " + (dialogVisible ? "not " : "") + " visible"); + } + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickOn(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} diff --git a/test/jdk/jb/java/awt/Window/UndecoratedDialogInTransientsChain.java b/test/jdk/jb/java/awt/Window/UndecoratedDialogInTransientsChain.java new file mode 100644 index 000000000000..07f1bad301ad --- /dev/null +++ b/test/jdk/jb/java/awt/Window/UndecoratedDialogInTransientsChain.java @@ -0,0 +1,86 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + +/** + * @test + * @summary Regression test for JBR-5458 Exception at dialog closing + * @key headful + */ + +public class UndecoratedDialogInTransientsChain { + private static Robot robot; + private static JFrame frame; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeLater(UndecoratedDialogInTransientsChain::initUI); + robot.delay(1000); + clickAtCenter(); + robot.delay(2000); + clickAtCenter(); + robot.delay(1000); + if (frame.isDisplayable()) { + throw new IllegalStateException("Frame should have been closed"); + } + } finally { + SwingUtilities.invokeAndWait(UndecoratedDialogInTransientsChain::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("UndecoratedDialogInTransientsChain"); + JButton b1 = new JButton("Close"); + b1.addActionListener(e -> frame.dispose()); + frame.add(b1); + frame.setBounds(200, 200, 400, 400); + frame.setVisible(true); + JDialog d = new JDialog(frame, "Dialog", true); + JButton b2 = new JButton("Close"); + b2.addActionListener(e -> { + JDialog d2 = new JDialog(frame); + d2.setUndecorated(true); + d2.setVisible(true); + robot.delay(1000); // wait for the window to be realized natively + d2.dispose(); + d.dispose(); + }); + d.add(b2); + d.setBounds(300, 300, 200, 200); + d.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAtCenter() { + robot.mouseMove(400, 400); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } +} diff --git a/test/jdk/jb/java/awt/Window/WindowEventsOnPopupShowing.java b/test/jdk/jb/java/awt/Window/WindowEventsOnPopupShowing.java new file mode 100644 index 000000000000..a2bad592f485 --- /dev/null +++ b/test/jdk/jb/java/awt/Window/WindowEventsOnPopupShowing.java @@ -0,0 +1,109 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @test + * @summary Regression test for JBR-3676 WINDOW_ACTIVATED/DEACTIVATED events + * sent to a frame when child window closes on macOS + * @key headful + */ + +public class WindowEventsOnPopupShowing { + private static final AtomicInteger events = new AtomicInteger(); + private static Robot robot; + private static JFrame frame; + private static JButton openButton; + private static JButton closeButton; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeAndWait(WindowEventsOnPopupShowing::initUI); + robot.delay(1000); // wait for frame to be shown + events.set(0); + clickAt(openButton); + robot.delay(1000); // wait for popup to be shown + clickAt(closeButton); + robot.delay(1000); // wait for popup to be closed + int eventCount = events.get(); + if (eventCount != 0) { + throw new RuntimeException("Unexpected events received: " + eventCount); + } + } + finally { + SwingUtilities.invokeAndWait(WindowEventsOnPopupShowing::disposeUI); + } + } + + private static void initUI() { + openButton = new JButton("Open popup"); + closeButton = new JButton("Close"); + + frame = new JFrame("WindowEventsOnPopupShowing"); + frame.add(openButton); + frame.pack(); + + JWindow popup = new JWindow(frame); + popup.add(closeButton); + popup.pack(); + + openButton.addActionListener(e -> popup.setVisible(true)); + closeButton.addActionListener(e -> popup.dispose()); + + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowActivated(WindowEvent e) { + events.incrementAndGet(); + } + + @Override + public void windowDeactivated(WindowEvent e) { + events.incrementAndGet(); + } + }); + + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } + + private static void clickAt(Component component) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/Window/WindowInitialPosition.java b/test/jdk/jb/java/awt/Window/WindowInitialPosition.java new file mode 100644 index 000000000000..ba1504592f5b --- /dev/null +++ b/test/jdk/jb/java/awt/Window/WindowInitialPosition.java @@ -0,0 +1,70 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; + +/** + * @test + * @summary Regression test for JBR-5095 Incorrect initial window's location under GNOME + * @key headful + */ + +public class WindowInitialPosition { + private static JFrame frame; + private static Point location; + private static Point locationOnScreen; + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(WindowInitialPosition::initUI); + Thread.sleep(1000); + SwingUtilities.invokeAndWait(WindowInitialPosition::fetchLocation); + Point expectedLocation = new Point(200, 200); + if (!expectedLocation.equals(location)) { + throw new RuntimeException("Frame reports unexpected location: " + location); + } + if (!expectedLocation.equals(locationOnScreen)) { + throw new RuntimeException("Frame reports unexpected locationOnScreen: " + locationOnScreen); + } + } + finally { + SwingUtilities.invokeAndWait(WindowInitialPosition::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("WindowInitialPosition"); + frame.setBounds(200, 200, 200, 200); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void fetchLocation() { + location = frame.getLocation(); + locationOnScreen = frame.getLocationOnScreen(); + } +} diff --git a/test/jdk/jb/java/awt/Window/ZOrderOnModalDialogActivation.java b/test/jdk/jb/java/awt/Window/ZOrderOnModalDialogActivation.java new file mode 100644 index 000000000000..6c08e2ca939b --- /dev/null +++ b/test/jdk/jb/java/awt/Window/ZOrderOnModalDialogActivation.java @@ -0,0 +1,142 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-4463 Activating app-modal dialog brings all app windows to front + * @key headful + */ + +public class ZOrderOnModalDialogActivation { + static final int EXPECTED_EXIT_CODE = 123; + + private static Robot robot; + private static JFrame frame1; + private static JFrame frame2; + private static Process otherProcess; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + try { + SwingUtilities.invokeLater(ZOrderOnModalDialogActivation::initUI); + robot.delay(1000); + launchOtherProcess(); + robot.delay(1000); + clickAt(350, 500); // Button 2 - make sure other process' window is activated + robot.delay(1000); + clickAt(200, 200); // modal dialog + robot.delay(1000); + clickAt(250, 500); // Button 1 (assuming other process' window is still shown above) + if (!otherProcess.waitFor(5, TimeUnit.SECONDS)) { + throw new RuntimeException("Child process hasn't exited"); + } + if (otherProcess.exitValue() != EXPECTED_EXIT_CODE) { + throw new RuntimeException("Unexpected exit code: " + otherProcess.exitValue()); + } + } finally { + SwingUtilities.invokeAndWait(ZOrderOnModalDialogActivation::disposeUI); + } + } + + private static void initUI() { + frame1 = new JFrame("ZOOMDA 1"); + frame1.setBounds(100, 100, 200, 200); + frame1.setVisible(true); + frame2 = new JFrame("ZOOMDA 2"); + frame2.setBounds(100, 400, 200, 200); + frame2.setVisible(true); + JDialog d = new JDialog(frame1, "ZOOMDA 3", true); + d.setBounds(150, 150, 100, 100); + d.setVisible(true); + } + + private static void disposeUI() { + if (frame1 != null) frame1.dispose(); + if (frame2 != null) frame2.dispose(); + if (otherProcess != null) otherProcess.destroyForcibly(); + } + + private static void launchOtherProcess() throws Exception { + List params = new ArrayList<>(); + params.add(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"); + + final double uiScale = getUIScale(); + if (uiScale > 1.0) { + params.add("-Dsun.java2d.uiScale.enabled=true"); + params.add("-Dsun.java2d.uiScale=" + uiScale); + } + + params.add("-cp"); + params.add(System.getProperty("java.class.path")); + params.add("ZOrderOnModalDialogActivationChild"); + + otherProcess = Runtime.getRuntime().exec(params.toArray(String[]::new)); + if (otherProcess.getInputStream().read() == -1) { + throw new RuntimeException("Error starting process"); + } + } + + private static double getUIScale() { + boolean scaleEnabled = "true".equals(System.getProperty("sun.java2d.uiScale.enabled")); + double uiScale = 1.0; + if (scaleEnabled) { + uiScale = Float.parseFloat(System.getProperty("sun.java2d.uiScale")); + } + return uiScale; + } + + private static void clickAt(int x, int y) { + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + } +} + +class ZOrderOnModalDialogActivationChild { + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + JFrame f = new JFrame("ZOOMDAC"); + f.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + System.out.println(); + } + }); + f.setLayout(new BorderLayout()); + JButton button1 = new JButton("Button 1"); + button1.addActionListener(e -> System.exit(ZOrderOnModalDialogActivation.EXPECTED_EXIT_CODE)); + f.add(button1, BorderLayout.WEST); + f.add(new JButton("Button 2"), BorderLayout.EAST); + f.setBounds(200, 450, 200, 100); + f.setVisible(true); + }); + } +} diff --git a/test/jdk/jb/java/awt/dnd/DnDScalingWithHIDPI/DnDScalingWithHIDPITest.java b/test/jdk/jb/java/awt/dnd/DnDScalingWithHIDPI/DnDScalingWithHIDPITest.java new file mode 100644 index 000000000000..6451a6ccdda7 --- /dev/null +++ b/test/jdk/jb/java/awt/dnd/DnDScalingWithHIDPI/DnDScalingWithHIDPITest.java @@ -0,0 +1,459 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.dnd.*; +import java.awt.event.InputEvent; +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JBR-1414. DnD on linux (XToolkit) does not honor HIDPI scale + * @requires (os.family == "linux") & (jdk.version.major >= 11) + * @author mikhail.grishch@gmail.com + * @run main/othervm -Dsun.java2d.uiScale=2 DnDScalingWithHIDPITest 1 + * @run main/othervm -Dsun.java2d.uiScale=1 DnDScalingWithHIDPITest 2 + * @run main/othervm -Dsun.java2d.uiScale.enabled=false DnDScalingWithHIDPITest DISABLE_SCALING + * @run main/othervm/fail -Dsun.java2d.uiScale=2.5 -Dsun.java2d.uiScale.enabled=true DnDScalingWithHIDPITest 0.5 + * @comment remove /fail option when JBR-1365 will be fixed. + */ + +/** + * Description + * Dnd works incorrect in the case if Source and Target components have different HiDPI scaling. + * Scaling is controlled by jvm option (-Dsun.java2d.uiScale) instead of GDK_SCALE env var. + * + * Test creates frame with transferable panel. + * Then it executes another process (DropTargetRunner) which creates frame with Target panel. + * Scaling of Target Frame is also controlled by jvm option (-Dsun.java2d.uiScale) which is got from + * cmd argument of parent process: + * * DISABLE_SCALING - disable scaling (set -Dsun.java2d.uiScale.enabled=false) + * * another value (except 0) - scaling factor for Target Frame + * Test checks correctness of the dragExit, dragEnter, dragOver and drop actions. + * Test runs 4 times with various configurations of source and target scaling. + */ + +public class DnDScalingWithHIDPITest { + //Timeout of child process must be smaller than timeout of test (default - 120s) + private static final int CHILD_PROCESS_TIMEOUT = 60; + /** + * @param args + * arg[0] - scaling factor of DropTargetFrame (must be set!) + * * DISABLE_SCALING - disable scaling (set -Dsun.java2d.uiScale.enabled=false) + * * another value (except 0) - scaling factor for Target Frame + */ + public static void main(String[] args) throws Exception { + DragSourceFrame sourceFrame = new DragSourceFrame("DRAG"); + Process process = null; + boolean processExit = false; + try { + var r = new Robot(); + SwingUtilities.invokeAndWait(sourceFrame::initUI); + r.waitForIdle(); + + String sourceScaleStr = System.getProperty("sun.java2d.uiScale"); + float sourceScale = 1; + if ("false".equals(System.getProperty("sun.java2d.uiScale.enabled"))) { + System.out.println("Scaling disabled on DRAG Frame (-Dsun.java2d.uiScale.enabled=false)"); + } else if(sourceScaleStr == null) { + throw new RuntimeException("Error: Property sun.java2d.uiScale did not set"); + } else { + sourceScale = Float.parseFloat(sourceScaleStr); + } + + String vmScalingOption; + float targetScale = 1; + if (args.length == 0) { + throw new RuntimeException("Error: Program argument did not set (Scaling value for DROP Frame can not be specified)."); + } else if ("DISABLE_SCALING".equals(args[0])) { + System.out.println("Scaling disabled on DROP Frame (-Dsun.java2d.uiScale.enabled=false)"); + vmScalingOption = "-Dsun.java2d.uiScale.enabled=false"; + } else { + vmScalingOption = "-Dsun.java2d.uiScale=" + args[0]; + String targetScaleStr = args[0]; + targetScale = "0".equals(targetScaleStr) ? 1 : Float.parseFloat(targetScaleStr); + } + + float scalingFactor = sourceScale / targetScale; + + var processBuilder = new ProcessBuilder( + System.getProperty("java.home") + "/bin/java", + vmScalingOption, + "-cp", + System.getProperty("java.class.path", "."), + "DropTargetRunner", + String.valueOf((int) (sourceFrame.getNextLocationX() * scalingFactor)), + String.valueOf((int) (sourceFrame.getNextLocationY() * scalingFactor)), + String.valueOf((int) (sourceFrame.getDragSourcePointX() * scalingFactor)), + String.valueOf((int) (sourceFrame.getDragSourcePointY() * scalingFactor)) + ); + + System.out.println("Starting DropTargetRunner..."); + processBuilder.command().forEach(s -> System.out.print(s + " ")); + System.out.println("\n"); + + process = processBuilder.start(); + processExit = process.waitFor(CHILD_PROCESS_TIMEOUT, TimeUnit.SECONDS); + + var inContent = new StringBuilder(); + var errContent = new StringBuilder(); + getStreamContent(process.getInputStream(), inContent); + getStreamContent(process.getErrorStream(), errContent); + + System.out.println(inContent.toString()); + + if(!processExit) { + process.destroy(); + processExit = true; + throw new RuntimeException("Error: Timeout. The sub-process hangs."); + } + + String errorContentStr = errContent.toString(); + if (!errorContentStr.isEmpty()) { + throw new RuntimeException(errorContentStr); + } + + } finally { + SwingUtilities.invokeAndWait(sourceFrame::dispose); + Thread.sleep(1000); + if(process != null && !processExit) { + process.destroy(); + } + } + } + + public static void getStreamContent(InputStream in, StringBuilder content) throws IOException { + String tempString; + int count = in.available(); + while (count > 0) { + byte[] b = new byte[count]; + in.read(b); + tempString = new String(b); + content.append(tempString).append("\n"); + count = in.available(); + } + } + +} + +class DragSourceFrame extends JFrame implements DragGestureListener { + private JPanel sourcePanel; + + DragSourceFrame(String frameName) { + super(frameName); + this.setUndecorated(true); + } + + void initUI() { + this.setLocation(0, 0); + JPanel contentPane = new JPanel(null); + contentPane.setPreferredSize(new Dimension(50, 50)); + + sourcePanel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(this.getBackground()); + g2.fillRect(0, 0, 50, 50); + } + }; + sourcePanel.setBounds(0, 0, 50,50); + sourcePanel.setEnabled(true); + sourcePanel.setBackground(Color.white); + + var ds = new DragSource(); + ds.createDefaultDragGestureRecognizer(sourcePanel, + DnDConstants.ACTION_COPY, this); + + contentPane.add(sourcePanel); + this.setContentPane(contentPane); + + this.pack(); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + // returns the X coordinate on which DropTargetFrame will be opened + int getNextLocationX() { + return getX() + getWidth(); + } + + // returns the X coordinate on which DropTargetFrame will be opened + int getNextLocationY() { + return getY(); + } + + //returns the X coordinate to drag Source panel + int getDragSourcePointX() { + return (int) sourcePanel.getLocationOnScreen().getX() + (sourcePanel.getWidth() / 2); + } + + //returns the Y coordinate to drag Source panel + int getDragSourcePointY() { + return (int) sourcePanel.getLocationOnScreen().getY() + (sourcePanel.getHeight() / 2); + } + + @Override + public void dragGestureRecognized(DragGestureEvent event) { + var cursor = Cursor.getDefaultCursor(); + if (event.getDragAction() == DnDConstants.ACTION_COPY) { + cursor = DragSource.DefaultCopyDrop; + } + event.startDrag(cursor, new TransferableElement()); + } +} + +class TransferableElement implements Transferable { + private static final DataFlavor[] supportedFlavors = {DataFlavor.stringFlavor}; + + public TransferableElement() { + } + + public DataFlavor[] getTransferDataFlavors() { + return supportedFlavors; + } + + public boolean isDataFlavorSupported(DataFlavor flavor) { + return flavor.equals(DataFlavor.stringFlavor); + } + + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { + if (flavor.equals(DataFlavor.stringFlavor)) { + return "Transferable text"; + } else { + throw new UnsupportedFlavorException(flavor); + } + } +} + + +class DropTargetRunner { + + /** + * @param args + * arg[0] - the X coordinate of DropTargetFrame + * arg[1] - the Y coordinate of DropTargetFrame + * arg[2] - the X coordinate of source panel which will be dragged + * arg[2] - the Y coordinate of source panel which will be dragged + */ + public static void main(String[] args) throws Exception { + Robot r = new Robot(); + DropTargetFrame targetFrame = new DropTargetFrame("DROP", r); + try { + int dragSourceX = Integer.parseInt(args[2]); + int dragSourceY = Integer.parseInt(args[3]); + var targetFrameLocation = new Point(Integer.parseInt(args[0]), Integer.parseInt(args[1])); + SwingUtilities.invokeAndWait(() -> targetFrame.initUI(targetFrameLocation)); + r.waitForIdle(); + targetFrame.doTest(dragSourceX, dragSourceY); + } catch (Exception e) { + e.printStackTrace(); + } finally { + SwingUtilities.invokeAndWait(targetFrame::dispose); + r.waitForIdle(); + } + } +} + +class DropTargetFrame extends JFrame { + private Robot robot; + private JPanel dtPanel; + private boolean dropWasSuccessful = false; + private boolean dragEnterWasSuccessful = false; + private boolean dragOverWasSuccessful = false; + private boolean dragExitWasSuccessful = false; + + DropTargetFrame(String frameName, Robot r) { + super(frameName); + robot = r; + } + + void initUI(Point frameLocation) { + this.setLocation(frameLocation); + JPanel contentPane = new JPanel(null); + contentPane.setPreferredSize(new Dimension(200,200)); + + dtPanel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(this.getBackground()); + g2.fillRect(0, 0, 100,100); + } + }; + + dtPanel.setBounds(50,50, 100, 100); + dtPanel.setEnabled(true); + dtPanel.setBackground(Color.white); + dtPanel.setDropTarget(new DropTarget(dtPanel, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() { + public void dragOver(DropTargetDragEvent dtde) { + dragOverWasSuccessful = true; + } + public void dragExit(DropTargetEvent dte) { + dragExitWasSuccessful = true; + } + public void dragEnter(DropTargetDragEvent dtde) { + dragEnterWasSuccessful = true; + } + @Override + public void drop(DropTargetDropEvent dtde) { + dropWasSuccessful = true; + } + + }, true)); + + contentPane.add(dtPanel); + this.setContentPane(contentPane); + this.pack(); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + void doTest(int dragSourceX, int dragSourceY) { + int dtPanelX = (int) dtPanel.getLocationOnScreen().getX(); + int dtPanelY = (int) dtPanel.getLocationOnScreen().getY(); + + System.out.print("Check the inner border in the top left corner...\t"); + dragAndDrop(dragSourceX, dragSourceY, dtPanelX, dtPanelY); + checkDragEnter(); + checkDragOver(); + checkNotDragExit(); + checkDropInsidePanel(); + System.out.println("OK"); + + System.out.print("Check the outer border in the top left corner...\t"); + drag(dragSourceX, dragSourceY, dtPanelX, dtPanelY); + mouseMove(dtPanelX, dtPanelY,dtPanelX - 1, dtPanelY - 1); + checkDragExit(); + drop(); + checkDropOutsidePanel(); + System.out.println("OK"); + + System.out.print("Check the inner border in the bottom right corner...\t"); + dragAndDrop(dragSourceX, dragSourceY, dtPanelX + dtPanel.getWidth() - 1, dtPanelY + dtPanel.getHeight() - 1); + checkDragEnter(); + checkDragOver(); + checkNotDragExit(); + checkDropInsidePanel(); + System.out.println("OK"); + + System.out.print("Check the outer border in the bottom right corner...\t"); + drag(dragSourceX, dragSourceY, dtPanelX + dtPanel.getWidth() - 1, dtPanelY + dtPanel.getHeight() - 1); + mouseMove(dtPanelX + dtPanel.getWidth() - 1, dtPanelY + dtPanel.getHeight() - 1, + dtPanelX + dtPanel.getWidth(), dtPanelY + dtPanel.getHeight()); + checkDragExit(); + drop(); + checkDropOutsidePanel(); + System.out.println("OK"); + } + + private void drag(int startX, int startY, int finishX, int finishY) { + robot.mouseMove(startX, startY); + robot.delay(50); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + Point p = MouseInfo.getPointerInfo().getLocation(); + mouseMove(p.x, p.y, finishX, finishY); + robot.delay(500); + } + + private void drop() { + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.delay(500); + } + + private void dragAndDrop(int startX, int startY, int finishX, int finishY) { + drag(startX, startY, finishX, finishY); + drop(); + } + + private void checkDropInsidePanel() { + if (!dropWasSuccessful) { + System.out.println("FAILED"); + throw new RuntimeException("DnD failed: Drop was outside Target panel, but inside is expected"); + } + dropWasSuccessful = false; + } + + private void checkDropOutsidePanel() { + if (dropWasSuccessful) { + System.out.println("FAILED"); + throw new RuntimeException("DnD failed: Drop was inside Target panel, but outside is expected"); + } + } + + private void checkDragExit() { + if (!dragExitWasSuccessful) { + System.out.println("FAILED"); + throw new RuntimeException("DnD failed: Drag exit was expected, but did not happened"); + } + dragExitWasSuccessful = false; + } + + private void checkNotDragExit() { + if (dragExitWasSuccessful) { + System.out.println("FAILED"); + throw new RuntimeException("DnD failed: Unexpected Drag exit"); + } + } + + + private void checkDragEnter() { + if (!dragEnterWasSuccessful) { + System.out.println("FAILED"); + throw new RuntimeException("DnD failed: Drag enter was expected, but did not happened"); + } + dragEnterWasSuccessful = false; + } + + private void checkDragOver() { + if (!dragOverWasSuccessful) { + System.out.println("FAILED"); + throw new RuntimeException("DnD failed: Drag over was expected, but did not happened"); + } + dragOverWasSuccessful = false; + } + + private void mouseMove(int startX, int startY, int finishX, int finishY) { + mouseMove(new Point(startX, startY), new Point(finishX, finishY)); + } + + private void mouseMove(Point start, Point end) { + robot.mouseMove(start.x, start.y); + for (Point p = new Point(start); !p.equals(end); + p.translate(Integer.compare(end.x - p.x, 0), + Integer.compare(end.y - p.y, 0))) { + robot.mouseMove(p.x, p.y); + robot.delay(10); + } + robot.mouseMove(end.x, end.y); + robot.delay(100); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/event/MouseEvent/MouseMoveEventFallThroughTest.java b/test/jdk/jb/java/awt/event/MouseEvent/MouseMoveEventFallThroughTest.java new file mode 100644 index 000000000000..d8f70f2d750a --- /dev/null +++ b/test/jdk/jb/java/awt/event/MouseEvent/MouseMoveEventFallThroughTest.java @@ -0,0 +1,79 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * @test + * @summary Regression test for JBR-2702 Tooltips display through other applications on hover + * @key headful + */ + +public class MouseMoveEventFallThroughTest { + private static JFrame topFrame; + private static JFrame bottomFrame; + private static final AtomicBoolean bottomFrameReceivedMouseMoved = new AtomicBoolean(); + + public static void main(String[] args) throws Exception { + try { + SwingUtilities.invokeAndWait(() -> { + bottomFrame = new JFrame("Bottom frame"); + bottomFrame.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + bottomFrameReceivedMouseMoved.set(true); + } + }); + bottomFrame.setSize(200, 100); + bottomFrame.setLocation(250, 250); + bottomFrame.setVisible(true); + topFrame = new JFrame("Top frame"); + topFrame.setSize(300, 200); + topFrame.setLocation(200, 200); + topFrame.setVisible(true); + }); + Robot robot = new Robot(); + robot.delay(1000); + robot.mouseMove(350, 300); // position mouse cursor over both frames + robot.delay(1000); + SwingUtilities.invokeAndWait(() -> { + bottomFrame.setSize(210, 110); + }); + robot.delay(1000); + robot.mouseMove(351, 301); // move mouse cursor a bit + robot.delay(1000); + if (bottomFrameReceivedMouseMoved.get()) { + throw new RuntimeException("Mouse moved event dispatched to invisible window"); + } + } finally { + SwingUtilities.invokeAndWait(() -> { + if (topFrame != null) topFrame.dispose(); + if (bottomFrame != null) bottomFrame.dispose(); + }); + } + } +} diff --git a/test/jdk/jb/java/awt/event/MouseEvent/ReleaseAndClickModifiers.java b/test/jdk/jb/java/awt/event/MouseEvent/ReleaseAndClickModifiers.java new file mode 100644 index 000000000000..4d8e0c39aba4 --- /dev/null +++ b/test/jdk/jb/java/awt/event/MouseEvent/ReleaseAndClickModifiers.java @@ -0,0 +1,108 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.*; +import java.util.*; +import java.util.List; +import javax.swing.*; + +/** + * @test + * @summary Regression test for JBR-5720 Wrong modifiers are reported for mouse middle and right buttons' release/clicked events + * @key headful + */ + +public class ReleaseAndClickModifiers { + private static final List modifiers = Collections.synchronizedList(new ArrayList<>()); + + private static Robot robot; + private static JFrame frame; + private static JPanel panel; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + SwingUtilities.invokeAndWait(ReleaseAndClickModifiers::initUI); + robot.delay(1000); + clickOn(panel, MouseEvent.BUTTON1); + clickOn(panel, MouseEvent.BUTTON2); + clickOn(panel, MouseEvent.BUTTON3); + robot.delay(1000); + if (!List.of(InputEvent.BUTTON1_DOWN_MASK, 0, 0, + InputEvent.BUTTON2_DOWN_MASK, 0, 0, + InputEvent.BUTTON3_DOWN_MASK, 0, 0) + .equals(modifiers)) { + throw new RuntimeException("Wrong modifiers: " + modifiers); + } + } finally { + SwingUtilities.invokeAndWait(ReleaseAndClickModifiers::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame("ReleaseAndClickModifiers"); + panel = new JPanel(); + panel.setPreferredSize(new Dimension(200, 200)); + panel.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + logModifiers(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + logModifiers(e); + } + + @Override + public void mouseClicked(MouseEvent e) { + logModifiers(e); + } + + private void logModifiers(MouseEvent e) { + modifiers.add(e.getModifiersEx()); + } + }); + frame.add(panel); + frame.pack(); + frame.setVisible(true); + } + + private static void disposeUI() { + if (frame != null) frame.dispose(); + } + + private static void clickAt(int x, int y, int button) { + robot.mouseMove(x, y); + int buttonMask = InputEvent.getMaskForButton(button); + robot.mousePress(buttonMask); + robot.mouseRelease(buttonMask); + } + + private static void clickOn(Component component, int button) { + Point location = component.getLocationOnScreen(); + clickAt(location.x + component.getWidth() / 2, location.y + component.getHeight() / 2, button); + } +} diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/LinuxTouchRobot.java b/test/jdk/jb/java/awt/event/TouchScreenEvent/LinuxTouchRobot.java new file mode 100644 index 000000000000..a335be06a4fc --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/LinuxTouchRobot.java @@ -0,0 +1,52 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.AWTException; +import java.awt.GraphicsDevice; +import java.io.IOException; + +public class LinuxTouchRobot extends TouchRobot { + private LinuxTouchScreenDevice device; + + public LinuxTouchRobot() throws AWTException, IOException { + super(); + device = new LinuxTouchScreenDevice(); + } + + public LinuxTouchRobot(GraphicsDevice screen) throws AWTException, IOException { + super(screen); + device = new LinuxTouchScreenDevice(); + } + + public void touchClick(int fingerId, int x, int y) throws IOException { + device.click(fingerId, x, y); + } + + public void touchMove(int fingerId, int fromX, int fromY, int toX, int toY) throws IOException { + device.move(fingerId, fromX, fromY, toX, toY); + } + + public void closeDevice() throws IOException { + device.close(); + } +} diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/LinuxTouchScreenDevice.java b/test/jdk/jb/java/awt/event/TouchScreenEvent/LinuxTouchScreenDevice.java new file mode 100644 index 000000000000..292920bc1e79 --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/LinuxTouchScreenDevice.java @@ -0,0 +1,90 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Toolkit; +import java.io.Closeable; +import java.io.IOException; + +public class LinuxTouchScreenDevice implements Closeable { + // TODO add product id + private int width; + private int height; + private int fileDescriptor; + + static { + System.loadLibrary("touchscreen_device"); + } + + public LinuxTouchScreenDevice() throws IOException { + this(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height); + } + + public LinuxTouchScreenDevice(int width, int height) throws IOException { + this.width = width; + this.height = height; + fileDescriptor = create(getWidth(), getHeight()); + checkCompletion(fileDescriptor, + "Failed to create virtual touchscreen device"); + } + + @Override + public void close() throws IOException { + checkCompletion(destroy(fileDescriptor), + "Failed to close touchscreen device"); + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public void click(int trackingId, int x, int y) throws IOException { + checkCompletion(clickImpl(fileDescriptor, trackingId, x, y), + "Failed to click on touchscreen device"); + + } + + public void move(int trackingId, int fromX, int fromY, int toX, int toY) throws IOException { + checkCompletion(moveImpl(fileDescriptor, trackingId, fromX, fromY, toX, toY), + "Failed to move on virtual touchscreen device"); + } + + private void checkCompletion(int code, String errorMessage) throws IOException { + if (code < 0) { + throw new IOException(errorMessage); + } + } + + private native int create(int width, int height); + + private native int destroy(int fd); + + private native int clickImpl(int fd, int trackingId, int x, int y); + + private native int moveImpl(int fd, int trackingId, int fromX, int fromY, int toX, int toY); +} + + diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/README.md b/test/jdk/jb/java/awt/event/TouchScreenEvent/README.md new file mode 100644 index 000000000000..d206df6dc402 --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/README.md @@ -0,0 +1,49 @@ +###Tips for compiling test libraries and preparing env for manual test running + + +## Linux +```shell script +# step into the test directory +cd /test/jdk/jb/java/awt/event/TouchScreenEvent + +# complile native lib +gcc -shared -fPIC -I/include/linux -I/include touchscreen_device.c -o libtouchscreen_device.so + +# step into the runtime workspace directory +cd + +# run the test with jtreg +jtreg -v -testjdk: -e:BUPWD= -nativepath:'/test/jdk/jb/java/awt/event/TouchScreenEvent' test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh + +``` + +SUDO_PWD above is the sudo password which is needed to allow current user to work with /dev/uinput: please see [group permissions](https://github.com/tuomasjjrasanen/python-uinput/issues/6#issuecomment-538710069) link. + +## Windows +```shell script +# run cmd and call vcvarsall.bat with the target arch argument +"\vcvarsall.bat" amd64 + +# step into the test directory +cd \test\jdk\jb\java\awt\event\TouchScreenEvent + +# complile native lib +cl -I\include\win32 -I\include -MD -LD windows_touch_robot.c "\user32.lib" -Fewindows_touch_robot.dll + +# step into the runtime workspace directory +cd + +# run bash +bash + +# run the test with jtreg +jtreg -v -testjdk: -nativepath:'/test/jdk/jb/java/awt/event/TouchScreenEvent' test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTest.java + +``` + +vcvarsall.bat above may be found in Microsoft Visual Studio, for example, +"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" + +user32.lib above is needed for WinUser.h (touch injection stuff), +it may be found, for example, in +"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\user32.lib" diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchRobot.java b/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchRobot.java new file mode 100644 index 000000000000..ddf29df0a08c --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchRobot.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.AWTException; +import java.awt.GraphicsDevice; +import java.awt.Robot; +import java.io.IOException; + +public abstract class TouchRobot extends Robot { + public TouchRobot() throws AWTException { + } + + public TouchRobot(GraphicsDevice screen) throws AWTException { + super(screen); + } + + public abstract void touchClick(int fingerId, int x, int y) throws IOException; + + public abstract void touchMove(int fingerId, int fromX, int fromY, int toX, int toY) throws IOException; +} diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTest.java b/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTest.java new file mode 100644 index 000000000000..c1d26644faa0 --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTest.java @@ -0,0 +1,389 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import java.awt.AWTException; +import java.awt.MouseInfo; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; +import java.io.IOException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import sun.awt.event.TouchEvent; + +/** + * @test + * @summary Regression test for JBR-2041: Touchscreen devices support + * @requires (jdk.version.major >= 11) & (os.family == "windows") + * @modules java.desktop/sun.awt.event + * @build WindowsTouchRobot TouchScreenEventsTest + * @run main/othervm/native TouchScreenEventsTest + */ + +public class TouchScreenEventsTest { + + static final int TIMEOUT = 2; + static final int PAUSE = 1000; + + static final int TRACKING_ID = 42; + + static final String OS_NAME = System.getProperty("os.name").toLowerCase(); + + public static void main(String[] args) throws Exception { + if(runTest(new TouchClickSuite()) + & runTest(new TouchMoveSuite()) + & runTest(new TouchTinyMoveSuite()) + & runTest(new TouchAxesScrollSuite(TouchAxesScrollSuite.AXIS.X)) + & runTest(new TouchAxesScrollSuite(TouchAxesScrollSuite.AXIS.Y))) { + System.out.println("TEST PASSED"); + } else { + throw new RuntimeException("TEST FAILED"); + } + } + + private static boolean runTest(TouchTestSuite suite) throws Exception { + TouchRobot robot = getTouchRobot(); + GUI gui = new GUI(); + try { + SwingUtilities.invokeAndWait(gui::createAndShow); + suite.addListener(gui.frame); + robot.waitForIdle(); + Thread.sleep(PAUSE); + suite.perform(gui, robot); + robot.waitForIdle(); + return suite.passed(); + } finally { + if (OS_NAME.contains("linux")) { + // Workaround for JBR-2585 + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + // Close LinuxTouchScreenDevice + ((LinuxTouchRobot) robot).closeDevice(); + } + SwingUtilities.invokeAndWait(() -> { + if (gui.frame != null) { + gui.frame.dispose(); + } + }); + Thread.sleep(PAUSE); + } + } + + private static TouchRobot getTouchRobot() throws IOException, AWTException { + if (OS_NAME.contains("linux")) { + return new LinuxTouchRobot(); + } else if (OS_NAME.contains("windows")) { + return new WindowsTouchRobot(); + } + throw new RuntimeException("Touch robot for this platform isn't implemented"); + } +} + +class GUI { + JFrame frame; + Rectangle frameBounds; + + void createAndShow() { + frame = new JFrame(); + frame.setSize(640, 480); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setAlwaysOnTop(true); + frame.setVisible(true); + frameBounds = frame.getBounds(); + } +} + +interface TouchTestSuite { + + void addListener(JFrame frame); + + void perform(GUI gui, TouchRobot robot) throws IOException; + + boolean passed() throws InterruptedException; + +} + +class TouchClickSuite implements MouseListener, TouchTestSuite { + + private volatile boolean pressed; + private volatile boolean released; + private volatile boolean clicked; + private final CountDownLatch latch = new CountDownLatch(3); + + @Override + public void mouseClicked(MouseEvent e) { + if (!clicked) { + clicked = true; + latch.countDown(); + } + } + + @Override + public void mousePressed(MouseEvent e) { + pressed = true; + if (!pressed) { + pressed = true; + latch.countDown(); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (!released) { + released = true; + latch.countDown(); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + + @Override + public void perform(GUI gui, TouchRobot robot) throws IOException { + int x = gui.frameBounds.x + gui.frameBounds.width / 2; + int y = gui.frameBounds.y + gui.frameBounds.height / 2; + robot.touchClick(TouchScreenEventsTest.TRACKING_ID, x, y); + } + + @Override + public boolean passed() throws InterruptedException { + latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS); + if (!pressed || !released || !clicked) { + String error = (pressed ? "" : "pressed: " + pressed) + + (released ? "" : ", released: " + released) + + (clicked ? "" : ", clicked: " + clicked); + System.out.println("Touch click failed: " + error); + return false; + } + System.out.println("Touch click passed"); + return true; + } + + @Override + public void addListener(JFrame frame) { + frame.addMouseListener(this); + } +} + +class TouchMoveSuite implements MouseWheelListener, TouchTestSuite { + + private volatile boolean begin; + private volatile boolean update; + private volatile boolean end; + private final CountDownLatch latch = new CountDownLatch(3); + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + if (e.getScrollType() == TouchEvent.TOUCH_BEGIN) { + if (!begin) { + begin = true; + latch.countDown(); + } + } else if (e.getScrollType() == TouchEvent.TOUCH_UPDATE) { + if (!update) { + update = true; + latch.countDown(); + } + } else if (e.getScrollType() == TouchEvent.TOUCH_END) { + if (!end) { + end = true; + latch.countDown(); + } + } + } + + @Override + public void perform(GUI gui, TouchRobot robot) throws IOException { + int x1 = gui.frameBounds.x + gui.frameBounds.width / 4; + int y1 = gui.frameBounds.y + gui.frameBounds.height / 4; + int x2 = gui.frameBounds.x + gui.frameBounds.width / 2; + int y2 = gui.frameBounds.y + gui.frameBounds.height / 2; + robot.touchMove(TouchScreenEventsTest.TRACKING_ID, x1, y1, x2, y2); + } + + @Override + public boolean passed() throws InterruptedException { + latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS); + if (!begin || !update || !end) { + String error = (begin ? "" : "begin: " + begin) + + (update ? "" : ", update: " + update) + + (end ? "" : ", end: " + end); + System.out.println("Touch move failed: " + error); + return false; + } + System.out.println("Touch move passed"); + return true; + } + + @Override + public void addListener(JFrame frame) { + frame.addMouseWheelListener(this); + } +} + +class TouchTinyMoveSuite implements MouseWheelListener, MouseListener, TouchTestSuite { + + private volatile boolean scroll; + private volatile boolean click; + private final CountDownLatch latch = new CountDownLatch(1); + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + if (e.getScrollType() == TouchEvent.TOUCH_UPDATE) { + scroll = true; + latch.countDown(); + } + } + + @Override + public void perform(GUI gui, TouchRobot robot) throws IOException { + int x1 = gui.frameBounds.x + gui.frameBounds.width / 4; + int y1 = gui.frameBounds.y + gui.frameBounds.height / 4; + // move inside tiny area + int x2 = x1 + 1; + int y2 = y1 + 1; + robot.touchMove(TouchScreenEventsTest.TRACKING_ID, x1, y1, x2, y2); + } + + @Override + public boolean passed() throws InterruptedException { + latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS); + if (scroll || !click) { + String error = (scroll ? "scroll " + scroll : "") + + (click ? "" : ", click: " + click); + System.out.println("Tiny touch move failed: " + error); + return false; + } + System.out.println("Tiny touch move passed"); + return true; + } + + @Override + public void addListener(JFrame frame) { + frame.addMouseWheelListener(this); + frame.addMouseListener(this); + } + + @Override + public void mouseClicked(MouseEvent e) { + click = true; + latch.countDown(); + } + + @Override + public void mousePressed(MouseEvent e) { + } + + @Override + public void mouseReleased(MouseEvent e) { + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } +} + +class TouchAxesScrollSuite implements MouseWheelListener, TouchTestSuite { + enum AXIS {X, Y} + + private final AXIS axis; + private volatile boolean vertical; + private volatile boolean horizontal; + private final CountDownLatch latch = new CountDownLatch(1); + + TouchAxesScrollSuite(AXIS axis) { + this.axis = axis; + } + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + if (e.getScrollType() == TouchEvent.TOUCH_UPDATE) { + if (e.isShiftDown()) { + horizontal = true; + } else { + vertical = true; + } + latch.countDown(); + } + } + + @Override + public void perform(GUI gui, TouchRobot robot) throws IOException { + int x1 = gui.frameBounds.x + gui.frameBounds.width / 4; + int y1 = gui.frameBounds.y + gui.frameBounds.height / 4; + switch (axis) { + case X: + int x2 = gui.frameBounds.x + gui.frameBounds.width / 2; + robot.touchMove(TouchScreenEventsTest.TRACKING_ID, x1, y1, x2, y1); + break; + case Y: + int y2 = gui.frameBounds.y + gui.frameBounds.height / 2; + robot.touchMove(TouchScreenEventsTest.TRACKING_ID, x1, y1, x1, y2); + break; + } + } + + @Override + public boolean passed() throws InterruptedException { + latch.await(TouchScreenEventsTest.TIMEOUT, TimeUnit.SECONDS); + String info = "horizontal: " + horizontal + ", vertical: " + vertical; + switch (axis) { + case X: + if (!horizontal || vertical) { + System.out.println("Touch axes failed: " + info); + return false; + } + break; + case Y: + if (horizontal || !vertical) { + System.out.println("Touch axes failed: " + info); + return false; + } + break; + } + System.out.println("Touch axes passed: " + info); + return true; + } + + @Override + public void addListener(JFrame frame) { + frame.addMouseWheelListener(this); + } +} diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh b/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh new file mode 100644 index 000000000000..327c382147d9 --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @summary Regression test for JBR-2041: Touchscreen devices support +# @requires (jdk.version.major >= 11) & (os.family == "linux") +# @modules java.desktop/sun.awt.event +# @build TouchRobot LinuxTouchRobot LinuxTouchScreenDevice TouchScreenEventsTest +# @run shell TouchScreenEventsTestLinux.sh + +# password for sudo +PASSWORD=${BUPWD} + +if [ "${PASSWORD}" = "" ] +then + echo "Error: Root password is empty"; exit 1 +fi + +echo "Allow current user write to /dev/uinput:" +echo "> sudo chown `whoami` /dev/uinput" +echo ${PASSWORD} | sudo -S chown `whoami` /dev/uinput +if [ $? != 0 ] ; then + echo "Error: Cannot change owner of /dev/uinput"; exit 1 +fi + + +echo "Launching TouchScreenEventsTest.java:" +echo "> $TESTJAVA/bin/java $TESTVMOPTS -cp $TESTCLASSES TouchScreenEventsTest" +$TESTJAVA/bin/java $TESTVMOPTS -cp $TESTCLASSES TouchScreenEventsTest +result=$? +echo "Test run result=$result" + +echo "Restore permissions on /dev/uinput:" +echo "> sudo chown root /dev/uinput" +echo ${PASSWORD} | sudo -S chown root /dev/uinput +if [ $? != 0 ] ; then + echo "Error: Cannot restore permissions on /dev/uinput" +fi + +exit $result diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/WindowsTouchRobot.java b/test/jdk/jb/java/awt/event/TouchScreenEvent/WindowsTouchRobot.java new file mode 100644 index 000000000000..e14247f5fa6f --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/WindowsTouchRobot.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.AWTException; +import java.awt.GraphicsDevice; +import java.io.IOException; + +public class WindowsTouchRobot extends TouchRobot { + static { + System.loadLibrary("windows_touch_robot"); + } + + public WindowsTouchRobot() throws AWTException, IOException { + super(); + } + + public WindowsTouchRobot(GraphicsDevice screen) throws AWTException, IOException { + super(screen); + } + + @Override + public void touchClick(int fingerId, int x, int y) throws IOException { + // TODO unused finger id cause windows use different finger id model + clickImpl(x, y); + } + + @Override + public void touchMove(int fingerId, int fromX, int fromY, int toX, int toY) throws IOException { + // TODO unused finger id cause windows use different finger id model + moveImpl(fromX, fromY, toX, toY); + } + + private native void clickImpl(int x, int y); + + private native void moveImpl(int fromX, int fromY, int toX, int toY); +} diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/libtouchscreen_device.c b/test/jdk/jb/java/awt/event/TouchScreenEvent/libtouchscreen_device.c new file mode 100644 index 000000000000..045560b21512 --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/libtouchscreen_device.c @@ -0,0 +1,228 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// TODO sort includes +// TODO add casts + +typedef struct { + __u16 type; + __u16 code; + __s32 value; +} TEventData; + +static int set_bit(int fd, unsigned long int request, unsigned long int bit) { + return ioctl(fd, request, bit); +} + +static int touch_begin(int fd, int tracking_id, int x, int y) { + struct input_event ev; + int i = 0; + const int cnt = 7; + TEventData eventData[7] = {{EV_ABS, ABS_MT_TRACKING_ID, tracking_id}, + {EV_ABS, ABS_MT_POSITION_X, x}, + {EV_ABS, ABS_MT_POSITION_Y, y}, + {EV_KEY, BTN_TOUCH, 1}, + {EV_ABS, ABS_X, x}, + {EV_ABS, ABS_Y, y}, + {EV_SYN, 0, 0}}; + + for (i = 0; i < cnt; i++) { + memset(&ev, 0, sizeof(struct input_event)); + ev.type = eventData[i].type; + ev.code = eventData[i].code; + ev.value = eventData[i].value; + + if (write(fd, &ev, sizeof(struct input_event)) < 0) { + return -1; + } + } + return 0; +} + +static int touch_update(int fd, int x, int y) { + struct input_event ev; + int i = 0; + const int cnt = 5; + TEventData eventData[5] = {{EV_ABS, ABS_MT_POSITION_X, x}, + {EV_ABS, ABS_MT_POSITION_Y, y}, + {EV_ABS, ABS_X, x}, + {EV_ABS, ABS_Y, y}, + {EV_SYN, 0, 0}}; + + for (i = 0; i < cnt; i++) { + memset(&ev, 0, sizeof(struct input_event)); + ev.type = eventData[i].type; + ev.code = eventData[i].code; + ev.value = eventData[i].value; + + if (write(fd, &ev, sizeof(struct input_event)) < 0) { + return -1; + } + } + return 0; +} + +// TODO consider different name in case of multitouch +static int touch_end(int fd) { + struct input_event ev; + int i = 0; + const int cnt = 3; + TEventData eventData[3] = { + {EV_ABS, ABS_MT_TRACKING_ID, -1}, {EV_KEY, BTN_TOUCH, 0}, {EV_SYN, 0, 0}}; + + for (i = 0; i < cnt; i++) { + memset(&ev, 0, sizeof(struct input_event)); + ev.type = eventData[i].type; + ev.code = eventData[i].code; + ev.value = eventData[i].value; + + if (write(fd, &ev, sizeof(struct input_event)) < 0) { + return -1; + } + } + return 0; +} + +/* + * Class: TouchScreenDevice + * Method: create + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_LinuxTouchScreenDevice_create(JNIEnv *env, + jobject o, + jint width, + jint height) { + int productId = 123; + const int FAKE_VENDOR_ID = 0x453; + const int MAX_FINGER_COUNT = 9; + const int MAX_TRACKING_ID = 65535; + + int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); + if (fd < 0) { + return -1; + } + + int ret_code = 0; + ret_code = set_bit(fd, UI_SET_EVBIT, EV_SYN); + ret_code = set_bit(fd, UI_SET_EVBIT, EV_KEY); + ret_code = set_bit(fd, UI_SET_KEYBIT, BTN_TOUCH); + ret_code = set_bit(fd, UI_SET_EVBIT, EV_ABS); + ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_X); + ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_Y); + ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_SLOT); + ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_POSITION_X); + ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y); + ret_code = set_bit(fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID); + ret_code = set_bit(fd, UI_SET_PROPBIT, INPUT_PROP_DIRECT); + + if (ret_code < 0) { + return -1; + } + + struct uinput_user_dev virtual_touch_device; + memset(&virtual_touch_device, 0, sizeof(virtual_touch_device)); + snprintf(virtual_touch_device.name, UINPUT_MAX_NAME_SIZE, + "Virtual Touch Device - %#x", productId); + virtual_touch_device.id.bustype = BUS_VIRTUAL; + virtual_touch_device.id.vendor = FAKE_VENDOR_ID; + virtual_touch_device.id.product = productId; + virtual_touch_device.id.version = 1; + + virtual_touch_device.absmin[ABS_X] = 0; + virtual_touch_device.absmax[ABS_X] = width; + virtual_touch_device.absmin[ABS_Y] = 0; + virtual_touch_device.absmax[ABS_Y] = height; + virtual_touch_device.absmin[ABS_MT_SLOT] = 0; + virtual_touch_device.absmax[ABS_MT_SLOT] = MAX_FINGER_COUNT; + virtual_touch_device.absmin[ABS_MT_POSITION_X] = 0; + virtual_touch_device.absmax[ABS_MT_POSITION_X] = width; + virtual_touch_device.absmin[ABS_MT_POSITION_Y] = 0; + virtual_touch_device.absmax[ABS_MT_POSITION_Y] = height; + virtual_touch_device.absmin[ABS_MT_TRACKING_ID] = 0; + virtual_touch_device.absmax[ABS_MT_TRACKING_ID] = MAX_TRACKING_ID; + + ret_code = write(fd, &virtual_touch_device, sizeof(virtual_touch_device)); + ret_code = ioctl(fd, UI_DEV_CREATE); + if (ret_code < 0) { + return -1; + } + + return fd; +} + +/* + * Class: TouchScreenDevice + * Method: destroy + * Signature: (I)V + */ +JNIEXPORT jint JNICALL Java_LinuxTouchScreenDevice_destroy(JNIEnv *env, + jobject o, + jint fd) { + if (ioctl(fd, UI_DEV_DESTROY) < 0) { + return -1; + } + + return close(fd); +} + +/* + * Class: TouchScreenDevice + * Method: clickImpl + * Signature: (IIII)V + */ +// TODO return code with checked exception +JNIEXPORT jint JNICALL Java_LinuxTouchScreenDevice_clickImpl( + JNIEnv *env, jobject o, jint fd, jint trackingId, jint x, jint y) { + touch_begin(fd, trackingId, x, y); + touch_end(fd); + return 0; +} + +/* + * Class: TouchScreenDevice + * Method: moveImpl + * Signature: (IIIIII)V + */ +JNIEXPORT jint JNICALL Java_LinuxTouchScreenDevice_moveImpl( + JNIEnv *env, jobject o, jint fd, jint trackingId, jint fromX, jint fromY, + jint toX, jint toY) { + touch_begin(fd, trackingId, fromX, fromY); + touch_update(fd, toX, toY); + touch_end(fd); + return 0; +} diff --git a/test/jdk/jb/java/awt/event/TouchScreenEvent/libwindows_touch_robot.c b/test/jdk/jb/java/awt/event/TouchScreenEvent/libwindows_touch_robot.c new file mode 100644 index 000000000000..b7b0f8f4cbb1 --- /dev/null +++ b/test/jdk/jb/java/awt/event/TouchScreenEvent/libwindows_touch_robot.c @@ -0,0 +1,107 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include + +#include +#include + +POINTER_TOUCH_INFO create_touch_info() +{ + POINTER_TOUCH_INFO contact; + InitializeTouchInjection(1, TOUCH_FEEDBACK_DEFAULT); // Number of contact point + memset(&contact, 0, sizeof(POINTER_TOUCH_INFO)); + + contact.touchFlags = TOUCH_FLAG_NONE; + contact.touchMask = TOUCH_MASK_CONTACTAREA | TOUCH_MASK_ORIENTATION | TOUCH_MASK_PRESSURE; + contact.orientation = 90; // Orientation of 90 means touching perpendicular to screen. + contact.pressure = 32000; + + return contact; +} + +void set_contact_area(POINTER_TOUCH_INFO *contact) +{ + // 4 x 4 pixel contact area + contact->rcContact.top = contact->pointerInfo.ptPixelLocation.y - 2; + contact->rcContact.bottom = contact->pointerInfo.ptPixelLocation.y + 2; + contact->rcContact.left = contact->pointerInfo.ptPixelLocation.x - 2; + contact->rcContact.right = contact->pointerInfo.ptPixelLocation.x + 2; +} + +void touchBegin(POINTER_TOUCH_INFO* contact, LONG x, LONG y) +{ + contact->pointerInfo.pointerType = PT_TOUCH; + // primary finger pointerId == 0 + contact->pointerInfo.pointerId = 0; + contact->pointerInfo.ptPixelLocation.x = x; + contact->pointerInfo.ptPixelLocation.y = y; + set_contact_area(contact); + + contact->pointerInfo.pointerFlags = POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT; + InjectTouchInput(1, contact); +} + +void touchUpdate(POINTER_TOUCH_INFO* contact, LONG x, LONG y) +{ + contact->pointerInfo.pointerFlags = POINTER_FLAG_UPDATE | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT; + contact->pointerInfo.ptPixelLocation.x = x; + contact->pointerInfo.ptPixelLocation.y = y; + InjectTouchInput(1, contact); +} + +void touchEnd(POINTER_TOUCH_INFO* contact) +{ + contact->pointerInfo.pointerFlags = POINTER_FLAG_UP; + InjectTouchInput(1, contact); +} + +/* + * Class: quality_util_WindowsTouchRobot + * Method: clickImpl + * Signature: (II)V + */ +JNIEXPORT void JNICALL +Java_WindowsTouchRobot_clickImpl(JNIEnv* env, jobject o, + jint x, jint y) +{ + POINTER_TOUCH_INFO contact = create_touch_info(); + touchBegin(&contact, x, y); + touchEnd(&contact); +} + +/* + * Class: quality_util_WindowsTouchRobot + * Method: moveImpl + * Signature: (IIII)V + */ +JNIEXPORT void JNICALL +Java_WindowsTouchRobot_moveImpl(JNIEnv* env, jobject o, + jint fromX, jint fromY, + jint toX, jint toY) +{ + POINTER_TOUCH_INFO contact = create_touch_info(); + touchBegin(&contact, fromX, fromY); + touchUpdate(&contact, toX, toY); + touchEnd(&contact); +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/im/ImWindowIsPlacedUnderPopup5984.java b/test/jdk/jb/java/awt/im/ImWindowIsPlacedUnderPopup5984.java new file mode 100644 index 000000000000..65784e03302c --- /dev/null +++ b/test/jdk/jb/java/awt/im/ImWindowIsPlacedUnderPopup5984.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2023, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @summary A manual test of JBR-5984 bug checks if an IM's window is placed above Swing's/AWT's popups + * @author Nikita Provotorov + * @requires (os.family == "mac") + * @key headful + * @run main/othervm/manual -Xcheck:jni ImWindowIsPlacedUnderPopup5984 + */ + + +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + + +public class ImWindowIsPlacedUnderPopup5984 extends JFrame { + static final CompletableFuture swingError = new CompletableFuture<>(); + + public static void main(String[] args) throws InterruptedException, InvocationTargetException, ExecutionException { + final ImWindowIsPlacedUnderPopup5984 frame; + { + final CompletableFuture frameFuture = new CompletableFuture<>(); + SwingUtilities.invokeAndWait(() -> { + try { + final var result = new ImWindowIsPlacedUnderPopup5984(); + result.setVisible(true); + frameFuture.complete(result); + } catch (Throwable err) { + frameFuture.completeExceptionally(err); + } + }); + frame = frameFuture.get(); + } + + try { + final var err = swingError.get(); + if (err != null) { + throw err; + } + } finally { + if (frame != null) { + SwingUtilities.invokeAndWait(frame::dispose); + } + } + } + + + public ImWindowIsPlacedUnderPopup5984() { + super("JBR-5984"); + setDefaultCloseOperation(HIDE_ON_CLOSE); + + popupShowingButton = new JButton("Show a Popup"); + add(popupShowingButton, BorderLayout.NORTH); + + instructionTextArea = new JTextArea(); + instructionTextArea.setLineWrap(true); + instructionTextArea.setWrapStyleWord(true); + instructionTextArea.setText( + """ + INSTRUCTION: + 1. Switch the input source to an input method (e.g. "Pinyin - Simplified"); + 2. Press the "Show a Popup" button; + 3. Start typing into the text field on the shown popup; + 4. Check if the input candidates' popup is shown above the java popup: + 4.1. If it's shown above, press the "PASS" button; + 4.2. Otherwise, press the "FAIL" button. + """ + ); + instructionTextArea.setEditable(false); + add(instructionTextArea, BorderLayout.CENTER); + + final JPanel southContainer = new JPanel(new BorderLayout()); + failTestButton = new JButton("FAIL"); + passTestButton = new JButton("PASS"); + southContainer.add(failTestButton, BorderLayout.LINE_START); + southContainer.add(passTestButton, BorderLayout.LINE_END); + add(southContainer, BorderLayout.SOUTH); + + popupPanel = new JPanel(); + popupTextField = new JTextArea(); + popupTextField.setPreferredSize(new Dimension(200, 125)); + popupPanel.add(popupTextField); + + pack(); + setSize(400, 250); + setLocationRelativeTo(null); + + popup = new JPopupMenu(); + popup.add(popupPanel); + popup.pack(); + + popupShowingButton.addActionListener(ignored -> popup.show(ImWindowIsPlacedUnderPopup5984.this, 100, 65)); + + failTestButton.addActionListener(ignored -> swingError.completeExceptionally(new RuntimeException("The tester has pressed FAILED"))); + passTestButton.addActionListener(ignored -> swingError.complete(null)); + + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + swingError.completeExceptionally(new RuntimeException("The window was closed not through the \"PASS\"/\"FAIL\" buttons")); + } + }); + } + + + private final JButton popupShowingButton; + private final JTextArea instructionTextArea; + private final JButton failTestButton; + private final JButton passTestButton; + private final JPanel popupPanel; + private final JTextArea popupTextField; + private final JPopupMenu popup; +} diff --git a/test/jdk/jb/java/awt/image/BufferedFontRenderingTest.java b/test/jdk/jb/java/awt/image/BufferedFontRenderingTest.java new file mode 100644 index 000000000000..f8c912598906 --- /dev/null +++ b/test/jdk/jb/java/awt/image/BufferedFontRenderingTest.java @@ -0,0 +1,120 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.Map; +import java.awt.Robot; + +/* + * @test + * @summary The test renders the same string twice. At the top the string is rendered directly. At the bottom, + * it's first rendered to a BufferedImage, and then the image is blitted. + * Then the test compares these two strings and fails if there are the difference in their renderings is above 0.1% + * @run main/othervm -Dverbose=true BufferedFontRenderingTest + */ +public class BufferedFontRenderingTest { + + private static final int X = 40; + private static final int Y = 20; + private static final float DIFF_PERCENTAGE = 0.1f; + private static JFrame f; + + public static void main(String[] args) throws Exception { + + boolean verbose = Boolean.parseBoolean(System.getProperty("verbose", "false")); + + Robot robot = new Robot(); + SwingUtilities.invokeAndWait(() -> { + f = new JFrame(); + f.add(new MyComponent()); + f.setSize(200, 100); + f.setLocationRelativeTo(null); + f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + f.setUndecorated(true); + f.setVisible(true); + }); + robot.delay(100); + robot.waitForIdle(); + + BufferedImage image = robot.createScreenCapture(new Rectangle(f.getX(), f.getY(), f.getWidth(), f.getHeight())); + + if (verbose) { + String format = "bmp"; + ImageIO.write(image, format, new File("image" + "." + format)); + } + + int countDiffs = 0; + int totalCmps = 0; + + for (int row = 1; row < f.getHeight() / 2; row++) { + for (int col = 1; col < f.getWidth(); col++) { + totalCmps++; + + int expectedRGB = image.getRGB(col, row) & 0x00FFFFFF; + int rgb = image.getRGB(col, row + f.getHeight()/2) & 0x00FFFFFF; + + if (verbose) + System.out.print((rgb == expectedRGB) ? "." : "x"); + + if (expectedRGB != rgb) + countDiffs++; + } + if (verbose) + System.out.println(); + } + + double percentage = (double)countDiffs*100/totalCmps; + + System.out.printf("total comparisons: %6d\n", totalCmps); + System.out.printf(" diffs number: %6d\n", countDiffs); + System.out.printf(" diff percentage: %6.4f%%\n", percentage); + + boolean passed = (percentage < DIFF_PERCENTAGE); + + SwingUtilities.invokeAndWait(() -> { + f.dispose(); + }); + robot.delay(100); + robot.waitForIdle(); + + if (!passed) { + String msg = String.format("images differ to each other by %6.4f%% that is more than allowed %6.4f%%", + percentage, DIFF_PERCENTAGE); + throw new RuntimeException(msg); + } + } + + private static class MyComponent extends JComponent { + private static final String TEXT = "A quick brown fox"; + private static final Font FONT = new Font("Inter", Font.PLAIN, 13); + private static final Map HINTS = Map.of(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + @Override + protected void paintComponent(Graphics _g) { + Graphics2D g = (Graphics2D) _g; + g.setRenderingHints(HINTS); + g.setFont(FONT); + g.drawString(TEXT, X, Y); + + double scale = g.getTransform().getScaleX(); + int imgWidth = getWidth(); + int imgHeight = getHeight() / 2; + + BufferedImage img = new BufferedImage((int) Math.ceil(imgWidth * scale), (int) Math.ceil(imgHeight * scale), BufferedImage.TYPE_INT_RGB); + Graphics2D ig = img.createGraphics(); + ig.scale(scale, scale); + ig.setColor(getForeground()); + ig.setBackground(getBackground()); + ig.clearRect(0, 0, imgWidth, imgHeight); + ig.setRenderingHints(HINTS); + ig.setFont(FONT); + ig.drawString(TEXT , X, Y); + ig.dispose(); + + g.translate(0, imgHeight); + g.scale(1 / scale, 1 / scale); + g.drawImage(img, 0, 0, null); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/awt/keyboard/AltGrMustGenerateAltGrModifierTest4207.java b/test/jdk/jb/java/awt/keyboard/AltGrMustGenerateAltGrModifierTest4207.java new file mode 100644 index 000000000000..7fbd393f706b --- /dev/null +++ b/test/jdk/jb/java/awt/keyboard/AltGrMustGenerateAltGrModifierTest4207.java @@ -0,0 +1,398 @@ +/* + * Copyright 2021-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + + +/** + * @test + * @summary Regression test for JBR-4207 ensures that pressing each layout-free key + AltGr produces AltGr modifier + * @requires (os.family == "windows") + * @key headful + * @run main AltGrMustGenerateAltGrModifierTest4207 + * @author Nikita Provotorov + */ +public class AltGrMustGenerateAltGrModifierTest4207 extends Frame { + + public static void main(String[] args) throws Exception + { + final AltGrMustGenerateAltGrModifierTest4207 mainWindow = new AltGrMustGenerateAltGrModifierTest4207(); + + try { + mainWindow.setVisible(true); + mainWindow.toFront(); + + final Robot robot = new Robot(); + + forceFocusTo(mainWindow.textArea, robot); + + Thread.sleep(PAUSE_MS); + + mainWindow.pressAllKeysWithAltGr(robot); + + Thread.sleep(PAUSE_MS); + + if (mainWindow.allKeysWerePressedAndReleased && + mainWindow.allModifiersAreCorrect && + mainWindow.allModifiersExAreCorrect) { + System.out.println("Test passed."); + } else { + throw new Exception("Test failed"); + } + } finally { + mainWindow.dispose(); + } + } + + + private AltGrMustGenerateAltGrModifierTest4207() + { + super("AltGr must generate AltGr modifier"); + + setAlwaysOnTop(true); + + textArea = new TextArea(); + textArea.setFocusable(true); + + add(textArea); + pack(); + setSize(250, 250); + + textArea.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) + { + keyHandlerImpl("keyPressed", e, pressedKeyToCheck); + } + + @Override + public void keyReleased(KeyEvent e) + { + keyHandlerImpl("keyReleased", e, pressedKeyToCheck); + } + + + private void keyHandlerImpl(final String eventName, final KeyEvent e, final Integer expectedPressedKey) + { + if (expectedPressedKey == null) { + return; + } + + try { + // Old API. + + // Not all keyboard layouts have AltGr (e.g. ENG-US). + // On this keyboards right Alt produces only Alt without Ctrl. + final int modifiersOnMask = /*KeyEvent.CTRL_MASK |*/ KeyEvent.ALT_GRAPH_MASK | KeyEvent.ALT_MASK; + final int modifiers = e.getModifiers(); + if ((modifiers & modifiersOnMask) != modifiersOnMask) { + allModifiersAreCorrect = false; + System.err.println(eventName + " {" + keyCodeToText(expectedPressedKey) + "}: wrong Modifiers;" + + " expected: " + modifiersToText(modifiersOnMask) + + ", actual: " + modifiersToText(modifiers) + "."); + } + + // Modern API. + + // Not all keyboard layouts have AltGr (e.g. ENG-US). + // On this keyboards right Alt produces only Alt without Ctrl. + final int modifiersExOnMask = /*KeyEvent.CTRL_DOWN_MASK |*/ KeyEvent.ALT_DOWN_MASK | KeyEvent.ALT_GRAPH_DOWN_MASK; + final int modifiersEx = e.getModifiersEx(); + if ((modifiersEx & modifiersExOnMask) != modifiersExOnMask) { + allModifiersExAreCorrect = false; + System.err.println(eventName + " {" + keyCodeToText(expectedPressedKey) + "}: wrong ModifiersEx;" + + " expected: " + modifiersExToText(modifiersExOnMask) + + ", actual: " + modifiersExToText(modifiersEx) + "."); + } + } finally { + keyPressedLatch.countDown(); + } + } + }); + } + + private void pressAllKeysWithAltGr(final Robot robot) throws Exception + { + for (final int keyToPress : allLayoutFreeVirtualKeys) { + keyPressedLatch = new CountDownLatch(2); + + pressKeyWithAltGr(keyToPress, robot); + + if (!keyPressedLatch.await(PAUSE_MS, TimeUnit.MILLISECONDS)) { + allKeysWerePressedAndReleased = false; + System.err.println("Pressing {" + keyCodeToText(KeyEvent.VK_ALT_GRAPH) + " + " + keyCodeToText(keyToPress) + "}" + + ": not all keys have been pressed or released."); + } + } + } + + private void pressKeyWithAltGr(final int keyToPress, final Robot robot) + { + pressedKeyToCheck = null; + + robot.waitForIdle(); + + robot.keyPress(KeyEvent.VK_ALT_GRAPH); + robot.waitForIdle(); + + try { + robot.keyPress(pressedKeyToCheck = keyToPress); + robot.keyRelease(keyToPress); + + robot.waitForIdle(); + + pressedKeyToCheck = null; + + // restore lock-keys state + if ( (keyToPress == KeyEvent.VK_CAPS_LOCK) || + (keyToPress == KeyEvent.VK_NUM_LOCK) || + (keyToPress == KeyEvent.VK_KANA_LOCK) || + (keyToPress == KeyEvent.VK_SCROLL_LOCK) ) { + robot.keyPress(keyToPress); + robot.keyRelease(keyToPress); + } + } finally { + robot.keyRelease(KeyEvent.VK_ALT_GRAPH); + robot.waitForIdle(); + } + } + + + // Sometimes top-level Frame does not get focus when requestFocus is called. + // For example, when this test is launched after test/.../bug6361367.java: + // jtreg test/jdk/javax/swing/text/JTextComponent/6361367/bug6361367.java test/jdk/jb/java/awt/keyboard/AltGrMustGenerateAltGrModifierTest4207.java + // + // So this method forces the focus acquiring via mouse clicking to the component. + private static void forceFocusTo(final Component component, final Robot robot) { + robot.waitForIdle(); + + final Point componentTopLeft = component.getLocationOnScreen(); + final int componentCenterX = componentTopLeft.x + component.getWidth() / 2; + final int componentCenterY = componentTopLeft.y + component.getHeight() / 2; + + robot.mouseMove(componentCenterX, componentCenterY); + robot.waitForIdle(); + + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + + robot.waitForIdle(); + + component.requestFocus(); + + robot.waitForIdle(); + } + + private static String keyCodeToText(int keyCode) { + return "<" + KeyEvent.getKeyText(keyCode) + " (code=" + keyCode + ")>"; + } + + private static String modifiersToText(int modifiers) { + return "[" + KeyEvent.getKeyModifiersText(modifiers) + " (code=" + modifiers + ")]"; + } + + private static String modifiersExToText(int modifiersEx) { + return "[" + KeyEvent.getModifiersExText(modifiersEx) + " (code=" + modifiersEx + ")]"; + } + + private static final int PAUSE_MS = 2000; + + + private final TextArea textArea; + + private volatile boolean allKeysWerePressedAndReleased = true; + private volatile boolean allModifiersAreCorrect = true; + private volatile boolean allModifiersExAreCorrect = true; + + private volatile Integer pressedKeyToCheck = null; + private volatile CountDownLatch keyPressedLatch = null; + + private final int[] allLayoutFreeVirtualKeys = new int[] { + // Modifier keys + + KeyEvent.VK_CAPS_LOCK, + KeyEvent.VK_SHIFT, + /* VK_CONTROL releasing removes SHIFT_MASK, SHIFT_DOWN_MASK - notepad.exe, VSCode have the same behavior */ + //KeyEvent.VK_CONTROL, + KeyEvent.VK_ALT, + //KeyEvent.VK_ALT_GRAPH, + KeyEvent.VK_NUM_LOCK, + + // Miscellaneous Windows keys + + KeyEvent.VK_WINDOWS, + KeyEvent.VK_WINDOWS, + KeyEvent.VK_CONTEXT_MENU, + + // Alphabet + + KeyEvent.VK_A, + KeyEvent.VK_B, + KeyEvent.VK_C, + KeyEvent.VK_D, + KeyEvent.VK_E, + KeyEvent.VK_F, + KeyEvent.VK_G, + KeyEvent.VK_H, + KeyEvent.VK_I, + KeyEvent.VK_J, + KeyEvent.VK_K, + KeyEvent.VK_L, + KeyEvent.VK_M, + KeyEvent.VK_N, + KeyEvent.VK_O, + KeyEvent.VK_P, + KeyEvent.VK_Q, + KeyEvent.VK_R, + KeyEvent.VK_S, + KeyEvent.VK_T, + KeyEvent.VK_U, + KeyEvent.VK_V, + KeyEvent.VK_W, + KeyEvent.VK_X, + KeyEvent.VK_Y, + KeyEvent.VK_Z, + + // Standard numeric row + + KeyEvent.VK_0, + KeyEvent.VK_1, + KeyEvent.VK_2, + KeyEvent.VK_3, + KeyEvent.VK_4, + KeyEvent.VK_5, + KeyEvent.VK_6, + KeyEvent.VK_7, + KeyEvent.VK_8, + KeyEvent.VK_9, + + // Misc key from main block + + KeyEvent.VK_ENTER, + /* avoid SC_KEYMENU event on layouts which don't have AltGr */ + //KeyEvent.VK_SPACE, + KeyEvent.VK_BACK_SPACE, + /* avoid focus switching */ + //KeyEvent.VK_TAB, + //KeyEvent.VK_ESCAPE, + + // NumPad with NumLock off & extended block (rectangular) + + KeyEvent.VK_INSERT, + KeyEvent.VK_DELETE, + KeyEvent.VK_HOME, + KeyEvent.VK_END, + KeyEvent.VK_PAGE_UP, + KeyEvent.VK_PAGE_DOWN, + KeyEvent.VK_CLEAR, + + // NumPad with NumLock off & extended arrows block (triangular) + + KeyEvent.VK_LEFT, + KeyEvent.VK_RIGHT, + KeyEvent.VK_UP, + KeyEvent.VK_DOWN, + + // NumPad with NumLock on: numbers + + KeyEvent.VK_NUMPAD0, + KeyEvent.VK_NUMPAD1, + KeyEvent.VK_NUMPAD2, + KeyEvent.VK_NUMPAD3, + KeyEvent.VK_NUMPAD4, + KeyEvent.VK_NUMPAD5, + KeyEvent.VK_NUMPAD6, + KeyEvent.VK_NUMPAD7, + KeyEvent.VK_NUMPAD8, + KeyEvent.VK_NUMPAD9, + + // NumPad with NumLock on + + KeyEvent.VK_MULTIPLY, + KeyEvent.VK_ADD, + KeyEvent.VK_SEPARATOR, + KeyEvent.VK_SUBTRACT, + KeyEvent.VK_DECIMAL, + KeyEvent.VK_DIVIDE, + + // Functional keys + + KeyEvent.VK_F1, + KeyEvent.VK_F2, + KeyEvent.VK_F3, + KeyEvent.VK_F4, + KeyEvent.VK_F5, + KeyEvent.VK_F6, + KeyEvent.VK_F7, + KeyEvent.VK_F8, + KeyEvent.VK_F9, + KeyEvent.VK_F10, + KeyEvent.VK_F11, + KeyEvent.VK_F12, + KeyEvent.VK_F13, + KeyEvent.VK_F14, + KeyEvent.VK_F15, + KeyEvent.VK_F16, + KeyEvent.VK_F17, + KeyEvent.VK_F18, + KeyEvent.VK_F19, + KeyEvent.VK_F20, + KeyEvent.VK_F21, + KeyEvent.VK_F22, + KeyEvent.VK_F23, + KeyEvent.VK_F24, + + /* Windows does not produce WM_KEYDOWN for VK_SNAPSHOT; see JDK-4455060 */ + //KeyEvent.VK_PRINTSCREEN, + KeyEvent.VK_SCROLL_LOCK, + KeyEvent.VK_PAUSE, + KeyEvent.VK_CANCEL, + KeyEvent.VK_HELP, + + // Japanese + + /* -> [VK_ALT] + VK_CONVERT -> [VK_ALT] + VK_ALL_CANDIDATES */ + KeyEvent.VK_CONVERT, + KeyEvent.VK_NONCONVERT, + KeyEvent.VK_INPUT_METHOD_ON_OFF, + /* -> [VK_ALT] + VK_ALPHANUMERIC -> [VK_ALT] + VK_CODE_INPUT */ + KeyEvent.VK_ALPHANUMERIC, + KeyEvent.VK_KATAKANA, + KeyEvent.VK_HIRAGANA, + KeyEvent.VK_FULL_WIDTH, + KeyEvent.VK_HALF_WIDTH, + KeyEvent.VK_ROMAN_CHARACTERS, + + KeyEvent.VK_ALL_CANDIDATES, + /* [VK_ALT] + VK_PREVIOUS_CANDIDATE -> [VK_ALT + VK_SHIFT] + VK_CONVERT -> [VK_ALT + VK_SHIFT] + VK_ALL_CANDIDATES */ + KeyEvent.VK_PREVIOUS_CANDIDATE, + KeyEvent.VK_CODE_INPUT, + /* can only be found if is available */ + //KeyEvent.VK_KANA_LOCK, + }; +} diff --git a/test/jdk/jb/java/awt/keyboard/CmdNMustTriggerMenuAccelerator5075.java b/test/jdk/jb/java/awt/keyboard/CmdNMustTriggerMenuAccelerator5075.java new file mode 100644 index 000000000000..f62145392da0 --- /dev/null +++ b/test/jdk/jb/java/awt/keyboard/CmdNMustTriggerMenuAccelerator5075.java @@ -0,0 +1,379 @@ +/* + * Copyright 2022 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.lang.reflect.InvocationTargetException; +import java.util.Objects; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + + +/** + * @test + * @summary Regression test for JBR-5075 ensures that pressing Cmd+N / Ctrl+N triggers the bound menu action + * regardless of whether the menu is native (apple.laf.useScreenMenuBar=true) or not + * @author Nikita Provotorov + * @key headful + * @requires (os.family == "mac") + * @run main/othervm/timeout=5 -Dapple.laf.useScreenMenuBar=false CmdNMustTriggerMenuAccelerator5075 + * @run main/othervm/timeout=5 -Dapple.laf.useScreenMenuBar=true CmdNMustTriggerMenuAccelerator5075 + */ +public class CmdNMustTriggerMenuAccelerator5075 extends JFrame { + public static void main(String[] args) throws Throwable { + System.out.println("Initializing..."); System.out.flush(); + + // Setup key event listener + Toolkit.getDefaultToolkit().addAWTEventListener( + keyEvent -> awaitableEvents.add(new AwaitableEvent((KeyEvent)keyEvent)), + AWTEvent.KEY_EVENT_MASK + ); + + final Robot robot = createRobot(); + + createAndShowGUI(); + + try { + robot.waitForIdle(); + + { // Cmd+N + System.out.println("Done. Pressing Cmd+N..."); System.out.flush(); + pressModifierNVia(robot, KeyEvent.VK_META); + + System.out.println("Done. Awaiting events..."); System.out.flush(); + robot.waitForIdle(); + + System.out.println("Done. Verifying the events..."); System.out.flush(); + ensureGeneratedEventsAreOk(KeyEvent.VK_META, KeyEvent.META_DOWN_MASK, "Cmd"); + + System.out.println("Ok."); System.out.flush(); + } + + robot.delay(200); // just in case + + { // Ctrl+N + System.out.println("Pressing Ctrl+N..."); System.out.flush(); + pressModifierNVia(robot, KeyEvent.VK_CONTROL); + + System.out.println("Done. Awaiting events..."); System.out.flush(); + robot.waitForIdle(); + + System.out.println("Done. Verifying the events..."); System.out.flush(); + ensureGeneratedEventsAreOk(KeyEvent.VK_CONTROL, KeyEvent.CTRL_DOWN_MASK, "Ctrl"); + + System.out.println("Ok."); System.out.flush(); + } + } finally { + disposeGUI(); + } + } + + + // GUI + + private static volatile CmdNMustTriggerMenuAccelerator5075 mainWindow; + private static volatile JMenuItem cmdNMenuItem; + private static volatile JMenuItem ctrlNMenuItem; + + private static volatile FocusListener focusListener; + + private CmdNMustTriggerMenuAccelerator5075() { + super("JBR-5075"); + } + + private static void createAndShowGUI() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + mainWindow = new CmdNMustTriggerMenuAccelerator5075(); + mainWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + { // setup the menu + cmdNMenuItem = new JMenuItem("CmdN action"); + cmdNMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.META_DOWN_MASK, false)); + cmdNMenuItem.addActionListener(actionEvent -> { + System.out.println(cmdNMenuItem.getText() + " has been triggered. " + actionEvent); + System.out.flush(); + awaitableEvents.add(new AwaitableEvent(actionEvent, cmdNMenuItem)); + }); + + ctrlNMenuItem = new JMenuItem("CtrlN action"); + ctrlNMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK, false)); + ctrlNMenuItem.addActionListener(actionEvent -> { + System.out.println(ctrlNMenuItem.getText() + " has been triggered. " + actionEvent); + System.out.flush(); + awaitableEvents.add(new AwaitableEvent(actionEvent, ctrlNMenuItem)); + }); + + final var myMenu = new JMenu("My JMenu"); + myMenu.add(ctrlNMenuItem); + myMenu.add(cmdNMenuItem); + + final var myMenuBar = new JMenuBar(); + myMenuBar.add(myMenu); + + mainWindow.setJMenuBar(myMenuBar); + } + + final var myFocusListener = new FocusAdapter() { + @Override + public void focusLost(FocusEvent e) { + final var errorMsg = String.format("FOCUS LOST! %s", e); + System.err.println(errorMsg); + awaitableEvents.add(new AwaitableEvent(new RuntimeException(errorMsg))); + } + }; + + mainWindow.addFocusListener(myFocusListener); + focusListener = myFocusListener; + + mainWindow.pack(); + mainWindow.setSize(800, 500); + + mainWindow.setLocationRelativeTo(null); + mainWindow.setAlwaysOnTop(true); + + mainWindow.setVisible(true); + + mainWindow.requestFocus(); + }); + } + + private static void disposeGUI() throws InterruptedException, InvocationTargetException { + final var localFocusListener = focusListener; + if (localFocusListener != null) { + focusListener = null; + } + + final var localMainWindow = mainWindow; + if (localMainWindow != null) { + mainWindow = null; + SwingUtilities.invokeAndWait(() -> { + // To avoid false positive errors while the window is disposing + localMainWindow.removeFocusListener(localFocusListener); + + localMainWindow.dispose(); + }); + } + } + + + // Other utilities + + private static Robot createRobot() throws AWTException { + final Robot robot = new Robot(); + robot.setAutoWaitForIdle(false); + robot.setAutoDelay(0); + return robot; + } + + private static void pressModifierNVia(Robot robot, int modifierVk) { + robot.keyPress(modifierVk); + try { + robot.delay(100); + + robot.keyPress(KeyEvent.VK_N); + try { + robot.delay(50); + } finally { + robot.keyRelease(KeyEvent.VK_N); + } + robot.delay(100); + + } finally { + robot.keyRelease(modifierVk); + } + } + + + // Events reporting and handling + + /** Either KeyEvent or (ActionEvent, JMenuItem) or Throwable */ + private static final class AwaitableEvent { + final KeyEvent keyEvent; + + final ActionEvent actionEvent; + final JMenuItem triggeredMenuItem; + + final Throwable criticalError; + + + AwaitableEvent(KeyEvent keyEvent) { + this.keyEvent = Objects.requireNonNull(keyEvent, "keyEvent == null"); + this.actionEvent = null; + this.triggeredMenuItem = null; + this.criticalError = null; + } + + AwaitableEvent(ActionEvent actionEvent, JMenuItem triggeredMenuItem) { + this.keyEvent = null; + this.actionEvent = Objects.requireNonNull(actionEvent, "actionEvent == null"); + this.triggeredMenuItem = Objects.requireNonNull(triggeredMenuItem, "triggeredMenuItem == null"); + this.criticalError = null; + } + + AwaitableEvent(Throwable criticalError) { + this.keyEvent = null; + this.actionEvent = null; + this.triggeredMenuItem = null; + this.criticalError = Objects.requireNonNull(criticalError, "criticalError == null"); + } + + + @Override + public String toString() { + return (keyEvent == null) ? actionEvent + " ON " + triggeredMenuItem : keyEvent.toString(); + } + } + + private static final BlockingQueue awaitableEvents = new LinkedBlockingQueue<>(); + + private static void ensureGeneratedEventsAreOk(int modifierVk, int modifierMaskEx, String modifierText) { + // Ensures: + // 1. About expected specific key events order: + // 1. The modifier PRESS + // 2. N PRESS + // 3. N RELEASE + // 4. The modifier RELEASE + // 2. That there are no excess key events + // 3. That there was exactly 1 ActionEvent exactly by the corresponding menu item + + final var expectedMenuItem = (modifierVk == KeyEvent.VK_META) ? cmdNMenuItem : ctrlNMenuItem; + + boolean modifierPressedFound = false; + boolean nPressedFound = false; + boolean nReleasedFound = false; + boolean modifierReleasedFound = false; + int actionEventsCount = 0; + + boolean anyErrorOccurred = false; + + while (!awaitableEvents.isEmpty()) { + final var event = awaitableEvents.poll(); + + if (event.criticalError != null) { + throw new RuntimeException("Critical error occurred", event.criticalError); + } + + final var keyEvent = event.keyEvent; + + if (keyEvent == null) { + // ActionEvent + if (event.triggeredMenuItem != expectedMenuItem) { + anyErrorOccurred = true; + System.err.printf("Error: found ActionEvent for unexpected menu item: %s\n", event); + } + + if (++actionEventsCount != 1) { + anyErrorOccurred = true; + System.err.printf( + "Error: expected exactly 1 ActionEvent, but got another one (%dth): %s\n", + actionEventsCount, + event + ); + } + + continue; + } + + if (!modifierPressedFound) { // Firstly, look for Cmd/Ctrl press + if ( (keyEvent.getID() == KeyEvent.KEY_PRESSED) && + (keyEvent.getKeyCode() == modifierVk) && + (keyEvent.getModifiersEx() == modifierMaskEx) ) { + modifierPressedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting '%s' KEY_PRESSED, but got %s\n", modifierText, keyEvent); + } + continue; + } else if (!nPressedFound) { // Secondly, look for N press + if ( (keyEvent.getID() == KeyEvent.KEY_PRESSED) && + (keyEvent.getKeyCode() == KeyEvent.VK_N) && + (keyEvent.getModifiersEx() == modifierMaskEx) ) { + nPressedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting 'N [%s]' KEY_PRESSED, but got %s\n", modifierText, keyEvent); + } + continue; + } else if (!nReleasedFound) { // Third, look for N release + if ( (modifierVk == KeyEvent.VK_CONTROL) && + (keyEvent.getID() == KeyEvent.KEY_TYPED) && + (keyEvent.getModifiersEx() == modifierMaskEx) && + (keyEvent.getKeyChar() == 14) ) { + // Suppressing the Shift Out ASCII character that is generated by Ctrl+N + continue; + } + + if ( (keyEvent.getID() == KeyEvent.KEY_RELEASED) && + (keyEvent.getKeyCode() == KeyEvent.VK_N) && + (keyEvent.getModifiersEx() == modifierMaskEx) ) { + nReleasedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting 'N [%s]' KEY_RELEASED, but got %s\n", modifierText, keyEvent); + } + continue; + } else if (!modifierReleasedFound) { // Fourth, look for Cmd/Ctrl release + if ( (keyEvent.getID() == KeyEvent.KEY_RELEASED) && + (keyEvent.getKeyCode() == modifierVk) ) { + modifierReleasedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting '%s' KEY_RELEASED, but got %s\n", modifierText, keyEvent); + } + continue; + } + + // Finally, any other events are excess + + anyErrorOccurred = true; + System.err.printf("Error: excess key event: %s\n", keyEvent); + } + + if (!modifierPressedFound) { + anyErrorOccurred = true; + System.err.printf("Error: '%s' KEY_PRESSED hasn't been found\n", modifierText); + } + if (!nPressedFound) { + anyErrorOccurred = true; + System.err.printf("Error: 'N [%s]' KEY_PRESSED hasn't been found\n", modifierText); + } + if (!nReleasedFound) { + anyErrorOccurred = true; + System.err.printf("Error: 'N [%s]' KEY_RELEASED hasn't been found\n", modifierText); + } + if (!modifierReleasedFound) { + anyErrorOccurred = true; + System.err.printf("Error: '%s' KEY_RELEASED hasn't been found\n", modifierText); + } + if (actionEventsCount != 1) { + anyErrorOccurred = true; + System.err.printf("Error: %d ActionEvents have arrived instead of 1\n", actionEventsCount); + } + + if (anyErrorOccurred) { + throw new RuntimeException("Test failed"); + } + } +} diff --git a/test/jdk/jb/java/awt/keyboard/CmdOptNMustNotGenerateCmdN3544.java b/test/jdk/jb/java/awt/keyboard/CmdOptNMustNotGenerateCmdN3544.java new file mode 100644 index 000000000000..aca5a1e3e87d --- /dev/null +++ b/test/jdk/jb/java/awt/keyboard/CmdOptNMustNotGenerateCmdN3544.java @@ -0,0 +1,443 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import sun.lwawt.macosx.CPlatformWindow; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.lang.reflect.InvocationTargetException; +import java.util.Objects; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + + +/** + * @test + * @summary Regression test for JBR-3544 ensures that pressing Cmd+Opt+N / Ctrl+Opt+N sends precisely one event for + * pressing N and exactly with the Cmd+Opt / Ctrl+Opt modifiers respectively and regardless of whether + * macOS tabbing mode is enabled (-Djdk.allowMacOSTabbedWindows=true + java.awt.Window.setTabbingMode) or not + * @author Nikita Provotorov + * @key headful + * @requires (os.family == "mac") + * @modules java.desktop/java.awt:open java.desktop/sun.lwawt.macosx + * @run main/othervm/timeout=5 -Djdk.allowMacOSTabbedWindows=false CmdOptNMustNotGenerateCmdN3544 + * @run main/othervm/timeout=5 -Djdk.allowMacOSTabbedWindows=true CmdOptNMustNotGenerateCmdN3544 + */ +public class CmdOptNMustNotGenerateCmdN3544 extends JFrame { + public static void main(String[] args) throws Exception { + System.out.println("Checking that the key of sun.lwawt.macosx.MAC_OS_TABBED_WINDOW is still \"jdk.allowMacOSTabbedWindows\"..."); System.out.flush(); + if (!Objects.equals(System.getProperty("jdk.allowMacOSTabbedWindows"), CPlatformWindow.MAC_OS_TABBED_WINDOW)) { + throw new IllegalStateException( + "System.getProperty(\"jdk.allowMacOSTabbedWindows\") != sun.lwawt.macosx.MAC_OS_TABBED_WINDOW. Most likely sun.lwawt.macosx.MAC_OS_TABBED_WINDOW uses a different key." + ); + } + + System.out.println("Ok. Initializing..."); System.out.flush(); + + // Setup key event listener + Toolkit.getDefaultToolkit().addAWTEventListener( + keyEvent -> awaitableEvents.add(new AwaitableEvent((KeyEvent)keyEvent)), + AWTEvent.KEY_EVENT_MASK + ); + + final Robot robot = createRobot(); + + createAndShowGUI(); + + try { + robot.waitForIdle(); + + { // Option+Cmd+N + System.out.println("Done. Pressing Option+Cmd+N..."); System.out.flush(); + pressModifierOptNVia(robot, KeyEvent.VK_META); + + System.out.println("Done. Awaiting events..."); System.out.flush(); + robot.waitForIdle(); + + System.out.println("Done. Verifying the events..."); System.out.flush(); + ensureGeneratedEventsAreOk(KeyEvent.VK_META, KeyEvent.META_DOWN_MASK, "Cmd"); + + System.out.println("Ok."); System.out.flush(); + } + + robot.delay(200); // just in case + + { // Option+Ctrl+N + System.out.println("Pressing Option+Ctrl+N..."); System.out.flush(); + pressModifierOptNVia(robot, KeyEvent.VK_CONTROL); + + System.out.println("Done. Awaiting events..."); System.out.flush(); + robot.waitForIdle(); + + System.out.println("Done. Verifying the events..."); System.out.flush(); + ensureGeneratedEventsAreOk(KeyEvent.VK_CONTROL, KeyEvent.CTRL_DOWN_MASK, "Ctrl"); + + System.out.println("Ok."); System.out.flush(); + } + } finally { + disposeGUI(); + } + } + + + // GUI + + private static volatile CmdOptNMustNotGenerateCmdN3544 mainWindow; + private static volatile JMenuItem optionCmdNMenuItem; + private static volatile JMenuItem optionCtrlNMenuItem; + + private static volatile FocusListener focusListener; + + private CmdOptNMustNotGenerateCmdN3544() { + super("JBR-3544"); + } + + private static void createAndShowGUI() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(() -> { + mainWindow = new CmdOptNMustNotGenerateCmdN3544(); + mainWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + if (Boolean.parseBoolean(CPlatformWindow.MAC_OS_TABBED_WINDOW)) { + // enable tabbing mode + try { + final var setTabbingModeMethod = Window.class.getDeclaredMethod("setTabbingMode"); + setTabbingModeMethod.setAccessible(true); + setTabbingModeMethod.invoke(mainWindow); + } catch (Exception err) { + throw new RuntimeException(err); + } + } + + { // set up the menu + optionCmdNMenuItem = new JMenuItem("OptionCmdN action"); + optionCmdNMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.ALT_DOWN_MASK | KeyEvent.META_DOWN_MASK, false)); + optionCmdNMenuItem.addActionListener(actionEvent -> { + System.out.println(optionCmdNMenuItem.getText() + " has been triggered. " + actionEvent); + System.out.flush(); + awaitableEvents.add(new AwaitableEvent(actionEvent, optionCmdNMenuItem)); + }); + + optionCtrlNMenuItem = new JMenuItem("OptionCtrlN action"); + optionCtrlNMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK, false)); + optionCtrlNMenuItem.addActionListener(actionEvent -> { + System.out.println(optionCtrlNMenuItem.getText() + " has been triggered. " + actionEvent); + System.out.flush(); + awaitableEvents.add(new AwaitableEvent(actionEvent, optionCtrlNMenuItem)); + }); + + final var myMenu = new JMenu("My JMenu"); + myMenu.add(optionCtrlNMenuItem); + myMenu.add(optionCmdNMenuItem); + + final var myMenuBar = new JMenuBar(); + myMenuBar.add(myMenu); + + mainWindow.setJMenuBar(myMenuBar); + } + + final var myFocusListener = new FocusAdapter() { + @Override + public void focusLost(FocusEvent e) { + final var errorMsg = String.format("FOCUS LOST! %s", e); + System.err.println(errorMsg); + awaitableEvents.add(new AwaitableEvent(new RuntimeException(errorMsg))); + } + }; + + mainWindow.addFocusListener(myFocusListener); + focusListener = myFocusListener; + + mainWindow.pack(); + mainWindow.setSize(800, 500); + + mainWindow.setLocationRelativeTo(null); + + // Don't do this, it's somehow incompatible with tabbing mode + //mainWindow.setAlwaysOnTop(true); + + mainWindow.setVisible(true); + + mainWindow.requestFocus(); + }); + } + + private static void disposeGUI() throws InterruptedException, InvocationTargetException { + final var localFocusListener = focusListener; + if (localFocusListener != null) { + focusListener = null; + } + + final var localMainWindow = mainWindow; + if (localMainWindow != null) { + mainWindow = null; + SwingUtilities.invokeAndWait(() -> { + // To avoid false positive errors while the window is disposing + localMainWindow.removeFocusListener(localFocusListener); + + localMainWindow.dispose(); + }); + } + } + + + // Other utilities + + private static Robot createRobot() throws AWTException { + final Robot robot = new Robot(); + robot.setAutoWaitForIdle(false); + robot.setAutoDelay(0); + return robot; + } + + private static void pressModifierOptNVia(Robot robot, int modifierVk) { + robot.keyPress(modifierVk); + try { + robot.delay(80); + + robot.keyPress(KeyEvent.VK_ALT); + try { + robot.delay(100); + + robot.keyPress(KeyEvent.VK_N); + try { + robot.delay(50); + } finally { + robot.keyRelease(KeyEvent.VK_N); + } + robot.delay(100); + + } finally { + robot.keyRelease(KeyEvent.VK_ALT); + } + robot.delay(80); + } finally { + robot.keyRelease(modifierVk); + } + } + + + // Events reporting and handling + + /** Either KeyEvent or (ActionEvent, JMenuItem) or Throwable */ + private static final class AwaitableEvent { + final KeyEvent keyEvent; + + final ActionEvent actionEvent; + final JMenuItem triggeredMenuItem; + + final Throwable criticalError; + + + AwaitableEvent(KeyEvent keyEvent) { + this.keyEvent = Objects.requireNonNull(keyEvent, "keyEvent == null"); + this.actionEvent = null; + this.triggeredMenuItem = null; + this.criticalError = null; + } + + AwaitableEvent(ActionEvent actionEvent, JMenuItem triggeredMenuItem) { + this.keyEvent = null; + this.actionEvent = Objects.requireNonNull(actionEvent, "actionEvent == null"); + this.triggeredMenuItem = Objects.requireNonNull(triggeredMenuItem, "triggeredMenuItem == null"); + this.criticalError = null; + } + + AwaitableEvent(Throwable criticalError) { + this.keyEvent = null; + this.actionEvent = null; + this.triggeredMenuItem = null; + this.criticalError = Objects.requireNonNull(criticalError, "criticalError == null"); + } + + + @Override + public String toString() { + return (keyEvent == null) ? actionEvent + " ON " + triggeredMenuItem : keyEvent.toString(); + } + } + + private static final BlockingQueue awaitableEvents = new LinkedBlockingQueue<>(); + + private static void ensureGeneratedEventsAreOk(int modifierVk, int modifierMaskEx, String modifierText) { + // Ensures: + // 1. About expected specific key events order: + // 1. The modifier Cmd/Ctrl PRESS + // 2. The modifier Option PRESS + // 3. N PRESS + // 4. N RELEASE + // 5. The modifier Option RELEASE + // 6. The modifier Cmd/Ctrl RELEASE + // 2. That there are no excess key events + // 3. That there was exactly 1 ActionEvent exactly by the corresponding menu item + + final var expectedMenuItem = (modifierVk == KeyEvent.VK_META) ? optionCmdNMenuItem : optionCtrlNMenuItem; + + boolean modifierPressedFound = false; + boolean optionPressedFound = false; + boolean nPressedFound = false; + boolean nReleasedFound = false; + boolean optionReleasedFound = false; + boolean modifierReleasedFound = false; + int actionEventsCount = 0; + + boolean anyErrorOccurred = false; + + while (!awaitableEvents.isEmpty()) { + final var event = awaitableEvents.poll(); + + if (event.criticalError != null) { + throw new RuntimeException("Critical error occurred", event.criticalError); + } + + final var keyEvent = event.keyEvent; + + if (keyEvent == null) { + // ActionEvent + if (event.triggeredMenuItem != expectedMenuItem) { + anyErrorOccurred = true; + System.err.printf("Error: found ActionEvent for unexpected menu item: %s\n", event); + } + + if (++actionEventsCount != 1) { + anyErrorOccurred = true; + System.err.printf( + "Error: expected exactly 1 ActionEvent, but got another one (%dth): %s\n", + actionEventsCount, + event + ); + } + + continue; + } + + if (!modifierPressedFound) { // Firstly, look for Cmd/Ctrl press + if ( (keyEvent.getID() == KeyEvent.KEY_PRESSED) && + (keyEvent.getKeyCode() == modifierVk) && + (keyEvent.getModifiersEx() == modifierMaskEx) ) { + modifierPressedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting '%s' KEY_PRESSED, but got %s\n", modifierText, keyEvent); + } + continue; + } else if (!optionPressedFound) { // Secondly, look for Option press + if ( (keyEvent.getID() == KeyEvent.KEY_PRESSED) && + (keyEvent.getKeyCode() == KeyEvent.VK_ALT) && + (keyEvent.getModifiersEx() == (modifierMaskEx | KeyEvent.ALT_DOWN_MASK)) ) { + optionPressedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting 'Option' KEY_PRESSED, but got %s\n", keyEvent); + } + continue; + } else if (!nPressedFound) { // Third, look for N press + if ( (keyEvent.getID() == KeyEvent.KEY_PRESSED) && + (keyEvent.getKeyCode() == KeyEvent.VK_N) && + (keyEvent.getModifiersEx() == (modifierMaskEx | KeyEvent.ALT_DOWN_MASK)) ) { + nPressedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting 'N [Option+%s]' KEY_PRESSED, but got %s\n", modifierText, keyEvent); + } + continue; + } else if (!nReleasedFound) { // Fourth, look for N release + if ( (modifierVk == KeyEvent.VK_CONTROL) && + (keyEvent.getID() == KeyEvent.KEY_TYPED) && + (keyEvent.getModifiersEx() == (modifierMaskEx | KeyEvent.ALT_DOWN_MASK)) && + (keyEvent.getKeyChar() == 14) ) { + // Suppressing the Shift Out ASCII character that is generated by Ctrl+N + continue; + } + + if ( (keyEvent.getID() == KeyEvent.KEY_RELEASED) && + (keyEvent.getKeyCode() == KeyEvent.VK_N) && + (keyEvent.getModifiersEx() == (modifierMaskEx | KeyEvent.ALT_DOWN_MASK)) ) { + nReleasedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting 'N [Option+%s]' KEY_RELEASED, but got %s\n", modifierText, keyEvent); + } + continue; + } else if (!optionReleasedFound) { // Fifth, look for Option release + if ( (keyEvent.getID() == KeyEvent.KEY_RELEASED) && + (keyEvent.getKeyCode() == KeyEvent.VK_ALT) ) { + optionReleasedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting 'Option' KEY_RELEASED, but got %s\n", keyEvent); + } + continue; + } else if (!modifierReleasedFound) { // Sixth, look for Cmd/Ctrl release + if ( (keyEvent.getID() == KeyEvent.KEY_RELEASED) && + (keyEvent.getKeyCode() == modifierVk) ) { + modifierReleasedFound = true; + } else { + anyErrorOccurred = true; + System.err.printf("Error: expecting '%s' KEY_RELEASED, but got %s\n", modifierText, keyEvent); + } + continue; + } + + // Finally, any other events are excess + + anyErrorOccurred = true; + System.err.printf("Error: excess key event: %s\n", keyEvent); + } + + if (!modifierPressedFound) { + anyErrorOccurred = true; + System.err.printf("Error: '%s' KEY_PRESSED hasn't been found\n", modifierText); + } + if (!optionPressedFound) { + anyErrorOccurred = true; + System.err.printf("Error: 'Option' KEY_PRESSED hasn't been found\n"); + } + if (!nPressedFound) { + anyErrorOccurred = true; + System.err.printf("Error: 'N [Option+%s]' KEY_PRESSED hasn't been found\n", modifierText); + } + if (!nReleasedFound) { + anyErrorOccurred = true; + System.err.printf("Error: 'N [Option+%s]' KEY_RELEASED hasn't been found\n", modifierText); + } + if (!optionReleasedFound) { + anyErrorOccurred = true; + System.err.printf("Error: 'Option' KEY_RELEASED hasn't been found\n"); + } + if (!modifierReleasedFound) { + anyErrorOccurred = true; + System.err.printf("Error: '%s' KEY_RELEASED hasn't been found\n", modifierText); + } + + if (actionEventsCount != 1) { + anyErrorOccurred = true; + System.err.printf("Error: %d ActionEvents have arrived instead of 1\n", actionEventsCount); + } + + if (anyErrorOccurred) { + throw new RuntimeException("Test failed"); + } + } +} diff --git a/test/jdk/jb/java/jcef/HwFacadeWindowNoFrontTest.java b/test/jdk/jb/java/jcef/HwFacadeWindowNoFrontTest.java new file mode 100644 index 000000000000..fa39d855bc71 --- /dev/null +++ b/test/jdk/jb/java/jcef/HwFacadeWindowNoFrontTest.java @@ -0,0 +1,178 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.concurrent.Callable; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import javax.imageio.ImageIO; +import java.io.IOException; +import java.io.File; + +/** + * @test + * @key headful + * @requires (os.family == "windows") & (os.arch == "amd64" | os.arch == "x86_64") + * @summary JBR-2866 - Tests that HwFacade window used in IDEA does not bring to front when shown. + * @author Anton Tarasov + * @run main/othervm HwFacadeWindowNoFrontTest -verbose + */ + public class HwFacadeWindowNoFrontTest { + static final Color TRANSPARENT_COLOR = new Color(1, 1, 1, 0); + static final Color BG_COLOR = Color.red; + + static boolean verbose = false; + static volatile JFrame bottomFrame; + static volatile JFrame topFrame; + static volatile JWindow window; + + public static void main(String[] args) throws InterruptedException, AWTException, InvocationTargetException { + verbose = Arrays.asList(args).contains("-verbose"); + performAndWait(latch -> EventQueue.invokeLater(() -> showGUI(latch)), "initializing GUI"); + performAndWait(latch -> waitVisibilityChanged(window, latch, true), "waiting for the window to show"); + + Robot robot = new Robot(); + + // + // 1) Check window is below top frame + // + performAndRepeat(10, robot, "window is not below the top frame", () -> { + saveScreenShot(robot, "window is not below the top frame"); + Color pixel = robot.getPixelColor(topFrame.getX() + 100, topFrame.getY() + 100); + return !pixel.equals(BG_COLOR); + }); + + EventQueue.invokeLater(() -> topFrame.dispose()); + performAndWait(latch -> waitVisibilityChanged(topFrame, latch, false), "waiting for the top frame to dispose"); + + // + // 2) Check window is above bottom frame + // + performAndRepeat(10, robot, "window is not above the bottom frame", () -> { + saveScreenShot(robot, "window is not above the bottom frame"); + Color pixel = robot.getPixelColor(bottomFrame.getX() + 100, bottomFrame.getY() + 100); + return pixel.equals(BG_COLOR); + }); + + EventQueue.invokeLater(() -> { + bottomFrame.dispose(); + window.dispose(); + }); + + System.out.println("Test PASSED"); + } + + private static void saveScreenShot(Robot robot, String fileName) { + try { + ImageIO.write(robot.createScreenCapture(bottomFrame.getBounds()), "png", new File(fileName + ".png")); + } catch (IOException ignore) { + System.out.println("Couldn't store screen image: " + ignore.getMessage()) ; + } + } + + static void showGUI(CountDownLatch latch) { + bottomFrame = new JFrame("frame1"); + bottomFrame.setSize(400, 200); + bottomFrame.setLocationRelativeTo(null); + + window = new JWindow(bottomFrame); + window.add(new JPanel() { + { + setBackground(TRANSPARENT_COLOR); + } + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + g.setColor(BG_COLOR); + g.fillRect(0, 0, window.getWidth(), window.getHeight()); + } + }); + setIgnoreMouseEvents(window); + window.setBackground(TRANSPARENT_COLOR); + window.setSize(500, 300); + window.setLocationRelativeTo(null); + + topFrame = new JFrame("frame2"); + topFrame.setSize(400, 200); + topFrame.setLocationRelativeTo(null); + + // the order matters + bottomFrame.setVisible(true); + topFrame.setVisible(true); + window.setVisible(true); + + latch.countDown(); + } + + private static void waitVisibilityChanged(Window window, CountDownLatch latch, boolean shown) { + EventQueue.invokeLater(() -> { + boolean locationRetrieved = false; + try { + locationRetrieved = window.getLocationOnScreen() != null; + } catch (IllegalComponentStateException ignored) { + } + if (shown == !locationRetrieved) { + waitVisibilityChanged(window, latch, shown); + return; + } + latch.countDown(); + }); + } + + private static void setIgnoreMouseEvents(Window window) { + window.setEnabled(false); + try { + Method m = Window.class.getDeclaredMethod("setIgnoreMouseEvents", boolean.class); + m.setAccessible(true); + m.invoke(window, true); + } catch (Throwable ignore) { + } + } + + private static void performAndWait(Consumer performer, String errMsg) { + CountDownLatch latch = new CountDownLatch(1); + performer.accept(latch); + try { + if (!latch.await(2, TimeUnit.SECONDS)) { + throw new RuntimeException("Test ERROR: " + errMsg); + } + } catch (InterruptedException ignored) { + } + } + + private static void performAndRepeat(int count, Robot robot, String errMsg, Callable action) { + while (count-- >= 0) { + try { + if (action.call()) return; + robot.delay(50); + } catch (Exception ignored) { + } + } + throw new RuntimeException("Test ERROR: " + errMsg); + } +} diff --git a/test/jdk/jb/java/lang/System/SetEnv394.java b/test/jdk/jb/java/lang/System/SetEnv394.java new file mode 100644 index 000000000000..b510c1c605c2 --- /dev/null +++ b/test/jdk/jb/java/lang/System/SetEnv394.java @@ -0,0 +1,89 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.sun.jna.Library; +import com.sun.jna.Native; + + +/* @test + * @library ../../../lib/jna.jar + * @summary regression test on JRE-394. Actuall behaviour is to cache env on runtime classes loading + * @run main/othervm SetEnv394 + */ + +public class SetEnv394 { + + // Inside the Environment class... + public interface WinLibC extends Library { + int _putenv(String name); + } + + public interface LinuxLibC extends Library { + int setenv(String name, String value, int overwrite); + } + + static public class POSIX { + static Object libc; + + static { + if (System.getProperty("os.name").contains("Linux")) + libc = Native.loadLibrary("c", SetEnv394.LinuxLibC.class); + + else if (System.getProperty("os.name").contains("Mac OS X")) + libc = Native.loadLibrary("c", SetEnv394.LinuxLibC.class); + + else if (System.getProperty("os.name").contains("Windows")) + libc = Native.loadLibrary("msvcrt", SetEnv394.WinLibC.class); + + else + throw new RuntimeException("Unsupported OS: " + System.getProperty("os.name")); + } + + int setenv(String name, String value, int overwrite) { + if (libc instanceof SetEnv394.LinuxLibC) { + return ((SetEnv394.LinuxLibC) libc).setenv(name, value, overwrite); + } else { + return ((SetEnv394.WinLibC) libc)._putenv(name + "=" + value); + } + } + } + + private static SetEnv394.POSIX libc = new SetEnv394.POSIX(); + + private static final String ENV_VARIABLE = "V_394"; + private static final String ENV_VALUE = "VALUE394"; + + public static void main(String[] args) { + System.getenv(ENV_VARIABLE); // Cache environment variables + System.out.println("Setting env variable"); + + int result = libc.setenv(ENV_VARIABLE, ENV_VALUE, 1); + if (result != 0) + throw new RuntimeException("Setting was unsuccessful. Result: " + result); + + String setActualValue = System.getenv(ENV_VARIABLE); + if (setActualValue != null) + throw new RuntimeException("Actual value of the varibale \'" + ENV_VARIABLE + "\' is \'" + setActualValue + + "\', expecting null"); + } +} \ No newline at end of file diff --git a/test/jdk/jb/java/nio/file/spi/TestProvider.java b/test/jdk/jb/java/nio/file/spi/TestProvider.java new file mode 100644 index 000000000000..64537af2cb2a --- /dev/null +++ b/test/jdk/jb/java/nio/file/spi/TestProvider.java @@ -0,0 +1,492 @@ +/* + * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.FileAttributeView; +import java.nio.file.attribute.UserPrincipalLookupService; +import java.nio.file.spi.FileSystemProvider; +import java.nio.channels.FileChannel; +import java.nio.channels.SeekableByteChannel; +import java.net.URI; +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +public class TestProvider extends FileSystemProvider { + + private final FileSystemProvider defaultProvider; + private final TestFileSystem theFileSystem; + + public TestProvider(FileSystemProvider defaultProvider) { + this.defaultProvider = defaultProvider; + FileSystem fs = defaultProvider.getFileSystem(URI.create("file:/")); + this.theFileSystem = new TestFileSystem(fs, this); + } + + public FileSystemProvider defaultProvider() { + return defaultProvider; + } + + @Override + public String getScheme() { + return "file"; + } + + @Override + public FileSystem newFileSystem(URI uri, Map env) throws IOException { + return defaultProvider.newFileSystem(uri, env); + } + + @Override + public FileSystem getFileSystem(URI uri) { + return theFileSystem; + } + + @Override + public Path getPath(URI uri) { + Path path = defaultProvider.getPath(uri); + return theFileSystem.wrap(path); + } + + @Override + public void setAttribute(Path file, String attribute, Object value, + LinkOption... options) + throws IOException + { + throw new RuntimeException("not implemented"); + } + + @Override + public Map readAttributes(Path file, String attributes, + LinkOption... options) + throws IOException + { + Path delegate = theFileSystem.unwrap(file); + return defaultProvider.readAttributes(delegate, attributes, options); + } + + @Override + public A readAttributes(Path file, + Class type, + LinkOption... options) + throws IOException + { + Path delegate = theFileSystem.unwrap(file); + return defaultProvider.readAttributes(delegate, type, options); + } + + @Override + public V getFileAttributeView(Path file, + Class type, + LinkOption... options) + { + Path delegate = theFileSystem.unwrap(file); + return defaultProvider.getFileAttributeView(delegate, type, options); + } + + @Override + public void delete(Path file) throws IOException { + Path delegate = theFileSystem.unwrap(file); + defaultProvider.delete(delegate); + } + + @Override + public void createSymbolicLink(Path link, Path target, FileAttribute... attrs) + throws IOException + { + throw new RuntimeException("not implemented"); + } + + @Override + public void createLink(Path link, Path existing) throws IOException { + throw new RuntimeException("not implemented"); + } + + @Override + public Path readSymbolicLink(Path link) throws IOException { + Path delegate = theFileSystem.unwrap(link); + Path target = defaultProvider.readSymbolicLink(delegate); + return theFileSystem.wrap(target); + } + + @Override + public void copy(Path source, Path target, CopyOption... options) + throws IOException + { + throw new RuntimeException("not implemented"); + } + + @Override + public void move(Path source, Path target, CopyOption... options) + throws IOException + { + throw new RuntimeException("not implemented"); + } + + @Override + public DirectoryStream newDirectoryStream(Path dir, + DirectoryStream.Filter filter) + throws IOException + { + throw new RuntimeException("not implemented"); + } + + @Override + public void createDirectory(Path dir, FileAttribute... attrs) + throws IOException + { + Path delegate = theFileSystem.unwrap(dir); + defaultProvider.createDirectory(delegate, attrs); + } + + @Override + public SeekableByteChannel newByteChannel(Path file, + Set options, + FileAttribute... attrs) + throws IOException + { + Path delegate = theFileSystem.unwrap(file); + return defaultProvider.newByteChannel(delegate, options, attrs); + } + + @Override + public FileChannel newFileChannel(Path file, + Set options, + FileAttribute... attrs) + throws IOException + { + Path delegate = theFileSystem.unwrap(file); + return defaultProvider.newFileChannel(delegate, options, attrs); + } + + @Override + public boolean isHidden(Path file) throws IOException { + throw new ReadOnlyFileSystemException(); + } + + @Override + public FileStore getFileStore(Path file) throws IOException { + throw new RuntimeException("not implemented"); + } + + @Override + public boolean isSameFile(Path file, Path other) throws IOException { + throw new RuntimeException("not implemented"); + } + + @Override + public void checkAccess(Path file, AccessMode... modes) + throws IOException + { + throw new RuntimeException("not implemented"); + } + + static class TestFileSystem extends FileSystem { + private final FileSystem delegate; + private final TestProvider provider; + + TestFileSystem(FileSystem delegate, TestProvider provider) { + this.delegate = delegate; + this.provider = provider; + } + + Path wrap(Path path) { + return (path != null) ? new TestPath(this, path) : null; + } + + Path unwrap(Path wrapper) { + if (wrapper == null) + throw new NullPointerException(); + if (!(wrapper instanceof TestPath)) + throw new ProviderMismatchException(); + return ((TestPath)wrapper).unwrap(); + } + + @Override + public FileSystemProvider provider() { + return provider; + } + + @Override + public void close() throws IOException { + throw new RuntimeException("not implemented"); + } + + @Override + public boolean isOpen() { + return true; + } + + @Override + public boolean isReadOnly() { + return false; + } + + @Override + public String getSeparator() { + return delegate.getSeparator(); + } + + @Override + public Iterable getRootDirectories() { + throw new RuntimeException("not implemented"); + } + + @Override + public Iterable getFileStores() { + throw new RuntimeException("not implemented"); + } + + @Override + public Set supportedFileAttributeViews() { + return delegate.supportedFileAttributeViews(); + } + + @Override + public Path getPath(String first, String... more) { + Path path = delegate.getPath(first, more); + return wrap(path); + } + + @Override + public PathMatcher getPathMatcher(String syntaxAndPattern) { + return delegate.getPathMatcher(syntaxAndPattern); + } + + @Override + public UserPrincipalLookupService getUserPrincipalLookupService() { + return delegate.getUserPrincipalLookupService(); + } + + @Override + public WatchService newWatchService() throws IOException { + return delegate.newWatchService(); + } + } + + static class TestPath implements Path { + private final TestFileSystem fs; + private final Path delegate; + + TestPath(TestFileSystem fs, Path delegate) { + this.fs = fs; + this.delegate = delegate; + } + + Path unwrap() { + return delegate; + } + + @Override + public FileSystem getFileSystem() { + return fs; + } + + @Override + public boolean isAbsolute() { + return delegate.isAbsolute(); + } + + @Override + public Path getRoot() { + return fs.wrap(delegate.getRoot()); + } + + @Override + public Path getParent() { + return fs.wrap(delegate.getParent()); + } + + @Override + public int getNameCount() { + return delegate.getNameCount(); + } + + @Override + public Path getFileName() { + return fs.wrap(delegate.getFileName()); + } + + @Override + public Path getName(int index) { + return fs.wrap(delegate.getName(index)); + } + + @Override + public Path subpath(int beginIndex, int endIndex) { + return fs.wrap(delegate.subpath(beginIndex, endIndex)); + } + + @Override + public boolean startsWith(Path other) { + return delegate.startsWith(fs.unwrap(other)); + } + + @Override + public boolean startsWith(String other) { + return delegate.startsWith(other); + } + + @Override + public boolean endsWith(Path other) { + return delegate.endsWith(fs.unwrap(other)); + } + + @Override + public boolean endsWith(String other) { + return delegate.endsWith(other); + } + + @Override + public Path normalize() { + return fs.wrap(delegate.normalize()); + } + + @Override + public Path resolve(Path other) { + return fs.wrap(delegate.resolve(fs.unwrap(other))); + } + + @Override + public Path resolve(String other) { + return fs.wrap(delegate.resolve(other)); + } + + @Override + public Path resolveSibling(Path other) { + return fs.wrap(delegate.resolveSibling(fs.unwrap(other))); + } + + @Override + public Path resolveSibling(String other) { + return fs.wrap(delegate.resolveSibling(other)); + } + + @Override + public Path relativize(Path other) { + return fs.wrap(delegate.relativize(fs.unwrap(other))); + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof TestPath)) + return false; + return delegate.equals(fs.unwrap((TestPath) other)); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public URI toUri() { + String ssp = delegate.toUri().getSchemeSpecificPart(); + return URI.create(fs.provider().getScheme() + ":" + ssp); + } + + @Override + public Path toAbsolutePath() { + return fs.wrap(delegate.toAbsolutePath()); + } + + @Override + public Path toRealPath(LinkOption... options) throws IOException { + return fs.wrap(delegate.toRealPath(options)); + } + + @Override + public File toFile() { + return new File(toString()); + } + + @Override + public Iterator iterator() { + final Iterator itr = delegate.iterator(); + return new Iterator() { + @Override + public boolean hasNext() { + return itr.hasNext(); + } + @Override + public Path next() { + return fs.wrap(itr.next()); + } + @Override + public void remove() { + itr.remove(); + } + }; + } + + @Override + public int compareTo(Path other) { + return delegate.compareTo(fs.unwrap(other)); + } + + @Override + public WatchKey register(WatchService watcher, + WatchEvent.Kind[] events, + WatchEvent.Modifier... modifiers) + { + try { + Method registerMethod = delegate.getClass().getDeclaredMethod("register", + WatchService.class, + WatchEvent.Kind[].class, + WatchEvent.Modifier[].class); + registerMethod.setAccessible(true); + return (WatchKey)registerMethod.invoke(delegate, watcher, events, modifiers); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + throw new UnsupportedOperationException(e); + } + } + + @Override + public WatchKey register(WatchService watcher, + WatchEvent.Kind... events) + { + return register(watcher, events, new WatchEvent.Modifier[0]); + } + } + + private static final byte[] EMPTY_PATH = new byte[0]; + + public byte[] getSunPathForSocketFile(Path path) { + if (path.getNameCount() == 0) { + return EMPTY_PATH; + } + return path.toString().getBytes(StandardCharsets.UTF_8); + } +} diff --git a/test/jdk/jb/java/nio/file/spi/UnixSocketWithCustomProvider.java b/test/jdk/jb/java/nio/file/spi/UnixSocketWithCustomProvider.java new file mode 100644 index 000000000000..c713a7e84466 --- /dev/null +++ b/test/jdk/jb/java/nio/file/spi/UnixSocketWithCustomProvider.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023, JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Verifies that Unix domain sockets work with a non-default + * file system provider that implements + * @library /test/lib + * @build TestProvider + * @run main/othervm -Djava.nio.file.spi.DefaultFileSystemProvider=TestProvider UnixSocketWithCustomProvider + */ + +import java.io.IOException; +import java.net.StandardProtocolFamily; +import java.net.UnixDomainSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.spi.FileSystemProvider; + +public class UnixSocketWithCustomProvider { + public static void main(String[] args) { + FileSystemProvider provider = FileSystems.getDefault().provider(); + if (!provider.getClass().getName().equals("TestProvider")) { + throw new Error("Test must be run with non-default file system"); + } + + Path socketPath = Path.of("socket"); + UnixDomainSocketAddress socketAddress = UnixDomainSocketAddress.of(socketPath); + try (ServerSocketChannel serverCh = ServerSocketChannel.open(StandardProtocolFamily.UNIX)) { + serverCh.bind(socketAddress); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + Files.deleteIfExists(socketPath); + } catch (IOException ignore) { + } + } + } +} diff --git a/test/jdk/jb/java/nio/file/spi/WatchServiceWithCustomProvider.java b/test/jdk/jb/java/nio/file/spi/WatchServiceWithCustomProvider.java new file mode 100644 index 000000000000..eeda2d032291 --- /dev/null +++ b/test/jdk/jb/java/nio/file/spi/WatchServiceWithCustomProvider.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies that WatchService works with a custom default + * file system installed. + * @requires os.family == "mac" + * @library /test/lib/ + * @build TestProvider + * @modules java.base/sun.nio.fs:+open + * @run main/othervm -Djava.nio.file.spi.DefaultFileSystemProvider=TestProvider WatchServiceWithCustomProvider + */ + +import java.net.URI; +import java.nio.file.*; +import static java.nio.file.StandardWatchEventKinds.*; +import java.io.*; +import java.nio.file.spi.FileSystemProvider; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.Comparator; +import java.util.stream.Stream; + +import static com.sun.nio.file.ExtendedWatchEventModifier.*; + + +public class WatchServiceWithCustomProvider { + + final static String WATCH_ROOT_DIR_NAME = "watch-root"; + + static void checkKey(WatchKey key) { + if (!key.isValid()) + throw new RuntimeException("Key is not valid"); + } + + static void takeExpectedKey(WatchService watcher, WatchKey expected) { + System.out.println("take events..."); + WatchKey key; + try { + key = watcher.take(); + } catch (InterruptedException x) { + // not expected + throw new RuntimeException(x); + } + if (key != expected) + throw new RuntimeException("removed unexpected key"); + } + + static void checkExpectedEvent(Iterable> events, + WatchEvent.Kind expectedKind, + Object expectedContext) + { + WatchEvent event = events.iterator().next(); + System.out.format("got event: type=%s, count=%d, context=%s\n", + event.kind(), event.count(), event.context()); + if (event.kind() != expectedKind) + throw new RuntimeException("unexpected event"); + } + + /** + * Simple test of each of the standard events + */ + static void testEvents(FileSystem fs, Path dir) throws IOException { + System.out.println("-- Standard Events --"); + + Path subdir = dir.resolve("subdir"); + Files.createDirectories(subdir); + Path name = subdir.resolve("foo"); + + try (WatchService watcher = fs.newWatchService()) { + // --- ENTRY_CREATE --- + + // register for event + System.out.format("register %s for ENTRY_CREATE\n", dir); + WatchKey myKey = dir.register(watcher, + new WatchEvent.Kind[]{ ENTRY_CREATE }, FILE_TREE); + checkKey(myKey); + + // create file + Path file = subdir.resolve("foo"); + System.out.format("create %s\n", file); + Files.createFile(file); + + // remove key and check that we got the ENTRY_CREATE event + takeExpectedKey(watcher, myKey); + checkExpectedEvent(myKey.pollEvents(), + StandardWatchEventKinds.ENTRY_CREATE, name); + + System.out.println("reset key"); + if (!myKey.reset()) + throw new RuntimeException("key has been cancalled"); + + System.out.println("OKAY"); + + // --- ENTRY_DELETE --- + + System.out.format("register %s for ENTRY_DELETE\n", dir); + WatchKey deleteKey = dir.register(watcher, + new WatchEvent.Kind[]{ ENTRY_DELETE }, FILE_TREE); + if (deleteKey != myKey) + throw new RuntimeException("register did not return existing key"); + checkKey(deleteKey); + + System.out.format("delete %s\n", file); + Files.delete(file); + takeExpectedKey(watcher, myKey); + checkExpectedEvent(myKey.pollEvents(), + StandardWatchEventKinds.ENTRY_DELETE, name); + + System.out.println("reset key"); + if (!myKey.reset()) + throw new RuntimeException("key has been cancalled"); + + System.out.println("OKAY"); + + // create the file for the next test + Files.createFile(file); + + // --- ENTRY_MODIFY --- + + System.out.format("register %s for ENTRY_MODIFY\n", dir); + WatchKey newKey = dir.register(watcher, + new WatchEvent.Kind[]{ ENTRY_MODIFY }, FILE_TREE); + if (newKey != myKey) + throw new RuntimeException("register did not return existing key"); + checkKey(newKey); + + System.out.format("update: %s\n", file); + try (OutputStream out = Files.newOutputStream(file, StandardOpenOption.APPEND)) { + out.write("I am a small file".getBytes("UTF-8")); + } + + // remove key and check that we got the ENTRY_MODIFY event + takeExpectedKey(watcher, myKey); + checkExpectedEvent(myKey.pollEvents(), + StandardWatchEventKinds.ENTRY_MODIFY, name); + System.out.println("OKAY"); + + // done + Files.delete(file); + } + } + + public static void main(String[] args) throws IOException { + FileSystemProvider provider = ((TestProvider)FileSystems.getDefault().provider()).defaultProvider(); + FileSystem fs = provider.getFileSystem(URI.create("file:///")); // that would be some UnixFileSystem + Path dir = fs.getPath(WATCH_ROOT_DIR_NAME); + + try { + testEvents(fs, dir); + } finally { + removeAll(dir); + } + } + + static void removeAll(Path dir) throws IOException { + try (Stream files = Files.walk(dir)) { + files.sorted(Comparator.reverseOrder()).forEach(f -> { + try { Files.delete(f); } catch (IOException ignored) {} + }); + } + } +} diff --git a/test/jdk/jb/javax/crypto/Cipher/GetMaxAllowed638.java b/test/jdk/jb/javax/crypto/Cipher/GetMaxAllowed638.java new file mode 100644 index 000000000000..c8286d90c69a --- /dev/null +++ b/test/jdk/jb/javax/crypto/Cipher/GetMaxAllowed638.java @@ -0,0 +1,43 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.crypto.Cipher; + +/* + * @test + * @summary JRE-638 It checks unlimited cryptographic policy was enabled for JBRE by default + * @run main/othervm GetMaxAllowed638 + */ + +public class GetMaxAllowed638 { + + public static void main(String[] args) throws Exception { + + int maxKey = Cipher.getMaxAllowedKeyLength("RC5"); + if ( maxKey < Integer.MAX_VALUE) { + System.out.println("Cipher.getMaxAllowedKeyLength(\"RC5\"): " + maxKey); + throw new RuntimeException("unlimited policy is set by default, " + + Integer.MAX_VALUE + "(Integer.MAX_VALUE) is expected"); + } + } +} diff --git a/test/jdk/jb/javax/swing/CustomTitleBar/JFrameNativeControlsMacOSTest.java b/test/jdk/jb/javax/swing/CustomTitleBar/JFrameNativeControlsMacOSTest.java new file mode 100644 index 000000000000..4a2d566a7920 --- /dev/null +++ b/test/jdk/jb/javax/swing/CustomTitleBar/JFrameNativeControlsMacOSTest.java @@ -0,0 +1,232 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import com.apple.eawt.FullScreenListener; +import com.apple.eawt.FullScreenUtilities; +import com.apple.eawt.event.FullScreenEvent; +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; +import test.jb.testhelpers.TitleBar.TestUtils; +import test.jb.testhelpers.screenshot.ScreenShotHelpers; +import test.jb.testhelpers.screenshot.Rect; + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import java.awt.Robot; +import java.awt.event.*; +import java.awt.image.BufferedImage; +import java.util.List; + +/* + * @test + * @summary Detect and check behavior of clicking to native controls + * @requires (os.family == "mac") + * @library ../../../testhelpers/screenshot ../../../testhelpers/TitleBar + * @build TestUtils ScreenShotHelpers Rect RectCoordinates + * @modules java.desktop/com.apple.eawt + * java.desktop/com.apple.eawt.event + * @run main/othervm JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.0 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.0 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2.5 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.0 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3.5 JFrameNativeControlsMacOSTest + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=4.0 JFrameNativeControlsMacOSTest + */ +public class JFrameNativeControlsMacOSTest { + + private static WindowDecorations.CustomTitleBar titleBar; + private static JFrame jFrame; + private static WindowListener windowListener; + private static WindowStateListener windowStateListener; + private static FullScreenListener fullScreenListener; + + private static boolean closingActionCalled = false; + private static boolean iconifyingActionCalled = false; + private static volatile boolean maximizingActionDetected = false; + private static boolean deiconifyindActionDetected = false; + private static boolean passed = true; + private static String error = ""; + + private static Robot robot; + + public static void main(String... args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + try { + SwingUtilities.invokeAndWait(JFrameNativeControlsMacOSTest::prepareUI); + + robot.delay(500); + robot.mouseMove(jFrame.getLocationOnScreen().x + jFrame.getWidth() / 2, + jFrame.getLocationOnScreen().y + jFrame.getHeight() / 2); + robot.delay(500); + + BufferedImage image = ScreenShotHelpers.takeScreenshot(jFrame); + List foundControls = ScreenShotHelpers.findControls(image, jFrame, titleBar); + + if (foundControls.isEmpty()) { + System.out.println("Error: no controls found"); + } + foundControls.forEach(control -> { + System.out.println("Using control: " + control); + int x = jFrame.getLocationOnScreen().x + control.getX1() + (control.getX2() - control.getX1()) / 2; + int y = jFrame.getLocationOnScreen().y + control.getY1() + (control.getY2() - control.getY1()) / 2; + System.out.println("Click to (" + x + ", " + y + ")"); + + int screenX = jFrame.getBounds().x; + int screenY = jFrame.getBounds().y; + int h = jFrame.getBounds().height; + int w = jFrame.getBounds().width; + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + if (maximizingActionDetected) { + robot.keyPress(KeyEvent.VK_META); + robot.keyPress(KeyEvent.VK_CONTROL); + robot.keyPress(KeyEvent.VK_F); + robot.keyRelease(KeyEvent.VK_META); + robot.keyRelease(KeyEvent.VK_CONTROL); + robot.keyRelease(KeyEvent.VK_F); + robot.delay(500); + } + jFrame.setBounds(screenX, screenY, w, h); + jFrame.setVisible(true); + robot.waitForIdle(); + }); + } finally { + SwingUtilities.invokeAndWait(JFrameNativeControlsMacOSTest::disposeUI); + } + + if (!maximizingActionDetected) { + err("maximizing action was not detected"); + } + + if (!closingActionCalled) { + err("closing action was not detected"); + } + + if (!iconifyingActionCalled) { + err("iconifying action was not detected"); + } + if (!deiconifyindActionDetected) { + err("deiconifying action was not detected"); + } + if (!passed) { + System.out.println("TEST FAILED"); + } else { + System.out.println("TEST PASSED"); + } + } + + private static void prepareUI() { + titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TestUtils.TITLE_BAR_HEIGHT); + jFrame = TestUtils.createJFrameWithCustomTitleBar(titleBar); + + addWindowListener(); + addWindowStateListener(); + addMacOsFullScreenListener(); + jFrame.setVisible(true); + jFrame.setAlwaysOnTop(true); + jFrame.requestFocus(); + } + + private static void disposeUI() { + jFrame.removeWindowListener(windowListener); + jFrame.removeWindowStateListener(windowStateListener); + FullScreenUtilities.removeFullScreenListenerFrom(jFrame, fullScreenListener); + if (jFrame != null) { + jFrame.dispose(); + } + } + + private static void addWindowListener() { + windowListener = new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + closingActionCalled = true; + } + + @Override + public void windowIconified(WindowEvent e) { + iconifyingActionCalled = true; + + jFrame.setState(JFrame.NORMAL); + jFrame.setVisible(true); + jFrame.requestFocus(); + } + }; + jFrame.addWindowListener(windowListener); + } + + private static void addWindowStateListener() { + windowStateListener = new WindowAdapter() { + @Override + public void windowStateChanged(WindowEvent e) { + System.out.println("change " + e.getOldState() + " -> " + e.getNewState()); + if (e.getNewState() == 6) { + maximizingActionDetected = true; + } + if (e.getOldState() == 1 && e.getNewState() == 0) { + deiconifyindActionDetected = true; + } + } + }; + jFrame.addWindowStateListener(windowStateListener); + } + + private static void addMacOsFullScreenListener() { + fullScreenListener = new FullScreenListener() { + @Override + public void windowEnteringFullScreen(FullScreenEvent fse) { + maximizingActionDetected = true; + } + + @Override + public void windowEnteredFullScreen(FullScreenEvent fse) { + } + + @Override + public void windowExitingFullScreen(FullScreenEvent fse) { + System.out.println("Exiting fullscreen"); + } + + @Override + public void windowExitedFullScreen(FullScreenEvent fse) { + System.out.println("Exited fullscreen"); + } + }; + FullScreenUtilities.addFullScreenListenerTo(jFrame, fullScreenListener); + } + + private static void err(String message) { + error = error + message + "\n"; + passed = false; + System.out.println(message); + } + +} diff --git a/test/jdk/jb/javax/swing/Frame/ExtendedFrameState.java b/test/jdk/jb/javax/swing/Frame/ExtendedFrameState.java new file mode 100644 index 000000000000..a67e06812593 --- /dev/null +++ b/test/jdk/jb/javax/swing/Frame/ExtendedFrameState.java @@ -0,0 +1,159 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies transitions between extended frame states + * @requires os.family == "linux" + * @run main ExtendedFrameState + */ + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import java.awt.Frame; +import java.awt.Robot; +import java.awt.Toolkit; +import java.lang.reflect.InvocationTargetException; + +public class ExtendedFrameState { + static final int DELAY_MS = 1000; + JFrame frame; + Robot robot = new Robot(); + + public static void main(String[] args) throws Exception { + var toolkit = Toolkit.getDefaultToolkit(); + if (toolkit.isFrameStateSupported(Frame.MAXIMIZED_HORIZ) + && toolkit.isFrameStateSupported(Frame.MAXIMIZED_VERT) + && toolkit.isFrameStateSupported(Frame.MAXIMIZED_BOTH)) { + var test = new ExtendedFrameState(); + + try { + test.prepare(); + test.execute(); + } finally { + test.dispose(); + } + } + } + + ExtendedFrameState() throws Exception { + } + + void prepare() { + runSwing(() -> { + frame = new JFrame("ExtendedFrameState"); + frame.setUndecorated(true); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + JPanel panel = new JPanel(); + panel.add(new JLabel("label text")); + frame.setContentPane(panel); + frame.pack(); + frame.setVisible(true); + }); + } + + void execute() { + setState(Frame.NORMAL); + assertStateIs(Frame.NORMAL); + + // NORMAL -> MAXIMIZED_VERT + setState(Frame.MAXIMIZED_VERT); + assertStateIs(Frame.MAXIMIZED_VERT); + + // MAXIMIZED_VERT -> NORMAL + setState(Frame.NORMAL); + assertStateIs(Frame.NORMAL); + + // NORMAL -> MAXIMIZED_HORIZ + setState(Frame.MAXIMIZED_HORIZ); + assertStateIs(Frame.MAXIMIZED_HORIZ); + + // MAXIMIZED_HORIZ -> MAXIMIZED_VERT + // This transition is not supported by the WM for some obscure reason + //setState(Frame.MAXIMIZED_VERT); + //assertStateIs(Frame.MAXIMIZED_VERT); + + // MAXIMIZED_VERT -> MAXIMIZED_HORIZ + setState(Frame.MAXIMIZED_HORIZ); + assertStateIs(Frame.MAXIMIZED_HORIZ); + + // MAXIMIZED_HORIZ -> NORMAL + setState(Frame.NORMAL); + assertStateIs(Frame.NORMAL); + + // NORMAL -> MAXIMIZED_BOTH + setState(Frame.MAXIMIZED_BOTH); + assertStateIs(Frame.MAXIMIZED_BOTH); + + // MAXIMIZED_BOTH -> MAXIMIZED_HORIZ + setState(Frame.MAXIMIZED_HORIZ); + assertStateIs(Frame.MAXIMIZED_HORIZ); + + // MAXIMIZED_HORIZ -> MAXIMIZED_BOTH + setState(Frame.MAXIMIZED_BOTH); + assertStateIs(Frame.MAXIMIZED_BOTH); + + // MAXIMIZED_BOTH -> MAXIMIZED_VERT + setState(Frame.MAXIMIZED_VERT); + assertStateIs(Frame.MAXIMIZED_VERT); + + // MAXIMIZED_VERT -> NORMAL + setState(Frame.NORMAL); + assertStateIs(Frame.NORMAL); + } + + void setState(int state) { + runSwing(() -> { + frame.setExtendedState(state); + }); + robot.waitForIdle(); + robot.delay(DELAY_MS); + } + + void assertStateIs(int idealState) { + runSwing(() -> { + int realState = frame.getExtendedState(); + if (idealState != realState) { + throw new RuntimeException( + String.format("Expected frame state %d, got %d", idealState, realState)); + } + }); + } + + void dispose() { + runSwing(() -> { + frame.dispose(); + }); + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException e) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } +} diff --git a/test/jdk/jb/javax/swing/Frame/ResizeUndecorated.java b/test/jdk/jb/javax/swing/Frame/ResizeUndecorated.java new file mode 100644 index 000000000000..8f0919e7909f --- /dev/null +++ b/test/jdk/jb/javax/swing/Frame/ResizeUndecorated.java @@ -0,0 +1,156 @@ +/* + * Copyright 2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies transitions between extended frame states + * @requires os.family == "linux" + * @run main ResizeUndecorated + */ + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import java.awt.Frame; +import java.awt.Robot; +import java.awt.Toolkit; +import java.lang.reflect.InvocationTargetException; + +public class ResizeUndecorated { + static final int DELAY_MS = 1000; + JFrame frame; + Robot robot = new Robot(); + + public static void main(String[] args) throws Exception { + var toolkit = Toolkit.getDefaultToolkit(); + if (toolkit.isFrameStateSupported(Frame.MAXIMIZED_HORIZ) + && toolkit.isFrameStateSupported(Frame.MAXIMIZED_VERT) + && toolkit.isFrameStateSupported(Frame.MAXIMIZED_BOTH)) { + var test = new ResizeUndecorated(); + + try { + test.prepare(); + test.execute(); + } finally { + test.dispose(); + } + } + } + + ResizeUndecorated() throws Exception { + } + + void prepare() { + runSwing(() -> { + frame = new JFrame("Resize Undecorated Test"); + frame.setUndecorated(true); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + JPanel panel = new JPanel(); + panel.add(new JLabel("label text")); + frame.setContentPane(panel); + frame.pack(); + frame.setVisible(true); + }); + } + + void execute() { + setState(Frame.NORMAL); + assertStateIs(Frame.NORMAL); + + setState(Frame.MAXIMIZED_VERT); + assertStateIs(Frame.MAXIMIZED_VERT); + resizeFrame(10, 0); + + setState(Frame.NORMAL); + assertStateIs(Frame.NORMAL); + runSwing(() -> { + frame.setBounds(100, 100, 200, 300); + }); + + robot.waitForIdle(); + robot.delay(DELAY_MS); + + setState(Frame.MAXIMIZED_HORIZ); + assertStateIs(Frame.MAXIMIZED_HORIZ); + resizeFrame(0, 20); + } + + void resizeFrame(int dx, int dy) { + var bounds = frame.getBounds(); + runSwing(() -> { + frame.setBounds(bounds.x, bounds.y, bounds.width + dx, bounds.height + dy); + }); + robot.waitForIdle(); + robot.delay(DELAY_MS); + runSwing(() -> { + var newBounds = frame.getBounds(); + if (bounds.width + dx != newBounds.width) { + throw new RuntimeException( + String.format("Frame width after resize is %d, should be %d", + newBounds.width, + bounds.width + dx)); + } + + if (bounds.height + dy != newBounds.height) { + throw new RuntimeException( + String.format("Frame height after resize is %d, should be %d", + newBounds.height, + bounds.height + dy)); + } + }); + } + + void setState(int state) { + runSwing(() -> { + frame.setExtendedState(state); + }); + robot.waitForIdle(); + robot.delay(DELAY_MS); + } + + void assertStateIs(int idealState) { + runSwing(() -> { + int realState = frame.getExtendedState(); + if (idealState != realState) { + throw new RuntimeException( + String.format("Expected frame state %d, got %d", idealState, realState)); + } + }); + } + + void dispose() { + runSwing(() -> { + frame.dispose(); + }); + } + + private static void runSwing(Runnable r) { + try { + SwingUtilities.invokeAndWait(r); + } catch (InterruptedException e) { + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } +} diff --git a/test/jdk/jb/javax/swing/JComboBox/ComboBoxTransparentTittleBarTest.java b/test/jdk/jb/javax/swing/JComboBox/ComboBoxTransparentTittleBarTest.java new file mode 100644 index 000000000000..e7f458f23711 --- /dev/null +++ b/test/jdk/jb/javax/swing/JComboBox/ComboBoxTransparentTittleBarTest.java @@ -0,0 +1,148 @@ +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; + +import javax.swing.*; +import javax.swing.plaf.basic.BasicComboPopup; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/* + * @test + * @key headful + * @requires (os.family == "windows" | os.family == "mac") + * @summary JBR-4875 The test drag&drops a frame which contains an instance of JComboBox and checks that ComboBoxPopup + * does not become detached from its' control. The test performs checking for both cases when + * apple.awt.transparentTitleBar is not set and it is set to true. + * It is expected that x-coordinates for JFrame, JComboBox and ComboBoxPopup + * have the same values after dragging&dropping JFrame. + * @run main/timeout=600 ComboBoxTransparentTittleBarTest + */ +public final class ComboBoxTransparentTittleBarTest { + + private static final int SIZE = 300; + private static volatile Robot robot; + private static volatile JComboBox comboBox; + private static volatile JFrame frame; + private static final boolean[] titleBarTransparencies = {false, true}; + private static final int DRAG_X = 200; + private static final StringBuilder errMessages= new StringBuilder(); + private static int errCount = 0; + + private static final float TITLE_BAR_HEIGHT = 54f; + + public static void main(final String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(1000); + robot.setAutoWaitForIdle(true); + + for (boolean doTitleBarTransparent : titleBarTransparencies) { + EventQueue.invokeAndWait(() -> { + setup(doTitleBarTransparent); + }); + robot.waitForIdle(); + test(); + robot.waitForIdle(); + dispose(); + } + if (errCount > 0) + throw new RuntimeException(String.valueOf(errMessages)); + } + + private static void test() { + getLocationOnScreen(frame); + getLocationOnScreen(comboBox); + + BasicComboPopup popup = (BasicComboPopup) comboBox.getUI().getAccessibleChild(comboBox, 0); + popup.show(); + getLocationOnScreen(popup); + popup.hide(); + + int x_init = frame.getLocationOnScreen().x + frame.getWidth() / 2;; + int y_init = frame.getLocationOnScreen().y + 5; + System.out.print("Drag " + frame.getName() + " from: (" + x_init + ", " + y_init + ")"); + robot.mouseMove(x_init, y_init); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + + int x = x_init + DRAG_X; + for (int j = x_init; j < x; j += 5) { + robot.mouseMove(j, y_init); + robot.waitForIdle(); + } + + System.out.println(" and drop to: (" + x + ", " + y_init + ")"); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + + Point frameLocation = getLocationOnScreen(frame); + Point comboBoxLocation = getLocationOnScreen(comboBox); + + int errCount_before = errCount; + if (popup.isVisible()) { + System.out.println("ComboPopup is visible"); + Point popupLocation = popup.getLocationOnScreen(); + if (frameLocation.x - comboBoxLocation.x != 0) + appendErrMsg("***ComboBox location was not changed. Expected point: (" + frameLocation.x + ", " + comboBoxLocation.y + ")"); + if (frameLocation.x - popupLocation.x != 0) + appendErrMsg("***ComboPopup location was not changed. Expected point: (" + frameLocation.x + ", " + popupLocation.y + ")"); + } + if (errCount_before < errCount) + System.out.println("***FAILED***"); + if (errCount_before == errCount) + System.out.println("***PASSED***"); + } + + private static void appendErrMsg(String msg) { + errMessages.append(msg); + errCount += 1; + } + + private static void dispose() throws Exception { + EventQueue.invokeAndWait(() -> { + if (frame != null) { + frame.dispose(); + } + }); + } + + private static Point getLocationOnScreen(Component component) { + Point point = component.getLocationOnScreen(); + System.out.println(component.getName() + " location: (" + point.x + ", " + point.y + ")"); + return point; + } + private static void setup(boolean doTitleBarTransparent) { + comboBox = new JComboBox<>(); + comboBox.setName("ComboBox" + comboBox.hashCode()); + for (int i = 1; i < 7; i++) { + comboBox.addItem("some text in the item-" + i); + } + + frame = new JFrame(); + frame.setAlwaysOnTop(true); + frame.add(comboBox); + frame.pack(); + frame.setSize(frame.getWidth(), SIZE); + frame.setVisible(true); + System.out.println("------------------------------------"); + System.out.println("The case transparentTitleBar = " + doTitleBarTransparent); + if (doTitleBarTransparent) { + WindowDecorations.CustomTitleBar titleBar = JBR.getWindowDecorations().createCustomTitleBar(); + titleBar.setHeight(TITLE_BAR_HEIGHT); + JBR.getWindowDecorations().setCustomTitleBar(frame, titleBar); + + MouseListener mouseListener = new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + titleBar.forceHitTest(false); + } + }; + for (int i = 0; i < comboBox.getComponents().length; i++) { + comboBox.getComponent(i).addMouseListener(mouseListener); + } + + } + } +} diff --git a/test/jdk/jb/javax/swing/JDialog/JDialog1054.java b/test/jdk/jb/javax/swing/JDialog/JDialog1054.java new file mode 100644 index 000000000000..7ff070998c17 --- /dev/null +++ b/test/jdk/jb/javax/swing/JDialog/JDialog1054.java @@ -0,0 +1,273 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.imageio.ImageIO; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import java.awt.AWTException; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GraphicsEnvironment; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Window; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JRE-1054: Weird non-modal dialog above modal dialog behaviour + * @requires jdk.version.major >= 8 + * @run main JDialog1054 + */ + +/* + * Description: Test checks that modal dialog is shown above of non-modal dialog. + * Test opens non-modal dialog and then bigger modal dialog colored with sample color and located to cover non-modal one. + * Test captures part of the screen where non-modal dialog is located and checks if it is colored with the sample color. + * + * Note: In case of running the test on remote desktop or vm use the same screen resolution as for your primary monitor. + * On MacOS 10.14 and later accessibility permission should be granted for the application launching this test, so + * Java Robot is able to access keyboard (use System Preferences -> Security & Privacy -> Privacy tab -> Accessibility). + */ + +public class JDialog1054 { + + private static Robot robot; + + /* + * Checks if all pixels of the image are colored with the same sample color + */ + private static boolean checkImage(BufferedImage screenImage, Color expectedColor) { + + final int expectedRGB = expectedColor.getRGB(); + + for (int x = 0; x < screenImage.getWidth(); x++) { + for (int y = 0; y < screenImage.getHeight(); y++) { + int actualRGB = screenImage.getRGB(x, y); + if (actualRGB != expectedRGB) { + System.err.println("Wrong rgb value: " + Integer.toHexString(actualRGB) + " != " + + Integer.toHexString(expectedRGB) + " at (" + x + ", " + y + ")"); + return false; + } + } + } + return true; + } + + /* + * Tests that modal dialog is shown above of non-modal dialog. + * Checks two cases: + * 1) non-modal dialog is focused when opening modal dialog + * 2) owner frame is focused when opening modal dialog + */ + private static boolean test(boolean nonModalDialogIsFocused) throws InvocationTargetException, InterruptedException { + + System.out.println("Test for the case when \"non-modal dialog is focused\" = " + nonModalDialogIsFocused + ":"); + + final int size = 100; + final int pause = 2000; + final int timeout = pause*10; + final int indent = size/4; + // Use black color trying to avoid transparency effects + final Color sampleColor = Color.BLACK; + + final JFrame owner = new JFrame("Owner"); + final JDialog nonModalDialog = new JDialog(owner, "Non-modal Dialog"); + final JDialog modalDialog = new JDialog(owner, "Modal Dialog", true); + final JButton nonModalDialogButton = new JButton("screen area to capture"); + + // Non-modal dialog is smaller than modal dialog, + // So non-modal is completely covered by modal when it appears + final Dimension nonModalDim = new Dimension(2*size, size); + final Dimension modalDim = new Dimension(4*size, 2*size); + final Dimension ownerDim = new Dimension(6*size, 4*size); + + final Point nonModalLoc = new Point(size + 2*indent, size + 2*indent); + final Point modalLoc = new Point(size + indent, size + indent); + final Point ownerLoc = new Point(size, size); + + final CountDownLatch nonModalDialogGainedFocus = new CountDownLatch(1); + final CountDownLatch modalDialogGainedFocus = new CountDownLatch(1); + final CountDownLatch ownerGainedFocus = new CountDownLatch(1); + + final WindowAdapter focusListener = new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + Window window = e.getWindow(); + if (window == nonModalDialog) { + nonModalDialogGainedFocus.countDown(); + } else if (window == modalDialog) { + modalDialogGainedFocus.countDown(); + } else if (window == owner) { + ownerGainedFocus.countDown(); + } + } + }; + + final Runnable frameRunner = () -> { + owner.setLocation(ownerLoc); + owner.setSize(ownerDim); + owner.setVisible(true); + }; + + final Runnable nonModalDialogRunner = () -> { + nonModalDialog.setLocation(nonModalLoc); + nonModalDialog.setSize(nonModalDim); + nonModalDialog.getContentPane().add(nonModalDialogButton, BorderLayout.CENTER); + nonModalDialog.addWindowFocusListener(focusListener); + nonModalDialog.setVisible(true); + }; + + final Runnable modalDialogRunner = () -> { + modalDialog.setLocation(modalLoc); + modalDialog.setSize(modalDim); + // Paint the whole non-modal dialog pane over with the same sample color + modalDialog.getContentPane().setBackground(sampleColor); + modalDialog.addWindowFocusListener(focusListener); + modalDialog.setVisible(true); + }; + + final Runnable frameFocusRequester = () -> { + owner.addWindowFocusListener(focusListener); + owner.requestFocus(); + }; + + final Runnable disposeRunner = () -> { + owner.removeWindowFocusListener(focusListener); + modalDialog.removeWindowFocusListener(focusListener); + nonModalDialog.removeWindowFocusListener(focusListener); + modalDialog.dispose(); + nonModalDialog.dispose(); + owner.dispose(); + }; + + try { + System.out.println("Open owner frame and non-modal dialog"); + SwingUtilities.invokeLater(frameRunner); + // Wait for a while to improve the visibility of the test run + Thread.sleep(pause); + SwingUtilities.invokeLater(nonModalDialogRunner); + if(!nonModalDialogGainedFocus.await(timeout, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("Test ERROR: Cannot focus on non-modal dialog"); + } + System.out.println("Non-modal dialog gained focus"); + // Wait for a while to improve the visibility of the test run + Thread.sleep(pause); + + if (!nonModalDialogIsFocused) { + System.out.println("Request focus to the owner frame"); + SwingUtilities.invokeLater(frameFocusRequester); + if(!ownerGainedFocus.await(timeout, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("Test ERROR: Cannot focus on owner frame"); + } + System.out.println("Owner frame gained focus"); + // Wait for a while to improve the visibility of the test run + Thread.sleep(pause); + } + + System.out.println("Open modal dialog"); + SwingUtilities.invokeLater(modalDialogRunner); + if(!modalDialogGainedFocus.await(timeout, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("Test ERROR: Cannot focus on modal dialog"); + } + System.out.println("Modal dialog gained focus"); + // Wait for a while before screen capture so any graphic effects appear + Thread.sleep(pause); + + // Capture only non-modal dialog button area + Rectangle capture = new Rectangle(nonModalDialogButton.getLocationOnScreen(), nonModalDialogButton.getSize()); + BufferedImage sampleImage = robot.createScreenCapture(capture); + + // Wait for robot to complete image buffering + robot.waitForIdle(); + + System.out.println("Check if modal dialog is shown on top of other windows"); + // Non-modal dialog button area should be all colored with the sample color, + // As non-modal dialog should be completely covered by modal one + boolean result = checkImage(sampleImage, sampleColor); + if (result) { + System.out.println("Test case PASSED\n"); + } else { + Rectangle ownerArea = new Rectangle(owner.getLocationOnScreen(), owner.getSize()); + Rectangle nonModalArea = new Rectangle(nonModalDialog.getLocationOnScreen(), nonModalDialog.getSize()); + Rectangle modalArea = new Rectangle(modalDialog.getLocationOnScreen(), modalDialog.getSize()); + System.out.println("Captured screen area: " + capture); + System.out.println("Non-modal dialog location: " + nonModalArea); + System.out.println("Modal dialog location: " + modalArea); + System.out.println("Owner frame location: " + ownerArea); + + // Capture the whole picture: owner frame and both dialogs + BufferedImage fullImage = robot.createScreenCapture(ownerArea); + String imageName = JDialog1054.class.getName() + + ((nonModalDialogIsFocused) ? "_dialogFocused" : "_frameFocused"); + String format = "bmp"; + try { + ImageIO.write(sampleImage, format, new File(imageName + "." + format)); + ImageIO.write(fullImage, format, new File(imageName + "_full." + format)); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + System.err.println("Test case FAILED: Modal dialog is not on the top of other windows\n"); + } + return result; + + } finally { + SwingUtilities.invokeAndWait(disposeRunner); + // Waiting for EDT auto-shutdown + Thread.sleep(pause); + } + } + + public static void main(String[] args) throws InvocationTargetException, InterruptedException { + + if (GraphicsEnvironment.isHeadless()) { + throw new RuntimeException("ERROR: Cannot execute the test in headless environment"); + } + + try { + robot = new Robot(); + } catch (AWTException awtException) { + throw new RuntimeException("ERROR: Cannot create Robot", awtException); + } + + boolean nonModalDialogFocusedRes = test(true); + boolean frameFocusedRes = test(false); + + if (nonModalDialogFocusedRes && frameFocusedRes) { + System.out.println("Test PASSED"); + } else { + throw new RuntimeException("Test FAILED: Some test cases have not passed"); + } + } +} diff --git a/test/jdk/jb/javax/swing/JDialog/JDialog186.java b/test/jdk/jb/javax/swing/JDialog/JDialog186.java new file mode 100644 index 000000000000..c10049142aeb --- /dev/null +++ b/test/jdk/jb/javax/swing/JDialog/JDialog186.java @@ -0,0 +1,199 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Point; +import java.awt.Robot; +import java.awt.event.WindowEvent; +import java.awt.event.WindowFocusListener; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.io.IOException; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JTextArea; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; + +/* @test + * @summary regression test on JRE-186 Modal dialogs (Messages) shouldn't popup IDEA when another application is active + * @run main/othervm/timeout=360 JDialog186 + */ + +public class JDialog186 { + + private static JFrame frame = new JFrame("JDialog186"); + private static JDialog dialog; + private static Process process; + static final Object lock = new Object(); + + private static Runnable modalDialogThread = new Runnable() { + @Override + public void run() { + dialog = new JDialog(frame, true); + dialog.setTitle("Modal input"); + dialog.getContentPane().add(new JTextArea()); + dialog.setLocation(new Point(20, 100)); + dialog.setSize(350, 100); + dialog.setVisible(true); + } + }; + + private static MainWindowFocusListener focusListener = new MainWindowFocusListener(); + private static String javaExecutable = System.getProperty("java.home") + File.separatorChar + "bin" + File.separatorChar + "java"; + + + static class MainWindowFocusListener implements WindowFocusListener { + @Override + public void windowGainedFocus(WindowEvent windowEvent) { + synchronized (lock) { + lock.notifyAll(); + } + } + + @Override + public void windowLostFocus(WindowEvent windowEvent) { + frame.removeWindowFocusListener(focusListener); + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + + } + synchronized (lock) { + lock.notifyAll(); + } + } + } + + private static void checkAuxProcess() { + new Thread(() -> { + try { + process.waitFor(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + process.getErrorStream(); + String line; + BufferedReader input = new BufferedReader(new InputStreamReader(process.getErrorStream())); + try { + while ((line = input.readLine()) != null) { + System.out.println(line); + } + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (process.exitValue() == 1) { + System.err.println("Error: Could not launch auxiliary application"); + System.exit(1); + } + }).start(); + } + + public static void main(String[] args) throws Exception { + frame.setSize(400, 400); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + try { + frame.addWindowFocusListener(focusListener); + frame.setVisible(true); + synchronized (lock) { + while (!frame.isFocused()) { + try { + lock.wait(); + } catch (InterruptedException ignored) { + } + } + } + + System.out.println("launching helper"); + process = Runtime.getRuntime().exec(new String[]{javaExecutable, "-classpath", + System.getProperty("java.class.path"), "JDialog186Aux"}); + checkAuxProcess(); + + synchronized (lock) { + while (frame.isFocused()) { + try { + lock.wait(); + } catch (InterruptedException ignored) { + } + } + } + } catch (IOException e) { + e.printStackTrace(); + throw new RuntimeException(); + } + + SwingUtilities.invokeLater(modalDialogThread); + process.waitFor(); + dialog.dispose(); + frame.dispose(); + + if (process.exitValue() == 19) throw new RuntimeException("Modal Dialog expects TextArea to be empty"); + } +} + +class JDialog186Aux { + + private static final char[] expectedText = ",-./0123456789;=ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); + + private static JDialog186.MainWindowFocusListener focusListener = new JDialog186.MainWindowFocusListener(); + + public static void main(String[] args) throws Exception { + Robot robot = new Robot(); + robot.setAutoDelay(100); + + JFrame frame = new JFrame("JDialog186Aux"); + frame.addWindowFocusListener(focusListener); + JEditorPane editorPane = new JEditorPane(); + + frame.getContentPane().add(editorPane); + frame.setLocation(new Point(400, 0)); + frame.setSize(350, 100); + frame.addWindowFocusListener(focusListener); + frame.setVisible(true); + + synchronized (JDialog186.lock) { + while (!frame.isFocused()) { + try { + JDialog186.lock.wait(); + } catch (InterruptedException ignored) { + + } + } + } + int keyCode; + for (char c : expectedText) { + keyCode = KeyStroke.getKeyStroke((c), 0).getKeyCode(); + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + + frame.dispose(); + + if (!editorPane.getText().equals(new String(expectedText).toLowerCase())) System.exit(19); + } +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/JDialog/JDialog392.java b/test/jdk/jb/javax/swing/JDialog/JDialog392.java new file mode 100644 index 000000000000..6bfeec19e6bc --- /dev/null +++ b/test/jdk/jb/javax/swing/JDialog/JDialog392.java @@ -0,0 +1,219 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.imageio.ImageIO; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import java.awt.AWTException; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Robot; +import java.awt.Rectangle; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; + +/* @test + * @summary regression test on JRE-392 Tip of the day is not hidden while another modal window is shown + * @run main/othervm JDialog392 + */ + + +// The test displays two modal dialogs one by one +// and checks that the latest modal dialog would be on top of all windows +public class JDialog392 implements Runnable { + + private static JFrame frame = new JFrame("JDialog392"); + + private static boolean verbose = false; + private static boolean passed = true; + + static DialogThread modalDialogThread1; + + static DialogThread modalDialogThread2; + + static class DialogThread { + + JDialog dialog; + + private String dialogTitle; + private Point location; + private int width; + private int height; + private DialogListener eventListener; + + + DialogThread(String dialogTitle, Point location, int width, int height, DialogListener eventListener) { + this.dialogTitle = dialogTitle; + this.location = location; + this.width = width; + this.height = height; + this.eventListener = eventListener; + } + + void run() { + dialog = new JDialog(frame, true); + dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL); + dialog.setTitle(dialogTitle); + + dialog.setLocation(location); + dialog.setSize(width, height); + + if (eventListener != null) + dialog.addWindowListener(eventListener); + + dialog.setVisible(true); + } + + void removeWindowListener() { + dialog.removeWindowListener(eventListener); + } + } + + static abstract class DialogListener implements WindowListener { + + @Override + public void windowClosing(WindowEvent e) { + + } + + @Override + public void windowClosed(WindowEvent e) { + + } + + @Override + public void windowIconified(WindowEvent e) { + + } + + @Override + public void windowDeiconified(WindowEvent e) { + + } + + @Override + public void windowActivated(WindowEvent e) { + + } + + @Override + public void windowDeactivated(WindowEvent e) { + + } + } + + static class FirstDialogListener extends DialogListener { + @Override + public void windowOpened(WindowEvent windowEvent) { + modalDialogThread1.removeWindowListener(); + modalDialogThread2 = new DialogThread( + "Modal input 2", + new Point(5, 50), + 300, 200, + new SecondDialogListener()); + modalDialogThread2.run(); + } + } + + static class SecondDialogListener extends DialogListener { + @Override + public void windowOpened(WindowEvent windowEvent) { + try { + Robot robot = new Robot(); + Dimension shotSize = modalDialogThread2.dialog.getContentPane().getSize(); + Rectangle captureRect = new Rectangle(modalDialogThread2.dialog.getContentPane().getLocationOnScreen(), shotSize); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + BufferedImage screenImage = robot.createScreenCapture(captureRect); + + int rgb; + int expectedRGB = screenImage.getRGB((int) (shotSize.getWidth() / 2), (int) (shotSize.getHeight() / 2)) & 0x00FFFFFF; + + for (int col = 1; col < shotSize.getWidth(); col++) { + for (int row = 1; row < shotSize.getHeight()/2; row++) { + try { + // remove transparance + rgb = screenImage.getRGB(col, row) & 0x00FFFFFF; + + if (verbose) + System.out.print((rgb == expectedRGB) ? " ." : " " + Integer.toHexString(rgb)); + + passed = passed & (expectedRGB == rgb); + + } catch (ArrayIndexOutOfBoundsException e) { + throw new RuntimeException(e); + } + + } + if (verbose) + System.out.println(); + } + ImageIO.write(screenImage, "bmp", new File("test392.bmp")); + + if (!passed) + throw new RuntimeException("The second dialog window was not on top"); + + } catch (AWTException | IOException e) { + throw new RuntimeException(e); + } + modalDialogThread2.dialog.dispose(); + modalDialogThread1.dialog.dispose(); + frame.dispose(); + } + } + + public void run() { + frame.setSize(350, 300); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.setVisible(true); + + modalDialogThread1 = new DialogThread( + "Modal input 1", + new Point(10, 75), + 250, 150, + new FirstDialogListener()); + modalDialogThread1.run(); + } + + public static void main(String[] args) throws Exception { + JDialog392.verbose = Arrays.asList(args).contains("-verbose"); + try { + SwingUtilities.invokeAndWait(new JDialog392()); + } catch (InterruptedException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } +} diff --git a/test/jdk/jb/javax/swing/JDialog/JDialog705.java b/test/jdk/jb/javax/swing/JDialog/JDialog705.java new file mode 100644 index 000000000000..9ea7498225f1 --- /dev/null +++ b/test/jdk/jb/javax/swing/JDialog/JDialog705.java @@ -0,0 +1,205 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.imageio.ImageIO; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.Popup; +import javax.swing.PopupFactory; +import javax.swing.RootPaneContainer; +import javax.swing.SwingUtilities; +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Window; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +/* @test + * @summary regression test on JRE-705 Z-order of child windows is broken on Mac OS + * @run main/othervm JDialog705 + */ + +public class JDialog705 { + + private static Robot robot; + static { + try { + robot = new Robot(); + } catch (AWTException e1) { + e1.printStackTrace(); + } + } + + private static JFrame jFrame; + private static Window windowAncestor; + private static JDialog modalBlocker; + + public static void main(String[] args) throws Exception { + + SwingUtilities.invokeAndWait(() -> { + jFrame = new JFrame("Wrong popup z-order"); + jFrame.setSize(200, 200); + + JPanel jPanel = new JPanel(); + jPanel.setPreferredSize(new Dimension(200, 200)); + jPanel.setBackground(Color.BLACK); + + Popup popup = PopupFactory.getSharedInstance().getPopup(jFrame, jPanel, 100, 100); + windowAncestor = SwingUtilities.getWindowAncestor(jPanel); + ((RootPaneContainer) windowAncestor).getRootPane().putClientProperty("SIMPLE_WINDOW", true); + windowAncestor.setFocusable(true); + windowAncestor.setFocusableWindowState(true); + windowAncestor.setAutoRequestFocus(true); + + jFrame.setVisible(true); + popup.show(); + + + modalBlocker = new JDialog(windowAncestor, "Modal Blocker"); + modalBlocker.setModal(true); + modalBlocker.setSize(new Dimension(200, 200)); + modalBlocker.setLocation(200, 200); + modalBlocker.addWindowListener(new DialogListener()); + + modalBlocker.setVisible(true); + }); + } + + private static boolean checkImage(Container window, Dimension shotSize, int x, int y, int maxWidth, int maxHeight) { + + boolean result = true; + + System.out.println("checking for expectedX: " + x + "; expectedY: " + y); + System.out.println(" maxWidth: " + maxWidth + "; maxHeight: " + maxHeight); + + Rectangle captureRect = new Rectangle(window.getLocationOnScreen(), shotSize); + BufferedImage screenImage = robot.createScreenCapture(captureRect); + + int rgb; + int expectedRGB = screenImage.getRGB(x, y) & 0x00FFFFFF; + + System.out.println(" expected rgb value: " + Integer.toHexString(expectedRGB)); + for (int col = 1; col < maxWidth; col++) { + for (int row = 1; row < maxHeight; row++) { + // remove transparance + rgb = screenImage.getRGB(col, row) & 0x00FFFFFF; + + result = (expectedRGB == rgb); + if (expectedRGB != rgb) { + System.out.println("at row: " + row + "; col: " + col); + System.out.println(" expected rgb value: " + Integer.toHexString(expectedRGB)); + System.out.println(" actual rgb value: " + Integer.toHexString(rgb)); + break; + } + } + if (!result) break; + } + + try { + ImageIO.write(screenImage, "bmp", new File("test705" + window.getName() + ".bmp")); + } catch (IOException e1) { + e1.printStackTrace(); + } + + return result; + } + + static class DialogListener implements WindowListener { + + @Override + public void windowClosing(WindowEvent e) { + + } + + @Override + public void windowClosed(WindowEvent e) { + + } + + @Override + public void windowIconified(WindowEvent e) { + + } + + @Override + public void windowDeiconified(WindowEvent e) { + + } + + @Override + public void windowActivated(WindowEvent e) { + + } + + @Override + public void windowDeactivated(WindowEvent e) { + + } + + @Override + public void windowOpened(WindowEvent windowEvent) { + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + Dimension shotSize; + + shotSize = windowAncestor.getSize(); + int expectedX = (int) (shotSize.getWidth() / 4); + int expectedY = (int) (shotSize.getHeight() / 4); + int maxWidth = (int) (shotSize.getWidth() / 2); + int maxHeight = (int) (shotSize.getHeight() / 2); + boolean popupRes = checkImage(windowAncestor, shotSize, expectedX, expectedY, maxWidth, maxHeight); + + shotSize = modalBlocker.getContentPane().getSize(); + expectedX = (int) (shotSize.getWidth() / 2 + shotSize.getWidth() / 4); + expectedY = (int) (shotSize.getHeight() / 2 + shotSize.getHeight() / 4); + maxWidth = (int) (shotSize.getWidth()); + maxHeight = (int) (shotSize.getHeight()); + boolean modalBlockerRes = checkImage(modalBlocker.getContentPane(), shotSize, expectedX, + expectedY, maxWidth, maxHeight); + + String msg = ""; + + if (!popupRes) msg = "The popup must be above the frame."; + if (!modalBlockerRes) msg += "The modal blocker must be above the popup."; + + if (!popupRes || !modalBlockerRes) + throw new RuntimeException(msg); + + modalBlocker.dispose(); + jFrame.dispose(); + } + } +} diff --git a/test/jdk/jb/javax/swing/JEditorPane/LargeQuickDoc.java b/test/jdk/jb/javax/swing/JEditorPane/LargeQuickDoc.java new file mode 100644 index 000000000000..5b28cda397ea --- /dev/null +++ b/test/jdk/jb/javax/swing/JEditorPane/LargeQuickDoc.java @@ -0,0 +1,70 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.SwingUtilities; +import javax.swing.text.html.HTMLEditorKit; +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.Files; + +/* @test + * @bug 8151725 + * @summary regression test on JRE-9 + */ + +public class LargeQuickDoc { + + static private String getText() throws IOException { + return new String( + Files.readAllBytes( + FileSystems.getDefault().getPath( + System.getProperty("test.src", "."), "LargeQuickDoc.txt"))); + } + + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(() -> { + + JFrame f = new JFrame(); + JEditorPane editorPane = new javax.swing.JEditorPane("text/html", ""); + editorPane.setEditorKit(new HTMLEditorKit()); + editorPane.setEditable(false); + + JScrollPane scrollPane = new JScrollPane(editorPane); + scrollPane.setBorder(null); + + try { + editorPane.setText(getText()); + } catch (IOException | ArrayIndexOutOfBoundsException e) { + throw new RuntimeException(e); + } + + f.getContentPane().add(scrollPane); + f.setSize(500, 500); + f.setVisible(true); + }); + } +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/JEditorPane/LargeQuickDoc.txt b/test/jdk/jb/javax/swing/JEditorPane/LargeQuickDoc.txt new file mode 100644 index 000000000000..83c4a7880260 --- /dev/null +++ b/test/jdk/jb/javax/swing/JEditorPane/LargeQuickDoc.txt @@ -0,0 +1,6500 @@ +System
          global class String
          extends
          Object

          + + +
          +

          String Class

          + + + +
          +
          Contains methods for the String primitive data type.
          + +
          +

          Namespace

          +

          System

          +
          + +
          +

          Usage

          +

          For more information on Strings, see Primitive Data Types.

          +
          + +
          + +
          + +

          String Methods

          + + +
          +
          +

          The following are methods for String.

          +
          + +
          + + +
          + +

          abbreviate(maxWidth)

          + + + +
          +
          Returns an abbreviated version of the String, of the specified +length and with ellipses appended if the current String is longer +than the specified length; otherwise, returns the original String +without ellipses.
          + +
          +

          Signature

          +

          public String abbreviate(Integer maxWidth)

          +
          + +
          +

          Parameters

          +
          + +
          maxWidth
          + +
          Type: Integer +
          + +
          If maxWidth is less than four, this method +throws a run-time exception.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s = 'Hello Maximillian';
          +String s2 = s.abbreviate(8);
          +System.assertEquals('Hello...', s2);
          +System.assertEquals(8, s2.length());
          +
          + +
          + +
          +
          + +

          abbreviate(maxWidth, offset)

          + + + +
          +
          Returns an abbreviated version of the String, starting +at the specified character offset and of the specified length. The +returned String has ellipses appended at the start and the end if +characters have been removed at these locations.
          + +
          +

          Signature

          +

          public String abbreviate(Integer maxWidth, +Integer offset)

          +
          + +
          +

          Parameters

          +
          + +
          maxWidth
          + +
          Type: Integer +
          + +
          Note that the offset is not necessarily the leftmost character +in the returned String or the first character following the ellipses, +but it appears somewhere in the result. Regardless, abbreviate won’t return a +String of length greater than maxWidth.If maxWidth is too small, this method throws a run-time exception.
          + + + +
          offset
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s = 'Hello Maximillian';
          +// Start at M
          +String s2 = s.abbreviate(9,6);
          +System.assertEquals('...Max...', s2);
          +System.assertEquals(9, s2.length());
          +
          + +
          + +
          +
          + +

          capitalize()

          + + + +
          +
          Returns the current String with the first letter changed +to title case.
          + +
          +

          Signature

          +

          public String capitalize()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          This method is based on the Character.toTitleCase(char) Java method.

          +
          + +
          +

          Example

          +
          String s = 'hello maximillian';
          +String s2 = s.capitalize();
          +System.assertEquals('Hello maximillian', s2);
          +
          + +
          + +
          +
          + +

          center(size)

          + + + +
          +
          Returns a version of the current String of the specified +size padded with spaces on the left and right, so that it appears +in the center. If the specified size is smaller than the current String +size, the entire String is returned without added spaces.
          + +
          +

          Signature

          +

          public String center(Integer size)

          +
          + +
          +

          Parameters

          +
          + +
          size
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s = 'hello';
          +String s2 = s.center(9);
          +System.assertEquals(
          +   '  hello  ',
          +   s2);
          +
          + +
          + +
          +
          + +

          center(size, paddingString)

          + + + +
          +
          Returns a version of the current String of the specified +size padded with the specified String on the left and right, so that +it appears in the center. If the specified size is smaller than the +current String size, the entire String is returned without padding.
          + +
          +

          Signature

          +

          public String center(Integer size, String + paddingString)

          +
          + +
          +

          Parameters

          +
          + +
          size
          + +
          Type: Integer +
          + + + +
          paddingString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s = 'hello';
          +String s2 = s.center(9, '-');
          +System.assertEquals('hello', s2);
          +
          + +
          + +
          +
          + +

          charAt(index)

          + + + +
          +
          Returns the value of the character at +the specified index.
          + +
          +

          Signature

          +

          public Integer charAt(Integer index)

          +
          + +
          +

          Parameters

          +
          + +
          index
          + +
          Type: Integer +
          + +
          The index of the character to get the value of.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The integer value of the character.

          +
          + +
          +

          Usage

          +

          The charAt method returns the value of +the character pointed to by the specified index. If the index points +to the beginning of a surrogate pair (the high-surrogate code point), +this method returns only the high-surrogate code point. To return +the supplementary code point corresponding to a surrogate pair, call codePointAt instead.

          +
          + +
          +

          Example

          +

          This example gets the value of the +first character at index 0.

          +
          String str = 'Ω is Omega.';
          +System.assertEquals(937, str.charAt(0));
          +

          This example +shows the difference between charAt and codePointAt. The example +calls these methods on escaped supplementary Unicode characters. charAt(0) returns the high surrogate +value, which corresponds to \uD835. codePointAt(0) returns the value for +the entire surrogate pair.

          +
          String str = '\uD835\uDD0A';
          +System.assertEquals(55349, str.charAt(0),
          +    'charAt(0) didn\'t return the high surrogate.');
          +System.assertEquals(120074, str.codePointAt(0),
          +    'codePointAt(0) didn\'t return the entire two-character supplementary value.');
          +
          +
          + +
          + +
          +
          + +

          codePointAt(index)

          + + + +
          +
          Returns the Unicode code point value +at the specified index.
          + +
          +

          Signature

          +

          public Integer codePointAt(Integer index)

          +
          + +
          +

          Parameters

          +
          + +
          index
          + +
          Type: Integer +
          + +
          The index of the characters (Unicode code units) in the string. +The index range is from zero to the string length minus one.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The Unicode code point value at the specified index.

          +
          + +
          +

          Usage

          +

          If the index points to the beginning of a surrogate pair (the high-surrogate +code point), and the character value at the following index points +to the low-surrogate code point, this method returns the supplementary +code point corresponding to this surrogate pair. Otherwise, this method +returns the character value at the given index.

          +

          For more information +on Unicode and surrogate pairs, see The Unicode Consortium.

          +
          + +
          +

          Example

          +

          This example gets the code point +value of the first character at index 0, which is the escaped Omega +character. Also, the example gets the code point at index 20, which +corresponds to the escaped supplementary Unicode characters (a pair +of characters). Finally, it verifies that the escaped and unescaped +forms of Omega have the same code point values.

          +

          The supplementary +characters in this example (\\uD835\\uDD0A) correspond +to mathematical fraktur capital G: Mathemtical Fraktur Capital G symbol

          +
          String str = '\u03A9 is Ω (Omega), and \uD835\uDD0A ' +
          +    ' is Fraktur Capital G.';
          +System.assertEquals(937, str.codePointAt(0));
          +System.assertEquals(120074, str.codePointAt(20));
          +// Escaped or unescaped forms of the same character have the same code point
          +System.assertEquals(str.codePointAt(0), str.codePointAt(5));
          +
          +
          + +
          + +
          +
          + +

          codePointBefore(index)

          + + + +
          +
          Returns the Unicode code point value +that occurs before the specified index.
          + +
          +

          Signature

          +

          public Integer codePointBefore(Integer index)

          +
          + +
          +

          Parameters

          +
          + +
          index
          + +
          Type: Integer +
          + +
          The index before the Unicode code point that is to be returned. +The index range is from one to the string length.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The character or Unicode code point value that occurs before the +specified index.

          +
          + +
          +

          Usage

          +

          If the character value at index-1 is the low-surrogate +code point, and index-2 is not negative and the character at this index location +is the high-surrogate code point, this method returns the supplementary +code point corresponding to this surrogate pair. If the character +value at index-1 is an unpaired low-surrogate or high-surrogate code point, the surrogate +value is returned.

          +

          For more information on Unicode and surrogate +pairs, see The Unicode Consortium.

          +
          + +
          +

          Example

          +

          This example gets the code point +value of the first character (before index 1), which is the escaped +Omega character. Also, the example gets the code point at index 20, +which corresponds to the escaped supplementary characters (the two +characters before index 22).

          +
          String str = '\u03A9 is Ω (Omega), and \uD835\uDD0A ' +
          +    ' is Fraktur Capital G.';
          +System.assertEquals(937, str.codePointBefore(1));
          +System.assertEquals(120074, str.codePointBefore(22));
          +
          + +
          + +
          +
          + +

          codePointCount(beginIndex, endIndex)

          + + + +
          +
          Returns the number of Unicode code points +within the specified text range.
          + +
          +

          Signature

          +

          public Integer codePointCount(Integer beginIndex, +Integer endIndex)

          +
          + +
          +

          Parameters

          +
          + +
          beginIndex
          + +
          Type: Integer +
          + +
          The index of the first character in the range.
          + + + +
          endIndex
          + +
          Type: Integer +
          + +
          The index after the last character in the range.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The number of Unicode code points within the specified range.

          +
          + +
          +

          Usage

          +

          The specified range begins +at beginIndex and ends at endIndex—1. Unpaired surrogates +within the text range count as one code point each.

          +
          + +
          +

          Example

          +

          This example writes the count of +code points in a substring that contains an escaped Unicode character +and another substring that contains Unicode supplementary characters, +which count as one code point.

          +
          String str = '\u03A9 and \uD835\uDD0A characters.';
          +System.debug('Count of code points for ' + str.substring(0,1)
          +             + ': ' + str.codePointCount(0,1));
          +System.debug('Count of code points for ' + str.substring(6,8)
          +             + ': ' + str.codePointCount(6,8));
          +
          +// Output:
          +// Count of code points for Ω: 1
          +// Count of code points for 𝔊: 1
          +
          + +
          + +
          +
          + +

          compareTo(secondString)

          + + + +
          +
          Compares two strings lexicographically, based on the Unicode +value of each character in the Strings.
          + +
          +

          Signature

          +

          public Integer compareTo(String secondString)

          +
          + +
          +

          Parameters

          +
          + +
          secondString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          The result is:

          +
            +
          • A negative Integer if the String that called the method lexicographically precedes + secondString +
          • + +
          • A positive Integer if the String that called the method lexicographically follows + compsecondStringString +
          • + +
          • Zero if the Strings are equal
          • + +
          +

          If there is no index position at which the Strings differ, +then the shorter String lexicographically precedes the longer String.

          +

          Note that this method returns 0 whenever the equals method returns true.

          +
          + +
          +

          Example

          +
          String myString1 = 'abcde';
          +String myString2 = 'abcd';
          +Integer result =
          +   myString1.compareTo(myString2);
          +System.assertEquals(result, 1);
          +
          + +
          + +
          +
          + +

          contains(substring)

          + + + +
          +
          Returns true if and only if the String that + called the method contains the specified sequence of characters in + substring.
          + +
          +

          Signature

          +

          public Boolean contains(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          String myString1 = 'abcde';
          +String myString2 = 'abcd';
          +Boolean result =
          +   myString1.contains(myString2);
          +System.assertEquals(result, true);
          +
          + +
          + +
          +
          + +

          containsAny(inputString)

          + + + +
          +
          Returns true if +the current String contains any of the characters in the specified +String; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean containsAny(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          String s = 'hello';
          +Boolean b1 = s.containsAny('hx');
          +Boolean b2 = s.containsAny('x');
          +System.assertEquals(true, b1);
          +System.assertEquals(false, b2);
          +
          + +
          + +
          +
          + +

          containsIgnoreCase(substring)

          + + + +
          +
          Returns true if +the current String contains the specified sequence of characters without +regard to case; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean containsIgnoreCase(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          String s = 'hello';
          +Boolean b = s.containsIgnoreCase('HE');
          +System.assertEquals(
          +   true,
          +   b);
          +
          + +
          + +
          +
          + +

          containsNone(inputString)

          + + + +
          +
          Returns true if the current String doesn’t + contain any of the characters in the specified String; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean containsNone(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + +
          If inputString is an empty string or the current String is empty, this method + returns true. If inputString + is null, this method returns a run-time exception.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String s1 = 'abcde';
          +System.assert(s1.containsNone('fg'));
          + +
          + +
          + +
          +
          + +

          containsOnly(inputString)

          + + + +
          +
          Returns true if +the current String contains characters only from the specified sequence +of characters and not any other characters; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean containsOnly(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          String s1 = 'abba';
          +String s2 = 'abba xyz';
          +Boolean b1 =
          +   s1.containsOnly('abcd');
          +System.assertEquals(
          +   true,
          +   b1);
          +Boolean b2 =
          +   s2.containsOnly('abcd');
          +System.assertEquals(
          +   false,
          +   b2);
          +
          + +
          + +
          +
          + +

          containsWhitespace()

          + + + +
          +
          Returns true if +the current String contains any white space characters; otherwise, +returns false.
          + +
          +

          Signature

          +

          public Boolean containsWhitespace()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String s = 'Hello Jane';
          +System.assert(s.containsWhitespace()); //true
          +s = 'HelloJane ';
          +System.assert(s.containsWhitespace()); //true
          +s = ' HelloJane';
          +System.assert(s.containsWhitespace()); //true
          +s = 'HelloJane';
          +System.assert(!s.containsWhitespace()); //false
          + +
          + +
          + +
          +
          + +

          countMatches(substring)

          + + + +
          +
          Returns the number of times the specified substring occurs +in the current String.
          + +
          +

          Signature

          +

          public Integer countMatches(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          + + +
          String s = 'Hello Jane';
          +System.assertEquals(1, s.countMatches('Hello'));
          +s = 'Hello Hello';
          +System.assertEquals(2, s.countMatches('Hello'));
          +s = 'Hello hello';
          +System.assertEquals(1, s.countMatches('Hello'));
          + +
          + +
          + +
          +
          + +

          deleteWhitespace()

          + + + +
          +
          Returns a version of the current String with all white +space characters removed.
          + +
          +

          Signature

          +

          public String deleteWhitespace()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          String s1 = ' Hello Jane ';
          +String s2 = 'HelloJane';
          +System.assertEquals(s2, s1.deleteWhitespace());
          + +
          + +
          + +
          +
          + +

          difference(secondString)

          + + + +
          +
          Returns the difference between the current String and the +specified String.
          + +
          +

          Signature

          +

          public String difference(String secondString)

          +
          + +
          +

          Parameters

          +
          + +
          secondString
          + +
          Type: String +
          + +
          If secondString is an empty string, this method returns an empty string.If + secondString is null, this method throws a run-time + exception.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s = 'Hello Jane';
          +String d1 =
          +   s.difference('Hello Max');
          +System.assertEquals(
          +   'Max',
          +   d1);
          +String d2 =
          +   s.difference('Goodbye');
          +System.assertEquals(
          +   'Goodbye',
          +   d2);
          +
          + +
          + +
          +
          + +

          endsWith(suffix)

          + + + +
          +
          Returns true if +the String that called the method ends with the specified suffix.
          + +
          +

          Signature

          +

          public Boolean endsWith(String suffix)

          +
          + +
          +

          Parameters

          +
          + +
          suffix
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String s = 'Hello Jason';
          +System.assert(s.endsWith('Jason'));
          + +
          + +
          + +
          +
          + +

          endsWithIgnoreCase(suffix)

          + + + +
          +
          Returns true if +the current String ends with the specified suffix; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean endsWithIgnoreCase(String suffix)

          +
          + +
          +

          Parameters

          +
          + +
          suffix
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String s = 'Hello Jason';
          +System.assert(s.endsWithIgnoreCase('jason'));
          + +
          + +
          + +
          +
          + +

          equals(secondString)

          + + + +
          +
          Deprecated. This method is replaced by equals(stringOrId). Returns + true if the passed-in string is not null and + represents the same binary sequence of characters as the current string. Use this method to + perform case-sensitive comparisons.
          + +
          +

          Signature

          +

          public Boolean equals(String secondString)

          +
          + +
          +

          Parameters

          +
          + +
          secondString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Usage

          + +

          This method returns true when the compareTo method returns 0.

          +

          Use this method to perform case-sensitive comparisons. In contrast, the + == operator performs case-insensitive + string comparisons to match Apex + semantics.

          +
          + +
          +

          Example

          +
          String myString1 = 'abcde';
          +String myString2 = 'abcd';
          +Boolean result = myString1.equals(myString2);
          +System.assertEquals(result, false);
          +
          + +
          + +
          +
          + +

          equals(stringOrId)

          + + + +
          +
          Returns true if the + passed-in object is not null and represents the same binary sequence of characters as the + current string. Use this method to compare a string to an object that represents a string + or an ID.
          + +
          +

          Signature

          + + +

          public Boolean equals(Object stringOrId)

          + + +
          + +
          +

          Parameters

          + + +
          + +
          stringOrId
          + +
          Type: Object
          + + +
          + +
          + +
          +

          Return Value

          + + +

          Type: Boolean

          + +
          + +
          +

          Usage

          + + +

          If you compare ID values, the lengths of IDs don’t need to be equal. For example, if you + compare a 15-character ID string to an object that represents the equivalent + 18-character ID value, this method returns true. + For more information about 15-character and 18-character IDs, see the ID data type.

          + +

          Use this method to perform case-sensitive comparisons. In contrast, the + == operator performs case-insensitive + string comparisons to match Apex + semantics.

          + +
          + +
          +

          Example

          + + +

          These examples show comparisons between different types of variables with both equal and + unequal values. The examples also show how Apex automatically + converts certain values before comparing them.

          + +
          // Compare a string to an object containing a string
          +Object obj1 = 'abc';
          +String str = 'abc';
          +Boolean result1 = str.equals(obj1);
          +System.assertEquals(true, result1);
          +
          +// Compare a string to an object containing a number
          +Integer obj2 = 100;
          +Boolean result2 = str.equals(obj2);
          +System.assertEquals(false, result2);
          +
          +// Compare a string to an ID of the same length.
          +// 15-character ID
          +Id idValue15 = '001D000000Ju1zH';
          +// 15-character ID string value
          +String stringValue15 = '001D000000Ju1zH';
          +Boolean result3 = stringValue15.equals(IdValue15);
          +System.assertEquals(true, result3);
          +
          +// Compare two equal ID values of different lengths:
          +//  15-character ID and 18-character ID
          +Id idValue18 = '001D000000Ju1zHIAR';
          +Boolean result4 = stringValue15.equals(IdValue18);
          +System.assertEquals(true, result4);
          +
          + +
          + +
          + +
          +
          + +

          equalsIgnoreCase(secondString)

          + + + +
          +
          Returns true if the + secondString is not null and represents the same sequence of characters as the + String that called the method, ignoring case.
          + +
          +

          Signature

          +

          public Boolean equalsIgnoreCase(String secondString)

          +
          + +
          +

          Parameters

          +
          + +
          secondString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          String myString1 = 'abcd';
          +String myString2 = 'ABCD';
          +Boolean result =
          +myString1.equalsIgnoreCase(myString2);
          +System.assertEquals(result, true);
          +
          + +
          + +
          +
          + +

          escapeCsv()

          + + + +
          +
          Returns a String for a CSV column enclosed in double quotes, +if required.
          + +
          +

          Signature

          +

          public String escapeCsv()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          If the String contains a +comma, newline or double quote, the returned String is enclosed in +double quotes. Also, any double quote characters in the String are +escaped with another double quote.

          +

          If the String doesn’t +contain a comma, newline or double quote, it is returned unchanged.

          +
          + +
          +

          Example

          +
          String s1 = 'Max1, "Max2"';
          +String s2 = s1.escapeCsv();
          +System.assertEquals('"Max1, ""Max2"""', s2);
          +
          + +
          + +
          +
          + +

          escapeEcmaScript()

          + + + +
          +
          Escapes the characters in the String using EcmaScript String +rules.
          + +
          +

          Signature

          +

          public String escapeEcmaScript()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          + + +

          The only difference between Apex strings and + EcmaScript strings is that in EcmaScript, a single quote and forward-slash (/) are + escaped.

          + +
          + +
          +

          Example

          +
          String s1 = '"grade": 3.9/4.0';
          +String s2 = s1.escapeEcmaScript();
          +System.debug(s2);
          +// Output is:
          +// \"grade\": 3.9\/4.0
          +System.assertEquals(
          +   '\\"grade\\": 3.9\\/4.0',
          +    s2);
          +
          +
          + +
          + +
          +
          + +

          escapeHtml3()

          + + + +
          +
          Escapes the characters in a String using HTML 3.0 entities.
          + +
          +

          Signature

          + + +

          public String escapeHtml3()

          + + +
          + +
          +

          Return Value

          + + +

          Type: String

          + +
          + +
          +

          Example

          + + +
          String s1 =
          +   '"<Black&White>"';
          +String s2 =
          +   s1.escapeHtml3();
          +System.debug(s2);
          +// Output:
          +// &quot;&lt;Black&amp;
          +// White&gt;&quot;
          + +
          + +
          + +
          +
          + +

          escapeHtml4()

          + + + +
          +
          Escapes the characters in a String using HTML 4.0 entities.
          + +
          +

          Signature

          + + +

          public String escapeHtml4()

          + + +
          + +
          +

          Return Value

          + + +

          Type: String

          + +
          + +
          +

          Example

          + + +
          String s1 =
          +   '"<Black&White>"';
          +String s2 =
          +   s1.escapeHtml4();
          +System.debug(s2);
          +// Output:
          +// &quot;&lt;Black&amp;
          +// White&gt;&quot;
          + +
          + +
          + +
          +
          + +

          escapeJava()

          + + + +
          +
          Returns a String whose characters are escaped using Java +String rules. Characters escaped include quotes and control characters, +such as tab, backslash, and carriage return characters.
          + +
          +

          Signature

          +

          public String escapeJava()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +

          The escaped string.

          +
          + +
          +

          Example

          +
          // Input string contains quotation marks
          +String s = 'Company: "Salesforce.com"';
          +String escapedStr = s.escapeJava();
          +// Output string has the quotes escpaded
          +System.assertEquals('Company: \\"Salesforce.com\\"', escapedStr);
          +
          + +
          + +
          +
          + +

          escapeSingleQuotes(stringToEscape)

          + + + +
          +
          Returns a String with the escape character () added before +any single quotation marks in the String s.
          + +
          +

          Signature

          +

          public static String escapeSingleQuotes(String +stringToEscape)

          +
          + +
          +

          Parameters

          +
          + +
          stringToEscape
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          This method is useful when creating +a dynamic SOQL statement, to help prevent SOQL injection. For more +information on dynamic SOQL, see Dynamic SOQL.

          +
          + +
          +

          Example

          + + +
          String s = '\'Hello Jason\;
          +system.debug(s); // Outputs 'Hello Jason'
          +String escapedStr = String.escapeSingleQuotes(s);
          +// Outputs \'Hello Jason\'
          +system.debug(escapedStr);
          +// Escapes the string \\\' to string \'
          +system.assertEquals('\\\'Hello Jason\\\, escapedStr); 
          + +
          + +
          + +
          +
          + +

          escapeUnicode()

          + + + +
          +
          Returns a String whose Unicode characters are escaped to +a Unicode escape sequence.
          + +
          +

          Signature

          +

          public String escapeUnicode()

          +
          + +
          +

          Return Value

          +

          Type: String

          +

          The escaped string.

          +
          + +
          +

          Example

          +
          String s = 'De onde você é?';
          +String escapedStr = s.escapeUnicode();
          +System.assertEquals('De onde voc\\u00EA \\u00E9?', escapedStr);
          +
          + +
          + +
          +
          + +

          escapeXml()

          + + + +
          +
          Escapes the characters in a String using XML entities.
          + +
          +

          Signature

          +

          public String escapeXml()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          Supports only the five basic +XML entities (gt, lt, quot, amp, apos). Does not support DTDs or external +entities. Unicode characters greater than 0x7f are not escaped.

          +
          + +
          +

          Example

          +
          String s1 =
          +   '"<Black&White>"';
          +String s2 =
          +   s1.escapeXml();
          +System.debug(s2);
          +// Output:
          +// &quot;&lt;Black&amp;
          +// White&gt;&quot;
          +
          + +
          + +
          +
          + +

          format(stringToFormat, formattingArguments)

          + + + +
          +
          Treat the current string as a pattern that should be used +for substitution in the same manner as apex:outputText.
          + +
          +

          Signature

          +

          public static String format(String stringToFormat, +List<String> formattingArguments)

          +
          + +
          +

          Parameters

          +
          + +
          stringToFormat
          + +
          Type: String +
          + + + +
          formattingArguments
          + +
          Type: List<String>
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          String placeholder = 'Hello {0}, {1} is cool!';
          +List<String> fillers = new String[]{'Jason','Apex'};
          +String formatted = String.format(placeholder, fillers);
          +System.assertEquals('Hello Jason, Apex is cool!', formatted);
          + +
          + +
          + +
          +
          + +

          fromCharArray(charArray)

          + + + +
          +
          Returns a String from the values of the list of integers.
          + +
          +

          Signature

          +

          public static String fromCharArray(List<Integer> +charArray)

          +
          + +
          +

          Parameters

          +
          + +
          charArray
          + +
          Type: List<Integer>
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          List<Integer> charArr= new Integer[]{74};
          +String convertedChar = String.fromCharArray(charArr);
          +System.assertEquals('J', convertedChar);
          + +
          + +
          + +
          +
          + +

          getChars()

          + + + +
          +
          Returns an array of character values +that represent the characters in this string.
          + +
          +

          Signature

          +

          public List<Integer> getChars()

          +
          + +
          +

          Return Value

          +

          Type: List<String>

          +

          A list of integers, each corresponding to a character value in the +string.

          +
          + +
          +

          Example

          +

          This sample converts a string to +a character array and then gets the first array element, which corresponds +to the value of 'J'.

          +
          String str = 'Jane goes fishing.';
          +Integer[] chars = str.getChars();
          +// Get the value of 'J'
          +System.assertEquals(74, chars[0]);
          +
          + +
          + +
          +
          + +

          getCommonPrefix(strings)

          + + + +
          +
          Returns the initial sequence of characters as a String +that is common to all the specified Strings.
          + +
          +

          Signature

          +

          public static String getCommonPrefix(List<String> +strings)

          +
          + +
          +

          Parameters

          +
          + +
          strings
          + +
          Type: List<String>
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          List<String> ls = new List<String>{'SFDCApex', 'SFDCVisualforce'};
          +String prefix = String.getCommonPrefix(ls);
          +System.assertEquals('SFDC', prefix);
          +
          + +
          + +
          +
          + +

          getLevenshteinDistance(stringToCompare)

          + + + +
          +
          Returns the Levenshtein distance between the current String +and the specified String.
          + +
          +

          Signature

          +

          public Integer getLevenshteinDistance(String +stringToCompare)

          +
          + +
          +

          Parameters

          +
          + +
          stringToCompare
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          The Levenshtein distance +is the number of changes needed to change one String into another. +Each change is a single character modification (deletion, insertion +or substitution).

          +
          + +
          +

          Example

          +
          String s = 'Hello Joe';
          +Integer i = s.getLevenshteinDistance('Hello Max');
          +System.assertEquals(3, i);
          +
          + +
          + +
          +
          + +

          getLevenshteinDistance(stringToCompare, threshold)

          + + + +
          +
          Returns the Levenshtein distance between the current String +and the specified String if it is less than or equal than the given +threshold; otherwise, returns -1.
          + +
          +

          Signature

          +

          public Integer getLevenshteinDistance(String +stringToCompare, Integer threshold)

          +
          + +
          +

          Parameters

          +
          + +
          stringToCompare
          + +
          Type: String +
          + + + +
          threshold
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          The Levenshtein distance +is the number of changes needed to change one String into another. +Each change is a single character modification (deletion, insertion +or substitution).

          +

          Example:

          +

          In this example, the Levenshtein +distance is 3, but the threshold argument is 2, which is less than +the distance, so this method returns -1.

          +
          + +
          +

          Example

          +
          String s = 'Hello Jane';
          +Integer i = s.getLevenshteinDistance('Hello Max', 2);
          +System.assertEquals(-1, i);
          +
          + +
          + +
          +
          + +

          hashCode()

          + + + +
          +
          Returns a hash code value for this string.
          + +
          +

          Signature

          +

          public Integer hashCode()

          +
          + + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          This value is based on the +hash code computed by the Java String.hashCode counterpart method.

          +

          You can +use this method to simplify the computation of a hash code for a custom +type that contains String member variables. You can compute your type’s +hash code value based on the hash code of each String variable. For +example:

          +

          For more details about the use of hash code methods +with custom types, see Using Custom Types in Map Keys and Sets.

          +
          + +
          +

          Example

          +
          public class MyCustomClass {
          +   String x,y;
          +   // Provide a custom hash code
          +   public Integer hashCode() {
          +    return
          +    (31*x.hashCode())^(y.hashCode());
          +   }
          +}
          +
          + +
          + +
          +
          + +

          indexOf(substring)

          + + + +
          +
          Returns the index of the first occurrence of the specified +substring. If the substring does not occur, this method returns -1.
          + +
          +

          Signature

          +

          public Integer indexOf(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          + + +
          String myString1 = 'abcde';
          +String myString2 = 'cd';
          +Integer result = myString1.indexOf(mystring2);
          +System.assertEquals(2, result);
          + +
          + +
          + +
          +
          + +

          indexOf(substring, index)

          + + + +
          +
          Returns the zero-based index of the first occurrence of +the specified substring from the point of the given index. If the +substring does not occur, this method returns -1.
          + +
          +

          Signature

          +

          public Integer indexOf(String substring, Integer +index)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + + +
          index
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          +
          String myString1 = 'abcdabcd';
          +String myString2 = 'ab';
          +Integer result = myString1.indexOf(mystring2, 1);
          +System.assertEquals(4, result);
          +
          + +
          + +
          +
          + +

          indexOfAny(substring)

          + + + +
          +
          Returns the zero-based index of the first occurrence of +any character specified in the substring. If none of the characters +occur, returns -1.
          + +
          +

          Signature

          +

          public Integer indexOfAny(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          +
          String s1 = 'abcd';
          +String s2 = 'xc';
          +Integer result = s1.indexOfAny(s2);
          +System.assertEquals(2, result);
          +
          + +
          + +
          +
          + +

          indexOfAnyBut(substring)

          + + + +
          +
          Returns the zero-based index of the first occurrence of +a character that is not in the specified substring. Otherwise, returns +1.
          + +
          +

          Signature

          +

          public Integer indexOfAnyBut(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          +
          String s1 = 'abcd';
          +String s2 = 'xc';
          +Integer result = s1.indexOfAnyBut(s2);
          +System.assertEquals(0, result);
          +
          + +
          + +
          +
          + +

          indexOfChar(character)

          + + + +
          +
          Returns the index of the first occurrence +of the character that corresponds to the specified character value.
          + +
          +

          Signature

          +

          public Integer indexOfChar(Integer character)

          +
          + +
          +

          Parameters

          +
          + +
          character
          + +
          Type: Integer +
          + +
          The integer value of the character in the string.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The index of the first occurrence of the specified character, -1 +if the character is not found.

          +
          + +
          +

          Usage

          +

          The index that this method +returns is in Unicode code units.

          +
          + +
          +

          Example

          +
          String str = '\\u03A9 is Ω (Omega)';
          +// Returns 0, which is the first character.
          +System.debug('indexOfChar(937)=' + str.indexOfChar(937));
          +
          +// Output:
          +// indexOfChar(937)=0
          +
          +
          + +
          + +
          +
          + +

          indexOfChar(character, startIndex)

          + + + +
          +
          Returns the index of the first occurrence +of the character that corresponds to the specified character value, +starting from the specified index.
          + +
          +

          Signature

          +

          public Integer indexOfChar(Integer character, +Integer startIndex)

          +
          + +
          +

          Parameters

          +
          + +
          character
          + +
          Type: Integer +
          + +
          The integer value of the character to look for.
          + + + +
          startIndex
          + +
          Type: Integer +
          + +
          The index to start the search from.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The index, starting from the specified start index, of the first +occurrence of the specified character, -1 if the character is not +found.

          +
          + +
          +

          Usage

          +

          The index that this method +returns is in Unicode code units.

          +
          + +
          +

          Example

          +

          This example shows different ways +of searching for the index of the Omega character. The first call +to indexOfChar doesn’t +specify a start index and therefore the returned index is 0, which +is the first occurrence of Omega in the entire string. The subsequent +calls specify a start index to find the occurrence of Omega in substrings +that start at the specified index.

          +
          String str = 'Ω and \\u03A9 and Ω';
          +System.debug('indexOfChar(937)=' + str.indexOfChar(937));
          +System.debug('indexOfChar(937,1)=' + str.indexOfChar(937,1));
          +System.debug('indexOfChar(937,10)=' + str.indexOfChar(937,10));
          +
          +// Output:
          +// indexOfChar(937)=0
          +// indexOfChar(937,1)=6, (corresponds to the escaped form \\u03A9)
          +// indexOfChar(937,10)=12
          +
          +
          + +
          + +
          +
          + +

          indexOfDifference(stringToCompare)

          + + + +
          +
          Returns the zero-based index of the character where the +current String begins to differ from the specified String.
          + +
          +

          Signature

          +

          public Integer indexOfDifference(String stringToCompare)

          +
          + +
          +

          Parameters

          +
          + +
          stringToCompare
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          +
          String s1 = 'abcd';
          +String s2 = 'abxc';
          +Integer result = s1.indexOfDifference(s2);
          +System.assertEquals(2, result);
          +
          + +
          + +
          +
          + +

          indexOfIgnoreCase(substring)

          + + + +
          +
          Returns the zero-based index of the first occurrence of +the specified substring without regard to case. If the substring does +not occur, this method returns -1.
          + +
          +

          Signature

          +

          public Integer indexOfIgnoreCase(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          +
          String s1 = 'abcd';
          +String s2 = 'BC';
          +Integer result = s1.indexOfIgnoreCase(s2, 0);
          +System.assertEquals(1, result);
          +
          + +
          + +
          +
          + +

          indexOfIgnoreCase(substring, startPosition)

          + + + +
          +
          Returns the zero-based index of the first occurrence of +the specified substring from the point of index i, without regard to case. If the substring does not occur, this method +returns -1.
          + +
          +

          Signature

          +

          public Integer indexOfIgnoreCase(String substring, +Integer startPosition)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + + +
          startPosition
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          + +
          +
          + +

          isAllLowerCase()

          + + + +
          +
          Returns true if +all characters in the current String are lowercase; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isAllLowerCase()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String allLower = 'abcde';
          +System.assert(allLower.isAllLowerCase());
          + +
          + +
          + +
          +
          + +

          isAllUpperCase()

          + + + +
          +
          Returns true if +all characters in the current String are uppercase; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isAllUpperCase()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String allUpper = 'ABCDE';
          +System.assert(allUpper.isAllUpperCase());
          + +
          + +
          + +
          +
          + +

          isAlpha()

          + + + +
          +
          Returns true if +all characters in the current String are Unicode letters only; otherwise, +returns false.
          + +
          +

          Signature

          +

          public Boolean isAlpha()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          // Letters only
          +String s1 = 'abc';
          +// Returns true
          +Boolean b1 =
          +   s1.isAlpha();
          +System.assertEquals(
          +   true, b1);
          +
          +// Letters and numbers
          +String s2 = 'abc 21';
          +// Returns false
          +Boolean b2 =
          +   s2.isAlpha();
          +System.assertEquals(
          +   false, b2);
          +
          + +
          + +
          +
          + +

          isAlphaSpace()

          + + + +
          +
          Returns true if +all characters in the current String are Unicode letters or spaces +only; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isAlphaSpace()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String alphaSpace = 'aA Bb';
          +System.assert(alphaSpace.isAlphaSpace());
          +String notAlphaSpace = 'ab 12';
          +System.assert(!notAlphaSpace.isAlphaSpace());
          +notAlphaSpace = 'aA$Bb';
          +System.assert(!notAlphaSpace.isAlphaSpace());
          + +
          + +
          + +
          +
          + +

          isAlphanumeric()

          + + + +
          +
          Returns true if +all characters in the current String are Unicode letters or numbers +only; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isAlphanumeric()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          +
          // Letters only
          +String s1 = 'abc';
          +// Returns true
          +Boolean b1 =
          +   s1.isAlphanumeric();
          +System.assertEquals(
          +   true, b1);
          +
          +// Letters and numbers
          +String s2 = 'abc021';
          +// Returns true
          +Boolean b2 =
          +   s2.isAlphanumeric();
          +System.assertEquals(
          +   true, b2);
          +
          + +
          + +
          +
          + +

          isAlphanumericSpace()

          + + + +
          +
          Returns true if +all characters in the current String are Unicode letters, numbers, +or spaces only; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isAlphanumericSpace()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String alphanumSpace = 'AE 86';
          +System.assert(alphanumSpace.isAlphanumericSpace());
          +String notAlphanumSpace = 'aA$12';
          +System.assert(!notAlphanumSpace.isAlphaSpace());
          + +
          + +
          + +
          +
          + +

          isAsciiPrintable()

          + + + +
          +
          Returns true if +the current String contains only ASCII printable characters; otherwise, +returns false.
          + +
          +

          Signature

          +

          public Boolean isAsciiPrintable()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String ascii = 'abcd1234!@#$%^&*()`~-_+={[}]|:<,>.?';
          +System.assert(ascii.isAsciiPrintable());
          +String notAscii = '√';
          +System.assert(!notAscii.isAsciiPrintable());
          + +
          + +
          + +
          +
          + +

          isBlank(inputString)

          + + + +
          +
          Returns true if +the specified String is white space, empty (), or null; otherwise, +returns false.
          + +
          +

          Signature

          +

          public static Boolean isBlank(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String blank = ;
          +String nullString = null;
          +String whitespace = '  ';
          +System.assert(String.isBlank(blank));
          +System.assert(String.isBlank(nullString));
          +System.assert(String.isBlank(whitespace));
          +String alpha = 'Hello';
          +System.assert(!String.isBlank(alpha));
          + +
          + +
          + +
          +
          + +

          isEmpty(inputString)

          + + + +
          +
          Returns true if +the specified String is empty () or null; otherwise, returns false.
          + +
          +

          Signature

          +

          public static Boolean isEmpty(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String empty = ;
          +String nullString = null;
          +System.assert(String.isEmpty(empty));
          +System.assert(String.isEmpty(nullString));
          +String whitespace = '  ';
          +String alpha = 'Hello';
          +System.assert(!String.isEmpty(whitespace));
          +System.assert(!String.isEmpty(alpha));
          + +
          + +
          + +
          +
          + +

          isNotBlank(inputString)

          + + + +
          +
          Returns true if +the specified String is not whitespace, not empty (), and not null; +otherwise, returns false.
          + +
          +

          Signature

          +

          public static Boolean isNotBlank(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String alpha = 'Hello world!';
          +System.assert(String.isNotBlank(alpha));
          +String blank = ;
          +String nullString = null;
          +String whitespace = '  ';
          +System.assert(!String.isNotBlank(blank));
          +System.assert(!String.isNotBlank(nullString));
          +System.assert(!String.isNotBlank(whitespace));
          + +
          + +
          + +
          +
          + +

          isNotEmpty(inputString)

          + + + +
          +
          Returns true if +the specified String is not empty () and not null; otherwise, returns false.
          + +
          +

          Signature

          +

          public static Boolean isNotEmpty(String inputString)

          +
          + +
          +

          Parameters

          +
          + +
          inputString
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String whitespace = '  ';
          +String alpha = 'Hello world!';
          +System.assert(String.isNotEmpty(whitespace));
          +System.assert(String.isNotEmpty(alpha));
          +String empty = ;
          +String nullString = null;
          +System.assert(!String.isNotEmpty(empty));
          +System.assert(!String.isNotEmpty(nullString));
          + +
          + +
          + +
          +
          + +

          isNumeric()

          + + + +
          +
          Returns true if +the current String contains only Unicode digits; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isNumeric()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Usage

          +

          A decimal +point (1.2) is not a Unicode digit.

          +
          + +
          +

          Example

          + + +
          String numeric = '1234567890';
          +System.assert(numeric.isNumeric());
          +String alphanumeric = 'R32';
          +String decimalPoint = '1.2';
          +System.assert(!alphanumeric.isNumeric());
          +System.assert(!decimalpoint.isNumeric());
          + +
          + +
          + +
          +
          + +

          isNumericSpace()

          + + + +
          +
          Returns true if +the current String contains only Unicode digits or spaces; otherwise, +returns false.
          + +
          +

          Signature

          +

          public Boolean isNumericSpace()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Usage

          +

          A decimal point (1.2) is +not a Unicode digit.

          +
          + +
          +

          Example

          + + +
          String numericSpace = '1 2 3';
          +System.assert(numericSpace.isNumericspace());
          +String notNumericspace = 'FD3S FC3S';
          +System.assert(!notNumericspace.isNumericspace());
          + +
          + +
          + +
          +
          + +

          isWhitespace()

          + + + +
          +
          Returns true if the current String contains only + white space characters or is empty; otherwise, returns false.
          + +
          +

          Signature

          +

          public Boolean isWhitespace()

          +
          + + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String whitespace = ' ';
          +String blank = ;
          +System.assert(whitespace.isWhitespace());
          +System.assert(blank.isWhitespace());
          +String alphanum = 'SIL80';
          +System.assert(!alphanum.isWhitespace());
          + +
          + +
          + +
          +
          + +

          join(iterableObj, separator)

          + + + +
          +
          Joins the elements of the specified iterable object, such +as a List, into a single String separated by the specified separator.
          + +
          +

          Signature

          +

          public static String join(Object iterableObj, +String separator)

          +
          + +
          +

          Parameters

          +
          + +
          iterableObj
          + +
          Type: Object
          + + + +
          separator
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +
          List<Integer> li = new
          +   List<Integer>
          +   {10, 20, 30};
          +String s = String.join(
          +   li, '/');
          +System.assertEquals(
          +   '10/20/30', s);
          +
          + +
          + +
          +
          + +

          lastIndexOf(substring)

          + + + +
          +
          Returns the index of the last occurrence of the specified +substring. If the substring does not occur, this method returns -1.
          + +
          +

          Signature

          +

          public Integer lastIndexOf(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          + + +
          String s1 = 'abcdefgc';
          +Integer i1 = s1.lastIndexOf('c');
          +System.assertEquals(7, i1);
          + +
          + +
          + +
          +
          + +

          lastIndexOf(substring, endPosition)

          + + + +
          +
          Returns the index of the last occurrence of the specified +substring, starting from the character at index 0 and ending at the +specified index.
          + +
          +

          Signature

          +

          public Integer lastIndexOf(String substring, +Integer endPosition)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + + +
          endPosition
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          If the substring doesn’t occur +or endPosition is negative, this method returns +1. If endPosition is larger than the last index +in the current String, the entire String is searched.

          +
          + +
          +

          Example

          +
          String s1 = 'abcdaacd';
          +Integer i1 =
          +   s1.lastIndexOf('c', 7);
          +System.assertEquals(
          +   6, i1);
          +Integer i2 =
          +   s1.lastIndexOf('c', 3);
          +System.assertEquals(
          +   2, i2);
          +
          +
          + +
          + +
          +
          + +

          indexOfChar(character)

          + + + +
          +
          Returns the index of the last occurrence +of the character that corresponds to the specified character value.
          + +
          +

          Signature

          +

          public Integer indexOfChar(Integer character)

          +
          + +
          +

          Parameters

          +
          + +
          character
          + +
          Type: Integer +
          + +
          The integer value of the character in the string.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The index of the last occurrence of the specified character, -1 if +the character is not found.

          +
          + +
          +

          Usage

          +

          The index that this method +returns is in Unicode code units.

          +
          + +
          +

          Example

          +
          String str = '\u03A9 is Ω (Omega)';
          +// Get the last occurrence of Omega.
          +System.assertEquals(5, str.lastIndexOfChar(937));
          +
          + +
          + +
          +
          + +

          lastIndexOfChar(character, endIndex)

          + + + +
          +
          Returns the index of the last occurrence +of the character that corresponds to the specified character value, +starting from the specified index.
          + +
          +

          Signature

          +

          public Integer lastIndexOfChar(Integer character, +Integer endIndex)

          +
          + +
          +

          Parameters

          +
          + +
          character
          + +
          Type: Integer +
          + +
          The integer value of the character to look for.
          + + + +
          endIndex
          + +
          Type: Integer +
          + +
          The index to end the search at.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The index, starting from the specified start index, of the last occurrence +of the specified character. -1 if the character is not found.

          +
          + +
          +

          Usage

          +

          The index that this method +returns is in Unicode code units.

          +
          + +
          +

          Example

          +

          This example shows different ways +of searching for the index of the last occurrence of the Omega character. +The first call to lastIndexOfChar doesn’t specify an end index and therefore the returned index +is 12, which is the last occurrence of Omega in the entire string. +The subsequent calls specify an end index to find the last occurrence +of Omega in substrings.

          +
          String str = 'Ω and \u03A9 and Ω';
          +System.assertEquals(12, str.lastIndexOfChar(937));
          +System.assertEquals(6, str.lastIndexOfChar(937,11));
          +System.assertEquals(0, str.lastIndexOfChar(937,5));
          +
          + +
          + +
          +
          + +

          lastIndexOfIgnoreCase(substring)

          + + + +
          +
          Returns the index of the last occurrence of the specified +substring regardless of case.
          + +
          +

          Signature

          +

          public Integer lastIndexOfIgnoreCase(String +substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          If the substring doesn’t +occur, this method returns -1.

          +
          + +
          +

          Example

          +
          String s1 = 'abcdaacd';
          +Integer i1 =
          +   s1.lastIndexOfIgnoreCase('DAAC');
          +System.assertEquals(
          +   3, i1);
          +
          + +
          + +
          +
          + +

          lastIndexOfIgnoreCase(substring, endPosition)

          + + + +
          +
          Returns the index of the last occurrence of the specified +substring regardless of case, starting from the character at index +0 and ending at the specified index.
          + +
          +

          Signature

          +

          public Integer lastIndexOfIgnoreCase(String +substring, Integer endPosition)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + + +
          endPosition
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Usage

          +

          If the substring doesn’t occur +or endPosition is negative, this method returns +1. If endPosition is larger than the last index +in the current String, the entire String is searched.

          +
          + +
          +

          Example

          +
          String s1 = 'abcdaacd';
          +Integer i1 =
          +   s1.lastIndexOfIgnoreCase('C', 7);
          +System.assertEquals(
          +   6, i1);
          +
          + +
          + +
          +
          + +

          left(length)

          + + + +
          +
          Returns the leftmost characters of the current String of +the specified length.
          + +
          +

          Signature

          +

          public String left(Integer length)

          +
          + +
          +

          Parameters

          +
          + +
          length
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          If length is greater +than the String size, the entire String is returned.

          +
          + +
          +

          Example

          +
          String s1 = 'abcdaacd';
          +String s2 =
          +   s1.left(3);
          +System.assertEquals(
          +   'abc', s2);
          +
          + +
          + +
          +
          + +

          leftPad(length)

          + + + +
          +
          Returns the current String padded with spaces on the left +and of the specified length.
          + +
          +

          Signature

          +

          public String leftPad(Integer length)

          +
          + +
          +

          Parameters

          +
          + +
          length
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Usage

          +

          If length is less +than or equal to the current String size, the entire String is returned +without space padding.

          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'abc';
          +String s2 =
          +   s1.leftPad(5);
          +System.assertEquals(
          +   '  abc', s2);
          +
          + +
          + +
          +
          + +

          length()

          + + + +
          +
          Returns the number of 16-bit Unicode characters contained +in the String.
          + +
          +

          Signature

          +

          public Integer length()

          +
          + + +
          +

          Return Value

          +

          Type: Integer

          +
          + +
          +

          Example

          +
          String myString = 'abcd';
          +Integer result = myString.length();
          +System.assertEquals(result, 4);
          +
          + +
          + +
          +
          + +

          mid(startIndex, length)

          + + + +
          +
          Returns a new String that begins with the character at +the specified zero-based startIndex with the number +of characters specified by length.
          + +
          +

          Signature

          +

          public String mid(Integer startIndex, Integer +length)

          +
          + +
          +

          Parameters

          +
          + +
          startIndex
          + +
          Type: Integer +
          + +
          If startIndex is negative, it is considered +to be zero.
          + + + +
          length
          + +
          Type: Integer +
          + +
          If length is negative or zero, an empty String +is returned. If length is greater than the remaining +characters, the remainder of the String is returned.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          This method is similar to +the substring(startIndex) and substring(startIndex, endIndex) methods, +except that the second argument is the number of characters to return.

          +
          + +
          +

          Example

          +
          String s = 'abcde';
          +String s2 = s.mid(2, 3);
          +System.assertEquals(
          +   'cde', s2);
          +
          + +
          + +
          +
          + +

          normalizeSpace()

          + + + +
          +
          Returns the current String with leading, trailing, and +repeating white space characters removed.
          + +
          +

          Signature

          +

          public String normalizeSpace()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          This method normalizes the +following white space characters: space, tab (\t), new line (\n), +carriage return (\r), and form feed (\f).

          +
          + +
          +

          Example

          +
          String s1 =
          +   'Salesforce \t     force.com';
          +String s2 =
          +   s1.normalizeSpace();
          +System.assertEquals(
          +   'Salesforce force.com', s2);
          +
          + +
          + +
          +
          + +

          offsetByCodePoints(index, codePointOffset)

          + + + +
          +
          Returns the index of the Unicode code +point that is offset by the specified number of code points, starting +from the given index.
          + +
          +

          Signature

          +

          public Integer offsetByCodePoints(Integer index, +Integer codePointOffset)

          +
          + +
          +

          Parameters

          +
          + +
          index
          + +
          Type: Integer +
          + +
          The start index in the string.
          + + + +
          codePointOffset
          + +
          Type: Integer +
          + +
          The number of code points to be offset.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Integer

          +

          The index that corresponds to the start index that is added to the +offset.

          +
          + +
          +

          Usage

          +

          Unpaired surrogates within +the text range that is specified by index and codePointOffset count as one code point each.

          +
          + +
          +

          Example

          +

          This example calls offsetByCodePoints on a string with +a start index of 0 (to start from the first character) and an offset +of threee code points. The string contains one sequence of supplementary +characters in escaped form (a pair of characters). After an offset +of three code points when counting from the beginning of the string, +the returned code point index is four.

          +
          String str = 'A \uD835\uDD0A BC';
          +System.assertEquals(4, str.offsetByCodePoints(0,3));
          +
          + +
          + +
          +
          + +

          remove(substring)

          + + + +
          +
          Removes all occurrences of the specified substring and +returns the String result.
          + +
          +

          Signature

          +

          public String remove(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Salesforce and force.com';
          +String s2 =
          +   s1.remove('force');
          +System.assertEquals(
          +   'Sales and .com', s2);
          +
          + +
          + +
          +
          + +

          removeEnd(substring)

          + + + +
          +
          Removes the specified substring only if it occurs at the +end of the String.
          + +
          +

          Signature

          +

          public String removeEnd(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Salesforce and force.com';
          +String s2 =
          +   s1.removeEnd('.com');
          +System.assertEquals(
          +   'Salesforce and force', s2);
          +
          + +
          + +
          +
          + +

          removeEndIgnoreCase(substring)

          + + + +
          +
          Removes the specified substring only if it occurs at the +end of the String using a case-insensitive match.
          + +
          +

          Signature

          +

          public String removeEndIgnoreCase(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Salesforce and force.com';
          +String s2 =
          +   s1.removeEndIgnoreCase('.COM');
          +System.assertEquals(
          +   'Salesforce and force', s2);
          +
          + +
          + +
          +
          + +

          removeStart(substring)

          + + + +
          +
          Removes the specified substring only if it occurs at the +beginning of the String.
          + +
          +

          Signature

          +

          public String removeStart(String substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Salesforce and force.com';
          +String s2 =
          +   s1.removeStart('Sales');
          +System.assertEquals(
          +   'force and force.com', s2);
          +
          + +
          + +
          +
          + +

          removeStartIgnoreCase(substring)

          + + + +
          +
          Removes the specified substring only if it occurs at the +beginning of the String using a case-insensitive match.
          + +
          +

          Signature

          +

          public String removeStartIgnoreCase(String +substring)

          +
          + +
          +

          Parameters

          +
          + +
          substring
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Salesforce and force.com';
          +String s2 =
          +   s1.removeStartIgnoreCase('SALES');
          +System.assertEquals(
          +   'force and force.com', s2);
          +
          + +
          + +
          +
          + +

          repeat(numberOfTimes)

          + + + +
          +
          Returns the current String repeated the specified number +of times.
          + +
          +

          Signature

          +

          public String repeat(Integer numberOfTimes)

          +
          + +
          +

          Parameters

          +
          + +
          numberOfTimes
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'SFDC';
          +String s2 =
          +   s1.repeat(2);
          +System.assertEquals(
          +   'SFDCSFDC', s2);
          +
          + +
          + +
          +
          + +

          repeat(separator, numberOfTimes)

          + + + +
          +
          Returns the current String repeated the specified number +of times using the specified separator to separate the repeated Strings.
          + +
          +

          Signature

          +

          public String repeat(String separator, Integer + numberOfTimes)

          +
          + +
          +

          Parameters

          +
          + +
          separator
          + +
          Type: String +
          + + + +
          numberOfTimes
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'SFDC';
          +String s2 =
          +   s1.repeat('-', 2);
          +System.assertEquals(
          +   'SFDC-SFDC', s2);
          +
          + +
          + +
          +
          + +

          replace(target, replacement)

          + + + +
          +
          Replaces each substring of a string that matches the literal +target sequence target with the specified literal +replacement sequence replacement.
          + +
          +

          Signature

          +

          public String replace(String target, String +replacement)

          +
          + +
          +

          Parameters

          +
          + +
          target
          + +
          Type: String +
          + + + +
          replacement
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          String s1 = 'abcdbca';
          +String target = 'bc';
          +String replacement = 'xy';
          +String s2 = s1.replace(target, replacement);
          +System.assertEquals('axydxya', s2);
          + +
          + +
          + +
          +
          + +

          replaceAll(regExp, replacement)

          + + + +
          +
          Replaces each substring of a string that matches the regular +expression regExp with the replacement sequence replacement.
          + +
          +

          Signature

          +

          public String replaceAll(String regExp, String +replacement)

          +
          + +
          +

          Parameters

          +
          + +
          regExp
          + +
          Type: String +
          + + + +
          replacement
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          See the Java Pattern class for information on regular expressions.

          +
          + +
          +

          Example

          + + +
          String s1 = 'a b c 5 xyz';
          +String regExp = '[a-zA-Z]';
          +String replacement = '1';
          +String s2 = s1.replaceAll(regExp, replacement);
          +System.assertEquals('1 1 1 5 111', s2);
          + +
          + +
          + +
          +
          + +

          replaceFirst(regExp, replacement)

          + + + +
          +
          Replaces the first substring of a string that matches the +regular expression regExp with the replacement +sequence replacement.
          + +
          +

          Signature

          +

          public String replaceFirst(String regExp, String +replacement)

          +
          + +
          +

          Parameters

          +
          + +
          regExp
          + +
          Type: String +
          + + + +
          replacement
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          See the Java Pattern class for information on regular expressions.

          +
          + +
          +

          Example

          + + +
          String s1 = 'a b c 11 xyz';
          +String regExp = '[a-zA-Z]{2}';
          +String replacement = '2';
          +String s2 = s1.replaceFirst(regExp, replacement);
          +System.assertEquals('a b c 11 2z', s2);
          + +
          + +
          + +
          +
          + +

          reverse()

          + + + +
          +
          Returns a String with all the characters reversed.
          + +
          +

          Signature

          +

          public String reverse()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          + +
          +
          + +

          right(length)

          + + + +
          +
          Returns the rightmost characters of the current String +of the specified length.
          + +
          +

          Signature

          +

          public String right(Integer length)

          +
          + +
          +

          Parameters

          +
          + +
          length
          + +
          Type: Integer +
          + +
          If length is greater than the String size, +the entire String is returned.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Hello Max';
          +String s2 =
          +   s1.right(3);
          +System.assertEquals(
          +   'Max', s2);
          +
          + +
          + +
          +
          + +

          rightPad(length)

          + + + +
          +
          Returns the current String padded with spaces on the right +and of the specified length.
          + +
          +

          Signature

          +

          public String rightPad(Integer length)

          +
          + +
          +

          Parameters

          +
          + +
          length
          + +
          Type: Integer +
          + +
          If length is less than or equal to the current +String size, the entire String is returned without space padding.
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'abc';
          +String s2 =
          +   s1.rightPad(5);
          +System.assertEquals(
          +   'abc  ', s2);
          +
          + +
          + +
          +
          + +

          split(regExp)

          + + + +
          +
          +Returns a list that contains each substring of + the String that is terminated by either the regular expression + regExp or the end of the String. +
          + +
          +

          Signature

          + + +

          public String[] split(String + regExp)

          + + + +
          + +
          +

          Parameters

          +
          + +
          regExp
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          + + +

          Type: String[]

          + +
          +Note
          +

          Note

          +

          In API version 34.0 and earlier, a zero-width + regExp value produces an empty + list item at the beginning of the method’s + output.

          +
          +
          + +
          + +
          +

          Usage

          + + +

          See the Java Pattern class for information on + regular expressions.

          + +

          The substrings are placed in the list in the order + in which they occur in the String.If regExp does not match any part of the + String, the resulting list has just one element containing + the original String.

          + + +
          For example, for String s = + 'boo:and:foo':
            +
          • +s.split(':', 2) + results in {'boo', + 'and:foo'} +
          • + +
          • +s.split(':', 5) + results in {'boo', + 'and', 'foo'} +
          • + +
          • +s.split(':', + -2) results in {'boo', 'and', + 'foo'} +
          • + +
          • +s.split('o', 5) + results in {'b', , + ':and:f', , } +
          • + +
          • +s.split('o', + -2) results in {'b', , ':and:f', , + } +
          • + +
          • +s.split('o', 0) + results in {'b', + , ':and:f'} +
          • + +
          +
          + +
          + +
          +

          Example

          +

          In the following example, a string is split using a backslash as a delimiter.

          +
          public String splitPath(String filename) {
          +    if (filename == null)
          +        return null;
          +    List<String> parts = filename.split('\\\\');
          +    filename = parts[parts.size()-1];
          +    return filename;
          +}
          +
          +// For example, if the file path is e:\\processed\\PPDSF100111.csv
          +// This method splits the path and returns the last part.
          +// Returned filename is PPDSF100111.csv
          +
          +
          + +
          + +
          +
          +

          split(regExp, + limit)

          +
          +
          Returns a list that contains each substring of + the String that is terminated by either the regular expression + regExp or the end of the String.
          +
          +

          Signature

          +

          public String[] split(String regExp, Integer limit)

          + +
          +
          +

          Parameters

          +
          +
          regExp
          +
          Type: String +
          +
          A regular expression.
          + + +
          limit
          + +
          Type: Integer +
          + +
          +
          +
          +

          Return Value

          + +

          Type: String[]

          + +
          +Note
          +

          Note

          +

          In API version 34.0 and earlier, a zero-width + regExp value produces an empty + list item at the beginning of the method’s + output.

          +
          +
          +
          + +
          +

          Usage

          + + +
          +The optional limit parameter controls the number of + times the pattern is applied and therefore affects the length of the list.
            +
          • If limit is greater than zero:
              +
            • The pattern is applied a maximum of (limit – 1) times.
            • + +
            • The list’s length is no greater than limit.
            • + +
            • The list’s last entry contains all input beyond the last matched + delimiter.
            • + +
            +
          • + +
          • If limit is non-positive, the pattern is applied as many times + as possible, and the list can have any length.
          • + +
          • If limit is zero, the pattern is applied as many times as + possible, the list can have any length, and trailing empty strings are discarded. +
          • + +
          +
          + +
          +
          +
          +
          + +

          splitByCharacterType()

          + + + +
          +
          Splits the current String by character type and returns +a list of contiguous character groups of the same type as complete +tokens.
          + +
          +

          Signature

          +

          public List<String> splitByCharacterType()

          +
          + + +
          +

          Return Value

          +

          Type: List<String>

          +
          + +
          +

          Usage

          +

          For more information about +the character types used, see java.lang.Character.getType(char).

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com platform';
          +List<String> ls =
          +   s1.splitByCharacterType();
          +System.debug(ls);
          +// Writes this output:
          +// (F, orce, ., com,  , platform)
          +
          + +
          + +
          +
          + +

          splitByCharacterTypeCamelCase()

          + + + +
          +
          Splits the current String by character type and returns +a list of contiguous character groups of the same type as complete +tokens, with the following exception: the uppercase character, if +any, immediately preceding a lowercase character token belongs to +the following character token rather than to the preceding.
          + +
          +

          Signature

          +

          public List<String> splitByCharacterTypeCamelCase()

          +
          + + +
          +

          Return Value

          +

          Type: List<String>

          +
          + +
          +

          Usage

          +

          For more information about +the character types used, see java.lang.Character.getType(char).

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com platform';
          +List<String> ls =
          +   s1.splitByCharacterTypeCamelCase();
          +System.debug(ls);
          +// Writes this output:
          +// (Force, ., com,  , platform)
          +
          + +
          + +
          +
          + +

          startsWith(prefix)

          + + + +
          +
          Returns true if +the String that called the method begins with the specified prefix.
          + +
          +

          Signature

          +

          public Boolean startsWith(String prefix)

          +
          + +
          +

          Parameters

          +
          + +
          prefix
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String s1 = 'AE86 vs EK9';
          +System.assert(s1.startsWith('AE86'));
          + +
          + +
          + +
          +
          + +

          startsWithIgnoreCase(prefix)

          + + + +
          +
          Returns true if +the current String begins with the specified prefix regardless of +the prefix case.
          + +
          +

          Signature

          +

          public Boolean startsWithIgnoreCase(String +prefix)

          +
          + +
          +

          Parameters

          +
          + +
          prefix
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: Boolean

          +
          + +
          +

          Example

          + + +
          String s1 = 'AE86 vs EK9';
          +System.assert(s1.startsWithIgnoreCase('ae86'));
          + +
          + +
          + +
          +
          + +

          stripHtmlTags(htmlInput)

          + + + +
          +
          Removes HTML markup from the input string and returns the +plain text.
          + +
          +

          Signature

          +

          public String stripHtmlTags(String htmlInput)

          +
          + +
          +

          Parameters

          +
          + +
          htmlInput
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = '<b>hello world</b>';
          +String s2 = s1.stripHtmlTags();
          +System.assertEquals(
          +   'hello world', s2);
          +
          + +
          + +
          +
          + +

          substring(startIndex)

          + + + +
          +
          Returns a new String that begins with the character at +the specified zero-based startIndex and extends +to the end of the String.
          + +
          +

          Signature

          +

          public String substring(Integer startIndex)

          +
          + +
          +

          Parameters

          +
          + +
          startIndex
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          String s1 = 'hamburger';
          +System.assertEquals('burger', s1.substring(3));
          + +
          + +
          + +
          +
          + +

          substring(startIndex, endIndex)

          + + + +
          +
          Returns a new String that begins with the character at +the specified zero-based startIndex and extends +to the character at endIndex - 1.
          + +
          +

          Signature

          +

          public String substring(Integer startIndex, +Integer endIndex)

          +
          + +
          +

          Parameters

          +
          + +
          startIndex
          + +
          Type: Integer +
          + + + +
          endIndex
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          'hamburger'.substring(4, 8);
          +// Returns "urge"
          +
          +'smiles'.substring(1, 5);
          +// Returns "mile"
          +
          +
          + +
          + +
          +
          + +

          substringAfter(separator)

          + + + +
          +
          Returns the substring that occurs after the first occurrence +of the specified separator.
          + +
          +

          Signature

          +

          public String substringAfter(String separator)

          +
          + +
          +

          Parameters

          +
          + +
          separator
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com.platform';
          +String s2 =
          +   s1.substringAfter('.');
          +System.assertEquals(
          +   'com.platform', s2);
          +
          + +
          + +
          +
          + +

          substringAfterLast(separator)

          + + + +
          +
          Returns the substring that occurs after the last occurrence +of the specified separator.
          + +
          +

          Signature

          +

          public String substringAfterLast(String separator)

          +
          + +
          +

          Parameters

          +
          + +
          separator
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com.platform';
          +String s2 =
          +   s1.substringAfterLast('.');
          +System.assertEquals(
          +   'platform', s2);
          +
          + +
          + +
          +
          + +

          substringBefore(separator)

          + + + +
          +
          Returns the substring that occurs before the first occurrence +of the specified separator.
          + +
          +

          Signature

          +

          public String substringBefore(String separator)

          +
          + +
          +

          Parameters

          +
          + +
          separator
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com.platform';
          +String s2 =
          +   s1.substringBefore('.');
          +System.assertEquals(
          +   'Force', s2);
          +
          + +
          + +
          +
          + +

          substringBeforeLast(separator)

          + + + +
          +
          Returns the substring that occurs before the last occurrence +of the specified separator.
          + +
          +

          Signature

          +

          public String substringBeforeLast(String separator)

          +
          + +
          +

          Parameters

          +
          + +
          separator
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com.platform';
          +String s2 =
          +   s1.substringBeforeLast('.');
          +System.assertEquals(
          +   'Force.com', s2);
          +
          + +
          + +
          +
          + +

          substringBetween(tag)

          + + + +
          +
          Returns the substring that occurs between two instances of the specified + tag String.
          + +
          +

          Signature

          +

          public String substringBetween(String tag)

          +
          + +
          +

          Parameters

          +
          + +
          tag
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'tagYellowtag';
          +String s2 = s1.substringBetween('tag');
          +System.assertEquals('Yellow', s2);
          +
          + +
          + +
          +
          + +

          substringBetween(open, close)

          + + + +
          +
          Returns the substring that occurs between the two specified +Strings.
          + +
          +

          Signature

          +

          public String substringBetween(String open, +String close)

          +
          + +
          +

          Parameters

          +
          + +
          open
          + +
          Type: String +
          + + + +
          close
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 = 'xYellowy';
          +String s2 =
          +   s1.substringBetween('x','y');
          +System.assertEquals(
          +   'Yellow', s2);
          +
          + +
          + +
          +
          + +

          swapCase()

          + + + +
          +
          Swaps the case of all characters and returns the resulting String by using the default + (English US) locale.
          + +
          +

          Signature

          +

          public String swapCase()

          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          Upper case and title case +converts to lower case, and lower case converts to upper case.

          +
          + +
          +

          Example

          +
          String s1 = 'Force.com';
          +String s2 = s1.swapCase();
          +System.assertEquals('fORCE.COM', s2);
          +
          + +
          + +
          +
          + +

          toLowerCase()

          + + + +
          +
          Converts all of the characters in the String to lowercase using the rules of the default + (English US) locale.
          + +
          +

          Signature

          +

          public String toLowerCase()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          String s1 = 'ThIs iS hArD tO rEaD';
          +System.assertEquals('this is hard to read',
          +   s1.toLowerCase());
          + +
          + +
          + +
          +
          + +

          toLowerCase(locale)

          + + + +
          +
          Converts all of the characters in the String to lowercase +using the rules of the specified locale.
          + +
          +

          Signature

          +

          public String toLowerCase(String locale)

          +
          + +
          +

          Parameters

          +
          + +
          locale
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          // Example in Turkish
          +// An uppercase dotted "i", \u0304, which is İ
          +// Note this contains both a İ as well as a I
          +String s1 = 'KIYMETLİ';
          +String s1Lower = s1.toLowerCase('tr');
          +// Dotless lowercase "i", \u0131, which is ı
          +// Note this has both a i and ı
          +String expected = 'kıymetli';
          +System.assertEquals(expected, s1Lower);
          +// Note if this was done in toLowerCase(‘en’), it would output ‘kiymetli’
          + +
          + +
          + +
          +
          + +

          toUpperCase()

          + + + +
          +
          Converts all of the characters in the String to uppercase using the rules of the default + (English US) locale.
          + +
          +

          Signature

          +

          public String toUpperCase()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String myString1 = 'abcd';
          +String myString2 = 'ABCD';
          +myString1 =
          +   myString1.toUpperCase();
          +Boolean result =
          +   myString1.equals(myString2);
          +System.assertEquals(result, true);
          +
          + +
          + +
          +
          + +

          toUpperCase(locale)

          + + + +
          +
          Converts all of the characters in the String to the uppercase +using the rules of the specified locale.
          + +
          +

          Signature

          +

          public String toUpperCase(String locale)

          +
          + +
          +

          Parameters

          +
          + +
          locale
          + +
          Type: String +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          // Example in Turkish
          +// Dotless lowercase "i", \u0131, which is ı
          +// Note this has both a i and ı
          +String s1 = 'imkansız';
          +String s1Upper = s1.toUpperCase('tr');
          +// An uppercase dotted "i", \u0304, which is İ
          +// Note this contains both a İ as well as a I
          +String expected = 'İMKANSIZ';
          +System.assertEquals(expected, s1Upper);
          + +
          + +
          + +
          +
          + +

          trim()

          + + + +
          +
          Returns a copy of the string that no longer contains any +leading or trailing white space characters.
          + +
          +

          Signature

          +

          public String trim()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          Leading and trailing ASCII +control characters such as tabs and newline characters are also removed. +White space and control characters that aren’t at the beginning +or end of the sentence aren’t removed.

          +
          + +
          +

          Example

          + + +
          String s1 = '   Hello!   ';
          +String trimmed = s1.trim();
          +system.assertEquals('Hello!', trimmed);
          + +
          + +
          + +
          +
          + +

          uncapitalize()

          + + + +
          +
          Returns the current String with the first letter in lowercase.
          + +
          +

          Signature

          +

          public String uncapitalize()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 =
          +   'Hello max';
          +String s2 =
          +   s1.uncapitalize();
          +System.assertEquals(
          +   'hello max',
          +    s2);
          +
          + +
          + +
          +
          + +

          unescapeCsv()

          + + + +
          +
          Returns a String representing an unescaped CSV column.
          + +
          +

          Signature

          +

          public String unescapeCsv()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          If the String is enclosed +in double quotes and contains a comma, newline or double quote, quotes +are removed. Also, any double quote escaped characters (a pair of +double quotes) are unescaped to just one double quote.

          +

          If the +String is not enclosed in double quotes, or is and does not contain +a comma, newline or double quote, it is returned unchanged.

          +
          + +
          +

          Example

          +
          String s1 =
          +   '"Max1, ""Max2"""';
          +String s2 =
          +   s1.unescapeCsv();
          +System.assertEquals(
          +   'Max1, "Max2"',
          +    s2);
          +
          + +
          + +
          +
          + +

          unescapeEcmaScript()

          + + + +
          +
          Unescapes any EcmaScript literals found in the String.
          + +
          +

          Signature

          +

          public String unescapeEcmaScript()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 =
          +   '\"3.8\",\"3.9\"';
          +String s2 =
          +   s1.unescapeEcmaScript();
          +System.assertEquals(
          +   '"3.8","3.9"',
          +   s2);
          +
          + +
          + +
          +
          + +

          unescapeHtml3()

          + + + +
          +
          Unescapes the characters in a String using HTML 3.0 entities.
          + +
          +

          Signature

          +

          public String unescapeHtml3()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          String s1 =
          +   '&quot;&lt;Black&amp;White&gt;&quot;';
          +String s2 =
          +   s1.unescapeHtml3();
          +System.assertEquals(
          +   '"<Black&White>"',
          +   s2);
          +
          +
          + +
          + +
          +
          + +

          unescapeHtml4()

          + + + +
          +
          Unescapes the characters in a String using HTML 4.0 entities.
          + +
          +

          Signature

          +

          public String unescapeHtml4()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          If an entity isn’t +recognized, it is kept as is in the returned string.

          +
          + +
          +

          Example

          +
          String s1 =
          +   '&quot;&lt;Black&amp;White&gt;&quot;';
          +String s2 =
          +   s1.unescapeHtml4();
          +System.assertEquals(
          +   '"<Black&White>"',
          +   s2);
          +
          +
          + +
          + +
          +
          + +

          unescapeJava()

          + + + +
          +
          Returns a String whose Java literals are unescaped. Literals +unescaped include escape sequences for quotes (\\") and control characters, +such as tab (\\t), and carriage return (\\n).
          + +
          +

          Signature

          +

          public String unescapeJava()

          +
          + +
          +

          Return Value

          +

          Type: String

          +

          The unescaped string.

          +
          + +
          +

          Example

          +
          String s = 'Company: \\"Salesforce.com\\"';
          +String unescapedStr = s.unescapeJava();
          +System.assertEquals('Company: "Salesforce.com"', unescapedStr);
          +
          + +
          + +
          +
          + +

          unescapeUnicode()

          + + + +
          +
          Returns a String whose escaped Unicode characters are unescaped.
          + +
          +

          Signature

          +

          public String unescapeUnicode()

          +
          + +
          +

          Return Value

          +

          Type: String

          +

          The unescaped string.

          +
          + +
          +

          Example

          +
          String s = 'De onde voc\u00EA \u00E9?';
          +String unescapedStr = s.unescapeUnicode();
          +System.assertEquals('De onde você é?', unescapedStr);
          +
          + +
          + +
          +
          + +

          unescapeXml()

          + + + +
          +
          Unescapes the characters in a String using XML entities.
          + +
          +

          Signature

          +

          public String unescapeXml()

          +
          + + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          Supports only the five basic +XML entities (gt, lt, quot, amp, apos). Does not support DTDs or external +entities.

          +
          + +
          +

          Example

          +
          String s1 =
          +   '&quot;&lt;Black&amp;White&gt;&quot;';
          +String s2 =
          +   s1.unescapeXml();
          +System.assertEquals(
          +   '"<Black&White>"',
          +   s2);
          +
          +
          + +
          + +
          +
          + +

          valueOf(dateToConvert)

          + + + +
          +
          Returns a String that represents the specified Date in +the standard “yyyy-MM-dd” format.
          + +
          +

          Signature

          +

          public static String valueOf(Date dateToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          dateToConvert
          + +
          Type: Date +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          Date myDate = Date.Today();
          +String sDate = String.valueOf(myDate);
          +
          + +
          + +
          +
          + +

          valueOf(datetimeToConvert)

          + + + +
          +
          Returns a String that represents the specified Datetime +in the standard “yyyy-MM-dd HH:mm:ss” format for the +local time zone.
          + +
          +

          Signature

          +

          public static String valueOf(Datetime datetimeToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          datetimeToConvert
          + +
          Type: Datetime +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          DateTime dt = datetime.newInstance(1996, 6, 23);
          +String sDateTime = String.valueOf(dt);
          +System.assertEquals('1996-06-23 00:00:00', sDateTime);
          + +
          + +
          + +
          +
          + +

          valueOf(decimalToConvert)

          + + + +
          +
          Returns a String that represents the specified Decimal.
          + +
          +

          Signature

          +

          public static String valueOf(Decimal decimalToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          decimalToConvert
          + +
          Type: Decimal +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          Decimal dec = 3.14159265;
          +String sDecimal = String.valueOf(dec);
          +System.assertEquals('3.14159265', sDecimal);
          + +
          + +
          + +
          +
          + +

          valueOf(doubleToConvert)

          + + + +
          +
          Returns a String that represents the specified Double.
          + +
          +

          Signature

          +

          public static String valueOf(Double doubleToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          doubleToConvert
          + +
          Type: Double +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          +
          Double myDouble = 12.34;
          +String myString =
          +   String.valueOf(myDouble);
          +System.assertEquals(
          +  '12.34', myString);
          +
          + +
          + +
          +
          + +

          valueOf(integerToConvert)

          + + + +
          +
          Returns a String that represents the specified Integer.
          + +
          +

          Signature

          +

          public static String valueOf(Integer integerToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          integerToConvert
          + +
          Type: Integer +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          Integer myInteger = 22;
          +String sInteger = String.valueOf(myInteger);
          +System.assertEquals('22', sInteger);
          + +
          + +
          + +
          +
          + +

          valueOf(longToConvert)

          + + + +
          +
          Returns a String that represents the specified Long.
          + +
          +

          Signature

          +

          public static String valueOf(Long longToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          longToConvert
          + +
          Type: Long +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          Long myLong = 123456789;
          +String sLong = String.valueOf(myLong);
          +System.assertEquals('123456789', sLong);
          + +
          + +
          + +
          +
          + +

          valueOf(toConvert)

          + + + +
          +
          Returns a string representation of the specified object +argument.
          + +
          +

          Signature

          +

          public static String valueOf(Object toConvert)

          +
          + +
          +

          Parameters

          +
          + +
          toConvert
          + +
          Type: Object
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Usage

          +

          If the argument is not a +String, the valueOf method +converts it into a String by calling the toString method on the argument, if available, or any overridden toString method if the argument is +a user-defined type. Otherwise, if no toString method is available, it returns a String representation +of the argument.

          +
          + +
          +

          Example

          +
          List<Integer> ls =
          +  new List<Integer>();
          +ls.add(10);
          +ls.add(20);
          +String strList =
          +   String.valueOf(ls);
          +System.assertEquals(
          +  '(10, 20)', strList);
          +
          +
          + +
          + +
          +
          + +

          valueOfGmt(datetimeToConvert)

          + + + +
          +
          Returns a String that represents the specified Datetime +in the standard “yyyy-MM-dd HH:mm:ss” format for the +GMT time zone.
          + +
          +

          Signature

          +

          public static String valueOfGmt(Datetime datetimeToConvert)

          +
          + +
          +

          Parameters

          +
          + +
          datetimeToConvert
          + +
          Type: Datetime +
          + + +
          +
          + +
          +

          Return Value

          +

          Type: String

          +
          + +
          +

          Example

          + + +
          // For a PST timezone:
          +DateTime dt = datetime.newInstance(2001, 9, 14);
          +String sDateTime = String.valueOfGmt(dt);
          +System.assertEquals('2001-09-14 07:00:00', sDateTime);
          diff --git a/test/jdk/jb/javax/swing/JEditorPane/ZeroMargin.java b/test/jdk/jb/javax/swing/JEditorPane/ZeroMargin.java new file mode 100644 index 000000000000..7fe45d4cd33d --- /dev/null +++ b/test/jdk/jb/javax/swing/JEditorPane/ZeroMargin.java @@ -0,0 +1,105 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +import static java.awt.event.KeyEvent.VK_A; + +/** + * @test + * @summary The test checks that height of JEditorPane with zero top and bottom insets is updated after changing text + * @run main/othervm ZeroMargin + */ + +public class ZeroMargin implements Runnable { + + private JFrame f; + private JEditorPane htmlPane; + private JEditorPane rtfPane; + private JEditorPane plainPane; + + public static void main(String[] args) throws Exception { + + ZeroMargin test = new ZeroMargin(); + try { + Robot r = new Robot(); + SwingUtilities.invokeAndWait(test); + r.waitForIdle(); + r.keyPress(VK_A); + r.keyRelease(VK_A); + r.delay(500); + if (test.htmlPane.getHeight() == 0) { + throw new RuntimeException("Height of JEditorPane with text/html type was not updated"); + } + if (test.rtfPane.getHeight() == 0) { + throw new RuntimeException("Height of JEditorPane with text/rtf type was not updated"); + } + if (test.plainPane.getHeight() == 0) { + throw new RuntimeException("Height of JEditorPane with text/plain type was not updated"); + } + } finally { + SwingUtilities.invokeAndWait(() ->test.f.dispose()); + } + } + + private void initEditorPane(JEditorPane pane, KeyAdapter adapter) { + pane.setEditable(false); + pane.setOpaque(false); + pane.setMargin(new Insets(0, 0, 0, 0)); + pane.addKeyListener(adapter); + } + + @Override + public void run() { + f = new JFrame(); + htmlPane = new JEditorPane("text/html", ""); + rtfPane = new JEditorPane("text/rtf", ""); + plainPane = new JEditorPane("text/plain", ""); + + KeyAdapter adapter = new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + super.keyPressed(e); + if (e.getKeyCode() == VK_A) { + htmlPane.setText("html string"); + rtfPane.setText("{\\rtf1 rtf string}"); + plainPane.setText("plain string"); + } + } + }; + initEditorPane(htmlPane, adapter); + initEditorPane(rtfPane, adapter); + initEditorPane(plainPane, adapter); + + f.add(htmlPane, BorderLayout.NORTH); + f.add(rtfPane, BorderLayout.CENTER); + f.add(plainPane, BorderLayout.SOUTH); + f.setSize(300, 200); + f.setVisible(true); + f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + } +} diff --git a/test/jdk/jb/javax/swing/JLabel/JLabel/JLabel269.java b/test/jdk/jb/javax/swing/JLabel/JLabel/JLabel269.java new file mode 100644 index 000000000000..3f6a0d24e07e --- /dev/null +++ b/test/jdk/jb/javax/swing/JLabel/JLabel/JLabel269.java @@ -0,0 +1,134 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.util.Arrays; +import javax.swing.BoxLayout; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.plaf.FontUIResource; + +/* @test + * @summary regression test on JRE-269 + * @run main/othervm -Djavax.swing.rebaseCssSizeMap=true JLabel269 -verbose + */ +public class JLabel269 { + + private static boolean verbose = false; + + static class JLabelTest extends JLabel { + JLabelTest(String label) { + super(label); + } + + @Override + protected void paintComponent(Graphics g) { + g.setColor(Color.WHITE); + g.fillRect(0, 0, getWidth(), getHeight()); + g.setColor(Color.BLACK); + super.paintComponent(g); + } + } + + public static void main(String[] args) throws Exception { + String labelText = "A"; + + verbose = Arrays.asList(args).contains("-verbose"); + + JFrame mainFrame = new JFrame(); + + JPanel container = new JPanel(); + + JPanel p1 = new JPanel(); + JLabel l1 = new JLabelTest(labelText); + JPanel p2 = new JPanel(); + JLabel l2 = new JLabelTest(labelText); + + Robot robot = new Robot(); + + SwingUtilities.invokeAndWait(() -> { + container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS)); + + l1.setFont(new FontUIResource("Tahoma", Font.PLAIN, 36)); + p1.add(l1); + container.add(p1); + + l2.setFont(new FontUIResource("Tahoma", Font.PLAIN, 72)); + p2.add(l2); + container.add(p2); + + mainFrame.add(container); + mainFrame.pack(); + mainFrame.setVisible(true); + }); + robot.waitForIdle(); + robot.delay(100); + + BufferedImage bi = new BufferedImage( + l1.getWidth(), l1.getHeight(), BufferedImage.TYPE_INT_ARGB); + l1.paint(bi.getGraphics()); + int height1 = maxCharHeight(bi, l1.getWidth(), l1.getHeight()); + + bi = new BufferedImage( + l2.getWidth(), l2.getHeight(), BufferedImage.TYPE_INT_ARGB); + l2.paint(bi.getGraphics()); + int height2 = maxCharHeight(bi, l2.getWidth(), l2.getHeight()); + + mainFrame.dispose(); + + if (Math.abs(height2 - 2 * height1) > 2) { + throw new RuntimeException("Heights of \"A\" for 36pt and for 72pt " + + "must differ by half (+/- 2pxs)"); + } + } + + private static int maxCharHeight(BufferedImage bufferedImage, int width, int height) { + int rgb; + int maxHeight = 0; + for (int col = 0; col < width; col++) { + for (int row = 0; row < height; row++) { + try { + // remove transparance + rgb = bufferedImage.getRGB(col, row) & 0x00FFFFFF; + } catch (ArrayIndexOutOfBoundsException e) { + return maxHeight; + } + + if (verbose) + System.out.print((rgb == 0xFFFFFF) ? " ." : " X"); + + if (rgb != 0xFFFFFF && maxHeight < height - row) + maxHeight = height - row; + } + if (verbose) + System.out.println("maxHeight=" + maxHeight); + } + return maxHeight; + } +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/JPopupMenu/JPopupMenuOutOfWindowTest.java b/test/jdk/jb/javax/swing/JPopupMenu/JPopupMenuOutOfWindowTest.java new file mode 100644 index 000000000000..d7da15446534 --- /dev/null +++ b/test/jdk/jb/javax/swing/JPopupMenu/JPopupMenuOutOfWindowTest.java @@ -0,0 +1,178 @@ +import javax.swing.JFrame; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Arrays; + +/* + * @test + * @summary Regression test for JBR-2870 + * Opening a JPopupMenu that overlaps WM dock panel + * and checks that all menu items are clickable + * @run main/othervm JPopupMenuOutOfWindowTest + */ +public class JPopupMenuOutOfWindowTest { + + private static JFrame frame; + private static JPopupMenu menu; + private static final int BUTTONS_COUNT = 10; + private static final JMenuItem[] menuItems = new JMenuItem[BUTTONS_COUNT]; + private static final boolean[] buttonClicked = new boolean[BUTTONS_COUNT]; + + public static void main(String... args) throws Exception { + Robot robot = new Robot(); + Arrays.fill(buttonClicked, false); + + try { + SwingUtilities.invokeAndWait(JPopupMenuOutOfWindowTest::initUI); + + robot.waitForIdle(); + Point clickLocation = calculateClickCoordinates(frame); + System.out.println("Going to open popup menu at " + clickLocation); + + robot.mouseMove(clickLocation.x, clickLocation.y); + robot.mousePress(InputEvent.BUTTON3_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); + + for (int i = 0; i < 10; i++) { + robot.delay(500); + System.out.println("Check for menu visibility, it: " + i); + if (menu.isVisible()) { + System.out.println("Menu is visible, it: " + i); + break; + } + } + + if (!menu.isVisible()) { + System.out.println("TEST FAILED: menu didn't become visible in 5 seconds"); + } + + for (int i = 0; i < BUTTONS_COUNT; i++) { + JMenuItem item = menuItems[i]; + System.out.println("Click to menu item " + i); + Point location = item.getLocationOnScreen(); + final int x = location.x + item.getWidth() / 2; + final int y = location.y + item.getHeight() / 2; + robot.mouseMove(x, y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + } + + for (int i = 0; i < BUTTONS_COUNT; i++) { + if (!buttonClicked[i]) { + throw new RuntimeException("TEST FAILED: menu item " + i + " didn't receive a click"); + } + } + System.out.println("TEST PASSED"); + } finally { + SwingUtilities.invokeAndWait(JPopupMenuOutOfWindowTest::disposeUI); + } + } + + private static void initUI() { + frame = new JFrame(); + frame.setBounds(calculateWindowBounds()); + + JPanel panel = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(Color.BLUE); + g.fillRect(r.x, r.y, r.width, r.height); + } + }; + + panel.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + System.out.println("Mouse pressed. Event: " + e.getButton()); + if (e.getButton() == 3) { + toggleMenu(e); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + System.out.println("Mouse released. Event: " + e.getButton()); + } + }); + + menu = new JPopupMenu(); + for (int i = 0; i < BUTTONS_COUNT; i++) { + final int buttonNumber = i; + final String name = "Item " + buttonNumber; + JMenuItem item = new JMenuItem(name); + item.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + System.out.println("Clicked to button " + buttonNumber); + buttonClicked[buttonNumber] = true; + } + }); + menu.add(item); + menuItems[i] = item; + } + + frame.add(menu); + frame.setContentPane(panel); + frame.setVisible(true); + } + + /** + * Change visibility of the popup menu. + * Show the menu at the mouse location if it's hidden + * @param e MouseEvent + */ + private static void toggleMenu(MouseEvent e) { + System.out.println("Menu toggled by event: " + e.toString()); + menu.setLocation(e.getLocationOnScreen().x, e.getLocationOnScreen().y); + menu.setVisible(!menu.isShowing()); + } + + private static Rectangle calculateWindowBounds() { + GraphicsConfiguration config = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); + Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(config); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + + final int x = insets.left; + final int w = screenSize.width - x - insets.right; + final int y = insets.top; + final int h = screenSize.height - y - insets.bottom; + + return new Rectangle(x, y, w, h); + } + + private static Point calculateClickCoordinates(Window window) { + GraphicsConfiguration config = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); + Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(config); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + + final int x = insets.left + (screenSize.height - insets.left - insets.right) / 2; + final int y = screenSize.height - insets.bottom - window.getInsets().bottom - 10; + return new Point(x, y); + } + + private static void disposeUI() { + if (frame != null) { + frame.setVisible(false); + frame.dispose(); + } + } + +} diff --git a/test/jdk/jb/javax/swing/JScrollPane/JScrollPane457.java b/test/jdk/jb/javax/swing/JScrollPane/JScrollPane457.java new file mode 100644 index 000000000000..7e81c368e22b --- /dev/null +++ b/test/jdk/jb/javax/swing/JScrollPane/JScrollPane457.java @@ -0,0 +1,130 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Description: The test creates JScrollPane that displays TextArea with text which contains + * huge number of lines which can be specified via LINE_NUMBER + * NUMBER_OF_ITERATIONS + * times (by default 1000 times) and fails + *
            + *
          • by java.lang.RuntimeException: Waiting for the invocation event timed out if it hangs because of + * the deadlock at sun.lwawt.macosx.CPlatformComponent.$$YJP$$nativeCreateComponent(Native Method) as + * it was described in JRE-401
          • + * + *
          • or by java.lang.RuntimeException: The test is near to be hang if the method + * Popup.show() was executed HANG_TIME_FACTOR times longer than it was executed on the + * first iteration. + *
          + */ +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import javax.swing.text.DefaultCaret; + +import java.awt.Robot; +import java.lang.reflect.InvocationTargetException; + +public class JScrollPane457 extends JPanel implements Runnable { + + private static Robot robot; + private static JFrame frame; + private static JScrollPane457 test; + private static JTextArea textArea; + + private static int NUMBER_OF_ITERATIONS = 100; + private static int NUMBER_OF_LINES = 100000; + private static final int ROBOT_DELAY = 200; + + private static final Object testCompleted = new Object(); + + public void run() { + robot.delay(ROBOT_DELAY); + textArea.setCaretPosition(position); + } + + private int position; + private void doTest() throws InvocationTargetException, InterruptedException { + + for (int j = 0; j < NUMBER_OF_ITERATIONS; j++) { + position = textArea.getDocument().getStartPosition().getOffset(); + SwingUtilities.invokeAndWait(test); + + position =textArea.getDocument().getEndPosition().getOffset() - 1; + SwingUtilities.invokeAndWait(test); + } + + } + + private static void createAndShowGUI() { + test = new JScrollPane457(); + test.setBorder(new TitledBorder(new EtchedBorder(), "Text Area")); + + textArea = new JTextArea(25, 80); + textArea.setEditable(false); + + for (int i = 0; i < NUMBER_OF_LINES; i++) { + textArea.append("line " + i + " 1234567890qwertyuiopasdfghjklzxcvbnm 1234567890qwertyuiopasdfghjklzxcvbnm\n"); + } + + JScrollPane scroll = new JScrollPane(textArea); + scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + + test.add(scroll); + + DefaultCaret caret = (DefaultCaret) textArea.getCaret(); + caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); + + frame = new JFrame("OGLTR_DisableGlyphModeState test"); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.setSize(1000, 1000); + frame.add(test); + + frame.pack(); + frame.setVisible(true); + } + + private static void disposeGUI() { + frame.setVisible(false); + frame.dispose(); + } + + public static void main(String[] args) throws Exception { + robot = new Robot(); + if (args.length > 0) + JScrollPane457.NUMBER_OF_ITERATIONS = Integer.parseInt(args[0]); + if (args.length > 1) + JScrollPane457.NUMBER_OF_LINES = Integer.parseInt(args[1]); + + synchronized (testCompleted) { + SwingUtilities.invokeAndWait(JScrollPane457::createAndShowGUI); + test.doTest(); + SwingUtilities.invokeAndWait(JScrollPane457::disposeGUI); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/JScrollPane/jscrollpane457.d b/test/jdk/jb/javax/swing/JScrollPane/jscrollpane457.d new file mode 100644 index 000000000000..db9586bbf61a --- /dev/null +++ b/test/jdk/jb/javax/swing/JScrollPane/jscrollpane457.d @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +self long long ts[string]; + +pid$target:libawt_lwawt::entry /self->ts[probefunc] == 0/ +{ + self->ts[probefunc] = timestamp; +} + + +pid$target:libawt_lwawt::return /self->ts[probefunc]/ +{ + this->tt = timestamp - self->ts[probefunc]; + self->ts[probefunc] = 0; + + @t[ufunc(uregs[R_PC])] = sum(this->tt); +} + +END { + normalize(@t, 1000000); + trunc(@t, 10); + printa(@t); +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/JScrollPane/jscrollpane457.sh b/test/jdk/jb/javax/swing/JScrollPane/jscrollpane457.sh new file mode 100644 index 000000000000..0cdb3cb7e665 --- /dev/null +++ b/test/jdk/jb/javax/swing/JScrollPane/jscrollpane457.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @summary jscrollpane457.sh +# @run shell jscrollpane457.sh +# @key dtrace +# @requires os.family == "mac" | os.family == "linux" + +#export PATH="$PATH:/usr/sbin" +#echo $PATH +#echo "dtrace located at `which dtrace`" + +OS=`uname -s` +case "$OS" in + Linux | Darwin) + echo "Detected OS $OS" + ;; + * ) + echo "PASSED: The test is valid for MacOSX, Linux" + exit 0; + ;; +esac + +if [ -z "${TESTSRC}" ]; then + echo "TESTSRC undefined: set to ." + TESTSRC=. +fi + +if [ -z "${TESTCLASSES}" ]; then + echo "TESTCLASSES undefined: set to ." + TESTCLASSES=. +fi + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +cd ${TESTSRC} +${TESTJAVA}/bin/javac -d ${TESTCLASSES} JScrollPane457.java + +echo "Running workload" +${TESTJAVA}/bin/java -cp ${TESTCLASSPATH} JScrollPane457 100 & +TEST_PID=$! + +echo "Running ${DTRACE}" +DTRACE_OUTPUT=$(echo ${BUPWD} | sudo -S ${DTRACE} -q -p${TEST_PID} -s ${TESTSRCPATH}/jscrollpane457.d) +count=$(echo ${DTRACE_OUTPUT} | grep -c "OGLTR_DisableGlyphModeState") +echo ${DTRACE_OUTPUT} + +case $count in +0) echo "PASSED: OGLTR_DisableGlyphModeState is NOT on top" + ;; +*) echo ${DTRACE_OUTPUT} + echo "FAILED: OGLTR_DisableGlyphModeState is on top" + exit 1 + ;; +esac +exit 0 diff --git a/test/jdk/jb/javax/swing/JTextArea/TypingLatencyTest.java b/test/jdk/jb/javax/swing/JTextArea/TypingLatencyTest.java new file mode 100644 index 000000000000..3cb933c73fcc --- /dev/null +++ b/test/jdk/jb/javax/swing/JTextArea/TypingLatencyTest.java @@ -0,0 +1,135 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.text.DecimalFormat; +import java.util.Collections; +import java.util.PriorityQueue; + +/** + * @test + * @summary Measure typing latency in JTextArea with various conditions (count of already added symbols) + * The test adds initial size of text in the JTextArea by specified jtreg.test.initialSize property. + * After that robot types predefined amount of english symbols in the beginning of the text in JTextArea. + * Amount of symbols is defined in jtreg.test.sampleSize property. + * @run main/othervm -Djtreg.test.initialSize=0 -Djtreg.test.sampleSize=100 TypingLatencyTest + * @run main/othervm -Djtreg.test.initialSize=1000 -Djtreg.test.sampleSize=50 TypingLatencyTest + * @run main/othervm -Djtreg.test.initialSize=5000 -Djtreg.test.sampleSize=50 TypingLatencyTest + * @run main/othervm -Djtreg.test.initialSize=10000 -Djtreg.test.sampleSize=50 TypingLatencyTest + * @run main/othervm -Djtreg.test.initialSize=30000 -Djtreg.test.sampleSize=50 TypingLatencyTest + */ +public class TypingLatencyTest { + + private static final DecimalFormat df = new DecimalFormat("0.00"); + + private static JFrame window; + private static JTextArea textArea; + private static Robot robot; + + public static void main(String... args) throws Exception { + int initialSize = 0; + String initialSizeValue = System.getProperty("jtreg.test.initialSize"); + if (initialSizeValue != null && !initialSizeValue.isBlank()) { + initialSize = Integer.parseInt(initialSizeValue); + } + + int sampleSize = 0; + String sampleSizeValue = System.getProperty("jtreg.test.sampleSize"); + if (sampleSizeValue != null && !sampleSizeValue.isBlank()) { + sampleSize = Integer.parseInt(sampleSizeValue); + } + + System.out.println("Run test with: initialSize = " + initialSize + " sampleSize = " + sampleSize); + + try { + robot = new Robot(); + SwingUtilities.invokeAndWait(TypingLatencyTest::createUI); + robot.waitForIdle(); + boolean passed = typeAndMeasureLatency(initialSize, sampleSize); + if (!passed) { + throw new RuntimeException("TEST FAILED: Typing latency is too high."); + } + } finally { + SwingUtilities.invokeAndWait(() -> { + if (window != null) { + window.dispose(); + } + }); + } + } + + private static void createUI() { + window = new JFrame(); + window.setBounds(0, 0, 800, 600); + + JPanel panel = new JPanel(); + textArea = new JTextArea(); + textArea.setColumns(60); + textArea.setLineWrap(true); + textArea.setRows(30); + + panel.add(textArea); + + window.setContentPane(panel); + window.setVisible(true); + } + + private static boolean typeAndMeasureLatency(int initialTextSize, int sampleSize) { + window.requestFocus(); + textArea.requestFocus(); + robot.waitForIdle(); + + textArea.append(generateText(initialTextSize)); + + long before, after, diff; + int code; + + long min = Long.MAX_VALUE; + long max = Long.MIN_VALUE; + double average = 0; + PriorityQueue small = new PriorityQueue<>(Collections.reverseOrder()); + PriorityQueue large = new PriorityQueue<>(); + boolean even = true; + + for (int i = 0; i < sampleSize; i++) { + code = KeyEvent.getExtendedKeyCodeForChar(97 + Math.round(25 * (float) Math.random())); + + before = System.nanoTime(); + robot.keyPress(code); + robot.keyRelease(code); + robot.waitForIdle(); + after = System.nanoTime(); + diff = after - before; + + if (even) { + large.offer(diff); + small.offer(large.poll()); + } else { + small.offer(diff); + large.offer(small.poll()); + } + even = !even; + min = Math.min(min, diff); + max = Math.max(max, diff); + average = ((average * i) + diff) / (i + 1); + } + + double median = even ? (small.peek() + large.peek()) / 2.0 : small.peek(); + + System.out.println("Symbols added: " + sampleSize); + System.out.println("min (ms): " + df.format((min / 1_000_000.0))); + System.out.println("max (ms): " + df.format((max / 1_000_000.0))); + System.out.println("average (ms): " + df.format((average / 1_000_000.0))); + System.out.println("median (ms): " + df.format((median / 1_000_000.0))); + + return median < 500_000_000; + } + + private static String generateText(int size) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < size; i++) { + sb.append((char) (97 + Math.round(25 * (float) Math.random()))); + } + return sb.toString(); + } + +} diff --git a/test/jdk/jb/javax/swing/Popup/Popup401.java b/test/jdk/jb/javax/swing/Popup/Popup401.java new file mode 100644 index 000000000000..6c7be57b9a4b --- /dev/null +++ b/test/jdk/jb/javax/swing/Popup/Popup401.java @@ -0,0 +1,146 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Robot; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.Popup; +import javax.swing.PopupFactory; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; + +/* @test + * @summary regression test on + *
            + *
          • JRE-401 AppCode freezes during autocomplete and other operations; and
          • + *
          • JRE-415 Mistake in "Merge with jdk8u152-b00"
          • + *
          + * @run main/othervm/timeout=360 Popup401 1000 + */ + +/* + * Description: The test invoke Popup.show()/hide() methods ITERATION_NUMBER + * times (by default 1000 times) and fails + *
            + *
          • by java.lang.RuntimeException: Waiting for the invocation event timed out if it hangs because of + * the deadlock at sun.lwawt.macosx.CPlatformComponent.$$YJP$$nativeCreateComponent(Native Method) as + * it was described in JRE-401
          • + * + *
          • or by java.lang.RuntimeException: The test is near to be hang if the method + * Popup.show() was executed HANG_TIME_FACTOR times longer than it was executed on the + * first iteration. + *
          + */ +public class Popup401 extends JPanel { + + private JTextArea textArea; + private JEditorPane editorPane; + + private static JFrame frame; + private static Popup401 test; + private static Robot robot; + + private static int ITERATION_NUMBER = 10; + private static final int ROBOT_DELAY = 200; + private static final int HANG_TIME_FACTOR = 10; + + private static final Object testCompleted = new Object(); + + private Popup401() { + textArea = new JTextArea("§1234567890-=\nqwertyuiop[]\nasdfghjkl;'\\\n`zxcvbnm,./\n"); + editorPane = new JEditorPane("text/html", "§1234567890-=\nqwertyuiop[]\nasdfghjkl;'\\\n`zxcvbnm,./\n"); + editorPane.setSize(300, 300); + add(editorPane); + } + + private void run() { + JPanel panel = new JPanel(); + + int count = 0; + long diffTime, initialDiffTime = 0; + while (count < ITERATION_NUMBER) { + robot.delay(ROBOT_DELAY); + + PopupFactory factory = PopupFactory.getSharedInstance(); + Popup popup = factory.getPopup(panel, textArea, editorPane.getLocation().x + 20, + editorPane.getLocation().y + 20); + + long startTime = System.currentTimeMillis(); + popup.show(); + long endTime = System.currentTimeMillis(); + diffTime = endTime - startTime; + + if (count > 1) { + if (diffTime * HANG_TIME_FACTOR < (endTime - startTime)) { + throw new RuntimeException("The test is near to be hang: iteration count = " + count + + " initial time = " + initialDiffTime + + " current time = " + diffTime); + } + } else { + initialDiffTime = diffTime; + } + count++; + robot.delay(ROBOT_DELAY); + + popup.hide(); + } + } + + private static void createAndShowGUI() { + frame = new JFrame("HangPopupTest"); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.setSize(1000, 1000); + + test = new Popup401(); + frame.add(test); + frame.addComponentListener(new ComponentAdapter() { + @Override + public void componentShown(ComponentEvent e) { + super.componentShown(e); + test.run(); + synchronized (testCompleted) { + testCompleted.notifyAll(); + } + } + }); + frame.pack(); + frame.setVisible(true); + } + + public static void main(String[] args) throws Exception { + robot = new Robot(); + if (args.length > 0) + Popup401.ITERATION_NUMBER = Integer.parseInt(args[0]); + + synchronized (testCompleted) { + SwingUtilities.invokeAndWait(Popup401::createAndShowGUI); + testCompleted.wait(); + frame.setVisible(false); + frame.dispose(); + } + } +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/Popup/popup401.d b/test/jdk/jb/javax/swing/Popup/popup401.d new file mode 100644 index 000000000000..a89c5fecd460 --- /dev/null +++ b/test/jdk/jb/javax/swing/Popup/popup401.d @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +int c; +int a[long long]; + +BEGIN { + c=0; +} + +objc$target:AWTWindow_Panel:-initWithDelegate*:entry { + c++; + a[arg0] = 1; +} + +objc$target:NSObject:-dealloc:entry { + c -= a[arg0]; + a[arg0] = 0; +} + +END /c > 0/ { + printf("AWTWindow_Panel leaks: %d", c); + exit(9); +} + +END /c == 0/ { + printf("AWTWindow_Panel leaks: %d", c); + exit(0); +} \ No newline at end of file diff --git a/test/jdk/jb/javax/swing/Popup/popup401.sh b/test/jdk/jb/javax/swing/Popup/popup401.sh new file mode 100644 index 000000000000..1dd0f96f8cc8 --- /dev/null +++ b/test/jdk/jb/javax/swing/Popup/popup401.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @summary popup401.sh checks memory leaks +# @run shell popup401.sh +# @key dtrace + +#export PATH="$PATH:/usr/sbin" +#echo $PATH +#echo "dtrace located at `which dtrace`" + +OS=`uname -s` +case "$OS" in + Linux | Darwin) + echo "Detected OS $OS" + ;; + * ) + echo "PASSED: The test is valid for MacOSX, Linux" + exit 0; + ;; +esac + +if [ -z "${TESTSRC}" ]; then + echo "TESTSRC undefined: set to ." + TESTSRC=. +fi + +if [ -z "${TESTCLASSES}" ]; then + echo "TESTCLASSES undefined: set to ." + TESTCLASSES=. +fi + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +cd ${TESTSRC} +${TESTJAVA}/bin/javac -d ${TESTCLASSES} Popup401.java + +echo "Running ${DTRACE}" +echo ${BUPWD} | sudo -S ${DTRACE} -Z -q -s ${TESTSRCPATH}/popup401.d -c "${TESTJAVA}/bin/java -cp ${TESTCLASSPATH} Popup401 10" +exit_code=$? + +case $exit_code in +0) echo "PASSED: mem leaks not found" + ;; +9) echo "FAILED: mem leaks detected" + exit 1 + ;; +*) echo "FAILED: undefined error" + exit 1 + ;; +esac +exit 0 diff --git a/test/jdk/jb/lib/jna.jar b/test/jdk/jb/lib/jna.jar new file mode 100644 index 000000000000..521bd92f6a6c Binary files /dev/null and b/test/jdk/jb/lib/jna.jar differ diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/CtrlShortcutNewWindowTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/CtrlShortcutNewWindowTest.java new file mode 100644 index 000000000000..5d5cbfa40a12 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/CtrlShortcutNewWindowTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2000-2024 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-6704 Extra IME event fired when pressing a keystroke containing Ctrl and focus moving to a different window + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest CtrlShortcutNewWindowTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import javax.swing.*; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +import static java.awt.event.KeyEvent.*; + +public class CtrlShortcutNewWindowTest implements Runnable { + @Override + public void run() { + var frame = new JFrame(); + frame.setSize(300, 300); + frame.setLocation(100, 100); + JTextField textField = new JTextField(); + frame.add(textField); + textField.requestFocusInWindow(); + + final boolean[] keyPressed = {false}; + + InputMethodTest.textArea.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == VK_BACK_QUOTE && (e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0) { + keyPressed[0] = true; + frame.setVisible(true); + } + } + }); + + InputMethodTest.section("Ctrl+Backtick"); + InputMethodTest.layout("com.apple.keylayout.ABC"); + InputMethodTest.type(VK_BACK_QUOTE, CTRL_DOWN_MASK); + InputMethodTest.delay(500); + + if (!keyPressed[0]) { + InputMethodTest.fail("Ctrl+Backtick key combination not detected"); + } + + if (!textField.getText().isEmpty()) { + InputMethodTest.fail("Extra characters in the text field"); + } + + frame.setVisible(false); + frame.dispose(); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/DeadKeysTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/DeadKeysTest.java new file mode 100644 index 000000000000..3cf22f898619 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/DeadKeysTest.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5006 Dead keys exhibit invalid behavior on macOS + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest DeadKeysTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import static java.awt.event.KeyEvent.*; + +public class DeadKeysTest implements Runnable { + static private final int VK_SECTION = 0x01000000+0x00A7; + @Override + public void run() { + InputMethodTest.layout("com.apple.keylayout.ABC"); + + InputMethodTest.section("ABC: Acute accent + vowel"); + InputMethodTest.type(VK_E, ALT_DOWN_MASK); + InputMethodTest.type(VK_A, 0); + InputMethodTest.expectText("\u00e1"); + + InputMethodTest.section("ABC: Acute accent + consonant"); + InputMethodTest.type(VK_E, ALT_DOWN_MASK); + InputMethodTest.type(VK_S, 0); + InputMethodTest.expectText("\u00b4s"); + + InputMethodTest.section("ABC: Acute accent + space"); + InputMethodTest.type(VK_E, ALT_DOWN_MASK); + InputMethodTest.type(VK_SPACE, 0); + InputMethodTest.expectText("\u00b4"); + + InputMethodTest.section("German - Standard: Opt+K, Section = Dead circumflex below"); + InputMethodTest.layout("com.apple.keylayout.German-DIN-2137"); + InputMethodTest.type(VK_K, ALT_DOWN_MASK); + InputMethodTest.type(VK_SECTION, 0); + InputMethodTest.type(VK_D, 0); + InputMethodTest.expectText("\u1e13"); + + InputMethodTest.section("UnicodeHexInput: U+0041 = A"); + InputMethodTest.layout("com.apple.keylayout.UnicodeHexInput"); + InputMethodTest.type(VK_0, ALT_DOWN_MASK); + InputMethodTest.type(VK_0, ALT_DOWN_MASK); + InputMethodTest.type(VK_4, ALT_DOWN_MASK); + InputMethodTest.type(VK_1, ALT_DOWN_MASK); + InputMethodTest.expectText("A"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/FocusMoveUncommitedCharactersTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/FocusMoveUncommitedCharactersTest.java new file mode 100644 index 000000000000..5694f1c54231 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/FocusMoveUncommitedCharactersTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5379 Last character from Korean input gets inserted once again on click + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest FocusMoveUncommitedCharactersTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import javax.swing.*; + +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +import static java.awt.event.KeyEvent.*; + +public class FocusMoveUncommitedCharactersTest implements Runnable { + @Override + public void run() { + var textArea2 = new JTextArea(); + final boolean[] typedEventReceived = {false}; + + textArea2.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + typedEventReceived[0] = true; + } + }); + + InputMethodTest.frame.getContentPane().add(textArea2, BorderLayout.SOUTH); + textArea2.setVisible(true); + + InputMethodTest.layout("com.apple.inputmethod.Korean.2SetKorean"); + InputMethodTest.type(VK_A, 0); + InputMethodTest.type(VK_K, 0); + + var robot = InputMethodTest.robot; + var point = new Point(textArea2.getWidth() / 2, textArea2.getHeight() / 2); + SwingUtilities.convertPointToScreen(point, textArea2); + + robot.mouseMove(point.x, point.y); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + + robot.delay(1000); + + InputMethodTest.expectTrue(!typedEventReceived[0], "Expected no KeyTyped events on the second text area"); + InputMethodTest.expectTrue(textArea2.getText().isEmpty(), "Expected second text area to be empty"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/InputMethodTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/InputMethodTest.java new file mode 100644 index 000000000000..bd56dba19e94 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/InputMethodTest.java @@ -0,0 +1,343 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.lwawt.macosx.LWCToolkit; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.util.*; +import java.util.List; + +import static java.awt.event.KeyEvent.KEY_PRESSED; +import static java.awt.event.KeyEvent.KEY_RELEASED; + +public class InputMethodTest { + public static JFrame frame; + public static JTextArea textArea; + public static Robot robot; + private static String currentTest = ""; + private static String currentSection = ""; + private static String initialLayout; + private static final Set addedLayouts = new HashSet<>(); + private static boolean success = true; + private static final List triggeredEvents = new ArrayList<>(); + + private enum TestCases { + CtrlShortcutNewWindowTest (new CtrlShortcutNewWindowTest()), + DeadKeysTest (new DeadKeysTest()), + FocusMoveUncommitedCharactersTest (new FocusMoveUncommitedCharactersTest()), + JapaneseReconvertTest(new JapaneseReconvertTest()), + KeyCodesTest (new KeyCodesTest()), + NextAppWinKeyTestDead (new NextAppWinKeyTest(true)), + NextAppWinKeyTestNormal (new NextAppWinKeyTest(false)), + PinyinCapsLockTest (new PinyinCapsLockTest()), + PinyinFullWidthPunctuationTest (new PinyinFullWidthPunctuationTest()), + PinyinHalfWidthPunctuationTest (new PinyinHalfWidthPunctuationTest()), + PinyinQuotesTest (new PinyinQuotesTest()), + RomajiYenTest (new RomajiYenTest(false)), + RomajiYenBackslashTest (new RomajiYenTest(true)), + UnderlyingLayoutQWERTYTest (new UnderlyingLayoutTest(false)), + UnderlyingLayoutQWERTZTest (new UnderlyingLayoutTest(true)), + ; + + private Runnable test; + + TestCases(Runnable runnable) { + test = runnable; + } + + public void run() { + test.run(); + } + } + + public static void main(String[] args) { + init(); + try { + for (String arg : args) { + runTest(arg); + } + } finally { + setCapsLockState(false); + LWCToolkit.switchKeyboardLayout(initialLayout); + for (String layoutId : addedLayouts) { + try { + LWCToolkit.disableKeyboardLayout(layoutId); + } catch (Exception ignored) {} + } + } + if (success) { + System.out.println("TEST PASSED"); + } else { + throw new RuntimeException("TEST FAILED: check output"); + } + } + + private static void init() { + try { + robot = new Robot(); + robot.setAutoDelay(100); + } catch (AWTException e) { + e.printStackTrace(); + System.exit(1); + } + + initialLayout = LWCToolkit.getKeyboardLayoutId(); + + frame = new JFrame("InputMethodTest"); + frame.setVisible(true); + frame.setSize(600, 300); + frame.setLocationRelativeTo(null); + + textArea = new JTextArea(); + textArea.addKeyListener(new KeyListener() { + @Override + public void keyTyped(KeyEvent keyEvent) { + triggeredEvents.add(keyEvent); + } + + @Override + public void keyPressed(KeyEvent keyEvent) { + triggeredEvents.add(keyEvent); + } + + @Override + public void keyReleased(KeyEvent keyEvent) { + triggeredEvents.add(keyEvent); + } + }); + + frame.setLayout(new BorderLayout()); + frame.getContentPane().add(textArea, BorderLayout.NORTH); + + textArea.grabFocus(); + try { + Thread.sleep(500); + } catch (InterruptedException ignored) {} + } + + private static void runTest(String name) { + currentTest = name; + setCapsLockState(false); + try { + TestCases.valueOf(name).run(); + } catch (Exception e) { + System.out.printf("Test %s (%s) FAILED: %s\n", currentTest, currentSection, e); + success = false; + } + } + + private static String readDefault(String domain, String key) { + try { + var proc = Runtime.getRuntime().exec(new String[]{"defaults", "read", domain, key}); + var exitCode = proc.waitFor(); + if (exitCode == 0) { + return new Scanner(proc.getInputStream()).next(); + } + } catch (Exception exc) { + exc.printStackTrace(); + throw new RuntimeException("internal error"); + } + + return null; + } + + private static void writeDefault(String domain, String key, String value) { + try { + Runtime.getRuntime().exec(new String[]{"defaults", "write", domain, key, value}).waitFor(); + } catch (Exception exc) { + exc.printStackTrace(); + throw new RuntimeException("internal error"); + } + } + + public static void section(String description) { + // clear dead key state + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); + + currentSection = description; + textArea.setText(""); + frame.setTitle(currentTest + ": " + description); + triggeredEvents.clear(); + } + + public static void layout(String name) { + List layouts = new ArrayList<>(); + if (name.matches("com\\.apple\\.inputmethod\\.(SCIM|TCIM|TYIM|Korean|VietnameseIM|Kotoeri\\.\\w+)\\.\\w+")) { + layouts.add(name.replaceFirst("\\.\\w+$", "")); + } + + layouts.add(name); + + for (String layout : layouts) { + if (!LWCToolkit.isKeyboardLayoutEnabled(layout)) { + LWCToolkit.enableKeyboardLayout(layout); + addedLayouts.add(layout); + } + } + + LWCToolkit.switchKeyboardLayout(name); + robot.delay(250); + } + + public static void setUseHalfWidthPunctuation(boolean flag) { + writeDefault("com.apple.inputmethod.CoreChineseEngineFramework", "usesHalfwidthPunctuation", flag ? "1" : "0"); + } + + private static void restartKotoeri() { + // Need to kill Kotoeri, since it doesn't reload the config otherwise. This makes me sad. + try { + Runtime.getRuntime().exec(new String[]{"killall", "-9", "-m", "JapaneseIM"}).waitFor(); + } catch (Exception exc) { + exc.printStackTrace(); + throw new RuntimeException("internal error"); + } + + // wait for it to restart... + robot.delay(5000); + } + + public static void setUseBackslashInsteadOfYen(boolean flag) { + writeDefault("com.apple.inputmethod.Kotoeri", "JIMPrefCharacterForYenKey", flag ? "1" : "0"); + restartKotoeri(); + } + + public static void setRomajiLayout(String layout) { + writeDefault("com.apple.inputmethod.Kotoeri", "JIMPrefRomajiKeyboardLayoutKey", layout); + restartKotoeri(); + } + + public static void type(int key, int modifiers) { + List modKeys = new ArrayList<>(); + + if ((modifiers & InputEvent.ALT_DOWN_MASK) != 0) { + modKeys.add(KeyEvent.VK_ALT); + } + + if ((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) { + modKeys.add(KeyEvent.VK_CONTROL); + } + + if ((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0) { + modKeys.add(KeyEvent.VK_SHIFT); + } + + if ((modifiers & InputEvent.META_DOWN_MASK) != 0) { + modKeys.add(KeyEvent.VK_META); + } + + for (var modKey : modKeys) { + robot.keyPress(modKey); + } + + robot.keyPress(key); + robot.keyRelease(key); + + for (var modKey : modKeys) { + robot.keyRelease(modKey); + } + + robot.delay(100); + } + + public static void setCapsLockState(boolean desiredState) { + LWCToolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_CAPS_LOCK, desiredState); + robot.delay(250); + } + + public static List getTriggeredEvents() { + return Collections.unmodifiableList(triggeredEvents); + } + + public static void expectText(String expectedValue) { + var actualValue = textArea.getText(); + if (actualValue.equals(expectedValue)) { + System.out.printf("Test %s (%s) passed: got '%s'\n", currentTest, currentSection, actualValue); + } else { + success = false; + System.out.printf("Test %s (%s) FAILED: expected '%s', got '%s'\n", currentTest, currentSection, expectedValue, actualValue); + } + } + + public static void expectKeyPress(int vk, int location, int modifiers, boolean strict) { + var pressed = triggeredEvents.stream().filter(e -> e.getID() == KEY_PRESSED).toList(); + var released = triggeredEvents.stream().filter(e -> e.getID() == KEY_RELEASED).toList(); + + if (pressed.size() == 1 || (pressed.size() > 1 && !strict)) { + var keyCode = pressed.get(pressed.size() - 1).getKeyCode(); + expectTrue(keyCode == vk, "key press, actual key code: " + keyCode + ", expected: " + vk); + + var keyLocation = pressed.get(pressed.size() - 1).getKeyLocation(); + expectTrue(keyLocation == location, "key press, actual key location: " + keyLocation + ", expected: " + location); + + var keyModifiers = pressed.get(pressed.size() - 1).getModifiersEx(); + expectTrue(keyModifiers == modifiers, "key press, actual key modifiers: " + keyModifiers + ", expected: " + modifiers); + } else { + if (strict) { + fail("expected exactly one KEY_PRESSED event, got " + pressed.size()); + } else { + fail("expected at least one KEY_PRESSED event, got none"); + } + } + + if (released.size() == 1 || (released.size() > 1 && !strict)) { + var keyCode = released.get(0).getKeyCode(); + expectTrue(keyCode == vk, "key release, actual key code: " + keyCode + ", expected: " + vk); + + var keyLocation = released.get(0).getKeyLocation(); + expectTrue(keyLocation == location, "key release, actual key location: " + keyLocation + ", expected: " + location); + + if (strict) { + var keyModifiers = released.get(0).getModifiersEx(); + expectTrue(keyModifiers == 0, "key release, actual key modifiers: " + keyModifiers + ", expected: 0"); + } + } else { + if (strict) { + fail("expected exactly one KEY_RELEASED event, got " + released.size()); + } else { + fail("expected at least one KEY_RELEASED event, got none"); + } + } + } + + public static void expectTrue(boolean value, String comment) { + if (value) { + System.out.printf("Test %s (%s) passed: %s\n", currentTest, currentSection, comment); + } else { + success = false; + System.out.printf("Test %s (%s) FAILED: %s\n", currentTest, currentSection, comment); + } + } + + public static void fail(String comment) { + expectTrue(false, comment); + } + + public static void delay(int millis) { + robot.delay(millis); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/JapaneseReconvertTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/JapaneseReconvertTest.java new file mode 100644 index 000000000000..24bb753a2ff7 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/JapaneseReconvertTest.java @@ -0,0 +1,53 @@ +/* + * Copyright 2024 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import static java.awt.event.KeyEvent.*; + +/** + * @test + * @summary Regression test for JBR-7119 Converting to Hanja/Kanji on macOS doesn't replace the converted Hangul/Kana symbols + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest JapaneseReconvertTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +public class JapaneseReconvertTest implements Runnable { + @Override + public void run() { + InputMethodTest.layout("com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese"); + InputMethodTest.type(VK_N, 0); + InputMethodTest.type(VK_I, 0); + InputMethodTest.type(VK_H, 0); + InputMethodTest.type(VK_O, 0); + InputMethodTest.type(VK_N, 0); + InputMethodTest.type(VK_G, 0); + InputMethodTest.type(VK_O, 0); + InputMethodTest.type(VK_ENTER, 0); + InputMethodTest.expectText("日本語"); + + InputMethodTest.type(VK_R, CTRL_DOWN_MASK | SHIFT_DOWN_MASK); + InputMethodTest.type(VK_ENTER, 0); + InputMethodTest.type(VK_ENTER, 0); + InputMethodTest.expectText("日本語"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/KeyCodesTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/KeyCodesTest.java new file mode 100644 index 000000000000..cbb6ad4b2032 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/KeyCodesTest.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5173 macOS keyboard support rewrite + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=false InputMethodTest KeyCodesTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import sun.lwawt.macosx.LWCToolkit; + +import static java.awt.event.KeyEvent.*; + +public class KeyCodesTest implements Runnable { + static private final int ROBOT_KEYCODE_BACK_QUOTE_ISO = 0x2000132; + static private final int ROBOT_KEYCODE_RIGHT_COMMAND = 0x2000036; + static private final int ROBOT_KEYCODE_RIGHT_SHIFT = 0x200003C; + static private final int ROBOT_KEYCODE_RIGHT_CONTROL = 0x200003E; + static private final int ROBOT_KEYCODE_YEN_SYMBOL_JIS = 0x200025D; + static private final int ROBOT_KEYCODE_CIRCUMFLEX_JIS = 0x2000218; + static private final int ROBOT_KEYCODE_NUMPAD_COMMA_JIS = 0x200025F; + static private final int ROBOT_KEYCODE_NUMPAD_ENTER = 0x200004C; + static private final int ROBOT_KEYCODE_NUMPAD_EQUALS = 0x2000051; + static private final int VK_SECTION = 0x01000000+0x00A7; + @Override + public void run() { + // ordinary non-letter character with VK_ key codes + verify("!", VK_EXCLAMATION_MARK, "com.apple.keylayout.French-PC", VK_SLASH); + verify("\"", VK_QUOTEDBL, "com.apple.keylayout.French-PC", VK_3); + verify("#", VK_NUMBER_SIGN, "com.apple.keylayout.British-PC", VK_BACK_SLASH); + verify("$", VK_DOLLAR, "com.apple.keylayout.French-PC", VK_CLOSE_BRACKET); + verify("&", VK_AMPERSAND, "com.apple.keylayout.French-PC", VK_1); + verify("'", VK_QUOTE, "com.apple.keylayout.French-PC", VK_4); + verify("(", VK_LEFT_PARENTHESIS, "com.apple.keylayout.French-PC", VK_5); + verify(")", VK_RIGHT_PARENTHESIS, "com.apple.keylayout.French-PC", VK_MINUS); + verify("*", VK_ASTERISK, "com.apple.keylayout.French-PC", VK_BACK_SLASH); + verify("+", VK_PLUS, "com.apple.keylayout.German", VK_CLOSE_BRACKET); + verify(",", VK_COMMA, "com.apple.keylayout.ABC", VK_COMMA); + verify("-", VK_MINUS, "com.apple.keylayout.ABC", VK_MINUS); + verify(".", VK_PERIOD, "com.apple.keylayout.ABC", VK_PERIOD); + verify("/", VK_SLASH, "com.apple.keylayout.ABC", VK_SLASH); + verify(":", VK_COLON, "com.apple.keylayout.French-PC", VK_PERIOD); + verify(";", VK_SEMICOLON, "com.apple.keylayout.ABC", VK_SEMICOLON); + verify("<", VK_LESS, "com.apple.keylayout.French-PC", VK_BACK_QUOTE); + verify("=", VK_EQUALS, "com.apple.keylayout.ABC", VK_EQUALS); + verify(">", VK_GREATER, "com.apple.keylayout.Turkish", VK_CLOSE_BRACKET); + verify("@", VK_AT, "com.apple.keylayout.Norwegian", VK_BACK_SLASH); + verify("[", VK_OPEN_BRACKET, "com.apple.keylayout.ABC", VK_OPEN_BRACKET); + verify("\\", VK_BACK_SLASH, "com.apple.keylayout.ABC", VK_BACK_SLASH); + verify("]", VK_CLOSE_BRACKET, "com.apple.keylayout.ABC", VK_CLOSE_BRACKET); + verify("^", VK_CIRCUMFLEX, "com.apple.keylayout.ABC", ROBOT_KEYCODE_CIRCUMFLEX_JIS); + verify("_", VK_UNDERSCORE, "com.apple.keylayout.French-PC", VK_8); + verify("`", VK_BACK_QUOTE, "com.apple.keylayout.ABC", VK_BACK_QUOTE); + verify("{", VK_BRACELEFT, "com.apple.keylayout.LatinAmerican", VK_QUOTE); + verify("}", VK_BRACERIGHT, "com.apple.keylayout.LatinAmerican", VK_BACK_SLASH); + verify("\u00a1", VK_INVERTED_EXCLAMATION_MARK, "com.apple.keylayout.Spanish-ISO", VK_EQUALS); + // TODO: figure out which keyboard layout has VK_EURO_SIGN as a key on the primary layer + verify(" ", VK_SPACE, "com.apple.keylayout.ABC", VK_SPACE); + + // control characters + verify("\t", VK_TAB, "com.apple.keylayout.ABC", VK_TAB); + verify("\n", VK_ENTER, "com.apple.keylayout.ABC", VK_ENTER); + verify("", VK_BACK_SPACE, "com.apple.keylayout.ABC", VK_BACK_SPACE); + verify("", VK_ESCAPE, "com.apple.keylayout.ABC", VK_ESCAPE); + + // keypad + verify("/", VK_DIVIDE, "com.apple.keylayout.ABC", VK_DIVIDE, VK_SLASH, KEY_LOCATION_NUMPAD, 0); + verify("*", VK_MULTIPLY, "com.apple.keylayout.ABC", VK_MULTIPLY, VK_ASTERISK, KEY_LOCATION_NUMPAD, 0); + verify("+", VK_ADD, "com.apple.keylayout.ABC", VK_ADD, VK_PLUS, KEY_LOCATION_NUMPAD, 0); + verify("-", VK_SUBTRACT, "com.apple.keylayout.ABC", VK_SUBTRACT, VK_MINUS, KEY_LOCATION_NUMPAD, 0); + verify("", VK_CLEAR, "com.apple.keylayout.ABC", VK_CLEAR, VK_UNDEFINED, KEY_LOCATION_NUMPAD, 0); + verify("\n", VK_ENTER, "com.apple.keylayout.ABC", ROBOT_KEYCODE_NUMPAD_ENTER, VK_ENTER, KEY_LOCATION_NUMPAD, 0); + verify(",", VK_COMMA, "com.apple.keylayout.ABC", ROBOT_KEYCODE_NUMPAD_COMMA_JIS, VK_COMMA, KEY_LOCATION_NUMPAD, 0); + verify("=", VK_EQUALS, "com.apple.keylayout.ABC", ROBOT_KEYCODE_NUMPAD_EQUALS, VK_EQUALS, KEY_LOCATION_NUMPAD, 0); + verify(".", VK_DECIMAL, "com.apple.keylayout.ABC", VK_DECIMAL, VK_PERIOD, KEY_LOCATION_NUMPAD, 0); + + // keypad numbers + for (int i = 0; i < 10; ++i) { + verify(String.valueOf((char)('0' + i)), VK_NUMPAD0 + i, "com.apple.keylayout.ABC", VK_NUMPAD0 + i, VK_0 + i, KEY_LOCATION_NUMPAD, 0); + } + + // function keys + verify("", VK_F1, "com.apple.keylayout.ABC", VK_F1); + verify("", VK_F19, "com.apple.keylayout.ABC", VK_F19); + + // Test ANSI/ISO/JIS keyboard weirdness + verify("\u00a7", 0x01000000+0x00A7, "com.apple.keylayout.ABC", VK_SECTION); + verify("\u00b2", 0x01000000+0x00B2, "com.apple.keylayout.French-PC", VK_SECTION); + verify("#", VK_NUMBER_SIGN, "com.apple.keylayout.CanadianFrench-PC", VK_SECTION); + verify("\u00ab", 0x01000000+0x00AB, "com.apple.keylayout.CanadianFrench-PC", ROBOT_KEYCODE_BACK_QUOTE_ISO); + verify("#", VK_NUMBER_SIGN, "com.apple.keylayout.CanadianFrench-PC", VK_BACK_QUOTE); + verify("\u00a5", 0x01000000+0x00A5, "com.apple.keylayout.ABC", ROBOT_KEYCODE_YEN_SYMBOL_JIS); + + // Test extended key codes that don"t match the unicode char + verify("\u00e4", 0x01000000+0x00C4, "com.apple.keylayout.German", VK_QUOTE); + verify("\u00e5", 0x01000000+0x00C5, "com.apple.keylayout.Norwegian", VK_OPEN_BRACKET); + verify("\u00e6", 0x01000000+0x00C6, "com.apple.keylayout.Norwegian", VK_QUOTE); + verify("\u00e7", 0x01000000+0x00C7, "com.apple.keylayout.French-PC", VK_9); + verify("\u00f1", 0x01000000+0x00D1, "com.apple.keylayout.Spanish-ISO", VK_SEMICOLON); + verify("\u00f6", 0x01000000+0x00D6, "com.apple.keylayout.German", VK_SEMICOLON); + verify("\u00f8", 0x01000000+0x00D8, "com.apple.keylayout.Norwegian", VK_SEMICOLON); + + // test modifier keys + verify("", VK_ALT, "com.apple.keylayout.ABC", VK_ALT, VK_UNDEFINED, KEY_LOCATION_LEFT, ALT_DOWN_MASK); + verify("", VK_ALT, "com.apple.keylayout.ABC", VK_ALT_GRAPH, VK_UNDEFINED, KEY_LOCATION_RIGHT, ALT_DOWN_MASK); + verify("", VK_META, "com.apple.keylayout.ABC", VK_META, VK_UNDEFINED, KEY_LOCATION_LEFT, META_DOWN_MASK); + verify("", VK_META, "com.apple.keylayout.ABC", ROBOT_KEYCODE_RIGHT_COMMAND, VK_UNDEFINED, KEY_LOCATION_RIGHT, META_DOWN_MASK); + verify("", VK_CONTROL, "com.apple.keylayout.ABC", VK_CONTROL, VK_UNDEFINED, KEY_LOCATION_LEFT, CTRL_DOWN_MASK); + verify("", VK_CONTROL, "com.apple.keylayout.ABC", ROBOT_KEYCODE_RIGHT_CONTROL, VK_UNDEFINED, KEY_LOCATION_RIGHT, CTRL_DOWN_MASK); + verify("", VK_SHIFT, "com.apple.keylayout.ABC", VK_SHIFT, VK_UNDEFINED, KEY_LOCATION_LEFT, SHIFT_DOWN_MASK); + verify("", VK_SHIFT, "com.apple.keylayout.ABC", ROBOT_KEYCODE_RIGHT_SHIFT, VK_UNDEFINED, KEY_LOCATION_RIGHT, SHIFT_DOWN_MASK); + + // TODO: disabled the test because it was flapping and isn't very useful anyways +// // duplicate key codes: Vietnamese ANSI_6 / ANSI_9 +// verify(" \u0309", 0x1000000+0x0309, "com.apple.keylayout.Vietnamese", VK_6); +// verify(" \u0323", 0x1000000+0x0323, "com.apple.keylayout.Vietnamese", VK_9); +// +// // duplicated key codes (dead): Apache ANSI_LeftBracket / ANSI_RightBracket +// verify("\u02db", VK_DEAD_OGONEK, "com.apple.keylayout.Apache", VK_OPEN_BRACKET, 0x1000000+0x02DB, KEY_LOCATION_STANDARD, 0); +// verify("\u02db\u0301", 0x1000000+0x0301, "com.apple.keylayout.Apache", VK_CLOSE_BRACKET); + } + + private void verify(String typed, int vk, String layout, int key, int charKeyCode, int location, int modifiers) { + if (!LWCToolkit.isKeyboardLayoutInstalled(layout)) { + System.out.printf("WARNING: Skipping key code test, vk = %d, layout = %s: this layout is not installed", vk, layout); + return; + } + char ch = (typed.length() == 1) ? typed.charAt(0) : 0; + InputMethodTest.section("Key code test: " + vk + ", layout: " + layout + ", char: " + String.format("U+%04X", (int)ch)); + InputMethodTest.layout(layout); + InputMethodTest.type(key, 0); + InputMethodTest.expectText(typed); + + if (ch != 0) { + InputMethodTest.expectTrue(getExtendedKeyCodeForChar(ch) == charKeyCode, "getExtendedKeyCodeForChar"); + } + + InputMethodTest.expectKeyPress(vk, location, modifiers, true); + } + + private void verify(String typed, int vk, String layout, int key) { + verify(typed, vk, layout, key, vk, KEY_LOCATION_STANDARD, 0); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/NextAppWinKeyTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/NextAppWinKeyTest.java new file mode 100644 index 000000000000..99bc2fd65473 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/NextAppWinKeyTest.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5469 Something weird going on with Cmd+Backtick / Cmd+Dead Grave + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dapple.awt.captureNextAppWinKey=true -Dcom.sun.awt.reportDeadKeysAsNormal=false InputMethodTest NextAppWinKeyTestDead + * @run main/othervm -Dapple.awt.captureNextAppWinKey=true -Dcom.sun.awt.reportDeadKeysAsNormal=true InputMethodTest NextAppWinKeyTestNormal + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import javax.swing.*; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; + +import static java.awt.event.KeyEvent.*; + +public class NextAppWinKeyTest implements Runnable { + private final boolean deadKeys; + + public NextAppWinKeyTest(boolean deadKeys) { + this.deadKeys = deadKeys; + } + + @Override + public void run() { + var extraFrame = new JFrame(); + extraFrame.setAutoRequestFocus(false); + extraFrame.setSize(300, 300); + extraFrame.setLocation(100, 100); + extraFrame.setVisible(true); + extraFrame.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent focusEvent) { + InputMethodTest.fail("Focus switched to the other window"); + } + + @Override + public void focusLost(FocusEvent focusEvent) {} + }); + + InputMethodTest.section("ABC"); + InputMethodTest.layout("com.apple.keylayout.ABC"); + InputMethodTest.type(VK_BACK_QUOTE, META_DOWN_MASK); + InputMethodTest.expectKeyPress(VK_BACK_QUOTE, KEY_LOCATION_STANDARD, META_DOWN_MASK, false); + + InputMethodTest.section("US-Intl"); + InputMethodTest.layout("com.apple.keylayout.USInternational-PC"); + InputMethodTest.type(VK_BACK_QUOTE, META_DOWN_MASK); + InputMethodTest.expectKeyPress(deadKeys ? VK_DEAD_GRAVE : VK_BACK_QUOTE, KEY_LOCATION_STANDARD, META_DOWN_MASK, false); + + InputMethodTest.section("French"); + InputMethodTest.layout("com.apple.keylayout.French"); + InputMethodTest.type(VK_BACK_SLASH, META_DOWN_MASK); + InputMethodTest.expectKeyPress(deadKeys ? VK_DEAD_GRAVE : VK_BACK_QUOTE, KEY_LOCATION_STANDARD, META_DOWN_MASK, false); + + extraFrame.setVisible(false); + extraFrame.dispose(); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinCapsLockTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinCapsLockTest.java new file mode 100644 index 000000000000..2702ea9c97db --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinCapsLockTest.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5254: CapsLock and Chinese IMs don't work properly + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest PinyinCapsLockTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static java.awt.event.KeyEvent.*; + +public class PinyinCapsLockTest implements Runnable { + private static final List expectLowercase = new ArrayList<>(Arrays.asList( + "com.apple.inputmethod.SCIM.ITABC", + "com.apple.inputmethod.SCIM.Shuangpin", + "com.apple.inputmethod.SCIM.WBH", + "com.apple.inputmethod.TYIM.Cangjie", + "com.apple.inputmethod.TYIM.Sucheng", + "com.apple.inputmethod.TYIM.Stroke", + "com.apple.inputmethod.TCIM.Zhuyin", + "com.apple.inputmethod.TCIM.Cangjie", + "com.apple.inputmethod.TCIM.ZhuyinEten", + "com.apple.inputmethod.TCIM.Jianyi", + "com.apple.inputmethod.TCIM.Pinyin", + "com.apple.inputmethod.TCIM.Shuangpin", + "com.apple.inputmethod.TCIM.WBH" + )); + + // Wubi (Simplified) produces uppercase characters even in native apps. + private static final List expectUppercase = new ArrayList<>(Arrays.asList( + "com.apple.inputmethod.SCIM.WBX" + )); + + @Override + public void run() { + for (String layout : expectLowercase) { + testLatinTyping(layout, false); + } + + for (String layout : expectUppercase) { + testLatinTyping(layout, true); + } + } + + private void testLatinTyping(String layout, boolean expectUppercase) { + InputMethodTest.section(layout); + InputMethodTest.layout(layout); + InputMethodTest.setCapsLockState(true); + InputMethodTest.type(VK_A, 0); + InputMethodTest.type(VK_B, 0); + InputMethodTest.type(VK_C, 0); + InputMethodTest.expectText(expectUppercase ? "ABC" : "abc"); + InputMethodTest.type(VK_ESCAPE, 0); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinFullWidthPunctuationTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinFullWidthPunctuationTest.java new file mode 100644 index 000000000000..de34b496497e --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinFullWidthPunctuationTest.java @@ -0,0 +1,68 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for IDEA-221385: Cannot input with half-width punctuation. + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest PinyinFullWidthPunctuationTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import static java.awt.event.KeyEvent.*; + +public class PinyinFullWidthPunctuationTest implements Runnable { + @Override + public void run() { + InputMethodTest.layout("com.apple.inputmethod.SCIM.ITABC"); + InputMethodTest.setUseHalfWidthPunctuation(false); + + InputMethodTest.section("comma"); + InputMethodTest.type(VK_COMMA, 0); + InputMethodTest.expectText("\uff0c"); + + InputMethodTest.section("period"); + InputMethodTest.type(VK_PERIOD, 0); + InputMethodTest.expectText("\u3002"); + + InputMethodTest.section("question mark"); + InputMethodTest.type(VK_SLASH, SHIFT_DOWN_MASK); + InputMethodTest.expectText("\uff1f"); + + InputMethodTest.section("semicolon"); + InputMethodTest.type(VK_SEMICOLON, 0); + InputMethodTest.expectText("\uff1b"); + + InputMethodTest.section("colon"); + InputMethodTest.type(VK_SEMICOLON, SHIFT_DOWN_MASK); + InputMethodTest.expectText("\uff1a"); + + InputMethodTest.section("left square bracket"); + InputMethodTest.type(VK_OPEN_BRACKET, 0); + InputMethodTest.expectText("\u3010"); + + InputMethodTest.section("right square bracket"); + InputMethodTest.type(VK_CLOSE_BRACKET, 0); + InputMethodTest.expectText("\u3011"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinHalfWidthPunctuationTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinHalfWidthPunctuationTest.java new file mode 100644 index 000000000000..d869fe33a56b --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinHalfWidthPunctuationTest.java @@ -0,0 +1,68 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for IDEA-221385: Cannot input with half-width punctuation. + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest PinyinHalfWidthPunctuationTest + * @requires (jdk.version.major >= 8 & os.family == "mac") + */ + +import static java.awt.event.KeyEvent.*; + +public class PinyinHalfWidthPunctuationTest implements Runnable { + @Override + public void run() { + InputMethodTest.layout("com.apple.inputmethod.SCIM.ITABC"); + InputMethodTest.setUseHalfWidthPunctuation(true); + + InputMethodTest.section("comma"); + InputMethodTest.type(VK_COMMA, 0); + InputMethodTest.expectText(","); + + InputMethodTest.section("period"); + InputMethodTest.type(VK_PERIOD, 0); + InputMethodTest.expectText("."); + + InputMethodTest.section("question mark"); + InputMethodTest.type(VK_SLASH, SHIFT_DOWN_MASK); + InputMethodTest.expectText("?"); + + InputMethodTest.section("semicolon"); + InputMethodTest.type(VK_SEMICOLON, 0); + InputMethodTest.expectText(";"); + + InputMethodTest.section("colon"); + InputMethodTest.type(VK_SEMICOLON, SHIFT_DOWN_MASK); + InputMethodTest.expectText(":"); + + InputMethodTest.section("left square bracket"); + InputMethodTest.type(VK_OPEN_BRACKET, 0); + InputMethodTest.expectText("["); + + InputMethodTest.section("right square bracket"); + InputMethodTest.type(VK_CLOSE_BRACKET, 0); + InputMethodTest.expectText("]"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinQuotesTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinQuotesTest.java new file mode 100644 index 000000000000..1d9156d53669 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/PinyinQuotesTest.java @@ -0,0 +1,64 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @summary Regression test for IDEA-271898: Cannot enter Chinese full-corner single and double quotes (IDEA: macOS Intel version) + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest PinyinQuotesTest + */ + +import static java.awt.event.KeyEvent.*; + +public class PinyinQuotesTest implements Runnable { + @Override + public void run() { + InputMethodTest.layout("com.apple.inputmethod.SCIM.ITABC"); + singleQuotes(); + doubleQuotes(); + } + + private void singleQuotes() { + InputMethodTest.section("Single quotes"); + + // type the following: ' ' + InputMethodTest.type(VK_QUOTE, 0); + InputMethodTest.type(VK_SPACE, 0); + InputMethodTest.type(VK_QUOTE, 0); + + InputMethodTest.expectText("\u2018 \u2019"); + } + + private void doubleQuotes() { + InputMethodTest.section("Double quotes"); + + // type the following: " " + InputMethodTest.type(VK_QUOTE, SHIFT_DOWN_MASK); + InputMethodTest.type(VK_SPACE, 0); + InputMethodTest.type(VK_QUOTE, SHIFT_DOWN_MASK); + + InputMethodTest.expectText("\u201c \u201d"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/RomajiYenTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/RomajiYenTest.java new file mode 100644 index 000000000000..1007f053f988 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/RomajiYenTest.java @@ -0,0 +1,114 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5309: Minor keyboard inconsistencies on macOS + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest RomajiYenTest + * @run main InputMethodTest RomajiYenBackslashTest + */ + +import static java.awt.event.KeyEvent.*; + +public class RomajiYenTest implements Runnable { + private final boolean isBackslash; + static private final int ROBOT_KEYCODE_YEN_SYMBOL_JIS = 0x200025D; + static private final String YEN_SYMBOL = "\u00a5"; + static private final String RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK = "\u00bb"; + + public RomajiYenTest(boolean isBackslash) { + this.isBackslash = isBackslash; + } + + @Override + public void run() { + InputMethodTest.setUseBackslashInsteadOfYen(isBackslash); + InputMethodTest.setRomajiLayout("com.apple.keylayout.ABC"); + InputMethodTest.layout("com.apple.inputmethod.Kotoeri.RomajiTyping.Roman"); + backslash(); + optBackslash(); + shiftBackslash(); + optShiftBackslash(); + optY(); + yen(); + optYen(); + shiftYen(); + optShiftYen(); + } + + private void backslash() { + InputMethodTest.section("Backslash"); + InputMethodTest.type(VK_BACK_SLASH, 0); + InputMethodTest.expectText(isBackslash ? "\\" : YEN_SYMBOL); + } + + private void optBackslash() { + InputMethodTest.section("Opt+Backslash"); + InputMethodTest.type(VK_BACK_SLASH, ALT_DOWN_MASK); + InputMethodTest.expectText(isBackslash ? YEN_SYMBOL : "\\"); + } + + private void shiftBackslash() { + InputMethodTest.section("Shift+Backslash"); + InputMethodTest.type(VK_BACK_SLASH, SHIFT_DOWN_MASK); + InputMethodTest.expectText("|"); + } + + private void optShiftBackslash() { + InputMethodTest.section("Opt+Shift+Backslash"); + InputMethodTest.type(VK_BACK_SLASH, SHIFT_DOWN_MASK | ALT_DOWN_MASK); + InputMethodTest.expectText(RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK); + } + + private void optY() { + InputMethodTest.section("Opt+Y"); + InputMethodTest.type(VK_Y, ALT_DOWN_MASK); + InputMethodTest.expectText(isBackslash ? "\\" : YEN_SYMBOL); + } + + private void yen() { + InputMethodTest.section("Yen"); + InputMethodTest.type(ROBOT_KEYCODE_YEN_SYMBOL_JIS, 0); + InputMethodTest.expectText(isBackslash ? "\\" : YEN_SYMBOL); + } + + private void optYen() { + InputMethodTest.section("Opt+Yen"); + InputMethodTest.type(ROBOT_KEYCODE_YEN_SYMBOL_JIS, ALT_DOWN_MASK); + InputMethodTest.expectText(isBackslash ? YEN_SYMBOL : "\\"); + } + + private void shiftYen() { + InputMethodTest.section("Shift+Yen"); + InputMethodTest.type(ROBOT_KEYCODE_YEN_SYMBOL_JIS, SHIFT_DOWN_MASK); + InputMethodTest.expectText("|"); + } + + private void optShiftYen() { + InputMethodTest.section("Opt+Shift+Yen"); + InputMethodTest.type(ROBOT_KEYCODE_YEN_SYMBOL_JIS, SHIFT_DOWN_MASK | ALT_DOWN_MASK); + InputMethodTest.expectText("|"); + } +} diff --git a/test/jdk/jb/sun/awt/macos/InputMethodTest/UnderlyingLayoutTest.java b/test/jdk/jb/sun/awt/macos/InputMethodTest/UnderlyingLayoutTest.java new file mode 100644 index 000000000000..550f850125f2 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/InputMethodTest/UnderlyingLayoutTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for JBR-5558 macOS keyboard rewrite 2 + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main InputMethodTest UnderlyingLayoutQWERTYTest + * @run main InputMethodTest UnderlyingLayoutQWERTZTest + */ + +import static java.awt.event.KeyEvent.*; + +public class UnderlyingLayoutTest implements Runnable { + private final boolean isQwertz; + + public UnderlyingLayoutTest(boolean isQwertz) { + this.isQwertz = isQwertz; + } + + @Override + public void run() { + if (isQwertz) { + InputMethodTest.setRomajiLayout("com.apple.keylayout.ABC-QWERTZ"); + qwertz("com.apple.keylayout.German"); + qwertz("com.apple.keylayout.ABC-QWERTZ"); + qwertz("com.apple.keylayout.Polish"); + qwertz("com.apple.inputmethod.Kotoeri.RomajiTyping.Roman"); + qwertz("com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese"); + qwertz("com.apple.inputmethod.Kotoeri.KanaTyping.Roman"); + // qwerty("com.apple.inputmethod.Kotoeri.KanaTyping.Japanese"); + } else { + InputMethodTest.setRomajiLayout("com.apple.keylayout.ABC"); + qwerty("com.apple.keylayout.US"); + qwerty("com.apple.keylayout.ABC"); + qwerty("com.apple.keylayout.Russian"); + qwerty("com.apple.inputmethod.Kotoeri.RomajiTyping.Roman"); + qwerty("com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese"); + qwerty("com.apple.inputmethod.Kotoeri.KanaTyping.Roman"); + qwerty("com.apple.inputmethod.Kotoeri.KanaTyping.Japanese"); + } + } + + private void qwerty(String layout) { + testImpl(layout, VK_Y); + } + + private void qwertz(String layout) { + testImpl(layout, VK_Z); + } + + private void testImpl(String layout, int vkY) { + InputMethodTest.section("Cmd " + layout); + InputMethodTest.layout(layout); + InputMethodTest.type(VK_Y, META_DOWN_MASK); + InputMethodTest.expectKeyPress(vkY, KEY_LOCATION_STANDARD, META_DOWN_MASK, false); + + InputMethodTest.section("Ctrl " + layout); + InputMethodTest.type(VK_Y, CTRL_DOWN_MASK); + InputMethodTest.expectKeyPress(vkY, KEY_LOCATION_STANDARD, CTRL_DOWN_MASK, false); + } +} diff --git a/test/jdk/jb/sun/awt/macos/KeyPressAndHoldTest.java b/test/jdk/jb/sun/awt/macos/KeyPressAndHoldTest.java new file mode 100644 index 000000000000..393fb8eb7d3e --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/KeyPressAndHoldTest.java @@ -0,0 +1,288 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JFrame; +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.AWTException; +import java.awt.GraphicsEnvironment; +import java.awt.Robot; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JRE-998: Input freezes after MacOS key-selector on Mojave + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @run main KeyPressAndHoldTest + */ + +/* + * Description: Tests that user input continues normally after using Press&Hold feature of maxOS. + * Robot holds down sample key so accent popup menu may appear and then types sample text. + * Test passes if the sample text was typed correctly. + * + * Note: Test works with English keyboard layout. + * Test requires Press&Hold feature of maxOS (enabled by default for macOS >= 10.7). + * MacOS accessibility permission should also be granted for the application launching this test, so + * Java Robot is able to access keyboard (use System Preferences -> Security & Privacy -> Privacy tab -> Accessibility). + */ + +public class KeyPressAndHoldTest { + + private static final int SAMPLE_KEY = KeyEvent.VK_E; + + private static final String SAMPLE = "échantillon"; + private static final String SAMPLE_BS = "chantillon"; + private static final String SAMPLE_NO_ACCENT = "echantillon"; + private static final String SAMPLE_MISPRINT = "e0chantillon"; + + private static final String PRESS_AND_HOLD_IS_DISABLED = "eeeeeeeeee"; + + private static final int PAUSE = 2000; + private static final int TIMEOUT = PAUSE*10; + + private static volatile String result=""; + + private static Robot robot; + + private static int exitValue = 0; + + /* + * Returns macOS major and minor version as an integer + */ + private static int getMajorMinorMacOsVersion() { + int version = 0; + String versionProp = System.getProperty("os.version"); + if (versionProp != null && !versionProp.isEmpty()) { + String[] versionComponents = versionProp.split("\\."); + String majorMinor = versionComponents[0]; + if (versionComponents.length > 1) { + majorMinor += versionComponents[1]; + } + try { + version = Integer.parseInt(majorMinor); + } catch (NumberFormatException nfexception) { + // Do nothing + } + } + return version; + } + + /* + * Hold down sample key so accents popup menu may appear + */ + private static void holdDownSampleKey() { + robot.waitForIdle(); + for (int i = 0; i < 10; i++) { + robot.keyPress(SAMPLE_KEY); + } + robot.keyRelease(SAMPLE_KEY); + } + + /* + * Type sample text except the first sample character + */ + private static void typeSampleBody() { + robot.delay(PAUSE); + for (int utfCode : SAMPLE.substring(1).toCharArray()) { + int keyCode = KeyEvent.getExtendedKeyCodeForChar(utfCode); + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + } + robot.delay(PAUSE); + robot.waitForIdle(); + } + + /* + * Just check if accent popup appears, select no accent + */ + private static void checkAccentPopup() { + holdDownSampleKey(); + robot.keyPress(KeyEvent.VK_KP_DOWN); + robot.keyRelease(KeyEvent.VK_KP_DOWN); + robot.delay(PAUSE); + robot.waitForIdle(); + } + + /* + * Type sample by selecting accent for the sample key from the popup dialog + */ + private static void sample() { + holdDownSampleKey(); + robot.keyPress(KeyEvent.VK_2); + robot.keyRelease(KeyEvent.VK_2); + typeSampleBody(); + } + + /* + * Do not select any accent for the sample key but press Backspace to delete it + */ + private static void sampleBS() { + holdDownSampleKey(); + robot.keyPress(KeyEvent.VK_BACK_SPACE); + robot.keyRelease(KeyEvent.VK_BACK_SPACE); + typeSampleBody(); + } + + /* + * Do not select any accent for the sample key from the popup dialog just press Esc + */ + private static void sampleNoAccent() { + holdDownSampleKey(); + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); + typeSampleBody(); + } + + /* + * Miss to select any accent for the sample key by pressing 0 + */ + private static void sampleMisprint() { + holdDownSampleKey(); + robot.keyPress(KeyEvent.VK_0); + robot.keyRelease(KeyEvent.VK_0); + typeSampleBody(); + } + + private static void checkResult(String testName, String expected) { + if (expected.equals(result)) { + System.out.println(testName + ": ok"); + } else { + System.err.println(testName + ": failed, expected \"" + expected + "\", but received \"" + result + "\""); + exitValue = 1; + } + } + + public static void main(String[] args) throws InterruptedException, InvocationTargetException { + + if (GraphicsEnvironment.isHeadless()) { + throw new RuntimeException("ERROR: Cannot execute the test in headless environment"); + } + + int osVersion = getMajorMinorMacOsVersion(); + if (osVersion == 0) { + throw new RuntimeException("ERROR: Cannot determine MacOS version"); + } else if (osVersion < 107) { + System.out.println("TEST SKIPPED: No Press&Hold feature for Snow Leopard or lower MacOS version"); + return; + } + + final JFrame frame = new JFrame(KeyPressAndHoldTest.class.getName()); + final CountDownLatch frameGainedFocus = new CountDownLatch(1); + final JTextArea textArea = new JTextArea(); + + final WindowAdapter frameFocusListener = new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + frameGainedFocus.countDown(); + } + }; + + final DocumentListener documentListener = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent event) { + result = textArea.getText(); + } + + @Override + public void removeUpdate(DocumentEvent event) { + result = textArea.getText(); + } + + @Override + public void changedUpdate(DocumentEvent event) { + // No such events for plain text components + } + }; + + final Runnable frameRunner = () -> { + textArea.getDocument().addDocumentListener(documentListener); + frame.getContentPane().add(textArea); + frame.setSize(400, 200); + frame.setLocation(100, 100); + frame.addWindowFocusListener(frameFocusListener); + frame.setVisible(true); + }; + + final Runnable cleanTextArea = () -> textArea.setText(""); + + final Runnable disposeRunner = () -> { + textArea.getDocument().removeDocumentListener(documentListener); + frame.removeWindowFocusListener(frameFocusListener); + frame.dispose(); + }; + + try { + robot = new Robot(); + robot.setAutoDelay(50); + + SwingUtilities.invokeLater(frameRunner); + if(!frameGainedFocus.await(TIMEOUT, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("Test ERROR: Cannot focus on the test frame"); + } + + checkAccentPopup(); + if (PRESS_AND_HOLD_IS_DISABLED.equals(result)) { + throw new RuntimeException("ERROR: Holding a key down causes the key repeat instead of " + + "accent menu popup, please check if Press&Hold feature of maxOS >= 10.7 is enabled"); + } + SwingUtilities.invokeLater(cleanTextArea); + + sample(); + checkResult("AccentChar", SAMPLE); + SwingUtilities.invokeLater(cleanTextArea); + + sampleBS(); + checkResult("BackspaceAccentChar", SAMPLE_BS); + SwingUtilities.invokeLater(cleanTextArea); + + sampleNoAccent(); + checkResult("NoAccentChar", SAMPLE_NO_ACCENT); + SwingUtilities.invokeLater(cleanTextArea); + + sampleMisprint(); + checkResult("MisprintAccentChar", SAMPLE_MISPRINT); + SwingUtilities.invokeLater(cleanTextArea); + + if (exitValue == 0) { + System.out.println("TEST PASSED"); + } else { + throw new RuntimeException("TEST FAILED: Some samples were typed incorrectly"); + } + + } catch (AWTException awtException) { + throw new RuntimeException("ERROR: Cannot create Robot", awtException); + } finally { + SwingUtilities.invokeAndWait(disposeRunner); + /* Waiting for EDT auto-shutdown */ + Thread.sleep(PAUSE); + } + } +} diff --git a/test/jdk/jb/sun/awt/macos/KeyboardLayoutSwitchTest/KeyboardLayoutSwitchTest.java b/test/jdk/jb/sun/awt/macos/KeyboardLayoutSwitchTest/KeyboardLayoutSwitchTest.java new file mode 100644 index 000000000000..4fce243b36ea --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/KeyboardLayoutSwitchTest/KeyboardLayoutSwitchTest.java @@ -0,0 +1,69 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; + +public class KeyboardLayoutSwitchTest implements Runnable { + + private static Robot robot; + private JFrame frame; + + public static void main(String[] args) throws Exception { + + System.out.println("VK_TAB = " + KeyEvent.VK_TAB); + robot = new Robot(); + robot.setAutoDelay(50); + + KeyboardLayoutSwitchTest test = new KeyboardLayoutSwitchTest(); + SwingUtilities.invokeAndWait(test); + robot.delay(3000); + + try { + SwingUtilities.invokeAndWait(() -> + pressCtrlKey(KeyEvent.VK_TAB)); + } finally { + SwingUtilities.invokeAndWait(() -> test.frame.dispose()); + robot.delay(2000); + } + System.out.println("Test PASSED"); + } + + private static void pressCtrlKey(int vk) { + robot.keyPress(KeyEvent.VK_CONTROL); + robot.keyPress(vk); + robot.keyRelease(vk); + robot.keyRelease(KeyEvent.VK_CONTROL); + } + + @Override + public void run() { + frame = new JFrame(getClass().getSimpleName()); + frame.pack(); + frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + frame.toFront(); + } +} \ No newline at end of file diff --git a/test/jdk/jb/sun/awt/macos/KeyboardLayoutSwitchTest/KeyboardLayoutSwitchTest.sh b/test/jdk/jb/sun/awt/macos/KeyboardLayoutSwitchTest/KeyboardLayoutSwitchTest.sh new file mode 100755 index 000000000000..bc25d19c9ae0 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/KeyboardLayoutSwitchTest/KeyboardLayoutSwitchTest.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @summary KeyboardLayoutSwitchTest.sh checks memory leaks +# @run shell KeyboardLayoutSwitchTest.sh + +OS=`uname -s` +case "$OS" in + Darwin) + echo "Detected OS $OS" + ;; + * ) + echo "PASSED: The test is valid for MacOSX" + exit 0; + ;; +esac + +if [ -z "${TESTSRC}" ]; then + echo "TESTSRC undefined: set to ." + TESTSRC=. +fi + +if [ -z "${TESTCLASSES}" ]; then + echo "TESTCLASSES undefined: set to ." + TESTCLASSES=. +fi + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +cd ${TESTSRC} +//${TESTJAVA}/bin/javac -d ${TESTCLASSES} AppleSymbolicHotKeysReader.java +${TESTJAVA}/bin/javac -d ${TESTCLASSES} KeyboardLayoutSwitchTest.java + +echo "reading current hot keys" +oldKeyValue=$(defaults read "com.apple.symbolichotkeys" | grep -A10 " 60 =" | sed '$d' | sed '1d' | tr -d '\r\n' | tr -s ' ' | sed s/standard/\'standard\'/) + +defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys -dict-add 60 "{ enabled = 1; value = { parameters = ( 65535, 48, 262144 ); type = 'standard'; };}" +${TESTJAVA}/bin/java -cp ${TESTCLASSES} KeyboardLayoutSwitchTest +exit_code=$? +defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys -dict-add 60 "$oldKeyValue" + +case $exit_code in +0) echo "PASSED" + ;; +*) echo "FAILED" + exit 1 + ;; +esac +exit 0 + + + diff --git a/test/jdk/jb/sun/awt/macos/MoveFocusShortcutTest.java b/test/jdk/jb/sun/awt/macos/MoveFocusShortcutTest.java new file mode 100644 index 000000000000..ab4dd59d1309 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/MoveFocusShortcutTest.java @@ -0,0 +1,182 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.AWTException; +import java.awt.Frame; +import java.awt.GraphicsEnvironment; +import java.awt.Robot; +import java.awt.Window; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * @test + * @summary Regression test for JRE-318: Cmd+` doesn't work after update to JDK 152_* + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @run main MoveFocusShortcutTest + */ + +/* + * Description: Test checks that Command+` macOS system shortcut successively switches focus between three Java Frames. + * + * Note: Please check that Command+` macOS system shortcut is enabled before launching this test + * (use System Preferences -> Keyboard -> Shortcuts tab -> Keyboard -> mark 'Move focus to next window' checkbox) + * On MacOS 10.14 and later accessibility permission should be granted for the application launching this test, so + * Java Robot is able to access keyboard (use System Preferences -> Security & Privacy -> Privacy tab -> Accessibility). + */ + +public class MoveFocusShortcutTest { + + private static final int PAUSE = 2000; + + private static final int framesCount = 3; + + private static TestFrame[] frames; + private static WindowAdapter frameFocusListener; + + private static Robot robot; + + private static class TestFrame extends Frame { + + private final CountDownLatch frameGainedFocus; + + private TestFrame(String title) { + super(title); + frameGainedFocus = new CountDownLatch(2); + } + + private CountDownLatch getLatch() { + return frameGainedFocus; + } + } + + /* + * Checks that pressing Command+` successively switches focus between three Java Frames + */ + public static void main(String[] args) throws AWTException, InterruptedException { + + if (GraphicsEnvironment.isHeadless()) { + throw new RuntimeException("ERROR: Cannot execute the test in headless environment"); + } + + frames = new TestFrame[framesCount]; + + frameFocusListener = new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent windowEvent) { + Window window = windowEvent.getWindow(); + try { + TestFrame frame = (TestFrame) windowEvent.getWindow(); + frame.getLatch().countDown(); + System.out.println("Window gained focus: " + frame.getTitle()); + } catch (ClassCastException e) { + throw new RuntimeException("Unexpected window: " + window); + } + } + }; + + try { + robot = new Robot(); + robot.setAutoDelay(50); + + System.out.println("Open test frames"); + for(int i = 0; i < framesCount; i++) { + showFrame(i); + Thread.sleep(PAUSE); + robot.waitForIdle(); + } + + String check = ""; + for(int i = 0; i < framesCount; i++) { + if(frames[i].getLatch().getCount() != 1) { + check += check.isEmpty() ? i : (", " + i); + } + } + if (check.isEmpty()) { + System.out.println("All frames were opened"); + } else { + throw new RuntimeException("Test ERROR: Cannot focus the TestFrame(s): " + check); + } + + for(int i = 0; i < framesCount; i++) { + moveFocusToNextWindow(); + Thread.sleep(PAUSE); + robot.waitForIdle(); + } + + String result = ""; + for(int i = 0; i < framesCount; i++) { + if(!frames[i].getLatch().await(PAUSE, TimeUnit.MILLISECONDS)) { + result += result.isEmpty() ? i : (", " + i); + } + } + if(result.isEmpty()) { + System.out.println("Test PASSED"); + } else { + throw new RuntimeException("Test FAILED: Command+` shortcut cannot move focus to the TestFrame(s): " + + result); + } + } finally { + for(int i = 0; i < framesCount; i++) { + destroyFrame(i); + } + /* Waiting for EDT auto-shutdown */ + Thread.sleep(PAUSE); + } + } + + /* + * Opens a test frame + */ + private static void showFrame(int num) { + frames[num] = new TestFrame("TestFrame" + num); + frames[num].setSize(400, 200); + frames[num].setLocation(50*(num+1), 50*(num+1)); + frames[num].addWindowFocusListener(frameFocusListener); + frames[num].setVisible(true); + } + + /* + * Presses Command+` on macOS keyboard + */ + private static void moveFocusToNextWindow() { + System.out.println("Move focus to the next window"); + robot.keyPress(KeyEvent.VK_META); + robot.keyPress(KeyEvent.VK_BACK_QUOTE); + robot.keyRelease(KeyEvent.VK_BACK_QUOTE); + robot.keyRelease(KeyEvent.VK_META); + } + + /* + * Disposes a test frame + */ + private static void destroyFrame(int num) { + if(frames[num] != null) { + frames[num].removeWindowFocusListener(frameFocusListener); + frames[num].dispose(); + } + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Key.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Key.java new file mode 100644 index 000000000000..9395d27d4e7c --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Key.java @@ -0,0 +1,141 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.event.KeyEvent; +import java.util.HashMap; + +import static java.awt.event.KeyEvent.*; + +/* + * Class containing common key functionality + */ +public class Key { + + // KeyEvent.VK_ constant name corresponding to the key on US keyboard layout + private final String vkName; + // KeyChars mapped to the key on the current keyboard layout + private final MappedKeyChars mappedKeyChars; + + Key(String vkName, MappedKeyChars mappedKeyChars) { + this.vkName = vkName; + this.mappedKeyChars = mappedKeyChars; + } + + // Returns the virtual key code for US keyboard layout. + // Robot only knows US keyboard layout. + // So to press some key on the current layout, one needs to pass corresponding US layout key code to Robot. + // So every key stores corresponding KeyEvent.VK_ constant name to provide mapping to US layout. + int getKeyCode_US() { + if (vkName.equals("VK_SECTION")) { + return 0x01000000 + 0x00A7; + } + try { + return KeyEvent.class.getField(vkName).getInt(null); + } catch (IllegalAccessException | NoSuchFieldException e) { + throw new RuntimeException(e); + } + }; + + // Returns key code for the current layout. + // Key that generates VK_ code when using a US keyboard layout also generates a unique code for other layout. + // Test firstly determines char mapped to the key on the current layout + // and then uses KeyEvent.getExtendedKeyCodeForChar(c) to get the key code. + int getKeyCode(boolean ignoreDead) { + KeyChar keyChar = mappedKeyChars.getKeyChar(); + char ch = keyChar.getChar(); + if (!ignoreDead && keyChar.isDead() && deadKeyCodesMap.containsKey(ch)) { + // KeyEvent.getExtendedKeyCodeForChar(ch) does not return corresponding VK_ constant for dead keys + return deadKeyCodesMap.get(ch); + } else { + return KeyEvent.getExtendedKeyCodeForChar(ch); + } + } + + int getKeyCode() { + return getKeyCode(false); + } + + // Returns key char for the current layout + public char getChar(Modifier modifier) { + return mappedKeyChars.getKeyChar(modifier).getChar(); + } + + // Checks if no char is mapped to the modifier + key + public boolean isCharNull(Modifier modifier) { + return (mappedKeyChars.getKeyChar(modifier).getChar() == Character.MIN_VALUE); + } + + // Checks if modifier + key is a shortcut + public boolean isCharUndefined(Modifier modifier) { + return (mappedKeyChars.getKeyChar(modifier).getChar() == Character.MAX_VALUE); + } + + // Checks if key is a dead key, no modifiers + public boolean isDead() { + return mappedKeyChars.getKeyChar().isDead(); + } + + // Checks if modifier + key is a dead key, always false for shortcut + public boolean isDead(Modifier modifier) { + return mappedKeyChars.getKeyChar(modifier).isDead(); + } + + // Map storing possible dead key chars and corresponding VK_ codes + private static final HashMap deadKeyCodesMap = new HashMap() { + { + // Please see: + // jbruntime/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp + // jbruntime/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m + + put((char) 0x02D9, VK_DEAD_ABOVEDOT); + put((char) 0x02DA, VK_DEAD_ABOVERING); + put((char) 0x00B4, VK_DEAD_ACUTE); // ACUTE ACCENT + put((char) 0x0384, VK_DEAD_ACUTE); // GREEK TONOS + // This key may either be an acute accent or a cedilla. On Windows, it is reported as DEAD_ACUTE, let's do the same. + put((char) 0x0027 /* ' */, VK_DEAD_ACUTE); // APOSTROPHE, QUOTE + put((char) 0x02D8, VK_DEAD_BREVE); + put((char) 0x02C7, VK_DEAD_CARON); + put((char) 0x00B8, VK_DEAD_CEDILLA); // CEDILLA + put((char) 0x002C /* , */, VK_DEAD_CEDILLA); // COMMA + put((char) 0x02C6, VK_DEAD_CIRCUMFLEX); // MODIFIER LETTER CIRCUMFLEX ACCENT + put((char) 0x005E, VK_DEAD_CIRCUMFLEX); // CIRCUMFLEX ACCENT + put((char) 0x00A8, VK_DEAD_DIAERESIS); // DIAERESIS + put((char) 0x0022 /* " */, VK_DEAD_DIAERESIS); // QUOTATION MARK + put((char) 0x02DD, VK_DEAD_DOUBLEACUTE); + put((char) 0x0060, VK_DEAD_GRAVE); + put((char) 0x037A, VK_DEAD_IOTA); + put((char) 0x02C9, VK_DEAD_MACRON); // MODIFIER LETTER MACRON + put((char) 0x00AF, VK_DEAD_MACRON); // MACRON + put((char) 0x02DB, VK_DEAD_OGONEK); + put((char) 0x02DC, VK_DEAD_TILDE); // SMALL TILDE + put((char) 0x007E, VK_DEAD_TILDE); // TILDE + put((char) 0x309B, VK_DEAD_VOICED_SOUND); + put((char) 0x309C, VK_DEAD_SEMIVOICED_SOUND); + } + }; + + @Override + public String toString() { + return this.vkName; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/KeyChar.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/KeyChar.java new file mode 100644 index 000000000000..466ff3b29b76 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/KeyChar.java @@ -0,0 +1,65 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Class describing a key char + */ +public class KeyChar { + + // Char value + private final char ch; + // Dead or not + private final boolean isDead; + + // Private constructor for an ordinal key char + private KeyChar(char ch) { + this.ch = ch; + this.isDead = false; + } + + // Private constructor for a dead key char + private KeyChar(char ch, boolean isDead) { + this.ch = ch; + this.isDead = isDead; + } + + // Helper method for an ordinal key char creation + static KeyChar ch(char ch) { + return new KeyChar(ch); + } + + // Helper method for a dead key char creation + static KeyChar dead(char ch) { + return new KeyChar(ch, true); + } + + // Returns dead marker + boolean isDead() { + return isDead; + } + + // Returns char value + char getChar() { + return ch; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout.java new file mode 100644 index 000000000000..284416236f67 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Enumerates macOS keyboard layouts covered by this test + */ +public enum Layout { + + ABC ("ABC", Layout_ABC.values()), + US_INTERNATIONAL_PC ("USInternational-PC", Layout_US_INTERNATIONAL_PC.values()), + SPANISH_ISO ("Spanish-ISO", Layout_SPANISH_ISO.values()), + FRENCH_PC ("French-PC", Layout_FRENCH_PC.values()), + GERMAN ("German", Layout_GERMAN.values()), + + ; + + // Real macOS keyboard layout name without "com.apple.keylayout." prefix + private String name; + // Array of test keys for the layout + private LayoutKey[] layoutKeys; + + Layout(String name, LayoutKey[] layoutKeys) { + this.name = name; + this.layoutKeys = layoutKeys; + } + + // Return array of test keys for the layout + LayoutKey[] getLayoutKeys() { + return layoutKeys; + } + + @Override + public String toString() { + return "com.apple.keylayout." + name; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/LayoutKey.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/LayoutKey.java new file mode 100644 index 000000000000..fe09602d2df0 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/LayoutKey.java @@ -0,0 +1,33 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Common interface for all test layouts. + * Keyboard layouts are declared as a separate enums to allow testing of different key sets for different layouts. + * As layouts are declared as enums, they cannot extend any other class, but need to have some common functionality. + */ +public interface LayoutKey { + + // Return Key object containing common key functionality + Key getKey(); +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_ABC.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_ABC.java new file mode 100644 index 000000000000..344e78951a19 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_ABC.java @@ -0,0 +1,117 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @summary Regression test for IDEA-165950: National keyboard layouts support + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=false NationalLayoutTest ABC + */ + +/* + * Enumerates keys under test for com.apple.keylayout.ABC (macOS 10.14.5) + */ +public enum Layout_ABC implements LayoutKey { + + // Enum name must be the same as KeyEvent.VK_ constant name corresponding to the key on US keyboard layout + // Note that '\u0000' may be used if no char is mapped to a key + modifier or if one wants to skip its testing + + VK_SECTION ('§', '§', '±', '±', '0'), + VK_MINUS ('-', '–', '_', '—', '\u001F'), + VK_EQUALS ('=', '≠', '+', '±', '='), + + VK_OPEN_BRACKET ('[', '“', '{', '”', '\u001B'), + VK_CLOSE_BRACKET (']', '‘', '}', '’', '\u001D'), + + VK_SEMICOLON (';', '…', ':', 'Ú', ';'), + VK_QUOTE ('\'', 'æ', '"', 'Æ', '\''), + VK_BACK_SLASH ('\\', '«', '|', '»', '\u001C'), + + VK_BACK_QUOTE (KeyChar.ch('`'), KeyChar.dead('`'), KeyChar.ch('~'), KeyChar.ch('`'), KeyChar.ch('`')), + VK_COMMA (',', '≤', '<', '¯', ','), + VK_PERIOD ('.', '≥', '>', '˘', '.'), + VK_SLASH ('/', '÷', '?', '¿', '/'), + + //VK_1 ('1', '¡', '!', '⁄'), + //VK_2 ('2', '™', '@', '€'), + //VK_3 ('3', '£', '#', '‹'), + //VK_4 ('4', '¢', '$', '›'), + //VK_5 ('5', '∞', '%', 'fi'), + //VK_6 ('6', '§', '^', 'fl'), + //VK_7 ('7', '¶', '&', '‡'), + //VK_8 ('8', '•', '*', '°'), + //VK_9 ('9', 'ª', '(', '·'), + //VK_0 ('0', 'º', ')', '‚'), + + // macOS system shortcuts: Shift+Cmd+Q - Log Out, Ctrl+Cmd+Q - Lock Screen + //VK_Q ('q', 'œ', 'Q', 'Œ'), + VK_W ('w', '∑', 'W', '„', '\u0017'), + VK_E (KeyChar.ch('e'), KeyChar.dead('´') ,KeyChar.ch('E'), KeyChar.ch('´'), KeyChar.ch('\u0005')), + //VK_R ('r', '®', 'R', '‰'), + //VK_T ('t', '†', 'T', 'ˇ'), + //VK_Y ('y', '¥', 'Y', 'Á'), + VK_U (KeyChar.ch('u'), KeyChar.dead('¨'), KeyChar.ch('U'), KeyChar.ch('¨'), KeyChar.ch('\u0015')), + VK_I (KeyChar.ch('i'), KeyChar.dead('ˆ'), KeyChar.ch('I'), KeyChar.ch('ˆ'), KeyChar.ch('\u0009')), + //VK_O ('o', 'ø', 'O', 'Ø'), + //VK_P ('p', 'π', 'P', '∏'), + + //VK_A ('a', 'å', 'A', 'Å'), + //VK_S ('s', 'ß', 'S', 'Í'), + //VK_D ('d', '∂', 'D', 'Î'), + //VK_F ('f', 'ƒ', 'F', 'Ï'), + //VK_G ('g', '©', 'G', '˝'), + // macOS system shortcuts: Cmd+H - Hide the windows of the front app + //VK_H ('h', '˙', 'H', 'Ó'), + //VK_J ('j', '∆', 'J', 'Ô'), + //VK_K ('k', '˚', 'K', ''), + //VK_L ('l', '¬', 'L', 'Ò'), + + //VK_Z ('z', 'Ω', 'Z', '¸'), + //VK_X ('x', '≈', 'X', '˛'), + //VK_C ('c', 'ç', 'C', 'Ç'), + // macOS system shortcuts: Cmd+V - Paste the contents of the Clipboard into the current document or app + //VK_V ('v', '√', 'V', '◊'), + //VK_B ('b', '∫', 'B', 'ı'), + //VK_N (KeyChar.ch('n'), KeyChar.dead('˜'), KeyChar.ch('N'), KeyChar.ch('˜')), + //VK_M ('m', 'µ', 'M', 'Â'), + + ; + + // Common code for any LayoutKey enum + + private final Key key; + + Layout_ABC(char no, char alt, char shift, char alt_shift, char control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + Layout_ABC(KeyChar no, KeyChar alt, KeyChar shift, KeyChar alt_shift, KeyChar control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + public Key getKey() { + return key; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_FRENCH_PC.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_FRENCH_PC.java new file mode 100644 index 000000000000..049200511de2 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_FRENCH_PC.java @@ -0,0 +1,73 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for IDEA-165950: National keyboard layouts support + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=false NationalLayoutTest FRENCH_PC + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=true NationalLayoutTest nodead FRENCH_PC + */ + +/* + * Enumerates keys under test for com.apple.keylayout.French-PC (macOS 10.14.5) + */ +public enum Layout_FRENCH_PC implements LayoutKey { + + // Enum name must be the same as KeyEvent.VK_ constant name corresponding to the key on US keyboard layout + // Note that '\u0000' may be used if no char is mapped to a key + modifier or if one wants to skip its testing + VK_SECTION ('²', '≤', '>', '≥', '0'), + VK_MINUS (')', ']', '°', ']', '\u001B'), + VK_EQUALS ('=', '}', '+', '≠', '\u001F'), + + VK_OPEN_BRACKET (KeyChar.dead('^'), KeyChar.ch('ô'), KeyChar.dead('¨'), KeyChar.ch('Ô'), KeyChar.ch('\u001E')), + VK_CLOSE_BRACKET ('$', '¤', '£', '¥', '\u001D'), + + VK_SEMICOLON ('m', 'µ', 'M', 'Ó', '\r'), + VK_QUOTE ('ù', 'Ù', '%', '‰', 'ù'), + VK_BACK_SLASH ('*', '@', 'μ', '#', '\u001C'), + + VK_BACK_QUOTE ('<', '«', '>', '≥', '<'), + VK_COMMA (';', '…', '.', '•', ';'), + VK_PERIOD (':', '÷', '/', '\\', ':'), + VK_SLASH ('!', '¡', '§', '±', '='), + + ; + + // Common code for any LayoutKey enum + + private final Key key; + + Layout_FRENCH_PC(char no, char alt, char shift, char alt_shift, char control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + Layout_FRENCH_PC(KeyChar no, KeyChar alt, KeyChar shift, KeyChar alt_shift, KeyChar control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + public Key getKey() { + return key; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_GERMAN.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_GERMAN.java new file mode 100644 index 000000000000..a2c0fac40704 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_GERMAN.java @@ -0,0 +1,74 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for IDEA-165950: National keyboard layouts support + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=false NationalLayoutTest GERMAN + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=true NationalLayoutTest nodead GERMAN + */ + +/* + * Enumerates keys under test for com.apple.keylayout.German (macOS 10.14.5) + */ +public enum Layout_GERMAN implements LayoutKey { + // Enum name must be the same as KeyEvent.VK_ constant name corresponding to the key on US keyboard layout + // Note that '\u0000' may be used if no char is mapped to a key + modifier or if one wants to skip its testing + + VK_SECTION (KeyChar.dead('^'), KeyChar.ch('„'), KeyChar.ch('°'), KeyChar.ch('“'), KeyChar.ch('\u001E')), + // Eszett + VK_MINUS ('ß', '¿', '?', '˙', 'ß'), + VK_EQUALS (KeyChar.dead('´'), KeyChar.ch('\''), KeyChar.dead('`'), KeyChar.ch('˚'), KeyChar.ch('´')), + + VK_OPEN_BRACKET ('ü', '•', 'Ü', '°', '\u001D'), + VK_CLOSE_BRACKET ('+', '±', '*', '', '+'), + + VK_SEMICOLON ('ö', 'œ', 'Ö', 'Œ', '\u001C'), + VK_QUOTE ('ä', 'æ', 'Ä', 'Æ', '\u001B'), + VK_BACK_SLASH ('#', '‘', '\'', '’', '#'), + + VK_BACK_QUOTE ('<', '≤', '>', '≥', '<'), + VK_COMMA (',', '∞', ';', '˛', ','), + VK_PERIOD ('.', '…', ':', '÷', '.'), + VK_SLASH ('-', '–', '_', '—', '-'), + + ; + + // Common code for any LayoutKey enum + + private final Key key; + + Layout_GERMAN(char no, char alt, char shift, char alt_shift, char control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + Layout_GERMAN(KeyChar no, KeyChar alt, KeyChar shift, KeyChar alt_shift, KeyChar control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + public Key getKey() { + return key; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_SPANISH_ISO.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_SPANISH_ISO.java new file mode 100644 index 000000000000..755a1e3e65fb --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_SPANISH_ISO.java @@ -0,0 +1,74 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for IDEA-165950: National keyboard layouts support + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=false NationalLayoutTest SPANISH_ISO + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=true NationalLayoutTest nodead SPANISH_ISO + */ + +/* + * Enumerates keys under test for com.apple.keylayout.Spanish-ISO (macOS 10.14.5) + */ +public enum Layout_SPANISH_ISO implements LayoutKey { + + // Enum name must be the same as KeyEvent.VK_ constant name corresponding to the key on US keyboard layout + // Note that '\u0000' may be used if no char is mapped to a key + modifier or if one wants to skip its testing + + VK_SECTION ('º', '\\', 'ª', '°', '0'), + VK_MINUS ('\'', '´', '?', '¸', '\u001F'), + VK_EQUALS ('¡', '‚', '¿', '˛', '='), + + VK_OPEN_BRACKET (KeyChar.dead('`'), KeyChar.ch('['), KeyChar.dead('^'), KeyChar.ch('ˆ'), KeyChar.ch('\u001B')), + VK_CLOSE_BRACKET ('+', ']', '*', '±', '\u001D'), + + VK_SEMICOLON (KeyChar.ch('ñ'), KeyChar.dead('~'), KeyChar.ch('Ñ'), KeyChar.ch('˜'), KeyChar.ch(':')), + VK_QUOTE (KeyChar.dead('´'), KeyChar.ch('{'), KeyChar.dead('¨'), KeyChar.ch('«'), KeyChar.ch('"')), + VK_BACK_SLASH ('ç', '}', 'Ç', '»', '\u001C'), + + VK_BACK_QUOTE ('<', '≤', '>', '≥', '`'), + VK_COMMA (',', '„', ';', '\u0000', ','), + VK_PERIOD ('.', '…', ':', '…', '.'), + VK_SLASH ('-', '–', '_', '—', '/'), + + ; + + // Common code for any LayoutKey enum + + private final Key key; + + Layout_SPANISH_ISO(char no, char alt, char shift, char alt_shift, char control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + Layout_SPANISH_ISO(KeyChar no, KeyChar alt, KeyChar shift, KeyChar alt_shift, KeyChar control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + public Key getKey() { + return key; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_US_INTERNATIONAL_PC.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_US_INTERNATIONAL_PC.java new file mode 100644 index 000000000000..a1dfe5ccb0ee --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Layout_US_INTERNATIONAL_PC.java @@ -0,0 +1,75 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Regression test for IDEA-165950: National keyboard layouts support + * @requires (jdk.version.major >= 8 & os.family == "mac") + * @modules java.desktop/sun.lwawt.macosx + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=false NationalLayoutTest US_INTERNATIONAL_PC + * @run main/othervm -Dcom.sun.awt.reportDeadKeysAsNormal=true NationalLayoutTest nodead US_INTERNATIONAL_PC + */ + +/* + * Enumerates keys under test for com.apple.keylayout.USInternational-PC (macOS 10.14.5) + */ +public enum Layout_US_INTERNATIONAL_PC implements LayoutKey { + + // Enum name must be the same as KeyEvent.VK_ constant name corresponding to the key on US keyboard layout + // Note that '\u0000' may be used if no char is mapped to a key + modifier or if one wants to skip its testing + + VK_SECTION ('§', '§', '±', '±', '0'), + VK_MINUS ('-', '–', '_', '—', '\u001F'), + VK_EQUALS ('=', '≠', '+', '±', '='), + + VK_OPEN_BRACKET ('[', '“', '{', '”', '\u001B'), + VK_CLOSE_BRACKET (']', '‘', '}', '’', '\u001D'), + + VK_SEMICOLON (';', '…', ':', 'Ú', ';'), + // ' is a special dead symbol, which may add either acute or cedilla to the next key + VK_QUOTE (KeyChar.dead('\''), KeyChar.ch('æ'), KeyChar.dead('\"'), KeyChar.ch('Æ'), KeyChar.ch('\'')), + VK_BACK_SLASH ('\\', '«', '|', '»', '\u001C'), + + VK_BACK_QUOTE (KeyChar.dead('`'), KeyChar.dead('`'), KeyChar.dead('~'), KeyChar.ch('`'), KeyChar.ch('`')), + VK_COMMA (',', '≤', '<', '¯', ','), + VK_PERIOD ('.', '≥', '>', '˘', '.'), + VK_SLASH ('/', '÷', '?', '¿', '/'), + + ; + + // Common code for any LayoutKey enum + + private final Key key; + + Layout_US_INTERNATIONAL_PC(char no, char alt, char shift, char alt_shift, char control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + Layout_US_INTERNATIONAL_PC(KeyChar no, KeyChar alt, KeyChar shift, KeyChar alt_shift, KeyChar control) { + key = new Key(name(), new MappedKeyChars(no, alt, shift, alt_shift, control)); + } + + public Key getKey() { + return key; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/MappedKeyChars.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/MappedKeyChars.java new file mode 100644 index 000000000000..57a3cb9fcf3d --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/MappedKeyChars.java @@ -0,0 +1,81 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Defines chars mapped to the key on the current keyboard layout + */ +public class MappedKeyChars { + + private final KeyChar no_modifier; + private final KeyChar alt; + private final KeyChar shift; + private final KeyChar alt_shift; + private final KeyChar control; + + MappedKeyChars(char no_modifier, char alt, char shift, char alt_shift, char control) { + this.no_modifier = KeyChar.ch(no_modifier); + this.alt = KeyChar.ch(alt); + this.shift = KeyChar.ch(shift); + this.alt_shift = KeyChar.ch(alt_shift); + this.control = KeyChar.ch(control); + } + + MappedKeyChars(KeyChar no_modifier, KeyChar alt, KeyChar shift, KeyChar alt_shift, KeyChar control) { + this.no_modifier = no_modifier; + this.alt = alt; + this.shift = shift; + this.alt_shift = alt_shift; + this.control = control; + } + + /* + * Return char mapped to key + modifier on the current layout. + * Return "undefined" char '\uffff', if modifier is a shortcut, i.e. other than Alt, Shift or Alt+Shift or empty. + * Return "null" char '\u0000', if there is no char mapped to the key + modifier or its testing is skipped. + */ + KeyChar getKeyChar(Modifier modifier) { + if(modifier.isEmpty()) { + return no_modifier; + } + if(modifier.isAlt()) { + return alt; + } + if(modifier.isShift()) { + return shift; + } + if(modifier.isAltShift()) { + return alt_shift; + } + if(modifier.isControl()) { + return control; + } + return KeyChar.ch(Character.MAX_VALUE); + } + + /* + * Return char mapped to the low registry key on the current layout, i.e. with no modifier. + */ + KeyChar getKeyChar() { + return no_modifier; + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Modifier.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Modifier.java new file mode 100644 index 000000000000..6a4c4b9ac44e --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/Modifier.java @@ -0,0 +1,129 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.event.KeyEvent; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/* + * Enumerates modifier combinations covered by this test + */ +public enum Modifier { + + E(), + A(KeyEvent.VK_ALT), + S(KeyEvent.VK_SHIFT), + SA(KeyEvent.VK_SHIFT, KeyEvent.VK_ALT), + + // Shortcuts + + M(KeyEvent.VK_META), + C(KeyEvent.VK_CONTROL), + + //CS(KeyEvent.VK_CONTROL, KeyEvent.VK_SHIFT), + //CA(KeyEvent.VK_CONTROL, KeyEvent.VK_ALT), + //CM(KeyEvent.VK_CONTROL, KeyEvent.VK_META), + //MS(KeyEvent.VK_META, KeyEvent.VK_SHIFT), + //MA(KeyEvent.VK_META, KeyEvent.VK_ALT), + + //CMS(KeyEvent.VK_CONTROL, KeyEvent.VK_META, KeyEvent.VK_SHIFT), + //CMA(KeyEvent.VK_CONTROL, KeyEvent.VK_META, KeyEvent.VK_ALT), + //CSA(KeyEvent.VK_CONTROL, KeyEvent.VK_SHIFT, KeyEvent.VK_ALT), + //MSA(KeyEvent.VK_META, KeyEvent.VK_SHIFT, KeyEvent.VK_ALT), + + //CMSA(KeyEvent.VK_CONTROL, KeyEvent.VK_META, KeyEvent.VK_SHIFT, KeyEvent.VK_ALT), + + ; + + // Holds array of int modifier values, where every int value corresponds to modifier KeyEvent.VK_ code + private int[] modifiers; + + // Creates empty Modifier + Modifier() { + this(new int[0]); + } + + // Creates Modifier using given KeyEvent.VK_ codes + Modifier(int... modifiers) { + for(int key : modifiers) { + if ((key != KeyEvent.VK_CONTROL) && (key != KeyEvent.VK_META) + && (key != KeyEvent.VK_SHIFT) && (key != KeyEvent.VK_ALT)) { + throw new IllegalArgumentException("Bad modifier: " + key); + } + } + this.modifiers = modifiers; + } + + // Returns array of int modifier values, where every int value corresponds to modifier KeyEvent.VK_ code + int[] getModifiers() { + return modifiers; + } + + // Checks if no modifier is set + boolean isEmpty() { + return (modifiers.length == 0); + } + + // Checks if modifier is Alt + boolean isAlt() { + return ((modifiers.length == 1) && (modifiers[0] == KeyEvent.VK_ALT)); + } + + // Checks if modifier is Shift + boolean isShift() { + return ((modifiers.length == 1) && (modifiers[0] == KeyEvent.VK_SHIFT)); + } + + // Checks if modifier is Alt+Shift + boolean isAltShift() { + List list = Arrays.stream(modifiers).boxed().collect(Collectors.toList()); + return ((modifiers.length == 2) && list.contains(KeyEvent.VK_ALT) && list.contains(KeyEvent.VK_SHIFT)); + } + + boolean isControl() { + return ((modifiers.length == 1) && (modifiers[0] == KeyEvent.VK_CONTROL)); + } + + @Override + public String toString() { + if (modifiers.length == 0) { + return "no"; + } + return Arrays.stream(modifiers).boxed().map(i -> KeyEvent.getKeyText(i)).collect(Collectors.joining(" ")); + } + + public String toPlaintextString() { + if (modifiers.length == 0) { + return "no"; + } + + var result = new StringBuilder(); + var list = Arrays.stream(modifiers).boxed().toList(); + if (list.contains(KeyEvent.VK_CONTROL)) result.append("Control"); + if (list.contains(KeyEvent.VK_ALT)) result.append("Option"); + if (list.contains(KeyEvent.VK_SHIFT)) result.append("Shift"); + if (list.contains(KeyEvent.VK_META)) result.append("Command"); + return result.toString(); + } +} diff --git a/test/jdk/jb/sun/awt/macos/NationalLayoutTest/NationalLayoutTest.java b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/NationalLayoutTest.java new file mode 100644 index 000000000000..c1b608c4cd19 --- /dev/null +++ b/test/jdk/jb/sun/awt/macos/NationalLayoutTest/NationalLayoutTest.java @@ -0,0 +1,579 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.lwawt.macosx.LWCToolkit; + +import java.awt.AWTException; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.Label; +import java.awt.Panel; +import java.awt.Robot; +import java.awt.TextArea; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.InputMethodEvent; +import java.awt.event.InputMethodListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.text.CharacterIterator; +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/* + * Description: Tests national keyboard layouts on macOS. + * + * Test goes over existing Layout and Modifier enums. + * Each layout key will be tested with all possible modifier combinations. + * Test switches to the requested layout (or user changes it by hands). + * Then Robot keeps pressing modifier + key, while test keeps tracking of keyPressed, charsTyped and inputMethod events. + * Finally, test compares the resulting key presses and typed chars with the expected ones using the assumptions below. + * + * Test based on the following assumptions: + * TODO check if these assumptions are correct + * - Pressing "modifier + key" always generates + * "modifier key code + low registry key code" keyPressed events for any key and modifier. + * - No keyTyped event is expected as the result of pressing dead key + key. + * - Pressing "dead key + space" generates corresponding diacritic character, + * which may be obtained using inputMethodTextChanged event. + * - Ctrl can be used to type the "control characters" (0th to 31th character inclusively in the ASCII table), + * so Ctrl + key can generate keyTyped event. + * - Cmd and its combinations with other modifiers are considered as a "shortcut", + * no keyTyped event is expected as the result of pressing a shortcut, + * no attempts are made to check inputMethodTextChanged event result for a "shortcut". + * + * WARNING: Test sends many key presses which may match system and IDE shortcuts. + * + * !!! DISABLE MACOS SYSTEM SHORTCUTS BEFORE RUNNING THIS TEST !!! + * !!! DO NOT RUN THIS TEST FROM IDE !!! + * + * MacOS accessibility permission should be granted on macOS >= 10.14 for the application launching this test, so + * Java Robot is able to access keyboard (use System Preferences -> Security&Privacy -> Privacy tab -> Accessibility). + * + * Test can only be compiled by JBRSDK as it uses private LWCToolkit API for switching system keyboard layout. + * Test may be run by any JRE, but in case of non-JBR, one needs to manually switch the keyboard layout during testing. + * + * Compilation: + * -bootclasspath /Contents/Home/jre/lib/rt.jar \ + * ./test/jdk/jb/sun/awt/macos/NationalLayoutTest/*.java + * --add-exports java.desktop/sun.awt.event=ALL-UNNAMED \ + * --add-exports java.desktop/sun.lwawt.macosx=ALL-UNNAMED \ + * test/jdk/jb/sun/awt/macos/NationalLayoutTest/*.java + * Usage: + * -cp test/jdk/jb/sun/awt/macos/NationalLayoutTest NationalLayoutTest [manual] [layout1] [layout2] ... , + * where layoutN is one of the existing Layout enum values + * + * Examples: + * > java NationalLayoutTest + * > java NationalLayoutTest ABC SPANISH_ISO + * > java NationalLayoutTest manual US_INTERNATIONAL_PC + * + */ + +public class NationalLayoutTest { + + private static final String MANUAL= "manual"; + private static final String NODEAD = "nodead"; + + private static final int PAUSE = 2000; + + // Test control keys + private static final int NEXT_KEY = KeyEvent.VK_ENTER; + private static final int NEXT_MODIFIER = KeyEvent.VK_ESCAPE; + private static final int TERMINATE_KEY = KeyEvent.VK_SPACE; + + private static CountDownLatch nextKey; + private static CountDownLatch nextModifierSet; + + private static boolean jbr = true; + private static boolean autoTest = true; + private static boolean showKeyCodeHex = false; + private static boolean noDeadKeys = false; + + private static Frame mainFrame; + + private static TextArea inputArea; + private static TextArea pressArea; + private static TextArea typeArea; + + private static Robot robot; + + private static final Set addedLayouts = new HashSet<>(); + + // Synchronized lists for storing results of different key events + private static CopyOnWriteArrayList keysPressed = new CopyOnWriteArrayList(); + private static CopyOnWriteArrayList charsTyped = new CopyOnWriteArrayList(); + private static CopyOnWriteArrayList inputMethodChars = new CopyOnWriteArrayList(); + + /* + * Test entry point + */ + public static void main(String[] args) throws InterruptedException { + + // Check if the testing could be performed using Java Robot + try { + robot = new Robot(); + robot.setAutoDelay(50); + } catch (AWTException e) { + throw new RuntimeException("TEST ERROR: Cannot create Java Robot " + e); + } + + // Check if program arguments contain known layouts to test + List layoutList = new ArrayList(); + for (String arg : args) { + if(!arg.equals(MANUAL) && !arg.equals(NODEAD)) { + try { + layoutList.add(Layout.valueOf(arg)); + } catch (IllegalArgumentException e) { + throw new RuntimeException("ERROR: Unexpected argument: " + arg + "\n" + + "Possible test arguments are: " + MANUAL + ", " + + Arrays.stream(Layout.values()).map(Enum::name).collect(Collectors.joining(", "))); + } + } + } + + // JBR internal API from LWCToolkit is used to switch system keyboard layout. + // So running the test for other java implementations is only possible in manual mode. + // During the test run one should switch to the requested keyboard layout by hands + // and then proceed with testing by pressing NEXT_MODIFIER. + if (!System.getProperty("java.vm.vendor").toLowerCase().contains("jetbrains")) { + System.out.println("WARNING - Not JBR mode: Cannot automatically switch keyboard layout"); + jbr = false; + } + + // One may want to use MANUAL mode to simply improve visibility. + // Please proceed with layout testing by pressing NEXT_MODIFIER. + if(Arrays.asList(args).contains(MANUAL) || !(jbr)) { + System.out.println("WARNING - Manual mode: Press " + KeyEvent.getKeyText(NEXT_MODIFIER) + + " to start testing keyboard layout with the modifier set"); + autoTest = false; + } + + if (Arrays.asList(args).contains(NODEAD)) { + noDeadKeys = true; + } + + String initialLayoutName = null; + try { + // Create test GUI + createGUI(); + + // Save initial keyboard layout + if(jbr) { + initialLayoutName = LWCToolkit.getKeyboardLayoutId(); + } + + boolean failed = false; + // Test layouts defined in the command line or all enumerated test layouts in case command line is empty + for(Layout layout : (layoutList.isEmpty() + ? Layout.values() : layoutList.toArray(new Layout[layoutList.size()]))) { + // Test layout with all enumerated modifier combinations + for (Modifier modifier : Modifier.values()) { + if(!testLayout(layout, modifier)) { + failed = true; + } + } + } + // Provide the test result + if(failed) { + throw new RuntimeException("TEST FAILED: Some keyboard layout tests failed, check the test output"); + } else { + System.out.println("TEST PASSED"); + } + + } finally { + for (String layoutId : addedLayouts) { + try { + LWCToolkit.disableKeyboardLayout(layoutId); + } catch (Exception ignored) {} + } + + // Restore initial keyboard layout + if(initialLayoutName != null && !initialLayoutName.isEmpty()) { + LWCToolkit.switchKeyboardLayout(initialLayoutName); + } + + // Destroy test GUI + destroyGUI(); + // Wait for EDT auto-shutdown + Thread.sleep(PAUSE); + } + } + + // Helpers for checking whether type area got focus + private static final CountDownLatch typeAreaGainedFocus = new CountDownLatch(1); + private static final FocusListener typeAreaFocusListener = new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + typeAreaGainedFocus.countDown(); + } + }; + + /* + * Create the test GUI - main frame with three text areas: + * 1) input area shows the current test key combination pressed by Java Robot + * 2) press area shows what key pressed events was received as the result of 1 + * 3) type area (which is initially focused) shows symbols typed as the result of 1 + */ + private static void createGUI() throws InterruptedException { + + mainFrame = new Frame("Test Frame"); + inputArea = new TextArea("",50, 30); + pressArea = new TextArea("", 50, 30); + typeArea = new TextArea("",50, 30); + + // Add listeners to track keyboard events + typeArea.addFocusListener(typeAreaFocusListener); + // TODO Currently dead key presses do not gererate corresponding keyPressed events to TextComponents, + // but such events are generated normally for Frames or other non-text Components + typeArea.addKeyListener(keyListener); + typeArea.addInputMethodListener(inputMethodListener); + + Panel labelPanel = new Panel(); + labelPanel.add(new Label("Input Keys ---> Pressed Keys ---> Typed Chars")); + + Panel textPanel = new Panel(); + textPanel.setLayout(new FlowLayout()); + textPanel.add(inputArea); + textPanel.add(pressArea); + textPanel.add(typeArea); + + mainFrame.setLocation(200, 200); + mainFrame.add(labelPanel, BorderLayout.NORTH); + mainFrame.add(textPanel, BorderLayout.SOUTH); + mainFrame.pack(); + mainFrame.setVisible(true); + + typeArea.requestFocusInWindow(); + // Check if type area got focus. + // Corresponding latch is released in the typeAreaFocusListener. + if(!typeAreaGainedFocus.await(PAUSE, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("TEST ERROR: Failed to request focus in the text area for typing"); + } + } + + /* + * Destroy the test GUI + */ + private static void destroyGUI() { + if(typeArea != null) { + typeArea.removeFocusListener(typeAreaFocusListener); + typeArea.removeKeyListener(keyListener); + typeArea.removeInputMethodListener(inputMethodListener); + } + if(mainFrame != null) { + mainFrame.dispose(); + } + } + + /* + * Listener for keyPressed and keyTyped events + */ + private static final KeyListener keyListener = new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + // Obtain pressed key code + int keyCode = e.getKeyCode(); + if (keyCode == KeyEvent.VK_UNDEFINED) { + keyCode = e.getExtendedKeyCode(); + } + if (keyCode == NEXT_MODIFIER) { + // Support for manual mode: notify main thread that testing may be continued + nextModifierSet.countDown(); + } else if (keyCode == NEXT_KEY) { + // Update press area with the next line + pressArea.append("\n"); + // Notify main thread that all events related to the key testing should already have been received + nextKey.countDown(); + } else if (keyCode == TERMINATE_KEY) { + // Do nothing, press TERMINATE_KEY_SEQUENCE to support dead key testing + } else { + String keyText = KeyEvent.getKeyText(keyCode); + // Update press area with the pressed key text + pressArea.append(keysPressed.isEmpty() ? keyText : " " + keyText); + // Store pressed key code to the corresponding list + keysPressed.add(keyCode); + } + } + + @Override + public void keyTyped(KeyEvent e) { + // Obtain typed char + char keyChar = e.getKeyChar(); + int keyCode = KeyEvent.getExtendedKeyCodeForChar(keyChar); + + switch (keyCode) { + case NEXT_MODIFIER: + case NEXT_KEY: + case TERMINATE_KEY: + if ((e.getModifiers() & KeyEvent.CTRL_MASK) == 0) { + // Do not store the typed char only if it is NEXT_MODIFIER, NEXT_KEY, TERMINATE_KEY generated + // without Control modifier: the Control allows to "type" the "control characters" + // (0th to 31th character inclusively in the ASCII table). + break; + } + default: + // Store typed char to the corresponding list + charsTyped.add(keyChar); + break; + } + } + }; + + /* + * Test listener for InputMethod events. + * Such events may occur for a special case when a character is generated by pressing more than one key, + * for example, when attaching specific diacritic to a base letter, by pressing dead key + base key. + */ + static final InputMethodListener inputMethodListener = new InputMethodListener() { + @Override + public void inputMethodTextChanged(InputMethodEvent e) { + // Store generated chars to the corresponding list + if(e.getCommittedCharacterCount() > 0) { + CharacterIterator text = e.getText(); + for (char ch = text.first(); ch != CharacterIterator.DONE; ch = text.next()) { + inputMethodChars.add(ch); + } + } + } + + @Override + public void caretPositionChanged(InputMethodEvent event) { + // Do nothing + } + }; + + /* + * Main method for testing defined layout keys with the specific modifier set + */ + private static boolean testLayout(Layout layout, Modifier modifier) throws InterruptedException { + boolean result = true; + System.out.println("\nStart testing " + layout + " layout with " + modifier + " modifier(s):"); + + // Switch current keyboard layout to the test one + if(jbr) { + String layoutId = layout.toString(); + if (!LWCToolkit.isKeyboardLayoutEnabled(layoutId)) { + LWCToolkit.enableKeyboardLayout(layoutId); + addedLayouts.add(layoutId); + } + LWCToolkit.switchKeyboardLayout(layoutId); + } + + // Support for manual mode: wait while user switches the keyboard layout (if needed) + // and proceed with layout + modifier testing by pressing NEXT_MODIFIER. + // Corresponding latch is released in the keyListener when NEXT_MODIFIER key event is received. + nextModifierSet = new CountDownLatch(1); + if(autoTest) { + pressKey(NEXT_MODIFIER); + } + if(!nextModifierSet.await(PAUSE*10, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("TEST ERROR: User has not proceeded with manual testing"); + } + + // Clean up the test text areas + inputArea.setText(""); + pressArea.setText(""); + // Workaround jdk8 setText() issue + typeArea.setText(" "); + + // Store modifier keys to array + int[] modifiers = modifier.getModifiers(); + + // Go over all keys defined for the layout + for(LayoutKey layoutKey : layout.getLayoutKeys()) { + System.err.printf("KEYPRESS: key=%s, modifier=%s\n", layoutKey.getKey(), modifier.toPlaintextString()); + + // Clean up synchronized lists which store pressed key codes and typed chars + keysPressed = new CopyOnWriteArrayList(); + charsTyped = new CopyOnWriteArrayList(); + inputMethodChars = new CopyOnWriteArrayList(); + + // Get Key object from LayoutKey enum + Key key = layoutKey.getKey(); + + // Obtain the key code for the current layout + int keyCode = key.getKeyCode(noDeadKeys); + + // Append input area with the modifiers + key under test + if(!modifier.isEmpty()) { + inputArea.append(modifier + " "); + } + inputArea.append(KeyEvent.getKeyText(keyCode) + "\n"); + + // Robot only knows US keyboard layout. + // So, to press modifier + key under test on the current layout, + // one need to pass corresponding US layout key code to Robot. + pressKey(key.getKeyCode_US(), modifiers); + + // The key under test may be a dead key which does not generate a character by itself. + // But it modifies the character generated by the key pressed immediately after. + // So need to press some TERMINATE_KEY key to avoid dead key influence on the next key under test. + // Corresponding diacritic character by itself can be generated by pressing dead key followed by space. + // That is why pressing TERMINATE_KEY=space after a dead key resets the dead key modifier + // and allows testing the generated character which may be useful for some layouts. + // Test does two checks: if modifier + key is a dead key and if key with no modifier is a dead key. + // Second check is needed for shortcuts as key.isDead(modifier) is always false for a shortcut. + if(key.isDead(modifier) || key.isDead()) { + pressKey(TERMINATE_KEY); + } + + // Wait while NEXT_KEY is pressed, which identifies that modifier + key testing is finished. + // Corresponding latch is released in the keyListener when NEXT_KEY key event is received. + nextKey = new CountDownLatch(1); + pressKey(NEXT_KEY); + if(!nextKey.await(PAUSE, TimeUnit.MILLISECONDS)) { + throw new RuntimeException("TEST ERROR: " + + KeyEvent.getKeyText(NEXT_KEY) + " key pressed event was not received"); + } + + // Define array of key codes expected to be pressed as the result of modifiers + key + int[] keysPattern = Arrays.copyOf(modifiers, modifiers.length + 1); + keysPattern[modifiers.length] = keyCode; + + // Define array of key codes which were really pressed as the result of modifiers + key + int[] keysResult = listToInts(keysPressed); + + // Do not check the resulting character in case it is null, + // i.e. no char is mapped to the modifier or there is no need to test it. + if (key.isCharNull(modifier)) { + // Check if the pressed key codes are equal to the expected ones + if(!checkResult(keysPattern, keysResult, null,null)) { + result = false; + } + } else { + // Define array of chars expected to be typed as the result of modifiers + key + // Do not expect any char typed as the result of shortcut (char is undefined in this case) + char[] charsPattern = key.isCharUndefined(modifier) + ? new char[0] : new char[] { key.getChar(modifier) }; + // Define array of chars which were really typed as the result of modifiers + key + // No keyTyped events may be generated as the result of pressing a dead key + space, + // so check if input method text was updated in this case. + char[] charsResult = (key.isDead(modifier) && charsTyped.isEmpty()) + ? listToChars(inputMethodChars) : listToChars(charsTyped); + // Check if pressed key codes and typed chars are equal to the expected ones + if(!checkResult(keysPattern, keysResult, charsPattern, charsResult)) { + result = false; + } + } + } + // Provide layout + modifier testing result + System.out.println("Finish testing " + layout + " layout with " + modifier + " modifier(s): " + + (result ? "PASSED" : "FAILED")); + + return result; + } + + /* + * Use Java Robot to press the key with specific modifiers + */ + private static void pressKey(int keyCode, int... modifiers) { + robot.waitForIdle(); + for (int modifier : modifiers) { + robot.keyPress(modifier); + } + robot.keyPress(keyCode); + robot.keyRelease(keyCode); + for (int modifier : modifiers) { + robot.keyRelease(modifier); + } + } + + /* + * Check if keys pressed and char typed are equal to the expected ones + */ + private static boolean checkResult(int[] patternKeys, int[] resultKeys, char[] patternChars, char[] resultChars) { + + boolean checkKeys = Arrays.equals(patternKeys, resultKeys); + boolean checkChars = Arrays.equals(patternChars, resultChars); + + boolean result = (checkKeys && checkChars); + + if(!result) { + String[] patternStr = (patternKeys != null) ? intsToStrings(patternKeys) : null; + String[] resultStr = (resultKeys != null) ? intsToStrings(resultKeys) : null; + String eqKeys = checkKeys ? " == " : " != "; + System.err.println("keyText : " + Arrays.toString(patternStr) + eqKeys + Arrays.toString(resultStr)); + System.err.println("keyCode : " + Arrays.toString(patternKeys) + eqKeys + Arrays.toString(resultKeys)); + if(showKeyCodeHex) { + String[] patternHex = intsToHexStrings(patternKeys); + String[] resultHex = intsToHexStrings(resultKeys); + System.err.println("keyCodeHex: " + Arrays.toString(patternHex) + eqKeys + Arrays.toString(resultHex)); + } + } + if(!checkChars) { + String[] patternHex = (patternChars != null) ? charsToHexStrings(patternChars) : null; + String[] resultHex = (resultChars != null) ? charsToHexStrings(resultChars) : null; + String eqChars = checkChars ? " == " : " != "; + System.err.println("keyChar : " + Arrays.toString(patternChars) + eqChars + Arrays.toString(resultChars)); + System.err.println("keyCharHex: " + Arrays.toString(patternHex) + eqChars + Arrays.toString(resultHex)); + } + if(!result) { + System.err.println(); + } + return result; + } + + /* + * Transform list of Integers to int array + */ + private static int[] listToInts(List list) { + return list.stream().mapToInt(i->i).toArray(); + } + + /* + * Transform list of Characters to char array + */ + private static char[] listToChars(List list) { + return list.stream().map(c -> c.toString()).collect(Collectors.joining()).toCharArray(); + } + + /* + * Transform array of int keys to array of Strings, mapping an int key to its text representation + */ + private static String[] intsToStrings(int[] ints) { + return Arrays.stream(ints).boxed().map(i -> KeyEvent.getKeyText(i)).toArray(String[]::new); + } + + /* + * Transform array of int keys to array of Strings, mapping an int key to its hex representation + */ + private static String[] intsToHexStrings(int[] ints) { + return Arrays.stream(ints).boxed().map(i -> String.format("0x%1$04X", i)).toArray(String[]::new); + } + + /* + * Transform array of char to array of Strings, mapping a char to its hex representation + */ + private static String[] charsToHexStrings(char[] chars) { + int[] result = new int[chars.length]; + Arrays.setAll(result, i -> (int) chars[i]); + return intsToHexStrings(result); + } +} diff --git a/test/jdk/jb/sun/lwawt/macosx/CThreading/IsAppKit.java b/test/jdk/jb/sun/lwawt/macosx/CThreading/IsAppKit.java new file mode 100644 index 000000000000..7a822a23e52b --- /dev/null +++ b/test/jdk/jb/sun/lwawt/macosx/CThreading/IsAppKit.java @@ -0,0 +1,75 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary regression test on JRE-624 CThreading.isAppKit() fails to detect main app thread if it was renamed + * @compile -XDignore.symbol.file --add-exports java.desktop/sun.lwawt.macosx=ALL-UNNAMED IsAppKit.java + * @requires os.family == "mac" + * @run main/othervm --add-opens java.desktop/sun.lwawt.macosx=ALL-UNNAMED IsAppKit + */ + +import javax.swing.*; +import java.util.concurrent.*; +import sun.lwawt.macosx.*; + +/* + * Description: The test checks detection of the main application thread + * + */ + +public class IsAppKit { + public static void main(String[] args) throws Exception { + + final CountDownLatch counter = new CountDownLatch(1); + + SwingUtilities.invokeAndWait(() -> { + JFrame frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.pack(); + frame.setVisible(true); + counter.countDown(); + }); + + counter.await(); + + CThreading.privilegedExecuteOnAppKit(() -> { + String name = Thread.currentThread().getName(); + if (!"AWT-AppKit".equals(name)) { + throw new RuntimeException("Unexpected thread name: " + name); + } + + Thread.currentThread().setName("Some other thread name"); + return null; + }); + + + String name = CThreading.privilegedExecuteOnAppKit(() -> { + return Thread.currentThread().getName(); + }); + + if (!"AWT-AppKit".equals(name)) { + throw new RuntimeException("Unexpected thread name: " + name); + } + } +} diff --git a/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/LWCToolkit.java b/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/LWCToolkit.java new file mode 100644 index 000000000000..789630dae2be --- /dev/null +++ b/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/LWCToolkit.java @@ -0,0 +1,142 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import java.awt.BorderLayout; +import java.awt.MouseInfo; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; + +/* + * Description: The class generates mouse movements. + * + */ +public class LWCToolkit { + + private static Robot robot; + private static JFrame staticFrame; + private static Rectangle frameBounds; + + private static int ITERATION_NUMBER = 10; + + private static void doTest() { + + int x1 = frameBounds.x + frameBounds.width - 1; + int y1 = frameBounds.y + frameBounds.height - 1; + int x2 = frameBounds.x + frameBounds.width * 5 - 1; + int y2 = frameBounds.y + frameBounds.height * 5 - 1; + + if (MouseInfo.getNumberOfButtons() < 1) + throw new RuntimeException("The systems without a mouse"); + + int button = 1; + int buttonMask = InputEvent.getMaskForButton(button); + + for (int i = 0; i < ITERATION_NUMBER; i++) { + robot.mouseMove(x1, y1); + robot.waitForIdle(); + + robot.mousePress(buttonMask); + robot.waitForIdle(); + + + for (int j=2; j<10;j++) { + + robot.mouseMove(frameBounds.x + frameBounds.width * j - 1, frameBounds.y + frameBounds.height * j - 1); + robot.waitForIdle(); + + } + robot.mouseRelease(buttonMask); + robot.waitForIdle(); + + robot.mousePress(buttonMask); + robot.waitForIdle(); + + for (int j=8; j>1;j--) { + + robot.mouseMove(frameBounds.x + frameBounds.width * j - 1, frameBounds.y + frameBounds.height * j - 1); + robot.waitForIdle(); + + } + + robot.mouseMove(x1, y1); + robot.waitForIdle(); + + robot.mouseRelease(buttonMask); + robot.waitForIdle(); + } + } + + private static void createAndShowGUI() { + staticFrame = new JFrame("BuffFlusher"); + staticFrame.setSize(400, 400); + staticFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + JPanel panel = new JPanel(new BorderLayout()); + panel.addMouseMotionListener(new MouseMotionListener() { + + @Override + public void mouseDragged(MouseEvent e) { + } + + @Override + public void mouseMoved(MouseEvent e) { + } + }); + staticFrame.add(panel, BorderLayout.CENTER); + staticFrame.pack(); + staticFrame.setVisible(true); + } + + public static void main(String[] args) throws Exception { + if (args.length > 0) + ITERATION_NUMBER = Integer.parseInt(args[0]); + + try { + robot = new Robot(); + robot.setAutoDelay(50); + + SwingUtilities.invokeAndWait(LWCToolkit::createAndShowGUI); + robot.waitForIdle(); + + SwingUtilities.invokeAndWait(() -> frameBounds = staticFrame.getBounds()); + robot.waitForIdle(); + + doTest(); + + } finally { + SwingUtilities.invokeLater(() -> { + if (staticFrame != null) { + staticFrame.setVisible(false); + staticFrame.dispose(); + } + }); + } + } +} diff --git a/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/lwctoolkit.d b/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/lwctoolkit.d new file mode 100644 index 000000000000..1f550393b08d --- /dev/null +++ b/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/lwctoolkit.d @@ -0,0 +1,16 @@ +#!/usr/sbin/dtrace -qs + +hotspot*:::method-entry +{ + this->class = (char *) copyin(arg1, arg2 + 1); + this->class[arg2] = '\0'; + + this->method = (char *) copyin(arg3, arg4 + 1); + this->method[arg4] = '\0'; + @calls[stringof(this->class) == "sun/lwawt/macosx/LWCToolkit" ? stringof(this->class) : " ", stringof(this->class) == "sun/lwawt/macosx/LWCToolkit" ? stringof(this->method) : " "] = count(); +} +dtrace:::END +{ + + printa(@calls); +} \ No newline at end of file diff --git a/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/lwctoolkit.sh b/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/lwctoolkit.sh new file mode 100755 index 000000000000..a88d63488e2b --- /dev/null +++ b/test/jdk/jb/sun/lwawt/macosx/LWCToolkit/lwctoolkit.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @summary lwctoolkit.sh +# @run shell lwctoolkit.sh +# @key dtrace + +#export PATH="$PATH:/usr/sbin" +#echo $PATH +#echo "dtrace located at `which dtrace`" + +OS=`uname -s` +case "$OS" in + Linux | Darwin) + echo "Detected OS $OS" + ;; + * ) + echo "PASSED: The test is valid for MacOSX, Linux" + exit 0; + ;; +esac + +ITERATIONS=$1 + +if [ -z "${TESTSRC}" ]; then + echo "TESTSRC undefined: set to ." + TESTSRC=. +fi + +if [ -z "${TESTCLASSES}" ]; then + echo "TESTCLASSES undefined: set to ." + TESTCLASSES=. +fi + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +if [ -z "${ITERATIONS}" ]; then + echo "ITERATIONS undefined: set to 10" + ITERATIONS=10 +fi +echo "ITERATIONS=${ITERATIONS}" + +cd ${TESTSRC} +${TESTJAVA}/bin/javac -d ${TESTCLASSES} LWCToolkit.java + +echo "Running workload" +${TESTJAVA}/bin/java -XX:+ExtendedDTraceProbes -cp ${TESTCLASSES} LWCToolkit ${ITERATIONS} & +TEST_PID=$! + +DTRACE_OUTPUT=$(echo ${BUPWD} | sudo -S ${DTRACE} -p${TEST_PID} -s ${TESTSRC}/lwctoolkit.d) +echo "=dtrace output===========================" +echo $DTRACE_OUTPUT +echo "=========================================" + +METHOD_LINE=$(echo ${DTRACE_OUTPUT} | grep "LWCToolkit" | grep " invokeAndWait") + +if [ -z "${METHOD_LINE}" ]; then + echo "LWCToolkit.invokeAndWait is not contained in dtrace's output" + count=0 +else + count=$(echo ${METHOD_LINE} | awk {'print $3'}) +fi + +if [ "${count}" -lt "100" ]; then + echo "Test PASSED" + exit 0 +else + echo "the fix for JRE-501 reduced the frequency of the invocations LWCToolkit.invokeAndWait to 80" + echo "(e.g. see results on the build 1.8.0_152-release-b1084)" + echo "currently LWCToolkit.invokeAndWait was invoked ${count}-times" + echo "Test FAILED" + exit 1 +fi + + + + + + + + + + + diff --git a/test/jdk/jb/sun/lwawt/macosx/NSEvent/NSEvent422.java b/test/jdk/jb/sun/lwawt/macosx/NSEvent/NSEvent422.java new file mode 100644 index 000000000000..bab56b13ef0e --- /dev/null +++ b/test/jdk/jb/sun/lwawt/macosx/NSEvent/NSEvent422.java @@ -0,0 +1,123 @@ +package NSEvent;/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.Timer; +import javax.swing.WindowConstants; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Robot; +import java.awt.TextArea; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; + +/* + * Description: The class generates mouse movements. + * + */ +public class NSEvent422 extends JPanel { + + private static Robot robot; + private static JFrame staticFrame; + private static final Object testCompleted = new Object(); + + private static int ITERATION_NUMBER = 10; + private static int MOVEMENTS_FOR_ONE_ITERATION = 100; + + private void doTest() { + int xCoordA = 50; + int yCoordA = 50; + int xCoordB = 70; + int yCoordB = 70; + + for (int i = 0; i < ITERATION_NUMBER; i++) { + + for (int j = 0; j < MOVEMENTS_FOR_ONE_ITERATION; j++) { + robot.mouseMove(xCoordA, yCoordA); + robot.mouseMove(xCoordB, yCoordB); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + fireAction(1000, () -> { + System.gc(); + }); + } + } + + private static void fireAction(int delay, Runnable action) { + Timer t = new Timer(delay, (e) -> action.run()); + t.setRepeats(false); + t.start(); + } + + private static void createAndShowGUI() { + staticFrame = new JFrame("NSEvent422"); + staticFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + Component textArea = new TextArea(); + staticFrame.setSize(300, 300); + staticFrame.add(textArea, BorderLayout.CENTER); + + NSEvent422 test = new NSEvent422(); + staticFrame.add(test); + staticFrame.addComponentListener(new ComponentAdapter() { + @Override + public void componentShown(ComponentEvent e) { + super.componentShown(e); + try { + test.doTest(); + } catch (OutOfMemoryError ex) { + ex.printStackTrace(); + System.exit(1); + } finally { + fireAction(1000, () -> { + synchronized (testCompleted) { + testCompleted.notifyAll(); + } + }); + } + } + }); + staticFrame.pack(); + staticFrame.setVisible(true); +} + + public static void main(String[] args) throws Exception { + if (args.length > 0) + ITERATION_NUMBER = Integer.parseInt(args[0]); + + robot = new Robot(); + + synchronized (testCompleted) { + SwingUtilities.invokeAndWait(NSEvent422::createAndShowGUI); + testCompleted.wait(); + } + + staticFrame.setVisible(false); + staticFrame.dispose(); + } +} \ No newline at end of file diff --git a/test/jdk/jb/sun/lwawt/macosx/NSEvent/nsevent422.sh b/test/jdk/jb/sun/lwawt/macosx/NSEvent/nsevent422.sh new file mode 100755 index 000000000000..346f9ee4acea --- /dev/null +++ b/test/jdk/jb/sun/lwawt/macosx/NSEvent/nsevent422.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +# +# Copyright 2000-2023 JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# nsevent422.sh checks NSEvent objects are collected by GC +# @run shell nsevent422.sh +# @requires os.family == "mac" + +# +# The test launches NSEvent Java app, which generates series of mouse movements and checks the number of NSEvent +# instances via jmap +# When the number of NSEvent instances on the current iteration becomes less this number then on the previous one, +# the test stops checking and exits with PASSED status. Otherwise it fails. +# +if [ -z "${TESTSRC}" ]; then + echo "TESTSRC undefined: set to ." + TESTSRC=. +fi + +if [ -z "${TESTCLASSES}" ]; then + echo "TESTCLASSES undefined: set to ." + TESTCLASSES=. +fi + +if [ -z "${TESTJAVA}" ]; then + echo "TESTJAVA undefined: testing cancelled" + exit 1 +fi + +cd ${TESTSRC} +${TESTJAVA}/bin/javac -d ${TESTCLASSES} NSEvent422.java + +${TESTJAVA}/bin/java -Xmx8M -cp ${TESTCLASSES} NSEvent422 1000 & +pid=$! +sleep 5 +old_instances=0 +passed=0 +while [ ! -z $pid ] +do + histo=`${TESTJAVA}/bin/jmap -histo $pid | grep "sun.lwawt.macosx.NSEvent"` + echo ${histo} + new_instances=`echo ${histo} | awk {'print $2'}` + if [ -z "${new_instances}" ]; then + break + fi + + if [ "${new_instances}" -lt "${old_instances}" ]; then + passed="1" + break + fi + old_instances=${new_instances} + sleep 1 + +done + +kill -9 $pid + +if [ "${passed}" -eq "1" ]; then + echo "Test PASSED" + exit 0 +else + echo "Test FAILED" + exit 1 +fi diff --git a/test/jdk/jb/testhelpers/TitleBar/CommonAPISuite.java b/test/jdk/jb/testhelpers/TitleBar/CommonAPISuite.java new file mode 100644 index 000000000000..533276633793 --- /dev/null +++ b/test/jdk/jb/testhelpers/TitleBar/CommonAPISuite.java @@ -0,0 +1,50 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.TitleBar; + +import com.jetbrains.WindowDecorations; + +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.Task; +import java.awt.Window; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class CommonAPISuite { + + public static TaskResult runTestSuite(List> functions, Task task) { + AtomicBoolean testPassed = new AtomicBoolean(true); + List errors = new ArrayList<>(); + functions.forEach(function -> { + TaskResult result = task.run(function); + testPassed.set(testPassed.get() && result.isPassed()); + errors.add(result.getError()); + }); + + return new TaskResult(testPassed.get(), errors.stream().collect(Collectors.joining("\n"))); + } + +} diff --git a/test/jdk/jb/testhelpers/TitleBar/Task.java b/test/jdk/jb/testhelpers/TitleBar/Task.java new file mode 100644 index 000000000000..0342936a3730 --- /dev/null +++ b/test/jdk/jb/testhelpers/TitleBar/Task.java @@ -0,0 +1,114 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.TitleBar; + +import com.jetbrains.WindowDecorations; +import test.jb.testhelpers.TitleBar.TaskResult; +import test.jb.testhelpers.TitleBar.TestUtils; + +import java.awt.AWTException; +import java.awt.Robot; +import java.awt.Window; +import java.util.function.Function; + +abstract public class Task { + + protected final String name; + + protected WindowDecorations.CustomTitleBar titleBar; + protected Window window; + protected boolean passed = true; + protected Robot robot; + protected String error; + + + public Task(String name) { + this.name = name; + } + + public TaskResult run(Function windowCreator) { + try { + robot = new Robot(); + } catch (AWTException e) { + final String message = "ERROR: unable to initialize robot"; + e.printStackTrace(); + return new TaskResult(false, message); + } + init(); + System.out.printf("RUN TEST CASE: %s%n", name); + passed = true; + error = ""; + prepareTitleBar(); + window = windowCreator.apply(titleBar); + System.out.println("Created a window with the custom title bar. Window name: " + window.getName()); + customizeWindow(); + + window.setVisible(true); + try { + test(); + } catch (Exception e) { + System.out.println("ERROR: An error occurred during tests execution"); + e.printStackTrace(); + passed = false; + } + + disposeUI(); + + if (!TestUtils.isBasicTestCase()) { + boolean isMetConditions = TestUtils.checkScreenSizeConditions(window); + if (!isMetConditions) { + error += "SKIPPED: environment don't match screen size conditions"; + return new TaskResult(false, true, error); + } + } + + return new TaskResult(passed, error); + } + + protected void err(String message) { + this.error = error + message + "\n"; + passed = false; + System.out.println(message); + } + + protected void init() { + + } + + protected void disposeUI() { + titleBar = null; + window.dispose(); + cleanup(); + } + + protected void cleanup() { + } + + abstract public void prepareTitleBar(); + + protected void customizeWindow() { + } + + abstract public void test() throws Exception; + +} diff --git a/test/jdk/jb/testhelpers/TitleBar/TaskResult.java b/test/jdk/jb/testhelpers/TitleBar/TaskResult.java new file mode 100644 index 000000000000..7094e3e646c4 --- /dev/null +++ b/test/jdk/jb/testhelpers/TitleBar/TaskResult.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.TitleBar; +public class TaskResult { + + private final boolean passed; + private final boolean metConditions; + private final String error; + + public TaskResult(boolean passed, String error) { + this.passed = passed; + this.metConditions = true; + this.error = error; + } + + public TaskResult(boolean metConditions, boolean passed, String error) { + this.metConditions = metConditions; + this.passed = passed; + this.error = error; + } + + public boolean isPassed() { + return passed; + } + + public String getError() { + return error; + } + + public TaskResult merge(TaskResult another) { + final String error = this.error + "\n" + another.error; + final boolean status = this.passed && another.passed; + return new TaskResult(status, error); + } + +} diff --git a/test/jdk/jb/testhelpers/TitleBar/TestUtils.java b/test/jdk/jb/testhelpers/TitleBar/TestUtils.java new file mode 100644 index 000000000000..079f3374b995 --- /dev/null +++ b/test/jdk/jb/testhelpers/TitleBar/TestUtils.java @@ -0,0 +1,204 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.TitleBar; + +import com.jetbrains.JBR; +import com.jetbrains.WindowDecorations; + +import javax.swing.*; +import java.awt.*; +import java.util.List; +import java.util.function.Function; + +public class TestUtils { + + public static final float TITLE_BAR_HEIGHT = 100; + public static final Color TITLE_BAR_COLOR = Color.BLUE; + + public static final int DEFAULT_LOCATION_X = 100; + public static final int DEFAULT_LOCATION_Y = 100; + private static final int DEFAULT_WIDTH = 1200; + private static final int DEFAULT_HEIGHT = 600; + + + private static final List> windowCreationFunctions = List.of( + TestUtils::createJFrameWithCustomTitleBar, + TestUtils::createFrameWithCustomTitleBar, + TestUtils::createJDialogWithCustomTitleBar, + TestUtils::createDialogWithCustomTitleBar + ); + + public static boolean checkTitleBarHeight(WindowDecorations.CustomTitleBar titleBar, float expected) { + if (titleBar.getHeight() != expected) { + System.out.printf(String.format("Wrong title bar height. Actual = %f, expected = %d\n", titleBar.getHeight(), expected)); + return false; + } + return true; + } + + public static boolean checkFrameInsets(Window window) { + Insets insets = window.getInsets(); + if (insets.top != 0) { + System.out.println("Frame top inset must be zero, but got " + insets.top); + return false; + } + return true; + } + + public static List> getWindowCreationFunctions() { + return windowCreationFunctions; + } + + public static Frame createFrameWithCustomTitleBar(WindowDecorations.CustomTitleBar titleBar) { + Frame frame = new Frame(){ + @Override + public void paint(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(TITLE_BAR_COLOR); + g.fillRect(r.x, r.y, r.width, (int) TITLE_BAR_HEIGHT); + } + }; + frame.setName("Frame"); + + frame.setTitle("Frame"); + frame.setBounds(calculateWindowBounds(frame)); + + JBR.getWindowDecorations().setCustomTitleBar(frame, titleBar); + + return frame; + } + + public static JFrame createJFrameWithCustomTitleBar(WindowDecorations.CustomTitleBar titleBar) { + JFrame frame = new JFrame(); + frame.setContentPane(new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Rectangle r = g.getClipBounds(); + g.setColor(Color.BLUE); + g.fillRect(r.x, r.y, r.width, 100); + } + }); + frame.setName("JFrame"); + + frame.setTitle("JFrame"); + frame.setBounds(calculateWindowBounds(frame)); + + JBR.getWindowDecorations().setCustomTitleBar(frame, titleBar); + + return frame; + } + + public static Dialog createDialogWithCustomTitleBar(WindowDecorations.CustomTitleBar titleBar) { + Dialog dialog = new Dialog((Frame) null){ + @Override + public void paint(Graphics g) { + Rectangle r = g.getClipBounds(); + g.setColor(TITLE_BAR_COLOR); + g.fillRect(r.x, r.y, r.width, (int) TITLE_BAR_HEIGHT); + } + }; + dialog.setName("Dialog"); + + dialog.setTitle("Dialog"); + dialog.setBounds(calculateWindowBounds(dialog)); + + JBR.getWindowDecorations().setCustomTitleBar(dialog, titleBar); + + return dialog; + } + + public static JDialog createJDialogWithCustomTitleBar(WindowDecorations.CustomTitleBar titleBar) { + JDialog dialog = new JDialog(); + dialog.setContentPane(new JPanel() { + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Rectangle r = g.getClipBounds(); + g.setColor(TITLE_BAR_COLOR); + g.fillRect(r.x, r.y, r.width, (int) TITLE_BAR_HEIGHT); + } + }); + dialog.setName("JDialog"); + + dialog.setTitle("JDialog"); + dialog.setBounds(calculateWindowBounds(dialog)); + + JBR.getWindowDecorations().setCustomTitleBar(dialog, titleBar); + + return dialog; + } + + public static boolean isBasicTestCase() { + return getUIScale() == 1.0; + } + + public static boolean checkScreenSizeConditions(Window window) { + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Insets scnMax = Toolkit.getDefaultToolkit(). + getScreenInsets(window.getGraphicsConfiguration()); + System.out.println("Screen size: " + screenSize); + System.out.println("Screen insets: " + scnMax); + final int width = screenSize.width - scnMax.left - scnMax.right; + final int height = screenSize.height - scnMax.top - scnMax.bottom; + System.out.println("Max width = " + width + " max height = " + height); + + double uiScale = getUIScale(); + + final int effectiveWidth = (int) (width / uiScale); + final int effectiveHeight = (int) (height / uiScale); + + if (effectiveWidth < 200 || effectiveHeight < 200) { + return false; + } + return true; + } + + private static Rectangle calculateWindowBounds(Window window) { + double uiScale = getUIScale(); + System.out.println("UI Scale: " + uiScale); + + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + System.out.println("Screen size: " + screenSize); + + Insets scnMax = Toolkit.getDefaultToolkit(). + getScreenInsets(window.getGraphicsConfiguration()); + int maxHeight = (int) ((screenSize.height - scnMax.top - scnMax.bottom) / uiScale); + int maxWidth = (int) ((screenSize.width - scnMax.left - scnMax.right) / uiScale); + + Rectangle bounds = new Rectangle(scnMax.left + 2, scnMax.top + 2, (int) (maxWidth * 0.95), (int) (maxHeight * 0.95)); + System.out.println("Window bounds: " + bounds); + + return bounds; + } + + public static double getUIScale() { + boolean scaleEnabled = "true".equals(System.getProperty("sun.java2d.uiScale.enabled")); + double uiScale = 1.0; + if (scaleEnabled) { + uiScale = Float.parseFloat(System.getProperty("sun.java2d.uiScale")); + } + return uiScale; + } + +} diff --git a/test/jdk/jb/testhelpers/screenshot/Rect.java b/test/jdk/jb/testhelpers/screenshot/Rect.java new file mode 100644 index 000000000000..0a6ee76105cc --- /dev/null +++ b/test/jdk/jb/testhelpers/screenshot/Rect.java @@ -0,0 +1,114 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.screenshot; + +import java.awt.*; +import java.util.Objects; + +public class Rect { + + private int x1 = -1; + private int y1 = -1; + private int x2 = -1; + private int y2 = -1; + private int pixelCount = 0; + private final Color commonColor; + + public Rect(Color commonColor) { + this.commonColor = commonColor; + } + + public Rect(int x1, int y1, int x2, int y2, int pixelCount, Color commonColor) { + this.x1 = x1; + this.x2 = x2; + this.y1 = y1; + this.y2 = y2; + this.pixelCount = pixelCount; + this.commonColor = commonColor; + } + + public int getX1() { + return x1; + } + + public int getY1() { + return y1; + } + + public int getX2() { + return x2; + } + + public int getY2() { + return y2; + } + + public void addPoint(int x, int y) { + pixelCount++; + if (x1 == -1 || x2 == -1) { + x1 = x; + x2 = x; + } + if (y1 == -1 || y2 == -1) { + y1 = y; + y2 = y; + } + if (x < x1) x1 = x; + if (x > x2) x2 = x; + if (y < y1) y1 = y; + if (y > y1) y2 = y; + } + + public int getPixelCount() { + return pixelCount; + } + + public Color getCommonColor() { + return commonColor; + } + + @Override + public String toString() { + return "Rect{" + + "x1=" + x1 + + ", y1=" + y1 + + ", x2=" + x2 + + ", y2=" + y2 + + ", pixelCount=" + pixelCount + + ", commonColor=" + commonColor + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Rect rect = (Rect) o; + return x1 == rect.x1 && y1 == rect.y1 && x2 == rect.x2 && y2 == rect.y2; + } + + @Override + public int hashCode() { + return Objects.hash(x1, y1, x2, y2); + } +} diff --git a/test/jdk/jb/testhelpers/screenshot/RectCoordinates.java b/test/jdk/jb/testhelpers/screenshot/RectCoordinates.java new file mode 100644 index 000000000000..123fff03803c --- /dev/null +++ b/test/jdk/jb/testhelpers/screenshot/RectCoordinates.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.screenshot; + +public record RectCoordinates(int x1, int y1, int x2, int y2) { + +} diff --git a/test/jdk/jb/testhelpers/screenshot/ScreenShotHelpers.java b/test/jdk/jb/testhelpers/screenshot/ScreenShotHelpers.java new file mode 100644 index 000000000000..241860865128 --- /dev/null +++ b/test/jdk/jb/testhelpers/screenshot/ScreenShotHelpers.java @@ -0,0 +1,406 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.screenshot; + +import com.jetbrains.WindowDecorations; + +import test.jb.testhelpers.screenshot.Rect; +import test.jb.testhelpers.screenshot.RectCoordinates; +import test.jb.testhelpers.TitleBar.TestUtils; +import javax.imageio.ImageIO; + +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Window; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; + +public class ScreenShotHelpers { + + public static BufferedImage takeScreenshot(Window window) throws AWTException { + Robot robot = new Robot(); + robot.delay(1000); + + return robot.createScreenCapture( + new Rectangle(window.getLocationOnScreen().x, window.getLocationOnScreen().y, + window.getWidth(), window.getHeight())); + } + + public static String storeScreenshot(String namePrefix, BufferedImage image) throws IOException { + final String fileName = String.format("%s-%s.png", namePrefix, UUID.randomUUID()); + File file = new File(fileName); + ImageIO.write(image, "png", file); + return file.getAbsolutePath(); + } + + public static List findControls(BufferedImage image, Window window, WindowDecorations.CustomTitleBar titleBar) { + return findControls(image, window, titleBar, false); + } + + public static List findControls(BufferedImage image, Window window, WindowDecorations.CustomTitleBar titleBar, boolean disabledControls) { + final int windowWidth = window.getWidth(); + final int windowHeight = window.getHeight(); + final int titleBarHeight = (int) titleBar.getHeight(); + final int leftInset = Math.round(titleBar.getLeftInset()); + final int rightInset = Math.round(titleBar.getRightInset()); + + System.out.println("Image w = " + image.getWidth() + " height = " + image.getHeight()); + System.out.println("Window w = " + windowWidth + " height = " + window.getHeight()); + + // option 1 + List controls1 = detectControlsByBackground(image, titleBarHeight, TestUtils.TITLE_BAR_COLOR); + System.out.println("Option1 for " + window.getName()); + controls1.forEach(System.out::println); + + if (isMatchCondition(window, controls1.size(), disabledControls)) { + return controls1; + } + + // option2 + List controls2 = detectControlsByBackground2(image, windowWidth, windowHeight, titleBarHeight, leftInset, rightInset, TestUtils.TITLE_BAR_COLOR); + System.out.println("Option2 for " + window.getName()); + controls2.forEach(System.out::println); + + if (isMatchCondition(window, controls2.size(), disabledControls)) { + return controls2; + } + + // option3 + List controls3 = detectControls(image, titleBarHeight, leftInset, rightInset); + System.out.println("Option3 for " + window.getName()); + controls3.forEach(System.out::println); + + if (isMatchCondition(window, controls3.size(), disabledControls)) { + return controls3; + } + + // option4 + List controls4 = detectControls2(image, windowWidth, windowHeight, titleBarHeight, leftInset, rightInset); + System.out.println("Option4 for " + window.getName()); + controls4.forEach(System.out::println); + + return controls4; + } + + private static boolean isMatchCondition(Window window, int size, boolean disabledControls) { + if (!disabledControls) { + if (window.getName().equals("Frame") || window.getName().equals("JFrame")) { + return size == 3; + } + if (window.getName().equals("Dialog") || window.getName().equals("JDialog")) { + final String os = System.getProperty("os.name").toLowerCase(); + if (os.startsWith("windows")) { + return size == 1; + } + return size == 3; + } + } + return size == 0; + } + + public static RectCoordinates calculateControlsRect(BufferedImage image, int windowWidth, int windowHeight, int titleBarHeight, int leftInset, int rightInset) { + final int shiftW = (image.getWidth() - windowWidth) / 2; + final int shiftH = (image.getHeight() - windowHeight) / 2; + int x1; + int y1 = shiftH; + int x2; + int y2 = shiftH + titleBarHeight; + if (leftInset > rightInset) { + x1 = shiftW; + x2 = shiftW + leftInset; + } else { + x1 = shiftW + windowWidth - rightInset; + x2 = windowWidth - shiftW; + } + return new RectCoordinates(x1, y1, x2, y2); + } + + public static RectCoordinates findRectangleTitleBar(BufferedImage image, int titleBarHeight) { + int centerX = image.getWidth() / 2; + int centerY = titleBarHeight / 2; + + final Color centerColor = adjustColor(new Color(image.getRGB(centerX, centerY))); + + int startY = centerY; + for (int y = centerY; y >= 0; y--) { + Color adjustedColor = adjustColor(new Color(image.getRGB(centerX, y))); + if (!adjustedColor.equals(centerColor)) { + startY = y + 1; + break; + } + } + + int endY = centerY; + for (int y = centerY; y <= (int) TestUtils.TITLE_BAR_HEIGHT; y++) { + Color adjustedColor = adjustColor(new Color(image.getRGB(centerX, y))); + if (!adjustedColor.equals(centerColor)) { + endY = y - 1; + break; + } + } + + int startX = centerX; + for (int x = centerX; x >= 0; x--) { + Color adjustedColor = adjustColor(new Color(image.getRGB(x, startY))); + if (!adjustedColor.equals(centerColor)) { + startX = x + 1; + break; + } + } + + int endX = centerX; + for (int x = centerX; x < image.getWidth(); x++) { + Color adjustedColor = adjustColor(new Color(image.getRGB(x, startY))); + if (!adjustedColor.equals(centerColor)) { + endX = x - 1; + break; + } + } + + return new RectCoordinates(startX, startY, endX, endY); + } + + public static List detectControlsByBackground(BufferedImage image, int titleBarHeight, Color backgroundColor) { + RectCoordinates coords = findRectangleTitleBar(image, titleBarHeight); + List result = new ArrayList<>(); + + System.out.println("Detect controls by background"); + System.out.println(coords); + + List lefts = new ArrayList<>(); + List rights = new ArrayList<>(); + + int leftX = -1; + int rightX = -1; + + for (int x = coords.x1(); x < coords.x2(); x++) { + boolean isBackground = true; + for (int y = coords.y1(); y < coords.y2(); y++) { + Color color = adjustColor(new Color(image.getRGB(x, y))); + if (!color.equals(backgroundColor)) { + isBackground = false; + break; + } + } + if (!isBackground) { + if (leftX == -1) { + leftX = x; + } + rightX = x; + } else if (leftX != -1) { + lefts.add(leftX); + rights.add(rightX); + leftX = -1; + rightX = -1; + } + } + + for (int i = 0; i < lefts.size(); i++) { + int lx = lefts.get(i); + int rx = rights.get(i); + + System.out.println("lx = " + lx + " rx = " + rx); + result.add(new Rect(lx, coords.y1(), rx, coords.y2(), 0, Color.BLACK)); + } + return result; + } + + public static List detectControlsByBackground2(BufferedImage image, int windowWidth, int windowHeight, int titleBarHeight, int leftInset, int rightInset, Color backgroundColor) { + RectCoordinates coords = calculateControlsRect(image, windowWidth, windowHeight, titleBarHeight, leftInset, rightInset); + List result = new ArrayList<>(); + + System.out.println("Detect controls by background2"); + System.out.println(coords); + + List lefts = new ArrayList<>(); + List rights = new ArrayList<>(); + + int leftX = -1; + int rightX = -1; + + for (int x = coords.x1(); x < coords.x2(); x++) { + boolean isBackground = true; + for (int y = coords.y1(); y < coords.y2(); y++) { + Color color = adjustColor(new Color(image.getRGB(x, y))); + if (!color.equals(backgroundColor)) { + isBackground = false; + break; + } + } + if (!isBackground) { + if (leftX == -1) { + leftX = x; + } + rightX = x; + } else if (leftX != -1) { + lefts.add(leftX); + rights.add(rightX); + leftX = -1; + rightX = -1; + } + } + + for (int i = 0; i < lefts.size(); i++) { + int lx = lefts.get(i); + int rx = rights.get(i); + + System.out.println("lx = " + lx + " rx = " + rx); + result.add(new Rect(lx, coords.y1(), rx, coords.y2(), 0, Color.BLACK)); + } + return result; + } + + public static List detectControls(BufferedImage image, int titleBarHeight, int leftInset, int rightInset) { + RectCoordinates coords = findRectangleTitleBar(image, titleBarHeight); + System.out.println("Detect controls"); + System.out.println(coords); + + Map map = new HashMap<>(); + + for (int x = coords.x1(); x < coords.x2(); x++) { + for (int y = coords.y1(); y < coords.y2(); y++) { + Color color = new Color(image.getRGB(x, y)); + Color adjustedColor = adjustColor(color); + Rect rect = map.getOrDefault(adjustedColor, new Rect(adjustedColor)); + rect.addPoint(x, y); + map.put(adjustedColor, rect); + } + } + + int checkedHeight = coords.y2() - coords.y1() + 1; + int checkedWidth = coords.x2() - coords.x1() + 1; + int pixels = checkedWidth * checkedHeight; + + int nonCoveredAreaApprox = pixels - (leftInset * checkedHeight + rightInset * checkedHeight); + + List rects = map.values().stream().filter(v -> v.getPixelCount() < nonCoveredAreaApprox).toList(); + + return groupRects(rects); + } + + public static List detectControls2(BufferedImage image, int windowWidth, int windowHeight, int titleBarHeight, int leftInset, int rightInset) { + RectCoordinates coords = calculateControlsRect(image, windowWidth, windowHeight, titleBarHeight, leftInset, rightInset); + System.out.println("Detect controls 2"); + System.out.println(coords); + + Map map = new HashMap<>(); + + for (int x = coords.x1(); x < coords.x2(); x++) { + for (int y = coords.y1(); y < coords.y2(); y++) { + Color color = new Color(image.getRGB(x, y)); + Color adjustedColor = adjustColor(color); + Rect rect = map.getOrDefault(adjustedColor, new Rect(adjustedColor)); + rect.addPoint(x, y); + map.put(adjustedColor, rect); + } + } + + int checkedHeight = coords.y2() - coords.y1() + 1; + int checkedWidth = coords.x2() - coords.x1() + 1; + int pixels = checkedWidth * checkedHeight; + + int nonCoveredAreaApprox = pixels - (leftInset * checkedHeight + rightInset * checkedHeight); + + List rects = map.values().stream().filter(v -> v.getPixelCount() < nonCoveredAreaApprox).toList(); + + return groupRects(rects); + } + + private static List groupRects(List rects) { + List found = new ArrayList<>(); + + List items = new ArrayList<>(rects); + while (!items.isEmpty()) { + AtomicReference rect = new AtomicReference<>(items.remove(0)); + + List restItems = new ArrayList<>(); + items.forEach(item -> { + Rect intersected = intersect(rect.get(), item); + if (intersected != null) { + rect.set(intersected); + } else { + restItems.add(item); + } + }); + found.add(rect.get()); + items = restItems; + } + + return found; + } + + private static Color adjustColor(Color color) { + int r = adjustValue(color.getRed()); + int g = adjustValue(color.getGreen()); + int b = adjustValue(color.getBlue()); + return new Color(r, g, b); + } + + private static int adjustValue(int value) { + final int round = 64; + int div = (value + 1) / round; + int mod = (value + 1) % round; + int result = div > 0 ? round * div - 1 : 0; + if (mod > 32) result += round; + return result; + } + + private static Rect intersect(Rect r1, Rect r2) { + int x1 = -1, x2 = -1, y1 = -1, y2 = -1; + if (r1.getX1() <= r2.getX1() && r2.getX1() <= r1.getX2()) { + x1 = r1.getX1(); + x2 = Math.max(r2.getX2(), r1.getX2()); + } + if (r2.getX1() <= r1.getX1() && r1.getX1() <= r2.getX2()) { + x1 = r2.getX1(); + x2 = Math.max(r2.getX2(), r1.getX2()); + } + + if (r1.getY1() < r2.getY1() && r2.getY1() <= r2.getY1()) { + y1 = r1.getY1(); + y2 = Math.max(r1.getY2(), r2.getY2()); + } + if (r2.getY1() <= r1.getY1() && r1.getY1() <= r2.getY2()) { + y1 = r2.getY1(); + y2 = Math.max(r1.getY2(), r2.getY2()); + } + if (x1 == -1 || x2 == -1 || y1 == -1 || y2 == -1) { + return null; + } + + Color commonColor = r1.getPixelCount() > r2.getPixelCount() ? r1.getCommonColor() : r2.getCommonColor(); + + return new Rect(x1, y1, x2, y2, r1.getPixelCount() + r2.getPixelCount(), commonColor); + } + + +} \ No newline at end of file diff --git a/test/jdk/jb/testhelpers/utils/MouseUtils.java b/test/jdk/jb/testhelpers/utils/MouseUtils.java new file mode 100644 index 000000000000..4717c6c8dec0 --- /dev/null +++ b/test/jdk/jb/testhelpers/utils/MouseUtils.java @@ -0,0 +1,64 @@ +/* + * Copyright 2000-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.jb.testhelpers.utils; + +import java.awt.Robot; +import java.awt.Window; + +public class MouseUtils { + + public static void verifyLocationAndMove(Robot robot, Window window, int x, int y) { + verifyLocation(window, x, y); + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.delay(50); + } + + public static void verifyLocationAndClick(Robot robot, Window window, int x, int y, int mask) { + verifyLocation(window, x, y); + + robot.waitForIdle(); + robot.mouseMove(x, y); + robot.delay(50); + robot.mousePress(mask); + robot.delay(50); + robot.mouseRelease(mask); + } + + private static void verifyLocation(Window window, int x, int y) { + int x1 = window.getLocationOnScreen().x + window.getInsets().left; + int x2 = x1 + window.getBounds().width - window.getInsets().right; + int y1 = window.getLocationOnScreen().y + window.getInsets().top; + int y2 = y1 + window.getBounds().height - window.getInsets().bottom; + + boolean isLocationValid = (x1 < x && x < x2 && y1 < y && y < y2); + if (!isLocationValid) { + throw new RuntimeException("Coordinates (" + x + ", " + y + ") is outside of clickable area"); + } + if (!window.isVisible()) { + throw new RuntimeException("Window isn't visible. Can't click to the area"); + } + } + +} \ No newline at end of file diff --git a/test/jdk/jbA11yProblemList.txt b/test/jdk/jbA11yProblemList.txt new file mode 100644 index 000000000000..d003681f8a3a --- /dev/null +++ b/test/jdk/jbA11yProblemList.txt @@ -0,0 +1,182 @@ +java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java nobug macosx-all,linux-all,windows-all +java/awt/Toolkit/AWTThreadingTest.java nobug macosx-all,linux-all,windows-all +java/awt/Toolkit/AWTThreadingCMenuTest.java nobug macosx-all,linux-all,windows-all +java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java nobug macosx-all,linux-all,windows-all +java/awt/List/NofocusListDblClickTest/NofocusListDblClickTest.java nobug macosx-all,linux-all,windows-all +javax/swing/JInternalFrame/Test6505027.java nobug macosx-all,linux-all,windows-all +javax/swing/JPopupMenu/4634626/bug4634626.java nobug macosx-all,linux-all,windows-all +javax/swing/JPopupMenu/4966112/bug4966112.java nobug macosx-all,linux-all,windows-all +jb/java/awt/Desktop/AboutHandlerTest.java nobug macosx-all,linux-all,windows-all + +# VoiceOver on MacOS +java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-5397 macosx-all +java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java JBR-5397 macosx-all +java/awt/event/KeyEvent/KeyTyped/CtrlSpace.java JBR-3817,JBR-5397 windows-all,macosx-all +java/awt/event/KeyEvent/KeyEventLocationTest.java JBR-5916,JBR-5397 linux-all,macosx-all +java/awt/event/MouseEvent/MouseButtonsAndKeyMasksTest/MouseButtonsAndKeyMasksTest.java JBR-5397 macosx-all +java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-5397 macosx-all +java/awt/FileDialog/FilenameFilterTest/FilenameFilterTest.java JBR-5397 macosx-all +java/awt/Focus/6378278/InputVerifierTest.java JBR-5397 macosx-all +java/awt/Focus/6382144/EndlessLoopTest.java JBR-5397 macosx-all +java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729,JBR-5397 windows-all,linux-all,macosx-all +java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5210,8298247,JBR-5397 windows-all,linux-all,macosx-all +java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-5210,JBR-5397 windows-all,macosx-all +java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java 6986252,JBR-5178,JBR-6750,JBR-5397 windows-all,linux-all,macosx-all +java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5210,JBR-5397 windows-all,macosx-all +java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5210,JBR-5397 windows-all,macosx-all +java/awt/hidpi/properties/HiDPIPropertiesUnixTest.java JBR-5397 macosx-all +java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemonicKeyTypedTest.java JBR-5397 macosx-all +java/awt/KeyboardFocusmanager/TypeAhead/ButtonActionKeyTest/ButtonActionKeyTest.java JBR-5397 macosx-all +java/awt/KeyboardFocusmanager/TypeAhead/SubMenuShowTest/SubMenuShowTest.java JBR-5397,JBR-4074 macosx-all,windows-all +java/awt/List/ItemEventTest/ItemEventTest.java JBR-5397,JBR-5505 macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java JBR-5397 macosx-all +java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5397,JBR-5802 macosx-all,windows-all +java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6948 windows-x64 +java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5397 macosx-all + +javax/swing/JFileChooser/4524490/bug4524490.java JBR-5397,JBR-5846 macosx-all,windows-all +javax/swing/JFileChooser/6520101/bug6520101.java JBR-5397 macosx-all +javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880,JBR-5397 windows-all,macosx-all +javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949,JBR-5397 linux-all,windows-all,macosx-all +javax/swing/JLabel/6596966/bug6596966.java 8197552,JBR-5397 windows-all,macosx-all +javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955,JBR-5397 windows-all,macosx-all +javax/swing/JList/6462008/bug6462008.java JBR-5397,JBR-6773 macosx-all,windows-all +javax/swing/JMenu/4213634/bug4213634.java 8197552,JBR-5397 windows-all,macosx-all +javax/swing/JMenu/4515762/bug4515762.java 8197552,JBR-5397 windows-all,macosx-all +javax/swing/JMenu/4692443/bug4692443.java JBR-5397,JBR-6093 macosx-all,windows-all +javax/swing/JMenu/6470128/bug6470128.java 8253184,JBR-6307,JBR-5397 windows-all,linux-all,macosx-all +javax/swing/JMenuBar/4750590/bug4750590.java JBR-5397,JBR-6094 macosx-all,windows-all +javax/swing/JMenuItem/4171437/bug4171437.java JBR-5397,JBR-6112 macosx-all,windows-all +javax/swing/JMenuItem/6249972/bug6249972.java 8197552,JBR-5397 windows-all,macosx-all +javax/swing/JMenuItem/JMenuItemSetAcceleratorTest.java JBR-5397 macosx-all +javax/swing/JPopupMenu/4458079/bug4458079.java JBR-5397 macosx-all +javax/swing/JPopupMenu/4634626/bug4634626.java 8253184,JBR-5397 windows-all,macosx-all +javax/swing/JPopupMenu/6415145/bug6415145.java JBR-5397 macosx-all +javax/swing/JPopupMenu/6827786/bug6827786.java JBR-5397 macosx-all +javax/swing/JRadioButton/4314194/bug4314194.java JBR-5397 macosx-all +javax/swing/JSplitPane/4164779/JSplitPaneKeyboardNavigationTest.java JBR-5397 macosx-all +javax/swing/JSplitPane/4615365/JSplitPaneDividerLocationTest.java JBR-5397 macosx-all +javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5397 macosx-all +javax/swing/JTable/8236907/LastVisibleRow.java JBR-5397 macosx-all +javax/swing/JTextField/4532513/DefaultCaretRequestsFocusTest.java JBR-5397 macosx-all +javax/swing/JTextField/8036819/bug8036819.java JBR-5397,JBR-6113 macosx-all,windows-all +javax/swing/JToolTip/bug5047379.java JBR-5397 macosx-all +javax/swing/JTree/4518432/JTreeNodeCopyPasteTest.java JBR-5397 macosx-all +javax/swing/JTree/4618767/JTreeSelectedElementTest.java JBR-5397 macosx-all +javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java JBR-5397 macosx-all +javax/swing/plaf/aqua/JInternalFrameBorderTest.java JBR-5397 macosx-all +javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184,JBR-6727,JBR-5397 windows-all,linux-all,macosx-all +javax/swing/plaf/synth/7158712/bug7158712.java JBR-125,8322653,JBR-5397 linux-all,windows-all,macosx-all +javax/swing/Popup/TaskbarPositionTest.java 8310689,JBR-5397 windows-all,macosx-all +javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-5397,JBR-6465 macosx-all,windows-all,linux-aarch64 +sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5397,8212240,JBR-5510,JBR-6285,8253184 macosx-all,linux-all,windows-all +sanity/client/SwingSet/src/ToolTipDemoTest.java JBR-5397 macosx-all +sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java JBR-5397 macosx-all +sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5397 macosx-all +sun/java2d/GdiRendering/InsetClipping.java JBR-5397,7124403,JBR-6513 macosx-all,windows-all,linux-all +java/awt/Focus/NullActiveWindowOnFocusLost/NullActiveWindowOnFocusLost.java JBR-5397 macosx-all +java/awt/FullScreen/BufferStrategyExceptionTest/BufferStrategyExceptionTest.java JBR-5397 macosx-all +java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java 7019055,8266245,JBR-5397 windows-all,linux-all,macosx-aarch64,macosx-all +java/awt/List/ListMultipleSelectTest/ListMultipleSelectTest.java JBR-5555,JBR-5397 windows-all,macosx-all +java/awt/Mouse/EnterExitEvents/DragWindowTest.java JBR-5397 macosx-all +java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java JBR-5397 macosx-all +java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184,JBR-6752,JBR-5397 windows-all,linux-all,macosx-all +java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersInKeyEvent.java JBR-5397 macosx-all +java/awt/Paint/PaintNativeOnUpdate.java JBR-5397 macosx-all +java/awt/PopupMenu/PopupMenuLocation.java JBR-5397 macosx-all +java/awt/Robot/CheckCommonColors/CheckCommonColors.java JBR-5397 macosx-all +java/awt/Robot/RobotWheelTest/RobotWheelTest.java JBR-5397 macosx-all +java/awt/Scrollbar/ScrollbarMouseWheelTest/ScrollbarMouseWheelTest.java JBR-5397 macosx-all +java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5397 macosx-all +java/awt/Window/WindowOwnedByEmbeddedFrameTest/WindowOwnedByEmbeddedFrameTest.java JBR-5397 macosx-all +javax/accessibility/JSlider/AccessibleAction/JSliderAccessibleAction.java JBR-5397 macosx-all +javax/accessibility/SlowPanelIteration/SlowPanelIteration.java JBR-5397 macosx-all +javax/accessibility/JFileChooserAccessibleDescriptionTest.java JBR-5397 macosx-all +javax/swing/JButton/8151303/PressedIconTest.java JBR-5397 macosx-all +javax/swing/JComboBox/4743225/bug4743225.java JBR-5397 macosx-all +javax/swing/JComboBox/6236162/bug6236162.java JBR-5210,JBR-5397 windows-all,macosx-all +javax/swing/JComboBox/6559152/bug6559152.java JBR-5397 macosx-all +javax/swing/JComboBox/8033069/bug8033069NoScrollBar.java JBR-5397 macosx-all +javax/swing/JComboBox/8033069/bug8033069ScrollBar.java JBR-5397 macosx-all +javax/swing/JComboBox/8182031/ComboPopupTest.java 8253184,JBR-5397 windows-all,macosx-all +javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java JBR-5397 macosx-all +javax/swing/JComboBox/JComboBoxWithTitledBorderTest.java JBR-5397 macosx-all +javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283,JBR-5397 windows-all,linux-5.18.2-arch1-1,macosx-all +javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5397 macosx-all + +# Windows (ZoomText, NVDA, or JAWS is enabled during testing) +java/awt/Button/DoubleActionEventTest.java JBR-6949 windows-x64 +java/awt/Choice/ChoiceConsumeMouseEvents.java JBR-6951 windows-x64 +java/awt/Choice/ChoiceFreezeTest.java JBR-6952 windows-x64 +java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857,JBR-5505 macosx-all,windows-all +java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java JBR-5510,8310487,JBR-6950 linux-5.18.2-arch1-1,linux-all,windows-x64 +java/awt/dnd/Button2DragTest/Button2DragTest.java 8310490,JBR-5505 windows-all,linux-all +java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java 8233568,JBR-5915,JBR-5505 macosx-all,linux-all,windows-all +java/awt/Focus/6378278/InputVerifierTest.java JBR-5505 windows-all +java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java 8169110,JBR-5505 linux-all,windows-all +java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java JBR-5505 windows-all +java/awt/Frame/WindowDragTest/WindowDragTest.java JBR-5505 windows-all +java/awt/FullScreen/MultimonFullscreenTest/MultimonDeadlockTest.java JBR-5505 windows-all +java/awt/hidpi/DrawOnFrameGraphicsTest.java JBR-5505 windows-all +java/awt/im/4959409/bug4959409.java JBR-5505 windows-all +java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-5505 windows-all +java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-5505 windows-all +java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711,JBR-5505 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510,JBR-5505 macosx-all,linux-5.18.2-arch1-1,windows-all +java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510,JBR-5505 linux-5.18.2-arch1-1,windows-all +java/awt/Mixing/MixingOnDialog.java JBR-5505 windows-all +java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-5505 windows-all +java/awt/Mixing/OpaqueTest.java JBR-5707,JBR-5505 linux-all,windows-all +java/awt/Mixing/OverlappingButtons.java JBR-5707,JBR-5505 linux-all,windows-all +java/awt/Mixing/Validating.java JBR-5708,JBR-5505 linux-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsAppModalTest.java JBR-5505 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java 8164473,JBR-5505 linux-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsModelessTest.java 8196432,JBR-5505 linux-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsNonModalTest.java 8196432,JBR-5505 linux-all,windows-all +java/awt/MouseInfo/GetPointerInfoTest.java JBR-5505 windows-all +java/awt/MouseInfo/MultiscreenPointerInfo.java JBR-5505 windows-all +java/awt/Multiscreen/MouseEventTest/MouseEventTest.java JBR-4908,JBR-5505 linux-all,windows-all +java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-5505 windows-all +java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-5505 windows-all +java/awt/Robot/MultiScreenRobotPosition/MultiScreenRobotPosition.java JBR-830,JBR-5505 windows-x64,windows-all +java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765,JBR-5505 windows-all,macosx-all +javax/accessibility/JSlider/AccessibleAction/JSliderAccessibleAction.java JBR-5505 windows-all +javax/swing/JComboBox/8033069/bug8033069NoScrollBar.java JBR-5505 windows-all +javax/swing/JComboBox/8033069/bug8033069ScrollBar.java JBR-5505 windows-all +javax/swing/JComboBox/8136998/bug8136998.java JBR-5505 windows-all +javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java JBR-5505 windows-all +javax/swing/JComboBox/JComboBoxWithTitledBorderTest.java JBR-5505 windows-all +javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5505 windows-all +javax/swing/JInternalFrame/Test6505027.java JBR-5954,JBR-5505 linux-all,macosx-all,windows-all +javax/swing/JPopupMenu/4458079/bug4458079.java JBR-5505 windows-all +javax/swing/JScrollBar/bug4202954/bug4202954.java JBR-5505 windows-all +javax/swing/JSpinner/4515999/JSpinnerMouseAndKeyPressTest.java JBR-5505 windows-all +javax/swing/JTable/6263446/bug6263446.java JBR-5505 windows-all +javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945,JBR-5505 linux-all,macosx-all,windows-all +jdk/editpad/EditPadTest.java JBR-5505 windows-all +javax/swing/JPopupMenu/6217905/bug6217905.java JBR-5505 windows-all +javax/swing/JPopupMenu/6580930/bug6580930.java JBR-5505 windows-all +javax/swing/JPopupMenu/7156657/bug7156657.java JBR-5505 windows-all +javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java JBR-6717,JBR-5505 linux-all,windows-all +javax/swing/JRadioButton/8041561/bug8041561.java JBR-5505 windows-all +javax/swing/JScrollBar/4708809/bug4708809.java JBR-5505 windows-all +javax/swing/JScrollBar/7163696/Test7163696.java JBR-5505 windows-all +javax/swing/JScrollPane/TestMouseWheelScroll.java JBR-5505 windows-all +javax/swing/JSlider/6401380/bug6401380.java JBR-5505 windows-all +javax/swing/JSpinner/4788637/bug4788637.java JBR-5505 windows-all +javax/swing/JSplitPane/4615365/JSplitPaneDividerLocationTest.java JBR-5505 windows-all +javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5505 windows-all +javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5505 macosx-all,windows-all +javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5932,JBR-5505 linux-all,windows-all +javax/swing/JTable/4275046/bug4275046.java JBR-5505 windows-all +javax/swing/JToolTip/4846413/bug4846413.java JBR-5505 windows-all +javax/swing/JToolTip/bug5047379.java JBR-5505 windows-all +javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131,JBR-5505 linux-all,windows-all +javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5505 windows-all +javax/swing/reliability/TaskUndJFrameProperties.java JBR-6586,JBR-5505 windows-x64,windows-all +sanity/client/SwingSet/src/ToolTipDemoTest.java 8293001,JBR-5505 linux-all,windows-all +sun/awt/dnd/8024061/bug8024061.java JBR-5505 windows-all +java/awt/event/MouseWheelEvent/DisabledComponent/DisabledComponent.java JBR-5505 windows-all +java/awt/List/ListGarbageCollectionTest/AwtListGarbageCollectionTest.java JBR-5505 windows-all +java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java JBR-6540,JBR-5505 macosx-all,windows-all +javax/swing/JProgressBar/8015748/JProgressBarOrientationRobotTest.java JBR-5505 windows-all diff --git a/test/jdk/jbMMProblemList.txt b/test/jdk/jbMMProblemList.txt new file mode 100644 index 000000000000..ad516c2062d1 --- /dev/null +++ b/test/jdk/jbMMProblemList.txt @@ -0,0 +1,142 @@ +java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-5398 linux-all,windows-all +java/awt/Debug/X11Trace.java JBR-5442 linux-all +java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java JBR-6294 linux-all +java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-6058 windows-all +java/awt/FullScreen/CurrentDisplayModeTest/CurrentDisplayModeTest.java JBR-5059 linux-all +java/awt/FullScreen/MultimonFullscreenTest/MultimonDeadlockTest.java JBR-4379 windows-all +java/awt/Frame/FramesGC/FramesGC.java 8079069,JBR-6057 macosx-all,windows-all +java/awt/GraphicsDevice/DisplayModes/CompareToXrandrTest.java JBR-5062 linux-all +java/awt/datatransfer/Clipboard/GetContentsInterruptedTest.java JBR-5086 linux-5.15.0-46-generic Ubuntu 20.04 +java/awt/dnd/MissedDragEnterTest.java JBR-6091 windows-all +java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-5117 linux-all +java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java#id1 JBR-5442 linux-all +java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184,JBR-5442 windows-all,linux-all +java/awt/MouseInfo/MultiscreenPointerInfo.java JBR-5442 linux-all +java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184,JBR-5442 windows-all,linux-all +java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-5442 linux-all +java/awt/Multiscreen/WindowGCChangeTest/WindowGCChangeTest.java JBR-5531,JBR-5442 macosx-all,linux-all +java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java JBR-5442 linux-all +java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-5442 windows-all,linux-all +java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-5510,JBR-5442,JBR-6092 windows-all,linux-all,macosx-aarch64 +java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184,JBR-5442 windows-all,linux-all +java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-5390 macosx-all,linux-all +java/awt/Robot/NonEmptyErrorStream.java JBR-5442 linux-all +java/awt/Robot/RobotMoveMultiscreen.java JBR-5442 linux-all +java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6065 windows-all +java/awt/Window/SlowMotion/SlowMotion.java JBR-5442 linux-all +java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java JBR-5442 linux-all +java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java JBR-5442 linux-all +java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-6065 windows-all +java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5442 linux-all + +javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-5442 linux-all +javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-6100 linux-all +javax/swing/JInternalFrame/Test6325652.java JBR-6065 windows-all +javax/swing/JMenu/4692443/bug4692443.java JBR-6065 windows-all +javax/swing/JMenuBar/4750590/bug4750590.java JBR-6065 windows-all +javax/swing/JMenuItem/4171437/bug4171437.java JBR-6065 windows-all +javax/swing/JTable/7124218/SelectEditTableCell.java JBR-5442 linux-all +javax/swing/JTextArea/8149849/DNDTextToScaledArea.java JBR-6296 linux-all +javax/swing/JTextField/8036819/bug8036819.java JBR-6065 windows-all +javax/swing/JTree/4927934/bug4927934.java JBR-6065 windows-all +javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-5442 linux-all +javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184,JBR-5510,JBR-5442 windows-all,linux-all +javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java JBR-5442 linux-all +javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510,JBR-5442 windows-all,linux-all +javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-5442 windows-x64,linux-all + + +java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-551 linux-all +java/awt/Choice/ChoiceStaysOpenedOnTAB.java JBR-5510 linux-all +java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java JBR-5510 linux-all +java/awt/ColorClass/AlphaColorTest.java JBR-5510 linux-all +java/awt/Component/RepaintTest.java JBR-5510 linux-all +java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210,JBR-5510 windows-all,linux-all +java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java NOBUG linux-all +java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-5510 linux-all +java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java JBR-5210 windows-all,linux-all +java/awt/Graphics/XORPaint.java#id2 NOBUG linux-all +java/awt/Graphics2D/CopyAreaOOB.java JBR-5354 macosx-all,windows-all,linux-all +java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-5510 windows-all,linux-all +java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184,JBR-5510 windows-all,linux-all +java/awt/Menu/OpensWithNoGrab/OpensWithNoGrab.java JBR-5510 linux-all +java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510 macosx-all,linux-all +java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java JBR-5510 linux-all +java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510 linux-all +java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JInternalFrameOverlapping.java JBR-5510 linux-all +java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java JBR-5210,8049405,JBR-5510 windows-all,macosx-all,linux-all +java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8158801,JBR-5510 windows-all,linux-all +java/awt/Modal/BlockedMouseInputTest.java NOBUG linux-all +java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184,JBR-5510 macosx-all,windows-all,linux-all +java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184,JBR-5510 macosx-all,windows-all,linux-all +java/awt/Paint/PaintNativeOnUpdate.java 8253184,JBR-5510 windows-all,linux-all +java/awt/PopupMenu/PopupMenuLocation.java JBR-7079 linux-x64 +java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,NOBUG windows-all,linux-all +java/awt/Robot/HiDPIScreenCapture/ScreenCaptureGtkTest.java NOBUG linux-all +java/awt/Window/8159168/SetShapeTest.java 8253184,JBR-5510 windows-all,linux-all +java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-all +java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510 linux-all +java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510 windows-all,linux-all +java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184,JBR-5510 windows-all,linux-all +java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java NOBUG linux-all +javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5510 windows-all,linux-all +javax/swing/JComponent/7154030/bug7154030.java JBR-5510 linux-all +javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-all +javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-all +javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-5510,JBR-6160 linux-all +javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5510 linux-all +javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-all +javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510 linux-all +javax/swing/JMenu/JMenuSelectedColorTest.java JBR-5510 linux-all +javax/swing/JMenu/TestDisabledMenuForegroundColor.java JBR-5510 linux-all +javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-5510 linux-all +javax/swing/JProgressBar/TestJProgressBarHighlightColor.java JBR-5510 linux-all +javax/swing/JRadioButton/8041561/bug8041561.java JBR-5510 linux-all +javax/swing/JSlider/TestJSliderRendering.java JBR-5510 linux-all +javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5510 linux-all +javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-5510 linux-all +javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5510 linux-all +javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5510 macosx-all,linux-all +javax/swing/JTextPane/TestJTextPaneBackgroundColor.java JBR-5510 linux-all +javax/swing/JToolTip/TestTooltipBackgroundColor.java JBR-5510 linux-all +javax/swing/JTree/TestTreeBackgroundColor.java JBR-5510 linux-all +javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-5510 windows-all,linux-all +javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128,8253184,JBR-5510 macosx-all,windows-all,linux-all +javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-all +javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184,JBR-5510 windows-all,linux-all +javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5510 linux-all +javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-5510 windows-all,linux-all +javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5510,JBR-5951 linux-all,windows-x64 +sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-5510 windows-all,macosx-all,linux-all +sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5510 linux-all +sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5510 linux-all + diff --git a/test/jdk/jbProblemList.txt b/test/jdk/jbProblemList.txt new file mode 100644 index 000000000000..c79c9f852f44 --- /dev/null +++ b/test/jdk/jbProblemList.txt @@ -0,0 +1,1403 @@ +########################################################################### +# +# Copyright (c) 2023, JetBrains s.r.o. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# +########################################################################### +# +# List of tests that should not be run by test/Makefile, for various reasons: +# 1. Does not run with jtreg -samevm mode +# 2. Causes problems in jtreg -samevm mode for jtreg or tests that follow it +# 3. The test is too slow or consumes too many system resources +# 4. The test fails when run on any official build systems +# +# It is possible that a test being on this list is a mistake, and that some +# other test in samevm mode caused tests to fail, mistakes happen. +# +# Tests marked @ignore are not run by test/Makefile, but harmless to be listed. +# +# Tests that explicitly state "@run main/othervm ...", and are not listed here, +# will be run in the same batch as the samevm tests. +# +# Shell tests are othervm by default. +# +# List items are testnames followed by labels, all MUST BE commented +# as to why they are here and use a label: +# generic-all Problems on all platforms +# generic-ARCH Where ARCH is one of: x64, i586, ppc64, ppc64le, s390x, aarch64 etc. +# OSNAME-all Where OSNAME is one of: linux, windows, macosx, aix +# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. macosx-x64 +# OSNAME-REV Specific on to one OSNAME and REV, e.g. macosx-10.7.4 +# +# More than one label is allowed but must be on the same line comma seperated, +# without spaces. +# If there are several lines mentioning the same test, the last one is used. +# +############################################################################# +# +# Running the tests: +# cd test && make JT_HOME=jtreg_home PRODUCT_HOME=jdk_home jdk_all +# Or instead of jdk_all, use any of the jdk_* targets. +# +# Samevm Notes: +# * Although some tests may have only been seen to fail on some platforms, +# they might be flagged as 'generic-all' because the problem they have +# could cause hidden slowdowns on other platforms. +# Most samevm problems will be generic-all, but windows usually dislikes +# them the most. +# Address already in use or connection errors indicate a generic port issue. +# (this is not necessarily a samevm issue, but an issue for running the tests +# on shared machines, two people or two test runs will collide). +# * Samevm problem (windows in particular) is not closing all input/output +# * Samevm problem when a test calls setSecurityManager() +# * Samevm problem with setHttps*() is used? (not exactly sure here) +# * Samevm problem when stuffing system properties with non Strings or anything +# * Samevm problem when changing vm settings, or registering any vm actions +# * Samevm problems with deleteOnExit(), if it must happen at end of test +# * Samevm problems with URLClassLoader? (no details here) +# * Samevm problems with dependence on predictable GC or finalizations +# +# Any of the above problems may mean the test needs to be flagged as "othervm". +# +############################################################################# +# +# Fixing the tests: +# +# Some tests just may need to be run with "othervm", and that can easily be +# done by adding a @run line (or modifying any existing @run): +# @run main/othervm NameOfMainClass +# Make sure this @run follows any use of @library. +# Otherwise, if the test is a samevm possibility, make sure the test is +# cleaning up after itself, closing all streams, deleting temp files, etc. +# +# Keep in mind that the bug could be in many places, and even different per +# platform, it could be a bug in any one of: +# - the testcase +# - the jdk (jdk classes, native code, or hotspot) +# - the native compiler +# - the javac compiler +# - the OS (depends on what the testcase does) +# +# If you managed to really fix one of these tests, here is how you can +# remove tests from this list: +# 1. Make sure test passes on all platforms with samevm, or mark it othervm +# 2. Make sure test passes on all platforms when run with it's entire group +# 3. Make sure both VMs are tested, -server and -client, if possible +# 4. Use your favorite build and test system to verify these results +# 5. Delete lines in this file, include the changes with your test changes +# +# You may need to repeat your testing 2 or even 3 times to verify good +# results, some of these samevm failures are not very predictable. +# +############################################################################# + +############################################################################ + +# jdk_awt + +java/awt/Button/DisabledButtonPress.java JBR-5799 windows-aarch64 +java/awt/Debug/DumpOnKey/DumpOnKey.java JBR-5225 windows-all +java/awt/Desktop/8064934/bug8064934.java JBR-5764,JBR-5799 windows-all +java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java 8233568,JBR-5915 macosx-all,linux-all +java/awt/event/MouseEvent/MouseClickTest/MouseClickTest.java 8168389 windows-all,macosx-all +java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java 8224055,JBR-5906 macosx-all,linux-all +java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479 generic-all +java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-all +java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all +java/awt/Focus/FocusSubRequestTest/FocusSubRequestTest.java JBR-5178 windows-all +java/awt/Focus/FocusTransitionTest/FocusTransitionTest.java JBR-5809 linux-all +java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5210 windows-all +java/awt/Focus/FrameMinimizeTest/FrameMinimizeTest.java 8016266 linux-all +java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java 6849364 generic-all +java/awt/Focus/AutoRequestFocusTest/AutoRequestFocusToFrontTest.java 6848406 generic-all +java/awt/Focus/AutoRequestFocusTest/AutoRequestFocusSetVisibleTest.java 6848407 generic-all +java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java 8169110 linux-all +java/awt/Focus/UnaccessibleChoice/AccessibleChoiceTest.java JBR-5178 windows-all +java/awt/Focus/VetoableChangeListenerLoopTest.java JBR-5785 linux-all +java/awt/Frame/7024749/bug7024749.java JBR-5210 windows-all +java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-all +java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5303 windows-all +java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all +java/awt/FileDialog/FileDialogIconTest/FileDialogIconTest.java 8160558 windows-all +java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion.java 8060176 windows-all,macosx-all +java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_1.java 8060176,8204200 windows-all,macosx-all,linux-all +java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_2.java 8204200 windows-all,macosx-all,linux-all +java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_4.java 8204200 windows-all,macosx-all,linux-all +java/awt/event/MouseWheelEvent/WheelModifier/WheelModifier.java JBR-94 windows-x64,linux-all +java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 8029680 generic-all +java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java JBR-5730 linux-all +java/awt/dnd/MissingDragExitEventTest/MissingDragExitEventTest.java 8288839,JBR-5727,JBR-5959 windows-all,linux-all +java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.java 8171510,JBR-881 macosx-all,linux-all +javax/swing/dnd/7171812/bug7171812.java 8253184 windows-all +java/awt/Focus/ChildWindowFocusTest/ChildWindowFocusTest.java JBR-5545 linux-all,windows-all +java/awt/Focus/ChoiceFocus/ChoiceFocus.java 8169103 windows-all,macosx-all +java/awt/Focus/ClearGlobalFocusOwnerTest/ClearGlobalFocusOwnerTest.java JBR-5907 linux-all +java/awt/Focus/ClearLwQueueBreakTest/ClearLwQueueBreakTest.java 8198618,JBR-814 macosx-all,linux-all +java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java JBR-5225 windows-all +java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java 6986252,JBR-5178 windows-all +java/awt/Focus/ConsumedTabKeyTest.java JBR-5833 windows-all +java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5210 windows-all +java/awt/Focus/MouseClickRequestFocusRaceTest/MouseClickRequestFocusRaceTest.java 8194753 linux-all,macosx-all +java/awt/Focus/NoAutotransferToDisabledCompTest/NoAutotransferToDisabledCompTest.java 7152980,JBR-5210 macosx-all,windows-all +java/awt/Focus/ToFrontFocusTest/ToFrontFocus.java 7156130 linux-all +java/awt/Focus/TypeAhead/TestFocusFreeze.java JBR-5856 windows-all +java/awt/Focus/WindowInitialFocusTest/WindowInitialFocusTest.java JBR-69 windows-all +java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java 8169096,JBR-4880,JBR-5387 macosx-all,windows-all,linux-all +java/awt/EventQueue/6980209/bug6980209.java 8198615 macosx-all +java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java 8198237 macosx-all +java/awt/Frame/SetMinimumSizeTest/SetMinimumSizeTest2.java JBR-5210 windows-all +java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java JBR-5210,JBR-6126 windows-all,linux-5.18.2-arch1-1,macosx-all +java/awt/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150,JBR-4880,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1 +java/awt/grab/GrabOnUnfocusableToplevel/GrabOnUnfocusableToplevel.java 8169109,JBR-4880 linux-all,windows-all +java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all +java/awt/Mixing/AWT_Mixing/HierarchyBoundsListenerMixingTest.java 8049405,8253184 generic-all +java/awt/Mixing/AWT_Mixing/MixingFrameResizing.java 8049405,8253184 generic-all +java/awt/Mixing/AWT_Mixing/OpaqueOverlapping.java 8294264 windows-x64 +java/awt/Mixing/AWT_Mixing/OpaqueOverlappingChoice.java 8048171 generic-all +java/awt/Mixing/AWT_Mixing/JMenuBarOverlapping.java 8159451 linux-all,windows-all,macosx-all +java/awt/Mixing/AWT_Mixing/JSplitPaneOverlapping.java 6986109 generic-all +java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/MixingPanelsResizing.java 8049405 generic-all +java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510 macosx-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java JBR-5210,8049405,JBR-5510 windows-all,macosx-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Mixing/HWDisappear.java 8253184 windows-all +java/awt/Mixing/MixingInHwPanel.java 8253184 windows-all +java/awt/Mixing/NonOpaqueInternalFrame.java 7124549 macosx-all +java/awt/Mixing/ValidBounds.java 8253184,JBR-5845 windows-all,linux-all +java/awt/Mixing/Validating.java JBR-5908 linux-all +java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8252772,JBR-5799 linux-all,windows-all +java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java 6829264 generic-all +java/awt/Focus/ShowFrameCheckForegroundTest/ShowFrameCheckForegroundTest.java JBR-5210 windows-all +java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java 8080982 generic-all +java/awt/datatransfer/SystemFlavorMap/AddFlavorTest.java 8079268 linux-all +java/awt/datatransfer/UnicodeTransferTest/UnicodeTransferTest.java 8300704 linux-all +java/awt/Toolkit/ScreenInsetsTest/ScreenInsetsTest.java JBR-5812 linux-all +java/awt/Toolkit/SecurityTest/SecurityTest2.java JBR-5225 windows-all +java/awt/Toolkit/SunDisplayChangerLeakTest/SunDisplayChangerLeakTest.java JBR-5051 windows-all +java/awt/Toolkit/RealSync/Test.java 8072110 linux-all,windows-all +java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050 windows-all,macosx-all +java/awt/EventDispatchThread/LoopRobustness/LoopRobustness.java 8073636,JBR-4211 macosx-all,linux-all +java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java JBR-5225 windows-all +java/awt/FullScreen/AltTabCrashTest/AltTabCrashTest.java JBR-4905 windows-all,linux-all +java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java 7019055,8266245 windows-all,linux-all,macosx-aarch64 +java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java JBR-4275,JBR-4880,JBR-7108 linux-all,windows-all,macosx-all +java/awt/FullScreen/NoResizeEventOnDMChangeTest/NoResizeEventOnDMChangeTest.java 7188711,8253184 linux-all,windows-all +java/awt/FullScreen/UninitializedDisplayModeChangeTest/UninitializedDisplayModeChangeTest.java 7188711,8273617,JBR-4880,8253184 macosx-all,linux-all,windows-all +java/awt/Focus/8013611/JDK8013611.java 8175366 windows-all,macosx-all +java/awt/Focus/6981400/Test1.java 8029675,JBR-5510 windows-all,macosx-all,linux-5.18.2-arch1-1 +java/awt/Focus/6981400/Test3.java 8173264 generic-all +java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729 windows-all,linux-all +java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5210,8298247 windows-all,linux-all +java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-5210 windows-all +java/awt/event/KeyEvent/AltCharAcceleratorTest/AltCharAcceleratorTest.java JBR-5210 windows-all +java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java 8169476 windows-all +java/awt/event/KeyEvent/KeyChar/KeyCharTest.java 8169474,8224055,JBR-93 windows-all,linux-all +java/awt/event/KeyEvent/KeyEventLocationTest.java JBR-5916 linux-all + +java/awt/event/KeyEvent/KeyTyped/CtrlASCII.java JBR-4880 windows-all + +java/awt/event/KeyEvent/KeyTyped/CtrlSpace.java JBR-3817 windows-all,macosx-all + +java/awt/dnd/BadSerializationTest/BadSerializationTest.java linux-x64,windows-x64 +java/awt/dnd/Button2DragTest/Button2DragTest.java 8310490 linux-all +java/awt/dnd/RejectDragDropActionTest.java JBR-5858 windows-10.0 +java/awt/dnd/URIListToFileListBetweenJVMsTest/URIListToFileListBetweenJVMsTest.java 8194947 generic-all +java/awt/Frame/FramesGC/FramesGC.java 8079069 macosx-all +java/awt/Frame/FrameVisible/FrameContentAppearanceTest.java JBR-5838 macosx-x64 +java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java 8253184 windows-all +java/awt/TrayIcon/8072769/bug8072769.java JBR-6913 windows-all +java/awt/TrayIcon/ActionCommand/ActionCommand.java 8150540,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/ActionEventMask/ActionEventMask.java 8150540,8242801,8295300,JBR-3107 windows-all,macosx-all,linux-all +java/awt/TrayIcon/ActionEventTest/ActionEventTest.java 8150540,8242801 windows-all,macosx-all + +java/awt/TrayIcon/ModalityTest/ModalityTest.java 8150540,8295300,JBR-3107 windows-all,macosx-all,linux-all +java/awt/TrayIcon/MouseEventMask/MouseEventMaskTest.java 8150540,8295300,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/MouseMovedTest/MouseMovedTest.java 8150540,8295300,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/SecurityCheck/FunctionalityCheck/FunctionalityCheck.java 8150540,8295300,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/SecurityCheck/NoPermissionTest/NoPermissionTest.java JBR-5225 windows-all +java/awt/TrayIcon/SecurityCheck/PermissionTest/PermissionTest.java JBR-5225 windows-all +java/awt/TrayIcon/TrayIconEventModifiers/TrayIconEventModifiersTest.java 8150540,8295300,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/TrayIconEvents/TrayIconEventsTest.java 8150540,8295300,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/TrayIconMouseTest/TrayIconMouseTest.java 8150540,JBR-3107 windows-all,linux-all +java/awt/TrayIcon/TrayIconPopup/TrayIconPopupClickTest.java 8150540,JBR-3107 windows-all,macosx-all,linux-all +java/awt/TrayIcon/TrayIconPopup/TrayIconPopupTest.java 8150540,JBR-3107 windows-all,linux-all +java/awt/Window/8027025/Test8027025.java 8253184 windows-all +java/awt/Window/8159168/SetShapeTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Window/SetWindowLocationByPlatformTest/SetWindowLocationByPlatformTest.java 8253184,JBR-5728 windows-all,linux-all +java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Window/ShapedAndTranslucentWindows/SetShapeAndClick.java 8197936,8253184 macosx-all,windows-all +java/awt/Window/ShapedAndTranslucentWindows/SetShapeDynamicallyAndClick.java 8013450,8253184 macosx-all,windows-all +java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucentWindowClick.java 8013450,8253184 macosx-all,windows-all +java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java 8253184 windows-all +java/awt/Window/ShapedAndTranslucentWindows/TranslucentWindowClick.java 8253184 windows-all +java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java 8253184 windows-all +java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510,JBR-6463 windows-all,linux-all +java/awt/Window/ShapedAndTranslucentWindows/FocusAWTTest.java 8222328 windows-all,linux-all,macosx-all +java/awt/Window/ShapedAndTranslucentWindows/Shaped.java 8222328 windows-all,linux-all,macosx-all +java/awt/Window/ShapedAndTranslucentWindows/ShapedByAPI.java 8222328 windows-all,linux-all,macosx-all +java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucent.java 8222328 windows-all,linux-all,macosx-all +java/awt/Window/ShapedAndTranslucentWindows/StaticallyShaped.java 8165218,8222328 windows-all,macosx-all,linux-all +java/awt/Window/ShapedAndTranslucentWindows/Translucent.java 8222328 windows-all,linux-all,macosx-all +java/awt/Window/AlwaysOnTop/AutoTestOnTop.java 6847593,8253184 linux-all,windows-all +java/awt/Window/Grab/GrabTest.java 8253184 windows-all +java/awt/Window/GrabSequence/GrabSequence.java 6848409 macosx-all,linux-all +java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java 8203371 linux-all +java/awt/FontClass/FontAccess.java JBR-5225 windows-all +java/awt/font/FontScaling/StretchedFontTest.java JBR-6225 macosx-all +java/awt/font/GlyphVector/NLGlyphTest.java 8273321,JBR-5355 linux-all +java/awt/font/JNICheck/JNICheck.sh JBR-5011 linux-all +java/awt/font/TextLayout/TextLayoutBounds.java 8169188 generic-all +java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java 8233028 generic-all +java/awt/image/DrawImage/IncorrectAlphaSurface2SW.java 8056077 linux-all +java/awt/image/multiresolution/MultiresolutionIconTest.java 8252812 windows-all,linux-all +java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/print/Headless/HeadlessPrinterJob.java 8196088 windows-all +sun/awt/datatransfer/SuplementaryCharactersTransferTest.java 8011371 generic-all +sun/awt/shell/ShellFolderMemoryLeak.java 8197794 windows-all +sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java 8301177 generic-all +sun/java2d/DirectX/OpaqueImageToSurfaceBlitTest/OpaqueImageToSurfaceBlitTest.java JBR-5393 windows-aarch64 +sun/java2d/DirectX/OverriddenInsetsTest/OverriddenInsetsTest.java 8196102 generic-all +sun/java2d/DirectX/RenderingToCachedGraphicsTest/RenderingToCachedGraphicsTest.java 8196180,8252812 windows-all,macosx-all,linux-all + +java/awt/Graphics2D/CopyAreaOOB.java JBR-5354 macosx-all,windows-all,linux-5.18.2-arch1-1 +java/awt/Graphics2D/DrawString/DisposerTest.java JBR-5010,JBR-5510 linux-aarch64,linux-5.18.2-arch1-1 +java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8266283 generic-all +java/awt/Graphics2D/DrawString/TextRenderingTest.java JBR-4260 macosx-11.7.1 +java/awt/Graphics2D/ScaledTransform/ScaledTransform.java 8277240 linux-all +sun/java2d/SunGraphics2D/DrawImageBilinear.java 8297175 linux-all +sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java 8144029 macosx-all,linux-all,windows-all +sun/java2d/SunGraphics2D/PolyVertTest.java 6986565 generic-all +sun/java2d/SunGraphics2D/SimplePrimQuality.java 6992007 generic-all +sun/java2d/SunGraphics2D/SourceClippingBlitTest/SourceClippingBlitTest.java 8196185 generic-all + +sun/java2d/pipe/InterpolationQualityTest.java JBR-5328 windows-all + +sun/java2d/X11SurfaceData/SharedMemoryPixmapsTest/SharedMemoryPixmapsTest.sh 8221451 linux-all,macosx-all +java/awt/hidpi/ClientAreaOriginWindowsTest.java JBR-630 windows-all +java/awt/hidpi/SetMaximizedBoundsTest.java JBR-5443 windows-all +java/awt/hidpi/properties/HiDPIPropertiesUnixTest.java JBR-495 macosx-all +java/awt/FullScreen/DisplayChangeVITest/DisplayChangeVITest.java 8169469,8273617 windows-all,macosx-aarch64 +java/awt/print/PrinterJob/GetUserNameTest.java JBR-5225 windows-all +java/awt/print/PrinterJob/PSQuestionMark.java 7003378 generic-all +java/awt/print/PrinterJob/GlyphPositions.java 7003378 generic-all +java/awt/Choice/ChoiceLocationTest/ChoiceLocationTest.java JBR-5799 windows-all +java/awt/Choice/ChoiceFocusLostTest.java JBR-5799 windows-x64 +java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 6849371,JBR-5210 macosx-all,linux-all,windows-all +java/awt/Component/F10TopToplevel/F10TopToplevel.java JBR-5687 linux-all +java/awt/Component/GetScreenLocTest/GetScreenLocTest.java 4753654 generic-all +java/awt/Component/RepaintTest.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Component/SetComponentsBounds/SetComponentsBounds.java JBR-4275 linux-all +java/awt/Component/SetEnabledPerformance/SetEnabledPerformance.java 8165863 macosx-all +java/awt/Clipboard/HTMLTransferTest/HTMLTransferTest.java 8017454 macosx-all +java/awt/Frame/MiscUndecorated/ActiveAWTWindowTest.java JBR-5210 windows-all +java/awt/Frame/MiscUndecorated/ActiveSwingWindowTest.java JBR-5210 windows-all +java/awt/Frame/MiscUndecorated/FrameCloseTest.java JBR-5210 windows-all +java/awt/Frame/MiscUndecorated/RepaintTest.java 8266244,JBR-5786 macosx-aarch64,generic-all +java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java 8253184 windows-all +java/awt/Robot/RobotExtraButton/RobotExtraButton.java JBR-6554 linux-all +java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogAppModal3Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogAppModal4Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogAppModal5Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogAppModal6Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal1Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal2Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal3Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal4Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal5Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal6Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogDocModal7Test.java 7186009,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/FileDialog/FileDialogModal1Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogModal2Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogModal3Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogModal4Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogModal5Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogModal6Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal1Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal2Test.java 7186009,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal3Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal4Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal5Test.java 7186009,8253184 macosx-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal6Test.java 7186009,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/FileDialog/FileDialogNonModal7Test.java 7186009,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/FileDialog/FileDialogTKModal1Test.java 8196430 generic-all +java/awt/Modal/FileDialog/FileDialogTKModal2Test.java 8196430 generic-all +java/awt/Modal/FileDialog/FileDialogTKModal3Test.java 8196430 generic-all +java/awt/Modal/FileDialog/FileDialogTKModal4Test.java 8196430 generic-all +java/awt/Modal/FileDialog/FileDialogTKModal5Test.java 8196430 generic-all +java/awt/Modal/FileDialog/FileDialogTKModal6Test.java 8196430 generic-all +java/awt/Modal/FileDialog/FileDialogTKModal7Test.java 8196430,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDDAppModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDDDocModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDDModelessTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDDNonModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDDSetModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDDToolkitModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFAppModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFSetModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFToolkitModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFWModeless1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFWModeless2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFWNonModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDFWNonModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingDocModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDAppModalTest.java 8253184 windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDDocModalTest.java 8253184 windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDModelessTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDNonModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDSetModalTest.java 8253184 windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDToolkitModalTest.java 8253184 windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWDocModal4Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWModeless1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWModeless2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWModeless3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWModeless4Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingFDWNonModal4Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal4Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal5Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsAppModal6Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsDocModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsDocModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal4Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal5Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsSetModal6Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal4Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal5Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/BlockingWindowsToolkitModal6Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/UnblockedDialogAppModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/UnblockedDialogDocModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/UnblockedDialogModelessTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/UnblockedDialogNonModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/UnblockedDialogSetModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalBlockingTests/UnblockedDialogToolkitModalTest.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/ModalExclusionTests/ApplicationExcludeFrameFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPageSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPrintSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ApplicationExcludeFramePageSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ApplicationExcludeFramePrintSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ToolkitExcludeFrameFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogPageSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ToolkitExcludeDialogPrintSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ToolkitExcludeFramePageSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalExclusionTests/ToolkitExcludeFramePrintSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal2Test.java 8058813 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless2Test.java 8196191 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFDocModalTest.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFModelessTest.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFNonModalTest.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsModelessTest.java 8196432 linux-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsNonModalTest.java 8196432 linux-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWAppModalTest.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWDocModalTest.java 8196432,8253184 linux-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWModelessTest.java 8196432,8253184 linux-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFDWNonModalTest.java 8196432,8253184 linux-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal1Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal2Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal3Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDAppModal4Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal1Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal2Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal3Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDDocModal4Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless1Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless2Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless3Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDModeless4Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal1Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal2Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal3Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferFWDNonModal4Test.java 8196432,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal1Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFAppModal3Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal1Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal2Test.java 8253184,8196432 windows-all,linux-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFDocModal3Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless1Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFModeless3Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal1Test.java 8253184 windows-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal2Test.java 8253184,8196432 windows-all,linux-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferWDFNonModal3Test.java 8253184 windows-all +java/awt/Modal/ModalInternalFrameTest/ModalInternalFrameTest.java 8253184,JBR-6302 windows-all,linux-all +java/awt/Modal/MultipleDialogs/MultipleDialogs1Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/MultipleDialogs/MultipleDialogs2Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/MultipleDialogs/MultipleDialogs3Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/MultipleDialogs/MultipleDialogs5Test.java 8198665,8253184 macosx-all,windows-all +java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java 8177326,8253184,JBR-6305 macosx-all,windows-all,linux-x64 +java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8253184 windows-all +java/awt/Mouse/EnterExitEvents/ModalDialogEnterExitEventsTest.java 8253184,JBR-5811 windows-all,linux-all +java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java 8005021,8253184 macosx-all,windows-all +java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java 8051455 macosx-all +java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java 8253184,JBR-5709 windows-all,linux-all +java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184 windows-all +java/awt/Mouse/MouseModifiersUnitTest/ExtraButtonDrag.java 8253184,JBR-6407 windows-all,linux-all +java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersUnitTest_Standard.java 7124407,8302787 macosx-all,windows-all +java/awt/Mouse/RemovedComponentMouseListener/RemovedComponentMouseListener.java 8157170,8253184 macosx-all,windows-all +java/awt/MouseAdapter/MouseAdapterUnitTest/MouseAdapterUnitTest.java 8253184 windows-all +java/awt/MouseInfo/ComponentMousePositionTest.java 8253184 windows-all +java/awt/MouseInfo/JContainerMousePositionTest.java 8253184 windows-all +java/awt/Modal/ToFront/DialogToFrontAppModalTest.java 8253184 windows-all +java/awt/Modal/ToFront/DialogToFrontDocModalTest.java 8253184 windows-all +java/awt/Modal/ToFront/DialogToFrontModalTest.java 8253184 windows-all +java/awt/Modal/ToFront/DialogToFrontModeless1Test.java 8213530,8253184 linux-all,windows-all +java/awt/Modal/ToFront/DialogToFrontNonModalTest.java 8221899,8253184 linux-all,windows-all +java/awt/Modal/ToFront/DialogToFrontTKModalTest.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontAppModal1Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontAppModal2Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontAppModal3Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontAppModal4Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontAppModal5Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontDocModal1Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontDocModal2Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontModal1Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontModal2Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontModal3Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontModal4Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontModal5Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontModeless1Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/ToFront/FrameToFrontNonModalTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/ToFront/FrameToFrontTKModal1Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontTKModal2Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontTKModal3Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontTKModal4Test.java 8253184 windows-all +java/awt/Modal/ToFront/FrameToFrontTKModal5Test.java 8253184 windows-all +java/awt/Modal/ToBack/ToBackAppModal1Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackAppModal2Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackAppModal3Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackAppModal4Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackAppModal5Test.java 8196441,8253184 macosx-all,windows-all +java/awt/Modal/ToBack/ToBackAppModal6Test.java 8196441,8253184 linux-all,windows-all +java/awt/Modal/ToBack/ToBackModal1Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackModal2Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackModal3Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackModal4Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackModal5Test.java 8253184 windows-all +java/awt/Modal/ToBack/ToBackModal6Test.java 8253184 windows-all +java/awt/Modal/ToBack/ToBackTKModal1Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackTKModal2Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackTKModal3Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackTKModal4Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackTKModal5Test.java 8196441,8253184 macosx-all,windows-all +java/awt/Modal/ToBack/ToBackTKModal6Test.java 8253184 windows-all +java/awt/Modal/ToBack/ToBackDocModal1Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackDocModal2Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackDocModal3Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackDocModal4Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackDocModal5Test.java 8196441,8253184 linux-all,macosx-all,windows-all +java/awt/Modal/ToBack/ToBackDocModal6Test.java 8253184 windows-all +java/awt/Modal/ToBack/ToBackModeless1Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackModeless2Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackModeless3Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackModeless4Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackModeless5Test.java 8196441,8253184 macosx-all,windows-all +java/awt/Modal/ToBack/ToBackModeless6Test.java 8253184 windows-all +java/awt/Modal/ToBack/ToBackNonModal1Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackNonModal2Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackNonModal3Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackNonModal4Test.java 8196441,8253184 macosx-all,linux-all,windows-all +java/awt/Modal/ToBack/ToBackNonModal5Test.java 8196441,8253184 macosx-all,windows-all +java/awt/Modal/ToBack/ToBackNonModal6Test.java 8253184 windows-all +java/awt/Modal/NullModalityDialogTest/NullModalityDialogTest.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopAppModal1Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopAppModal2Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopAppModal3Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopAppModal4Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopAppModal5Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopAppModal6Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopDocModal1Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopDocModal2Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopDocModal3Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopDocModal4Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopDocModal5Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopDocModal6Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopModal1Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopModal2Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopModal3Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopModal4Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopModal5Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopModal6Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopModeless1Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopModeless2Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopModeless3Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopModeless4Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopModeless5Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopModeless6Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Modal/OnTop/OnTopTKModal1Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopTKModal2Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopTKModal3Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopTKModal4Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopTKModal5Test.java 8253184 windows-all +java/awt/Modal/OnTop/OnTopTKModal6Test.java 8253184 windows-all +java/awt/List/ActionEventTest/ActionEventTest.java JBR-5799 windows-x64 +java/awt/List/EmptyListEventTest/EmptyListEventTest.java JBR-5387 linux-all +java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.java JBR-86 windows-x64 +java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711 linux-all +java/awt/List/KeyEventsTest/KeyEventsTest.java JBR-5210,JBR-6273,JBR-5706,JBR-6534 windows-all,linux-aarch64,linux-all +java/awt/List/ListMultipleSelectTest/ListMultipleSelectTest.java JBR-5555 windows-all +java/awt/List/NofocusListDblClickTest/NofocusListDblClickTest.java 8253184 windows-all +java/awt/font/TextLayout/LigatureCaretTest.java 8266312 generic-all +java/awt/image/VolatileImage/CustomCompositeTest.java 8199002 windows-all,linux-all +java/awt/image/VolatileImage/GradientPaints.java 8199003 linux-all +java/awt/JAWT/JAWT.sh 8197798 windows-all,linux-all +java/awt/datatransfer/ConstructFlavoredObjectTest/ConstructFlavoredObjectTest.java 8202860 linux-all +java/awt/FileDialog/FilenameFilterTest/FilenameFilterTest.java 8202882,JBR-1147 linux-all,macosx-all +java/awt/Focus/NonFocusableBlockedOwnerTest/NonFocusableBlockedOwnerTest.java 7124275 macosx-all +java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java 8280392 +java/awt/Focus/NoFocusOwnerAWTTest.java JBR-5825 windows-all +java/awt/Focus/NoFocusOwnerSwingTest.java JBR-5825 windows-all +java/awt/Focus/TranserFocusToWindow/TranserFocusToWindow.java 6848810,JBR-5210 macosx-all,linux-all,windows-all +java/awt/FileDialog/ModalFocus/FileDialogModalFocusTest.java 8194751 linux-all +java/awt/image/VolatileImage/BitmaskVolatileImage.java 8133102 linux-all +java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java 8134231,8279190 windows-all,linux-all,macosx-all +java/awt/SplashScreen/MultiResolutionSplash/unix/UnixMultiResolutionSplashTest.java 8203004 linux-all +java/awt/Robot/AcceptExtraMouseButtons/AcceptExtraMouseButtons.java 7107528,8253184 linux-all,macosx-all,windows-all +java/awt/Mouse/GetMousePositionTest/GetMousePositionWithOverlay.java 8253184 windows-all +java/awt/Mouse/MouseDragEvent/MouseDraggedTest.java 8080676,8253184 linux-all,windows-all +java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersInKeyEvent.java 8157147 linux-all,windows-all +java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184 windows-all +java/awt/Toolkit/ToolkitPropertyTest/ToolkitPropertyTest_Enable.java 6847163 linux-all,windows-all +java/awt/xembed/server/RunTestXEmbed.java 7034201 linux-all +java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java 8164473 linux-all +java/awt/Frame/DecoratedFrameInsets/DecoratedFrameInsetsTest.java JBR-5205 linux-5.4.0-1103-aws +java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786 macosx-all + +java/awt/GraphicsDevice/DisplayModes/CycleDMImage.java 7099223,8274106 macosx-all,linux-all,windows-all +java/awt/keyboard/AllKeyCode/AllKeyCode.java 8242930 macosx-all +java/awt/keyboard/8218917/AltKeyBug.java JBR-5312 windows-all +java/awt/keyboard/AltPlusNumberKeyCombinationsTest/AltPlusNumberKeyCombinationsTest.java JBR-5210 windows-all +java/awt/KeyboardFocusmanager/TypeAhead/ButtonActionKeyTest/ButtonActionKeyTest.java 8257529 windows-x64 +java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogButtonTest/EnqueueWithDialogButtonTest.java JBR-5210 windows-all +java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogTest/EnqueueWithDialogTest.java JBR-5210 windows-all +java/awt/KeyboardFocusmanager/TypeAhead/FreezeTest/FreezeTest.java JBR-5210 windows-all +java/awt/KeyboardFocusmanager/TypeAhead/SubMenuShowTest/SubMenuShowTest.java JBR-4074 macosx-all,windows-all +java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java JBR-5210 windows-all +java/awt/FullScreen/8013581/bug8013581.java 8169471,JBR-80 macosx-all,windows-all +java/awt/event/MouseEvent/RobotLWTest/RobotLWTest.java 8233568,JBR-5583 macosx-all,windows-all,linux-all +java/awt/event/MouseEvent/MultipleMouseButtonsTest/MultipleMouseButtonsTest.java 8233568 macosx-all +java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java 8233568 macosx-all +java/awt/event/KeyEvent/DeadKey/deadKeyMacOSX.java 8233568 macosx-all +java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java 8238720 windows-all +java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184 windows-all +java/awt/Paint/ListRepaint.java JBR-5060 linux-all +java/awt/Paint/PaintNativeOnUpdate.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/PopupMenu/PopupMenuLocation.java 8238720 windows-all +java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java 8253184 windows-all +java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java 8238720,8322653 windows-all,macosx-all +java/awt/GridLayout/ComponentPreferredSize/ComponentPreferredSize.java 8238720,8322653 windows-all,macosx-all +java/awt/event/MouseEvent/FrameMouseEventAbsoluteCoordsTest/FrameMouseEventAbsoluteCoordsTest.java 8238720 windows-all + +java/awt/wakefield/RobotKeyboard.java JBR-5653 linux-all +java/awt/wakefield/ScreenCapture.java JBR-5653 linux-all + +# Several tests which fail sometimes on macos11 +java/awt/Window/MainKeyWindowTest/TestMainKeyWindow.java 8265985 macosx-all +java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java JBR-5225 windows-all +java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeTest.java 8266059 macosx-all +java/awt/Robot/Delay/InterruptOfDelay.java 8265986 macosx-all +java/awt/MenuBar/TestNoScreenMenuBar.java 8265987 macosx-all + +java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243,JBR-5510 macosx-all,linux-5.18.2-arch1-1 +java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5225 windows-all +java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java JBR-5082 linux-all +java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787,8253184 linux-all,windows-all + +############################################################################ + +# jdk_beans + +java/beans/Beans/TypoInBeanDescription.java JBR-6916 windows-x64 +java/beans/Introspector/8132566/OverridePropertyInfoTest.java 8132565 generic-all +java/beans/Introspector/8132566/OverrideUserDefPropertyInfoTest.java 8132565 generic-all + +java/beans/XMLEncoder/Test6570354.java 8015593 macosx-all + +############################################################################ + +# jdk_foreign + +java/foreign/callarranger/TestAarch64CallArranger.java generic-x86 +java/foreign/TestLargeSegmentCopy.java generic-x86 +java/foreign/TestMismatch.java 8249684 macosx-all + +############################################################################ + +# jdk_lang + +java/lang/ProcessHandle/InfoTest.java 8211847 aix-ppc64 +java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java 8151492 generic-all +java/lang/invoke/LFCaching/LFGarbageCollectedTest.java 8078602 generic-all +java/lang/invoke/lambda/LambdaFileEncodingSerialization.java 8249079 linux-x64 +java/lang/invoke/RicochetTest.java 8251969 generic-all + +############################################################################ + +# jdk_instrument + +java/lang/instrument/RedefineBigClass.sh 8065756 generic-all +java/lang/instrument/RetransformBigClass.sh 8065756 generic-all + +java/lang/management/MemoryMXBean/Pending.java 8158837 generic-all +java/lang/management/MemoryMXBean/PendingAllGC.sh 8158837 generic-all + +javax/management/monitor/DerivedGaugeMonitorTest.java 8042211 generic-all + +############################################################################ + +# jdk_io + +java/io/pathNames/GeneralWin32.java 8180264 windows-all + +############################################################################ + +# jdk_management + +com/sun/management/OperatingSystemMXBean/GetProcessCpuLoad.java 8030957 aix-all +com/sun/management/OperatingSystemMXBean/GetSystemCpuLoad.java 8030957 aix-all + +java/lang/management/ThreadMXBean/ThreadMXBeanStateTest.java 8247426 generic-all + +sun/management/jdp/JdpDefaultsTest.java 8241865 linux-aarch64,macosx-all +sun/management/jdp/JdpJmxRemoteDynamicPortTest.java 8241865 macosx-all +sun/management/jdp/JdpSpecificAddressTest.java 8241865 macosx-all + +############################################################################ + +# jdk_jmx + +javax/management/MBeanServer/OldMBeanServerTest.java 8030957 aix-all + +javax/management/remote/mandatory/notif/NotifReconnectDeadlockTest.java 8042215 generic-all + +javax/management/remote/mandatory/connection/RMIConnector_NPETest.java 8267887 generic-all + +javax/management/remote/mandatory/connection/BrokenConnectionTest.java 8262312 linux-all + +############################################################################ + +# jdk_net + +java/net/MulticastSocket/NoLoopbackPackets.java 7122846 macosx-all +java/net/MulticastSocket/SetLoopbackMode.java 7122846 macosx-all + +java/net/MulticastSocket/Test.java 7145658 macosx-all + +java/net/ServerSocket/AcceptInheritHandle.java 8211854 aix-ppc64 + +############################################################################ + +# jdk_nio + +java/nio/channels/AsynchronousSocketChannel/StressLoopback.java 8211851 aix-ppc64 + +java/nio/channels/DatagramChannel/ManySourcesAndTargets.java 8264385 macosx-aarch64 + +java/nio/channels/DatagramChannel/Unref.java 8233437 generic-all + +java/nio/channels/Selector/Wakeup.java 6963118 windows-all + +jdk/nio/zipfs/TestLocOffsetFromZip64EF.java 8301183 linux-all + +############################################################################ + +# jdk_rmi + +java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java 7140992 generic-all + +java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java 7146541 linux-all + +java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java 7191877 generic-all + +java/rmi/activation/Activatable/extLoadedImpl/ext.sh 8062724 generic-all + +java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java 8170562 generic-all + +java/rmi/registry/readTest/CodebaseTest.java 8173324 windows-all + +java/rmi/Naming/DefaultRegistryPort.java 8005619 windows-all +java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java 8005619 windows-all + +############################################################################ + +# jdk_sctp + +com/sun/nio/sctp/SctpMultiChannel/SendFailed.java 8141694 linux-all + +com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java 8141694 linux-all + +com/sun/nio/sctp/SctpChannel/SocketOptionTests.java 8141694 linux-all + +############################################################################ + +# jdk_security + +sun/security/smartcardio/TestChannel.java 8039280 generic-all +sun/security/smartcardio/TestConnect.java 8039280 generic-all +sun/security/smartcardio/TestConnectAgain.java 8039280 generic-all +sun/security/smartcardio/TestControl.java 8039280 generic-all +sun/security/smartcardio/TestDefault.java 8039280 generic-all +sun/security/smartcardio/TestDirect.java 8039280 generic-all +sun/security/smartcardio/TestExclusive.java 8039280 generic-all +sun/security/smartcardio/TestMultiplePresent.java 8039280 generic-all +sun/security/smartcardio/TestPresent.java 8039280 generic-all +sun/security/smartcardio/TestTransmit.java 8039280 generic-all +com/sun/crypto/provider/Cipher/DES/PerformanceTest.java 8039280 generic-all +com/sun/security/auth/callback/TextCallbackHandler/Default.java 8039280 generic-all +com/sun/security/auth/callback/TextCallbackHandler/Password.java 8039280 generic-all +com/sun/security/sasl/gsskerb/AuthOnly.java 8039280 generic-all +com/sun/security/sasl/gsskerb/ConfSecurityLayer.java 8039280 generic-all +com/sun/security/sasl/gsskerb/NoSecurityLayer.java 8039280 generic-all +javax/security/auth/kerberos/KerberosHashEqualsTest.java 8039280 generic-all +javax/security/auth/kerberos/KerberosTixDateTest.java 8039280 generic-all +sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.java 8039280 generic-all +sun/security/provider/PolicyParser/ExtDirsChange.java 8039280 generic-all +sun/security/provider/PolicyParser/PrincipalExpansionError.java 8039280 generic-all + +############################################################################ + +# jdk_sound +javax/sound/sampled/DirectAudio/bug6372428.java 8055097 generic-all +javax/sound/sampled/Clip/bug5070081.java 8055097 generic-all +javax/sound/sampled/DataLine/LongFramePosition.java 8055097 generic-all + +javax/sound/sampled/Clip/Drain/ClipDrain.java 7062792 generic-all +javax/sound/sampled/Clip/SetPositionHang.java JBR-4969 linux-aarch64 + +javax/sound/sampled/Mixers/DisabledAssertionCrash.java 7067310 generic-all + +javax/sound/midi/Sequencer/Recording.java 8167580,8265485 linux-all,macosx-aarch64 +javax/sound/midi/Sequencer/Looping.java 8136897 generic-all +javax/sound/sampled/Clip/ClipIsRunningAfterStop.java 8307574,JBR-4455 linux-x64,linux-aarch64 +# TBD +javax/sound/sampled/Lines/ChangingBuffer.java JBR-4455 linux-aarch64 +javax/sound/sampled/Clip/IsRunningHang.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/ClipOpenException.java JBR-4455 linux-aarch64 +javax/sound/sampled/DataLine/DataLineInfoNegBufferSize.java JBR-4455 linux-aarch64 +javax/sound/sampled/Clip/ClipSetPos.java JBR-4455 linux-aarch64 +javax/sound/sampled/Controls/FloatControl/FloatControlBug.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/GetLine.java JBR-4455 linux-aarch64 +javax/sound/sampled/DataLine/DataLine_ArrayIndexOutOfBounds.java JBR-4455 linux-aarch64 +javax/sound/sampled/Mixers/PlugHwMonoAnd8bitAvailable.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/FrameSize/FrameSizeTest.java JBR-4455 linux-aarch64 +javax/sound/sampled/DirectAudio/bug6400879.java JBR-4455 linux-aarch64 +javax/sound/sampled/Mixers/NoSimpleInputDevice.java JBR-4455 linux-aarch64 +javax/sound/sampled/LinuxCrash/SDLLinuxCrash.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/16and32KHz/Has16and32KHz.java JBR-4455 linux-aarch64 +javax/sound/sampled/Mixers/UnexpectedIAE.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/BufferSizeCheck.java JBR-4455 linux-aarch64 +javax/sound/sampled/LinuxCrash/ClipLinuxCrash.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/SourceDataLineDefaultBufferSizeCrash.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/StopStart.java JBR-4455 linux-aarch64 +javax/sound/sampled/Clip/OpenNonIntegralNumberOfSampleframes.java JBR-4455 linux-aarch64 +javax/sound/sampled/LinuxCrash/ClipLinuxCrash2.java JBR-4455 linux-aarch64 +javax/sound/sampled/DataLine/LineDefFormat.java JBR-4455 linux-aarch64 +javax/sound/sampled/Mixers/BothEndiansAndSigns.java JBR-4455 linux-aarch64 +javax/sound/sampled/Lines/SDLwrite.java JBR-4455 linux-aarch64 +javax/sound/sampled/spi/MixerProvider/ExpectedNPEOnNull.java JBR-4455 linux-aarch64 +javax/sound/sampled/Mixers/BogusMixers.java JBR-4455 linux-aarch64 + + +############################################################################ + +# jdk_imageio + +############################################################################ + +javax/imageio/plugins/external_plugin_tests/TestClassPathPlugin.sh JBR-5363 windows-all + +# jdk_swing + +javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945 macosx-all +javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184 windows-all +javax/swing/plaf/basic/BasicTableHeaderUI/6394566/bug6394566.java JBR-5846 windows-all +javax/swing/plaf/basic/BasicTextUI/8001470/bug8001470.java 8233177 linux-all,windows-all +javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java 8253184 linux-all,windows-all +javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-6464,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/plaf/nimbus/TestNimbusOverride.java 8253184,JBR-5829 windows-all,linux-all +javax/swing/plaf/windows/6921687/bug6921687.java 8253184 windows-all +javax/swing/plaf/windows/WindowsRootPaneUI/WrongAltProcessing/WrongAltProcessing.java JBR-4372 windows-all + +javax/swing/Box/TestBoxFiller.java JBR-5210 windows-all +javax/swing/DefaultButtonModel/DefaultButtonModelCrashTest.java JBR-5210,JBR-5799 windows-all +javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-5210 windows-all +javax/swing/JButton/4368790/bug4368790.java JBR-5210 windows-all +javax/swing/JButton/4659800/SpaceKeyActivatesButton.java JBR-4949 linux-all,windows-all +javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JButton/PressedButtonRightClickTest.java JBR-5210 windows-all +javax/swing/JColorChooser/Test6524757.java JBR-5210 windows-all +javax/swing/JColorChooser/Test6827032.java JBR-5210 windows-all +javax/swing/JComboBox/4743225/bug4743225.java JBR-5210 windows-all +javax/swing/JComboBox/6236162/bug6236162.java JBR-5210 windows-all +javax/swing/JComboBox/6406264/bug6406264.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JComboBox/6607130/bug6607130.java JBR-5799 windows-x64 +javax/swing/JComboBox/bug4890345.java JBR-5799 windows-all +javax/swing/JComboBox/bug4924758.java JBR-5846 windows-all +javax/swing/JComboBox/bug5029504.java JBR-5799 windows-all +javax/swing/JComboBox/ConsumedKeyTest/ConsumedKeyTest.java JBR-5210 windows-all +javax/swing/JComponent/6683775/bug6683775.java 8172337 generic-all +javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949 linux-all,windows-all +javax/swing/JLabel/6596966/bug6596966.java 8197552 windows-all +javax/swing/JLabel/7004134/bug7004134.java JBR-5437 linux-all +javax/swing/JMenu/4515762/bug4515762.java 8197552 windows-all +javax/swing/JMenu/4692443/bug4692443.java JBR-6093 windows-x64 +javax/swing/JMenu/6470128/bug6470128.java 8253184,JBR-6307 windows-all,linux-all +javax/swing/JMenu/6538132/bug6538132.java JBR-894 windows-all +javax/swing/JMenu/8072900/WrongSelectionOnMouseOver.java JBR-5799,JBR-6306 windows-all,linux-all +javax/swing/JMenu/PopupReferenceMemoryLeak.java JBR-5890,JBR-6056 windows-aarch64,windows-x64 +javax/swing/JMenuBar/4750590/bug4750590.java 8197552,JBR-6094 windows-all,windows-x64 +javax/swing/JMenuItem/4171437/bug4171437.java 8197552,JBR-6112 windows-all,windows-x64 +javax/swing/JMenuItem/4654927/bug4654927.java JBR-164,JBR-4337 windows-all,linux-all +javax/swing/JMenuItem/6209975/bug6209975.java 8253184 windows-all +javax/swing/JMenuItem/8158566/CloseOnMouseClickPropertyTest.java JBR-5510,JBR-5545 linux-all,windows-all +javax/swing/JMenuItem/bug4839464.java JBR-5911 windows-all +javax/swing/JMenuItem/6249972/bug6249972.java 8197552 windows-all +javax/swing/JOptionPane/7138665/bug7138665.java JBR-5799 windows-all +javax/swing/JOptionPane/8081019/bug8081019.java JBR-5767 windows-all +javax/swing/JPopupMenu/6415145/bug6415145.java 8197552 windows-all +javax/swing/JPopupMenu/6495920/bug6495920.java JBR-6928 linux-all +javax/swing/JPopupMenu/6515446/bug6515446.java 8197552,JBR-6531 windows-all,linux-all +javax/swing/JPopupMenu/6544309/bug6544309.java JBR-6532 windows-all,linux-all +javax/swing/JRadioButton/8033699/bug8033699.java 8197552 windows-all +javax/swing/JRadioButton/8075609/bug8075609.java 8197552,8266085,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JRadioButton/ButtonGroupFocus/ButtonGroupFocusTest.java 8197552,8266085 windows-all +javax/swing/JRadioButton/FocusTraversal/FocusTraversal.java 8266085 windows-all +javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java 8233582 linux-all +javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582 linux-all +javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128,8253184,JBR-5510,JBR-6515 macosx-all,windows-all,linux-5.18.2-arch1-1,linux-all +javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450,8253184 macosx-all,windows-all +javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627,8253184 macosx-all,windows-all +javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentWindowClickSwing.java 8253184 windows-all +# The next test below is an intermittent failure +javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 linux-all +javax/swing/JTree/4330357/bug4330357.java 8253184,JBR-6466 windows-all,linux-all +javax/swing/JTree/4633594/JTreeFocusTest.java 7105441,JBR-5210 macosx-all,windows-all +javax/swing/JTree/4908142/bug4908142.java 8197552,JBR-5846,JBR-151 windows-all +javax/swing/AbstractButton/6711682/bug6711682.java 8060765 windows-all,macosx-all,linux-5.15.0-39-generic,linux-5.15.0-33-generic,linux-5.19.0-1025-aws +javax/swing/Action/8133039/bug8133039.java JBR-5210 windows-all +javax/swing/ButtonGroup/TestButtonGroupFocusTraversal.java JBR-5210 windows-all +javax/swing/event/RightAltKeyTest.java JBR-5210 windows-all +javax/swing/JButton/4659800/EnterKeyActivatesButton.java JBR-5210 windows-all +javax/swing/JColorChooser/Test6541987.java JBR-5210 windows-all +javax/swing/JColorChooser/Test7194184.java JBR-5210 windows-all +javax/swing/JColorChooser/Test8051548.java JBR-5210 windows-all +javax/swing/JComboBox/DisabledComboBoxFontTestAuto.java 8310072 linux-all,windows-all +javax/swing/JEditorPane/bug4714674.java JBR-5810 windows-all +javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest_i18n.java JBR-912 windows-all +javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.java JBR-912 windows-all +javax/swing/JFileChooser/4524490/bug4524490.java JBR-5846 windows-all +javax/swing/JFileChooser/8021253/bug8021253.java JBR-107 windows-all +javax/swing/JFileChooser/8041694/bug8041694.java JBR-5210 windows-all +javax/swing/JFileChooser/6396844/TwentyThousandTest.java 8198003 generic-all +javax/swing/JFileChooser/6570445/bug6570445.java JBR-5767 windows-all +javax/swing/JFileChooser/6738668/bug6738668.java JBR-5767 windows-all +javax/swing/JFileChooser/7036025/bug7036025.java JBR-5767 windows-all +javax/swing/JFileChooser/8062561/bug8062561.java JBR-5767,JBR-5808 windows-all +javax/swing/JFileChooser/8194044/FileSystemRootTest.java 8305413,JBR-5767 windows-aarch64,windows-all +javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesSecurityManagerTest.java JBR-5767 windows-all +javax/swing/JFrame/8016356/bug8016356.java JBR-108 windows-all +javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8274106,JBR-5510 macosx-aarch64,linux-5.18.2-arch1-1 +javax/swing/JPopupMenu/6675802/bug6675802.java JBR-5767 windows-all +javax/swing/JPopupMenu/6800513/bug6800513.java 7184956,JBR-6533 macosx-all,linux-all,windows-all +javax/swing/JScrollBar/4708809/bug4708809.java 8169957 windows-x64 +javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java 8197552 windows-all +javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5510 macosx-all,linux-5.18.2-arch1-1 +javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5932 linux-all +javax/swing/JTabbedPane/8007563/Test8007563.java 8051591 generic-all +javax/swing/JTabbedPane/4624207/bug4624207.java 8064922,8197552,JBR-6235 macosx-all,windows-all,linux-all 8064922:macosx-all, 8197552:windows-all +javax/swing/JTabbedPane/TestBackgroundScrollPolicy.java 8253184,windows-all +javax/swing/JToggleButton/TestSelectedKey.java JBR-5846 windows-all +javax/swing/JToolBar/4529206/bug4529206.java JBR-5387 linux-all +javax/swing/JToolTip/6219960/bug6219960.java 8253184 windows-all +javax/swing/SwingUtilities/TestBadBreak/TestBadBreak.java 8160720 generic-all +javax/swing/text/AbstractDocument/8190763/TestCCEOnEditEvent.java JBR-5799 windows-all +javax/swing/text/DefaultCaret/HidingSelection/HidingSelectionTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/text/TableView/TableViewLayoutTest.java 8194936,JBR-4316,JBR-5510 linux-5.18.2-arch1-1,linux-all +javax/swing/JFileChooser/6798062/bug6798062.java 8146446 windows-all +javax/swing/JComboBox/4515752/DefaultButtonTest.java JBR-5799 windows-all +javax/swing/JComboBox/4523758/bug4523758.java 8253184 windows-all +javax/swing/JComboBox/8032878/bug8032878.java JBR-5210 windows-all +javax/swing/JComboBox/8057893/bug8057893.java JBR-6751 windows-all +javax/swing/JComboBox/8072767/bug8072767.java JBR-5540 windows-all +javax/swing/JComboBox/8182031/ComboPopupTest.java 8253184 windows-all +javax/swing/JInternalFrame/6288609/TestJInternalFrameDispose.java JBR-788 windows-all,linux-all +javax/swing/JInternalFrame/6647340/bug6647340.java 8253184 windows-all +javax/swing/JInternalFrame/8145060/TestJInternalFrameMinimize.java JBR-788 windows-all,linux-all +javax/swing/JInternalFrame/8145896/TestJInternalFrameMaximize.java JBR-5539 windows-all +javax/swing/JInternalFrame/Test6325652.java JBR-6111 windows-all +javax/swing/JInternalFrame/Test6505027.java JBR-5954 linux-all,osx-all +javax/swing/JInternalFrame/Test6802868.java 8253184 windows-all +javax/swing/JPopupMenu/4634626/bug4634626.java 8253184 windows-all +javax/swing/JPopupMenu/4760494/bug4760494.java 8253184 windows-all +javax/swing/JPopupMenu/4870644/bug4870644.java 8194130 macosx-all,linux-all +javax/swing/JPopupMenu/4966112/bug4966112.java 8253184 windows-all +javax/swing/ProgressMonitor/ProgressMonitorEscapeKeyPress.java JBR-5210 windows-all +javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765,JBR-5210 macosx-all,linux-all,windows-all +javax/swing/JEditorPane/6917744/bug6917744.java 8213124 macosx-all +javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JRadioButton/4314194/bug4314194.java 8298153 linux-all +javax/swing/JRootPane/4670486/bug4670486.java JBR-6631 windows-all +javax/swing/JRootPane/DefaultButtonTest.java JBR-5739 windows-all,linux-all +javax/swing/text/html/HTMLEditorKit/5043626/bug5043626.java JBR-5210 windows-all +javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id0 JBR-5799 windows-all +javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 JBR-5779 linux-all +javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java 8253184,JBR-5510,JBR-803 windows-all,linux-5.18.2-arch1-1,linux-all +javax/swing/plaf/synth/SynthScrollbarThumbPainter/SynthScrollbarThumbPainterTest.java 8253184 windows-all +javax/swing/plaf/synth/Test8043627.java JBR-5767 windows-all +javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JInternalFrame/8020708/bug8020708.java JBR-4879 windows-all +javax/swing/JInternalFrame/8069348/bug8069348.java 8253184,JBR-900 macosx-aarch64,windows-all +javax/swing/text/DefaultEditorKit/4278839/bug4278839.java CODETOOLS-7901623 windows-all +javax/swing/text/GlyphPainter2/6427244/bug6427244.java JBR-896,JBR-6760 windows-all,linux-i386 +javax/swing/text/JTextComponent/5074573/bug5074573.java CODETOOLS-7901623,JBR-5386 windows-all,linux-all +javax/swing/text/JTextComponent/6361367/bug6361367.java JBR-5210 windows-all +javax/swing/text/View/8014863/bug8014863.java JBR-5541 windows-all +javax/swing/text/View/8156217/FPMethodCalledTest.java JBR-5541 linux-all +javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952 windows-x64 +javax/swing/UIDefaults/6795356/TableTest.java JBR-5767 windows-all +java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5802 windows-all +java/awt/ColorClass/AlphaColorTest.java JBR-5510 linux-5.18.2-arch1-1 + +sanity/client/SwingSet/src/ToolTipDemoTest.java 8293001 linux-all +sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-5510 windows-all,macosx-all,linux-5.18.2-arch1-1 +sanity/client/SwingSet/src/ColorChooserDemoTest.java 8278582,8273312,JBR-5510 windows-all,linux-5.18.2-arch1-1 +sanity/client/SwingSet/src/DialogDemoTest.java 8253184 windows-all +sanity/client/SwingSet/src/FrameDemoTest.java 8253184 windows-all +sanity/client/SwingSet/src/InternalFrameDemoTest.java 8253184 windows-all +sanity/client/SwingSet/src/GridBagLayoutDemoTest.java 8253184 windows-all +sanity/client/SwingSet/src/TextFieldDemoTest.java JBR-5061 linux-all Ubuntu-22.04 +sanity/client/SwingSet/src/SliderDemoTest.java 8253184 windows-all +sanity/client/SwingSet/src/SpinnerDemoTest.java 8253184 windows-all +sanity/client/SwingSet/src/SplitPaneDemoTest.java JBR-5817 linux-all +sanity/client/SwingSet/src/SwingSet2DemoTest.java 8253184 windows-all + +############################################################################ + +# jdk_text + +############################################################################ + +# jdk_time + + +############################################################################ + +# core_tools + +tools/jlink/JLinkReproducible3Test.java 8253688 linux-aarch64 + +############################################################################ + +# jdk_jdi + +com/sun/jdi/RepStep.java 8043571 generic-all + +com/sun/jdi/InvokeHangTest.java 8218463 linux-all + +############################################################################ + +# jdk_time + +############################################################################ + +# jdk_util + +java/util/Locale/LocaleProvidersRun.java 8268379 macosx-x64 +sun/util/locale/provider/CalendarDataRegression.java 8268379 macosx-x64 +java/util/concurrent/forkjoin/AsyncShutdownNow.java 8286352 linux-all,windows-x64 + +############################################################################ + +# jdk_instrument + +############################################################################ + +# svc_tools + +sun/tools/jhsdb/HeapDumpTest.java 8269881 windows-all +sun/tools/jstatd/TestJstatdRmiPort.java 8251259,8293577 windows-all,generic-all + +sun/tools/jstat/jstatLineCounts1.sh 8268211 linux-aarch64 +sun/tools/jstat/jstatLineCounts2.sh 8268211 linux-aarch64 +sun/tools/jstat/jstatLineCounts3.sh 8268211 linux-aarch64 +sun/tools/jstat/jstatLineCounts4.sh 8268211 linux-aarch64 + +############################################################################ + +# jdk_other + +jdk/incubator/vector/ShortMaxVectorTests.java 8306592 generic-i586 +jdk/incubator/vector/LoadJsvmlTest.java 8305390 windows-x64 + +############################################################################ + +# jdk_jfr + +jdk/jfr/event/compiler/TestCodeSweeper.java 8225209 generic-all +jdk/jfr/startupargs/TestStartName.java 8214685 windows-x64 +jdk/jfr/startupargs/TestStartDuration.java 8214685 windows-x64 +jdk/jfr/jvm/TestWaste.java 8282427 generic-all +jdk/jfr/api/consumer/recordingstream/TestOnEvent.java 8255404 linux-x64 + +############################################################################ + +# jdk_internal + +jdk/internal/platform/docker/TestDockerBasic.java JBR-5220 linux-aarch64 +jdk/internal/platform/docker/TestDockerCpuMetrics.java JBR-5334 linux-aarch64 +jdk/internal/platform/docker/TestDockerMemoryMetrics.java JBR-5220 linux-aarch64 +jdk/internal/platform/docker/TestGetFreeSwapSpaceSize.java JBR-5220 linux-aarch64 +jdk/internal/platform/docker/TestPidsLimit.java JBR-5334,8311539 linux-aarch64,5.19.0-1026-aws +jdk/internal/platform/docker/TestUseContainerSupport.java JBR-5334 linux-aarch64 + +############################################################################ + +# jdk_jpackage + +############################################################################ + +demo/jfc/J2Ddemo/J2DdemoTest.java 8213118 generic-all + +# Client manual tests + +java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter_1.java 7131438,8022539 generic-all +java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter_2.java 7131438,8022539 generic-all +java/awt/Modal/WsDisabledStyle/CloseBlocker/CloseBlocker.java 7187741 linux-all,macosx-all +java/awt/xembed/server/TestXEmbedServerJava.java 8001150,8004031 generic-all +javax/swing/JFileChooser/6698013/bug6698013.java 8024419 macosx-all +javax/swing/JColorChooser/8065098/bug8065098.java 8065647 macosx-all +java/awt/Modal/PrintDialogsTest/PrintDialogsTest.java 8068378 generic-all +java/awt/dnd/DnDFileGroupDescriptor/DnDFileGroupDescriptor.html 8080185 macosx-all,linux-all +javax/swing/JTabbedPane/4666224/bug4666224.html 8144124 macosx-all +javax/swing/JTextArea/7049024/bug7049024.java JBR-5836 linux-all +javax/swing/JTextArea/8149849/DNDTextToScaledArea.java 8253184 windows-all +java/awt/event/MouseEvent/AltGraphModifierTest/AltGraphModifierTest.java 8162380,JBR-4207 generic-all,windows-all +java/awt/image/VolatileImage/VolatileImageConfigurationTest.java 8171069 macosx-all,linux-all +java/awt/Modal/InvisibleParentTest/InvisibleParentTest.java 8172245 linux-all +java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184 windows-all +java/awt/print/Dialog/RestoreActiveWindowTest/RestoreActiveWindowTest.java 8185429 macosx-all +java/awt/TrayIcon/DblClickActionEventTest/DblClickActionEventTest.html 8203867 macosx-all +java/awt/Frame/FrameStateTest/FrameStateTest.html 8203920 macosx-all,linux-all +javax/swing/SwingUtilities/TestTextPosInPrint.java 8227025 windows-all +java/awt/print/PrinterJob/ScaledText/ScaledText.java 8231226 macosx-all +java/awt/font/ComplexEmoji.java JBR-5009 linux-aarch64 +java/awt/font/OutlineTextRendererEmoji.java JBR-5009 linux-aarch64 +java/awt/font/EmojiVariation.java JBR-5009,JBR-5510 linux-aarch64,linux-5.18.2-arch1-1 +java/awt/font/TextLayout/TestJustification.html 8250791 macosx-all +java/awt/font/TextLayout/TestSinhalaChar.java JBR-5103 generic-all +javax/swing/JTableHeader/6889007/bug6889007.java 8253184,JBR-5387 windows-all,linux-all +javax/swing/JTextField/8036819/bug8036819.java JBR-6113 windows-x64 +javax/swing/JTree/4927934/bug4927934.java JBR-6114 windows-x64 +java/awt/TrayIcon/DragEventSource/DragEventSource.java 8252242 macosx-all +java/awt/FileDialog/DefaultFocusOwner/DefaultFocusOwner.java 7187728 macosx-all,linux-all +java/awt/FileDialog/RegexpFilterTest/RegexpFilterTest.html 7187728 macosx-all,linux-all +java/awt/print/PageFormat/Orient.java 8016055 macosx-all +java/awt/TextArea/OverScrollTest/OverScrollTest.java 8253184 windows-all +java/awt/TextArea/ScrollbarIntersectionTest/ScrollbarIntersectionTest.java 8253184 windows-all +java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java JBR-5439 linux-all +java/awt/TextArea/TextAreaCursorTest/HoveringAndDraggingTest.java 8024986 macosx-all,linux-all +java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java 8253184 windows-all +java/awt/TextField/OverScrollTest/OverScrollTest.java 8253184 windows-all +java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter.java 8254841 macosx-all +java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java 8256289 windows-all +java/awt/Focus/RemoveAfterRequest/RemoveAfterRequest.java JBR-6052 macosx-all,linux-all +java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java 8258103,8253184 linux-all,windows-all + +com/sun/jndi/dns/ConfigTests/Timeout.java 8220213 generic-all + +############################################################################ + +# various Windows are created spontaneously during test execution + +javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955 windows-all + +# no printer found +java/awt/print/PrinterJob/CheckPrivilege.java JBR-893 generic-all +java/awt/print/PrinterJob/ExceptionTest.java nobug generic-all +java/awt/print/PrinterJob/ExceptionFromPrintableIsIgnoredTest.java nobug generic-all +java/awt/print/PrinterJob/ImagePrinting/NullClipARGB.java nobug generic-all +java/awt/print/PrinterJob/LandscapeStackOverflow.java JBR-893 generic-all +java/awt/print/PrinterJob/Margins.java JBR-893 generic-all +java/awt/print/PrinterJob/PaintText.java JBR-893 generic-all +java/awt/print/PrinterJob/PrintCrashTest.java nobug generic-all +java/awt/print/PrinterJob/PrtException.java nobug generic-all +java/awt/PrintJob/PrinterException.java nobug generic-all +java/awt/PrintJob/Security/SecurityDialogTest.java JBR-5225 windows-all +javax/print/attribute/ChromaticityValues.java nobug generic-all +javax/print/CheckDupFlavor.java nobug generic-all +javax/print/PrintSE/PrintSE.sh nobug generic-all +javax/print/PrintSEUmlauts/PrintSEUmlauts.java 8135174 generic-all +javax/print/PrintServiceLookup/CountPrintServices.java nobug generic-all +javax/print/attribute/AttributeTest.java nobug generic-all +javax/print/attribute/GetCopiesSupported.java nobug generic-all +javax/print/attribute/SidesPageRangesTest.java nobug generic-all +javax/print/attribute/SupportedPrintableAreas.java nobug generic-all + +java/awt/dnd/DragInterceptorAppletTest/DragInterceptorAppletTest.java JBR-890 generic-all +java/awt/dnd/NoFormatsCrashTest/NoFormatsCrashTest.java JBR-1011 generic-all +java/awt/dnd/NoFormatsDropTest/NoFormatsDropTest.java JBR-5912 windows-all +java/awt/dnd/FileListBetweenJVMsTest/FileListBetweenJVMsTest.java JBR-1011 generic-all + +com/sun/java/swing/plaf/windows/Test8173145.java JBR-4197 windows-all +com/sun/java/swing/plaf/windows/AltFocusIssueTest.java JBR-4197 windows-all + +jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java JBR-5392 windows-aarch64 +jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh JBR-4078 linux-all +jb/java/awt/Font/Font467.java JBR-3960 generic-all +jb/java/awt/keyboard/AltGrMustGenerateAltGrModifierTest4207.java JBR-4207 windows-all +jb/java/awt/Toolkit/AWTThreadingTest.java JBR-4350 macosx-all +jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java JBR-4896,JBR-5163 macosx-all, + +java/awt/Dialog/NonResizableDialogSysMenuResize/NonResizableDialogSysMenuResize.java JBR-4250 windows-all +java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java JBR-4250 windows-all + +javax/swing/SwingUtilities/4917669/bug4917669.java JBR-4677 windows-all +javax/swing/SwingUtilities/7088744/bug7088744.java JBR-4677 windows-all +javax/swing/SwingUtilities/7146377/bug7146377.java JBR-4679 windows-all + +java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880 windows-all +java/awt/event/KeyEvent/DeadKey/DeadKeySystemAssertionDialog.java JBR-4880,JBR-5706 windows-all,linux-all +java/awt/event/KeyEvent/KeyCharTest/KeyCharTest.java JBR-4880 windows-all +java/awt/Frame/LayoutOnMaximizeTest/LayoutOnMaximizeTest.java JBR-4880 windows-all +java/awt/Frame/MiscUndecorated/UndecoratedInitiallyIconified.java JBR-4880 windows-all +java/awt/FullScreen/SetFSWindow/FSFrame.java 8253184 windows-all +java/awt/grab/MenuDragEvents/MenuDragEvents.java JBR-4880 windows-all +java/awt/image/mlib/MlibOpsTest.java JBR-5225 windows-all +java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 +java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880 windows-all +javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880 windows-all +javax/swing/JSlider/6348946/bug6348946.java 8197552,JBR-5387 windows-all,linux-all +javax/swing/JSpinner/4973721/bug4973721.java JBR-4880 windows-all +javax/swing/JSpinner/5012888/bug5012888.java JBR-4880,8169958 windows-all,linux-all +javax/swing/JSpinner/8223788/JSpinnerButtonFocusTest.java JBR-5210 windows-all +javax/swing/JSpinner/JSpinnerFocusTest.java JBR-5288 windows-all +javax/swing/JSpinner/SpinnerTest.java JBR-4880 windows-all +javax/swing/JSpinner/TestJSpinnerFocusLost.java JBR-5210 windows-all +javax/swing/JTable/7068740/bug7068740.java 8197552 windows-all +javax/swing/JTable/8236907/LastVisibleRow.java JBR-6066 macosx-aarch64 +javax/swing/JTable/JTableOrientationNavTest/JTableOrientationNavTest.java JBR-6836 linux-all +javax/swing/text/AbstractDocument/6968363/Test6968363.java JBR-4880,JBR-6760 windows-all,linux-i386 + +javax/swing/text/FlowView/LayoutTest.java JBR-4880 windows-all +javax/swing/text/html/7189299/bug7189299.java JBR-4880 windows-all +jb/java/jcef/HandleJSQueryTest3314.sh JBR-4866 linux-all + +jb/sun/awt/macos/InputMethodTest/FocusMoveUncommitedCharactersTest.java JBR-5765 macosx-all +jb/sun/awt/macos/InputMethodTest/PinyinCapsLockTest.java JBR-5282 macosx-all +jb/sun/awt/macos/KeyPressAndHoldTest.java JBR-4901 macosx-all +jb/sun/awt/macos/NationalLayoutTest/Layout_ABC.java JBR-4933 macosx-all +jb/sun/awt/macos/NationalLayoutTest/Layout_FRENCH_PC.java JBR-4933 macosx-all +jb/sun/awt/macos/NationalLayoutTest/Layout_GERMAN.java JBR-4933 macosx-all +jb/sun/awt/macos/NationalLayoutTest/Layout_SPANISH_ISO.java JBR-4933 macosx-all +jb/sun/awt/macos/NationalLayoutTest/Layout_US_INTERNATIONAL_PC.java JBR-4933 macosx-all + +jb/sun/lwawt/macosx/NSEvent/nsevent422.sh JBR-5333 macosx-all + +jb/javax/swing/JComboBox/ComboBoxTransparentTittleBarTest.java JBR-5432,JBR-4875 windows-all,macosx-all +jb/javax/swing/JDialog/JDialog186.java JBR-5210 windows-all +jb/javax/swing/JDialog/JDialog392.java JBR-4941 macosx-all,linux-all +jb/javax/swing/JDialog/JDialog705.java JBR-4934 generic-all +jb/javax/swing/JEditorPane/ZeroMargin.java JBR-2256 generic-all + +jb/java/awt/Window/ModalDialogAndPopup.java JBR-4984 macosx-all +jb/java/awt/Window/ZOrderOnModalDialogActivation.java JBR-5714 windows-all +jb/java/api/frontend/CustomTitleBarDoubleClick.java JBR-4912 windows-all + +jb/java/jcef/MouseEventTest.java JBR-4908 linux-all + +jb/java/lang/System/SetEnv394.java JBR-2988 generic-aarch64 + +java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java JBR-5510,8310487 linux-5.18.2-arch1-1,linux-all +java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5510,JBR-5905 linux-5.18.2-arch1-1,linux-all +java/awt/Choice/SelectNewItemTest/SelectNewItemTest.java 8315733 macosx-all +java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Mixing/AWT_Mixing/JInternalFrameOverlapping.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Mixing/LWPopupMenu.java JBR-824 generic-all +java/awt/Mixing/OpaqueTest.java JBR-5707 linux-all +java/awt/Mixing/OverlappingButtons.java JBR-5707 linux-all +java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JComponent/7154030/bug7154030.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JRadioButton/8041561/bug8041561.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/Popup/TaskbarPositionTest.java 8310689 windows-all,macosx-all +javax/swing/PopupFactory/6276087/NonOpaquePopupMenuTest.java 8298124,JBR-5949 macosx-all,linux-all,windows-all +javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-6465 windows-all +javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5510,JBR-5951 linux-5.18.2-arch1-1,windows-x64 +jb/java/awt/CustomTitleBar/ActionListenerTest.java JBR-5819 macosx-all,windows-all +jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java JBR-5345 windows-x64 +jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-5345 windows-x64 +jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java JBR-5345 windows-x64 +jb/java/awt/CustomTitleBar/HitTestNonClientArea.java JBR-5465,JBR-5550 windows-all +jb/java/awt/CustomTitleBar/MaximizeWindowTest.java JBR-5465,JBR-5550 windows-all +jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java JBR-5828 windows-all +jb/java/awt/CustomTitleBar/MinimizingWindowTest.java JBR-5345 windows-x64 +jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java JBR-6914 windows-all +jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java JBR-5345 windows-x64 +jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java JBR-5345 windows-x64 +jb/java/awt/CustomTitleBar/WindowResizeTest.java JBR-5592 windows-all +sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5510 linux-5.18.2-arch1-1 +sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5510 linux-5.18.2-arch1-1 +sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-6513 windows-all,macosx-all,linux-all + +java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Insets/DialogInsets.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Menu/OpensWithNoGrab/OpensWithNoGrab.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-5510,JBR-6160 linux-5.18.2-arch1-1,linux-5.4.0-1103-aws +javax/swing/JMenu/JMenuSelectedColorTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JSpinner/4788637/bug4788637.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/LookAndFeel/8145547/DemandGTK2.sh JBR-5510,JBR-6908 linux-5.18.2-arch1-1,linux-i386 +javax/swing/LookAndFeel/8145547/DemandGTK3.sh JBR-5510,JBR-6908 linux-5.18.2-arch1-1,linux-i386 + +jb/java/awt/Focus/BrokenTraversalAWT.java JBR-5799 windows-all +jb/java/awt/Focus/ContextMenuAfterPopup.java JBR-5799 windows-all +jb/java/awt/Focus/FocusTraversalOrderTest.java JBR-6060 generic-all +jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-5799 windows-all + +com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Choice/ChoiceStaysOpenedOnTAB.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Graphics/XORPaint.java#id2 JBR-5510 linux-5.18.2-arch1-1 +java/awt/Robot/HiDPIScreenCapture/ScreenCaptureGtkTest.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Robot/NonEmptyErrorStream.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Toolkit/DesktopProperties/rfe4758438.java JBR-5510 linux-5.18.2-arch1-1 +java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765 macosx-all +javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JMenu/TestDisabledMenuForegroundColor.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JProgressBar/TestJProgressBarHighlightColor.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JSlider/TestJSliderRendering.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JTextPane/TestJTextPaneBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1 +javax/swing/JToolTip/TestTooltipBackgroundColor.java JBR-5510,JBR-6907 linux-5.18.2-arch1-1,linux-i386 +javax/swing/JTree/TestTreeBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1 +sun/java2d/ClassCastExceptionForInvalidSurface.java JBR-5510 linux-5.18.2-arch1-1 + +java/awt/font/DoubleAntialiasTest.java JBR-6760 linux-i386 +java/awt/Paint/RepaintOnAWTShutdown.java JBR-6760 linux-i386 +java/awt/Graphics2D/DrawString/RotTransText.java JBR-6760 linux-i386 +java/awt/Graphics2D/DrawString/DrawStrSuper.java JBR-6760 linux-i386 +java/awt/FontClass/NaNTransform.java JBR-6760 linux-i386 +java/awt/FontClass/NonInvertibleTransformTextTest.java JBR-6760 linux-i386 +java/awt/font/Rotate/RotatedItalicsTest.java JBR-6760 linux-i386 +java/awt/font/Rotate/RotatedFontTest.java JBR-6760 linux-i386 +java/awt/font/Outline/OutlineInvarianceTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/TextLayoutEqualsTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/FontLayoutStressTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/StyledFontLayoutTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/UnderlinePositionTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/DecorationBoundsTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/HitTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/VisibleAdvance.java JBR-6760 linux-i386 +java/awt/font/TextLayout/TestGetPixelBounds.java JBR-6760 linux-i386 +java/awt/font/TextLayout/MissingCodePointLayoutTest.java JBR-6760 linux-i386 +java/awt/font/TextLayout/ArabicDiacriticTest.java JBR-6760 linux-i386 +java/awt/font/GlyphVector/TestLayoutFlags.java JBR-6760 linux-i386 +java/awt/font/GlyphVector/GetGlyphCharIndexTest.java JBR-6760 linux-i386 +java/awt/font/LineBreakMeasurer/FRCTest.java JBR-6760 linux-i386 +java/awt/font/LineBreakMeasurer/AllFontsLBM.java JBR-6760 linux-i386 +java/awt/font/LineBreakMeasurer/TestLineBreakWithFontSub.java JBR-6760 linux-i386 +java/awt/font/LineBreakMeasurer/LineBreakWithTrackingAuto.java JBR-6760 linux-i386 + +javax/swing/JTextArea/JTextAreaOrientationTest.java JBR-6760 linux-i386 +javax/swing/JTextArea/TextViewOOM/TextViewOOM.java JBR-6760 linux-i386 +javax/swing/tree/DefaultTreeCellEditor/bug4480602.java JBR-6760 linux-i386 +javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-6760 linux-i386 +javax/swing/JSpinner/8008657/bug8008657.java JBR-6760 linux-i386 +javax/swing/JSpinner/6532833/bug6532833.java JBR-6760 linux-i386 +javax/swing/JFileChooser/FCPopupMenuOrientationTest.java JBR-6760 linux-i386 +javax/swing/Headless/HeadlessJColorChooser.java JBR-6760 linux-i386 +javax/swing/Headless/HeadlessJTextArea.java JBR-6760 linux-i386 +javax/swing/Headless/HeadlessJSpinner.java JBR-6760 linux-i386 +javax/swing/Headless/HeadlessJTextField.java JBR-6760 linux-i386 +javax/swing/Headless/HeadlessJEditorPane.java JBR-6760 linux-i386 +javax/swing/text/html/parser/Parser/6836089/bug6836089.java JBR-6760 linux-i386 +javax/swing/text/DevanagariEditor.java JBR-6760 linux-i386 +javax/swing/JLabel/6501991/bug6501991.java JBR-6760 linux-i386 +javax/swing/JTextField/bug4300552.java JBR-6760 linux-i386 +javax/swing/JTextField/SwingUnicodeTest.java JBR-6760 linux-i386 +javax/swing/JTextField/I18NViewNoWrapMinSpan/I18NViewNoWrapMinSpan.java JBR-6760 linux-i386 +javax/swing/JComponent/4337267/bug4337267.java JBR-6760 linux-i386 \ No newline at end of file diff --git a/test/jdk/jbScale2ProblemList.txt b/test/jdk/jbScale2ProblemList.txt new file mode 100644 index 000000000000..6d053c51f061 --- /dev/null +++ b/test/jdk/jbScale2ProblemList.txt @@ -0,0 +1,104 @@ +java/awt/Dialog/DialogLocationTest.java JBR-6090 windows-all +java/awt/datatransfer/DragUnicodeBetweenJVMTest/DragUnicodeBetweenJVMTest.java JBR-5538 windows-all +java/awt/datatransfer/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java JBR-6027 windows-all +java/awt/dnd/DnDAWTLockTest.java JBR-6442 linux-all +java/awt/dnd/DragOverDropTargetPerformanceTest.java JBR-5799 windows-all +java/awt/dnd/DragSourceGCrashTest.java JBR-6442 linux-all +java/awt/dnd/DropActionChangeTest.java JBR-6489,JBR-5799 generic-all +java/awt/dnd/ImageTransferTest/ImageTransferTest.java JBR-6442 linux-all +java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.java JBR-6442 linux-all +java/awt/dnd/MozillaDnDTest.java JBR-6442 linux-all +java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-6292 windows-all +java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java JBR-6292 windows-all +java/awt/event/MouseEvent/FrameMouseEventAbsoluteCoordsTest/FrameMouseEventAbsoluteCoordsTest.java 8238720,JBR-6095 windows-all,linux-all +java/awt/event/MouseEvent/MouseEnterExitTest.java JBR-7113 linux-all +java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479,JBR-6090 generic-all +java/awt/Focus/6378278/InputVerifierTest.java JBR-5799,JBR-6090 windows-all +java/awt/Focus/6382144/EndlessLoopTest.java JBR-6090 windows-all +java/awt/Focus/8282640/ScrollPaneFocusBugTest.java JBR-6090 windows-all +java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8252772,JBR-5799,JBR-6031 linux-all,windows-all +java/awt/Focus/ClearLwQueueBreakTest/ClearLwQueueBreakTest.java 8198618,JBR-814,JBR-6090 macosx-all,linux-all,windows-all +java/awt/Focus/LabelScrollBarFocus.java JBR-6090 windows-x64 +java/awt/Focus/ModalExcludedWindowClickTest/ModalExcludedWindowClickTest.java JBR-884,JBR-6090 windows-x64,linux-x64 +java/awt/Focus/MouseClickRequestFocusRaceTest/MouseClickRequestFocusRaceTest.java 8194753,JBR-6090 linux-all,macosx-all,windows-x64 +java/awt/Focus/NonFocusableBlockedOwnerTest/NonFocusableBlockedOwnerTest.java 7124275,JBR-5799 macosx-all,windows-all +java/awt/Focus/SimpleWindowActivationTest/SimpleWindowActivationTest.java JBR-6089 windows-all +java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java JBR-6090 windows-all +java/awt/Frame/DynamicLayout/DynamicLayout.java JBR-5799 windows-all +java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-6233 windows-x64 +java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-6090 windows-all +java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenSmall.java JBR-6090 windows-all +java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all +java/awt/Frame/SetMaximizedBounds/SetMaximizedBounds.java JBR-6090 windows-all +java/awt/Frame/WindowDragTest/WindowDragTest.java JBR-6090 windows-x64 +java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java 8238720,8324782,JBR-4199,JBR-6090 windows-all,macosx-all,linux-5.4.0-1083-aws,linux-5.4.0-1103-aws, +java/awt/GridLayout/ComponentPreferredSize/ComponentPreferredSize.java 8238720,8324782,JBR-4199,JBR-6090 windows-all,macosx-all,linux-5.4.0-1083-aws,linux-5.4.0-1103-aws, + +java/awt/Graphics/LineClipTest.java JBR-5071 linux-all +java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5071 linux-all +java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050,JBR-5071 windows-all,macosx-all,linux-all +java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510,JBR-6090 macosx-all,linux-5.18.2-arch1-1,windows-all +java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510,JBR-6090 linux-5.18.2-arch1-1,windows-all +java/awt/Mixing/LWPopupMenu.java JBR-824,JBR-6134 generic-all,windows-x64 +java/awt/Mixing/MixingOnDialog.java JBR-6134,JBR-6090 windows-x64,windows-all +java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-6134 windows-x64 +java/awt/Mixing/OpaqueTest.java JBR-5707,JBR-6090 linux-all,windows-all +java/awt/Mixing/OverlappingButtons.java JBR-5707,JBR-6090 linux-all,windows-all +java/awt/Mixing/Validating.java JBR-6090 windows-all +java/awt/Modal/BlockedMouseInputTest2.java JBR-6090 windows-all +java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-5071 windows-all,macosx-all,linux-all +java/awt/Window/TopLevelLocation/TopLevelLocation.java JBR-5799 windows-all +javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-6100 linux-all +javax/swing/JComponent/7154030/bug7154030.java JBR-6134 windows-x64 +javax/swing/JPopupMenu/6580930/bug6580930.java JBR-5071 linux-all + +sanity/client/SwingSet/src/ToolTipDemoTest.java 8293001,JBR-6293 linux-all,windows-all + +# +# the below tests are not intended to be executed in S2 configurations because +# the tests contains tags to be launched for various scales including S2 +# +java/awt/Graphics/XORPaint.java#id0 nobug generic-all +java/awt/Graphics2D/LargeWindowPaintTest.java#ZGenerational nobug generic-all +java/awt/Graphics2D/LargeWindowPaintTest.java#ZSinglege nobug generic-all +java/awt/Graphics2D/LargeWindowPaintTest.java#default nobug generic-all +java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java nobug generic-all +java/awt/Paint/PaintNativeOnUpdate.java nobug generic-all +java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java nobug generic-all +java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java nobug generic-all +javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java nobug generic-all +javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java nobug generic-all +javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java nobug generic-all +jb/java/awt/CustomTitleBar/ActionListenerTest.java nobug generic-all +jb/java/awt/CustomTitleBar/ChangeTitleBarHeightTest.java nobug generic-all +jb/java/awt/CustomTitleBar/CheckFullScreen.java nobug generic-all +jb/java/awt/CustomTitleBar/CreateTitleBarTest.java nobug generic-all +jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java nobug generic-all +jb/java/awt/CustomTitleBar/FrameNativeControlsMacOSTest.java nobug generic-all +jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java nobug generic-all +jb/java/awt/CustomTitleBar/HiddenNativeControlsTest.java nobug generic-all +jb/java/awt/CustomTitleBar/HitTestClientArea.java nobug generic-all +jb/java/awt/CustomTitleBar/HitTestNonClientArea.java nobug generic-all +jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java nobug generic-all +jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java nobug generic-all +jb/java/awt/CustomTitleBar/MaximizeWindowTest.java nobug generic-all +jb/java/awt/CustomTitleBar/MinimizingWindowTest.java nobug generic-all +jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java nobug generic-all +jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java nobug generic-all +jb/java/awt/CustomTitleBar/WindowResizeTest.java nobug generic-all +jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java nobug generic-all +jb/java/awt/CustomTitleBar/WindowVisibilityTest.java nobug generic-all + +java/awt/event/ComponentEvent/TextComponentTextEventTest.java JBR-6287 windows-all + +jb/java/awt/Focus/FileDialogClosing.java JBR-5799 windows-all +jb/java/awt/Focus/ModalDialogFromMenuTest.java JBR-5799 windows-all +jb/java/awt/Focus/ModalDialogOverSiblingTest.java JBR-5716 windows-all +jb/java/awt/Focus/PopupFromMenuTest.java JBR-5799 windows-all +jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all +jb/java/awt/Focus/RequestFocusInParent.java JBR-5715 windows-all +jb/java/awt/Focus/SecondLevelPopupTest.java JBR-6090 windows-all +jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java JBR-6486 macosx-all +jb/java/awt/Window/UndecoratedDialogInTransientsChain.java JBR-6090 windows-all +jb/java/awt/Window/ZOrderOnModalDialogActivation.java JBR-5713 windows-all +jdk/editpad/EditPadTest.java JBR-5712 windows-all diff --git a/test/jdk/jbWaylandProblemList.txt b/test/jdk/jbWaylandProblemList.txt new file mode 100644 index 000000000000..4f513d6f8812 --- /dev/null +++ b/test/jdk/jbWaylandProblemList.txt @@ -0,0 +1,3 @@ +# Fedora & ArchLinux (Wayland) & Ubuntu 21.04 +java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8279256 linux-all +javax/swing/JInternalFrame/bug5009724.java JBR-7087 linux-all \ No newline at end of file diff --git a/test/jdk/jbcommitProblemList.txt b/test/jdk/jbcommitProblemList.txt new file mode 100644 index 000000000000..8df57025176e --- /dev/null +++ b/test/jdk/jbcommitProblemList.txt @@ -0,0 +1,7 @@ +# cannotbe run against jbr which does not contain some jbrsdk's utilities required for test executions +javax/imageio/stream/StreamCloserLeak/run_test.sh nobug generic-all +javax/imageio/spi/AppletContextTest/BadPluginConfigurationTest.sh nobug generic-all + +javax/imageio/plugins/external_plugin_tests/TestClassPathPlugin.sh nobug generic-all # line 59: /opt/teamcity-agent/work/efb45cc305c2e813/jbr/Contents/Home/bin/jar: No such file or directory + +javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450 macosx-all,windows-all diff --git a/test/jdk/jbu/quality/text/BundledFontTest.java b/test/jdk/jbu/quality/text/BundledFontTest.java new file mode 100644 index 000000000000..adbccc1215dd --- /dev/null +++ b/test/jdk/jbu/quality/text/BundledFontTest.java @@ -0,0 +1,139 @@ +package quality.text; + +import org.junit.Assert; +import org.junit.Test; + +import java.awt.*; +import java.util.Locale; + +public class BundledFontTest { + /* Tests for the following font names: + "droid sans" + "droid sans bold" + "droid sans mono" + "droid sans mono slashed" + "droid sans mono dotted" + "droid serif" + "droid serif bold" + "fira code" + "fira code light" + "fira code medium" + "fira code retina" + "inconsolata" + "roboto light" + "roboto thin" + "source code pro" + "jetbrains mono" + */ + + @SuppressWarnings("SameParameterValue") + private void doTestFont(String name, int style) { + + Font f = new Font(name, style, 20); + String family = f.getFamily(Locale.ENGLISH); + + Assert.assertTrue(family.equalsIgnoreCase(name)); + } + + private void doTestFont(String name) + throws Exception { + doTestFont(name, Font.PLAIN); + } + + @Test + public void testDroidSans() throws Exception { + doTestFont("Droid Sans"); + } + + @Test + public void testDroidSansBold() throws Exception { + doTestFont("Droid Sans"); + doTestFont("Droid Sans", Font.BOLD); + } + + @Test + public void testDroidSansMono() throws Exception { + doTestFont("Droid Sans Mono"); + } + + @Test + public void testDroidSansMonoSlashed() throws Exception { + doTestFont("Droid Sans Mono Slashed"); + } + + @Test + public void testDroidSansMonoDotted() throws Exception { + doTestFont("Droid Sans Mono Dotted"); + } + + @Test + public void testDroidSerif() throws Exception { + doTestFont("Droid Serif"); + } + + @Test + public void testDroidSerifBold() throws Exception { + doTestFont("Droid Serif"); + doTestFont("Droid Serif", Font.BOLD); + } + + @Test + public void testDroidSerifItalic() throws Exception { + doTestFont("Droid Serif"); + doTestFont("Droid Serif", Font.ITALIC); + } + + @Test + public void testFiraCode() throws Exception { + doTestFont("Fira Code"); + } + + @Test + public void testFiraCodeLight() throws Exception { + doTestFont("Fira Code Light"); + } + + @Test + public void testFiraCodeMedium() throws Exception { + doTestFont("Fira Code Medium"); + } + + @Test + public void testInconsolata() throws Exception { + doTestFont("Inconsolata"); + } + + @Test + public void testRobotoLight() throws Exception { + doTestFont("Roboto Light"); + } + @Test + public void testRobotoThin() throws Exception { + doTestFont("Roboto Thin"); + } + + @Test + public void testSourceCodePro() throws Exception { + doTestFont("Source Code Pro"); + } + + @Test + public void testJetBrainsMono() throws Exception { + doTestFont("JetBrains Mono"); + } + + @Test + public void testJetBrainsMonoBold() throws Exception { + doTestFont("JetBrains Mono", Font.BOLD); + } + + @Test + public void testJetBrainsMonoItalic() throws Exception { + doTestFont("JetBrains Mono", Font.ITALIC); + } + + @Test + public void testJetBrainsMonoBoldItalic() throws Exception { + doTestFont("JetBrains Mono", Font.BOLD | Font.ITALIC); + } +} diff --git a/test/jdk/jbu/quality/text/TextMetricsTest.java b/test/jdk/jbu/quality/text/TextMetricsTest.java new file mode 100644 index 000000000000..7895dc61a4a2 --- /dev/null +++ b/test/jdk/jbu/quality/text/TextMetricsTest.java @@ -0,0 +1,141 @@ +/* + * Copyright 2017-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package quality.text; + +import org.junit.Assert; +import org.junit.Test; +import quality.util.RenderUtil; + +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.font.TextAttribute; +import java.awt.font.TextLayout; +import java.awt.geom.AffineTransform; +import java.awt.geom.Path2D; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.Map; + +public class TextMetricsTest { + + @Test + public void testTextBounds() throws Exception { + final Font font = new Font("Menlo", Font.PLAIN, 22); + + BufferedImage bi = RenderUtil.capture(120, 120, + g2 -> { + String s = "A"; + String s1 = "q"; + + g2.setFont(font); + + FontRenderContext frc = g2.getFontRenderContext(); + Rectangle2D bnd = font.getStringBounds(s, frc); + TextLayout textLayout = new TextLayout(s, font, frc); + Rectangle2D bnd1 = textLayout.getBounds(); + GlyphVector gv = font.createGlyphVector(frc, s); + Rectangle2D bnd2 = gv.getGlyphVisualBounds(0).getBounds2D(); + textLayout = new TextLayout(s1, font, frc); + Rectangle2D bnd3 = textLayout.getBounds(); + + + g2.drawString(s, 5, 50); + g2.draw(new Path2D.Double(bnd, + AffineTransform.getTranslateInstance(5, 50 ))); + + g2.drawString(s, 30, 50); + g2.draw(new Path2D.Double(bnd1, + AffineTransform.getTranslateInstance(30, 50 ))); + + g2.drawString(s, 50, 50); + g2.draw(new Path2D.Double(bnd2, + AffineTransform.getTranslateInstance(50, 50 ))); + + g2.drawString(s1, 75, 50); + g2.draw(new Path2D.Double(bnd3, + AffineTransform.getTranslateInstance(75, 50 ))); + }); + + RenderUtil.checkImage(bi, "text", "bndtext.png"); + + } + + @Test + public void testSpaceTextBounds() { + final Font font = new Font("Menlo", Font.PLAIN, 22); + + GlyphVector gv = font.createGlyphVector( + new FontRenderContext(null, false, false), " "); + Rectangle2D bnd = gv.getGlyphVisualBounds(0).getBounds2D(); + + Assert.assertTrue(bnd.getX() == 0.0 && bnd.getY() == 0.0 && + bnd.getWidth() == 0.0 && bnd.getHeight() == 0.0); + } + + private static void checkStringWidth(Font font, FontRenderContext frc, String str) { + float width = (float) font.getStringBounds(str.toCharArray(), 0, str.length(), frc).getWidth(); + float standard = new TextLayout(str, font, frc).getAdvance(); + Assert.assertTrue(Math.abs(width - standard) < 0.1f); + } + + private static void checkCalculationStringWidth(Font font, String text) { + AffineTransform affineTransform = new AffineTransform(); + Map attributes = null; + FontRenderContext frc = new FontRenderContext(affineTransform, true, true); + FontRenderContext baseFrc = new FontRenderContext(new AffineTransform(), true, true); + + checkStringWidth(font, frc, text); + checkStringWidth(font.deriveFont(affineTransform), frc, text); + + affineTransform.translate(0.5f, 0.0f); + checkStringWidth(font, frc, text); + checkStringWidth(font.deriveFont(affineTransform), baseFrc, text); + + attributes = Map.of(TextAttribute.TRACKING, 0.5); + checkStringWidth(font.deriveFont(attributes), baseFrc, text); + + attributes = Map.of(TextAttribute.KERNING, TextAttribute.KERNING_ON); + checkStringWidth(font.deriveFont(attributes), baseFrc, text); + + attributes = Map.of(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON); + checkStringWidth(font.deriveFont(attributes), baseFrc, text); + } + + @Test + // checking equals of calculation of string's width with two different approach: + // fast implementation inside FontDesignMetrics and guaranteed correct implementation in TextLayout + public void checkCalculationStringWidth() { + final Font font = new Font("Arial", Font.PLAIN, 15); + + checkCalculationStringWidth(font, + "AVAVAVAVAVAVAAAAVVAVVAVVVAVAVAVAVAVA !@#$%^&*12345678zc.vbnm.a..s.dfg,hjqwertgyh}{}{}///"); + checkCalculationStringWidth(font, + "a"); + checkCalculationStringWidth(font, + "世丕且且世两上与丑万丣丕且丗丕"); + checkCalculationStringWidth(font, + "\uD83D\uDE06\uD83D\uDE06\uD83D\uDE06\uD83D\uDE06\uD83D\uDE06\uD83D\uDE06\uD83D\uDE06"); + } +} diff --git a/test/jdk/jbu/quality/util/RenderUtil.java b/test/jdk/jbu/quality/util/RenderUtil.java new file mode 100644 index 000000000000..c86803c3efdb --- /dev/null +++ b/test/jdk/jbu/quality/util/RenderUtil.java @@ -0,0 +1,163 @@ +/* + * Copyright 2019-2023 JetBrains s.r.o. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package quality.util; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.Raster; +import java.io.File; +import java.util.function.Consumer; + +import static org.junit.Assert.*; + +public class RenderUtil { + private final static int TOLERANCE = 1; + + public static BufferedImage capture(int width, int height, Consumer painter) + throws Exception + { + JFrame[] f = new JFrame[1]; + int[] p = new int[2]; + double[] scale = new double[2]; + SwingUtilities.invokeAndWait(() -> { + f[0] = new JFrame(); + + JComponent c = new MyComponent(painter); + + f[0].add(c); + c.setSize(width + 10, height + 10); + f[0].setSize(width + 100, height + 100); // giving some space + // for frame border effects, + // e.g. rounded frame + c.setLocation(50, 50); + f[0].setVisible(true); + p[0] = f[0].getLocationOnScreen().x + f[0].getInsets().left; + p[1] = f[0].getLocationOnScreen().y + f[0].getInsets().top; + scale[0] = f[0].getGraphicsConfiguration().getDefaultTransform().getScaleX(); + scale[1] = f[0].getGraphicsConfiguration().getDefaultTransform().getScaleY(); + }); + + Rectangle screenRect; + Robot r = new Robot(); + while (!Color.black.equals(r.getPixelColor(p[0] + 1, p[1] + 1))) { + p[0] = f[0].getLocationOnScreen().x + f[0].getInsets().left; + p[1] = f[0].getLocationOnScreen().y + f[0].getInsets().top; + Thread.sleep(100); + } + screenRect = new Rectangle( + p[0] + 5, + p[1] + 5, + (int)((width - 20) * scale[0]), (int)((height - 30) * scale[1])); + + BufferedImage result = r.createScreenCapture(screenRect); + SwingUtilities.invokeAndWait(f[0]::dispose); + return result; + } + + private static class MyComponent extends JComponent { + private final Consumer painter; + + private MyComponent(Consumer painter) { + this.painter = painter; + } + + + @Override + protected void paintComponent(Graphics g) { + Shape savedClip = g.getClip(); + g.translate(5, 5); + painter.accept((Graphics2D)g); + g.translate(-5, -5); + g.setClip(savedClip); + g.setColor(Color.black); + g.fillRect(0, 0, getWidth() + 10, 5); + g.fillRect(0, getHeight()-5, getWidth() + 10, 5); + g.fillRect(getWidth() - 10, -10, getWidth() + 5, getHeight() + 5); + g.fillRect(-5, -10, 10, getHeight() + 5); + } + } + + @SuppressWarnings("SameParameterValue") + public static void checkImage(BufferedImage image, String path, String gfName) throws Exception { + + String[] testDataVariant = {"osx_hardware_rendering"}; + + String testDataStr = System.getProperty("testdata"); + assertNotNull("testdata property is not set", testDataStr); + + File testData = new File(testDataStr, "quality" + File.separator + path); + assertTrue("Test data dir does not exist", testData.exists()); + + if (System.getProperty("gentestdata") == null) { + boolean failed = true; + StringBuilder failureReason = new StringBuilder(); + for (String variant : testDataVariant) { + File goldenFile = new File(testData, variant + File.separator + + gfName); + if (!goldenFile.exists()) continue; + + BufferedImage goldenImage = ImageIO.read(goldenFile); + failed = true; + if (image.getWidth() != goldenImage.getWidth() || + image.getHeight() != image.getHeight()) + { + failureReason.append(variant).append(" : Golden image and result have different sizes\n"); + continue; + } + + Raster gRaster = goldenImage.getData(); + Raster rRaster = image.getData(); + int[] gArr = new int[3]; + int[] rArr = new int[3]; + failed = false; + scan: + for (int i = 0; i < gRaster.getWidth(); i++) { + for (int j = 0; j < gRaster.getHeight(); j++) { + gRaster.getPixel(i, j, gArr); + rRaster.getPixel(i, j, rArr); + for (int k = 0; k < gArr.length; k++) { + int diff = Math.abs(gArr[k] - rArr[k]); + if (diff > TOLERANCE) { + failureReason.append(variant).append(" : Different pixels found ("). + append("c[").append(k).append("]=").append(diff). + append(") at (").append(i).append(",").append(j).append(")"); + failed = true; + break scan; + } + } + } + } + + if (!failed) break; + } + + if (failed) throw new RuntimeException(failureReason.toString()); + } + else { + ImageIO.write(image, "png", new File(testData, gfName)); + } + } +} diff --git a/test/jdk/jbu/testdata/quality/text/osx_hardware_rendering/bndtext.png b/test/jdk/jbu/testdata/quality/text/osx_hardware_rendering/bndtext.png new file mode 100644 index 000000000000..4a65a15163ea Binary files /dev/null and b/test/jdk/jbu/testdata/quality/text/osx_hardware_rendering/bndtext.png differ diff --git a/test/jdk/jdk/nio/zipfs/test.policy b/test/jdk/jdk/nio/zipfs/test.policy index d0492d0fc7a1..9a712596f5a3 100644 --- a/test/jdk/jdk/nio/zipfs/test.policy +++ b/test/jdk/jdk/nio/zipfs/test.policy @@ -4,4 +4,6 @@ grant { permission java.util.PropertyPermission "test.src","read"; permission java.util.PropertyPermission "user.dir","read"; permission java.lang.RuntimePermission "accessUserInformation"; + permission java.lang.RuntimePermission "loadLibrary.nio"; + permission java.util.PropertyPermission "watch.service.polling","read"; }; diff --git a/test/jdk/sun/java2d/SunGraphics2D/DrawImageBilinear.java b/test/jdk/sun/java2d/SunGraphics2D/DrawImageBilinear.java index 021ed43969cd..19aacdbed833 100644 --- a/test/jdk/sun/java2d/SunGraphics2D/DrawImageBilinear.java +++ b/test/jdk/sun/java2d/SunGraphics2D/DrawImageBilinear.java @@ -26,8 +26,8 @@ * @bug 5009033 6603000 6666362 8159142 8198613 * @summary Verifies that images transformed with bilinear filtering do not * leave artifacts at the edges. - * @run main/othervm -Dsun.java2d.uiScale=2.5 DrawImageBilinear - * @run main/othervm -Dsun.java2d.uiScale=2.5 -Dsun.java2d.d3d=false DrawImageBilinear + * @run main/othervm -Dverbose=true -Dsun.java2d.uiScale=2.5 DrawImageBilinear + * @run main/othervm -Dverbose=true -Dsun.java2d.uiScale=2.5 -Dsun.java2d.d3d=false DrawImageBilinear */ import java.awt.Canvas; @@ -46,6 +46,8 @@ import java.awt.image.BufferedImage; import java.awt.image.IndexColorModel; import java.awt.image.VolatileImage; +import java.io.File; +import javax.imageio.ImageIO; public class DrawImageBilinear extends Canvas { @@ -144,6 +146,8 @@ private static void createAndShowGUI() { public static void main(String[] args) throws Exception { try { + boolean verbose = Boolean.parseBoolean(System.getProperty("verbose", "false")); + EventQueue.invokeAndWait(() -> createAndShowGUI()); GraphicsConfiguration gc = frame.getGraphicsConfiguration(); if (gc.getColorModel() instanceof IndexColorModel) { @@ -165,6 +169,11 @@ public static void main(String[] args) throws Exception { throw new RuntimeException("Failed: capture is null"); } + if (verbose) { + String format = "bmp"; + ImageIO.write(capture, format, new File("capture" + "." + format)); + } + // Test background color int pixel = capture.getRGB(5, 5); if (pixel != 0xffffffff) { diff --git a/test/jdk/tools/launcher/MuslCheck.java b/test/jdk/tools/launcher/MuslCheck.java new file mode 100644 index 000000000000..4333ff7b2a2d --- /dev/null +++ b/test/jdk/tools/launcher/MuslCheck.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021, JetBrains s.r.o.. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Verifies that the launcher doesn't unnecessarily set LD_LIBRARY_PATH on + * non-musl-based systems. + * @requires (os.family == "linux") + * @library /test/lib + * @run main MuslCheck + */ + +import java.util.Map; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class MuslCheck extends TestHelper { + public static void main(String[] args) throws Exception { + final Map envMap = Map.of("_JAVA_LAUNCHER_DEBUG", "true"); + TestResult tr = doExec(envMap, javaCmd, "-help"); + if (!tr.contains("mustsetenv:")) { + throw new RuntimeException("Test error: the necessary tracing is missing in the output"); + } + + if (!tr.contains("micro seconds to check for the musl compatibility layer for glibc")) { + throw new RuntimeException("The check for libgcompat seems to be missing"); + } + + if (tr.contains("mustsetenv: TRUE")) { + throw new RuntimeException("launcher is not supposed to set LD_LIBRARY_PATH"); + } + } +} diff --git a/test/jtreg-ext/requires/VMProps.java b/test/jtreg-ext/requires/VMProps.java index b55063f04f2c..7c345be46c0f 100644 --- a/test/jtreg-ext/requires/VMProps.java +++ b/test/jtreg-ext/requires/VMProps.java @@ -135,6 +135,7 @@ public Map call() { map.put("jdk.containerized", this::jdkContainerized); map.put("vm.flagless", this::isFlagless); map.put("jdk.foreign.linker", this::jdkForeignLinker); + map.put("display.XWayland", this::displayXWayland); vmGC(map); // vm.gc.X = true/false vmGCforCDS(map); // may set vm.gc vmOptFinalFlags(map); @@ -755,6 +756,13 @@ private String jdkForeignLinker() { return String.valueOf(CABI.current()); } + protected String displayXWayland() { + final boolean isXWayland = (System.getenv("WAYLAND_DISPLAY") != null) + && (System.getenv("DISPLAY") != null); + + return String.valueOf(isXWayland); + } + /** * Dumps the map to the file if the file name is given as the property. * This functionality could be helpful to know context in the real diff --git a/test/langtools/jdk/javadoc/doclet/testModules/TestIndirectExportsOpens.java b/test/langtools/jdk/javadoc/doclet/testModules/TestIndirectExportsOpens.java index 22cb0da879b1..cb39e1194fbb 100644 --- a/test/langtools/jdk/javadoc/doclet/testModules/TestIndirectExportsOpens.java +++ b/test/langtools/jdk/javadoc/doclet/testModules/TestIndirectExportsOpens.java @@ -169,8 +169,8 @@ public void checkExportsToOpensToDetailMode(Path base) throws Exception { checkOutput("a/module-summary.html", true, "Indirect Opens", """ - -
          opensto
          + +
          opensto
          """); } diff --git a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java index 79bad12f95db..344c410e312a 100644 --- a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java +++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java @@ -212,7 +212,7 @@ public void testApiMode() { "--module", "moduleA,moduleB,moduleC,moduletags", "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags"); checkExit(Exit.OK); - checkModuleModeCommon(); + checkModuleModeCommon(true); checkModuleModeApi(true); checkModuleModeAll(false); } @@ -234,7 +234,7 @@ public void testAllMode() { "--module", "moduleA,moduleB,moduleC,moduletags", "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags"); checkExit(Exit.OK); - checkModuleModeCommon(); + checkModuleModeCommon(false); checkModuleModeApi(false); checkModuleModeAll(true); } @@ -872,7 +872,7 @@ void checkModulesInSearch(boolean found) {
          with description
          """); } - void checkModuleModeCommon() { + void checkModuleModeCommon(boolean isApi) { checkOutput("index.html", true, """
          <\ @@ -897,14 +897,21 @@ void checkModuleModeCommon() {
          """); checkOutput("moduleA/module-summary.html", true, """ +
          1. Description
          2. Packages
          3. Modules
          """, + isApi ? """ + """ + : + """ + + """); checkOutput("moduletags/module-summary.html", true, """ @@ -946,9 +953,15 @@ void checkModuleModeCommon() {
          From
          Packages
          """, + isApi ? """ + """ + : + """ + + """); }