tbb-commits
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
July 2020
- 3 participants
- 81 discussions

17 Jul '20
commit e1a81f52117ac45d7749794eabebe9f75870b822
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Jun 11 10:30:17 2020 +0000
Bug 33626: Add GeckoView project
We include a new project, geckoview. While this increases the
boilerplate a bit it should make it easier to move mobile to the regular
release series while desktop stays on ESR, and it is conceptually
clearer as well (no, we don't build firefox on mobile but a library to
be consumed by other projects).
---
projects/common/get-moz-build-date | 27 ++
projects/geckoview/build | 61 +++
projects/geckoview/config | 58 +++
projects/geckoview/gradle-dependencies-list.txt | 479 ++++++++++++++++++++++++
projects/geckoview/mozconfig-android-aarch64 | 37 ++
projects/geckoview/mozconfig-android-all | 8 +
projects/geckoview/mozconfig-android-armv7 | 37 ++
projects/geckoview/mozconfig-android-x86 | 37 ++
projects/geckoview/mozconfig-android-x86_64 | 37 ++
9 files changed, 781 insertions(+)
diff --git a/projects/common/get-moz-build-date b/projects/common/get-moz-build-date
new file mode 100755
index 0000000..a43f2f7
--- /dev/null
+++ b/projects/common/get-moz-build-date
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+# Generate a MOZ_BUILD_DATE based on Tor Browser version number
+
+use strict;
+
+die "wrong number of arguments" unless @ARGV == 2;
+my ($year, $version) = @ARGV;
+my $date;
+if ($version =~ m/^tbb-nightly\.([^\.]+)\.([^\.]+)\.([^\.]+)$/) {
+ $date = sprintf("%d%02d%02d010101", $1, $2, $3);
+} elsif ($version eq 'testbuild') {
+ # There is no need for an increasing build date in test builds. Just hardcode
+ # it.
+ $date = 20010101010101;
+} else {
+ my @v = split(/[\.ab]/, $version);
+ push @v, '0' if @v < 4;
+ push @v, '0' if @v < 4;
+ # When MOZ_BUILD_DATE was based on the firefox version, with
+ # Tor Browser 8.0.6 and firefox 60.5.1 it was 20190204060201
+ # We can remove 5 from the month, while keeping it increasing.
+ my $month = $v[0] - 5;
+ $date = 1010101 + $year * 10000000000 + $month * 100000000
+ + $v[1] * 1000000 + $v[2] * 10000 + $v[3];
+ $date += 1000000 unless $version =~ m/[ab]/;
+}
+print "export MOZ_BUILD_DATE=$date\n";
diff --git a/projects/geckoview/build b/projects/geckoview/build
new file mode 100644
index 0000000..b12c096
--- /dev/null
+++ b/projects/geckoview/build
@@ -0,0 +1,61 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+distdir=/var/tmp/dist
+mkdir -p /var/tmp/build
+mkdir -p $distdir/[% project %]
+
+# We need to have the get-moz-build-date script available in the container
+# but we can't include it via input_files as it is a script shared between
+# projects.
+cat > get-moz-build-date << "EOF"
+[% INCLUDE "get-moz-build-date" %]
+EOF
+
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/rust') %]
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/cbindgen') %]
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/nasm') %]
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/python') %]
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/node') %]
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
+export LLVM_CONFIG="/var/tmp/dist/clang/bin/llvm-config"
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
+export PATH="/var/tmp/dist/fenix-rust/bin:/var/tmp/dist/fenix-cbindgen:/var/tmp/dist/nasm/bin:/var/tmp/dist/python/bin:/var/tmp/dist/fenix-node/bin:/var/tmp/dist/fenix-clang/bin:/var/tmp/dist/binutils/bin:$PATH"
+
+tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
+
+cd /var/tmp/build/[% project %]-[% c("version") %]
+mv -f $rootdir/[% c('input_files_by_name/mozconfig') %] .mozconfig
+
+eval $(perl $rootdir/get-moz-build-date [% c("var/copyright_year") %] [% c("var/torbrowser_version") %])
+if [ -z $MOZ_BUILD_DATE ]
+then
+ echo "MOZ_BUILD_DATE is not set"
+ exit 1
+fi
+
+export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
+gradle_repo=/var/tmp/dist/gradle-dependencies
+export GRADLE_MAVEN_REPOSITORIES="file://$gradle_repo"
+export GRADLE_FLAGS="--no-daemon --offline"
+# Move the Gradle repo to a hard-coded location. The location is embedded in
+# the file chrome/toolkit/content/global/buildconfig.html so it needs to be
+# standardized for reproducibility.
+mv $rootdir/[% c('input_files_by_name/gradle-dependencies') %] $gradle_repo
+cp -r $gradle_repo/m2/* $gradle_repo
+
+rm -f configure
+rm -f js/src/configure
+
+./mach configure --with-tor-browser-version=[% c("var/torbrowser_version") %]
+./mach build --verbose
+
+# We don't want to have the debug .aar but the one that has `$channel`, `$arch`,
+# and `$version` in its name.
+find obj-* -type f -name geckoview-*-*-*.aar -exec cp {} $distdir/[% project %] \;
+
+cd $distdir
+[% c('tar', {
+ tar_src => [ project ],
+ tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+ }) %]
diff --git a/projects/geckoview/config b/projects/geckoview/config
new file mode 100644
index 0000000..9270c43
--- /dev/null
+++ b/projects/geckoview/config
@@ -0,0 +1,58 @@
+# vim: filetype=yaml sw=2
+version: '[% c("abbrev") %]'
+filename: 'geckoview-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1-build2'
+tag_gpg_id: 1
+git_url: https://git.torproject.org/tor-browser.git
+git_submodule: 1
+gpg_keyring: torbutton.gpg
+
+var:
+ geckoview_version: '78.0b[% c("var/beta_version") %]'
+ beta_version: 5
+ torbrowser_branch: 10
+ copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
+ deps:
+ - build-essential
+ - unzip
+ - zip
+ - autoconf2.13
+ - yasm
+ # We are building our own version of Python 3.6, which is required
+ # for the build. However mach still requires Python 2.7, so we
+ # install this version using the package.
+ - python
+ - pkg-config
+ container:
+ use_container: 1
+ # this should be updated when the list of gradle dependencies is changed
+ gradle_dependencies_version: 1
+
+targets:
+ nightly:
+ git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1'
+ tag_gpg_id: 0
+
+input_files:
+ - project: container-image
+ - name: '[% c("var/compiler") %]'
+ project: '[% c("var/compiler") %]'
+ - filename: 'mozconfig-[% c("var/osname") %]'
+ name: mozconfig
+ - project: binutils
+ name: binutils
+ - project: fenix-rust
+ name: rust
+ - project: fenix-cbindgen
+ name: cbindgen
+ - project: fenix-node
+ name: node
+ - project: nasm
+ name: nasm
+ - project: python
+ name: python
+ - project: fenix-clang
+ name: clang
+ - filename: 'gradle-dependencies-[% c("var/gradle_dependencies_version") %]'
+ name: gradle-dependencies
+ exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
diff --git a/projects/geckoview/gradle-dependencies-list.txt b/projects/geckoview/gradle-dependencies-list.txt
new file mode 100644
index 0000000..d379d16
--- /dev/null
+++ b/projects/geckoview/gradle-dependencies-list.txt
@@ -0,0 +1,479 @@
+# On how to update dependencies see projects/common/how-to-create-gradle-dependencies-list.txt
+# Don't forget to update var/gradle_dependencies_version when modifying this file
+sha256sum | url
+857db5645aaefbd7fbe9ba6454b072bc0518ebaba08a93d5eae89a9850e949c4 | https://jcenter.bintray.com/com/getkeepsafe/dexcount/dexcount-gradle-plugin…
+15d4b252c5aa3aeb8d634ae5aaf348ac6ce183b6b5e3615364e6c083715c1133 | https://jcenter.bintray.com/com/getkeepsafe/dexcount/dexcount-gradle-plugin…
+c98f1b0978cfd24712c27388e040c50ce0692252b3aa9448603d9efa05ebe8a8 | https://jcenter.bintray.com/com/google/auto/auto-parent/3/auto-parent-3.pom
+6cac9421439b39b9f4aa76738ced039462a69911c410f2c372c196b0f4b7f4cf | https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-val…
+901fb1440a0ef8e0c0553a7bb44c0b89647bf53c8822642eea0b57173c7c688d | https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-val…
+905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
+feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
+1e7f53fa5b8b5c807e986ba335665da03f18d660802d8bf061823089d1bee468 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
+02c12c3c2ae12dd475219ff691c82a4d9ea21f44bc594a181295bf6d43dcfbb0 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
+766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.…
+19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.…
+c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
+a5331a0ecb548f9942ab5b93c7ac43c38a21e897763dde1bcdbf0774f416ca6f | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.pom
+91b9f17a54e6c340c8d3ea4b359401170706eb26a82d51909abe6ba80081aed8 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.2/gson-2.8.2.pom
+233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar
+b8308557a7fccc92d9fe7c8cd0599258b361285d2ecde7689eda98843255a092 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.5/gson-2.8.5.pom
+0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.0/gson-par…
+cf5c43860b53ba5a95c19bc6525cc43d3488a6fe3df2f649c0099a613a0640e3 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.2/gson-par…
+8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.5/gson-par…
+2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
+7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
+cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+03d0329547c13da9e17c634d1049ea2ead093925e290567e1a364fd6b1fc7ff8 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+958cb81c393cb2996c3c6a9e867a4a4be8ddc43391672a9e4e4eba51ac7237f5 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+6ebd22ca1b9d8ec06d41de8d64e0596981d9607b42035f9ed374f9de271a481a | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+5e0258ea1ba4e51a133742680bc22448f7ab214be4073e8619f645ef1be42dd5 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.0.18…
+d52a2616a1389fce951de0e97a780b88f1bdf0c947b315a76fd47cd6bbfb239b | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.1.3/…
+c460902ddf5ece68832c6b271ce52a0928b05cf3a6ac81a8f548c73cbd541138 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.2.0/…
+cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://jcenter.bintray.com/com/google/google/1/google-1.pom
+7baa80df284117e5b945b19b98d367a85ea7b7801bd358ff657946c3bd1b6596 | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.jar
+ac2ac42a7a6b4ce5097c6c83e2fbbacbbb7f9913f1b4f993eb1723a14476324e | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.pom
+a0e9cabad665bc20bcd2b01f108e5fc03f756e13aea80abaadb9f407033bea2c | https://jcenter.bintray.com/com/google/guava/guava/26.0-jre/guava-26.0-jre.…
+1c337adc9a4ab4b844da81da85936581b8946c7cb71284c5dcbdaf1eaa7ee109 | https://jcenter.bintray.com/com/google/guava/guava/26.0-jre/guava-26.0-jre.…
+66cc3a0d329f9fe130605fdb2c901e5a9bb2612f02f23a76757b46e689b3594d | https://jcenter.bintray.com/com/google/guava/guava-parent/23.0/guava-parent…
+bb7d5cd417c0d7def5e3e27092fdd23522d3fc251ad8a07956c13ce0573aeaa3 | https://jcenter.bintray.com/com/google/guava/guava-parent/26.0-jre/guava-pa…
+2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
+f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
+c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
+efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
+c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
+dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
+83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
+4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
+89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
+24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://jcenter.bintray.com/com/google/protobuf/protobuf-parent/3.4.0/proto…
+f715b19c918900ad34be8f2e2372d97b1c5fff579a383f0b2dad9581df443ea4 | https://jcenter.bintray.com/com/koushikdutta/async/androidasync/2.2.1/andro…
+522714e46eb74d494c94e37e17114030e618a7560141720998d82f363d1fcd47 | https://jcenter.bintray.com/com/koushikdutta/async/androidasync/2.2.1/andro…
+4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
+bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
+ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
+e5efcf039cd909688c201dc5479b144fd6f01f0e40252b7fc5e7d2e1b5c07990 | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
+cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
+b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
+daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar
+b3760f40f19e735b2cd418f7656335d926d1d9413e10982a1c9695b64edbb647 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
+f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
+d47fc646324c22c66f2b0e0e743c850dde9a51990c53925e7501d960f2e8df84 | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
+fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
+e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
+1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://jcenter.bintray.com/com/sun/activation/all/1.2.0/all-1.2.0.pom
+993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
+f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
+c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://jcenter.bintray.com/com/sun/istack/istack-commons/2.21/istack-commo…
+c33e67a0807095f02a0e2da139412dd7c4f9cc1a4c054b3e434f96831ba950f4 | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
+ebe7137b5fbfd050545f9a7f3f339ae55beb0b53755071b4fd62aa024c626d1c | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
+b25e0693de21cb92b039a2e4608f396590fb8773108f10d6dc9f1465f03b5be9 | https://jcenter.bintray.com/com/sun/xml/bind/jaxb-bom-ext/2.2.11/jaxb-bom-e…
+b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-parent/2.2.11/jaxb-pa…
+21918cb8e4eda67f24251e909a5d81672201d93604c4ffbf33522ad836a58e90 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.2.11…
+9a398c699a5d3f3b56f1056c68890ede25d94a12d98eabc2a473733e6ab2362c | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-txw-parent/2.2.11/jax…
+27a77db909f3c2833c0b1a37c55af1db06045118ad2eed96ce567b6632bce038 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
+b7505e0ecf7d495b4daa3e6569f71611d1a789dc531cbd92a2025922ff2655d3 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
+fd0857899f1067e0287c2ffd91e38f967a26bd405b83a34650c2742cee9fc261 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/fastinfoset-project/1.2…
+453637054b08115122b7c7b2acf87e912e1613a78f37be3e9e6779cd0830d43e | https://jcenter.bintray.com/de/undercouch/gradle-download-task/3.4.3/gradle…
+c8300fbf69d2240f5eae5a88a76f06f67e7c604d0328813de22b75174879a9e5 | https://jcenter.bintray.com/de/undercouch/gradle-download-task/3.4.3/gradle…
+74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.jar
+953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
+91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar
+943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.pom
+b5e60cd8b7b5ff01ce4a74c5dd008f4fbd14ced3495d0b47b85cfedc182211f2 | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jax…
+2092a7d8d9bc5698c59b094bdea46622915c48c83ae66d5b5ad549c7bf16155b | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jax…
+59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a | https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.jar
+90f163f78e3ffb6f1c7ad97de9e7eba4eea25807141b85d6d12be67ca25449c4 | https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.pom
+281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf | https://jcenter.bintray.com/net/java/jvnet-parent/1/jvnet-parent-1.pom
+30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a | https://jcenter.bintray.com/net/java/jvnet-parent/3/jvnet-parent-3.pom
+471395735549495297c8ff939b9a32e08b91302020ff773586d27e497abb8fbb | https://jcenter.bintray.com/net/java/jvnet-parent/4/jvnet-parent-4.pom
+26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-…
+7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-…
+f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
+31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
+75bc89695fa66e75374ecda439b802406f0ab1d826dd386eed0a23b1f0a9d264 | https://jcenter.bintray.com/net/sf/proguard/proguard-base/6.0.3/proguard-ba…
+2a823d79f2675582a988d539466d1b175e939782efbe0f6e61f06cb165ed4907 | https://jcenter.bintray.com/net/sf/proguard/proguard-base/6.0.3/proguard-ba…
+cc12b1168e521491dd0e687cfebec11a4af874b22af70e10cf2a05b47ca00c8f | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/6.0.3/proguard-…
+5a5c7317d68ce80d1d40c9d8bd4e38814d42d1b16c265146e333634833a35a57 | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/6.0.3/proguard-…
+d87266bfd2312c3b036c4ac709310afa35c448ceb18027c3b87a33d03c6de0a0 | https://jcenter.bintray.com/net/sf/proguard/proguard-parent/6.0.3/proguard-…
+a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
+8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
+401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
+ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://jcenter.bintray.com/org/apache/apache/13/apache-13.pom
+36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494 | https://jcenter.bintray.com/org/apache/apache/15/apache-15.pom
+9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://jcenter.bintray.com/org/apache/apache/16/apache-16.pom
+7831307285fd475bbc36b20ae38e7882f11c3153b1d5930f852d44eda8f33c17 | https://jcenter.bintray.com/org/apache/apache/18/apache-18.pom
+4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://jcenter.bintray.com/org/apache/apache/9/apache-9.pom
+2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://jcenter.bintray.com/org/apache/commons/commons-compress/1.12/common…
+b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://jcenter.bintray.com/org/apache/commons/commons-compress/1.12/common…
+cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b | https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exe…
+82827f6019c0f71bd74fba886ab337ff6da291f63df9723379a209d6ad3b44f8 | https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exe…
+467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://jcenter.bintray.com/org/apache/commons/commons-parent/25/commons-pa…
+e4d258af8b2ff4032148d415379def7870789a6003e80576f1504b10f26b4be8 | https://jcenter.bintray.com/org/apache/commons/commons-parent/32/commons-pa…
+3a2e69d06d641d1f3b293126dc9e2e4ea6563bf8c36c87e0ab6fa4292d04b79c | https://jcenter.bintray.com/org/apache/commons/commons-parent/34/commons-pa…
+7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a | https://jcenter.bintray.com/org/apache/commons/commons-parent/35/commons-pa…
+87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://jcenter.bintray.com/org/apache/commons/commons-parent/39/commons-pa…
+0dffc621400d6c632f55787d996b8aeca36b30746a716e079a985f24d8074057 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.2/http…
+488001ba21829a4b28b0efbed18dccb13689f58f0985453863257049f7ec19f0 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.2/http…
+c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.6/http…
+7efc1241e73e7fbb268bfd33242d11ebd3ca07061d7d85f2962dc32a0f0b8855 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.6/http…
+1de8cba6c1e5c46b28619e335a6fb7204c352dba3e8b1cefb4b59575e2beed01 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
+b042b41f2391edb00d35f7f4e509aed2123648c1d246ce58d0f7b905c9fe1f73 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
+61e9427d4be326c307a7f16ba828d1cb3b14713c9b04fc8ba992a58f376c3136 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-core/4…
+18d9243541c80848d5378bad89fccc5e1bf5c0465b2481d948b0c06851091cdc | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-core/4…
+caaf967d94afb21753f36082c6086206bd1f48825ff596932cceba72b65d39fa | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-parent…
+78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.10/httpc…
+c5c12066df2b3b88a89a2c8602b81ea9a61627e976e5129eea1899ebbaea392b | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.10/httpc…
+64d5453874cab7e40a7065cb01a9a9ca1053845a9786b478878b679e0580cec3 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.5/httpco…
+147fa18df753534e50054d018a360f789902af1e5c24322a3f0b200d0684fed2 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.5/httpco…
+231a3f7e4962053db2be8461d5422e68fc458a3a7dd7d8ada803a348e21f8f07 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.2/httpmi…
+004b5b6272d820029adefcaaa92186ec46a485990b54d03509e441eda85b3784 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.2/httpmi…
+0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.6/httpmi…
+dfbfd6ffe2a784ca9817c46365aa7f8a578320b805bde39d6f55a0b09d8aa8ca | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.6/httpmi…
+3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://jcenter.bintray.com/org/apache/httpcomponents/project/7/project-7.p…
+7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk…
+321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk…
+963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk…
+8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk…
+64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a | https://jcenter.bintray.com/org/checkerframework/checker-qual/2.5.2/checker…
+dc4cd438a36462d013c2338c8e206d102a322a00f33729e8955ee219859c9ede | https://jcenter.bintray.com/org/checkerframework/checker-qual/2.5.2/checker…
+6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://jcenter.bintray.com/org/codehaus/codehaus-parent/4/codehaus-parent-…
+51d6c4e71782e85674239189499854359d380fb75e1a703756e3aaa5b98a5af0 | https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.15/groovy-al…
+fc0d535d7bdb7ca90562321c2e8e2a35c377f113c6dd0b2062282e1f4676367a | https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.15/groovy-al…
+2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.…
+1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.…
+f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-parent/1.14/an…
+3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://jcenter.bintray.com/org/codehaus/mojo/mojo-parent/34/mojo-parent-34…
+a52e6850f070dc9f7a2a51d0b25dfaafd49b0b9bf8196db6c0b3c5b7c94d8d38 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-bom/2.2.11/jaxb-bom-2.2…
+37bcaee8ebb04362c8352a5bf6221b86967ecdab5164c696b10b9a2bb587b2aa | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2…
+ec31409f203bcabf99534f59231ec0576d875d4d4b7349b09566a7a8c8179b24 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2…
+a874f2351cfba8e2946be3002d10c18a6da8f21b52ba2acf52f2b85d5520ed70 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-run…
+e5327b31b595ab8143e97836d5ccdf85feb91e7ff5666f7b26913632facca4aa | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-run…
+272a3ccad45a4511351920cd2a8633c53cab8d5220c7a92954da5526bb5eafea | https://jcenter.bintray.com/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.jar
+8514cb724b4fca59a5cf272b632e539bd0a0f3cacf1844082d0a173a86406bd8 | https://jcenter.bintray.com/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.pom
+66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9 | https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.…
+fde386a7905173a1b103de6ab820727584b50d0e32282e2797787c20a64ffa93 | https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.…
+70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2 | https://jcenter.bintray.com/org/hamcrest/hamcrest-integration/1.3/hamcrest-…
+42f0be9bf98c12dacdcb99dd141d83d4dc5bb7c37a6f26684cd3ff2287667fba | https://jcenter.bintray.com/org/hamcrest/hamcrest-integration/1.3/hamcrest-…
+711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c | https://jcenter.bintray.com/org/hamcrest/hamcrest-library/1.3/hamcrest-libr…
+1ceb4bfb0f098ae29b935044b2363e11323313fe3ed2055df8b79737d5056277 | https://jcenter.bintray.com/org/hamcrest/hamcrest-library/1.3/hamcrest-libr…
+6d535f94efb663bdb682c9f27a50335394688009642ba7a9677504bc1be4129b | https://jcenter.bintray.com/org/hamcrest/hamcrest-parent/1.3/hamcrest-paren…
+1345f11ba606d15603d6740551a8c21947c0215640770ec67271fe78bea97cf5 | https://jcenter.bintray.com/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar
+47b23a79fe336b741b82434c6e049d68165256e405e75c10921fd72fa8a65d8d | https://jcenter.bintray.com/org/jdom/jdom2/2.0.6/jdom2-2.0.6.pom
+ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
+965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
+affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601 | https://jcenter.bintray.com/org/jetbrains/intellij/deps/trove4j/1.0.2018121…
+310a6aa2d90534c32b8f46f1fc98cd0edae95dcdfca23e2847e5efa9ae0c019a | https://jcenter.bintray.com/org/jetbrains/intellij/deps/trove4j/1.0.2018121…
+26d3a8cfaf833c7c463d681e60a9887dff6819d9960936317f0b615b19a11e4f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
+d83267404f53b7d95995cfac7723991e4761e702ae41a88703b1bd202bfcfa21 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
+980965a550c50f424a2c6306dec7d5a0ac94a21e1aa8dbe87f7224774d44113c | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
+f00bc1f5e8d853238d7225ef503f3cc931d91dd1b37007d360f2c2d1b1eaad27 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
+602766a64424203122e9657545da958718f6dbda019081a4cd75047404d32363 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.3.41…
+fc33d0df31e9bbe6b67ff20dc211f396ac55dc350202834b85ecba0df81242e2 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.3.41…
+ea6ab03286a534ab24f123b845a107c7a53b679f6ee56bdc34b5dd1b0fd7b6f4 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-embeddable…
+a630bdc69212fc0ac4a24059089eb246bd4f04f334a6f1e77952b373d0cdad8e | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-embeddable…
+f58cffaec052685c4b7985532c1bf52d9006b2b4ed9679d9c78df8867fc50d57 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.3…
+83918960ee396c0e38132552c48cac0aa3f542ac09ffa974d6f106b5ddf07647 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.3…
+d59d7f617feef6beb880bc9aa6d4c838ebc6f15317e5a98c427815cce8ecfe84 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.3.4…
+e05bebcf2d42073d145e12df19de3163320fbf876986bb53df82b7478679455b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.3.4…
+380b16b2ab673bb9d9341142b51484f97e6614952cc530a48ce34583952ab84f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.4…
+98954d5331ff118a5f2492db6bc73fe947f4a3225c8abd8e106647b5fa17b3e8 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.4…
+57b0e2951fde88baf8ffb92d72c5682c101a7c2c12c6c501a5b47f88f5b08696 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
+dc338b55085bfc4cc2a98dc83c8365dbee976b9d9134ca845d42d0a3d4767937 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
+8a703d706c44996993f9df34b916162b99b81417f7f9d351ca8d205f0325936d | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-model…
+8763bd09455cecf1c9fabea3653bd2ac17bf31a1291a153fefca8e4f28de9043 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-model…
+4f48a872bad6e4d9c053f4ad610d11e4012ad7e58dc19a03dd5eb811f36069dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
+f35215da1bed69e3d60735d76221d7012cd1a5bc0a30f6f7421719ada463b4dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
+a0172daf57e511e8e0df9251b508db8aa6b885cdf0c5849addc9b840db4814f0 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.31/kotl…
+521ea7a6923dba027d808da42cb789da43b332988652f209f45ae85b582abaac | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.31/kotl…
+01d469878c6853a607baaadf869c7474b971abe6dd2cb74f244bea0ffb453c76 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.41/kotl…
+4d0e8480bf227cd23d21d245dc9fe47e92056af5a6f367bc886bf43278c44146 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.41/kotl…
+fe9033bf39eb38d3daed1649f54b3321478901b9891c24482a4a06603d5b137f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-common/1.…
+21253e34109f982b0b1586367e47b5c91bc630f5071e77f5bf3228bb4d4d86de | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-common/1.…
+c2da2d19f569e8369c2f55affa0dee5f50771bc3685697ee948ee29a16d0c3c1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
+024b8b34dbbda4c657bf4c9f68acb45174f9350d4c6542278855124442d491d3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
+854c39cdd705be01956439ae70f44a785cd0ba66388299f98bc0af75db328f29 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
+bd29d1efdfcd51ae20d252ca66f2ea84cf3671ce323cd25518ff44a52c9a5dc1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
+50ad890f1dfa33e9cdeba550fab2e98e88e6f03624461cd11c7f5eb4a41de7a1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.4…
+fda06e8c1b1c47e720a80176f2269e43fc95b849045bf4006b7003c964f68a49 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.4…
+ac184612f258b460b5af4ca47f6bee0bab20a46fa818b86697ba41ef29626a31 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
+9bd39a256bdd9f7a8689f095c7eff85f8504ae03789e12cf20e6bbc689baefd1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
+358700f7a5b932bce30ebb0010641a9cade4b8499a60845717b2e22a39697f92 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/kotli…
+ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
+4c895c270b87f5fec2a2796e1d89c15407ee821de961527c28588bb46afbc68b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
+713db77c9a0c47a670f95c23b0051b9bd942b3a0ea1f6cc9bb5d9eaba1fa75ae | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
+f38c84326543e66ed4895b20fb3ea0fca527fd5a040e1f49d0946ecf3d2b3b23 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotli…
+938182555f87aabdaabfa7ea22f29249a801d0882587fdb36efd6b69ab6d9483 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotli…
+6ea3d0921b26919b286f05cbdb906266666a36f9a7c096197114f7495708ffbc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.41/kotli…
+785b5b66f1146317d5ed5b18c8e0c10f83cd5c909434c799a4da9823f028cd63 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.41/kotli…
+e6f05746ee0366d0b52825a090fac474dcf44082c9083bbb205bd16976488d6c | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotli…
+704fd78960ae046428f69bcd5b951c122e4c180c9400238a866e12cb18494a61 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotli…
+63999687ff2fce8a592dd180ffbbf8f1d21c26b4044c55cdc74ff3cf3b3cf328 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
+a8c3ed5892032b9e9395524a4da2953975c99628b932df3336b25d546e7c6693 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
+d6e9c54c1e6c4df21be9395de558665544c6bdc8f8076ea7518f089f82cd34fc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.3…
+43f118ba3aa72a531d66d64cdd4223fa612b7fac57030ce9148ffb4a55cc3afc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.3…
+6c91dea17d7dce5f0b550c3de3305767e5fb46247b6d1eb7eca0ca1fe18458de | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.4…
+d2e537cd1f7705276242d8cc903a0286b6dc86b41b6e728e967ef719022f2e15 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.4…
+8ce678e88e4ba018b66dacecf952471e4d7dfee156a8a819760a5a5ff29d323c | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.5…
+b6396fe802d7bc76a381485e266cb975f3b2f2d3dd9bf7213aab6ca27a561fc1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.5…
+b136bd61b240e07d4d92ce00d3bd1dbf584400a7bf5f220c2f3cd22446858082 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/…
+941426d95526c828e794791a1da889b62f1f29e0220cf2f2e8dc09b6197080b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/…
+dbf77e6a5626d941450fdc59cbfe24165858403c12789749a2497265269859a3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.31/…
+7c9af71bea2bd234d822216cf826ac3960a16a157e69669e5788485ff2800f68 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.31/…
+ac3c8abf47790b64b4f7e2509a53f0c145e061ac1612a597520535d199946ea9 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
+845c33f0e9ed5f66bca2d7ed39873f3e75920c5e33de984c25c48760f79594b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
+ad6acd219b468a532ac3b3c5aacbfd5db02d0ffcf967e2113e4677e2429490f6 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.31/…
+5cb7c7867f97ce48ef211c79f975b77de5724ac13e0ae27c1da2613929897427 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.31/…
+8f52859322d3c8e38c770ae31a4df9b2896df487fce608f9aff3b640a4026c3c | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-androi…
+7f966ea79ea96db23ef9f52e9670166ea9c6f1080219fc27f27362f87fc2db80 | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-androi…
+ac423f8a0aa4b4e74529696ff82c0171f81a8c8ab182a1965dff25e69c1f7844 | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1…
+82fe57e97f3f91561fe29bca615d45908ecb0ddea3e8d2cb0affd06de964872f | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1…
+9509e8ceba3d4917ec9bbdb74abcfa098d54ab4b86a86b33655ea9837193031d | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1…
+5756b5a320d56c2b500446ea13798ec064eddf759f3da18cd3e1d1691a6b6a87 | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1…
+1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
+5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
+a31ff7d77163c0deb09e7fee59ad35ae44c2cee2cc8552a116ccd1583d813fb4 | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.jar
+27cb450b6c367a00bd8362519907f84defac7b12086c64d4d6e97e33ab873ead | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
+dd8971c74a4e697899a8e95caae4ea8760ea6c486dc6b97b1795e75760420461 | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.jar
+c2bc497e197112e699085426bbb45b1ab0be8002da68267a3b1f450a0312c32e | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.pom
+2f1a6387219c3a6cc4856481f221b03bd9f2408a326d416af09af5d6f608c1f4 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.j…
+d3aaf42e40e3e24aabda53b5de4de5e17cb78e06549bf37312dca6c77e251054 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.p…
+f1bce5c648a96a017bdcd01fe5d59af9845297fd7b79b81c015a6fbbd9719abf | https://jcenter.bintray.com/org/ow2/asm/asm-commons/6.0/asm-commons-6.0.jar
+90f4f29473afb957229016eb5741954976cc1b67bc049b3981c0d1e653ad5cdd | https://jcenter.bintray.com/org/ow2/asm/asm-commons/6.0/asm-commons-6.0.pom
+791d064bb9ecc9a46d43bc9efecd74c91464dfc451f321b802d2261e2ccd7d14 | https://jcenter.bintray.com/org/ow2/asm/asm-parent/6.0/asm-parent-6.0.pom
+887998fb69727c8759e4d253f856822801e33f9fd4caa566b3ac58ee92106215 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.jar
+36887e0d7fdb185a92378a38ea45e596a97f10f385c5d050eb6252454ee701b4 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.pom
+356afebdb0f870175262e5188f8709a3b17aa2a5a6a4b0340b04d4b449bca5f6 | https://jcenter.bintray.com/org/ow2/asm/asm-util/6.0/asm-util-6.0.jar
+3cdfc61f988d167b97503419da82a5808b20f4205aeb46c394e6e7ffd3211f12 | https://jcenter.bintray.com/org/ow2/asm/asm-util/6.0/asm-util-6.0.pom
+51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://jcenter.bintray.com/org/ow2/ow2/1.3/ow2-1.3.pom
+b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
+fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
+d4e441fda1b3ad70b266793cc4b6d02bec8720875b796fadc063fc713f948549 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-android.…
+174d423722256823edbe2af8d7e3385c4645cf72382a22da0485b3b674394f37 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.pom
+3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.jar
+eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.pom
+c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar
+30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.pom
+8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.j…
+1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.p…
+7078b5c8ccb94203df9cc2a463c69cf0021596e6cf966d78fbfd697aaafe0630 | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
+24ae9a6ad8234173ba20eef298fbd56ed3dff618698cedbbe6b0515d24862d0a | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
+429426b2feec2245ffc5e75b3b5309bedb36159cf06dc71843ae43526ac289b6 | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
+e7289037e703c2608f46a727deab8937a312a922537f6d9bdfba5a56cd8da50a | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
+50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
+e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
+d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
+67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
+c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
+c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
+7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
+deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
+0baae9755f7caf52aa80cd04324b91ba93af55d4d1d17dcc9a7b53d99ef7c016 | https://maven.google.com/androidx/annotation/annotation/1.0.0/annotation-1.…
+a179c12db43d9c0300c9db63f4811db496504be5401b951d422b78490ad1e5b4 | https://maven.google.com/androidx/annotation/annotation/1.0.0/annotation-1.…
+52886c0ef6cfa492d07b40c3952201d6d2f0cfc680144fbefc69d2d5cb786c25 | https://maven.google.com/androidx/databinding/databinding-common/3.4.2/data…
+fb5c804e2d81186e9e63e45b7e97eec54aa6f5d502b763abfbb0c57b62b86b4c | https://maven.google.com/androidx/databinding/databinding-common/3.4.2/data…
+770b6a82da0684f93d037ed5d241248cb25862ed14ecd7d9ec8c756153266051 | https://maven.google.com/androidx/databinding/databinding-compiler-common/3…
+6082c0a366fac7506c65d276ecbb25b3a053428a4c1f534cd2568c1f12f23e52 | https://maven.google.com/androidx/databinding/databinding-compiler-common/3…
+7bad7a188804adea6fa1f35d5ef99b705f20bd93ecadde484760ff86b535fefc | https://maven.google.com/androidx/lifecycle/lifecycle-common/2.0.0/lifecycl…
+04d525073469214d0c99e81aaa875dd548ba32b82945abd8326bc50229df700d | https://maven.google.com/androidx/lifecycle/lifecycle-common/2.0.0/lifecycl…
+fda5a08856ec82fc05e4dc37bd4eea93c9d02c231fd828d6b8ce2c6a42f79271 | https://maven.google.com/androidx/test/core/1.1.0/core-1.1.0.aar
+8da5bb4dfb16eef6f181394875f19eda1b967006d55e116d89edfffdabbdfbb6 | https://maven.google.com/androidx/test/core/1.1.0/core-1.1.0.pom
+af9c385fb753e4ee9f7def800dbbc4a25841bec95727e3ef30e9d04d76b73fe9 | https://maven.google.com/androidx/test/espresso/espresso-core/3.1.0/espress…
+3083aa9b88cea441ac67eb8336e0a48549d0729543325f1c01cb5b709213b849 | https://maven.google.com/androidx/test/espresso/espresso-core/3.1.0/espress…
+c1a6a7add4f5d51627539fb8875a6cc3285d51638f6d638ee32f58254861f482 | https://maven.google.com/androidx/test/espresso/espresso-idling-resource/3.…
+5358b36808107018c01956636c602ab8c33ad4534eee89f8710449d5ad19a980 | https://maven.google.com/androidx/test/espresso/espresso-idling-resource/3.…
+8d4733213eeb8d071f969ea5b04f6559dc4e180cdc6fa9254aacdc14a3d3f4b7 | https://maven.google.com/androidx/test/ext/junit/1.1.0/junit-1.1.0.aar
+419d39993f070e881b610787b79780b85d05697ce45667b4a49b671ec12382ca | https://maven.google.com/androidx/test/ext/junit/1.1.0/junit-1.1.0.pom
+f559f4ebbb0a62994991b02f1297da654cf1286f9877ad3310ce068c67fea03a | https://maven.google.com/androidx/test/monitor/1.1.0/monitor-1.1.0.pom
+ecbc74d5eb4a004a676cc26b550ae94bd685a9088b84f6eea42bf320558af237 | https://maven.google.com/androidx/test/monitor/1.1.1/monitor-1.1.1.aar
+31b3930c47a3890ab0071ae16f0cc258bff2f6c7ee33f476e8e994934da41dbc | https://maven.google.com/androidx/test/monitor/1.1.1/monitor-1.1.1.pom
+0c5c87df67b358c1a17765357138ea1d4bb58c61159ae635b4cb4dcaa3bb5986 | https://maven.google.com/androidx/test/rules/1.1.0/rules-1.1.0.aar
+d263d896ba276dcaf2e182a66ce65fb23a2636a008c61d0b28178cffb330c323 | https://maven.google.com/androidx/test/rules/1.1.0/rules-1.1.0.pom
+80ac63609299116f4c1ffa5e206eb75eeac7006013880b47e5b09691a89b4045 | https://maven.google.com/androidx/test/runner/1.1.0/runner-1.1.0.aar
+7d4e4bd35a1e8a18b3c87765866703c4497fef2254f210c5dfea3373d0d4d59c | https://maven.google.com/androidx/test/runner/1.1.0/runner-1.1.0.pom
+5e4f3b90995be63f3c8eeecce120c588a98c6aad3b54f60ad4c80b5418c4b012 | https://maven.google.com/com/android/databinding/baseLibrary/3.4.2/baseLibr…
+63da0e18ab10800d448b0d8ab2171bf9a2e273d06300a7c79fd39d7fa6effee1 | https://maven.google.com/com/android/databinding/baseLibrary/3.4.2/baseLibr…
+271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
+d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
+a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
+d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
+115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
+790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
+bc9e6b0e06ce1205f1db34f0e6193019613d19cfeb54cdccea722340d1c60f26 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
+887ea96fc365743d8735b0446df3fbe77eb5a2e203acab1423346aa3319d8395 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
+93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://maven.google.com/com/android/support/collections/28.0.0/collections…
+f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://maven.google.com/com/android/support/collections/28.0.0/collections…
+27b4e5c0b80d3ff8b92f4c93b3b4d3ecf16c01589f4cdf70ca7cf64cb42d8122 | https://maven.google.com/com/android/support/constraint/constraint-layout/1…
+d48935ae1641774e03ce24b0b3f7aeee66931a1e5d9ad4d47b5f93d237ea07fb | https://maven.google.com/com/android/support/constraint/constraint-layout/1…
+2cafbe356f71c208013d021f32943904798cd6459e5107f9fe27000eb5bc2aef | https://maven.google.com/com/android/support/constraint/constraint-layout-s…
+47be4ebd35a100945bac20b2efba158fe032520229a73bc060ac57986d132dfa | https://maven.google.com/com/android/support/constraint/constraint-layout-s…
+9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
+cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
+87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
+5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
+98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
+187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
+7874ad1904eedc74aa41cffffb7f759d8990056f3bbbc9264911651c67c42f5f | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.aar
+ba16a815266a3b5ce69d57e4c40ba7eb22ee91b8016f2fa3a9d73bd6917e31b4 | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.pom
+47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
+5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
+8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
+424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
+7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
+296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
+920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.aar
+9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.pom
+d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
+351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
+317202dddb953d152d0677dbd8bb3b9d8ef8dcd0bdee0da4f40c98826e4960e6 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
+b609f2c1a2fb3edc2f9ed02214660c90e16103d992307ae531e2a1a5bae82138 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
+75eabe936d1fc3b178450a554c4d433466036f2be6d6dccdf971eac9590fdbf5 | https://maven.google.com/com/android/support/preference-v7/28.0.0/preferenc…
+3c09d39caf1c2b61877d9da5df6fc158bd28a4cc924db58e1936c8fef16ad835 | https://maven.google.com/com/android/support/preference-v7/28.0.0/preferenc…
+4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.aar
+e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.pom
+eb296414c1f6d4c7b522f69fe50588ea85297855db0e7806c24eb4f75409587d | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
+3b280edfcf646b1f51256b2b6b581d8b0194514fd248666c3dfdc0a04edb8686 | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
+d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
+be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
+3eae72fcf02a175efa1377886e6500e6147f92104ff43ee92b9b69d59357b90d | https://maven.google.com/com/android/support/support-annotations/26.1.0/sup…
+5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
+a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
+e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
+6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
+bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
+708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
+c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
+86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
+3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
+d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
+266eff9605f515013eee1ebdbd8818a9270696dc807f34bbcc5fc11fb61a22c7 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
+e88505a92565f4c0fabb1c9a40326a339a2d51ee843c8a097828a3a85c934f27 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
+8b9031381c678d628c9e47b566ae1d161e1c9710f7855c759beeac7596cecf30 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
+428da44d913e410db4dfcf732faa0082283e4eb6563a98a0bfb92022460a4dd4 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
+f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
+1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
+a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
+c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
+45d09fc51284c17bbab300f5122512ac7d7348a6d23bda2051648bbe76cc9aa5 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
+771e8fe3b4dc0be4289db8e542bf134d7a032d8addedea070a3e951dc016d078 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
+60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
+e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
+013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
+080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
+22189a009a57c1741f74deeae5442a101c1c5c8bd6c6404e8e87a7d7f58044e4 | https://maven.google.com/com/android/tools/analytics-library/crash/26.4.2/c…
+aea2ab26c83212e1b81b5d2e91056ea41b1dbbc2f0801bbb3921a405da6bf685 | https://maven.google.com/com/android/tools/analytics-library/crash/26.4.2/c…
+2f371f5b1f551e85ab08be4d6a2873471b3d44afd1ebf6aa3298f3b796bf691f | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
+c7758a7ca3a1d03b26fe4ef14532f4ffbe83c7f28ee3c9146986573fc8b92e3e | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
+39f429bc72340a45ea1b77ade9a4aa11ecebcb2a9dd0bb3619bfedc40800af0e | https://maven.google.com/com/android/tools/analytics-library/protos/26.4.2/…
+ff1ca6ebc2153aaf2ec92880c3240971b4aee894b19bd145f6385fbb18808029 | https://maven.google.com/com/android/tools/analytics-library/protos/26.4.2/…
+4c1e4e705fa4d45f23aaea230557f6508155012d9c296337787c1d7b26a97f5a | https://maven.google.com/com/android/tools/analytics-library/shared/26.2.1/…
+4eacca0543cb52098c7a322b76eb431e1e27ceaaf2094a099dde6c0639a3ef01 | https://maven.google.com/com/android/tools/analytics-library/shared/26.2.1/…
+a3ee9f50da48f12d3677f18372fffdcf51f3c340335e335fb71365c92e31d1de | https://maven.google.com/com/android/tools/analytics-library/shared/26.4.2/…
+95cadcfabab9a6a7e8a2146938de653b559161c098d82a9d34621bbd2b8cdab9 | https://maven.google.com/com/android/tools/analytics-library/shared/26.4.2/…
+4a624ecc976539f755ddb0bb8dfc2dd3d08326cfec59a098dbd70f701ca7fb75 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.2.1…
+fd1923c63290e6cdb1362483218fd140cb15b82ec537d1a50447bb23acd05f90 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.2.1…
+b888eba61ebe734f8e50b60fa1bf38d9144dc031abb3704d6f2b4e445a53196e | https://maven.google.com/com/android/tools/analytics-library/tracker/26.4.2…
+ccfc624a522641d858e7a6477abb698889bd81de584d04b705a737bd59d7c784 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.4.2…
+7391c6a1e080174b96e64ceb078dadd31ce4d8a2d2fee0ec65be202126f90f24 | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
+64d79783e2dffc1fec58146051bdd93a2fca23113a5b8443db6eb1d77dedfdec | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
+1877849936f48cd65857bf448743f9a0bf93ed47fe57527d9ad8af875024888d | https://maven.google.com/com/android/tools/annotations/26.4.2/annotations-2…
+c17bdf198c7609ce6fc63169800b26e366ff3131b8360ca9979c8234eba90c44 | https://maven.google.com/com/android/tools/annotations/26.4.2/annotations-2…
+8e0ae5bfe813ed34a8ddbd8a71cd356d84f0fe70a74a7582c029d4444d9a2cab | https://maven.google.com/com/android/tools/build/aapt2/3.4.2-5326820/aapt2-…
+a7d42baee36d11ebef1d15431ebffed2da98cc088a3aecfdf782463194977368 | https://maven.google.com/com/android/tools/build/aapt2/3.4.2-5326820/aapt2-…
+a503219b89b0aaf7b7c6c9b3b17d69e655a6c619072b684a1ea4fbf1d7dc49da | https://maven.google.com/com/android/tools/build/aapt2-proto/0.3.1/aapt2-pr…
+31e5f0e56b59a7c1433ab4a0396fd6178ef28def6cf6eb58e235d7cf40efd01d | https://maven.google.com/com/android/tools/build/aapt2-proto/0.3.1/aapt2-pr…
+7cb448a8317dc3b82629898c211895862453eee62acb12ad23c32ccdc2c942e2 | https://maven.google.com/com/android/tools/build/apksig/3.4.2/apksig-3.4.2.…
+bf7a23f999b0ad601ff9bf7b1e3987993587e51527e1b00991f4cc85370b2fc1 | https://maven.google.com/com/android/tools/build/apksig/3.4.2/apksig-3.4.2.…
+e00dbbd0997beba194e18d2a62647e42b2e62192652796bcbe5ea9b06687ba5c | https://maven.google.com/com/android/tools/build/apkzlib/3.4.2/apkzlib-3.4.…
+256d360aa2524cebf97cf245b93e175b7062719c68d015297cfef37cfe9930ab | https://maven.google.com/com/android/tools/build/apkzlib/3.4.2/apkzlib-3.4.…
+3d104b1e0083aac49f5ea8d5e0e0cd740dd333bef2683a3214e1cd1953ffd661 | https://maven.google.com/com/android/tools/build/builder/3.4.2/builder-3.4.…
+0e7df1472a90a67d611f17528dfc2b6bcbc9fa7f799573ba79ec4407305a2ad8 | https://maven.google.com/com/android/tools/build/builder/3.4.2/builder-3.4.…
+a9f68e6abcec122f9cb5ad352d3f05a3eb03acbcdca95e4d25c16310c2c965ff | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
+4d2a35833cb9afee4d37b68c16280f8afc64de0e7cecdac1022dbafa2473e31f | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
+ddb36ca7fe72024bd53fbdd2700f1a9a9af5b1502062d59952eb3da7584fe413 | https://maven.google.com/com/android/tools/build/builder-model/3.4.2/builde…
+677521e59c49c5e9c99ae390bab53139d062f05764d7363894c1e1864ef0aff5 | https://maven.google.com/com/android/tools/build/builder-model/3.4.2/builde…
+533ac6c2b5884bb54967a33791f2628dfdfac7981af39417a333b43d4379b6be | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
+16c4e26de8c9ce509a2e81eb4c571d5d6a6e792d9425dbc710dca93793a4e12d | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
+40c62a008da4fa933cb20135227409d2953ed88ed68195e0f631d326c5675c46 | https://maven.google.com/com/android/tools/build/builder-test-api/3.4.2/bui…
+7d96325cc2fef2fa3898d121e936528f987caddbbab7cfddb524c6995b09ab1f | https://maven.google.com/com/android/tools/build/builder-test-api/3.4.2/bui…
+420bb34c44c9e3341583fa90bb4ad331db0b2ed902a5e75b9a420f4edd9f7894 | https://maven.google.com/com/android/tools/build/bundletool/0.7.2/bundletoo…
+e917f5fc3bef4e31107c1aaa0e47781e788be9d86682288f44cd4a3ad17b3459 | https://maven.google.com/com/android/tools/build/bundletool/0.7.2/bundletoo…
+536afc619d2678b80bd7d0b5674be249f05fad349a8717998b69d48f66062fb5 | https://maven.google.com/com/android/tools/build/gradle/3.4.2/gradle-3.4.2.…
+e1d38f808e126ada6b7f77cc1d66e7fce01d1e03941d14e38062d41b7ab37953 | https://maven.google.com/com/android/tools/build/gradle/3.4.2/gradle-3.4.2.…
+e6cddde562483c96b699be25fc91a78e141397e51a382eedae9b2c0e22ea22f5 | https://maven.google.com/com/android/tools/build/gradle-api/3.4.2/gradle-ap…
+cc23bd10f9843e57f6f2bb1f5731ac32e1d73696927f93c3ea2972d76de3b017 | https://maven.google.com/com/android/tools/build/gradle-api/3.4.2/gradle-ap…
+c9f8b016144cfb31c5aee92d47f34de23289167cac5e8ef68365b2dd05766f11 | https://maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0…
+db025ad1bbc6896edf0f67cda1222ba9b7ec9a0187df7f4fd0a318475c758e4e | https://maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0…
+1dd481e7606ccb30868908d9ae80f27d1c5ba882f792532bd91ed731c54f4efb | https://maven.google.com/com/android/tools/build/jetifier/jetifier-processo…
+4973a6c6d7f89297a1cfea56c623cea72b3db3b4a49992afa00dd77ac052b89f | https://maven.google.com/com/android/tools/build/jetifier/jetifier-processo…
+8830573263361035d38cfdcb51e2db94029c93865b21334f5fbf8a27984281a6 | https://maven.google.com/com/android/tools/build/manifest-merger/26.2.1/man…
+56c44bf0b7adc2d174ec5a93502c9188ac3e5c48668a732fbb161d08d54dbe19 | https://maven.google.com/com/android/tools/build/manifest-merger/26.2.1/man…
+86a43c18ab36ae51b997784880492336c009891a05df7b40a574da51031c3f63 | https://maven.google.com/com/android/tools/build/manifest-merger/26.4.2/man…
+d2575b5e4a009a32dddfbae58fc882d54345ca29e1e9d550ac689ab637524b01 | https://maven.google.com/com/android/tools/build/manifest-merger/26.4.2/man…
+4de4a3d05e1c534c2db9e4588bf34082bb2bd232d8abb9727c430290ce225740 | https://maven.google.com/com/android/tools/build/transform-api/2.0.0-deprec…
+7c62f3856e8abca1d79257925f26c12668693f5d95904056bbac88605cfd8575 | https://maven.google.com/com/android/tools/build/transform-api/2.0.0-deprec…
+a50aab2d6411ff68f4004a87c7e93d87d8e980a0ec3b352246549897ea2d78e5 | https://maven.google.com/com/android/tools/common/26.2.1/common-26.2.1.jar
+c5bd83a597baf99567c4469795d155c1928dc738e0eff398d96e38f8ad78b21f | https://maven.google.com/com/android/tools/common/26.2.1/common-26.2.1.pom
+bbda65fe64198125142ecc2079b62835f50ae105e51f34f8349ac129b72efd7c | https://maven.google.com/com/android/tools/common/26.4.2/common-26.4.2.jar
+612f0dcf0c4675737ae8e214bb5b16b8536aaa3cfb786dfa93245e6e8b450e73 | https://maven.google.com/com/android/tools/common/26.4.2/common-26.4.2.pom
+a4bf0a29a19980bf27269465cc782064656750b77c26728f82f9e148b705218b | https://maven.google.com/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1…
+79ba9d3e1f1d5b975a9e29d9261bd449c730f152ed4c5ebb3e297719eff050f0 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1…
+330e3eb76d2f96e3931a8cccdbf16435e92b3398dcaa8b65c8cd1034864de720 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.4.2/ddmlib-26.4.2…
+4aeb9585e81656f358fd1a7a45f8c711a9eef8a61ba88641e76f776cf4f1aa10 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.4.2/ddmlib-26.4.2…
+72a83bf2839b1df9b1fbf67ba45d1bfb9f966cd774da4320c762b2be8f1688aa | https://maven.google.com/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.jar
+1ca1b14c0281275a58b67cd5e3af180d65a105340d89f0766e6bd0eee6047281 | https://maven.google.com/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom
+f34fa4196d78b1c36db2e016303d59935fdc2b1abd0b4e40b95fa63d6087c582 | https://maven.google.com/com/android/tools/dvlib/26.4.2/dvlib-26.4.2.jar
+fe401446f64f3531565ce332b09b0de5ca53134b3263ce931896f3f5d94460bf | https://maven.google.com/com/android/tools/dvlib/26.4.2/dvlib-26.4.2.pom
+4925ad1892c2687cb1a63427d440ef519c8c59215fefe0dc5d541d5d411fcafe | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+7cd28289534ac8effe3c4f18eccffc79eb5774c271da390ba49a34961e692881 | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+890258258338ddfdec138852d099fec389cdcdf1d0a9cb2d0775e4275cb3a05d | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+e772f888bf1cb338f5f6d7801516cb48e31b57f8d81ae07304b0ad1a2cb1c8dc | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+daa064fd708f340ee25fb9823c4c74104ac77f1370b76d907eb9ae6daec0a2ae | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+1ccfc320980199e8bd65bcaa061514711aa7a8a8a46e420bf7be7a441565fb01 | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+f97df41a49d2f9ec428d847b0691b55541d4b5d4db19d630cf8dc3f38cd34d4a | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+7adec4d67ee1ea6cda230bdd549f275c4a5cf08230c9407f632953adc0e26434 | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+f10f7258d2ab9189562cc0f9ad838c0378fdba439229173390a99de02ebac75b | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.2…
+aa377092896a6dc69da9fcc84eecb410b7db12508581c43505bc921d8e90829b | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.2…
+187b199e1744bd3e922fb52d8f3366311468bd263aab24c65ee989d7ce8c55c3 | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.4…
+0f308532ff2c78cfbb61f563cf65e8cf408afb8a615598c512649a9c397177d4 | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.4…
+ddbf4fca123733fa011595b1cc1f4ac2937ed327b60990711fafc33c775c2ade | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
+21e06d8c4fb95d389b66a0613dd8dbb6cc88a336931035b61c6a71db174abca7 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
+52fbb3614feee0d5d474c35f8c533ff3fa090cbf0df46c06e4cf353cae1c3652 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.4.2/l…
+d59ef58abb73f06650ce1d80641fe70a3908a071fc5f98267074e6e42f904360 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.4.2/l…
+7848b82ae988b90dee259ae7c7e86e05cbf52db6cd21c8bbd38ce7df08f3f8c5 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.jar
+445ce6f3c911a11c0f4a1dff662baa5e2a9a6524281a4b60226cf25dd225b548 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.pom
+5eeb74d75aad007428ce5077f2c5c721cc7a2bb702b0525fa9605efad3afd7e8 | https://maven.google.com/com/android/tools/lint/lint/26.4.2/lint-26.4.2.jar
+ac7e208ce2e2bfece25498538c6a16b501a4813818149fc1f0670778b7bd6b24 | https://maven.google.com/com/android/tools/lint/lint/26.4.2/lint-26.4.2.pom
+3b57e739de567b98bc9ab56c2c0ee66fc026b4adf5843e8f9804ca0666a6f66e | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
+8c3ad3303516cfcb96aa367757a429dbd5f6b6fa63e0c3bff4213b63fe76f69b | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
+d12d58c8a2ccb68daa7cbd70a0904b8f05dfdfc6c3a1871923b1b903bf5bf4da | https://maven.google.com/com/android/tools/lint/lint-api/26.4.2/lint-api-26…
+d3cdb948a13f651daf42dba2b488e4cd76092cfc5c00993c653060fb298b7ec8 | https://maven.google.com/com/android/tools/lint/lint-api/26.4.2/lint-api-26…
+c86f4cc9aaee722ee4ad70062f7b5af91e9b041914af27adc09f545ab0fb3bc6 | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
+d5760172fe3dedec8f1304420bc304c0c2cae1ee24972bba7ad9c03bf0ac679e | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
+8a0246f594d685bda999a66b2409cb4e0da59e59a66021c9293fdb40cc49d879 | https://maven.google.com/com/android/tools/lint/lint-checks/26.4.2/lint-che…
+e9327b00b990f6b28f8cc974e98ea4436bbf03e2bc66ea4769970eb26dd840b5 | https://maven.google.com/com/android/tools/lint/lint-checks/26.4.2/lint-che…
+7e8e000f063f42f10ca209f51a48b332db1c4d3ac30979cc49c1877ef9e4b7f1 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.4.2/lint-gra…
+9f370942017e7472655aaff53ad550429e459581adf0c78e5b1fb071f61cb9e3 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.4.2/lint-gra…
+90c6a1a650a257abb5d445dde9c172d55e6d28ce943a35b4e263c4cb3dcc96b0 | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.4.2/lint…
+a8496204c0e7def7adee23e3d0f7ff0117b92c4809ecc8d2c06fc6b18b53e7c6 | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.4.2/lint…
+7a6a5d2b18f69cf1b900d857c2632b4c683713c533295933b8b759f8cab4a877 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
+c4c54f08f4dbdd379d6a9d6d3e1d66e0f2106d849591112742784ae62678b3c2 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
+fa74dae09103faef703df38550ad8fa244c5b6d1bf90d6198be932292b3d9cc1 | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
+eb078adfb208eae7524d00d0ce03196a2c81353db78c7f9613885c19690cf2de | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
+5183d0d2493d588d7960f954221a29130b67f1ac5f78c2d6f69195346b69617a | https://maven.google.com/com/android/tools/repository/26.4.2/repository-26.…
+98702b96fb86f22c1f230316ae8172fd9e843929485bba86a1a01e97614a8434 | https://maven.google.com/com/android/tools/repository/26.4.2/repository-26.…
+759d4b292ca69a35cf961fca377b54158fc6c88108978006999442e80a011cf4 | https://maven.google.com/com/android/tools/sdk-common/26.2.1/sdk-common-26.…
+dabf483508f36704e8a1d7c29cda5135ad9cdb6169f556908182954ee88e0b1f | https://maven.google.com/com/android/tools/sdk-common/26.2.1/sdk-common-26.…
+df1e814bdcee8f60c1057a3df2b2cd6c089623414017283740eb50152f1e70c5 | https://maven.google.com/com/android/tools/sdk-common/26.4.2/sdk-common-26.…
+c7786e12c89c77e4daea2ebb991491821f90364cd5e06a02b56371a42084b3c0 | https://maven.google.com/com/android/tools/sdk-common/26.4.2/sdk-common-26.…
+248df7ad5eac4aeb6f96c394c76760de4b7b89ac056e54d0c21a739368b91b45 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.jar
+7031d2d09683996ac126074be3de6df9b3de80f7e0f10b80a6e8754f69c80028 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom
+ebec9d8e0a140b376aade276b08572cb1f8cf954249b469bee6dce6fd5a45cd4 | https://maven.google.com/com/android/tools/sdklib/26.4.2/sdklib-26.4.2.jar
+768b365f2486e344d012d5b4b9b195fde8bfb442c23dca89d258a7766cdba5c8 | https://maven.google.com/com/android/tools/sdklib/26.4.2/sdklib-26.4.2.pom
+42ebde4e470b5c09c8ef19d452fad3d70459a7a4a8f06ce20114a081343e7e0e | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.2.7/apilint-0.2…
+f1efc89ead9ef1636f072654111abd650f3cb8ce7bb817ce99f15cd969ac3f6c | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.2.7/apilint-0.2…
diff --git a/projects/geckoview/mozconfig-android-aarch64 b/projects/geckoview/mozconfig-android-aarch64
new file mode 100644
index 0000000..dc72f3f
--- /dev/null
+++ b/projects/geckoview/mozconfig-android-aarch64
@@ -0,0 +1,37 @@
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-aarch64-linux-android
+mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
+export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
+
+ac_add_options --with-android-min-sdk=21
+
+ac_add_options --enable-optimize
+ac_add_options --enable-official-branding
+
+ac_add_options --enable-application=mobile/android
+ac_add_options --target=aarch64-linux-android
+ac_add_options --with-android-ndk=/var/tmp/dist/fenix-android-toolchain/android-ndk/android-ndk-r20
+ac_add_options --with-android-sdk=/var/tmp/dist/fenix-android-toolchain/android-sdk-linux
+ac_add_options --with-gradle=/var/tmp/dist/fenix-android-toolchain/gradle/gradle-5.1.1/bin/gradle
+
+# We do not use Tor Launcher on Android:
+ac_add_options --disable-tor-launcher
+
+ac_add_options --disable-tor-browser-update
+ac_add_options --disable-verify-mar
+
+# We only use beta GeckoView for now
+ac_add_options --enable-update-channel=beta
+
+ac_add_options --enable-strip
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+ac_add_options --disable-rust-debug
+ac_add_options --disable-crashreporter
+ac_add_options --disable-webrtc
+
+ac_add_options --enable-proxy-bypass-protection
+
+# Disable telemetry
+ac_add_options MOZ_TELEMETRY_REPORTING=
diff --git a/projects/geckoview/mozconfig-android-all b/projects/geckoview/mozconfig-android-all
new file mode 100644
index 0000000..c92d320
--- /dev/null
+++ b/projects/geckoview/mozconfig-android-all
@@ -0,0 +1,8 @@
+ac_add_options --enable-application=mobile/android
+ac_add_options --disable-compile-environment
+# We want to have a similar fat .aar versioning as Mozilla and make it clear we
+# are on the beta channel for GeckoView
+ac_add_options --enable-update-channel=beta
+
+ac_add_options --with-android-sdk=/var/tmp/dist/fenix-android-toolchain/android-sdk-linux
+ac_add_options --with-gradle=/var/tmp/dist/fenix-android-toolchain/gradle/gradle-5.1.1/bin/gradle
diff --git a/projects/geckoview/mozconfig-android-armv7 b/projects/geckoview/mozconfig-android-armv7
new file mode 100644
index 0000000..36140a5
--- /dev/null
+++ b/projects/geckoview/mozconfig-android-armv7
@@ -0,0 +1,37 @@
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-arm-linux-androideabi
+mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
+export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
+
+ac_add_options --with-android-min-sdk=16
+
+ac_add_options --enable-optimize
+ac_add_options --enable-official-branding
+
+ac_add_options --enable-application=mobile/android
+ac_add_options --target=arm-linux-androideabi
+ac_add_options --with-android-ndk=/var/tmp/dist/fenix-android-toolchain/android-ndk/android-ndk-r20
+ac_add_options --with-android-sdk=/var/tmp/dist/fenix-android-toolchain/android-sdk-linux
+ac_add_options --with-gradle=/var/tmp/dist/fenix-android-toolchain/gradle/gradle-5.1.1/bin/gradle
+
+# We do not use Tor Launcher on Android:
+ac_add_options --disable-tor-launcher
+
+ac_add_options --disable-tor-browser-update
+ac_add_options --disable-verify-mar
+
+# We only use beta GeckoView for now
+ac_add_options --enable-update-channel=beta
+
+ac_add_options --enable-strip
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+ac_add_options --disable-rust-debug
+ac_add_options --disable-crashreporter
+ac_add_options --disable-webrtc
+
+ac_add_options --enable-proxy-bypass-protection
+
+# Disable telemetry
+ac_add_options MOZ_TELEMETRY_REPORTING=
diff --git a/projects/geckoview/mozconfig-android-x86 b/projects/geckoview/mozconfig-android-x86
new file mode 100644
index 0000000..fe703ea
--- /dev/null
+++ b/projects/geckoview/mozconfig-android-x86
@@ -0,0 +1,37 @@
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-i386-linux-android
+mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
+export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
+
+ac_add_options --with-android-min-sdk=16
+
+ac_add_options --enable-optimize
+ac_add_options --enable-official-branding
+
+ac_add_options --enable-application=mobile/android
+ac_add_options --target=i686-linux-android
+ac_add_options --with-android-ndk=/var/tmp/dist/fenix-android-toolchain/android-ndk/android-ndk-r20
+ac_add_options --with-android-sdk=/var/tmp/dist/fenix-android-toolchain/android-sdk-linux
+ac_add_options --with-gradle=/var/tmp/dist/fenix-android-toolchain/gradle/gradle-5.1.1/bin/gradle
+
+# We do not use Tor Launcher on Android:
+ac_add_options --disable-tor-launcher
+
+ac_add_options --disable-tor-browser-update
+ac_add_options --disable-verify-mar
+
+# We only use beta GeckoView for now
+ac_add_options --enable-update-channel=beta
+
+ac_add_options --enable-strip
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+ac_add_options --disable-rust-debug
+ac_add_options --disable-crashreporter
+ac_add_options --disable-webrtc
+
+ac_add_options --enable-proxy-bypass-protection
+
+# Disable telemetry
+ac_add_options MOZ_TELEMETRY_REPORTING=
diff --git a/projects/geckoview/mozconfig-android-x86_64 b/projects/geckoview/mozconfig-android-x86_64
new file mode 100644
index 0000000..cddfc09
--- /dev/null
+++ b/projects/geckoview/mozconfig-android-x86_64
@@ -0,0 +1,37 @@
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-x86_64-linux-android
+mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
+export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
+
+ac_add_options --with-android-min-sdk=21
+
+ac_add_options --enable-optimize
+ac_add_options --enable-official-branding
+
+ac_add_options --enable-application=mobile/android
+ac_add_options --target=x86_64-linux-android
+ac_add_options --with-android-ndk=/var/tmp/dist/fenix-android-toolchain/android-ndk/android-ndk-r20
+ac_add_options --with-android-sdk=/var/tmp/dist/fenix-android-toolchain/android-sdk-linux
+ac_add_options --with-gradle=/var/tmp/dist/fenix-android-toolchain/gradle/gradle-5.1.1/bin/gradle
+
+# We do not use Tor Launcher on Android:
+ac_add_options --disable-tor-launcher
+
+ac_add_options --disable-tor-browser-update
+ac_add_options --disable-verify-mar
+
+# We only use beta GeckoView for now
+ac_add_options --enable-update-channel=beta
+
+ac_add_options --enable-strip
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+ac_add_options --disable-rust-debug
+ac_add_options --disable-crashreporter
+ac_add_options --disable-webrtc
+
+ac_add_options --enable-proxy-bypass-protection
+
+# Disable telemetry
+ac_add_options MOZ_TELEMETRY_REPORTING=
1
0

[tor-browser-build/master] Bug 34386: Fix up clang compilation on Linux
by sysrqb@torproject.org 17 Jul '20
by sysrqb@torproject.org 17 Jul '20
17 Jul '20
commit 8570713a2fa6f01cd68e7d8f6dc232df813720b4
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Jun 8 11:31:38 2020 +0000
Bug 34386: Fix up clang compilation on Linux
We can't build the crt in the compiler-rt project on Linux anymore and
work around it by disabling that part. This is likely yet another sign
of Debian Wheezy showing its age.
Apart from that, we should use our own binutils and not whatever Wheezy
is providing.
---
projects/clang/42574.patch | 236 --------
projects/clang/build | 15 +-
projects/clang/config | 22 +-
projects/clang/timestamp.patch | 54 --
projects/clang/win-patches/llvm-objcopy-1.patch | 27 -
projects/clang/win-patches/llvm-objcopy-10.patch | 28 -
projects/clang/win-patches/llvm-objcopy-11.patch | 377 -------------
projects/clang/win-patches/llvm-objcopy-12.patch | 43 --
projects/clang/win-patches/llvm-objcopy-2.patch | 665 -----------------------
projects/clang/win-patches/llvm-objcopy-3.patch | 160 ------
projects/clang/win-patches/llvm-objcopy-4.patch | 222 --------
projects/clang/win-patches/llvm-objcopy-5.patch | 61 ---
projects/clang/win-patches/llvm-objcopy-6.patch | 242 ---------
projects/clang/win-patches/llvm-objcopy-7.patch | 224 --------
projects/clang/win-patches/llvm-objcopy-8.patch | 330 -----------
projects/clang/win-patches/llvm-objcopy-9.patch | 260 ---------
projects/fenix-clang/build | 3 +
projects/fenix-clang/config | 3 +
18 files changed, 17 insertions(+), 2955 deletions(-)
diff --git a/projects/clang/42574.patch b/projects/clang/42574.patch
deleted file mode 100644
index 285d254..0000000
--- a/projects/clang/42574.patch
+++ /dev/null
@@ -1,236 +0,0 @@
-From 3757213db371dcea53cae357cf9c56d1b0604f98 Mon Sep 17 00:00:00 2001
-From: Alina Sbirlea <asbirlea(a)google.com>
-Date: Fri, 12 Jul 2019 22:30:30 +0000
-Subject: [PATCH] [MemorySSA] Use SetVector to avoid nondeterminism.
-
-Summary:
-Use a SetVector for DeadBlockSet.
-Resolves PR42574.
-
-Reviewers: george.burgess.iv, uabelho, dblaikie
-
-Subscribers: jlebar, Prazek, mgrang, llvm-commits
-
-Tags: #llvm
-
-Differential Revision: https://reviews.llvm.org/D64601
-
-llvm-svn: 365970
-
-diff --git a/llvm/include/llvm/Analysis/MemorySSAUpdater.h b/llvm/include/llvm/Analysis/MemorySSAUpdater.h
-index 169d5bd9fa8..276620bd445 100644
---- a/llvm/include/llvm/Analysis/MemorySSAUpdater.h
-+++ b/llvm/include/llvm/Analysis/MemorySSAUpdater.h
-@@ -32,6 +32,7 @@
- #ifndef LLVM_ANALYSIS_MEMORYSSAUPDATER_H
- #define LLVM_ANALYSIS_MEMORYSSAUPDATER_H
-
-+#include "llvm/ADT/SetVector.h"
- #include "llvm/ADT/SmallPtrSet.h"
- #include "llvm/ADT/SmallSet.h"
- #include "llvm/ADT/SmallVector.h"
-@@ -239,7 +240,7 @@ public:
- /// Deleted blocks still have successor info, but their predecessor edges and
- /// Phi nodes may already be updated. Instructions in DeadBlocks should be
- /// deleted after this call.
-- void removeBlocks(const SmallPtrSetImpl<BasicBlock *> &DeadBlocks);
-+ void removeBlocks(const SmallSetVector<BasicBlock *, 8> &DeadBlocks);
-
- /// Get handle on MemorySSA.
- MemorySSA* getMemorySSA() const { return MSSA; }
-diff --git a/llvm/lib/Analysis/MemorySSAUpdater.cpp b/llvm/lib/Analysis/MemorySSAUpdater.cpp
-index 6c817d20368..a6c7142a697 100644
---- a/llvm/lib/Analysis/MemorySSAUpdater.cpp
-+++ b/llvm/lib/Analysis/MemorySSAUpdater.cpp
-@@ -1101,7 +1101,7 @@ void MemorySSAUpdater::removeMemoryAccess(MemoryAccess *MA) {
- }
-
- void MemorySSAUpdater::removeBlocks(
-- const SmallPtrSetImpl<BasicBlock *> &DeadBlocks) {
-+ const SmallSetVector<BasicBlock *, 8> &DeadBlocks) {
- // First delete all uses of BB in MemoryPhis.
- for (BasicBlock *BB : DeadBlocks) {
- Instruction *TI = BB->getTerminator();
-diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
-index 2e5927f9a06..f464df26a02 100644
---- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
-+++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
-@@ -388,8 +388,8 @@ private:
- void deleteDeadLoopBlocks() {
- DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager);
- if (MSSAU) {
-- SmallPtrSet<BasicBlock *, 8> DeadLoopBlocksSet(DeadLoopBlocks.begin(),
-- DeadLoopBlocks.end());
-+ SmallSetVector<BasicBlock *, 8> DeadLoopBlocksSet(DeadLoopBlocks.begin(),
-+ DeadLoopBlocks.end());
- MSSAU->removeBlocks(DeadLoopBlocksSet);
- }
- for (auto *BB : DeadLoopBlocks) {
-diff --git a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
-index 5a67178cef3..814cf814989 100644
---- a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
-+++ b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
-@@ -1436,8 +1436,8 @@ deleteDeadClonedBlocks(Loop &L, ArrayRef<BasicBlock *> ExitBlocks,
-
- // Remove all MemorySSA in the dead blocks
- if (MSSAU) {
-- SmallPtrSet<BasicBlock *, 16> DeadBlockSet(DeadBlocks.begin(),
-- DeadBlocks.end());
-+ SmallSetVector<BasicBlock *, 8> DeadBlockSet(DeadBlocks.begin(),
-+ DeadBlocks.end());
- MSSAU->removeBlocks(DeadBlockSet);
- }
-
-@@ -1455,7 +1455,7 @@ static void deleteDeadBlocksFromLoop(Loop &L,
- MemorySSAUpdater *MSSAU) {
- // Find all the dead blocks tied to this loop, and remove them from their
- // successors.
-- SmallPtrSet<BasicBlock *, 16> DeadBlockSet;
-+ SmallSetVector<BasicBlock *, 8> DeadBlockSet;
-
- // Start with loop/exit blocks and get a transitive closure of reachable dead
- // blocks.
-diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
-index 499e611acb5..83dabcd7952 100644
---- a/llvm/lib/Transforms/Utils/Local.cpp
-+++ b/llvm/lib/Transforms/Utils/Local.cpp
-@@ -2211,7 +2211,7 @@ bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI,
- assert(Reachable.size() < F.size());
- NumRemoved += F.size()-Reachable.size();
-
-- SmallPtrSet<BasicBlock *, 16> DeadBlockSet;
-+ SmallSetVector<BasicBlock *, 8> DeadBlockSet;
- for (Function::iterator I = ++F.begin(), E = F.end(); I != E; ++I) {
- auto *BB = &*I;
- if (Reachable.count(BB))
-diff --git a/llvm/test/Analysis/MemorySSA/nondeterminism.ll b/llvm/test/Analysis/MemorySSA/nondeterminism.ll
-new file mode 100644
-index 00000000000..0bb3df30b58
---- /dev/null
-+++ b/llvm/test/Analysis/MemorySSA/nondeterminism.ll
-@@ -0,0 +1,122 @@
-+; RUN: opt -simplifycfg -enable-mssa-loop-dependency -S --preserve-ll-uselistorder %s | FileCheck %s
-+; REQUIRES: x86-registered-target
-+; CHECK-LABEL: @n
-+; CHECK: uselistorder i16 0, { 3, 2, 4, 1, 5, 0, 6 }
-+
-+; Note: test was added in an effort to ensure determinism when updating memoryssa. See PR42574.
-+; If the uselistorder check becomes no longer relevant, the test can be disabled or removed.
-+
-+%rec9 = type { i16, i32, i32 }
-+
-+@a = global [1 x [1 x %rec9]] zeroinitializer
-+
-+define i16 @n() {
-+ br label %..split_crit_edge
-+
-+..split_crit_edge: ; preds = %0
-+ br label %.split
-+
-+bb4.us4: ; preds = %bb2.split.us32, %bb6.us28
-+ %i.4.01.us5 = phi i16 [ %_tmp49.us30, %bb6.us28 ]
-+ br label %g.exit4.us21
-+
-+bb1.i.us14: ; preds = %bb4.us4
-+ br label %g.exit4.us21
-+
-+g.exit4.us21: ; preds = %bb1.i.us14, %g.exit4.critedge.us9
-+ %i.4.02.us22 = phi i16 [ %i.4.01.us5, %bb4.us4 ], [ %i.4.01.us5, %bb1.i.us14 ]
-+ br label %bb6.us28
-+
-+bb5.us26: ; preds = %g.exit4.us21
-+ br label %bb6.us28
-+
-+bb6.us28: ; preds = %bb5.us26, %g.exit4.us21
-+ %i.4.03.us29 = phi i16 [ %i.4.02.us22, %bb5.us26 ], [ %i.4.02.us22, %g.exit4.us21 ]
-+ %_tmp49.us30 = add nuw nsw i16 %i.4.03.us29, 1
-+ br label %bb4.us4
-+
-+bb4.us.us: ; preds = %bb2.split.us.us, %bb6.us.us
-+ %i.4.01.us.us = phi i16 [ %_tmp49.us.us, %bb6.us.us ]
-+ br label %bb1.i.us.us
-+
-+bb1.i.us.us: ; preds = %bb4.us.us
-+ br label %g.exit4.us.us
-+
-+g.exit4.us.us: ; preds = %bb1.i.us.us, %g.exit4.critedge.us.us
-+ %i.4.02.us.us = phi i16 [ %i.4.01.us.us, %bb1.i.us.us ]
-+ br label %bb5.us.us
-+
-+bb5.us.us: ; preds = %g.exit4.us.us
-+ br label %bb6.us.us
-+
-+bb6.us.us: ; preds = %bb5.us.us, %g.exit4.us.us
-+ %i.4.03.us.us = phi i16 [ %i.4.02.us.us, %bb5.us.us ]
-+ %_tmp49.us.us = add nuw nsw i16 %i.4.03.us.us, 1
-+ br label %bb4.us.us
-+
-+
-+.split: ; preds = %..split_crit_edge
-+ br label %bb2
-+
-+bb2: ; preds = %.split, %bb7
-+ %h.3.0 = phi i16 [ undef, %.split ], [ %_tmp53, %bb7 ]
-+ br label %bb2.bb2.split_crit_edge
-+
-+bb2.bb2.split_crit_edge: ; preds = %bb2
-+ br label %bb2.split
-+
-+bb2.split.us: ; preds = %bb2
-+ br label %bb4.us
-+
-+bb4.us: ; preds = %bb6.us, %bb2.split.us
-+ %i.4.01.us = phi i16 [ 0, %bb2.split.us ]
-+ br label %bb1.i.us
-+
-+g.exit4.critedge.us: ; preds = %bb4.us
-+ br label %g.exit4.us
-+
-+bb1.i.us: ; preds = %bb4.us
-+ br label %g.exit4.us
-+
-+g.exit4.us: ; preds = %bb1.i.us, %g.exit4.critedge.us
-+ %i.4.02.us = phi i16 [ %i.4.01.us, %g.exit4.critedge.us ], [ %i.4.01.us, %bb1.i.us ]
-+ br label %bb5.us
-+
-+bb5.us: ; preds = %g.exit4.us
-+ br label %bb7
-+
-+bb2.split: ; preds = %bb2.bb2.split_crit_edge
-+ br label %bb4
-+
-+bb4: ; preds = %bb2.split, %bb6
-+ %i.4.01 = phi i16 [ 0, %bb2.split ]
-+ %_tmp16 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 0
-+ %_tmp17 = load i16, i16* %_tmp16, align 1
-+ br label %g.exit4.critedge
-+
-+bb1.i: ; preds = %bb4
-+ br label %g.exit4
-+
-+g.exit4.critedge: ; preds = %bb4
-+ %_tmp28.c = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.01, i32 1
-+ %_tmp29.c = load i32, i32* %_tmp28.c, align 1
-+ %_tmp30.c = trunc i32 %_tmp29.c to i16
-+ br label %g.exit4
-+
-+g.exit4: ; preds = %g.exit4.critedge, %bb1.i
-+ %i.4.02 = phi i16 [ %i.4.01, %g.exit4.critedge ], [ %i.4.01, %bb1.i ]
-+ %_tmp41 = getelementptr [1 x [1 x %rec9]], [1 x [1 x %rec9]]* @a, i16 0, i16 %h.3.0, i16 %i.4.02, i32 2
-+ br label %bb6
-+
-+bb5: ; preds = %g.exit4
-+ br label %bb6
-+
-+bb6: ; preds = %bb5, %g.exit4
-+ %i.4.03 = phi i16 [ %i.4.02, %bb5 ], [ %i.4.02, %g.exit4 ]
-+ %_tmp49 = add nuw nsw i16 %i.4.03, 1
-+ br label %bb7
-+
-+bb7: ; preds = %bb7.us-lcssa.us, %bb7.us-lcssa
-+ %_tmp53 = add nsw i16 %h.3.0, 1
-+ br label %bb2
-+}
---
-2.24.0
-
diff --git a/projects/clang/build b/projects/clang/build
index d95e9af..d61ed43 100644
--- a/projects/clang/build
+++ b/projects/clang/build
@@ -10,11 +10,13 @@ export PATH="/var/tmp/dist/cmake/bin:$PATH"
[% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc'),
hardened_gcc => 0 }) %]
ln -s gcc /var/tmp/dist/gcc/bin/cc
+ tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
+ export PATH="/var/tmp/dist/binutils/bin:$PATH"
[% END -%]
mkdir -p /var/tmp/build
cd /var/tmp/build
tar -xf $rootdir/[% c('input_files_by_name/llvm') %]
-tar -xf $rootdir/[% c('input_files_by_name/cfe') %]
+tar -xf $rootdir/[% c('input_files_by_name/clang') %]
tar -xf $rootdir/[% c('input_files_by_name/libcxx') %]
tar -xf $rootdir/[% c('input_files_by_name/libcxxabi') %]
tar -xf $rootdir/[% c('input_files_by_name/lld') %]
@@ -22,26 +24,19 @@ tar -xf $rootdir/[% c('input_files_by_name/compiler-rt') %]
mv llvm-* llvm
# LLVM has reproducibility issues when optimizing bitcode, which we need to
# patch. See: #32053 for more details.
-patch -p1 < $rootdir/42574.patch
patch -p1 < $rootdir/43909.patch
-mv cfe-* llvm/tools/clang
+mv clang-* llvm/tools/clang
mv libcxx-* llvm/projects/libcxx
mv libcxxabi-* llvm/projects/libcxxabi
mv lld-* llvm/tools/lld
mv compiler-rt-* llvm/projects/compiler-rt
-[% IF c("var/windows") -%]
- # Patch order is important here
- for i in {1..12}
- do git apply $rootdir/win-patches/llvm-objcopy-$i.patch
- done
- patch -p1 -d llvm/tools/lld < $rootdir/timestamp.patch
-[% END %]
cd llvm
export LLVM_HOME=$(pwd)
mkdir build
cd build
cmake .. -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$distdir \
-DCMAKE_BUILD_TYPE:STRING=Release \
+ [% IF c("var/linux") -%]-DCOMPILER_RT_BUILD_CRT=OFF \[% END -%]
[% IF c("var/rlbox") -%]-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \[% END -%]
$LLVM_HOME
make -j[% c("buildconf/num_procs") %]
diff --git a/projects/clang/config b/projects/clang/config
index cf4dcb0..c4b7efc 100644
--- a/projects/clang/config
+++ b/projects/clang/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 8.0.1
+version: 9.0.1
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
gpg_keyring: clang.gpg
sig_ext: sig
@@ -8,26 +8,21 @@ var:
container:
use_container: 1
-targets:
- windows:
- var:
- arch_deps:
- # We use git to apply patches
- - git
-
-
input_files:
- project: container-image
- name: '[% c("var/compiler") %]'
project: '[% c("var/compiler") %]'
enable: '[% c("var/linux") %]'
+ - name: binutils
+ project: binutils
+ enable: '[% c("var/linux") %]'
- project: cmake
name: cmake
- URL: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-[% c("version") %]/llvm-[% c("version") %].src.tar.xz'
name: llvm
file_gpg_id: 1
- - URL: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-[% c("version") %]/cfe-[% c("version") %].src.tar.xz'
- name: cfe
+ - URL: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-[% c("version") %]/clang-[% c("version") %].src.tar.xz'
+ name: clang
file_gpg_id: 1
- URL: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-[% c("version") %]/libcxx-[% c("version") %].src.tar.xz'
name: libcxx
@@ -41,9 +36,4 @@ input_files:
- URL: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-[% c("version") %]/compiler-rt-[% c("version") %].src.tar.xz'
name: compiler-rt
file_gpg_id: 1
- - filename: win-patches
- enable: '[% c("var/windows") %]'
- - filename: timestamp.patch
- enable: '[% c("var/windows") %]'
- - filename: 42574.patch
- filename: 43909.patch
diff --git a/projects/clang/timestamp.patch b/projects/clang/timestamp.patch
deleted file mode 100644
index bea48a2..0000000
--- a/projects/clang/timestamp.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From f4743f40894d1dcd4ba131af3ad86a34c6d54598 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Tue, 5 Feb 2019 08:16:06 +0000
-Subject: [PATCH] Hook up the --no-insert-timestamp option
-
-This fixes PR40582.
-
-Patch by Georg Koppen!
-
-Differential Revision: https://reviews.llvm.org/D57679
-
-git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@353145 91177308-0d34-0410-b5e6-96231b3b80d8
-
-diff --git a/MinGW/Driver.cpp b/MinGW/Driver.cpp
-index 27a5550ec..d79ebe82e 100644
---- a/MinGW/Driver.cpp
-+++ b/MinGW/Driver.cpp
-@@ -170,6 +170,9 @@ bool mingw::link(ArrayRef<const char *> ArgsArr, raw_ostream &Diag) {
- Args.getLastArgValue(OPT_m) != "arm64pe" && !Args.hasArg(OPT_dynamicbase))
- Add("-dynamicbase:no");
-
-+ if (Args.hasArg(OPT_no_insert_timestamp))
-+ Add("-timestamp:0");
-+
- if (Args.hasFlag(OPT_gc_sections, OPT_no_gc_sections, false))
- Add("-opt:ref");
- else
-diff --git a/MinGW/Options.td b/MinGW/Options.td
-index ad699f711..5cc339a4a 100644
---- a/MinGW/Options.td
-+++ b/MinGW/Options.td
-@@ -20,6 +20,8 @@ def l: JoinedOrSeparate<["-"], "l">, MetaVarName<"<libName>">,
- def m: JoinedOrSeparate<["-"], "m">, HelpText<"Set target emulation">;
- def map: S<"Map">, HelpText<"Output a linker map">;
- def map_eq: J<"Map=">, Alias<map>;
-+def no_insert_timestamp: F<"no-insert-timestamp">,
-+ HelpText<"Don't include PE header timestamp">;
- def no_whole_archive: F<"no-whole-archive">,
- HelpText<"No longer include all object files for following archives">;
- def large_address_aware: Flag<["--"], "large-address-aware">,
-diff --git a/test/MinGW/driver.test b/test/MinGW/driver.test
-index 3222bb111..b853527a0 100644
---- a/test/MinGW/driver.test
-+++ b/test/MinGW/driver.test
-@@ -151,3 +151,6 @@ REQUIRE-DEFINED: -include:_foo -include:_bar -include:_baz -include:_foo2
-
- RUN: ld.lld -### -m i386pep foo.o -Llibpath | FileCheck -check-prefix LIBPATH %s
- LIBPATH: -libpath:libpath
-+
-+RUN: ld.lld -### -m i386pep foo.o --no-insert-timestamp | FileCheck -check-prefix NOTIMESTAMP %s
-+NOTIMESTAMP: -timestamp:0
---
-2.23.0.rc1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-1.patch b/projects/clang/win-patches/llvm-objcopy-1.patch
deleted file mode 100644
index 9c9f250..0000000
--- a/projects/clang/win-patches/llvm-objcopy-1.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From a495c9ae6fb3367e6b59d8d245273ed3669754f0 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Sat, 19 Jan 2019 19:42:23 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Remove a superfluous namespace
- qualification. NFC.
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351658 91177308-0d34-0410-b5e6-96231b3b80d8
----
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index ceebf600b3a..437dccbd3d5 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -78,7 +78,7 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- }
-
- void executeObjcopyOnBinary(const CopyConfig &Config,
-- object::COFFObjectFile &In, Buffer &Out) {
-+ COFFObjectFile &In, Buffer &Out) {
- COFFReader Reader(In);
- Expected<std::unique_ptr<Object>> ObjOrErr = Reader.create();
- if (!ObjOrErr)
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-10.patch b/projects/clang/win-patches/llvm-objcopy-10.patch
deleted file mode 100644
index 4aca911..0000000
--- a/projects/clang/win-patches/llvm-objcopy-10.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 1284ee3c47bab17ec081b5169633aea4f8abfd30 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Wed, 23 Jan 2019 09:12:53 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Clear the unwritten tail of
- coff_section::Header::Name
-
-This should fix the add-gnu-debuglink test on all buildbots.
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351934 91177308-0d34-0410-b5e6-96231b3b80d8
----
- tools/llvm-objcopy/COFF/Writer.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index 05e46291c39..db897e2ff33 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -121,6 +121,7 @@ size_t COFFWriter::finalizeStringTable() {
-
- for (auto &S : Obj.getMutableSections()) {
- if (S.Name.size() > COFF::NameSize) {
-+ memset(S.Header.Name, 0, sizeof(S.Header.Name));
- snprintf(S.Header.Name, sizeof(S.Header.Name), "/%d",
- (int)StrTabBuilder.getOffset(S.Name));
- } else {
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-11.patch b/projects/clang/win-patches/llvm-objcopy-11.patch
deleted file mode 100644
index 9149b80..0000000
--- a/projects/clang/win-patches/llvm-objcopy-11.patch
+++ /dev/null
@@ -1,377 +0,0 @@
-From 74c7d422cba163635394ec32f2b243b1de502a18 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Wed, 23 Jan 2019 11:54:51 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Fix handling of aux symbols for big
- objects
-
-The aux symbols were stored in an opaque std::vector<uint8_t>,
-with contents interpreted according to the rest of the symbol.
-
-All aux symbol types but one fit in 18 bytes (sizeof(coff_symbol16)),
-and if written to a bigobj, two extra padding bytes are written (as
-sizeof(coff_symbol32) is 20). In the storage agnostic intermediate
-representation, store the aux symbols as a series of coff_symbol16
-sized opaque blobs. (In practice, all such aux symbols only consist
-of one aux symbol, so this is more flexible than what reality needs.)
-
-The special case is the file aux symbols, which are written in
-potentially more than one aux symbol slot, without any padding,
-as one single long string. This can't be stored in the same opaque
-vector of fixed sized aux symbol entries. The file aux symbols will
-occupy a different number of aux symbol slots depending on the type
-of output object file. As nothing in the intermediate process needs
-to have accurate raw symbol indices, updating that is moved into the
-writer class.
-
-Differential Revision: https://reviews.llvm.org/D57009
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351947 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../llvm-objcopy/COFF/Inputs/bigobj.o.gz | Bin 0 -> 7841 bytes
- test/tools/llvm-objcopy/COFF/bigobj.test | 35 +++++++++++++
- .../llvm-objcopy/ELF/auto-remove-shndx.test | 2 +-
- .../tools/llvm-objcopy/ELF/many-sections.test | 2 +-
- test/tools/llvm-objcopy/ELF/remove-shndx.test | 2 +-
- .../tools/llvm-objcopy/ELF/strict-no-add.test | 2 +-
- .../llvm-objcopy/{ELF => }/Inputs/ungzip.py | 0
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 6 +--
- tools/llvm-objcopy/COFF/Object.cpp | 6 +--
- tools/llvm-objcopy/COFF/Object.h | 18 ++++++-
- tools/llvm-objcopy/COFF/Reader.cpp | 21 ++++++--
- tools/llvm-objcopy/COFF/Writer.cpp | 49 +++++++++++++-----
- tools/llvm-objcopy/COFF/Writer.h | 2 +-
- 13 files changed, 115 insertions(+), 30 deletions(-)
- create mode 100644 test/tools/llvm-objcopy/COFF/Inputs/bigobj.o.gz
- create mode 100644 test/tools/llvm-objcopy/COFF/bigobj.test
- rename test/tools/llvm-objcopy/{ELF => }/Inputs/ungzip.py (100%)
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/Inputs/bigobj.o.gz b/llvm/test/tools/llvm-objcopy/COFF/Inputs/bigobj.o.gz
-new file mode 100644
-index 0000000000000000000000000000000000000000..6435f4785ff76e0c6bca12f3e57bc6ad8888bece
-GIT binary patch
-literal 7841
-zcmb2|=3r3v^@w3&etUMmo^zoH`-kGKM_vfJsF<z%6+Sz#g6qq)pf0Hj#_r`4B7DML
-zW(h1l`+!x)t@&W-R@I~lyKmU3Ti&1Z=iKur;uBMy1MR!_ywlsouYY&-*4H1mU!Qw=
-z`RpIDkw;!V4(WOF_)B3`(Vt|~S>?L-b)Wx@^wig`HIMAw|N8V<v65oeyETs611{)_
-zm27RwTe)ENN|7SLgM~83N6}~qjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
-zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kgRokHNw|D97mKRo|%+Z6Ym
-z*X{Ku$4#4*Vqm}gyYR^b^Sc?_E*<<cFE#Q=*rt6OBmJeLZ=aoe_u9R>-w!^l5biDe
-p{d@nvw*mU6<NG83=jxn4_wt_G?yUy#YeOF~KhH^=cj<;Y0{~9Br>p<~
-
-literal 0
-HcmV?d00001
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/bigobj.test b/llvm/test/tools/llvm-objcopy/COFF/bigobj.test
-new file mode 100644
-index 00000000000..17968f12b8a
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/bigobj.test
-@@ -0,0 +1,35 @@
-+RUN: %python %p/../Inputs/ungzip.py %p/Inputs/bigobj.o.gz > %t.in.o
-+
-+RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-BIG,SYMBOLS-ORIG
-+
-+# Do a plain copy, to check that section numbers in symbols referring
-+# to sections outside of the small object format are handled correctly.
-+RUN: llvm-objcopy -R '.text$4' %t.in.o %t.small.o
-+RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-BIG,SYMBOLS-ORIG
-+
-+# Remove a section, making the section count fit into a small object.
-+RUN: llvm-objcopy -R '.text$4' %t.in.o %t.small.o
-+RUN: llvm-objdump -t %t.small.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-SMALL,SYMBOLS-REMOVED-SMALL
-+
-+# Add a .gnu_debuglink section, forcing the object back to big format.
-+RUN: llvm-objcopy --add-gnu-debuglink=%t.in.o %t.small.o %t.big.o
-+ llvm-objdump -t %t.big.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-BIG,SYMBOLS-REMOVED-BIG
-+
-+# In big object format, the .file symbol occupies one symbol table entry for
-+# the auxillary data, but needs two entries in the small format, forcing the
-+# raw symbol indices of later symbols to change.
-+SYMBOLS: SYMBOL TABLE:
-+SYMBOLS-NEXT: [ 0]{{.*}} (nx 1) {{.*}} .text
-+SYMBOLS-NEXT: AUX scnlen
-+SYMBOLS-SMALL-NEXT: [ 2]{{.*}} (nx 2) {{.*}} .file
-+SYMBOLS-BIG-NEXT: [ 2]{{.*}} (nx 1) {{.*}} .file
-+SYMBOLS-NEXT: AUX abcdefghijklmnopqrs
-+SYMBOLS-SMALL-NEXT: [ 5]{{.*}} (nx 0) {{.*}} foo
-+SYMBOLS-BIG-NEXT: [ 4]{{.*}} (nx 0) {{.*}} foo
-+
-+# Check that the section numbers outside of signed 16 bit int range
-+# are represented properly. After removing one section, the section
-+# numbers decrease.
-+SYMBOLS-ORIG: [ 5](sec 65280){{.*}} symbol65280
-+SYMBOLS-REMOVED-SMALL: [ 6](sec 65279){{.*}} symbol65280
-+SYMBOLS-REMOVED-BIG: [ 5](sec 65279){{.*}} symbol65280
-diff --git a/llvm/test/tools/llvm-objcopy/ELF/auto-remove-shndx.test b/llvm/test/tools/llvm-objcopy/ELF/auto-remove-shndx.test
-index 5a23493fa94..8e6c788bf48 100644
---- a/llvm/test/tools/llvm-objcopy/ELF/auto-remove-shndx.test
-+++ b/llvm/test/tools/llvm-objcopy/ELF/auto-remove-shndx.test
-@@ -1,4 +1,4 @@
--# RUN: %python %p/Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t
-+# RUN: %python %p/../Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t
- # RUN: llvm-objcopy -R .text -R s0 -R s1 -R s2 -R s3 -R s4 -R s5 -R s6 %t %t2
- # RUN: llvm-readobj --sections %t2 | FileCheck --check-prefix=SECS %s
-
-diff --git a/llvm/test/tools/llvm-objcopy/ELF/many-sections.test b/llvm/test/tools/llvm-objcopy/ELF/many-sections.test
-index 57239f32e4a..1dd41cfb10c 100644
---- a/llvm/test/tools/llvm-objcopy/ELF/many-sections.test
-+++ b/llvm/test/tools/llvm-objcopy/ELF/many-sections.test
-@@ -1,4 +1,4 @@
--RUN: %python %p/Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t
-+RUN: %python %p/../Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t
- RUN: llvm-objcopy %t %t2
- RUN: llvm-readobj --file-headers %t2 | FileCheck --check-prefix=EHDR %s
- RUN: llvm-readobj --sections %t2 | FileCheck --check-prefix=SECS %s
-diff --git a/llvm/test/tools/llvm-objcopy/ELF/remove-shndx.test b/llvm/test/tools/llvm-objcopy/ELF/remove-shndx.test
-index 6cc3a1a291f..53ca8e7f220 100644
---- a/llvm/test/tools/llvm-objcopy/ELF/remove-shndx.test
-+++ b/llvm/test/tools/llvm-objcopy/ELF/remove-shndx.test
-@@ -1,6 +1,6 @@
- # This test checks to see that a .symtab_shndx section is added to any binary
- # that needs it, even if the original was removed.
--RUN: %python %p/Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t
-+RUN: %python %p/../Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t
- RUN: llvm-objcopy -R .symtab_shndx %t %t2
- RUN: llvm-readobj --sections %t2 | FileCheck %s
-
-diff --git a/llvm/test/tools/llvm-objcopy/ELF/strict-no-add.test b/llvm/test/tools/llvm-objcopy/ELF/strict-no-add.test
-index 4f24df31bf9..348ab7c4fbd 100644
---- a/llvm/test/tools/llvm-objcopy/ELF/strict-no-add.test
-+++ b/llvm/test/tools/llvm-objcopy/ELF/strict-no-add.test
-@@ -1,7 +1,7 @@
- # This test makes sure that sections added at the end that don't have symbols
- # defined in them don't trigger the creation of a large index table.
-
--RUN: %python %p/Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t.0
-+RUN: %python %p/../Inputs/ungzip.py %p/Inputs/many-sections.o.gz > %t.0
- RUN: cat %p/Inputs/alloc-symtab.o > %t
- RUN: llvm-objcopy -R .text -R s0 -R s1 -R s2 -R s3 -R s4 -R s5 -R s6 %t.0 %t2
- RUN: llvm-objcopy --add-section=.s0=%t --add-section=.s1=%t --add-section=.s2=%t %t2 %t2
-diff --git a/llvm/test/tools/llvm-objcopy/ELF/Inputs/ungzip.py b/llvm/test/tools/llvm-objcopy/Inputs/ungzip.py
-similarity index 100%
-rename from llvm/test/tools/llvm-objcopy/ELF/Inputs/ungzip.py
-rename to llvm/test/tools/llvm-objcopy/Inputs/ungzip.py
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 20adbe11e7a..64b4e79a4e0 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -37,7 +37,7 @@ static uint64_t getNextRVA(const Object &Obj) {
- return 0;
- const Section &Last = Obj.getSections().back();
- return alignTo(Last.Header.VirtualAddress + Last.Header.VirtualSize,
-- Obj.PeHeader.SectionAlignment);
-+ Obj.IsPE ? Obj.PeHeader.SectionAlignment : 1);
- }
-
- static uint32_t getCRC32(StringRef Data) {
-@@ -74,8 +74,8 @@ static void addGnuDebugLink(Object &Obj, StringRef DebugLinkFile) {
- Sec.Name = ".gnu_debuglink";
- Sec.Header.VirtualSize = Sec.getContents().size();
- Sec.Header.VirtualAddress = StartRVA;
-- Sec.Header.SizeOfRawData =
-- alignTo(Sec.Header.VirtualSize, Obj.PeHeader.FileAlignment);
-+ Sec.Header.SizeOfRawData = alignTo(Sec.Header.VirtualSize,
-+ Obj.IsPE ? Obj.PeHeader.FileAlignment : 1);
- // Sec.Header.PointerToRawData is filled in by the writer.
- Sec.Header.PointerToRelocations = 0;
- Sec.Header.PointerToLinenumbers = 0;
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.cpp b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-index 8c382c1faef..0ad5a05a144 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-@@ -26,12 +26,8 @@ void Object::addSymbols(ArrayRef<Symbol> NewSymbols) {
-
- void Object::updateSymbols() {
- SymbolMap = DenseMap<size_t, Symbol *>(Symbols.size());
-- size_t RawSymIndex = 0;
-- for (Symbol &Sym : Symbols) {
-+ for (Symbol &Sym : Symbols)
- SymbolMap[Sym.UniqueId] = &Sym;
-- Sym.RawIndex = RawSymIndex;
-- RawSymIndex += 1 + Sym.Sym.NumberOfAuxSymbols;
-- }
- }
-
- const Symbol *Object::findSymbol(size_t UniqueId) const {
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.h b/llvm/tools/llvm-objcopy/COFF/Object.h
-index afa272286ef..21475b06862 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.h
-@@ -66,10 +66,24 @@ private:
- std::vector<uint8_t> OwnedContents;
- };
-
-+struct AuxSymbol {
-+ AuxSymbol(ArrayRef<uint8_t> In) {
-+ assert(In.size() == sizeof(Opaque));
-+ std::copy(In.begin(), In.end(), Opaque);
-+ }
-+
-+ ArrayRef<uint8_t> getRef() const {
-+ return ArrayRef<uint8_t>(Opaque, sizeof(Opaque));
-+ }
-+
-+ uint8_t Opaque[sizeof(object::coff_symbol16)];
-+};
-+
- struct Symbol {
- object::coff_symbol32 Sym;
- StringRef Name;
-- std::vector<uint8_t> AuxData;
-+ std::vector<AuxSymbol> AuxData;
-+ StringRef AuxFile;
- ssize_t TargetSectionId;
- ssize_t AssociativeComdatTargetSectionId = 0;
- Optional<size_t> WeakTargetSymbolId;
-@@ -132,7 +146,7 @@ private:
-
- ssize_t NextSectionUniqueId = 1; // Allow a UniqueId 0 to mean undefined.
-
-- // Update SymbolMap and RawIndex in each Symbol.
-+ // Update SymbolMap.
- void updateSymbols();
-
- // Update SectionMap and Index in each Section.
-diff --git a/llvm/tools/llvm-objcopy/COFF/Reader.cpp b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-index 87dd60a43cf..7270bbf94de 100644
---- a/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-@@ -107,9 +107,24 @@ Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
- *reinterpret_cast<const coff_symbol16 *>(SymRef.getRawPtr()));
- if (auto EC = COFFObj.getSymbolName(SymRef, Sym.Name))
- return errorCodeToError(EC);
-- Sym.AuxData = COFFObj.getSymbolAuxData(SymRef);
-- assert((Sym.AuxData.size() %
-- (IsBigObj ? sizeof(coff_symbol32) : sizeof(coff_symbol16))) == 0);
-+
-+ ArrayRef<uint8_t> AuxData = COFFObj.getSymbolAuxData(SymRef);
-+ size_t SymSize = IsBigObj ? sizeof(coff_symbol32) : sizeof(coff_symbol16);
-+ assert(AuxData.size() == SymSize * SymRef.getNumberOfAuxSymbols());
-+ // The auxillary symbols are structs of sizeof(coff_symbol16) each.
-+ // In the big object format (where symbols are coff_symbol32), each
-+ // auxillary symbol is padded with 2 bytes at the end. Copy each
-+ // auxillary symbol to the Sym.AuxData vector. For file symbols,
-+ // the whole range of aux symbols are interpreted as one null padded
-+ // string instead.
-+ if (SymRef.isFileRecord())
-+ Sym.AuxFile = StringRef(reinterpret_cast<const char *>(AuxData.data()),
-+ AuxData.size())
-+ .rtrim('\0');
-+ else
-+ for (size_t I = 0; I < SymRef.getNumberOfAuxSymbols(); I++)
-+ Sym.AuxData.push_back(AuxData.slice(I * SymSize, sizeof(AuxSymbol)));
-+
- // Find the unique id of the section
- if (SymRef.getSectionNumber() <=
- 0) // Special symbol (undefined/absolute/debug)
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index db897e2ff33..6e69c597217 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -55,7 +55,8 @@ Error COFFWriter::finalizeSymbolContents() {
- if (Sym.Sym.NumberOfAuxSymbols == 1 &&
- Sym.Sym.StorageClass == IMAGE_SYM_CLASS_STATIC) {
- coff_aux_section_definition *SD =
-- reinterpret_cast<coff_aux_section_definition *>(Sym.AuxData.data());
-+ reinterpret_cast<coff_aux_section_definition *>(
-+ Sym.AuxData[0].Opaque);
- uint32_t SDSectionNumber;
- if (Sym.AssociativeComdatTargetSectionId == 0) {
- // Not a comdat associative section; just set the Number field to
-@@ -79,7 +80,7 @@ Error COFFWriter::finalizeSymbolContents() {
- // we want to set. Only >= 1 would be required, but only == 1 makes sense.
- if (Sym.WeakTargetSymbolId && Sym.Sym.NumberOfAuxSymbols == 1) {
- coff_aux_weak_external *WE =
-- reinterpret_cast<coff_aux_weak_external *>(Sym.AuxData.data());
-+ reinterpret_cast<coff_aux_weak_external *>(Sym.AuxData[0].Opaque);
- const Symbol *Target = Obj.findSymbol(*Sym.WeakTargetSymbolId);
- if (Target == nullptr)
- return createStringError(object_error::invalid_symbol_index,
-@@ -141,13 +142,26 @@ size_t COFFWriter::finalizeStringTable() {
-
- template <class SymbolTy>
- std::pair<size_t, size_t> COFFWriter::finalizeSymbolTable() {
-- size_t SymTabSize = Obj.getSymbols().size() * sizeof(SymbolTy);
-- for (const auto &S : Obj.getSymbols())
-- SymTabSize += S.AuxData.size();
-- return std::make_pair(SymTabSize, sizeof(SymbolTy));
-+ size_t RawSymIndex = 0;
-+ for (auto &S : Obj.getMutableSymbols()) {
-+ // Symbols normally have NumberOfAuxSymbols set correctly all the time.
-+ // For file symbols, we need to know the output file's symbol size to be
-+ // able to calculate the number of slots it occupies.
-+ if (!S.AuxFile.empty())
-+ S.Sym.NumberOfAuxSymbols =
-+ alignTo(S.AuxFile.size(), sizeof(SymbolTy)) / sizeof(SymbolTy);
-+ S.RawIndex = RawSymIndex;
-+ RawSymIndex += 1 + S.Sym.NumberOfAuxSymbols;
-+ }
-+ return std::make_pair(RawSymIndex * sizeof(SymbolTy), sizeof(SymbolTy));
- }
-
- Error COFFWriter::finalize(bool IsBigObj) {
-+ size_t SymTabSize, SymbolSize;
-+ std::tie(SymTabSize, SymbolSize) = IsBigObj
-+ ? finalizeSymbolTable<coff_symbol32>()
-+ : finalizeSymbolTable<coff_symbol16>();
-+
- if (Error E = finalizeRelocTargets())
- return E;
- if (Error E = finalizeSymbolContents())
-@@ -199,10 +213,6 @@ Error COFFWriter::finalize(bool IsBigObj) {
- }
-
- size_t StrTabSize = finalizeStringTable();
-- size_t SymTabSize, SymbolSize;
-- std::tie(SymTabSize, SymbolSize) = IsBigObj
-- ? finalizeSymbolTable<coff_symbol32>()
-- : finalizeSymbolTable<coff_symbol16>();
-
- size_t PointerToSymbolTable = FileSize;
- // StrTabSize <= 4 is the size of an empty string table, only consisting
-@@ -312,8 +322,23 @@ template <class SymbolTy> void COFFWriter::writeSymbolStringTables() {
- copySymbol<SymbolTy, coff_symbol32>(*reinterpret_cast<SymbolTy *>(Ptr),
- S.Sym);
- Ptr += sizeof(SymbolTy);
-- std::copy(S.AuxData.begin(), S.AuxData.end(), Ptr);
-- Ptr += S.AuxData.size();
-+ if (!S.AuxFile.empty()) {
-+ // For file symbols, just write the string into the aux symbol slots,
-+ // assuming that the unwritten parts are initialized to zero in the memory
-+ // mapped file.
-+ std::copy(S.AuxFile.begin(), S.AuxFile.end(), Ptr);
-+ Ptr += S.Sym.NumberOfAuxSymbols * sizeof(SymbolTy);
-+ } else {
-+ // For other auxillary symbols, write their opaque payload into one symbol
-+ // table slot each. For big object files, the symbols are larger than the
-+ // opaque auxillary symbol struct and we leave padding at the end of each
-+ // entry.
-+ for (const AuxSymbol &AuxSym : S.AuxData) {
-+ ArrayRef<uint8_t> Ref = AuxSym.getRef();
-+ std::copy(Ref.begin(), Ref.end(), Ptr);
-+ Ptr += sizeof(SymbolTy);
-+ }
-+ }
- }
- if (StrTabBuilder.getSize() > 4 || !Obj.IsPE) {
- // Always write a string table in object files, even an empty one.
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.h b/llvm/tools/llvm-objcopy/COFF/Writer.h
-index 9b1cfa91d00..681a8d5e4a6 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.h
-@@ -30,11 +30,11 @@ class COFFWriter {
- size_t SizeOfInitializedData;
- StringTableBuilder StrTabBuilder;
-
-+ template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
- Error finalizeRelocTargets();
- Error finalizeSymbolContents();
- void layoutSections();
- size_t finalizeStringTable();
-- template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
-
- Error finalize(bool IsBigObj);
-
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-12.patch b/projects/clang/win-patches/llvm-objcopy-12.patch
deleted file mode 100644
index 35dec30..0000000
--- a/projects/clang/win-patches/llvm-objcopy-12.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From abacd83232acf69d7cbacd53fc2f9aae66c1a32e Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Wed, 23 Jan 2019 11:54:55 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Error out on use of unhandled options
-
-Prefer erroring out than silently not doing what was requested.
-
-Differential Revision: https://reviews.llvm.org/D57045
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351948 91177308-0d34-0410-b5e6-96231b3b80d8
----
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
-
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 64b4e79a4e0..b7b3d3cb629 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -170,6 +170,21 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- if (!Config.AddGnuDebugLink.empty())
- addGnuDebugLink(Obj, Config.AddGnuDebugLink);
-
-+ if (!Config.BuildIdLinkDir.empty() || Config.BuildIdLinkInput ||
-+ Config.BuildIdLinkOutput || !Config.SplitDWO.empty() ||
-+ !Config.SymbolsPrefix.empty() || !Config.AddSection.empty() ||
-+ !Config.DumpSection.empty() || !Config.KeepSection.empty() ||
-+ !Config.SymbolsToGlobalize.empty() || !Config.SymbolsToKeep.empty() ||
-+ !Config.SymbolsToLocalize.empty() || !Config.SymbolsToWeaken.empty() ||
-+ !Config.SymbolsToKeepGlobal.empty() || !Config.SectionsToRename.empty() ||
-+ !Config.SymbolsToRename.empty() || Config.ExtractDWO ||
-+ Config.KeepFileSymbols || Config.LocalizeHidden || Config.PreserveDates ||
-+ Config.StripDWO || Config.StripNonAlloc || Config.StripSections ||
-+ Config.Weaken || Config.DecompressDebugSections) {
-+ return createStringError(llvm::errc::invalid_argument,
-+ "Option not supported by llvm-objcopy for COFF");
-+ }
-+
- return Error::success();
- }
-
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-2.patch b/projects/clang/win-patches/llvm-objcopy-2.patch
deleted file mode 100644
index 41e7a94..0000000
--- a/projects/clang/win-patches/llvm-objcopy-2.patch
+++ /dev/null
@@ -1,665 +0,0 @@
-From 2ccafacb7ddd740054dbee06655749ebc55a4d86 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Sat, 19 Jan 2019 19:42:35 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Add support for removing sections
-
-Differential Revision: https://reviews.llvm.org/D56683
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351660 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../llvm-objcopy/COFF/remove-section.test | 210 ++++++++++++++++++
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 10 +-
- tools/llvm-objcopy/COFF/Object.cpp | 63 ++++++
- tools/llvm-objcopy/COFF/Object.h | 27 ++-
- tools/llvm-objcopy/COFF/Reader.cpp | 31 ++-
- tools/llvm-objcopy/COFF/Writer.cpp | 68 ++++--
- tools/llvm-objcopy/COFF/Writer.h | 1 +
- 7 files changed, 391 insertions(+), 19 deletions(-)
- create mode 100644 test/tools/llvm-objcopy/COFF/remove-section.test
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/remove-section.test b/llvm/test/tools/llvm-objcopy/COFF/remove-section.test
-new file mode 100644
-index 00000000000..b3dfb0b98cb
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/remove-section.test
-@@ -0,0 +1,210 @@
-+# RUN: yaml2obj %s > %t.in.o
-+#
-+# RUN: llvm-objdump -section-headers %t.in.o | FileCheck %s --check-prefixes=SECTIONS-PRE
-+# RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS-PRE
-+#
-+# RUN: llvm-objcopy -R .bss %t.in.o %t.remove-bss.o
-+# RUN: llvm-objdump -section-headers %t.remove-bss.o | FileCheck %s --check-prefix=SECTIONS-REMOVE-BSS
-+# RUN: llvm-objdump -t %t.remove-bss.o | FileCheck %s --check-prefix=SYMBOLS-REMOVE-BSS
-+#
-+# RUN: llvm-objcopy --remove-section .bss %t.in.o %t.cmp.o
-+# RUN: cmp %t.remove-bss.o %t.cmp.o
-+#
-+# RUN: llvm-objcopy -R .text %t.in.o %t.remove-text.o
-+# RUN: llvm-objdump -section-headers %t.remove-text.o | FileCheck %s --check-prefix=SECTIONS-REMOVE-TEXT
-+# RUN: llvm-objdump -t %t.remove-text.o | FileCheck %s --check-prefix=SYMBOLS-REMOVE-TEXT
-+#
-+# RUN: not llvm-objcopy -R .comdat %t.in.o %t.remove-comdat.o 2>&1 | FileCheck %s --check-prefix=ERROR-RELOC
-+#
-+# RUN: llvm-objcopy -R .text -R .comdat %t.in.o %t.remove-text-comdat.o
-+# RUN: llvm-objdump -section-headers %t.remove-text-comdat.o | FileCheck %s --check-prefix=SECTIONS-REMOVE-TEXT-COMDAT
-+# RUN: llvm-objdump -t %t.remove-text-comdat.o | FileCheck %s --check-prefix=SYMBOLS-REMOVE-TEXT-COMDAT
-+#
-+#
-+# SECTIONS-PRE: Sections:
-+# SECTIONS-PRE-NEXT: Idx Name
-+# SECTIONS-PRE-NEXT: 0 .text
-+# SECTIONS-PRE-NEXT: 1 .bss
-+# SECTIONS-PRE-NEXT: 2 .comdat
-+# SECTIONS-PRE-NEXT: 3 .associative
-+# SECTIONS-PRE-EMPTY:
-+#
-+# SYMBOLS-PRE: SYMBOL TABLE:
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec -1){{.*}} @feat.00
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec 1){{.*}} .text
-+# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec 2){{.*}} .bss
-+# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 2 comdat 0
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec 4){{.*}} .associative
-+# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 3 comdat 5
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec 3){{.*}} .comdat
-+# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 3 comdat 2
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec 3){{.*}} foo
-+# SYMBOLS-PRE-NEXT: {{.*}}(sec 1){{.*}} main
-+# SYMBOLS-PRE-EMPTY:
-+#
-+#
-+# Removing the .bss section removes one symbol and its aux symbol,
-+# and updates the section indices in symbols pointing to later
-+# symbols, including the aux section defintitions.
-+#
-+# Testing that the absolute symbol @feat.00 survives the section number
-+# mangling.
-+#
-+# SECTIONS-REMOVE-BSS: Sections:
-+# SECTIONS-REMOVE-BSS-NEXT: Idx Name
-+# SECTIONS-REMOVE-BSS-NEXT: 0 .text
-+# SECTIONS-REMOVE-BSS-NEXT: 1 .comdat
-+# SECTIONS-REMOVE-BSS-NEXT: 2 .associative
-+# SECTIONS-REMOVE-BSS-EMPTY:
-+#
-+# SYMBOLS-REMOVE-BSS: SYMBOL TABLE:
-+# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec -1){{.*}} @feat.00
-+# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 1){{.*}} .text
-+# SYMBOLS-REMOVE-BSS-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0
-+# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 3){{.*}} .associative
-+# SYMBOLS-REMOVE-BSS-NEXT: AUX scnlen {{.*}} assoc 2 comdat 5
-+# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 2){{.*}} .comdat
-+# SYMBOLS-REMOVE-BSS-NEXT: AUX scnlen {{.*}} assoc 2 comdat 2
-+# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 2){{.*}} foo
-+# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 1){{.*}} main
-+# SYMBOLS-REMOVE-BSS-EMPTY:
-+#
-+#
-+# Removing the .text section is ok and just removes the external symbol
-+# referring to it.
-+#
-+# SECTIONS-REMOVE-TEXT: Sections:
-+# SECTIONS-REMOVE-TEXT-NEXT: Idx Name
-+# SECTIONS-REMOVE-TEXT-NEXT: 0 .bss
-+# SECTIONS-REMOVE-TEXT-NEXT: 1 .comdat
-+# SECTIONS-REMOVE-TEXT-NEXT: 2 .associative
-+# SECTIONS-REMOVE-TEXT-EMPTY:
-+#
-+# SYMBOLS-REMOVE-TEXT: SYMBOL TABLE:
-+# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec -1){{.*}} @feat.00
-+# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 1){{.*}} .bss
-+# SYMBOLS-REMOVE-TEXT-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0
-+# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 3){{.*}} .associative
-+# SYMBOLS-REMOVE-TEXT-NEXT: AUX scnlen {{.*}} assoc 2 comdat 5
-+# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 2){{.*}} .comdat
-+# SYMBOLS-REMOVE-TEXT-NEXT: AUX scnlen {{.*}} assoc 2 comdat 2
-+# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 2){{.*}} foo
-+# SYMBOLS-REMOVE-TEXT-EMPTY:
-+#
-+#
-+# Removing the .comdat section fails, since the .text section has relocations
-+# against it.
-+#
-+# ERROR-RELOC: Relocation target foo ({{.*}}) not found
-+#
-+#
-+# Removing the .comdat section and .text (with a relocation against .comdat)
-+# works, as it also removes the .associative section transitively.
-+#
-+# SECTIONS-REMOVE-TEXT-COMDAT: Sections:
-+# SECTIONS-REMOVE-TEXT-COMDAT-NEXT: Idx Name
-+# SECTIONS-REMOVE-TEXT-COMDAT-NEXT: 0 .bss
-+# SECTIONS-REMOVE-TEXT-COMDAT-EMPTY:
-+#
-+# SYMBOLS-REMOVE-TEXT-COMDAT: SYMBOL TABLE:
-+# SYMBOLS-REMOVE-TEXT-COMDAT-NEXT: {{.*}}(sec -1){{.*}} @feat.00
-+# SYMBOLS-REMOVE-TEXT-COMDAT-NEXT: {{.*}}(sec 1){{.*}} .bss
-+# SYMBOLS-REMOVE-TEXT-COMDAT-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0
-+# SYMBOLS-REMOVE-TEXT-COMDAT-EMPTY:
-+
-+--- !COFF
-+header:
-+ Machine: IMAGE_FILE_MACHINE_AMD64
-+ Characteristics: [ ]
-+sections:
-+ - Name: .text
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: 488B0500000000C3
-+ Relocations:
-+ - VirtualAddress: 3
-+ SymbolName: foo
-+ Type: IMAGE_REL_AMD64_REL32
-+ - Name: .bss
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: ''
-+ - Name: .comdat
-+ Characteristics: [ IMAGE_SCN_LNK_COMDAT ]
-+ Alignment: 1
-+ SectionData: '2A000000'
-+ - Name: .associative
-+ Characteristics: [ IMAGE_SCN_LNK_COMDAT ]
-+ Alignment: 1
-+ SectionData: '0000000000000000'
-+symbols:
-+ - Name: '@feat.00'
-+ Value: 0
-+ SectionNumber: -1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_STATIC
-+ - Name: .text
-+ Value: 0
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_STATIC
-+ SectionDefinition:
-+ Length: 8
-+ NumberOfRelocations: 1
-+ NumberOfLinenumbers: 0
-+ CheckSum: 583624169
-+ Number: 1
-+ - Name: .bss
-+ Value: 0
-+ SectionNumber: 2
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_STATIC
-+ SectionDefinition:
-+ Length: 0
-+ NumberOfRelocations: 0
-+ NumberOfLinenumbers: 0
-+ CheckSum: 0
-+ Number: 2
-+ - Name: .associative
-+ Value: 0
-+ SectionNumber: 4
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_STATIC
-+ SectionDefinition:
-+ Length: 8
-+ NumberOfRelocations: 0
-+ NumberOfLinenumbers: 0
-+ CheckSum: 0
-+ Number: 3
-+ Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
-+ - Name: .comdat
-+ Value: 0
-+ SectionNumber: 3
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_STATIC
-+ SectionDefinition:
-+ Length: 4
-+ NumberOfRelocations: 0
-+ NumberOfLinenumbers: 0
-+ CheckSum: 3482275674
-+ Number: 3
-+ Selection: IMAGE_COMDAT_SELECT_ANY
-+ - Name: foo
-+ Value: 0
-+ SectionNumber: 3
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: main
-+ Value: 0
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+...
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 437dccbd3d5..dd2e4829218 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -27,9 +27,17 @@ using namespace object;
- using namespace COFF;
-
- static Error handleArgs(const CopyConfig &Config, Object &Obj) {
-+ // Perform the actual section removals.
-+ Obj.removeSections([&Config](const Section &Sec) {
-+ if (is_contained(Config.ToRemove, Sec.Name))
-+ return true;
-+
-+ return false;
-+ });
-+
- // StripAll removes all symbols and thus also removes all relocations.
- if (Config.StripAll || Config.StripAllGNU)
-- for (Section &Sec : Obj.Sections)
-+ for (Section &Sec : Obj.getMutableSections())
- Sec.Relocs.clear();
-
- // If we need to do per-symbol removals, initialize the Referenced field.
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.cpp b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-index e58e161e7d2..e19cea6aa9d 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-@@ -7,6 +7,7 @@
- //===----------------------------------------------------------------------===//
-
- #include "Object.h"
-+#include "llvm/ADT/DenseSet.h"
- #include <algorithm>
-
- namespace llvm {
-@@ -64,6 +65,68 @@ Error Object::markSymbols() {
- return Error::success();
- }
-
-+void Object::addSections(ArrayRef<Section> NewSections) {
-+ for (Section S : NewSections) {
-+ S.UniqueId = NextSectionUniqueId++;
-+ Sections.emplace_back(S);
-+ }
-+ updateSections();
-+}
-+
-+void Object::updateSections() {
-+ SectionMap = DenseMap<ssize_t, Section *>(Sections.size());
-+ size_t Index = 1;
-+ for (Section &S : Sections) {
-+ SectionMap[S.UniqueId] = &S;
-+ S.Index = Index++;
-+ }
-+}
-+
-+const Section *Object::findSection(ssize_t UniqueId) const {
-+ auto It = SectionMap.find(UniqueId);
-+ if (It == SectionMap.end())
-+ return nullptr;
-+ return It->second;
-+}
-+
-+void Object::removeSections(function_ref<bool(const Section &)> ToRemove) {
-+ DenseSet<ssize_t> AssociatedSections;
-+ auto RemoveAssociated = [&AssociatedSections](const Section &Sec) {
-+ return AssociatedSections.count(Sec.UniqueId) == 1;
-+ };
-+ do {
-+ DenseSet<ssize_t> RemovedSections;
-+ Sections.erase(
-+ std::remove_if(std::begin(Sections), std::end(Sections),
-+ [ToRemove, &RemovedSections](const Section &Sec) {
-+ bool Remove = ToRemove(Sec);
-+ if (Remove)
-+ RemovedSections.insert(Sec.UniqueId);
-+ return Remove;
-+ }),
-+ std::end(Sections));
-+ // Remove all symbols referring to the removed sections.
-+ AssociatedSections.clear();
-+ Symbols.erase(
-+ std::remove_if(
-+ std::begin(Symbols), std::end(Symbols),
-+ [&RemovedSections, &AssociatedSections](const Symbol &Sym) {
-+ // If there are sections that are associative to a removed
-+ // section,
-+ // remove those as well as nothing will include them (and we can't
-+ // leave them dangling).
-+ if (RemovedSections.count(Sym.AssociativeComdatTargetSectionId) ==
-+ 1)
-+ AssociatedSections.insert(Sym.TargetSectionId);
-+ return RemovedSections.count(Sym.TargetSectionId) == 1;
-+ }),
-+ std::end(Symbols));
-+ ToRemove = RemoveAssociated;
-+ } while (!AssociatedSections.empty());
-+ updateSections();
-+ updateSymbols();
-+}
-+
- } // end namespace coff
- } // end namespace objcopy
- } // end namespace llvm
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.h b/llvm/tools/llvm-objcopy/COFF/Object.h
-index e6147c40b7c..a73e93620d3 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.h
-@@ -37,12 +37,16 @@ struct Section {
- ArrayRef<uint8_t> Contents;
- std::vector<Relocation> Relocs;
- StringRef Name;
-+ ssize_t UniqueId;
-+ size_t Index;
- };
-
- struct Symbol {
- object::coff_symbol32 Sym;
- StringRef Name;
-- ArrayRef<uint8_t> AuxData;
-+ std::vector<uint8_t> AuxData;
-+ ssize_t TargetSectionId;
-+ ssize_t AssociativeComdatTargetSectionId = 0;
- size_t UniqueId;
- size_t RawIndex;
- bool Referenced;
-@@ -61,7 +65,6 @@ struct Object {
- uint32_t BaseOfData = 0; // pe32plus_header lacks this field.
-
- std::vector<object::data_directory> DataDirectories;
-- std::vector<Section> Sections;
-
- ArrayRef<Symbol> getSymbols() const { return Symbols; }
- // This allows mutating individual Symbols, but not mutating the list
-@@ -79,14 +82,34 @@ struct Object {
- // all sections.
- Error markSymbols();
-
-+ ArrayRef<Section> getSections() const { return Sections; }
-+ // This allows mutating individual Sections, but not mutating the list
-+ // of symbols itself.
-+ iterator_range<std::vector<Section>::iterator> getMutableSections() {
-+ return make_range(Sections.begin(), Sections.end());
-+ }
-+
-+ const Section *findSection(ssize_t UniqueId) const;
-+
-+ void addSections(ArrayRef<Section> NewSections);
-+ void removeSections(function_ref<bool(const Section &)> ToRemove);
-+
- private:
- std::vector<Symbol> Symbols;
- DenseMap<size_t, Symbol *> SymbolMap;
-
- size_t NextSymbolUniqueId = 0;
-
-+ std::vector<Section> Sections;
-+ DenseMap<ssize_t, Section *> SectionMap;
-+
-+ ssize_t NextSectionUniqueId = 1; // Allow a UniqueId 0 to mean undefined.
-+
- // Update SymbolMap and RawIndex in each Symbol.
- void updateSymbols();
-+
-+ // Update SectionMap and Index in each Section.
-+ void updateSections();
- };
-
- // Copy between coff_symbol16 and coff_symbol32.
-diff --git a/llvm/tools/llvm-objcopy/COFF/Reader.cpp b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-index d794042ae24..c8abe2913a2 100644
---- a/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-@@ -11,6 +11,7 @@
- #include "llvm-objcopy.h"
- #include "llvm/ADT/ArrayRef.h"
- #include "llvm/ADT/StringRef.h"
-+#include "llvm/BinaryFormat/COFF.h"
- #include "llvm/Object/COFF.h"
- #include "llvm/Support/ErrorHandling.h"
- #include <cstddef>
-@@ -21,6 +22,7 @@ namespace objcopy {
- namespace coff {
-
- using namespace object;
-+using namespace COFF;
-
- Error COFFReader::readExecutableHeaders(Object &Obj) const {
- const dos_header *DH = COFFObj.getDOSHeader();
-@@ -58,13 +60,14 @@ Error COFFReader::readExecutableHeaders(Object &Obj) const {
- }
-
- Error COFFReader::readSections(Object &Obj) const {
-+ std::vector<Section> Sections;
- // Section indexing starts from 1.
- for (size_t I = 1, E = COFFObj.getNumberOfSections(); I <= E; I++) {
- const coff_section *Sec;
- if (auto EC = COFFObj.getSection(I, Sec))
- return errorCodeToError(EC);
-- Obj.Sections.push_back(Section());
-- Section &S = Obj.Sections.back();
-+ Sections.push_back(Section());
-+ Section &S = Sections.back();
- S.Header = *Sec;
- if (auto EC = COFFObj.getSectionContents(Sec, S.Contents))
- return errorCodeToError(EC);
-@@ -77,12 +80,14 @@ Error COFFReader::readSections(Object &Obj) const {
- return make_error<StringError>("Extended relocations not supported yet",
- object_error::parse_failed);
- }
-+ Obj.addSections(Sections);
- return Error::success();
- }
-
- Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
- std::vector<Symbol> Symbols;
- Symbols.reserve(COFFObj.getRawNumberOfSymbols());
-+ ArrayRef<Section> Sections = Obj.getSections();
- for (uint32_t I = 0, E = COFFObj.getRawNumberOfSymbols(); I < E;) {
- Expected<COFFSymbolRef> SymOrErr = COFFObj.getSymbol(I);
- if (!SymOrErr)
-@@ -103,6 +108,26 @@ Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
- Sym.AuxData = COFFObj.getSymbolAuxData(SymRef);
- assert((Sym.AuxData.size() %
- (IsBigObj ? sizeof(coff_symbol32) : sizeof(coff_symbol16))) == 0);
-+ // Find the unique id of the section
-+ if (SymRef.getSectionNumber() <=
-+ 0) // Special symbol (undefined/absolute/debug)
-+ Sym.TargetSectionId = SymRef.getSectionNumber();
-+ else if (static_cast<uint32_t>(SymRef.getSectionNumber() - 1) <
-+ Sections.size())
-+ Sym.TargetSectionId = Sections[SymRef.getSectionNumber() - 1].UniqueId;
-+ else
-+ return make_error<StringError>("Section number out of range",
-+ object_error::parse_failed);
-+ // For section definitions, check if it is comdat associative, and if
-+ // it is, find the target section unique id.
-+ const coff_aux_section_definition *SD = SymRef.getSectionDefinition();
-+ if (SD && SD->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
-+ int32_t Index = SD->getNumber(IsBigObj);
-+ if (Index <= 0 || static_cast<uint32_t>(Index - 1) >= Sections.size())
-+ return make_error<StringError>("Unexpected associative section index",
-+ object_error::parse_failed);
-+ Sym.AssociativeComdatTargetSectionId = Sections[Index - 1].UniqueId;
-+ }
- I += 1 + SymRef.getNumberOfAuxSymbols();
- }
- Obj.addSymbols(Symbols);
-@@ -116,7 +141,7 @@ Error COFFReader::setRelocTargets(Object &Obj) const {
- for (size_t I = 0; I < Sym.Sym.NumberOfAuxSymbols; I++)
- RawSymbolTable.push_back(nullptr);
- }
-- for (Section &Sec : Obj.Sections) {
-+ for (Section &Sec : Obj.getMutableSections()) {
- for (Relocation &R : Sec.Relocs) {
- if (R.Reloc.SymbolTableIndex >= RawSymbolTable.size())
- return make_error<StringError>("SymbolTableIndex out of range",
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index c347810dd24..9fb7812672b 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -25,7 +25,7 @@ using namespace object;
- using namespace COFF;
-
- Error COFFWriter::finalizeRelocTargets() {
-- for (Section &Sec : Obj.Sections) {
-+ for (Section &Sec : Obj.getMutableSections()) {
- for (Relocation &R : Sec.Relocs) {
- const Symbol *Sym = Obj.findSymbol(R.Target);
- if (Sym == nullptr)
-@@ -39,8 +39,48 @@ Error COFFWriter::finalizeRelocTargets() {
- return Error::success();
- }
-
-+Error COFFWriter::finalizeSectionNumbers() {
-+ for (Symbol &Sym : Obj.getMutableSymbols()) {
-+ if (Sym.TargetSectionId <= 0) {
-+ // Undefined, or a special kind of symbol. These negative values
-+ // are stored in the SectionNumber field which is unsigned.
-+ Sym.Sym.SectionNumber = static_cast<uint32_t>(Sym.TargetSectionId);
-+ } else {
-+ const Section *Sec = Obj.findSection(Sym.TargetSectionId);
-+ if (Sec == nullptr)
-+ return make_error<StringError>("Symbol " + Sym.Name +
-+ " points to a removed section",
-+ object_error::invalid_symbol_index);
-+ Sym.Sym.SectionNumber = Sec->Index;
-+
-+ if (Sym.Sym.NumberOfAuxSymbols == 1 &&
-+ Sym.Sym.StorageClass == IMAGE_SYM_CLASS_STATIC) {
-+ coff_aux_section_definition *SD =
-+ reinterpret_cast<coff_aux_section_definition *>(Sym.AuxData.data());
-+ uint32_t SDSectionNumber;
-+ if (Sym.AssociativeComdatTargetSectionId == 0) {
-+ // Not a comdat associative section; just set the Number field to
-+ // the number of the section itself.
-+ SDSectionNumber = Sec->Index;
-+ } else {
-+ Sec = Obj.findSection(Sym.AssociativeComdatTargetSectionId);
-+ if (Sec == nullptr)
-+ return make_error<StringError>(
-+ "Symbol " + Sym.Name + " is associative to a removed section",
-+ object_error::invalid_symbol_index);
-+ SDSectionNumber = Sec->Index;
-+ }
-+ // Update the section definition with the new section number.
-+ SD->NumberLowPart = static_cast<uint16_t>(SDSectionNumber);
-+ SD->NumberHighPart = static_cast<uint16_t>(SDSectionNumber >> 16);
-+ }
-+ }
-+ }
-+ return Error::success();
-+}
-+
- void COFFWriter::layoutSections() {
-- for (auto &S : Obj.Sections) {
-+ for (auto &S : Obj.getMutableSections()) {
- if (S.Header.SizeOfRawData > 0)
- S.Header.PointerToRawData = FileSize;
- FileSize += S.Header.SizeOfRawData; // For executables, this is already
-@@ -57,7 +97,7 @@ void COFFWriter::layoutSections() {
- }
-
- size_t COFFWriter::finalizeStringTable() {
-- for (auto &S : Obj.Sections)
-+ for (const auto &S : Obj.getSections())
- if (S.Name.size() > COFF::NameSize)
- StrTabBuilder.add(S.Name);
-
-@@ -67,7 +107,7 @@ size_t COFFWriter::finalizeStringTable() {
-
- StrTabBuilder.finalize();
-
-- for (auto &S : Obj.Sections) {
-+ for (auto &S : Obj.getMutableSections()) {
- if (S.Name.size() > COFF::NameSize) {
- snprintf(S.Header.Name, sizeof(S.Header.Name), "/%d",
- (int)StrTabBuilder.getOffset(S.Name));
-@@ -97,6 +137,8 @@ std::pair<size_t, size_t> COFFWriter::finalizeSymbolTable() {
- Error COFFWriter::finalize(bool IsBigObj) {
- if (Error E = finalizeRelocTargets())
- return E;
-+ if (Error E = finalizeSectionNumbers())
-+ return E;
-
- size_t SizeOfHeaders = 0;
- FileAlignment = 1;
-@@ -113,10 +155,10 @@ Error COFFWriter::finalize(bool IsBigObj) {
- SizeOfHeaders +=
- PeHeaderSize + sizeof(data_directory) * Obj.DataDirectories.size();
- }
-- Obj.CoffFileHeader.NumberOfSections = Obj.Sections.size();
-+ Obj.CoffFileHeader.NumberOfSections = Obj.getSections().size();
- SizeOfHeaders +=
- IsBigObj ? sizeof(coff_bigobj_file_header) : sizeof(coff_file_header);
-- SizeOfHeaders += sizeof(coff_section) * Obj.Sections.size();
-+ SizeOfHeaders += sizeof(coff_section) * Obj.getSections().size();
- SizeOfHeaders = alignTo(SizeOfHeaders, FileAlignment);
-
- Obj.CoffFileHeader.SizeOfOptionalHeader =
-@@ -131,8 +173,8 @@ Error COFFWriter::finalize(bool IsBigObj) {
- Obj.PeHeader.SizeOfHeaders = SizeOfHeaders;
- Obj.PeHeader.SizeOfInitializedData = SizeOfInitializedData;
-
-- if (!Obj.Sections.empty()) {
-- const Section &S = Obj.Sections.back();
-+ if (!Obj.getSections().empty()) {
-+ const Section &S = Obj.getSections().back();
- Obj.PeHeader.SizeOfImage =
- alignTo(S.Header.VirtualAddress + S.Header.VirtualSize,
- Obj.PeHeader.SectionAlignment);
-@@ -198,7 +240,7 @@ void COFFWriter::writeHeaders(bool IsBigObj) {
- BigObjHeader.unused4 = 0;
- // The value in Obj.CoffFileHeader.NumberOfSections is truncated, thus
- // get the original one instead.
-- BigObjHeader.NumberOfSections = Obj.Sections.size();
-+ BigObjHeader.NumberOfSections = Obj.getSections().size();
- BigObjHeader.PointerToSymbolTable = Obj.CoffFileHeader.PointerToSymbolTable;
- BigObjHeader.NumberOfSymbols = Obj.CoffFileHeader.NumberOfSymbols;
-
-@@ -223,14 +265,14 @@ void COFFWriter::writeHeaders(bool IsBigObj) {
- Ptr += sizeof(DD);
- }
- }
-- for (const auto &S : Obj.Sections) {
-+ for (const auto &S : Obj.getSections()) {
- memcpy(Ptr, &S.Header, sizeof(S.Header));
- Ptr += sizeof(S.Header);
- }
- }
-
- void COFFWriter::writeSections() {
-- for (const auto &S : Obj.Sections) {
-+ for (const auto &S : Obj.getSections()) {
- uint8_t *Ptr = Buf.getBufferStart() + S.Header.PointerToRawData;
- std::copy(S.Contents.begin(), S.Contents.end(), Ptr);
-
-@@ -295,7 +337,7 @@ Error COFFWriter::patchDebugDirectory() {
- const data_directory *Dir = &Obj.DataDirectories[DEBUG_DIRECTORY];
- if (Dir->Size <= 0)
- return Error::success();
-- for (const auto &S : Obj.Sections) {
-+ for (const auto &S : Obj.getSections()) {
- if (Dir->RelativeVirtualAddress >= S.Header.VirtualAddress &&
- Dir->RelativeVirtualAddress <
- S.Header.VirtualAddress + S.Header.SizeOfRawData) {
-@@ -324,7 +366,7 @@ Error COFFWriter::patchDebugDirectory() {
- }
-
- Error COFFWriter::write() {
-- bool IsBigObj = Obj.Sections.size() > MaxNumberOfSections16;
-+ bool IsBigObj = Obj.getSections().size() > MaxNumberOfSections16;
- if (IsBigObj && Obj.IsPE)
- return make_error<StringError>("Too many sections for executable",
- object_error::parse_failed);
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.h b/llvm/tools/llvm-objcopy/COFF/Writer.h
-index 52fef385926..a967a103df9 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.h
-@@ -31,6 +31,7 @@ class COFFWriter {
- StringTableBuilder StrTabBuilder;
-
- Error finalizeRelocTargets();
-+ Error finalizeSectionNumbers();
- void layoutSections();
- size_t finalizeStringTable();
- template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-3.patch b/projects/clang/win-patches/llvm-objcopy-3.patch
deleted file mode 100644
index 6e303c0..0000000
--- a/projects/clang/win-patches/llvm-objcopy-3.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 2b6e1b7585d6bd997ea4e4233c904a6d2c11ad33 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Sat, 19 Jan 2019 19:42:41 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Implement --strip-debug
-
-Also remove sections similarly for --strip-all, --discard-all,
---strip-unneeded.
-
-Differential Revision: https://reviews.llvm.org/D56839
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351661 91177308-0d34-0410-b5e6-96231b3b80d8
----
- test/tools/llvm-objcopy/COFF/strip-debug.test | 109 ++++++++++++++++++
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 11 ++
- 2 files changed, 120 insertions(+)
- create mode 100644 test/tools/llvm-objcopy/COFF/strip-debug.test
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-debug.test b/llvm/test/tools/llvm-objcopy/COFF/strip-debug.test
-new file mode 100644
-index 00000000000..97fa96aac70
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/strip-debug.test
-@@ -0,0 +1,109 @@
-+# RUN: yaml2obj %s > %t.in.o
-+#
-+# RUN: llvm-objdump --section-headers %t.in.o | FileCheck %s --check-prefixes=SECTIONS,SECTIONS-PRE
-+# RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-PRE
-+#
-+# RUN: llvm-objcopy --strip-debug %t.in.o %t.out.o
-+# RUN: llvm-objdump --section-headers %t.out.o | FileCheck %s --check-prefixes=SECTIONS
-+# RUN: llvm-objdump -t %t.out.o | FileCheck %s --check-prefixes=SYMBOLS
-+#
-+# Test that --strip-all, --strip-all-gnu, --discard-all and --strip-unneeded,
-+# plus llvm-strip without arguments all produce a similiar set of sections
-+# (while they remove symbols differently).
-+#
-+# RUN: llvm-objcopy --strip-all %t.in.o %t.strip-all.o
-+# RUN: llvm-objdump --section-headers %t.strip-all.o | FileCheck %s --check-prefixes=SECTIONS
-+#
-+# RUN: llvm-objcopy --strip-all-gnu %t.in.o %t.strip-all-gnu.o
-+# RUN: llvm-objdump --section-headers %t.strip-all-gnu.o | FileCheck %s --check-prefixes=SECTIONS
-+#
-+# RUN: llvm-objcopy --discard-all %t.in.o %t.discard-all.o
-+# RUN: llvm-objdump --section-headers %t.discard-all.o | FileCheck %s --check-prefixes=SECTIONS
-+#
-+# RUN: llvm-objcopy --discard-all %t.in.o %t.strip-unneeded.o
-+# RUN: llvm-objdump --section-headers %t.strip-unneeded.o | FileCheck %s --check-prefixes=SECTIONS
-+#
-+# SECTIONS: Sections:
-+# SECTIONS-NEXT: Idx Name
-+# SECTIONS-NEXT: 0 .text
-+# SECTIONS-NEXT: 1 .data
-+# SECTIONS-NEXT: 2 .bss
-+# SECTIONS-NEXT: 3 .xdata
-+# SECTIONS-NEXT: 4 .reloc
-+# SECTIONS-PRE-NEXT: 5 .debug_discardable
-+# SECTIONS-NEXT: {{.*}} .debug_undiscardable
-+# SECTIONS-NEXT: {{.*}} .llvm_addrsig
-+# SECTIONS-EMPTY:
-+#
-+# Test that --strip-debug doesn't remove e.g. unreferenced local symbols.
-+#
-+# SYMBOLS: SYMBOL TABLE:
-+# SYMBOLS-NEXT: external
-+# SYMBOLS-NEXT: local_unreferenced
-+# SYMBOLS-PRE-NEXT: debug_discardable_sym
-+# SYMBOLS-NEXT: debug_undiscardable_sym
-+# SYMBOLS-EMPTY:
-+
-+--- !COFF
-+header:
-+ Machine: IMAGE_FILE_MACHINE_AMD64
-+ Characteristics: [ ]
-+sections:
-+ - Name: .text
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .data
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .bss
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .xdata
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .reloc
-+ Characteristics: [ IMAGE_SCN_MEM_DISCARDABLE ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .debug_discardable
-+ Characteristics: [ IMAGE_SCN_MEM_DISCARDABLE ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .debug_undiscardable
-+ Characteristics: [ ]
-+ Alignment: 4
-+ SectionData: 00000000
-+ - Name: .llvm_addrsig
-+ Characteristics: [ IMAGE_SCN_LNK_REMOVE ]
-+ Alignment: 4
-+ SectionData: 00000000
-+symbols:
-+ - Name: external
-+ Value: 0
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: local_unreferenced
-+ Value: 0
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_STATIC
-+ - Name: debug_discardable_sym
-+ Value: 0
-+ SectionNumber: 6
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: debug_undiscardable_sym
-+ Value: 0
-+ SectionNumber: 7
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+...
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index dd2e4829218..13d8efde37c 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -26,9 +26,20 @@ namespace coff {
- using namespace object;
- using namespace COFF;
-
-+static bool isDebugSection(const Section &Sec) {
-+ return Sec.Name.startswith(".debug");
-+}
-+
- static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- // Perform the actual section removals.
- Obj.removeSections([&Config](const Section &Sec) {
-+ if (Config.StripDebug || Config.StripAll || Config.StripAllGNU ||
-+ Config.DiscardAll || Config.StripUnneeded) {
-+ if (isDebugSection(Sec) &&
-+ (Sec.Header.Characteristics & IMAGE_SCN_MEM_DISCARDABLE) != 0)
-+ return true;
-+ }
-+
- if (is_contained(Config.ToRemove, Sec.Name))
- return true;
-
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-4.patch b/projects/clang/win-patches/llvm-objcopy-4.patch
deleted file mode 100644
index e922384..0000000
--- a/projects/clang/win-patches/llvm-objcopy-4.patch
+++ /dev/null
@@ -1,222 +0,0 @@
-From 526aa2e94355b7feb3bf7774a6e1899f68e94ad8 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Sat, 19 Jan 2019 19:42:48 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Implement --only-keep-debug
-
-Differential Revision: https://reviews.llvm.org/D56840
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351662 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../COFF/Inputs/only-keep-sections.yaml | 77 +++++++++++++++++++
- .../llvm-objcopy/COFF/only-keep-debug.test | 58 ++++++++++++++
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 10 +++
- tools/llvm-objcopy/COFF/Object.cpp | 10 +++
- tools/llvm-objcopy/COFF/Object.h | 1 +
- 5 files changed, 156 insertions(+)
- create mode 100644 test/tools/llvm-objcopy/COFF/Inputs/only-keep-sections.yaml
- create mode 100644 test/tools/llvm-objcopy/COFF/only-keep-debug.test
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/Inputs/only-keep-sections.yaml b/llvm/test/tools/llvm-objcopy/COFF/Inputs/only-keep-sections.yaml
-new file mode 100644
-index 00000000000..b5437e10763
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/Inputs/only-keep-sections.yaml
-@@ -0,0 +1,77 @@
-+--- !COFF
-+OptionalHeader:
-+ AddressOfEntryPoint: 4144
-+ ImageBase: 1073741824
-+ SectionAlignment: 4096
-+ FileAlignment: 512
-+ MajorOperatingSystemVersion: 6
-+ MinorOperatingSystemVersion: 0
-+ MajorImageVersion: 0
-+ MinorImageVersion: 0
-+ MajorSubsystemVersion: 6
-+ MinorSubsystemVersion: 0
-+ Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
-+ DLLCharacteristics: [ ]
-+ SizeOfStackReserve: 1048576
-+ SizeOfStackCommit: 4096
-+ SizeOfHeapReserve: 1048576
-+ SizeOfHeapCommit: 4096
-+header:
-+ Machine: IMAGE_FILE_MACHINE_AMD64
-+ Characteristics: [ ]
-+sections:
-+ - Name: .text
-+ Characteristics: [ IMAGE_SCN_CNT_CODE ]
-+ VirtualAddress: 4096
-+ VirtualSize: 4
-+ SectionData: C3C3C3C3
-+ - Name: .rdata
-+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA ]
-+ VirtualAddress: 8192
-+ VirtualSize: 4
-+ SectionData: 2A000000
-+ - Name: .buildid
-+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA ]
-+ VirtualAddress: 12288
-+ VirtualSize: 4
-+ SectionData: 2B000000
-+ - Name: .reloc
-+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE ]
-+ VirtualAddress: 16384
-+ VirtualSize: 4
-+ SectionData: 2C000000
-+ - Name: .debug_discardable
-+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE ]
-+ VirtualAddress: 20480
-+ VirtualSize: 4
-+ SectionData: 2D000000
-+ - Name: .debug_undiscardable
-+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA ]
-+ VirtualAddress: 24576
-+ VirtualSize: 4
-+ SectionData: 2E000000
-+ - Name: .unflagged
-+ Characteristics: [ ]
-+ VirtualAddress: 28672
-+ VirtualSize: 4
-+ SectionData: 2F000000
-+symbols:
-+ - Name: main
-+ Value: 2
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: debug_discardable_sym
-+ Value: 0
-+ SectionNumber: 5
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: debug_undiscardable_sym
-+ Value: 0
-+ SectionNumber: 6
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+...
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test b/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test
-new file mode 100644
-index 00000000000..5518d4000fc
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test
-@@ -0,0 +1,58 @@
-+RUN: yaml2obj %p/Inputs/only-keep-sections.yaml > %t.in.exe
-+
-+RUN: llvm-objcopy --only-keep-debug %t.in.exe %t.out.exe
-+RUN: llvm-readobj --sections %t.out.exe | FileCheck %s --check-prefix=SECTIONS
-+RUN: llvm-objdump -t %t.out.exe | FileCheck %s --check-prefix=SYMBOLS
-+
-+Check that all non-debug/buildid sections with IMAGE_SCN_CNT_CODE
-+or IMAGE_SCN_CNT_INITIALIZED_DATA are truncated, and no others.
-+
-+SECTIONS: Sections [
-+SECTIONS-NEXT: Section {
-+SECTIONS-NEXT: Number: 1
-+SECTIONS-NEXT: Name: .text
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 0
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 2
-+SECTIONS-NEXT: Name: .rdata
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 0
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 3
-+SECTIONS-NEXT: Name: .buildid
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 512
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 4
-+SECTIONS-NEXT: Name: .reloc
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 0
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 5
-+SECTIONS-NEXT: Name: .debug_discardable
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 512
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 6
-+SECTIONS-NEXT: Name: .debug_undiscardable
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 512
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 7
-+SECTIONS-NEXT: Name: .unflagged
-+SECTIONS-NEXT: VirtualSize: 0x4
-+SECTIONS-NEXT: VirtualAddress:
-+SECTIONS-NEXT: RawDataSize: 512
-+
-+SYMBOLS: SYMBOL TABLE:
-+SYMBOLS-NEXT: main
-+SYMBOLS-NEXT: debug_discardable_sym
-+SYMBOLS-NEXT: debug_undiscardable_sym
-+SYMBOLS-EMPTY:
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 13d8efde37c..60afbf7bb54 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -46,6 +46,16 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- return false;
- });
-
-+ if (Config.OnlyKeepDebug) {
-+ // For --only-keep-debug, we keep all other sections, but remove their
-+ // content. The VirtualSize field in the section header is kept intact.
-+ Obj.truncateSections([](const Section &Sec) {
-+ return !isDebugSection(Sec) && Sec.Name != ".buildid" &&
-+ ((Sec.Header.Characteristics &
-+ (IMAGE_SCN_CNT_CODE | IMAGE_SCN_CNT_INITIALIZED_DATA)) != 0);
-+ });
-+ }
-+
- // StripAll removes all symbols and thus also removes all relocations.
- if (Config.StripAll || Config.StripAllGNU)
- for (Section &Sec : Obj.getMutableSections())
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.cpp b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-index e19cea6aa9d..fc87d9e574d 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-@@ -127,6 +127,16 @@ void Object::removeSections(function_ref<bool(const Section &)> ToRemove) {
- updateSymbols();
- }
-
-+void Object::truncateSections(function_ref<bool(const Section &)> ToTruncate) {
-+ for (Section &Sec : Sections) {
-+ if (ToTruncate(Sec)) {
-+ Sec.Contents = ArrayRef<uint8_t>();
-+ Sec.Relocs.clear();
-+ Sec.Header.SizeOfRawData = 0;
-+ }
-+ }
-+}
-+
- } // end namespace coff
- } // end namespace objcopy
- } // end namespace llvm
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.h b/llvm/tools/llvm-objcopy/COFF/Object.h
-index a73e93620d3..8e200369f0b 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.h
-@@ -93,6 +93,7 @@ struct Object {
-
- void addSections(ArrayRef<Section> NewSections);
- void removeSections(function_ref<bool(const Section &)> ToRemove);
-+ void truncateSections(function_ref<bool(const Section &)> ToTruncate);
-
- private:
- std::vector<Symbol> Symbols;
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-5.patch b/projects/clang/win-patches/llvm-objcopy-5.patch
deleted file mode 100644
index 657c72a..0000000
--- a/projects/clang/win-patches/llvm-objcopy-5.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 17dcf25b3ade15605ca27150e4440bcc75caed65 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Sat, 19 Jan 2019 19:42:54 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Implement --only-section
-
-Differential Revision: https://reviews.llvm.org/D56873
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351663 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../tools/llvm-objcopy/COFF/only-section.test | 21 +++++++++++++++++++
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 6 ++++++
- 2 files changed, 27 insertions(+)
- create mode 100644 test/tools/llvm-objcopy/COFF/only-section.test
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/only-section.test b/llvm/test/tools/llvm-objcopy/COFF/only-section.test
-new file mode 100644
-index 00000000000..42492ed80ff
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/only-section.test
-@@ -0,0 +1,21 @@
-+RUN: yaml2obj %p/Inputs/only-keep-sections.yaml > %t.in.exe
-+
-+RUN: llvm-objcopy --only-section .debug_discardable %t.in.exe %t.out.exe
-+RUN: llvm-objdump --section-headers -t %t.out.exe | FileCheck %s --check-prefixes=SECTIONS,SECTIONS-DEBUG,SYMBOLS,SYMBOLS-DEBUG
-+
-+Adding another section stripping option makes it return the intersection of
-+kept sections - in this case keeping only .text.
-+
-+RUN: llvm-objcopy --only-section .debug_discardable --only-section .text --strip-debug %t.in.exe %t.combination.exe
-+RUN: llvm-objdump --section-headers -t %t.combination.exe | FileCheck %s --check-prefixes=SECTIONS,SECTIONS-TEXT,SYMBOLS,SYMBOLS-TEXT
-+
-+SECTIONS: Sections:
-+SECTIONS-NEXT: Idx Name
-+SECTIONS-DEBUG-NEXT: .debug_discardable
-+SECTIONS-TEXT-NEXT: .text
-+SECTIONS-EMPTY:
-+
-+SYMBOLS: SYMBOL TABLE:
-+SYMBOLS-DEBUG-NEXT: debug_discardable_sym
-+SYMBOLS-TEXT-NEXT: main
-+SYMBOLS-EMPTY:
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 60afbf7bb54..99929d10a1f 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -33,6 +33,12 @@ static bool isDebugSection(const Section &Sec) {
- static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- // Perform the actual section removals.
- Obj.removeSections([&Config](const Section &Sec) {
-+ // Contrary to --only-keep-debug, --only-section fully removes sections that
-+ // aren't mentioned.
-+ if (!Config.OnlySection.empty() &&
-+ !is_contained(Config.OnlySection, Sec.Name))
-+ return true;
-+
- if (Config.StripDebug || Config.StripAll || Config.StripAllGNU ||
- Config.DiscardAll || Config.StripUnneeded) {
- if (isDebugSection(Sec) &&
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-6.patch b/projects/clang/win-patches/llvm-objcopy-6.patch
deleted file mode 100644
index e70f1b9..0000000
--- a/projects/clang/win-patches/llvm-objcopy-6.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-From d3b89a1637cddee1c61e59257cfe92227ead29e5 Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Tue, 22 Jan 2019 10:57:59 +0000
-Subject: [PATCH] [llvm-objcopy] Consistently use createStringError instead of
- make_error<StringError>
-
-This was requested in the review of D57006.
-
-Also add missing quotes around symbol names in error messages.
-
-Differential Revision: https://reviews.llvm.org/D57014
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351799 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../llvm-objcopy/COFF/remove-section.test | 2 +-
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 8 ++---
- tools/llvm-objcopy/COFF/Object.cpp | 5 ++-
- tools/llvm-objcopy/COFF/Reader.cpp | 24 +++++++-------
- tools/llvm-objcopy/COFF/Writer.cpp | 33 +++++++++----------
- tools/llvm-objcopy/ELF/ELFObjcopy.cpp | 10 +++---
- 6 files changed, 40 insertions(+), 42 deletions(-)
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/remove-section.test b/llvm/test/tools/llvm-objcopy/COFF/remove-section.test
-index b3dfb0b98cb..6dc8f6a6c2e 100644
---- a/llvm/test/tools/llvm-objcopy/COFF/remove-section.test
-+++ b/llvm/test/tools/llvm-objcopy/COFF/remove-section.test
-@@ -96,7 +96,7 @@
- # Removing the .comdat section fails, since the .text section has relocations
- # against it.
- #
--# ERROR-RELOC: Relocation target foo ({{.*}}) not found
-+# ERROR-RELOC: Relocation target 'foo' ({{.*}}) not found
- #
- #
- # Removing the .comdat section and .text (with a relocation against .comdat)
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 99929d10a1f..8d8f53d13d8 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -84,10 +84,10 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- // Explicitly removing a referenced symbol is an error.
- if (Sym.Referenced)
- reportError(Config.OutputFilename,
-- make_error<StringError>(
-- "not stripping symbol '" + Sym.Name +
-- "' because it is named in a relocation.",
-- llvm::errc::invalid_argument));
-+ createStringError(llvm::errc::invalid_argument,
-+ "not stripping symbol '%s' because it is "
-+ "named in a relocation.",
-+ Sym.Name.str().c_str()));
- return true;
- }
-
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.cpp b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-index fc87d9e574d..83435dffa98 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-@@ -56,9 +56,8 @@ Error Object::markSymbols() {
- for (const Relocation &R : Sec.Relocs) {
- auto It = SymbolMap.find(R.Target);
- if (It == SymbolMap.end())
-- return make_error<StringError>("Relocation target " + Twine(R.Target) +
-- " not found",
-- object_error::invalid_symbol_index);
-+ return createStringError(object_error::invalid_symbol_index,
-+ "Relocation target %zu not found", R.Target);
- It->second->Referenced = true;
- }
- }
-diff --git a/llvm/tools/llvm-objcopy/COFF/Reader.cpp b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-index c8abe2913a2..20ff32a59dc 100644
---- a/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-@@ -77,8 +77,8 @@ Error COFFReader::readSections(Object &Obj) const {
- if (auto EC = COFFObj.getSectionName(Sec, S.Name))
- return errorCodeToError(EC);
- if (Sec->hasExtendedRelocations())
-- return make_error<StringError>("Extended relocations not supported yet",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Extended relocations not supported yet");
- }
- Obj.addSections(Sections);
- return Error::success();
-@@ -116,16 +116,16 @@ Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
- Sections.size())
- Sym.TargetSectionId = Sections[SymRef.getSectionNumber() - 1].UniqueId;
- else
-- return make_error<StringError>("Section number out of range",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Section number out of range");
- // For section definitions, check if it is comdat associative, and if
- // it is, find the target section unique id.
- const coff_aux_section_definition *SD = SymRef.getSectionDefinition();
- if (SD && SD->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
- int32_t Index = SD->getNumber(IsBigObj);
- if (Index <= 0 || static_cast<uint32_t>(Index - 1) >= Sections.size())
-- return make_error<StringError>("Unexpected associative section index",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Unexpected associative section index");
- Sym.AssociativeComdatTargetSectionId = Sections[Index - 1].UniqueId;
- }
- I += 1 + SymRef.getNumberOfAuxSymbols();
-@@ -144,12 +144,12 @@ Error COFFReader::setRelocTargets(Object &Obj) const {
- for (Section &Sec : Obj.getMutableSections()) {
- for (Relocation &R : Sec.Relocs) {
- if (R.Reloc.SymbolTableIndex >= RawSymbolTable.size())
-- return make_error<StringError>("SymbolTableIndex out of range",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "SymbolTableIndex out of range");
- const Symbol *Sym = RawSymbolTable[R.Reloc.SymbolTableIndex];
- if (Sym == nullptr)
-- return make_error<StringError>("Invalid SymbolTableIndex",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Invalid SymbolTableIndex");
- R.Target = Sym->UniqueId;
- R.TargetName = Sym->Name;
- }
-@@ -169,8 +169,8 @@ Expected<std::unique_ptr<Object>> COFFReader::create() const {
- Obj->CoffFileHeader = *CFH;
- } else {
- if (!CBFH)
-- return make_error<StringError>("No COFF file header returned",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "No COFF file header returned");
- // Only copying the few fields from the bigobj header that we need
- // and won't recreate in the end.
- Obj->CoffFileHeader.Machine = CBFH->Machine;
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index 9fb7812672b..0321f94a896 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -29,10 +29,9 @@ Error COFFWriter::finalizeRelocTargets() {
- for (Relocation &R : Sec.Relocs) {
- const Symbol *Sym = Obj.findSymbol(R.Target);
- if (Sym == nullptr)
-- return make_error<StringError>("Relocation target " + R.TargetName +
-- " (" + Twine(R.Target) +
-- ") not found",
-- object_error::invalid_symbol_index);
-+ return createStringError(object_error::invalid_symbol_index,
-+ "Relocation target '%s' (%zu) not found",
-+ R.TargetName.str().c_str(), R.Target);
- R.Reloc.SymbolTableIndex = Sym->RawIndex;
- }
- }
-@@ -48,9 +47,9 @@ Error COFFWriter::finalizeSectionNumbers() {
- } else {
- const Section *Sec = Obj.findSection(Sym.TargetSectionId);
- if (Sec == nullptr)
-- return make_error<StringError>("Symbol " + Sym.Name +
-- " points to a removed section",
-- object_error::invalid_symbol_index);
-+ return createStringError(object_error::invalid_symbol_index,
-+ "Symbol '%s' points to a removed section",
-+ Sym.Name.str().c_str());
- Sym.Sym.SectionNumber = Sec->Index;
-
- if (Sym.Sym.NumberOfAuxSymbols == 1 &&
-@@ -65,9 +64,10 @@ Error COFFWriter::finalizeSectionNumbers() {
- } else {
- Sec = Obj.findSection(Sym.AssociativeComdatTargetSectionId);
- if (Sec == nullptr)
-- return make_error<StringError>(
-- "Symbol " + Sym.Name + " is associative to a removed section",
-- object_error::invalid_symbol_index);
-+ return createStringError(
-+ object_error::invalid_symbol_index,
-+ "Symbol '%s' is associative to a removed section",
-+ Sym.Name.str().c_str());
- SDSectionNumber = Sec->Index;
- }
- // Update the section definition with the new section number.
-@@ -343,9 +343,8 @@ Error COFFWriter::patchDebugDirectory() {
- S.Header.VirtualAddress + S.Header.SizeOfRawData) {
- if (Dir->RelativeVirtualAddress + Dir->Size >
- S.Header.VirtualAddress + S.Header.SizeOfRawData)
-- return make_error<StringError>(
-- "Debug directory extends past end of section",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Debug directory extends past end of section");
-
- size_t Offset = Dir->RelativeVirtualAddress - S.Header.VirtualAddress;
- uint8_t *Ptr = Buf.getBufferStart() + S.Header.PointerToRawData + Offset;
-@@ -361,15 +360,15 @@ Error COFFWriter::patchDebugDirectory() {
- return Error::success();
- }
- }
-- return make_error<StringError>("Debug directory not found",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Debug directory not found");
- }
-
- Error COFFWriter::write() {
- bool IsBigObj = Obj.getSections().size() > MaxNumberOfSections16;
- if (IsBigObj && Obj.IsPE)
-- return make_error<StringError>("Too many sections for executable",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed,
-+ "Too many sections for executable");
- return write(IsBigObj);
- }
-
-diff --git a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
-index db0cd76ced4..a2996395c1f 100644
---- a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
-@@ -185,9 +185,10 @@ static Error dumpSectionToFile(StringRef SecName, StringRef Filename,
- for (auto &Sec : Obj.sections()) {
- if (Sec.Name == SecName) {
- if (Sec.OriginalData.empty())
-- return make_error<StringError>("Can't dump section \"" + SecName +
-- "\": it has no contents",
-- object_error::parse_failed);
-+ return createStringError(
-+ object_error::parse_failed,
-+ "Can't dump section \"%s\": it has no contents",
-+ SecName.str().c_str());
- Expected<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
- FileOutputBuffer::create(Filename, Sec.OriginalData.size());
- if (!BufferOrErr)
-@@ -200,8 +201,7 @@ static Error dumpSectionToFile(StringRef SecName, StringRef Filename,
- return Error::success();
- }
- }
-- return make_error<StringError>("Section not found",
-- object_error::parse_failed);
-+ return createStringError(object_error::parse_failed, "Section not found");
- }
-
- static bool isCompressed(const SectionBase &Section) {
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-7.patch b/projects/clang/win-patches/llvm-objcopy-7.patch
deleted file mode 100644
index 80e9785..0000000
--- a/projects/clang/win-patches/llvm-objcopy-7.patch
+++ /dev/null
@@ -1,224 +0,0 @@
-From d37f67c7311cd371d9ff1afd398bc92f309e6baf Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Tue, 22 Jan 2019 10:58:09 +0000
-Subject: [PATCH] [llvm-objcopy] [COFF] Update symbol indices in weak externals
-
-Differential Revision: https://reviews.llvm.org/D57006
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351800 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../llvm-objcopy/COFF/weak-external.test | 49 +++++++++++++++++++
- tools/llvm-objcopy/COFF/Object.h | 2 +
- tools/llvm-objcopy/COFF/Reader.cpp | 24 ++++++++-
- tools/llvm-objcopy/COFF/Reader.h | 2 +-
- tools/llvm-objcopy/COFF/Writer.cpp | 16 +++++-
- tools/llvm-objcopy/COFF/Writer.h | 2 +-
- 6 files changed, 89 insertions(+), 6 deletions(-)
- create mode 100644 test/tools/llvm-objcopy/COFF/weak-external.test
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/weak-external.test b/llvm/test/tools/llvm-objcopy/COFF/weak-external.test
-new file mode 100644
-index 00000000000..d36a53b4eb1
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/weak-external.test
-@@ -0,0 +1,49 @@
-+# RUN: yaml2obj %s > %t.in.o
-+
-+# RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-PRE
-+
-+# RUN: llvm-objcopy -N func %t.in.o %t.out.o
-+# RUN: llvm-objdump -t %t.out.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-POST
-+
-+# RUN: not llvm-objcopy -N .weak.foobar.file1 %t.in.o %t.err.o 2>&1 | FileCheck %s --check-prefix=ERROR
-+
-+# SYMBOLS: SYMBOL TABLE:
-+# SYMBOLS-PRE-NEXT: func
-+# SYMBOLS-NEXT: .weak.foobar.file1
-+# SYMBOLS-NEXT: foobar
-+# SYMBOLS-PRE-NEXT: AUX indx 1
-+# SYMBOLS-POST-NEXT: AUX indx 0
-+# SYMBOLS-EMPTY:
-+
-+# ERROR: Symbol 'foobar' is missing its weak target
-+
-+--- !COFF
-+header:
-+ Machine: IMAGE_FILE_MACHINE_AMD64
-+ Characteristics: [ ]
-+sections:
-+ - Name: .text
-+ Characteristics: [ ]
-+symbols:
-+ - Name: func
-+ Value: 0
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: .weak.foobar.file1
-+ Value: 1
-+ SectionNumber: 1
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_NULL
-+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-+ - Name: foobar
-+ Value: 0
-+ SectionNumber: 0
-+ SimpleType: IMAGE_SYM_TYPE_NULL
-+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
-+ StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
-+ WeakExternal:
-+ TagIndex: 1
-+ Characteristics: IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY
-+...
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.h b/llvm/tools/llvm-objcopy/COFF/Object.h
-index 8e200369f0b..0630f9c5ff8 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.h
-@@ -11,6 +11,7 @@
-
- #include "llvm/ADT/ArrayRef.h"
- #include "llvm/ADT/DenseMap.h"
-+#include "llvm/ADT/Optional.h"
- #include "llvm/ADT/StringRef.h"
- #include "llvm/ADT/iterator_range.h"
- #include "llvm/BinaryFormat/COFF.h"
-@@ -47,6 +48,7 @@ struct Symbol {
- std::vector<uint8_t> AuxData;
- ssize_t TargetSectionId;
- ssize_t AssociativeComdatTargetSectionId = 0;
-+ Optional<size_t> WeakTargetSymbolId;
- size_t UniqueId;
- size_t RawIndex;
- bool Referenced;
-diff --git a/llvm/tools/llvm-objcopy/COFF/Reader.cpp b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-index 20ff32a59dc..2446277cc2b 100644
---- a/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-@@ -121,12 +121,18 @@ Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
- // For section definitions, check if it is comdat associative, and if
- // it is, find the target section unique id.
- const coff_aux_section_definition *SD = SymRef.getSectionDefinition();
-+ const coff_aux_weak_external *WE = SymRef.getWeakExternal();
- if (SD && SD->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
- int32_t Index = SD->getNumber(IsBigObj);
- if (Index <= 0 || static_cast<uint32_t>(Index - 1) >= Sections.size())
- return createStringError(object_error::parse_failed,
- "Unexpected associative section index");
- Sym.AssociativeComdatTargetSectionId = Sections[Index - 1].UniqueId;
-+ } else if (WE) {
-+ // This is a raw symbol index for now, but store it in the Symbol
-+ // until we've added them to the Object, which assigns the final
-+ // unique ids.
-+ Sym.WeakTargetSymbolId = WE->TagIndex;
- }
- I += 1 + SymRef.getNumberOfAuxSymbols();
- }
-@@ -134,13 +140,27 @@ Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
- return Error::success();
- }
-
--Error COFFReader::setRelocTargets(Object &Obj) const {
-+Error COFFReader::setSymbolTargets(Object &Obj) const {
- std::vector<const Symbol *> RawSymbolTable;
- for (const Symbol &Sym : Obj.getSymbols()) {
- RawSymbolTable.push_back(&Sym);
- for (size_t I = 0; I < Sym.Sym.NumberOfAuxSymbols; I++)
- RawSymbolTable.push_back(nullptr);
- }
-+ for (Symbol &Sym : Obj.getMutableSymbols()) {
-+ // Convert WeakTargetSymbolId from the original raw symbol index to
-+ // a proper unique id.
-+ if (Sym.WeakTargetSymbolId) {
-+ if (*Sym.WeakTargetSymbolId >= RawSymbolTable.size())
-+ return createStringError(object_error::parse_failed,
-+ "Weak external reference out of range");
-+ const Symbol *Target = RawSymbolTable[*Sym.WeakTargetSymbolId];
-+ if (Target == nullptr)
-+ return createStringError(object_error::parse_failed,
-+ "Invalid SymbolTableIndex");
-+ Sym.WeakTargetSymbolId = Target->UniqueId;
-+ }
-+ }
- for (Section &Sec : Obj.getMutableSections()) {
- for (Relocation &R : Sec.Relocs) {
- if (R.Reloc.SymbolTableIndex >= RawSymbolTable.size())
-@@ -184,7 +204,7 @@ Expected<std::unique_ptr<Object>> COFFReader::create() const {
- return std::move(E);
- if (Error E = readSymbols(*Obj, IsBigObj))
- return std::move(E);
-- if (Error E = setRelocTargets(*Obj))
-+ if (Error E = setSymbolTargets(*Obj))
- return std::move(E);
-
- return std::move(Obj);
-diff --git a/llvm/tools/llvm-objcopy/COFF/Reader.h b/llvm/tools/llvm-objcopy/COFF/Reader.h
-index 4493705e73c..ec15369db0b 100644
---- a/llvm/tools/llvm-objcopy/COFF/Reader.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Reader.h
-@@ -28,7 +28,7 @@ class COFFReader {
- Error readExecutableHeaders(Object &Obj) const;
- Error readSections(Object &Obj) const;
- Error readSymbols(Object &Obj, bool IsBigObj) const;
-- Error setRelocTargets(Object &Obj) const;
-+ Error setSymbolTargets(Object &Obj) const;
-
- public:
- explicit COFFReader(const COFFObjectFile &O) : COFFObj(O) {}
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index 0321f94a896..4f57131d5ab 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -38,7 +38,7 @@ Error COFFWriter::finalizeRelocTargets() {
- return Error::success();
- }
-
--Error COFFWriter::finalizeSectionNumbers() {
-+Error COFFWriter::finalizeSymbolContents() {
- for (Symbol &Sym : Obj.getMutableSymbols()) {
- if (Sym.TargetSectionId <= 0) {
- // Undefined, or a special kind of symbol. These negative values
-@@ -75,6 +75,18 @@ Error COFFWriter::finalizeSectionNumbers() {
- SD->NumberHighPart = static_cast<uint16_t>(SDSectionNumber >> 16);
- }
- }
-+ // Check that we actually have got AuxData to match the weak symbol target
-+ // we want to set. Only >= 1 would be required, but only == 1 makes sense.
-+ if (Sym.WeakTargetSymbolId && Sym.Sym.NumberOfAuxSymbols == 1) {
-+ coff_aux_weak_external *WE =
-+ reinterpret_cast<coff_aux_weak_external *>(Sym.AuxData.data());
-+ const Symbol *Target = Obj.findSymbol(*Sym.WeakTargetSymbolId);
-+ if (Target == nullptr)
-+ return createStringError(object_error::invalid_symbol_index,
-+ "Symbol '%s' is missing its weak target",
-+ Sym.Name.str().c_str());
-+ WE->TagIndex = Target->RawIndex;
-+ }
- }
- return Error::success();
- }
-@@ -137,7 +149,7 @@ std::pair<size_t, size_t> COFFWriter::finalizeSymbolTable() {
- Error COFFWriter::finalize(bool IsBigObj) {
- if (Error E = finalizeRelocTargets())
- return E;
-- if (Error E = finalizeSectionNumbers())
-+ if (Error E = finalizeSymbolContents())
- return E;
-
- size_t SizeOfHeaders = 0;
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.h b/llvm/tools/llvm-objcopy/COFF/Writer.h
-index a967a103df9..9b1cfa91d00 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.h
-@@ -31,7 +31,7 @@ class COFFWriter {
- StringTableBuilder StrTabBuilder;
-
- Error finalizeRelocTargets();
-- Error finalizeSectionNumbers();
-+ Error finalizeSymbolContents();
- void layoutSections();
- size_t finalizeStringTable();
- template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-8.patch b/projects/clang/win-patches/llvm-objcopy-8.patch
deleted file mode 100644
index 6fd9776..0000000
--- a/projects/clang/win-patches/llvm-objcopy-8.patch
+++ /dev/null
@@ -1,330 +0,0 @@
-From 8cf7aa39d7c9461e2d765f6d4fa7e0925571695f Mon Sep 17 00:00:00 2001
-From: Jordan Rupprecht <rupprecht(a)google.com>
-Date: Tue, 22 Jan 2019 23:49:16 +0000
-Subject: [PATCH] [llvm-objcopy] Return Error from Buffer::allocate(),
- [ELF]Writer::finalize(), and [ELF]Writer::commit()
-
-Summary:
-This patch changes a few methods to return Error instead of manually calling error/reportError to abort. This will make it easier to extract into a library.
-
-Note that error() takes just a string (this patch also adds an overload that takes an Error), while reportError() takes string + [error/code]. To help unify things, use FileError to associate a given filename with an error. Note that this takes some special care (for now), e.g. calling reportError(FileName, <something that could be FileError>) will duplicate the filename. The goal is to eventually remove reportError() and have every error associated with a file to be a FileError, and just one error handling block at the tool level.
-
-This change was suggested in D56806. I took it a little further than suggested, but completely fixing llvm-objcopy will take a couple more patches. If this approach looks good, I'll commit this and apply similar patche(s) for the rest.
-
-This change is NFC in terms of non-error related code, although the error message changes in one context.
-
-Reviewers: alexshap, jhenderson, jakehehrlich, mstorsjo, espindola
-
-Reviewed By: alexshap, jhenderson
-
-Subscribers: llvm-commits, emaste, arichardson
-
-Differential Revision: https://reviews.llvm.org/D56930
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351896 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../ELF/fail-no-output-directory.test | 2 +-
- tools/llvm-objcopy/Buffer.cpp | 20 ++++++++++++-----
- tools/llvm-objcopy/Buffer.h | 6 ++---
- tools/llvm-objcopy/COFF/Writer.cpp | 3 ++-
- tools/llvm-objcopy/ELF/ELFObjcopy.cpp | 18 ++++++++++-----
- tools/llvm-objcopy/ELF/Object.cpp | 22 ++++++++++---------
- tools/llvm-objcopy/ELF/Object.h | 12 +++++-----
- tools/llvm-objcopy/llvm-objcopy.cpp | 15 +++++++++++--
- tools/llvm-objcopy/llvm-objcopy.h | 1 +
- 9 files changed, 64 insertions(+), 35 deletions(-)
-
-diff --git a/llvm/test/tools/llvm-objcopy/ELF/fail-no-output-directory.test b/llvm/test/tools/llvm-objcopy/ELF/fail-no-output-directory.test
-index f66b2e09fce..732046fa925 100644
---- a/llvm/test/tools/llvm-objcopy/ELF/fail-no-output-directory.test
-+++ b/llvm/test/tools/llvm-objcopy/ELF/fail-no-output-directory.test
-@@ -1,6 +1,6 @@
- # RUN: yaml2obj %s > %t
- # RUN: not llvm-objcopy %t no/such/dir 2>&1 | FileCheck %s
--# CHECK: failed to open no/such/dir:
-+# CHECK: error: 'no/such/dir': No such file or directory
-
- !ELF
- FileHeader:
-diff --git a/llvm/tools/llvm-objcopy/Buffer.cpp b/llvm/tools/llvm-objcopy/Buffer.cpp
-index 2da03dee1af..1789097f276 100644
---- a/llvm/tools/llvm-objcopy/Buffer.cpp
-+++ b/llvm/tools/llvm-objcopy/Buffer.cpp
-@@ -17,23 +17,31 @@ namespace objcopy {
-
- Buffer::~Buffer() {}
-
--void FileBuffer::allocate(size_t Size) {
-+Error FileBuffer::allocate(size_t Size) {
- Expected<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
- FileOutputBuffer::create(getName(), Size, FileOutputBuffer::F_executable);
-- handleAllErrors(BufferOrErr.takeError(), [this](const ErrorInfoBase &E) {
-- error("failed to open " + getName() + ": " + E.message());
-- });
-+ // FileOutputBuffer::create() returns an Error that is just a wrapper around
-+ // std::error_code. Wrap it in FileError to include the actual filename.
-+ if (!BufferOrErr)
-+ return createFileError(getName(), BufferOrErr.takeError());
- Buf = std::move(*BufferOrErr);
-+ return Error::success();
- }
-
--Error FileBuffer::commit() { return Buf->commit(); }
-+Error FileBuffer::commit() {
-+ Error Err = Buf->commit();
-+ // FileOutputBuffer::commit() returns an Error that is just a wrapper around
-+ // std::error_code. Wrap it in FileError to include the actual filename.
-+ return Err ? createFileError(getName(), std::move(Err)) : std::move(Err);
-+}
-
- uint8_t *FileBuffer::getBufferStart() {
- return reinterpret_cast<uint8_t *>(Buf->getBufferStart());
- }
-
--void MemBuffer::allocate(size_t Size) {
-+Error MemBuffer::allocate(size_t Size) {
- Buf = WritableMemoryBuffer::getNewMemBuffer(Size, getName());
-+ return Error::success();
- }
-
- Error MemBuffer::commit() { return Error::success(); }
-diff --git a/llvm/tools/llvm-objcopy/Buffer.h b/llvm/tools/llvm-objcopy/Buffer.h
-index 482777fe05c..40670accac2 100644
---- a/llvm/tools/llvm-objcopy/Buffer.h
-+++ b/llvm/tools/llvm-objcopy/Buffer.h
-@@ -27,7 +27,7 @@ class Buffer {
-
- public:
- virtual ~Buffer();
-- virtual void allocate(size_t Size) = 0;
-+ virtual Error allocate(size_t Size) = 0;
- virtual uint8_t *getBufferStart() = 0;
- virtual Error commit() = 0;
-
-@@ -39,7 +39,7 @@ class FileBuffer : public Buffer {
- std::unique_ptr<FileOutputBuffer> Buf;
-
- public:
-- void allocate(size_t Size) override;
-+ Error allocate(size_t Size) override;
- uint8_t *getBufferStart() override;
- Error commit() override;
-
-@@ -50,7 +50,7 @@ class MemBuffer : public Buffer {
- std::unique_ptr<WritableMemoryBuffer> Buf;
-
- public:
-- void allocate(size_t Size) override;
-+ Error allocate(size_t Size) override;
- uint8_t *getBufferStart() override;
- Error commit() override;
-
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index 4f57131d5ab..db3589bb119 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -324,7 +324,8 @@ Error COFFWriter::write(bool IsBigObj) {
- if (Error E = finalize(IsBigObj))
- return E;
-
-- Buf.allocate(FileSize);
-+ if (Error E = Buf.allocate(FileSize))
-+ return E;
-
- writeHeaders(IsBigObj);
- writeSections();
-diff --git a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
-index a2996395c1f..2a52f1f9951 100644
---- a/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
-@@ -176,8 +176,10 @@ static void splitDWOToFile(const CopyConfig &Config, const Reader &Reader,
- DWOFile->Machine = Config.OutputArch.getValue().EMachine;
- FileBuffer FB(File);
- auto Writer = createWriter(Config, *DWOFile, FB, OutputElfType);
-- Writer->finalize();
-- Writer->write();
-+ if (Error E = Writer->finalize())
-+ error(std::move(E));
-+ if (Error E = Writer->write())
-+ error(std::move(E));
- }
-
- static Error dumpSectionToFile(StringRef SecName, StringRef Filename,
-@@ -542,8 +544,10 @@ void executeObjcopyOnRawBinary(const CopyConfig &Config, MemoryBuffer &In,
- handleArgs(Config, *Obj, Reader, OutputElfType);
- std::unique_ptr<Writer> Writer =
- createWriter(Config, *Obj, Out, OutputElfType);
-- Writer->finalize();
-- Writer->write();
-+ if (Error E = Writer->finalize())
-+ error(std::move(E));
-+ if (Error E = Writer->write())
-+ error(std::move(E));
- }
-
- void executeObjcopyOnBinary(const CopyConfig &Config,
-@@ -570,8 +574,10 @@ void executeObjcopyOnBinary(const CopyConfig &Config,
- handleArgs(Config, *Obj, Reader, OutputElfType);
- std::unique_ptr<Writer> Writer =
- createWriter(Config, *Obj, Out, OutputElfType);
-- Writer->finalize();
-- Writer->write();
-+ if (Error E = Writer->finalize())
-+ error(std::move(E));
-+ if (Error E = Writer->write())
-+ error(std::move(E));
- if (!Config.BuildIdLinkDir.empty() && Config.BuildIdLinkOutput) {
- linkToBuildIdDir(Config, Config.OutputFilename,
- Config.BuildIdLinkOutput.getValue(), BuildIdBytes);
-diff --git a/llvm/tools/llvm-objcopy/ELF/Object.cpp b/llvm/tools/llvm-objcopy/ELF/Object.cpp
-index fecb752a39f..ef5dc5d7951 100644
---- a/llvm/tools/llvm-objcopy/ELF/Object.cpp
-+++ b/llvm/tools/llvm-objcopy/ELF/Object.cpp
-@@ -1488,17 +1488,16 @@ template <class ELFT> size_t ELFWriter<ELFT>::totalSize() const {
- NullSectionSize;
- }
-
--template <class ELFT> void ELFWriter<ELFT>::write() {
-+template <class ELFT> Error ELFWriter<ELFT>::write() {
- writeEhdr();
- writePhdrs();
- writeSectionData();
- if (WriteSectionHeaders)
- writeShdrs();
-- if (auto E = Buf.commit())
-- reportError(Buf.getName(), errorToErrorCode(std::move(E)));
-+ return Buf.commit();
- }
-
--template <class ELFT> void ELFWriter<ELFT>::finalize() {
-+template <class ELFT> Error ELFWriter<ELFT>::finalize() {
- // It could happen that SectionNames has been removed and yet the user wants
- // a section header table output. We need to throw an error if a user tries
- // to do that.
-@@ -1582,21 +1581,22 @@ template <class ELFT> void ELFWriter<ELFT>::finalize() {
- Section.finalize();
- }
-
-- Buf.allocate(totalSize());
-+ if (Error E = Buf.allocate(totalSize()))
-+ return E;
- SecWriter = llvm::make_unique<ELFSectionWriter<ELFT>>(Buf);
-+ return Error::success();
- }
-
--void BinaryWriter::write() {
-+Error BinaryWriter::write() {
- for (auto &Section : Obj.sections()) {
- if ((Section.Flags & SHF_ALLOC) == 0)
- continue;
- Section.accept(*SecWriter);
- }
-- if (auto E = Buf.commit())
-- reportError(Buf.getName(), errorToErrorCode(std::move(E)));
-+ return Buf.commit();
- }
-
--void BinaryWriter::finalize() {
-+Error BinaryWriter::finalize() {
- // TODO: Create a filter range to construct OrderedSegments from so that this
- // code can be deduped with assignOffsets above. This should also solve the
- // todo below for LayoutSections.
-@@ -1675,8 +1675,10 @@ void BinaryWriter::finalize() {
- TotalSize = std::max(TotalSize, Section->Offset + Section->Size);
- }
-
-- Buf.allocate(TotalSize);
-+ if (Error E = Buf.allocate(TotalSize))
-+ return E;
- SecWriter = llvm::make_unique<BinarySectionWriter>(Buf);
-+ return Error::success();
- }
-
- template class ELFBuilder<ELF64LE>;
-diff --git a/llvm/tools/llvm-objcopy/ELF/Object.h b/llvm/tools/llvm-objcopy/ELF/Object.h
-index 0dcb0d888bc..9e2b64be9dc 100644
---- a/llvm/tools/llvm-objcopy/ELF/Object.h
-+++ b/llvm/tools/llvm-objcopy/ELF/Object.h
-@@ -193,8 +193,8 @@ protected:
-
- public:
- virtual ~Writer();
-- virtual void finalize() = 0;
-- virtual void write() = 0;
-+ virtual Error finalize() = 0;
-+ virtual Error write() = 0;
-
- Writer(Object &O, Buffer &B) : Obj(O), Buf(B) {}
- };
-@@ -226,8 +226,8 @@ public:
- virtual ~ELFWriter() {}
- bool WriteSectionHeaders = true;
-
-- void finalize() override;
-- void write() override;
-+ Error finalize() override;
-+ Error write() override;
- ELFWriter(Object &Obj, Buffer &Buf, bool WSH)
- : Writer(Obj, Buf), WriteSectionHeaders(WSH) {}
- };
-@@ -240,8 +240,8 @@ private:
-
- public:
- ~BinaryWriter() {}
-- void finalize() override;
-- void write() override;
-+ Error finalize() override;
-+ Error write() override;
- BinaryWriter(Object &Obj, Buffer &Buf) : Writer(Obj, Buf) {}
- };
-
-diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
-index d27395f2ae0..75d513546b7 100644
---- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
-@@ -56,6 +56,16 @@ LLVM_ATTRIBUTE_NORETURN void error(Twine Message) {
- exit(1);
- }
-
-+LLVM_ATTRIBUTE_NORETURN void error(Error E) {
-+ assert(E);
-+ std::string Buf;
-+ raw_string_ostream OS(Buf);
-+ logAllUnhandledErrors(std::move(E), OS);
-+ OS.flush();
-+ WithColor::error(errs(), ToolName) << Buf;
-+ exit(1);
-+}
-+
- LLVM_ATTRIBUTE_NORETURN void reportError(StringRef File, std::error_code EC) {
- assert(EC);
- WithColor::error(errs(), ToolName)
-@@ -100,10 +110,11 @@ static Error deepWriteArchive(StringRef ArcName,
- // NewArchiveMember still requires them even though writeArchive does not
- // write them on disk.
- FileBuffer FB(Member.MemberName);
-- FB.allocate(Member.Buf->getBufferSize());
-+ if (Error E = FB.allocate(Member.Buf->getBufferSize()))
-+ return E;
- std::copy(Member.Buf->getBufferStart(), Member.Buf->getBufferEnd(),
- FB.getBufferStart());
-- if (auto E = FB.commit())
-+ if (Error E = FB.commit())
- return E;
- }
- return Error::success();
-diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.h b/llvm/tools/llvm-objcopy/llvm-objcopy.h
-index 46d8339576c..18a789ca1f8 100644
---- a/llvm/tools/llvm-objcopy/llvm-objcopy.h
-+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.h
-@@ -19,6 +19,7 @@ namespace llvm {
- namespace objcopy {
-
- LLVM_ATTRIBUTE_NORETURN extern void error(Twine Message);
-+LLVM_ATTRIBUTE_NORETURN extern void error(Error E);
- LLVM_ATTRIBUTE_NORETURN extern void reportError(StringRef File, Error E);
- LLVM_ATTRIBUTE_NORETURN extern void reportError(StringRef File,
- std::error_code EC);
---
-2.17.1
-
diff --git a/projects/clang/win-patches/llvm-objcopy-9.patch b/projects/clang/win-patches/llvm-objcopy-9.patch
deleted file mode 100644
index 6cb4656..0000000
--- a/projects/clang/win-patches/llvm-objcopy-9.patch
+++ /dev/null
@@ -1,260 +0,0 @@
-From 840d70f854a1d550924ced1d00160efcc7b8549a Mon Sep 17 00:00:00 2001
-From: Martin Storsjo <martin(a)martin.st>
-Date: Wed, 23 Jan 2019 08:25:28 +0000
-Subject: [PATCH] Reapply: [llvm-objcopy] [COFF] Implement --add-gnu-debuglink
-
-This was reverted since it broke a couple buildbots. The reason
-for the breakage is not yet known, but this time, the test has
-got more diagnostics added, to hopefully allow figuring out
-what goes wrong.
-
-Differential Revision: https://reviews.llvm.org/D57007
-
-git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351931 91177308-0d34-0410-b5e6-96231b3b80d8
----
- .../llvm-objcopy/COFF/add-gnu-debuglink.test | 48 +++++++++++++++
- tools/llvm-objcopy/COFF/COFFObjcopy.cpp | 61 +++++++++++++++++++
- tools/llvm-objcopy/COFF/Object.cpp | 2 +-
- tools/llvm-objcopy/COFF/Object.h | 26 +++++++-
- tools/llvm-objcopy/COFF/Reader.cpp | 4 +-
- tools/llvm-objcopy/COFF/Writer.cpp | 9 +--
- 6 files changed, 143 insertions(+), 7 deletions(-)
- create mode 100644 test/tools/llvm-objcopy/COFF/add-gnu-debuglink.test
-
-diff --git a/llvm/test/tools/llvm-objcopy/COFF/add-gnu-debuglink.test b/llvm/test/tools/llvm-objcopy/COFF/add-gnu-debuglink.test
-new file mode 100644
-index 00000000000..cf3a9bba920
---- /dev/null
-+++ b/llvm/test/tools/llvm-objcopy/COFF/add-gnu-debuglink.test
-@@ -0,0 +1,48 @@
-+RUN: yaml2obj %p/Inputs/x86_64-exe.yaml > %t.in123.exe
-+
-+# Using a debuglink filename with a length that is a multiple of 4, to
-+# showcase padding in CONTENTS below.
-+
-+RUN: llvm-objcopy --add-gnu-debuglink=%t.in123.exe %t.in123.exe %t.out.exe
-+
-+# Temporary debugging of issues with this test:
-+RUN: ls -l %t.out.exe || true
-+RUN: od -Ax -t x1 %t.out.exe || true
-+RUN: llvm-readobj -sections %t.out.exe || true
-+
-+RUN: llvm-readobj -sections %t.out.exe | FileCheck %s --check-prefix=SECTIONS
-+RUN: llvm-objdump -s %t.out.exe | FileCheck %s --check-prefix=CONTENTS
-+
-+# Show the last of the preexisting sections, which is used for choosing
-+# a virtual address for the generated one.
-+
-+SECTIONS: Section {
-+SECTIONS: Number: 4
-+SECTIONS-NEXT: Name: .pdata
-+SECTIONS-NEXT: VirtualSize: 0x18
-+SECTIONS-NEXT: VirtualAddress: 0x4000
-+SECTIONS-NEXT: RawDataSize: 512
-+SECTIONS: Section {
-+SECTIONS-NEXT: Number: 5
-+SECTIONS-NEXT: Name: .gnu_debuglink
-+SECTIONS-NEXT: VirtualSize: 0x2C
-+SECTIONS-NEXT: VirtualAddress: 0x5000
-+SECTIONS-NEXT: RawDataSize: 512
-+SECTIONS-NEXT: PointerToRawData:
-+SECTIONS-NEXT: PointerToRelocations:
-+SECTIONS-NEXT: PointerToLineNumbers:
-+SECTIONS-NEXT: RelocationCount:
-+SECTIONS-NEXT: LineNumberCount:
-+SECTIONS-NEXT: Characteristics [ (0x42000040)
-+SECTIONS-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-+SECTIONS-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-+SECTIONS-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-+SECTIONS-NEXT: ]
-+
-+# Note: The last 4 bytes here are the crc of the referenced file - if the
-+# yaml2obj generated file changes, this crc changes.
-+
-+CONTENTS: Contents of section .gnu_debuglink:
-+CONTENTS: 40005000 6164642d 676e752d 64656275 676c696e add-gnu-debuglin
-+CONTENTS: 40005010 6b2e7465 73742e74 6d702e69 6e313233 k.test.tmp.in123
-+CONTENTS: 40005020 2e657865 00000000 7929adc3 .exe
-diff --git a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-index 8d8f53d13d8..20adbe11e7a 100644
---- a/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
-@@ -17,6 +17,8 @@
- #include "llvm/Object/Binary.h"
- #include "llvm/Object/COFF.h"
- #include "llvm/Support/Errc.h"
-+#include "llvm/Support/JamCRC.h"
-+#include "llvm/Support/Path.h"
- #include <cassert>
-
- namespace llvm {
-@@ -30,6 +32,61 @@ static bool isDebugSection(const Section &Sec) {
- return Sec.Name.startswith(".debug");
- }
-
-+static uint64_t getNextRVA(const Object &Obj) {
-+ if (Obj.getSections().empty())
-+ return 0;
-+ const Section &Last = Obj.getSections().back();
-+ return alignTo(Last.Header.VirtualAddress + Last.Header.VirtualSize,
-+ Obj.PeHeader.SectionAlignment);
-+}
-+
-+static uint32_t getCRC32(StringRef Data) {
-+ JamCRC CRC;
-+ CRC.update(ArrayRef<char>(Data.data(), Data.size()));
-+ // The CRC32 value needs to be complemented because the JamCRC dosn't
-+ // finalize the CRC32 value. It also dosn't negate the initial CRC32 value
-+ // but it starts by default at 0xFFFFFFFF which is the complement of zero.
-+ return ~CRC.getCRC();
-+}
-+
-+static std::vector<uint8_t> createGnuDebugLinkSectionContents(StringRef File) {
-+ ErrorOr<std::unique_ptr<MemoryBuffer>> LinkTargetOrErr =
-+ MemoryBuffer::getFile(File);
-+ if (!LinkTargetOrErr)
-+ error("'" + File + "': " + LinkTargetOrErr.getError().message());
-+ auto LinkTarget = std::move(*LinkTargetOrErr);
-+ uint32_t CRC32 = getCRC32(LinkTarget->getBuffer());
-+
-+ StringRef FileName = sys::path::filename(File);
-+ size_t CRCPos = alignTo(FileName.size() + 1, 4);
-+ std::vector<uint8_t> Data(CRCPos + 4);
-+ memcpy(Data.data(), FileName.data(), FileName.size());
-+ support::endian::write32le(Data.data() + CRCPos, CRC32);
-+ return Data;
-+}
-+
-+static void addGnuDebugLink(Object &Obj, StringRef DebugLinkFile) {
-+ uint32_t StartRVA = getNextRVA(Obj);
-+
-+ std::vector<Section> Sections;
-+ Section Sec;
-+ Sec.setOwnedContents(createGnuDebugLinkSectionContents(DebugLinkFile));
-+ Sec.Name = ".gnu_debuglink";
-+ Sec.Header.VirtualSize = Sec.getContents().size();
-+ Sec.Header.VirtualAddress = StartRVA;
-+ Sec.Header.SizeOfRawData =
-+ alignTo(Sec.Header.VirtualSize, Obj.PeHeader.FileAlignment);
-+ // Sec.Header.PointerToRawData is filled in by the writer.
-+ Sec.Header.PointerToRelocations = 0;
-+ Sec.Header.PointerToLinenumbers = 0;
-+ // Sec.Header.NumberOfRelocations is filled in by the writer.
-+ Sec.Header.NumberOfLinenumbers = 0;
-+ Sec.Header.Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA |
-+ IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE;
-+ Sections.push_back(Sec);
-+ Obj.addSections(Sections);
-+}
-+
- static Error handleArgs(const CopyConfig &Config, Object &Obj) {
- // Perform the actual section removals.
- Obj.removeSections([&Config](const Section &Sec) {
-@@ -109,6 +166,10 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) {
-
- return false;
- });
-+
-+ if (!Config.AddGnuDebugLink.empty())
-+ addGnuDebugLink(Obj, Config.AddGnuDebugLink);
-+
- return Error::success();
- }
-
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.cpp b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-index 83435dffa98..8c382c1faef 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.cpp
-@@ -129,7 +129,7 @@ void Object::removeSections(function_ref<bool(const Section &)> ToRemove) {
- void Object::truncateSections(function_ref<bool(const Section &)> ToTruncate) {
- for (Section &Sec : Sections) {
- if (ToTruncate(Sec)) {
-- Sec.Contents = ArrayRef<uint8_t>();
-+ Sec.clearContents();
- Sec.Relocs.clear();
- Sec.Header.SizeOfRawData = 0;
- }
-diff --git a/llvm/tools/llvm-objcopy/COFF/Object.h b/llvm/tools/llvm-objcopy/COFF/Object.h
-index 0630f9c5ff8..afa272286ef 100644
---- a/llvm/tools/llvm-objcopy/COFF/Object.h
-+++ b/llvm/tools/llvm-objcopy/COFF/Object.h
-@@ -35,11 +35,35 @@ struct Relocation {
-
- struct Section {
- object::coff_section Header;
-- ArrayRef<uint8_t> Contents;
- std::vector<Relocation> Relocs;
- StringRef Name;
- ssize_t UniqueId;
- size_t Index;
-+
-+ ArrayRef<uint8_t> getContents() const {
-+ if (!OwnedContents.empty())
-+ return OwnedContents;
-+ return ContentsRef;
-+ }
-+
-+ void setContentsRef(ArrayRef<uint8_t> Data) {
-+ OwnedContents.clear();
-+ ContentsRef = Data;
-+ }
-+
-+ void setOwnedContents(std::vector<uint8_t> &&Data) {
-+ ContentsRef = ArrayRef<uint8_t>();
-+ OwnedContents = std::move(Data);
-+ }
-+
-+ void clearContents() {
-+ ContentsRef = ArrayRef<uint8_t>();
-+ OwnedContents.clear();
-+ }
-+
-+private:
-+ ArrayRef<uint8_t> ContentsRef;
-+ std::vector<uint8_t> OwnedContents;
- };
-
- struct Symbol {
-diff --git a/llvm/tools/llvm-objcopy/COFF/Reader.cpp b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-index 2446277cc2b..87dd60a43cf 100644
---- a/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Reader.cpp
-@@ -69,8 +69,10 @@ Error COFFReader::readSections(Object &Obj) const {
- Sections.push_back(Section());
- Section &S = Sections.back();
- S.Header = *Sec;
-- if (auto EC = COFFObj.getSectionContents(Sec, S.Contents))
-+ ArrayRef<uint8_t> Contents;
-+ if (auto EC = COFFObj.getSectionContents(Sec, Contents))
- return errorCodeToError(EC);
-+ S.setContentsRef(Contents);
- ArrayRef<coff_relocation> Relocs = COFFObj.getRelocations(Sec);
- for (const coff_relocation &R : Relocs)
- S.Relocs.push_back(R);
-diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.cpp b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-index db3589bb119..05e46291c39 100644
---- a/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-+++ b/llvm/tools/llvm-objcopy/COFF/Writer.cpp
-@@ -286,14 +286,15 @@ void COFFWriter::writeHeaders(bool IsBigObj) {
- void COFFWriter::writeSections() {
- for (const auto &S : Obj.getSections()) {
- uint8_t *Ptr = Buf.getBufferStart() + S.Header.PointerToRawData;
-- std::copy(S.Contents.begin(), S.Contents.end(), Ptr);
-+ ArrayRef<uint8_t> Contents = S.getContents();
-+ std::copy(Contents.begin(), Contents.end(), Ptr);
-
- // For executable sections, pad the remainder of the raw data size with
- // 0xcc, which is int3 on x86.
- if ((S.Header.Characteristics & IMAGE_SCN_CNT_CODE) &&
-- S.Header.SizeOfRawData > S.Contents.size())
-- memset(Ptr + S.Contents.size(), 0xcc,
-- S.Header.SizeOfRawData - S.Contents.size());
-+ S.Header.SizeOfRawData > Contents.size())
-+ memset(Ptr + Contents.size(), 0xcc,
-+ S.Header.SizeOfRawData - Contents.size());
-
- Ptr += S.Header.SizeOfRawData;
- for (const auto &R : S.Relocs) {
---
-2.17.1
-
diff --git a/projects/fenix-clang/build b/projects/fenix-clang/build
index c8cceb4..d61ed43 100644
--- a/projects/fenix-clang/build
+++ b/projects/fenix-clang/build
@@ -10,6 +10,8 @@ export PATH="/var/tmp/dist/cmake/bin:$PATH"
[% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc'),
hardened_gcc => 0 }) %]
ln -s gcc /var/tmp/dist/gcc/bin/cc
+ tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
+ export PATH="/var/tmp/dist/binutils/bin:$PATH"
[% END -%]
mkdir -p /var/tmp/build
cd /var/tmp/build
@@ -34,6 +36,7 @@ mkdir build
cd build
cmake .. -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$distdir \
-DCMAKE_BUILD_TYPE:STRING=Release \
+ [% IF c("var/linux") -%]-DCOMPILER_RT_BUILD_CRT=OFF \[% END -%]
[% IF c("var/rlbox") -%]-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \[% END -%]
$LLVM_HOME
make -j[% c("buildconf/num_procs") %]
diff --git a/projects/fenix-clang/config b/projects/fenix-clang/config
index 8f16354..c4b7efc 100644
--- a/projects/fenix-clang/config
+++ b/projects/fenix-clang/config
@@ -13,6 +13,9 @@ input_files:
- name: '[% c("var/compiler") %]'
project: '[% c("var/compiler") %]'
enable: '[% c("var/linux") %]'
+ - name: binutils
+ project: binutils
+ enable: '[% c("var/linux") %]'
- project: cmake
name: cmake
- URL: 'https://github.com/llvm/llvm-project/releases/download/llvmorg-[% c("version") %]/llvm-[% c("version") %].src.tar.xz'
1
0
commit 11848e8c48eb9617ef197b82d16875d925eeb3e1
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Jul 8 12:12:53 2020 +0000
Translations update
---
chrome/locale/ar/torbutton.properties | 8 ++---
chrome/locale/bn-BD/torbutton.properties | 26 +++++++-------
chrome/locale/fr/aboutTor.dtd | 2 +-
chrome/locale/fr/brand.dtd | 2 +-
chrome/locale/fr/brand.properties | 2 +-
chrome/locale/fr/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/fr/torbutton.properties | 2 +-
chrome/locale/ja/aboutDialog.dtd | 2 +-
chrome/locale/ja/torbutton.properties | 28 +++++++--------
chrome/locale/pl/torbutton.properties | 46 ++++++++++++-------------
10 files changed, 60 insertions(+), 60 deletions(-)
diff --git a/chrome/locale/ar/torbutton.properties b/chrome/locale/ar/torbutton.properties
index 23b34ec5..60cbd6b7 100644
--- a/chrome/locale/ar/torbutton.properties
+++ b/chrome/locale/ar/torbutton.properties
@@ -60,7 +60,7 @@ updateDownloadingPanelUILabel=جاري تحميل S% من التحديث
# .Onion Page Info prompt. Strings are kept here for ease of translation.
pageInfo_OnionEncryptionWithBitsAndProtocol=الاتصال معمى (خدمة بصلة، %1$S، مفاتيح %2$S بتة، %3$S)
pageInfo_OnionEncryption=الاتصال معمى (خدمة بصلة)
-pageInfo_OnionName=Onion Name:
+pageInfo_OnionName=موقع أونيون
# Onion services strings. Strings are kept here for ease of translation.
onionServices.learnMore=تعرف على المزيد
@@ -71,8 +71,8 @@ onionServices.errorPage.onionSite=موقع Onion
# an error code, e.g., 0xF3.
# Tor SOCKS error 0xF0:
onionServices.descNotFound.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion
-onionServices.descNotFound.header=Onionsite Not Found
-onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator.
+onionServices.descNotFound.header=لم يتم العثور على موقع Onion
+onionServices.descNotFound=على الأغلب أن موقع onion غير متصل.تواصل مع مديرها.
onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client.
# Tor SOCKS error 0xF1:
onionServices.descInvalid.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion
@@ -82,7 +82,7 @@ onionServices.descInvalid.longDescription=Details: %S — The requested onion se
# Tor SOCKS error 0xF2:
onionServices.introFailed.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion
onionServices.introFailed.header=موقع Onion قطع الاتصال.
-onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator.
+onionServices.introFailed=على الأغلب أن موقع onion غير متصل.تواصل مع مديرها .
onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running.
# Tor SOCKS error 0xF3:
onionServices.rendezvousFailed.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion
diff --git a/chrome/locale/bn-BD/torbutton.properties b/chrome/locale/bn-BD/torbutton.properties
index fb43f5c0..e3e0e1cf 100644
--- a/chrome/locale/bn-BD/torbutton.properties
+++ b/chrome/locale/bn-BD/torbutton.properties
@@ -1,4 +1,4 @@
-torbutton.circuit_display.internet = ইন্টারনেটের
+torbutton.circuit_display.internet = ইন্টারনেট
torbutton.circuit_display.ip_unknown = আইপি অজানা
torbutton.circuit_display.onion_site = অনিওন সাইট
torbutton.circuit_display.this_browser = এই ব্রাউজার
@@ -8,8 +8,8 @@ torbutton.circuit_display.unknown_country = অজানা দেশ
torbutton.circuit_display.guard = গার্ড
torbutton.circuit_display.guard_note = আপনার [গার্ড] নোড পরিবর্তন হতে পারে না।
torbutton.circuit_display.learn_more = আরও জানুন
-torbutton.circuit_display.click_to_copy = Click to Copy
-torbutton.circuit_display.copied = Copied!
+torbutton.circuit_display.click_to_copy = অনুলিপি করতে ক্লিক করো
+torbutton.circuit_display.copied = অনুলিপিত!
torbutton.content_sizer.margin_tooltip = টর ব্রাউজার আপনার উইন্ডো প্রস্থ এবং উচ্চতা নিখুঁত করতে এই মার্জিন যোগ করে, এবং এইভাবে মানুষ আপনাকে অনলাইন ট্র্যাক করার ক্ষমতা হ্রাস করে।
torbutton.panel.tooltip.disabled = টর সক্রিয় করতে ক্লিক করুন
torbutton.panel.tooltip.enabled = টর অক্ষম করতে ক্লিক করুন
@@ -60,32 +60,32 @@ updateDownloadingPanelUILabel=ডাউনলোড হচ্ছে %S আধু
# .Onion Page Info prompt. Strings are kept here for ease of translation.
pageInfo_OnionEncryptionWithBitsAndProtocol=সংযোগ এনক্রিপ্ট (Onion Service, %1$S, %2$S bit keys, %3$S)
pageInfo_OnionEncryption=সংযোগ এনক্রিপ্ট (Onion Service)
-pageInfo_OnionName=Onion Name:
+pageInfo_OnionName=অনিওন নাম
# Onion services strings. Strings are kept here for ease of translation.
onionServices.learnMore=আরও জানুন
onionServices.errorPage.browser=ব্রাউজার
onionServices.errorPage.network=নেটওয়ার্ক
-onionServices.errorPage.onionSite=Onionsite
+onionServices.errorPage.onionSite=অনিওনসাইট
# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with
# an error code, e.g., 0xF3.
# Tor SOCKS error 0xF0:
-onionServices.descNotFound.pageTitle=Problem Loading Onionsite
-onionServices.descNotFound.header=Onionsite Not Found
+onionServices.descNotFound.pageTitle=অনিওনসাইট লোড করতে সমস্যা
+onionServices.descNotFound.header=অনিওনসাইট পাওয়া যায় নি
onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator.
onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client.
# Tor SOCKS error 0xF1:
-onionServices.descInvalid.pageTitle=Problem Loading Onionsite
+onionServices.descInvalid.pageTitle=অনিওনসাইট লোড করতে সমস্যা
onionServices.descInvalid.header=Onionsite Cannot Be Reached
onionServices.descInvalid=The onionsite is unreachable due an internal error.
onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed.
# Tor SOCKS error 0xF2:
-onionServices.introFailed.pageTitle=Problem Loading Onionsite
+onionServices.introFailed.pageTitle=অনিওনসাইট লোড করতে সমস্যা
onionServices.introFailed.header=Onionsite Has Disconnected
onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator.
onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running.
# Tor SOCKS error 0xF3:
-onionServices.rendezvousFailed.pageTitle=Problem Loading Onionsite
+onionServices.rendezvousFailed.pageTitle=অনিওনসাইট লোড করতে সমস্যা
onionServices.rendezvousFailed.header=Unable to Connect to Onionsite
onionServices.rendezvousFailed=The onionsite is busy or the Tor network is overloaded. Try again later.
onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection.
@@ -100,12 +100,12 @@ onionServices.clientAuthIncorrect.header=Onionsite Authentication Failed
onionServices.clientAuthIncorrect=The provided key is incorrect or has been revoked. Contact the onionsite administrator.
onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked.
# Tor SOCKS error 0xF6:
-onionServices.badAddress.pageTitle=Problem Loading Onionsite
+onionServices.badAddress.pageTitle=অনিওনসাইট লোড করতে সমস্যা
onionServices.badAddress.header=Invalid Onionsite Address
onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly.
onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid.
# Tor SOCKS error 0xF7:
-onionServices.introTimedOut.pageTitle=Problem Loading Onionsite
+onionServices.introTimedOut.pageTitle=অনিওনসাইট লোড করতে সমস্যা
onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out
onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection.
onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit.
@@ -122,7 +122,7 @@ onionServices.authPreferences.overview=Some onion services require that you iden
onionServices.authPreferences.savedKeys=Saved Keys…
onionServices.authPreferences.dialogTitle=Onion Service Keys
onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer
-onionServices.authPreferences.onionSite=Onionsite
+onionServices.authPreferences.onionSite=অনিওনসাইট
onionServices.authPreferences.onionKey=কি
onionServices.authPreferences.remove=অপসারণ
onionServices.authPreferences.removeAll=Remove All
diff --git a/chrome/locale/fr/aboutTor.dtd b/chrome/locale/fr/aboutTor.dtd
index e48a8fff..0356e3d8 100644
--- a/chrome/locale/fr/aboutTor.dtd
+++ b/chrome/locale/fr/aboutTor.dtd
@@ -22,7 +22,7 @@
<!ENTITY aboutTor.torbrowser_user_manual.accesskey "G">
<!ENTITY aboutTor.torbrowser_user_manual.label "Guide d’utilisation du Navigateur Tor">
-<!ENTITY aboutTor.tor_mission.label "Le Projet Tor est un organisme sans but lucratif US 501(c)(3) qui fait progresser les droits de la personne et les libertés en créant et en déployant des technologies gratuites d’anonymat et de protection de la vie privée et des données personnelles, à code source ouvert. Nous soutenons leur disponibilité et leur utilisation sans restriction, et promouvons une meilleure compréhension scientifique et populaire.">
+<!ENTITY aboutTor.tor_mission.label "Le Projet Tor est un organisme sans but lucratif US 501(c)(3) qui fait progresser les droits de la personne et les libertés en créant et en déployant des technologies gratuites d’anonymat et de protection de la vie privée et des données personnelles, à code source ouvert. Nous soutenons leur disponibilité et leur utilisation sans restriction, et promouvons une meilleure compréhension scientifique et populaire.">
<!ENTITY aboutTor.getInvolved.label "Impliquez-vous »">
<!ENTITY aboutTor.newsletter.tagline "Obtenez les dernières nouvelles au sujet de Tor directement dans votre boîte de réception.">
diff --git a/chrome/locale/fr/brand.dtd b/chrome/locale/fr/brand.dtd
index cee7ce86..96443d6a 100644
--- a/chrome/locale/fr/brand.dtd
+++ b/chrome/locale/fr/brand.dtd
@@ -5,7 +5,7 @@
<!ENTITY brandShorterName "Le Navigateur Tor">
<!ENTITY brandShortName "Le Navigateur Tor">
<!ENTITY brandFullName "Le Navigateur Tor">
-<!ENTITY vendorShortName "Le Projet Tor">
+<!ENTITY vendorShortName "Le Projet Tor">
<!ENTITY trademarkInfo.part1 "« Tor » et le « logo Onion » sont des marques de commerce de « The Projet Tor, Inc. »">
<!-- LOCALIZATION NOTE (brandProductName):
This brand name can be used in messages where the product name needs to
diff --git a/chrome/locale/fr/brand.properties b/chrome/locale/fr/brand.properties
index 3b9d6d91..0a8582ae 100644
--- a/chrome/locale/fr/brand.properties
+++ b/chrome/locale/fr/brand.properties
@@ -9,7 +9,7 @@ brandFullName=Le Navigateur Tor
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
brandProductName=Navigateur Tor
-vendorShortName=Le Projet Tor
+vendorShortName=Le Projet Tor
homePageSingleStartMain=Firefox Start, une page d’accueil rapide avec recherche intégrée
homePageImport=Importez votre page d’accueil à partir de %S
diff --git a/chrome/locale/fr/branding/tor-browser-brand.ftl b/chrome/locale/fr/branding/tor-browser-brand.ftl
index 88f33470..7c7adc87 100644
--- a/chrome/locale/fr/branding/tor-browser-brand.ftl
+++ b/chrome/locale/fr/branding/tor-browser-brand.ftl
@@ -8,5 +8,5 @@
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Navigateur Tor
--vendor-short-name = Le Projet Tor
+-vendor-short-name = Le Projet Tor
trademarkInfo = « Tor » et le « logo Onion » sont des marques de commerce de « The Projet Tor, Inc. »
diff --git a/chrome/locale/fr/torbutton.properties b/chrome/locale/fr/torbutton.properties
index 80aa4ebf..18edd134 100644
--- a/chrome/locale/fr/torbutton.properties
+++ b/chrome/locale/fr/torbutton.properties
@@ -87,7 +87,7 @@ onionServices.introFailed.longDescription=Détails : %S – Échec de présenta
# Tor SOCKS error 0xF3:
onionServices.rendezvousFailed.pageTitle=Problème de chargement du site onion
onionServices.rendezvousFailed.header=Impossible de se connecter au site onion
-onionServices.rendezvousFailed=Le site onion est occupé ou le réseau Tor est surchargé. Veuillez ressayer ultérieurement.
+onionServices.rendezvousFailed=Le site onion est occupé ou le réseau Tor est surchargé. Veuillez ressayer plus tard.
onionServices.rendezvousFailed.longDescription=Détails : %S – Échec de rencontre du client avec le service, ce qui signifie que le client n’a pas réussi à finaliser la connexion.
# Tor SOCKS error 0xF4:
onionServices.clientAuthMissing.pageTitle=Une autorisation est exigée
diff --git a/chrome/locale/ja/aboutDialog.dtd b/chrome/locale/ja/aboutDialog.dtd
index 53c012c0..f85fea1b 100644
--- a/chrome/locale/ja/aboutDialog.dtd
+++ b/chrome/locale/ja/aboutDialog.dtd
@@ -3,7 +3,7 @@
<!ENTITY project.tpoLink "&vendorShortName; によって開発されました。">
<!ENTITY project.end "あなたのオンラインでのプライバシーと自由を守る非営利団体です。">
-<!ENTITY help.start "支援に興味がありますか?">
+<!ENTITY help.start "支援しますか?">
<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en -->
<!ENTITY help.donateLink "寄付">
<!ENTITY help.or "や">
diff --git a/chrome/locale/ja/torbutton.properties b/chrome/locale/ja/torbutton.properties
index 5ebc1dbd..cc36ba78 100644
--- a/chrome/locale/ja/torbutton.properties
+++ b/chrome/locale/ja/torbutton.properties
@@ -1,7 +1,7 @@
torbutton.circuit_display.internet = インターネット
-torbutton.circuit_display.ip_unknown = 不明なIP
+torbutton.circuit_display.ip_unknown = 不明な IP
torbutton.circuit_display.onion_site = Onion サイト
-torbutton.circuit_display.this_browser = このブラウザー
+torbutton.circuit_display.this_browser = このブラウザ
torbutton.circuit_display.relay = リレー
torbutton.circuit_display.tor_bridge = ブリッジ
torbutton.circuit_display.unknown_country = 不明な国
@@ -11,12 +11,12 @@ torbutton.circuit_display.learn_more = 詳細情報
torbutton.circuit_display.click_to_copy = クリックしてコピー
torbutton.circuit_display.copied = コピーされました
torbutton.content_sizer.margin_tooltip = Tor Browser はウィンドウのサイズを平凡にするためにこのマージンを追加します。これにより、あなたのことをオンラインで追跡しにくくします。
-torbutton.panel.tooltip.disabled = クリックしてTorを有効にする
-torbutton.panel.tooltip.enabled = クリックしてTorを無効にする
+torbutton.panel.tooltip.disabled = クリックして Tor を有効にする
+torbutton.panel.tooltip.enabled = クリックして Tor を無効にする
torbutton.panel.label.disabled = Tor 無効
torbutton.panel.label.enabled = Tor 有効
-extensions.torbutton(a)torproject.org.description = TorbuttonはTorの設定を構成し、素早くかつ容易にプライベートな閲覧データをクリアするボタンを提供します。
-torbutton.popup.external.title = 外部ファイル種別をダウンロードしますか
+extensions.torbutton(a)torproject.org.description = Torbutton は Tor の設定を構成し、素早くかつ容易にプライベートな閲覧データをクリアするボタンを提供します。
+torbutton.popup.external.title = 外部ファイル種別をダウンロードしますか?
torbutton.popup.external.app = Tor Browser はこのファイルを表示できません。別のアプリケーションで開く必要があります。\n
torbutton.popup.external.note = ファイルのタイプの中に、アプリケーションが Tor を使用せずインターネットに接続する原因となる可能性があるものがあります。\n
torbutton.popup.external.suggest = 安全であるためには、オフラインの時のみダウンロードしたファイルを開くか、 Tails のような Tor のライブ CD を使用すべきです。\n
@@ -25,18 +25,18 @@ torbutton.popup.cancel = キャンセル
torbutton.popup.dontask = 今からファイルを自動的にダウンロードする
torbutton.popup.no_newnym = Tor コントロールポートにアクセスできませんでした。 Torbutton は新しい接続経路を安全に用意することができません。\n\nTor Browser バンドルを起動していますか?
torbutton.security_settings.menu.title = セキュリティ設定
-torbutton.title.prompt_torbrowser = 重要なTorbuttonの情報
-torbutton.popup.prompt_torbrowser = Torbuttonは現在別様に動作しています。もう止めることはできません。\n\n私たちは、非Torブラウジングのためにも使われているブラウザでのTorbuttonの使用が安全ではないため、この変更を行いました。 他の方法で修正することができないバグも多すぎました。\n\n正常にFirefoxを使用したい場合は、Torbuttonをアンインストールして、Tor Browser Bundleをダウンロードすべきです。 Tor Browserのプライバシー特性はFirefoxがTorbuttonと使われている時でも、通常のFirefoxのそれよりも優勢です。\n\nTorbuttonを削除するには、ツール->アドオン->エクステンションに行き、それからTorbuttonの隣の削除ボタンをクリックしてください。
-torbutton.popup.short_torbrowser = 重要なTorbuttonの情報!\n\nTorbuttonは現在常に有効です。\n\n詳細はTorbuttonをクリックしてください。
+torbutton.title.prompt_torbrowser = Torbutton の重要な情報
+torbutton.popup.prompt_torbrowser = Torbutton は現在別様に動作しています。もう止めることはできません。\n\n私たちは、非 Tor ブラウジングのためにも使われているブラウザでの Torbutton の使用が安全ではないため、この変更を行いました。 他の方法で修正することができないバグも多すぎました。\n\n正常にFirefoxを使用したい場合は、Torbutton をアンインストールして、Tor Browser バンドルをダウンロードすべきです。 Tor Browser のプライバシー特性は Firefox が Torbutton と使われている時でも、通常の Firefox のそれよりも優勢です。\n\nTorbutton を削除するには、ツール->アドオン->エクステンションに行き、それから Torbutton の隣の削除ボタンをクリックしてください。
+torbutton.popup.short_torbrowser = Torbutton の重要な情報\n\nTorbutton は現在常に有効です。\n\n詳細は Torbutton をクリックしてください。
-torbutton.popup.confirm_plugins = Flashなどのプラグインはあなたのプライバシーや匿名性を損なう恐れがあります。 \n\nそれらはTorを迂回しあなたの現在の位置やIPアドレスを漏らしてしまう恐れがあります。\n\n本当にプラグインを有効にしますか?\n\n
+torbutton.popup.confirm_plugins = Flash などのプラグインはあなたのプライバシーや匿名性を損なう恐れがあります。 \n\nそれらは Tor を迂回しあなたの現在の位置や IP アドレスを漏らしてしまう恐れがあります。\n\n本当にプラグインを有効にしますか?\n\n
torbutton.popup.never_ask_again = 次からはたずねない
torbutton.popup.confirm_newnym = Tor Browser は全てのウィンドウとタブを閉じようとしています。全てのセッションは失われます。\n\nあなたの情報をリセットするために Tor Browser を再起動しますか?\n\n
-torbutton.maximize_warning = Tor Browser を最大化すると、Webサイトはあなたのモニターサイズを利用して追跡できるようになります。Tor Browser のウィンドウのサイズは初期状態のままにしておくことをおすすめします。
+torbutton.maximize_warning = Tor Browser を最大化すると、ウェブサイトはあなたのモニターサイズを利用して追跡できるようになります。Tor Browser のウィンドウのサイズは初期状態のままにしておくことをおすすめします。
# Canvas permission prompt. Strings are kept here for ease of translation.
-canvas.siteprompt=このWebサイト(%S)がHTML5 canvas画像を使用しようとしています。これはあなたのコンピューターを識別するために使われる可能性があります。\n\nTor ブラウザーにHTML5 canvas画像の使用を許可しますか?
+canvas.siteprompt=このウェブサイト(%S)が HTML5 canvas 画像を使用しようとしています。これはあなたのコンピューターを識別するために使われる可能性があります。\n\nTor Browser に HTML5 canvas 画像の使用を許可しますか?
canvas.notNow=今は許可しない
canvas.notNowAccessKey=N
canvas.allow=許可する
@@ -126,8 +126,8 @@ onionServices.authPreferences.onionSite=Onion サイト
onionServices.authPreferences.onionKey=鍵
onionServices.authPreferences.remove=解除
onionServices.authPreferences.removeAll=すべて削除
-onionServices.authPreferences.failedToGetKeys=Unable to retrieve keys from tor
-onionServices.authPreferences.failedToRemoveKey=Unable to remove key
+onionServices.authPreferences.failedToGetKeys=Tor から鍵を取得できません
+onionServices.authPreferences.failedToRemoveKey=鍵を削除できません
# Onion-Location strings.
onionLocation.alwaysPrioritize=常に Onion を優先する
diff --git a/chrome/locale/pl/torbutton.properties b/chrome/locale/pl/torbutton.properties
index efa3a8a7..e1563298 100644
--- a/chrome/locale/pl/torbutton.properties
+++ b/chrome/locale/pl/torbutton.properties
@@ -60,7 +60,7 @@ updateDownloadingPanelUILabel=Pobieranie aktualizacji %S
# .Onion Page Info prompt. Strings are kept here for ease of translation.
pageInfo_OnionEncryptionWithBitsAndProtocol=Połączenie zaszyfrowane (usługa Onion, %1$S, %2$S klucze bitowe, %3$S)
pageInfo_OnionEncryption=Połączenie zaszyfrowane (usługa Onion)
-pageInfo_OnionName=Onion Name:
+pageInfo_OnionName=Nazwa Cebuli:
# Onion services strings. Strings are kept here for ease of translation.
onionServices.learnMore=Dowiedz się więcej
@@ -71,18 +71,18 @@ onionServices.errorPage.onionSite=Strona cebulowa
# an error code, e.g., 0xF3.
# Tor SOCKS error 0xF0:
onionServices.descNotFound.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.descNotFound.header=Onionsite Not Found
-onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator.
+onionServices.descNotFound.header=Nie znaleziono strony cebuli
+onionServices.descNotFound=Najbardziej prawdopodobną przyczyną jest to, że strona cebuli jest offline. Skontaktuj się z administratorem strony cebuli.
onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client.
# Tor SOCKS error 0xF1:
onionServices.descInvalid.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.descInvalid.header=Onionsite Cannot Be Reached
-onionServices.descInvalid=The onionsite is unreachable due an internal error.
-onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed.
+onionServices.descInvalid.header=Nie można dotrzeć do strony cebuli
+onionServices.descInvalid=Strona cebuli jest nieosiągalna z powodu błędu wewnętrznego.
+onionServices.descInvalid.longDescription=Szczegóły: %S — Żądany deskryptor usługi cebulowej nie może zostać przeanalizowany lub sprawdzenie poprawności podpisu nie powiodło się.
# Tor SOCKS error 0xF2:
onionServices.introFailed.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.introFailed.header=Onionsite Has Disconnected
-onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator.
+onionServices.introFailed.header=Strona cebuli została rozłączona
+onionServices.introFailed=Najbardziej prawdopodobną przyczyną jest to, że strona cebuli jest offline. Skontaktuj się z administratorem strony cebuli.
onionServices.introFailed.longDescription=Szczegóły: %S - Wprowadzenie nie powiodło się, co oznacza, że znaleziono deskryptor, ale usługa nie jest już połączona z punktem wprowadzenia. Prawdopodobnie usługa zmieniła swój deskryptor lub nie jest uruchomiona.
# Tor SOCKS error 0xF3:
onionServices.rendezvousFailed.pageTitle=Problem z ładowaniem strony Onionsite
@@ -93,35 +93,35 @@ onionServices.rendezvousFailed.longDescription=Szczegóły: %S — Klient nie m
onionServices.clientAuthMissing.pageTitle=Wymagana Autoryzacja
onionServices.clientAuthMissing.header=Strona Onionsite wymaga uwierzytelnienia
onionServices.clientAuthMissing=Dostęp do onionite wymaga klucza, ale żaden nie został dostarczony.
-onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing.
+onionServices.clientAuthMissing.longDescription=Szczegóły: %S — Klient pobrał żądany deskryptor usługi cebulowej, ale nie mógł odszyfrować jego zawartości, ponieważ brakuje informacji autoryzacyjnych klienta.
# Tor SOCKS error 0xF5:
onionServices.clientAuthIncorrect.pageTitle=Błąd Autoryzacji
onionServices.clientAuthIncorrect.header=Uwierzytelnianie strony Onionsite nie powiodło się
onionServices.clientAuthIncorrect=Podany klucz jest niepoprawny lub został odwołany. Skontaktuj się z administratorem strony onionsite.
-onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked.
+onionServices.clientAuthIncorrect.longDescription=Szczegóły: %S — Klient mógł pobrać żądany deskryptor usługi cebulowej, ale nie był w stanie odszyfrować jego zawartości przy użyciu podanych informacji autoryzacyjnych klienta. Może to oznaczać, że dostęp został cofnięty.
# Tor SOCKS error 0xF6:
onionServices.badAddress.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.badAddress.header=Invalid Onionsite Address
-onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly.
-onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid.
+onionServices.badAddress.header=Nieprawidłowy adres strony cebuli
+onionServices.badAddress=Podany adres strony cebulowej jest nieprawidłowy. Sprawdź, czy wpisałeś go poprawnie.
+onionServices.badAddress.longDescription=Szczegóły: %S — Podany adres .onion jest nieprawidłowy. Ten błąd jest zwracany z jednego z następujących powodów: suma kontrolna adresu nie jest zgodna, klucz publiczny ed25519 jest nieprawidłowy lub kodowanie jest nieprawidłowe.
# Tor SOCKS error 0xF7:
onionServices.introTimedOut.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out
-onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection.
-onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit.
+onionServices.introTimedOut.header=Limit czasu tworzenia obwodu cebuli
+onionServices.introTimedOut=Nie udało się połączyć z witryną cebuli, prawdopodobnie z powodu słabego połączenia sieciowego.
+onionServices.introTimedOut.longDescription=Szczegóły: %S — Upłynął limit czasu połączenia z żądaną usługą cebulową podczas próby zbudowania obwodu spotkania.
#
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
-onionServices.authPrompt.description2=%S is requesting that you authenticate.
+onionServices.authPrompt.description2=%S żąda uwierzytelnienia.
onionServices.authPrompt.keyPlaceholder=Wprowadź swój klucz prywatny dla tej usługi cebulowej
onionServices.authPrompt.done=Skończone
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
+onionServices.authPrompt.invalidKey=Wprowadź poprawny klucz (52 znaki baza32 lub 44 znaki baza64)
onionServices.authPrompt.failedToSetKey=Konfiguracja Tor przy użyciu twojego klucza nie powiodła się
-onionServices.authPreferences.header=Onion Services Authentication
-onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them.
+onionServices.authPreferences.header=Uwierzytelnianie usług cebulowych
+onionServices.authPreferences.overview=Niektóre usługi cebulowe wymagają identyfikacji za pomocą klucza (rodzaj hasła) przed uzyskaniem dostępu do nich.
onionServices.authPreferences.savedKeys=Zapisane klucze...
onionServices.authPreferences.dialogTitle=Klucze Usługi Cebulowej
-onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer
+onionServices.authPreferences.dialogIntro=Klucze następujących stron cebuli są przechowywane na twoim komputerze
onionServices.authPreferences.onionSite=Strona cebulowa
onionServices.authPreferences.onionKey=Klucz
onionServices.authPreferences.remove=Usuń
@@ -130,12 +130,12 @@ onionServices.authPreferences.failedToGetKeys=Nie można odebrać kluczy z Tor
onionServices.authPreferences.failedToRemoveKey=Usunięcie klucza nie powiodło się
# Onion-Location strings.
-onionLocation.alwaysPrioritize=Always Prioritize Onions
+onionLocation.alwaysPrioritize=Zawsze ustalaj priorytet cebuli
onionLocation.alwaysPrioritizeAccessKey=u
onionLocation.notNow=Nie teraz
onionLocation.notNowAccessKey=n
onionLocation.description=Bezpieczniejsza wersja tej strony jest dostępna jako usługa cebulowa. Usługi cebulowe pomagają twórcom witryn internetowych oraz odwiedzającym je bronić się przed monitorowaniem ruchu i cenzurą.
-onionLocation.tryThis=Try Onion Services
+onionLocation.tryThis=Wypróbuj Usługi Cebulowe
onionLocation.onionAvailable=.onion dostępna
onionLocation.learnMore=Dowiedz się więcej...
onionLocation.always=Zawsze
1
0

[torbutton/master] Bug 40001: Generate tor-browser-brand.ftl when importing translations
by gk@torproject.org 08 Jul '20
by gk@torproject.org 08 Jul '20
08 Jul '20
commit e486ef2454a7a9b3751407e3f5d532f939610a5d
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Apr 15 16:16:42 2020 +0200
Bug 40001: Generate tor-browser-brand.ftl when importing translations
---
chrome/locale/ar/branding/tor-browser-brand.ftl | 4 +--
chrome/locale/cs/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/da/branding/tor-browser-brand.ftl | 4 +--
chrome/locale/es-ES/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/fa/branding/tor-browser-brand.ftl | 8 ++---
chrome/locale/fr/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/hu/branding/tor-browser-brand.ftl | 8 ++---
chrome/locale/id/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/lt/branding/tor-browser-brand.ftl | 12 +++----
chrome/locale/ms/branding/tor-browser-brand.ftl | 12 +++----
chrome/locale/nb-NO/branding/tor-browser-brand.ftl | 4 +--
chrome/locale/nl/branding/tor-browser-brand.ftl | 10 +++---
chrome/locale/ru/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/sv-SE/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/th/branding/tor-browser-brand.ftl | 4 +--
chrome/locale/tr/branding/tor-browser-brand.ftl | 2 +-
chrome/locale/zh-CN/branding/tor-browser-brand.ftl | 8 ++---
chrome/locale/zh-TW/branding/tor-browser-brand.ftl | 4 +--
import-translations.sh | 37 ++++++++++++++++++++++
19 files changed, 83 insertions(+), 46 deletions(-)
diff --git a/chrome/locale/ar/branding/tor-browser-brand.ftl b/chrome/locale/ar/branding/tor-browser-brand.ftl
index 9595f702..1bcc7d0a 100644
--- a/chrome/locale/ar/branding/tor-browser-brand.ftl
+++ b/chrome/locale/ar/branding/tor-browser-brand.ftl
@@ -7,6 +7,6 @@
-brand-full-name = متصفح تور
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = متصفح تور
+-brand-product-name = متصفح Tor
-vendor-short-name = مشروع تور
-trademarkInfo = "تور" و "شعار البصلة" علامات تجارية مسجلة باسم شركة مشروع تور المحدودة
+trademarkInfo = 'تور' و 'شعار البصلة' علامات تجارية مسجلة باسم شركة مشروع تور المحدودة
diff --git a/chrome/locale/cs/branding/tor-browser-brand.ftl b/chrome/locale/cs/branding/tor-browser-brand.ftl
index 61719fb2..604c023d 100644
--- a/chrome/locale/cs/branding/tor-browser-brand.ftl
+++ b/chrome/locale/cs/branding/tor-browser-brand.ftl
@@ -9,4 +9,4 @@
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Prohlížeč Tor
-vendor-short-name = Tor Project
-trademarkInfo = "Tor" a "Onion logo" jsou registrované ochranné známky společnosti Tor Project, Inc.
+trademarkInfo = Tor a logo Onion jsou ochrannými známkami společnosti Tor Project, Inc.
diff --git a/chrome/locale/da/branding/tor-browser-brand.ftl b/chrome/locale/da/branding/tor-browser-brand.ftl
index c8554742..65c61062 100644
--- a/chrome/locale/da/branding/tor-browser-brand.ftl
+++ b/chrome/locale/da/branding/tor-browser-brand.ftl
@@ -8,5 +8,5 @@
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Tor Browser
--vendor-short-name = Tor-projektet
-trademarkInfo = "Tor" og "løg-logoet" er registrerede varemærker tilhørende Tor Project, Inc.
+-vendor-short-name = Tor-projekt
+trademarkInfo = 'Tor' og 'løg-logoet' er registrerede varemærker tilhørende Tor Project, Inc.
diff --git a/chrome/locale/es-ES/branding/tor-browser-brand.ftl b/chrome/locale/es-ES/branding/tor-browser-brand.ftl
index 7c301ac8..6c35c786 100644
--- a/chrome/locale/es-ES/branding/tor-browser-brand.ftl
+++ b/chrome/locale/es-ES/branding/tor-browser-brand.ftl
@@ -7,6 +7,6 @@
-brand-full-name = Tor Browser
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor Browser
+-brand-product-name = Navegador Tor
-vendor-short-name = Proyecto Tor
trademarkInfo = 'Tor' y el 'Onion Logo' (logo de la cebolla) son marcas registradas de la Tor Project, Inc.
diff --git a/chrome/locale/fa/branding/tor-browser-brand.ftl b/chrome/locale/fa/branding/tor-browser-brand.ftl
index 11b305c4..67f426de 100644
--- a/chrome/locale/fa/branding/tor-browser-brand.ftl
+++ b/chrome/locale/fa/branding/tor-browser-brand.ftl
@@ -2,11 +2,11 @@
# that is used by Firefox) to avoid picking up the -brand-short-name values
# that Mozilla includes in the Firefox language packs.
--brand-shorter-name = مرورگر تور
--brand-short-name = مرورگر تور
--brand-full-name = مرورگر تور
+-brand-shorter-name = مرورگر Tor
+-brand-short-name = مرورگر Tor
+-brand-full-name = مرورگر Tor
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = مرورگر تور
--vendor-short-name = پروژهٔ تور
+-vendor-short-name = پروژه Tor
trademarkInfo = 'Tor' و 'Onion Logo' علامت های تجاری ثبت شده از پروژه Tor هستند
diff --git a/chrome/locale/fr/branding/tor-browser-brand.ftl b/chrome/locale/fr/branding/tor-browser-brand.ftl
index 293fa032..88f33470 100644
--- a/chrome/locale/fr/branding/tor-browser-brand.ftl
+++ b/chrome/locale/fr/branding/tor-browser-brand.ftl
@@ -7,6 +7,6 @@
-brand-full-name = Le Navigateur Tor
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Le Navigateur Tor
+-brand-product-name = Navigateur Tor
-vendor-short-name = Le Projet Tor
trademarkInfo = « Tor » et le « logo Onion » sont des marques de commerce de « The Projet Tor, Inc. »
diff --git a/chrome/locale/hu/branding/tor-browser-brand.ftl b/chrome/locale/hu/branding/tor-browser-brand.ftl
index ab8ff46d..399c1231 100644
--- a/chrome/locale/hu/branding/tor-browser-brand.ftl
+++ b/chrome/locale/hu/branding/tor-browser-brand.ftl
@@ -2,11 +2,11 @@
# that is used by Firefox) to avoid picking up the -brand-short-name values
# that Mozilla includes in the Firefox language packs.
--brand-shorter-name = Tor Browser
--brand-short-name = Tor Browser
--brand-full-name = Tor Browser
+-brand-shorter-name = Tor Böngésző
+-brand-short-name = Tor Böngésző
+-brand-full-name = Tor Böngésző
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor Browser
+-brand-product-name = Tor Böngésző
-vendor-short-name = Tor Project
trademarkInfo = A 'Tor' és az 'Onion Logo' a Tor Project, Inc. bejegyzett védjegyei.
diff --git a/chrome/locale/id/branding/tor-browser-brand.ftl b/chrome/locale/id/branding/tor-browser-brand.ftl
index b220851c..1724e411 100644
--- a/chrome/locale/id/branding/tor-browser-brand.ftl
+++ b/chrome/locale/id/branding/tor-browser-brand.ftl
@@ -7,6 +7,6 @@
-brand-full-name = Tor Browser
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor Browser
+-brand-product-name = Peramban Tor
-vendor-short-name = Proyek Tor
trademarkInfo = 'Tor' dan 'Logo Onion' adalah merek dagang terdaftar Tor Project, Inc.
diff --git a/chrome/locale/lt/branding/tor-browser-brand.ftl b/chrome/locale/lt/branding/tor-browser-brand.ftl
index af1fd648..aeebaec4 100644
--- a/chrome/locale/lt/branding/tor-browser-brand.ftl
+++ b/chrome/locale/lt/branding/tor-browser-brand.ftl
@@ -2,11 +2,11 @@
# that is used by Firefox) to avoid picking up the -brand-short-name values
# that Mozilla includes in the Firefox language packs.
--brand-shorter-name = Tor Browser
--brand-short-name = Tor Browser
--brand-full-name = Tor Browser
+-brand-shorter-name = Tor Naršyklė
+-brand-short-name = Tor Naršyklė
+-brand-full-name = Tor Naršyklė
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor Browser
--vendor-short-name = Tor Project
-trademarkInfo = 'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.
+-brand-product-name = Tor Naršyklė
+-vendor-short-name = Tor projektas
+trademarkInfo = 'Tor' ir 'Onion logotipas' yra registruoti Tor Project, Inc. prekių ženklai.
diff --git a/chrome/locale/ms/branding/tor-browser-brand.ftl b/chrome/locale/ms/branding/tor-browser-brand.ftl
index af1fd648..058e7c9a 100644
--- a/chrome/locale/ms/branding/tor-browser-brand.ftl
+++ b/chrome/locale/ms/branding/tor-browser-brand.ftl
@@ -2,11 +2,11 @@
# that is used by Firefox) to avoid picking up the -brand-short-name values
# that Mozilla includes in the Firefox language packs.
--brand-shorter-name = Tor Browser
--brand-short-name = Tor Browser
--brand-full-name = Tor Browser
+-brand-shorter-name = Pelayar Tor
+-brand-short-name = Pelayar Tor
+-brand-full-name = Pelayar Tor
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor Browser
--vendor-short-name = Tor Project
-trademarkInfo = 'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.
+-brand-product-name = Pelayar Tor
+-vendor-short-name = Projek Tor
+trademarkInfo = 'Tor' dan 'Logo Onion' adalah cap dagangan berdaftar bagi Projek Tor, Inc.
diff --git a/chrome/locale/nb-NO/branding/tor-browser-brand.ftl b/chrome/locale/nb-NO/branding/tor-browser-brand.ftl
index b09f8a20..8f5ec614 100644
--- a/chrome/locale/nb-NO/branding/tor-browser-brand.ftl
+++ b/chrome/locale/nb-NO/branding/tor-browser-brand.ftl
@@ -7,6 +7,6 @@
-brand-full-name = Tor-nettleseren
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor-nettleseren
+-brand-product-name = Tor Browser
-vendor-short-name = Tor Project
-trademarkInfo = "Tor" og "Løk-logoen" er registrerte varemerker tilhørende the Tor Project, Inc.
+trademarkInfo = 'Tor' og 'Løk-logoen' er registrerte varemerker tilhørende the Tor Project, Inc.
diff --git a/chrome/locale/nl/branding/tor-browser-brand.ftl b/chrome/locale/nl/branding/tor-browser-brand.ftl
index 8ae5a2c6..77d51761 100644
--- a/chrome/locale/nl/branding/tor-browser-brand.ftl
+++ b/chrome/locale/nl/branding/tor-browser-brand.ftl
@@ -2,11 +2,11 @@
# that is used by Firefox) to avoid picking up the -brand-short-name values
# that Mozilla includes in the Firefox language packs.
--brand-shorter-name = Tor Browser
--brand-short-name = Tor Browser
--brand-full-name = Tor Browser
+-brand-shorter-name = Tor-browser
+-brand-short-name = Tor-browser
+-brand-full-name = Tor-browser
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Tor Browser
--vendor-short-name = Tor Project
-trademarkInfo = ‘Tor’ en het ‘Onion-logo’ zijn geregistreerde handelsmerken van het Tor Project, Inc.
+-vendor-short-name = Tor-project
+trademarkInfo = ‘Tor’ en het ‘Onion-logo’ zijn geregistreerde handelsmerken van Tor Project, Inc.
diff --git a/chrome/locale/ru/branding/tor-browser-brand.ftl b/chrome/locale/ru/branding/tor-browser-brand.ftl
index 44a1226e..c712a1b7 100644
--- a/chrome/locale/ru/branding/tor-browser-brand.ftl
+++ b/chrome/locale/ru/branding/tor-browser-brand.ftl
@@ -8,5 +8,5 @@
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Tor Browser
--vendor-short-name = Проект Tor
+-vendor-short-name = Tor Project
trademarkInfo = 'Tor' и логотип 'Onion' являются зарегистрированными торговыми марками Tor Project, Inc.
diff --git a/chrome/locale/sv-SE/branding/tor-browser-brand.ftl b/chrome/locale/sv-SE/branding/tor-browser-brand.ftl
index a7f08cfc..56cdff04 100644
--- a/chrome/locale/sv-SE/branding/tor-browser-brand.ftl
+++ b/chrome/locale/sv-SE/branding/tor-browser-brand.ftl
@@ -9,4 +9,4 @@
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Tor Browser
-vendor-short-name = Tor-projektet
-trademarkInfo = 'Tor' och 'Onion Logotypen' är registerade varumärken av Tor Project, Inc.
+trademarkInfo = 'Tor' och 'Onion-logotypen' är registerade varumärken av Tor Project, Inc.
diff --git a/chrome/locale/th/branding/tor-browser-brand.ftl b/chrome/locale/th/branding/tor-browser-brand.ftl
index af1fd648..b1812e82 100644
--- a/chrome/locale/th/branding/tor-browser-brand.ftl
+++ b/chrome/locale/th/branding/tor-browser-brand.ftl
@@ -8,5 +8,5 @@
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Tor Browser
--vendor-short-name = Tor Project
-trademarkInfo = 'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.
+-vendor-short-name = โครงการ Tor
+trademarkInfo = 'Tor 'และ' Onion Logo 'เป็นเครื่องหมายการค้าจดทะเบียนของโครงการ Tor Project, Inc.
diff --git a/chrome/locale/tr/branding/tor-browser-brand.ftl b/chrome/locale/tr/branding/tor-browser-brand.ftl
index 606a088b..d77b5427 100644
--- a/chrome/locale/tr/branding/tor-browser-brand.ftl
+++ b/chrome/locale/tr/branding/tor-browser-brand.ftl
@@ -9,4 +9,4 @@
# remain unchanged across different versions (Nightly, Beta, etc.).
-brand-product-name = Tor Browser
-vendor-short-name = Tor Projesi
-trademarkInfo = 'Tor' ve 'Onion Logo' Tor Project, Inc. tarafından tescillenmiş markalardır.
+trademarkInfo = 'Tor' ve 'Onion Logo' Tor Project, Inc. tarafından tescil edilmiş markalardır.
diff --git a/chrome/locale/zh-CN/branding/tor-browser-brand.ftl b/chrome/locale/zh-CN/branding/tor-browser-brand.ftl
index acaab16c..bd16e2af 100644
--- a/chrome/locale/zh-CN/branding/tor-browser-brand.ftl
+++ b/chrome/locale/zh-CN/branding/tor-browser-brand.ftl
@@ -2,11 +2,11 @@
# that is used by Firefox) to avoid picking up the -brand-short-name values
# that Mozilla includes in the Firefox language packs.
--brand-shorter-name = Tor Browser
--brand-short-name = Tor Browser
--brand-full-name = Tor Browser
+-brand-shorter-name = Tor 浏览器
+-brand-short-name = Tor 浏览器
+-brand-full-name = Tor 浏览器
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = Tor Browser
+-brand-product-name = Tor 浏览器
-vendor-short-name = Tor Project
trademarkInfo = “Tor”和“Onion Logo”是 Tor Project, Inc 的注册商标。
diff --git a/chrome/locale/zh-TW/branding/tor-browser-brand.ftl b/chrome/locale/zh-TW/branding/tor-browser-brand.ftl
index 67938d57..eca78d7c 100644
--- a/chrome/locale/zh-TW/branding/tor-browser-brand.ftl
+++ b/chrome/locale/zh-TW/branding/tor-browser-brand.ftl
@@ -7,6 +7,6 @@
-brand-full-name = 洋蔥路由瀏覽器
# This brand name can be used in messages where the product name needs to
# remain unchanged across different versions (Nightly, Beta, etc.).
--brand-product-name = 洋蔥路由瀏覽器
--vendor-short-name = 洋蔥路由專案
+-brand-product-name = Tor 瀏覽器
+-vendor-short-name = Tor 計畫
trademarkInfo = 「Tor」和「Onion Logo」皆是 Tor Project, Inc 的註冊商標。
diff --git a/import-translations.sh b/import-translations.sh
index 06060a3c..78b4b8b9 100755
--- a/import-translations.sh
+++ b/import-translations.sh
@@ -64,6 +64,7 @@ else
fi
# Update each translated file for each locale.
+(
echo "Locales: $BUNDLE_LOCALES"
cd translation
for KEYVAL in "${FILEMAP[@]}"; do
@@ -87,3 +88,39 @@ for KEYVAL in "${FILEMAP[@]}"; do
$i/"$SRCFILE" > ../$LOCALE_DIR/$i/"$DEST_FILE"
done
done
+)
+
+# Autogenerate tor-browser-brand.ftl based on brand.properties
+# and brand.dtd.
+REGEX_ENTITY='<!ENTITY +([^" ]+) +"(.+)">';
+for LOCALE in $BUNDLE_LOCALES;
+do
+ BRAND_PATH="$LOCALE_DIR/$LOCALE/brand.properties"
+ BRAND_DTD_PATH="$LOCALE_DIR/$LOCALE/brand.dtd"
+ TOR_BRAND_PATH="$(dirname "$BRAND_PATH")/branding/tor-browser-brand.ftl"
+
+ BRAND_SHORTER_NAME="$(sed -n -e '/^brandShorterName/p' $BRAND_PATH | cut -d= -f2)"
+ BRAND_SHORT_NAME="$(sed -n -e '/^brandShortName/p' $BRAND_PATH | cut -d= -f2)"
+ BRAND_FULL_NAME="$(sed -n -e '/^brandFullName/p' $BRAND_PATH | cut -d= -f2)"
+ BRAND_PRODUCT_NAME="$(sed -n -e '/^brandProductName/p' $BRAND_PATH | cut -d= -f2)"
+ VENDOR_SHORT_NAME="$(sed -n -e '/^vendorShortName/p' $BRAND_PATH | cut -d= -f2)"
+ TRADEMARK_INFO='{ " " }'
+ if [[ "$(sed -n -e '/trademarkInfo/p' $BRAND_DTD_PATH)" =~ $REGEX_ENTITY ]]
+ then
+ # Replace some HTML entities (now just ") for tor-browser-brand.ftl.
+ TRADEMARK_INFO="${BASH_REMATCH[2]//"/\'}"
+ fi
+
+ echo "# For Tor Browser, we use a new file (different than the brand.ftl file" > $TOR_BRAND_PATH
+ echo "# that is used by Firefox) to avoid picking up the -brand-short-name values" >> $TOR_BRAND_PATH
+ echo "# that Mozilla includes in the Firefox language packs." >> $TOR_BRAND_PATH
+ echo "" >> $TOR_BRAND_PATH
+ echo "-brand-shorter-name = $BRAND_SHORTER_NAME" >> $TOR_BRAND_PATH
+ echo "-brand-short-name = $BRAND_SHORT_NAME" >> $TOR_BRAND_PATH
+ echo "-brand-full-name = $BRAND_FULL_NAME" >> $TOR_BRAND_PATH
+ echo "# This brand name can be used in messages where the product name needs to" >> $TOR_BRAND_PATH
+ echo "# remain unchanged across different versions (Nightly, Beta, etc.)." >> $TOR_BRAND_PATH
+ echo "-brand-product-name = $BRAND_PRODUCT_NAME" >> $TOR_BRAND_PATH
+ echo "-vendor-short-name = $VENDOR_SHORT_NAME" >> $TOR_BRAND_PATH
+ echo "trademarkInfo = $TRADEMARK_INFO" >> $TOR_BRAND_PATH
+done
1
0

07 Jul '20
commit ca6280fe98cb140f05f397ce2bb99e0c41b90902
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Tue Jul 7 03:16:13 2020 +0000
Release preparations for 10.0a3
Changelog update and versions bump
---
projects/firefox/config | 2 +-
projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt | 4 ++++
rbm.conf | 2 +-
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 019dfc1..7c700a8 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -8,7 +8,7 @@ git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- firefox_platform_version: 68.10.0
+ firefox_platform_version: 68.10.1
firefox_version: '[% c("var/firefox_platform_version") %]esr'
torbrowser_branch: 10.0
branding_directory: '[% IF c("var/android") %]mobile/android[% ELSE %]browser[% END %]/branding/alpha'
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index fd03cd1..a6b6408 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,7 @@
+Tor Browser 10.0a3 -- July 7 2020
+ * Android
+ * Update Firefox to 68.10.1esr
+
Tor Browser 10.0a2 -- June 30 2020
* All Platforms
* Update Firefox to 68.10.0esr
diff --git a/rbm.conf b/rbm.conf
index 0ccfc9d..92c3293 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -24,7 +24,7 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '10.0a2'
+ torbrowser_version: '10.0a3'
torbrowser_build: 'build1'
torbrowser_incremental_from:
- 10.0a1
1
0

07 Jul '20
commit b5fb6a531f4723c63eea4ff4ea58d56377578cb4
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon Jul 6 19:46:17 2020 +0000
Release preparations for 9.5.2
Changelog update and versions bump
---
projects/firefox/config | 4 ++--
projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt | 4 ++++
rbm.conf | 4 ++--
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 1398149..414097f 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,14 +1,14 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-1-build2'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- firefox_platform_version: 68.10.0
+ firefox_platform_version: 68.10.1
firefox_version: '[% c("var/firefox_platform_version") %]esr'
torbrowser_branch: 9.5
branding_directory: '[% IF c("var/android") %]mobile/android[% ELSE %]browser[% END %]/branding/alpha'
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index c204a38..bd49a23 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,7 @@
+Tor Browser 9.5.2 -- July 7 2020
+ * Android
+ * Update Firefox to 68.10.1esr
+
Tor Browser 9.5.1 -- June 30 2020
* All Platforms
* Update Firefox to 68.10.0esr
diff --git a/rbm.conf b/rbm.conf
index c65d3a8..05ffcf2 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -24,8 +24,8 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '9.5.1'
- torbrowser_build: 'build2'
+ torbrowser_version: '9.5.2'
+ torbrowser_build: 'build1'
torbrowser_incremental_from:
- 9.5
project_name: tor-browser
1
0

[tor-browser-build/maint-9.5] Bug 40012: Add build target for all Android arches
by gk@torproject.org 06 Jul '20
by gk@torproject.org 06 Jul '20
06 Jul '20
commit aca5c381638beacf86d2660d3d6e94f4e5996acf
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon Jul 6 18:39:31 2020 +0000
Bug 40012: Add build target for all Android arches
---
Makefile | 12 ++++++++++++
projects/release/config | 7 +++++++
2 files changed, 19 insertions(+)
diff --git a/Makefile b/Makefile
index 6d82f93..cb7edc5 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,9 @@ all: release
release: submodule-update
$(rbm) build release --target release --target torbrowser-all
+release-android: submodule-update
+ $(rbm) build release --target release --target torbrowser-all-android
+
release-android-armv7: submodule-update
$(rbm) build release --target release --target torbrowser-android-armv7
@@ -41,6 +44,9 @@ release-src: submodule-update
alpha: submodule-update
$(rbm) build release --target alpha --target torbrowser-all
+alpha-android: submodule-update
+ $(rbm) build release --target alpha --target torbrowser-all-android
+
alpha-android-armv7: submodule-update
$(rbm) build release --target alpha --target torbrowser-android-armv7
@@ -77,6 +83,9 @@ alpha-src: submodule-update
nightly: submodule-update
$(rbm) build release --target nightly --target torbrowser-all
+nightly-android: submodule-update
+ $(rbm) build release --target nightly --target torbrowser-all-android
+
nightly-android-armv7: submodule-update
$(rbm) build release --target nightly --target torbrowser-android-armv7
@@ -113,6 +122,9 @@ nightly-src: submodule-update
testbuild: submodule-update
$(rbm) build release --target testbuild --target torbrowser-all
+testbuild-android: submodule-update
+ $(rbm) build release --target testbuild --target torbrowser-all-android
+
testbuild-android-armv7: submodule-update
$(rbm) build release --target testbuild --target torbrowser-android-armv7
diff --git a/projects/release/config b/projects/release/config
index 17db3d0..c6e883b 100644
--- a/projects/release/config
+++ b/projects/release/config
@@ -19,6 +19,12 @@ targets:
- torbrowser-android-x86_64
- torbrowser-android-aarch64
- torbrowser-src
+ torbrowser-all-android:
+ - torbrowser-android-armv7
+ - torbrowser-android-x86
+ - torbrowser-android-x86_64
+ - torbrowser-android-aarch64
+ - torbrowser-src
torbrowser-android-armv7:
var:
torbrowser-android-armv7: 1
@@ -60,6 +66,7 @@ targets:
notarget:
- release
- torbrowser-all
+ - torbrowser-all-android
noversiondir:
var:
1
0

[tor-browser-build/master] Bug 40012: Add build target for all Android arches
by gk@torproject.org 06 Jul '20
by gk@torproject.org 06 Jul '20
06 Jul '20
commit 83846ea03d86523f9f74505e34bb2d073487e3b8
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon Jul 6 18:39:31 2020 +0000
Bug 40012: Add build target for all Android arches
---
Makefile | 12 ++++++++++++
projects/release/config | 7 +++++++
2 files changed, 19 insertions(+)
diff --git a/Makefile b/Makefile
index 6d82f93..cb7edc5 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,9 @@ all: release
release: submodule-update
$(rbm) build release --target release --target torbrowser-all
+release-android: submodule-update
+ $(rbm) build release --target release --target torbrowser-all-android
+
release-android-armv7: submodule-update
$(rbm) build release --target release --target torbrowser-android-armv7
@@ -41,6 +44,9 @@ release-src: submodule-update
alpha: submodule-update
$(rbm) build release --target alpha --target torbrowser-all
+alpha-android: submodule-update
+ $(rbm) build release --target alpha --target torbrowser-all-android
+
alpha-android-armv7: submodule-update
$(rbm) build release --target alpha --target torbrowser-android-armv7
@@ -77,6 +83,9 @@ alpha-src: submodule-update
nightly: submodule-update
$(rbm) build release --target nightly --target torbrowser-all
+nightly-android: submodule-update
+ $(rbm) build release --target nightly --target torbrowser-all-android
+
nightly-android-armv7: submodule-update
$(rbm) build release --target nightly --target torbrowser-android-armv7
@@ -113,6 +122,9 @@ nightly-src: submodule-update
testbuild: submodule-update
$(rbm) build release --target testbuild --target torbrowser-all
+testbuild-android: submodule-update
+ $(rbm) build release --target testbuild --target torbrowser-all-android
+
testbuild-android-armv7: submodule-update
$(rbm) build release --target testbuild --target torbrowser-android-armv7
diff --git a/projects/release/config b/projects/release/config
index 17db3d0..c6e883b 100644
--- a/projects/release/config
+++ b/projects/release/config
@@ -19,6 +19,12 @@ targets:
- torbrowser-android-x86_64
- torbrowser-android-aarch64
- torbrowser-src
+ torbrowser-all-android:
+ - torbrowser-android-armv7
+ - torbrowser-android-x86
+ - torbrowser-android-x86_64
+ - torbrowser-android-aarch64
+ - torbrowser-src
torbrowser-android-armv7:
var:
torbrowser-android-armv7: 1
@@ -60,6 +66,7 @@ targets:
notarget:
- release
- torbrowser-all
+ - torbrowser-all-android
noversiondir:
var:
1
0

06 Jul '20
commit f857ef5ae6c8af955198bd28c7b54bf7df624b53
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 22 18:17:44 2020 +0200
Bug 40001: Add rebasing process document
---
processes/Rebasing | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 161 insertions(+)
diff --git a/processes/Rebasing b/processes/Rebasing
new file mode 100644
index 0000000..144f5ab
--- /dev/null
+++ b/processes/Rebasing
@@ -0,0 +1,161 @@
+Rebasing Tor Browser patches on top of a new Firefox version
+============================================================
+
+These instructions assume branches of Tor Browser code are maintained with git,
+and consist of a sequence of patches (commits) applied on top of some commit
+from the https://github.com/mozilla/gecko-dev.git mirror of the Mercurial
+Gecko repositories.
+
+1) Rebase
+---------
+
+This consists of applying the Tor Browser patches (commits) from some branch on
+top of a newer Firefox branch, and fixing up possible conflicts. There should be
+a helper script that automates as much of this process as possible:
+
+Steps:
+
+- Move to the branch that contains the patches to be rebased and create a new
+ one, since it will be modified during the rebasing process:
+ `git checkout [current_tor_browser_branch] -b [new_rebased_branch_name]`
+- Execute the rebase helper script: `./git-tbrebase [target_firefox_branch]`.
+ Responsibilities of the script:
+ - Get the list of Tor Browser patches from `current_tor_browser_branch`.
+ - Check whether some of the patches are already in `target_firefox_branch`
+ (e.g. backports) and mark them to be skipped in that case.
+ - Move to `target_firefox_branch` (e.g.
+ `git reset --hard [target_firefox_branch]`) and apply patches.
+ - Keep a log of all the process in a way that it can be used as a "rebase
+ report" for the reviewer.
+ - This should include, among other things, the time needed for resolving
+ patch conflicts.
+ - For each conflict, show the bugzilla tickets responsible for it, based on
+ `git blame` on the conflicting lines.
+ - After resolving a patch conflict, ask the rebaser whether comments need to
+ be added, and make sure these are included in the "rebase report".
+ - If there are patches that require manual steps when rebasing (e.g. copying
+ nightly branding folder to alpha, etc.), stop and warn about it.
+ - There could be instructions encoded in the commit message using some
+ convention.
+ - Or maybe run some script automatically, similarly to git hooks.
+- In case of conflict:
+ - Resolve manually.
+ - Check whether the commit message needs to be changed due to the conflict
+ resolution (e.g. a partially uplifted patch), and do so if needed.
+ - Run `./git-tbrebase --continue` to continue with the process (or `--skip` or
+ `--abort`, similarly to `git rebase`).
+
+2) Build
+--------
+
+Ideally, we should do a full tor-browser-build here. But:
+
+- These can take quite long, and are not incremental.
+- The `tor-browser-build` toolchains might need changes for newer Firefox
+ versions.
+
+At this stage, it should be fine to do a local build and use a `repackage_tb`
+script which takes the latest linux64 Tor Browser build and repackages it with
+the locally built Tor Browser from `obj-x86_64-pc-linux-gnu`.
+
+Steps:
+
+- Copy `tor-launcher` master to `browser/extensions`.
+- Make sure `torbutton` submodule is correctly loaded:
+ `git submodule update --init`
+- Edit `.mozconfig` to set
+ - `ac_add_options --enable-tests`
+ - `ac_add_options --enable-debug`
+ - `ac_add_options --enable-tor-launcher`
+ - `ac_add_options --enable-tor-browser-update`
+- Optionally, add
+ `ac_add_options --with-ccache=/home/user/.mozbuild/sccache/sccache` to use
+ `sccache` for speeding up subsequent builds.
+- `./mach build && ./mach package`
+- `./repackage_tb`
+
+At the end, there should be a `tor-browser-linux64-version_en-US.tar.xz`
+artifact, which is the repackaged Tor Browser.
+
+3) Manual testing
+-----------------
+
+This should ideally not be needed, but until everything is covered by automated
+testing we can do a quick manual test to catch the most obvious breakage:
+
+- Launch the repackaged browser and check:
+ - Tor is launched correctly.
+ - `about:tor` is displayed with no errors
+ - `about:preferences` is not broken.
+ - It's possible to navigate to some website (e.g. duckduckgo search)
+ - The circuit display is working and displayed correctly.
+
+4) Automated testing
+--------------------
+
+There should be a single script that runs all tests, but for now let's
+list the individual commands:
+
+- `./run-tbb-tests` should run the Tor Browser unit tests locally.
+-
+ `./tor-browser-bundle-testsuite/tbb-testsuite --no-xdummy tor-browser-linux64-version_en-US.tar.xz`
+ should run the Tor Browser testsuite.
+- `./mach lint` should check for linting errors.
+
+5) Debug/Fix
+------------
+
+For each issue found while running tests, debug and/or fix it, then iterate 2-5
+until no more test failures are found.
+
+For fixing up a commit, a script `./git-tbedit [commit]` should be used, so that
+the time spent editing the patch is tracked and included in the rebase report.
+
+6) Push for review
+------------------
+
+In the ticket for the rebase work, the rebaser should add a reference to the
+rebased branch that has to be reviewed, and a rebase report, which should
+contain, for every Tor Browser commit in the original branch:
+
+```
+[SKIPPED|PICKED|CONFLICT][original_hash][commit_summary]
+ (optional) Total time editing commit:
+ (optional) Comments:
+ Some comments relevant for the reviewer.
+ (optional) Conflicts:
+ List of conflicting files.
+```
+
+Other
+-----
+
+- Picking Tor Browser patches and changes that landed after the rebase started.
+
+The rebasing and reviewing process can last long enough for newer patches and
+changes to have landed after the process started.
+
+Doing a full rebase with a later tor-browser branch would be too costly, so we
+need to identify the changes that landed between the branch that was originally
+rebased and the newer Tor Browser branch and only apply those.
+
+Until this is properly automated, a suggested manual approach is to do:
+
+`git range-diff original_starting_commit~1..original_ending_commit new_starting_commit~1..new_ending_commit`,
+so basically doing a range-diff between the original set of patches that were
+rebased, and a more up-to-date set of patches. Then, we should manually be able
+to pick the missing changes, as fixup or squash commits.
+
+- Reordering/squashing patches
+
+We should not mix rebasing changes + fixing conflicts with patch reordering and
+squashing. More concretely, it should be possible to check with
+`git diff original_tb_branch..reordered_and_squashed_tb_branch` that the
+reordered branch contents are equivalent to the previous branch.
+
+- Double-checking that no patch was accidentally lost in the process
+
+While this should not be possible if most of the process is properly automated,
+it should not be very costly to double-check it. For this, there could be a
+script that compares the current rebased branch with the latest tor-browser
+branch, and shows the differences (comparing the set of commit messages).
1
0

[tor-browser-spec/master] Change torbutton fixup instructions in ReleaseProcess
by gk@torproject.org 03 Jul '20
by gk@torproject.org 03 Jul '20
03 Jul '20
commit 031a48a9c00b24ac6d71649e892fd306713276ca
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Jul 3 12:57:24 2020 +0200
Change torbutton fixup instructions in ReleaseProcess
---
processes/ReleaseProcess | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/processes/ReleaseProcess b/processes/ReleaseProcess
index 1c2076e..563f263 100644
--- a/processes/ReleaseProcess
+++ b/processes/ReleaseProcess
@@ -7,7 +7,8 @@
# In particular: before tagging the tor-browser tag, the final code from
# Torbutton needs to get included and in order to avoid unnecessary commit
# inflation the commit for bumping the git submodule should be a fixup commit
-# to the one with "Pick up latest Torbutton code" in its commit message.
+# to the one with "Bug 25013: Add torbutton as a tor-browser submodule" in
+# its commit message.
#. Update changelog and relevant config files in tor-browser-build.
cd tor-browser-build
1
0