Re: 12.3-RC1 fails to compile perl,tcl86 (ipfw dtrace issue)

2021-11-22 Thread Mark Johnston
On Sun, Nov 21, 2021 at 10:46:30PM +0100, Peter wrote:
> ## this seems not have arrived on the list at first send ##
> 
> > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d",
> > line 106: failed to copy type of 'inp': Conflicting type is already defined
> 
> > That file ipfw.d appears to be new in 12.3, but I'm clueless what
> > the error means (and why it happens only to me).
> 
> 
> I figured out why - I have "device dtraceall" in my kernel. This is
> reproducible: 
> 
> > root@y12y:/ # dtrace -h
> > dtrace: -h requires one or more scripts or enabling options
> > root@y12y:/ # kldload dtraceall
> > root@y12y:/ # dtrace -h
> > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", line 
> > 106: failed to copy type of 'inp': Conflicting type is already defined
> > root@y12y:/ # kldunload dtraceall
> > root@y12y:/ # dtrace -h
> > dtrace: -h requires one or more scripts or enabling options
> 
> 
> But we do already have a bug (#254483) for this error.
> 
> This bug was closed as duplicate to bug #258763, and the latter one
> was closed as solved with a fix as stated here:
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258763#c7
> 
> 
> But the fancy is:
> 
>  1. that fix appears to have missed the releng/12.3 branch by three
> days, so it is not in the code. But also 
> 
>  2. if applied, (*surprize*) that fix does NOT help!

Hmm, that is indeed surprising.  I'm able to reproduce the problem
locally.

> More than one thing is wrong here, and bug #254483 is *not* a
> duplicate to #258763.
> 
> The failure does NOT come from code covered by Mark Johnstons fix.
> 
> It comes from a neighboring section where Integers are compared, and
> it fails with a type conflict 8bit vs. 32bit.
> 
> 
> The problem must be within /usr/lib/dtrace/ipfw.d  - and indeed
> it is (irrelevant parts stripped away):
> 
> > typedef struct ipfw_match_info {
> >struct mbuf *m;
> > } ipfw_match_info_t;
> > 
> > translator ipfw_match_info_t < struct ip_fw_args *p > {
> >m = p->m;
> > };
> 
> This does not work. Within the 'struct mbuf' definition is a
> construct, that looks like this:
> 
> >uint32_t m_type:8,  /* type of data in this mbuf */
> > m_flags:24;/* flags; see below */
> 
> And it seems that is somehow the cause for the integer size conflict
> (not implemented?)

How did you come to that conclusion?

> In the neighboring file /usr/lib/dtrace/mbuf.d this is done
> distinctively:
> 
> > translator mbufinfo_t < struct mbuf *p > {
> >mbuf_addr = (uintptr_t)p;
> >m_data = p->m_data;
> >m_len = p->m_len;
> >m_type = p->m_type & 0xff00;
> >m_flags = p->m_type & 0x00ff;
> >};
> 
> So probably we should just duplicate that approach for ipfw.
> 
> Or, could that definition be directly included and called? Does dtrace
> allow one tranlation to call another?
> I can't answer that, have never been that deep in dtrace - but I
> really love the idea that we now get means to look into ipfw. Comes in
> handy and at the right time. :)



Re: 12.3-RC1 fails to compile perl,tcl86 (ipfw dtrace issue)

2021-11-22 Thread Mark Johnston
On Mon, Nov 22, 2021 at 10:45:09AM -0500, Mark Johnston wrote:
> On Sun, Nov 21, 2021 at 10:46:30PM +0100, Peter wrote:
> > ## this seems not have arrived on the list at first send ##
> > 
> > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d",
> > > line 106: failed to copy type of 'inp': Conflicting type is already 
> > > defined
> > 
> > > That file ipfw.d appears to be new in 12.3, but I'm clueless what
> > > the error means (and why it happens only to me).
> > 
> > 
> > I figured out why - I have "device dtraceall" in my kernel. This is
> > reproducible: 
> > 
> > > root@y12y:/ # dtrace -h
> > > dtrace: -h requires one or more scripts or enabling options
> > > root@y12y:/ # kldload dtraceall
> > > root@y12y:/ # dtrace -h
> > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", line 
> > > 106: failed to copy type of 'inp': Conflicting type is already defined
> > > root@y12y:/ # kldunload dtraceall
> > > root@y12y:/ # dtrace -h
> > > dtrace: -h requires one or more scripts or enabling options
> > 
> > 
> > But we do already have a bug (#254483) for this error.
> > 
> > This bug was closed as duplicate to bug #258763, and the latter one
> > was closed as solved with a fix as stated here:
> > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258763#c7
> > 
> > 
> > But the fancy is:
> > 
> >  1. that fix appears to have missed the releng/12.3 branch by three
> > days, so it is not in the code. But also 
> > 
> >  2. if applied, (*surprize*) that fix does NOT help!
> 
> Hmm, that is indeed surprising.  I'm able to reproduce the problem
> locally.
> 
> > More than one thing is wrong here, and bug #254483 is *not* a
> > duplicate to #258763.
> > 
> > The failure does NOT come from code covered by Mark Johnstons fix.
> > 
> > It comes from a neighboring section where Integers are compared, and
> > it fails with a type conflict 8bit vs. 32bit.
> > 
> > 
> > The problem must be within /usr/lib/dtrace/ipfw.d  - and indeed
> > it is (irrelevant parts stripped away):
> > 
> > > typedef struct ipfw_match_info {
> > >struct mbuf *m;
> > > } ipfw_match_info_t;
> > > 
> > > translator ipfw_match_info_t < struct ip_fw_args *p > {
> > >m = p->m;
> > > };
> > 
> > This does not work. Within the 'struct mbuf' definition is a
> > construct, that looks like this:
> > 
> > >uint32_t m_type:8,  /* type of data in this mbuf */
> > > m_flags:24;/* flags; see below */
> > 
> > And it seems that is somehow the cause for the integer size conflict
> > (not implemented?)
> 
> How did you come to that conclusion?

Indeed, the problem had to do with handling of bitfield types in libctf.
The problem you found is fixed by
https://cgit.freebsd.org/src/commit/?id=3cbb4cc200f8a0ad7ed08233425ea54524a21f1c
but that change was not merged to 12.  I just merged it to stable/12 and
will try to get both libctf changes into 12.3, as both are required for
dtrace to work properly while ipfw.ko is loaded.



Re: 12.3-RC1 fails to compile perl,tcl86 (ipfw dtrace issue)

2021-11-22 Thread Peter
On Mon, Nov 22, 2021 at 10:45:09AM -0500, Mark Johnston wrote:
! On Sun, Nov 21, 2021 at 10:46:30PM +0100, Peter wrote:
! > ## this seems not have arrived on the list at first send ##
! > 
! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d",
! > > line 106: failed to copy type of 'inp': Conflicting type is already 
defined
! > 
! > > That file ipfw.d appears to be new in 12.3, but I'm clueless what
! > > the error means (and why it happens only to me).
! > 
! > 
! > I figured out why - I have "device dtraceall" in my kernel. This is
! > reproducible: 
! > 
! > > root@y12y:/ # dtrace -h
! > > dtrace: -h requires one or more scripts or enabling options
! > > root@y12y:/ # kldload dtraceall
! > > root@y12y:/ # dtrace -h
! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", line 
106: failed to copy type of 'inp': Conflicting type is already defined
! > > root@y12y:/ # kldunload dtraceall
! > > root@y12y:/ # dtrace -h
! > > dtrace: -h requires one or more scripts or enabling options
! > 
! > 
! > But we do already have a bug (#254483) for this error.
! > 
! > This bug was closed as duplicate to bug #258763, and the latter one
! > was closed as solved with a fix as stated here:
! > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258763#c7
! > 
! > 
! > But the fancy is:
! > 
! >  1. that fix appears to have missed the releng/12.3 branch by three
! > days, so it is not in the code. But also 
! > 
! >  2. if applied, (*surprize*) that fix does NOT help!
! 
! Hmm, that is indeed surprising.  I'm able to reproduce the problem
! locally.
! 
! > More than one thing is wrong here, and bug #254483 is *not* a
! > duplicate to #258763.
! > 
! > The failure does NOT come from code covered by Mark Johnstons fix.
! > 
! > It comes from a neighboring section where Integers are compared, and
! > it fails with a type conflict 8bit vs. 32bit.
! > 
! > 
! > The problem must be within /usr/lib/dtrace/ipfw.d  - and indeed
! > it is (irrelevant parts stripped away):
! > 
! > > typedef struct ipfw_match_info {
! > >struct mbuf *m;
! > > } ipfw_match_info_t;
! > > 
! > > translator ipfw_match_info_t < struct ip_fw_args *p > {
! > >m = p->m;
! > > };
! > 
! > This does not work. Within the 'struct mbuf' definition is a
! > construct, that looks like this:
! > 
! > >uint32_t m_type:8,  /* type of data in this mbuf */
! > > m_flags:24;/* flags; see below */
! > 
! > And it seems that is somehow the cause for the integer size conflict
! > (not implemented?)
! 
! How did you come to that conclusion?

Well, that's my trade secret :)

| Indeed, the problem had to do with handling of bitfield types in libctf.
| The problem you found is fixed by
| 
https://cgit.freebsd.org/src/commit/?id=3cbb4cc200f8a0ad7ed08233425ea54524a21f1c
| but that change was not merged to 12.  I just merged it to stable/12 and
| will try to get both libctf changes into 12.3, as both are required for
| dtrace to work properly while ipfw.ko is loaded. 

That would be great, but ... I gave that patch a quick try, and
doesn't yet seem to work, it is now a different error message:

> dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", line 
> 106: failed to copy type of 'inp': Invalid type identifier


Cheerio,
PMc



Re: 12.3-RC1 fails to compile perl,tcl86 (ipfw dtrace issue)

2021-11-22 Thread Mark Johnston
On Mon, Nov 22, 2021 at 09:52:38PM +0100, Peter wrote:
> On Mon, Nov 22, 2021 at 10:45:09AM -0500, Mark Johnston wrote:
> ! On Sun, Nov 21, 2021 at 10:46:30PM +0100, Peter wrote:
> ! > ## this seems not have arrived on the list at first send ##
> ! > 
> ! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d",
> ! > > line 106: failed to copy type of 'inp': Conflicting type is already 
> defined
> ! > 
> ! > > That file ipfw.d appears to be new in 12.3, but I'm clueless what
> ! > > the error means (and why it happens only to me).
> ! > 
> ! > 
> ! > I figured out why - I have "device dtraceall" in my kernel. This is
> ! > reproducible: 
> ! > 
> ! > > root@y12y:/ # dtrace -h
> ! > > dtrace: -h requires one or more scripts or enabling options
> ! > > root@y12y:/ # kldload dtraceall
> ! > > root@y12y:/ # dtrace -h
> ! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", 
> line 106: failed to copy type of 'inp': Conflicting type is already defined
> ! > > root@y12y:/ # kldunload dtraceall
> ! > > root@y12y:/ # dtrace -h
> ! > > dtrace: -h requires one or more scripts or enabling options
> ! > 
> ! > 
> ! > But we do already have a bug (#254483) for this error.
> ! > 
> ! > This bug was closed as duplicate to bug #258763, and the latter one
> ! > was closed as solved with a fix as stated here:
> ! > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258763#c7
> ! > 
> ! > 
> ! > But the fancy is:
> ! > 
> ! >  1. that fix appears to have missed the releng/12.3 branch by three
> ! > days, so it is not in the code. But also 
> ! > 
> ! >  2. if applied, (*surprize*) that fix does NOT help!
> ! 
> ! Hmm, that is indeed surprising.  I'm able to reproduce the problem
> ! locally.
> ! 
> ! > More than one thing is wrong here, and bug #254483 is *not* a
> ! > duplicate to #258763.
> ! > 
> ! > The failure does NOT come from code covered by Mark Johnstons fix.
> ! > 
> ! > It comes from a neighboring section where Integers are compared, and
> ! > it fails with a type conflict 8bit vs. 32bit.
> ! > 
> ! > 
> ! > The problem must be within /usr/lib/dtrace/ipfw.d  - and indeed
> ! > it is (irrelevant parts stripped away):
> ! > 
> ! > > typedef struct ipfw_match_info {
> ! > >struct mbuf *m;
> ! > > } ipfw_match_info_t;
> ! > > 
> ! > > translator ipfw_match_info_t < struct ip_fw_args *p > {
> ! > >m = p->m;
> ! > > };
> ! > 
> ! > This does not work. Within the 'struct mbuf' definition is a
> ! > construct, that looks like this:
> ! > 
> ! > >uint32_t m_type:8,  /* type of data in this mbuf */
> ! > > m_flags:24;/* flags; see below */
> ! > 
> ! > And it seems that is somehow the cause for the integer size conflict
> ! > (not implemented?)
> ! 
> ! How did you come to that conclusion?
> 
> Well, that's my trade secret :)
> 
> | Indeed, the problem had to do with handling of bitfield types in libctf.
> | The problem you found is fixed by
> | 
> https://cgit.freebsd.org/src/commit/?id=3cbb4cc200f8a0ad7ed08233425ea54524a21f1c
> | but that change was not merged to 12.  I just merged it to stable/12 and
> | will try to get both libctf changes into 12.3, as both are required for
> | dtrace to work properly while ipfw.ko is loaded. 
> 
> That would be great, but ... I gave that patch a quick try, and
> doesn't yet seem to work, it is now a different error message:
> 
> > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", line 
> > 106: failed to copy type of 'inp': Invalid type identifier

Hmm.  Just to be clear, this is with both libctf patches applied,
libctf.so reinstalled, and with a pristine ipfw.d?  If so, I'm not able
to reproduce the problem.



Re: 12.3-RC1 fails to compile perl,tcl86 (ipfw dtrace issue)

2021-11-22 Thread Peter
On Mon, Nov 22, 2021 at 04:09:43PM -0500, Mark Johnston wrote:
! On Mon, Nov 22, 2021 at 09:52:38PM +0100, Peter wrote:
! > On Mon, Nov 22, 2021 at 10:45:09AM -0500, Mark Johnston wrote:
! > ! On Sun, Nov 21, 2021 at 10:46:30PM +0100, Peter wrote:
! > ! > ## this seems not have arrived on the list at first send ##
! > ! > 
! > ! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d",
! > ! > > line 106: failed to copy type of 'inp': Conflicting type is already 
defined
! > ! > 
! > ! > > That file ipfw.d appears to be new in 12.3, but I'm clueless what
! > ! > > the error means (and why it happens only to me).
! > ! > 
! > ! > 
! > ! > I figured out why - I have "device dtraceall" in my kernel. This is
! > ! > reproducible: 
! > ! > 
! > ! > > root@y12y:/ # dtrace -h
! > ! > > dtrace: -h requires one or more scripts or enabling options
! > ! > > root@y12y:/ # kldload dtraceall
! > ! > > root@y12y:/ # dtrace -h
! > ! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", 
line 106: failed to copy type of 'inp': Conflicting type is already defined
! > ! > > root@y12y:/ # kldunload dtraceall
! > ! > > root@y12y:/ # dtrace -h
! > ! > > dtrace: -h requires one or more scripts or enabling options
! > ! > 
! > ! > 
! > ! > But we do already have a bug (#254483) for this error.
! > ! > 
! > ! > This bug was closed as duplicate to bug #258763, and the latter one
! > ! > was closed as solved with a fix as stated here:
! > ! > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258763#c7
! > ! > 
! > ! > 
! > ! > But the fancy is:
! > ! > 
! > ! >  1. that fix appears to have missed the releng/12.3 branch by three
! > ! > days, so it is not in the code. But also 
! > ! > 
! > ! >  2. if applied, (*surprize*) that fix does NOT help!
! > ! 
! > ! Hmm, that is indeed surprising.  I'm able to reproduce the problem
! > ! locally.
! > ! 
! > ! > More than one thing is wrong here, and bug #254483 is *not* a
! > ! > duplicate to #258763.
! > ! > 
! > ! > The failure does NOT come from code covered by Mark Johnstons fix.
! > ! > 
! > ! > It comes from a neighboring section where Integers are compared, and
! > ! > it fails with a type conflict 8bit vs. 32bit.
! > ! > 
! > ! > 
! > ! > The problem must be within /usr/lib/dtrace/ipfw.d  - and indeed
! > ! > it is (irrelevant parts stripped away):
! > ! > 
! > ! > > typedef struct ipfw_match_info {
! > ! > >struct mbuf *m;
! > ! > > } ipfw_match_info_t;
! > ! > > 
! > ! > > translator ipfw_match_info_t < struct ip_fw_args *p > {
! > ! > >m = p->m;
! > ! > > };
! > ! > 
! > ! > This does not work. Within the 'struct mbuf' definition is a
! > ! > construct, that looks like this:
! > ! > 
! > ! > >uint32_t m_type:8,  /* type of data in this mbuf */
! > ! > > m_flags:24;/* flags; see below */
! > ! > 
! > ! > And it seems that is somehow the cause for the integer size conflict
! > ! > (not implemented?)
! > ! 
! > ! How did you come to that conclusion?
! > 
! > Well, that's my trade secret :)
! > 
! > | Indeed, the problem had to do with handling of bitfield types in libctf.
! > | The problem you found is fixed by
! > | 
https://cgit.freebsd.org/src/commit/?id=3cbb4cc200f8a0ad7ed08233425ea54524a21f1c
! > | but that change was not merged to 12.  I just merged it to stable/12 and
! > | will try to get both libctf changes into 12.3, as both are required for
! > | dtrace to work properly while ipfw.ko is loaded. 
! > 
! > That would be great, but ... I gave that patch a quick try, and
! > doesn't yet seem to work, it is now a different error message:
! > 
! > > dtrace: failed to establish error handler: "/usr/lib/dtrace/ipfw.d", line 
106: failed to copy type of 'inp': Invalid type identifier
! 
! Hmm.  Just to be clear, this is with both libctf patches applied,

Ahh, My mistake, I had the other patch put away as no apparent effect
at first try. So now I know it has an effect. ;)

Very well, it does work now.


Cheerio,
PMc