[PATCH] D41041: [ELF] Don't set the executable bit for relocatable or shared files

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 11 15:31:37 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL320438: [ELF] Don't set the executable bit for relocatable files (authored by phosek).

Changed prior to commit:
  https://reviews.llvm.org/D41041?vs=126458&id=126462#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D41041

Files:
  lld/trunk/ELF/Writer.cpp
  lld/trunk/test/ELF/file-access.s
  lld/trunk/test/lit.cfg.py


Index: lld/trunk/test/lit.cfg.py
===================================================================
--- lld/trunk/test/lit.cfg.py
+++ lld/trunk/test/lit.cfg.py
@@ -91,3 +91,11 @@
     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()
Index: lld/trunk/test/ELF/file-access.s
===================================================================
--- lld/trunk/test/ELF/file-access.s
+++ lld/trunk/test/ELF/file-access.s
@@ -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
Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -1833,9 +1833,11 @@
   }
 
   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 + ": " +


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41041.126462.patch
Type: text/x-patch
Size: 2037 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171211/be629c5f/attachment-0001.bin>


More information about the llvm-commits mailing list