[PATCH] Make NaCl's use of .init_array for static constructors match Linux

Derek Schuff dschuff at google.com
Tue Mar 10 17:13:32 PDT 2015


Hi jvoung,

The generic ELF TargetObjectFile defaults to .ctors, but Linux's
defaults to .init_array by calling InitializeELF with the value of
UseInitArray from TargetMachine. Make NaCl's behavior match.

http://reviews.llvm.org/D8240

Files:
  lib/Target/X86/X86TargetMachine.cpp
  test/CodeGen/X86/constructor.ll

Index: lib/Target/X86/X86TargetMachine.cpp
===================================================================
--- lib/Target/X86/X86TargetMachine.cpp
+++ lib/Target/X86/X86TargetMachine.cpp
@@ -37,7 +37,7 @@
     return make_unique<TargetLoweringObjectFileMachO>();
   }
 
-  if (TT.isOSLinux())
+  if (TT.isOSLinux() || TT.isOSNaCl())
     return make_unique<X86LinuxTargetObjectFile>();
   if (TT.isOSBinFormatELF())
     return make_unique<X86ELFTargetObjectFile>();
Index: test/CodeGen/X86/constructor.ll
===================================================================
--- test/CodeGen/X86/constructor.ll
+++ test/CodeGen/X86/constructor.ll
@@ -1,5 +1,6 @@
 ; RUN: llc -mtriple x86_64-pc-linux -use-ctors < %s | FileCheck --check-prefix=CTOR %s
 ; RUN: llc -mtriple x86_64-pc-linux < %s | FileCheck --check-prefix=INIT-ARRAY %s
+; RUN: llc -mtriple x86_64-unknown-nacl < %s | FileCheck --check-prefix=NACL %s
 @llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @f, i8* null}, { i32, void ()*, i8* } { i32 15, void ()* @g, i8* @v }]
 
 @v = weak_odr global i8 0
@@ -27,3 +28,10 @@
 ; INIT-ARRAY-NEXT:	.section	.init_array,"aw", at init_array
 ; INIT-ARRAY-NEXT:	.align	8
 ; INIT-ARRAY-NEXT:	.quad	f
+
+; NACL:		.section	.init_array.15,"aGw", at init_array,v,comdat
+; NACL:	.align	4
+; NACL:	.long	g
+; NACL:	.section	.init_array,"aw", at init_array
+; NACL:	.align	4
+; NACL:	.long	f

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8240.21664.patch
Type: text/x-patch
Size: 1446 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150311/12f6bbb0/attachment.bin>


More information about the llvm-commits mailing list