// for details about the format.
class ImportFile : public InputFile {
public:
- explicit ImportFile(MemoryBufferRef M)
- : InputFile(ImportKind, M), Live(!Config->DoGC) {}
+ explicit ImportFile(MemoryBufferRef M) : InputFile(ImportKind, M) {}
static bool classof(const InputFile *F) { return F->kind() == ImportKind; }
Chunk *Location = nullptr;
// We want to eliminate dllimported symbols if no one actually refers them.
- // This "Live" bit is used to keep track of which import library members
+ // These "Live" bits are used to keep track of which import library members
// are actually in use.
//
// If the Live bit is turned off by MarkLive, Writer will ignore dllimported
- // symbols provided by this import library member.
- bool Live;
+ // symbols provided by this import library member. We also track whether the
+ // imported symbol is used separately from whether the thunk is used in order
+ // to avoid creating unnecessary thunks.
+ bool Live = !Config->DoGC;
+ bool ThunkLive = !Config->DoGC;
};
// Used for LTO.
# IMPORT-NEXT: UnloadDelayImportTable: 0x0
# IMPORT-NEXT: Import {
# IMPORT-NEXT: Symbol: function (0)
-# IMPORT-NEXT: Address: 0x401019
+# IMPORT-NEXT: Address: 0x40100D
# IMPORT-NEXT: }
# IMPORT-NEXT: }
#
# BASEREL-NEXT: }
# BASEREL-NEXT: Entry {
# BASEREL-NEXT: Type: ARM_MOV32(T)
-# BASEREL-NEXT: Address: 0x1018
+# BASEREL-NEXT: Address: 0x1022
# BASEREL-NEXT: }
# BASEREL-NEXT: Entry {
-# BASEREL-NEXT: Type: ARM_MOV32(T)
-# BASEREL-NEXT: Address: 0x102E
+# BASEREL-NEXT: Type: ABSOLUTE
+# BASEREL-NEXT: Address: 0x1000
# BASEREL-NEXT: }
# BASEREL-NEXT: Entry {
# BASEREL-NEXT: Type: HIGHLOW
# BASEREL-NEXT: }
# BASEREL-NEXT: ]
#
-# DISASM: 401018: 43 f2 08 0c movw r12, #12296
-# DISASM-NEXT: 40101c: c0 f2 40 0c movt r12, #64
-# DISASM-NEXT: 401020: 2d e9 0f 48 push.w {r0, r1, r2, r3, r11, lr}
-# DISASM-NEXT: 401024: 0d f2 10 0b addw r11, sp, #16
-# DISASM-NEXT: 401028: 2d ed 10 0b vpush {d0, d1, d2, d3, d4, d5, d6, d7}
-# DISASM-NEXT: 40102c: 61 46 mov r1, r12
-# DISASM-NEXT: 40102e: 42 f2 00 00 movw r0, #8192
-# DISASM-NEXT: 401032: c0 f2 40 00 movt r0, #64
-# DISASM-NEXT: 401036: ff f7 e3 ff bl #-58
-# DISASM-NEXT: 40103a: 84 46 mov r12, r0
-# DISASM-NEXT: 40103c: bd ec 10 0b vpop {d0, d1, d2, d3, d4, d5, d6, d7}
-# DISASM-NEXT: 401040: bd e8 0f 48 pop.w {r0, r1, r2, r3, r11, lr}
-# DISASM-NEXT: 401044: 60 47 bx r12
+# DISASM: 40100c: 43 f2 08 0c movw r12, #12296
+# DISASM-NEXT: c0 f2 40 0c movt r12, #64
+# DISASM-NEXT: 2d e9 0f 48 push.w {r0, r1, r2, r3, r11, lr}
+# DISASM-NEXT: 0d f2 10 0b addw r11, sp, #16
+# DISASM-NEXT: 2d ed 10 0b vpush {d0, d1, d2, d3, d4, d5, d6, d7}
+# DISASM-NEXT: 61 46 mov r1, r12
+# DISASM-NEXT: 42 f2 00 00 movw r0, #8192
+# DISASM-NEXT: c0 f2 40 00 movt r0, #64
+# DISASM-NEXT: ff f7 e9 ff bl #-46
+# DISASM-NEXT: 84 46 mov r12, r0
+# DISASM-NEXT: bd ec 10 0b vpop {d0, d1, d2, d3, d4, d5, d6, d7}
+# DISASM-NEXT: bd e8 0f 48 pop.w {r0, r1, r2, r3, r11, lr}
+# DISASM-NEXT: 60 47 bx r12
--- !COFF
header: