#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*/ print_supported_filetypes();
int /*<<< orphan*/ printf(char *);
void usage(void) {
  printf(
      "cbfstool: Management utility for CBFS formatted ROM images\n\n"
      "USAGE:\n"
      " cbfstool [-h]\n"
      " cbfstool FILE COMMAND [PARAMETERS]...\n\n"
      "OPTIONs:\n"
      "  -h		Display this help message\n\n"
      "COMMANDs:\n"
      " add FILE NAME TYPE [base address]    Add a component\n"
      " add-payload FILE NAME [COMP] [base]  Add a payload to the ROM\n"
      " add-stage FILE NAME [COMP] [base]    Add a stage to the ROM\n"
      " create SIZE BOOTBLOCK [ALIGN]        Create a ROM file\n"
      " locate FILE NAME ALIGN               Find a place for a file of that "
      "size\n"
      " print                                Show the contents of the ROM\n"
      " extract NAME FILE                    Extracts a raw payload from ROM\n"
      "\n"
      "TYPEs:\n");
  print_supported_filetypes();
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
mov    $0x0,%al
call   1040 <print_supported_filetypes@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
pop    %rcx
jmp    1040 <print_supported_filetypes@plt>

LLVM IR (-O0):
@.str = [629 x i8] c"cbfstool: Management utility for CBFS formatted ROM images\0A\0AUSAGE:\0A cbfstool [-h]\0A cbfstool FILE COMMAND [PARAMETERS]...\0A\0AOPTIONs:\0A -h\09\09Display this help message\0A\0ACOMMANDs:\0A add FILE NAME TYPE [base address] Add a component\0A add-payload FILE NAME [COMP] [base] Add a payload to the ROM\0A add-stage FILE NAME [COMP] [base] Add a stage to the ROM\0A create SIZE BOOTBLOCK [ALIGN] Create a ROM file\0A locate FILE NAME ALIGN Find a place for a file of that size\0A print Show the contents of the ROM\0A extract NAME FILE Extracts a raw payload from ROM\0A\0ATYPEs:\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([629 x i8], [629 x i8]* @.str, i64 0, i64 0))
%2 = call i32 (...) @print_supported_filetypes()
ret void
}

LLVM IR (-O2):
@str = [628 x i8] c"cbfstool: Management utility for CBFS formatted ROM images\0A\0AUSAGE:\0A cbfstool [-h]\0A cbfstool FILE COMMAND [PARAMETERS]...\0A\0AOPTIONs:\0A -h\09\09Display this help message\0A\0ACOMMANDs:\0A add FILE NAME TYPE [base address] Add a component\0A add-payload FILE NAME [COMP] [base] Add a payload to the ROM\0A add-stage FILE NAME [COMP] [base] Add a stage to the ROM\0A create SIZE BOOTBLOCK [ALIGN] Create a ROM file\0A locate FILE NAME ALIGN Find a place for a file of that size\0A print Show the contents of the ROM\0A extract NAME FILE Extracts a raw payload from ROM\0A\0ATYPEs:\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([628 x i8], [628 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 (...) @print_supported_filetypes()
ret void
}