mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-21 03:53:04 +02:00
Make linkerprivate work for ARM and PPC. Testcase covers
all Darwin targets; could be split into separate tests for the chip subdirectories, but from Chris' last mail on testing I assume he'd rather have only one test. Generic seems to be the best available, maybe there should be a Darwin subdirectory? llvm-svn: 79877
This commit is contained in:
parent
709a42b7eb
commit
3a5e5c7edd
@ -266,12 +266,12 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
switch (F->getLinkage()) {
|
switch (F->getLinkage()) {
|
||||||
default: llvm_unreachable("Unknown linkage type!");
|
default: llvm_unreachable("Unknown linkage type!");
|
||||||
case Function::PrivateLinkage:
|
case Function::PrivateLinkage:
|
||||||
case Function::LinkerPrivateLinkage:
|
|
||||||
case Function::InternalLinkage:
|
case Function::InternalLinkage:
|
||||||
break;
|
break;
|
||||||
case Function::ExternalLinkage:
|
case Function::ExternalLinkage:
|
||||||
O << "\t.globl\t" << CurrentFnName << "\n";
|
O << "\t.globl\t" << CurrentFnName << "\n";
|
||||||
break;
|
break;
|
||||||
|
case Function::LinkerPrivateLinkage:
|
||||||
case Function::WeakAnyLinkage:
|
case Function::WeakAnyLinkage:
|
||||||
case Function::WeakODRLinkage:
|
case Function::WeakODRLinkage:
|
||||||
case Function::LinkOnceAnyLinkage:
|
case Function::LinkOnceAnyLinkage:
|
||||||
@ -1234,6 +1234,7 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
|
|||||||
case GlobalValue::LinkOnceODRLinkage:
|
case GlobalValue::LinkOnceODRLinkage:
|
||||||
case GlobalValue::WeakAnyLinkage:
|
case GlobalValue::WeakAnyLinkage:
|
||||||
case GlobalValue::WeakODRLinkage:
|
case GlobalValue::WeakODRLinkage:
|
||||||
|
case GlobalValue::LinkerPrivateLinkage:
|
||||||
if (isDarwin) {
|
if (isDarwin) {
|
||||||
O << "\t.globl " << name << "\n"
|
O << "\t.globl " << name << "\n"
|
||||||
<< "\t.weak_definition " << name << "\n";
|
<< "\t.weak_definition " << name << "\n";
|
||||||
@ -1248,7 +1249,6 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
|
|||||||
O << "\t.globl " << name << "\n";
|
O << "\t.globl " << name << "\n";
|
||||||
break;
|
break;
|
||||||
case GlobalValue::PrivateLinkage:
|
case GlobalValue::PrivateLinkage:
|
||||||
case GlobalValue::LinkerPrivateLinkage:
|
|
||||||
case GlobalValue::InternalLinkage:
|
case GlobalValue::InternalLinkage:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -620,13 +620,13 @@ bool PPCLinuxAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
switch (F->getLinkage()) {
|
switch (F->getLinkage()) {
|
||||||
default: llvm_unreachable("Unknown linkage type!");
|
default: llvm_unreachable("Unknown linkage type!");
|
||||||
case Function::PrivateLinkage:
|
case Function::PrivateLinkage:
|
||||||
case Function::LinkerPrivateLinkage:
|
|
||||||
case Function::InternalLinkage: // Symbols default to internal.
|
case Function::InternalLinkage: // Symbols default to internal.
|
||||||
break;
|
break;
|
||||||
case Function::ExternalLinkage:
|
case Function::ExternalLinkage:
|
||||||
O << "\t.global\t" << CurrentFnName << '\n'
|
O << "\t.global\t" << CurrentFnName << '\n'
|
||||||
<< "\t.type\t" << CurrentFnName << ", @function\n";
|
<< "\t.type\t" << CurrentFnName << ", @function\n";
|
||||||
break;
|
break;
|
||||||
|
case Function::LinkerPrivateLinkage:
|
||||||
case Function::WeakAnyLinkage:
|
case Function::WeakAnyLinkage:
|
||||||
case Function::WeakODRLinkage:
|
case Function::WeakODRLinkage:
|
||||||
case Function::LinkOnceAnyLinkage:
|
case Function::LinkOnceAnyLinkage:
|
||||||
@ -738,6 +738,7 @@ void PPCLinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
|
|||||||
case GlobalValue::WeakAnyLinkage:
|
case GlobalValue::WeakAnyLinkage:
|
||||||
case GlobalValue::WeakODRLinkage:
|
case GlobalValue::WeakODRLinkage:
|
||||||
case GlobalValue::CommonLinkage:
|
case GlobalValue::CommonLinkage:
|
||||||
|
case GlobalValue::LinkerPrivateLinkage:
|
||||||
O << "\t.global " << name << '\n'
|
O << "\t.global " << name << '\n'
|
||||||
<< "\t.type " << name << ", @object\n"
|
<< "\t.type " << name << ", @object\n"
|
||||||
<< "\t.weak " << name << '\n';
|
<< "\t.weak " << name << '\n';
|
||||||
@ -752,7 +753,6 @@ void PPCLinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
|
|||||||
// FALL THROUGH
|
// FALL THROUGH
|
||||||
case GlobalValue::InternalLinkage:
|
case GlobalValue::InternalLinkage:
|
||||||
case GlobalValue::PrivateLinkage:
|
case GlobalValue::PrivateLinkage:
|
||||||
case GlobalValue::LinkerPrivateLinkage:
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
llvm_unreachable("Unknown linkage type!");
|
llvm_unreachable("Unknown linkage type!");
|
||||||
@ -809,7 +809,6 @@ bool PPCDarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
switch (F->getLinkage()) {
|
switch (F->getLinkage()) {
|
||||||
default: llvm_unreachable("Unknown linkage type!");
|
default: llvm_unreachable("Unknown linkage type!");
|
||||||
case Function::PrivateLinkage:
|
case Function::PrivateLinkage:
|
||||||
case Function::LinkerPrivateLinkage:
|
|
||||||
case Function::InternalLinkage: // Symbols default to internal.
|
case Function::InternalLinkage: // Symbols default to internal.
|
||||||
break;
|
break;
|
||||||
case Function::ExternalLinkage:
|
case Function::ExternalLinkage:
|
||||||
@ -819,6 +818,7 @@ bool PPCDarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
case Function::WeakODRLinkage:
|
case Function::WeakODRLinkage:
|
||||||
case Function::LinkOnceAnyLinkage:
|
case Function::LinkOnceAnyLinkage:
|
||||||
case Function::LinkOnceODRLinkage:
|
case Function::LinkOnceODRLinkage:
|
||||||
|
case Function::LinkerPrivateLinkage:
|
||||||
O << "\t.globl\t" << CurrentFnName << '\n';
|
O << "\t.globl\t" << CurrentFnName << '\n';
|
||||||
O << "\t.weak_definition\t" << CurrentFnName << '\n';
|
O << "\t.weak_definition\t" << CurrentFnName << '\n';
|
||||||
break;
|
break;
|
||||||
@ -992,6 +992,7 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
|
|||||||
case GlobalValue::WeakAnyLinkage:
|
case GlobalValue::WeakAnyLinkage:
|
||||||
case GlobalValue::WeakODRLinkage:
|
case GlobalValue::WeakODRLinkage:
|
||||||
case GlobalValue::CommonLinkage:
|
case GlobalValue::CommonLinkage:
|
||||||
|
case GlobalValue::LinkerPrivateLinkage:
|
||||||
O << "\t.globl " << name << '\n'
|
O << "\t.globl " << name << '\n'
|
||||||
<< "\t.weak_definition " << name << '\n';
|
<< "\t.weak_definition " << name << '\n';
|
||||||
break;
|
break;
|
||||||
@ -1004,7 +1005,6 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
|
|||||||
// FALL THROUGH
|
// FALL THROUGH
|
||||||
case GlobalValue::InternalLinkage:
|
case GlobalValue::InternalLinkage:
|
||||||
case GlobalValue::PrivateLinkage:
|
case GlobalValue::PrivateLinkage:
|
||||||
case GlobalValue::LinkerPrivateLinkage:
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
llvm_unreachable("Unknown linkage type!");
|
llvm_unreachable("Unknown linkage type!");
|
||||||
|
10
test/CodeGen/Generic/2009-08-23-linkerprivate.ll
Normal file
10
test/CodeGen/Generic/2009-08-23-linkerprivate.ll
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
; RUN: llvm-as < %s | llc -march=x86 -mtriple=i686-apple-darwin | FileCheck %s
|
||||||
|
; RUN: llvm-as < %s | llc -march=ppc32 -mtriple=ppc-apple-darwin | FileCheck %s
|
||||||
|
; RUN: llvm-as < %s | llc -march=arm -mtriple=arm-apple-darwin | FileCheck %s
|
||||||
|
|
||||||
|
; ModuleID = '/Volumes/MacOS9/tests/WebKit/JavaScriptCore/profiler/ProfilerServer.mm'
|
||||||
|
|
||||||
|
@"\01l_objc_msgSend_fixup_alloc" = linker_private hidden global i32 0, section "__DATA, __objc_msgrefs, coalesced", align 16 ; <i32*> [#uses=0]
|
||||||
|
|
||||||
|
; CHECK: .globl l_objc_msgSend_fixup_alloc
|
||||||
|
; CHECK: .weak_definition l_objc_msgSend_fixup_alloc
|
Loading…
Reference in New Issue
Block a user