0

为了创建汇编代码,我使用标志 -S 调用 mipsel-openwrt-linux-uclibc-gcc 编译器(Linaro GCC 4.8-2014.04 r49389)。这会产生如下所示的汇编代码:

        .section .mdebug.abi32
        .previous
        .gnu_attribute 4, 3
        .abicalls
        .option pic0
        .text
    $Ltext0:
        .cfi_sections   .debug_frame
        .globl  Version
        .section    .rodata.str1.4,"aMS",@progbits,1
        .align  2
    $LC0:
        .ascii  "3.3\000"
        .data
        .align  2
        .type   Version, @object
        .size   Version, 4
    Version:
        .word   $LC0
        .text
    $Letext0:
        .file 1 "version.c"
        .section    .debug_info,"",@progbits
    $Ldebug_info0:
        .4byte  0x3d
        .2byte  0x4
        .4byte  $Ldebug_abbrev0
        .byte   0x4
        .uleb128 0x1
        .4byte  $LASF0
        .byte   0x1
        .4byte  $LASF1
        .4byte  $LASF2
        .4byte  $Ldebug_line0
        .uleb128 0x2
        .4byte  $LASF3
        .byte   0x1
        .byte   0x2
        .4byte  0x2e
        .uleb128 0x5
        .byte   0x3
        .4byte  Version
        .uleb128 0x3
        .byte   0x4
        .4byte  0x34
        .uleb128 0x4
        .4byte  0x39
        .uleb128 0x5
        .byte   0x1
        .byte   0x6
        .4byte  $LASF4
        .byte   0
        .section    .debug_abbrev,"",@progbits
    $Ldebug_abbrev0:
        .uleb128 0x1
        .uleb128 0x11
        .byte   0x1
        ---- I cutted here ----
        .uleb128 0xe
        .byte   0
        .byte   0
        .byte   0
        .section    .debug_aranges,"",@progbits
        .4byte  0x14
        .2byte  0x2
        .4byte  $Ldebug_info0
        .byte   0x4
        .byte   0
        .2byte  0
        .2byte  0
        .4byte  0
        .4byte  0
        .section    .debug_line,"",@progbits
    $Ldebug_line0:
        .section    .debug_str,"MS",@progbits,1
    $LASF2:
        .ascii  "/home/lvr/Src/openwrt/build_dir/target-mipsel_mips32_uCl"
        .ascii  "ibc-0.9.33.2/diffutils-3.3/src\000"
    $LASF0:
        .ascii  "GNU C 4.8.3 -mno-branch-likely -mips32 -mtune=mips32 -ms"
        .ascii  "oft-float -mllsc -mplt -mno-shared -g -Os -std=c99 -fno-"
        .ascii  "caller-saves -fhonour-copts\000"
    $LASF3:
        .ascii  "Version\000"
    $LASF4:
        .ascii  "char\000"
    $LASF1:
        .ascii  "version.c\000"
        .ident  "GCC: (OpenWrt/Linaro GCC 4.8-2014.04 r49389) 4.8.3"
        .section    .note.GNU-stack,"",@progbits

在我看来,这不像 AT&T 或英特尔语法。为了产生更熟悉的语法,我尝试了 -masm=intel 标志,但效果相同..

我的第一个想法是生成的 ASM 代码专用于 mips 的固定字宽,但是任何想法如何通过 mipsel-openwrt-linux-uclibc-gcc 生成 AT&T 或 Intel 语法?

感谢您的任何提示!

4

1 回答 1

0

“AT&T 和 Intel 的语法与 MIPS 有什么关系?” - 没有直接的东西,我已经这样标记了它,因为标签'mipsel-openwrt-linux-uclibc-gcc'不可用(对不起,也许是不好的风格)。但是感谢玛格丽特,您的评论指导我编译更多 .c 文件,导致预期的 AT&T 语法:) - fe:

        .section .mdebug.abi32
        .previous
        .gnu_attribute 4, 3
        .abicalls
        .option pic0
        .text
    $Ltext0:
        .cfi_sections   .debug_frame
        .align  2
    $LFB16 = .
        .file 1 "io.c"
        .loc 1 474 0
        .cfi_startproc
        .set    nomips16
        .ent    prepare_text
        .type   prepare_text, @function
    prepare_text:
        .frame  $sp,48,$31      # vars= 0, regs= 5/0, args= 16, gp= 8
        .mask   0x800f0000,-4
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro
    $LVL0 = .
        addiu   $sp,$sp,-48
        .cfi_def_cfa_offset 48
        sw  $17,32($sp)
        sw  $31,44($sp)
        sw  $19,40($sp)
        sw  $18,36($sp)
        sw  $16,28($sp)
        .cfi_offset 17, -16
        .cfi_offset 31, -4
        .cfi_offset 19, -8
        .cfi_offset 18, -12
        --- CUT ---
    $LASF16:
        .ascii  "__ino64_t\000"
    $LASF86:
        .ascii  "changes\000"
    $LASF66:
        .ascii  "__ctype_touplow_t\000"
    $LASF200:
        .ascii  "memcmp\000"
    $LASF118:
        .ascii  "equivs\000"
    $LASF139:
        .ascii  "file_size\000"
        .ident  "GCC: (OpenWrt/Linaro GCC 4.8-2014.04 r49389) 4.8.3"
        .section    .note.GNU-stack,"",@progbits    
于 2017-01-21T10:34:28.543 回答