#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ stderr;
void usage(void) {
  fprintf(stderr, "Invalid arguments!\n");
  printf(
      "Usage: box [<options>] -- <command> <arguments>\n\nOptions:\n-a "
      "<level>\tSet file access level (0=none, 1=cwd, 2=/etc,/lib,..., 3=whole "
      "fs, 9=no checks; needs -f)\n-c <dir>\tChange directory to <dir> "
      "first\n-e\t\tPass full environment of parent process\n-f\t\tFilter "
      "system calls (-ff=very restricted)\n-i <file>\tRedirect stdin from "
      "<file>\n-m <size>\tLimit address space to <size> KB\n-o "
      "<file>\tRedirect stdout to <file>\n-t <time>\tStop after <time> "
      "seconds\n-T\t\tAllow syscalls for measuring run time\n-v\t\tBe "
      "verbose\n-w\t\tMeasure wall clock time instead of run time\n");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ea5(%rip),%rax
mov    (%rax),%edi
lea    0xebc(%rip),%rsi
call   1040 <fprintf@plt>
lea    0xec4(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    0x2ea8(%rip),%rax
mov    (%rax),%edi
lea    0xebf(%rip),%rsi
call   1040 <fprintf@plt>
lea    0xec7(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [20 x i8] c"Invalid arguments!\0A\00"
@.str.1 = [548 x i8] c"Usage: box [<options>] -- <command> <arguments>\0A\0AOptions:\0A-a <level>\09Set file access level (0=none, 1=cwd, 2=/etc,/lib,..., 3=whole fs, 9=no checks; needs -f)\0A-c <dir>\09Change directory to <dir> first\0A-e\09\09Pass full environment of parent process\0A-f\09\09Filter system calls (-ff=very restricted)\0A-i <file>\09Redirect stdin from <file>\0A-m <size>\09Limit address space to <size> KB\0A-o <file>\09Redirect stdout to <file>\0A-t <time>\09Stop after <time> seconds\0A-T\09\09Allow syscalls for measuring run time\0A-v\09\09Be verbose\0A-w\09\09Measure wall clock time instead of run time\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([548 x i8], [548 x i8]* @.str.1, i64 0, i64 0))
%4 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [20 x i8] c"Invalid arguments!\0A\00"
@str = [547 x i8] c"Usage: box [<options>] -- <command> <arguments>\0A\0AOptions:\0A-a <level>\09Set file access level (0=none, 1=cwd, 2=/etc,/lib,..., 3=whole fs, 9=no checks; needs -f)\0A-c <dir>\09Change directory to <dir> first\0A-e\09\09Pass full environment of parent process\0A-f\09\09Filter system calls (-ff=very restricted)\0A-i <file>\09Redirect stdin from <file>\0A-m <size>\09Limit address space to <size> KB\0A-o <file>\09Redirect stdout to <file>\0A-t <time>\09Stop after <time> seconds\0A-T\09\09Allow syscalls for measuring run time\0A-v\09\09Be verbose\0A-w\09\09Measure wall clock time instead of run time\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([547 x i8], [547 x i8]* @str, i64 0, i64 0))
%4 = tail call i32 @exit(i32 1)
unreachable
}