【问题标题】:unsupported symbol modifier in branch relocation: "call printf@PLT" [duplicate]分支重定位中不支持的符号修饰符:“call printf@PLT”[重复]
【发布时间】:2020-01-20 06:12:32
【问题描述】:

我正在关注 C compiler writing journeygenerate assembly code 以评估二进制表达式值。

这是输出的汇编代码(保存在文件“out.s”中):

    .text
LC0:
    .string "%d\n"
_printint:
    pushq   %rbp
    movq    %rsp, %rbp
    subq    $16, %rsp
    movl    %edi, -4(%rbp)
    movl    -4(%rbp), %eax
    movl    %eax, %esi
    leaq    LC0(%rip), %rdi
    movl    $0, %eax
    call    printf@PLT
    nop
    leave
    ret

    .globl  _main
_main:
    pushq   %rbp
    movq    %rsp, %rbp
    movq    $2, %r8
    movq    $3, %r9
    movq    $5, %r10
    imulq   %r9, %r10
    addq    %r8, %r10
    movq    $8, %r8
    movq    $3, %r9
    movq    %r8,%rax
    cqo
    idivq   %r9
    movq    %rax,%r8
    subq    %r8, %r10
    movq    %r10, %rdi
    call    _printint
    movl    $0, %eax
    popq    %rbp
    ret

当运行它时

cc -o out out.s

,它抱怨

out.s:13:2: error: unsupported symbol modifier in branch relocation
 call printf@PLT
 ^

错误是如何发生的以及如何解决?

提前致谢!

PS:

  1. 我使用的是 macOS Catalina 10.15.2
  2. cc版本是
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin19.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  1. 源代码是用 cc -o comp1 -g cg.c expr.c gen.c main.c scan.c tree.c

【问题讨论】:

  • MacOS Mach-O 对象甚至使用 PLT 吗?还是只需要小写?这看起来不像 MacOS 的 asm。在 MacOS C 上,符号名称在 asm 中以 _ 为前缀,例如 _printf。我认为 .s 文件看起来像是用于 Linux 的。相同的 x86-64 System V 调用约定;不同的名称修改约定。
  • call _printf 有效。谢谢@PeterCordes
  • @PeterCordes MacOS 和 iOS 不使用 PLT。 stackoverflow.com/questions/18260207/…
  • @Kamil.S:这个问题的答案并没有这么说。默认为不可插入符号并不意味着没有 PLT。我认为您的陈述是正确的(并且可以明显解释为什么这不会在 Mach-O 上组装,而不仅仅是无法链接),但是您的链接不会直接支持它,除非我错过了 cmets 中的某些内容或问题或答案中的旁注。
  • @PeterCordes 我也发现了这个stackoverflow.com/a/6447676/5329717,但不幸的是没有苹果文档参考来支持它。

标签: macos assembly compiler-errors clang mach-o


【解决方案1】:

call _printf 有效。谢谢@PeterCordes。

想知道cc的错误提示。

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 2018-03-12
    • 2021-12-07
    • 2017-01-03
    • 2020-08-04
    • 2018-06-12
    • 2013-01-07
    相关资源
    最近更新 更多