#include <sys/types.h> #include <regex.h> struct arm64_annotate { regex_t call_insn, jump_insn; }; static struct ins_ops *arm64__associate_instruction_ops(struct arch *arch, const char *name) { struct arm64_annotate *arm = arch->priv; struct ins_ops *ops; regmatch_t match[2]; if (!regexec(&arm->jump_insn, name, 2, match, 0)) ops = &jump_ops; else if (!regexec(&arm->call_insn, name, 2, match, 0)) ops = &call_ops; else if (!strcmp(name, "ret")) ops = &ret_ops; else return NULL; arch__associate_ins_ops(arch, name, ops); return ops; } static int arm64__annotate_init(struct arch *arch) { struct arm64_annotate *arm; int err; if (arch->initialized) return 0; arm = zalloc(sizeof(*arm)); if (!arm) return -1; /* bl, blr */ err = regcomp(&arm->call_insn, "^blr?$", REG_EXTENDED); if (err) goto out_free_arm; /* b, b.cond, br, cbz/cbnz, tbz/tbnz */ err = regcomp(&arm->jump_insn, "^[ct]?br?\\.?(cc|cs|eq|ge|gt|hi|le|ls|lt|mi|ne|pl)?n?z?$", REG_EXTENDED); if (err) goto out_free_call; arch->initialized = true; arch->priv = arm; arch->associate_instruction_ops = arm64__associate_instruction_ops; arch->objdump.comment_char = ';'; arch->objdump.skip_functions_char = '+'; return 0; out_free_call: regfree(&arm->call_insn); out_free_arm: free(arm); return -1; } t' value='switch'/></form></td></tr> <tr><td class='sub'>net-next plumbings</td><td class='sub right'>Tobias Klauser</td></tr></table> <table class='tabs'><tr><td> <a href='/cgit.cgi/linux/net-next.git/'>summary</a><a href='/cgit.cgi/linux/net-next.git/refs/?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>refs</a><a class='active' href='/cgit.cgi/linux/net-next.git/log/drivers/usb/renesas_usbhs/mod_gadget.c'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/drivers/usb/renesas_usbhs/mod_gadget.c?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/drivers/usb/renesas_usbhs/mod_gadget.c?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/drivers/usb/renesas_usbhs/mod_gadget.c?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/drivers/usb/renesas_usbhs/mod_gadget.c'> <input type='hidden' name='id' value='722eef28616798dd10f9a2e4254163a5bcd54eea'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>drivers</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>usb</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/renesas_usbhs?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>renesas_usbhs</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/renesas_usbhs/mod_gadget.c?id=722eef28616798dd10f9a2e4254163a5bcd54eea'>mod_gadget.c</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/renesas_usbhs/mod_gadget.c?id=722eef28616798dd10f9a2e4254163a5bcd54eea&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>