Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Jun 2021 16:53:50 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 256909] libucl upgrade in a0409676120c1e558d0ade943019934e0f15118d breaks ABI
Message-ID:  <bug-256909-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D256909

            Bug ID: 256909
           Summary: libucl upgrade in
                    a0409676120c1e558d0ade943019934e0f15118d breaks ABI
           Product: Base System
           Version: 12.2-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: michael.osipov@siemens.com

* I have installed a new FreeBSD host from 12.2-RELEASE image
* Installed gitup(1):
# fetch -o gitup.zip https://codeload.github.com/johnmehr/gitup/zip/main
# unzip gitup.zip
# cd gitup-main
# mkdir -p /usr/local/etc /usr/local/sbin /usr/local/man/man1
/usr/local/man/man5
# make
# make MK_DEBUG_FILES=3Dno DESTDIR=3D/usr/local BINDIR=3D/sbin MANDIR=3D/ma=
n/man
install
# cd ..
# rm -rf gitup*

gitup makes use of ucl_iterate_object().

gitup works, it is now used to fetch a shallow copy of stable/12 to update =
base
from release to stable. After stable has been applied and the system has be=
en
rebooted gitup fails with undefined symbol "ucl_iterate_object". One needs =
to
recompile gitup to make it work again with stable/12.

The reason is commit a0409676120c1e558d0ade943019934e0f15118d (libucl: vend=
or
import snapshort 20210314). In this specific commit the following has been
performed:
...
> -UCL_EXTERN const ucl_object_t* ucl_object_iterate (const ucl_object_t *o=
bj,
> -		ucl_object_iter_t *iter, bool expand_values);
> +UCL_EXTERN const ucl_object_t* ucl_object_iterate_with_error (const ucl_=
object_t *obj,
> +		ucl_object_iter_t *iter, bool expand_values, int *ep);
> +
>  #define ucl_iterate_object ucl_object_iterate
> +#define ucl_object_iterate(ob, it, ev) ucl_object_iterate_with_error((ob=
), (it), (ev), NULL)
...
> -ucl_object_iterate (const ucl_object_t *obj, ucl_object_iter_t *iter, bo=
ol expand_values)
> +ucl_object_iterate_with_error (const ucl_object_t *obj, ucl_object_iter_=
t *iter, bool expand_values,
> +    int *ep)

The dynamic symbol table has been modified and the symbol ucl_object_iterat=
e is
gone after base has been updated. This is a breaking change for me which I
don't expect. While I can recompile gitup, no issue, others will have probl=
ems
with other ports which may rely on this symbol to exist. This also means th=
at
one cannot build this port in 12.2-RELEASE jail and use it in a 12-STABLE
system.

The vendor change must be modified that no macro is used, but the old symbo=
l is
retained and the replaced function simply calls the new one.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-256909-227>