diff options
Diffstat (limited to 'sysdeps/mach/hurd')
-rw-r--r-- | sysdeps/mach/hurd/Makefile | 10 | ||||
-rw-r--r-- | sysdeps/mach/hurd/hurd-add-errno-constants.awk | 80 |
2 files changed, 90 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile index 13bdf5c7c9..5171425650 100644 --- a/sysdeps/mach/hurd/Makefile +++ b/sysdeps/mach/hurd/Makefile @@ -98,6 +98,16 @@ $(common-objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \ touch $@ common-generated += errnos.d stamp-errnos + +# Augmentations to the errno pretty-printer. +ifeq ($(subdir),stdlib) +define sysd-add-errno-constants +$(AWK) -f $(hurd)/hurd-add-errno-constants.awk $(mach-errnos-deps) +endef +$(objpfx)errno_constants.pysym: \ + $(hurd)/hurd-add-errno-constants.awk $(mach-errnos-deps) +endif + # We install the real libc.a as libcrt.a and as libc.a we install a linker # script which does -( -lcrt -lmachuser -lhurduser -). diff --git a/sysdeps/mach/hurd/hurd-add-errno-constants.awk b/sysdeps/mach/hurd/hurd-add-errno-constants.awk new file mode 100644 index 0000000000..0d51766c97 --- /dev/null +++ b/sysdeps/mach/hurd/hurd-add-errno-constants.awk @@ -0,0 +1,80 @@ +# Add Hurd-specific constants to errno_constants.pysym. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <http://www.gnu.org/licenses/>. + +# On the Hurd, errno.h defines E-constants corresponding to a number of +# Mach low-level errors. Add these to the set of values recognized by +# stdlib/errno-printer.py. This script must be kept in sync with errnos.awk. + +BEGIN { + in_mach_errors = ""; + in_mig_errors = 0; + in_device_errors = 0; +} + +function emit_subhead() +{ + header = FILENAME; + sub(/.*include\//, "", header); + printf("\n-- Errors from <%s>\n", header); +} + +NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \ + { + in_mach_errors = FILENAME; + emit_subhead(); + } +NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \ + { + in_mach_errors = FILENAME; + emit_subhead(); + next; + } +in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \ + { + in_mach_errors = ""; + next; + } + +$1 == "#define" && $2 == "_MACH_MIG_ERRORS_H_" \ + { + in_mig_errors = 1; + emit_subhead(); + next; + } +in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \ + { + in_mig_errors = 0; + } + +$1 == "#define" && $2 == "D_SUCCESS" \ + { + in_device_errors = 1; + emit_subhead(); + next; + } +in_device_errors && $1 == "#endif" \ + { + in_device_errors = 0; + } + +(in_mach_errors == FILENAME && NF == 3 && $1 == "#define") || \ +(in_mig_errors && $1 == "#define" && $3 <= -300) || \ +(in_device_errors && $1 == "#define" && $2 ~ /D_/ && NF > 3) \ + { + print "E" $2; + } |