[llvm-objcopy] Don't change permissions of non-regular output files
There is currently an EPERM error when a regular user executes llvm-objcopy a.o /dev/null.
Worse, root can even change the mode bits of /dev/null.
Fix it by checking if the output file is special.
A new overload of llvm::sys::fs::setPermissions with FD as the parameter
is added. Users should provide perm & ~umask as the parameter if they
intend to respect umask.
The existing overload of llvm::sys::fs::setPermissions may be deleted if
we can find an implementation of fchmod() on Windows. fchmod() is
usually better than chmod() because it saves syscalls and can avoid race
Reviewed By: jakehehrlich, jhenderson
Differential Revision: https://reviews.llvm.org/D64236