[ELF] Don't set the executable bit for relocatable files

These are not executable files so they shouldn't be marked as such.

Differential Revision: https://reviews.llvm.org/D41041

llvm-svn: 320438
This commit is contained in:
Petr Hosek 2017-12-11 23:30:54 +00:00
parent 0ca350a92d
commit d663de3e18
3 changed files with 28 additions and 2 deletions

View File

@ -1833,9 +1833,11 @@ template <class ELFT> void Writer<ELFT>::openFile() {
}
unlinkAsync(Config->OutputFile);
unsigned Flags = 0;
if (!Config->Relocatable)
Flags = FileOutputBuffer::F_executable;
Expected<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
FileOutputBuffer::create(Config->OutputFile, FileSize,
FileOutputBuffer::F_executable);
FileOutputBuffer::create(Config->OutputFile, FileSize, Flags);
if (!BufferOrErr)
error("failed to open " + Config->OutputFile + ": " +

View File

@ -0,0 +1,16 @@
# REQUIRES: x86, gnustat
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
# RUN: ld.lld -r %t.o -o %t1.o
# RUN: stat -c %%A %t1.o | FileCheck --check-prefix=CHECK-RELOC %s
# CHECK-RELOC: -rw-r--r--
# RUN: ld.lld -shared %t.o -o %t2.so
# RUN: stat -c %%A %t2.so | FileCheck --check-prefix=CHECK-SHARED %s
# CHECK-SHARED: -rwxr-xr-x
# RUN: ld.lld %t.o -o %t3
# RUN: stat -c %%A %t3 | FileCheck --check-prefix=CHECK-EXEC %s
# CHECK-EXEC: -rwxr-xr-x
.global _start
_start:
nop

View File

@ -91,3 +91,11 @@ if tar_executable:
if 'GNU tar' in tar_version.stdout.read().decode():
config.available_features.add('gnutar')
tar_version.wait()
stat_executable = lit.util.which('stat', config.environment['PATH'])
if stat_executable:
stat_version = subprocess.Popen(
[stat_executable, '--version'], stdout=subprocess.PIPE, env={'LANG': 'C'})
if 'GNU coreutils' in stat_version.stdout.read().decode():
config.available_features.add('gnustat')
stat_version.wait()