Patch "ARM: 8397/1: fix vdsomunge not to depend on glibc specific error.h" has been added to the 4.1-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ARM: 8397/1: fix vdsomunge not to depend on glibc specific error.h
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
arm-8397-1-fix-vdsomunge-not-to-depend-on-glibc-specific-error.h.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
13ee9fdba96577eb1583dcd7b15767ef623fae12Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <[email protected]>
Date: Wed, 1 Jul 2015 23:08:10 +0100
Subject: ARM: 8397/1: fix vdsomunge not to depend on glibc specific error.h
From: Szabolcs Nagy <[email protected]>
commit 13ee9fdba96577eb1583dcd7b15767ef623fae12 upstream.
If the host toolchain is not glibc based then the arm kernel build fails with
arch/arm/vdso/vdsomunge.c:53:19: fatal error: error.h: No such file or directory
error.h is a glibc only header (ie not available in musl, newlib and bsd libcs). Changed the error reporting to standard conforming code to avoid depending on specific C implementations.
--- arch/arm/vdso/vdsomunge.c | 56 +++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 23 deletions(-)
arch/arm/vdso/vdsomunge.c +33 -23
@@ -45,13 +45,11 @@* it does. */ -#define _GNU_SOURCE -#include <byteswap.h> #include <elf.h> #include <errno.h> -#include <error.h> #include <fcntl.h> +#include <stdarg.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h>
@@ -82,11 +80,25 @@#define EF_ARM_ABI_FLOAT_HARD 0x400#endif +static int failed; +static const char *argv0;static const char *outfile; +static void fail (const char *fmt, ...) +{ +va_list ap; + + failed =1 ; +fprintf (stderr,"%s: " , argv0); +va_start (ap, fmt); +vfprintf (stderr, fmt, ap); +va_end (ap); +exit (EXIT_FAILURE ); +} +static void cleanup (void ) { -if (error_message_count >0 && outfile !=NULL ) +if (failed && outfile !=NULL )unlink (outfile); }
@@ -119,68 +131,66 @@ int main(int argc, char **argv)int infd;atexit (cleanup); + argv0 = argv[0 ];if (argc !=3 ) -error (EXIT_FAILURE ,0 ,"Usage: %s [infile] [outfile]" , argv[0 ]); +fail ("Usage: %s [infile] [outfile]\n" , argv[0 ]); infile = argv[1 ]; outfile = argv[2 ]; infd =open (infile,O_RDONLY );if (infd <0 ) -error (EXIT_FAILURE , errno,"Cannot open %s" , infile); +fail ("Cannot open %s: %s\n" , infile,strerror (errno));if (fstat (infd, &stat) !=0 ) -error (EXIT_FAILURE , errno,"Failed stat for %s" , infile); +fail ("Failed stat for %s: %s\n" , infile,strerror (errno)); inbuf =mmap (NULL , stat.st_size,PROT_READ ,MAP_PRIVATE , infd,0 );if (inbuf ==MAP_FAILED ) -error (EXIT_FAILURE , errno,"Failed to map %s" , infile); +fail ("Failed to map %s: %s\n" , infile,strerror (errno));close (infd); inhdr = inbuf;if (memcmp (&inhdr->e_ident,ELFMAG ,SELFMAG ) !=0 ) -error (EXIT_FAILURE ,0 ,"Not an ELF file" ); +fail ("Not an ELF file\n" );if (inhdr->e_ident[EI_CLASS ] !=ELFCLASS32 ) -error (EXIT_FAILURE ,0 ,"Unsupported ELF class" ); +fail ("Unsupported ELF class\n" ); swap = inhdr->e_ident[EI_DATA ] !=HOST_ORDER ;if (read_elf_half (inhdr->e_type, swap) !=ET_DYN ) -error (EXIT_FAILURE ,0 ,"Not a shared object" ); +fail ("Not a shared object\n" ); -if (read_elf_half (inhdr->e_machine, swap) !=EM_ARM ) { -error (EXIT_FAILURE ,0 ,"Unsupported architecture %#x" , - inhdr->e_machine); - } +if (read_elf_half (inhdr->e_machine, swap) !=EM_ARM ) +fail ("Unsupported architecture %#x\n" , inhdr->e_machine); e_flags =read_elf_word (inhdr->e_flags, swap);if (EF_ARM_EABI_VERSION (e_flags) !=EF_ARM_EABI_VER5 ) { -error (EXIT_FAILURE ,0 ,"Unsupported EABI version %#x" , -EF_ARM_EABI_VERSION (e_flags)); +fail ("Unsupported EABI version %#x\n" , +EF_ARM_EABI_VERSION (e_flags)); }if (e_flags &EF_ARM_ABI_FLOAT_HARD ) -error (EXIT_FAILURE ,0 , -"Unexpected hard-float flag set in e_flags" ); +fail ("Unexpected hard-float flag set in e_flags\n" ); clear_soft_float = !!(e_flags &EF_ARM_ABI_FLOAT_SOFT ); outfd =open (outfile,O_RDWR |O_CREAT |O_TRUNC ,S_IRUSR |S_IWUSR );if (outfd <0 ) -error (EXIT_FAILURE , errno,"Cannot open %s" , outfile); +fail ("Cannot open %s: %s\n" , outfile,strerror (errno));if (ftruncate (outfd, stat.st_size) !=0 ) -error (EXIT_FAILURE , errno,"Cannot truncate %s" , outfile); +fail ("Cannot truncate %s: %s\n" , outfile,strerror (errno)); outbuf =mmap (NULL , stat.st_size,PROT_READ |PROT_WRITE ,MAP_SHARED , outfd,0 );if (outbuf ==MAP_FAILED ) -error (EXIT_FAILURE , errno,"Failed to map %s" , outfile); +fail ("Failed to map %s: %s\n" , outfile,strerror (errno));close (outfd);
@@ -195,7 +205,7 @@ int main(int argc, char **argv) }if (msync (outbuf, stat.st_size,MS_SYNC ) !=0 ) -error (EXIT_FAILURE , errno,"Failed to sync %s" , outfile); +fail ("Failed to sync %s: %s\n" , outfile,strerror (errno));return EXIT_SUCCESS ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/arm-8397-1-fix-vdsomunge-not-to-depend-on-glibc-specific-error.h.patch