* include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
@ 2012-05-29 23:31 shawn
2012-05-30 1:11 ` Jim Cromie
0 siblings, 1 reply; 8+ messages in thread
From: shawn @ 2012-05-29 23:31 UTC (permalink / raw)
To: Jim Cromie; +Cc: Jason Baron, linux-kernel
SHIPPED arch/arm/boot/compressed/lib1funcs.S
In file included from include/linux/kernel.h:23:0,
from
arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
from
arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
from arch/arm/boot/compressed/decompress.c:50:
include/linux/dynamic_debug.h: In function
‘ddebug_dyndbg_module_param_cb’:
include/linux/dynamic_debug.h:111:2: error: implicit declaration of
function ‘strstr’ [-Werror=implicit-function-declaration]
SHIPPED arch/arm/boot/compressed/ashldi3.S
AS arch/arm/boot/compressed/lib1funcs.o
AS arch/arm/boot/compressed/ashldi3.o
cc1: some warnings being treated as errors
make[2]: *** [arch/arm/boot/compressed/decompress.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 2
make: *** [uImage] Error 2
git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
this call
--
-Shawn Landden
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
2012-05-29 23:31 include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’ shawn
@ 2012-05-30 1:11 ` Jim Cromie
2012-05-30 1:43 ` shawn
0 siblings, 1 reply; 8+ messages in thread
From: Jim Cromie @ 2012-05-30 1:11 UTC (permalink / raw)
To: shawn; +Cc: Jason Baron, linux-kernel
hi Shawn,
On Tue, May 29, 2012 at 5:31 PM, shawn <shawnlandden@gmail.com> wrote:
> SHIPPED arch/arm/boot/compressed/lib1funcs.S
> In file included from include/linux/kernel.h:23:0,
> from
> arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> from
> arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> from arch/arm/boot/compressed/decompress.c:50:
> include/linux/dynamic_debug.h: In function
> ‘ddebug_dyndbg_module_param_cb’:
> include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> function ‘strstr’ [-Werror=implicit-function-declaration]
>
> git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
> this call
>
> --
> -Shawn Landden
>
that symbol should have been provided by line 100
98 #else
99
100 #include <linux/string.h>
101 #include <linux/errno.h>
...
108 static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
109 const char *modname)
110 {
111 if (strstr(param, "dyndbg")) {
which has:
74 #ifndef __HAVE_ARCH_STRSTR
75 extern char * strstr(const char *, const char *);
76 #endif
does your arch have __HAVE_ARCH_STRSTR ?
if so, is strstr exported under different conditions ??
Can you send me
arch/arm/boot/compressed/decompress.i ?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
2012-05-30 1:11 ` Jim Cromie
@ 2012-05-30 1:43 ` shawn
2012-05-30 8:35 ` Jim Cromie
0 siblings, 1 reply; 8+ messages in thread
From: shawn @ 2012-05-30 1:43 UTC (permalink / raw)
To: Jim Cromie; +Cc: Jason Baron, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2211 bytes --]
jim,
On Tue, 2012-05-29 at 19:11 -0600, Jim Cromie wrote:
> On Tue, May 29, 2012 at 5:31 PM, shawn <shawnlandden@gmail.com> wrote:
> > SHIPPED arch/arm/boot/compressed/lib1funcs.S
> > In file included from include/linux/kernel.h:23:0,
> > from
> > arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> > from
> > arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> > from arch/arm/boot/compressed/decompress.c:50:
> > include/linux/dynamic_debug.h: In function
> > ‘ddebug_dyndbg_module_param_cb’:
> > include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> > function ‘strstr’ [-Werror=implicit-function-declaration]
> >
> > git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
> > this call
>
> that symbol should have been provided by line 100
>
> 98 #else
> 99
> 100 #include <linux/string.h>
> 101 #include <linux/errno.h>
> ...
> 108 static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
> 109 const char *modname)
> 110 {
> 111 if (strstr(param, "dyndbg")) {
> which has:
>
> 74 #ifndef __HAVE_ARCH_STRSTR
> 75 extern char * strstr(const char *, const char *);
> 76 #endif
> does your arch have __HAVE_ARCH_STRSTR ?
> if so, is strstr exported under different conditions ??
a git grep __HAVE_ARCH_STRSTR did not show and such defines in the arm
tree
>
> Can you send me
> arch/arm/boot/compressed/decompress.i ?
I didn't have that file after the failure, but
make arch/arm/boot/compressed/decompress.i
summoned it, also including string.o from that folder (which was present
after the failure)
I am compiling on amd64, using
export ARCH=arm
and
CONFIG_CROSS_COMPILE="arm-linux-gnueabi-"
I have had issues with the cross compiler not always being called since
the 3.5 merge window opened up, (ld reporting corrupted binary files and
gcc saying it doesn't understand arm-specific flags) and have not yet
compiled a post-v3.4 successful kernel. This could be a symptom of that.
(esp as the host arch, x86 DOES have __HAVE_ARCH_STRSTR)
--
-Shawn Landden
[-- Attachment #2: string.o --]
[-- Type: application/x-object, Size: 1984 bytes --]
[-- Attachment #3: decompress.i --]
[-- Type: text/plain, Size: 116152 bytes --]
# 1 "arch/arm/boot/compressed/decompress.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/home/shawn/source/linux/include/linux/kconfig.h" 1
# 1 "include/generated/autoconf.h" 1
# 5 "/home/shawn/source/linux/include/linux/kconfig.h" 2
# 1 "<command-line>" 2
# 1 "arch/arm/boot/compressed/decompress.c"
# 1 "include/linux/compiler.h" 1
# 48 "include/linux/compiler.h"
# 1 "include/linux/compiler-gcc.h" 1
# 100 "include/linux/compiler-gcc.h"
# 1 "include/linux/compiler-gcc4.h" 1
# 101 "include/linux/compiler-gcc.h" 2
# 49 "include/linux/compiler.h" 2
# 66 "include/linux/compiler.h"
struct ftrace_branch_data {
const char *func;
const char *file;
unsigned line;
union {
struct {
unsigned long correct;
unsigned long incorrect;
};
struct {
unsigned long miss;
unsigned long hit;
};
unsigned long miss_hit[2];
};
};
# 4 "arch/arm/boot/compressed/decompress.c" 2
# 1 "include/linux/types.h" 1
# 1 "/home/shawn/source/linux/arch/arm/include/asm/types.h" 1
# 1 "include/asm-generic/int-ll64.h" 1
# 11 "include/asm-generic/int-ll64.h"
# 1 "arch/arm/include/generated/asm/bitsperlong.h" 1
# 1 "include/asm-generic/bitsperlong.h" 1
# 1 "arch/arm/include/generated/asm/bitsperlong.h" 2
# 12 "include/asm-generic/int-ll64.h" 2
typedef __signed__ char __s8;
typedef unsigned char __u8;
typedef __signed__ short __s16;
typedef unsigned short __u16;
typedef __signed__ int __s32;
typedef unsigned int __u32;
__extension__ typedef __signed__ long long __s64;
__extension__ typedef unsigned long long __u64;
# 42 "include/asm-generic/int-ll64.h"
typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed long long s64;
typedef unsigned long long u64;
# 5 "/home/shawn/source/linux/arch/arm/include/asm/types.h" 2
# 5 "include/linux/types.h" 2
# 17 "include/linux/types.h"
# 1 "include/linux/posix_types.h" 1
# 1 "include/linux/stddef.h" 1
# 11 "include/linux/stddef.h"
enum {
false = 0,
true = 1
};
# 5 "include/linux/posix_types.h" 2
# 36 "include/linux/posix_types.h"
typedef struct {
unsigned long fds_bits [(1024/(8 * sizeof(unsigned long)))];
} __kernel_fd_set;
typedef void (*__kernel_sighandler_t)(int);
typedef int __kernel_key_t;
typedef int __kernel_mqd_t;
# 1 "/home/shawn/source/linux/arch/arm/include/asm/posix_types.h" 1
# 22 "/home/shawn/source/linux/arch/arm/include/asm/posix_types.h"
typedef unsigned short __kernel_mode_t;
typedef unsigned short __kernel_nlink_t;
typedef unsigned short __kernel_ipc_pid_t;
typedef unsigned short __kernel_uid_t;
typedef unsigned short __kernel_gid_t;
typedef unsigned short __kernel_old_dev_t;
# 1 "include/asm-generic/posix_types.h" 1
# 1 "arch/arm/include/generated/asm/bitsperlong.h" 1
# 5 "include/asm-generic/posix_types.h" 2
# 14 "include/asm-generic/posix_types.h"
typedef long __kernel_long_t;
typedef unsigned long __kernel_ulong_t;
typedef __kernel_ulong_t __kernel_ino_t;
# 31 "include/asm-generic/posix_types.h"
typedef int __kernel_pid_t;
# 44 "include/asm-generic/posix_types.h"
typedef __kernel_long_t __kernel_suseconds_t;
typedef int __kernel_daddr_t;
typedef unsigned int __kernel_uid32_t;
typedef unsigned int __kernel_gid32_t;
typedef __kernel_uid_t __kernel_old_uid_t;
typedef __kernel_gid_t __kernel_old_gid_t;
# 71 "include/asm-generic/posix_types.h"
typedef unsigned int __kernel_size_t;
typedef int __kernel_ssize_t;
typedef int __kernel_ptrdiff_t;
# 82 "include/asm-generic/posix_types.h"
typedef struct {
int val[2];
} __kernel_fsid_t;
typedef __kernel_long_t __kernel_off_t;
typedef long long __kernel_loff_t;
typedef __kernel_long_t __kernel_time_t;
typedef __kernel_long_t __kernel_clock_t;
typedef int __kernel_timer_t;
typedef int __kernel_clockid_t;
typedef char * __kernel_caddr_t;
typedef unsigned short __kernel_uid16_t;
typedef unsigned short __kernel_gid16_t;
# 39 "/home/shawn/source/linux/arch/arm/include/asm/posix_types.h" 2
# 48 "include/linux/posix_types.h" 2
# 18 "include/linux/types.h" 2
typedef __u32 __kernel_dev_t;
typedef __kernel_fd_set fd_set;
typedef __kernel_dev_t dev_t;
typedef __kernel_ino_t ino_t;
typedef __kernel_mode_t mode_t;
typedef unsigned short umode_t;
typedef __kernel_nlink_t nlink_t;
typedef __kernel_off_t off_t;
typedef __kernel_pid_t pid_t;
typedef __kernel_daddr_t daddr_t;
typedef __kernel_key_t key_t;
typedef __kernel_suseconds_t suseconds_t;
typedef __kernel_timer_t timer_t;
typedef __kernel_clockid_t clockid_t;
typedef __kernel_mqd_t mqd_t;
typedef _Bool bool;
typedef __kernel_uid32_t uid_t;
typedef __kernel_gid32_t gid_t;
typedef __kernel_uid16_t uid16_t;
typedef __kernel_gid16_t gid16_t;
typedef unsigned long uintptr_t;
typedef __kernel_old_uid_t old_uid_t;
typedef __kernel_old_gid_t old_gid_t;
typedef __kernel_loff_t loff_t;
# 63 "include/linux/types.h"
typedef __kernel_size_t size_t;
typedef __kernel_ssize_t ssize_t;
typedef __kernel_ptrdiff_t ptrdiff_t;
typedef __kernel_time_t time_t;
typedef __kernel_clock_t clock_t;
typedef __kernel_caddr_t caddr_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef __u8 u_int8_t;
typedef __s8 int8_t;
typedef __u16 u_int16_t;
typedef __s16 int16_t;
typedef __u32 u_int32_t;
typedef __s32 int32_t;
typedef __u8 uint8_t;
typedef __u16 uint16_t;
typedef __u32 uint32_t;
typedef __u64 uint64_t;
typedef __u64 u_int64_t;
typedef __s64 int64_t;
# 139 "include/linux/types.h"
typedef u64 sector_t;
typedef u64 blkcnt_t;
# 157 "include/linux/types.h"
typedef u32 dma_addr_t;
# 178 "include/linux/types.h"
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;
typedef __u16 __sum16;
typedef __u32 __wsum;
# 202 "include/linux/types.h"
typedef unsigned gfp_t;
typedef unsigned fmode_t;
typedef u32 phys_addr_t;
typedef phys_addr_t resource_size_t;
typedef unsigned long irq_hw_number_t;
typedef struct {
int counter;
} atomic_t;
struct list_head {
struct list_head *next, *prev;
};
struct hlist_head {
struct hlist_node *first;
};
struct hlist_node {
struct hlist_node *next, **pprev;
};
struct ustat {
__kernel_daddr_t f_tfree;
__kernel_ino_t f_tinode;
char f_fname[6];
char f_fpack[6];
};
struct rcu_head {
struct rcu_head *next;
void (*func)(struct rcu_head *head);
};
# 5 "arch/arm/boot/compressed/decompress.c" 2
# 1 "include/linux/linkage.h" 1
# 1 "/home/shawn/source/linux/arch/arm/include/asm/linkage.h" 1
# 6 "include/linux/linkage.h" 2
# 7 "arch/arm/boot/compressed/decompress.c" 2
# 1 "/home/shawn/source/linux/arch/arm/include/asm/string.h" 1
# 10 "/home/shawn/source/linux/arch/arm/include/asm/string.h"
extern char * strrchr(const char * s, int c);
extern char * strchr(const char * s, int c);
extern void * memcpy(void *, const void *, __kernel_size_t);
extern void * memmove(void *, const void *, __kernel_size_t);
extern void * memchr(const void *, int, __kernel_size_t);
extern void * memset(void *, int, __kernel_size_t);
extern void __memzero(void *ptr, __kernel_size_t n);
# 8 "arch/arm/boot/compressed/decompress.c" 2
extern unsigned long free_mem_ptr;
extern unsigned long free_mem_end_ptr;
extern void error(char *);
# 50 "arch/arm/boot/compressed/decompress.c"
# 1 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 1
# 107 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c"
# 1 "include/linux/decompress/mm.h" 1
# 30 "include/linux/decompress/mm.h"
unsigned long malloc_ptr;
int malloc_count;
static void *malloc(int size)
{
void *p;
if (size < 0)
return ((void *)0);
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3;
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
return ((void *)0);
malloc_count++;
return p;
}
static void free(void *where)
{
malloc_count--;
if (!malloc_count)
malloc_ptr = free_mem_ptr;
}
# 108 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 2
# 145 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c"
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h" 1
# 14 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h"
# 1 "include/linux/xz.h" 1
# 52 "include/linux/xz.h"
enum xz_mode {
XZ_SINGLE,
XZ_PREALLOC,
XZ_DYNALLOC
};
# 108 "include/linux/xz.h"
enum xz_ret {
XZ_OK,
XZ_STREAM_END,
XZ_UNSUPPORTED_CHECK,
XZ_MEM_ERROR,
XZ_MEMLIMIT_ERROR,
XZ_FORMAT_ERROR,
XZ_OPTIONS_ERROR,
XZ_DATA_ERROR,
XZ_BUF_ERROR
};
# 136 "include/linux/xz.h"
struct xz_buf {
const uint8_t *in;
size_t in_pos;
size_t in_size;
uint8_t *out;
size_t out_pos;
size_t out_size;
};
struct xz_dec;
# 194 "include/linux/xz.h"
static struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max);
# 214 "include/linux/xz.h"
static enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b);
# 227 "include/linux/xz.h"
static void xz_dec_reset(struct xz_dec *s);
static void xz_dec_end(struct xz_dec *s);
# 255 "include/linux/xz.h"
static void xz_crc32_init(void);
static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
# 15 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h" 2
# 1 "include/linux/kernel.h" 1
# 1 "include/linux/sysinfo.h" 1
struct sysinfo {
__kernel_long_t uptime;
__kernel_ulong_t loads[3];
__kernel_ulong_t totalram;
__kernel_ulong_t freeram;
__kernel_ulong_t sharedram;
__kernel_ulong_t bufferram;
__kernel_ulong_t totalswap;
__kernel_ulong_t freeswap;
__u16 procs;
__u16 pad;
__kernel_ulong_t totalhigh;
__kernel_ulong_t freehigh;
__u32 mem_unit;
char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];
};
# 5 "include/linux/kernel.h" 2
# 14 "include/linux/kernel.h"
# 1 "/usr/lib/gcc/arm-linux-gnueabi/4.6/include/stdarg.h" 1 3 4
# 40 "/usr/lib/gcc/arm-linux-gnueabi/4.6/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 102 "/usr/lib/gcc/arm-linux-gnueabi/4.6/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 15 "include/linux/kernel.h" 2
# 1 "include/linux/bitops.h" 1
# 13 "include/linux/bitops.h"
extern unsigned int __sw_hweight8(unsigned int w);
extern unsigned int __sw_hweight16(unsigned int w);
extern unsigned int __sw_hweight32(unsigned int w);
extern unsigned long __sw_hweight64(__u64 w);
# 1 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 1
# 27 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h"
# 1 "include/linux/irqflags.h" 1
# 14 "include/linux/irqflags.h"
# 1 "include/linux/typecheck.h" 1
# 15 "include/linux/irqflags.h" 2
# 1 "/home/shawn/source/linux/arch/arm/include/asm/irqflags.h" 1
# 1 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h" 1
# 13 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h"
# 1 "/home/shawn/source/linux/arch/arm/include/asm/hwcap.h" 1
# 35 "/home/shawn/source/linux/arch/arm/include/asm/hwcap.h"
extern unsigned int elf_hwcap;
# 14 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h" 2
# 108 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h"
struct pt_regs {
unsigned long uregs[18];
};
# 166 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h"
static inline __attribute__((always_inline)) int valid_user_regs(struct pt_regs *regs)
{
unsigned long mode = regs->uregs[16] & 0x0000001f;
regs->uregs[16] &= ~(0x00000040 | 0x00000100);
if ((regs->uregs[16] & 0x00000080) == 0) {
if (mode == 0x00000010)
return 1;
if (elf_hwcap & (1 << 3) && mode == 0x00000000)
return 1;
}
regs->uregs[16] &= 0xff000000 | 0x00ff0000 | 0x0000ff00 | 0x00000020 | 0x00000010;
if (!(elf_hwcap & (1 << 3)))
regs->uregs[16] |= 0x00000010;
return 0;
}
static inline __attribute__((always_inline)) long regs_return_value(struct pt_regs *regs)
{
return regs->uregs[0];
}
# 223 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h"
extern int regs_query_register_offset(const char *name);
extern const char *regs_query_register_name(unsigned int offset);
extern bool regs_within_kernel_stack(struct pt_regs *regs, unsigned long addr);
extern unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
unsigned int n);
# 238 "/home/shawn/source/linux/arch/arm/include/asm/ptrace.h"
static inline __attribute__((always_inline)) unsigned long regs_get_register(struct pt_regs *regs,
unsigned int offset)
{
if (__builtin_expect(!!(offset > (__builtin_offsetof(struct pt_regs,uregs[17]))), 0))
return 0;
return *(unsigned long *)((unsigned long)regs + offset);
}
static inline __attribute__((always_inline)) unsigned long kernel_stack_pointer(struct pt_regs *regs)
{
return regs->uregs[13];
}
static inline __attribute__((always_inline)) unsigned long user_stack_pointer(struct pt_regs *regs)
{
return regs->uregs[13];
}
# 7 "/home/shawn/source/linux/arch/arm/include/asm/irqflags.h" 2
# 49 "/home/shawn/source/linux/arch/arm/include/asm/irqflags.h"
static inline __attribute__((always_inline)) unsigned long arch_local_irq_save(void)
{
unsigned long flags, temp;
asm volatile(
" mrs %0, cpsr @ arch_local_irq_save\n"
" orr %1, %0, #128\n"
" msr cpsr_c, %1"
: "=r" (flags), "=r" (temp)
:
: "memory", "cc");
return flags;
}
static inline __attribute__((always_inline)) void arch_local_irq_enable(void)
{
unsigned long temp;
asm volatile(
" mrs %0, cpsr @ arch_local_irq_enable\n"
" bic %0, %0, #128\n"
" msr cpsr_c, %0"
: "=r" (temp)
:
: "memory", "cc");
}
static inline __attribute__((always_inline)) void arch_local_irq_disable(void)
{
unsigned long temp;
asm volatile(
" mrs %0, cpsr @ arch_local_irq_disable\n"
" orr %0, %0, #128\n"
" msr cpsr_c, %0"
: "=r" (temp)
:
: "memory", "cc");
}
# 128 "/home/shawn/source/linux/arch/arm/include/asm/irqflags.h"
static inline __attribute__((always_inline)) unsigned long arch_local_save_flags(void)
{
unsigned long flags;
asm volatile(
" mrs %0, cpsr @ local_save_flags"
: "=r" (flags) : : "memory", "cc");
return flags;
}
static inline __attribute__((always_inline)) void arch_local_irq_restore(unsigned long flags)
{
asm volatile(
" msr cpsr_c, %0 @ local_irq_restore"
:
: "r" (flags)
: "memory", "cc");
}
static inline __attribute__((always_inline)) int arch_irqs_disabled_flags(unsigned long flags)
{
return flags & 0x00000080;
}
# 16 "include/linux/irqflags.h" 2
# 28 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 37 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h"
static inline __attribute__((always_inline)) void ____atomic_set_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
*p |= mask;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
}
static inline __attribute__((always_inline)) void ____atomic_clear_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
*p &= ~mask;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
}
static inline __attribute__((always_inline)) void ____atomic_change_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
*p ^= mask;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
}
static inline __attribute__((always_inline)) int
____atomic_test_and_set_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned int res;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
res = *p;
*p = res | mask;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
return (res & mask) != 0;
}
static inline __attribute__((always_inline)) int
____atomic_test_and_clear_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned int res;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
res = *p;
*p = res & ~mask;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
return (res & mask) != 0;
}
static inline __attribute__((always_inline)) int
____atomic_test_and_change_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned int res;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = arch_local_irq_save(); } while (0);
res = *p;
*p = res ^ mask;
do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); arch_local_irq_restore(flags); } while (0);
return (res & mask) != 0;
}
# 1 "include/asm-generic/bitops/non-atomic.h" 1
# 15 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) void __set_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
*p |= mask;
}
static inline __attribute__((always_inline)) void __clear_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
*p &= ~mask;
}
# 40 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) void __change_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
*p ^= mask;
}
# 57 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) int __test_and_set_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
unsigned long old = *p;
*p = old | mask;
return (old & mask) != 0;
}
# 76 "include/asm-generic/bitops/non-atomic.h"
static inline __attribute__((always_inline)) int __test_and_clear_bit(int nr, volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
unsigned long old = *p;
*p = old & ~mask;
return (old & mask) != 0;
}
static inline __attribute__((always_inline)) int __test_and_change_bit(int nr,
volatile unsigned long *addr)
{
unsigned long mask = (1UL << ((nr) % 32));
unsigned long *p = ((unsigned long *)addr) + ((nr) / 32);
unsigned long old = *p;
*p = old ^ mask;
return (old & mask) != 0;
}
static inline __attribute__((always_inline)) int test_bit(int nr, const volatile unsigned long *addr)
{
return 1UL & (addr[((nr) / 32)] >> (nr & (32 -1)));
}
# 125 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 154 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h"
extern void _set_bit(int nr, volatile unsigned long * p);
extern void _clear_bit(int nr, volatile unsigned long * p);
extern void _change_bit(int nr, volatile unsigned long * p);
extern int _test_and_set_bit(int nr, volatile unsigned long * p);
extern int _test_and_clear_bit(int nr, volatile unsigned long * p);
extern int _test_and_change_bit(int nr, volatile unsigned long * p);
extern int _find_first_zero_bit_le(const void * p, unsigned size);
extern int _find_next_zero_bit_le(const void * p, int size, int offset);
extern int _find_first_bit_le(const unsigned long *p, unsigned size);
extern int _find_next_bit_le(const unsigned long *p, int size, int offset);
extern int _find_first_zero_bit_be(const void * p, unsigned size);
extern int _find_next_zero_bit_be(const void * p, int size, int offset);
extern int _find_first_bit_be(const unsigned long *p, unsigned size);
extern int _find_next_bit_be(const unsigned long *p, int size, int offset);
# 227 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h"
static inline __attribute__((always_inline)) int constant_fls(int x)
{
int r = 32;
if (!x)
return 0;
if (!(x & 0xffff0000u)) {
x <<= 16;
r -= 16;
}
if (!(x & 0xff000000u)) {
x <<= 8;
r -= 8;
}
if (!(x & 0xf0000000u)) {
x <<= 4;
r -= 4;
}
if (!(x & 0xc0000000u)) {
x <<= 2;
r -= 2;
}
if (!(x & 0x80000000u)) {
x <<= 1;
r -= 1;
}
return r;
}
static inline __attribute__((always_inline)) int fls(int x)
{
int ret;
if (__builtin_constant_p(x))
return constant_fls(x);
asm("clz\t%0, %1" : "=r" (ret) : "r" (x));
ret = 32 - ret;
return ret;
}
# 280 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h"
# 1 "include/asm-generic/bitops/fls64.h" 1
# 18 "include/asm-generic/bitops/fls64.h"
static inline __attribute__((always_inline)) __attribute__((always_inline)) int fls64(__u64 x)
{
__u32 h = x >> 32;
if (h)
return fls(h) + 32;
return fls(x);
}
# 281 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/sched.h" 1
# 12 "include/asm-generic/bitops/sched.h"
static inline __attribute__((always_inline)) int sched_find_first_bit(const unsigned long *b)
{
if (b[0])
return (({ unsigned long __t = (b[0]); fls(__t & -__t); }) - 1);
if (b[1])
return (({ unsigned long __t = (b[1]); fls(__t & -__t); }) - 1) + 32;
if (b[2])
return (({ unsigned long __t = (b[2]); fls(__t & -__t); }) - 1) + 64;
return (({ unsigned long __t = (b[3]); fls(__t & -__t); }) - 1) + 96;
}
# 283 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/hweight.h" 1
# 1 "include/asm-generic/bitops/arch_hweight.h" 1
static inline __attribute__((always_inline)) unsigned int __arch_hweight32(unsigned int w)
{
return __sw_hweight32(w);
}
static inline __attribute__((always_inline)) unsigned int __arch_hweight16(unsigned int w)
{
return __sw_hweight16(w);
}
static inline __attribute__((always_inline)) unsigned int __arch_hweight8(unsigned int w)
{
return __sw_hweight8(w);
}
static inline __attribute__((always_inline)) unsigned long __arch_hweight64(__u64 w)
{
return __sw_hweight64(w);
}
# 5 "include/asm-generic/bitops/hweight.h" 2
# 1 "include/asm-generic/bitops/const_hweight.h" 1
# 6 "include/asm-generic/bitops/hweight.h" 2
# 284 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/lock.h" 1
# 285 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 308 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h"
# 1 "include/asm-generic/bitops/le.h" 1
# 1 "/home/shawn/source/linux/arch/arm/include/asm/byteorder.h" 1
# 21 "/home/shawn/source/linux/arch/arm/include/asm/byteorder.h"
# 1 "include/linux/byteorder/little_endian.h" 1
# 12 "include/linux/byteorder/little_endian.h"
# 1 "include/linux/swab.h" 1
# 1 "/home/shawn/source/linux/arch/arm/include/asm/swab.h" 1
# 47 "/home/shawn/source/linux/arch/arm/include/asm/swab.h"
static inline __attribute__((always_inline)) __attribute__((__const__)) __u32 __arch_swab32(__u32 x)
{
__u32 t;
if (!__builtin_constant_p(x)) {
asm ("eor\t%0, %1, %1, ror #16" : "=r" (t) : "r" (x));
} else
t = x ^ ((x << 16) | (x >> 16));
x = (x << 24) | (x >> 8);
t &= ~0x00FF0000;
x ^= (t >> 8);
return x;
}
# 7 "include/linux/swab.h" 2
# 46 "include/linux/swab.h"
static inline __attribute__((always_inline)) __attribute__((__const__)) __u16 __fswab16(__u16 val)
{
return ((__u16)( (((__u16)(val) & (__u16)0x00ffU) << 8) | (((__u16)(val) & (__u16)0xff00U) >> 8)));
}
static inline __attribute__((always_inline)) __attribute__((__const__)) __u32 __fswab32(__u32 val)
{
return __arch_swab32(val);
}
static inline __attribute__((always_inline)) __attribute__((__const__)) __u64 __fswab64(__u64 val)
{
__u32 h = val >> 32;
__u32 l = val & ((1ULL << 32) - 1);
return (((__u64)__fswab32(l)) << 32) | ((__u64)(__fswab32(h)));
}
static inline __attribute__((always_inline)) __attribute__((__const__)) __u32 __fswahw32(__u32 val)
{
return ((__u32)( (((__u32)(val) & (__u32)0x0000ffffUL) << 16) | (((__u32)(val) & (__u32)0xffff0000UL) >> 16)));
}
static inline __attribute__((always_inline)) __attribute__((__const__)) __u32 __fswahb32(__u32 val)
{
return ((__u32)( (((__u32)(val) & (__u32)0x00ff00ffUL) << 8) | (((__u32)(val) & (__u32)0xff00ff00UL) >> 8)));
}
# 148 "include/linux/swab.h"
static inline __attribute__((always_inline)) __u16 __swab16p(const __u16 *p)
{
return (__builtin_constant_p((__u16)(*p)) ? ((__u16)( (((__u16)(*p) & (__u16)0x00ffU) << 8) | (((__u16)(*p) & (__u16)0xff00U) >> 8))) : __fswab16(*p));
}
static inline __attribute__((always_inline)) __u32 __swab32p(const __u32 *p)
{
return (__builtin_constant_p((__u32)(*p)) ? ((__u32)( (((__u32)(*p) & (__u32)0x000000ffUL) << 24) | (((__u32)(*p) & (__u32)0x0000ff00UL) << 8) | (((__u32)(*p) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(*p) & (__u32)0xff000000UL) >> 24))) : __fswab32(*p));
}
static inline __attribute__((always_inline)) __u64 __swab64p(const __u64 *p)
{
return (__builtin_constant_p((__u64)(*p)) ? ((__u64)( (((__u64)(*p) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(*p) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(*p) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(*p) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(*p) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(*p) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(*p) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(*p) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(*p));
}
static inline __attribute__((always_inline)) __u32 __swahw32p(const __u32 *p)
{
return (__builtin_constant_p((__u32)(*p)) ? ((__u32)( (((__u32)(*p) & (__u32)0x0000ffffUL) << 16) | (((__u32)(*p) & (__u32)0xffff0000UL) >> 16))) : __fswahw32(*p));
}
static inline __attribute__((always_inline)) __u32 __swahb32p(const __u32 *p)
{
return (__builtin_constant_p((__u32)(*p)) ? ((__u32)( (((__u32)(*p) & (__u32)0x00ff00ffUL) << 8) | (((__u32)(*p) & (__u32)0xff00ff00UL) >> 8))) : __fswahb32(*p));
}
static inline __attribute__((always_inline)) void __swab16s(__u16 *p)
{
*p = __swab16p(p);
}
static inline __attribute__((always_inline)) void __swab32s(__u32 *p)
{
*p = __swab32p(p);
}
static inline __attribute__((always_inline)) void __swab64s(__u64 *p)
{
*p = __swab64p(p);
}
static inline __attribute__((always_inline)) void __swahw32s(__u32 *p)
{
*p = __swahw32p(p);
}
static inline __attribute__((always_inline)) void __swahb32s(__u32 *p)
{
*p = __swahb32p(p);
}
# 13 "include/linux/byteorder/little_endian.h" 2
# 43 "include/linux/byteorder/little_endian.h"
static inline __attribute__((always_inline)) __le64 __cpu_to_le64p(const __u64 *p)
{
return ( __le64)*p;
}
static inline __attribute__((always_inline)) __u64 __le64_to_cpup(const __le64 *p)
{
return ( __u64)*p;
}
static inline __attribute__((always_inline)) __le32 __cpu_to_le32p(const __u32 *p)
{
return ( __le32)*p;
}
static inline __attribute__((always_inline)) __u32 __le32_to_cpup(const __le32 *p)
{
return ( __u32)*p;
}
static inline __attribute__((always_inline)) __le16 __cpu_to_le16p(const __u16 *p)
{
return ( __le16)*p;
}
static inline __attribute__((always_inline)) __u16 __le16_to_cpup(const __le16 *p)
{
return ( __u16)*p;
}
static inline __attribute__((always_inline)) __be64 __cpu_to_be64p(const __u64 *p)
{
return ( __be64)__swab64p(p);
}
static inline __attribute__((always_inline)) __u64 __be64_to_cpup(const __be64 *p)
{
return __swab64p((__u64 *)p);
}
static inline __attribute__((always_inline)) __be32 __cpu_to_be32p(const __u32 *p)
{
return ( __be32)__swab32p(p);
}
static inline __attribute__((always_inline)) __u32 __be32_to_cpup(const __be32 *p)
{
return __swab32p((__u32 *)p);
}
static inline __attribute__((always_inline)) __be16 __cpu_to_be16p(const __u16 *p)
{
return ( __be16)__swab16p(p);
}
static inline __attribute__((always_inline)) __u16 __be16_to_cpup(const __be16 *p)
{
return __swab16p((__u16 *)p);
}
# 105 "include/linux/byteorder/little_endian.h"
# 1 "include/linux/byteorder/generic.h" 1
# 143 "include/linux/byteorder/generic.h"
static inline __attribute__((always_inline)) void le16_add_cpu(__le16 *var, u16 val)
{
*var = (( __le16)(__u16)((( __u16)(__le16)(*var)) + val));
}
static inline __attribute__((always_inline)) void le32_add_cpu(__le32 *var, u32 val)
{
*var = (( __le32)(__u32)((( __u32)(__le32)(*var)) + val));
}
static inline __attribute__((always_inline)) void le64_add_cpu(__le64 *var, u64 val)
{
*var = (( __le64)(__u64)((( __u64)(__le64)(*var)) + val));
}
static inline __attribute__((always_inline)) void be16_add_cpu(__be16 *var, u16 val)
{
*var = (( __be16)(__builtin_constant_p((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val))) ? ((__u16)( (((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val)) & (__u16)0x00ffU) << 8) | (((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val)) & (__u16)0xff00U) >> 8))) : __fswab16(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)(( __u16)(__be16)(*var)) & (__u16)0x00ffU) << 8) | (((__u16)(( __u16)(__be16)(*var)) & (__u16)0xff00U) >> 8))) : __fswab16(( __u16)(__be16)(*var))) + val))));
}
static inline __attribute__((always_inline)) void be32_add_cpu(__be32 *var, u32 val)
{
*var = (( __be32)(__builtin_constant_p((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val))) ? ((__u32)( (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0x000000ffUL) << 24) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val)) & (__u32)0xff000000UL) >> 24))) : __fswab32(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x000000ffUL) << 24) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x0000ff00UL) << 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(( __u32)(__be32)(*var)) & (__u32)0xff000000UL) >> 24))) : __fswab32(( __u32)(__be32)(*var))) + val))));
}
static inline __attribute__((always_inline)) void be64_add_cpu(__be64 *var, u64 val)
{
*var = (( __be64)(__builtin_constant_p((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val))) ? ((__u64)( (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000000000ffULL) << 56) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000000000ff00ULL) << 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000000000ff0000ULL) << 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00000000ff000000ULL) << 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x000000ff00000000ULL) >> 8) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x0000ff0000000000ULL) >> 24) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0x00ff000000000000ULL) >> 40) | (((__u64)(( __u64)(__be64)(*var)) & (__u64)0xff00000000000000ULL) >> 56))) : __fswab64(( __u64)(__be64)(*var))) + val))));
}
# 106 "include/linux/byteorder/little_endian.h" 2
# 22 "/home/shawn/source/linux/arch/arm/include/asm/byteorder.h" 2
# 6 "include/asm-generic/bitops/le.h" 2
static inline __attribute__((always_inline)) unsigned long find_next_zero_bit_le(const void *addr,
unsigned long size, unsigned long offset)
{
return _find_next_zero_bit_le(addr,size,offset);
}
static inline __attribute__((always_inline)) unsigned long find_next_bit_le(const void *addr,
unsigned long size, unsigned long offset)
{
return _find_next_bit_le(addr,size,offset);
}
static inline __attribute__((always_inline)) unsigned long find_first_zero_bit_le(const void *addr,
unsigned long size)
{
return _find_first_zero_bit_le(addr,size);
}
# 52 "include/asm-generic/bitops/le.h"
static inline __attribute__((always_inline)) int test_bit_le(int nr, const void *addr)
{
return test_bit(nr ^ 0, addr);
}
static inline __attribute__((always_inline)) void __set_bit_le(int nr, void *addr)
{
__set_bit(nr ^ 0, addr);
}
static inline __attribute__((always_inline)) void __clear_bit_le(int nr, void *addr)
{
__clear_bit(nr ^ 0, addr);
}
static inline __attribute__((always_inline)) int test_and_set_bit_le(int nr, void *addr)
{
return (__builtin_constant_p(nr ^ 0) ? ____atomic_test_and_set_bit(nr ^ 0, addr) : _test_and_set_bit(nr ^ 0,addr));
}
static inline __attribute__((always_inline)) int test_and_clear_bit_le(int nr, void *addr)
{
return (__builtin_constant_p(nr ^ 0) ? ____atomic_test_and_clear_bit(nr ^ 0, addr) : _test_and_clear_bit(nr ^ 0,addr));
}
static inline __attribute__((always_inline)) int __test_and_set_bit_le(int nr, void *addr)
{
return __test_and_set_bit(nr ^ 0, addr);
}
static inline __attribute__((always_inline)) int __test_and_clear_bit_le(int nr, void *addr)
{
return __test_and_clear_bit(nr ^ 0, addr);
}
# 309 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 1 "include/asm-generic/bitops/ext2-atomic-setbit.h" 1
# 314 "/home/shawn/source/linux/arch/arm/include/asm/bitops.h" 2
# 23 "include/linux/bitops.h" 2
# 46 "include/linux/bitops.h"
static __inline__ __attribute__((always_inline)) int get_bitmask_order(unsigned int count)
{
int order;
order = fls(count);
return order;
}
static __inline__ __attribute__((always_inline)) int get_count_order(unsigned int count)
{
int order;
order = fls(count) - 1;
if (count & (count - 1))
order++;
return order;
}
static inline __attribute__((always_inline)) unsigned long hweight_long(unsigned long w)
{
return sizeof(w) == 4 ? (__builtin_constant_p(w) ? ((( (!!((w) & (1ULL << 0))) + (!!((w) & (1ULL << 1))) + (!!((w) & (1ULL << 2))) + (!!((w) & (1ULL << 3))) + (!!((w) & (1ULL << 4))) + (!!((w) & (1ULL << 5))) + (!!((w) & (1ULL << 6))) + (!!((w) & (1ULL << 7))) ) + ( (!!(((w) >> 8) & (1ULL << 0))) + (!!(((w) >> 8) & (1ULL << 1))) + (!!(((w) >> 8) & (1ULL << 2))) + (!!(((w) >> 8) & (1ULL << 3))) + (!!(((w) >> 8) & (1ULL << 4))) + (!!(((w) >> 8) & (1ULL << 5))) + (!!(((w) >> 8) & (1ULL << 6))) + (!!(((w) >> 8) & (1ULL << 7))) )) + (( (!!(((w) >> 16) & (1ULL << 0))) + (!!(((w) >> 16) & (1ULL << 1))) + (!!(((w) >> 16) & (1ULL << 2))) + (!!(((w) >> 16) & (1ULL << 3))) + (!!(((w) >> 16) & (1ULL << 4))) + (!!(((w) >> 16) & (1ULL << 5))) + (!!(((w) >> 16) & (1ULL << 6))) + (!!(((w) >> 16) & (1ULL << 7))) ) + ( (!!((((w) >> 16) >> 8) & (1ULL << 0))) + (!!((((w) >> 16) >> 8) & (1ULL << 1))) + (!!((((w) >> 16) >> 8) & (1ULL << 2))) + (!!((((w) >> 16) >> 8) & (1ULL << 3))) + (!!((((w) >> 16) >> 8) & (1ULL << 4))) + (!!((((w) >> 16) >> 8) & (1ULL << 5))) + (!!((((w) >> 16) >> 8) & (1ULL << 6))) + (!!((((w) >> 16) >> 8) & (1ULL << 7))) ))) : __arch_hweight32(w)) : (__builtin_constant_p(w) ? (((( (!!((w) & (1ULL << 0))) + (!!((w) & (1ULL << 1))) + (!!((w) & (1ULL << 2))) + (!!((w) & (1ULL << 3))) + (!!((w) & (1ULL << 4))) + (!!((w) & (1ULL << 5))) + (!!((w) & (1ULL << 6))) + (!!((w) & (1ULL << 7))) ) + ( (!!(((w) >> 8) & (1ULL << 0))) + (!!(((w) >> 8) & (1ULL << 1))) + (!!(((w) >> 8) & (1ULL << 2))) + (!!(((w) >> 8) & (1ULL << 3))) + (!!(((w) >> 8) & (1ULL << 4))) + (!!(((w) >> 8) & (1ULL << 5))) + (!!(((w) >> 8) & (1ULL << 6))) + (!!(((w) >> 8) & (1ULL << 7))) )) + (( (!!(((w) >> 16) & (1ULL << 0))) + (!!(((w) >> 16) & (1ULL << 1))) + (!!(((w) >> 16) & (1ULL << 2))) + (!!(((w) >> 16) & (1ULL << 3))) + (!!(((w) >> 16) & (1ULL << 4))) + (!!(((w) >> 16) & (1ULL << 5))) + (!!(((w) >> 16) & (1ULL << 6))) + (!!(((w) >> 16) & (1ULL << 7))) ) + ( (!!((((w) >> 16) >> 8) & (1ULL << 0))) + (!!((((w) >> 16) >> 8) & (1ULL << 1))) + (!!((((w) >> 16) >> 8) & (1ULL << 2))) + (!!((((w) >> 16) >> 8) & (1ULL << 3))) + (!!((((w) >> 16) >> 8) & (1ULL << 4))) + (!!((((w) >> 16) >> 8) & (1ULL << 5))) + (!!((((w) >> 16) >> 8) & (1ULL << 6))) + (!!((((w) >> 16) >> 8) & (1ULL << 7))) ))) + ((( (!!(((w) >> 32) & (1ULL << 0))) + (!!(((w) >> 32) & (1ULL << 1))) + (!!(((w) >> 32) & (1ULL << 2))) + (!!(((w) >> 32) & (1ULL << 3))) + (!!(((w) >> 32) & (1ULL << 4))) + (!!(((w) >> 32) & (1ULL << 5))) + (!!(((w) >> 32) & (1ULL << 6))) + (!!(((w) >> 32) & (1ULL << 7))) ) + ( (!!((((w) >> 32) >> 8) & (1ULL << 0))) + (!!((((w) >> 32) >> 8) & (1ULL << 1))) + (!!((((w) >> 32) >> 8) & (1ULL << 2))) + (!!((((w) >> 32) >> 8) & (1ULL << 3))) + (!!((((w) >> 32) >> 8) & (1ULL << 4))) + (!!((((w) >> 32) >> 8) & (1ULL << 5))) + (!!((((w) >> 32) >> 8) & (1ULL << 6))) + (!!((((w) >> 32) >> 8) & (1ULL << 7))) )) + (( (!!((((w) >> 32) >> 16) & (1ULL << 0))) + (!!((((w) >> 32) >> 16) & (1ULL << 1))) + (!!((((w) >> 32) >> 16) & (1ULL << 2))) + (!!((((w) >> 32) >> 16) & (1ULL << 3))) + (!!((((w) >> 32) >> 16) & (1ULL << 4))) + (!!((((w) >> 32) >> 16) & (1ULL << 5))) + (!!((((w) >> 32) >> 16) & (1ULL << 6))) + (!!((((w) >> 32) >> 16) & (1ULL << 7))) ) + ( (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 0))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 1))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 2))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 3))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 4))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 5))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 6))) + (!!(((((w) >> 32) >> 16) >> 8) & (1ULL << 7))) )))) : __arch_hweight64(w));
}
static inline __attribute__((always_inline)) __u64 rol64(__u64 word, unsigned int shift)
{
return (word << shift) | (word >> (64 - shift));
}
static inline __attribute__((always_inline)) __u64 ror64(__u64 word, unsigned int shift)
{
return (word >> shift) | (word << (64 - shift));
}
static inline __attribute__((always_inline)) __u32 rol32(__u32 word, unsigned int shift)
{
return (word << shift) | (word >> (32 - shift));
}
static inline __attribute__((always_inline)) __u32 ror32(__u32 word, unsigned int shift)
{
return (word >> shift) | (word << (32 - shift));
}
static inline __attribute__((always_inline)) __u16 rol16(__u16 word, unsigned int shift)
{
return (word << shift) | (word >> (16 - shift));
}
static inline __attribute__((always_inline)) __u16 ror16(__u16 word, unsigned int shift)
{
return (word >> shift) | (word << (16 - shift));
}
static inline __attribute__((always_inline)) __u8 rol8(__u8 word, unsigned int shift)
{
return (word << shift) | (word >> (8 - shift));
}
static inline __attribute__((always_inline)) __u8 ror8(__u8 word, unsigned int shift)
{
return (word >> shift) | (word << (8 - shift));
}
static inline __attribute__((always_inline)) __s32 sign_extend32(__u32 value, int index)
{
__u8 shift = 31 - index;
return (__s32)(value << shift) >> shift;
}
static inline __attribute__((always_inline)) unsigned fls_long(unsigned long l)
{
if (sizeof(l) == 4)
return fls(l);
return fls64(l);
}
# 175 "include/linux/bitops.h"
static inline __attribute__((always_inline)) unsigned long __ffs64(u64 word)
{
if (((u32)word) == 0UL)
return (({ unsigned long __t = ((u32)(word >> 32)); fls(__t & -__t); }) - 1) + 32;
return (({ unsigned long __t = ((unsigned long)word); fls(__t & -__t); }) - 1);
}
# 196 "include/linux/bitops.h"
extern unsigned long find_last_bit(const unsigned long *addr,
unsigned long size);
# 20 "include/linux/kernel.h" 2
# 1 "include/linux/log2.h" 1
# 21 "include/linux/log2.h"
extern __attribute__((const, noreturn))
int ____ilog2_NaN(void);
# 31 "include/linux/log2.h"
static inline __attribute__((always_inline)) __attribute__((const))
int __ilog2_u32(u32 n)
{
return fls(n) - 1;
}
static inline __attribute__((always_inline)) __attribute__((const))
int __ilog2_u64(u64 n)
{
return fls64(n) - 1;
}
static inline __attribute__((always_inline)) __attribute__((const))
bool is_power_of_2(unsigned long n)
{
return (n != 0 && ((n & (n - 1)) == 0));
}
static inline __attribute__((always_inline)) __attribute__((const))
unsigned long __roundup_pow_of_two(unsigned long n)
{
return 1UL << fls_long(n - 1);
}
static inline __attribute__((always_inline)) __attribute__((const))
unsigned long __rounddown_pow_of_two(unsigned long n)
{
return 1UL << (fls_long(n) - 1);
}
# 21 "include/linux/kernel.h" 2
# 1 "include/linux/printk.h" 1
# 1 "include/linux/init.h" 1
# 139 "include/linux/init.h"
typedef int (*initcall_t)(void);
typedef void (*exitcall_t)(void);
extern initcall_t __con_initcall_start[], __con_initcall_end[];
extern initcall_t __security_initcall_start[], __security_initcall_end[];
typedef void (*ctor_fn_t)(void);
extern int do_one_initcall(initcall_t fn);
extern char __attribute__ ((__section__(".init.data"))) boot_command_line[];
extern char *saved_command_line;
extern unsigned int reset_devices;
void setup_arch(char **);
void prepare_namespace(void);
extern void (*late_time_init)(void);
extern bool initcall_debug;
# 226 "include/linux/init.h"
struct obs_kernel_param {
const char *str;
int (*setup_func)(char *);
int early;
};
# 255 "include/linux/init.h"
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) parse_early_param(void);
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) parse_early_options(char *cmdline);
# 5 "include/linux/printk.h" 2
extern const char linux_banner[];
extern const char linux_proc_banner[];
# 27 "include/linux/printk.h"
extern int console_printk[];
static inline __attribute__((always_inline)) void console_silent(void)
{
(console_printk[0]) = 0;
}
static inline __attribute__((always_inline)) void console_verbose(void)
{
if ((console_printk[0]))
(console_printk[0]) = 15;
}
struct va_format {
const char *fmt;
va_list *va;
};
# 85 "include/linux/printk.h"
static inline __attribute__((always_inline)) __attribute__((format(printf, 1, 2)))
int no_printk(const char *fmt, ...)
{
return 0;
}
extern __attribute__((format(printf, 1, 2)))
void early_printk(const char *fmt, ...);
extern int printk_needs_cpu(int cpu);
extern void printk_tick(void);
__attribute__((format(printf, 5, 0)))
int vprintk_emit(int facility, int level,
const char *dict, size_t dictlen,
const char *fmt, va_list args);
__attribute__((format(printf, 1, 0)))
int vprintk(const char *fmt, va_list args);
__attribute__((format(printf, 5, 6))) __attribute__((__cold__))
int printk_emit(int facility, int level,
const char *dict, size_t dictlen,
const char *fmt, ...);
__attribute__((format(printf, 1, 2))) __attribute__((__cold__))
int printk(const char *fmt, ...);
__attribute__((format(printf, 1, 2))) __attribute__((__cold__)) int printk_sched(const char *fmt, ...);
extern int __printk_ratelimit(const char *func);
extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
unsigned int interval_msec);
extern int printk_delay_msec;
extern int dmesg_restrict;
extern int kptr_restrict;
void log_buf_kexec_setup(void);
void __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) setup_log_buf(int early);
# 170 "include/linux/printk.h"
extern void dump_stack(void) __attribute__((__cold__));
# 303 "include/linux/printk.h"
extern const struct file_operations kmsg_fops;
enum {
DUMP_PREFIX_NONE,
DUMP_PREFIX_ADDRESS,
DUMP_PREFIX_OFFSET
};
extern void hex_dump_to_buffer(const void *buf, size_t len,
int rowsize, int groupsize,
char *linebuf, size_t linebuflen, bool ascii);
extern void print_hex_dump(const char *level, const char *prefix_str,
int prefix_type, int rowsize, int groupsize,
const void *buf, size_t len, bool ascii);
extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
const void *buf, size_t len);
# 23 "include/linux/kernel.h" 2
# 1 "include/linux/dynamic_debug.h" 1
# 9 "include/linux/dynamic_debug.h"
struct _ddebug {
const char *modname;
const char *function;
const char *filename;
const char *format;
unsigned int lineno:18;
# 35 "include/linux/dynamic_debug.h"
unsigned int flags:8;
} __attribute__((aligned(8)));
int ddebug_add_module(struct _ddebug *tab, unsigned int n,
const char *modname);
# 100 "include/linux/dynamic_debug.h"
# 1 "include/linux/string.h" 1
# 101 "include/linux/dynamic_debug.h" 2
# 1 "include/linux/errno.h" 1
# 1 "arch/arm/include/generated/asm/errno.h" 1
# 1 "include/asm-generic/errno.h" 1
# 1 "include/asm-generic/errno-base.h" 1
# 5 "include/asm-generic/errno.h" 2
# 1 "arch/arm/include/generated/asm/errno.h" 2
# 5 "include/linux/errno.h" 2
# 102 "include/linux/dynamic_debug.h" 2
static inline __attribute__((always_inline)) int ddebug_remove_module(const char *mod)
{
return 0;
}
static inline __attribute__((always_inline)) int ddebug_dyndbg_module_param_cb(char *param, char *val,
const char *modname)
{
if (strstr(param, "dyndbg")) {
printk("<4>" "dyndbg param is supported only in "
"CONFIG_DYNAMIC_DEBUG builds\n");
return 0;
}
return -22;
}
# 24 "include/linux/kernel.h" 2
# 108 "include/linux/kernel.h"
# 1 "/home/shawn/source/linux/arch/arm/include/asm/div64.h" 1
# 1 "/home/shawn/source/linux/arch/arm/include/asm/compiler.h" 1
# 6 "/home/shawn/source/linux/arch/arm/include/asm/div64.h" 2
# 63 "/home/shawn/source/linux/arch/arm/include/asm/div64.h"
# 1 "/home/shawn/source/linux/arch/arm/include/asm/bug.h" 1
# 59 "/home/shawn/source/linux/arch/arm/include/asm/bug.h"
# 1 "include/asm-generic/bug.h" 1
# 10 "include/asm-generic/bug.h"
struct bug_entry {
unsigned long bug_addr;
const char *file;
unsigned short line;
unsigned short flags;
};
# 64 "include/asm-generic/bug.h"
extern __attribute__((format(printf, 3, 4)))
void warn_slowpath_fmt(const char *file, const int line,
const char *fmt, ...);
extern __attribute__((format(printf, 4, 5)))
void warn_slowpath_fmt_taint(const char *file, const int line, unsigned taint,
const char *fmt, ...);
extern void warn_slowpath_null(const char *file, const int line);
# 60 "/home/shawn/source/linux/arch/arm/include/asm/bug.h" 2
struct pt_regs;
void die(const char *msg, struct pt_regs *regs, int err);
struct siginfo;
void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info,
unsigned long err, unsigned long trap);
# 76 "/home/shawn/source/linux/arch/arm/include/asm/bug.h"
void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
struct pt_regs *),
int sig, int code, const char *name);
void hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int,
struct pt_regs *),
int sig, int code, const char *name);
extern void c_backtrace(unsigned long fp, int pmode);
struct mm_struct;
extern void show_pte(struct mm_struct *mm, unsigned long addr);
extern void __show_regs(struct pt_regs *);
# 64 "/home/shawn/source/linux/arch/arm/include/asm/div64.h" 2
# 109 "include/linux/kernel.h" 2
# 137 "include/linux/kernel.h"
struct completion;
struct pt_regs;
struct user;
# 163 "include/linux/kernel.h"
static inline __attribute__((always_inline)) void __might_sleep(const char *file, int line,
int preempt_offset) { }
# 196 "include/linux/kernel.h"
static inline __attribute__((always_inline)) void might_fault(void)
{
do { do { } while (0); } while (0);
}
extern struct atomic_notifier_head panic_notifier_list;
extern long (*panic_blink)(int state);
__attribute__((format(printf, 1, 2)))
void panic(const char *fmt, ...)
__attribute__((noreturn)) __attribute__((__cold__));
extern void oops_enter(void);
extern void oops_exit(void);
void print_oops_end_marker(void);
extern int oops_may_print(void);
void do_exit(long error_code)
__attribute__((noreturn));
void complete_and_exit(struct completion *, long)
__attribute__((noreturn));
int __attribute__((warn_unused_result)) _kstrtoul(const char *s, unsigned int base, unsigned long *res);
int __attribute__((warn_unused_result)) _kstrtol(const char *s, unsigned int base, long *res);
int __attribute__((warn_unused_result)) kstrtoull(const char *s, unsigned int base, unsigned long long *res);
int __attribute__((warn_unused_result)) kstrtoll(const char *s, unsigned int base, long long *res);
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtoul(const char *s, unsigned int base, unsigned long *res)
{
if (sizeof(unsigned long) == sizeof(unsigned long long) &&
__alignof__(unsigned long) == __alignof__(unsigned long long))
return kstrtoull(s, base, (unsigned long long *)res);
else
return _kstrtoul(s, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtol(const char *s, unsigned int base, long *res)
{
if (sizeof(long) == sizeof(long long) &&
__alignof__(long) == __alignof__(long long))
return kstrtoll(s, base, (long long *)res);
else
return _kstrtol(s, base, res);
}
int __attribute__((warn_unused_result)) kstrtouint(const char *s, unsigned int base, unsigned int *res);
int __attribute__((warn_unused_result)) kstrtoint(const char *s, unsigned int base, int *res);
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtou64(const char *s, unsigned int base, u64 *res)
{
return kstrtoull(s, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtos64(const char *s, unsigned int base, s64 *res)
{
return kstrtoll(s, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtou32(const char *s, unsigned int base, u32 *res)
{
return kstrtouint(s, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtos32(const char *s, unsigned int base, s32 *res)
{
return kstrtoint(s, base, res);
}
int __attribute__((warn_unused_result)) kstrtou16(const char *s, unsigned int base, u16 *res);
int __attribute__((warn_unused_result)) kstrtos16(const char *s, unsigned int base, s16 *res);
int __attribute__((warn_unused_result)) kstrtou8(const char *s, unsigned int base, u8 *res);
int __attribute__((warn_unused_result)) kstrtos8(const char *s, unsigned int base, s8 *res);
int __attribute__((warn_unused_result)) kstrtoull_from_user(const char *s, size_t count, unsigned int base, unsigned long long *res);
int __attribute__((warn_unused_result)) kstrtoll_from_user(const char *s, size_t count, unsigned int base, long long *res);
int __attribute__((warn_unused_result)) kstrtoul_from_user(const char *s, size_t count, unsigned int base, unsigned long *res);
int __attribute__((warn_unused_result)) kstrtol_from_user(const char *s, size_t count, unsigned int base, long *res);
int __attribute__((warn_unused_result)) kstrtouint_from_user(const char *s, size_t count, unsigned int base, unsigned int *res);
int __attribute__((warn_unused_result)) kstrtoint_from_user(const char *s, size_t count, unsigned int base, int *res);
int __attribute__((warn_unused_result)) kstrtou16_from_user(const char *s, size_t count, unsigned int base, u16 *res);
int __attribute__((warn_unused_result)) kstrtos16_from_user(const char *s, size_t count, unsigned int base, s16 *res);
int __attribute__((warn_unused_result)) kstrtou8_from_user(const char *s, size_t count, unsigned int base, u8 *res);
int __attribute__((warn_unused_result)) kstrtos8_from_user(const char *s, size_t count, unsigned int base, s8 *res);
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtou64_from_user(const char *s, size_t count, unsigned int base, u64 *res)
{
return kstrtoull_from_user(s, count, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtos64_from_user(const char *s, size_t count, unsigned int base, s64 *res)
{
return kstrtoll_from_user(s, count, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtou32_from_user(const char *s, size_t count, unsigned int base, u32 *res)
{
return kstrtouint_from_user(s, count, base, res);
}
static inline __attribute__((always_inline)) int __attribute__((warn_unused_result)) kstrtos32_from_user(const char *s, size_t count, unsigned int base, s32 *res)
{
return kstrtoint_from_user(s, count, base, res);
}
extern unsigned long simple_strtoul(const char *,char **,unsigned int);
extern long simple_strtol(const char *,char **,unsigned int);
extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
extern long long simple_strtoll(const char *,char **,unsigned int);
extern int num_to_str(char *buf, int size, unsigned long long num);
extern __attribute__((format(printf, 2, 3))) int sprintf(char *buf, const char * fmt, ...);
extern __attribute__((format(printf, 2, 0))) int vsprintf(char *buf, const char *, va_list);
extern __attribute__((format(printf, 3, 4)))
int snprintf(char *buf, size_t size, const char *fmt, ...);
extern __attribute__((format(printf, 3, 0)))
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
extern __attribute__((format(printf, 3, 4)))
int scnprintf(char *buf, size_t size, const char *fmt, ...);
extern __attribute__((format(printf, 3, 0)))
int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
extern __attribute__((format(printf, 2, 3)))
char *kasprintf(gfp_t gfp, const char *fmt, ...);
extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
extern __attribute__((format(scanf, 2, 3)))
int sscanf(const char *, const char *, ...);
extern __attribute__((format(scanf, 2, 0)))
int vsscanf(const char *, const char *, va_list);
extern int get_option(char **str, int *pint);
extern char *get_options(const char *str, int nints, int *ints);
extern unsigned long long memparse(const char *ptr, char **retptr);
extern int core_kernel_text(unsigned long addr);
extern int core_kernel_data(unsigned long addr);
extern int __kernel_text_address(unsigned long addr);
extern int kernel_text_address(unsigned long addr);
extern int func_ptr_is_kernel_text(void *ptr);
struct pid;
extern struct pid *session_of_pgrp(struct pid *pgrp);
unsigned long int_sqrt(unsigned long);
extern void bust_spinlocks(int yes);
extern void wake_up_klogd(void);
extern int oops_in_progress;
extern int panic_timeout;
extern int panic_on_oops;
extern int panic_on_unrecovered_nmi;
extern int panic_on_io_nmi;
extern int sysctl_panic_on_stackoverflow;
extern const char *print_tainted(void);
extern void add_taint(unsigned flag);
extern int test_taint(unsigned flag);
extern unsigned long get_taint(void);
extern int root_mountflags;
extern bool early_boot_irqs_disabled;
extern enum system_states {
SYSTEM_BOOTING,
SYSTEM_RUNNING,
SYSTEM_HALT,
SYSTEM_POWER_OFF,
SYSTEM_RESTART,
SYSTEM_SUSPEND_DISK,
} system_state;
# 396 "include/linux/kernel.h"
extern const char hex_asc[];
static inline __attribute__((always_inline)) char *hex_byte_pack(char *buf, u8 byte)
{
*buf++ = hex_asc[((byte) & 0xf0) >> 4];
*buf++ = hex_asc[((byte) & 0x0f)];
return buf;
}
static inline __attribute__((always_inline)) char * __attribute__((deprecated)) pack_hex_byte(char *buf, u8 byte)
{
return hex_byte_pack(buf, byte);
}
extern int hex_to_bin(char ch);
extern int __attribute__((warn_unused_result)) hex2bin(u8 *dst, const char *src, size_t count);
# 436 "include/linux/kernel.h"
void tracing_off_permanent(void);
enum ftrace_dump_mode {
DUMP_NONE,
DUMP_ALL,
DUMP_ORIG,
};
void tracing_on(void);
void tracing_off(void);
int tracing_is_on(void);
extern void tracing_start(void);
extern void tracing_stop(void);
extern void ftrace_off_permanent(void);
static inline __attribute__((always_inline)) __attribute__((format(printf, 1, 2)))
void ____trace_printk_check_format(const char *fmt, ...)
{
}
# 497 "include/linux/kernel.h"
extern __attribute__((format(printf, 2, 3)))
int __trace_bprintk(unsigned long ip, const char *fmt, ...);
extern __attribute__((format(printf, 2, 3)))
int __trace_printk(unsigned long ip, const char *fmt, ...);
extern void trace_dump_stack(void);
# 522 "include/linux/kernel.h"
extern int
__ftrace_vbprintk(unsigned long ip, const char *fmt, va_list ap);
extern int
__ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
# 709 "include/linux/kernel.h"
extern int do_sysinfo(struct sysinfo *info);
# 16 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h" 2
# 1 "/home/shawn/source/linux/arch/arm/include/asm/unaligned.h" 1
# 1 "include/linux/unaligned/le_byteshift.h" 1
static inline __attribute__((always_inline)) u16 __get_unaligned_le16(const u8 *p)
{
return p[0] | p[1] << 8;
}
static inline __attribute__((always_inline)) u32 __get_unaligned_le32(const u8 *p)
{
return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24;
}
static inline __attribute__((always_inline)) u64 __get_unaligned_le64(const u8 *p)
{
return (u64)__get_unaligned_le32(p + 4) << 32 |
__get_unaligned_le32(p);
}
static inline __attribute__((always_inline)) void __put_unaligned_le16(u16 val, u8 *p)
{
*p++ = val;
*p++ = val >> 8;
}
static inline __attribute__((always_inline)) void __put_unaligned_le32(u32 val, u8 *p)
{
__put_unaligned_le16(val >> 16, p + 2);
__put_unaligned_le16(val, p);
}
static inline __attribute__((always_inline)) void __put_unaligned_le64(u64 val, u8 *p)
{
__put_unaligned_le32(val >> 32, p + 4);
__put_unaligned_le32(val, p);
}
static inline __attribute__((always_inline)) u16 get_unaligned_le16(const void *p)
{
return __get_unaligned_le16((const u8 *)p);
}
static inline __attribute__((always_inline)) u32 get_unaligned_le32(const void *p)
{
return __get_unaligned_le32((const u8 *)p);
}
static inline __attribute__((always_inline)) u64 get_unaligned_le64(const void *p)
{
return __get_unaligned_le64((const u8 *)p);
}
static inline __attribute__((always_inline)) void put_unaligned_le16(u16 val, void *p)
{
__put_unaligned_le16(val, p);
}
static inline __attribute__((always_inline)) void put_unaligned_le32(u32 val, void *p)
{
__put_unaligned_le32(val, p);
}
static inline __attribute__((always_inline)) void put_unaligned_le64(u64 val, void *p)
{
__put_unaligned_le64(val, p);
}
# 5 "/home/shawn/source/linux/arch/arm/include/asm/unaligned.h" 2
# 1 "include/linux/unaligned/be_byteshift.h" 1
static inline __attribute__((always_inline)) u16 __get_unaligned_be16(const u8 *p)
{
return p[0] << 8 | p[1];
}
static inline __attribute__((always_inline)) u32 __get_unaligned_be32(const u8 *p)
{
return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
}
static inline __attribute__((always_inline)) u64 __get_unaligned_be64(const u8 *p)
{
return (u64)__get_unaligned_be32(p) << 32 |
__get_unaligned_be32(p + 4);
}
static inline __attribute__((always_inline)) void __put_unaligned_be16(u16 val, u8 *p)
{
*p++ = val >> 8;
*p++ = val;
}
static inline __attribute__((always_inline)) void __put_unaligned_be32(u32 val, u8 *p)
{
__put_unaligned_be16(val >> 16, p);
__put_unaligned_be16(val, p + 2);
}
static inline __attribute__((always_inline)) void __put_unaligned_be64(u64 val, u8 *p)
{
__put_unaligned_be32(val >> 32, p);
__put_unaligned_be32(val, p + 4);
}
static inline __attribute__((always_inline)) u16 get_unaligned_be16(const void *p)
{
return __get_unaligned_be16((const u8 *)p);
}
static inline __attribute__((always_inline)) u32 get_unaligned_be32(const void *p)
{
return __get_unaligned_be32((const u8 *)p);
}
static inline __attribute__((always_inline)) u64 get_unaligned_be64(const void *p)
{
return __get_unaligned_be64((const u8 *)p);
}
static inline __attribute__((always_inline)) void put_unaligned_be16(u16 val, void *p)
{
__put_unaligned_be16(val, p);
}
static inline __attribute__((always_inline)) void put_unaligned_be32(u32 val, void *p)
{
__put_unaligned_be32(val, p);
}
static inline __attribute__((always_inline)) void put_unaligned_be64(u64 val, void *p)
{
__put_unaligned_be64(val, p);
}
# 6 "/home/shawn/source/linux/arch/arm/include/asm/unaligned.h" 2
# 1 "include/linux/unaligned/generic.h" 1
extern void __bad_unaligned_access_size(void);
# 7 "/home/shawn/source/linux/arch/arm/include/asm/unaligned.h" 2
# 17 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h" 2
# 109 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h"
static struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode,
uint32_t dict_max);
static enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s,
uint8_t props);
static enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
struct xz_buf *b);
static void xz_dec_lzma2_end(struct xz_dec_lzma2 *s);
static struct xz_dec_bcj *xz_dec_bcj_create(bool single_call);
static enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id);
static enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s,
struct xz_dec_lzma2 *lzma2,
struct xz_buf *b);
# 146 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 2
# 177 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c"
static bool memeq(const void *a, const void *b, size_t size)
{
const uint8_t *x = a;
const uint8_t *y = b;
size_t i;
for (i = 0; i < size; ++i)
if (x[i] != y[i])
return false;
return true;
}
static void memzero(void *buf, size_t size)
{
uint8_t *b = buf;
uint8_t *e = b + size;
while (b != e)
*b++ = '\0';
}
# 233 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c"
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_crc32.c" 1
# 18 "arch/arm/boot/compressed/../../../../lib/xz/xz_crc32.c"
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_private.h" 1
# 19 "arch/arm/boot/compressed/../../../../lib/xz/xz_crc32.c" 2
# 28 "arch/arm/boot/compressed/../../../../lib/xz/xz_crc32.c"
uint32_t xz_crc32_table[256];
static void xz_crc32_init(void)
{
const uint32_t poly = 0xEDB88320;
uint32_t i;
uint32_t j;
uint32_t r;
for (i = 0; i < 256; ++i) {
r = i;
for (j = 0; j < 8; ++j)
r = (r >> 1) ^ (poly & ~((r & 1) - 1));
xz_crc32_table[i] = r;
}
return;
}
static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
{
crc = ~crc;
while (size != 0) {
crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
--size;
}
return ~crc;
}
# 234 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 2
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c" 1
# 11 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_stream.h" 1
# 43 "arch/arm/boot/compressed/../../../../lib/xz/xz_stream.h"
typedef uint64_t vli_type;
# 52 "arch/arm/boot/compressed/../../../../lib/xz/xz_stream.h"
enum xz_check {
XZ_CHECK_NONE = 0,
XZ_CHECK_CRC32 = 1,
XZ_CHECK_CRC64 = 4,
XZ_CHECK_SHA256 = 10
};
# 12 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c" 2
struct xz_dec_hash {
vli_type unpadded;
vli_type uncompressed;
uint32_t crc32;
};
struct xz_dec {
enum {
SEQ_STREAM_HEADER,
SEQ_BLOCK_START,
SEQ_BLOCK_HEADER,
SEQ_BLOCK_UNCOMPRESS,
SEQ_BLOCK_PADDING,
SEQ_BLOCK_CHECK,
SEQ_INDEX,
SEQ_INDEX_PADDING,
SEQ_INDEX_CRC32,
SEQ_STREAM_FOOTER
} sequence;
uint32_t pos;
vli_type vli;
size_t in_start;
size_t out_start;
uint32_t crc32;
enum xz_check check_type;
enum xz_mode mode;
bool allow_buf_error;
struct {
vli_type compressed;
vli_type uncompressed;
uint32_t size;
} block_header;
struct {
vli_type compressed;
vli_type uncompressed;
vli_type count;
struct xz_dec_hash hash;
} block;
struct {
enum {
SEQ_INDEX_COUNT,
SEQ_INDEX_UNPADDED,
SEQ_INDEX_UNCOMPRESSED
} sequence;
vli_type size;
vli_type count;
struct xz_dec_hash hash;
} index;
# 125 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
struct {
size_t pos;
size_t size;
uint8_t buf[1024];
} temp;
struct xz_dec_lzma2 *lzma2;
struct xz_dec_bcj *bcj;
bool bcj_active;
};
# 157 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
static bool fill_temp(struct xz_dec *s, struct xz_buf *b)
{
size_t copy_size = ({ size_t __min1 = (b->in_size - b->in_pos); size_t __min2 = (s->temp.size - s->temp.pos); __min1 < __min2 ? __min1: __min2; })
;
memcpy(s->temp.buf + s->temp.pos, b->in + b->in_pos, copy_size);
b->in_pos += copy_size;
s->temp.pos += copy_size;
if (s->temp.pos == s->temp.size) {
s->temp.pos = 0;
return true;
}
return false;
}
static enum xz_ret dec_vli(struct xz_dec *s, const uint8_t *in,
size_t *in_pos, size_t in_size)
{
uint8_t byte;
if (s->pos == 0)
s->vli = 0;
while (*in_pos < in_size) {
byte = in[*in_pos];
++*in_pos;
s->vli |= (vli_type)(byte & 0x7F) << s->pos;
if ((byte & 0x80) == 0) {
if (byte == 0 && s->pos != 0)
return XZ_DATA_ERROR;
s->pos = 0;
return XZ_STREAM_END;
}
s->pos += 7;
if (s->pos == 7 * (sizeof(vli_type) * 8 / 7))
return XZ_DATA_ERROR;
}
return XZ_OK;
}
# 218 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
static enum xz_ret dec_block(struct xz_dec *s, struct xz_buf *b)
{
enum xz_ret ret;
s->in_start = b->in_pos;
s->out_start = b->out_pos;
if (s->bcj_active)
ret = xz_dec_bcj_run(s->bcj, s->lzma2, b);
else
ret = xz_dec_lzma2_run(s->lzma2, b);
s->block.compressed += b->in_pos - s->in_start;
s->block.uncompressed += b->out_pos - s->out_start;
if (s->block.compressed > s->block_header.compressed
|| s->block.uncompressed
> s->block_header.uncompressed)
return XZ_DATA_ERROR;
if (s->check_type == XZ_CHECK_CRC32)
s->crc32 = xz_crc32(b->out + s->out_start,
b->out_pos - s->out_start, s->crc32);
if (ret == XZ_STREAM_END) {
if (s->block_header.compressed != ((vli_type)-1)
&& s->block_header.compressed
!= s->block.compressed)
return XZ_DATA_ERROR;
if (s->block_header.uncompressed != ((vli_type)-1)
&& s->block_header.uncompressed
!= s->block.uncompressed)
return XZ_DATA_ERROR;
s->block.hash.unpadded += s->block_header.size
+ s->block.compressed;
if (s->check_type == XZ_CHECK_CRC32)
s->block.hash.unpadded += 4;
s->block.hash.uncompressed += s->block.uncompressed;
s->block.hash.crc32 = xz_crc32(
(const uint8_t *)&s->block.hash,
sizeof(s->block.hash), s->block.hash.crc32);
++s->block.count;
}
return ret;
}
static void index_update(struct xz_dec *s, const struct xz_buf *b)
{
size_t in_used = b->in_pos - s->in_start;
s->index.size += in_used;
s->crc32 = xz_crc32(b->in + s->in_start, in_used, s->crc32);
}
# 296 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b)
{
enum xz_ret ret;
do {
ret = dec_vli(s, b->in, &b->in_pos, b->in_size);
if (ret != XZ_STREAM_END) {
index_update(s, b);
return ret;
}
switch (s->index.sequence) {
case SEQ_INDEX_COUNT:
s->index.count = s->vli;
if (s->index.count != s->block.count)
return XZ_DATA_ERROR;
s->index.sequence = SEQ_INDEX_UNPADDED;
break;
case SEQ_INDEX_UNPADDED:
s->index.hash.unpadded += s->vli;
s->index.sequence = SEQ_INDEX_UNCOMPRESSED;
break;
case SEQ_INDEX_UNCOMPRESSED:
s->index.hash.uncompressed += s->vli;
s->index.hash.crc32 = xz_crc32(
(const uint8_t *)&s->index.hash,
sizeof(s->index.hash),
s->index.hash.crc32);
--s->index.count;
s->index.sequence = SEQ_INDEX_UNPADDED;
break;
}
} while (s->index.count > 0);
return XZ_STREAM_END;
}
static enum xz_ret crc32_validate(struct xz_dec *s, struct xz_buf *b)
{
do {
if (b->in_pos == b->in_size)
return XZ_OK;
if (((s->crc32 >> s->pos) & 0xFF) != b->in[b->in_pos++])
return XZ_DATA_ERROR;
s->pos += 8;
} while (s->pos < 32);
s->crc32 = 0;
s->pos = 0;
return XZ_STREAM_END;
}
# 387 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
static enum xz_ret dec_stream_header(struct xz_dec *s)
{
if (!memeq(s->temp.buf, "\3757zXZ", 6))
return XZ_FORMAT_ERROR;
if (xz_crc32(s->temp.buf + 6, 2, 0)
!= __le32_to_cpup((const uint32_t *)(s->temp.buf + 6 + 2)))
return XZ_DATA_ERROR;
if (s->temp.buf[6] != 0)
return XZ_OPTIONS_ERROR;
s->check_type = s->temp.buf[6 + 1];
# 414 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
if (s->check_type > XZ_CHECK_CRC32)
return XZ_OPTIONS_ERROR;
return XZ_OK;
}
static enum xz_ret dec_stream_footer(struct xz_dec *s)
{
if (!memeq(s->temp.buf + 10, "YZ", 2))
return XZ_DATA_ERROR;
if (xz_crc32(s->temp.buf + 4, 6, 0) != __le32_to_cpup((const uint32_t *)(s->temp.buf)))
return XZ_DATA_ERROR;
if ((s->index.size >> 2) != __le32_to_cpup((const uint32_t *)(s->temp.buf + 4)))
return XZ_DATA_ERROR;
if (s->temp.buf[8] != 0 || s->temp.buf[9] != s->check_type)
return XZ_DATA_ERROR;
return XZ_STREAM_END;
}
static enum xz_ret dec_block_header(struct xz_dec *s)
{
enum xz_ret ret;
s->temp.size -= 4;
if (xz_crc32(s->temp.buf, s->temp.size, 0)
!= __le32_to_cpup((const uint32_t *)(s->temp.buf + s->temp.size)))
return XZ_DATA_ERROR;
s->temp.pos = 2;
if (s->temp.buf[1] & 0x3E)
return XZ_OPTIONS_ERROR;
if (s->temp.buf[1] & 0x40) {
if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size)
!= XZ_STREAM_END)
return XZ_DATA_ERROR;
s->block_header.compressed = s->vli;
} else {
s->block_header.compressed = ((vli_type)-1);
}
if (s->temp.buf[1] & 0x80) {
if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size)
!= XZ_STREAM_END)
return XZ_DATA_ERROR;
s->block_header.uncompressed = s->vli;
} else {
s->block_header.uncompressed = ((vli_type)-1);
}
s->bcj_active = s->temp.buf[1] & 0x01;
if (s->bcj_active) {
if (s->temp.size - s->temp.pos < 2)
return XZ_OPTIONS_ERROR;
ret = xz_dec_bcj_reset(s->bcj, s->temp.buf[s->temp.pos++]);
if (ret != XZ_OK)
return ret;
if (s->temp.buf[s->temp.pos++] != 0x00)
return XZ_OPTIONS_ERROR;
}
if (s->temp.size - s->temp.pos < 2)
return XZ_DATA_ERROR;
if (s->temp.buf[s->temp.pos++] != 0x21)
return XZ_OPTIONS_ERROR;
if (s->temp.buf[s->temp.pos++] != 0x01)
return XZ_OPTIONS_ERROR;
if (s->temp.size - s->temp.pos < 1)
return XZ_DATA_ERROR;
ret = xz_dec_lzma2_reset(s->lzma2, s->temp.buf[s->temp.pos++]);
if (ret != XZ_OK)
return ret;
while (s->temp.pos < s->temp.size)
if (s->temp.buf[s->temp.pos++] != 0x00)
return XZ_OPTIONS_ERROR;
s->temp.pos = 0;
s->block.compressed = 0;
s->block.uncompressed = 0;
return XZ_OK;
}
static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
{
enum xz_ret ret;
s->in_start = b->in_pos;
while (true) {
switch (s->sequence) {
case SEQ_STREAM_HEADER:
# 570 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
if (!fill_temp(s, b))
return XZ_OK;
# 580 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
s->sequence = SEQ_BLOCK_START;
ret = dec_stream_header(s);
if (ret != XZ_OK)
return ret;
case SEQ_BLOCK_START:
if (b->in_pos == b->in_size)
return XZ_OK;
if (b->in[b->in_pos] == 0) {
s->in_start = b->in_pos++;
s->sequence = SEQ_INDEX;
break;
}
s->block_header.size
= ((uint32_t)b->in[b->in_pos] + 1) * 4;
s->temp.size = s->block_header.size;
s->temp.pos = 0;
s->sequence = SEQ_BLOCK_HEADER;
case SEQ_BLOCK_HEADER:
if (!fill_temp(s, b))
return XZ_OK;
ret = dec_block_header(s);
if (ret != XZ_OK)
return ret;
s->sequence = SEQ_BLOCK_UNCOMPRESS;
case SEQ_BLOCK_UNCOMPRESS:
ret = dec_block(s, b);
if (ret != XZ_STREAM_END)
return ret;
s->sequence = SEQ_BLOCK_PADDING;
case SEQ_BLOCK_PADDING:
while (s->block.compressed & 3) {
if (b->in_pos == b->in_size)
return XZ_OK;
if (b->in[b->in_pos++] != 0)
return XZ_DATA_ERROR;
++s->block.compressed;
}
s->sequence = SEQ_BLOCK_CHECK;
case SEQ_BLOCK_CHECK:
if (s->check_type == XZ_CHECK_CRC32) {
ret = crc32_validate(s, b);
if (ret != XZ_STREAM_END)
return ret;
}
s->sequence = SEQ_BLOCK_START;
break;
case SEQ_INDEX:
ret = dec_index(s, b);
if (ret != XZ_STREAM_END)
return ret;
s->sequence = SEQ_INDEX_PADDING;
case SEQ_INDEX_PADDING:
while ((s->index.size + (b->in_pos - s->in_start))
& 3) {
if (b->in_pos == b->in_size) {
index_update(s, b);
return XZ_OK;
}
if (b->in[b->in_pos++] != 0)
return XZ_DATA_ERROR;
}
index_update(s, b);
if (!memeq(&s->block.hash, &s->index.hash,
sizeof(s->block.hash)))
return XZ_DATA_ERROR;
s->sequence = SEQ_INDEX_CRC32;
case SEQ_INDEX_CRC32:
ret = crc32_validate(s, b);
if (ret != XZ_STREAM_END)
return ret;
s->temp.size = 12;
s->sequence = SEQ_STREAM_FOOTER;
case SEQ_STREAM_FOOTER:
if (!fill_temp(s, b))
return XZ_OK;
return dec_stream_footer(s);
}
}
}
# 734 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_stream.c"
static enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b)
{
size_t in_start;
size_t out_start;
enum xz_ret ret;
if (((s->mode) == XZ_SINGLE))
xz_dec_reset(s);
in_start = b->in_pos;
out_start = b->out_pos;
ret = dec_main(s, b);
if (((s->mode) == XZ_SINGLE)) {
if (ret == XZ_OK)
ret = b->in_pos == b->in_size
? XZ_DATA_ERROR : XZ_BUF_ERROR;
if (ret != XZ_STREAM_END) {
b->in_pos = in_start;
b->out_pos = out_start;
}
} else if (ret == XZ_OK && in_start == b->in_pos
&& out_start == b->out_pos) {
if (s->allow_buf_error)
ret = XZ_BUF_ERROR;
s->allow_buf_error = true;
} else {
s->allow_buf_error = false;
}
return ret;
}
static struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max)
{
struct xz_dec *s = malloc(sizeof(*s));
if (s == ((void *)0))
return ((void *)0);
s->mode = mode;
s->bcj = xz_dec_bcj_create(((mode) == XZ_SINGLE));
if (s->bcj == ((void *)0))
goto error_bcj;
s->lzma2 = xz_dec_lzma2_create(mode, dict_max);
if (s->lzma2 == ((void *)0))
goto error_lzma2;
xz_dec_reset(s);
return s;
error_lzma2:
free(s->bcj);
error_bcj:
free(s);
return ((void *)0);
}
static void xz_dec_reset(struct xz_dec *s)
{
s->sequence = SEQ_STREAM_HEADER;
s->allow_buf_error = false;
s->pos = 0;
s->crc32 = 0;
memzero(&s->block, sizeof(s->block));
memzero(&s->index, sizeof(s->index));
s->temp.pos = 0;
s->temp.size = 12;
}
static void xz_dec_end(struct xz_dec *s)
{
if (s != ((void *)0)) {
xz_dec_lzma2_end(s->lzma2);
free(s->bcj);
free(s);
}
}
# 235 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 2
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c" 1
# 12 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_lzma2.h" 1
# 42 "arch/arm/boot/compressed/../../../../lib/xz/xz_lzma2.h"
enum lzma_state {
STATE_LIT_LIT,
STATE_MATCH_LIT_LIT,
STATE_REP_LIT_LIT,
STATE_SHORTREP_LIT_LIT,
STATE_MATCH_LIT,
STATE_REP_LIT,
STATE_SHORTREP_LIT,
STATE_LIT_MATCH,
STATE_LIT_LONGREP,
STATE_LIT_SHORTREP,
STATE_NONLIT_MATCH,
STATE_NONLIT_REP
};
# 64 "arch/arm/boot/compressed/../../../../lib/xz/xz_lzma2.h"
static inline __attribute__((always_inline)) void lzma_state_literal(enum lzma_state *state)
{
if (*state <= STATE_SHORTREP_LIT_LIT)
*state = STATE_LIT_LIT;
else if (*state <= STATE_LIT_SHORTREP)
*state -= 3;
else
*state -= 6;
}
static inline __attribute__((always_inline)) void lzma_state_match(enum lzma_state *state)
{
*state = *state < 7 ? STATE_LIT_MATCH : STATE_NONLIT_MATCH;
}
static inline __attribute__((always_inline)) void lzma_state_long_rep(enum lzma_state *state)
{
*state = *state < 7 ? STATE_LIT_LONGREP : STATE_NONLIT_REP;
}
static inline __attribute__((always_inline)) void lzma_state_short_rep(enum lzma_state *state)
{
*state = *state < 7 ? STATE_LIT_SHORTREP : STATE_NONLIT_REP;
}
static inline __attribute__((always_inline)) bool lzma_state_is_literal(enum lzma_state state)
{
return state < 7;
}
# 147 "arch/arm/boot/compressed/../../../../lib/xz/xz_lzma2.h"
static inline __attribute__((always_inline)) uint32_t lzma_get_dist_state(uint32_t len)
{
return len < 4 + 2
? len - 2 : 4 - 1;
}
# 13 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c" 2
# 44 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
struct dictionary {
uint8_t *buf;
size_t start;
size_t pos;
size_t full;
size_t limit;
size_t end;
uint32_t size;
uint32_t size_max;
uint32_t allocated;
enum xz_mode mode;
};
struct rc_dec {
uint32_t range;
uint32_t code;
uint32_t init_bytes_left;
const uint8_t *in;
size_t in_pos;
size_t in_limit;
};
struct lzma_len_dec {
uint16_t choice;
uint16_t choice2;
uint16_t low[(1 << 4)][(1 << 3)];
uint16_t mid[(1 << 4)][(1 << 3)];
uint16_t high[(1 << 8)];
};
struct lzma_dec {
uint32_t rep0;
uint32_t rep1;
uint32_t rep2;
uint32_t rep3;
enum lzma_state state;
uint32_t len;
uint32_t lc;
uint32_t literal_pos_mask;
uint32_t pos_mask;
uint16_t is_match[12][(1 << 4)];
uint16_t is_rep[12];
uint16_t is_rep0[12];
uint16_t is_rep1[12];
uint16_t is_rep2[12];
uint16_t is_rep0_long[12][(1 << 4)];
uint16_t dist_slot[4][(1 << 6)];
uint16_t dist_special[(1 << (14 / 2)) - 14];
uint16_t dist_align[(1 << 4)];
struct lzma_len_dec match_len_dec;
struct lzma_len_dec rep_len_dec;
uint16_t literal[(1 << 4)][0x300];
};
struct lzma2_dec {
enum lzma2_seq {
SEQ_CONTROL,
SEQ_UNCOMPRESSED_1,
SEQ_UNCOMPRESSED_2,
SEQ_COMPRESSED_0,
SEQ_COMPRESSED_1,
SEQ_PROPERTIES,
SEQ_LZMA_PREPARE,
SEQ_LZMA_RUN,
SEQ_COPY
} sequence;
enum lzma2_seq next_sequence;
uint32_t uncompressed;
uint32_t compressed;
bool need_dict_reset;
bool need_props;
};
struct xz_dec_lzma2 {
# 263 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
struct rc_dec rc;
struct dictionary dict;
struct lzma2_dec lzma2;
struct lzma_dec lzma;
struct {
uint32_t size;
uint8_t buf[3 * 21];
} temp;
};
# 286 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
static void dict_reset(struct dictionary *dict, struct xz_buf *b)
{
if (((dict->mode) == XZ_SINGLE)) {
dict->buf = b->out + b->out_pos;
dict->end = b->out_size - b->out_pos;
}
dict->start = 0;
dict->pos = 0;
dict->limit = 0;
dict->full = 0;
}
static void dict_limit(struct dictionary *dict, size_t out_max)
{
if (dict->end - dict->pos <= out_max)
dict->limit = dict->end;
else
dict->limit = dict->pos + out_max;
}
static inline __attribute__((always_inline)) bool dict_has_space(const struct dictionary *dict)
{
return dict->pos < dict->limit;
}
static inline __attribute__((always_inline)) uint32_t dict_get(const struct dictionary *dict, uint32_t dist)
{
size_t offset = dict->pos - dist - 1;
if (dist >= dict->pos)
offset += dict->end;
return dict->full > 0 ? dict->buf[offset] : 0;
}
static inline __attribute__((always_inline)) void dict_put(struct dictionary *dict, uint8_t byte)
{
dict->buf[dict->pos++] = byte;
if (dict->full < dict->pos)
dict->full = dict->pos;
}
static bool dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist)
{
size_t back;
uint32_t left;
if (dist >= dict->full || dist >= dict->size)
return false;
left = ({ size_t __min1 = (dict->limit - dict->pos); size_t __min2 = (*len); __min1 < __min2 ? __min1: __min2; });
*len -= left;
back = dict->pos - dist - 1;
if (dist >= dict->pos)
back += dict->end;
do {
dict->buf[dict->pos++] = dict->buf[back++];
if (back == dict->end)
back = 0;
} while (--left > 0);
if (dict->full < dict->pos)
dict->full = dict->pos;
return true;
}
static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
uint32_t *left)
{
size_t copy_size;
while (*left > 0 && b->in_pos < b->in_size
&& b->out_pos < b->out_size) {
copy_size = ({ typeof(b->in_size - b->in_pos) _min1 = (b->in_size - b->in_pos); typeof(b->out_size - b->out_pos) _min2 = (b->out_size - b->out_pos); (void) (&_min1 == &_min2); _min1 < _min2 ? _min1 : _min2; })
;
if (copy_size > dict->end - dict->pos)
copy_size = dict->end - dict->pos;
if (copy_size > *left)
copy_size = *left;
*left -= copy_size;
memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size);
dict->pos += copy_size;
if (dict->full < dict->pos)
dict->full = dict->pos;
if (((dict->mode) != XZ_SINGLE)) {
if (dict->pos == dict->end)
dict->pos = 0;
memcpy(b->out + b->out_pos, b->in + b->in_pos,
copy_size);
}
dict->start = dict->pos;
b->out_pos += copy_size;
b->in_pos += copy_size;
}
}
static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b)
{
size_t copy_size = dict->pos - dict->start;
if (((dict->mode) != XZ_SINGLE)) {
if (dict->pos == dict->end)
dict->pos = 0;
memcpy(b->out + b->out_pos, dict->buf + dict->start,
copy_size);
}
dict->start = dict->pos;
b->out_pos += copy_size;
return copy_size;
}
static void rc_reset(struct rc_dec *rc)
{
rc->range = (uint32_t)-1;
rc->code = 0;
rc->init_bytes_left = 5;
}
static bool rc_read_init(struct rc_dec *rc, struct xz_buf *b)
{
while (rc->init_bytes_left > 0) {
if (b->in_pos == b->in_size)
return false;
rc->code = (rc->code << 8) + b->in[b->in_pos++];
--rc->init_bytes_left;
}
return true;
}
static inline __attribute__((always_inline)) bool rc_limit_exceeded(const struct rc_dec *rc)
{
return rc->in_pos > rc->in_limit;
}
static inline __attribute__((always_inline)) bool rc_is_finished(const struct rc_dec *rc)
{
return rc->code == 0;
}
static inline __attribute__((always_inline)) __attribute__((always_inline)) void rc_normalize(struct rc_dec *rc)
{
if (rc->range < (1 << 24)) {
rc->range <<= 8;
rc->code = (rc->code << 8) + rc->in[rc->in_pos++];
}
}
# 497 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
static inline __attribute__((always_inline)) __attribute__((always_inline)) int rc_bit(struct rc_dec *rc, uint16_t *prob)
{
uint32_t bound;
int bit;
rc_normalize(rc);
bound = (rc->range >> 11) * *prob;
if (rc->code < bound) {
rc->range = bound;
*prob += ((1 << 11) - *prob) >> 5;
bit = 0;
} else {
rc->range -= bound;
rc->code -= bound;
*prob -= *prob >> 5;
bit = 1;
}
return bit;
}
static inline __attribute__((always_inline)) __attribute__((always_inline)) uint32_t rc_bittree(struct rc_dec *rc,
uint16_t *probs, uint32_t limit)
{
uint32_t symbol = 1;
do {
if (rc_bit(rc, &probs[symbol]))
symbol = (symbol << 1) + 1;
else
symbol <<= 1;
} while (symbol < limit);
return symbol;
}
static inline __attribute__((always_inline)) __attribute__((always_inline)) void rc_bittree_reverse(struct rc_dec *rc,
uint16_t *probs,
uint32_t *dest, uint32_t limit)
{
uint32_t symbol = 1;
uint32_t i = 0;
do {
if (rc_bit(rc, &probs[symbol])) {
symbol = (symbol << 1) + 1;
*dest += 1 << i;
} else {
symbol <<= 1;
}
} while (++i < limit);
}
static inline __attribute__((always_inline)) void rc_direct(struct rc_dec *rc, uint32_t *dest, uint32_t limit)
{
uint32_t mask;
do {
rc_normalize(rc);
rc->range >>= 1;
rc->code -= rc->range;
mask = (uint32_t)0 - (rc->code >> 31);
rc->code += rc->range & mask;
*dest = (*dest << 1) + (mask + 1);
} while (--limit > 0);
}
static uint16_t *lzma_literal_probs(struct xz_dec_lzma2 *s)
{
uint32_t prev_byte = dict_get(&s->dict, 0);
uint32_t low = prev_byte >> (8 - s->lzma.lc);
uint32_t high = (s->dict.pos & s->lzma.literal_pos_mask) << s->lzma.lc;
return s->lzma.literal[low + high];
}
static void lzma_literal(struct xz_dec_lzma2 *s)
{
uint16_t *probs;
uint32_t symbol;
uint32_t match_byte;
uint32_t match_bit;
uint32_t offset;
uint32_t i;
probs = lzma_literal_probs(s);
if (lzma_state_is_literal(s->lzma.state)) {
symbol = rc_bittree(&s->rc, probs, 0x100);
} else {
symbol = 1;
match_byte = dict_get(&s->dict, s->lzma.rep0) << 1;
offset = 0x100;
do {
match_bit = match_byte & offset;
match_byte <<= 1;
i = offset + match_bit + symbol;
if (rc_bit(&s->rc, &probs[i])) {
symbol = (symbol << 1) + 1;
offset &= match_bit;
} else {
symbol <<= 1;
offset &= ~match_bit;
}
} while (symbol < 0x100);
}
dict_put(&s->dict, (uint8_t)symbol);
lzma_state_literal(&s->lzma.state);
}
static void lzma_len(struct xz_dec_lzma2 *s, struct lzma_len_dec *l,
uint32_t pos_state)
{
uint16_t *probs;
uint32_t limit;
if (!rc_bit(&s->rc, &l->choice)) {
probs = l->low[pos_state];
limit = (1 << 3);
s->lzma.len = 2;
} else {
if (!rc_bit(&s->rc, &l->choice2)) {
probs = l->mid[pos_state];
limit = (1 << 3);
s->lzma.len = 2 + (1 << 3);
} else {
probs = l->high;
limit = (1 << 8);
s->lzma.len = 2 + (1 << 3)
+ (1 << 3);
}
}
s->lzma.len += rc_bittree(&s->rc, probs, limit) - limit;
}
static void lzma_match(struct xz_dec_lzma2 *s, uint32_t pos_state)
{
uint16_t *probs;
uint32_t dist_slot;
uint32_t limit;
lzma_state_match(&s->lzma.state);
s->lzma.rep3 = s->lzma.rep2;
s->lzma.rep2 = s->lzma.rep1;
s->lzma.rep1 = s->lzma.rep0;
lzma_len(s, &s->lzma.match_len_dec, pos_state);
probs = s->lzma.dist_slot[lzma_get_dist_state(s->lzma.len)];
dist_slot = rc_bittree(&s->rc, probs, (1 << 6)) - (1 << 6);
if (dist_slot < 4) {
s->lzma.rep0 = dist_slot;
} else {
limit = (dist_slot >> 1) - 1;
s->lzma.rep0 = 2 + (dist_slot & 1);
if (dist_slot < 14) {
s->lzma.rep0 <<= limit;
probs = s->lzma.dist_special + s->lzma.rep0
- dist_slot - 1;
rc_bittree_reverse(&s->rc, probs,
&s->lzma.rep0, limit);
} else {
rc_direct(&s->rc, &s->lzma.rep0, limit - 4);
s->lzma.rep0 <<= 4;
rc_bittree_reverse(&s->rc, s->lzma.dist_align,
&s->lzma.rep0, 4);
}
}
}
static void lzma_rep_match(struct xz_dec_lzma2 *s, uint32_t pos_state)
{
uint32_t tmp;
if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) {
if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[
s->lzma.state][pos_state])) {
lzma_state_short_rep(&s->lzma.state);
s->lzma.len = 1;
return;
}
} else {
if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) {
tmp = s->lzma.rep1;
} else {
if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) {
tmp = s->lzma.rep2;
} else {
tmp = s->lzma.rep3;
s->lzma.rep3 = s->lzma.rep2;
}
s->lzma.rep2 = s->lzma.rep1;
}
s->lzma.rep1 = s->lzma.rep0;
s->lzma.rep0 = tmp;
}
lzma_state_long_rep(&s->lzma.state);
lzma_len(s, &s->lzma.rep_len_dec, pos_state);
}
static bool lzma_main(struct xz_dec_lzma2 *s)
{
uint32_t pos_state;
if (dict_has_space(&s->dict) && s->lzma.len > 0)
dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0);
while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) {
pos_state = s->dict.pos & s->lzma.pos_mask;
if (!rc_bit(&s->rc, &s->lzma.is_match[
s->lzma.state][pos_state])) {
lzma_literal(s);
} else {
if (rc_bit(&s->rc, &s->lzma.is_rep[s->lzma.state]))
lzma_rep_match(s, pos_state);
else
lzma_match(s, pos_state);
if (!dict_repeat(&s->dict, &s->lzma.len, s->lzma.rep0))
return false;
}
}
rc_normalize(&s->rc);
return true;
}
static void lzma_reset(struct xz_dec_lzma2 *s)
{
uint16_t *probs;
size_t i;
s->lzma.state = STATE_LIT_LIT;
s->lzma.rep0 = 0;
s->lzma.rep1 = 0;
s->lzma.rep2 = 0;
s->lzma.rep3 = 0;
# 787 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
probs = s->lzma.is_match[0];
for (i = 0; i < (1846 + (1 << 4) * 0x300); ++i)
probs[i] = (1 << 11) / 2;
rc_reset(&s->rc);
}
static bool lzma_props(struct xz_dec_lzma2 *s, uint8_t props)
{
if (props > (4 * 5 + 4) * 9 + 8)
return false;
s->lzma.pos_mask = 0;
while (props >= 9 * 5) {
props -= 9 * 5;
++s->lzma.pos_mask;
}
s->lzma.pos_mask = (1 << s->lzma.pos_mask) - 1;
s->lzma.literal_pos_mask = 0;
while (props >= 9) {
props -= 9;
++s->lzma.literal_pos_mask;
}
s->lzma.lc = props;
if (s->lzma.lc + s->lzma.literal_pos_mask > 4)
return false;
s->lzma.literal_pos_mask = (1 << s->lzma.literal_pos_mask) - 1;
lzma_reset(s);
return true;
}
# 846 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b)
{
size_t in_avail;
uint32_t tmp;
in_avail = b->in_size - b->in_pos;
if (s->temp.size > 0 || s->lzma2.compressed == 0) {
tmp = 2 * 21 - s->temp.size;
if (tmp > s->lzma2.compressed - s->temp.size)
tmp = s->lzma2.compressed - s->temp.size;
if (tmp > in_avail)
tmp = in_avail;
memcpy(s->temp.buf + s->temp.size, b->in + b->in_pos, tmp);
if (s->temp.size + tmp == s->lzma2.compressed) {
memzero(s->temp.buf + s->temp.size + tmp,
sizeof(s->temp.buf)
- s->temp.size - tmp);
s->rc.in_limit = s->temp.size + tmp;
} else if (s->temp.size + tmp < 21) {
s->temp.size += tmp;
b->in_pos += tmp;
return true;
} else {
s->rc.in_limit = s->temp.size + tmp - 21;
}
s->rc.in = s->temp.buf;
s->rc.in_pos = 0;
if (!lzma_main(s) || s->rc.in_pos > s->temp.size + tmp)
return false;
s->lzma2.compressed -= s->rc.in_pos;
if (s->rc.in_pos < s->temp.size) {
s->temp.size -= s->rc.in_pos;
memmove(s->temp.buf, s->temp.buf + s->rc.in_pos,
s->temp.size);
return true;
}
b->in_pos += s->rc.in_pos - s->temp.size;
s->temp.size = 0;
}
in_avail = b->in_size - b->in_pos;
if (in_avail >= 21) {
s->rc.in = b->in;
s->rc.in_pos = b->in_pos;
if (in_avail >= s->lzma2.compressed + 21)
s->rc.in_limit = b->in_pos + s->lzma2.compressed;
else
s->rc.in_limit = b->in_size - 21;
if (!lzma_main(s))
return false;
in_avail = s->rc.in_pos - b->in_pos;
if (in_avail > s->lzma2.compressed)
return false;
s->lzma2.compressed -= in_avail;
b->in_pos = s->rc.in_pos;
}
in_avail = b->in_size - b->in_pos;
if (in_avail < 21) {
if (in_avail > s->lzma2.compressed)
in_avail = s->lzma2.compressed;
memcpy(s->temp.buf, b->in + b->in_pos, in_avail);
s->temp.size = in_avail;
b->in_pos += in_avail;
}
return true;
}
static enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
struct xz_buf *b)
{
uint32_t tmp;
while (b->in_pos < b->in_size || s->lzma2.sequence == SEQ_LZMA_RUN) {
switch (s->lzma2.sequence) {
case SEQ_CONTROL:
# 970 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
tmp = b->in[b->in_pos++];
if (tmp == 0x00)
return XZ_STREAM_END;
if (tmp >= 0xE0 || tmp == 0x01) {
s->lzma2.need_props = true;
s->lzma2.need_dict_reset = false;
dict_reset(&s->dict, b);
} else if (s->lzma2.need_dict_reset) {
return XZ_DATA_ERROR;
}
if (tmp >= 0x80) {
s->lzma2.uncompressed = (tmp & 0x1F) << 16;
s->lzma2.sequence = SEQ_UNCOMPRESSED_1;
if (tmp >= 0xC0) {
s->lzma2.need_props = false;
s->lzma2.next_sequence
= SEQ_PROPERTIES;
} else if (s->lzma2.need_props) {
return XZ_DATA_ERROR;
} else {
s->lzma2.next_sequence
= SEQ_LZMA_PREPARE;
if (tmp >= 0xA0)
lzma_reset(s);
}
} else {
if (tmp > 0x02)
return XZ_DATA_ERROR;
s->lzma2.sequence = SEQ_COMPRESSED_0;
s->lzma2.next_sequence = SEQ_COPY;
}
break;
case SEQ_UNCOMPRESSED_1:
s->lzma2.uncompressed
+= (uint32_t)b->in[b->in_pos++] << 8;
s->lzma2.sequence = SEQ_UNCOMPRESSED_2;
break;
case SEQ_UNCOMPRESSED_2:
s->lzma2.uncompressed
+= (uint32_t)b->in[b->in_pos++] + 1;
s->lzma2.sequence = SEQ_COMPRESSED_0;
break;
case SEQ_COMPRESSED_0:
s->lzma2.compressed
= (uint32_t)b->in[b->in_pos++] << 8;
s->lzma2.sequence = SEQ_COMPRESSED_1;
break;
case SEQ_COMPRESSED_1:
s->lzma2.compressed
+= (uint32_t)b->in[b->in_pos++] + 1;
s->lzma2.sequence = s->lzma2.next_sequence;
break;
case SEQ_PROPERTIES:
if (!lzma_props(s, b->in[b->in_pos++]))
return XZ_DATA_ERROR;
s->lzma2.sequence = SEQ_LZMA_PREPARE;
case SEQ_LZMA_PREPARE:
if (s->lzma2.compressed < 5)
return XZ_DATA_ERROR;
if (!rc_read_init(&s->rc, b))
return XZ_OK;
s->lzma2.compressed -= 5;
s->lzma2.sequence = SEQ_LZMA_RUN;
case SEQ_LZMA_RUN:
# 1066 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_lzma2.c"
dict_limit(&s->dict, ({ size_t __min1 = (b->out_size - b->out_pos); size_t __min2 = (s->lzma2.uncompressed); __min1 < __min2 ? __min1: __min2; })
);
if (!lzma2_lzma(s, b))
return XZ_DATA_ERROR;
s->lzma2.uncompressed -= dict_flush(&s->dict, b);
if (s->lzma2.uncompressed == 0) {
if (s->lzma2.compressed > 0 || s->lzma.len > 0
|| !rc_is_finished(&s->rc))
return XZ_DATA_ERROR;
rc_reset(&s->rc);
s->lzma2.sequence = SEQ_CONTROL;
} else if (b->out_pos == b->out_size
|| (b->in_pos == b->in_size
&& s->temp.size
< s->lzma2.compressed)) {
return XZ_OK;
}
break;
case SEQ_COPY:
dict_uncompressed(&s->dict, b, &s->lzma2.compressed);
if (s->lzma2.compressed > 0)
return XZ_OK;
s->lzma2.sequence = SEQ_CONTROL;
break;
}
}
return XZ_OK;
}
static struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode,
uint32_t dict_max)
{
struct xz_dec_lzma2 *s = malloc(sizeof(*s));
if (s == ((void *)0))
return ((void *)0);
s->dict.mode = mode;
s->dict.size_max = dict_max;
if (((mode) == XZ_PREALLOC)) {
s->dict.buf = malloc(dict_max);
if (s->dict.buf == ((void *)0)) {
free(s);
return ((void *)0);
}
} else if (((mode) == XZ_DYNALLOC)) {
s->dict.buf = ((void *)0);
s->dict.allocated = 0;
}
return s;
}
static enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, uint8_t props)
{
if (props > 39)
return XZ_OPTIONS_ERROR;
s->dict.size = 2 + (props & 1);
s->dict.size <<= (props >> 1) + 11;
if (((s->dict.mode) != XZ_SINGLE)) {
if (s->dict.size > s->dict.size_max)
return XZ_MEMLIMIT_ERROR;
s->dict.end = s->dict.size;
if (((s->dict.mode) == XZ_DYNALLOC)) {
if (s->dict.allocated < s->dict.size) {
do { if (s->dict.buf != ((void *)0)) free(s->dict.buf); } while (0);
s->dict.buf = malloc(s->dict.size);
if (s->dict.buf == ((void *)0)) {
s->dict.allocated = 0;
return XZ_MEM_ERROR;
}
}
}
}
s->lzma.len = 0;
s->lzma2.sequence = SEQ_CONTROL;
s->lzma2.need_dict_reset = true;
s->temp.size = 0;
return XZ_OK;
}
static void xz_dec_lzma2_end(struct xz_dec_lzma2 *s)
{
if (((s->dict.mode) != XZ_SINGLE))
do { if (s->dict.buf != ((void *)0)) free(s->dict.buf); } while (0);
free(s);
}
# 236 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 2
# 1 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c" 1
# 19 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
struct xz_dec_bcj {
enum {
BCJ_X86 = 4,
BCJ_POWERPC = 5,
BCJ_IA64 = 6,
BCJ_ARM = 7,
BCJ_ARMTHUMB = 8,
BCJ_SPARC = 9
} type;
enum xz_ret ret;
bool single_call;
uint32_t pos;
uint32_t x86_prev_mask;
uint8_t *out;
size_t out_pos;
size_t out_size;
struct {
size_t filtered;
size_t size;
# 74 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
uint8_t buf[16];
} temp;
};
# 265 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
{
size_t i;
uint32_t addr;
for (i = 0; i + 4 <= size; i += 4) {
if (buf[i + 3] == 0xEB) {
addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8)
| ((uint32_t)buf[i + 2] << 16);
addr <<= 2;
addr -= s->pos + (uint32_t)i + 8;
addr >>= 2;
buf[i] = (uint8_t)addr;
buf[i + 1] = (uint8_t)(addr >> 8);
buf[i + 2] = (uint8_t)(addr >> 16);
}
}
return i;
}
# 345 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
static void bcj_apply(struct xz_dec_bcj *s,
uint8_t *buf, size_t *pos, size_t size)
{
size_t filtered;
buf += *pos;
size -= *pos;
switch (s->type) {
# 370 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
case BCJ_ARM:
filtered = bcj_arm(s, buf, size);
break;
# 384 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
default:
filtered = 0;
break;
}
*pos += filtered;
s->pos += filtered;
}
static void bcj_flush(struct xz_dec_bcj *s, struct xz_buf *b)
{
size_t copy_size;
copy_size = ({ size_t __min1 = (s->temp.filtered); size_t __min2 = (b->out_size - b->out_pos); __min1 < __min2 ? __min1: __min2; });
memcpy(b->out + b->out_pos, s->temp.buf, copy_size);
b->out_pos += copy_size;
s->temp.filtered -= copy_size;
s->temp.size -= copy_size;
memmove(s->temp.buf, s->temp.buf + copy_size, s->temp.size);
}
static enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s,
struct xz_dec_lzma2 *lzma2,
struct xz_buf *b)
{
size_t out_start;
if (s->temp.filtered > 0) {
bcj_flush(s, b);
if (s->temp.filtered > 0)
return XZ_OK;
if (s->ret == XZ_STREAM_END)
return XZ_STREAM_END;
}
# 449 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
if (s->temp.size < b->out_size - b->out_pos || s->temp.size == 0) {
out_start = b->out_pos;
memcpy(b->out + b->out_pos, s->temp.buf, s->temp.size);
b->out_pos += s->temp.size;
s->ret = xz_dec_lzma2_run(lzma2, b);
if (s->ret != XZ_STREAM_END
&& (s->ret != XZ_OK || s->single_call))
return s->ret;
bcj_apply(s, b->out, &out_start, b->out_pos);
if (s->ret == XZ_STREAM_END)
return XZ_STREAM_END;
s->temp.size = b->out_pos - out_start;
b->out_pos -= s->temp.size;
memcpy(s->temp.buf, b->out + b->out_pos, s->temp.size);
if (b->out_pos + s->temp.size < b->out_size)
return XZ_OK;
}
# 490 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
if (b->out_pos < b->out_size) {
s->out = b->out;
s->out_pos = b->out_pos;
s->out_size = b->out_size;
b->out = s->temp.buf;
b->out_pos = s->temp.size;
b->out_size = sizeof(s->temp.buf);
s->ret = xz_dec_lzma2_run(lzma2, b);
s->temp.size = b->out_pos;
b->out = s->out;
b->out_pos = s->out_pos;
b->out_size = s->out_size;
if (s->ret != XZ_OK && s->ret != XZ_STREAM_END)
return s->ret;
bcj_apply(s, s->temp.buf, &s->temp.filtered, s->temp.size);
if (s->ret == XZ_STREAM_END)
s->temp.filtered = s->temp.size;
bcj_flush(s, b);
if (s->temp.filtered > 0)
return XZ_OK;
}
return s->ret;
}
static struct xz_dec_bcj *xz_dec_bcj_create(bool single_call)
{
struct xz_dec_bcj *s = malloc(sizeof(*s));
if (s != ((void *)0))
s->single_call = single_call;
return s;
}
static enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id)
{
switch (id) {
# 549 "arch/arm/boot/compressed/../../../../lib/xz/xz_dec_bcj.c"
case BCJ_ARM:
break;
default:
return XZ_OPTIONS_ERROR;
}
s->type = id;
s->ret = XZ_OK;
s->pos = 0;
s->x86_prev_mask = 0;
s->temp.filtered = 0;
s->temp.size = 0;
return XZ_OK;
}
# 237 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c" 2
# 251 "arch/arm/boot/compressed/../../../../lib/decompress_unxz.c"
static int unxz(unsigned char *in, int in_size,
int (*fill)(void *dest, unsigned int size),
int (*flush)(void *src, unsigned int size),
unsigned char *out, int *in_used,
void (*error)(char *x))
{
struct xz_buf b;
struct xz_dec *s;
enum xz_ret ret;
bool must_free_in = false;
xz_crc32_init();
if (in_used != ((void *)0))
*in_used = 0;
if (fill == ((void *)0) && flush == ((void *)0))
s = xz_dec_init(XZ_SINGLE, 0);
else
s = xz_dec_init(XZ_DYNALLOC, (uint32_t)-1);
if (s == ((void *)0))
goto error_alloc_state;
if (flush == ((void *)0)) {
b.out = out;
b.out_size = (size_t)-1;
} else {
b.out_size = 4096;
b.out = malloc(4096);
if (b.out == ((void *)0))
goto error_alloc_out;
}
if (in == ((void *)0)) {
must_free_in = true;
in = malloc(4096);
if (in == ((void *)0))
goto error_alloc_in;
}
b.in = in;
b.in_pos = 0;
b.in_size = in_size;
b.out_pos = 0;
if (fill == ((void *)0) && flush == ((void *)0)) {
ret = xz_dec_run(s, &b);
} else {
do {
if (b.in_pos == b.in_size && fill != ((void *)0)) {
if (in_used != ((void *)0))
*in_used += b.in_pos;
b.in_pos = 0;
in_size = fill(in, 4096);
if (in_size < 0) {
ret = XZ_BUF_ERROR;
break;
}
b.in_size = in_size;
}
ret = xz_dec_run(s, &b);
if (flush != ((void *)0) && (b.out_pos == b.out_size
|| (ret != XZ_OK && b.out_pos > 0))) {
if (flush(b.out, b.out_pos) != (int)b.out_pos)
ret = XZ_BUF_ERROR;
b.out_pos = 0;
}
} while (ret == XZ_OK);
if (must_free_in)
free(in);
if (flush != ((void *)0))
free(b.out);
}
if (in_used != ((void *)0))
*in_used += b.in_pos;
xz_dec_end(s);
switch (ret) {
case XZ_STREAM_END:
return 0;
case XZ_MEM_ERROR:
error("XZ decompressor ran out of memory");
break;
case XZ_FORMAT_ERROR:
error("Input is not in the XZ format (wrong magic bytes)");
break;
case XZ_OPTIONS_ERROR:
error("Input was encoded with settings that are not "
"supported by this XZ decoder");
break;
case XZ_DATA_ERROR:
case XZ_BUF_ERROR:
error("XZ-compressed data is corrupt");
break;
default:
error("Bug in the XZ decompressor");
break;
}
return -1;
error_alloc_in:
if (flush != ((void *)0))
free(b.out);
error_alloc_out:
xz_dec_end(s);
error_alloc_state:
error("XZ decompressor ran out of memory");
return -1;
}
# 51 "arch/arm/boot/compressed/decompress.c" 2
int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
{
return unxz(input, len, ((void *)0), ((void *)0), output, ((void *)0), error);
}
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
2012-05-30 1:43 ` shawn
@ 2012-05-30 8:35 ` Jim Cromie
[not found] ` <1338387021.23168.18.camel@shawn-ssd>
0 siblings, 1 reply; 8+ messages in thread
From: Jim Cromie @ 2012-05-30 8:35 UTC (permalink / raw)
To: shawn; +Cc: Jason Baron, linux-kernel
On Tue, May 29, 2012 at 7:43 PM, shawn <shawnlandden@gmail.com> wrote:
> jim,
> On Tue, 2012-05-29 at 19:11 -0600, Jim Cromie wrote:
>> On Tue, May 29, 2012 at 5:31 PM, shawn <shawnlandden@gmail.com> wrote:
>> > SHIPPED arch/arm/boot/compressed/lib1funcs.S
>> > In file included from include/linux/kernel.h:23:0,
>> > from
>> > arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
>> > from
>> > arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
>> > from arch/arm/boot/compressed/decompress.c:50:
>> > include/linux/dynamic_debug.h: In function
>> > ‘ddebug_dyndbg_module_param_cb’:
>> > include/linux/dynamic_debug.h:111:2: error: implicit declaration of
>> > function ‘strstr’ [-Werror=implicit-function-declaration]
>> >
>> > git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
>> > this call
>>
>> that symbol should have been provided by line 100
>>
>> 98 #else
>> 99
>> 100 #include <linux/string.h>
>> 101 #include <linux/errno.h>
>> ...
>> 108 static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
>> 109 const char *modname)
>> 110 {
>> 111 if (strstr(param, "dyndbg")) {
>
>> which has:
>>
>> 74 #ifndef __HAVE_ARCH_STRSTR
>> 75 extern char * strstr(const char *, const char *);
>> 76 #endif
>> does your arch have __HAVE_ARCH_STRSTR ?
>> if so, is strstr exported under different conditions ??
> a git grep __HAVE_ARCH_STRSTR did not show and such defines in the arm
> tree
thats odd - you should have gotten the generic one then.
>> Can you send me
>> arch/arm/boot/compressed/decompress.i ?
> I didn't have that file after the failure, but
nor would you with success, but you did the right thing below..
> make arch/arm/boot/compressed/decompress.i
>
> summoned it, also including string.o from that folder (which was present
> after the failure)
>
> I am compiling on amd64, using
> export ARCH=arm
> and
> CONFIG_CROSS_COMPILE="arm-linux-gnueabi-"
>
>
> I have had issues with the cross compiler not always being called since
> the 3.5 merge window opened up, (ld reporting corrupted binary files and
> gcc saying it doesn't understand arm-specific flags) and have not yet
> compiled a post-v3.4 successful kernel. This could be a symptom of that.
> (esp as the host arch, x86 DOES have __HAVE_ARCH_STRSTR)
>
hmm
CONFIG_CROSS_COMPILE is new in 3.5-rc isnt it ?
what happens if you do it the old (3.4) way ?
What toolchain are you using ?
can you replicate it using something here ?
http://kernel.org/pub/tools/crosstool/
> --
> -Shawn Landden
Jim
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
[not found] ` <CAJfuBxxkMJbmvQMCZx=6GUqJ8c6VnT8jaRTKA-OWZLa0gG7kUw@mail.gmail.com>
@ 2012-05-30 19:40 ` shawn
2012-05-30 20:34 ` Jason Baron
0 siblings, 1 reply; 8+ messages in thread
From: shawn @ 2012-05-30 19:40 UTC (permalink / raw)
To: Jim Cromie, Russell King; +Cc: Jason Baron, linux-kernel, linux-arm
summary:
the recently added to arm, CONFIG_KERNEL_XZ is broken because
arch/arm/boot/compressed/decompress.c defines _LINUX_STRING_H
overriding <linux/string.h> used in include/linux/dynamic_debug.h:111
On Wed, 2012-05-30 at 11:53 -0600, Jim Cromie wrote:
> On Wed, May 30, 2012 at 8:10 AM, shawn <shawnlandden@gmail.com> wrote:
> > On Wed, 2012-05-30 at 02:35 -0600, Jim Cromie wrote:
> >> On Tue, May 29, 2012 at 7:43 PM, shawn <shawnlandden@gmail.com> wrote:
> >> > jim,
> >> > On Tue, 2012-05-29 at 19:11 -0600, Jim Cromie wrote:
> >> >> On Tue, May 29, 2012 at 5:31 PM, shawn <shawnlandden@gmail.com> wrote:
> >> >> > SHIPPED arch/arm/boot/compressed/lib1funcs.S
> >> >> > In file included from include/linux/kernel.h:23:0,
> >> >> > from
> >> >> > arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> >> >> > from
> >> >> > arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> >> >> > from arch/arm/boot/compressed/decompress.c:50:
> >> >> > include/linux/dynamic_debug.h: In function
> >> >> > ‘ddebug_dyndbg_module_param_cb’:
> >> >> > include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> >> >> > function ‘strstr’ [-Werror=implicit-function-declaration]
> >> >> >
> >> >> > git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
> >> >> > this call
> >> >>
> >> >> that symbol should have been provided by line 100
> >> >>
> >> >> 98 #else
> >> >> 99
> >> >> 100 #include <linux/string.h>
> >> >> 101 #include <linux/errno.h>
> >> >> ...
> >> >> 108 static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
> >> >> 109 const char *modname)
> >> >> 110 {
> >> >> 111 if (strstr(param, "dyndbg")) {
> >> >
> >> >> which has:
> >> >>
> >> >> 74 #ifndef __HAVE_ARCH_STRSTR
> >> >> 75 extern char * strstr(const char *, const char *);
> >> >> 76 #endif
> >> >> does your arch have __HAVE_ARCH_STRSTR ?
> >> >> if so, is strstr exported under different conditions ??
> >> > a git grep __HAVE_ARCH_STRSTR did not show and such defines in the arm
> >> > tree
> >>
> >> thats odd - you should have gotten the generic one then.
> >>
> >> >> Can you send me
> >> >> arch/arm/boot/compressed/decompress.i ?
> >> > I didn't have that file after the failure, but
> >>
> >> nor would you with success, but you did the right thing below..
> >>
> >> > make arch/arm/boot/compressed/decompress.i
> >> >
> >> > summoned it, also including string.o from that folder (which was present
> >> > after the failure)
> >> >
> >> > I am compiling on amd64, using
> >> > export ARCH=arm
> >> > and
> >> > CONFIG_CROSS_COMPILE="arm-linux-gnueabi-"
> >> >
> >> >
> >> > I have had issues with the cross compiler not always being called since
> >> > the 3.5 merge window opened up, (ld reporting corrupted binary files and
> >> > gcc saying it doesn't understand arm-specific flags) and have not yet
> >> > compiled a post-v3.4 successful kernel. This could be a symptom of that.
> >> > (esp as the host arch, x86 DOES have __HAVE_ARCH_STRSTR)
> >> >
> >>
> >> hmm
> >> CONFIG_CROSS_COMPILE is new in 3.5-rc isnt it ?
> >> what happens if you do it the old (3.4) way ?
> > No, CONFIG_CROSS_COMPILE is not new, I've been doing it this way for a
> > few versions, before with the emdebian cross toolchain. in meuconfig it
> > shows up under: General Config --> Cross-compiler tool prefix
>
> Ah yes - I see its not new (far from it)
>
> commit 84336466011c589b6af554f2f2f1fcfa1a5c1437
> Author: Roland McGrath <roland@redhat.com>
> Date: Mon Dec 21 16:24:06 2009 -0800
>
> kconfig CROSS_COMPILE option
>
>
> > This is the arm toolchain that is in the Ubuntu repos.
> >
> > http://packages.ubuntu.com/precise/gcc-4.6-arm-linux-gnueabi
>
> I went ahead and installed the arm toolchain from kernel.org,
> and got what look to be errors like you mentioned:
>
> [jimc@groucho linux-2.6-dep]$ make
> make[1]: Nothing to be done for `all'.
> make[1]: Nothing to be done for `relocs'.
> CHK include/linux/version.h
> CHK include/generated/utsrelease.h
> CC kernel/bounds.s
> cc1: error: unrecognized command line option '-m64'
> cc1: error: unrecognized command line option '-mno-red-zone'
> cc1: error: unrecognized command line option '-mcmodel=kernel'
> cc1: error: unrecognized command line option '-maccumulate-outgoing-args'
> make[1]: *** [kernel/bounds.s] Error 1
> make: *** [prepare0] Error 2
>
> this is with toolchain dir in the front of the path, after doing
> make ARCH=arm defconfig
> make xconfig # and adding the cross-compile value
>
> I got much further when I kept ARCH=arm as make arg;
> it completed the build. Youre getting it from the environment,
> which should be the same, but its worth a try...
>
> [jimc@groucho linux-2.6-dep]$ file vmlinux*
> vmlinux: ELF 32-bit LSB executable, ARM, version 1, statically
> linked, not stripped
> vmlinux.o: ELF 32-bit LSB relocatable, ARM, version 1, not stripped
>
> FWIW, this was an in-src build, my attempt at O=../build-arm spat at me.
>
>
> > And I have successfully built kernels with this toolchain, and the
> > debian native arm 4.6 compiler, at the same time, using distcc. (however
> > I turned both distcc and ccache off for the error I sent)
> >
> > After having the issues with 3.5, I reinstalled, well parts of the tools
> > chain with apt-get install --reinstall.
> >
> > What is the old way to cross-compile?
>
> from the config help text:
>
> Same as running 'make CROSS_COMPILE=prefix-' but stored for
> default make runs in this kernel build directory. You don't
> need to set this unless you want the configured kernel build
> directory to select the cross-compiler automatically.
>
> FWIW, it sounds more fiddly than using the now-quite-mature
> CROSS_COMPILE config-item
>
>
>
> >> What toolchain are you using ?
> >> can you replicate it using something here ?
> >>
> >> http://kernel.org/pub/tools/crosstool/
>
> Since I got a build using this, you should give it a go.
> If it works, file a bug report with ubuntu.
arch/arm/boot/compressed/decompress.c
has
#define _LINUX_STRING_H_
which prevents <linux/string.h> from loading
therefore: xz_private.h cannot include <linux/kernel.h>, or
arch/arm/boot/compressed/decompress.c must define strstr
I tried to remove the #include <linux/kernel.h>
from xz_private.h, and replace it with more specific includes but cannot
because lib/xz/xz_dec_lzma2.c uses min() which is defined in the
<linux/kernel.h> header
CC arch/arm/boot/compressed/decompress.o
In file included from include/linux/kernel.h:23:0,
from
arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
from
arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
from arch/arm/boot/compressed/decompress.c:50:
include/linux/dynamic_debug.h: In function
‘ddebug_dyndbg_module_param_cb’:
include/linux/dynamic_debug.h:111:2: error: implicit declaration of
function ‘strstr’ [-Werror=implicit-function-declaration]
>
> >
> > --
> > -Shawn Landden
> >
>
> let me know how you get on,
> ( learning from others' pain is one of the values of empathy! )
>
> Jim
--
-Shawn Landden
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
2012-05-30 19:40 ` shawn
@ 2012-05-30 20:34 ` Jason Baron
2012-05-30 20:51 ` shawn
2013-02-12 17:43 ` gcov/lkm/arm-eabi/gcc 4.7.2 issue Robert Berger
0 siblings, 2 replies; 8+ messages in thread
From: Jason Baron @ 2012-05-30 20:34 UTC (permalink / raw)
To: shawn; +Cc: Jim Cromie, Russell King, linux-kernel, linux-arm
On Wed, May 30, 2012 at 12:40:01PM -0700, shawn wrote:
> summary:
>
> the recently added to arm, CONFIG_KERNEL_XZ is broken because
> arch/arm/boot/compressed/decompress.c defines _LINUX_STRING_H
> overriding <linux/string.h> used in include/linux/dynamic_debug.h:111
>
If arch/arm/boot/compressed/decompress.c is going to define
'_LINUX_STRING_H', I think it needs to provide any string functions that
might be missing. Thus in this case, if you add a:
extern char * strstr(const char *, const char *);
right before:
#include "../../../../lib/decompress_unxz.c",
does that fix things?
Thanks,
-Jason
>
> On Wed, 2012-05-30 at 11:53 -0600, Jim Cromie wrote:
> > On Wed, May 30, 2012 at 8:10 AM, shawn <shawnlandden@gmail.com> wrote:
> > > On Wed, 2012-05-30 at 02:35 -0600, Jim Cromie wrote:
> > >> On Tue, May 29, 2012 at 7:43 PM, shawn <shawnlandden@gmail.com> wrote:
> > >> > jim,
> > >> > On Tue, 2012-05-29 at 19:11 -0600, Jim Cromie wrote:
> > >> >> On Tue, May 29, 2012 at 5:31 PM, shawn <shawnlandden@gmail.com> wrote:
> > >> >> > SHIPPED arch/arm/boot/compressed/lib1funcs.S
> > >> >> > In file included from include/linux/kernel.h:23:0,
> > >> >> > from
> > >> >> > arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> > >> >> > from
> > >> >> > arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> > >> >> > from arch/arm/boot/compressed/decompress.c:50:
> > >> >> > include/linux/dynamic_debug.h: In function
> > >> >> > ‘ddebug_dyndbg_module_param_cb’:
> > >> >> > include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> > >> >> > function ‘strstr’ [-Werror=implicit-function-declaration]
> > >> >> >
> > >> >> > git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
> > >> >> > this call
> > >> >>
> > >> >> that symbol should have been provided by line 100
> > >> >>
> > >> >> 98 #else
> > >> >> 99
> > >> >> 100 #include <linux/string.h>
> > >> >> 101 #include <linux/errno.h>
> > >> >> ...
> > >> >> 108 static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
> > >> >> 109 const char *modname)
> > >> >> 110 {
> > >> >> 111 if (strstr(param, "dyndbg")) {
> > >> >
> > >> >> which has:
> > >> >>
> > >> >> 74 #ifndef __HAVE_ARCH_STRSTR
> > >> >> 75 extern char * strstr(const char *, const char *);
> > >> >> 76 #endif
> > >> >> does your arch have __HAVE_ARCH_STRSTR ?
> > >> >> if so, is strstr exported under different conditions ??
> > >> > a git grep __HAVE_ARCH_STRSTR did not show and such defines in the arm
> > >> > tree
> > >>
> > >> thats odd - you should have gotten the generic one then.
> > >>
> > >> >> Can you send me
> > >> >> arch/arm/boot/compressed/decompress.i ?
> > >> > I didn't have that file after the failure, but
> > >>
> > >> nor would you with success, but you did the right thing below..
> > >>
> > >> > make arch/arm/boot/compressed/decompress.i
> > >> >
> > >> > summoned it, also including string.o from that folder (which was present
> > >> > after the failure)
> > >> >
> > >> > I am compiling on amd64, using
> > >> > export ARCH=arm
> > >> > and
> > >> > CONFIG_CROSS_COMPILE="arm-linux-gnueabi-"
> > >> >
> > >> >
> > >> > I have had issues with the cross compiler not always being called since
> > >> > the 3.5 merge window opened up, (ld reporting corrupted binary files and
> > >> > gcc saying it doesn't understand arm-specific flags) and have not yet
> > >> > compiled a post-v3.4 successful kernel. This could be a symptom of that.
> > >> > (esp as the host arch, x86 DOES have __HAVE_ARCH_STRSTR)
> > >> >
> > >>
> > >> hmm
> > >> CONFIG_CROSS_COMPILE is new in 3.5-rc isnt it ?
> > >> what happens if you do it the old (3.4) way ?
> > > No, CONFIG_CROSS_COMPILE is not new, I've been doing it this way for a
> > > few versions, before with the emdebian cross toolchain. in meuconfig it
> > > shows up under: General Config --> Cross-compiler tool prefix
> >
> > Ah yes - I see its not new (far from it)
> >
> > commit 84336466011c589b6af554f2f2f1fcfa1a5c1437
> > Author: Roland McGrath <roland@redhat.com>
> > Date: Mon Dec 21 16:24:06 2009 -0800
> >
> > kconfig CROSS_COMPILE option
> >
> >
> > > This is the arm toolchain that is in the Ubuntu repos.
> > >
> > > http://packages.ubuntu.com/precise/gcc-4.6-arm-linux-gnueabi
> >
> > I went ahead and installed the arm toolchain from kernel.org,
> > and got what look to be errors like you mentioned:
> >
> > [jimc@groucho linux-2.6-dep]$ make
> > make[1]: Nothing to be done for `all'.
> > make[1]: Nothing to be done for `relocs'.
> > CHK include/linux/version.h
> > CHK include/generated/utsrelease.h
> > CC kernel/bounds.s
> > cc1: error: unrecognized command line option '-m64'
> > cc1: error: unrecognized command line option '-mno-red-zone'
> > cc1: error: unrecognized command line option '-mcmodel=kernel'
> > cc1: error: unrecognized command line option '-maccumulate-outgoing-args'
> > make[1]: *** [kernel/bounds.s] Error 1
> > make: *** [prepare0] Error 2
> >
> > this is with toolchain dir in the front of the path, after doing
> > make ARCH=arm defconfig
> > make xconfig # and adding the cross-compile value
> >
> > I got much further when I kept ARCH=arm as make arg;
> > it completed the build. Youre getting it from the environment,
> > which should be the same, but its worth a try...
> >
> > [jimc@groucho linux-2.6-dep]$ file vmlinux*
> > vmlinux: ELF 32-bit LSB executable, ARM, version 1, statically
> > linked, not stripped
> > vmlinux.o: ELF 32-bit LSB relocatable, ARM, version 1, not stripped
> >
> > FWIW, this was an in-src build, my attempt at O=../build-arm spat at me.
> >
> >
> > > And I have successfully built kernels with this toolchain, and the
> > > debian native arm 4.6 compiler, at the same time, using distcc. (however
> > > I turned both distcc and ccache off for the error I sent)
> > >
> > > After having the issues with 3.5, I reinstalled, well parts of the tools
> > > chain with apt-get install --reinstall.
> > >
> > > What is the old way to cross-compile?
> >
> > from the config help text:
> >
> > Same as running 'make CROSS_COMPILE=prefix-' but stored for
> > default make runs in this kernel build directory. You don't
> > need to set this unless you want the configured kernel build
> > directory to select the cross-compiler automatically.
> >
> > FWIW, it sounds more fiddly than using the now-quite-mature
> > CROSS_COMPILE config-item
> >
> >
> >
> > >> What toolchain are you using ?
> > >> can you replicate it using something here ?
> > >>
> > >> http://kernel.org/pub/tools/crosstool/
> >
> > Since I got a build using this, you should give it a go.
> > If it works, file a bug report with ubuntu.
>
> arch/arm/boot/compressed/decompress.c
>
> has
>
> #define _LINUX_STRING_H_
>
> which prevents <linux/string.h> from loading
>
>
> therefore: xz_private.h cannot include <linux/kernel.h>, or
> arch/arm/boot/compressed/decompress.c must define strstr
>
> I tried to remove the #include <linux/kernel.h>
> from xz_private.h, and replace it with more specific includes but cannot
> because lib/xz/xz_dec_lzma2.c uses min() which is defined in the
> <linux/kernel.h> header
>
> CC arch/arm/boot/compressed/decompress.o
> In file included from include/linux/kernel.h:23:0,
> from
> arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> from
> arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> from arch/arm/boot/compressed/decompress.c:50:
> include/linux/dynamic_debug.h: In function
> ‘ddebug_dyndbg_module_param_cb’:
> include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> function ‘strstr’ [-Werror=implicit-function-declaration]
>
> >
> > >
> > > --
> > > -Shawn Landden
> > >
> >
> > let me know how you get on,
> > ( learning from others' pain is one of the values of empathy! )
> >
> > Jim
>
>
> --
> -Shawn Landden
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
2012-05-30 20:34 ` Jason Baron
@ 2012-05-30 20:51 ` shawn
2013-02-12 17:43 ` gcov/lkm/arm-eabi/gcc 4.7.2 issue Robert Berger
1 sibling, 0 replies; 8+ messages in thread
From: shawn @ 2012-05-30 20:51 UTC (permalink / raw)
To: Jason Baron; +Cc: Jim Cromie, Russell King, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 9026 bytes --]
On Wed, 2012-05-30 at 16:34 -0400, Jason Baron wrote:
> On Wed, May 30, 2012 at 12:40:01PM -0700, shawn wrote:
> > summary:
> >
> > the recently added to arm, CONFIG_KERNEL_XZ is broken because
> > arch/arm/boot/compressed/decompress.c defines _LINUX_STRING_H
> > overriding <linux/string.h> used in include/linux/dynamic_debug.h:111
> >
>
> If arch/arm/boot/compressed/decompress.c is going to define
> '_LINUX_STRING_H', I think it needs to provide any string functions that
> might be missing. Thus in this case, if you add a:
>
> extern char * strstr(const char *, const char *);
>
> right before:
>
> #include "../../../../lib/decompress_unxz.c",
>
> does that fix things?
Yes that worked, and I've included a patch that does that. However I am
not sure that is the best way to fix this problem.
>
> Thanks,
>
> -Jason
>
>
> >
> > On Wed, 2012-05-30 at 11:53 -0600, Jim Cromie wrote:
> > > On Wed, May 30, 2012 at 8:10 AM, shawn <shawnlandden@gmail.com> wrote:
> > > > On Wed, 2012-05-30 at 02:35 -0600, Jim Cromie wrote:
> > > >> On Tue, May 29, 2012 at 7:43 PM, shawn <shawnlandden@gmail.com> wrote:
> > > >> > jim,
> > > >> > On Tue, 2012-05-29 at 19:11 -0600, Jim Cromie wrote:
> > > >> >> On Tue, May 29, 2012 at 5:31 PM, shawn <shawnlandden@gmail.com> wrote:
> > > >> >> > SHIPPED arch/arm/boot/compressed/lib1funcs.S
> > > >> >> > In file included from include/linux/kernel.h:23:0,
> > > >> >> > from
> > > >> >> > arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> > > >> >> > from
> > > >> >> > arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> > > >> >> > from arch/arm/boot/compressed/decompress.c:50:
> > > >> >> > include/linux/dynamic_debug.h: In function
> > > >> >> > ‘ddebug_dyndbg_module_param_cb’:
> > > >> >> > include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> > > >> >> > function ‘strstr’ [-Werror=implicit-function-declaration]
> > > >> >> >
> > > >> >> > git blame shows b48420c1d3019ce8d84fb8e58f4ca86b8e3655b8 as introducing
> > > >> >> > this call
> > > >> >>
> > > >> >> that symbol should have been provided by line 100
> > > >> >>
> > > >> >> 98 #else
> > > >> >> 99
> > > >> >> 100 #include <linux/string.h>
> > > >> >> 101 #include <linux/errno.h>
> > > >> >> ...
> > > >> >> 108 static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
> > > >> >> 109 const char *modname)
> > > >> >> 110 {
> > > >> >> 111 if (strstr(param, "dyndbg")) {
> > > >> >
> > > >> >> which has:
> > > >> >>
> > > >> >> 74 #ifndef __HAVE_ARCH_STRSTR
> > > >> >> 75 extern char * strstr(const char *, const char *);
> > > >> >> 76 #endif
> > > >> >> does your arch have __HAVE_ARCH_STRSTR ?
> > > >> >> if so, is strstr exported under different conditions ??
> > > >> > a git grep __HAVE_ARCH_STRSTR did not show and such defines in the arm
> > > >> > tree
> > > >>
> > > >> thats odd - you should have gotten the generic one then.
> > > >>
> > > >> >> Can you send me
> > > >> >> arch/arm/boot/compressed/decompress.i ?
> > > >> > I didn't have that file after the failure, but
> > > >>
> > > >> nor would you with success, but you did the right thing below..
> > > >>
> > > >> > make arch/arm/boot/compressed/decompress.i
> > > >> >
> > > >> > summoned it, also including string.o from that folder (which was present
> > > >> > after the failure)
> > > >> >
> > > >> > I am compiling on amd64, using
> > > >> > export ARCH=arm
> > > >> > and
> > > >> > CONFIG_CROSS_COMPILE="arm-linux-gnueabi-"
> > > >> >
> > > >> >
> > > >> > I have had issues with the cross compiler not always being called since
> > > >> > the 3.5 merge window opened up, (ld reporting corrupted binary files and
> > > >> > gcc saying it doesn't understand arm-specific flags) and have not yet
> > > >> > compiled a post-v3.4 successful kernel. This could be a symptom of that.
> > > >> > (esp as the host arch, x86 DOES have __HAVE_ARCH_STRSTR)
> > > >> >
> > > >>
> > > >> hmm
> > > >> CONFIG_CROSS_COMPILE is new in 3.5-rc isnt it ?
> > > >> what happens if you do it the old (3.4) way ?
> > > > No, CONFIG_CROSS_COMPILE is not new, I've been doing it this way for a
> > > > few versions, before with the emdebian cross toolchain. in meuconfig it
> > > > shows up under: General Config --> Cross-compiler tool prefix
> > >
> > > Ah yes - I see its not new (far from it)
> > >
> > > commit 84336466011c589b6af554f2f2f1fcfa1a5c1437
> > > Author: Roland McGrath <roland@redhat.com>
> > > Date: Mon Dec 21 16:24:06 2009 -0800
> > >
> > > kconfig CROSS_COMPILE option
> > >
> > >
> > > > This is the arm toolchain that is in the Ubuntu repos.
> > > >
> > > > http://packages.ubuntu.com/precise/gcc-4.6-arm-linux-gnueabi
> > >
> > > I went ahead and installed the arm toolchain from kernel.org,
> > > and got what look to be errors like you mentioned:
> > >
> > > [jimc@groucho linux-2.6-dep]$ make
> > > make[1]: Nothing to be done for `all'.
> > > make[1]: Nothing to be done for `relocs'.
> > > CHK include/linux/version.h
> > > CHK include/generated/utsrelease.h
> > > CC kernel/bounds.s
> > > cc1: error: unrecognized command line option '-m64'
> > > cc1: error: unrecognized command line option '-mno-red-zone'
> > > cc1: error: unrecognized command line option '-mcmodel=kernel'
> > > cc1: error: unrecognized command line option '-maccumulate-outgoing-args'
> > > make[1]: *** [kernel/bounds.s] Error 1
> > > make: *** [prepare0] Error 2
> > >
> > > this is with toolchain dir in the front of the path, after doing
> > > make ARCH=arm defconfig
> > > make xconfig # and adding the cross-compile value
> > >
> > > I got much further when I kept ARCH=arm as make arg;
> > > it completed the build. Youre getting it from the environment,
> > > which should be the same, but its worth a try...
> > >
> > > [jimc@groucho linux-2.6-dep]$ file vmlinux*
> > > vmlinux: ELF 32-bit LSB executable, ARM, version 1, statically
> > > linked, not stripped
> > > vmlinux.o: ELF 32-bit LSB relocatable, ARM, version 1, not stripped
> > >
> > > FWIW, this was an in-src build, my attempt at O=../build-arm spat at me.
> > >
> > >
> > > > And I have successfully built kernels with this toolchain, and the
> > > > debian native arm 4.6 compiler, at the same time, using distcc. (however
> > > > I turned both distcc and ccache off for the error I sent)
> > > >
> > > > After having the issues with 3.5, I reinstalled, well parts of the tools
> > > > chain with apt-get install --reinstall.
> > > >
> > > > What is the old way to cross-compile?
> > >
> > > from the config help text:
> > >
> > > Same as running 'make CROSS_COMPILE=prefix-' but stored for
> > > default make runs in this kernel build directory. You don't
> > > need to set this unless you want the configured kernel build
> > > directory to select the cross-compiler automatically.
> > >
> > > FWIW, it sounds more fiddly than using the now-quite-mature
> > > CROSS_COMPILE config-item
> > >
> > >
> > >
> > > >> What toolchain are you using ?
> > > >> can you replicate it using something here ?
> > > >>
> > > >> http://kernel.org/pub/tools/crosstool/
> > >
> > > Since I got a build using this, you should give it a go.
> > > If it works, file a bug report with ubuntu.
> >
> > arch/arm/boot/compressed/decompress.c
> >
> > has
> >
> > #define _LINUX_STRING_H_
> >
> > which prevents <linux/string.h> from loading
> >
> >
> > therefore: xz_private.h cannot include <linux/kernel.h>, or
> > arch/arm/boot/compressed/decompress.c must define strstr
> >
> > I tried to remove the #include <linux/kernel.h>
> > from xz_private.h, and replace it with more specific includes but cannot
> > because lib/xz/xz_dec_lzma2.c uses min() which is defined in the
> > <linux/kernel.h> header
> >
> > CC arch/arm/boot/compressed/decompress.o
> > In file included from include/linux/kernel.h:23:0,
> > from
> > arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15,
> > from
> > arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145,
> > from arch/arm/boot/compressed/decompress.c:50:
> > include/linux/dynamic_debug.h: In function
> > ‘ddebug_dyndbg_module_param_cb’:
> > include/linux/dynamic_debug.h:111:2: error: implicit declaration of
> > function ‘strstr’ [-Werror=implicit-function-declaration]
> >
> > >
> > > >
> > > > --
> > > > -Shawn Landden
> > > >
> > >
> > > let me know how you get on,
> > > ( learning from others' pain is one of the values of empathy! )
> > >
> > > Jim
> >
> >
> > --
> > -Shawn Landden
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
--
-Shawn Landden
[-- Attachment #2: 0001-arm-add-definition-of-strstr-to-decompress.c.patch --]
[-- Type: text/x-patch, Size: 1371 bytes --]
>From 819c4dfc986278b3905bd43a9a4185f6aba90dab Mon Sep 17 00:00:00 2001
From: Shawn Landden <shawnlandden@gmail.com>
Date: Wed, 30 May 2012 13:45:08 -0700
Subject: [PATCH] arm: add definition of strstr() to decompress.c
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
include/linux/dynamic_debug.h uses strstr from <linux/string.h>
and is included via <linux/kernel.h> from lib/xz/xz_private.h
when CONFIG_KERNEL_XZ=y.
However arch/arm/boot/compressed/decompress.c defines _LINUX_STRING_H
preventing the load of <linux/string.h> resulting in:
include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’
Define strstr in arch/arm/boot/compressed/decompress.c, providing the needed
subset of <linux/string.h>.
Signed-off-by: Shawn Landden <shawnlandden@gmail.com>
---
arch/arm/boot/compressed/decompress.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
index f41b38c..cdc3cd4 100644
--- a/arch/arm/boot/compressed/decompress.c
+++ b/arch/arm/boot/compressed/decompress.c
@@ -47,6 +47,7 @@ extern void error(char *);
#ifdef CONFIG_KERNEL_XZ
#define memmove memmove
#define memcpy memcpy
+extern char * strstr(const char *, const char *);
#include "../../../../lib/decompress_unxz.c"
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* gcov/lkm/arm-eabi/gcc 4.7.2 issue
2012-05-30 20:34 ` Jason Baron
2012-05-30 20:51 ` shawn
@ 2013-02-12 17:43 ` Robert Berger
1 sibling, 0 replies; 8+ messages in thread
From: Robert Berger @ 2013-02-12 17:43 UTC (permalink / raw)
To: linux-kernel, linux-arm
Hi,
There seems to be an issue with gcov on kernel modules if you have an
arm-eabi gcc on Linux 3.8-rc6 and previous versions.
./arm-linux-gnueabi-gcc --version
arm-linux-gnueabi-gcc (GCC) 4.7.2
I followed these instructions [1], but without much success.
In case I compile an out of tree kernel module with gcov enabled it can
not be loaded and issues the following error: "unknown relocation: 38"
I tried this patch [2] as well without success. It loads now, but still
nothing useful in /sys/kernel/debug/gcov
Please advise,
Regards,
Robert
[1]
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=Documentation/gcov.txt;h=e7ca6478cd93d4e6422d1ae92455b347dbdf7ccb;hb=HEAD
[2]
http://us.generation-nt.com/answer/add-gcov-support-arm-help-207630451.html
My public pgp key is available,at:
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x90320BF1
..."C treats you like a consenting adult. Pascal treats you like a
naughty child. Ada treats you like a criminal." -- (Bruce Powel Douglass)
My public pgp key is available,at:
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x90320BF1
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-02-12 19:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-29 23:31 include/linux/dynamic_debug.h:111:2: error: implicit declaration of function ‘strstr’ shawn
2012-05-30 1:11 ` Jim Cromie
2012-05-30 1:43 ` shawn
2012-05-30 8:35 ` Jim Cromie
[not found] ` <1338387021.23168.18.camel@shawn-ssd>
[not found] ` <CAJfuBxxkMJbmvQMCZx=6GUqJ8c6VnT8jaRTKA-OWZLa0gG7kUw@mail.gmail.com>
2012-05-30 19:40 ` shawn
2012-05-30 20:34 ` Jason Baron
2012-05-30 20:51 ` shawn
2013-02-12 17:43 ` gcov/lkm/arm-eabi/gcc 4.7.2 issue Robert Berger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.