@@ -153,16 +153,23 @@ fn prefix_and_suffix<'tcx>(
153
153
( "" , "" )
154
154
} ;
155
155
156
+ let asm_binary_format = AsmBinaryFormat :: from_target ( & tcx. sess . target ) ;
157
+
158
+ let weak_directive = match asm_binary_format {
159
+ AsmBinaryFormat :: Elf | AsmBinaryFormat :: Coff => ".weak" ,
160
+ AsmBinaryFormat :: Macho => ".weak_definition" ,
161
+ } ;
162
+
156
163
let emit_fatal = |msg| tcx. dcx ( ) . span_fatal ( tcx. def_span ( instance. def_id ( ) ) , msg) ;
157
164
158
165
// see https://godbolt.org/z/cPK4sxKor.
159
166
// None means the default, which corresponds to internal linkage
160
167
let linkage = match item_data. linkage {
161
168
Linkage :: External => Some ( ".globl" ) ,
162
- Linkage :: LinkOnceAny => Some ( ".weak" ) ,
163
- Linkage :: LinkOnceODR => Some ( ".weak" ) ,
164
- Linkage :: WeakAny => Some ( ".weak" ) ,
165
- Linkage :: WeakODR => Some ( ".weak" ) ,
169
+ Linkage :: LinkOnceAny => Some ( weak_directive ) ,
170
+ Linkage :: LinkOnceODR => Some ( weak_directive ) ,
171
+ Linkage :: WeakAny => Some ( weak_directive ) ,
172
+ Linkage :: WeakODR => Some ( weak_directive ) ,
166
173
Linkage :: Internal => None ,
167
174
Linkage :: Private => None ,
168
175
Linkage :: Appending => emit_fatal ( "Only global variables can have appending linkage!" ) ,
@@ -179,7 +186,7 @@ fn prefix_and_suffix<'tcx>(
179
186
180
187
let mut begin = String :: new ( ) ;
181
188
let mut end = String :: new ( ) ;
182
- match AsmBinaryFormat :: from_target ( & tcx . sess . target ) {
189
+ match asm_binary_format {
183
190
AsmBinaryFormat :: Elf => {
184
191
let section = link_section. unwrap_or ( format ! ( ".text.{asm_name}" ) ) ;
185
192
0 commit comments