Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LTO breaks the build #5197

Closed
cpaelzer opened this issue Mar 30, 2021 · 7 comments
Closed

LTO breaks the build #5197

cpaelzer opened this issue Mar 30, 2021 · 7 comments
Labels
Priority: 2 high Type: Bug A previously unknown bug in PMDK won't do The requested improvement is not planned to be done.
Milestone

Comments

@cpaelzer
Copy link

ISSUE: Compiling with LTO breaks pmdk build

Environment Information

  • PMDK package version(s): 1.10
  • OS(es) version(s): Ubuntu 21.04
  • ndctl version(s): 71.1-1
  • kernel version(s): 5.11.0-11.12
  • compiler, libraries, packaging and other related tools version(s): 10.2.1-23ubuntu2

Please provide a reproduction of the bug:

Build pmdk in Ubuntu 21.04 with LTO enabled (the new default) if built via the packaging.
There are many ways, but the simplest might be:
$ pull-lp-source pmdk 1.10-1
$ apt build-dep pmdk
$ cd pmdk_1.10-1
$ ./debian/rules build

How often bug is revealed: always

Actual behavior:

Breaks on build - full log

Around the fail it looks like:

ld -o ../nondebug/libpmempool/libpmempool_unscoped.o -r ../nondebug/libpmempool/alloc.o ../nondebug/libpmempool/fs_posix.o ../nondebug/libpmempool/os_posix.o ../nondebug/libpmempool/os_thread_posix.o ../nondebug/libpmempool/out.o ../nondebug/libpmempool/util.o ../nondebug/libpmempool/util_posix.o ../nondebug/libpmempool/bad_blocks.o ../nondebug/libpmempool/set_badblocks.o ../nondebug/libpmempool/ctl.o ../nondebug/libpmempool/ctl_prefault.o ../nondebug/libpmempool/ctl_sds.o ../nondebug/libpmempool/ctl_fallocate.o ../nondebug/libpmempool/ctl_cow.o ../nondebug/libpmempool/file.o ../nondebug/libpmempool/file_posix.o ../nondebug/libpmempool/mmap.o ../nondebug/libpmempool/mmap_posix.o ../nondebug/libpmempool/os_deep_linux.o ../nondebug/libpmempool/pool_hdr.o ../nondebug/libpmempool/rand.o ../nondebug/libpmempool/ravl.o ../nondebug/libpmempool/set.o ../nondebug/libpmempool/shutdown_state.o ../nondebug/libpmempool/uuid.o ../nondebug/libpmempool/uuid_linux.o ../nondebug/libpmempool/pmem2_utils.o ../nondebug/libpmempool/config.o ../nondebug/libpmempool/persist_posix.o ../nondebug/libpmempool/badblocks.o ../nondebug/libpmempool/badblocks_ndctl.o ../nondebug/libpmempool/usc_ndctl.o ../nondebug/libpmempool/source.o ../nondebug/libpmempool/source_posix.o ../nondebug/libpmempool/auto_flush_linux.o ../nondebug/libpmempool/deep_flush_linux.o ../nondebug/libpmempool/extent_linux.o ../nondebug/libpmempool/pmem2_utils_linux.o ../nondebug/libpmempool/pmem2_utils_ndctl.o ../nondebug/libpmempool/region_namespace_ndctl.o ../nondebug/libpmempool/libpmempool.o ../nondebug/libpmempool/check.o ../nondebug/libpmempool/check_bad_blocks.o ../nondebug/libpmempool/check_backup.o ../nondebug/libpmempool/check_btt_info.o ../nondebug/libpmempool/check_btt_map_flog.o ../nondebug/libpmempool/check_log.o ../nondebug/libpmempool/check_blk.o ../nondebug/libpmempool/check_pool_hdr.o ../nondebug/libpmempool/check_sds.o ../nondebug/libpmempool/check_util.o ../nondebug/libpmempool/check_write.o ../nondebug/libpmempool/pool.o ../nondebug/libpmempool/replica.o ../nondebug/libpmempool/feature.o ../nondebug/libpmempool/rpmem_common.o ../nondebug/libpmempool/rpmem_ssh.o ../nondebug/libpmempool/rpmem_cmd.o ../nondebug/libpmempool/rpmem_util.o ../nondebug/libpmempool/sync.o ../nondebug/libpmempool/transform.o ../nondebug/libpmempool/rm.o pmemblk_priv_funcs.o 
cc -Wl,-Bsymbolic-functions -flto=auto -Wl,-z,relro -Wl,-z,now -Wl,-z,relro -Wl,--fatal-warnings -Wl,--warn-common  -L../nondebug/libpmempool/.. -shared -Wl,--version-script=libpmempool.link,-soname,libpmempool.so.1 -o ../nondebug/libpmempool/../libpmempool.so.1.0.0 ../nondebug/libpmempool/alloc.o ../nondebug/libpmempool/fs_posix.o ../nondebug/libpmempool/os_posix.o ../nondebug/libpmempool/os_thread_posix.o ../nondebug/libpmempool/out.o ../nondebug/libpmempool/util.o ../nondebug/libpmempool/util_posix.o ../nondebug/libpmempool/bad_blocks.o ../nondebug/libpmempool/set_badblocks.o ../nondebug/libpmempool/ctl.o ../nondebug/libpmempool/ctl_prefault.o ../nondebug/libpmempool/ctl_sds.o ../nondebug/libpmempool/ctl_fallocate.o ../nondebug/libpmempool/ctl_cow.o ../nondebug/libpmempool/file.o ../nondebug/libpmempool/file_posix.o ../nondebug/libpmempool/mmap.o ../nondebug/libpmempool/mmap_posix.o ../nondebug/libpmempool/os_deep_linux.o ../nondebug/libpmempool/pool_hdr.o ../nondebug/libpmempool/rand.o ../nondebug/libpmempool/ravl.o ../nondebug/libpmempool/set.o ../nondebug/libpmempool/shutdown_state.o ../nondebug/libpmempool/uuid.o ../nondebug/libpmempool/uuid_linux.o ../nondebug/libpmempool/pmem2_utils.o ../nondebug/libpmempool/config.o ../nondebug/libpmempool/persist_posix.o ../nondebug/libpmempool/badblocks.o ../nondebug/libpmempool/badblocks_ndctl.o ../nondebug/libpmempool/usc_ndctl.o ../nondebug/libpmempool/source.o ../nondebug/libpmempool/source_posix.o ../nondebug/libpmempool/auto_flush_linux.o ../nondebug/libpmempool/deep_flush_linux.o ../nondebug/libpmempool/extent_linux.o ../nondebug/libpmempool/pmem2_utils_linux.o ../nondebug/libpmempool/pmem2_utils_ndctl.o ../nondebug/libpmempool/region_namespace_ndctl.o ../nondebug/libpmempool/libpmempool.o ../nondebug/libpmempool/check.o ../nondebug/libpmempool/check_bad_blocks.o ../nondebug/libpmempool/check_backup.o ../nondebug/libpmempool/check_btt_info.o ../nondebug/libpmempool/check_btt_map_flog.o ../nondebug/libpmempool/check_log.o ../nondebug/libpmempool/check_blk.o ../nondebug/libpmempool/check_pool_hdr.o ../nondebug/libpmempool/check_sds.o ../nondebug/libpmempool/check_util.o ../nondebug/libpmempool/check_write.o ../nondebug/libpmempool/pool.o ../nondebug/libpmempool/replica.o ../nondebug/libpmempool/feature.o ../nondebug/libpmempool/rpmem_common.o ../nondebug/libpmempool/rpmem_ssh.o ../nondebug/libpmempool/rpmem_cmd.o ../nondebug/libpmempool/rpmem_util.o ../nondebug/libpmempool/sync.o ../nondebug/libpmempool/transform.o ../nondebug/libpmempool/rm.o pmemblk_priv_funcs.o   -pthread -lpmem -ldl -lndctl -ldaxctl
/usr/bin/ld: pmemblk_priv_funcs.o (symbol from plugin): in function `_Malloc':
(.text+0x0): multiple definition of `_Malloc'; ../nondebug/libpmempool/alloc.o (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: pmemblk_priv_funcs.o (symbol from plugin): in function `_Malloc':
...
/usr/bin/ld: pmemblk_priv_funcs.o (symbol from plugin): in function `_Malloc':
(.text+0x0): multiple definition of `pmem2_auto_flush'; ../nondebug/libpmempool/auto_flush_linux.o (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: pmemblk_priv_funcs.o (symbol from plugin): in function `_Malloc':
(.text+0x0): multiple definition of `pmem2_deep_flush_dax'; ../nondebug/libpmempool/deep_flush_linux.o (symbol from plugin):(.text+0x0): first defined here
objcopy --localize-hidden `sed -n 's/^	*\([a-zA-Z0-9_]*\);$/-G \1/p' libpmempool.link` ../nondebug/libpmempool/libpmempool_unscoped.o ../nondebug/libpmempool/libpmempool_all.o
ar rv ../nondebug/libpmempool/../libpmempool.a ../nondebug/libpmempool/libpmempool_all.o
ar: creating ../nondebug/libpmempool/../libpmempool.a
a - ../nondebug/libpmempool/libpmempool_all.o
collect2: error: ld returned 1 exit status
make[4]: *** [../Makefile.inc:242: ../nondebug/libpmempool/../libpmempool.so.1.0.0] Error 1
make[4]: Leaving directory '/<<PKGBUILDDIR>>/src/libpmempool'
make[3]: *** [Makefile:140: libpmempool] Error 2
make[3]: Leaving directory '/<<PKGBUILDDIR>>/src'
make[2]: *** [Makefile:55: all] Error 2
make[2]: Leaving directory '/<<PKGBUILDDIR>>'
dh_auto_build: error: make -j4 "INSTALL=install --strip-program=true" prefix=/usr libdir=/usr/lib/x86_64-linux-gnu sysconfdir=/etc bashcompdir=/usr/share/bash-completion/completions NORPATH=1 BUILD_EXAMPLES=n BUILD_BENCHMARKS=n returned exit code 2
make[1]: *** [debian/rules:19: override_dh_auto_build] Error 25
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:11: binary] Error 2

Expected behavior:

Still building correctly

Details

This came up when Ubuntu started to switch on LTO by default, see here

Additional information about Priority and Help Requested:

Requested priority: Medium

@lukaszstolarczuk
Copy link
Member

@kmalek-int, do we have any update on this?

@wlemkows
Copy link
Contributor

wlemkows commented Apr 3, 2023

Add disable lto to cflags: #5252

@kloczek
Copy link

kloczek commented Apr 3, 2023

That is is not fix.
It is JFDI solution.

@lukaszstolarczuk
Copy link
Member

Hi @kloczek,
I'm not sure if you're aware, but we're winding down the investment in PMDK development. Please see our blog post for more details.

Due to low resources available and other priorities, we had to prepare a workaround linked above.

If this issue is of high value to you, you can always submit a pull request with a patch. You can also share your use case of PMDK if you feel like it.

Thanks,
Luke

@pbalcer
Copy link
Member

pbalcer commented Apr 3, 2023

Just to be clear, it's not that we don't want to fix it properly. But it's not that simple, and we really tried. PMDK's build system is just very complicated, and, e.g., uses objcpy that's difficult to eliminate. Our solution was to rewrite the build system (#5507). That's not possible right now for the reason that @lukaszstolarczuk mentioned.

@kloczek
Copy link

kloczek commented Apr 3, 2023

As would bother you about pmdk as it is about subsystem which is no lponmger supported by new hardware however still ir is not possible to build ceph without pmdk.

@janekmi janekmi added the won't do The requested improvement is not planned to be done. label Aug 30, 2023
@janekmi
Copy link
Contributor

janekmi commented Aug 30, 2023

This improvement is not considered vital at the moment. So, we do not have the resources to fulfil your request. Sorry.

@janekmi janekmi closed this as completed Aug 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Priority: 2 high Type: Bug A previously unknown bug in PMDK won't do The requested improvement is not planned to be done.
Projects
None yet
Development

No branches or pull requests

8 participants