Skip to content

Commit 61aec53

Browse files
Derive MachOCASWriter from MachObjectWriter
This patch rewrites MachOCASWriter to be a derived class of MachObjectWriter which fixes a lot of the issues we see from the changes made to MCAssembler. This also fixes the issue of the MCMachoStreamer only having calls to the getWriter() function that returns a MachOCASWriter. (cherry picked from commit 895cd5a)
1 parent 2fde3e1 commit 61aec53

File tree

4 files changed

+42
-48
lines changed

4 files changed

+42
-48
lines changed

clang/test/CAS/path-independent-cas-outputs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@
4444

4545
// Baseline to check we got expected outputs.
4646
// RUN: %clang -target x86_64-apple-macos11 -c %s -o %t/t.o -MMD -MT dependencies -MF %t/t.d --serialize-diagnostics %t/t.dia
47-
// RUN: env LLVM_CACHE_CAS_PATH=%t/a/cas CLANG_CACHE_DISABLE_MCCAS=1 %clang-cache \
47+
// RUN: env LLVM_CACHE_CAS_PATH=%t/a/cas %clang-cache \
4848
// RUN: %clang -target x86_64-apple-macos11 -c %s -o %t/a/t1.o -MMD -MT dependencies -MF %t/a/t1.d --serialize-diagnostics %t/a/t1.dia
49-
// RUN: env LLVM_CACHE_CAS_PATH=%t/b/cas CLANG_CACHE_DISABLE_MCCAS=1 %clang-cache \
49+
// RUN: env LLVM_CACHE_CAS_PATH=%t/b/cas %clang-cache \
5050
// RUN: %clang -target x86_64-apple-macos11 -c %s -o %t/b/t2.o -MMD -MT dependencies -MF %t/b/t2.d --serialize-diagnostics %t/b/t2.dia
5151

5252
// RUN: diff %t/a/t1.o %t/b/t2.o

llvm/include/llvm/MC/MCMachOCASWriter.h

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ObjectStore;
3434
class CASID;
3535
} // namespace cas
3636

37-
class MachOCASWriter : public MCObjectWriter {
37+
class MachOCASWriter : public MachObjectWriter {
3838
public:
3939
/// ObjectStore
4040
const Triple Target;
@@ -57,62 +57,19 @@ class MachOCASWriter : public MCObjectWriter {
5757

5858
uint8_t getAddressSize() { return Target.isArch32Bit() ? 4 : 8; }
5959

60-
void recordRelocation(MCAssembler &Asm, const MCFragment *Fragment,
61-
const MCFixup &Fixup, MCValue Target,
62-
uint64_t &FixedValue) override {
63-
MOW.recordRelocation(Asm, Fragment, Fixup, Target, FixedValue);
64-
}
65-
66-
void executePostLayoutBinding(MCAssembler &Asm) override {
67-
MOW.executePostLayoutBinding(Asm);
68-
}
69-
70-
bool isSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm,
71-
const MCSymbol &SymA,
72-
const MCFragment &FB, bool InSet,
73-
bool IsPCRel) const override {
74-
return MOW.isSymbolRefDifferenceFullyResolvedImpl(Asm, SymA, FB, InSet,
75-
IsPCRel);
76-
}
77-
78-
uint64_t getPaddingSize(MCAssembler &Asm, const MCSection *SD) const {
79-
return MOW.getPaddingSize(Asm, SD);
80-
}
81-
82-
void prepareObject(MCAssembler &Asm) { MOW.prepareObject(Asm); }
83-
84-
void writeMachOHeader(MCAssembler &Asm) { MOW.writeMachOHeader(Asm); }
85-
86-
void writeSectionData(MCAssembler &Asm) { MOW.writeSectionData(Asm); }
87-
88-
void writeRelocations(MCAssembler &Asm) { MOW.writeRelocations(Asm); }
89-
90-
void writeDataInCodeRegion(MCAssembler &Asm) {
91-
MOW.writeDataInCodeRegion(Asm);
92-
}
93-
94-
void writeSymbolTable(MCAssembler &Asm) { MOW.writeSymbolTable(Asm); }
95-
9660
uint64_t writeObject(MCAssembler &Asm) override;
9761

9862
void resetBuffer() { OSOffset = InternalOS.tell(); }
9963

10064
StringRef getContent() const { return InternalBuffer.substr(OSOffset); }
10165

102-
DenseMap<const MCSection *, std::vector<MachObjectWriter::RelAndSymbol>> &
103-
getRelocations() {
104-
return MOW.getRelocations();
105-
}
106-
10766
private:
10867
raw_pwrite_stream &OS;
10968
raw_pwrite_stream *CasIDOS;
11069

11170
SmallString<512> InternalBuffer;
11271
raw_svector_ostream InternalOS;
11372

114-
MachObjectWriter MOW;
115-
11673
uint64_t OSOffset = 0;
11774

11875
std::function<const cas::ObjectProxy(llvm::MachOCASWriter &,

llvm/lib/MC/MachOCASWriter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ MachOCASWriter::MachOCASWriter(
5353
SerializeObjectFile,
5454
std::optional<MCTargetOptions::ResultCallBackTy> ResultCallBack,
5555
raw_pwrite_stream *CasIDOS)
56-
: Target(TT), CAS(CAS), Mode(Mode), ResultCallBack(ResultCallBack), OS(OS),
56+
: MachObjectWriter(std::move(MOTW), InternalOS, IsLittleEndian), Target(TT),
57+
CAS(CAS), Mode(Mode), ResultCallBack(ResultCallBack), OS(OS),
5758
CasIDOS(CasIDOS), InternalOS(InternalBuffer),
58-
MOW(std::move(MOTW), InternalOS, IsLittleEndian),
5959
CreateFromMcAssembler(CreateFromMcAssembler),
6060
SerializeObjectFile(SerializeObjectFile) {
6161
assert(TT.isLittleEndian() == IsLittleEndian && "Endianess should match");

llvm/test/MC/CAS/linker-options.ll

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
; RUN: llc -O0 -mtriple=x86_64-apple-darwin -o - %s > %t
2+
; RUN: FileCheck --check-prefix=CHECK-ASM < %t %s
3+
4+
; CHECK-ASM: .linker_option "-lz"
5+
; CHECK-ASM-NEXT: .linker_option "-framework", "Cocoa"
6+
7+
; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-readobj --macho-linker-options - > %t
8+
; RUN: FileCheck --check-prefix=CHECK-OBJ < %t %s
9+
; RUN: mkdir -p %t.dir/cas
10+
; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=obj --cas %t.dir/cas -cas-backend -o - %s | llvm-readobj --macho-linker-options - > %t
11+
12+
; REQUIRES: x86-registered-target
13+
14+
; CHECK-OBJ: Linker Options {
15+
; CHECK-OBJ: Size: 16
16+
; CHECK-OBJ: Strings [
17+
; CHECK-OBJ: Value: -lz
18+
; CHECK-OBJ: ]
19+
; CHECK-OBJ: }
20+
; CHECK-OBJ: Linker Options {
21+
; CHECK-OBJ: Size: 32
22+
; CHECK-OBJ: Strings [
23+
; CHECK-OBJ: Value: -framework
24+
; CHECK-OBJ: Value: Cocoa
25+
; CHECK-OBJ: ]
26+
; CHECK-OBJ: }
27+
; CHECK-OBJ: Linker Options {
28+
; CHECK-OBJ: Size: 24
29+
; CHECK-OBJ: Strings [
30+
; CHECK-OBJ: Value: -lmath
31+
; CHECK-OBJ: ]
32+
; CHECK-OBJ: }
33+
34+
!0 = !{!"-lz"}
35+
!1 = !{!"-framework", !"Cocoa"}
36+
!2 = !{!"-lmath"}
37+
!llvm.linker.options = !{!0, !1, !2}

0 commit comments

Comments
 (0)