Exemple #1
0
char *wpiGetLabel(UINT addr, INT32 *found = NULL)
{
	INT32 pVal;
	SYM_TYPE pType;
	char name[MAX_SYS_SYM_LEN + 1];
	static char label[DBG_DEMANGLE_PRINT_LEN + 1 + 11];
	bzero(label, DBG_DEMANGLE_PRINT_LEN + 1 + 11);

	if (symFindByValue(sysSymTbl, addr, name, &pVal, &pType) == OK)
	{
		cplusDemangle(name, label, sizeof(label) - 11);
		if ((UINT)pVal != addr)
		{
			sprintf(&label[strlen(label)], "+0x%04x", addr-pVal);
			if (found) *found = 2;
		}
		else
		{
			if (found) *found = 1;
		}
	}
	else
	{
		sprintf(label, "0x%04x", addr);
		if (found) *found = 0;
	}

	return label;
}
Exemple #2
0
LOCAL void taskHookShow
    (
    FUNCPTR	table[],	/* table from which to delete */
    int		maxEntries	/* max entries in table */
    )
    {
    FAST      int ix;
    char *    name;	        /* pointer to symTbl copy of name */
    int       displacement;
    void *    symValue;         /* actual symbol value */
    SYMBOL_ID symId;            /* symbol identifier   */

    char     demangled[TASK_DEMANGLE_PRINT_LEN+1];
    char *   nameToPrint;

    /* 
     * Only check one symLib function pointer (for performance's sake). 
     * All symLib functions are provided by the same library, by convention.    
     */

    if ((_func_symFindSymbol !=(FUNCPTR) NULL) &&
	(sysSymTbl != NULL))
        {
	for (ix = 0; ix < maxEntries; ++ix)
	    {
	    if (table [ix] == NULL)
	        break;

	    if (((* _func_symFindSymbol) (sysSymTbl,  NULL, 
					 (void *)table[ix], 
					 SYM_MASK_NONE, SYM_MASK_NONE, 
					 &symId) == OK) && 
		((* _func_symNameGet) (symId, &name) == OK) && 
		((* _func_symValueGet) (symId, &symValue) == OK)) 
	        {
		nameToPrint = cplusDemangle (name, demangled, 
					     sizeof (demangled));
		printf ("%-15s", nameToPrint);
		if ((displacement = (int)table[ix] - (int)symValue) != 0)
		    printf ("+0x%-4x", displacement);
		else
		    printf ("%6s", "");         /* no displacement */
		}
	    printf ("\n");
	    }
	}
    else
        {
	for (ix = 0; ix < maxEntries; ++ix)
	    {
	    if (table [ix] == NULL)
	        break;

	    printf ("%#21x", table [ix]);
	    printf ("\n");
	    }
	}
    }
Exemple #3
0
LOCAL void timexShowCalls
    (
    CALL_ARRAY calls            /* list of functions to be displayed */
    )
    {
    char      *name;            /* pointer to sym table's copy of name string */
    char      demangled [TIMEX_DEMANGLE_PRINT_LEN + 1];
    char      *nameToPrint;
    void      *value;
    SYMBOL_ID symId;            /* symbol identifier */
    int       offset;
    int       i;
    int       j;
    int       arg;
    int       ncalls = 0;

    for (i = 0; i < MAX_CALLS; i++)
	{
	if (calls[i].func != timexNull)
	    {
	    ncalls++;

	    if ((symFindSymbol (sysSymTbl, NULL, (void *)calls[i].func, 
				SYM_MASK_NONE, SYM_MASK_NONE, 
				&symId) != OK) ||
		(symNameGet (symId, &name) != OK) ||
		(symValueGet (symId, &value) != OK))
		printf ("        %d: 0x%x (", i, (int)calls[i].func);
	    else
		{
	        offset = (int) calls[i].func - (int) value;
	        nameToPrint = cplusDemangle (name, demangled, 
					     sizeof (demangled));
	        if (offset == 0)
		    printf ("        %d: %s (", i, nameToPrint);
	        else
		    printf ("        %d: %s+%x (", i, nameToPrint, offset);
		}

	    for (j = 0; j < MAX_ARGS; j++)
		{
		if (j != 0)
		    printf (", ");

		arg = calls[i].arg[j];
		if ((-9 <= arg) && (arg <= 9))
		    printf ("%d", arg);
		else
		    printf ("0x%x", arg);
		}
	    printf (")\n");
	    }
	}

    if (ncalls == 0)
	printf ("        (none)\n");
    }