#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; } 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=89389b4d5524350e74974cf711fe4a18206c09d3'>refs</a><a class='active' href='/cgit.cgi/linux/net-next.git/log/sound/pci/rme32.c'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/sound/pci/rme32.c?id=89389b4d5524350e74974cf711fe4a18206c09d3'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/sound/pci/rme32.c?id=89389b4d5524350e74974cf711fe4a18206c09d3'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/sound/pci/rme32.c?id=89389b4d5524350e74974cf711fe4a18206c09d3'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/sound/pci/rme32.c'> <input type='hidden' name='id' value='89389b4d5524350e74974cf711fe4a18206c09d3'/><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=89389b4d5524350e74974cf711fe4a18206c09d3'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound?id=89389b4d5524350e74974cf711fe4a18206c09d3'>sound</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/pci?id=89389b4d5524350e74974cf711fe4a18206c09d3'>pci</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/pci/rme32.c?id=89389b4d5524350e74974cf711fe4a18206c09d3'>rme32.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/sound/pci/rme32.c?id=89389b4d5524350e74974cf711fe4a18206c09d3&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>