]> git.puffer.fish Git - matthieu/frr.git/commitdiff
build: warn/fail on missing `XREF_SETUP()`
authorDavid Lamparter <equinox@opensourcerouting.org>
Thu, 2 May 2024 08:57:31 +0000 (10:57 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Thu, 2 May 2024 21:03:08 +0000 (23:03 +0200)
While clippy tries really, really hard to work under adverse conditions,
and this catches missing XREF_SETUP() on almost all CPU architectures,
this doesn't quite work on hppa.  So, make it a warning on *all*
platforms (or error for --enable-dev-build) in order to catch it before
shipping off to Debian's buildd and blowing up there...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/elf_py.c
python/clippy/__init__.py
python/xrelfo.py

index 643495d8c76ffc00b5f4db43d4b89064db566667..2b4fea373f036770d2d52defc30987ff547394e1 100644 (file)
@@ -1358,6 +1358,15 @@ bool elf_py_init(PyObject *pymod)
        (void)methods_elfpy;
 #endif
 
+#if defined(HAVE_GELF_GETNOTE) && defined(HAVE_ELF_GETDATA_RAWCHUNK)
+       PyObject *elf_notes = Py_True;
+#else
+       PyObject *elf_notes = Py_False;
+#endif
+       Py_INCREF(elf_notes);
+       if (PyModule_AddObject(pymod, "elf_notes", elf_notes))
+               Py_DECREF(elf_notes);
+
        ELFFormatError = PyErr_NewException("_clippy.ELFFormatError",
                                            PyExc_ValueError, NULL);
        PyModule_AddObject(pymod, "ELFFormatError", ELFFormatError);
index 60119fbac097117ac3221866b0446940ed79eac0..668724ab2ab867d71b48595c6a8ae26f65a9dfd7 100644 (file)
@@ -20,6 +20,7 @@ from _clippy import (
     CMD_ATTR_HIDDEN,
     CMD_ATTR_DEPRECATED,
     CMD_ATTR_NOSH,
+    elf_notes,
 )
 
 
index a40b19e5fb520cb1f3c09d0f2ce7fae1e8f823e1..07cd74071f8e923cdbbeab6e229b91235897da90 100644 (file)
@@ -22,7 +22,7 @@ import argparse
 
 from clippy.uidhash import uidhash
 from clippy.elf import *
-from clippy import frr_top_src, CmdAttr
+from clippy import frr_top_src, CmdAttr, elf_notes
 from tiabwarfo import FieldApplicator
 from xref2vtysh import CommandEntry
 
@@ -327,6 +327,7 @@ class Xrelfo(dict):
             }
         )
         self._xrefs = []
+        self.note_warn = False
 
     def load_file(self, filename):
         orig_filename = filename
@@ -395,6 +396,15 @@ class Xrelfo(dict):
             ptrs = edf.iter_data(XrefPtr, slice(start, end))
 
         else:
+            if elf_notes:
+                self.note_warn = True
+                sys.stderr.write(
+                    """%s: warning: binary has no FRRouting.XREF note
+%s-   one of FRR_MODULE_SETUP, FRR_DAEMON_INFO or XREF_SETUP must be used
+"""
+                    % (orig_filename, orig_filename)
+                )
+
             xrefarray = edf.get_section("xref_array")
             if xrefarray is None:
                 raise ValueError("file has neither xref note nor xref_array section")
@@ -471,6 +481,9 @@ def _main(args):
             sys.stderr.write("while processing %s:\n" % (fn))
             traceback.print_exc()
 
+    if xrelfo.note_warn and args.Werror:
+        errors += 1
+
     for option in dir(args):
         if option.startswith("W") and option != "Werror":
             checks = sorted(xrelfo.check(args))