mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 00:11:00 +00:00
Handle common linkage correctly in the gold plugin.
This is the plugin version of pr20882. This handles the case of every common symbol being in the IR. We will need some support from gold to handle the case where some symbols are in ELF and some in the IR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217458 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a9d7398280
commit
19f3868e91
1
test/tools/gold/Inputs/common.ll
Normal file
1
test/tools/gold/Inputs/common.ll
Normal file
@ -0,0 +1 @@
|
||||
@a = common global i16 0, align 4
|
11
test/tools/gold/common.ll
Normal file
11
test/tools/gold/common.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; RUN: llvm-as %s -o %t1.o
|
||||
; RUN: llvm-as %p/Inputs/common.ll -o %t2.o
|
||||
|
||||
; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
|
||||
; RUN: --plugin-opt=emit-llvm \
|
||||
; RUN: -shared %t1.o %t2.o -o %t3.o
|
||||
; RUN: llvm-dis %t3.o -o - | FileCheck %s
|
||||
|
||||
@a = common global i8 0, align 8
|
||||
|
||||
; CHECK: @a = common global i16 0, align 8
|
@ -18,6 +18,7 @@
|
||||
#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#include "llvm/CodeGen/Analysis.h"
|
||||
#include "llvm/CodeGen/CommandFlags.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/IR/Verifier.h"
|
||||
@ -576,6 +577,13 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile,
|
||||
if (!GV)
|
||||
continue; // Asm symbol.
|
||||
|
||||
if (GV->hasCommonLinkage()) {
|
||||
// Common linkage is special. There is no single symbol that wins the
|
||||
// resolution. Instead we have to collect the maximum alignment and size.
|
||||
// The IR linker does that for us if we just pass it every common GV.
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (Resolution) {
|
||||
case LDPR_UNKNOWN:
|
||||
llvm_unreachable("Unexpected resolution");
|
||||
|
Loading…
Reference in New Issue
Block a user