@@ -107,6 +107,7 @@ module type SYSTEM =
107107 val raw_symbol : out_channel -> string -> unit
108108 val symbol : out_channel -> P .t -> unit
109109 val symbol_paren : out_channel -> P .t -> unit
110+ val symbol_function : out_channel -> P .t -> unit
110111 val label : out_channel -> int -> unit
111112 val name_of_section : section_name -> string
112113 val stack_alignment : int
@@ -137,6 +138,10 @@ module ELF_System : SYSTEM =
137138 then fprintf oc " (%s)" s
138139 else fprintf oc " %s" s
139140
141+ let symbol_function oc symb =
142+ symbol_paren oc symb;
143+ if ! Clflags. option_fpic then fprintf oc " @PLT"
144+
140145 let label = elf_label
141146
142147 let name_of_section = function
@@ -206,6 +211,9 @@ module MacOS_System : SYSTEM =
206211 let symbol_paren = symbol
207212 (* the leading '_' protects the leading '$' *)
208213
214+ let symbol_function = symbol
215+ (* no need for @PLT even in PIC mode *)
216+
209217 let label oc lbl =
210218 fprintf oc " L%d" lbl
211219
@@ -278,6 +286,8 @@ module Cygwin_System : SYSTEM =
278286 then fprintf oc " (%a)" raw_symbol s
279287 else raw_symbol oc s
280288
289+ let symbol_function = symbol_paren
290+
281291 let label oc lbl =
282292 fprintf oc " L%d" lbl
283293
@@ -723,7 +733,7 @@ module Target(System: SYSTEM):TARGET =
723733 | Pjmp_l (l ) ->
724734 fprintf oc " jmp %a\n " label (transl_label l)
725735 | Pjmp_s (f , sg ) ->
726- fprintf oc " jmp %a\n " symbol_paren f
736+ fprintf oc " jmp %a\n " symbol_function f
727737 | Pjmp_r (r , sg ) ->
728738 fprintf oc " jmp *%a\n " ireg r
729739 | Pjcc (c , l ) ->
@@ -749,7 +759,7 @@ module Target(System: SYSTEM):TARGET =
749759 fprintf oc " jmp *%a(, %a, 4)\n " label l ireg r
750760 end
751761 | Pcall_s (f , sg ) ->
752- fprintf oc " call %a\n " symbol_paren f;
762+ fprintf oc " call %a\n " symbol_function f;
753763 if (not Archi. ptr64) && sg.sig_cc.cc_structret then
754764 fprintf oc " pushl %%eax\n "
755765 | Pcall_r (r , sg ) ->
0 commit comments