[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [microblaze-uclinux] Kernel crash debug: No code generated for 'get_romfs_base()' function?



Hi David,
when you see 'strange' behaviour with GDB try to rebuild your sources without 
optimization. Sometimes the C optimizer confuses GDB.

Regards,
Claudio Lanconelli

On Wednesday 16 March 2005 15:03, David Banas wrote:
> OK, I'm homing in on this one...
>
> I was just single-stepping through the early boot sequence, under control
> of gdb, and noticed that I couldn't stop on lines 153 or 154 of
> 'machine.c'. Furthermore, those 2 lines didn't appear to be getting
> executed properly. For instance, the 'get_romfs_base' function simply
> returns the starting address of the '.BSS' segment. However, when I arrived
> at line 156, below, I found 'src' to be equal to '0'! 'len' was also equal
> to '0'. And, so, no copying of the '.romfs' section was being performed
> and, therefore, some of my '.romfs' data was getting wiped out when the
> '.BSS' section was zeroed out in the subsequent lines of code. (I can't
> imagine that having any of my '.romfs' section erased is healthy.)
>
> I was very curious as to why these 2 lines were getting skipped. So, I used
> gdb's 'info line' command to take a peek at them. I found (as you can see,
> below) that there was no code being generated for them!!! (Incidentally,
> all this analysis was performed immediately after freshly downloading both
> the bit stream and the RAM image and before any instructions were allowed
> to execute, just to ensure that I was not seeing the product of program
> corruption due to errant code.)
>
> -------------- GDB session output begins here. -----------------------
>
> (gdb) l machine.c:150,156
> 150             } while (src < &_intv_load_end);
> 151
> 152             /* Copy ROMFS above bss */
> 153             src=get_romfs_base();
> 154             len=get_romfs_len(src);
> 155
> 156             if(len)
> (gdb) info line machine.c:150
> Line 150 of "machine.c" starts at address 0xfe125ab8 <mach_early_init+72>
> and ends at 0xfe125ac0 <mach_early_init+80>.
> (gdb) info line machine.c:153
> Line 153 of "machine.c" is at address 0xfe125ae4 <mach_early_init+116> but
> contains no code.
> (gdb) info line machine.c:154
> Line 154 of "machine.c" is at address 0xfe125ae4 <mach_early_init+116> but
> contains no code.
> (gdb) info line machine.c:156
> Line 156 of "machine.c" starts at address 0xfe125ae4 <mach_early_init+116>
> and ends at 0xfe125aec <mach_early_init+124>.
>
> -------------- GDB session output endss here. -----------------------
>
> Does anyone have any ideas as to what I might be doing wrong that could
> cause the compiler to not generate code for these 2 lines?
>
> Thanks,
>
> David Banas
> Field Applications Engineer
> Nu Horizons Electronics Corp.
> 2070 Ringwood Avenue
> San Jose, CA 95131
> (408)434-0800 - office
> (415)846-5837 - cell
> http://www.nuhorizons.com
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@itee.uq.edu.au
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/