Skip to content

GCCisms, and AT&T Assembly choke CLang #16

Description

@vmlemon

As an experiment, I tried to build the Orion userland with CLang/LLVM 8.0, for x86-64, and received the following output:

tyson@tyson-Lenovo-ideapad-120S-14IAP:~/Orion/user$ CC=clang make
make[1]: Entering directory '/home/tyson/Orion/user/lib'
make[2]: Entering directory '/home/tyson/Orion/user/lib/l4'
===> Making dependencies in .
clang: warning: -lssp: 'linker' input unused [-Wunused-command-line-argument]
===> debug.cc
clang -x c++ -I../../include -I../.. -I/usr/bin/../lib/gcc/x86_64-linux-gnu/8/include   -fno-stack-protector -nostdinc -g -O2 -m64 -mno-red-zone   -fno-stack-protector -lssp -O2 -g -Wall -Wshadow   -fno-stack-protector  -Wno-conversion -fno-exceptions -c debug.cc -o debug.o
clang: warning: -lssp: 'linker' input unused [-Wunused-command-line-argument]
In file included from debug.cc:31:
In file included from ../../include/l4/kip.h:35:
../../include/l4/types.h:379:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : l.raw + r };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:384:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : l.raw + r };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:389:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : l.raw + r.raw };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:394:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : l.raw - r };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:399:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : l.raw - r };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:404:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : l.raw - r.raw };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:410:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : c.raw + r };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:415:27: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    return (L4_Clock_t) { raw : c.raw - r };
                          ^~~~~
                          .raw = 
../../include/l4/types.h:521:13: warning: use of GNU old-style field designator extension [-Wgnu-designator]
            return L4_Never;
                   ^
../../include/l4/types.h:493:33: note: expanded from macro 'L4_Never'
#define L4_Never        ((L4_Time_t) { raw : 0UL })
                                       ^
../../include/l4/types.h:532:13: warning: use of GNU old-style field designator extension [-Wgnu-designator]
            return L4_Never;
                   ^
../../include/l4/types.h:493:33: note: expanded from macro 'L4_Never'
#define L4_Never        ((L4_Time_t) { raw : 0UL })
                                       ^
In file included from debug.cc:31:
In file included from ../../include/l4/kip.h:36:
In file included from ../../include/l4/amd64/syscalls.h:39:
../../include/l4/message.h:982:1: warning: all paths through this function will call itself [-Winfinite-recursion]
{
^
In file included from debug.cc:31:
In file included from ../../include/l4/kip.h:36:
../../include/l4/amd64/syscalls.h:168:19: error: unsupported inline asm: input with type 'L4_ThreadId_t' matching output with type 'L4_Word_t'
      (aka 'unsigned long')
        [spacespec]     "0" (SpaceSpecifier),   /* %5  RAX <- R8 */
                             ^~~~~~~~~~~~~~
../../include/l4/amd64/syscalls.h:220:15: error: unsupported inline asm: input with type 'L4_ThreadId_t' matching output with type 'L4_Word_t'
      (aka 'unsigned long')
        [dest]          "0" (dest)              /* %1  RDI */
                             ^~~~
../../include/l4/amd64/syscalls.h:261:15: error: unsupported inline asm: input with type 'L4_ThreadId_t' matching output with type 'L4_Word_t'
      (aka 'unsigned long')
        [dest]          "4" (dest)              /* %9  RDI */
                             ^~~~
../../include/l4/amd64/syscalls.h:315:15: error: unsupported inline asm: input with type 'L4_ThreadId_t' matching output with type 'L4_Word_t'
      (aka 'unsigned long')
        [from]          "3" (FromSpecifier),    /* %7  RDX */
                             ^~~~~~~~~~~~~
../../include/l4/amd64/syscalls.h:373:15: error: unsupported inline asm: input with type 'L4_ThreadId_t' matching output with type 'L4_Word_t'
      (aka 'unsigned long')
        [from]          "3" (FromSpecifier),    /* %7  RDX */
                             ^~~~~~~~~~~~~
../../include/l4/amd64/syscalls.h:463:18: error: unsupported inline asm: input with type 'L4_Fpage_t' matching output with type 'L4_Word_t'
      (aka 'unsigned long')
        [utcbarea]      "0" (UtcbArea),                 /* %5  RAX -> R8 */
                             ^~~~~~~~
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:260:49: warning: use of GNU old-style field designator extension [-Wgnu-designator]
        return L4_ExchangeRegisters (t, 0, 0, 0, 0, 0, L4_nilthread,
                                                       ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:285:49: warning: use of GNU old-style field designator extension [-Wgnu-designator]
        return L4_ExchangeRegisters (t, 0, 0, 0, 0, 0, L4_nilthread,
                                                       ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:304:59: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    (void) L4_ExchangeRegisters (t, (1 << 9), 0, 0, 0, 0, L4_nilthread,
                                                          ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:316:64: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    (void) L4_ExchangeRegisters (t, (1 << 6), 0, 0, 0, handle, L4_nilthread,
                                                               ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:338:59: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    (void) L4_ExchangeRegisters (t, (1 << 9), 0, 0, 0, 0, L4_nilthread,
                                                          ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:372:63: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    (void) L4_ExchangeRegisters (t, (1 << 8) + 6, 0, 0, 0, 0, L4_nilthread,
                                                              ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:383:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:396:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:422:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, &dummy, &dummy,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:438:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, sp, ip, flags,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:459:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, &dummy, &dummy,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:476:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, sp, ip, flags,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:499:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, &dummy, &dummy,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:517:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, sp, ip, flags,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:540:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, &dummy, &dummy,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:556:6: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                                 L4_nilthread, &state.raw, sp, ip, flags,
                                 ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:582:9: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                             L4_nilthread, HandlerThread, (void *) -1);
                             ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:588:9: warning: use of GNU old-style field designator extension [-Wgnu-designator]
                             L4_nilthread, InterruptThread, (void *) -1);
                             ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:595:76: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    L4_ExchangeRegisters (dest, L4_EXREGS_CTRLXFER_CONF_FLAG, 0, 0 , 0, 0, L4_nilthread,
                                                                           ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:604:76: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    L4_ExchangeRegisters (dest, L4_EXREGS_CTRLXFER_READ_FLAG, 0, 0 , 0, 0, L4_nilthread,
                                                                           ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
In file included from debug.cc:32:
In file included from ../../include/l4/tracebuffer.h:37:
../../include/l4/thread.h:613:77: warning: use of GNU old-style field designator extension [-Wgnu-designator]
    L4_ExchangeRegisters (dest, L4_EXREGS_CTRLXFER_WRITE_FLAG, 0, 0 , 0, 0, L4_nilthread,
                                                                            ^
../../include/l4/types.h:299:46: note: expanded from macro 'L4_nilthread'
#define L4_nilthread      ((L4_ThreadId_t) { raw : 0UL})
                                             ^
32 warnings and 6 errors generated.
make[2]: *** [../../Mk/l4.build.mk:58: debug.o] Error 1
make[2]: Leaving directory '/home/tyson/Orion/user/lib/l4'
make[1]: *** [../Mk/l4.subdir.mk:41: subdirs-all] Error 2
make[1]: Leaving directory '/home/tyson/Orion/user/lib'
make: *** [Mk/l4.subdir.mk:41: subdirs-all] Error 2
tyson@tyson-Lenovo-ideapad-120S-14IAP:~/Orion/user$ 

This probably isn't essential to fix, today, but it's something to be aware of, if I decide to invest more time into adding CLang support to the codebase.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    LLVMBuilding Orion using LLVM/CLangbugSomething isn't workingx86

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions