On Thursday, January 23, 2020 5:30:28 PM EST Jeff Law wrote:
On Thu, 2020-01-23 at 17:23 -0500, Steve Grubb wrote:
> On Tuesday, January 21, 2020 1:52:54 PM EST Jeff Law wrote:
> > > > > That was the idea. Provide a trivial opt-out so that
upstreams
> > > > > had
> > > > > time to fix properly. I even volunteered to add the opt-out
> > > > > marker
> > > > > where appropriate to minimize the FTBFS issues. I also
> > > > > volunteered
> > > > > to help with the packages that don't honor flags injection.
> > > >
> > > > This sounds reasonable to me.
> > > >
> > > > The PR is
> > > >
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/7
> > > > 7
> > > >
> > > > I have reopened it.
> > > >
> > > > The mass rebuild will notify the maintainrs and they can use that
> > > > macro
> > > > to short-workaround the problem. It' also easier to grep from
the
> > > > specs
> > > > than custom patches and whatnots
> > >
> > > I need something like this for suricata. It has about 45 variables
> > > causing this. And it's not a simple "extern" addition
because it
> > > looks
> > > like in many cases the variable was never placed in a C file. Simply
> > > adding extern keyword leads undefined reference errors. This will
> > > take a
> > > while to sort out with upstream.
> >
> > You also have to be careful if you're building shared libraries -- I
> > was looking at a package (I forget which) which built multiple DSOs.
> > If you're not careful you can end up with some DSOs which wouldn't
have
> > the definition -- worse yet, you're not going to get an undefined
> > symbol when you build those DSOs.
>
> So, I have a weird one. I'm compiling audit and getting multiple
> definitions.
>
> I have
>
> /usr/bin/ld: ausearch-checkpt.o:/home/sgrubb/working/BUILD/audit-3.0/src/
> ausearch-common.h:53: multiple definition of `event_node_list';
> ausearch.o:/
> home/sgrubb/working/BUILD/audit-3.0/src/ausearch-common.h:53: first
> defined here
>
> $ cat ausearch-checkpt.c | grep event_node_list
>
> Hmm. Nothing found.
>
> $ objdump --syms ausearch-checkpt.o | grep event_node_list
> 0000000000000040 g O .bss 0000000000000008 event_node_list
>
> It's in the object file? In ausearch-checkpt.c we have #include
> "ausearch-
> checkpt.h which does not define it. That file has #include
> "ausearch-llist.h" which does not define it. That file has #include
> "ausearch-common.h" which does define it as:
>
> extern slist *event_node_list;
>
> So, what appears to be happening is all these C files are creating a
> definition based on this and they don't even use this variable. It seems
> like they would create a spot in their table *if and only if* it was
> referenced somewhere in the code. I'm not sure if this was intended but
> it will be a big problem for everyone.
Use -save-temps and post the .i file.
An "extern blah blah blah" should not be doing that.
That was very helpful. Thanks. Turns out the build testing I was doing was
using a Fedora spec file instead of my upstream spec file which means it was
untarring the wrong file instead of the freshly fixed file. That -save-temps
option might help me figure out some missing definitions in suricata.
Thanks,
-Steve