Support build with Clang

Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Index: openhpi-3.6.1/plugins/dynamic_simulator/new_sim.cpp
===================================================================
--- openhpi-3.6.1.orig/plugins/dynamic_simulator/new_sim.cpp
+++ openhpi-3.6.1/plugins/dynamic_simulator/new_sim.cpp
@@ -415,7 +415,7 @@ extern "C" {
 /**
  * Alias for @ref öh_open(), implemented by @ref NewSimulatorOpen().
  **/
-static void * NewSimulatorOpen( GHashTable *, unsigned int, oh_evt_queue * ) __attribute__((used));
+static void * NewSimulatorOpen( GHashTable *, unsigned int, oh_evt_queue * ) __asm__("NewSimulatorOpen") __attribute__((used));
 
 /**
  * @fn NewSimulatorOpen( GHashTable *handler_config, unsigned int hid, 
@@ -530,7 +530,7 @@ static void * NewSimulatorOpen( GHashTab
 /**
  * Alias for @ref öh_close(), implemented by @ref NewSimulatorClose().
  **/
-static void NewSimulatorClose( void * ) __attribute__((used));
+static void NewSimulatorClose( void * ) __asm__("NewSimulatorClose") __attribute__((used));
 
 /**
  * @relate NewSimulatorClose
@@ -585,7 +585,7 @@ static void NewSimulatorClose( void *hnd
  * 
  * @return HPI error code
  **/
-static SaErrorT NewSimulatorGetEvent( void * ) __attribute__((used));
+static SaErrorT NewSimulatorGetEvent( void * ) __asm__("NewSimulatorGetEvent") __attribute__((used));
 
 static SaErrorT NewSimulatorGetEvent( void *hnd ) {
    dbg( "NewSimulatorGetEvent" );
@@ -613,7 +613,7 @@ static SaErrorT NewSimulatorGetEvent( vo
  * 
  * @return HPI error code
  **/
-static SaErrorT NewSimulatorDiscoverResources( void * ) __attribute__((used));
+static SaErrorT NewSimulatorDiscoverResources( void * ) __asm__("NewSimulatorDiscoverResources") __attribute__((used));
 
 static SaErrorT NewSimulatorDiscoverResources( void *hnd ) {
    dbg( "NewSimulatorDiscoverResources" );
@@ -641,7 +641,7 @@ static SaErrorT NewSimulatorDiscoverReso
  * 
  * @return HPI error code
  **/
-static SaErrorT NewSimulatorSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __attribute__((used));
+static SaErrorT NewSimulatorSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __asm__("NewSimulatorSetResourceTag") __attribute__((used));
 
 static SaErrorT NewSimulatorSetResourceTag( void *hnd, SaHpiResourceIdT id, 
                                              SaHpiTextBufferT *tag ) {
@@ -669,7 +669,7 @@ static SaErrorT NewSimulatorSetResourceT
  * 
  * @return HPI error code
  **/
-static SaErrorT NewSimulatorSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __attribute__((used));
+static SaErrorT NewSimulatorSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __asm__("NewSimulatorSetResourceSeverity") __attribute__((used));
 
 static SaErrorT NewSimulatorSetResourceSeverity( void *hnd, SaHpiResourceIdT id, 
                                                   SaHpiSeverityT sev ) {
@@ -703,7 +703,7 @@ static SaErrorT NewSimulatorGetSensorRea
                                                SaHpiResourceIdT id,
                                                SaHpiSensorNumT num,
                                                SaHpiSensorReadingT *data,
-                                               SaHpiEventStateT *state ) __attribute__((used));
+                                               SaHpiEventStateT *state ) __asm__("NewSimulatorGetSensorReading") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSensorReading( void *hnd,
                                                SaHpiResourceIdT id,
@@ -738,7 +738,7 @@ static SaErrorT NewSimulatorGetSensorRea
 static SaErrorT NewSimulatorGetSensorThresholds( void *hnd,
                                           SaHpiResourceIdT,
                                           SaHpiSensorNumT,
-                                          SaHpiSensorThresholdsT * ) __attribute__((used));
+                                          SaHpiSensorThresholdsT * ) __asm__("NewSimulatorGetSensorThresholds") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSensorThresholds( void *hnd,
                                                   SaHpiResourceIdT id,
@@ -777,7 +777,7 @@ static SaErrorT NewSimulatorGetSensorThr
 static SaErrorT NewSimulatorSetSensorThresholds( void *,
                                                   SaHpiResourceIdT,
                                                   SaHpiSensorNumT,
-                                                  const SaHpiSensorThresholdsT * ) __attribute__((used));
+                                                  const SaHpiSensorThresholdsT * ) __asm__("NewSimulatorSetSensorThresholds") __attribute__((used));
 
 static SaErrorT NewSimulatorSetSensorThresholds( void *hnd,
                                                   SaHpiResourceIdT id,
@@ -815,7 +815,7 @@ static SaErrorT NewSimulatorSetSensorThr
 static SaErrorT NewSimulatorGetSensorEnable( void *,
                                               SaHpiResourceIdT,
                                               SaHpiSensorNumT,
-                                              SaHpiBoolT * ) __attribute__((used));
+                                              SaHpiBoolT * ) __asm__("NewSimulatorGetSensorEnable") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSensorEnable( void *hnd,
                                               SaHpiResourceIdT id,
@@ -849,7 +849,7 @@ static SaErrorT NewSimulatorGetSensorEna
 static SaErrorT NewSimulatorSetSensorEnable( void *,
                                               SaHpiResourceIdT,
                                               SaHpiSensorNumT,
-                                              SaHpiBoolT ) __attribute__((used));
+                                              SaHpiBoolT ) __asm__("NewSimulatorSetSensorEnable") __attribute__((used));
 
 static SaErrorT NewSimulatorSetSensorEnable( void *hnd,
                                               SaHpiResourceIdT id,
@@ -883,7 +883,7 @@ static SaErrorT NewSimulatorSetSensorEna
 static SaErrorT NewSimulatorGetSensorEventEnables( void *,
                                                     SaHpiResourceIdT,
                                                     SaHpiSensorNumT,
-                                                    SaHpiBoolT * ) __attribute__((used));
+                                                    SaHpiBoolT * ) __asm__("NewSimulatorGetSensorEventEnables") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSensorEventEnables( void *hnd,
                                                     SaHpiResourceIdT id,
@@ -916,7 +916,7 @@ static SaErrorT NewSimulatorGetSensorEve
 static SaErrorT NewSimulatorSetSensorEventEnables( void *,
                                                     SaHpiResourceIdT,
                                                     SaHpiSensorNumT,
-                                                    SaHpiBoolT ) __attribute__((used));
+                                                    SaHpiBoolT ) __asm__("NewSimulatorSetSensorEventEnables") __attribute__((used));
 
 static SaErrorT NewSimulatorSetSensorEventEnables( void *hnd,
                                                     SaHpiResourceIdT id,
@@ -952,7 +952,7 @@ static SaErrorT NewSimulatorGetSensorEve
                                                   SaHpiResourceIdT,
                                                   SaHpiSensorNumT,
                                                   SaHpiEventStateT *,
-                                                  SaHpiEventStateT * ) __attribute__((used));
+                                                  SaHpiEventStateT * ) __asm__("NewSimulatorGetSensorEventMasks") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSensorEventMasks( void *hnd,
                                                   SaHpiResourceIdT id,
@@ -990,7 +990,7 @@ static SaErrorT NewSimulatorSetSensorEve
                                                   SaHpiSensorNumT,
                                                   SaHpiSensorEventMaskActionT,
                                                   SaHpiEventStateT,
-                                                  SaHpiEventStateT ) __attribute__((used));
+                                                  SaHpiEventStateT ) __asm__("NewSimulatorSetSensorEventMasks") __attribute__((used));
 
 static SaErrorT NewSimulatorSetSensorEventMasks( void *hnd,
                                                   SaHpiResourceIdT id,
@@ -1026,7 +1026,7 @@ static SaErrorT NewSimulatorSetSensorEve
 static SaErrorT NewSimulatorGetControlState( void *, SaHpiResourceIdT,
                                               SaHpiCtrlNumT,
                                               SaHpiCtrlModeT *,
-                                              SaHpiCtrlStateT * ) __attribute__((used));
+                                              SaHpiCtrlStateT * ) __asm__("NewSimulatorGetControlState") __attribute__((used));
 
 static SaErrorT NewSimulatorGetControlState( void *hnd, SaHpiResourceIdT id,
                                               SaHpiCtrlNumT num,
@@ -1061,7 +1061,7 @@ static SaErrorT NewSimulatorGetControlSt
 static SaErrorT NewSimulatorSetControlState( void *, SaHpiResourceIdT,
                                               SaHpiCtrlNumT,
                                               SaHpiCtrlModeT,
-                                              SaHpiCtrlStateT * ) __attribute__((used));
+                                              SaHpiCtrlStateT * ) __asm__("NewSimulatorSetControlState") __attribute__((used));
 
 static SaErrorT NewSimulatorSetControlState( void *hnd, SaHpiResourceIdT id,
                                               SaHpiCtrlNumT num,
@@ -1099,7 +1099,7 @@ static SaErrorT NewSimulatorGetNextAnnou
                                        SaHpiAnnunciatorNumT, 
                                        SaHpiSeverityT, 
                                        SaHpiBoolT, 
-                                       SaHpiAnnouncementT *) __attribute__((used));
+                                       SaHpiAnnouncementT *) __asm__("NewSimulatorGetNextAnnouncement") __attribute__((used));
  
 static SaErrorT NewSimulatorGetNextAnnouncement(void *hnd, SaHpiResourceIdT id,
                                        SaHpiAnnunciatorNumT num,
@@ -1135,7 +1135,7 @@ static SaErrorT NewSimulatorGetNextAnnou
 static SaErrorT NewSimulatorGetAnnouncement(void *, SaHpiResourceIdT, 
                                        SaHpiAnnunciatorNumT, 
                                        SaHpiEntryIdT, 
-                                       SaHpiAnnouncementT *) __attribute__((used));
+                                       SaHpiAnnouncementT *) __asm__("NewSimulatorGetAnnouncement") __attribute__((used));
  
 static SaErrorT NewSimulatorGetAnnouncement(void *hnd, SaHpiResourceIdT id, 
                                        SaHpiAnnunciatorNumT  num, 
@@ -1171,7 +1171,7 @@ static SaErrorT NewSimulatorGetAnnouncem
 static SaErrorT NewSimulatorAckAnnouncement(void *, SaHpiResourceIdT, 
                                        SaHpiAnnunciatorNumT, 
                                        SaHpiEntryIdT, 
-                                       SaHpiSeverityT) __attribute__((used));
+                                       SaHpiSeverityT) __asm__("NewSimulatorAckAnnouncement") __attribute__((used));
  
 static SaErrorT NewSimulatorAckAnnouncement(void *hnd, SaHpiResourceIdT id, 
                                        SaHpiAnnunciatorNumT  num, 
@@ -1205,7 +1205,7 @@ static SaErrorT NewSimulatorAckAnnouncem
  **/
 static SaErrorT NewSimulatorAddAnnouncement(void *, SaHpiResourceIdT, 
                                        SaHpiAnnunciatorNumT, 
-                                       SaHpiAnnouncementT *) __attribute__((used));
+                                       SaHpiAnnouncementT *) __asm__("NewSimulatorAddAnnouncement") __attribute__((used));
 
 static SaErrorT NewSimulatorAddAnnouncement(void *hnd, SaHpiResourceIdT id, 
                                        SaHpiAnnunciatorNumT  num, 
@@ -1239,7 +1239,7 @@ static SaErrorT NewSimulatorAddAnnouncem
 static SaErrorT NewSimulatorDelAnnouncement(void *, SaHpiResourceIdT, 
                                        SaHpiAnnunciatorNumT, 
                                        SaHpiEntryIdT, 
-                                       SaHpiSeverityT) __attribute__((used));
+                                       SaHpiSeverityT) __asm__("NewSimulatorDelAnnouncement") __attribute__((used));
 
 static SaErrorT NewSimulatorDelAnnouncement(void *hnd, SaHpiResourceIdT id, 
                                        SaHpiAnnunciatorNumT  num, 
@@ -1273,7 +1273,7 @@ static SaErrorT NewSimulatorDelAnnouncem
  **/
 static SaErrorT NewSimulatorGetAnnMode(void *, SaHpiResourceIdT, 
                                        SaHpiAnnunciatorNumT,
-                                       SaHpiAnnunciatorModeT *) __attribute__((used));
+                                       SaHpiAnnunciatorModeT *) __asm__("NewSimulatorGetAnnMode") __attribute__((used));
 
 static SaErrorT NewSimulatorGetAnnMode(void *hnd, SaHpiResourceIdT id, 
                                        SaHpiAnnunciatorNumT  num, 
@@ -1306,7 +1306,7 @@ static SaErrorT NewSimulatorGetAnnMode(v
  **/
 static SaErrorT NewSimulatorSetAnnMode(void *, SaHpiResourceIdT, 
                                        SaHpiAnnunciatorNumT,
-                                       SaHpiAnnunciatorModeT) __attribute__((used));
+                                       SaHpiAnnunciatorModeT) __asm__("NewSimulatorSetAnnMode") __attribute__((used));
 
 static SaErrorT NewSimulatorSetAnnMode(void *hnd, SaHpiResourceIdT id, 
                                        SaHpiAnnunciatorNumT  num,
@@ -1340,7 +1340,7 @@ static SaErrorT NewSimulatorSetAnnMode(v
 static SaErrorT NewSimulatorGetIdrInfo( void *,
                                          SaHpiResourceIdT,
                                          SaHpiIdrIdT,
-                                         SaHpiIdrInfoT * ) __attribute__((used));
+                                         SaHpiIdrInfoT * ) __asm__("NewSimulatorGetIdrInfo") __attribute__((used));
 
 static SaErrorT NewSimulatorGetIdrInfo( void *hnd,
                                          SaHpiResourceIdT id,
@@ -1380,7 +1380,7 @@ static SaErrorT NewSimulatorGetIdrAreaHe
                                                SaHpiIdrAreaTypeT,
                                                SaHpiEntryIdT,
                                                SaHpiEntryIdT *,
-                                               SaHpiIdrAreaHeaderT * ) __attribute__((used));
+                                               SaHpiIdrAreaHeaderT * ) __asm__("NewSimulatorGetIdrAreaHeader") __attribute__((used));
 
 static SaErrorT NewSimulatorGetIdrAreaHeader( void *hnd,
                                                SaHpiResourceIdT id,
@@ -1419,7 +1419,7 @@ static SaErrorT NewSimulatorAddIdrArea(
                                          SaHpiResourceIdT,
                                          SaHpiIdrIdT,
                                          SaHpiIdrAreaTypeT,
-                                         SaHpiEntryIdT * ) __attribute__((used));
+                                         SaHpiEntryIdT * ) __asm__("NewSimulatorAddIdrArea") __attribute__((used));
 
 static SaErrorT NewSimulatorAddIdrArea( void *hnd,
                                          SaHpiResourceIdT id,
@@ -1456,7 +1456,7 @@ static SaErrorT NewSimulatorAddIdrAreaBy
                                          SaHpiResourceIdT,
                                          SaHpiIdrIdT,
                                          SaHpiIdrAreaTypeT,
-                                         SaHpiEntryIdT ) __attribute__((used));
+                                         SaHpiEntryIdT ) __asm__("NewSimulatorAddIdrAreaById") __attribute__((used));
 
 static SaErrorT NewSimulatorAddIdrAreaById( void *hnd,
                                          SaHpiResourceIdT id,
@@ -1490,7 +1490,7 @@ static SaErrorT NewSimulatorAddIdrAreaBy
 static SaErrorT NewSimulatorDelIdrArea( void *,
                                          SaHpiResourceIdT,
                                          SaHpiIdrIdT,
-                                         SaHpiEntryIdT ) __attribute__((used));
+                                         SaHpiEntryIdT ) __asm__("NewSimulatorDelIdrArea") __attribute__((used));
 
 static SaErrorT NewSimulatorDelIdrArea( void *hnd,
                                          SaHpiResourceIdT id,
@@ -1532,7 +1532,7 @@ static SaErrorT NewSimulatorGetIdrField(
                                           SaHpiIdrFieldTypeT,
                                           SaHpiEntryIdT,
                                           SaHpiEntryIdT *,
-                                          SaHpiIdrFieldT * ) __attribute__((used));
+                                          SaHpiIdrFieldT * ) __asm__("NewSimulatorGetIdrField") __attribute__((used));
 
 static SaErrorT NewSimulatorGetIdrField( void *hnd,
                                           SaHpiResourceIdT id,
@@ -1570,7 +1570,7 @@ static SaErrorT NewSimulatorGetIdrField(
 static SaErrorT NewSimulatorAddIdrField( void *,
                                           SaHpiResourceIdT,
                                           SaHpiIdrIdT,
-                                          SaHpiIdrFieldT * ) __attribute__((used));
+                                          SaHpiIdrFieldT * ) __asm__("NewSimulatorAddIdrField") __attribute__((used));
 
 static SaErrorT NewSimulatorAddIdrField( void *hnd,
                                           SaHpiResourceIdT id,
@@ -1604,7 +1604,7 @@ static SaErrorT NewSimulatorAddIdrField(
 static SaErrorT NewSimulatorAddIdrFieldById( void *,
                                           SaHpiResourceIdT,
                                           SaHpiIdrIdT,
-                                          SaHpiIdrFieldT * ) __attribute__((used));
+                                          SaHpiIdrFieldT * ) __asm__("NewSimulatorAddIdrFieldById") __attribute__((used));
 
 static SaErrorT NewSimulatorAddIdrFieldById( void *hnd,
                                           SaHpiResourceIdT id,
@@ -1637,7 +1637,7 @@ static SaErrorT NewSimulatorAddIdrFieldB
 static SaErrorT NewSimulatorSetIdrField( void *,
                                           SaHpiResourceIdT,
                                           SaHpiIdrIdT,
-                                          SaHpiIdrFieldT * ) __attribute__((used));
+                                          SaHpiIdrFieldT * ) __asm__("NewSimulatorSetIdrField") __attribute__((used));
 
 static SaErrorT NewSimulatorSetIdrField( void *hnd,
                                           SaHpiResourceIdT id,
@@ -1672,7 +1672,7 @@ static SaErrorT NewSimulatorDelIdrField(
                                           SaHpiResourceIdT,
                                           SaHpiIdrIdT,
                                           SaHpiEntryIdT,
-                                          SaHpiEntryIdT ) __attribute__((used));
+                                          SaHpiEntryIdT ) __asm__("NewSimulatorDelIdrField") __attribute__((used));
 
 static SaErrorT NewSimulatorDelIdrField( void *hnd,
                                           SaHpiResourceIdT id,
@@ -1704,7 +1704,7 @@ static SaErrorT NewSimulatorDelIdrField(
  **/ 
 static SaErrorT NewSimulatorGetSelInfo( void *,
                                          SaHpiResourceIdT,
-                                         SaHpiEventLogInfoT * ) __attribute__((used));
+                                         SaHpiEventLogInfoT * ) __asm__("NewSimulatorGetSelInfo") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSelInfo( void *hnd,
                                          SaHpiResourceIdT id,
@@ -1736,7 +1736,7 @@ static SaErrorT NewSimulatorGetSelInfo(
  * 
  * @return HPI error code
  **/ 
-static SaErrorT NewSimulatorSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __attribute__((used));
+static SaErrorT NewSimulatorSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __asm__("NewSimulatorSetSelTime") __attribute__((used));
 
 static SaErrorT NewSimulatorSetSelTime( void *hnd, SaHpiResourceIdT id, SaHpiTimeT t ) {
    SaErrorT rv = SA_ERR_HPI_INTERNAL_ERROR;
@@ -1766,7 +1766,7 @@ static SaErrorT NewSimulatorSetSelTime(
  * 
  * @return HPI error code
  **/ 
-static SaErrorT NewSimulatorAddSelEntry( void *, SaHpiResourceIdT, const SaHpiEventT * ) __attribute__((used));
+static SaErrorT NewSimulatorAddSelEntry( void *, SaHpiResourceIdT, const SaHpiEventT * ) __asm__("NewSimulatorAddSelEntry") __attribute__((used));
 
 static SaErrorT NewSimulatorAddSelEntry( void *hnd, SaHpiResourceIdT id,
                                           const SaHpiEventT *Event ) {
@@ -1809,7 +1809,7 @@ static SaErrorT NewSimulatorGetSelEntry(
                                           SaHpiEventLogEntryIdT *,
                                           SaHpiEventLogEntryT *,
                                           SaHpiRdrT *,
-                                          SaHpiRptEntryT * ) __attribute__((used));
+                                          SaHpiRptEntryT * ) __asm__("NewSimulatorGetSelEntry") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSelEntry( void *hnd, SaHpiResourceIdT id,
                                           SaHpiEventLogEntryIdT current,
@@ -1844,7 +1844,7 @@ static SaErrorT NewSimulatorGetSelEntry(
  * 
  * @return HPI error code
  **/ 
-static SaErrorT NewSimulatorClearSel( void *, SaHpiResourceIdT ) __attribute__((used));
+static SaErrorT NewSimulatorClearSel( void *, SaHpiResourceIdT ) __asm__("NewSimulatorClearSel") __attribute__((used));
 
 static SaErrorT NewSimulatorClearSel( void *hnd, SaHpiResourceIdT id ) {
    SaErrorT rv = SA_ERR_HPI_INTERNAL_ERROR;
@@ -1875,7 +1875,7 @@ static SaErrorT NewSimulatorClearSel( vo
  * @return HPI error code
  **/ 
 static SaErrorT NewSimulatorSetSelState(void *, SaHpiResourceIdT, 
-                                         SaHpiBoolT) __attribute__((used));
+                                         SaHpiBoolT) __asm__("NewSimulatorSetSelState") __attribute__((used));
 
 static SaErrorT NewSimulatorSetSelState( void *hnd, SaHpiResourceIdT id,
                                           SaHpiBoolT state ) {
@@ -1907,7 +1907,7 @@ static SaErrorT NewSimulatorSetSelState(
  * @return HPI error code
  **/ 
 static SaErrorT NewSimulatorGetSelState(void *, SaHpiResourceIdT, 
-                                         SaHpiBoolT *) __attribute__((used));
+                                         SaHpiBoolT *) __asm__("NewSimulatorGetSelState") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSelState( void *hnd, SaHpiResourceIdT id,
                                           SaHpiBoolT *state ) {
@@ -1939,7 +1939,7 @@ static SaErrorT NewSimulatorGetSelState(
  * @return HPI error code
  **/ 
 static SaErrorT NewSimulatorGetSelCapability(void *, SaHpiResourceIdT, 
-                             SaHpiEventLogCapabilitiesT *) __attribute__((used));
+                             SaHpiEventLogCapabilitiesT *) __asm__("NewSimulatorGetSelCapability") __attribute__((used));
 
 static SaErrorT NewSimulatorGetSelCapability( void *hnd, SaHpiResourceIdT id,
                                           SaHpiEventLogCapabilitiesT *caps ) {
@@ -1970,7 +1970,7 @@ static SaErrorT NewSimulatorGetSelCapabi
  * @return HPI error code
  **/ 
 static SaErrorT NewSimulatorResetSelOverflow(void *, SaHpiResourceIdT) 
-                                                           __attribute__((used));
+                                                           __asm__("NewSimulatorResetSelOverflow") __attribute__((used));
 
 static SaErrorT NewSimulatorResetSelOverflow( void *hnd, SaHpiResourceIdT id ) {
 
@@ -2002,7 +2002,7 @@ static SaErrorT NewSimulatorResetSelOver
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorHotswapPolicyCancel( void *, SaHpiResourceIdT,
-                                                  SaHpiTimeoutT ) __attribute__((used));
+                                                  SaHpiTimeoutT ) __asm__("NewSimulatorHotswapPolicyCancel") __attribute__((used));
 
 static SaErrorT NewSimulatorHotswapPolicyCancel( void *hnd, SaHpiResourceIdT id,
                                                   SaHpiTimeoutT timeout) {
@@ -2032,7 +2032,7 @@ static SaErrorT NewSimulatorHotswapPolic
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorGetHotswapState( void *, SaHpiResourceIdT ,
-                                              SaHpiHsStateT * ) __attribute__((used));
+                                              SaHpiHsStateT * ) __asm__("NewSimulatorGetHotswapState") __attribute__((used));
 
 static SaErrorT NewSimulatorGetHotswapState( void *hnd, SaHpiResourceIdT id,
                                               SaHpiHsStateT *state ) {
@@ -2063,7 +2063,7 @@ static SaErrorT NewSimulatorGetHotswapSt
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorSetHotswapState( void *, SaHpiResourceIdT,
-                                              SaHpiHsStateT ) __attribute__((used));
+                                              SaHpiHsStateT ) __asm__("NewSimulatorSetHotswapState") __attribute__((used));
 
 static SaErrorT NewSimulatorSetHotswapState( void *hnd, SaHpiResourceIdT id,
                                               SaHpiHsStateT state ) {
@@ -2105,7 +2105,7 @@ static SaErrorT NewSimulatorSetHotswapSt
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorRequestHotswapAction( void *, SaHpiResourceIdT,
-                                                   SaHpiHsActionT ) __attribute__((used));
+                                                   SaHpiHsActionT ) __asm__("NewSimulatorRequestHotswapAction") __attribute__((used));
 
 static SaErrorT NewSimulatorRequestHotswapAction( void *hnd, SaHpiResourceIdT id,
                                                    SaHpiHsActionT act ) {
@@ -2139,7 +2139,7 @@ static SaErrorT NewSimulatorRequestHotsw
 static SaErrorT NewSimulatorGetWatchdogInfo(void *,
                                              SaHpiResourceIdT,
                                              SaHpiWatchdogNumT,
-                                             SaHpiWatchdogT *) __attribute__((used));
+                                             SaHpiWatchdogT *) __asm__("NewSimulatorGetWatchdogInfo") __attribute__((used));
 
 static SaErrorT NewSimulatorGetWatchdogInfo(void *hnd,
                                              SaHpiResourceIdT  id,
@@ -2170,7 +2170,7 @@ static SaErrorT NewSimulatorGetWatchdogI
 static SaErrorT NewSimulatorSetWatchdogInfo(void *,
                                              SaHpiResourceIdT,
                                              SaHpiWatchdogNumT,
-                                             SaHpiWatchdogT *) __attribute__((used));
+                                             SaHpiWatchdogT *) __asm__("NewSimulatorSetWatchdogInfo") __attribute__((used));
 
 static SaErrorT NewSimulatorSetWatchdogInfo(void *hnd,
                                              SaHpiResourceIdT  id,
@@ -2199,7 +2199,7 @@ static SaErrorT NewSimulatorSetWatchdogI
  **/
 static SaErrorT NewSimulatorResetWatchdog(void *,
                                            SaHpiResourceIdT,
-                                           SaHpiWatchdogNumT) __attribute__((used));
+                                           SaHpiWatchdogNumT) __asm__("NewSimulatorResetWatchdog") __attribute__((used));
 
 static SaErrorT NewSimulatorResetWatchdog(void *hnd,
                                            SaHpiResourceIdT  id,
@@ -2229,7 +2229,7 @@ static SaErrorT NewSimulatorResetWatchdo
 static SaErrorT NewSimulatorGetFumiSpec(void *, 
                                          SaHpiResourceIdT, 
                                          SaHpiFumiNumT, 
-                                         SaHpiFumiSpecInfoT *) __attribute__((used));
+                                         SaHpiFumiSpecInfoT *) __asm__("NewSimulatorGetFumiSpec") __attribute__((used));
 
 static SaErrorT NewSimulatorGetFumiSpec(void *hnd, 
                                          SaHpiResourceIdT    id, 
@@ -2260,7 +2260,7 @@ static SaErrorT NewSimulatorGetFumiSpec(
 static SaErrorT NewSimulatorGetFumiServImpact(void *, 
                                                SaHpiResourceIdT, 
                                                SaHpiFumiNumT, 
-                                               SaHpiFumiServiceImpactDataT *) __attribute__((used));
+                                               SaHpiFumiServiceImpactDataT *) __asm__("NewSimulatorGetFumiServImpact") __attribute__((used));
 
 static SaErrorT NewSimulatorGetFumiServImpact(void *hnd, 
                                                SaHpiResourceIdT            id, 
@@ -2294,7 +2294,7 @@ static SaErrorT NewSimulatorSetFumiSourc
                                            SaHpiResourceIdT, 
                                            SaHpiFumiNumT, 
                                            SaHpiBankNumT, 
-                                           SaHpiTextBufferT *) __attribute__((used));
+                                           SaHpiTextBufferT *) __asm__("NewSimulatorSetFumiSource") __attribute__((used));
                                            
 static SaErrorT NewSimulatorSetFumiSource(void             *hnd, 
                                            SaHpiResourceIdT  id, 
@@ -2327,7 +2327,7 @@ static SaErrorT NewSimulatorSetFumiSourc
 static SaErrorT NewSimulatorValidateFumiSource(void *, 
                                                 SaHpiResourceIdT, 
                                                 SaHpiFumiNumT, 
-                                                SaHpiBankNumT) __attribute__((used));
+                                                SaHpiBankNumT) __asm__("NewSimulatorValidateFumiSource") __attribute__((used));
 
 static SaErrorT NewSimulatorValidateFumiSource(void            *hnd, 
                                                 SaHpiResourceIdT id, 
@@ -2361,7 +2361,7 @@ static SaErrorT NewSimulatorGetFumiSourc
                                            SaHpiResourceIdT, 
                                            SaHpiFumiNumT, 
                                            SaHpiBankNumT, 
-                                           SaHpiFumiSourceInfoT *) __attribute__((used));
+                                           SaHpiFumiSourceInfoT *) __asm__("NewSimulatorGetFumiSource") __attribute__((used));
                                            
 static SaErrorT NewSimulatorGetFumiSource(void                *hnd, 
                                            SaHpiResourceIdT     id, 
@@ -2400,7 +2400,7 @@ static SaErrorT NewSimulatorGetFumiSourc
                              SaHpiBankNumT, 
                              SaHpiEntryIdT, 
                              SaHpiEntryIdT *, 
-                             SaHpiFumiComponentInfoT *) __attribute__((used));
+                             SaHpiFumiComponentInfoT *) __asm__("NewSimulatorGetFumiSourceComponent") __attribute__((used));
 
 static SaErrorT NewSimulatorGetFumiSourceComponent(void            *hnd, 
                                                     SaHpiResourceIdT id, 
@@ -2437,7 +2437,7 @@ static SaErrorT NewSimulatorGetFumiTarge
                                            SaHpiResourceIdT, 
                                            SaHpiFumiNumT, 
                                            SaHpiBankNumT, 
-                                           SaHpiFumiBankInfoT *) __attribute__((used));
+                                           SaHpiFumiBankInfoT *) __asm__("NewSimulatorGetFumiTarget") __attribute__((used));
 
 static SaErrorT NewSimulatorGetFumiTarget(void              *hnd, 
                                            SaHpiResourceIdT   id, 
@@ -2476,7 +2476,7 @@ static SaErrorT NewSimulatorGetFumiTarge
                                                     SaHpiBankNumT, 
                                                     SaHpiEntryIdT, 
                                                     SaHpiEntryIdT *, 
-                                                    SaHpiFumiComponentInfoT *) __attribute__((used));
+                                                    SaHpiFumiComponentInfoT *) __asm__("NewSimulatorGetFumiTargetComponent") __attribute__((used));
                                                     
  static SaErrorT NewSimulatorGetFumiTargetComponent(void                  *hnd, 
                                                     SaHpiResourceIdT        id, 
@@ -2511,7 +2511,7 @@ static SaErrorT NewSimulatorGetFumiTarge
 static SaErrorT NewSimulatorGetFumiLogicalTarget(void *, 
                                                   SaHpiResourceIdT, 
                                                   SaHpiFumiNumT, 
-                                                  SaHpiFumiLogicalBankInfoT *) __attribute__((used));
+                                                  SaHpiFumiLogicalBankInfoT *) __asm__("NewSimulatorGetFumiLogicalTarget") __attribute__((used));
 
 static SaErrorT NewSimulatorGetFumiLogicalTarget(void            *hnd, 
                                                   SaHpiResourceIdT id,
@@ -2547,7 +2547,7 @@ static SaErrorT NewSimulatorGetFumiLogic
                       SaHpiFumiNumT, 
                       SaHpiEntryIdT, 
                       SaHpiEntryIdT *, 
-                      SaHpiFumiLogicalComponentInfoT *) __attribute__((used));
+                      SaHpiFumiLogicalComponentInfoT *) __asm__("NewSimulatorGetFumiLogicalTargetComponent") __attribute__((used));
                                                            
 static SaErrorT NewSimulatorGetFumiLogicalTargetComponent(void         *hnd, 
                                                          SaHpiResourceIdT id, 
@@ -2579,7 +2579,7 @@ static SaErrorT NewSimulatorGetFumiLogic
  **/                  
 static SaErrorT NewSimulatorStartFumiBackup(void *, 
                                              SaHpiResourceIdT, 
-                                             SaHpiFumiNumT) __attribute__((used));
+                                             SaHpiFumiNumT) __asm__("NewSimulatorStartFumiBackup") __attribute__((used));
                                              
 static SaErrorT NewSimulatorStartFumiBackup(void            *hnd, 
                                              SaHpiResourceIdT id, 
@@ -2612,7 +2612,7 @@ static SaErrorT NewSimulatorSetFumiBankO
                                               SaHpiResourceIdT, 
                                               SaHpiFumiNumT, 
                                               SaHpiBankNumT, 
-                                              SaHpiUint32T) __attribute__((used));
+                                              SaHpiUint32T) __asm__("NewSimulatorSetFumiBankOrder") __attribute__((used));
 
 static SaErrorT NewSimulatorSetFumiBankOrder(void            *hnd, 
                                               SaHpiResourceIdT id, 
@@ -2647,7 +2647,7 @@ static SaErrorT NewSimulatorStartFumiBan
                                                SaHpiResourceIdT, 
                                                SaHpiFumiNumT, 
                                                SaHpiBankNumT, 
-                                               SaHpiBankNumT) __attribute__((used));
+                                               SaHpiBankNumT) __asm__("NewSimulatorStartFumiBankCopy") __attribute__((used));
                                                
 static SaErrorT NewSimulatorStartFumiBankCopy(void             *hnd, 
                                                SaHpiResourceIdT  id, 
@@ -2680,7 +2680,7 @@ static SaErrorT NewSimulatorStartFumiBan
 static SaErrorT NewSimulatorStartFumiInstall(void *, 
                                               SaHpiResourceIdT, 
                                               SaHpiFumiNumT, 
-                                              SaHpiBankNumT) __attribute__((used));
+                                              SaHpiBankNumT) __asm__("NewSimulatorStartFumiInstall") __attribute__((used));
                                               
 static SaErrorT NewSimulatorStartFumiInstall(void             *hnd, 
                                               SaHpiResourceIdT  id, 
@@ -2714,7 +2714,7 @@ static SaErrorT NewSimulatorGetFumiStatu
                                            SaHpiResourceIdT, 
                                            SaHpiFumiNumT, 
                                            SaHpiBankNumT, 
-                                           SaHpiFumiUpgradeStatusT *) __attribute__((used));
+                                           SaHpiFumiUpgradeStatusT *) __asm__("NewSimulatorGetFumiStatus") __attribute__((used));
                                            
 static SaErrorT NewSimulatorGetFumiStatus(void                   *hnd, 
                                            SaHpiResourceIdT        id, 
@@ -2747,7 +2747,7 @@ static SaErrorT NewSimulatorGetFumiStatu
 static SaErrorT NewSimulatorStartFumiVerification(void *, 
                                                    SaHpiResourceIdT, 
                                                    SaHpiFumiNumT, 
-                                                   SaHpiBankNumT) __attribute__((used));
+                                                   SaHpiBankNumT) __asm__("NewSimulatorStartFumiVerification") __attribute__((used));
                                                    
 static SaErrorT NewSimulatorStartFumiVerification(void            *hnd, 
                                                    SaHpiResourceIdT id, 
@@ -2776,7 +2776,7 @@ static SaErrorT NewSimulatorStartFumiVer
  **/                             
 static SaErrorT NewSimulatorStartFumiVerificationMain(void *, 
                                                        SaHpiResourceIdT, 
-                                                       SaHpiFumiNumT) __attribute__((used));
+                                                       SaHpiFumiNumT) __asm__("NewSimulatorStartFumiVerificationMain") __attribute__((used));
 
 static SaErrorT NewSimulatorStartFumiVerificationMain(void            *hnd, 
                                                        SaHpiResourceIdT id, 
@@ -2807,7 +2807,7 @@ static SaErrorT NewSimulatorStartFumiVer
 static SaErrorT NewSimulatorCancelFumiUpgrade(void *, 
                                                SaHpiResourceIdT, 
                                                SaHpiFumiNumT, 
-                                               SaHpiBankNumT) __attribute__((used));
+                                               SaHpiBankNumT) __asm__("NewSimulatorCancelFumiUpgrade") __attribute__((used));
                                                
 static SaErrorT NewSimulatorCancelFumiUpgrade(void            *hnd, 
                                                SaHpiResourceIdT id, 
@@ -2838,7 +2838,7 @@ static SaErrorT NewSimulatorCancelFumiUp
 static SaErrorT NewSimulatorGetFumiRollback(void *, 
                                              SaHpiResourceIdT, 
                                              SaHpiFumiNumT, 
-                                             SaHpiBoolT *) __attribute__((used));
+                                             SaHpiBoolT *) __asm__("NewSimulatorGetFumiRollback") __attribute__((used));
                                              
 static SaErrorT NewSimulatorGetFumiRollback(void            *hnd, 
                                              SaHpiResourceIdT id, 
@@ -2870,7 +2870,7 @@ static SaErrorT NewSimulatorGetFumiRollb
 static SaErrorT NewSimulatorSetFumiRollback(void *, 
                                              SaHpiResourceIdT, 
                                              SaHpiFumiNumT, 
-                                             SaHpiBoolT) __attribute__((used));
+                                             SaHpiBoolT) __asm__("NewSimulatorSetFumiRollback") __attribute__((used));
 
 static SaErrorT NewSimulatorSetFumiRollback(void            *hnd, 
                                              SaHpiResourceIdT id, 
@@ -2900,7 +2900,7 @@ static SaErrorT NewSimulatorSetFumiRollb
  **/                          
 static SaErrorT NewSimulatorStartFumiRollback(void *, 
                                                SaHpiResourceIdT, 
-                                               SaHpiFumiNumT) __attribute__((used));
+                                               SaHpiFumiNumT) __asm__("NewSimulatorStartFumiRollback") __attribute__((used));
 
 static SaErrorT NewSimulatorStartFumiRollback(void            *hnd, 
                                              SaHpiResourceIdT id, 
@@ -2929,7 +2929,7 @@ static SaErrorT NewSimulatorStartFumiRol
  **/                         
 static SaErrorT NewSimulatorActivateFumi(void *, 
                                           SaHpiResourceIdT, 
-                                          SaHpiFumiNumT) __attribute__((used));
+                                          SaHpiFumiNumT) __asm__("NewSimulatorActivateFumi") __attribute__((used));
 
 static SaErrorT NewSimulatorActivateFumi(void            *hnd, 
                                           SaHpiResourceIdT id, 
@@ -2960,7 +2960,7 @@ static SaErrorT NewSimulatorActivateFumi
 static SaErrorT NewSimulatorStartFumiActivation(void *, 
                                                  SaHpiResourceIdT, 
                                                  SaHpiFumiNumT, 
-                                                 SaHpiBoolT) __attribute__((used));
+                                                 SaHpiBoolT) __asm__("NewSimulatorStartFumiActivation") __attribute__((used));
 
 static SaErrorT NewSimulatorStartFumiActivation(void            *hnd, 
                                                  SaHpiResourceIdT id, 
@@ -2992,7 +2992,7 @@ static SaErrorT NewSimulatorStartFumiAct
 static SaErrorT NewSimulatorCleanupFumi(void *, 
                                          SaHpiResourceIdT, 
                                          SaHpiFumiNumT, 
-                                         SaHpiBankNumT) __attribute__((used));
+                                         SaHpiBankNumT) __asm__("NewSimulatorCleanupFumi") __attribute__((used));
                                          
 static SaErrorT NewSimulatorCleanupFumi(void            *hnd, 
                                          SaHpiResourceIdT id, 
@@ -3023,7 +3023,7 @@ static SaErrorT NewSimulatorCleanupFumi(
 static SaErrorT NewSimulatorGetDimiInfo( void *, 
                                           SaHpiResourceIdT, 
                                           SaHpiDimiNumT, 
-                                          SaHpiDimiInfoT *)  __attribute__((used));
+                                          SaHpiDimiInfoT *)  __asm__("NewSimulatorGetDimiInfo") __attribute__((used));
 
 static SaErrorT NewSimulatorGetDimiInfo( void            *hnd, 
                                           SaHpiResourceIdT id, 
@@ -3057,7 +3057,7 @@ static SaErrorT NewSimulatorGetDimiTestI
                                       SaHpiResourceIdT, 
                                       SaHpiDimiNumT,
                                       SaHpiDimiTestNumT, 
-                                      SaHpiDimiTestT *)  __attribute__((used));
+                                      SaHpiDimiTestT *)  __asm__("NewSimulatorGetDimiTestInfo") __attribute__((used));
                                       
 static SaErrorT NewSimulatorGetDimiTestInfo( void     *hnd, 
                                       SaHpiResourceIdT  id, 
@@ -3092,7 +3092,7 @@ static SaErrorT NewSimulatorGetDimiTestR
                                      SaHpiResourceIdT, 
                                      SaHpiDimiNumT,
                                      SaHpiDimiTestNumT, 
-                                     SaHpiDimiReadyT *)  __attribute__((used));
+                                     SaHpiDimiReadyT *)  __asm__("NewSimulatorGetDimiTestReadiness") __attribute__((used));
 
 static SaErrorT NewSimulatorGetDimiTestReadiness( void *hnd, 
                                      SaHpiResourceIdT    id, 
@@ -3129,7 +3129,7 @@ static SaErrorT NewSimulatorStartDimiTes
                         SaHpiDimiNumT, 
                         SaHpiDimiTestNumT,
                         SaHpiUint8T, 
-                        SaHpiDimiTestVariableParamsT *)  __attribute__((used));
+                        SaHpiDimiTestVariableParamsT *)  __asm__("NewSimulatorStartDimiTest") __attribute__((used));
 
 static SaErrorT NewSimulatorStartDimiTest( void    *hnd, 
                         SaHpiResourceIdT             id, 
@@ -3163,7 +3163,7 @@ static SaErrorT NewSimulatorStartDimiTes
 static SaErrorT NewSimulatorCancelDimiTest( void *, 
                                       SaHpiResourceIdT, 
                                       SaHpiDimiNumT, 
-                                      SaHpiDimiTestNumT) __attribute__((used));
+                                      SaHpiDimiTestNumT) __asm__("NewSimulatorCancelDimiTest") __attribute__((used));
 
 static SaErrorT NewSimulatorCancelDimiTest( void      *hnd, 
                                       SaHpiResourceIdT  id, 
@@ -3199,7 +3199,7 @@ static SaErrorT NewSimulatorGetDimiTestS
                               SaHpiDimiNumT, 
                               SaHpiDimiTestNumT, 
                               SaHpiDimiTestPercentCompletedT *,
-                              SaHpiDimiTestRunStatusT *) __attribute__((used));
+                              SaHpiDimiTestRunStatusT *) __asm__("NewSimulatorGetDimiTestStatus") __attribute__((used));
 
 static SaErrorT NewSimulatorGetDimiTestStatus( void        *hnd, 
                               SaHpiResourceIdT               id, 
@@ -3234,7 +3234,7 @@ static SaErrorT NewSimulatorGetDimiTestR
                                 SaHpiResourceIdT, 
                                 SaHpiDimiNumT, 
                                 SaHpiDimiTestNumT, 
-                                SaHpiDimiTestResultsT *) __attribute__((used));
+                                SaHpiDimiTestResultsT *) __asm__("NewSimulatorGetDimiTestResults") __attribute__((used));
 
 static SaErrorT NewSimulatorGetDimiTestResults( void *hnd, 
                                 SaHpiResourceIdT       id, 
@@ -3263,7 +3263,7 @@ static SaErrorT NewSimulatorGetDimiTestR
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorSetAutoInsertTimeout( void *, 
-                                         SaHpiTimeoutT ) __attribute__((used));
+                                         SaHpiTimeoutT ) __asm__("NewSimulatorSetAutoInsertTimeout") __attribute__((used));
 
 static SaErrorT NewSimulatorSetAutoInsertTimeout( void *hnd, SaHpiTimeoutT  timeout) {
    NewSimulator *newsim = VerifyNewSimulator( hnd );
@@ -3289,7 +3289,7 @@ static SaErrorT NewSimulatorSetAutoInser
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorGetAutoExtractTimeout( void *, SaHpiResourceIdT,
-                                                    SaHpiTimeoutT * ) __attribute__((used));
+                                                    SaHpiTimeoutT * ) __asm__("NewSimulatorGetAutoExtractTimeout") __attribute__((used));
 
 static SaErrorT NewSimulatorGetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
                                                     SaHpiTimeoutT *timeout ) {
@@ -3319,7 +3319,7 @@ static SaErrorT NewSimulatorGetAutoExtra
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorSetAutoExtractTimeout( void *, SaHpiResourceIdT,
-                                                    SaHpiTimeoutT ) __attribute__((used));
+                                                    SaHpiTimeoutT ) __asm__("NewSimulatorSetAutoExtractTimeout") __attribute__((used));
 
 static SaErrorT NewSimulatorSetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
                                                     SaHpiTimeoutT timeout ) {
@@ -3350,7 +3350,7 @@ static SaErrorT NewSimulatorSetAutoExtra
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorGetPowerState( void *, SaHpiResourceIdT,
-                                            SaHpiPowerStateT * ) __attribute__((used));
+                                            SaHpiPowerStateT * ) __asm__("NewSimulatorGetPowerState") __attribute__((used));
 
 static SaErrorT NewSimulatorGetPowerState( void *hnd, SaHpiResourceIdT id,
                                             SaHpiPowerStateT *state ) {
@@ -3382,7 +3382,7 @@ static SaErrorT NewSimulatorGetPowerStat
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorSetPowerState( void *, SaHpiResourceIdT,
-                                            SaHpiPowerStateT ) __attribute__((used));
+                                            SaHpiPowerStateT ) __asm__("NewSimulatorSetPowerState") __attribute__((used));
 
 static SaErrorT NewSimulatorSetPowerState( void *hnd, SaHpiResourceIdT id,
                                             SaHpiPowerStateT state ) {
@@ -3414,7 +3414,7 @@ static SaErrorT NewSimulatorSetPowerStat
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorGetIndicatorState( void *, SaHpiResourceIdT,
-                                                SaHpiHsIndicatorStateT * ) __attribute__((used));
+                                                SaHpiHsIndicatorStateT * ) __asm__("NewSimulatorGetIndicatorState") __attribute__((used));
 
 static SaErrorT NewSimulatorGetIndicatorState( void *hnd, SaHpiResourceIdT id,
                                                 SaHpiHsIndicatorStateT *state ) {
@@ -3446,7 +3446,7 @@ static SaErrorT NewSimulatorGetIndicator
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorSetIndicatorState( void *, SaHpiResourceIdT,
-                                                SaHpiHsIndicatorStateT ) __attribute__((used));
+                                                SaHpiHsIndicatorStateT ) __asm__("NewSimulatorSetIndicatorState") __attribute__((used));
 
 static SaErrorT NewSimulatorSetIndicatorState( void *hnd, SaHpiResourceIdT id,
                                                 SaHpiHsIndicatorStateT state ) {
@@ -3479,7 +3479,7 @@ static SaErrorT NewSimulatorSetIndicator
  **/
 static SaErrorT NewSimulatorControlParm( void *,
                                           SaHpiResourceIdT,
-                                          SaHpiParmActionT ) __attribute__((used));
+                                          SaHpiParmActionT ) __asm__("NewSimulatorControlParm") __attribute__((used));
 
 static SaErrorT NewSimulatorControlParm( void *hnd,
                                           SaHpiResourceIdT id,
@@ -3512,7 +3512,7 @@ static SaErrorT NewSimulatorControlParm(
  * @return HPI error code
  **/
 static SaErrorT NewSimulatorGetResetState( void *, SaHpiResourceIdT,
-                                            SaHpiResetActionT * ) __attribute__((used));
+                                            SaHpiResetActionT * ) __asm__("NewSimulatorGetResetState") __attribute__((used));
 
 static SaErrorT NewSimulatorGetResetState( void *hnd, SaHpiResourceIdT id,
                                             SaHpiResetActionT *act ) {
@@ -3545,7 +3545,7 @@ static SaErrorT NewSimulatorGetResetStat
  **/
 static SaErrorT NewSimulatorSetResetState( void *,
                                             SaHpiResourceIdT,
-                                            SaHpiResetActionT ) __attribute__((used));
+                                            SaHpiResetActionT ) __asm__("NewSimulatorSetResetState") __attribute__((used));
 
 static SaErrorT NewSimulatorSetResetState( void *hnd,
                                             SaHpiResourceIdT id,
Index: openhpi-3.6.1/plugins/dynamic_simulator/new_sim_file.cpp
===================================================================
--- openhpi-3.6.1.orig/plugins/dynamic_simulator/new_sim_file.cpp
+++ openhpi-3.6.1/plugins/dynamic_simulator/new_sim_file.cpp
@@ -44,9 +44,9 @@
 ///< Global skip characters for oh_scanner_config
 static gchar skip_characters[] = " \t\n";  
 ///< Global identifier_first for oh_scanner_config
-static gchar identifier_first[] = G_CSET_a_2_z"_/."G_CSET_A_2_Z; 
+static gchar identifier_first[] = G_CSET_a_2_z "_/." G_CSET_A_2_Z;
 ///< Global identifier_nth for oh_scanner_config
-static gchar identifier_nth[] = G_CSET_a_2_z"_-0123456789/."G_CSET_A_2_Z;
+static gchar identifier_nth[] = G_CSET_a_2_z "_-0123456789/." G_CSET_A_2_Z;
 ///< Global comment signs for oh_scanner_config
 static gchar comment_single[] = "#\n";
 
Index: openhpi-3.6.1/plugins/ipmidirect/ipmi.cpp
===================================================================
--- openhpi-3.6.1.orig/plugins/ipmidirect/ipmi.cpp
+++ openhpi-3.6.1/plugins/ipmidirect/ipmi.cpp
@@ -279,7 +279,7 @@ extern "C" {
 // ABI Interface functions
 
 static void *
-IpmiOpen( GHashTable *, unsigned int, oh_evt_queue * ) __attribute__((used));
+IpmiOpen( GHashTable *, unsigned int, oh_evt_queue * )  __asm__("IpmiOpen") __attribute__((used));
 
 static void *
 IpmiOpen( GHashTable *handler_config, unsigned int hid, oh_evt_queue *eventq )
@@ -388,7 +388,7 @@ IpmiOpen( GHashTable *handler_config, un
 
 
 static void
-IpmiClose( void * ) __attribute__((used));
+IpmiClose( void * ) __asm__("IpmiClose") __attribute__((used));
 
 static void
 IpmiClose( void *hnd )
@@ -436,7 +436,7 @@ IpmiClose( void *hnd )
 
 
 static SaErrorT
-IpmiGetEvent( void * ) __attribute__((used));
+IpmiGetEvent( void * ) __asm__("IpmiGetEvent") __attribute__((used));
 
 static SaErrorT
 IpmiGetEvent( void *hnd )
@@ -458,7 +458,7 @@ IpmiGetEvent( void *hnd )
 
 
 static SaErrorT
-IpmiDiscoverResources( void * ) __attribute__((used));
+IpmiDiscoverResources( void * ) __asm__("IpmiDiscoverResources") __attribute__((used));
 
 static SaErrorT
 IpmiDiscoverResources( void *hnd )
@@ -479,7 +479,7 @@ IpmiDiscoverResources( void *hnd )
 
 
 static SaErrorT
-IpmiSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __attribute__((used));
+IpmiSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __asm__("IpmiSetResourceTag") __attribute__((used));
 
 static SaErrorT
 IpmiSetResourceTag( void *hnd, SaHpiResourceIdT id, SaHpiTextBufferT *tag )
@@ -499,7 +499,7 @@ IpmiSetResourceTag( void *hnd, SaHpiReso
 
 
 static SaErrorT
-IpmiSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __attribute__((used));
+IpmiSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __asm__("IpmiSetResourceSeverity") __attribute__((used));
 
 static SaErrorT
 IpmiSetResourceSeverity( void *hnd, SaHpiResourceIdT id, SaHpiSeverityT sev )
@@ -523,7 +523,7 @@ IpmiGetSensorReading( void *,
                    SaHpiResourceIdT id,
                    SaHpiSensorNumT num,
                    SaHpiSensorReadingT *data,
-                   SaHpiEventStateT *state ) __attribute__((used));
+                   SaHpiEventStateT *state ) __asm__("IpmiGetSensorReading") __attribute__((used));
 
 static SaErrorT
 IpmiGetSensorReading( void *hnd,
@@ -550,7 +550,7 @@ static SaErrorT
 IpmiGetSensorThresholds( void *hnd,
                          SaHpiResourceIdT,
                          SaHpiSensorNumT,
-                         SaHpiSensorThresholdsT * ) __attribute__((used));
+                         SaHpiSensorThresholdsT * ) __asm__("IpmiGetSensorThresholds") __attribute__((used));
 
 static SaErrorT
 IpmiGetSensorThresholds( void                   *hnd,
@@ -581,7 +581,7 @@ static SaErrorT
 IpmiSetSensorThresholds( void *,
                          SaHpiResourceIdT,
                          SaHpiSensorNumT,
-                         const SaHpiSensorThresholdsT * ) __attribute__((used));
+                         const SaHpiSensorThresholdsT * ) __asm__("IpmiSetSensorThresholds") __attribute__((used));
 
 static SaErrorT
 IpmiSetSensorThresholds( void *hnd,
@@ -612,7 +612,7 @@ static SaErrorT
 IpmiGetSensorEnable( void *,
                      SaHpiResourceIdT,
                      SaHpiSensorNumT,
-                     SaHpiBoolT * ) __attribute__((used));
+                     SaHpiBoolT * ) __asm__("IpmiGetSensorEnable") __attribute__((used));
 
 static SaErrorT
 IpmiGetSensorEnable( void *hnd,
@@ -638,7 +638,7 @@ static SaErrorT
 IpmiSetSensorEnable( void *,
                      SaHpiResourceIdT,
                      SaHpiSensorNumT,
-                     SaHpiBoolT ) __attribute__((used));
+                     SaHpiBoolT ) __asm__("IpmiSetSensorEnable") __attribute__((used));
 
 static SaErrorT
 IpmiSetSensorEnable( void *hnd,
@@ -664,7 +664,7 @@ static SaErrorT
 IpmiGetSensorEventEnables( void *,
                            SaHpiResourceIdT,
                            SaHpiSensorNumT,
-                           SaHpiBoolT * ) __attribute__((used));
+                           SaHpiBoolT * ) __asm__("IpmiGetSensorEventEnables") __attribute__((used));
 
 static SaErrorT
 IpmiGetSensorEventEnables( void *hnd,
@@ -690,7 +690,7 @@ static SaErrorT
 IpmiSetSensorEventEnables( void *,
                            SaHpiResourceIdT,
                            SaHpiSensorNumT,
-                           SaHpiBoolT ) __attribute__((used));
+                           SaHpiBoolT ) __asm__("IpmiSetSensorEventEnables") __attribute__((used));
 
 static SaErrorT
 IpmiSetSensorEventEnables( void *hnd,
@@ -717,7 +717,7 @@ IpmiGetSensorEventMasks( void *,
                            SaHpiResourceIdT,
                            SaHpiSensorNumT,
                            SaHpiEventStateT *,
-                           SaHpiEventStateT * ) __attribute__((used));
+                           SaHpiEventStateT * ) __asm__("IpmiGetSensorEventMasks") __attribute__((used));
 
 static SaErrorT
 IpmiGetSensorEventMasks( void *hnd,
@@ -747,7 +747,7 @@ IpmiSetSensorEventMasks( void *,
                            SaHpiSensorNumT,
                            SaHpiSensorEventMaskActionT,
                            SaHpiEventStateT,
-                           SaHpiEventStateT ) __attribute__((used));
+                           SaHpiEventStateT ) __asm__("IpmiSetSensorEventMasks") __attribute__((used));
 
 static SaErrorT
 IpmiSetSensorEventMasks( void *hnd,
@@ -776,7 +776,7 @@ static SaErrorT
 IpmiGetControlState( void *, SaHpiResourceIdT,
                      SaHpiCtrlNumT,
                      SaHpiCtrlModeT *,
-                     SaHpiCtrlStateT * ) __attribute__((used));
+                     SaHpiCtrlStateT * ) __asm__("IpmiGetControlState") __attribute__((used));
 
 static SaErrorT
 IpmiGetControlState( void *hnd, SaHpiResourceIdT id,
@@ -802,7 +802,7 @@ static SaErrorT
 IpmiSetControlState( void *, SaHpiResourceIdT,
                      SaHpiCtrlNumT,
                      SaHpiCtrlModeT,
-                     SaHpiCtrlStateT * ) __attribute__((used));
+                     SaHpiCtrlStateT * ) __asm__("IpmiSetControlState") __attribute__((used));
 
 static SaErrorT
 IpmiSetControlState( void *hnd, SaHpiResourceIdT id,
@@ -828,7 +828,7 @@ static SaErrorT
 IpmiGetIdrInfo( void *,
                 SaHpiResourceIdT,
                 SaHpiIdrIdT,
-                SaHpiIdrInfoT * ) __attribute__((used));
+                SaHpiIdrInfoT * ) __asm__("IpmiGetIdrInfo") __attribute__((used));
 
 static SaErrorT
 IpmiGetIdrInfo( void *hnd,
@@ -857,7 +857,7 @@ IpmiGetIdrAreaHeader( void *,
                       SaHpiIdrAreaTypeT,
                                   SaHpiEntryIdT,
                       SaHpiEntryIdT *,
-                      SaHpiIdrAreaHeaderT * ) __attribute__((used));
+                      SaHpiIdrAreaHeaderT * ) __asm__("IpmiGetIdrAreaHeader") __attribute__((used));
 
 static SaErrorT
 IpmiGetIdrAreaHeader( void *hnd,
@@ -887,7 +887,7 @@ IpmiAddIdrArea( void *,
                 SaHpiResourceIdT,
                 SaHpiIdrIdT,
                 SaHpiIdrAreaTypeT,
-                            SaHpiEntryIdT * ) __attribute__((used));
+                            SaHpiEntryIdT * ) __asm__("IpmiAddIdrArea") __attribute__((used));
 
 static SaErrorT
 IpmiAddIdrArea( void *hnd,
@@ -914,7 +914,7 @@ static SaErrorT
 IpmiDelIdrArea( void *,
                 SaHpiResourceIdT,
                 SaHpiIdrIdT,
-                            SaHpiEntryIdT ) __attribute__((used));
+                            SaHpiEntryIdT ) __asm__("IpmiDelIdrArea") __attribute__((used));
 
 static SaErrorT
 IpmiDelIdrArea( void *hnd,
@@ -944,7 +944,7 @@ IpmiGetIdrField( void *,
                  SaHpiIdrFieldTypeT,
                  SaHpiEntryIdT,
                              SaHpiEntryIdT *,
-                 SaHpiIdrFieldT * ) __attribute__((used));
+                 SaHpiIdrFieldT * ) __asm__("IpmiGetIdrField") __attribute__((used));
 
 static SaErrorT
 IpmiGetIdrField( void *hnd,
@@ -974,7 +974,7 @@ static SaErrorT
 IpmiAddIdrField( void *,
                  SaHpiResourceIdT,
                  SaHpiIdrIdT,
-                 SaHpiIdrFieldT * ) __attribute__((used));
+                 SaHpiIdrFieldT * ) __asm__("IpmiAddIdrField") __attribute__((used));
 
 static SaErrorT
 IpmiAddIdrField( void *hnd,
@@ -1000,7 +1000,7 @@ static SaErrorT
 IpmiSetIdrField( void *,
                  SaHpiResourceIdT,
                  SaHpiIdrIdT,
-                 SaHpiIdrFieldT * ) __attribute__((used));
+                 SaHpiIdrFieldT * ) __asm__("IpmiSetIdrField") __attribute__((used));
 
 static SaErrorT
 IpmiSetIdrField( void *hnd,
@@ -1027,7 +1027,7 @@ IpmiDelIdrField( void *,
                  SaHpiResourceIdT,
                  SaHpiIdrIdT,
                  SaHpiEntryIdT,
-                 SaHpiEntryIdT ) __attribute__((used));
+                 SaHpiEntryIdT ) __asm__("IpmiDelIdrField") __attribute__((used));
 
 static SaErrorT
 IpmiDelIdrField( void *hnd,
@@ -1053,7 +1053,7 @@ IpmiDelIdrField( void *hnd,
 static SaErrorT
 IpmiGetSelInfo( void *,
                 SaHpiResourceIdT,
-                SaHpiEventLogInfoT * ) __attribute__((used));
+                SaHpiEventLogInfoT * ) __asm__("IpmiGetSelInfo") __attribute__((used));
 
 static SaErrorT
 IpmiGetSelInfo( void *hnd,
@@ -1075,7 +1075,7 @@ IpmiGetSelInfo( void *hnd,
 
 
 static SaErrorT
-IpmiSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __attribute__((used));
+IpmiSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __asm__("IpmiSetSelTime") __attribute__((used));
 
 static SaErrorT
 IpmiSetSelTime( void *hnd, SaHpiResourceIdT id, SaHpiTimeT t )
@@ -1096,7 +1096,7 @@ IpmiSetSelTime( void *hnd, SaHpiResource
 
 static SaErrorT
 IpmiAddSelEntry( void *, SaHpiResourceIdT,
-                 const SaHpiEventT * ) __attribute__((used));
+                 const SaHpiEventT * ) __asm__("IpmiAddSelEntry") __attribute__((used));
 
 static SaErrorT
 IpmiAddSelEntry( void *hnd, SaHpiResourceIdT id,
@@ -1118,7 +1118,7 @@ IpmiAddSelEntry( void *hnd, SaHpiResourc
 #ifdef NOTUSED
 static SaErrorT
 IpmiDelSelEntry( void *, SaHpiResourceIdT,
-                 SaHpiEventLogEntryIdT ) __attribute__((used));
+                 SaHpiEventLogEntryIdT ) __asm__("IpmiDelSelEntry") __attribute__((used));
 
 static SaErrorT
 IpmiDelSelEntry( void *hnd, SaHpiResourceIdT id,
@@ -1145,7 +1145,7 @@ IpmiGetSelEntry( void *hnd, SaHpiResourc
                  SaHpiEventLogEntryIdT *, SaHpiEventLogEntryIdT *,
                  SaHpiEventLogEntryT *,
                  SaHpiRdrT *,
-                 SaHpiRptEntryT * ) __attribute__((used));
+                 SaHpiRptEntryT * ) __asm__("IpmiGetSelEntry") __attribute__((used));
 
 static SaErrorT
 IpmiGetSelEntry( void *hnd, SaHpiResourceIdT id,
@@ -1170,7 +1170,7 @@ IpmiGetSelEntry( void *hnd, SaHpiResourc
 
 
 static SaErrorT
-IpmiClearSel( void *, SaHpiResourceIdT ) __attribute__((used));
+IpmiClearSel( void *, SaHpiResourceIdT ) __asm__("IpmiClearSel") __attribute__((used));
 
 static SaErrorT
 IpmiClearSel( void *hnd, SaHpiResourceIdT id )
@@ -1190,7 +1190,7 @@ IpmiClearSel( void *hnd, SaHpiResourceId
 
 static SaErrorT
 IpmiHotswapPolicyCancel( void *, SaHpiResourceIdT,
-                         SaHpiTimeoutT ) __attribute__((used));
+                         SaHpiTimeoutT ) __asm__("IpmiHotswapPolicyCancel") __attribute__((used));
 
 static SaErrorT
 IpmiHotswapPolicyCancel( void *hnd, SaHpiResourceIdT id,
@@ -1210,7 +1210,7 @@ IpmiHotswapPolicyCancel( void *hnd, SaHp
 }
 
 static SaErrorT
-IpmiSetAutoInsertTimeout( void *, SaHpiTimeoutT ) __attribute__((used));
+IpmiSetAutoInsertTimeout( void *, SaHpiTimeoutT ) __asm__("IpmiSetAutoInsertTimeout") __attribute__((used));
 
 static SaErrorT
 IpmiSetAutoInsertTimeout( void *hnd, SaHpiTimeoutT  timeout)
@@ -1229,7 +1229,7 @@ IpmiSetAutoInsertTimeout( void *hnd, SaH
 
 static SaErrorT
 IpmiGetAutoExtractTimeout( void *, SaHpiResourceIdT,
-                           SaHpiTimeoutT * ) __attribute__((used));
+                           SaHpiTimeoutT * ) __asm__("IpmiGetAutoExtractTimeout") __attribute__((used));
 
 static SaErrorT
 IpmiGetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
@@ -1250,7 +1250,7 @@ IpmiGetAutoExtractTimeout( void *hnd, Sa
 
 static SaErrorT
 IpmiSetAutoExtractTimeout( void *, SaHpiResourceIdT,
-                           SaHpiTimeoutT ) __attribute__((used));
+                           SaHpiTimeoutT ) __asm__("IpmiSetAutoExtractTimeout") __attribute__((used));
 
 static SaErrorT
 IpmiSetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
@@ -1271,7 +1271,7 @@ IpmiSetAutoExtractTimeout( void *hnd, Sa
 
 static SaErrorT
 IpmiGetHotswapState( void *, SaHpiResourceIdT ,
-                     SaHpiHsStateT * ) __attribute__((used));
+                     SaHpiHsStateT * ) __asm__("IpmiGetHotswapState") __attribute__((used));
 
 static SaErrorT
 IpmiGetHotswapState( void *hnd, SaHpiResourceIdT id,
@@ -1293,7 +1293,7 @@ IpmiGetHotswapState( void *hnd, SaHpiRes
 
 static SaErrorT
 IpmiSetHotswapState( void *, SaHpiResourceIdT,
-                     SaHpiHsStateT ) __attribute__((used));
+                     SaHpiHsStateT ) __asm__("IpmiSetHotswapState") __attribute__((used));
 
 static SaErrorT
 IpmiSetHotswapState( void *hnd, SaHpiResourceIdT id,
@@ -1315,7 +1315,7 @@ IpmiSetHotswapState( void *hnd, SaHpiRes
 
 static SaErrorT
 IpmiRequestHotswapAction( void *, SaHpiResourceIdT,
-                          SaHpiHsActionT ) __attribute__((used));
+                          SaHpiHsActionT ) __asm__("IpmiRequestHotswapAction") __attribute__((used));
 
 static SaErrorT
 IpmiRequestHotswapAction( void *hnd, SaHpiResourceIdT id,
@@ -1337,7 +1337,7 @@ IpmiRequestHotswapAction( void *hnd, SaH
 
 static SaErrorT
 IpmiGetPowerState( void *, SaHpiResourceIdT,
-                   SaHpiPowerStateT * ) __attribute__((used));
+                   SaHpiPowerStateT * ) __asm__("IpmiGetPowerState") __attribute__((used));
 
 static SaErrorT
 IpmiGetPowerState( void *hnd, SaHpiResourceIdT id,
@@ -1359,7 +1359,7 @@ IpmiGetPowerState( void *hnd, SaHpiResou
 
 static SaErrorT
 IpmiSetPowerState( void *, SaHpiResourceIdT,
-                   SaHpiPowerStateT ) __attribute__((used));
+                   SaHpiPowerStateT ) __asm__("IpmiSetPowerState") __attribute__((used));
 
 static SaErrorT
 IpmiSetPowerState( void *hnd, SaHpiResourceIdT id,
@@ -1381,7 +1381,7 @@ IpmiSetPowerState( void *hnd, SaHpiResou
 
 static SaErrorT
 IpmiGetIndicatorState( void *, SaHpiResourceIdT,
-                       SaHpiHsIndicatorStateT * ) __attribute__((used));
+                       SaHpiHsIndicatorStateT * ) __asm__("IpmiGetIndicatorState") __attribute__((used));
 
 static SaErrorT
 IpmiGetIndicatorState( void *hnd, SaHpiResourceIdT id,
@@ -1403,7 +1403,7 @@ IpmiGetIndicatorState( void *hnd, SaHpiR
 
 static SaErrorT
 IpmiSetIndicatorState( void *, SaHpiResourceIdT,
-                       SaHpiHsIndicatorStateT ) __attribute__((used));
+                       SaHpiHsIndicatorStateT ) __asm__("IpmiSetIndicatorState") __attribute__((used));
 
 static SaErrorT
 IpmiSetIndicatorState( void *hnd, SaHpiResourceIdT id,
@@ -1426,7 +1426,7 @@ IpmiSetIndicatorState( void *hnd, SaHpiR
 static SaErrorT
 IpmiControlParm( void *,
                  SaHpiResourceIdT,
-                 SaHpiParmActionT ) __attribute__((used));
+                 SaHpiParmActionT ) __asm__("IpmiControlParm") __attribute__((used));
 
 static SaErrorT
 IpmiControlParm( void *hnd,
@@ -1449,7 +1449,7 @@ IpmiControlParm( void *hnd,
 
 static SaErrorT
 IpmiGetResetState( void *, SaHpiResourceIdT,
-                   SaHpiResetActionT * ) __attribute__((used));
+                   SaHpiResetActionT * ) __asm__("IpmiGetResetState") __attribute__((used));
 
 static SaErrorT
 IpmiGetResetState( void *hnd, SaHpiResourceIdT id,
@@ -1472,7 +1472,7 @@ IpmiGetResetState( void *hnd, SaHpiResou
 static SaErrorT
 IpmiSetResetState( void *,
                    SaHpiResourceIdT,
-                   SaHpiResetActionT ) __attribute__((used));
+                   SaHpiResetActionT ) __asm__("IpmiSetResetState") __attribute__((used));
 
 static SaErrorT
 IpmiSetResetState( void *hnd,
@@ -1496,7 +1496,7 @@ static SaErrorT
 IpmiGetWatchdogInfo(void *,
                     SaHpiResourceIdT,
                     SaHpiWatchdogNumT,
-                    SaHpiWatchdogT *) __attribute__((used));
+                    SaHpiWatchdogT *) __asm__("IpmiGetWatchdogInfo") __attribute__((used));
 
 static SaErrorT
 IpmiGetWatchdogInfo(void *hnd,
@@ -1517,7 +1517,7 @@ static SaErrorT
 IpmiSetWatchdogInfo(void *,
                     SaHpiResourceIdT,
                     SaHpiWatchdogNumT,
-                    SaHpiWatchdogT *) __attribute__((used));
+                    SaHpiWatchdogT *) __asm__("IpmiSetWatchdogInfo") __attribute__((used));
 
 static SaErrorT
 IpmiSetWatchdogInfo(void *hnd,
@@ -1537,7 +1537,7 @@ IpmiSetWatchdogInfo(void *hnd,
 static SaErrorT
 IpmiResetWatchdog(void *,
                   SaHpiResourceIdT,
-                  SaHpiWatchdogNumT) __attribute__((used));
+                  SaHpiWatchdogNumT) __asm__("IpmiResetWatchdog") __attribute__((used));
 
 static SaErrorT
 IpmiResetWatchdog(void *hnd,
