Spracherkennung für: .md vermutete Sprache: SQL {SQL[124] VDM[122] VHDL[120]} [Methode: maximale Elemente, drei Dimensionen]
```
Copyright (c)
2008,
2022, Oracle
and/
or its affiliates.
All rights reserved.
DO
NOT ALTER OR REMOVE COPYRIGHT NOTICES
OR THIS FILE HEADER.
The Universal Permissive License (UPL), Version
1.
0
Subject
to the
condition set forth below, permission
is hereby granted
to
any person obtaining a copy of this software, associated documentation
and/
or data (collectively the
"Software"), free of charge
and under any
and all copyright rights
in the Software,
and any
and all patent rights
owned
or freely licensable
by each licensor hereunder covering either (i)
the unmodified Software
as contributed
to or provided
by such licensor,
or (ii) the Larger Works (
as defined below),
to deal
in both
(a) the Software,
and
(b) any piece of software
and/
or hardware listed
in the lrgrwrks.txt file
if one
is included
with the Software (
each a
"Larger Work" to which the
Software
is contributed
by such licensors),
without restriction, including without limitation the rights
to copy,
create derivative works of, display, perform,
and distribute the Software
and make,
use, sell, offer
for sale, import, export, have made,
and have
sold the Software
and the Larger Work(s),
and to sublicense the foregoing
rights
on either these
or other terms.
This license
is subject
to the following
condition:
The above copyright notice
and either this complete permission notice
or
at a minimum a reference
to the UPL must be included
in all copies
or
substantial portions of the Software.
THE SOFTWARE
IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT
NOT LIMITED
TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE
AND NONINFRINGEMENT.
IN
NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE
FOR ANY CLAIM,
DAMAGES
OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT
OR
OTHERWISE, ARISING
FROM,
OUT OF
OR IN CONNECTION WITH THE SOFTWARE
OR THE
USE OR OTHER DEALINGS
IN THE SOFTWARE.
Please contact Oracle,
500 Oracle Parkway, Redwood Shores, CA
94065 USA
or visit www.oracle.com
if you need additional information
or have any
questions.
```
---
# hsdis - a HotSpot plugin
for disassembling dynamically generated code
The files
in this directory are built independently of the HotSpot JVM.
hsdis
is an interface exposed
by Hotspot. There are several backends that
implement this interface,
using different disassembly engines. Included
in the
JDK
is support
for building hsdis
with Capstone, LLVM
or GNU binutils. The
interface
is fairly straightforward
and easy
to implement
using other backends.
## Building
and installing
To compile hsdis, you need
to activate hsdis support,
and select the proper
backend
to use. This
is done
with the configure switch `
--with-hsdis=<backend>`,
where `<backend>`
is either `capstone`, `llvm`
or `binutils`.
For details, see
the sections
on the respective backends below.
To build the hsdis library, run `make build-hsdis`. This will build the library
in a separate directory, but
not make it available
to the JDK
in the
configuration.
To actually install it
in the JDK, run `make install-hsdis`.
**NOTE:**
If you do this
using the binutils backend, the resulting build may
not
be distributable. Please get legal advice
if you intend
to distribute the result
of your build.
##
Using the library
The hsdis library will be automatically loaded
by Hotspot
when you
use the
diagnostic
option `-XX:+PrintAssembly`. Note that since this
is a diagnostic
option, you need
to unlock these first, so
in practice you activate it
using
`-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly`.
If using the LLVM backend
on Windows, you need
to be sure that the LLVM DLL file
(
or files) can be found
by hsdis.
In practice, this means that you either need
to copy `LLVM-C.DLL`
to a place
on your `PATH`
or the JDK `bin` directory,
or
you need
to augment your `PATH` variable
to also point
to where you installed
LLVM (
like `C:\LLVM\bin`).
More information
is available at the [HotSpot
wiki](
https://wiki.openjdk.org/display/HotSpot/PrintAssembly).
## Building
with Capstone
To build this project
using Capstone you need
to have Capstone installed.
Typical ways of installation can be `sudo apt install libcapstone-dev` (
on
Debian
and derivatives),
or `brew install capstone` (
on macOS
with Homebrew).
For Windows, you need
to download the
"Core Engine",
and unzip it. See the
[Capstone Download
page](
https://www.capstone-engine.org/download.html#windows---core-engine-) for
up-
to-date download links.
This has been tested
with Capstone v4.
0.
2, but earlier (
and later) versions are
also likely
to work.
To build hsdis
using Capstone, you must enable it
in configure
by `bash
configure
--with-hsdis=capstone`.
On Linux
and macOS, the location Capstone can most often be auto-detected.
If
this fails,
or if you are building
on Windows, you need
to specify
where
Capstone
is located
using `
--with-capstone=<path>`. This path should point to
where you have extracted the Core Engine zip file.
## Building
with LLVM
To build this project
using LLVM you need
to have LLVM installed. Typical ways
of installation can be `sudo apt install llvm` (
on Debian
and derivatives),
or
`brew install llvm` (
on macOS
with Homebrew).
For Windows, see below.
This has been tested
with LLVM v13.
0.
0, but earlier (
and later) versions are
also likely
to work.
To build hsdis
using LLVM, you must enable it
in configure
by `bash configure
--with-hsdis=llvm`.
If `llvm-config`
is not in your path, you will need
to specify the LLVM home
using
`
--with-llvm=<LLVM home>`. Example: If your `llvm-config` is in `~/my-llvm/bin`,
then you should
use `
--with-llvm=~/my-llvm`.
### Building
with LLVM
on Windows
Getting a usable installation
on Windows
is trickier than
on the other
platforms. You can download (
and patch) the official distribution,
or you can
build it yourself.
Links
to the latest version of the official build
is available at [LLVMs
download page](
https://releases.llvm.org/download.html). Download the file
*LLVM-nn.n.n-win64.exe*,
and run it
to let it install itself. The
default
installation location
is `C:\Program Files\LLVM`. This
is not ideal due
to the
spaces
in the path, so it
is recommended
to put it elsewhere (e.g. `C:\LLVM`).
For very unclear reasons, the official Windows build
is missing almost
all LLVM
include files. (At least this was the
case up
to and including LLVM
13.) You
will need
to complement your installation
with the proper include files. One way
to do this
is to install LLVM
in Cygwin. This will give you (apart
from the Cygwin-based dll
files which are unusable
with Visual Studio) a complete
set of the
headers. These are located
in `/usr/include/llvm`
and `/usr/include/llvm-c`. Copy
these directories,
with all their content,
into `$LLVM_HOME/include`.
Alternatively, you can build LLVM yourself
from source. This process
is
documented at the [LLVM Visual Studio
page](
https://llvm.org/docs/GettingStartedVS.html).
Either which way, you must tell configure the location of your LLVM installation
using `
--with-llvm=<path to LLVM home>`.
The `llvm-config` tool, which configure uses
on other platforms
to get the
proper compile
and link flags
to use,
is unfortunately
not usable
on Windows.
In
the official distribution, it
is just missing.
And the self-built version tend
to give broken
and unusable output. Therefore configure uses heuristics
to setup
proper flags
to the compiler
and linker. This was verified
to work
for LLVM v13,
but might be incorrect
for other versions. Manual override of `HSDIS_CFLAGS`,
`HSDIS_LDFLAGS`
and/
or `HSDIS_LIBS`
on the make command line might be needed
in
that
case.
## Building
with binutils
To build this project
using binutils you need a copy of GNU binutils
to build
against. It
is known
to work
with binutils
2.
37. Building against versions older
than
2.
29 is not supported. Download a copy of the software
from [FSF binutils
page](
http://directory.fsf.org/project/binutils) or one of its mirrors.
To build this library, you must enable building
in configure
by `bash configure
--with-hsdis=binutils`.
You must also specify
where binutils
is located.
To facilitate building, you can
point
to a place
where the (unpacked) binutils sources are located
using
`
--with-binutils-src=<location>`, and configure will build binutils for you. On
repeated runs, you can keep this command line
option, since configure will
figure
out that the binutils binaries are already present
and skip building,
or
you can
replace it
with `
--with-binutils=<location>`.
If you have pre-built binutils binaries, you can point
to them directly
using
`
--with-binutils=<location>`.
If you want
to build hsdis
with binutils provided
by system (e.g. binutils-devel
from Fedora, binutils-dev
from Ubuntu), you can pass `
--with-binutils=system`.
`system`
is available
on Linux only.
### Building
with binutils
on Windows
On Windows, the normal Microsoft Visual Studio toolchain cannot build binutils.
Instead we need
to use the mingw compiler. This
is available
as a cygwin
package. You need
to install the `gcc-core`
and `mingw64-x86_64-gcc-core`
packages (
or `mingw64-i686-gcc-core`,
if you want the
32-bit version)
and
`mingw64-x86_64-glib2.
0`.