Missing Symbols

Hi everyone,

When we compile and load our code onto the robot, the NetConsole output complains about missing symbols and unloads the FRC_UserProgram.out module. We know for a fact that everything is compiled correctly (no errors, no warnings, no nothing), we did a full make clean (using ucpp), AND the symbols ARE in the code (I ran all of them through wine c++filtppc.exe and looked up the definition of each function).

An objdump -t joysmooth.o, for example, only gives us these symbols:

joysmooth.o: file format elf32-big

SYMBOL TABLE:
00000000 l df ABS 00000000 joysmooth.cpp
00000000 l d .text 00000000 .text
00000000 l d .data 00000000 .data
00000000 l d .bss 00000000 .bss
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_line 00000000 .debug_line
00000000 l d .comment 00000000 .comment

There are probably 20 functions in the file, none of which show up in the symbol table.

GCC seems to only screw up certain ones though. Case in point- objdump -t main.o:


main.o:     file format elf32-big

SYMBOL TABLE:
00000000 l    df *ABS*	00000000 main.cpp
00000000 l    d  .text	00000000 .text
00000000 l    d  .data	00000000 .data
00000000 l    d  .bss	00000000 .bss
00000000 l    d  .debug_abbrev	00000000 .debug_abbrev
00000000 l    d  .debug_info	00000000 .debug_info
00000000 l    d  .debug_line	00000000 .debug_line
00000000 l    d  .gcc_except_table	00000000 .gcc_except_table
00000000 l    d  .rodata	00000000 .rodata
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEED1Ev	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEED1Ev
00000000 l    d  .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE4sizeEv	00000000 .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE4sizeEv
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEEixEj	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEEixEj
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEE5_TidyEv	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEE5_TidyEv
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEE5beginEv	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEE5beginEv
00000000 l    d  .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE8iteratorplEi	00000000 .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE8iteratorplEi
00000000 l    d  .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE8iteratordeEv	00000000 .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE8iteratordeEv
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8_DestroyEPdS2_	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8_DestroyEPdS2_
00000000 l    d  .gnu.linkonce.t._ZNSaIdE10deallocateEPdj	00000000 .gnu.linkonce.t._ZNSaIdE10deallocateEPdj
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8iteratorC1EPd	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8iteratorC1EPd
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEE14const_iteratorC2EPd	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEE14const_iteratorC2EPd
00000000 l    d  .gnu.linkonce.t._ZNSt6_RanitIdiPKdRS0_EC2Ev	00000000 .gnu.linkonce.t._ZNSt6_RanitIdiPKdRS0_EC2Ev
00000000 l    d  .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8iteratorpLEi	00000000 .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8iteratorpLEi
00000000 l    d  .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE14const_iteratordeEv	00000000 .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE14const_iteratordeEv
00000000 l    d  .gnu.linkonce.t._ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_	00000000 .gnu.linkonce.t._ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_
00000000 l    d  .gnu.linkonce.t._ZSt8_Ptr_catPdS_	00000000 .gnu.linkonce.t._ZSt8_Ptr_catPdS_
00000000 l    d  .gnu.linkonce.t._ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_St24_Scalar_ptr_iterator_tag	00000000 .gnu.linkonce.t._ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_St24_Scalar_ptr_iterator_tag
00000000 l    d  .gnu.linkonce.r._ZTV11robot_class	00000000 .gnu.linkonce.r._ZTV11robot_class
00000000 l    d  .gnu.linkonce.t._ZN11robot_classD1Ev	00000000 .gnu.linkonce.t._ZN11robot_classD1Ev
00000000 l    d  .gnu.linkonce.t._ZN11robot_classD0Ev	00000000 .gnu.linkonce.t._ZN11robot_classD0Ev
00000068 l     O .rodata	00000001 NiFpga_False
00000069 l     O .rodata	00000001 NiFpga_True
0000006c l     O .rodata	00000004 NiFpga_Status_Success
00000070 l     O .rodata	00000004 NiFpga_Status_FifoTimeout
00000074 l     O .rodata	00000004 NiFpga_Status_MemoryFull
00000078 l     O .rodata	00000004 NiFpga_Status_SoftwareFault
0000007c l     O .rodata	00000004 NiFpga_Status_InvalidParameter
00000080 l     O .rodata	00000004 NiFpga_Status_ResourceNotFound
00000084 l     O .rodata	00000004 NiFpga_Status_ResourceNotInitialized
00000088 l     O .rodata	00000004 NiFpga_Status_FpgaAlreadyRunning
0000008c l     O .rodata	00000004 NiFpga_Status_DeviceTypeMismatch
00000090 l     O .rodata	00000004 NiFpga_Status_CommunicationTimeout
00000094 l     O .rodata	00000004 NiFpga_Status_IrqTimeout
00000098 l     O .rodata	00000004 NiFpga_Status_CorruptBitfile
0000009c l     O .rodata	00000004 NiFpga_Status_BadDepth
000000a0 l     O .rodata	00000004 NiFpga_Status_BadReadWriteCount
000000a4 l     O .rodata	00000004 NiFpga_Status_ClockLostLock
000000a8 l     O .rodata	00000004 NiFpga_Status_FpgaBusy
000000ac l     O .rodata	00000004 NiFpga_Status_FpgaBusyFpgaInterfaceCApi
000000b0 l     O .rodata	00000004 NiFpga_Status_FpgaBusyScanInterface
000000b4 l     O .rodata	00000004 NiFpga_Status_FpgaBusyFpgaInterface
000000b8 l     O .rodata	00000004 NiFpga_Status_FpgaBusyInteractive
000000bc l     O .rodata	00000004 NiFpga_Status_FpgaBusyEmulation
000000c0 l     O .rodata	00000004 NiFpga_Status_InternalError
000000c4 l     O .rodata	00000004 NiFpga_Status_AccessDenied
000000c8 l     O .rodata	00000004 NiFpga_Status_RpcConnectionError
000000cc l     O .rodata	00000004 NiFpga_Status_RpcSessionError
000000d0 l     O .rodata	00000004 NiFpga_Status_FifoElementsCurrentlyAcquired
000000d4 l     O .rodata	00000004 NiFpga_Status_BitfileReadError
000000d8 l     O .rodata	00000004 NiFpga_Status_SignatureMismatch
000000dc l     O .rodata	00000004 NiFpga_Status_InvalidResourceName
000000e0 l     O .rodata	00000004 NiFpga_Status_FeatureNotSupported
000000e4 l     O .rodata	00000004 NiFpga_Status_VersionMismatch
000000e8 l     O .rodata	00000004 NiFpga_Status_InvalidSession
000000ec l     O .rodata	00000004 NiFpga_Status_OutOfHandles
000000f0 l     O .rodata	00000004 NiFpga_InfiniteTimeout
00000000 l    d  .gnu.linkonce.r._ZTI11robot_class	00000000 .gnu.linkonce.r._ZTI11robot_class
000000f4 l     O .rodata	00000004 IMAQ_RGB_TRANSPARENT
000000f8 l     O .rodata	00000004 IMAQ_RGB_RED
000000fc l     O .rodata	00000004 IMAQ_RGB_BLUE
00000100 l     O .rodata	00000004 IMAQ_RGB_GREEN
00000104 l     O .rodata	00000004 IMAQ_RGB_YELLOW
00000108 l     O .rodata	00000004 IMAQ_RGB_WHITE
0000010c l     O .rodata	00000004 IMAQ_RGB_BLACK
00000000 l    d  .gnu.linkonce.r._ZTS11robot_class	00000000 .gnu.linkonce.r._ZTS11robot_class
00000110 l     O .rodata	00000004 _ZSt6_VBITS
00000114 l     O .rodata	00000004 _ZSt10_ISORT_MAX
00000000 l    d  .debug_frame	00000000 .debug_frame
00000000 l    d  .debug_pubnames	00000000 .debug_pubnames
00000000 l    d  .debug_aranges	00000000 .debug_aranges
00000000 l    d  .debug_str	00000000 .debug_str
00000000 l    d  .comment	00000000 .comment
00000000         *UND*	00000000 _Unwind_SjLj_Resume
00000000         *UND*	00000000 __gxx_personality_sj0
00000000         *UND*	00000000 _Unwind_SjLj_Register
00000000         *UND*	00000000 _Unwind_SjLj_Unregister
00000000 g     F .text	0000015c _ZN11robot_classC2Ev
00000000         *UND*	00000000 _ZN14IterativeRobotC2Ev
00000000  w    O .gnu.linkonce.r._ZTV11robot_class	0000003c _ZTV11robot_class
00000000         *UND*	00000000 _ZN9RobotBase11GetWatchdogEv
00000000         *UND*	00000000 _ZN8Watchdog10SetEnabledEb
00000000         *UND*	00000000 _ZN14IterativeRobotD2Ev
0000015c g     F .text	0000015c _ZN11robot_classC1Ev
000002b8 g     F .text	0000013c _ZN11robot_class9RobotInitEv
00000000         *UND*	00000000 left_front_motor
00000000         *UND*	00000000 drive
00000000         *UND*	00000000 _ZN10RobotDrive16SetInvertedMotorENS_9MotorTypeEb
00000000         *UND*	00000000 left_rear_motor
00000000         *UND*	00000000 right_front_motor
00000000         *UND*	00000000 right_rear_motor
00000000         *UND*	00000000 global_state
00000000         *UND*	00000000 _ZN13state_tracker9set_stateEm
00000000         *UND*	00000000 _Z11init_camerav
000003f4 g     F .text	00000020 _ZN11robot_class12DisabledInitEv
00000414 g     F .text	00000020 _ZN11robot_class14AutonomousInitEv
00000434 g     F .text	00000020 _ZN11robot_class10TeleopInitEv
00000454 g     F .text	00000020 _ZN11robot_class16DisabledPeriodicEv
00000474 g     F .text	00000044 _ZN11robot_class18AutonomousPeriodicEv
00000cb0 g     F .text	00000058 _ZN11robot_class14update_sensorsEv
000004b8 g     F .text	00000044 _ZN11robot_class14TeleopPeriodicEv
000004fc g     F .text	00000020 _ZN11robot_class18DisabledContinuousEv
0000051c g     F .text	00000020 _ZN11robot_class20AutonomousContinuousEv
0000053c g     F .text	00000774 _ZN11robot_class16TeleopContinuousEv
00000000         *UND*	00000000 _ZN13state_tracker9get_stateEv
00000000         *UND*	00000000 left_joystick
00000000         *UND*	00000000 _ZN9joysmooth12GetRawButtonEj
00000000         *UND*	00000000 _ZN10RobotDrive11ArcadeDriveER10GenericHIDb
00000000         *UND*	00000000 _ZN9joysmooth4GetYEN10GenericHID12JoystickHandE
00000000         *UND*	00000000 right_joystick
00000000         *UND*	00000000 _ZN10RobotDrive9TankDriveEff
00000000         *UND*	00000000 servo_shifter
00000000         *UND*	00000000 _ZN7shifter3setENS_4GEARE
00000000         *UND*	00000000 _ZN10RobotDrive16SetSafetyEnabledEb
00000000         *UND*	00000000 _ZN17vision_processing6updateEv
00000000         *UND*	00000000 _ZN17vision_processing11get_degreesEv
00000000         *UND*	00000000 _ZN17vision_processing12get_distanceEv
00000000  w    F .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE4sizeEv	00000068 _ZNKSt6vectorIdSaIdEE4sizeEv
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEEixEj	0000008c _ZNSt6vectorIdSaIdEEixEj
00000000         *UND*	00000000 printf
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEED1Ev	00000044 _ZNSt6vectorIdSaIdEED1Ev
00000000         *UND*	00000000 gunner_joystick
00000000         *UND*	00000000 left_launcher_jag
00000000         *UND*	00000000 _ZN6Jaguar3SetEfh
00000000         *UND*	00000000 right_launcher_jag
00000000         *UND*	00000000 rollers
00000000         *UND*	00000000 _ZN8roller_t13set_directionENS_9directionE
00000000         *UND*	00000000 _Z4Waitd
00000000         *UND*	00000000 _Z8registryv
00000000         *UND*	00000000 _ZN15update_registry6updateEv
00000d08 g     F .text	0000012c _Z20FRC_userClassFactoryv
00000000         *UND*	00000000 _Znwj
00000000         *UND*	00000000 _ZdlPv
00000e34 g     F .text	0000004c FRC_UserProgram_StartupLibraryInit
00000000         *UND*	00000000 _ZN9RobotBase14startRobotTaskEPFizE
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEE5_TidyEv	000000c0 _ZNSt6vectorIdSaIdEE5_TidyEv
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEE5beginEv	00000058 _ZNSt6vectorIdSaIdEE5beginEv
00000000  w    F .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE8iteratorplEi	00000068 _ZNKSt6vectorIdSaIdEE8iteratorplEi
00000000  w    F .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE8iteratordeEv	0000004c _ZNKSt6vectorIdSaIdEE8iteratordeEv
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8_DestroyEPdS2_	00000054 _ZNSt6vectorIdSaIdEE8_DestroyEPdS2_
00000000  w    F .gnu.linkonce.t._ZNSaIdE10deallocateEPdj	0000004c _ZNSaIdE10deallocateEPdj
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8iteratorC1EPd	0000004c _ZNSt6vectorIdSaIdEE8iteratorC1EPd
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEE8iteratorpLEi	00000048 _ZNSt6vectorIdSaIdEE8iteratorpLEi
00000000  w    F .gnu.linkonce.t._ZNKSt6vectorIdSaIdEE14const_iteratordeEv	0000002c _ZNKSt6vectorIdSaIdEE14const_iteratordeEv
00000000  w    F .gnu.linkonce.t._ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_	00000078 _ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_
00000000  w    F .gnu.linkonce.t._ZNSt6vectorIdSaIdEE14const_iteratorC2EPd	00000054 _ZNSt6vectorIdSaIdEE14const_iteratorC2EPd
00000000  w    F .gnu.linkonce.t._ZNSt6_RanitIdiPKdRS0_EC2Ev	00000020 _ZNSt6_RanitIdiPKdRS0_EC2Ev
00000000  w    F .gnu.linkonce.t._ZSt8_Ptr_catPdS_	0000002c _ZSt8_Ptr_catPdS_
00000000  w    F .gnu.linkonce.t._ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_St24_Scalar_ptr_iterator_tag	00000028 _ZSt14_Destroy_rangeIdSaIdEEvPT_S2_RT0_St24_Scalar_ptr_iterator_tag
00000000  w    O .gnu.linkonce.r._ZTI11robot_class	0000000c _ZTI11robot_class
00000000  w    F .gnu.linkonce.t._ZN11robot_classD1Ev	0000007c _ZN11robot_classD1Ev
00000000  w    F .gnu.linkonce.t._ZN11robot_classD0Ev	0000007c _ZN11robot_classD0Ev
00000000         *UND*	00000000 _ZN14IterativeRobot16StartCompetitionEv
00000000         *UND*	00000000 _ZTVN10__cxxabiv120__si_class_type_infoE
00000000  w    O .gnu.linkonce.r._ZTS11robot_class	0000000e _ZTS11robot_class
00000000         *UND*	00000000 _ZTI14IterativeRobot

Anyone know what GCC is doing with our code?

Full code for everything is available at www.github.com/rbmj/612-code

This does not work through ucpp on linux or on windriver (which makes sense, but just confirms it’s not a wine issue).

I don’t know why there aren’t any symbols…

Nevermind everyone, I’m sorry.

One of the junior programmers put include guards in a .cpp file and I was being brain-damaged and didn’t see it (I guess I’m so used to mentally skimming over them…).