Skip to content

llvm-gcc no longer accepts some assembly: Invalid or unsupported inline assembly! #2639

@edwintorok

Description

@edwintorok
Bugzilla Link 2267
Resolution FIXED
Resolved on May 21, 2008 23:47
Version unspecified
OS Linux
CC @asl,@EdSchouten

Extended Description

I tried to build glibc with llvm-gcc4.2, and I get lots of there errors:

abort.c: In function ‘abort’:
abort.c:86: error: Invalid or unsupported inline assembly!

This errors is shown many times, I picked the error from abort.c:

$ grep "unsupported inline assembly" ../../i386-libc/log|wc -l
1043

The reduced testcase shows it is a libc asm low-level lock function that is not accepted by llvm-gcc. A while ago (I don't remember which revision) I was able to compile glibc without these errors.

To reproduce:
$ gcc testcase-min.i -fsyntax-only
$ llvm-gcc testcase-min.i -fsyntax-only
testcase-min.i: In function ‘abort’:
testcase-min.i:10: error: Invalid or unsupported inline assembly!

$ uname -a
Linux thunder 2.6.25-rc6-00268-gd2532dd-dirty #​23 SMP PREEMPT Sun Mar 23 18:34:55 EET 2008 i686 GNU/Linux

testcase-min.i:
typedef struct {
int lock;
int cnt;
}
__libc_lock_recursive_t;
static int stage;
static __libc_lock_recursive_t lock;
void abort (void) {
if (stage == 2) {
do { if (--(lock).cnt == 0) { (void) ({ int ignore; if (__builtin_constant_p (0) && (0) == 0) __asm __volatile ("cmpl $0, %%gs:%P3\n\t" "je 0f\n\t" "lock\n" "0:\tsubl $1,%0\n\t" "jne L_unlock%=\n\t" ".subsection 1\n\t" ".type L_unlock%=,@function\n" "L_unlock%=:\n" "1:\tleal %0, %%eax\n" "2:\tcall __lll_unlock_wake_private\n" "3:\tjmp 18f\n" "4:\t.size L_unlock%=, 4b-1b\n\t" ".previous\n" ".section .eh_frame,"a",@progbits\n" "5:\t" ".long 7f-6f # Length of Common Information Entry\n" "6:\t" ".long 0x0 # CIE Identifier Tag\n\t" ".byte 0x1 # CIE Version\n\t" ".ascii "zR\0" # CIE Augmentation\n\t" ".uleb128 0x1 # CIE Code Alignment Factor\n\t" ".sleb128 -4 # CIE Data Alignment Factor\n\t" ".byte 0x8 # CIE RA Column\n\t" ".uleb128 0x1 # Augmentation size\n\t" ".byte 0x1b # FDE Encoding (pcrel sdata4)\n\t" ".byte 0xc # DW_CFA_def_cfa\n\t" ".uleb128 0x4\n\t" ".uleb128 0x0\n\t" ".align 4\n" "7:\t" ".long 17f-8f # FDE Length\n" "8:\t" ".long 8b-5b # FDE CIE offset\n\t" ".long 1b-.# FDE initial location\n\t" ".long 4b-1b # FDE address range\n\t" ".uleb128 0x0 # Augmentation size\n\t" ".byte 0x16 # DW_CFA_val_expression\n\t" ".uleb128 0x8\n\t" ".uleb128 10f-9f\n" "9:\t" ".byte 0x78 # DW_OP_breg8\n\t" ".sleb128 3b-1b\n" "10:\t" ".byte 0x40 + (2b-1b) # DW_CFA_advance_loc\n\t" ".byte 0x16 # DW_CFA_val_expression\n\t" ".uleb128 0x8\n\t" ".uleb128 12f-11f\n" "11:\t" ".byte 0x78 # DW_OP_breg8\n\t" ".sleb128 3b-2b\n" "12:\t" ".byte 0x40 + (3b-2b-1) # DW_CFA_advance_loc\n\t" ".byte 0x16 # DW_CFA_val_expression\n\t" ".uleb128 0x8\n\t" ".uleb128 16f-13f\n" "13:\t" ".byte 0x78 # DW_OP_breg8\n\t" ".sleb128 15f-14f\n\t" ".byte 0x0d # DW_OP_const4s\n" "14:\t" ".4byte 3b-.\n\t" ".byte 0x1c # DW_OP_minus\n\t" ".byte 0x0d # DW_OP_const4s\n" "15:\t" ".4byte 18f-.\n\t" ".byte 0x22 # DW_OP_plus\n" "16:\t" ".align 4\n" "17:\t" ".previous\n" "18:" : "=m" ((lock).lock), "=&a" (ignore) : "m" ((lock).lock), "i" (12) : "memory"); } ); } }
while (0);
}
while (1) asm ("hlt");
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzilla

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions