Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 Mar 2022 17:46:44 +0900
From:      Tomoaki AOKI <junchoon@dec.sakura.ne.jp>
To:        Dimitry Andric <dim@FreeBSD.org>
Cc:        John Baldwin <jhb@freebsd.org>, Ed Maste <emaste@freebsd.org>, dev-commits-src-branches@freebsd.org, David Chisnall <theraven@FreeBSD.org>
Subject:   Re: git: b2127b6f1ae2 - stable/13 - Install unwind.h into /usr/include
Message-ID:  <20220306174644.dca71df7cf1400ea48cafaca@dec.sakura.ne.jp>
In-Reply-To: <682D0394-CDC8-44AB-B9FF-2B969AE2D39A@FreeBSD.org>
References:  <20220303224535.a0cca57e1f033e930a7f8f9d@dec.sakura.ne.jp> <3166E99F-1616-40D9-BD8B-D18E8104D6FF@FreeBSD.org> <a9863238-04e5-381d-105d-311a2b0c3f56@FreeBSD.org> <6E5AD771-3140-480A-BF20-95B8E8A27189@FreeBSD.org> <20220305113613.7760bb3845cda1c04707fb34@dec.sakura.ne.jp> <7482C54A-1128-4AFF-A74E-53D88334C1D9@FreeBSD.org> <682D0394-CDC8-44AB-B9FF-2B969AE2D39A@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

--Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

On Sat, 5 Mar 2022 23:33:54 +0100
Dimitry Andric <dim@FreeBSD.org> wrote:

> On 5 Mar 2022, at 22:34, Dimitry Andric <dim@FreeBSD.org> wrote:
> > 
> > On 5 Mar 2022, at 03:36, Tomoaki AOKI <junchoon@dec.sakura.ne.jp> wrote:
> ...
> > So according to the spec, casting the void pointer 'thrown_exception' to
> > a __cxa_exception pointer, then subtracting 1, should give you the
> > original __cxa_exception struct. In this case, it subtracts 8 bytes,
> > going from 0x87b5aff00 to 0x87b5afe88.
> 
> Ugh, actually this was 120 bytes!
> 
> 
> > Now I do exactly the same in the libreoffice frame one below, where the
> > incoming void pointer 'pExc' is the previous 'thrown_exception' value:
> > 
> > (gdb) frame 1
> > #1  gcc3::deleteException (pExc=0x87b5aff00) at bridges/source/cpp_uno/gcc3_linux_x86-64/except.cxx:139
> > 139         OUString unoName( toUNOname( header->exceptionType->name() ) );
> > (gdb) print pExc
> > $33 = (void *) 0x87b5aff00
> > (gdb) print static_cast<__cxa_exception*>(pExc)-1
> > $34 = (__cxa_exception *) 0x87b5afe80
> > 
> > So in *this* function, subtracting 1 from a __cxa_exception pointer
> > subtracts 16 bytes instead, going from 0x87b5aff00 to 0x87b5afe80!
> 
> And this was 128 bytes instead. I think I now know what's going on,
> which is that our declaration of __cxa_exception changed its size from
> 120 bytes to 128 bytes, due to the new unwind headers.
> 
> Our libcxxrt cxxabi.h header has:
> 
>   struct __cxa_exception
>   {
>   ... lots of stuff ...
>           /** The language-agnostic part of the exception header. */
>           _Unwind_Exception unwindHeader;
>   };
> 
> so the last field is a struct _Unwind_Exception. Our libcxxrt
> unwind-itanium.h header has:
> 
>   struct _Unwind_Exception
>     {
>       uint64_t exception_class;
>       _Unwind_Exception_Cleanup_Fn exception_cleanup;
>       unsigned long private_1;
>       unsigned long private_2;
>     } ;
> 
> while libunwind's version has an __aligned__ attribute at the end:
> 
>   struct _Unwind_Exception {
>     uint64_t exception_class;
>     void (*exception_cleanup)(_Unwind_Reason_Code reason,
>                               _Unwind_Exception *exc);
>   #if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__)
>     uintptr_t private_[6];
>   #else
>     uintptr_t private_1; // non-zero means forced unwind
>     uintptr_t private_2; // holds sp that phase1 found for phase2 to use
>   #endif
>   #if __SIZEOF_POINTER__ == 4
>     // The implementation of _Unwind_Exception uses an attribute mode on the
>     // above fields which has the side effect of causing this whole struct to
>     // round up to 32 bytes in size (48 with SEH). To be more explicit, we add
>     // pad fields added for binary compatibility.
>     uint32_t reserved[3];
>   #endif
>     // The Itanium ABI requires that _Unwind_Exception objects are "double-word
>     // aligned".  GCC has interpreted this to mean "use the maximum useful
>     // alignment for the target"; so do we.
>   } __attribute__((__aligned__));
> 
> (Note that upstream libcxxrt also added the reserved field and aligned
> attribute, in https://github.com/libcxxrt/libcxxrt/commit/b9616964 !)
> 
> The aligned attribute on _Unwind_Exception causes the enclosing
> __cxa_exception struct to *also* be aligned maximally, growing it from
> 120 to 128 bytes on x86_64.
> 
> So this is a bit of a fine mess we are in. There are multiple issues
> here:
> 
> 1) We broke the ABI by increasing __cxa_exception's size.
> 
> 2) We compile libcxxrt against its *own* unwind headers, so it assumes a
> 120-byte __cxa_exception size. But all other programs use the libunwind
> headers, so they assume a 128 byte __cxa_exception size.
> 
> I guess LibreOffice is just a good example which breaks because it does
> this deep poking in exception-handling land, which most programs never
> go near. That said, LibreOffice also includes the unwind.h header
> installed by the libunwind-20201110 port, so that is yet *another*
> possible incompatibility!
> 
> But I think we must do something about this. The most backward
> compatible change would be to *remove* the aligned attribute from our
> _Unwind_Exception declaration, so the old __cxa_exception size is
> restored. The problem with that is that we have to carry a patch for
> libunwind forever.
> 
> The other way would be to force libcxxrt to use the libunwind headers
> instead of its own, so that at least libcxxrt and libunwind agree on the
> size and alignment of all these structures! But that may still lead to
> crashes for older consumers.
> 
> No easy way out, in any case... :-/
> 
> -Dimitry

Did a quick stupid test by

 *Replacing #include "unwind.h" by #include <unwind.h> in
  contrib/libcxxrt/cxxabi.h, the only file including unwind.h on
  contrib/cxxrt directory to pick it from standard place.

 *Rename unsind*.h to something else just to be sure.

and got errors by missing macros. At least BEGIN_PERSONALITY_FUNCTION.

Insufficient part would be needed to be extracted to additional header.

Emitted errors are as follows:

/usr/src/lib/libcxxrt# make
Building /usr/obj/usr/src/amd64.amd64/lib/libcxxrt/auxhelper.o
Building /usr/obj/usr/src/amd64.amd64/lib/libcxxrt/dynamic_cast.o
Building /usr/obj/usr/src/amd64.amd64/lib/libcxxrt/exception.o
/usr/src/contrib/libcxxrt/exception.cc:1084:1: error: unknown type name
'BEGIN_PERSONALITY_FUNCTION'
BEGIN_PERSONALITY_FUNCTION(__gxx_personality_v0) ^
/usr/src/contrib/libcxxrt/exception.cc:1084:49: error: expected ';'
after top level declarator
BEGIN_PERSONALITY_FUNCTION(__gxx_personality_v0) ^
                                                ;
/usr/src/contrib/libcxxrt/exception.cc:1098:42: error: use of
undeclared identifier 'exceptionClass'; did you mean 'exception_class'?
bool foreignException = !isCXXException(exceptionClass); ^~~~~~~~~~~~~~
                                                exception_class
/usr/src/contrib/libcxxrt/exception.cc:242:23: note: 'exception_class'
declared here static const uint64_t exception_class =
                      ^
/usr/src/contrib/libcxxrt/exception.cc:1101:2: error: expected
unqualified-id if (!foreignException)
        ^
/usr/src/contrib/libcxxrt/exception.cc:1112:91: error: use of
undeclared identifier 'context' reinterpret_cast<unsigned
char*>(static_cast<uintptr_t>(_Unwind_GetLanguageSpecificData(context)));
^ /usr/src/contrib/libcxxrt/exception.cc:1116:2: error: expected
unqualified-id if (0 == lsda_addr) { return
continueUnwinding(exceptionObject, context); } ^
/usr/src/contrib/libcxxrt/exception.cc:1137:2: error: expected
unqualified-id if (actions & _UA_SEARCH_PHASE)
        ^
/usr/src/contrib/libcxxrt/exception.cc:1176:2: error: expected
unqualified-id if (!(actions & _UA_HANDLER_FRAME))
        ^
/usr/src/contrib/libcxxrt/exception.cc:1188:2: error: expected
unqualified-id else if (foreignException)
        ^
/usr/src/contrib/libcxxrt/exception.cc:1195:2: error: expected
unqualified-id else if (ex->catchTemp == 0)
        ^
/usr/src/contrib/libcxxrt/exception.cc:1200:2: error: expected
unqualified-id else
        ^
/usr/src/contrib/libcxxrt/exception.cc:1209:2: error: C++ requires a
type specifier for all declarations _Unwind_SetIP(context,
reinterpret_cast<unsigned long>(action.landing_pad)); ^
/usr/src/contrib/libcxxrt/exception.cc:1209:16: error: use of
undeclared identifier 'context' _Unwind_SetIP(context,
reinterpret_cast<unsigned long>(action.landing_pad)); ^
/usr/src/contrib/libcxxrt/exception.cc:1210:2: error: C++ requires a
type specifier for all declarations _Unwind_SetGR(context,
__builtin_eh_return_data_regno(0), ^
/usr/src/contrib/libcxxrt/exception.cc:1210:16: error: use of
undeclared identifier 'context' _Unwind_SetGR(context,
__builtin_eh_return_data_regno(0), ^
/usr/src/contrib/libcxxrt/exception.cc:1211:48: error: use of
undeclared identifier 'exceptionObject' reinterpret_cast<unsigned
long>(exceptionObject)); ^
/usr/src/contrib/libcxxrt/exception.cc:1212:2: error: C++ requires a
type specifier for all declarations _Unwind_SetGR(context,
__builtin_eh_return_data_regno(1), selector); ^
/usr/src/contrib/libcxxrt/exception.cc:1212:16: error: use of
undeclared identifier 'context' _Unwind_SetGR(context,
__builtin_eh_return_data_regno(1), selector); ^
/usr/src/contrib/libcxxrt/exception.cc:1214:2: error: expected
unqualified-id return _URC_INSTALL_CONTEXT;
        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
*** Error code 1

Stop.
make: stopped in /usr/src/lib/libcxxrt
.ERROR_TARGET='exception.o'
.ERROR_META_FILE='/usr/obj/usr/src/amd64.amd64/lib/libcxxrt/exception.o.meta'
.MAKE.LEVEL='0'
MAKEFILE=''
.MAKE.MODE='meta missing-filemon=yes missing-meta=yes silent=yes
verbose' _ERROR_CMD='c++  -O2 -pipe -fno-common
-isystem /usr/src/contrib/libcxxrt -nostdinc++ -march=haswell
-mretpoline -Wno-format-zero-length -fstack-protector-strong
-Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable
-Wno-error=unused-but-set-variable -Wno-tautological-compare
-Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
-Wno-enum-conversion -Wno-unused-local-typedef
-Wno-address-of-packed-member -Wno-switch -Wno-switch-enum
-Wno-knr-promoted-parameter -Wno-parentheses -Qunused-arguments
-mretpoline -std=c++14    -Wno-c++11-extensions
-c /usr/src/contrib/libcxxrt/exception.cc -o
exception.o;' .CURDIR='/usr/src/lib/libcxxrt' .MAKE='make' .OBJDIR='/usr/obj/usr/src/amd64.amd64/lib/libcxxrt' .TARGETS='
all' DESTDIR='' LD_LIBRARY_PATH='' MACHINE='amd64' MACHINE_ARCH='amd64'
MAKEOBJDIRPREFIX='' MAKESYSPATH='/usr/src/share/mk'
MAKE_VERSION='20220208'
PATH='/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin'
SRCTOP='/usr/src' OBJTOP='/usr/obj/usr/src/amd64.amd64'


-- 
Tomoaki AOKI    <junchoon@dec.sakura.ne.jp>

--Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU
Content-Type: application/octet-stream;
 name="libcxxrt_errors_20220306-001.log"
Content-Disposition: attachment;
 filename="libcxxrt_errors_20220306-001.log"
Content-Transfer-Encoding: base64

L3Vzci9zcmMvbGliL2xpYmN4eHJ0IyBtYWtlCkJ1aWxkaW5nIC91c3Ivb2JqL3Vzci9zcmMvYW1k
NjQuYW1kNjQvbGliL2xpYmN4eHJ0L2F1eGhlbHBlci5vCkJ1aWxkaW5nIC91c3Ivb2JqL3Vzci9z
cmMvYW1kNjQuYW1kNjQvbGliL2xpYmN4eHJ0L2R5bmFtaWNfY2FzdC5vCkJ1aWxkaW5nIC91c3Iv
b2JqL3Vzci9zcmMvYW1kNjQuYW1kNjQvbGliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5vCi91c3Ivc3Jj
L2NvbnRyaWIvbGliY3h4cnQvZXhjZXB0aW9uLmNjOjEwODQ6MTogZXJyb3I6IHVua25vd24gdHlw
ZSBuYW1lICdCRUdJTl9QRVJTT05BTElUWV9GVU5DVElPTicKQkVHSU5fUEVSU09OQUxJVFlfRlVO
Q1RJT04oX19neHhfcGVyc29uYWxpdHlfdjApCl4KL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9l
eGNlcHRpb24uY2M6MTA4NDo0OTogZXJyb3I6IGV4cGVjdGVkICc7JyBhZnRlciB0b3AgbGV2ZWwg
ZGVjbGFyYXRvcgpCRUdJTl9QRVJTT05BTElUWV9GVU5DVElPTihfX2d4eF9wZXJzb25hbGl0eV92
MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci91c3Ivc3JjL2Nv
bnRyaWIvbGliY3h4cnQvZXhjZXB0aW9uLmNjOjEwOTg6NDI6IGVycm9yOiB1c2Ugb2YgdW5kZWNs
YXJlZCBpZGVudGlmaWVyICdleGNlcHRpb25DbGFzcyc7IGRpZCB5b3UgbWVhbiAnZXhjZXB0aW9u
X2NsYXNzJz8KICAgICAgICBib29sIGZvcmVpZ25FeGNlcHRpb24gPSAhaXNDWFhFeGNlcHRpb24o
ZXhjZXB0aW9uQ2xhc3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBefn5+fn5+fn5+fn5+fgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25fY2xhc3MKL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9l
eGNlcHRpb24uY2M6MjQyOjIzOiBub3RlOiAnZXhjZXB0aW9uX2NsYXNzJyBkZWNsYXJlZCBoZXJl
CnN0YXRpYyBjb25zdCB1aW50NjRfdCBleGNlcHRpb25fY2xhc3MgPQogICAgICAgICAgICAgICAg
ICAgICAgXgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMTAxOjI6IGVy
cm9yOiBleHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAgIGlmICghZm9yZWlnbkV4Y2VwdGlv
bikKICAgICAgICBeCi91c3Ivc3JjL2NvbnRyaWIvbGliY3h4cnQvZXhjZXB0aW9uLmNjOjExMTI6
OTE6IGVycm9yOiB1c2Ugb2YgdW5kZWNsYXJlZCBpZGVudGlmaWVyICdjb250ZXh0JwogICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihfVW53aW5kX0dldExhbmd1YWdlU3BlY2lmaWNEYXRhKGNvbnRleHQpKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgovdXNyL3NyYy9jb250
cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMTE2OjI6IGVycm9yOiBleHBlY3RlZCB1bnF1YWxp
ZmllZC1pZAogICAgICAgIGlmICgwID09IGxzZGFfYWRkcikgeyByZXR1cm4gY29udGludWVVbndp
bmRpbmcoZXhjZXB0aW9uT2JqZWN0LCBjb250ZXh0KTsgfQogICAgICAgIF4KL3Vzci9zcmMvY29u
dHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTEzNzoyOiBlcnJvcjogZXhwZWN0ZWQgdW5xdWFs
aWZpZWQtaWQKICAgICAgICBpZiAoYWN0aW9ucyAmIF9VQV9TRUFSQ0hfUEhBU0UpCiAgICAgICAg
XgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMTc2OjI6IGVycm9yOiBl
eHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAgIGlmICghKGFjdGlvbnMgJiBfVUFfSEFORExF
Ul9GUkFNRSkpCiAgICAgICAgXgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5j
YzoxMTg4OjI6IGVycm9yOiBleHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAgIGVsc2UgaWYg
KGZvcmVpZ25FeGNlcHRpb24pCiAgICAgICAgXgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4
Y2VwdGlvbi5jYzoxMTk1OjI6IGVycm9yOiBleHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAg
IGVsc2UgaWYgKGV4LT5jYXRjaFRlbXAgPT0gMCkKICAgICAgICBeCi91c3Ivc3JjL2NvbnRyaWIv
bGliY3h4cnQvZXhjZXB0aW9uLmNjOjEyMDA6MjogZXJyb3I6IGV4cGVjdGVkIHVucXVhbGlmaWVk
LWlkCiAgICAgICAgZWxzZQogICAgICAgIF4KL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9leGNl
cHRpb24uY2M6MTIwOToyOiBlcnJvcjogQysrIHJlcXVpcmVzIGEgdHlwZSBzcGVjaWZpZXIgZm9y
IGFsbCBkZWNsYXJhdGlvbnMKICAgICAgICBfVW53aW5kX1NldElQKGNvbnRleHQsIHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oYWN0aW9uLmxhbmRpbmdfcGFkKSk7CiAgICAgICAgXgov
dXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMjA5OjE2OiBlcnJvcjogdXNl
IG9mIHVuZGVjbGFyZWQgaWRlbnRpZmllciAnY29udGV4dCcKICAgICAgICBfVW53aW5kX1NldElQ
KGNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oYWN0aW9uLmxhbmRpbmdf
cGFkKSk7CiAgICAgICAgICAgICAgICAgICAgICBeCi91c3Ivc3JjL2NvbnRyaWIvbGliY3h4cnQv
ZXhjZXB0aW9uLmNjOjEyMTA6MjogZXJyb3I6IEMrKyByZXF1aXJlcyBhIHR5cGUgc3BlY2lmaWVy
IGZvciBhbGwgZGVjbGFyYXRpb25zCiAgICAgICAgX1Vud2luZF9TZXRHUihjb250ZXh0LCBfX2J1
aWx0aW5fZWhfcmV0dXJuX2RhdGFfcmVnbm8oMCksCiAgICAgICAgXgovdXNyL3NyYy9jb250cmli
L2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMjEwOjE2OiBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQg
aWRlbnRpZmllciAnY29udGV4dCcKICAgICAgICBfVW53aW5kX1NldEdSKGNvbnRleHQsIF9fYnVp
bHRpbl9laF9yZXR1cm5fZGF0YV9yZWdubygwKSwKICAgICAgICAgICAgICAgICAgICAgIF4KL3Vz
ci9zcmMvY29udHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTIxMTo0ODogZXJyb3I6IHVzZSBv
ZiB1bmRlY2xhcmVkIGlkZW50aWZpZXIgJ2V4Y2VwdGlvbk9iamVjdCcKICAgICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oZXhjZXB0aW9uT2JqZWN0KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K
L3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTIxMjoyOiBlcnJvcjogQysr
IHJlcXVpcmVzIGEgdHlwZSBzcGVjaWZpZXIgZm9yIGFsbCBkZWNsYXJhdGlvbnMKICAgICAgICBf
VW53aW5kX1NldEdSKGNvbnRleHQsIF9fYnVpbHRpbl9laF9yZXR1cm5fZGF0YV9yZWdubygxKSwg
c2VsZWN0b3IpOwogICAgICAgIF4KL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9leGNlcHRpb24u
Y2M6MTIxMjoxNjogZXJyb3I6IHVzZSBvZiB1bmRlY2xhcmVkIGlkZW50aWZpZXIgJ2NvbnRleHQn
CiAgICAgICAgX1Vud2luZF9TZXRHUihjb250ZXh0LCBfX2J1aWx0aW5fZWhfcmV0dXJuX2RhdGFf
cmVnbm8oMSksIHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICAgICAgIF4KL3Vzci9zcmMvY29u
dHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTIxNDoyOiBlcnJvcjogZXhwZWN0ZWQgdW5xdWFs
aWZpZWQtaWQKICAgICAgICByZXR1cm4gX1VSQ19JTlNUQUxMX0NPTlRFWFQ7CiAgICAgICAgXgpm
YXRhbCBlcnJvcjogdG9vIG1hbnkgZXJyb3JzIGVtaXR0ZWQsIHN0b3BwaW5nIG5vdyBbLWZlcnJv
ci1saW1pdD1dCjIwIGVycm9ycyBnZW5lcmF0ZWQuCioqKiBFcnJvciBjb2RlIDEKClN0b3AuCm1h
a2U6IHN0b3BwZWQgaW4gL3Vzci9zcmMvbGliL2xpYmN4eHJ0Ci5FUlJPUl9UQVJHRVQ9J2V4Y2Vw
dGlvbi5vJwouRVJST1JfTUVUQV9GSUxFPScvdXNyL29iai91c3Ivc3JjL2FtZDY0LmFtZDY0L2xp
Yi9saWJjeHhydC9leGNlcHRpb24uby5tZXRhJwouTUFLRS5MRVZFTD0nMCcKTUFLRUZJTEU9JycK
Lk1BS0UuTU9ERT0nbWV0YSBtaXNzaW5nLWZpbGVtb249eWVzIG1pc3NpbmctbWV0YT15ZXMgc2ls
ZW50PXllcyB2ZXJib3NlJwpfRVJST1JfQ01EPSdjKysgIC1PMiAtcGlwZSAtZm5vLWNvbW1vbiAt
aXN5c3RlbSAvdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0IC1ub3N0ZGluYysrIC1tYXJjaD1oYXN3
ZWxsIC1tcmV0cG9saW5lIC1Xbm8tZm9ybWF0LXplcm8tbGVuZ3RoIC1mc3RhY2stcHJvdGVjdG9y
LXN0cm9uZyAtV25vLWVtcHR5LWJvZHkgLVduby1zdHJpbmctcGx1cy1pbnQgLVduby11bnVzZWQt
Y29uc3QtdmFyaWFibGUgLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZSAtV25vLXRh
dXRvbG9naWNhbC1jb21wYXJlIC1Xbm8tdW51c2VkLXZhbHVlIC1Xbm8tcGFyZW50aGVzZXMtZXF1
YWxpdHkgLVduby11bnVzZWQtZnVuY3Rpb24gLVduby1lbnVtLWNvbnZlcnNpb24gLVduby11bnVz
ZWQtbG9jYWwtdHlwZWRlZiAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciAtV25vLXN3aXRj
aCAtV25vLXN3aXRjaC1lbnVtIC1Xbm8ta25yLXByb21vdGVkLXBhcmFtZXRlciAtV25vLXBhcmVu
dGhlc2VzIC1RdW51c2VkLWFyZ3VtZW50cyAgLW1yZXRwb2xpbmUgLXN0ZD1jKysxNCAgICAtV25v
LWMrKzExLWV4dGVuc2lvbnMgICAtYyAvdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlv
bi5jYyAtbyBleGNlcHRpb24ubzsnCi5DVVJESVI9Jy91c3Ivc3JjL2xpYi9saWJjeHhydCcKLk1B
S0U9J21ha2UnCi5PQkpESVI9Jy91c3Ivb2JqL3Vzci9zcmMvYW1kNjQuYW1kNjQvbGliL2xpYmN4
eHJ0JwouVEFSR0VUUz0nIGFsbCcKREVTVERJUj0nJwpMRF9MSUJSQVJZX1BBVEg9JycKTUFDSElO
RT0nYW1kNjQnCk1BQ0hJTkVfQVJDSD0nYW1kNjQnCk1BS0VPQkpESVJQUkVGSVg9JycKTUFLRVNZ
U1BBVEg9Jy91c3Ivc3JjL3NoYXJlL21rJwpNQUtFX1ZFUlNJT049JzIwMjIwMjA4JwpQQVRIPScv
c2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvc2Jpbjov
dXNyL2xvY2FsL2Jpbjovcm9vdC9iaW4nClNSQ1RPUD0nL3Vzci9zcmMnCk9CSlRPUD0nL3Vzci9v
YmovdXNyL3NyYy9hbWQ2NC5hbWQ2NCcK

--Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU--



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