Bug 1399679 - Check differences between builds on CentOS and Debian. draft
authorMike Hommey <mh+mozilla@glandium.org>
Fri, 12 Jan 2018 15:29:52 +0900
changeset 722000 5658d031ae17cc44820bf6b24b25c2727847bad7
parent 721830 b7a651281314d6369658eeb58e3bb181cf95016f
child 722001 3be7f290323aa68ca430853158e13657e38e7e4b
push id96025
push userbmo:mh+mozilla@glandium.org
push dateThu, 18 Jan 2018 09:37:19 +0000
bugs1399679
milestone59.0a1
Bug 1399679 - Check differences between builds on CentOS and Debian. We enable stripping the binaries and ensure STRIP_FLAGS doesn't reduce the amount of stripping that happens on Linux (where the default of --strip-debug doesn't strip the symbol stable), so that the comparison doesn't show differences we don't care about. We also reduce the noise by excluding differences in .gnu_debuglink sections, as well as .dynstr. The former is because they are a side effect of suble changes in debug info (such as line numbers in system headers) changing the signature used for the debug link. The latter because in some libraries, there are differences in those sections, but they are not accompanied with actual changes in the list of symbols, meaning the only change is in the order in which the strings for the symbols are laid out, not the symbol lists themselves (which would be indicated by differences in readelf --section output). We explicitly don't skip the notes sections differences, despite them being affected by the same problem as debug link for the build id they contain, but they also contain other information.
build/mozconfig.common.override
build/unix/mozconfig.linux
taskcluster/ci/build/linux.yml
taskcluster/ci/build/macosx.yml
taskcluster/ci/diffoscope/kind.yml
--- a/build/mozconfig.common.override
+++ b/build/mozconfig.common.override
@@ -4,8 +4,10 @@
 
 # Common mozconfig for all users
 #
 # Add options to this file that will be inherited by all in-tree mozconfigs.
 # This file is included at the *end* of the mozconfigs, and so may be used
 # to override anything done previously.
 #
 # The common expected usage is for try builds with nondefault options.
+
+ac_add_options --enable-strip
--- a/build/unix/mozconfig.linux
+++ b/build/unix/mozconfig.linux
@@ -25,8 +25,10 @@ else
 fi
 
 . "$topsrcdir/build/unix/mozconfig.stdcxx"
 
 if [ -f /etc/redhat-release ]; then
 # PKG_CONFIG_LIBDIR is appropriately overridden in mozconfig.linux32
 export PKG_CONFIG_LIBDIR=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig
 fi
+
+export STRIP_FLAGS=" "
--- a/taskcluster/ci/build/linux.yml
+++ b/taskcluster/ci/build/linux.yml
@@ -21,16 +21,47 @@ linux64/opt:
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
         - linux64-sccache
 
+linux64-deb/opt:
+    description: "Linux64 Opt"
+    index:
+        product: firefox
+        job-name: linux64-deb-opt
+    treeherder:
+        platform: linux64/opt
+        symbol: tc(Bdeb)
+    worker-type: aws-provisioner-v1/gecko-{level}-b-linux
+    worker:
+        docker-image: {in-tree: debian7-amd64-build}
+        max-run-time: 36000
+        env:
+            PERFHERDER_EXTRA_OPTIONS: deb
+    run:
+        using: mozharness
+        actions: [get-secrets build check-test update]
+        config:
+            - builds/releng_base_firefox.py
+            - builds/releng_base_linux_64_builds.py
+            - balrog/production.py
+        script: "mozharness/scripts/fx_desktop_build.py"
+        secrets: true
+        tooltool-downloads: public
+        need-xvfb: true
+    toolchains:
+        - linux64-clang
+        - linux64-gcc
+        - linux64-rust
+        - linux64-sccache
+
 linux64-dmd/opt:
     description: "Linux64 DMD Opt"
     index:
         product: firefox
         job-name: linux64-dmd-opt
     treeherder:
         platform: linux64-dmd/opt
         symbol: tc(Bdmd)
@@ -267,16 +298,47 @@ linux/opt:
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
         - linux64-sccache
 
+linux-deb/opt:
+    description: "Linux32 Opt"
+    index:
+        product: firefox
+        job-name: linux-deb-opt
+    treeherder:
+        platform: linux32/opt
+        symbol: tc(Bdeb)
+    worker-type: aws-provisioner-v1/gecko-{level}-b-linux
+    worker:
+        docker-image: {in-tree: debian7-i386-build}
+        max-run-time: 36000
+        env:
+            PERFHERDER_EXTRA_OPTIONS: deb
+    run:
+        using: mozharness
+        actions: [get-secrets build check-test update]
+        config:
+            - builds/releng_base_firefox.py
+            - builds/releng_base_linux_32_builds.py
+            - balrog/production.py
+        script: "mozharness/scripts/fx_desktop_build.py"
+        secrets: true
+        tooltool-downloads: public
+        need-xvfb: true
+    toolchains:
+        - linux64-clang
+        - linux64-gcc
+        - linux64-rust
+        - linux64-sccache
+
 linux/debug:
     description: "Linux32 Debug"
     index:
         product: firefox
         job-name: linux-debug
     treeherder:
         platform: linux32/debug
         symbol: tc(B)
--- a/taskcluster/ci/build/macosx.yml
+++ b/taskcluster/ci/build/macosx.yml
@@ -58,16 +58,50 @@ macosx64/opt:
         - linux64-cctools-port
         - linux64-clang
         - linux64-hfsplus
         - linux64-libdmg
         - linux64-llvm-dsymutil
         - linux64-rust-macos
         - linux64-sccache
 
+macosx64-deb/opt:
+    description: "MacOS X x64 Cross-compile"
+    index:
+        product: firefox
+        job-name: macosx64-deb-opt
+    treeherder:
+        platform: osx-cross/opt
+        symbol: tc(Bdeb)
+        tier: 1
+    worker-type: aws-provisioner-v1/gecko-{level}-b-macosx64
+    worker:
+        docker-image: {in-tree: debian7-amd64-build}
+        max-run-time: 36000
+        env:
+            TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest"
+            PERFHERDER_EXTRA_OPTIONS: deb
+    run:
+        using: mozharness
+        actions: [get-secrets build update]
+        config:
+            - builds/releng_base_firefox.py
+            - builds/releng_base_mac_64_cross_builds.py
+        script: "mozharness/scripts/fx_desktop_build.py"
+        secrets: true
+        tooltool-downloads: internal
+    toolchains:
+        - linux64-cctools-port
+        - linux64-clang
+        - linux64-hfsplus
+        - linux64-libdmg
+        - linux64-llvm-dsymutil
+        - linux64-rust-macos
+        - linux64-sccache
+
 macosx64-dmd/opt:
     description: "MacOS X x64 DMD Cross-compile"
     index:
         product: firefox
         job-name: macosx64-dmd-opt
     treeherder:
         platform: osx-10-10-dmd/opt
         symbol: tc(Bdmd)
--- a/taskcluster/ci/diffoscope/kind.yml
+++ b/taskcluster/ci/diffoscope/kind.yml
@@ -23,16 +23,18 @@ transforms:
 # generated for each build.
 job-defaults:
   args: >-
     --no-default-limits
     --max-page-size 100000000
     --max-page-diff-block-lines 10000
     --exclude-directory-metadata
     --exclude-command .--line-numbers
+    --exclude-command .--hex-dump=\.dynstr
+    --exclude-command .--hex-dump=\.gnu_debuglink
     --exclude **/*freeblpriv3.chk
     --exclude **/*nssdbm3.chk
     --exclude **/*softokn3.chk
 
 # Make a task for each diff we might want. The following are just examples,
 # Both original and new can point to builds from the full set of tasks or
 # from other sets through an index-search. Other kinds than `build` can be
 # compared (for example, static-analysis), provided you adjust the
@@ -52,8 +54,22 @@ job-defaults:
 #   macosx-build-vs-previous-try:
 #     symbol: M
 #     new: build-macosx64/opt
 #     original: {index-search: gecko.v2.try.revision.aabd5deb0156f9b55ab60ad6a01ebfc4580bf2e1.firefox.macosx64-opt}
 #   win32-build-vs-previous-try:
 #     symbol: W
 #     new: build-win32/opt
 #     original: {index-search: gecko.v2.try.revision.aabd5deb0156f9b55ab60ad6a01ebfc4580bf2e1.firefox.win32-opt}
+
+jobs:
+  linux64-diff:
+    symbol: L64
+    original: build-linux64/opt
+    new: build-linux64-deb/opt
+  linux-diff:
+    symbol: L32
+    original: build-linux/opt
+    new: build-linux-deb/opt
+  macosx64-diff:
+    symbol: M
+    original: build-macosx64/opt
+    new: build-macosx64-deb/opt