https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91307

            Bug ID: 91307
           Summary: -flto causes binary to vary
           Product: gcc
           Version: 9.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gccbmw at lsmod dot de
                CC: mliska at suse dot cz
  Target Milestone: ---

When building openSUSE:Factory nvme-cli
with -flto=2
it causes a variation in the resulting nvme binary
that is not there without -flto

/usr/sbin/nvme differs in assembler output
@@ -433,7 +433,7 @@

 Disassembly of section .text:

-_GLOBAL__I_65535_0_cc6lpCUH.o.10070:
+_GLOBAL__I_65535_0_cckZcJmg.o.10070:
        sub    $something,%rsp
        lea    offset(%rip),%rdi        #   <plugin.lto_priv.10>
        callq  <register_extension>


strace shows that

["cc", "-D_GNU_SOURCE", "-D__CHECK_ENDIAN__", "-O2", "-Wall",
"-D_FORTIFY_SOURCE=2", "-fstack-protector-strong", "-funwind-tables",
"-fasynchronous-unwind-tables", "-fstack-clash-protection",
"-Werror=return-type", "-flto=2", "-I.", "-std=gnu99", "-I.", "-DLIBUUID",
"-DNVME_VERSION=\"1.8.1+git135.9bab71e\"", "nvme.c", "-o", "nvme",
"argconfig.o", "suffix.o", "parser.o", "nvme-print.o", "nvme-ioctl.o",
"nvme-lightnvm.o", "fabrics.o", "json.o", "nvme-models.o", "plugin.o",
"nvme-status.o", "plugins/intel/intel-nvme.o", "plugins/lnvm/lnvm-nvme.o",
"plugins/memblaze/memblaze-nvme.o", "plugins/wdc/wdc-nvme.o",
"plugins/wdc/wdc-utils.o", "plugins/huawei/huawei-nvme.o",
"plugins/netapp/netapp-nvme.o", "plugins/toshiba/toshiba-nvme.o",
"plugins/micron/micron-nvme.o", "plugins/seagate/seagate-nvme.o",
"plugins/virtium/virtium-nvme.o", "plugins/shannon/shannon-nvme.o", "-luuid"]

calls

["/usr/lib64/gcc/x86_64-suse-linux/9/collect2", "-plugin",
"/usr/lib64/gcc/x86_64-suse-linux/9/liblto_plugin.so",
"-plugin-opt=/usr/lib64/gcc/x86_64-suse-linux/9/lto-wrapper",
"-plugin-opt=-fresolution=/tmp/ccQNkgLE.res",
"-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_s",
"-plugin-opt=-pass-through=-lc", "-plugin-opt=-pass-through=-lgcc",
"-plugin-opt=-pass-through=-lgcc_s", "-flto=2", "--build-id", "--eh-frame-hdr",
"-m", "elf_x86_64", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-pie",
"-o", "nvme", "/usr/lib64/gcc/x86_64-suse-linux/9/../../../../lib64/Scrt1.o",
"/usr/lib64/gcc/x86_64-suse-linux/9/../../../../lib64/crti.o",
"/usr/lib64/gcc/x86_64-suse-linux/9/crtbeginS.o",
"-L/usr/lib64/gcc/x86_64-suse-linux/9",
"-L/usr/lib64/gcc/x86_64-suse-linux/9/../../../../lib64", "-L/lib/../lib64",
"-L/usr/lib/../lib64",
"-L/usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/lib",
"-L/usr/lib64/gcc/x86_64-suse-linux/9/../../..", "/tmp/cchuJoLU.o",
"argconfig.o", "suffix.o", "parser.o", "nvme-print.o", "nvme-ioctl.o",
"nvme-lightnvm.o", "fabrics.o", "json.o", "nvme-models.o", "plugin.o",
"nvme-status.o", "plugins/intel/intel-nvme.o", "plugins/lnvm/lnvm-nvme.o",
"plugins/memblaze/memblaze-nvme.o", "plugins/wdc/wdc-nvme.o",
"plugins/wdc/wdc-utils.o", "plugins/huawei/huawei-nvme.o",
"plugins/netapp/netapp-nvme.o", "plugins/toshiba/toshiba-nvme.o",
"plugins/micron/micron-nvme.o", "plugins/seagate/seagate-nvme.o",
"plugins/virtium/virtium-nvme.o", "plugins/shannon/shannon-nvme.o", "-luuid",
"-lgcc", "--push-state", "--as-needed", "-lgcc_s", "--pop-state", "-lc",
"-lgcc", "--push-state", "--as-needed", "-lgcc_s", "--pop-state",
"/usr/lib64/gcc/x86_64-suse-linux/9/crtendS.o",
"/usr/lib64/gcc/x86_64-suse-linux/9/../../../../lib64/crtn.o"]


Without -flto the collect2 call also gets the random tmp file passed, but the
name is not embedded in the result.

Reply via email to