/* * vdso_test.c: Sample code to test parse_vdso.c on x86 * Copyright (c) 2011-2014 Andy Lutomirski * Subject to the GNU General Public License, version 2 * * You can amuse yourself by compiling with: * gcc -std=gnu99 -nostdlib * -Os -fno-asynchronous-unwind-tables -flto -lgcc_s * vdso_standalone_test_x86.c parse_vdso.c * to generate a small binary. On x86_64, you can omit -lgcc_s * if you want the binary to be completely standalone. */ #include #include #include #include extern void *vdso_sym(const char *version, const char *name); extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); extern void vdso_init_from_auxv(void *auxv); /* We need a libc functions... */ int strcmp(const char *a, const char *b) { /* This implementation is buggy: it never returns -1. */ while (*a || *b) { if (*a != *b) return 1; if (*a == 0 || *b == 0) return 1; a++; b++; } return 0; } /* ...and two syscalls. This is x86-specific. */ static inline long x86_syscall3(long nr, long a0, long a1, long a2) { long ret; #ifdef __x86_64__ asm volatile ("syscall" : "=a" (ret) : "a" (nr), "D" (a0), "S" (a1), "d" (a2) : "cc", "memory", "rcx", "r8", "r9", "r10", "r11" ); #else asm volatile ("int $0x80" : "=a" (ret) : "a" (nr), "b" (a0), "c" (a1), "d" (a2) : "cc", "memory" ); #endif return ret; } static inline long linux_write(int fd, const void *data, size_t len) { return x86_syscall3(__NR_write, fd, (long)data, (long)len); } static inline void linux_exit(int code) { x86_syscall3(__NR_exit, code, 0, 0); } void to_base10(char *lastdig, time_t n) { while (n) { *lastdig = (n % 10) + '0'; n /= 10; lastdig--; } } __attribute__((externally_visible)) void c_main(void **stack) { /* Parse the stack */ long argc = (long)*stack; stack += argc + 2; /* Now we're pointing at the environment. Skip it. */ while(*stack) stack++; stack++; /* Now we're pointing at auxv. Initialize the vDSO parser. */ vdso_init_from_auxv((void *)stack); /* Find gettimeofday. */ typedef long (*gtod_t)(struct timeval *tv, struct timezone *tz); gtod_t gtod = (gtod_t)vdso_sym("LINUX_2.6", "__vdso_gettimeofday"); if (!gtod) linux_exit(1); struct timeval tv; long ret = gtod(&tv, 0); if (ret == 0) { char buf[] = "The time is .000000\n"; to_base10(buf + 31, tv.tv_sec); to_base10(buf + 38, tv.tv_usec); linux_write(1, buf, sizeof(buf) - 1); } else { linux_exit(ret); } linux_exit(0); } /* * This is the real entry point. It passes the initial stack into * the C entry point. */ asm ( ".text\n" ".global _start\n" ".type _start,@function\n" "_start:\n\t" #ifdef __x86_64__ "mov %rsp,%rdi\n\t" "jmp c_main" #else "push %esp\n\t" "call c_main\n\t" "int $3" #endif ); root/include/drm/i2c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-08 11:42:04 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-08 11:42:04 -0800
commit83280e90ef001f77a64e2ce59c25ab66e47ab1f0 (patch)
treeec0a5842e2fbc0f4abaff55299acac397b8da5c3 /include/drm/i2c
parentcc250e267bd56c531b0bee455fc724d50af83fac (diff)
parent0a8fd1346254974c3a852338508e4a4cddbb35f1 (diff)
Merge tag 'usb-4.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH: "Here are a bunch of USB fixes for 4.10-rc3. Yeah, it's a lot, an artifact of the holiday break I think. Lots of gadget and the usual XHCI fixups for reported issues (one day that driver will calm down...) Also included are a bunch of usb-serial driver fixes, and for good measure, a number of much-reported MUSB driver issues have finally been resolved. All of these have been in linux-next with no reported issues" * tag 'usb-4.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (72 commits) USB: fix problems with duplicate endpoint addresses usb: ohci-at91: use descriptor-based gpio APIs correctly usb: storage: unusual_uas: Add JMicron JMS56x to unusual device usb: hub: Move hub_port_disable() to fix warning if PM is disabled usb: musb: blackfin: add bfin_fifo_offset in bfin_ops usb: musb: fix compilation warning on unused function usb: musb: Fix trying to free already-free IRQ 4 usb: musb: dsps: implement clear_ep_rxintr() callback usb: musb: core: add clear_ep_rxintr() to musb_platform_ops USB: serial: ti_usb_3410_5052: fix NULL-deref at open USB: serial: spcp8x5: fix NULL-deref at open USB: serial: quatech2: fix sleep-while-atomic in close USB: serial: pl2303: fix NULL-deref at open USB: serial: oti6858: fix NULL-deref at open USB: serial: omninet: fix NULL-derefs at open and disconnect USB: serial: mos7840: fix misleading interrupt-URB comment USB: serial: mos7840: remove unused write URB USB: serial: mos7840: fix NULL-deref at open USB: serial: mos7720: remove obsolete port initialisation USB: serial: mos7720: fix parallel probe ...
Diffstat (limited to 'include/drm/i2c')