Index: sys/cddl/dev/fbt/arm/fbt_isa.c =================================================================== --- sys/cddl/dev/fbt/arm/fbt_isa.c +++ sys/cddl/dev/fbt/arm/fbt_isa.c @@ -42,6 +42,7 @@ #define FBT_PUSHM 0xe92d0000 #define FBT_POPM 0xe8bd0000 #define FBT_JUMP 0xea000000 +#define FBT_SUBSP 0xe24dd000 #define FBT_ENTRY "entry" #define FBT_RETURN "return" @@ -111,12 +112,15 @@ instr = (uint32_t *)symval->value; limit = (uint32_t *)(symval->value + symval->size); - for (; instr < limit; instr++) - if ((*instr & 0xffff0000) == FBT_PUSHM && - (*instr & 0x4000) != 0) - break; + /* + * va_arg functions has first instruction of + * sub sp, sp, #? + */ + if ((*instr & 0xfffff000) == FBT_SUBSP) + instr++; - if (instr >= limit) + if ((*instr & 0xffff0000) != FBT_PUSHM || + (*instr & 0x4000) == 0) return (0); fbt = malloc(sizeof (fbt_probe_t), M_FBT, M_WAITOK | M_ZERO);