Strange Linaro mips编译器程序集输出

时间:2017-01-21 08:06:18

标签: gcc assembly mips linaro

要创建汇编代码,我将使用标志-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和Intel语法。为了产生更熟悉的语法,我尝试了-masm = intel标志,但效果相同..

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

感谢任何提示!

1 个答案:

答案 0 :(得分:0)

“AT& T和Intel语法与MIPS有什么关系?” - 没有什么是直接的,我已经标记为标签'mipsel-openwrt-linux-uclibc-gcc'不可用(sry,也许是糟糕的风格)。 但感谢玛格丽特,你的评论指示我编译一些更多的.c文件,导致预期的AT& T语法:) - f.e。:

        .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