Skip Menu |
 

To: rt@kerborg-prod-app-1.mit.edu
Subject: Build fails with LTO
From: ghudson@mit.edu
Date: Tue, 05 Mar 2024 15:31:17 -0500

I did this:

CFLAGS="-flto=4 -Werror=odr -Werror=lto-type-mismatch
-Werror=strict-aliasing"
CXXFLAGS="-flto=4 -Werror=odr -Werror=lto-type-mismatch
-Werror=strict-aliasing"
LDFLAGS="-flto=4 -Werror=odr -Werror=lto-type-mismatch
-Werror=strict-aliasing"


I got this compile error:

```
+ x86_64-pc-linux-gnu-gcc -shared -fPIC -Wl,-h,libkrb5.so.3
-Wl,--no-undefined -o libkrb5.so.3.3 krb5_libinit.so
error_tables/asn1_err.so error_tables/kdb5_err.so
error_tables/krb5_err.so error_tables/k5e1_err.so
error_tables/kv5m_err.so error_tables/krb524_err.so asn.1/asn1_encode.so
asn.1/asn1_k_encode.so asn.1/ldap_key_seq.so ccache/ccapi_util.so
ccache/ccbase.so ccache/cccopy.so ccache/cccursor.so ccache/ccdefault.so
ccache/ccdefops.so ccache/ccmarshal.so ccache/ccselect.so
ccache/ccselect_hostname.so ccache/ccselect_k5identity.so
ccache/ccselect_realm.so ccache/cc_api_macos.so ccache/cc_dir.so
ccache/cc_retr.so ccache/cc_file.so ccache/cc_kcm.so ccache/cc_memory.so
ccache/cc_keyring.so ccache/ccfns.so keytab/ktadd.so keytab/ktbase.so
keytab/ktdefault.so keytab/ktfr_entry.so keytab/ktremove.so
keytab/ktfns.so keytab/kt_file.so keytab/kt_memory.so
keytab/read_servi.so krb/addr_comp.so krb/addr_order.so krb/addr_srch.so
krb/allow_weak.so krb/appdefault.so krb/ai_authdata.so krb/auth_con.so
krb/cammac_util.so krb/authdata.so krb/authdata_exp.so
krb/authdata_enc.so krb/authdata_dec.so krb/bld_pr_ext.so
krb/bld_princ.so krb/chk_trans.so krb/chpw.so krb/conv_creds.so
krb/conv_princ.so krb/copy_addrs.so krb/copy_auth.so krb/copy_athctr.so
krb/copy_cksum.so krb/copy_creds.so krb/copy_data.so krb/copy_key.so
krb/copy_princ.so krb/copy_tick.so krb/cp_key_cnt.so krb/decode_kdc.so
krb/decrypt_tk.so krb/deltat.so krb/enc_helper.so krb/enc_keyhelper.so
krb/encode_kdc.so krb/encrypt_tk.so krb/etype_list.so krb/fast.so
krb/fwd_tgt.so krb/gc_via_tkt.so krb/gen_seqnum.so krb/gen_subkey.so
krb/gen_save_subkey.so krb/get_creds.so krb/get_etype_info.so
krb/get_in_tkt.so krb/gic_keytab.so krb/gic_opt.so krb/gic_pwd.so
krb/in_tkt_sky.so krb/init_ctx.so krb/copy_ctx.so krb/init_keyblock.so
krb/kdc_rep_dc.so krb/kerrs.so krb/kfree.so krb/libdef_parse.so
krb/mk_cred.so krb/mk_error.so krb/mk_priv.so krb/mk_rep.so
krb/mk_req.so krb/mk_req_ext.so krb/mk_safe.so krb/pac.so
krb/pac_sign.so krb/padata.so krb/parse.so krb/parse_host_string.so
krb/plugin.so krb/pr_to_salt.so krb/preauth2.so krb/preauth_ec.so
krb/preauth_encts.so krb/preauth_otp.so krb/preauth_pkinit.so
krb/preauth_sam2.so krb/princ_comp.so krb/privsafe.so krb/random_str.so
krb/rd_cred.so krb/rd_error.so krb/rd_priv.so krb/rd_rep.so
krb/rd_req.so krb/rd_req_dec.so krb/rd_safe.so krb/recvauth.so
krb/response_items.so krb/s4u_creds.so krb/sendauth.so krb/send_tgs.so
krb/ser_actx.so krb/ser_adata.so krb/ser_addr.so krb/ser_auth.so
krb/ser_cksum.so krb/ser_ctx.so krb/ser_key.so krb/ser_princ.so
krb/serialize.so krb/set_realm.so krb/sname_match.so krb/srv_dec_tkt.so
krb/srv_rcache.so krb/str_conv.so krb/tgtname.so krb/unparse.so
krb/val_renew.so krb/valid_times.so krb/vfy_increds.so krb/vic_opt.so
krb/walk_rtree.so rcache/memrcache.so rcache/rc_base.so rcache/rc_dfl.so
rcache/rc_file2.so rcache/rc_none.so unicode/ucdata.so unicode/ucstr.so
os/accessor.so os/c_ustime.so os/ccdefname.so os/changepw.so
os/dnsglue.so os/dnssrv.so os/expand_path.so os/full_ipadr.so
os/gen_port.so os/genaddrs.so os/gen_rname.so os/hostaddr.so
os/hostrealm.so os/hostrealm_dns.so os/hostrealm_domain.so
os/hostrealm_profile.so os/hostrealm_registry.so os/init_os_ctx.so
os/krbfileio.so os/ktdefname.so os/mk_faddr.so os/localaddr.so
os/localauth.so os/localauth_an2ln.so os/localauth_k5login.so
os/localauth_names.so os/localauth_rule.so os/locate_kdc.so
os/lock_file.so os/net_read.so os/net_write.so os/port2ip.so
os/prompter.so os/read_msg.so os/read_pwd.so os/realm_dom.so
os/sendto_kdc.so os/sn2princ.so os/thread_safe.so os/timeofday.so
os/toffset.so os/trace.so os/unlck_file.so os/ustime.so os/write_msg.so
../../util/profile/prof_tree.so ../../util/profile/prof_file.so
../../util/profile/prof_parse.so ../../util/profile/prof_get.so
../../util/profile/prof_set.so ../../util/profile/prof_err.so
../../util/profile/prof_init.so -L../../lib -lk5crypto -lcom_err
-lkrb5support -lkeyutils -lresolv -Wl,-O1 -Wl,--as-needed -flto=4
-Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing
-Wl,--defsym=__gentoo_check_ldflags__=0 -Wl,--version-script
binutils.versions
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/lib/krb5/krb/ser_ctx.c:33:17:
error: type of ‘profile_ser_internalize’ does not match original
declaration [-Werror=lto-type-mismatch]
   33 | krb5_error_code profile_ser_internalize(krb5_context, profile_t *,
      |                 ^
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:600:11:
note: return value type mismatch
  600 | errcode_t profile_ser_internalize(const char *unused, profile_t
*profilep,
      |           ^
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:600:11:
note: type ‘errcode_t’ should match type ‘krb5_error_code’
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:600:11:
note: ‘profile_ser_internalize’ was previously declared here
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:600:11:
note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/lib/krb5/krb/ser_ctx.c:31:17:
error: type of ‘profile_ser_externalize’ does not match original
declaration [-Werror=lto-type-mismatch]
   31 | krb5_error_code profile_ser_externalize(krb5_context, profile_t,
      |                 ^
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:546:11:
note: return value type mismatch
  546 | errcode_t profile_ser_externalize(const char *unused, profile_t
profile,
      |           ^
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:546:11:
note: type ‘errcode_t’ should match type ‘krb5_error_code’
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:546:11:
note: ‘profile_ser_externalize’ was previously declared here
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:546:11:
note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/lib/krb5/krb/ser_ctx.c:30:17:
error: type of ‘profile_ser_size’ does not match original declaration
[-Werror=lto-type-mismatch]
   30 | krb5_error_code profile_ser_size(krb5_context, profile_t, size_t *);
      |                 ^
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:524:11:
note: return value type mismatch
  524 | errcode_t profile_ser_size(const char *unused, profile_t profile,
      |           ^
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:524:11:
note: type ‘errcode_t’ should match type ‘krb5_error_code’
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:524:11:
note: ‘profile_ser_size’ was previously declared here
/var/tmp/portage/app-crypt/mit-krb5-1.21.2/work/krb5-1.21.2/src/util/profile/prof_init.c:524:11:
note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
lto1: some warnings being treated as errors
lto-wrapper: fatal error: x86_64-pc-linux-gnu-gcc returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld:
error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:711: libkrb5.so.3.3] Error 1
```


A full build log is attached.



-- Eli Schwartz
Subject: git commit
From: ghudson@mit.edu

Fix type mismatches detected by LTO

Building with link-time optimization reveals some type mismatches in
the interface between libkrb5 serialization and the profile library,
as well as in consumers of the SS library. Fix them. Reported by Eli
Schwartz.

https://github.com/krb5/krb5/commit/458afb6737b17510175ab4f6fa4b95ec3d9e77f8
Author: Greg Hudson <ghudson@mit.edu>
Commit: 458afb6737b17510175ab4f6fa4b95ec3d9e77f8
Branch: master
src/kadmin/cli/kadmin.c | 38 +++++++++++++++---------------
src/kadmin/cli/kadmin.h | 56 +++++++++++++++++++++++++++-----------------
src/kadmin/cli/keytab.c | 4 ++--
src/kadmin/ktutil/ktutil.c | 16 ++++++-------
src/kadmin/ktutil/ktutil.h | 16 ++++++-------
src/lib/krb5/krb/ser_ctx.c | 14 +++++------
src/util/profile/prof_init.c | 9 ++++---
src/util/profile/prof_int.h | 6 ++---
8 files changed, 85 insertions(+), 74 deletions(-)