Exetools  

Go Back   Exetools > General > General Discussion

Notices

Reply
 
Thread Tools Display Modes
  #1  
Old 07-27-2010, 02:09
ArC ArC is offline
VIP
 
Join Date: Jan 2003
Location: NTOSKRNL.EXE
Posts: 172
Rept. Given: 0
Rept. Rcvd 1 Time in 1 Post
Thanks Given: 5
Thanks Rcvd at 17 Times in 12 Posts
ArC Reputation: 1
Omitting unused global variables

Recently I came across somewhat strange (?) behaviour of Microsoft's link.exe (10.00.30319.01).

Code:
#include <stdio.h>

#define SECTION_NAME		".4711"

#pragma code_seg( push, r1, SECTION_NAME )
#pragma comment( linker, "/SECTION:"SECTION_NAME",RWE" )

__declspec(allocate(SECTION_NAME)) const char pString[] = "Blaaaaahhhhhhhh";

void TestFunc2()
{
	printf( __FUNCTION__"\n" );
}

void TestFunc()
{
#if 1
	printf( __FUNCTION__"\n" );
#endif

#if 1
	printf( __FUNCTION__": %s\n", pString );
#endif

	TestFunc2();
}

#pragma code_seg( pop, r1 )

void main()
{
#if 0
	TestFunc();
#endif
}
Based off my understanding of the linking process, the linker should not put TestFunc, TestFunc2 and pString into the executable image since there's no path from the entrypoint which leads to code that references them.

The linker does indeed omit TestFunc and TestFunc2, but it puts pString into the image unless I disable the reference in TestFunc.

So my question is if that's intended, correct behaviour or if this is some kind of bug in link.exe and if someone possibly knows a workaround.

Thanks in advance.

BTW The code was compiled/linked with /O2 /Ob0 /Oy and /OPT:REF.
Reply With Quote
  #2  
Old 07-27-2010, 10:09
metr0 metr0 is offline
Friend
 
Join Date: Apr 2009
Posts: 65
Rept. Given: 19
Rept. Rcvd 11 Times in 5 Posts
Thanks Given: 2
Thanks Rcvd at 2 Times in 2 Posts
metr0 Reputation: 11
Although the MSDN doesn't directly say so, my guess would be that manually assigning a section the string shall be placed in (explicitly allocating the space) makes the linker think of it as something external - why would one want to explicitly allocate/assign it if not for specific reasons? You're taking the trouble, so the linker might assume you know what you're doing.

Or it's just due to some internal MS design issues no one will ever know more about.
Reply With Quote
  #3  
Old 07-27-2010, 22:17
ArC ArC is offline
VIP
 
Join Date: Jan 2003
Location: NTOSKRNL.EXE
Posts: 172
Rept. Given: 0
Rept. Rcvd 1 Time in 1 Post
Thanks Given: 5
Thanks Rcvd at 17 Times in 12 Posts
ArC Reputation: 1
The bevaviour is the same for variables without manual section assignment.

It would be interesting to know whether other versions of link behave in the same way. Unfortunately I uninstalled my 2008 Express install in favour of 2010 so I can't check myself.
Reply With Quote
  #4  
Old 07-28-2010, 05:50
bilbo bilbo is offline
Friend
 
Join Date: Jul 2004
Posts: 103
Rept. Given: 36
Rept. Rcvd 15 Times in 12 Posts
Thanks Given: 15
Thanks Rcvd at 17 Times in 11 Posts
bilbo Reputation: 15
Well, tried on VC6 (link 6.00.8168): exactly the same behaviour,
even if I remove the three lines
Code:
#pragma code_seg(SECTION_NAME)  // push not understood
#pragma comment(linker, "/SECTION:"SECTION_NAME",RWE")
__declspec(allocate(SECTION_NAME))
and put everyting in ".text" section

Regards, bilbo
Reply With Quote
  #5  
Old 07-30-2010, 04:22
piccolo piccolo is offline
Friend
 
Join Date: Jul 2006
Posts: 28
Rept. Given: 4
Rept. Rcvd 3 Times in 1 Post
Thanks Given: 0
Thanks Rcvd at 1 Time in 1 Post
piccolo Reputation: 3
I think that this is based on the optimizer. If it isnt set properly then the code stayes in the obj file and thus it gets linked. This behaviour is at least not strange to me. I was more amazed that delphi does properly optimize more things out...
Anyway you should check the object file and you see it is one block of compiled code. Now if those two functions are in a second .c file and also compiler then they will not be linked indeed...
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Armadillo Environment Variables Finder 1.2 rukov Community Tools 3 12-16-2015 01:59
2004 Global Piracy Study Shub-Nigurrath General Discussion 2 07-13-2004 20:51
Tool to zero unused space??? yaa General Discussion 1 10-09-2003 20:31


All times are GMT +8. The time now is 06:45.


Always Your Best Friend: Aaron, JMI, ahmadmansoor, ZeNiX, chessgod101
( Since 1998 )