forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3,904 changed files
with
157,222 additions
and
70,869 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
Github action workflows should be stored in this directrory. | ||
Github action workflows should be stored in this directory. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
|
||
name: Build CI Container | ||
|
||
permissions: | ||
contents: read | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
paths: | ||
- .github/workflows/build-ci-container.yml | ||
- '.github/workflows/containers/github-action-ci/**' | ||
pull_request: | ||
branches: | ||
- main | ||
paths: | ||
- .github/workflows/build-ci-container.yml | ||
- '.github/workflows/containers/github-action-ci/**' | ||
|
||
jobs: | ||
build-ci-container: | ||
if: github.repository_owner == 'llvm' | ||
runs-on: ubuntu-latest | ||
permissions: | ||
packages: write | ||
steps: | ||
- name: Write Variables | ||
id: vars | ||
run: | | ||
tag=`date +%s` | ||
container_name="ghcr.io/$GITHUB_REPOSITORY_OWNER/ci-ubuntu-22.04" | ||
echo "container-name=$container_name" >> $GITHUB_OUTPUT | ||
echo "container-name-tag=$container_name:$tag" >> $GITHUB_OUTPUT | ||
- name: Checkout LLVM | ||
uses: actions/checkout@v4 | ||
with: | ||
sparse-checkout: .github/workflows/containers/github-action-ci/ | ||
|
||
- name: Build Container | ||
working-directory: ./.github/workflows/containers/github-action-ci/ | ||
run: | | ||
podman build -t ${{ steps.vars.outputs.container-name-tag }} . | ||
podman tag ${{ steps.vars.outputs.container-name-tag }} ${{ steps.vars.outputs.container-name }}:latest | ||
- name: Test Container | ||
run: | | ||
for image in ${{ steps.vars.outputs.container-name-tag }} ${{ steps.vars.outputs.container-name }}; do | ||
podman run --rm -it $image /usr/bin/bash -x -c 'printf '\''#include <iostream>\nint main(int argc, char **argv) { std::cout << "Hello\\n"; }'\'' | clang++ -x c++ - && ./a.out | grep Hello' | ||
done | ||
- name: Push Container | ||
if: github.event_name == 'push' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
podman login -u ${{ github.actor }} -p $GITHUB_TOKEN ghcr.io | ||
podman push ${{ steps.vars.outputs.container-name-tag }} | ||
podman push ${{ steps.vars.outputs.container-name }}:latest |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
FROM docker.io/library/ubuntu:22.04 as base | ||
ENV LLVM_SYSROOT=/opt/llvm/ | ||
|
||
FROM base as toolchain | ||
ENV LLVM_MAJOR=17 | ||
ENV LLVM_VERSION=${LLVM_MAJOR}.0.6 | ||
ENV LLVM_DIRNAME=clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-22.04 | ||
ENV LLVM_FILENAME=${LLVM_DIRNAME}.tar.xz | ||
|
||
RUN apt-get update && \ | ||
apt-get install -y \ | ||
curl \ | ||
xz-utils | ||
|
||
RUN mkdir -p $LLVM_SYSROOT/bin/ $LLVM_SYSROOT/lib/ | ||
|
||
RUN curl -O -L https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVM_VERSION/$LLVM_FILENAME | ||
|
||
RUN tar -C $LLVM_SYSROOT --strip-components=1 -xJf $LLVM_FILENAME \ | ||
$LLVM_DIRNAME/bin/clang \ | ||
$LLVM_DIRNAME/bin/clang++ \ | ||
$LLVM_DIRNAME/bin/clang-cl \ | ||
$LLVM_DIRNAME/bin/clang-$LLVM_MAJOR \ | ||
$LLVM_DIRNAME/bin/lld \ | ||
$LLVM_DIRNAME/bin/ld.lld \ | ||
$LLVM_DIRNAME/lib/clang/ | ||
|
||
|
||
FROM base | ||
|
||
COPY --from=toolchain $LLVM_SYSROOT $LLVM_SYSROOT | ||
|
||
# Need to install curl for hendrikmuhs/ccache-action | ||
# Need nodejs for some of the GitHub actions. | ||
# Need perl-modules for clang analyzer tests. | ||
RUN apt-get update && \ | ||
apt-get install -y \ | ||
binutils \ | ||
cmake \ | ||
curl \ | ||
libstdc++-11-dev \ | ||
ninja-build \ | ||
nodejs \ | ||
perl-modules \ | ||
python3-psutil | ||
|
||
ENV LLVM_SYSROOT=$LLVM_SYSROOT | ||
ENV PATH=${LLVM_SYSROOT}/bin:${PATH} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
name: Libclang Python Binding Tests | ||
|
||
permissions: | ||
contents: read | ||
|
||
on: | ||
workflow_dispatch: | ||
push: | ||
paths: | ||
- 'clang/bindings/python/**' | ||
- 'clang/tools/libclang/**' | ||
- 'clang/CMakeList.txt' | ||
- '.github/workflows/libclang-python-tests.yml' | ||
- '.github/workflows/llvm-project-tests.yml' | ||
pull_request: | ||
paths: | ||
- 'clang/bindings/python/**' | ||
- 'clang/tools/libclang/**' | ||
- 'clang/CMakeList.txt' | ||
- '.github/workflows/libclang-python-tests.yml' | ||
- '.github/workflows/llvm-project-tests.yml' | ||
|
||
concurrency: | ||
# Skip intermediate builds: always. | ||
# Cancel intermediate builds: only if it is a pull request build. | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} | ||
|
||
jobs: | ||
check-clang-python: | ||
# Build libclang and then run the libclang Python binding's unit tests. | ||
name: Build and run Python unit tests | ||
uses: ./.github/workflows/llvm-project-tests.yml | ||
with: | ||
build_target: check-clang-python | ||
projects: clang | ||
# There is an issue running on "windows-2019". | ||
# See https://github.com/llvm/llvm-project/issues/76601#issuecomment-1873049082. | ||
os_list: '["ubuntu-latest"]' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# BOLT Address Translation (BAT) | ||
# Purpose | ||
A regular profile collection for BOLT involves collecting samples from | ||
unoptimized binary. BOLT Address Translation allows collecting profile | ||
from BOLT-optimized binary and using it for optimizing the input (pre-BOLT) | ||
binary. | ||
|
||
# Overview | ||
BOLT Address Translation is an extra section (`.note.bolt_bat`) inserted by BOLT | ||
into the output binary containing translation tables and split functions linkage | ||
information. This information enables mapping the profile back from optimized | ||
binary onto the original binary. | ||
|
||
# Usage | ||
`--enable-bat` flag controls the generation of BAT section. Sampled profile | ||
needs to be passed along with the optimized binary containing BAT section to | ||
`perf2bolt` which reads BAT section and produces fdata profile for the original | ||
binary. Note that YAML profile generation is not supported since BAT doesn't | ||
contain the metadata for input functions. | ||
|
||
# Internals | ||
## Section contents | ||
The section is organized as follows: | ||
- Hot functions table | ||
- Address translation tables | ||
- Cold functions table | ||
|
||
## Construction and parsing | ||
BAT section is created from `BoltAddressTranslation` class which captures | ||
address translation information provided by BOLT linker. It is then encoded as a | ||
note section in the output binary. | ||
|
||
During profile conversion when BAT-enabled binary is passed to perf2bolt, | ||
`BoltAddressTranslation` class is populated from BAT section. The class is then | ||
queried by `DataAggregator` during sample processing to reconstruct addresses/ | ||
offsets in the input binary. | ||
|
||
## Encoding format | ||
The encoding is specified in | ||
[BoltAddressTranslation.h](/bolt/include/bolt/Profile/BoltAddressTranslation.h) | ||
and [BoltAddressTranslation.cpp](/bolt/lib/Profile/BoltAddressTranslation.cpp). | ||
|
||
### Layout | ||
The general layout is as follows: | ||
``` | ||
Hot functions table header | ||
|------------------| | ||
| Function entry | | ||
| |--------------| | | ||
| | OutOff InOff | | | ||
| |--------------| | | ||
~~~~~~~~~~~~~~~~~~~~ | ||
Cold functions table header | ||
|------------------| | ||
| Function entry | | ||
| |--------------| | | ||
| | OutOff InOff | | | ||
| |--------------| | | ||
~~~~~~~~~~~~~~~~~~~~ | ||
``` | ||
|
||
### Functions table | ||
Hot and cold functions tables share the encoding except difference marked below. | ||
Header: | ||
| Entry | Encoding | Description | | ||
| ------ | ----- | ----------- | | ||
| `NumFuncs` | ULEB128 | Number of functions in the functions table | | ||
|
||
The header is followed by Functions table with `NumFuncs` entries. | ||
Output binary addresses are delta encoded, meaning that only the difference with | ||
the previous output address is stored. Addresses implicitly start at zero. | ||
Hot indices are delta encoded, implicitly starting at zero. | ||
| Entry | Encoding | Description | | ||
| ------ | ------| ----------- | | ||
| `Address` | Delta, ULEB128 | Function address in the output binary | | ||
| `HotIndex` | Delta, ULEB128 | Cold functions only: index of corresponding hot function in hot functions table | | ||
| `NumEntries` | ULEB128 | Number of address translation entries for a function | | ||
|
||
Function header is followed by `NumEntries` pairs of offsets for current | ||
function. | ||
|
||
### Address translation table | ||
Delta encoding means that only the difference with the previous corresponding | ||
entry is encoded. Offsets implicitly start at zero. | ||
| Entry | Encoding | Description | | ||
| ------ | ------| ----------- | | ||
| `OutputOffset` | Delta, ULEB128 | Function offset in output binary | | ||
| `InputOffset` | Delta, SLEB128 | Function offset in input binary with `BRANCHENTRY` LSB bit | | ||
|
||
`BRANCHENTRY` bit denotes whether a given offset pair is a control flow source | ||
(branch or call instruction). If not set, it signifies a control flow target | ||
(basic block offset). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.