RecordStreamer: handle inline asm "lazy_reference" and mark symbols as "used"
authorMehdi Amini <mehdi.amini@apple.com>
Wed, 3 Aug 2016 03:51:42 +0000 (03:51 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Wed, 3 Aug 2016 03:51:42 +0000 (03:51 +0000)
llvm-svn: 277564

llvm/lib/Object/RecordStreamer.cpp
llvm/test/Object/X86/asm-lazy-reference.ll [new file with mode: 0644]

index f03bd5e..cd3964a 100644 (file)
@@ -92,6 +92,8 @@ bool RecordStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
                                          MCSymbolAttr Attribute) {
   if (Attribute == MCSA_Global || Attribute == MCSA_Weak)
     markGlobal(*Symbol, Attribute);
+  if (Attribute == MCSA_LazyReference)
+    markUsed(*Symbol);
   return true;
 }
 
diff --git a/llvm/test/Object/X86/asm-lazy-reference.ll b/llvm/test/Object/X86/asm-lazy-reference.ll
new file mode 100644 (file)
index 0000000..480cbaa
--- /dev/null
@@ -0,0 +1,15 @@
+; RUN: llvm-as < %s -o - | llvm-nm -  | FileCheck %s
+
+target datalayout = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128"
+target triple = "i386-apple-macosx10.8.0"
+
+; Verify that llvm-nm handles correctly module level ASM, including "lazy_reference"
+
+; CHECK: U .objc_class_name_Bar
+; CHECK: U .objc_class_name_Foo
+; CHECK: T .objc_class_name_FooSubClass
+
+module asm "\09.objc_class_name_FooSubClass=0"
+module asm "\09.globl .objc_class_name_FooSubClass"
+module asm "\09.lazy_reference .objc_class_name_Foo"
+module asm "\09.lazy_reference .objc_class_name_Bar"