GNU C Library master sources branch master updated. glibc-2.28.9000-350-g477a02f

jsm28@sourceware.org jsm28@sourceware.org
Mon Dec 3 22:09:00 GMT 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  477a02f63751c4b759ddd9454d17f2a7ad120ee3 (commit)
      from  6af956e5c019637051ba8cfb46cfff9bbe574500 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=477a02f63751c4b759ddd9454d17f2a7ad120ee3

commit 477a02f63751c4b759ddd9454d17f2a7ad120ee3
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Mon Dec 3 22:08:50 2018 +0000

    Make gen-as-const.py handle '--' consistently with awk script.
    
    It was reported in
    <https://sourceware.org/ml/libc-alpha/2018-12/msg00045.html> that
    gen-as-const.py fails to generate test code in the case where a .sym
    file has no symbols in it, so resulting in a test failing to link for
    Hurd.
    
    The relevant difference from the old awk script is that the old script
    treated '--' lines as indicating that the text to do at the start of
    the test (or file used to compute constants) should be output at that
    point if not already output, as well as treating lines with actual
    entries for constants like that.  This patch changes gen-as-const.py
    accordingly, making it the sole responsibility of the code parsing
    .sym files to determine when such text should be output and ensuring
    it's always output at some point even if there are no symbols and no
    '--' lines, since not outputting it means the test fails to link.
    Handling '--' like that also avoids any problems that would arise if
    the first entry for a symbol were inside #ifdef (since the text in
    question must not be output inside #ifdef).
    
    Tested for x86_64, and with build-many-glibcs.py for i686-gnu.  Note
    that there are still compilation test failures for i686-gnu
    (linknamespace tests, possibly arising from recent posix_spawn-related
    changes).
    
    	* scripts/gen-as-const.py (compute_c_consts): Take an argument
    	'START' to indicate that start text should be output.
    	(gen_test): Likewise.
    	(main): Generate 'START' for first symbol or '--' line, or at end
    	of input if not previously generated.

diff --git a/ChangeLog b/ChangeLog
index a534c4a..a7adb8b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2018-12-03  Joseph Myers  <joseph@codesourcery.com>
+
+	* scripts/gen-as-const.py (compute_c_consts): Take an argument
+	'START' to indicate that start text should be output.
+	(gen_test): Likewise.
+	(main): Generate 'START' for first symbol or '--' line, or at end
+	of input if not previously generated.
+
 2018-12-03  Rafael Ávila de Espíndola  <rafael@espindo.la>
 
 	[BZ #19767]
diff --git a/scripts/gen-as-const.py b/scripts/gen-as-const.py
index cabf401..eb85ef1 100644
--- a/scripts/gen-as-const.py
+++ b/scripts/gen-as-const.py
@@ -34,28 +34,28 @@ def compute_c_consts(sym_data, cc):
     """Compute the values of some C constants.
 
     The first argument is a list whose elements are either strings
-    (preprocessor directives) or pairs of strings (a name and a C
+    (preprocessor directives, or the special string 'START' to
+    indicate this function should insert its initial boilerplate text
+    in the output there) or pairs of strings (a name and a C
     expression for the corresponding value).  Preprocessor directives
     in the middle of the list may be used to select which constants
     end up being evaluated using which expressions.
 
     """
     out_lines = []
-    started = False
     for arg in sym_data:
         if isinstance(arg, str):
-            out_lines.append(arg)
+            if arg == 'START':
+                out_lines.append('void\ndummy (void)\n{')
+            else:
+                out_lines.append(arg)
             continue
         name = arg[0]
         value = arg[1]
-        if not started:
-            out_lines.append('void\ndummy (void)\n{')
-            started = True
         out_lines.append('asm ("@@@name@@@%s@@@value@@@%%0@@@end@@@" '
                          ': : \"i\" ((long int) (%s)));'
                          % (name, value))
-    if started:
-        out_lines.append('}')
+    out_lines.append('}')
     out_lines.append('')
     out_text = '\n'.join(out_lines)
     with tempfile.TemporaryDirectory() as temp_dir:
@@ -89,32 +89,32 @@ def gen_test(sym_data):
 
     """
     out_lines = []
-    started = False
     for arg in sym_data:
         if isinstance(arg, str):
-            out_lines.append(arg)
+            if arg == 'START':
+                out_lines.append('#include <stdint.h>\n'
+                                 '#include <stdio.h>\n'
+                                 '#include <bits/wordsize.h>\n'
+                                 '#if __WORDSIZE == 64\n'
+                                 'typedef uint64_t c_t;\n'
+                                 '# define U(n) UINT64_C (n)\n'
+                                 '#else\n'
+                                 'typedef uint32_t c_t;\n'
+                                 '# define U(n) UINT32_C (n)\n'
+                                 '#endif\n'
+                                 'static int\n'
+                                 'do_test (void)\n'
+                                 '{\n'
+                                 # Compilation test only, using static
+                                 # assertions.
+                                 '  return 0;\n'
+                                 '}\n'
+                                 '#include <support/test-driver.c>')
+            else:
+                out_lines.append(arg)
             continue
         name = arg[0]
         value = arg[1]
-        if not started:
-            out_lines.append('#include <stdint.h>\n'
-                             '#include <stdio.h>\n'
-                             '#include <bits/wordsize.h>\n'
-                             '#if __WORDSIZE == 64\n'
-                             'typedef uint64_t c_t;\n'
-                             '# define U(n) UINT64_C (n)\n'
-                             '#else\n'
-                             'typedef uint32_t c_t;\n'
-                             '# define U(n) UINT32_C (n)\n'
-                             '#endif\n'
-                             'static int\n'
-                             'do_test (void)\n'
-                             '{\n'
-                             # Compilation test only, using static assertions.
-                             '  return 0;\n'
-                             '}\n'
-                             '#include <support/test-driver.c>')
-            started = True
         out_lines.append('_Static_assert (U (asconst_%s) == (c_t) (%s), '
                          '"value of %s");'
                          % (name, value, name))
@@ -134,6 +134,7 @@ def main():
     args = parser.parse_args()
     sym_data = []
     with open(args.sym_file, 'r') as sym_file:
+        started = False
         for line in sym_file:
             line = line.strip()
             if line == '':
@@ -143,12 +144,17 @@ def main():
                 sym_data.append(line)
                 continue
             words = line.split(maxsplit=1)
+            if not started:
+                sym_data.append('START')
+                started = True
             # Separator.
             if words[0] == '--':
                 continue
             name = words[0]
             value = words[1] if len(words) > 1 else words[0]
             sym_data.append((name, value))
+        if not started:
+            sym_data.append('START')
     if args.test:
         print(gen_test(sym_data))
     else:

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog               |    8 ++++++
 scripts/gen-as-const.py |   64 +++++++++++++++++++++++++---------------------
 2 files changed, 43 insertions(+), 29 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list