#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*/ printf(char *);
void print_usage(void) {
  printf(
      " abootimg - manipulate Android Boot Images.\n"
      " (c) 2010-2011 Gilles Grandou <gilles@grandou.net>\n"
      " "
      ""
      "\n"
      "\n"
      " abootimg [-h]\n"
      "\n"
      "      print usage\n"
      "\n"
      " abootimg -i <bootimg>\n"
      "\n"
      "      print boot image information\n"
      "\n"
      " abootimg -x <bootimg> [<bootimg.cfg> [<kernel> [<ramdisk> "
      "[<secondstage>]]]]\n"
      "\n"
      "      extract objects from boot image:\n"
      "      - config file (default name bootimg.cfg)\n"
      "      - kernel image (default name zImage)\n"
      "      - ramdisk image (default name initrd.img)\n"
      "      - second stage image (default name stage2.img)\n"
      "\n"
      " abootimg -u <bootimg> [-c \"param=value\"] [-f <bootimg.cfg>] [-k "
      "<kernel>] [-r <ramdisk>] [-s <secondstage>]\n"
      "\n"
      "      update a current boot image with objects given in command line\n"
      "      - header informations given in arguments (several can be "
      "provided)\n"
      "      - header informations given in config file\n"
      "      - kernel image\n"
      "      - ramdisk image\n"
      "      - second stage image\n"
      "\n"
      "      bootimg has to be valid Android Boot Image, or the update will "
      "abort.\n"
      "\n"
      " abootimg --create <bootimg> [-c \"param=value\"] [-f <bootimg.cfg>] -k "
      "<kernel> -r <ramdisk> [-s <secondstage>]\n"
      "\n"
      "      create a new image from scratch.\n"
      "      if the boot image file is a block device, sanity check will be "
      "performed to avoid overwriting a existing\n"
      "      filesystem.\n"
      "\n"
      "      argurments are the same than for -u.\n"
      "      kernel and ramdisk are mandatory.\n"
      "\n");
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_usage>:
lea    0xee9(%rip),%rdi
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [1318 x i8] c" abootimg - manipulate Android Boot Images.\0A (c) 2010-2011 Gilles Grandou <gilles@grandou.net>\0A \0A\0A abootimg [-h]\0A\0A print usage\0A\0A abootimg -i <bootimg>\0A\0A print boot image information\0A\0A abootimg -x <bootimg> [<bootimg.cfg> [<kernel> [<ramdisk> [<secondstage>]]]]\0A\0A extract objects from boot image:\0A - config file (default name bootimg.cfg)\0A - kernel image (default name zImage)\0A - ramdisk image (default name initrd.img)\0A - second stage image (default name stage2.img)\0A\0A abootimg -u <bootimg> [-c \22param=value\22] [-f <bootimg.cfg>] [-k <kernel>] [-r <ramdisk>] [-s <secondstage>]\0A\0A update a current boot image with objects given in command line\0A - header informations given in arguments (several can be provided)\0A - header informations given in config file\0A - kernel image\0A - ramdisk image\0A - second stage image\0A\0A bootimg has to be valid Android Boot Image, or the update will abort.\0A\0A abootimg --create <bootimg> [-c \22param=value\22] [-f <bootimg.cfg>] -k <kernel> -r <ramdisk> [-s <secondstage>]\0A\0A create a new image from scratch.\0A if the boot image file is a block device, sanity check will be performed to avoid overwriting a existing\0A filesystem.\0A\0A argurments are the same than for -u.\0A kernel and ramdisk are mandatory.\0A\0A\00"
define void @print_usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([1318 x i8], [1318 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [1317 x i8] c" abootimg - manipulate Android Boot Images.\0A (c) 2010-2011 Gilles Grandou <gilles@grandou.net>\0A \0A\0A abootimg [-h]\0A\0A print usage\0A\0A abootimg -i <bootimg>\0A\0A print boot image information\0A\0A abootimg -x <bootimg> [<bootimg.cfg> [<kernel> [<ramdisk> [<secondstage>]]]]\0A\0A extract objects from boot image:\0A - config file (default name bootimg.cfg)\0A - kernel image (default name zImage)\0A - ramdisk image (default name initrd.img)\0A - second stage image (default name stage2.img)\0A\0A abootimg -u <bootimg> [-c \22param=value\22] [-f <bootimg.cfg>] [-k <kernel>] [-r <ramdisk>] [-s <secondstage>]\0A\0A update a current boot image with objects given in command line\0A - header informations given in arguments (several can be provided)\0A - header informations given in config file\0A - kernel image\0A - ramdisk image\0A - second stage image\0A\0A bootimg has to be valid Android Boot Image, or the update will abort.\0A\0A abootimg --create <bootimg> [-c \22param=value\22] [-f <bootimg.cfg>] -k <kernel> -r <ramdisk> [-s <secondstage>]\0A\0A create a new image from scratch.\0A if the boot image file is a block device, sanity check will be performed to avoid overwriting a existing\0A filesystem.\0A\0A argurments are the same than for -u.\0A kernel and ramdisk are mandatory.\0A\00"
define void @print_usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1317 x i8], [1317 x i8]* @str, i64 0, i64 0))
ret void
}