define peedi_ecos_cortexm
    # As is obvious, if the eCos HAL_SavedRegister structure changes, this macro may need to be updated.
    printf "[OS_ARM_ECOS_v2]\r\n"
    printf "ITEM = int32_abs, BASE, Cyg_Scheduler_Base::current_thread, 0\r\n"
    printf "ITEM = int32, NEXT, 0x%X\r\n", &((Cyg_Thread*)0)->list_next
    printf "ITEM = int32, PID, 0x%X\r\n", &((Cyg_Thread*)0)->unique_id
    printf "ITEM = str32, NAME, 0x%X, 0\r\n", &((Cyg_Thread*)0)->name
    printf "ITEM = reg32, R0, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[0]
    printf "ITEM = reg32, R1, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[1]
    printf "ITEM = reg32, R2, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[2]
    printf "ITEM = reg32, R3, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[3]
    printf "ITEM = reg32, R4, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[4]
    printf "ITEM = reg32, R5, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[5]
    printf "ITEM = reg32, R6, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[6]
    printf "ITEM = reg32, R7, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[7]
    printf "ITEM = reg32, R8, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[8]
    printf "ITEM = reg32, R9, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[9]
    printf "ITEM = reg32, R10,0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[10]
    printf "ITEM = reg32, R11,0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[11]
    printf "ITEM = reg32, R12,0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.r[12]
    printf "ITEM = reg32, sp, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.sp
    printf "ITEM = reg32, lr, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.pc
    printf "ITEM = reg32, pc, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.pc
    # If r0 doesn't follow sp then there are FP regs:
    if (&((HAL_SavedRegisters*)0)->u.thread.r[0] - &((HAL_SavedRegisters*)0)->u.thread.sp > 1)
      printf "ITEM = reg32, fpscr, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpscr
      printf "ITEM = reg2x32, D0, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[0]
      printf "ITEM = reg2x32, D1, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[1]
      printf "ITEM = reg2x32, D2, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[2]
      printf "ITEM = reg2x32, D3, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[3]
      printf "ITEM = reg2x32, D4, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[4]
      printf "ITEM = reg2x32, D5, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[5]
      printf "ITEM = reg2x32, D6, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[6]
      printf "ITEM = reg2x32, D7, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[7]
      printf "ITEM = reg2x32, D8, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[8]
      printf "ITEM = reg2x32, D9, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[9]
      printf "ITEM = reg2x32, D10, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[10]
      printf "ITEM = reg2x32, D11, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[11]
      printf "ITEM = reg2x32, D12, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[12]
      printf "ITEM = reg2x32, D13, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[13]
      printf "ITEM = reg2x32, D14, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[14]
      printf "ITEM = reg2x32, D15, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.fpregs.d[15]
    end
    # If pc isn't the end, then there's a fake XPSR for us to use:
    if (sizeof(((HAL_SavedRegisters*)0)->u.thread) - (int)&((HAL_SavedRegisters*)0)->u.thread.pc > 4)
      printf "ITEM = reg32, xpsr, 0x%X, 0x%X\r\n", &((Cyg_Thread*)0)->stack_ptr,&((HAL_SavedRegisters*)0)->u.thread.xpsr
    end
end
