Skip to content

nondeterministic dwarf #63921

Closed
Closed
@fangism

Description

@fangism

We've observed some local build nondeterminism in clang outputs.

The following command produces different .o outputs (with some non-zero probability).

$ ../../prebuilt/third_party/clang/linux-x64/bin/clang++ -MD -MF host_x64-asan-ubsan/obj/src/storage/minfs/libminfs.vnode.cc.o.d -DTOOLCHAIN_VERSION=AD59JKqO1TWgxp7uA0Fq99aIrVCXG2i4HShWi6sFFV8C -DFUCHSIA_API_LEVEL=13 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -I../.. -Ihost_x64-asan-ubsan/gen -I../../zircon/system/ulib/zx/include -I../../sdk/lib/fit/include -I../../sdk/lib/stdcompat/include -I../../zircon/system/public -I../../src/zircon/lib/zircon/include -Ifidling/gen/zircon/vdso/zx/zither/legacy_syscall_cdecl -I../../sdk/lib/fit-promise/include -I../../zircon/system/ulib/fbl/include -I../../zircon/system/ulib/storage/buffer/include -Ifidling/gen/sdk/fidl/fuchsia.hardware.block.driver/fuchsia.hardware.block.driver/banjo/cpp -Ibanjoing/gen -Ifidling/gen/sdk/fidl/fuchsia.hardware.block.driver/fuchsia.hardware.block.driver/banjo/c -I../../src/lib/ddk/include -I../../sdk/lib/driver/runtime/include -I../../zircon/system/ulib/async/include -I../../sdk/lib/zbi-format/include -I../../zircon/system/ulib/ddk-platform-defs/include -I../../zircon/system/ulib/syslog/include -Ifidling/gen/sdk/fidl/fuchsia.hardware.block/fuchsia.hardware.block/banjo/c -Ifidling/gen/sdk/fidl/fuchsia.storage.metrics/fuchsia.storage.metrics/banjo/c -Ifidling/gen/sdk/fidl/fuchsia.unknown/fuchsia.unknown/banjo/c -Ifidling/gen/zircon/vdso/zx/zx/banjo/c -I../../src/lib/ddktl/include -I../../sdk/lib/fidl/cpp/wire/include -I../../sdk -Ihost_x64-asan-ubsan/gen/sdk -I../../sdk/lib/fidl_base/include -Ifidling/gen/sdk/fidl/fuchsia.hardware.block/fuchsia.hardware.block/banjo/cpp -Ifidling/gen/sdk/fidl/fuchsia.storage.metrics/fuchsia.storage.metrics/banjo/cpp -Ifidling/gen/sdk/fidl/fuchsia.unknown/fuchsia.unknown/banjo/cpp -Ifidling/gen/zircon/vdso/zx/zx/banjo/cpp -I../../zircon/system/ulib/storage/operation/include -I../../zircon/system/ulib/zircon-internal/include -I../../sdk/lib/fdio/include -I../../src/storage/gpt/include -Ifidling/gen/sdk/fidl/fuchsia.device/fuchsia.device/cpp -Ifidling/gen/sdk/fidl/fuchsia.logger/fuchsia.logger/cpp -Ifidling/gen/sdk/fidl/fuchsia.diagnostics/fuchsia.diagnostics/cpp -Ifidling/gen/sdk/fidl/fuchsia.mem/fuchsia.mem/cpp -Ifidling/gen/sdk/fidl/fuchsia.hardware.block/fuchsia.hardware.block/cpp -Ifidling/gen/sdk/fidl/fuchsia.storage.metrics/fuchsia.storage.metrics/cpp -Ifidling/gen/sdk/fidl/fuchsia.unknown/fuchsia.unknown/cpp -I../../zircon/third_party/ulib/lz4/include -I../../src/storage/lib/disk_inspector/include -I../../zircon/system/ulib/bitmap/include -I../../zircon/system/ulib/range/include -I../../zircon/third_party/ulib/cksum/include -I../../zircon/third_party/ulib/safemath/include -fcolor-diagnostics -fcrash-diagnostics-dir=clang-crashreports -fcrash-diagnostics=all -ffp-contract=off --sysroot=../../prebuilt/third_party/sysroot/linux --target=x86_64-unknown-linux-gnu -ffile-compilation-dir=. -no-canonical-prefixes -fdata-sections -ffunction-sections -O1 -gdwarf-5 -Xclang -debug-info-kind=constructor -g3 -Wall -Wextra -Wconversion -Wextra-semi -Wimplicit-fallthrough -Wnewline-eof -Wstrict-prototypes -Wwrite-strings -Wno-sign-conversion -Wno-unused-parameter -Wnonportable-system-include-path -Wno-type-limits -fvisibility=hidden -Werror -Wno-error=deprecated-declarations -Wa,--fatal-warnings --sysroot=../../prebuilt/third_party/sysroot/linux --target=x86_64-unknown-linux-gnu -fPIE -mllvm -asan-use-private-alias=1 -fno-sanitize-address-use-odr-indicator -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize=vptr -fvisibility-inlines-hidden -stdlib=libc++ -std=c++17 -fno-exceptions -stdlib=libc++ -c ../../src/storage/minfs/vnode.cc -o host_x64-asan-ubsan/obj/src/storage/minfs/libminfs.vnode.cc.o

A recent local experiment took about 40 attempts before a difference was observed.

A dwarfdump diff looks like:

$ diff -u <(../../prebuilt/third_party/clang/linux-x64/bin/llvm-dwarfdump -a host_x64-asan-ubsan/obj/src/storage/minfs/libminfs.vnode.cc.o) <(../../prebuilt/third_party/clang/linux-x64/bin/llvm-dwarfdump -a host_x64-asan-ubsan/obj/src/storage/minfs/tmp-libminfs.vnode.cc.o)
--- /dev/fd/63	2023-07-17 18:55:26.925479892 +0000
+++ /dev/fd/62	2023-07-17 18:55:26.925479892 +0000
@@ -1,4 +1,4 @@
-host_x64-asan-ubsan/obj/src/storage/minfs/libminfs.vnode.cc.o:	file format elf64-x86-64
+host_x64-asan-ubsan/obj/src/storage/minfs/tmp-libminfs.vnode.cc.o:	file format elf64-x86-64
 
 .debug_abbrev contents:
 Abbrev table for offset: 0x00000000
@@ -54937,7 +54937,7 @@
                        [0x000000000000045f, 0x000000000000047b))
 
 0x0000fd7f:         DW_TAG_variable
-                      DW_AT_location	(indexed (0x1c) loclist = 0x00000a67: 
+                      DW_AT_location	(indexed (0x1b) loclist = 0x00000a3d: 
                          [0x00000000000002cc, 0x00000000000002d7): DW_OP_breg14 R14+0, DW_OP_convert (0x00000030) "DW_ATE_unsigned_64", DW_OP_convert (0x00000035) "DW_ATE_unsigned_32", DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert (0x00000030) "DW_ATE_unsigned_64", DW_OP_convert (0x00000035) "DW_ATE_unsigned_32", DW_OP_stack_value, DW_OP_piece 0x4
                          [0x000000000000046d, 0x000000000000047b): DW_OP_breg14 R14+0, DW_OP_convert (0x00000030) "DW_ATE_unsigned_64", DW_OP_convert (0x00000035) "DW_ATE_unsigned_32", DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert (0x00000030) "DW_ATE_unsigned_64", DW_OP_convert (0x00000035) "DW_ATE_unsigned_32", DW_OP_stack_value, DW_OP_piece 0x4)
                       DW_AT_name	("status")
@@ -55077,7 +55077,7 @@
                   DW_AT_high_pc	(0x00000000000004c3)
 
 0x0000fe2a:       DW_TAG_variable
-                    DW_AT_location	(indexed (0x1b) loclist = 0x00000a3d: 
+                    DW_AT_location	(indexed (0x1c) loclist = 0x00000a8e: 
                        [0x00000000000004bd, 0x00000000000004c3): DW_OP_breg14 R14+0, DW_OP_convert (0x00000030) "DW_ATE_unsigned_64", DW_OP_convert (0x00000035) "DW_ATE_unsigned_32", DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert (0x00000030) "DW_ATE_unsigned_64", DW_OP_convert (0x00000035) "DW_ATE_unsigned_32", DW_OP_stack_value, DW_OP_piece 0x4)
                     DW_AT_name	("status")
                     DW_AT_decl_file	("./../../src/storage/minfs/vnode.cc")
@@ -73993,7 +73993,7 @@
 0x000009cf
 0x00000a00
 0x00000a31
-0x00000a5b
+0x00000a82
 0x00000aac
 0x00000ad6
 0x00000b00
@@ -74533,13 +74533,13 @@
 
 0x00000a3d: 
             DW_LLE_base_addressx   (0x0000000000000028)
-            DW_LLE_offset_pair     (0x00000000000004bd, 0x00000000000004c3): DW_OP_breg14 R14+0, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4
-
-0x00000a67: 
-            DW_LLE_base_addressx   (0x0000000000000028)
             DW_LLE_offset_pair     (0x00000000000002cc, 0x00000000000002d7): DW_OP_breg14 R14+0, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4
             DW_LLE_offset_pair     (0x000000000000046d, 0x000000000000047b): DW_OP_breg14 R14+0, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4
 
+0x00000a8e: 
+            DW_LLE_base_addressx   (0x0000000000000028)
+            DW_LLE_offset_pair     (0x00000000000004bd, 0x00000000000004c3): DW_OP_breg14 R14+0, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4
+
 0x00000ab8: 
             DW_LLE_base_addressx   (0x0000000000000028)
             DW_LLE_offset_pair     (0x000000000000042f, 0x000000000000043b): DW_OP_breg14 R14+0, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4, DW_OP_breg14 R14+0, DW_OP_constu 0x20, DW_OP_shr, DW_OP_convert 0x30, DW_OP_convert 0x35, DW_OP_stack_value, DW_OP_piece 0x4

llvm-nondet.zip

Attachment contains:

  • vnode.ii (from --save-temps)
  • libminfs.vnode.cc.o
  • tmp-libminfs.vnode.cc.o (saved copy of the first run)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions