From 4a04294882bdd530bd0c3b388980e5326423e1b2 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 1 May 2014 12:45:43 +0000 Subject: [PATCH] Don't force symbols to be globals in .thumb_set. We currently force symbols to be globals in .thumb_set. The intent seems to be that given .thumb_set foo, bar we emit an undefined symbol to bar if it is never defined. The side effect is that we mark bar as global, even if it is defined, which gas does not. Producing an undefined reference to bar is a general difference from MC and gas. For example, given a = b gas will produce an undefined reference to b, MC will not. I would be surprised if any code depends on this, but it it does, we should fix the general difference, not special case .thumb_set. llvm-svn: 207757 --- .../ARM/MCTargetDesc/ARMELFStreamer.cpp | 7 ++---- llvm/test/MC/ARM/thumb_set.s | 25 ++++++++----------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp index e55aa6671348..3f5f42318ff0 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -1003,11 +1003,8 @@ ARMTargetELFStreamer::AnnotateTLSDescriptorSequence(const MCSymbolRefExpr *S) { void ARMTargetELFStreamer::emitThumbSet(MCSymbol *Symbol, const MCExpr *Value) { if (const MCSymbolRefExpr *SRE = dyn_cast(Value)) { - // FIXME: Doing a lookup in here is a hack. - MCSymbol *Sym = - getStreamer().getContext().LookupSymbol(SRE->getSymbol().getName()); - if (!Sym->isDefined()) { - getStreamer().EmitSymbolAttribute(Sym, MCSA_Global); + const MCSymbol &Sym = SRE->getSymbol(); + if (!Sym.isDefined()) { getStreamer().EmitAssignment(Symbol, Value); return; } diff --git a/llvm/test/MC/ARM/thumb_set.s b/llvm/test/MC/ARM/thumb_set.s index ac4bd3288958..d2a0dc04730c 100644 --- a/llvm/test/MC/ARM/thumb_set.s +++ b/llvm/test/MC/ARM/thumb_set.s @@ -59,8 +59,6 @@ beta: .thumb_set beta, alpha - .thumb_set alias_undefined, undefined - @ CHECK: Symbol { @ CHECK: Name: alias_arm_func @ CHECK: Value: 0x1 @@ -109,6 +107,16 @@ beta: @ CHECK: Type: Function @ CHECK: } +@ CHECK: Symbol { +@ CHECK: Name: badblood +@ CHECK-NEXT: Value: 0x0 +@ CHECK-NEXT: Size: 0 +@ CHECK-NEXT: Binding: Local +@ CHECK-NEXT: Type: Object +@ CHECK-NEXT: Other: 0 +@ CHECK-NEXT: Section: .data +@ CHECK-NEXT: } + @ CHECK: Symbol { @ CHECK: Name: bedazzle @ CHECK: Value: 0x4 @@ -144,16 +152,3 @@ beta: @ CHECK: Value: 0x5 @ CHECK: Type: Function @ CHECK: } - -@ CHECK: Symbol { -@ CHECK: Name: badblood -@ CHECK: Value: 0x0 -@ CHECK: Type: Object -@ CHECK: } - -@ CHECK: Symbol { -@ CHECK: Name: undefined -@ CHECK: Value: 0x0 -@ CHECK: Type: None -@ CHECK: } -