c++solarissolaris-studio

Sun Studio and "", line 1 : Illegal flag (-)


I'm trying to track down the problem that's producing an assembler error "", line 1 : Illegal flag (-) on Solaris 11.3 (x64) under Sun Studio 12.3. The Sun Studio compiler is a special kind of hell.

$ echo $CXX
/opt/solarisstudio12.3/bin/CC

$ cat test.cxx
#include <iostream>
int main(int argc, char* argv[])
{
  std::cout << argc << std::endl;
  return 0;
}

$ $CXX -DNDEBUG -xO2 -native -template=no%extdef -m64 -Kpic -Wa,--divide -c test.cxx
Assembler: 
        "", line 1 : Illegal flag (-)
CC: fbe failed for test.cxx

Systematically removing -xO2, -native, -m64, -Kpic, etc ... does not resolve it. I found a similar report over at Mozilla, but dropping the debugging symbols did not resolve it.

The first line of the assembler file is .file ... (shown below), so its not clear to me where the illegal flags is coming from.

Why am I experiencing "", line 1 : Illegal flag (-), and how do I fix it?


Adding -v and -keeptmp results in the following.

$ $CXX -v -keeptmp  -DNDEBUG -xO2 -native -template=no%extdef -m64 -Kpic -Wa,--divide -c test.cxx
### CC: Note: NLSPATH = /opt/solarisstudio12.3/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/solarisstudio12.3/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
###     command line files and options (expanded):
### -v -keeptmp -DNDEBUG -xO2 -xchip=core2 -xcache=32/64/8:4096/64/16 -xarch=ssse3 -template=%none -m64 -xcode=pic13 -Qoption fbe --divide -c test.cxx
/opt/solarisstudio12.3/prod/bin/ccfe -xarch=amd64 -D__SunOS_5_11 -D__SUNPRO_CC=0x5120 -D__unix -D__SVR4 -D__sun -D__SunOS -D__x86_64 -D__x86_64__ -D__amd64 -D__amd64__ -D_LP64 -D__LP64__ -D__BUILTIN_VA_STRUCT -Dunix -Dsun -D__SUN_PREFETCH -D__SUNPRO_CC_COMPAT=5 -I-xbuiltin -I/opt/solarisstudio12.3/prod/include/CC/Cstd -I/opt/solarisstudio12.3/prod/include/CC -I/opt/solarisstudio12.3/prod/include/cc -DNDEBUG -ptf /tmp/ccfe.1465350303.23421.04.%1.%2 -template=%none -ptx /opt/solarisstudio12.3/prod/bin/CC -ptk "-v -keeptmp -DNDEBUG -xO2 -xtarget=native -template=no%extdef -m64 -xcode=pic13 -c " -compat=5 -instlib=/opt/solarisstudio12.3/prod/lib/amd64/libCstd.a -xdbggen=no%stabs+dwarf2+usedonly -xF=%none -xbuiltin=%default -pic -xldscope=global -xivdep=loop -O2 test.cxx -o /tmp/ccfe.1465350303.23421.01.ir -s /tmp/ccfe.1465350303.23421.02.sd 2> /tmp/ccfe.1465350303.23421.03.err
/opt/solarisstudio12.3/prod/bin/iropt -Qy -O2 -fstore -xarch=ssse3 -m64 -xchip=core2 "-xcache=32/64/8:4096/64/16" -fsimple=0 -fstore -k -xbuiltin=%default -I -xprefetch=auto,explicit -xprefetch_auto_type=no%indirect_array_access -xvector=no%lib,simd -F -o /tmp/iropt.1465350303.23421.05.ir -is /tmp/ccfe.1465350303.23421.02.sd /tmp/ccfe.1465350303.23421.01.ir 2> /tmp/iropt.1465350303.23421.06.err
/opt/solarisstudio12.3/prod/bin/ir2hf -Qy -O2 -xbuiltin=%default -m64 /tmp/iropt.1465350303.23421.05.ir /tmp/ccfe.1465350303.23421.02.sd /tmp/ir2hf.1465350303.23421.07.hf
/opt/solarisstudio12.3/prod/bin/ube -Qy -verbose -iropt -O2 -fstore -comdat -m64 -xarch=ssse3 -xchip=core2 "-xcache=32/64/8:4096/64/16" -xannotate=yes -fsimple=0 -ZW -fstore -pic -xbuiltin=%default -xprefetch=auto,explicit -xthreadvar=dynamic -fbe /opt/solarisstudio12.3/prod/bin/fbe -ipo test.o -S /tmp/ube.1465350303.23421.08.s /tmp/ir2hf.1465350303.23421.07.hf
/opt/solarisstudio12.3/prod/bin/fbe -Qy -xarch=amd64 -xchip=core2 -warn=%none --divide -o test.o /tmp/ube.1465350303.23421.08.s
Assembler: 
        "", line 1 : Illegal flag (-)
CC: fbe failed for test.cxx


$ cat /tmp/ube.1465350303.23421.08.s
        .file "test.cxx"
        .code64

        .set .simple_nop, 0x90
        .globl main
        .type main, @function
        .globl __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mi_r1_
        .type __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mi_r1_, @function
        .symbolic __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_
        .globl __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_
        .type __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_, @function
        .globl __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6MpFr1_2_2_
        .type __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6MpFr1_2_2_, @function
        .globl __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___Dput6Mc_r1_
        .type __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___Dput6Mc_r1_, @function
        .globl __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___Fflush6M_r1_
        .type __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___Fflush6M_r1_, @function
        .local Dlrodata.lrodata
        .local Dldata.ldata
        .globl __fsr_init_value
__fsr_init_value = 0
        .weak __SUNW_ABI2_cpp_personality

        .ident     "iropt: Sun Compiler Common 12.3 SunOS_i386 2011/11/16"
        .ident     "ir2hf: Sun Compiler Common 12.3 SunOS_i386 2011/11/16"
        .ident     "ube: Sun Compiler Common 12.3 SunOS_i386 2011/11/16"

        .section .text,"ax"
        .align 16,.simple_nop
main:
.CG2:
.CG3:
        push    %rbp
.CG4:
        movq    %rsp,%rbp
.CG5:
        movl    %edi,%esi
        movq    __1cDstdEcout_@GOTPCREL(%rip),%rdi

.CG6:   call    __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mi_r1_@PLT
        movq    __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_@GOTPCREL(%rip),%rsi
        movq    %rax,%rdi

.CG7:   call    __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6MpFr1_2_2_@PLT
        xorl    %eax,%eax
        leave   
        ret     

.CG8:
        .size main, . - main
.CG9:

.CGA:

.CGB:

        .group __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,.text%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,#comdat

        .section .text%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,"ax"
        .align 16,.simple_nop
__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_:
.CGE:
.CGF:
        push    %rbp
.CG10:
        movq    %rsp,%rbp
.CG11:
        push    %rbx
.CG12:
        subq    $8,%rsp
        movq    %rdi,%rbx
        movl    $10,%esi

.CG13:  call    __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___Dput6Mc_r1_@PLT
        movq    %rbx,%rdi

.CG14:  call    __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___Fflush6M_r1_@PLT
        movq    %rbx,%rax
        addq    $8,%rsp
        pop     %rbx
        leave   
        ret     

.CG15:
        .size __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_, . - __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_
.CG16:

.CG17:

.CG18:


        .section .data,"aw"
Ddata.data: / Offset 0



        .section .bss,"aw"

Bbss.bss:


        .section .bssf,"aw"


        .section .rodata,"a"
Drodata.rodata: / Offset 0



        .section .picdata,"aw"
Dpicdata.picdata: / Offset 0



        .section .lbss,"awh"
        .type Blbss.lbss, @object

Blbss.lbss:


        .section .ldata,"awh"
Dldata.ldata: / Offset 0
        .type Dldata.ldata, @object



        .section .lrodata,"ah"
Dlrodata.lrodata: / Offset 0
        .type Dlrodata.lrodata, @object


        .group  __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,.eh_frame%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,#comdat
        .section        .eh_frame%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,"aL",link=.text%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,@unwind
.Lframe1:
        .long   .LECIE1-.LBCIE1
.LBCIE1:
        .long   0x0
        .byte   0x1
        .string "zPR"
        .uleb128        0x1
        .sleb128        -8
        .byte   0x10
        .uleb128 6
        .byte 0x1b
        .long __SUNW_ABI2_cpp_personality@plt
        .byte 0x1b
        .byte   0xc
        .uleb128        0x7
        .uleb128        0x8
        .byte   0x90
        .uleb128        0x1
        .byte   0x8
        .byte   0xc
        .byte   0x8
        .byte   0xd
        .byte   0x8
        .byte   0xe
        .byte   0x8
        .byte   0xf
        .align 8
.LECIE1:
        .long   .LEFDE0-.LBFDE0
.LBFDE0:
        .long   .LBFDE0-.Lframe1
        .long   .CGF@rel
        .long   .CG15-.CGF
        .uleb128        0x0
        .cfa_advance_loc        .CG10-.CGF
        .byte   0xe
        .uleb128        0x10
        .byte   0x86
        .uleb128        0x2
        .cfa_advance_loc        .CG11-.CG10
        .byte   0xd
        .uleb128        0x6
        .cfa_advance_loc        .CG12-.CG11
        .byte   0x83
        .uleb128        0x3
        .align  8
.LEFDE0:

        .section .eh_frame,"aL",link=.text,@unwind
.Lframe2:
        .long   .LECIE2-.LBCIE2
.LBCIE2:
        .long   0x0
        .byte   0x1
        .string "zPR"
        .uleb128        0x1
        .sleb128        -8
        .byte   0x10
        .uleb128 6
        .byte 0x1b
        .long __SUNW_ABI2_cpp_personality@plt
        .byte 0x1b
        .byte   0xc
        .uleb128        0x7
        .uleb128        0x8
        .byte   0x90
        .uleb128        0x1
        .byte   0x8
        .byte   0xc
        .byte   0x8
        .byte   0xd
        .byte   0x8
        .byte   0xe
        .byte   0x8
        .byte   0xf
        .align 8
.LECIE2:
        .long   .LEFDE1-.LBFDE1
.LBFDE1:
        .long   .LBFDE1-.Lframe2
        .long   .CG3@rel
        .long   .CG8-.CG3
        .uleb128        0x0
        .cfa_advance_loc        .CG4-.CG3
        .byte   0xe
        .uleb128        0x10
        .byte   0x86
        .uleb128        0x2
        .cfa_advance_loc        .CG5-.CG4
        .byte   0xd
        .uleb128        0x6
        .align  8
.LEFDE1:


        .section .annotate
        / ANNOTATION: Header
        .string "anotate"
        .4byte 6
        .4byte 0
        .8byte .CG1 - .CG0
.CG0:
        / ANNOTATION: Module
        .4byte 0
        .4byte .CG1A - .CG19
.CG19:
        .8byte .text
        .8byte .CGB - .text
.CG1A:
        / ANNOTATION: Function
        .4byte 1
        .4byte .CG1C - .CG1B
.CG1B:
        .8byte .CG2
        .8byte .CGB - .CG2
        .4byte -2145086976
        .4byte 0
.CG1C:
.CG1:
        / ANNOTATION: End


        .group __1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,.annotate%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_,#comdat

        .section .annotate%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_
        / ANNOTATION: Header
        .string "anotate"
        .4byte 6
        .4byte 0
        .8byte .CGD - .CGC
.CGC:
        / ANNOTATION: Module
        .4byte 0
        .4byte .CG1E - .CG1D
.CG1D:
        .8byte .text%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_
        .8byte .CG18 - .text%__1cDstdEendl4Ccn0ALchar_traits4Cc___6Frn0ANbasic_ostream3CTACTB___4_
.CG1E:
        / ANNOTATION: Function
        .4byte 1
        .4byte .CG20 - .CG1F
.CG1F:
        .8byte .CGE
        .8byte .CG18 - .CGE
        .4byte -2145089020
        .4byte 0
.CG20:
.CGD:
        / ANNOTATION: End

/  Begin sdCreateSection : .debug_info
/  Section Info: link_name/strtab=, entsize=0x1, adralign=0x1, flags=0x0
/  Section Data Blocks:
/   reloc[0]: knd=2, off=14, siz=8, lab1=.debug_abbrev, lab2=, loff=0
/   reloc[1]: knd=2, off=301, siz=8, lab1=.debug_line, lab2=, loff=0
        .section .debug_info
        .byte 0xff,0xff,0xff,0xff,0x2a,0x01,0x00,0x00
        .byte 0x00,0x00,0x00,0x00,0x02,0x00
        .8byte .debug_abbrev
        .byte 0x08,0x01
        .ascii "test.cxx\0"
        .byte 0x04
        .ascii "/export/home/jwalton/cryptopp/\0"
        .ascii " /opt/solarisstudio12.3/prod/bin/CC -v -keeptmp -DNDEBUG -xO2 -xtarget=native -template=no%extdef -m64 -xcode=pic13 -c  test.cxx\0"
        .ascii "ptf;ptx;ptk;pic;s;;O;R=5.11<<Sun C++ 5.12 SunOS_i386 2011/11/16 (ccfe)>>;A=2;backend;raw;cd;\0"
        .ascii "DBG_GEN 5.3.3\0"
        .8byte .debug_line
        .byte 0x00
/  End sdCreateSection
/  Begin sdCreateSection : .debug_line
/  Section Info: link_name/strtab=, entsize=0x1, adralign=0x1, flags=0x0
/  Section Data Blocks:
        .section .debug_line
        .byte 0xff,0xff,0xff,0xff,0x26,0x00,0x00,0x00
        .byte 0x00,0x00,0x00,0x00,0x02,0x00,0x1c,0x00
        .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00
        .byte 0xff,0x04,0x0a,0x00,0x01,0x01,0x01,0x01
        .byte 0x00,0x00,0x00,0x01,0x00,0x74,0x65,0x73
        .byte 0x74,0x2e,0x63,0x78,0x78,0x00,0x00,0x00
        .byte 0x00,0x00
/  End sdCreateSection
/  Begin sdCreateSection : .debug_abbrev
/  Section Info: link_name/strtab=, entsize=0x1, adralign=0x1, flags=0x0
/  Section Data Blocks:
        .section .debug_abbrev
        .byte 0x01,0x11,0x00,0x03,0x08,0x13,0x0b,0x1b
        .byte 0x08,0x85,0x44,0x08,0x87,0x44,0x08,0x25
        .byte 0x08,0x10,0x07,0x00,0x00,0x00
/  End sdCreateSection

Solution

  • Your problem is -Wa,--divide which according to multiple sources --divide is not a valid parameter to the assembler. For example see https://docs.oracle.com/cd/E37069_01/html/E54439/fbe-1.html for accepted parameters.

    To arrive at this conclusion I started with your -v output. The key lines I saw were that it failed right after running fbe, and that the error was Assembler: "", line 1 : Illegal flag (-). I was pretty sure the line 1 part was a red herring so I went straight to the Illegal flag (-) part, because that's exactly the error you'd get if --divide was actually interpreted as -- -d -i -v -i -d -e which is a totally common way that unix programs interpret their arguments. So then I just googled "fbe command line arguments" (or something similar) to see if that was a valid parameter.