1) Swapping to c++ instead of assembly implementations of several kernel APIs to avoid calling probably broken implementations of __EH_FRAME_?? macros
2) Commenting out otherwise unavoidable calls to __EH_FRAME_?? macros in uc_exe.cia. This is a temporary hack.
Both changes to see if they get past an early kernel panic in the Syborg ROM from the current build:
EH ERROR: no exception descriptor for address 0x801eb277
Thread efile.exe::Main Panic USER-EXEC 3
// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//
#ifndef CUSBOTG_H
#define CUSBOTG_H
class CUsbOtgEventWatcher;
class CRequestSessionWatcher;
class MUsbRequestSessionObserver
{
public:
virtual void BusRequestL() = 0;
};
class ROtgStateChangeNotifier
{
public:
ROtgStateChangeNotifier();
~ROtgStateChangeNotifier();
void Register(const RMessage2& aMessage);
void DoNotifyL();
void DoCancelL();
private:
void CompleteNotifierL(TInt);
private:
/** Notification service */
RMessage2 iMessage;
/** Flag to indicate that media change notification is active */
TBool iRegistered;
};
class CUsbOtg: public CBase,
public MUsbRequestSessionObserver
{
public:
enum TOtgState {KOtgStateStart,
KOtgStateAPlugInserted,
KOtgStateSessionOpen,
KOtgStateSessionClose};
public:
static CUsbOtg* NewL();
~CUsbOtg();
protected:
CUsbOtg();
void ConstructL();
public:
// MUsbRequestSessionObserver
void BusRequestL();
void HandleUsbOtgEvent(RUsbOtgDriver::TOtgEvent aEvent);
TBool DeviceInserted();
void NotifyChange(const RMessage2& aMessage);
void NotifyChangeCancel();
TInt BusDrop();
private:
void StartL();
void Stop();
private:
TOtgState iOtgState;
RUsbOtgDriver iUsbOtgDriver;
CUsbOtgEventWatcher* iOtgEventWatcher;
CRequestSessionWatcher* iRequestSessionWatcher;
ROtgStateChangeNotifier iNotifier;
};
#endif