This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Inserting labels before and after my program's global variables


On Dec 17, 2010, at 1:52 PM, Ian Lance Taylor wrote:

> Amittai Aviram <amittai.aviram@yale.edu> writes:
> 
>> int global_a, global_b;
> 
> In C, by default, these are common symbols.  They won't be defined in
> the .bss section of the .o file.  If the linker does not see another
> definition, it will eventually allocate them in the .bss section, but
> this will be independent of your head.s and tail.s files.  You can
> change this behaviour with gcc's -fno-common option, q.v.
> 
>> (a) my_data_start is missing, only my_data_end appears.  (If, however,
>> I only include head.o in my Makefile,rule, then my_data_start appears
>> in the location where my_data_end appears in the above extract.)
> 
> I think my_data_start is missing because of the way you are examining
> the .o file.  There are two symbols at the address of
> my_data_start--my_data_start and the first symbol in the .bss section.
> objdump -D happens to be showing you just one of them.  Use readelf -s
> or objdump -t or nm.
> 
>> (b)  my_data_end is separated from global_a and global_b and seems to be in an arbitrary location in relation to them.
> 
> That's because they are common symbols.
> 
> Ian

Great!  To get my my_bss_start label, I just added a defiition:

	.section	.bss
	.globl my_bss_start
my_bss_start:
	.long 0

Then I compiled and linked with -fno-common, and I now have labels before and after my global variables, within my .bss section.

Thanks!


Amittai Aviram
PhD Student in Computer Science
Yale University
646 483 2639
amittai.aviram@yale.edu
http://www.amittai.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]